Sistema de
Gestão de Rotina
Abrir protótipo →
VALIDAÇÃOProposta antes do desenvolvimento do MVP.

Sistema de Gestão de Rotina — proposta para validação

Versão 1 · 24/10/2026 · idioma pt-BR · fuso inicial America/Fortaleza.

1. Arquitetura e justificativa

Recomendação: PWA responsiva com Next.js e TypeScript na Vercel, Supabase exclusivo para Auth, PostgreSQL, Storage privado e rotinas de backend. A mesma aplicação atende iOS/iPadOS, Android, macOS e Windows por navegadores atuais. A interface se adapta ao espaço disponível e à entrada por toque, mouse ou teclado. No iPhone, abre no Safari e pode ser adicionada à Tela de Início. A proposta não inclui binários nativos para cada sistema nesta fase. O MVP exige conexão para confirmar alterações operacionais; rascunhos locais ficam claramente separados de registros oficiais.

Opção avaliadaVantagemLimitação para esta entrega
SwiftUIIntegração nativa com câmera, Keychain, notificações e execução localDistribuição Apple e interface web separada; maior manutenção inicial
React NativeCódigo compartilhado iOS/Android e recursos nativosDistribuição de binários; web administrativa exige trabalho próprio
FlutterUI e código compartilhadosOutra stack; publicação Apple e integração web específicas
PWA / Next.jsAcesso imediato pelo domínio solicitado; mesma base no iPhone, iPad e webPush no iPhone exige instalação na Tela de Início e permissão; execução de fundo é limitada pelo iOS

Reavaliar React Native se forem essenciais offline operacional prolongado, integração industrial com Bluetooth/NFC, política MDM ou distribuição pela App Store. Backend e contratos permanecem reutilizáveis. A PWA não será apresentada como binário nativo.

Componentes

flowchart TD
  A[iOS / Android / macOS / Windows] -->|HTTPS + sessão| B[Next.js na Vercel]
  B --> C[Supabase Auth]
  B -->|JWT do usuário| D[PostgreSQL: RLS + transações]
  A -->|upload autorizado| E[Storage privado]
  D --> F[Outbox de eventos]
  G[Supabase Cron] --> H[Worker / Edge Function]
  H --> F
  H --> I[Web Push / e-mail / caixa interna]
  H --> J[Tentativas e resultados]

Separar apresentação, contratos de API, serviços de domínio, comandos transacionais, consultas e adaptadores de provedores. Validações críticas e autorização ficam no banco/backend, não apenas nos componentes. As leituras e gravações usam JWT do usuário; segredo de serviço fica restrito ao worker administrativo. Funções privilegiadas internas têm escopo mínimo, search_path fixo e execução pública revogada.

Contas e disponibilidade verificadas

2. Modelo relacional proposto

Todos os objetos operacionais têm UUID, organization_id, criação do servidor e versão para concorrência. Timestamps são timestamptz em UTC. Calendários e relatórios aplicam o fuso da unidade.

EntidadeCampos e relações principais
organizationsid, nome, timezone, política de retenção
profilesid FK auth.users, nome, equipe, função, departamento, contato corporativo, ativo
units / areas / teamsorganização → unidade → área; equipes e vínculo de pessoas
memberships / role_grantsusuário, organização, perfis acumuláveis e escopos de unidade/área/equipe
assetsorganização, unidade/área, código único, nome, sistema, localização, ativo
categories / disciplines / block_reasonscatálogos por organização
tagsUUID imutável; código único por organização; título, descrição, categoria, ativo, unidade, área, localização, disciplina, criticidade, risco, referência externa, esforço estimado
tag_peopletag, pessoa, papel: demandante original, demandado, executor principal/secundário, aprovador, gestor, observador
assignmentstag, usuário/função, vigência início/fim, atribuído por, justificativa; apenas uma principal vigente
tag_datestag, created_at imutável, received_at, started_at, original_due_at imutável, approved_due_at, submitted_at, approved_at, closed_at
plan_versionstag, número da versão, autor, justificativa, vigência; versão ativada imutável
stagesversão do plano, parent_stage_id opcional, título, descrição, executor, datas previstas/reais, peso, progresso, status, obrigatória, critério de aceite
stage_dependenciespredecessora, sucessora, obrigatória; sem ciclos e sem relações entre Tags
milestonestag/etapa, título, vencimento previsto e realizado
progress_updatesetapa, valor anterior/novo, evidência, autor, timestamp; eventos anexados
blockerstag/etapa, motivo, responsável pelo desbloqueio, previsão quando aplicável, resolução
deadline_requests / deadline_versionsoriginal preservado, prazo anterior, proposto/aprovado, justificativa, solicitante e decisor
comments / attachmentstag/etapa, autor; objeto privado, tipo, tamanho, hash e estado de inspeção
approvalstag, versão do plano, rodada, solicitação, aprovador, decisão, motivo, datas
audit_eventsorganização, agregado, ator, evento, dados anterior/novo pertinentes, motivo, correlação, timestamp; append-only
notification_rulesorganização/equipe/criticidade, eventos, antecedência, recorrência, níveis de escalada, versão
notification_preferences / push_subscriptionsusuário, canais, horários, consentimento, endpoint/chaves protegidos
event_outbox / notification_jobs / attemptsevento, regra, destinatário, canal, agendamento, chave idempotente, tentativas, resultado e leitura interna
saved_views / report_jobs / settingsfiltros e ordenação, exportação autorizada, parâmetros versionados

