Files
Projeto-Portaria/prompts/FASE-6-painel-admin.md

5.4 KiB
Raw Permalink Blame History

FASE 6 — Painel administrativo

Objetivo

Painel web completo para síndico e administradora: gestão do condomínio, auditoria de visitas com mídia e mapa, importação de moradores, reconciliação e feature flags.

Pré-requisitos

FASES 05 concluídas. Ler docs/04-DESIGN-SYSTEM-UX.md §6 e docs/03-FLUXOS-E-CONTRATOS.md §6.

Contexto

Ao contrário da tela do visitante, aqui densidade é virtude: usuário recorrente, em desktop, que precisa de tabela grande, filtro fino e comparação. O orçamento de bundle não se aplica.

Tarefas

1. Base

Vite + React 19 + TS em web/admin. TanStack Router e TanStack Query. TanStack Table para grades virtualizadas. Leaflet para mapa (tiles OSM). Tokens de shared-ui.

Login OIDC com MFA obrigatório — este perfil vê fotos de todos os visitantes e a localização de todos os acessos; é o alvo mais valioso do sistema.

2. Auditoria de visitas — a tela mais importante

Tabela virtualizada com filtros persistidos na URL: período, condomínio, bloco, unidade, tipo, estado, dentro/fora do geofence, quem resolveu, e "unidade não cadastrada" (visitas-sombra: erro de digitação legítimo ou tentativa de enumeração — recorrência do mesmo dispositivo em unidades diferentes é padrão de varredura e deve gerar destaque).

Colunas: data/hora, tipo, visitante, unidade, estado, quem resolveu, duração, selo de geofence.

Detalhe da visita:

  • Foto do visitante ou do pacote (URL assinada de 5 min)
  • Mapa com o ponto do visitante e o raio do portão desenhado — é aqui que uma tentativa remota fica óbvia
  • Timeline de visit_attempts: quem foi notificado, por qual canal, entregue ou não, quem atendeu. É o que responde "por que ninguém atendeu?" — a pergunta mais comum do síndico
  • Player do recado, se houver
  • Registro de exibição do aviso (privacy_notices) com a versão do texto
  • Hash sha256 da mídia, para valor probatório

Exportação CSV e PDF do resultado filtrado, com marca d'água de quem exportou e quando.

Todo acesso a mídia gera linha em audit_log — inclusive o do admin. Isso não é opcional.

3. Gestão do condomínio

CRUD de condomínios, blocos, unidades, pessoas, vínculos, portarias e responsáveis pela abertura.

Importação CSV de unidades e moradores com dry-run obrigatório: mostra o que será criado, alterado e rejeitado, e só grava após confirmação. Importar uma base errada em cima de outra correta é dano difícil de reverter.

Convite de morador por link, com acompanhamento (enviado / aberto / aceito).

Configuração da portaria: posição no mapa, geofence_meters com o raio desenhado para calibragem visual, qr_version com botão de invalidar-e-reimprimir, e geração do PDF do QR pronto para impressão (fosco, 15×15cm, conforme 07-REQUISITOS-DE-CAMPO.md).

4. Reconciliação

Tela dedicada ao relatório de GET /admin/reconciliation:

  • Moradores com valid_until vencido
  • Unidades sem nenhum dispositivo ativo — estas nunca atendem
  • Dispositivos com push falhando há mais de 7 dias (token morto = desinstalou)
  • Unidades com taxa de atendimento abaixo de 30% no mês
  • Convites nunca aceitos

Cada item com ação direta: reenviar convite, marcar como saído, contatar.

Esta tela é o que mantém o produto vivo depois do primeiro mês — base desatualizada quebra tudo silenciosamente.

5. Configuração do app do morador

O que o síndico controla no app dos moradores: regra padrão de entrega por unidade, ring_order, quiet_hours do condomínio, e quais funcionalidades aparecem.

6. Planos e módulos

Visualização do plano do tenant e toggles de tenant_features: whatsapp_notifications, operator_queue, video_recording, access_control_hardware, recurring_authorizations.

Cada toggle mostra o efeito prático em uma frase — "Sem operador, visitas não atendidas viram recado em vídeo" — e registra a mudança em audit_log com autor.

7. SLOs e saúde

Dashboard de GET /admin/slo com as métricas de 00-VISAO-E-PRODUTO.md §6: latência QR→toque, taxa de atendimento, latência de entrega, abandono.

Modo degradado vigente exibido com destaque. O síndico precisa saber que o sistema está reduzido antes de receber a reclamação.

8. LGPD

Atendimento a titulares: busca por CPF ou telefone, exportação JSON, e eliminação — que apaga mídia e anonimiza nome preservando a linha da visita (06-LGPD-E-SEGURANCA.md §3).

Cadastro do encarregado (DPO), exibido no aviso de privacidade. Editor do texto do aviso com versionamento — mudar o texto cria nova versão, e as visitas antigas continuam referenciando a versão que foi realmente exibida.

Critérios de aceite

  • Login exige MFA
  • Tabela de auditoria fluida com 100 mil visitas (virtualização)
  • Mapa mostra ponto do visitante e raio do portão
  • Timeline de tentativas explica por que ninguém atendeu
  • Acesso a mídia usa URL assinada e gera auditoria
  • Importação CSV com dry-run funcional
  • Relatório de reconciliação identifica unidades sem dispositivo ativo
  • PDF do QR sai no tamanho e formato de 07-REQUISITOS-DE-CAMPO.md
  • Toggle de módulo registra autor em audit_log
  • Eliminação LGPD preserva a linha anonimizada
  • Acessibilidade: navegação completa por teclado, contraste ≥ 4.5:1

Não faça nesta fase

  • Billing automatizado (v2)
  • Gestão de tenants (multi-tenancy segue desativada)
  • App do operador (FASE 7)