Especificação de produto e arquitetura

Cockpit Inteligente de Gestão Escolar

Camada de inteligência de gestão sobre o Sponte — integração, analytics, alertas e ação.

Status: especificação inicial para discovery técnico e MVP Base de desenvolvimento: Claude / Claude Code Entrega: particionada em fases (MVP → evolução)
Observação Campos e tabelas do Sponte devem ser homologados antes de comprometer funcionalidades contratuais.

1Resumo executivo

O produto não deve ser tratado como um simples dashboard. A proposta é criar uma camada de inteligência de gestão sobre o Sponte: os dados operacionais continuam sendo registrados no Sponte, enquanto a nova plataforma organiza, historiza, cruza e transforma esses dados em indicadores, alertas e ações.

Objetivo Construir uma plataforma web que consuma dados do Sponte, consolide-os em uma base analítica própria e ofereça dashboards, alertas, tarefas, metas, automações e inteligência assistida por IA para direção, financeiro, comercial, secretaria e coordenação pedagógica.

1.1Proposta de valor

Transformar dados dispersos em decisões. Em vez de exigir que o gestor navegue por relatórios, a plataforma deve apresentar prioridades do dia, explicar desvios de indicadores, disponibilizar listas acionáveis e permitir executar ou delegar ações.

DADO → INDICADOR → DIAGNÓSTICO → PRIORIDADE → AÇÃO → AUTOMAÇÃO → RESULTADO

1.2Usuários-alvo

PerfilPrincipais necessidades
Mantenedor / DiretorVisão executiva, metas, receita, inadimplência, matrículas, evasão, capacidade e tendências.
FinanceiroContas a receber, aging, cobrança, acordos, recuperação e prioridades.
ComercialLeads, tempo de atendimento, funil, conversão, metas, matrículas e rematrículas.
CoordenaçãoFrequência, desempenho, alunos críticos, risco de evasão e tarefas de acompanhamento.
SecretariaAluno 360º, matrículas, contratos, responsáveis, pendências e histórico.
AdministradorUsuários, permissões, unidades, integrações, automações e auditoria.

2Escopo funcional do produto

2.1Página inicial — Hoje na Escola

A home deve priorizar exceções e ações. Gráficos são secundários; o bloco mais importante é “O que exige atenção hoje?”.

HOJE NA ESCOLA

Alunos       Receita mês     Inadimplência    Matrículas
1.248        R$ 482 mil      8,4%             37

ATENÇÃO HOJE
• 27 alunos com risco financeiro
• 14 alunos abaixo de 75% de frequência
• 19 oportunidades sem contato há mais de 48h
• 3 turmas acima de 95% de ocupação

[Ver prioridades do dia]

2.2Módulo Executivo

2.3Módulo Financeiro

2.4Módulo Comercial e Matrículas

2.5Módulo Acadêmico

2.6Aluno 360º

Consolidar em uma única tela o histórico relevante de um aluno.

2.7Turmas e capacidade

2.8Central de Atenção

Camada transversal que transforma indicadores em exceções priorizadas.

CategoriaExemplos de alertas
FinanceiroDívida > 30 dias; inadimplência subiu; saldo vencido acima da meta.
ComercialLead novo sem contato; lead parado 48h; conversão abaixo do esperado.
AcadêmicoFrequência < 75%; 3 faltas seguidas; queda importante de desempenho.
OperaçãoTurma > 95% ocupada; turma < 40% ocupada; capacidade crítica.
MetasMatrículas abaixo da projeção; receita abaixo da meta; rematrícula em risco.

2.9Central de Tarefas

2.10Metas

3Integração com Sponte

Base fornecida: documentação/listagem de APIs do Sponte contendo endpoints de clientes, coletas de indicadores, pesquisas, Movidesk e consulta SQL dinâmica. O endpoint mais relevante para descoberta é POST /api/query, descrito como execução de consulta SQL dinâmica somente SELECT, exigindo WITH(NOLOCK) nas tabelas.

3.1Endpoints identificados no material fornecido

Endpoint / grupoUso potencial
/api/ClientesIdentificação/pesquisa de cliente.
/api/ColetaIndicadoresEduIndicadores do Educacional Web por cliente.
/api/ColetaIndicadoresEduAntIndicadores anteriores do Educacional Web.
/api/ColetaIndicadoresSPWebIndicadores do Sponte Web por cliente.
/api/ColetaIndicadoresSPWebAntIndicadores anteriores do Sponte Web.
/api/ColetaIndicadoresMP e AntIndicadores Medplus; provavelmente fora do escopo escolar inicial.
/api/PesquisaUsuario*Pesquisas e respostas de usuários.
/api/Movidesk*Integração/cadastros relacionados ao Movidesk.
POST /api/queryDescoberta e leitura analítica via SELECT; deve ficar isolado no backend.