Integridade e índices

Comandos de domínio

create_tag, acknowledge_tag, start_execution, activate_plan, update_stage_progress, record_blocker, resolve_blocker, request_deadline_change, approve_deadline_change, transfer_assignment, submit_approval, decide_approval, close_tag, reopen_tag, cancel_tag.

Cada comando revalida sessão, escopo, permissão, versão esperada, dependências e transição; grava alteração, auditoria e outbox na mesma transação. Erros 403 (permissão), 409 (conflito de versão) e 422 (regra) são distintos. O horário oficial vem do servidor. Não oferecer gravação direta que contorne esses comandos.

3. Ciclo operacional e navegação

Entrada pública → login → Visão geral → Carteira → Detalhe da Tag. Navegação inferior em celulares iOS e Android: Visão geral, Tags, Agenda e Mais. Em telas amplas de Mac e Windows, navegação lateral. Botão Nova Tag visível, alvos mínimos 44 px, texto de campos 16 px, labels e foco acessíveis.

Detalhe → Resumo / Plano de ação / Histórico. Ações contextuais conforme permissão. Mais → Relatórios / Alertas / Pessoas / Configurações. Gestores usam o mesmo sistema em tela ampla com navegação lateral.

Cadastro rápido exige título, unidade/área, categoria, criticidade, demandante e responsável; ativo, descrição, anexos e referência externa podem ser enriquecidos conforme configuração. Código e criação são gerados ao confirmar no servidor. Rascunho não consome código oficial. Recuperação de formulário mostra data do salvamento e opção de descarte.

OrigemDestinoCondições principais
RascunhoAbertaValidação dos campos e criação transacional
AbertaAguardando ciênciaAtribuição registrada; notificar
Aguardando ciênciaPlanejadaCiência pelo destinatário; plano/prazo definido
Aberta / Planejada / ReabertaEm execuçãoExecutor autorizado; registrar início efetivo uma vez
Em execuçãoAguardando material / contratação / BloqueadaMotivo e responsável pelo desbloqueio; previsão ou justificativa de ausência
Espera / BloqueadaPlanejada / Em execuçãoResolução registrada; manter datas e histórico
Em execuçãoConcluída tecnicamenteEtapas técnicas obrigatórias concluídas; evidências de aceite
Concluída tecnicamenteAguardando aprovaçãoPacote de evidências; rodada e aprovador definidos
Aguardando aprovaçãoEncerrada e validadaAprovação vigente; todos os requisitos finais, testes, documentos e bloqueios resolvidos
Aguardando aprovaçãoReabertaRejeição motivada; preservar a rodada rejeitada
Encerrada e validadaReabertaGestor autorizado, motivo, novo ciclo e novo prazo
Estados ativosCanceladaGestor, justificativa; suspender jobs futuros

O estado Concluída tecnicamente é independente do percentual e da aprovação. Técnico 100% não significa encerramento. Marcos de aceite, testes e documentação podem ser gates fora do escopo de esforço técnico; se forem etapas técnicas ponderadas, entram no cálculo. Essa classificação deve ser explícita no plano.

Reabertura preserva o primeiro início e os encerramentos anteriores em ciclos históricos. Datas de criação não são editáveis. Transferência encerra vigência anterior e inicia outra, sem reescrever demandante original.

Protótipo entregue

Visão geral com indicadores calculados sobre fixtures; carteira com busca e filtros; agenda; detalhes com progresso e histórico; cadastro com recuperação de rascunho; simulações locais de início, bloqueio, progresso, aprovação e reabertura; exportação CSV e impressão do relatório. Proposta técnica acessível pelo menu.

