Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #51 · M9

Checklist Auditoria Pedagógica (GPS + Fotos)

Marco M9: Experiência & Qualidade (SULTS-inspired)

👤Wellington Santiago (via ZCode)

✅ 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 51 [M9] — Checklist Auditoria Pedagógica (GPS + Fotos)

📚 Referência SULTS: https://www.sults.com.br/produtos/checklist Sistema de checklist digital para padronizar inspeções e auditorias. App mobile com GPS, +40 tipos de resposta, scoring automático, evidências fotográficas geolocalizadas e plano de ação 5W2H.

🎯 Objetivo

Adaptar o Checklist da SULTS para o contexto escolar — auditoria pedagógica e de padronização de filiais da rede ANIK. Permite ao SUPERVISOR/MASTER auditar uma unidade em visita presencial:

  • Formulários customizáveis por tipo (Pedagógico, Operacional, LGPD, Financeiro)
  • +10 tipos de resposta: sim/não, múltipla escolha, texto, número, data, foto, escala, assinatura
  • GPS + check-in/check-out geolocalizado (valida que auditor esteve na filial)
  • Evidências fotográficas com GPS + data/hora vinculadas ao item
  • Questão crítica zera inspeção inteira se reprovada
  • Scoring automático com pesos por questão + ranking comparativo entre filiais
  • Gera Plano de Ação 5W2H para cada não conformidade (Card 52)
  • Funciona offline no mobile (PWA já pronto do Card 8)

📚 Documentação de Referência

  • docs/DESIGN_SYSTEM.md §6 (componentes nativos)
  • PWA já existe (Card 8) — service worker para offline
  • prisma/schema.prisma — novos models

🛠️ Especificação Técnica

Schema Prisma (novo)

model ChecklistTemplate {
  id              String   @id @default(cuid())
  name            String                            // "Auditoria Pedagógica Padrão"
  type            ChecklistType                     // PEDAGOGICAL, OPERATIONAL, LGPD, FINANCIAL, SAFETY
  description     String?
  sections        ChecklistSection[]
  isActive        Boolean  @default(true)
  version         Int      @default(1)
  createdBy       String
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

model ChecklistSection {
  id              String   @id @default(cuid())
  templateId      String
  template        ChecklistTemplate @relation(fields: [templateId], references: [id])
  title           String                            // "Sala de Aula", "Recepção", "Banheiros"
  order           Int      @default(0)
  questions       ChecklistQuestion[]
}

model ChecklistQuestion {
  id              String   @id @default(cuid())
  sectionId       String
  section         ChecklistSection @relation(fields: [sectionId], references: [id])
  text            String
  type            ChecklistQType                   // YES_NO, MULTI_CHOICE, TEXT, NUMBER, DATE, PHOTO, SCALE, SIGNATURE
  required        Boolean  @default(true)
  weight          Float    @default(1)             // peso no scoring
  isCritical      Boolean  @default(false)         // zera inspeção se reprovar
  options         String[]                         // para MULTI_CHOICE
  expectsPhoto    Boolean  @default(false)         // exige anexo
  order           Int      @default(0)
}

model ChecklistApplication {
  id              String   @id @default(cuid())
  templateId      String
  template        ChecklistTemplate @relation(fields: [templateId], references: [id])
  branchId        String                           // filial auditada
  branch          Branch   @relation(fields: [branchId], references: [id])
  auditorId       String                           // quem aplicou
  auditor         User     @relation(fields: [auditorId], references: [id])
  status          ApplicationStatus @default(IN_PROGRESS) // IN_PROGRESS, COMPLETED, VALIDATED
  score           Float?                           // 0-100
  checkInAt       DateTime?
  checkInGps      Json?                            // {lat, lng, accuracy}
  checkOutAt      DateTime?
  checkOutGps     Json?
  answers         ChecklistAnswer[]
  actionPlans     ActionPlan[]                     // Card 52
  createdAt       DateTime @default(now())
  completedAt     DateTime?
}

model ChecklistAnswer {
  id              String   @id @default(cuid())
  applicationId   String
  application     ChecklistApplication @relation(fields: [applicationId], references: [id])
  questionId      String
  question        ChecklistQuestion @relation(fields: [questionId], references: [id])
  value           Json                             // resposta (string/number/array/etc)
  photoUrls       String[]                         // evidências
  gps             Json?                            // GPS da foto
  isConform       Boolean?                         // conforme ou não
  notes           String?
}

enum ChecklistType { PEDAGOGICAL  OPERATIONAL  LGPD  FINANCIAL  SAFETY }
enum ChecklistQType { YES_NO  MULTI_CHOICE  TEXT  NUMBER  DATE  PHOTO  SCALE  SIGNATURE }
enum ApplicationStatus { IN_PROGRESS  COMPLETED  VALIDATED }

Rotas (page.tsx)

  • /master/checklist — gerenciar templates
  • /master/checklist/[templateId]/editor — editor visual de template
  • /supervisor/checklist — SUPERVISOR aplica/valida (visita filial)
  • /master/checklist/aplicacoes — lista aplicações + ranking filiais
  • /master/checklist/aplicacoes/[id] — detalhe + scoring + planos de ação

Procedures tRPC

  • master.checklist.templates.* (CRUD templates)
  • supervisor.checklist.apply.* (iniciar, salvar offline, finalizar)
  • master.checklist.validate (valida aplicação)
  • master.checklist.ranking (scoring comparativo entre filiais)

Mobile Offline (PWA)

  • Reusar service worker do Card 8 (PWA)
  • IndexedDB para respostas offline (idb-keyval)
  • Sync quando voltar online
  • Captura GPS via navigator.geolocation (requires HTTPS + permissão)
  • Câmera via <input type="file" accept="image/*" capture> ou getUserMedia

✅ Critérios de Aceite

  1. MASTER cria templates com seções + questões + pesos + criticidade
  2. SUPERVISOR aplica checklist na filial com check-in GPS
  3. 8+ tipos de resposta funcionais (incluindo foto + assinatura)
  4. Questão crítica zera inspeção
  5. Scoring automático (soma ponderada de conformidades)
  6. Ranking comparativo entre filiais
  7. Funciona offline (PWA) + sync ao reconectar
  8. Evidências fotográficas com GPS + timestamp
  9. Build passa + lint OK

🔌 Handoff

  • Templates padrão (seed): Auditoria Pedagógica, LGPD, Operacional
  • Integração com Card 52 (Plano 5W2H): não conformidades viram planos
  • Integração com Card 50 (NES): score da auditoria alimenta prontuário da filial

🎯 Próximo

Card 52: Plano de Ação 5W2H

← Voltar para a visão geral