Arquivo AFD do ponto: como conferir se a marcação se defende numa fiscalização
Entenda o que o AFD registra, por que a sequência NSR é a prova de que nada sumiu e use um script para achar buracos e repetições antes que um fiscal ou um processo ache.
Uma ex-funcionária entra com ação pedindo horas extras de março. O RH exporta o AFD do relógio de ponto, e o arquivo de março tem um salto: depois da marcação 18.402 vem a 18.517. Cento e catorze registros não estão lá. A resposta curta: o AFD é o arquivo bruto que o registrador eletrônico de ponto gera com todas as marcações, em ordem, cada uma com um número sequencial (NSR) que nunca se repete nem volta. É essa sequência que prova que nada foi apagado. Antes de entregar o arquivo a alguém, confira se o NSR não tem buracos nem repetições, e guarde as exportações de um jeito que você consiga refazer.
Relatório de espelho de ponto, planilha colorida e tela do sistema de RH são derivados. Quando a jornada é questionada, o que vale é o registro original.
O que é o AFD e por que ele existe
As regras atuais sobre registro eletrônico de ponto estão na Portaria MTP 671/2021, que consolidou normas trabalhistas e substituiu a antiga Portaria 1510/2009. Ela prevê tipos de registrador, como o REP-C, o equipamento convencional, o REP-A, alternativo, que depende de acordo coletivo, e o REP-P, que é um programa. E define o leiaute do AFD, o Arquivo Fonte de Dados.
A ideia do arquivo é simples: o equipamento grava cada evento de forma imutável e numerada. Marcação de entrada e saída, ajuste do relógio, inclusão ou alteração de empregado e de dados da empresa viram registros, cada um com o NSR seguinte. O arquivo tem um registro de cabeçalho no começo, identificando empresa e equipamento, e um de trailer no fim.
A portaria também prevê um arquivo de jornada gerado pelo programa de tratamento de ponto, o AEJ, que é onde ajustes, abonos e justificativas aparecem. A separação é intencional: correções nunca alteram o AFD. Elas são feitas no tratamento, com a marcação original preservada.
Lembre que a obrigação de registrar a jornada, pela CLT, vale para estabelecimentos com mais de 20 trabalhadores. Abaixo disso, o registro pode ser opcional, mas quem tem relógio eletrônico ainda depende do AFD para provar a jornada.
Por que a sequência NSR é a peça central
Um arquivo pode ter todas as linhas bem formatadas e ainda assim não provar nada, se faltam registros. O NSR é o que permite perceber a falta. Se as marcações vão de 18.402 para 18.517, aconteceu uma de três coisas:
- a exportação foi feita com um filtro de data ou de NSR e cortou parte do período;
- duas exportações foram juntadas à mão e uma parte ficou de fora;
- o equipamento ou o sistema que guarda os arquivos perdeu dados.
As duas primeiras se resolvem exportando de novo a partir do equipamento. A terceira é um problema sério, e quanto antes você descobre, mais chance tem de recuperar de um backup.
O contrário também acontece: o mesmo NSR aparece duas vezes. Quase sempre é importação repetida, quando o sistema de RH recebe o mesmo arquivo duas vezes e não deduplica. A chave correta para deduplicar é o identificador do equipamento mais o NSR, não o NSR sozinho, porque cada equipamento tem a própria sequência.
Como conferir um AFD antes de entregar
No leiaute do AFD, cada linha começa com o NSR em nove dígitos, seguido de um caractere com o tipo do registro; o tipo 1 é o cabeçalho e o tipo 9 é o trailer. Confirme isso na documentação do seu equipamento antes de rodar qualquer conferência. O restante da linha muda conforme o tipo e conforme a versão do leiaute, então para extrair data, hora e trabalhador use as posições exatas do leiaute que o seu equipamento segue, na documentação do fabricante e na portaria.
O script abaixo, em Node.js, não depende dessas posições. Ele lê o arquivo linha a linha, conta os registros por tipo e aponta saltos e repetições de NSR.
const fs = require('node:fs');
const readline = require('node:readline');
async function conferirAfd(caminho) {
const linhas = readline.createInterface({
input: fs.createReadStream(caminho, { encoding: 'latin1' }),
crlfDelay: Infinity,
});
const porTipo = {};
const vistos = new Set();
const problemas = [];
let anterior = null;
let numeroLinha = 0;
for await (const linha of linhas) {
numeroLinha++;
if (linha.trim() === '') continue;
const tipo = linha.charAt(9);
porTipo[tipo] = (porTipo[tipo] || 0) + 1;
if (tipo === '1' || tipo === '9') continue;
const nsrTexto = linha.slice(0, 9);
if (!/^[0-9]{9}$/.test(nsrTexto)) {
problemas.push('linha ' + numeroLinha + ': NSR ilegível "' + nsrTexto + '"');
continue;
}
const nsr = Number(nsrTexto);
if (vistos.has(nsr)) {
problemas.push('linha ' + numeroLinha + ': NSR ' + nsr + ' repetido');
} else if (anterior !== null && nsr !== anterior + 1) {
problemas.push('linha ' + numeroLinha + ': salto de NSR ' + anterior + ' para ' + nsr);
}
vistos.add(nsr);
anterior = nsr;
}
return { porTipo, problemas };
}
async function main() {
const caminho = process.argv[2];
if (!caminho) {
console.error('Uso: node conferir-afd.js arquivo-afd.txt');
process.exit(2);
}
try {
const { porTipo, problemas } = await conferirAfd(caminho);
console.log('Registros por tipo:', porTipo);
if (problemas.length === 0) {
console.log('Sequência de NSR sem buracos nem repetições.');
} else {
problemas.forEach((p) => console.log(p));
process.exitCode = 1;
}
} catch (erro) {
console.error('Não foi possível ler o arquivo:', erro.message);
process.exit(2);
}
}
main();
No arquivo de março do exemplo, a saída seria parecida com esta:
Registros por tipo: { '1': 1, '3': 18388, '4': 2, '5': 11, '9': 1 }
linha 18405: salto de NSR 18402 para 18517
O primeiro NSR do arquivo não precisa ser 1: se você exportou a partir de uma data, a sequência começa onde o filtro começou. O que não pode haver é buraco no meio. O script só compara cada NSR com o anterior; se o seu arquivo vier fora de ordem, ordene antes de concluir que há salto.
Passo a passo de uma rotina mensal
- Exporte o AFD completo de cada equipamento pelo meio que o fabricante oferece, seja porta USB fiscal, interface web ou API. Os fabricantes documentam a exportação, como a Control iD faz na documentação da API dos seus equipamentos.
- Rode a conferência de NSR em cada arquivo e guarde a saída junto com ele.
- Confira os registros de ajuste de relógio. Cada ajuste aparece no AFD. Muitos ajustes no mês indicam relógio com defeito ou alguém mexendo sem critério.
- Compare a hora do equipamento com uma fonte confiável, como o horário do celular sincronizado pela rede. Relógio dez minutos atrasado grava a jornada inteira com dez minutos a menos, e o problema de fuso e horário de verão é parente do descrito em fuso horário no PHP.
- Guarde o arquivo original sem edição, com nome que inclua equipamento e período, e uma soma de verificação como SHA-256 para provar que ele não mudou.
- Faça backup fora do servidor do RH e teste a restauração de vez em quando, como no guia de backup que restaura de verdade.
No Windows, a soma de verificação sai com Get-FileHash -Algorithm SHA256 afd-rep01-2026-03.txt. No Linux, com sha256sum afd-rep01-2026-03.txt.
Erros comuns
- Entregar o espelho de ponto no lugar do AFD. O espelho é derivado e editável; sem o arquivo original, a defesa da jornada fica fraca.
- Abrir o AFD no Excel e salvar. O programa pode remover zeros à esquerda e mudar a codificação, e o arquivo deixa de ser o original.
- Deduplicar só pelo NSR. Com dois equipamentos, marcações legítimas de um apagam as do outro.
- Corrigir marcação mexendo no arquivo. Ajuste se faz no tratamento de ponto, com justificativa; arquivo alterado perde valor como prova.
- Ignorar os ajustes de relógio. Horário errado no equipamento contamina todas as marcações até alguém perceber.
- Guardar só no equipamento. Se o relógio queima ou é trocado, o histórico vai junto.
Checklist
- Cada equipamento tem o AFD exportado e guardado todo mês.
- A sequência de NSR de cada arquivo foi conferida, sem buracos nem repetições.
- O sistema de RH deduplica por identificador do equipamento mais NSR.
- Os registros de ajuste de relógio do mês foram revisados.
- A hora do equipamento foi comparada com uma fonte confiável.
- Os arquivos originais têm soma SHA-256 registrada e cópia fora do servidor.
- Ajustes de jornada são feitos no tratamento, nunca no AFD.
Este guia trata do aspecto técnico do arquivo e não substitui a leitura da portaria vigente nem a orientação de um profissional de direito do trabalho. Agora exporte o AFD do último mês de um dos seus equipamentos: a sequência de NSR vai do primeiro ao último registro sem pular nenhum número?
Referência: https://www.controlid.com.br/suporte/api_idclass_latest.html#58_get_afd