> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/api-rest/midapi-v2/daf/respuesta-de-resultado.md).

# Resposta do resultado

Quando a transação está no estado `COMPLETED`, a resposta de `GET /v2/daf/{transactionId}` inclui o diagnóstico completo:

#### Exemplo de resposta

```json
{
  "transactionId": "1c7d...e9",
  "status": "COMPLETED",
  "diagnostic": "DECLINED",
  "rejectionReason": 160,
  "diagnostics": [
    {
      "code": "160",
      "result": "fail",
      "reason": "Ataque de apresentação detectado",
      "category": "attack_detection"
    },
    {
      "code": "500",
      "result": "pass",
      "reason": "Baixa qualidade da imagem frontal",
      "category": "integrity"
    },
    {
      "code": "501",
      "result": "pass",
      "reason": "Baixa qualidade da imagem traseira",
      "category": "integrity"
    },
    {
      "code": "502",
      "result": "pass",
      "reason": "Incompatibilidade de identidade entre o retrato e a imagem fantasma",
      "category": "biometric"
    },
    {
      "code": "503",
      "result": "pass",
      "reason": "Incompatibilidade entre a idade estimada da selfie e o retrato",
      "category": "logical"
    },
    {
      "code": "504",
      "result": "pass",
      "reason": "Incompatibilidade entre o sexo estimado da selfie e o retrato",
      "category": "logical"
    }
  ],
  "ocr": {
    "mrz": {
      "documentType": "ID",
      "issuingState": "NIC",
      "documentNumber": "6191000E",
      "nationality": "NIC",
      "dateOfBirth": "2003-02-14",
      "expiryDate": "2029-11-20",
      "sex": "M",
      "surname": "ROMERO LOPEZ",
      "givenNames": "ELVIN ANTONIO",
      "mrzValid": true
    },
    "viz": {
      "documentClassification": ["NIC-00-IDC-2017-001-01-01"],
      "vizType": "VIZ_similar_to_ID_document"
    }
  },
  "timestamp": "2026-06-26T12:00:05.000Z"
}
```

{% hint style="info" %}
Os campos opcionais (`diagnostic`, `rejectionReason`, `diagnostics`, `ocr`, `failureReason`) são omitidos da resposta quando não se aplicam, em vez de serem enviados com o valor `null`. Por exemplo, um `diagnostic = APPROVED` nunca inclui `rejectionReason`. As linhas de `diagnostics[]` são resultados independentes para cada verificação (`result = pass` ou `fail`): pode haver linhas com `result = fail` mesmo quando o diagnóstico global é `APROVADO`, se essa verificação específica não foi determinante para o resultado final. Quando `status = FAILED`, a resposta inclui apenas `transactionId`, `status`, `failureReason` e `timestamp`.
{% endhint %}

### Campos principais

| Campo             | Descrição                                                                               |
| ----------------- | --------------------------------------------------------------------------------------- |
| `diagnostic`      | `APROVADO` \| `RECUSADO`. Incluído somente quando `status = COMPLETED`.                 |
| `rejectionReason` | Código de motivo do catálogo DAF, preenchido somente se `diagnostic = DECLINED`.        |
| `diagnostics[]`   | Detalhe das validações individuais executadas (`code`, `result`, `reason`, `category`). |
| `ocr.mrz`         | Dados extraídos da zona de leitura mecânica (MRZ) do documento.                         |
| `ocr.viz`         | Classificação do documento a partir da sua zona visual (VIZ).                           |

### diagnostics

| Campo      | Tipo   | Descrição                                                                                                                                                                           |
| ---------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `code`     | string | Código de motivo do catálogo DAF.                                                                                                                                                   |
| `result`   | string | `pass` \| `fail`. Resultado dessa validação específica.                                                                                                                             |
| `reason`   | string | Descrição legível da validação.                                                                                                                                                     |
| `category` | string | Agrupamento temático: `input`, `integrity`, `logical`, `biometric`, `attack_detection`, `unsupported`, `low_confidence`, `processing`, `block_list`, `escalated_review`, `unknown`. |

### Catálogo de códigos de motivo (`rejectionReason` / `diagnostics[].code`)

Convém distinguir dois níveis de leitura do resultado:

* **Geral.** O campo `diagnostic` (`APROVADO` / `RECUSADO`) é o veredicto global da transação, e `rejectionReason` é o **código geral** que resume o motivo da rejeição quando `diagnostic = DECLINED`.
* **Granular.** Cada linha de `diagnostics[]` é um **sinal individual** (`code` + `result = pass|fail`), cujo `code` provém deste mesmo catálogo. Pode haver sinais `fail` mesmo com um diagnóstico `APROVADO`, e sinais que acompanham qualquer resultado (ver códigos 500-506).

Estes códigos são estáveis. Recomenda-se tratá-los como um catálogo fechado e consultar esta tabela para apresentar mensagens ao usuário final.

| code | reason                                                               | category          |
| ---- | -------------------------------------------------------------------- | ----------------- |
| 100  | Imagem frontal do documento ausente                                  | input             |
| 101  | Imagem traseira do documento ausente                                 | input             |
| 102  | Documento frontal não detectado                                      | integrity         |
| 103  | Documento traseiro não detectado                                     | integrity         |
| 104  | Erro ao carregar a imagem frontal                                    | input             |
| 105  | Erro ao carregar a imagem traseira                                   | input             |
| 106  | Dimensões não compatíveis para a imagem frontal                      | integrity         |
| 107  | Dimensões não compatíveis para a imagem traseira                     | integrity         |
| 108  | Proporção de aspecto não compatível para a imagem frontal            | integrity         |
| 109  | Proporção de aspecto não compatível para a imagem traseira           | integrity         |
| 110  | Profundidade não compatível para a imagem frontal                    | integrity         |
| 111  | Profundidade não compatível para a imagem traseira                   | integrity         |
| 112  | Vários documentos detectados na imagem frontal                       | attack\_detection |
| 113  | Vários documentos detectados na imagem traseira                      | attack\_detection |
| 120  | Documento anulado ou danificado                                      | integrity         |
| 130  | Hashes inválidos da MRZ do documento                                 | logical           |
| 131  | Documento expirado                                                   | logical           |
| 132  | MRZ do documento não detectada                                       | logical           |
| 133  | Datas da MRZ do documento inconsistentes                             | logical           |
| 134  | Formato inválido da MRZ do documento                                 | logical           |
| 150  | Foto do documento ausente                                            | biometric         |
| 160  | Ataque de apresentação detectado                                     | attack\_detection |
| 161  | Ataque de manipulação detectado                                      | attack\_detection |
| 170  | Rosto da selfie não detectado                                        | integrity         |
| 171  | Incompatibilidade de identidade entre o retrato e a imagem da selfie | biometric         |
| 200  | Rosto encontrado na lista global de bloqueio                         | block\_list       |
| 201  | Rosto encontrado na lista de bloqueio da plataforma                  | block\_list       |
| 300  | Versão do documento Fast-Auto-Screening não compatível               | unsupported       |
| 310  | País Fast-Auto-Screening não compatível                              | unsupported       |
| 320  | Pontuação de confiança baixa do Fast-Auto-Screening                  | low\_confidence   |
| 330  | Timeout durante a espera pelo serviço OCR                            | processing        |
| 331  | Erro ao chamar o pipeline OCR                                        | processing        |
| 332  | Incompatibilidade entre VIZ e os campos da MRZ                       | logical           |
| 340  | Incompatibilidade entre a data de nascimento da VIZ e a MRZ          | logical           |
| 341  | Incompatibilidade entre o país da VIZ e a MRZ                        | logical           |
| 342  | Incompatibilidade entre o tipo de documento da VIZ e a MRZ           | logical           |
| 343  | Incompatibilidade entre o número do documento da VIZ e a MRZ         | logical           |
| 344  | Incompatibilidade entre a data de validade da VIZ e a MRZ            | logical           |
| 345  | Incompatibilidade entre os nomes da VIZ e a MRZ                      | logical           |
| 346  | Incompatibilidade entre a nacionalidade da VIZ e a MRZ               | logical           |
| 347  | Incompatibilidade entre os segundos dados opcionais da VIZ e a MRZ   | logical           |
| 348  | Incompatibilidade entre os dados opcionais da VIZ e a MRZ            | logical           |
| 349  | Incompatibilidade entre o sexo da VIZ e a MRZ                        | logical           |
| 350  | Incompatibilidade entre o sobrenome da VIZ e a MRZ                   | logical           |
| 500  | Baixa qualidade da imagem frontal                                    | integrity         |
| 501  | Baixa qualidade da imagem traseira                                   | integrity         |
| 502  | Incompatibilidade de identidade entre o retrato e a imagem fantasma  | biometric         |
| 503  | Incompatibilidade entre a idade estimada da selfie e o retrato       | logical           |
| 504  | Incompatibilidade entre o sexo estimado da selfie e o retrato        | logical           |
| 505  | Incompatibilidade entre a idade estimada do retrato e a MRZ          | logical           |
| 506  | Incompatibilidade entre o sexo estimado do retrato e a MRZ           | logical           |
| 600  | Validação escalada recusada                                          | escalated\_review |
| 601  | Validação escalada sinalizada para revisão manual                    | escalated\_review |
| 602  | Tempo esgotado na validação escalada                                 | escalated\_review |
| 603  | Validação escalada não concluída                                     | escalated\_review |
| 999  | Validação recusada                                                   | unknown           |