Fonte: arquivo de APIs Sponte fornecido pelo solicitante.

3.2Regra obrigatória para /api/query

Nunca expor SQL arbitrário ao frontend e nunca permitir que usuário ou IA monte SELECT livre e o envie diretamente ao Sponte.

Frontend / IA
    ↓
Analytics API interna
    ↓
Catálogo de consultas homologadas e parametrizadas
    ↓
SponteClient
    ↓
POST /api/query

Exemplos de consultas internas versionadas:

financial.overdue_students
financial.monthly_revenue
financial.aging
academic.low_attendance
commercial.open_leads
enrollment.new_students
classes.occupancy

3.3Discovery obrigatório antes do desenvolvimento completo

  1. Homologar autenticação e limites da API.
  2. Descobrir tabelas e campos disponíveis para a credencial real da escola.
  3. Identificar chaves únicas: aluno, matrícula, turma, parcela, contrato, lead e responsável.
  4. Determinar como diferenciar registros ativos, cancelados e históricos.
  5. Validar parcelas, recebimentos, datas de vencimento, descontos e acordos.
  6. Validar frequência, notas, avaliações, professores e turmas.
  7. Validar CRM/leads e histórico de contatos.
  8. Mapear códigos de situação e regras de negócio do Sponte.
  9. Medir latência, limites e estabilidade do endpoint.
  10. Documentar cada consulta homologada e seu significado.

3.4Observação sobre WITH(NOLOCK)

O uso obrigatório de WITH(NOLOCK) favorece leituras sem bloquear o banco transacional, mas pode produzir leituras momentaneamente inconsistentes. Os dados devem ser tratados como gerenciais/operacionais. Não assumir que são equivalentes a um fechamento contábil oficial sem validação específica.

4Arquitetura proposta

Adotar inicialmente um monólito modular. Microserviços não são recomendados no MVP porque aumentariam complexidade operacional sem benefício proporcional.

┌───────────────────────────────┐
│ Frontend Web — Next.js        │
└──────────────┬────────────────┘
               │ HTTPS
┌──────────────▼────────────────┐
│ Backend — NestJS / TypeScript │
│ Auth | Dashboard | Financeiro │
│ Comercial | Acadêmico         │
│ Alertas | Tarefas | Automação │
│ Integração Sponte | IA        │
└───────┬─────────┬─────────────┘
        │         └──────────────► Sponte API
        ▼
 PostgreSQL
        │
        └──────────────► Redis / BullMQ (jobs e filas)

4.1Stack recomendada

CamadaTecnologiaJustificativa
FrontendNext.js + React + TypeScriptProdutivo, tipado, ótimo ecossistema e SSR quando necessário.
UITailwind + shadcn/uiVelocidade de construção sem dependência pesada de design system fechado.
GráficosRechartsSuficiente para dashboards empresariais no MVP.
BackendNestJS + TypeScriptModularidade, DI, guards, interceptors e boa estrutura para integrações.
ORMPrismaMigrations e produtividade; SQL manual reservado para analytics.
BancoPostgreSQLRelacional, confiável e adequado à camada analítica operacional.
FilaBullMQ + RedisJobs agendados, retry e automações.
InfraDockerAmbiente reproduzível.
IAAnthropic API via tools internasCopiloto controlado; nunca acesso irrestrito ao banco.

4.2Estratégia de sincronização

O dashboard não deve consultar o Sponte em tempo real a cada abertura de tela.

Sponte
  ↓ jobs de sincronização
PostgreSQL local
  ↓ métricas / agregações
Dashboard, alertas e IA

As cadências devem ser ajustadas aos limites reais da API e à criticidade de cada dado.

DomínioCadência inicial sugerida
Financeiro15-30 min
Matrículas / Comercial15-30 min
Acadêmico30-60 min
Cadastros estáveisIncremental + reconciliação diária
Snapshots gerenciaisDiário e/ou após sincronizações relevantes

4.3Multi-tenant

Mesmo com um único cliente inicial, a arquitetura deve nascer multiempresa. Todas as entidades de domínio devem ser vinculadas a tenant_id/school_id e as consultas devem aplicar isolamento obrigatório.

