> ## 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.

# Relatório de Document AI: Campos extraídos

> Referência do Document AI da Didit: endpoint de envio de documentos, JSON de campos extraídos, estados e decisões em features[].

## Visão geral

O Document AI aceita até 3 documentos por passo (PDF ou imagem — PDF, JPG, JPEG, PNG, TIFF, WebP). Cada documento é classificado de acordo com a `document_key` configurada, lido por um modelo de visão e linguagem com recurso a um esquema construído a partir das suas definições de campos, e submetido a uma análise forense de PDF/EXIF. Para cada documento, armazena:

* Os **campos extraídos** — um mapa indexado pela `key` de campo configurada, com valores tipificados conforme os declarou (`text` → string, `number` → number, `date` → `YYYY-MM-DD`). Os campos que não puderam ser lidos são `null`.
* **Códigos QR e códigos de barras detetados** - payloads descodificados e coordenadas em píxeis para cada página renderizada. Um código QR que possa ser localizado mas não descodificado continua a ser retornado com `parsed_payload: null`.
* O **estado do documento** — `Approved`, `In Review`, `Declined` ou `Not Finished`.
* **Metadados do documento** — análise forense do ficheiro, incluindo eventuais indícios de sobreposição/manipulação.
* **Resultados da verificação cruzada** — o resultado da correspondência de nomes com a identidade verificada e de quaisquer referências cruzadas de campos personalizados.

## Envio de documentos

Os documentos são enviados um de cada vez para o endpoint do Document AI. Numa sessão alojada ou num fluxo de SDK, isto é tratado por si; o contrato é:

```text theme={null}
POST https://verification.didit.me/v3/document-ai/documents/
multipart/form-data — Session-Token: <session token>
```

| Campo | Obrigatório | Descrição |
| - | - | - |
| `document_key` | sim | O documento configurado que este ficheiro comprova |
| `document` | sim | O ficheiro a enviar |
| `locale` | não | Localidade utilizada para resolver o título/descrição no ecrã |

A resposta avança o fluxo:

```json theme={null}
{
  "valid": true,
  "next_step": "DOCUMENT_AI",
  "document_ai_status": "In Progress",
  "uploaded_document_keys": ["proof_of_funds"],
  "required_document_keys": ["proof_of_funds", "payslip"]
}
```

O passo fica concluído (`next_step` avança para além de `DOCUMENT_AI`) assim que todas as entradas em `required_document_keys` figurarem em `uploaded_document_keys` e nenhum documento ficar por concluir.

## Onde aparece nas respostas da API

O `GET /v3/session/{sessionId}/decision/` apresenta o Document AI em dois locais, tanto para sessões de Verificação de utilizadores (KYC) como de Verificação de empresas (KYB) — o array `document_ai_documents[]` e o relatório em PDF são idênticos independentemente de `session_kind`:

* **`features[]`** — uma entrada de resumo por nó do Document AI, utilizada para enumerar quais as funcionalidades executadas:

  ```json theme={null}
  { "features": [ { "feature": "DOCUMENT_AI", "node_id": "feature_document_ai_1" } ] }
  ```

* **`document_ai_documents[]`** — o resultado completo, um grupo por nó do Document AI. Cada grupo contém o `status` combinado do nó, a lista de `items` enviados e quaisquer `warnings`. Cada documento enviado é um item com os campos que configurou (sob `extracted_data`), códigos detetados (sob `detected_codes`), o seu próprio `status`, as definições de campos, os metadados forenses em `document_metadata` e o `cross_check_result`.

Os estados por documento de cada nó combinam-se no estado do nó segundo a precedência **Declined > In Review > Approved**.

## Exemplo de decisão

Para um documento de **Comprovativo de fundos** configurado com `account_holder` (texto), `balance` (número), `currency` (texto) e `statement_date` (data):

```json theme={null}
{
  "document_ai_documents": [
    {
      "node_id": "feature_document_ai_1",
      "status": "Approved",
      "items": [
        {
          "uuid": "5c1f0a2e-9b3d-4c7a-8f21-0a4e8e7d6c12",
          "document_key": "proof_of_funds",
          "status": "Approved",
          "original_filename": "statement.pdf",
          "extracted_data": {
            "account_holder": "Sophia Martinez",
            "balance": 18450.75,
            "currency": "EUR",
            "statement_date": "2026-05-31"
          },
          "detected_codes": [
            {
              "type": "QR_CODE",
              "page_number": 2,
              "position": [[124, 86], [306, 86], [306, 268], [124, 268]],
              "x": 124,
              "y": 86,
              "width": 182,
              "height": 182,
              "page_width": 1190,
              "page_height": 1684,
              "raw_payload": "SU5WLTIwMjYtMDA0Mg==",
              "parsed_payload": "INV-2026-0042"
            }
          ],
          "fields": [
            { "key": "account_holder", "name": "Account holder", "type": "text", "required": true },
            { "key": "balance", "name": "Balance", "type": "number", "required": false },
            { "key": "currency", "name": "Currency", "type": "text", "required": false },
            { "key": "statement_date", "name": "Statement date", "type": "date", "required": false }
          ],
          "document_metadata": { "is_tampered": false },
          "cross_check_result": null,
          "created_at": "2026-05-31T10:12:00Z"
        }
      ],
      "warnings": []
    }
  ]
}
```

O `page_number` começa em 1. A `position` contém o polígono detetado, enquanto `x`, `y`, `width` e `height` fornecem a sua caixa delimitadora. Todas as coordenadas utilizam o espaço de píxeis da página renderizada, cujas dimensões são `page_width` e `page_height`. `detected_codes` é um array vazio quando não é encontrado nenhum código suportado. Trate um item com `parsed_payload: null` apenas como presença e localização, não como um valor descodificado.

Uma vez que cada campo é endereçável como `document_ai.<field_key>`, pode orientar ramificações e [regras de estado personalizadas](https://docs.didit.me/pt/core-technology/document-ai/warnings-document-ai.md) diretamente a partir dos valores de `extracted_data` — incluindo referências cruzadas com outros passos, como `kyc.full_name` ou respostas a questionários.


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