# Documento de viagem estrangeiro (MRZ)

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

## Documento de viagem estrangeiro (MRZ)

O módulo `doc_global` lê a **zona de leitura mecânica** (MRZ) de passaportes e de documentos de identidade em cartão, de qualquer país, no padrão internacional **ICAO 9303**. Ele **substitui a Verificação de Identidade** no flow (os dois leem a mesma foto do documento e são o mesmo passo de captura), e por isso não convivem no mesmo fluxo.

A prova que ele entrega é **aritmética**: cada dígito verificador impresso é recalculado, inclusive o **composto**, que é o que revela um documento com um campo alterado. Se a foto cortou a zona de leitura ou os dígitos não fecham por reflexo, **o titular reenvia a foto**: ninguém é reprovado por foto ruim. Se a zona não fecha consigo mesma, a verificação vai para `review` com o laudo do que bateu e do que não bateu, **nunca para recusa automática**. Documento vencido não reprova: a validade volta no resultado como informação, e o que fazer com um documento fora da validade é decisão da sua política.

```
// check_details do doc_global: o dado do documento COM a prova ao lado
{ "module": "doc_global", "passed": true, "outcome": "approved", "score": 95,
  "data": { "name": "ANA MARIA SOUZA", "surname": "SOUZA", "given_names": "ANA MARIA",
            "birth_date": "1990-04-12",
            "document": { "type": "P", "number": "FR1234567",
                          "valid_until": "2031-04-11", "issued_at": "2021-04-12",
                          "sex": "F",
                          "issuing_country": { "alpha3": "FRA", "name": "França" },
                          "nationality":     { "alpha3": "FRA", "name": "França" },
                          "mrz_format": "TD3", "mrz_valid": true,
                          "mrz_checks": { "document_number": true, "birth_date": true,
                                          "expiry_date": true, "composite": true },
                          "expired": false } } }
```

`expired` tem **três** estados de propósito: `true` (vencido), `false` (válido) e `null` (não deu para afirmar). `null` nunca é `false`: "não sei" e "está válido" são respostas diferentes. O **nome** vem da leitura visual e não é coberto por dígito verificador nenhum, então a MRZ nunca é autoridade sobre ele. O módulo **não lê o chip** do passaporte e **não confere elementos de segurança** do documento físico.

No sandbox, escolha o cenário pelos dois últimos dígitos do campo `document` do submit. Como este flow não lê CPF, é esse campo que carrega o sufixo: `00` aprova, `01` pede nova foto, `02`, `41` e `42` vão para `review`, `43` pede outro arquivo e `45` aprova com o passaporte vencido (`expired: true`). A lista completa está em Sandbox.
