✅ EXECUÇÃO — 15/08/2026
Implementado e validado em produção (homolog). Commits: 2062f6c (fundação: 21 tabelas), 080c857 (features), bbfa277 (lint). Deploy CI verde.
Validação ao vivo: página(s) da feature respondendo 200 com a role correta + procedures tRPC testadas via HTTP (respostas JSON corretas). Ver relatório da sessão.
Detalhes de implementação e decisões: conforme o design acima deste documento (schema, procedures e páginas seguidos conforme especificado; ajustes menores documentados no commit).
📄 Card 50 [M9] — NES (Scorecard Emocional Preditivo)
📚 Referência SULTS: https://www.sults.com.br/produtos/nes Scorecard da saúde emocional de cada unidade/gestor. Mede sentimento em 5 níveis visuais (1 clique) a cada interação, funcionando como sistema de alerta precoce preditivo. Detecta insatisfação ANTES do cancelamento.
🎯 Objetivo
Criar o módulo NES — CRM de relacionamento interno matriz↔unidades com:
- 5 níveis emocionais visuais (1 clique):
- 🔴 Nervoso (risco grave)
- 🟠 Triste (declínio)
- 🟡 Normal (neutro)
- 🟢 Feliz (saudável)
- 🟦 Encantado (excepcional)
- Prontuário cronológico por filial/gestor (timeline com observações e anexos)
- Dashboard em tempo real (score global, filtros por dept, evolução mensal)
- Ação direta: transforma risco em tarefa (Card 46) + comunica à rede
- Caráter preditivo: alerta se gestor negativo por meses consecutivos
📚 Documentação de Referência
docs/DESIGN_SYSTEM.md§6 (Recharts para dashboards)prisma/schema.prisma— novo model
🛠️ Especificação Técnica
Schema Prisma (novo)
model NesInteraction {
id String @id @default(cuid())
branchId String // unidade avaliada
branch Branch @relation(fields: [branchId], references: [id])
managerId String? // gestor local avaliado
manager User? @relation(fields: [managerId], references: [id])
level NesLevel // NERVOUS, SAD, NORMAL, HAPPY, DELIGHTED
notes String? @db.Text // observação do consultor
attachments String[] // URLs S3
department String? // "Financeiro", "Pedagógico", "TI"
recordedById String // quem registrou (SUPERVISOR/MASTER)
recordedBy User @relation(fields: [recordedById], references: [id])
interactionDate DateTime // quando ocorreu
createdAt DateTime @default(now())
}
enum NesLevel { NERVOUS SAD NORMAL HAPPY DELIGHTED }
Rotas (page.tsx)
/master/nes— dashboard global (score por filial, evolução, alertas)/master/nes/[branchId]— prontuário cronológico da filial/supervisor/nes— SUPERVISOR vê só suas filiais (no CRM atual)
Procedures tRPC (master.nes, supervisor.nes)
record(registra interação com nível + notas + anexos)timeline(prontuário cronológico de uma filial)scorecard(score atual por filial: média últimos 90 dias)dashboard(evolução mensal, ranking filiais, alertas preditivos)alertList(filiais com nível negativo por N meses consecutivos)createTaskFromRisk(transforma risco em ticket no Card 46)
Lógica preditiva
- Job Bull
nes-predictive-check(semanal): filiais com média < NORMAL por 2+ meses → alerta MASTER - Score calculado: média ponderada dos últimos 90 dias (pesos: NERVOUS=1, SAD=2, NORMAL=3, HAPPY=4, DELIGHTED=5)
- Cores do score: <2.5 vermelho, 2.5-3.5 amarelo, >3.5 verde
✅ Critérios de Aceite
- MASTER/SUPERVISOR registra interação com 5 níveis emocionais (1 clique)
- Prontuário cronológico por filial (timeline com observações + anexos)
- Dashboard: score global + evolução mensal + ranking filiais
- Alerta preditivo se filial negativa por 2+ meses consecutivos
- Converter risco em tarefa/ticket (1 clique)
- SUPERVISOR só vê suas filiais
- Build passa + lint OK
🔌 Handoff
- Job
nes-predictive-checkno bootstrap (semanal) - Integração com Card 46 (Chamados) via
createTaskFromRisk - Integração com NPS (Card 49) para visão 360°
🎯 Próximo
Card 51: Checklist Auditoria Pedagógica (com GPS + fotos)