> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Avisos e códigos de erro da verificação de identidade

> Conheça todos os avisos da verificação de identidade da Didit: causas, correções, recusas automáticas e códigos de adulteração.

## Visão geral

Os avisos no relatório de verificação de identidade sinalizam cada condição observada pela Didit durante a leitura e validação do documento. Ficam disponíveis no array `warnings[]` em cada item de `id_verifications[]` (consulte [Relatório de verificação de identidade](https://docs.didit.me/pt/core-technology/id-verification/report-id-verification.md)), com a estrutura descrita em [Modelos de dados — Objeto de aviso](https://docs.didit.me/pt/reference/data-models.md#objeto-de-aviso): `feature`, `risk`, `additional_data`, `log_type`, `short_description`, `long_description`, `node_id`.

Cada aviso tem três camadas:

1. **O código `risk`** — um identificador estável que pode utilizar para fazer correspondências no seu código.
2. **O `log_type`** — derivado da ação que a sua configuração atribui ao risco no momento da avaliação: **Recusar → `error`**, **Revisão → `warning`**, qualquer outra coisa → `information`.
3. **O impacto na decisão** — definido pelos grupos de risco configuráveis do fluxo. O mesmo código `risk` pode ser encaminhado para **Aprovar**, **Revisão** ou **Recusar**, dependendo de como a sua aplicação está configurada.

## Condições de recusa automática

Nos fluxos, os seguintes riscos fazem sempre com que o relatório de verificação de identidade (e a sessão) fique com o estado `Declined`. Não podem ser configurados:

| Risco | Acionador |
| - | - |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | O tipo de documento submetido não consta da lista de documentos permitidos da sua aplicação. `additional_data` inclui `issuing_state`, `document_type`, `document_subtype`, `document_region` e `document_region_with_subtype` para que possa ativar exatamente esse documento no seu fluxo. |
| `DOCUMENT_EXPIRED` | A data de validade do documento já tinha expirado no momento da captura. |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Não foi possível localizar nenhuma imagem de retrato no documento. |
| `ID_DOCUMENT_IN_BLOCKLIST` | O documento corresponde a uma entrada na lista de bloqueio da sua aplicação. |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | A selfie que a câmara frontal capturou durante a recolha do documento corresponde a um rosto presente na sua lista de bloqueio facial. |
| `AGE_BELOW_MINIMUM` | Apenas em fluxos adaptativos de verificação de idade: a idade extraída está abaixo do mínimo. |
| `AGE_NOT_DETECTED` | Apenas em fluxos adaptativos de verificação de idade: não foi possível extrair a idade a partir do documento. |

Para a **API OCR autónoma**, o conjunto de recusa incondicional é `DOCUMENT_EXPIRED`, `MINIMUM_AGE_NOT_MET`, `PORTRAIT_IMAGE_NOT_DETECTED`, `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED` e `PUBLIC_DOCUMENT_IMAGE_DETECTED`. Nos fluxos, a idade mínima é configurável (o valor predefinido é Recusar) e os três riscos de prova de vida do documento baseiam-se em limiares (ver abaixo).

Os riscos configuráveis dessa API aceitam `DECLINE` ou `NO_ACTION` como parâmetros do pedido, em vez de um veredito de Revisão. O único resultado de Revisão que pode devolver não é configurável: quando uma verificação solicitada de prova de vida do documento não gera uma pontuação utilizável, a resposta é `In Review` com um aviso `DOCUMENT_LIVENESS_NOT_COMPUTED` (consulte [Prova de vida do documento](#prova-de-vida-do-documento-adulteração)).

| Parâmetro do pedido | Riscos | Predefinição |
| - | - | - |
| `invalid_mrz_action` | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | `DECLINE` |
| `inconsistent_data_action` | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | `DECLINE` |
| `expiration_date_not_detected_action` | `EXPIRATION_DATE_NOT_DETECTED` | `NO_ACTION` |
| `critical_field_occlusion_action` | `CRITICAL_FIELD_OCCLUSION_DETECTED` | `DECLINE` |
| `document_or_personal_number_format_mismatch_action` | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` | `NO_ACTION` |

## Definições de verificação configuráveis

Na consola da Didit, os restantes riscos de identificação estão agrupados em definições que pode encaminhar para **Aprovar**, **Revisão** ou **Recusar** (por fluxo de verificação e por nó em fluxos com grafos):

| Grupo | Riscos | Ação predefinida |
| - | - | - |
| **Idade mínima** | `MINIMUM_AGE_NOT_MET` | Recusar |
| **Idade máxima** | `MAXIMUM_AGE_EXCEEDED` | Recusar |
| **Utilizador duplicado** | `POSSIBLE_DUPLICATED_USER` (ignorado quando o número do documento consta da sua lista de permissões de documentos) | Aprovar (informação) |
| **Código inválido** | `QR_NOT_DETECTED`, `BARCODE_NOT_DETECTED`, `QR_VALIDATION_FAILED`, `BARCODE_VALIDATION_FAILED` | Aprovar (informação) |
| **MRZ inválido** | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | Aprovar (informação) |
| **Inconsistência de dados** | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`, `DOCUMENT_SIDES_MISMATCH`, `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Aprovar (informação) |
| **Validação inválida** | `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`, `DOCUMENT_NUMBER_NOT_DETECTED`, `COULD_NOT_DETECT_DOCUMENT_TYPE`, `NAME_NOT_DETECTED`, `DATE_OF_BIRTH_NOT_DETECTED` | Revisão |
| **Incompatibilidade com os dados esperados** | `FULL_NAME_MISMATCH_WITH_PROVIDED`, `GENDER_MISMATCH_WITH_PROVIDED`, `DOB_MISMATCH_WITH_PROVIDED`, `COUNTRY_MISMATCH_WITH_PROVIDED`, `NATIONALITY_MISMATCH_WITH_PROVIDED`, `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Revisão |
| **Data de validade não detetada** | `EXPIRATION_DATE_NOT_DETECTED` | Aprovar (informação) |
| **Incompatibilidade do formato do número do documento ou do número pessoal** | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` (uma ação partilhada) | Revisão |
| **Campo crítico coberto** | `CRITICAL_FIELD_OCCLUSION_DETECTED` | Revisão |
| **Morada não processada** | `UNPARSED_ADDRESS` | Aprovar (informação) |
| **Qualidade da imagem** | `IMAGE_TOO_BLURRY`, `IMAGE_TOO_DARK`, `IMAGE_TOO_BRIGHT` (uma ação por risco) | Aprovar (informação) |
| **Documento sem retrato** | `DOCUMENT_HAS_NO_PORTRAIT` | Revisão |
| **Rosto duplicado na captura silenciosa** | `FRONT_CAMERA_DUPLICATED_FACE`, `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` (uma ação partilhada) | Aprovar (informação) |
| **Duplicado na captura silenciosa com um nome diferente** | `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` (apenas pode tornar o resultado de rosto duplicado mais rigoroso) | Revisão |
| **Duplicado na captura silenciosa com uma data de nascimento diferente** | `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` (apenas pode tornar o resultado de rosto duplicado mais rigoroso) | Revisão |

Os riscos de duplicados e da lista de bloqueio da captura silenciosa são provenientes da [Pesquisa facial na selfie tirada durante a captura do documento](https://docs.didit.me/pt/core-technology/face-search/overview.md#a-selfie-tirada-durante-a-captura-do-documento). A pesquisa é executada enquanto a **Pesquisa facial com captura silenciosa** (`document_selfie_face_search_enabled`) estiver ativada, o que corresponde à predefinição, e a Pesquisa facial não estiver desativada no passo de Prova de vida; caso contrário, nenhum destes seis riscos é gerado.

Duas famílias de riscos de identificação são **baseadas em limiares** em vez de opções de Aprovar/Revisão/Recusar:

* **Prova de vida do documento** — `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`. Cada tipo de fraude tem os seus próprios limiares de recusa e de revisão: pontuação abaixo do limiar de recusa → `error` + Recusada; abaixo do limiar de revisão → `warning` + Em análise; caso contrário, `information`.
* **Correspondência facial entre câmaras** — `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY`, regida por `document_selfie_portrait_match_decline_threshold` / `document_selfie_portrait_match_review_threshold`.

### Configurar limiares de prova de vida do documento

No editor de fluxos, estes limiares encontram-se no separador **Falsificação** do passo de Verificação de identidade, com um cartão por tipo de fraude: **Substituição do retrato**, **Cópia impressa** e **Captura de ecrã**.

Cada verificação atribui ao documento uma pontuação de `0` a `100` relativamente à sua autenticidade aparente. **Uma pontuação mais elevada significa que o documento tem maior probabilidade de ser genuíno.** Os dois valores num cartão dividem essa escala em três intervalos:

| Pontuação | Resultado |
| - | - |
| Abaixo do valor de **Recusar** | `error`, a sessão é Recusada |
| Igual ou superior ao valor de **Recusar** e inferior ao valor de **Revisão** | `warning`, a sessão passa para Em análise |
| Igual ou superior ao valor de **Revisão** | `information`, a verificação é aprovada |

Aumentar qualquer um dos valores torna a verificação mais rigorosa: mais sessões passam para o intervalo superior. Reduzir um valor permite que mais sessões avancem. No editor, o valor de Recusar não pode ultrapassar o valor de Revisão. Através da API, um valor de Recusar superior ao valor de Revisão remove o intervalo de Em análise.

Predefinições da plataforma, utilizadas quando um fluxo não define um valor:

| Tipo de fraude | Recusar abaixo de | Revisão abaixo de | Chaves de configuração do fluxo |
| - | - | - | - |
| Substituição do retrato | `35` | `70` | `document_liveness_portrait_replace_decline_threshold`, `document_liveness_portrait_replace_review_threshold` |
| Cópia impressa | `35` | `77` | `document_liveness_printed_copy_decline_threshold`, `document_liveness_printed_copy_review_threshold` |
| Captura de ecrã | `30` | `70` | `document_liveness_screen_replay_decline_threshold`, `document_liveness_screen_replay_review_threshold` |

Comece pelas predefinições e ajuste um valor de cada vez. Cada cartão apresenta a respetiva predefinição e um botão **Repor predefinição**, para que possa sempre voltar a ela. O editor também alerta sobre estas configurações:

* **Revisão a `100`.** Apenas uma pontuação perfeita é aprovada, pelo que quase todas as sessões passam para Em análise ou são recusadas.
* **Recusar a `100`.** Apenas uma pontuação perfeita evita uma recusa, pelo que quase todas as sessões são recusadas.
* **Ambos os valores a `0`.** Nenhuma pontuação é alguma vez assinalada, pelo que a verificação fica efetivamente desativada.

Definir ambos os valores para o mesmo número remove o intervalo de Em análise: uma pontuação abaixo dele é recusada e qualquer outra pontuação é aprovada.

Quando tanto **Cópia impressa** como **Captura de ecrã** assinalariam o mesmo documento, apenas `SCREEN_CAPTURE_DETECTED` é comunicado.

A correspondência facial entre câmaras utiliza a mesma lógica com uma diferença no limite: uma pontuação igual ao respetivo limiar de revisão ainda passa para Em análise.

Quatro riscos de identificação não são configuráveis nem dependentes de limiares. `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` é sempre encaminhado para **Revisão**: uma selfie que esteja próxima de um rosto presente na lista de bloqueio, sem constituir uma correspondência confirmada, deve ser avaliada por uma pessoa, nunca originando uma recusa automática nem sendo ignorada. `BARCODE_SIGNATURE_INVALID` é sempre encaminhado para **Revisão**. Só é acionado quando um código de barras contém a assinatura de uma autoridade emissora que falha a verificação criptográfica, pelo que não existe qualquer configuração na qual uma falsificação comprovada seja ignorada. `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` é sempre **informativo** e nunca afeta a decisão: comunica uma limitação do catálogo de documentos da Didit, e não uma propriedade do documento apresentado, pelo que não existe qualquer configuração na qual possa recusar ou colocar em revisão um titular legítimo.
`FRONT_CAMERA_CAPTURED_DOCUMENT` é sempre encaminhado para **Revisão**.
Só é acionado quando a captura da câmara frontal realizada durante a leitura do documento mostra um documento de identidade e nenhuma pessoa, garantindo que uma captura que nada indica sobre quem segurava o documento chega sempre a um operador humano.
É verificado sempre que a correspondência da selfie na captura de documentos (`is_document_selfie_portrait_match_enabled`) está ativada.

## Avisos gerados

Verificado em relação a `collect_ocr_logs`, ao fluxo de captura de documentos e a `process_ocr_logs_and_get_status`. As descrições curtas abaixo são as strings exatas de `short_description` devolvidas pela API.

### Reconhecimento e qualidade do documento

| Risco | Descrição curta | Causa | Gravidade |
| - | - | - | - |
| `COULD_NOT_RECOGNIZE_DOCUMENT` | Could not validate Document | O sistema não conseguiu confirmar a autenticidade ou a validade do documento submetido — frequentemente devido a má qualidade de imagem ou a um tipo de documento não suportado. Também é utilizado como recurso de contingência para falhas de processamento não reconhecidas. | Configurável — Invalid Validation, Review por predefinição |
| `COULD_NOT_DETECT_DOCUMENT_TYPE` | Could not detect document type | A frente do documento não corresponde a um modelo de documento oficial conhecido com elevada confiança, ou o motor de OCR não conseguiu classificar a família do documento (passaporte vs. documento de identificação vs. carta de condução). Um documento que contém dados válidos, mas cujo layout não corresponde a nenhum modelo oficial (um documento editado ou gerado por computador, ou um novo modelo ainda não suportado), é enquadrado aqui. Quando este aviso é acionado, `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` é suprimido (o tipo é desconhecido, pelo que "não suportado" seria contraditório). | Configurável — Invalid Validation, Review por predefinição |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Document not supported for your application | O tipo de documento reconhecido não consta da lista de permissões da aplicação. `additional_data` contém o país, o tipo de documento, o subtipo e o subtipo relativo à região. | `error` — **recusa automática** |
| `DOCUMENT_EXPIRED` | Document expired | No momento da captura: a data de validade do documento já passou (`error`, recusa automática). Pós-aprovação: a monitorização contínua de validade anexa este aviso com `log_type: "warning"` quando a data de um documento aprovado expira, e o estado do relatório passa a `Expired`. | `error` na captura; `warning` da monitorização |
| `DOCUMENT_SIDES_MISMATCH` | Document sides mismatch | As imagens da frente e do verso não pertencem ao mesmo documento. | Configurável — Data Inconsistency, information por predefinição |
| `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` | Back side not available for this document | O fluxo solicitou ambos os lados, a frente foi reconhecida e o catálogo de documentos da Didit não regista verso para esse documento específico, pelo que apenas a frente pôde ser capturada. A evidência do relatório é de apenas um lado. Não há qualquer problema com o documento apresentado, nunca é solicitado ao titular que o volte a digitalizar e uma nova leitura não adicionará um verso. `additional_data` contém o `front_document_name` reconhecido. | `information` — nunca afeta a decisão |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Portrait image not detected | Não foi possível localizar nenhuma foto de tipo passe num documento que deveria ter uma (adiado quando o utilizador carrega primeiro o lado sem foto). | `error` — **recusa automática** |
| `DOCUMENT_HAS_NO_PORTRAIT` | Document has no portrait | A família de documentos reconhecida nunca contém foto de tipo passe em nenhum dos lados (alguns títulos de residência, cartões de saúde, certificados de registo, cartões de identificação fiscal e um subconjunto de cartas de condução/documentos de identificação). Trata-se de um facto do catálogo sobre o tipo de documento e não de um problema de qualidade de imagem — tentar novamente a leitura do documento não alterará o resultado. | Configurável — Document Without Portrait, Review por predefinição |
| `IMAGE_TOO_BLURRY` / `IMAGE_TOO_DARK` / `IMAGE_TOO_BRIGHT` | Document image is too blurry / too dark / too bright | O filtro de qualidade de imagem rejeitou um carregamento (o utilizador é solicitado a tentar novamente). `additional_data` contém o `side` que falhou. Uma nova captura bem-sucedida limpa o aviso anterior; o filtro é ignorado na última tentativa permitida do utilizador para que este nunca fique bloqueado de forma definitiva. | Configurável — ação de Image Quality por risco, information por predefinição |

> [!NOTE]
>
> O fluxo de captura também pode rejeitar um carregamento com os códigos de feedback `IMAGE_RESOLUTION_TOO_LOW`, `DOCUMENT_NOT_FULLY_VISIBLE`, `IMAGE_QUALITY_TOO_LOW` e `DOCUMENT_OCCLUSION_DETECTED` (determina-se que um dedo ou objeto está fisicamente a cobrir texto impresso). Cada um solicita uma nova tentativa no SDK e é registado no relatório como o seu próprio risco, encaminhado pelas definições de Image Quality — `DOCUMENT_OCCLUSION_DETECTED` e `IMAGE_QUALITY_TOO_LOW` partilham a mesma ação. Descrevem a *captura*: uma nova tentativa bem-sucedida limpa o aviso. A questão de saber se um campo coberto deve afetar a decisão é tratada pelo aviso separado de integridade `CRITICAL_FIELD_OCCLUSION_DETECTED` abaixo, que é gerado no momento da decisão e é Review por predefinição.

> [!TIP]
>
> Se o seu fluxo baseia a identidade na Correspondência facial em vez da foto de tipo passe do documento, considere encaminhar **Document Without Portrait** para Decline — caso contrário, uma família de documentos sem foto chega à Correspondência facial sem nada com que comparar.

### Extração de campos

| Risco | Descrição curta | Causa | Gravidade |
| - | - | - | - |
| `NAME_NOT_DETECTED` | First name and/or last name not detected | Não foi possível extrair o primeiro nome e o apelido. A validação é dispensada quando o titular tem legitimamente apenas um nome (países onde é habitual ter um único nome, ou a própria MRZ contém apenas um nome) e pelo menos um valor de nome foi extraído. | Configurável — Invalid Validation, Review por predefinição |
| `DATE_OF_BIRTH_NOT_DETECTED` | Date of birth not detected | Não foi possível extrair a data de nascimento de um documento que deveria contê-la. | Configurável — Invalid Validation, Review por predefinição |
| `DOCUMENT_NUMBER_NOT_DETECTED` | Document number not detected | Não foi possível extrair o número do documento nem um número de identificação pessoal. | Configurável — Invalid Validation, Review por predefinição |
| `EXPIRATION_DATE_NOT_DETECTED` | Expiration date not detected | Não foi possível extrair a data de validade de um documento que deveria contê-la. | Configurável — Expiration Date Not Detected, information por predefinição |
| `INVALID_DATE` | Invalid Date | Uma data no documento (data de nascimento ou validade) não pode ser interpretada como uma data válida. No fluxo de captura atual, isto surge como um pedido para tentar novamente durante o carregamento e não como um aviso guardado; o código permanece no grupo de encaminhamento Invalid Validation e pode surgir em sessões mais antigas. | Configurável — Invalid Validation, Review por predefinição |
| `DOCUMENT_NUMBER_FORMAT_MISMATCH` | Incompatibilidade de formato do número do documento | O número do documento não corresponde ao formato esperado configurado para este tipo de documento. `additional_data` inclui `expected_format` e `extracted_value`. | Configurável — Incompatibilidade de formato, predefinição Revisão |
| `PERSONAL_NUMBER_FORMAT_MISMATCH` | Incompatibilidade de formato do número pessoal | O número pessoal não corresponde ao formato esperado configurado para este tipo de documento. | Configurável — Incompatibilidade de formato, predefinição Revisão |
| `CRITICAL_FIELD_OCCLUSION_DETECTED` | Um campo crítico do documento está tapado | A verificação de oclusão indicou que um campo impresso crítico estava fisicamente tapado na captura — um número de identificação, um nome, a data de nascimento ou a data de validade. Este é um sinal de integridade do documento, não de qualidade de captura: tapar os próprios números com os quais um relatório é reconciliado é assim que um documento censurado ou adulterado se apresenta. O valor lido para um campo tapado é descartado da extração em vez de ser devolvido como confirmado, pelo que o risco `*_NOT_DETECTED` correspondente costuma acompanhar este aviso. `additional_data` inclui os nomes dos campos tapados em `covered_fields`, e `covered_identifiers` quando um deles alimenta `document_number` ou `personal_number`. | Configurável — Campo crítico tapado, predefinição Revisão |

### MRZ, QR, código de barras

Os três riscos de MRZ são ignorados para tipos de documentos com MRZs reconhecidamente não fiáveis.

| Risco | Descrição curta | Causa | Gravidade |
| - | - | - | - |
| `MRZ_NOT_DETECTED` | MRZ não detetada | Não foi possível localizar a MRZ num documento que deveria ter uma. | Configurável — MRZ inválida, predefinição informação |
| `MRZ_VALIDATION_FAILED` | A MRZ não é válida | A validação de soma de verificação / formato da MRZ falhou. Frequentemente uma captura de baixa qualidade; pode indicar adulteração. | Configurável — MRZ inválida, predefinição informação |
| `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` | A MRZ e os dados extraídos do OCR apresentam discrepâncias | O conteúdo da MRZ não coincide com o OCR da VIZ (zona visual). Possível alteração. | Configurável — Inconsistência de dados, predefinição informação |
| `QR_NOT_DETECTED` | QR não detetado | Não foi possível localizar o código QR num documento que deveria ter um. | Configurável — Código inválido, predefinição informação |
| `QR_VALIDATION_FAILED` | A validação do QR falhou | Não foi possível validar o conteúdo do QR em relação ao resto do documento. | Configurável — Código inválido, predefinição informação |
| `BARCODE_NOT_DETECTED` | Código de barras não detetado | Não foi possível localizar o código de barras num documento que deveria ter um. | Configurável — Código inválido, predefinição informação |
| `BARCODE_VALIDATION_FAILED` | A validação do código de barras falhou | Não foi possível validar o conteúdo do código de barras em relação ao resto do documento. | Configurável — Código inválido, predefinição informação |
| `BARCODE_SIGNATURE_INVALID` | Assinatura do código de barras inválida | O código de barras possui uma assinatura digital da autoridade emissora e essa assinatura não passou na verificação - os dados no código de barras não são os dados que a autoridade assinou, o que aponta para um documento falsificado ou adulterado. Atualmente verificado para códigos de barras **2D-Doc franceses (ANTS)**, onde uma assinatura verificada permite à Didit promover campos sem necessitar de corroboração por MRZ; as assinaturas AAMVA (cartas de condução e documentos de identificação dos EUA/Canadá) são apenas detetadas e registadas, não sendo ainda aplicadas. | Fixo - Revisão (grupo de ação próprio `invalid_barcode_signature_action`; ainda não configurável via consola/API) |
| `DATA_INCONSISTENT` | Os dados de OCR no documento não são consistentes | Os dados extraídos de diferentes partes do documento não coincidem — tipicamente a frente e o verso do mesmo documento. | Configurável — Inconsistência de dados, predefinição informação |

> [!NOTE]
>
> A verificação de assinatura de código de barras abrange atualmente os cartões de identidade nacionais franceses, cujo código de barras 2D-Doc ANTS é assinado pela autoridade emissora. O `BARCODE_SIGNATURE_INVALID` é gerado apenas quando a própria verificação da assinatura rejeita o payload. Um código de barras sem assinatura, assinado por uma autoridade que ainda não conste no repositório de confiança da Didit, ou cuja assinatura não possa ser descodificada, é tratado como dados não autenticados e validado contra a MRZ e o texto impresso como anteriormente, sem gerar este risco.
>
> Os códigos de barras das cartas de condução dos EUA e do Canadá (AAMVA) não são verificados criptograficamente: a assinatura digital nesses casos é opcional e específica de cada jurisdição, e nenhuma jurisdição publica chaves de verificação, pelo que a Didit apenas deteta e regista se um payload possui uma assinatura; a assinatura em si nunca é verificada. As falhas de assinatura AAMVA não constituem um sinal de risco atualmente. Um payload AAMVA adulterado só surge como `BARCODE_VALIDATION_FAILED`, e apenas se a adulteração também fizer com que o código de barras discorde da MRZ ou dos dados impressos/OCR - um payload internamente consistente com uma assinatura falsificada passa sem qualquer sinal.
>
> Nunca é pedido ao utilizador que efetue uma nova captura em caso de `BARCODE_SIGNATURE_INVALID`: uma assinatura que não corresponda ao payload não pode ser corrigida tirando uma fotografia melhor.

### Correspondência de identidade

| Risco | Descrição curta | Causa | Gravidade |
| - | - | - | - |
| `ID_DOCUMENT_IN_BLOCKLIST` | Documento de identificação na lista de bloqueio | O documento corresponde a um documento na lista de bloqueio (mesma data de nascimento, país emissor e número exato do documento) ou a um número de documento manualmente colocado na lista de bloqueio. `additional_data` inclui a referência da sessão na lista de bloqueio. | `error` — **recusa automática** |
| `ID_DOCUMENT_IN_ALLOWLIST` | Documento de identificação na lista de permissões | O número do documento corresponde à sua lista de permissões de documentos, pelo que a ação para utilizadores duplicados foi ignorada. `additional_data` inclui o `document_number`. | `information` |
| `POSSIBLE_DUPLICATED_USER` | Possível utilizador duplicado de outra sessão | Outro documento na sua aplicação tem a mesma data de nascimento, o mesmo país emissor e um nome completo bastante semelhante — associado a um utilizador diferente (`vendor_data`), independentemente do estado dessa sessão. `additional_data` inclui a referência da sessão duplicada. | Configurável — Utilizador duplicado, predefinição informação |
| `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | O nome no documento difere de outros documentos aprovados | O nome neste documento difere de documentos aprovados anteriormente para o mesmo utilizador. Apenas gerado para contas com o protocolo Didit (UserKYC), não para sessões de API padrão. | Configurável — Inconsistência de dados, predefinição informação |
| `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Divergência de dados entre documentos de verificação de identidade | Dois documentos de identificação na mesma sessão divergem quanto ao nome / data de nascimento. | Configurável — Inconsistência de dados, predefinição informação |
| `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY` | A selfie durante a captura do documento não corresponde ao retrato do documento | O rosto capturado pela câmara frontal do utilizador durante a captura do documento não corresponde bem ao retrato no documento. | Baseado em limiares: `error` abaixo do limiar de recusa, `warning` no limiar de revisão ou abaixo dele |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | A selfie durante a captura do documento corresponde a um rosto na lista de bloqueio | O rosto numa selfie tirada pela câmara frontal durante a captura do documento corresponde com elevada confiança a um rosto na sua lista de bloqueio de rostos, quer esse rosto tenha sido adicionado a partir de uma verificação de prova de vida, da selfie de captura de documento de outra sessão ou por carregamento. O campo `additional_data` contém a referência da sessão na lista de bloqueio (`blocklisted_session_id`, `blocklisted_session_number`) quando o rosto bloqueado provém de uma sessão, e `face_image_source` (`front_image_camera_front` ou `back_image_camera_front`) para a selfie correspondente. | `error` — **recusa automática** |
| `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` | A selfie durante a captura do documento pode corresponder a um rosto na lista de bloqueio | O rosto numa selfie de captura de documento é semelhante a um rosto na sua lista de bloqueio de rostos, mas não o suficiente para ser uma correspondência confirmada. O mesmo `additional_data` que no caso anterior. | `warning` — **sempre Revisão** |
| `FRONT_CAMERA_DUPLICATED_FACE` | A selfie durante a captura do documento corresponde a um utilizador aprovado | O rosto na selfie tirada pela câmara frontal durante a captura do documento corresponde com elevada confiança ao rosto de um utilizador já aprovado na sua aplicação, pelo que a mesma pessoa pode estar a verificar-se novamente noutra conta. O campo `additional_data` contém a sessão correspondente (`duplicated_session_id`, `duplicated_session_number`) e `face_image_source` para a selfie correspondente. | Conforme **Rosto duplicado na captura silenciosa** (predefinição Aprovar, `information`) |
| `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` | A selfie durante a captura do documento pode corresponder a um utilizador aprovado | O rosto numa selfie de captura de documento é semelhante ao rosto de um utilizador já aprovado na sua aplicação, mas não o suficiente para ser uma correspondência confirmada. O mesmo `additional_data` que no caso anterior. | Conforme **Rosto duplicado na captura silenciosa** (predefinição Aprovar, `information`) |
| `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` | A selfie de captura de documento corresponde a um utilizador com um nome diferente | É gerado adicionalmente a `FRONT_CAMERA_DUPLICATED_FACE` quando o utilizador aprovado foi verificado com um nome diferente. O campo `additional_data` adiciona `name_match_score`; nunca inclui o nome do outro utilizador. | Conforme **Duplicado na captura silenciosa com um nome diferente** (predefinição Revisão, `warning`) |
| `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` | A selfie de captura de documento corresponde a um utilizador com uma data de nascimento diferente | É gerado adicionalmente a `FRONT_CAMERA_DUPLICATED_FACE` quando o documento de identificação do utilizador aprovado apresenta uma data de nascimento diferente. Um documento diferente da mesma pessoa (por exemplo, um passaporte após um cartão de cidadão), um documento renovado ou o mesmo número de documento do mesmo país não é sinalizado. O campo `additional_data` adiciona `mismatch_dimensions`, nunca os dados do documento do outro utilizador. | Conforme **Duplicado na captura silenciosa com uma data de nascimento diferente** (predefinição Revisão, `warning`) |
| `FRONT_CAMERA_CAPTURED_DOCUMENT` | A câmara frontal capturou um documento de identificação em vez do utilizador | O fotograma da câmara frontal obtido enquanto o documento era digitalizado mostra um documento de identificação (por exemplo, um cartão segurado em frente à câmara) e nenhuma pessoa. A correspondência da selfie de captura de documento não é calculada para esse fotograma. | Sempre **Revisão** |

### Prova de vida do documento (adulteração)

Definido por limiares para cada tipo de fraude nos fluxos. Na API de OCR autónoma, estes três riscos resultam sempre numa recusa, e uma verificação solicitada que não produza uma pontuação utilizável devolve `In Review` em vez de aprovar.

As próprias pontuações constam em todos os relatórios V3 como [`document_liveness`](https://docs.didit.me/pt/core-technology/id-verification/report-id-verification#pontuações-de-prova-de-vida-do-documento), incluindo quando nenhum aviso foi acionado, para que um documento aprovado possa ainda ser auditado.

| Risco | Descrição curta | Causa | Gravidade |
| - | - | - | - |
| `SCREEN_CAPTURE_DETECTED` | Captura de ecrã de documento detetada | O documento foi capturado a partir de um ecrã e não de um documento físico. | `error` abaixo do limiar de recusa, `warning` abaixo do limiar de revisão, caso contrário `information` |
| `PRINTED_COPY_DETECTED` | Cópia impressa de documento detetada | O documento parece ser uma cópia impressa e não o original. | Mesmos três escalões de limiares |
| `PORTRAIT_MANIPULATION_DETECTED` | Manipulação de retrato detetada | A região do retrato parece ter sido substituída ou alterada. | Mesmos três escalões de limiares |
| `DOCUMENT_LIVENESS_NOT_COMPUTED` | Não foi possível calcular a verificação de prova de vida do documento | A verificação solicitada de prova de vida do documento (falsificação) não devolveu qualquer pontuação utilizável — o fornecedor falhou, respondeu com código diferente de 200 ou respondeu HTTP 200 com `status="ERR"` — pelo que o documento nunca foi verificado quanto à substituição de retrato, cópia impressa ou reprodução em ecrã. A ausência de pontuação não é prova de que o documento seja genuíno. Apenas na API de OCR autónoma. | `warning` + `In Review` (não configurável; nunca substitui um `Declined`) |

### Integridade do canal de captura

| Risco | Descrição curta | Causa | Configurável via | Predefinição |
| - | - | - | - | - |
| `INJECTION_ATTACK_DETECTED` | Ataque de injeção detetado | A captura foi injetada em vez de capturada pela própria câmara do dispositivo: os fotogramas foram fornecidos por uma câmara virtual de software capaz de reproduzir qualquer vídeo, uma transmissão de câmara gerada pela página ou por automação do navegador, uma câmara intercetada ou uma ferramenta de instrumentação anexada à aplicação. O campo `additional_data.reasons` lista apenas os motivos que o comprovam, e `source` é `capture_integrity`. Aplica-se à captura do documento e à selfie tirada para a consulta de identificação. | `id_verification_injection_attack_action` | **Recusar** |

O `log_type` reflete a ação configurada: `error` para Recusar, `warning` para Revisão, `information` para Nenhuma ação.
Ação recomendada: trate uma sessão recusada como uma captura injetada e peça à pessoa para tentar novamente num dispositivo físico com a respetiva câmara incorporada.
Os sinais que uma pessoa genuína pode produzir nunca desencadeiam `INJECTION_ATTACK_DETECTED` e permanecem informativos.
Aplicações que retransmitem uma câmara real, como um telemóvel utilizado como webcam ou uma camada de efeitos sobre uma webcam real, não são reportadas como ataques de injeção.
Esta é a deteção de ataques de injeção, que é distinta da deteção de ataques de apresentação (uma falsificação apresentada a uma câmara real).

### Imagens de documentos públicos conhecidas

| Risco | Descrição breve | Causa | Gravidade |
| - | - | - | - |
| `PUBLIC_DOCUMENT_IMAGE_DETECTED` | Imagem de documento público da Internet conhecida detetada | A imagem do documento submetido corresponde a uma imagem conhecida disponível publicamente na Internet (por exemplo, um espécime, foto de imprensa ou imagem de banco de imagens de um documento), pelo que não pode ser uma foto do documento físico do próprio utilizador. A correspondência utiliza impressões digitais exatas e percetuais (pHash/dHash) contra o corpus de imagens de documentos públicos conhecidos da Didit; `additional_data` contém `match_type` (`exact` ou `perceptual`), `source`, `source_url` e um `similarity_score` (0-100). | Fixa - revisão nos fluxos; **recusa automática** na API autónoma `/id-verification` |

### Discrepâncias em relação aos detalhes esperados

Ao passar `expected_details` para uma sessão, a Didit gera um aviso de discrepância para cada campo que não corresponda. Um agrupamento (`expected_details_mismatch_action`, Revisão por predefinição) controla o encaminhamento para todos estes:

| Risco | Descrição breve | Causa |
| - | - | - |
| `FULL_NAME_MISMATCH_WITH_PROVIDED` | Discrepância do nome completo com a informação fornecida | O nome fornecido obtém uma pontuação abaixo do limiar de correspondência de nomes em relação ao documento. |
| `DOB_MISMATCH_WITH_PROVIDED` | Discrepância da data de nascimento com a informação fornecida | A data de nascimento fornecida não corresponde. |
| `GENDER_MISMATCH_WITH_PROVIDED` | Discrepância de género com a informação fornecida | O género fornecido não corresponde. |
| `COUNTRY_MISMATCH_WITH_PROVIDED` | Discrepância de país com a informação fornecida | O país fornecido não corresponde a `issuing_state`. |
| `NATIONALITY_MISMATCH_WITH_PROVIDED` | Discrepância de nacionalidade com a informação fornecida | A nacionalidade fornecida não corresponde. |
| `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Discrepância do número de identificação com a informação fornecida | O número de identificação fornecido não corresponde ao número do documento, número pessoal ou número de identificação fiscal. |

Cada aviso de discrepância inclui os valores esperados e extraídos em `additional_data`.

### Idade

| Risco | Descrição breve | Causa | Gravidade |
| - | - | - | - |
| `MINIMUM_AGE_NOT_MET` | Idade mínima não atingida | O titular está abaixo da idade mínima configurada (global ou por país/estado). O campo `additional_data` inclui `min_age_allowed` e `user_age`. | Configurável — Idade Mínima, predefinição Recusar (`error`); recusa incondicional na API de OCR autónoma |
| `MAXIMUM_AGE_EXCEEDED` | Idade máxima excedida | O titular está acima da idade máxima configurada. O campo `additional_data` inclui `max_age_allowed` e `user_age`. | Configurável — Idade Máxima, predefinição Recusar (`error`) |
| `AGE_NOT_DETECTED` | Idade não detetada | Fluxos adaptativos de verificação de idade: não foi possível extrair a idade do documento. | `error` — **recusa automática** |
| `AGE_BELOW_MINIMUM` | Idade abaixo do mínimo | Fluxos adaptativos de verificação de idade: a idade extraída está abaixo do mínimo. | `error` — **recusa automática** |

### Morada

| Risco | Descrição breve | Causa | Gravidade |
| - | - | - | - |
| `UNPARSED_ADDRESS` | Não foi possível determinar a localização da morada | O documento define um campo de morada, mas a morada extraída não pôde ser analisada ou geolocalizada. | Configurável — Morada Não Analisada, predefinição informativa |

## Correspondências de documentos entre sessões

Além dos avisos acima, o relatório de ID V3 inclui um array `matches[]` — até 5 outros documentos na sua aplicação com a mesma data de nascimento, o mesmo país emissor e um nome completo altamente semelhante (os documentos na lista de bloqueio exigem adicionalmente uma correspondência exata do número do documento), excluindo sessões que pertençam ao mesmo utilizador. Os documentos adicionados à sua lista de bloqueio aparecem com `is_blocklisted: true`. Os documentos na sua lista de permissões continuam a aparecer nas correspondências, mas a ação para utilizadores duplicados é ignorada.

Cada correspondência inclui `session_id`, `session_number`, `vendor_data`, `verification_date`, `user_details` (`name`, `document_type`, `document_number`), `status`, `is_blocklisted`, `api_service` e um `front_image_url` assinado.

## Exemplos

### Aviso configurável no seu encaminhamento predefinido (informação)

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "QR_NOT_DETECTED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "QR not detected",
    "long_description": "The system couldn't find or read the QR code on the document. This could be due to poor image quality or an unsupported document type.",
    "node_id": "id_primary"
  }
]
```

### Recusa automática em documento expirado

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOCUMENT_EXPIRED",
    "additional_data": null,
    "log_type": "error",
    "short_description": "Document expired",
    "long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
    "node_id": "id_primary"
  }
]
```

### Discrepância em relação aos detalhes esperados com payload

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOB_MISMATCH_WITH_PROVIDED",
    "additional_data": {
      "expected_dob": "1990-01-01",
      "extracted_dob": "1991-03-15"
    },
    "log_type": "warning",
    "short_description": "Date of birth mismatch with provided information",
    "long_description": "The provided date of birth in `expected_details` doesn't match the date extracted from the document.",
    "node_id": "id_primary"
  }
]
```

## Tipos de aviso

A cada risco é atribuída uma gravidade com base na configuração da sua aplicação. As três gravidades são:

## Relacionado

* [Relatório de verificação de identidade](https://docs.didit.me/pt/core-technology/id-verification/report-id-verification.md) — esquema completo do relatório e estados.
* [Monitorização de documentos](https://docs.didit.me/pt/core-technology/id-verification/document-monitoring-id-verification.md) — como a Didit deteta adulterações e duplicados entre sessões.
* [Webhooks](https://docs.didit.me/pt/integration/webhooks.md) — `session.status.updated` transporta os avisos assim que o passo de ID termina.
* [Modelos de dados — Verificação de identidade](https://docs.didit.me/pt/reference/data-models.md#verificação-de-identidade) — esquema canónico campo a campo.
* [Modelos de dados — Objeto de aviso](https://docs.didit.me/pt/reference/data-models.md#objeto-de-aviso) — a estrutura de cada entrada em `warnings[]`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.