Reconhecimento facial → Presença → Graduação
Da foto que o professor tira na aula até a presença do aluno contar para a faixa. Como cada peça funciona hoje — e como evitamos contar a mesma aula duas vezes.
Atualizado em 05/07/2026 · mantido pela The Mat Society
1 · O fluxo completo
2 · Os dois mundos: Cadastro × Presença
São coisas diferentes, e é a distinção mais importante do sistema:
- Presença = marcar quem veio à aula. Acontece na tela Professores e Presenças → Fotos das Turmas.
- Cadastro = ensinar um rosto à IA. Acontece na Central Admin → Cadastrar Rostos. Não marca presença — só melhora o reconhecimento dali pra frente.
Quando você ensina um rosto novo, os alunos antigos que apareciam como «a identificar» passam a ser reconhecíveis. A ponte entre os dois mundos é o robô (seção 3).
3 · O robô da madrugada
Toda madrugada (~04:00), o robô reprocessa as fotos das aulas do mês corrente que ainda têm rostos «a identificar», usando os rostos que você cadastrou. Para cada acerto ele deixa uma sugestão (caixa roxa com o nome).
4 · ⚠️ Contagem e fonte da verdade (evitando dupla contagem)
Hoje existem duas fontes de presença: o OneGym (onde os alunos se inscrevem e recebem presença) e o nosso sistema (reconhecimento facial). O risco é a mesma aula ser contada duas vezes. Uma única chave controla isso: config.facial_desde.
Agora (julho) — fase paralela · SEM duplicação
facial_desde = NULL. O OneGym é a verdade absoluta. As presenças faciais do nosso sistema são apenas observadas — ficam gravadas, mas NÃO somam na graduação. A contagem da faixa vem só de aulas_na_faixa (número do OneGym). Está no código: o app_progresso só soma uma presença facial se facial_desde estiver setado e a data da aula for ≥ facial_desde. Como é NULL, nenhuma soma acontece. Zero risco de contar duas vezes.
Futuro (agosto) — o app vira a verdade · o corte é uma data de costura
Quando o app assumir, viramos a chave: facial_desde = 2026-08-01. A partir daí a contagem passa a ser:
base histórica (até 31/jul, do OneGym) + presenças faciais de 01/ago em diante
Como o facial só conta a partir da data de costura e a base histórica é de antes dela, nenhuma data é contada pelos dois — a duplicação é impossível por construção. Para blindar de vez, já deixei no código: assim que facial_desde for setado, o sync do OneGym para de sobrescrever aulas_na_faixa (congela a base histórica). Sem isso, o OneGym continuaria empurrando o número de agosto e aí sim duplicaria.
Passo a passo do corte (quando decidir virar)
- Rodar um último sync do OneGym para capturar a
aulas_na_faixahistórica de cada aluno. - Definir
config.facial_desde= 1º dia do mês do corte. - A partir daí, os alunos passam a marcar presença pelo nosso app (ou pela foto da aula). O OneGym deixa de ser a fonte de contagem.
- A base fica congelada automaticamente; o facial soma por cima. Sem duplicar.
facial_desde é essa costura.Agosto — os dois juntos (app = verdade, OneGym = espelho)
A partir de 01/08/2026 o app passa a ser a fonte da verdade — mas o OneGym não é desligado: vira um espelho, alimentado só pelo app. Os dois mostram os mesmos números, sem duplicar.
- Uma entrada só: o aluno marca presença no app. As aulas de agosto são apagadas no OneGym, então ninguém marca por lá.
- Push diário: o app escreve o total de cada aluno no OneGym (mutation
updateUserRank) — como não há mais aulas lá, o total fica exato. - Sem loop: o freeze impede o OneGym de reescrever a nossa base → zero dupla contagem. Uma fonte (o app), o OneGym espelha.
5 · Segurança e reversibilidade
- O robô nunca escreve na base de reconhecimento (AWS Rekognition /
faces_indexadas) — só lê. Auditado por verificadores independentes. - Pior caso de um erro do robô = 1 presença errada, nunca corrupção do cadastro. Desfazer é 1 comando (as presenças do robô têm assinatura
origem='ia_confirmada' e confirmado_por IS NULL). - A foto da turma é retida 60 dias e depois apagada — sai do fluxo sozinha.
- Sem modo automático, por decisão: toda presença sugerida passa por revisão humana.
6 · Onde fica cada coisa
| O quê | Onde |
|---|---|
| Marcar presença (fotos da turma) | Professores e Presenças → Fotos das Turmas |
| Ensinar rostos à IA | Central Admin → Cadastrar Rostos |
| Revisar sugestões do robô (com zoom) | /presenca/revisar-robo.html |
| Conferir a base de rostos | Central Admin → Auditar Rostos |
| Chave da fonte da verdade | config.facial_desde (banco) |