# Background check e sanções

<https://unifokal.com/docs/modulos/background>

## Background check e sanções

Três módulos de **compliance** consultam o **CPF lido do documento** em fontes de sanção e antecedentes: `ofac_realtime` (lista OFAC SDN de sanções internacionais, com atestação datada da consulta e sem certidão em PDF), `antecedentes_cac` (Certidão de Antecedentes Criminais CAC/SINIC) e `mandados_interpol` (mandados de busca e apreensão BNMP/CNJ e alertas Interpol). Exigem Verificação de Identidade, Face Match e Liveness, pela mesma razão do PEP: o CPF consultado vem do documento, nunca digitado.

**Venda pausada hoje**: os três aparecem na tabela de preços e no `GET /v1/capabilities` com preço e status `coming_soon`, e não podem ser ligados num flow enquanto a entrega da fonte não for provada em produção. O estado vem do catálogo vivo, e esta página acompanha.

Como o `pep_sancoes`, **nunca reprovam sozinhos**: um hit sinaliza com evidência para **revisão humana** (nunca decline automático). Se a fonte não responder (indisponível), o módulo fica `pending` e **não é cobrado** (o`ofac_realtime` cobra sempre que a fonte responde, inclusive em nada consta, que é o produto: a evidência auditável).

**Sobre a certidão em PDF, e leia isto antes de programar contra o campo.** A certidão do `antecedentes_cac` e do `mandados_interpol` vive no S3, e o payload **nunca** leva o conteúdo em base64 nem a chave do objeto no bucket. O que ele leva, no campo `pdf_media_id`, é o **identificador da mídia** da certidão na verificação. Para abrir o PDF, chame `GET /v1/verifications/{id}/media` com a sessão do painel (papel owner ou admin): a lista devolve o item com esse mesmo `id`, `kind` igual a `compliance_certificate` e uma URL pré-assinada de vida curta, e o acesso fica registrado como toda visualização de mídia. A certidão segue o prazo de retenção da mídia da verificação e é apagada junto com ela, no pedido do titular, no vencimento do prazo e no encerramento da conta. `null` significa que não veio PDF da fonte, ou que o envio ao S3 falhou sem derrubar o veredito, que já está em `nada_consta`.

O `ofac_realtime` é um **add-on** que se soma ao `pep_sancoes` (traz a atestação datada da consulta e a busca por documento/passaporte mundial), não o substitui: em um flow com os dois, a afirmação OFAC aparece nas duas camadas.

```
// ofac_realtime: nada consta (aprovado, cobrado como evidência auditável)
{ "module": "ofac_realtime", "passed": true, "outcome": "approved", "score": 100,
  "data": { "sancionado": false, "flagged": false, "matched_by": "none",
            "encontrados": 0, "resultado": [], "lista_atualizada_em": "2026-06-15" } }

// ofac_realtime: correspondência na SDN (review COM evidência, NUNCA decline)
{ "module": "ofac_realtime", "passed": false, "outcome": "failed", "score": 40,
  "data": { "sancionado": true, "flagged": true, "matched_by": "document", "encontrados": 1,
            "resultado": [ { "uid": "SDN-12345", "nome": "FULANO DE TAL", "tipo": "Individual",
                             "lista": "SDN List", "programas": ["SDGT"], "nacionalidade": "BR" } ],
            "lista_atualizada_em": "2026-06-15" } }

// antecedentes_cac: certidão em PDF no S3 (pdf_media_id = o id da mídia, NUNCA base64)
{ "module": "antecedentes_cac", "passed": true, "outcome": "approved", "score": 100,
  "data": { "nada_consta": true, "flagged": false, "nr_protocolo": "SINIC-2026-000123",
            "pdf_media_id": "med_4Tz8" } }

// mandados_interpol: nada consta (aprovado)
{ "module": "mandados_interpol", "passed": true, "outcome": "approved", "score": 100,
  "data": { "mandados": [], "interpol": [], "nada_consta": true, "flagged": false,
            "nr_protocolo": "BNMP-2026-000456",
            "pdf_media_id": "med_9Qx2" } }

// mandados_interpol: mandado ATIVO no BNMP -> review COM evidência, NUNCA decline
// os arrays "mandados" e "interpol" são passthrough da fonte: as chaves de cada item
// vêm como o BNMP/CNJ e a Interpol as publicam, e podem variar entre registros.
{ "module": "mandados_interpol", "passed": false, "outcome": "failed", "score": 40,
  "data": { "mandados": [ { "id": "bnmp-8831", "tribunal": "TJSP",
                            "tipoPeca": "Mandado de Prisão", "status": "ativo",
                            "dataExpedicao": "2025-05-01", "recaptura": false } ],
            "interpol": [], "nada_consta": false, "flagged": true,
            "nr_protocolo": "BNMP-2026-000456", "pdf_media_id": null } }

// mandados_interpol: fonte indisponível -> pending, sem cobrança e SEM data
{ "module": "mandados_interpol", "passed": null, "outcome": "pending", "score": null, "data": {} }
```

Em sandbox o desfecho segue o sufixo do documento, como no resto do ambiente de testes, e a fonte paga nunca é chamada.
