# Dados cadastrais entregues

<https://unifokal.com/docs/modulos/dados-cadastrais>

## Dados cadastrais entregues

O módulo `dados_cadastrais` é diferente de todos os anteriores: ele **não faz consulta nenhuma**. Ele pega o que os tiers `cpf_*` do mesmo flow já trouxeram e entrega **quatro campos, sempre os mesmos quatro**, com o registro de finalidade do tratamento ao lado. Sem um tier `cpf_*` no flow não há o que entregar. É o único módulo desta família com **contrato fechado**: aqui você pode escrever um parser estrito.

```
// dados_cadastrais: quatro campos, e o registro de finalidade
{ "module": "dados_cadastrais", "passed": true, "outcome": "approved", "score": 100,
  "data": {
    "delivered": { "name": "JOÃO SILVA",
                   "birth_date": "1992-11-04",        // ISO aqui (DD/MM/AAAA nos tiers cpf_*)
                   "registration_status": "regular",  // valor CRU da fonte, não um enum nosso
                   "deceased": false },               // null = NÃO MEDIDO, nunca "vivo"
    "purpose": { "finalidade": "identity_verification",
                 "controller": "client", "operator": "unifokal",
                 "legal_basis": "controller_art_7", "minimization": "art_6_iii",
                 "delivered_fields": ["name","birth_date","registration_status","deceased"],
                 "withheld_fields": ["filiacao","genero","endereco","contatos","empresas","obito_ano"],
                 "policy_version": "cadastral-delivery@1" },
    // QUAIS tiers sustentaram os campos acima: prova de diligência, nunca dado do titular
    "coverage": ["cpf_receita"] } }

// nenhum tier sustentou nenhum dos quatro campos: NÃO entregue, e o módulo sai do preço
{ "module": "dados_cadastrais", "passed": null, "outcome": "pending", "score": 0,
  "data": { "delivered": null, "purpose": { "…": "idêntico ao acima" }, "coverage": [] } }
```

**Três leituras que evitam erro.** Primeira: `deceased: null` não é `false`. `null` quer dizer que o tier comprado não carregava o campo de óbito, ou seja **não medimos**, e nunca "confirmamos que está vivo". Segunda: `registration_status` é o valor **cru da fonte**, com a capitalização dela (`Regular`, `Suspensa`, `Titular Falecido`), e vem `null` quando o tier comprado não traz situação, que é o caso do `cpf_empresas`. Terceira: o bloco `purpose` viaja **mesmo quando `delivered` é `null`**, porque ele é o registro de **finalidade e minimização** do tratamento, não a prova de que houve entrega. Ele é constante por construção, então não o leia como configuração da sua conta: `withheld_fields` é a lista do que decidimos **não** entregar neste módulo, e ela é a mesma para todo mundo.

Cada um dos quatro campos é resolvido **independentemente**, varrendo os tiers do flow e ficando com o primeiro valor não nulo. Por isso `coverage` pode listar mais de um módulo: não existe um tier "vencedor" único, existe o primeiro que respondeu **por campo**. E `coverage` traz nome de **módulo**, nunca dado do titular.