5Modelo de dados conceitual

School
├── Unit
├── User / Role
├── Student
│   ├── Guardian
│   ├── Enrollment
│   ├── Attendance
│   ├── Grade
│   ├── Invoice
│   └── Payment
├── Course
│   └── Class
│       └── Teacher
├── Lead
│   └── Opportunity
├── Goal
├── Alert
├── Task
├── Automation
├── AutomationExecution
└── MetricSnapshot

5.1Campos de integração

Toda entidade sincronizada deve possuir rastreabilidade da origem:

id                  UUID interno
tenant_id           UUID da escola
external_id         identificador no Sponte
source              "sponte"
source_updated_at   timestamp de origem, quando existir
last_synced_at      timestamp da última sincronização
raw_hash            opcional, para detectar alterações
created_at
updated_at

5.2Snapshots de métricas

metric_snapshots
- id
- tenant_id
- date
- metric_key
- dimension_type
- dimension_id
- value
- metadata_json

Essa tabela deve permitir comparações históricas, tendências e futuras previsões sem depender de reconsultar o Sponte para períodos antigos.

6Motor de regras, alertas e risco

No MVP, preferir regras determinísticas e auditáveis. Machine learning deve ser uma evolução posterior, quando houver histórico suficiente e labels confiáveis.

6.1Exemplo de risco de evasão

score = 0

if attendance < 75%:            score += 30
if overdue_days > 15:            score += 25
if grade_drop > 20%:            score += 15
if consecutive_absences >= 3:   score += 15
if reenrollment_not_started:     score += 15

O sistema deve mostrar os fatores que formaram o score, evitando uma classificação opaca.

6.2Severidades

SeveridadeUso
InfoOportunidade ou sinal sem urgência.
AtençãoExige acompanhamento em prazo normal.
AltoRisco relevante; ação recomendada.
CríticoRequer ação prioritária.

7Automações

As automações devem ser baseadas em gatilho + condições + ações, com logs completos de execução.

GatilhoCondiçãoAção sugerida
Parcela próxima do vencimentoD-3Enviar lembrete por canal configurado.
Parcela vencidaD+1, D+7, D+15Cobrança progressiva + tarefa para financeiro.
Faltas consecutivas>= 3Alertar coordenação e criar tarefa.
Frequência crítica< limite configuradoCriar alerta e acompanhamento.
Lead novoSem primeiro contatoNotificar comercial / disparar mensagem permitida.
Lead parado> 48hEscalar responsável.
RematrículaElegível e pendenteFollow-up em sequência configurável.
Turma lotada>= 95%Avisar gestão/comercial.
Baixa ocupação< 40%Avisar gestão e comercial.
Meta em riscoProjeção abaixo da metaAlertar diretor.

7.1Requisitos técnicos de automação

8Copiloto de gestão com Claude

O recurso de IA deve ser implementado após existir uma camada analítica confiável. O modelo nunca recebe acesso irrestrito ao banco ou ao endpoint SQL do Sponte.

Usuário
  ↓
Claude
  ↓ tool calling
Analytics API interna
  ↓
Serviços autorizados
  ↓
PostgreSQL / métricas homologadas

8.1Tools permitidas — exemplos

getExecutiveSummary(period)
getFinancialSummary(period)
getOverdueStudents(filters)
getEnrollmentSummary(period)
getStudentsAtRisk(filters)
getClassOccupancy(filters)
getGoalProgress(goalId)
getAlerts(severity, domain)

8.2Casos de uso

Toda resposta quantitativa da IA deve ser baseada em dados retornados por tools internas, preferencialmente indicando período e contexto.

9Segurança, privacidade e LGPD

9.1Perfis iniciais

PerfilEscopo
AdministradorConfiguração total.
DiretorVisão executiva e ampla leitura.
FinanceiroFinanceiro, cobranças e tarefas relacionadas.
ComercialLeads, matrículas, metas e tarefas comerciais.
CoordenaçãoAcadêmico, alunos em risco e acompanhamento.
SecretariaAluno 360º, cadastros e matrícula.
Somente leituraDashboards permitidos sem ações.

10Requisitos não funcionais

ÁreaRequisito inicial
PerformanceDashboard principal idealmente < 2 s após cache/aquecimento.
DisponibilidadeFalha temporária do Sponte não deve derrubar leitura de dashboards já sincronizados.
ObservabilidadeLogs estruturados, correlation-id, métricas de sync, filas e erros.
EscalabilidadeSeparar jobs de integração das requisições web; permitir workers horizontais.
QualidadeUnit tests para regras e serviços; integration tests para repositórios e adaptador Sponte.
MigraçãoMigrations versionadas e revisáveis.
AuditoriaAções de usuário e automações rastreáveis.
RecuperaçãoBackup regular e runbook de restauração.

