﻿# AFD — Arquivo Fonte de Dados (projeto técnico)

**Módulo:** REP-P apenas (`desktop/src/RepP/AfdBuilder.php`)  
**Fonte de dados:** exclusivamente `rep_p_marks` + `rep_p_events` (+ cabeçalho/trailer).  
**Proibido:** gerar a partir de `time_punches`, espelho, AEJ ou tratamentos PTRP.

## Requisitos de arquivo

- Texto, 1 registro por linha, CRLF (`\r\n`), sem linhas em branco
- Ordenação por NSR ascendente
- Codificação e posições conforme **leiaute oficial vigente** (conferir no Anexo/INPI na implementação)
- Nome do arquivo: padrão oficial incluindo número INPI (só dígitos quando exigido)
- Última indicação: `ASSINATURA_DIGITAL_EM_ARQUIVO_P7S` (campo completo conforme leiaute)
- Assinatura destacada: `{nome-completo-afd}.p7s` (CAdES)
- Download preferencial: ZIP com `.txt` + `.p7s`

## Registro tipo 7 (marcação)

Campos mínimos a persistir em `rep_p_marks` antes da exportação:

| Campo | Origem |
|-------|--------|
| NSR | `rep_p_nsr_counters` |
| Tipo | constante `7` |
| Data/hora marcação | `marked_at` formatado |
| CPF empregado | snapshot dígitos |
| Data/hora gravação | `recorded_at` |
| Coletor | `01`–`05` |
| On-line/off-line | flag |
| Hash SHA-256 | `MarkHasher` |

## CRC-16

- Algoritmo: CRC-16 CCITT-TRUE / KERMIT
- Vetor: entrada `123456789` → hex `2189`
- Gravar 4 caracteres hex sem `0x`
- Teste automatizado obrigatório em `tests/RepP/AfdCrc16Test.php`

## Validador interno (`AfdValidator`)

Antes do download oficial:

1. Contagem de linhas / tipos  
2. Tamanhos e posições  
3. NSR sequência sem lacuna no intervalo exportado (lacunas históricas pré-cutover: relatório)  
4. Duplicidades  
5. CPF / datas / timezone  
6. CRC onde aplicável  
7. Cadeia SHA-256 tipo 7  
8. Trailer e literal P7S  
9. Nome + INPI preenchido  

Sem INPI ou sem certificado válido em `prod`: bloquear exportação **oficial**; permitir “AFD de teste” rotulado e sem status conforme.

## ACL

- Permissão dedicada `generate_afd`
- Sempre escopo `tenant_id` + `establishment_id` (CNPJ)
- Log em `rep_p_exports` + `compliance_audit_log`

## Compatibilidade

- Página nova; não alterar fluxos de espelho/CSV existentes
- Feature flag `rep_p_official_export`
