Trabalho Por Equipe DevBras

Capa do artigo: Arquivo AFD do ponto: como conferir se a marcação se defende numa fiscalização

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

  1. 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.
  2. Rode a conferência de NSR em cada arquivo e guarde a saída junto com ele.
  3. 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.
  4. 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.
  5. 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.
  6. 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?

Avalie este artigo

Referência: https://www.controlid.com.br/suporte/api_idclass_latest.html#58_get_afd