04 - PDF/A, Hash e veraPDF¶
Status: Implemented
Objetivo¶
Garantir que o artefato arquivístico seja um PDF/A-2b válido e que o hash oficial represente exatamente os bytes finais persistidos.
PDF/A¶
- O engine padrão de geração deve ser
compliance. - O engine
legacyso pode ser usado por configuração explícita e deve marcar o documento como nao conforme para preservação. - O PDF final deve declarar PDF/A-2b, conter output intent válido e XMP consistente.
- Qualquer pos-processamento que altere bytes deve ocorrer antes do hash oficial.
Hash¶
Hash oficial — sequência no EnfaseCloud.Scan (estação):
- gerar PDF;
- aplicar XMP e metadados;
- aplicar OCR pesquisável quando configurado;
- calcular SHA-256 sobre os bytes finais do artefato da estação;
- gravar hash no manifesto local.
A assinatura ICP-Brasil/PAdES não faz parte desta sequência na estação. Ela é aplicada pela WebApi na nuvem, após upload e persistência. O hash aqui calculado representa o artefato pré-assinatura. Quando assinado, o hash do artefato assinado é calculado e registrado separadamente pela WebApi.
Nunca calcular hash definitivo antes da ultima mutação do arquivo.
veraPDF¶
O sistema deve executar veraPDF para PDFs declarados como PDF/A.
Resultado esperado:
valid: arquivo aprovado no perfil exigido.invalid: arquivo reprovado com lista de erros.not_run: validador indisponivel ou etapa desativada.error: falha de execução.
Em produção, not_run nao deve ser tratado como conforme.
política de bloqueio¶
RequirePdfAForUpload=false: aceitar upload, registrar alerta e status.RequirePdfAForUpload=true: bloquear PDF invalido ou validação nao executada.- documentos digitalizados pelo Scan devem ser bloqueados se PDF/A nao for válido.
Aceite¶
- O SHA-256 gravado bate com os bytes finais.
- Um PDF/A-2b válido passa no veraPDF.
- Um PDF comum e marcado como invalido.
- A heuristica XMP nao substitui veraPDF em produção.
Implementação¶
Entregues (status: Implemented)¶
| Requisito | Implementação | Arquivo |
|---|---|---|
| PDF/A-2b via engine compliance | PdfComplianceService.ComposeFromPages + output intent sRGB |
Library/Services/PdfComplianceService.cs |
| Engine legacy por configuração | PdfGeneration:Engine=legacy no appsettings |
Scan/Scan/ScanCaptureService.cs |
| SHA-256 sobre bytes finais | SHA256.HashData(composed.PdfBytes) após ApplyConarqXmpMetadata |
Scan/Scan/ScanCaptureService.cs |
| XMP consistente com manifesto | ApplyConarqXmpMetadata com mcgi:hashValor |
Library/Services/PdfComplianceService.cs |
| TIFF G4 nativo para P&B | Driver PaperStream IP entrega TIFF G4 via TwainDirectCaptureService |
Scan/Scan/TwainDirectCaptureService.cs |
| TIFF LZW para cinza | ConvertToGrayscaleTiff via System.Drawing.EncoderParameters |
Scan/Scan/ScanCaptureService.cs |
| PNG para cor/auto | Mantido — iText embute como FlateDecode | Scan/Scan/ScanCaptureService.cs |
Pendente¶
| Requisito | Situação |
|---|---|
| veraPDF formal em produção | not_run — validador requer pipeline/host. RequirePdfAForUpload controla bloqueio. |