{% hint style="info" %}
**Códigos 100-171 e 300-350** acompanham uma rejeição ou um resultado inconclusivo: entradas ausentes ou ilegíveis (`input`), problemas de integridade/qualidade do documento (`integrity`), inconsistências lógicas de MRZ e de comparação VIZ↔MRZ (`logical`), ataques de apresentação ou manipulação (`attack_detection`), resultados do *fast auto-screening* de versão/país e confiança (`unsupported` / `low_confidence`) e erros do próprio pipeline de OCR (`processing`). **Códigos 200/201** indicam uma correspondência na lista de bloqueio de rostos, global ou da própria plataforma. **Códigos 500-506** são sinais de verificação informativos (qualidade de imagem e correspondências biométricas de idade/sexo entre selfie, retrato e MRZ): aparecem como linhas de `diagnostics[]` (`result = pass` ou `fail`) e podem acompanhar **qualquer** estado, incluindo `APROVADO`; não são usados como `rejectionReason` por si só. **Códigos 600-603** correspondem a uma rejeição, revisão, expiração ou abandono durante uma verificação adicional escalada quando a análise inicial é inconclusiva.
{% endhint %}

### Rejeição por qualidade vs detecção de fraude

Nem todos os `RECUSADO` significam a mesma coisa. A `category` de cada código permite distinguir três situações e comunicar ao usuário final a mensagem adequada:

* **Problema de captura ou qualidade** (categorias `input` e `integrity`): a imagem não é utilizável ou o documento não é detectado corretamente. **Não é uma acusação de fraude.** Inclui entradas ausentes/ilegíveis (100, 101, 104, 105) e problemas de integridade/qualidade (102, 103, 106-111, 120, 170, 500, 501). Ação típica: solicitar uma nova captura com melhor qualidade.
* **Sinal de fraude ou ataque** (categorias `attack_detection` e `block_list`): rejeição genuína por indícios de fraude. Inclui vários documentos ou ataques de apresentação/manipulação (112, 113, 160, 161) e correspondências na lista de bloqueio de rostos (200, 201).
* **Inconsistência de dados ou biometria** (categorias `logical` e `biometric`): os dados não são coerentes entre si, sem ser um problema puramente de qualidade nem um ataque explícito. Inclui inconsistências de MRZ e de comparação VIZ↔MRZ (130-134, 332, 340-350) e comparações biométricas (171, 502-506).

### Dados de OCR

| Campo (`ocr.mrz`)        | Descrição                                      |
| ------------------------ | ---------------------------------------------- |
| `documentType`           | Tipo de documento (por ex. `ID`, `PASSPORT`).  |
| `issuingState`           | País emissor (código ISO).                     |
| `documentNumber`         | Número do documento.                           |
| `nationality`            | Nacionalidade do titular.                      |
| `dateOfBirth`            | Data de nascimento.                            |
| `expiryDate`             | Data de validade do documento.                 |
| `sex`                    | Sexo registrado no documento.                  |
| `surname` / `givenNames` | Sobrenomes e nomes.                            |
| `mrzValid`               | `true` se a MRZ é válida (checksums corretos). |

| Campo (`ocr.viz`)        | Descrição                                                            |
| ------------------------ | -------------------------------------------------------------------- |
| `documentClassification` | Identificador(es) de classificação do modelo de documento detectado. |
| `vizType`                | Tipo de zona visual reconhecida no documento.                        |