11Organização recomendada do backend

apps/api/src/
├── modules/
│   ├── auth/
│   ├── tenants/
│   ├── users/
│   ├── students/
│   ├── finance/
│   ├── academic/
│   ├── commercial/
│   ├── classes/
│   ├── goals/
│   ├── alerts/
│   ├── tasks/
│   ├── automations/
│   ├── analytics/
│   ├── ai/
│   └── integrations/
│       └── sponte/
├── common/
├── config/
└── main.ts

11.1Adapter Sponte

integrations/sponte/
├── sponte.module.ts
├── sponte.client.ts
├── sponte.config.ts
├── sponte.types.ts
├── sponte.errors.ts
├── queries/
│   ├── financial.queries.ts
│   ├── academic.queries.ts
│   ├── commercial.queries.ts
│   └── enrollment.queries.ts
└── sync/
    ├── students.sync.ts
    ├── finance.sync.ts
    ├── academic.sync.ts
    └── commercial.sync.ts

12Organização recomendada do frontend

apps/web/
├── app/
│   ├── (auth)/
│   ├── dashboard/
│   ├── financeiro/
│   ├── comercial/
│   ├── academico/
│   ├── alunos/
│   ├── turmas/
│   ├── alertas/
│   ├── tarefas/
│   ├── metas/
│   ├── automacoes/
│   └── assistente/
├── components/
│   ├── dashboard/
│   ├── charts/
│   ├── tables/
│   └── ui/
├── lib/
└── types/

12.1Padrões de UX

13Plano de implementação

Entrega particionada em etapas pequenas e executáveis. Cada etapa fecha com lint, typecheck e testes.

ETAPA 0
Discovery + POC Sponte
Comprova o contrato real de dados
ETAPA 1
Fundação da plataforma
Monorepo, Postgres, auth, RBAC, Docker, CI
ETAPA 2
Sync + camada analítica
Jobs Sponte → Postgres, snapshots
ETAPA 3
MVP executivo + financeiro
Home, aging, inadimplentes, metas, alertas
ETAPA 4
Comercial e matrículas
Funil, conversão, projeção, rematrículas
ETAPA 5
Acadêmico + Aluno 360º
Frequência, risco, acompanhamento
ETAPA 6
Automações
Gatilhos, fila, histórico, canais
ETAPA 7
Copiloto com IA
Claude com tool calling controlado

MVP Etapas 0–3  ·  Evolução Etapas 4–7

Etapa 0Discovery e POC do Sponte

Objetivo: comprovar o contrato real de dados antes de construir módulos dependentes dele.

Critério de aceite: conseguir recuperar amostras de dados essenciais e mapear identificadores/relacionamentos com segurança.

Etapa 1Fundação da plataforma

Etapa 2Sincronização e camada analítica

Etapa 3MVP executivo + financeiro

Etapa 4Comercial e matrículas

Etapa 5Acadêmico e Aluno 360º

Etapa 6Automações

Etapa 7Copiloto com IA

14Escopo do MVP recomendado

Para controlar prazo e risco, o primeiro release vendável deve se limitar a:

Condicionado à disponibilidade no Sponte Funcionalidades que dependem de dados ainda não homologados devem permanecer marcadas como pendentes: leads, notas, frequência detalhada, custos por turma, responsáveis e histórico completo.

15Critérios de aceite gerais

16Estratégia de testes

TipoFoco
UnitárioRegras de risco, aging, metas, classificação e serviços puros.
IntegraçãoRepositories, Postgres, filas e adaptador Sponte mockado.
ContratoShapes esperados das respostas externas do Sponte.
E2ELogin, dashboard, filtros, tarefas e ações críticas.
SegurançaRBAC, isolamento tenant, validação de entrada e acesso indevido.
CargaEndpoints analíticos principais e execução de jobs.

17Documentação obrigatória no repositório

18Regras para o Claude / Claude Code

