# Forense de documento

<https://unifokal.com/docs/modulos/doc-forense>

## Forense de documento

O módulo `doc_forense` faz a **perícia do arquivo** da foto do documento que a Verificação de Identidade já capturou. Ele **não pede foto nova** e **não lê o conteúdo do documento**: quem lê é o `cpf_ocr`. 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.

```
// check_details do doc_forense: o laudo, não um score solto
{ "module": "doc_forense", "passed": false, "outcome": "failed", "score": 35,
  "data": { "verdict": "suspect",
            "media_type": "image",
            "bands": { "recapture": "strong", "splice": "weak", "provenance": "none" },
            "evidence": ["screen_recapture", "exif_stripped"],
            "findings": [ { "tag": "screen_recapture", "proves": "…", "does_not_prove": "…" } ],
            "regions": [ { "x": 0.12, "y": 0.41, "w": 0.22, "h": 0.09 } ],
            "measurable_facets": 4,
            "thresholds": { "suspect_min": 0.55 } } }
```

`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 não viajam no webhook de propósito: eles são ruído nosso, não decisão sua.

**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`.
