Documento Norteador: Acesso — Sistema Integrado de Controle de Fluxo
Acesso permitido, identidade preservada.
1. Escopo, Objetivos e Governança
1.1 Objetivos do Sistema
O objetivo principal é gerenciar e monitorar o fluxo de entrada e saída de alunos, servidores e visitantes no campus com controle de Fluxo, registrando acessos de forma segura, disponibilizar no dashboard o número exato de pessoas presentes em cada endereço/unidade do campus sem expor dados nominais e garantir que o sistema funcione estritamente como controle de portaria (segurança), e não como ponto eletrônico de servidores ou fiscalização punitiva de assiduidade estudantil.
1.2 Diretrizes de Governança, LGPD e ECA Digital
Por se tratar de uma instituição de ensino federal que atende a menores de idade, o cuidado com os dados precisa ser rigoroso. ECA (Estatuto da Criança e do Adolescente) Digital garante que os dados de menores não podem ser expostos, comercializados ou utilizados para qualquer fim que não seja a segurança imediata e a comunicação interna com os responsáveis legais. O consentimento para o tratamento de dados de menores deve ser coletado explicitamente dos pais/responsáveis no ato da matrícula. A Lei Geral de Proteção de Dados tem o princípio da minimização que dita a regra para salvar apenas o estritamente necessário. Não coletaremos dados sensíveis desnecessários no banco de dados de tráfego.
Anonimização e Desvinculação Física: O controle de fluxo e presença é feito de forma 100% desvinculada da identidade nominal do usuário. O sistema não armazena qual pessoa está no prédio. A presença ativa é gerenciada de forma pseudônima através de uma tabela temporária (PresencaAtiva) de tokens de sentido único (hash SHA-256 gerado com base no UID do cartão e um Salt rotativo diário). O contador de presentes nas unidades baseia-se puramente em incrementos e decrementos agregados em tabelas e no agrupamento estatístico anônimo desses tokens ativos.
2. Arquitetura de Cartões e Provisionamento
2.1 Estrutura do Cartão (Mifare Classic 1K) e Resiliência Criptográfica
Os cartões Mifare Classic 1K estruturam-se em 16 setores independentes, cada um protegido por chaves de acesso próprias. Para mitigar o risco de clonagem simples através da mera cópia do número de série do cartão, o sistema não adotará o UID de fábrica como único vetor de validação.
A substituição da Chave A de fábrica pela assinatura criptográfica da instituição no Setor 1 do Mifare Classic é uma medida eficaz contra a vasta maioria das clonagens casuais (copiadores simples de UID). É reconhecido o fato de que a tecnologia Mifare Classic apresenta defasagem de segurança (Crypto1) perante ataques sofisticados, sendo o modelo de proteção por UUID uma balança ideal de custo-benefício para a segurança escolar atual.
Mecanismo de Validação Combinada: Ao aproximar o cartão, o leitor extrai o UID do Setor 0 e autentica-se no Setor 1 usando a chave privada da instituição para descriptografar o token interno, validando os dois dados.
2.2 Evolução do Parque de Cartões (Future-Proofing e Parque Híbrido)
Embora o Mifare Classic 1K atenda à demanda inicial com as travas citadas, o planejamento de futuras aquisições de cartões deve adotar a tecnologia MIFARE DESFire (EV2 ou EV3). Estes cartões utilizam criptografia de nível bancário (AES-128), tornando a extração de chaves e clonagem matematicamente inviáveis.
A transição de longo prazo ocorrerá de forma híbrida e transparente para o sistema web (que depende apenas do recebimento lógico do UUID_CAMPUS). Para garantir a compatibilidade dupla na portaria:
SAK para identificar o modelo do cartão aproximado no instante da leitura. Caso identifique um Classic, invocará a rotina de autenticação padrão; caso identifique um DESFire, invocará a leitura via chaves AES, permitindo que alunos veteranos e calouros acessem o campus simultaneamente independentemente do cartão físico.2.3 Emissão e Gravação de Cartões (Provisionamento)
O uso de aplicativos mobile (como NFC Tools PRO) é válido estritamente para a fase de testes e Prova de Conceito (PoC). Para a operação real escolar (emissão em massa), o processo manual é insustentável, sujeito a erros humanos e configura risco de exposição das chaves criptográficas em aplicativos de terceiros. Para a produção, o sistema contará com uma "Estação de Gravação" dedicada na secretaria:
uuid_campus e substituição da Chave A em etapa única, sem intervenção manual.3. Dinâmica de Operação da Portaria (Offline-First) e Hardware
3.1 Dinâmica de Operação Baseada em Desempenho e Dispositivos
Para evitar a formação de filas nos horários de pico da instituição, o sistema adotará o princípio de validação descentralizada e envio assíncrono em lote. A liberação do fluxo ocorrerá de forma imediata na ponta (hardware), sem depender de consultas em tempo real ao servidor web através da rede Wi-Fi. Existem dois formatos de operação:
Opção A: Dispositivo Dedicado (ESP32 + RC522/PN532) - Padrão para portarias
Opção B: Coleta Móvel (Android / PWA) — Contingência e portarias secundárias
Implementado via Web NFC API (Chrome para Android 89+). Funciona como um PWA instalável no celular. O dispositivo Android é cadastrado no sistema como qualquer catraca, recebendo sua própria API Key.
NDEFReader.scan() captura registros NDEF públicos do Setor 2 do cartão. Extrai o UUID_CAMPUS do registro textual.POST /api/hardware/sync com a API Key.3.2 Resiliência de Hardware (RTC e Queda de Energia)
Para que o armazenamento offline funcione perfeitamente e mantenha a integridade cronológica da operação física, o ESP32 necessita de um módulo RTC de hardware com bateria própria (ex: módulo DS3231). Isso garante que, em caso de queda conjunta de energia elétrica e da rede Wi-Fi, o dispositivo continue registrando os acessos com o horário real (evitando a dependência do servidor NTP).
3.3 Riscos Físicos e Limites de Borda (Blind Spots da Operação Offline)
Para garantir que o sistema não possua falhas lógicas em cenários adversos severos, implementam-se as seguintes travas na operação física:
Chave A do Mifare ou as API Keys por meio de um dump de memória (engenharia reversa).4. Arquitetura de Software, API e Banco de Dados
4.1 Stack Tecnológica e Processamento Assíncrono (Bulk Inserts)
A stack escolhida (Next.js, NextAuth, Node e Postgres) é ideal para uma aplicação escalável e segura.
A dinâmica "Offline-First" do hardware exige que o backend e o banco de dados sejam projetados para processar requisições em lote (bulk inserts). A API receberá matrizes de dados (ex: 40 registros de uma vez a cada 60 segundos). O sistema processará essa lista transacionalmente, inserindo os históricos de acesso com seus timestamps originais do RTC e disparando uma única rotina de atualização no painel de ocupação anonimizada, reduzindo drasticamente o consumo do servidor do campus.
4.2 Segurança da API (Endpoint B2B)
A comunicação de envio assíncrono em lote dos hardwares/PWAs para a API em Next.js deve utilizar autenticação obrigatória através de API Keys vinculadas ao respectivo "Controle de Acesso" (Tenant). Isso garante que conexões não autorizadas sejam rejeitadas e permite ao servidor rotear os dados físicos exatamente para o banco de dados lógico do campus correspondente.
4.3 Modelagem de Dados (PostgreSQL)
O segredo para cumprir a LGPD e a regra do "não-ponto" está em separar o registro de acessos brutos da identidade em consultas comuns de dashboard. Estrutura recomendada:
controles_acesso (Tenant): id (PK), nome.unidades_campus: id (PK), controleacessoid (FK), nome_endereco.membros_controle: id (PK), controleacessoid (FK), user_id (FK → User NextAuth), papel (owner, admin, viewer).categorias (Ex: Estudantes, Servidores) e grupos_refeicao (Ex: Lanche Manhã, Almoço, Lanche Tarde, Jantar). Cadastros dinâmicos gerenciados pelo administrador por Tenant.usuarios: id (PK), controleacessoid (FK), uuidcampus (UNIQUE), categoriaid (FK), _GrupoRefeicaoToUsuarioNfc (tabela de junção many-to-many), status_cartao. Dados nominais restritos a gestores. (A coluna unidadeAtualId foi descontinuada e removida logicamente para evitar qualquer rastreamento retrospectivo).dispositivos_hardware: id (PK), controleacessoid (FK), unidadeid (FK), nomeportaria, tipo_dispositivo ("hardware" ou "pwa"), apikeyhash (SHA-256 da API Key, nunca o valor plain), ultimo_sincronismo (timestamp).historico_acessos: id (PK), controleacessoid (FK), uuidcampus, sentido (entrada/saida), timestampacesso (do RTC — não do servidor), dispositivo_id (FK). Gravação em lote, não usada em dashboard público e desassociada de dados nominais.metrica_ocupacao: id (PK), unidadeid (FK), gruporefeicaoid (nullable FK), totalpresentes. Índice único em (unidadeid, gruporefeicao_id). Monitora ocupação geral e por grupos de refeição. As contagens de presentes por categoria são computadas de forma agregada a partir da tabela PresencaAtiva.PresencaAtiva (Tabela de Presença Pseudônima): id (PK), controleacessoid (FK), tokenpresenca (UNIQUE - hash SHA-256 do UID do cartão com salt dinâmico diário), unidadeid (FK), categoriaid (FK, nullable), criadoem (timestamp). Utilizada para validação de trânsito (antipassback e sentido) sem expor identidades.config_relatorio: id (PK), unidadeid (FK), gruporefeicaoid (nullable FK), emailsdestino (array), diassemana (array int), horariodisparo (HH:MM), ativo (bool).4.4 Regras de Negócio e Consistência de Contagem (Tratamento de Omissões)
Para mitigar inconsistências geradas por usuários que omitem o registro na saída ou entram aglomerados, o sistema aplicará:
timestamp_acesso original (RTC) antes de aplicar as demais lógicas, evitando falsas inconsistências geradas por atrasos de rede.total_presentes na tabela metrica_ocupacao e remove permanentemente todos os registros da tabela PresencaAtiva (zerando todos os tokens de presença do dia anterior de forma definitiva).gerarTokenPresenca(UID)). Se esse token já consta em PresencaAtiva para a mesma unidade, o sistema sinaliza a ação como uma Saída, deletando o registro do token e decrementando as métricas de ocupação. Se o token constar em uma unidade A mas a leitura ocorreu na unidade B (o usuário esqueceu de registrar a saída na unidade A), o sistema deduz a presença na unidade A, consolida os históricos lógicos e registra a entrada na unidade B de forma transparente, corrigindo o fluxo sem travar o portador.PresencaAtiva, garantindo que o painel de ocupação geral nunca exiba quantitativos negativos.5. Módulos Auxiliares e Integrações
5.1 Relatórios Automatizados (Otimização de Refeitório)
O sistema conta com um módulo de envio programado de e-mails para setores estratégicos (como as cozinhas de cada unidade). Um Cron Job envia a contagem da "foto do momento" (agrupando e somando os registros da tabela PresencaAtiva por categoria no instante do disparo), consolidando o relatório por endereço e separando por grupos_refeicao. Horários de disparo, dias da semana, tipos de refeições ofertadas (ex: almoço, lanche noturno) e e-mails destinatários possuem configurações independentes por Endereço/Unidade no painel web. Isso garante que, se um anexo serve apenas lanche noturno, sua cozinha receba exclusivamente relatórios pertinentes à sua realidade, enquanto a Sede recebe múltiplos disparos diários para suas diversas refeições.
5.2 Monitoramento de Saúde da Portaria (Heartbeat / SLA)
Como o sistema opera no modo Offline-First, relatórios podem ser gerados com dados defasados caso uma catraca perca a conexão local sem aviso. Para mitigar o problema operacional, cada envio em lote atualiza a flag ultimo_sincronismo da tabela de hardwares. Se, no momento da geração do relatório da cozinha, alguma catraca registrar inatividade de comunicação superior a 5 minutos, o e-mail incluirá um "Alerta de Dispositivo Incomunicável", relatando o nome da catraca e o horário do último lote recebido, para ciência do recebedor.
5.3 Privacidade por Agrupamento (K-Anonimato)
Para respeitar a LGPD no detalhamento de categorias no e-mail, aplica-se a regra do limiar mínimo. Se um grupo_refeicao registrar menos de 5 pessoas presentes, ele não será listado isoladamente; seu valor será somado a uma categoria genérica de camuflagem ("Outros"). Caso exista apenas um grupo no relatório inteiro com menos de 5 pessoas (o que permitiria inferir a identidade subtraindo do total em "Outros"), o valor numérico desse grupo será sumariamente omitido da visualização em texto, garantindo proteção total contra identificação indutiva.
6. Arquitetura Multi-Tenant (SaaS) e Gestão de Múltiplos Campi
6.1 Isolamento Lógico (Tenants)
O sistema é desenhado como uma plataforma "Multi-Tenant", o que significa que uma única instalação do software na nuvem pode atender a múltiplos campi (ex: IFCE Limoeiro do Norte, IFCE Tabuleiro do Norte). Cada campus opera como um "Controle de Acesso" (Tenant) isolado. Os dados de um campus são invisíveis para os demais. Dentro do mesmo Tenant, o campus pode possuir múltiplos "Endereços/Unidades" interligados, permitindo que os usuários transitem livremente entre os prédios do mesmo campus com o mesmo cartão. Um aluno que visitar um campus totalmente diferente (outro Tenant) deverá receber um cartão de visitante.
6.2 Gestão de Identidade e Papéis (RBAC - Role-Based Access Control)
O acesso ao sistema web é atrelado ao e-mail institucional do servidor. Ao logar, o usuário visualiza apenas os "Controles de Acesso" aos quais foi convidado. Cada membro dentro de um Controle possui um papel restrito:
7. Contingências de Acesso (Sem Cartão Físico)
Para garantir o fluxo contínuo e a exatidão das métricas sem prejudicar o usuário que esqueceu ou perdeu o cartão, o sistema prevê duas camadas de contingência operacional na portaria: