Forense de documento
O módulodoc_forensics faz a perícia dos arquivos dos documentos que o fluxo já capturou: o documento de identidade, o documento da empresa e o comprovante de endereço. Ele não pede nenhum arquivo novo e não lê o conteúdo dos documentos: quem lê é o módulo de leitura de cada um (cpf_ocr, cnpj_ocr e address_ocr). Por isso ele exige no fluxo a leitura do documento de identidade ou a do documento da empresa, e cabe também num fluxo só de empresa. O que ele analisa é o que o arquivo declara sobre si mesmo (a ferramenta que o gerou, as datas, as revisões anexadas de um PDF, os metadados da imagem) e o que a compressão revela: recaptura de tela, sinais de recorte e colagem, e a presença de um manifesto declarando mídia gerada por modelo.
O que ele não é: documentoscopia. Marca d’água, microtexto e holograma são elementos do documento físico, e este módulo não os confere. Um achado forte nunca reprova sozinho: leva a verificação para review com o laudo, e o laudo diz o que cada sinal prova e o que ele não prova. Editar um PDF num site de juntar páginas é comum e legítimo, e aparece como contexto, não como acusação.
Um laudo, um bloco por documento. data.verdict é o veredito do laudo inteiro: review se qualquer documento pediu revisão, indeterminate se nenhum pediu e algum não pôde ser periciado, clean se todos saíram limpos. As chaves do topo (bands, evidence, findings, regions, media_type, measurable_facets) são as do documento que decidiu o veredito, e data.documents[] traz o mesmo laudo para cada documento periciado, com document igual a identity, company ou address. As bandas são a, b e c, da mais forte para o contexto.
regions vem em coordenadas normalizadas (0 a 1), para você desenhar sobre a mesma imagem na sua tela de revisão. measurable_facets é o que separa limpo de não consegui medir: arquivo sem metadado nenhum não é arquivo inocente nem culpado, é arquivo sem evidência, e o laudo diz isso. Os blocos brutos de calibração e a régua de cada achado não viajam no webhook de propósito: o laudo diz o que foi achado e o que isso prova, não onde fica o nosso corte.
Prazo do laudo. As medidas do arquivo ficam disponíveis por 180 dias contados da verificação. Depois disso, a consulta pelo painel, a reemissão e a exportação trazem o verdict, o media_type e as measurable_facets, com bands, evidence, findings, regions e documents vazios e evidence_expired: true (antes do prazo ele vem false, sempre presente). Lista vazia com evidence_expired: true quer dizer que o laudo saiu no prazo, nunca que o arquivo estava limpo. Guarde no recebimento do webhook o que precisar guardar por mais tempo.
Origem assinada. Quando o arquivo carrega um manifesto de proveniência assinada, no padrão aberto C2PA (versão 2.4 da especificação), o laudo diz o estado dele em evidence e em findings: c2pa_trusted_origin (o manifesto está íntegro e a assinatura encadeia até a lista oficial de confiança da C2PA), c2pa_signature_invalid (o arquivo mudou depois de assinado, ou a assinatura não confere) e c2pa_manifest_present (há manifesto, sem cadeia até a lista oficial, e ele vale como ausente). Origem confiável prova de onde o arquivo veio, não que o documento fotografado é verdadeiro; e recorte, redimensionamento e reenvio por aplicativo também quebram a assinatura, por isso o estado é evidência para quem revisa, nunca uma acusação. O manifesto que declara mídia gerada ou editada por modelo generativo sai como c2pa_ai_generated_declared ou c2pa_ai_composite_declared.