> 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 de 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": "Presentation attack detected",
      "category": "attack_detection"
    },
    {
      "code": "500",
      "result": "pass",
      "reason": "Poor front image quality",
      "category": "integrity"
    },
    {
      "code": "501",
      "result": "pass",
      "reason": "Poor back image quality",
      "category": "integrity"
    },
    {
      "code": "502",
      "result": "pass",
      "reason": "Identity mismatch between portrait and ghost image",
      "category": "biometric"
    },
    {
      "code": "503",
      "result": "pass",
      "reason": "Mismatch estimated age selfie vs portrait",
      "category": "logical"
    },
    {
      "code": "504",
      "result": "pass",
      "reason": "Mismatch estimated sex selfie vs portrait",
      "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 por 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`. Só é incluído quando `status = COMPLETED`.                    |
| `rejectionReason` | Código de razão do catálogo de 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 razão do catálogo de 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 razão (`rejectionReason` / `diagnostics[].code`)

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

* **Geral.** O campo `diagnostic` (`APROVADO` / `RECUSADO`) é o veredito global da transação, e `rejectionReason` é o **código geral** que resume o motivo da recusa quando `diagnostic = DECLINED`.
* **Granular.** Cada linha de `diagnostics[]` é uma **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).

Esses 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 suportadas para a imagem frontal                       | integrity         |
| 107  | Dimensões não suportadas para a imagem traseira                      | integrity         |
| 108  | Proporção não suportada para a imagem frontal                        | integrity         |
| 109  | Proporção não suportada para a imagem traseira                       | integrity         |
| 110  | Profundidade não suportada para a imagem frontal                     | integrity         |
| 111  | Profundidade não suportada 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 suportada                | unsupported       |
| 310  | País Fast-Auto-Screening não suportado                               | unsupported       |
| 320  | Pontuação de baixa confiança do Fast-Auto-Screening                  | low\_confidence   |
| 330  | Timeout enquanto aguardava o serviço de OCR                          | processing        |
| 331  | Erro ao chamar o pipeline de OCR                                     | processing        |
| 332  | Incompatibilidade entre a VIZ e os campos da MRZ                     | logical           |
| 340  | Incompatibilidade da data de nascimento da VIZ com a MRZ             | logical           |
| 341  | Incompatibilidade do país da VIZ com a MRZ                           | logical           |
| 342  | Incompatibilidade do tipo de documento da VIZ com a MRZ              | logical           |
| 343  | Incompatibilidade do número do documento da VIZ com a MRZ            | logical           |
| 344  | Incompatibilidade da data de validade da VIZ com a MRZ               | logical           |
| 345  | Incompatibilidade dos nomes próprios da VIZ com a MRZ                | logical           |
| 346  | Incompatibilidade da nacionalidade da VIZ com a MRZ                  | logical           |
| 347  | Incompatibilidade dos segundos dados opcionais da VIZ com a MRZ      | logical           |
| 348  | Incompatibilidade dos dados opcionais da VIZ com a MRZ               | logical           |
| 349  | Incompatibilidade do sexo da VIZ com a MRZ                           | logical           |
| 350  | Incompatibilidade do sobrenome da VIZ com 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 da idade estimada da selfie vs. retrato            | logical           |
| 504  | Incompatibilidade do sexo estimado da selfie vs. retrato             | logical           |
| 505  | Incompatibilidade da idade estimada do retrato vs. MRZ               | logical           |
| 506  | Incompatibilidade do sexo estimado do retrato vs. MRZ                | logical           |
| 600  | Validação escalada recusada                                          | escalated\_review |
| 601  | Validação escalada sinalizada para revisão manual                    | escalated\_review |
| 602  | Validação escalada com timeout                                       | 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 recusa 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 contraste 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 coincidê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 coincidê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`; `rejectionReason` por si sós. **Códigos 600-603** correspondem a uma recusa, revisão, expiração ou abandono durante uma verificação adicional escalada quando a análise inicial não é conclusiva.
{% endhint %}

### Recusa 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`): recusa genuína por indícios de fraude. Inclui múltiplos documentos ou ataques de apresentação/manipulação (112, 113, 160, 161) e coincidê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 puro de qualidade nem um ataque explícito. Inclui inconsistências de MRZ e de contraste 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.                        |