Todos os registros são fictícios. As simulações ficam somente no navegador, podem ser reiniciadas e não implementam segurança, persistência de backend ou entrega de alertas. A validação desta fase é de navegação, linguagem e regras propostas. A revisão visual acrescenta atalhos operacionais, próxima ação contextual, feedback ao toque/clique, transições discretas, indicação de alterações não salvas e movimento reduzido automático ou manual. Os botões são controles HTML acessíveis, e a ilustração gerada é apenas apoio visual; textos e ações não ficam embutidos na imagem.

4. Indicadores e cálculos

Denominadores e filtros aparecem no relatório. Todos os cálculos usam apenas registros autorizados. Indicadores não recebem tendências inventadas: comparar períodos equivalentes somente quando houver histórico.

IndicadorDefinição
TotalTags oficiais criadas dentro do período filtrado; rascunhos separados
Em abertoTodos os estados não terminais, exceto rascunho; inclui espera e aprovação
Em execuçãoStatus exatamente Em execução
Aguardando terceirosMaterial + contratação/recurso externo
BloqueadasStatus Bloqueada; bloqueios abertos também listados no detalhe
Próximas do vencimentoAtivas com prazo vigente entre agora e limite configurável (inicial 7 dias)
AtrasadasAtivas com prazo vigente menor que agora; bloqueio não pausa prazo automaticamente
Concluídas tecnicamenteStatus Concluída tecnicamente; separadas de encerradas
EncerradasEncerradas e validadas no período de encerramento
Progresso por TagΣ(peso da folha × progresso da folha) / Σ(pesos); escala 0 a 100; plano ativo válido
Média simplesMédia dos progressos das Tags ativas com plano válido; divulgar cobertura x/y
Média por esforçoΣ(esforço estimado da Tag × progresso) / Σ(esforço estimado), apenas estimativas positivas; divulgar cobertura
No prazo vigenteEncerradas até o prazo aprovado vigente no fechamento / encerradas elegíveis no período
No prazo originalMesmo denominador, comparação com prazo original; mostrar junto ao vigente
Idade médiaMédia de (agora − criação) das Tags ativas, em horas/24
Tempo até inícioInício efetivo − criação; sem início aparece como pendente, nunca zero
Tempo de execuçãoConclusão técnica − início do ciclo; tempo bruto e esperas explicitados
Tempo de aprovaçãoDecisão − submissão por rodada, sem apagar rejeições
Sem atualizaçãoAtivas com último evento operacional anterior ao limiar configurado

Correção do exemplo fornecido: 10×100 + 20×100 + 20×50 + 40×25 + 10×0 = 5.000; dividido por 100 = 50%. A especificação dizia 40%, mas a fórmula resulta em 50%.

Prazo informado como data civil vence no fim desse dia no fuso da unidade; prazo com horário vence naquele instante. Dias de atraso exibidos = teto das horas positivas /24, acompanhados da data/hora exata. O worker compara instantes, não strings de datas. Dias úteis só com calendário corporativo configurado.

5. Notificações e escalonamento

Regras versionadas por organização, criticidade, equipe e usuário. Antecedências, recorrência, silêncio e escaladas são dados de configuração; valores 7/3/1/0 dias são sugestões iniciais editáveis.

Eventos previstos: atribuição, ciência/início ausentes, marcos, prazos, atrasos de etapa, bloqueio, transferência, prazo alterado, aprovação solicitada/rejeitada, conclusão, encerramento e reabertura. Nenhuma cobrança em Tag cancelada ou encerrada. Reabertura cria novo ciclo com nova chave.

Escalada: executor → executor/supervisor → gestor de área → gestor de carteira, com níveis e limiares por criticidade, atraso, impacto, bloqueio e ausência de atualização. Bloqueios também direcionam a cobrança ao responsável pelo desbloqueio. Ausência de contato/equipe entra em exceções visíveis, sem destinatário inventado.

Push inclui código, resumo, prazo, responsável, situação e deep link; opção de conteúdo discreto para tela bloqueada. Permissão por gesto do usuário. No iPhone, Web Push exige app na Tela de Início em iOS 16.4+; testar versões atuais e aparelhos reais. Sem permissão, oferecer caixa interna/e-mail conforme preferência. O aceite do push não prova exibição, leitura ou entrega física. Leitura é registrada na caixa interna; e-mail tem eventos do provedor quando disponíveis.