Estas regras devem ser tratadas como instruções obrigatórias durante a implementação:

  1. Não inventar tabelas, colunas ou endpoints do Sponte. Quando o contrato não estiver confirmado, criar interface/placeholder e marcar TODO de homologação.
  2. Nunca expor credenciais do Sponte ao frontend.
  3. Nunca aceitar SQL arbitrário vindo do frontend ou da IA.
  4. Priorizar monólito modular; não introduzir microserviços sem necessidade comprovada.
  5. Não adicionar dependências sem explicar a utilidade.
  6. Manter módulos com controllers, services, DTOs e repositories/Prisma quando aplicável.
  7. Aplicar tenant_id em todos os domínios persistidos e testar isolamento.
  8. Toda integração externa deve ter timeout, tratamento de erro, retry apenas quando seguro e logs.
  9. Toda rotina de sync deve ser idempotente.
  10. Construir em etapas pequenas e executáveis.
  11. Ao concluir uma etapa, executar lint, typecheck e testes.
  12. Não avançar silenciosamente quando uma decisão alterar regra de negócio. Registrar a decisão no documento/ADR.
  13. Criar migrations; nunca editar schema de produção manualmente.
  14. Gerar dados mock para UI sem confundi-los com dados reais.
  15. Evitar abstrações prematuras; favorecer código legível e domínio explícito.

19Prompt mestre para iniciar o projeto no Claude Code

Você atuará como engenheiro de software sênior e arquiteto deste projeto.

Leia este documento inteiro antes de gerar código. Trate-o como a especificação principal do produto.

OBJETIVO
Construir uma plataforma web multi-tenant de inteligência de gestão escolar integrada ao Sponte.
O Sponte é a fonte operacional. Nossa aplicação deve sincronizar dados para PostgreSQL, gerar
métricas e históricos e oferecer dashboards, alertas, tarefas, metas, automações e, posteriormente,
um copiloto de gestão com Claude.

PRINCÍPIOS
1. Começar pelo núcleo mínimo funcional.
2. Usar monólito modular.
3. Frontend: Next.js + TypeScript.
4. Backend: NestJS + TypeScript.
5. Banco: PostgreSQL + Prisma.
6. Jobs: BullMQ + Redis quando a etapa de sincronização exigir.
7. Docker para ambiente local reproduzível.
8. Todo dado deve ser isolado por tenant.
9. Não inventar schema do Sponte.
10. Nunca permitir SQL arbitrário de frontend ou IA.
11. Nunca consultar o Sponte diretamente a partir do browser.
12. Nunca usar Claude com acesso direto ao banco. IA usa tools internas autorizadas.
13. Criar testes unitários para regras importantes.
14. Manter documentação atualizada à medida que o projeto evoluir.

PRIMEIRA MISSÃO
Não implemente o produto inteiro de uma vez.
Comece pela ETAPA 0: Discovery/POC Sponte + fundação mínima.

Entregue:
A. árvore inicial do repositório;
B. decisões de arquitetura;
C. arquivos de configuração;
D. SponteClient;
E. types/interfaces da integração;
F. catálogo inicial de queries homologáveis;
G. tratamento de erros;
H. logs;
I. testes unitários do client;
J. .env.example;
K. README com comandos de execução.

Quando algum detalhe da API Sponte não estiver disponível, NÃO INVENTE. Crie interfaces e mocks
claramente identificados e registre exatamente qual informação falta para homologação.

Ao final:
- mostre os arquivos criados;
- diga o que funciona;
- mostre como instalar;
- mostre como executar;
- mostre como rodar testes;
- liste as pendências da próxima etapa.

20Decisões que precisam ser homologadas com o cliente / Sponte

21Roadmap de evolução

FaseEntregaValor
Fase 0Discovery Sponte + POCReduz risco técnico e define dados reais.
Fase 1Dashboard + Financeiro + AtençãoROI rápido e visão executiva.
Fase 2Comercial + Matrículas + MetasAumenta conversão e previsibilidade.
Fase 3Acadêmico + Aluno 360ºReduz evasão e centraliza acompanhamento.
Fase 4AutomaçõesExecuta ações recorrentes e mede recuperação.
Fase 5Copiloto ClaudeExplica dados e prioriza ações.
Fase 6PrediçãoEvasão, inadimplência, receita e demanda com histórico real.

22Definition of Done por feature

23Resultado esperado

O resultado final deve ser um produto que transforme o Sponte de fonte operacional em base para uma gestão proativa. A plataforma não deve apenas exibir dados: ela deve identificar desvios, priorizar casos, apoiar decisões, criar tarefas, executar automações e medir o resultado dessas ações.

Regra de produto Se uma informação não ajuda a decidir ou agir, ela não deve ocupar espaço prioritário no dashboard.