lugsoft / afd-reader
Biblioteca PHP para leitura e interpretação de arquivos AFD de registro eletrônico de ponto, conforme Portaria 671.
Requires
- php: >=8.0
Requires (Dev)
- pestphp/pest: ^3.8
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Biblioteca PHP para leitura e interpretação de arquivos AFD (Arquivo Fonte de Dados) utilizados em sistemas de registro eletrônico de ponto (REP-C, REP-A e REP-P), conforme Portaria 671 da legislação brasileira.
A biblioteca foi desenvolvida com foco em:
- Simplicidade
- Performance
- Baixo consumo de memória
- Código limpo
- Facilidade de manutenção
- Integração com sistemas PHP
📋 Requisitos
PHP 8.2 ou superior
📦 Instalação
Instale via Composer:
composer require lugsoft/afd-reader
🚀 Início rápido
<?php require 'vendor/autoload.php'; use Lugsoft\AfdReader\AfdReader; $afd = new AfdReader('arquivo-afd.txt'); $all = $afd->getAll(); $employees = $afd->getEmployees(); $marks = $afd->getMarks(); $attendance = $afd->getAttendance(); print_r($attendance);
🧾 Tipos de registros
| Tipo | Chave de Retorno | Descrição |
|---|---|---|
| 1 | header | Cabeçalho do arquivo |
| 2 | companyChanges | Inclusão / alteração da empresa |
| 3 | marks | Marcação de ponto REP-C / REP-A |
| 4 | clockAdjustments | Ajuste do relógio |
| 5 | employeeChanges | Inclusão / alteração / exclusão de empregado |
| 6 | sensitiveEvents | Eventos sensíveis |
| 7 | marksRepP | Marcação de ponto REP-P |
| 9 | trailer | Totalizadores do arquivo |
| 99 | digitalSignature | Assinatura digital |
Métodos disponíveis
getAll()
Retorna todos os registros encontrados no arquivo AFD.
// exemplo $afd->getAll(); // exemplo retorno [ 'header' => [...], 'companyChanges' => [...], 'marks' => [...], 'clockAdjustments' => [...], 'employeeChanges' => [...], 'sensitiveEvents' => [...], 'markRepP' => [...], 'trailer' => [...], 'digitalSignature' => [...] ]
getType()
Retorna registros de um tipo específico.
Consulte os tipos de registros suportados.
// exemplo $afd->getType(3); // Exemplo retorno (tipo 3) [ [ 'nsr' => '000000001', 'dateTimeMark' => '2026-04-29 07:38:00', 'cpf' => '12345678901' ], [ 'nsr' => '000000002', 'dateTimeMark' => '2026-04-29 12:50:00', 'cpf' => '12345678901' ] ]
getEmployees()
Retorna funcionários indexados pelo CPF.`
// exemplo retorno [ '12345678901' => [ 'name' => 'Breno Costa', 'cpf' => '12345678901', 'active' => true, 'createdAt' => '2026-04-29 08:00:00' ] ]
getMarks()
Retorna marcações de ponto (tipo 3) com filtros opcionais.
// exemplo (filtros opcionais) $afd->getMarks([ 'cpf' => '12345678901', 'startDate' => '2026-04-01', 'endDate' => '2026-04-30', 'displayName' => true ]); // exemplo retorno [ [ 'cpf' => '12345678901', 'name' => 'Breno Costa', 'dateTimeMark' => '2026-04-29 08:00:00' ] ]
getAttendance()
Retorna marcações agrupadas por funcionário e data, com pares de entrada e saída e total trabalhado.
// exemplo (filtros opcionais) $afd->getAttendance([ 'cpf' => '12345678901', 'startDate' => '2026-04-01', 'endDate' => '2026-04-30', 'displayName' => true ]); // exemplo retorno [ [ 'cpf' => '12345678901', 'name' => 'Breno Costa', 'date' => '2026-04-29', 'marks' => [ ['07:38:00', '12:50:00'], ['13:38:00', '17:50:00'] ], 'workedSeconds' => 30480, 'workedTime' => '08:28:00' ] ]
📚 Referência
Documentação técnica utilizada como base para o desenvolvimento do projeto está disponível em:
🧪 Testes
Instalar dependências de desenvolvimento
composer install
Executar todos os testes
./vendor/bin/pest
ou
composer test
🤝 Contribuindo
Pull Requests são bem-vindos.
📄 Licença
MIT