Fontes técnicas: WebKit — Web Push no iOS, Supabase Cron.

6. Permissões

Perfis acumuláveis, sempre limitados pelo escopo; negar por padrão. Uma pessoa não aprova o próprio trabalho por padrão. Exceção exige gestor autorizado e trilha explícita. Administrador não recebe dispensa silenciosa dos gates.

AçãoAdministradorGestorDemandanteExecutorAprovadorVisualizador
ConsultarEscopoCarteiraPróprias/permitidasAtribuídasDesignadasAutorizadas
CriarSimSimSimSe acumular demandanteSe acumular demandanteNão
Configurar pessoas/regrasSimRegras autorizadas da carteiraNãoNãoNãoNão
Atribuir/transferirSimSimNãoSolicitarNãoNão
Ciência/início/progressoSe executor designadoSe executor designadoNãoSim, nas atribuídasNãoNão
Solicitar prazoSimSimSolicitarSolicitarNãoNão
Aprovar prazo/pesos/exceçõesSim, com escopoSim, com escopoNãoNãoSó com perfil gestorNão
Aprovar/rejeitar entregaSe designadoSe designadoNãoNão, quando autorSim, se designadoNão
EncerrarApós gatesApós gatesNãoNãoApós aceite e autorizaçãoNão
Cancelar/reabrirSim, motivoSim, motivoSolicitarSolicitarSolicitarNão
ExportarDados autorizadosDados autorizadosSe autorizadoSe autorizadoSe autorizadoSe autorizado

RLS em todas as tabelas expostas; autorização não usa user_metadata editável. Memberships consultados no backend evitam depender apenas de claims antigas. Views de consulta com security_invoker; escopo também no Storage e nas funções de relatório. MFA obrigatório para administradores/gestores no piloto de produção. Sessões revogáveis, HTTPS e política de expiração.

7. Segurança, confiabilidade e privacidade

8. Etapas de desenvolvimento e implantação

EtapaEntregaGate de aceite
0 — atualArquitetura, modelo, protótipo, fórmulas, planoValidação do usuário
1 — fundaçãoSupabase dedicado, Auth, memberships/RLS, catálogo mínimo, migrationsLogin e testes de isolamento/negativa de acesso
2 — MVP operacionalCadastro, atribuição/ciência, planos, início/progresso, prazos, bloqueios, aprovação, auditoriaFluxo completo em banco real e concorrência/idempotência
3 — gestão e alertasDashboard real, busca/filtros, caixa interna, worker e escaladas, CSVIndicadores conciliados e scheduler sem app aberto
4 — piloto multiplataformaPWA, Web Push, anexos, sincronização por recarga/Realtime autorizado, relatóriosiPhone e Android reais; Mac e Windows; push aberto/fundo/fechado e restauração
5 — evoluçãoExcel, PDF de servidor, quadro, calendário avançado, favoritos, offline conforme necessidadeAceites específicos e desempenho

Ambientes separados para desenvolvimento/homologação/produção. Migrations versionadas revisadas, verificações de RLS, testes e build antes de promover na Vercel. Testar migrações em homologação, fazer backup e usar mudanças compatíveis com versões anterior e nova. Rollback do frontend não desfaz migrações; recuperação do banco requer plano próprio.

Variáveis previstas: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, APP_URL, credencial de worker somente no servidor, segredo do endpoint do scheduler, chaves VAPID pública/privada, identificação e chave do provedor de e-mail. Nunca versionar .env nem publicar segredo privilegiado em NEXT_PUBLIC_*. Rotação com runbook e verificação.

Domínio de produção: https://sgr.tallespv.com.br; acesso público ao app/login, conteúdo privado após autenticação. HTTPS e propagação DNS precisam de verificação externa. O protótipo público mostra somente dados fictícios.

Distribuição inicial: abrir no Safari → Compartilhar → Adicionar à Tela de Início → entrar com conta corporativa convidada → habilitar notificações se desejado. Não há binário ou App Store nesta proposta inicial. Publicação Apple futura exige conta, identificadores, política de privacidade, assinatura, TestFlight e revisão.

Decisões a validar

Pendências de negócio para o piloto: nome e estrutura real das unidades/áreas, cadastro inicial dos responsáveis e aprovadores, regras de autoaprovação/exceção, política de horário de cobrança, calendário útil, provedor de e-mail, retenção, capacidade e orçamento. Esses dados podem ser coletados durante a fundação sem inventar estrutura industrial.