Como funciona, em 30 segundos
A plataforma substitui a chamada manual por uma validação espacial automatizada. O docente cria uma sessão, configura o ponto central da sala e um raio de tolerância em metros. O sistema gera um QR Code com validade limitada. O aluno escaneia o QR Code e a página que abre solicita três coisas: nome, matrícula e consentimento para capturar localização e identificadores técnicos do dispositivo. Após o envio, três validações independentes acontecem no servidor:
- A distância em linha reta entre o aluno e o ponto central da sala é calculada pela fórmula de Haversine. Se exceder o raio, a presença é rejeitada.
- Uma impressão digital do dispositivo (combinação de userAgent, hardware, tela, fuso horário e renderização canvas) é confrontada com o banco. Se o mesmo dispositivo já registrou outra matrícula nesta sessão, a presença é rejeitada.
- A matrícula é verificada. Se já consta como presente, a presença é rejeitada.
Passando nas três validações, a presença é registrada, aparece em tempo real no painel do docente (lista e mapa 3D) e fica disponível para exportação em planilha pronta para o SIGAA.
Fluxo do docente
- Turma — nome ou código que identifica a aula no painel.
- Latitude e longitude da sala. Use o botão “Usar minha localização” dentro da sala para capturar via GPS, ou digite manualmente as coordenadas se já souber.
- Raio (m) — distância máxima aceita. Padrão 50 m. Para salas pequenas, 30 m é suficiente; para auditórios grandes, 80–100 m.
- Validade (min) — quanto tempo o QR Code permanece aceitando presenças. Padrão 5 min. Recomendado manter curto para evitar compartilhamento do link.
- Docente (opcional) — texto livre para identificar a sessão no histórico.
- A lista de presença ganha uma nova linha com nome, matrícula, distância apurada e horário.
- O mapa de densidade 3D faz surgir hexágonos cuja altura é proporcional ao número de alunos em cada microrregião. Cores variam do creme ao vermelho profundo conforme a concentração aumenta.
410 CLOSED e ficam registradas como tentativa de fraude.- Exportar SIGAA — planilha enxuta (4 colunas) no formato exato exigido pelo módulo “Lançar Frequência em Planilha”.
- Relatório completo — auditoria com 13 colunas incluindo coordenadas, IP, fingerprint e timestamps. Para registro interno do docente, nunca para o SIGAA.
Fluxo do aluno
GEO_DENIED e a presença não pode ser registrada — o aluno teria que abrir o link no celular, liberar a permissão no menu do navegador e tentar de novo.- “Presença confirmada” + distância apurada em metros.
- Ou um cartão de erro com instrução para corrigir.
Regras de validação
As cinco regras abaixo são cumulativas. A presença só é aceita se todas forem satisfeitas. Qualquer falha gera um registro na trilha de auditoria.
Códigos de rejeição
Quando alguma regra falha, o servidor responde com um código HTTP específico e grava um RejectedAttempt com o motivo. Use esta tabela para identificar a causa.
| HTTP | Motivo | Significado | Ação corretiva |
|---|---|---|---|
| 401 | INVALID_TOKEN | Token adulterado ou assinatura HMAC inválida. | Solicitar novo QR Code ao docente. |
| 409 | DUPLICATE_FINGERPRINT | Este dispositivo já registrou outra matrícula na sessão. | Cada aluno marca presença no próprio celular. |
| 409 | DUPLICATE_MATRICULA | Esta matrícula já consta como presente. | Conferir se a matrícula foi digitada corretamente. |
| 410 | EXPIRED | QR Code passou da validade. | Solicitar novo QR Code ao docente. |
| 410 | CLOSED | Sessão foi encerrada manualmente pelo docente. | Não é mais possível marcar nesta sessão. |
| 422 | OUT_OF_RANGE | Posição GPS fora do raio configurado. | Aproximar-se do ponto central da sala. |
| — | GEO_DENIED | Permissão de localização foi negada no navegador. | Liberar a permissão nas configurações e tentar novamente. |
Antifraude — explicação técnica
Privacidade e LGPD
A plataforma opera sob Lei nº 13.709/2018 (LGPD), art. 6º — princípios de necessidade e minimização. Toda coleta é episódica e justificada por finalidade clara.
Validar presença em uma única aula. Nenhuma análise de comportamento, perfil, ou cruzamento com outras bases.
Consentimento explícito (LGPD art. 7º, I) + execução de política institucional acadêmica (art. 7º, IV).
Coleta episódica. Coordenadas e IP bruto devem ser anonimizados após a exportação da sessão. Apenas o bit presente/ausente é necessário a longo prazo.
Exportação SIGAA
Dois formatos de CSV são oferecidos no botão de download da sessão. Use cada um conforme a necessidade.
Boas práticas
No momento de criar a sessão, use o botão Usar minha localização posicionado próximo ao centro físico da sala. Coordenadas capturadas no corredor ou na entrada podem deixar alunos legítimos fora do raio.
Salas até 60 m² → 30 m. Salas maiores ou laboratórios em L → 50 m. Auditórios → 80–100 m. Raios muito grandes (>150 m) facilitam fraude em corredores e prédios vizinhos.
Quanto menor a janela, mais difícil o aluno presente repassar o link para colega ausente em tempo hábil. Em aulas longas, é mais seguro abrir uma segunda sessão no meio do encontro do que estender uma única.
O link inclui o token que valida a sessão. Compartilhar o link no grupo da turma anula parte da proteção espacial — embora a Regra 1 ainda bloqueie quem estiver fora da sala. Projetar é a única forma de garantir que a posse do link foi adquirida fisicamente.
Baixe ambos os CSVs ao final da aula. O SIGAA pode ficar indisponível em horários de pico — ter o arquivo local evita retrabalho. O relatório completo é sua trilha de auditoria caso alguma presença seja contestada.
Sessões encerradas seguem disponíveis na aba Histórico. Use o painel para acompanhar a evolução da frequência ao longo do semestre.
Limitações conhecidas
Qualquer pessoa com o id de uma sessão pode encerrá-la via API. Aceitável para apresentação acadêmica; obrigatório resolver antes de uso institucional. Versão futura usará SSO/CAS da UFPE.
Brave Shields e Firefox com resistFingerprinting habilitado randomizam o canvas a cada visita. Isso anula a regra do dispositivo único, mas a Regra 3 (matrícula única) continua protegendo. O aluno verá Permissão de localização funcionando normalmente.
Em prédios sem visada para o céu, o sinal de GPS é fraco. O navegador combina com Wi-Fi e torres de celular, mas a precisão pode cair para 20–40 m. Em prédios densos, considere aumentar o raio em 10–20 m.
A política de descarte está definida no termo de consentimento, mas a anonimização das coordenadas e do IP após a exportação ainda é manual. O job automatizado é o próximo passo no roadmap.
A entrega de eventos em tempo real (SSE) usa um EventEmitter em memória. Para escalar com múltiplos processos Node, será necessário trocar por Redis pub/sub ou similar.
Um aluno com conhecimento técnico pode usar as ferramentas de desenvolvedor do Chrome para informar coordenadas fabricadas dentro do raio. Em celulares reais, isso exige privilégios de root. As coordenadas brutas ficam no relatório completo para auditoria posterior.
Dúvidas frequentes
O aluno pode marcar presença pelo navegador do desktop?
Tecnicamente sim, desde que a página seja servida em HTTPS e o desktop forneça coordenadas via GPS/Wi-Fi do dispositivo. Na prática, recomenda-se o uso do celular — a precisão é maior e o aluno está fisicamente próximo do QR Code.
O que acontece se o aluno fechar o navegador antes de ver o resultado?
A submissão ao servidor já terá ocorrido. A presença será registrada se passou nas regras. O aluno pode reabrir o link para conferir, mas a tentativa subsequente cairá em DUPLICATE_FINGERPRINT — comportamento esperado, presença já foi gravada.
O aluno pode marcar presença duas vezes na mesma aula?
Não. As regras 2 e 3 bloqueiam: a impressão digital do aparelho fica vinculada à matrícula na primeira submissão, e a matrícula fica vinculada à sessão. Qualquer nova tentativa retorna erro.
O que acontece se a permissão de localização for negada?
O servidor não recebe coordenadas e registra um RejectedAttempt com motivo GEO_DENIED. O aluno precisa reativar a permissão de localização nas configurações do navegador (no celular: ícone do cadeado na barra de endereço) e tentar novamente.
O sistema funciona offline?
Não. A submissão exige conexão para validar Haversine e gravar no banco. O aluno precisa estar em uma rede (Wi-Fi institucional ou dados móveis) no momento da marcação.
Quanto tempo o QR Code dura?
O padrão é 5 minutos, configurável de 1 a 180 minutos no momento de criação da sessão. Após o tempo, qualquer submissão retorna EXPIRED, mesmo se o link for compartilhado depois.
Posso exportar a planilha depois que a sessão for encerrada?
Sim. Sessões encerradas ou expiradas permanecem disponíveis na aba Histórico do painel. Os dois botões de exportação continuam funcionando indefinidamente — não há data de validade para o download.
O servidor armazena meu token do QR Code?
Não. O servidor armazena apenas o SHA-256 do token. O token bruto vive somente na URL e na sua tela durante a sessão. Mesmo um vazamento completo do banco de dados não permitiria a um atacante reconstruir tokens válidos.
Por que a Regra 1 não usa o IP do aluno?
Geolocalização por IP é trivialmente burlável com VPN ou proxy, e a precisão chega no máximo ao nível de cidade. Para validar presença em uma sala específica, é necessária a coordenada real do hardware, obtida via API de Geolocation do navegador.
O sistema considera atrasos como faltas?
Não. A coluna Faltas do CSV é sempre 0 para alunos presentes. Aluno que tentou marcar depois da expiração simplesmente não aparece na planilha SIGAA — o docente lança a falta manualmente conforme política da disciplina.