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

# API de configuracions de funcionalitats de flux

> Referència de tots els camps de configuració acceptats per POST i PATCH /v3/workflows/ en crear fluxos lineals simples amb l'array features de Didit.

Utilitza aquests camps de `config` dins de cada element de l'array `features` per a [`POST /v3/workflows/`](https://docs.didit.me/ca/management-api/workflows/create) i [`PATCH /v3/workflows/{settings_uuid}/`](https://docs.didit.me/ca/management-api/workflows/update).

```json theme={null}
{
  "workflow_label": "Standard KYC",
  "features": [
    {
      "feature": "OCR",
      "config": {
        "documents_allowed": {
          "USA": {
            "DL": {
              "enabled": 1,
              "sides": 2
            }
          }
        }
      }
    }
  ]
}
```

L'API de fluxos de treball v3 construeix un flux de treball lineal basat en nodes a partir de l'array ordenat `features`. Envia les funcionalitats en l'ordre exacte d'execució.

> [!NOTE]
>
> El motor que executa una funcionalitat, el de Didit o el d'un proveïdor extern, no és un dels camps de config següents. Es gestiona a través del [Marketplace](https://docs.didit.me/ca/console/marketplace.md) de la consola, que estableix `provider_key` i `fallback_to_native` a l'objecte `config` de la funcionalitat per a tu.

## Regles de validació

* `OCR` té per defecte tots els països i tipus de document admesos quan `config.documents_allowed` s'omet, és `null` o és `{}`. Si envies un objecte `documents_allowed` personalitzat, ha de contenir com a mínim un país vàlid i un tipus de document habilitat. Cada configuració de document pot establir `sides` a `1` per a la captura només de l'anvers o a `2` per a la captura de l'anvers i del revers.
* `QUESTIONNAIRE` requereix `config.questionnaire_uuid`.
* `KYB_DOCUMENTS` requereix `config.kyb_required_document_groups`.
* `SIGNATURE` rebutja `signature_level: "qes"` amb `qes_not_available` fins que les signatures qualificades estiguin disponibles, i rebutja un pas nou amb `signature_level: "aes"` amb `aes_not_available` mentre `signature_availability.aes` sigui `false` al flux de treball. Els seus documents han d'existir en crear una sessió: amb `signature_documents_source` definit a `workflow`, el pas necessita documents pujats a la consola, i un pas sense cap document pot quedar com a esborrany però no pot entrar en producció; amb `session`, cada crida de creació ha d'enviar `sign.documents`.
* `FACE_MATCH` ha d'anar després de `OCR` en les sol·licituds de flux de treball simples.
* `NFC` i `DATABASE_VALIDATION` requereixen `OCR` quan apareixen al mateix flux de treball. `AML` necessita un dels següents abans: `OCR`, `KYB_REGISTRY` o `DOCUMENT_AI`. Si només hi ha `DOCUMENT_AI` davant, el `full_name` que es cribra ha de poder omplir-se, ja sigui des d'un camp de Document AI anterior amb la clau `full_name`, que es mapeja per a tu, ja sigui des d'una entrada explícita `config.aml_field_sources` (consulta [AML](#aml)).
* Les subfuncionalitats de KYB com `KYB_DOCUMENTS` i `KYB_KEY_PEOPLE` requereixen que `KYB_REGISTRY` aparegui abans al flux de treball.
* Un flux de treball és de persona (KYC) o d'empresa (KYB), mai les dues coses alhora. Un flux de treball que utilitza qualsevol funcionalitat KYB (`KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE`) només es pot combinar amb `AML`, `DOCUMENT_AI`, `QUESTIONNAIRE`, `PHONE_VERIFICATION`, `EMAIL_VERIFICATION`, `IP_ANALYSIS` i `SIGNATURE`. No pot incloure funcionalitats exclusives de persona com `OCR`, `LIVENESS`, `FACE_MATCH`, `NFC`, `PROOF_OF_ADDRESS`, `DATABASE_VALIDATION` o `AGE_ESTIMATION`, i un flux de treball de persona no pot incloure funcionalitats KYB. En un flux de treball d'empresa, `DOCUMENT_AI` compara qualsevol camp marcat com a `is_full_name` amb l'empresa verificada en lloc d'una persona. Per verificar les persones que hi ha darrere d'una empresa, crea un flux de treball KYC separat i referencia'l des del node `KYB_KEY_PEOPLE` amb `kyb_ubo_verification_workflow`, `kyb_officer_verification_workflow` o `kyb_shareholder_verification_workflow`.
* Els camps d'acció fan servir `DECLINE`, `REVIEW` o `NO_ACTION`, tret que el camp de sota indiqui que té restriccions.
* Els camps de puntuació i de llindar són números de `0` a `100`, tret que s'indiqui un interval més estret.

## Regles d'estat comunes

Cada funcionalitat admet una matriu opcional `status_rules`. Utilitza-la per sobreescriure l'estat de la funcionalitat quan es compleixi una condició de camp.

```json theme={null}
{
  "status_rules": [
    {
      "field": "kyc.issuing_state",
      "operator": "in",
      "value": ["VEN", "IRN"],
      "status": "In Review",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.profession",
      "operator": "fuzzy_match",
      "value": "Soft. Engineer",
      "score": 80,
      "status": "Declined",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.dl_class_code_b_to",
      "operator": "less_than",
      "value": "2030-01-01",
      "status": "In Review",
      "value_type": "literal"
    },
    {
      "field": "kyc.extra_fields.dl_class_code_b_from",
      "operator": "less_than",
      "value": { "direction": "past", "amount": 3, "unit": "years" },
      "status": "Declined",
      "value_type": "relative_date"
    }
  ]
}
```

| Camp | Tipus | Descripció |
| - | - | - |
| `field` | string | Camí del camp a comprovar, com ara `kyc.issuing_state` o `kyc.document_type`. |
| `operator` | string | Un dels valors `equals`, `not_equals`, `greater_than`, `greater_than_or_equals`, `less_than`, `less_than_or_equals`, `contains`, `not_contains`, `in`, `not_in`, `is_empty`, `is_not_empty`, `regex` o `fuzzy_match`. |
| `value` | any | Valor de comparació. Omet-lo o envia `null` per als operadors que no necessiten un valor. |
| `status` | string | Un dels valors `Approved`, `Declined`, `In Review` o `No Action`. |
| `value_type` | string | Opcional. `literal` per defecte. Utilitza `field` per comparar amb un altre camp, `list` per resoldre un UUID de llista de Didit en temps d'execució, o `relative_date` per comparar un camp de data amb avui més o menys una durada. |
| `score` | number | Obligatori per a `fuzzy_match`. Puntuació mínima de similitud, de `0` a `100`. La regla coincideix quan la similitud calculada és més gran o igual que aquest valor (`similarity >= score`). Per exemple, `Software Engineer` pot coincidir amb `Soft. Engineer` quan la similitud sigui com a mínim `80`. |

Llegeix l'exemple anterior així: `kyc.extra_fields.profession` coincideix de forma aproximada amb `Soft. Engineer` amb una puntuació mínima de `80`, i aleshores estableix l'estat de la funcionalitat a `Declined`.

Per a la Verificació d'identitat, fes referència als valors extrets de `extra_fields`, com ara `kyc.extra_fields.profession`, les dates de validesa de la classe del carnet de conduir, com ara `kyc.extra_fields.dl_class_code_b_from` i `kyc.extra_fields.dl_class_code_b_to`, o els codis de restricció o d'informació per classe, com ara `kyc.extra_fields.dl_class_code_b_notes` (columna 12 dels carnets del Regne Unit). Aquests valors provenen de l'objecte `extra_fields` del resultat de l'OCR; no formen part de `expected_details`.

> [!NOTE]
>
> `dl_class_code_*_from` i `dl_class_code_*_to` sempre contenen una data ISO vàlida o estan absents de `extra_fields`: Didit mai retorna text d'OCR il·legible en un camp de data. Si no es pot llegir la cel·la de la taula de classes, el camp s'omet en lloc d'enviar-lo com a cadena sense processar, així que utilitza l'operador `is_empty` per enrutar les dates de classe il·legibles en lloc de suposar que el camp sempre hi és.

Per als camps de data, utilitza `value_type: "relative_date"` amb un objecte de valor amb la forma `{ "direction": "past" | "future", "amount": number, "unit": "days" | "months" | "years" }`. Per exemple, `operator: "less_than"` amb `{ "direction": "past", "amount": 3, "unit": "years" }` coincideix amb les dates de fa més de tres anys a partir d'avui.

### Compara amb un pas concret

Un flux de treball basat en un graf pot executar la mateixa funcionalitat més d'una vegada, per exemple tres passos de Verificació d'identitat.
Amb `value_type: "field"`, afegeix `@<node_id>` al valor per llegir-lo d'un pas concret.
El node referenciat ha de ser un pas de funcionalitat que s'executi sempre abans del pas de la pròpia regla, en tots els camins que hi arribin, o el mateix pas de la regla.
Un valor sense el sufix es llegeix del pas de la pròpia regla.

```json theme={null}
{
  "status_rules": [
    {
      "field": "kyc.full_name",
      "operator": "fuzzy_match",
      "value": "kyc.full_name@ocr_1",
      "value_type": "field",
      "score": 80,
      "status": "Declined"
    }
  ]
}
```

Llegeix aquesta regla, definida al tercer pas de Verificació d'identitat, així: el `kyc.full_name` d'aquest pas coincideix de forma aproximada amb el nom complet que llegeix el pas `ocr_1` amb una puntuació mínima de `80` → estableix l'estat de la funcionalitat a `Declined`.
A la consola, el selector de variables mostra cada pas elegible pel seu número al llenç i guarda el sufix per tu.

## OCR / Verificació d'identitat

Valor de la funcionalitat: `OCR`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `documents_allowed` | object | Opcional. Omiteu-lo, envieu `null` o envieu `{}` per permetre tots els països i tipus de document admesos. Envieu un codi de país ISO3 a la configuració de tipus de document només quan vulgueu restringir els documents permesos. Almenys un document personalitzat ha de tenir `enabled: 1`. Les configuracions de document poden incloure `sides: 1` per a una captura només del davant, o `sides: 2` per a una captura del davant i del darrere. Els tipus de document inclouen `P`, `ID`, `DL`, `RP`, `HIC`, `TC`, `SSC` i altres valors admesos per cada país. |
| `methods` | object | Quins dels tres [mètodes de Verificació d'identitat](https://docs.didit.me/ca/core-technology/id-verification/verification-methods.md) pot utilitzar cada país: captura de document, consulta sense document en una font governamental o una altra font autoritzada, i carteres d'identitat digital. Si ometeu la clau, un país o un mètode dins d'un país, aquell país només té captura de document. Cada mètode i cada cartera han d'estar marcats com a disponibles per al país al catàleg de capacitats, o el desament es rebutja. Consulteu [Mètodes per país](#mètodes-per-país) més avall. |
| `document_blur_fields_by_country` | object | Codi de país ISO3 als noms de camp que cal difuminar per ocultar-los a les imatges del document. |
| `image_capture_methods_allowed` | string\[] | Mètodes de captura permesos. Els valors inclouen `CAMERA_SCAN` i `UPLOAD`. |
| `duplicated_user_action` | action | Acció per a un usuari duplicat. |
| `is_age_restrictions_enabled` | boolean | Activa les comprovacions d'edat mínima i màxima. |
| `age_restrictions_by_country` | object | Codi de país ISO3 a una configuració d'edat amb `minimum_age`, `maximum_age` opcional i `states` opcional. |
| `minimum_age` | integer | Edat mínima global, de `1` a `120`. |
| `minimum_age_action` | action | Acció quan l'usuari té una edat per sota de `minimum_age`. |
| `maximum_age` | integer | Edat màxima global, de `1` a `120`. |
| `maximum_age_action` | action | Acció quan l'usuari té una edat per sobre de `maximum_age`. |
| `expiration_date_not_detected_action` | action | Acció quan falta la data de caducitat del document. |
| `invalid_code_action` | action | Acció quan un codi de barres o un codi llegible per màquina no és vàlid. |
| `invalid_mrz_action` | action | Acció quan la MRZ no és vàlida. |
| `inconsistent_data_action` | action | Acció quan els camps del document extrets entren en conflicte. |
| `invalid_validation_action` | action | Acció quan falla la validació del document. |
| `expected_details_mismatch_action` | action | Acció quan les dades esperades de l'usuari no coincideixen amb el document. |
| `image_too_blurry_action` | action | Acció per a imatges de document borroses. |
| `image_too_dark_action` | action | Acció per a imatges de document fosques. |
| `image_too_bright_action` | action | Acció per a imatges de document sobreexposades. |
| `unparsed_address_action` | action | Acció quan no es pot analitzar l'adreça del document. |
| `address_validation_enabled` | boolean | Valida l'adreça que llegeix aquest pas (impresa al document d'identitat) contra les dades de referència postals: confirma que l'adreça existeix i la normalitza, i mai no l'enllaça amb una persona. El resultat és l'objecte `address_validation` del pas dins de la decisió. **Cobrat a \$0.10 per adreça validada**; una validació que no es pot executar (`unavailable`) és gratuïta. Desactivat per defecte. |
| `address_not_verified_action` | action | Acció quan la Validació d'adreces no ha pogut confirmar l'adreça fins al nivell de l'edifici (`ADDRESS_NOT_VERIFIED`: `partially_verified` o `not_verified`). S'aplica només mentre `address_validation_enabled` estigui activat. Per defecte és `NO_ACTION`, que només registra l'advertència. |
| `document_or_personal_number_format_mismatch_action` | action | Acció quan el format del número de document o del número personal no coincideix amb el patró esperat. |
| `critical_field_occlusion_action` | action | Acció quan la comprovació d'oclusió indica que un camp imprès crític (un número d'identitat, un nom, la data de naixement o la data de caducitat) ha estat cobert físicament al document capturat. Tapar un número d'identitat és un senyal de manipulació i no de qualitat de captura, per això per defecte és `REVIEW`; el valor llegit d'un camp tapat se suprimeix de l'extracció en tots dos casos. Pugeu-ho a `DECLINE` quan un document amb dades ocultes no ha d'arribar mai a un revisor. |
| `document_without_portrait_action` | action | Acció quan el tipus de document reconegut no porta mai una fotografia del titular en cap de les seves cares (alguns permisos de residència, targetes sanitàries, certificats de registre i altres famílies de documents sense retrat conegudes al catàleg). Per defecte és `REVIEW`. Considereu `DECLINE` quan la Coincidència facial sigui la base de la comprovació d'identitat del flux de treball. |
| `is_document_selfie_portrait_match_enabled` | boolean | Activa la comparació entre el retrat del document i la selfie. |
| `document_selfie_portrait_match_decline_threshold` | integer | Llindar de rebuig per a la comparació entre el retrat del document i la selfie. |
| `document_selfie_portrait_match_review_threshold` | integer | Llindar de revisió per a la comparació entre el retrat del document i la selfie. |
| `document_selfie_face_search_enabled` | boolean | Executa la [Cerca facial 1:N](https://docs.didit.me/ca/core-technology/face-search/overview.md#la-selfie-presa-durant-la-captura-del-document) sobre la selfie presa durant la captura del document (requereix `is_document_selfie_portrait_match_enabled`): la compara amb la llista de bloqueig de rostres i amb els usuaris verificats anteriorment. La selfie només es compara; la seva plantilla mai no s'emmagatzema. Activat per defecte. `false` omet la cerca i deixa les accions de rostre duplicat de la selfie del document sense cap element sobre el qual actuar; `face_search_enabled: false` al pas de Prova de vida també l'omet, ja que aquesta exclusió cobreix totes les selfies de la sessió. |
| `document_selfie_duplicated_face_action` | action | Veredicte quan la selfie de la captura del document coincideix, o possiblement coincideix, amb el rostre d'un usuari ja verificat en aquesta aplicació. Per defecte és `NO_ACTION`. |
| `document_selfie_duplicated_face_name_mismatch_action` | action | Veredicte quan la selfie de la captura del document coincideix amb un usuari ja verificat amb un nom diferent. Només pot escalar `document_selfie_duplicated_face_action`. Per defecte és `REVIEW`. |
| `document_selfie_duplicated_face_document_mismatch_action` | action | Veredicte quan la selfie de la captura del document coincideix amb un usuari ja verificat amb una data de naixement diferent de la que consta al seu document d'identitat. La mateixa persona amb un document diferent o renovat no es marca. Només pot escalar `document_selfie_duplicated_face_action`. Per defecte és `REVIEW`. |
| `id_verification_name_match_score_threshold` | integer | Llindar de coincidència de noms entre múltiples verificacions d'identitat. |
| `id_verification_max_retry_attempts` | integer | Límit de reintents per a la verificació d'identitat, de `2` a `5`. |
| `id_document_quality_threshold` | integer | Puntuació mínima de qualitat de captura (de `0` a `100`) que ha d'assolir una imatge del document per ser acceptada. La comprovació de qualitat s'executa sempre; només aquest llindar es pot configurar. Per defecte és `20`, ajustat perquè les captures degradades i limítrofes (desenfocament, moviment, text il·legible) es rebutgin mentre els documents llegibles passen; augmenta'l per a requisits de captura més estrictes. La consola presenta aquest valor en un control lliscant perceptual on el valor per defecte de `20` apareix com un 50% equilibrat. |
| `cross_org_fraud_document_action` | action | Decisió quan aquest document ha estat marcat com a frau per una altra organització de la xarxa. |
| `document_audio_recording_enabled` | boolean | Enregistra el micròfon durant la captura del document, perquè un revisor pugui escoltar la sessió. Desactivat per defecte. |
| `document_liveness_portrait_replace_decline_threshold` | integer | Puntuació de substitució del retrat (de `0` a `100`, com més alta, més probable que sigui genuí) per sota de la qual la sessió queda rebutjada. Per defecte és `35`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `document_liveness_portrait_replace_review_threshold` | integer | Puntuació de substitució del retrat per sota de la qual la sessió passa a En revisió, quan encara no està rebutjada. A `100`, gairebé totes les sessions queden retingudes. Per defecte és `70`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `document_liveness_printed_copy_decline_threshold` | integer | Puntuació de còpia impresa (de `0` a `100`, com més alta, més probable que sigui genuí) per sota de la qual la sessió queda rebutjada. Per defecte és `35`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `document_liveness_printed_copy_review_threshold` | integer | Puntuació de còpia impresa per sota de la qual la sessió passa a En revisió, quan encara no està rebutjada. A `100`, gairebé totes les sessions queden retingudes. Per defecte és `77`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `document_liveness_screen_replay_decline_threshold` | integer | Puntuació de captura de pantalla (de `0` a `100`, com més alta, més probable que sigui genuí) per sota de la qual la sessió queda rebutjada. Per defecte és `30`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `document_liveness_screen_replay_review_threshold` | integer | Puntuació de captura de pantalla per sota de la qual la sessió passa a En revisió, quan encara no està rebutjada. A `100`, gairebé totes les sessions queden retingudes. Per defecte és `70`. Consulta [llindars de prova de vida del document](https://docs.didit.me/ca/core-technology/id-verification/warnings-id-verification.md#configuració-dels-llindars-de-prova-de-vida-del-document). |
| `id_verification_injection_attack_action` | action | Decisió quan el document, o la selfie feta per a una consulta d'ID, s'ha injectat en lloc de capturar-se amb la càmera pròpia del dispositiu (`INJECTION_ATTACK_DETECTED`): una càmera virtual de programari, un flux de càmera generat per la pàgina o per l'automatització del navegador, una càmera interceptada o una eina d'instrumentació connectada a l'aplicació. Valors: `DECLINE`, `REVIEW`, `NO_ACTION`. Per defecte és `DECLINE`. Els senyals que pot produir una persona genuïna mai no l'activen. A la prova de vida i la coincidència facial, el risc segueix `frame_injection_action` en lloc d'això. |
| `image_quality_too_low_action` | action | Decisió quan la qualitat general de la imatge del document és inferior al mínim. |
| `is_image_capture_review_screen_enabled` | boolean | Mostra a l'usuari una pantalla de revisió després de cada captura de document, que li permet repetir la foto abans d'enviar-la. Desactivada per defecte. |
| `is_ocr_id_verification_data_review_enabled` | boolean | Permet a l'usuari revisar i corregir les dades d'identitat extretes abans que el pas es completi. Desactivada per defecte. Una correcció s'avalua en funció de `ocr_id_verification_data_review_critical_fields`, i una discrepància activa l'acció crítica o la menor segons correspongui. La revisió s'executa igualment quan el flux de treball inclou NFC: una lectura posterior del xip simplement la substitueix. |
| `ocr_id_verification_data_review_critical_fields` | string\[] | Quins camps d'identitat extrets compten com a crítics quan l'usuari edita el resultat OCR, de manera que una discrepància activi l'acció crítica en lloc de la menor. Forma: `["first_name" \| "last_name" \| "date_of_birth" \| ...]`. |
| `ocr_id_verification_data_review_critical_mismatch_action` | restricted action | Decisió quan l'edició de l'usuari no coincideix amb l'OCR en un camp crític. |
| `ocr_id_verification_data_review_minor_mismatch_action` | action | Decisió quan l'edició de l'usuari no coincideix amb l'OCR en un camp no crític. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

> [!NOTE]
>
> La prova de vida del document es configura amb els sis llindars `document_liveness_*` anteriors, no amb camps d'acció per senyal. `portrait_replacement_action`, `printed_copy_action` i `screen_capture_action` són configuracions a nivell de compte i **no** s'accepten en una configuració de funcionalitat del flux de treball: l'API elimina les claus de configuració desconegudes en desar, de manera que enviar-les allà no té cap efecte. Cada senyal té un llindar de rebuig i un llindar de revisió en una escala de `0`-`100` on una puntuació més alta vol dir que és més probable que el document sigui genuí.

Exemple:

```json theme={null}
{
  "feature": "OCR",
  "config": {
    "documents_allowed": {
      "USA": {
        "DL": {
          "enabled": 1,
          "sides": 2
        }
      }
    },
    "duplicated_user_action": "REVIEW",
    "image_capture_methods_allowed": ["CAMERA_SCAN", "UPLOAD"]
  }
}
```

### Mètodes per país

`methods` s'indexa pel codi de país [ISO 3166-1 alfa-3](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3). Cada país admet fins a tres objectes de mètode; tot el que ometis pren el seu valor per defecte.

```json theme={null}
{
  "feature": "OCR",
  "config": {
    "methods": {
      "ZAF": {
        "document": { "enabled": true },
        "id_lookup": {
          "enabled": true,
          "max_attempts": 2,
          "skip_liveness_and_face_match": true,
          "on_partial_match": "fallback_to_document",
          "on_no_match": "fallback_to_document",
          "on_provider_error": "fallback_to_document"
        },
        "wallet": { "enabled": false, "providers": [], "on_failure": "fallback_to_document" }
      },
      "DNK": {
        "document": { "enabled": true },
        "id_lookup": { "enabled": true, "on_no_match": "decline" }
      }
    }
  }
}
```

`wallet.on_failure` és `fallback_to_document`, `decline` o `retry`. `retry` (només per a cartera, amb la captura de documents desactivada per al país) manté l'usuari que no ha completat l'inici de sessió al pas de cartera perquè ho torni a intentar; la sessió mai no es rebutja per aquest motiu i queda oberta fins que l'usuari la finalitzi o caduqui. Els interruptors de id\_lookup només admeten `fallback_to_document` o `decline`.

Per mantenir els documents fora de la primera pantalla i oferir-los només quan la cartera o la consulta no es completa, estableix `document.fallback_only`. L'exemple utilitza Finlàndia, on la Finnish Trust Network va primer i la captura de documents és l'alternativa. A Finlàndia també cal habilitar-hi els tipus de document a `documents_allowed` (per exemple, passaport i targeta d'identitat) perquè l'alternativa tingui documents per oferir.

```json theme={null}
{
  "FIN": {
    "document": { "enabled": true, "fallback_only": true },
    "wallet": { "enabled": true, "providers": ["ftn"], "on_failure": "fallback_to_document" }
  }
}
```

Les dues consultes anteriors estan `available` al catàleg actual, així que aquesta configuració es desa tal com està escrita. El bloc de cartera queda fora d'aquest exemple a propòsit: una cartera només es desa en un país on el catàleg la marca com a `available`, i `wallet.enabled: true` en qualsevol altre lloc es rebutja i fa fallar tot el desament, inclosa la configuració de consultes. Quan el catàleg marqui una cartera com a `available`, afegeix-la a aquell país:

```json theme={null}
{
  "DNK": {
    "document": { "enabled": true },
    "wallet": { "enabled": true, "providers": ["mitid"], "on_failure": "fallback_to_document" }
  }
}
```

| Key | Type | Default | Description |
| - | - | - | - |
| `<ISO3>.document.enabled` | boolean | `true` | Si s'accepta un document fotografiat en aquest país. Els documents que s'accepten continuen definits a `documents_allowed`. |
| `<ISO3>.document.fallback_only` | boolean | `false` | Mantén la captura de document activada però no l'ofereixis a la primera pantalla. Els usuaris comencen per la cartera o la consulta d'identitat del país, i només els usuaris a qui l'inici de sessió amb la cartera falla, es cancel·la o caduca, o a qui la consulta no coincideix (segons els interruptors `on_failure`, `on_partial_match`, `on_no_match` i `on_provider_error` establerts a `fallback_to_document`) passen a la captura de document. Amb una sola cartera, l'usuari arriba directament a aquesta cartera. Si no n'hi ha una de sola, es mostra una cartera o una consulta juntament amb la captura de document. Es rebutja amb HTTP 400 tret que `document.enabled` sigui `true` i almenys una cartera o consulta d'identitat del país passi a la captura de document. |
| `<ISO3>.id_lookup.enabled` | boolean | `false` | Ofereix la consulta que no és de document contra la font governamental o una altra font autoritzada d'aquest país. Es rebutja quan el catàleg no marca la font del país com a `available`. |
| `<ISO3>.id_lookup.max_attempts` | integer | `1` | `1` a `5`. Quantes consultes **amb resposta** té l'usuari abans que s'activi l'interruptor de reserva. Un nombre que no supera la comprovació de format del client mai arriba al registre, de manera que no compta ni es factura. |
| `<ISO3>.id_lookup.skip_liveness_and_face_match` | boolean | `true` | Després d'una coincidència amb un registre que retorna un retrat, omet els passos propis del flux de Prova de vida i Coincidència facial. La consulta ja ha executat la prova de vida passiva sobre el selfie i l'ha comparat amb aquell retrat. Es normalitza a `false` en desar per a una font que no retorna cap retrat, cas en què l'interruptor no tindria sentit. |
| `<ISO3>.id_lookup.on_partial_match` | `fallback_to_document` \| `decline` | `fallback_to_document` | Què passa quan el registre ha respost però alguns camps no coincideixen. |
| `<ISO3>.id_lookup.on_no_match` | `fallback_to_document` \| `decline` | `fallback_to_document` | Què passa quan el registre ha respost i no té cap registre coincident. |
| `<ISO3>.id_lookup.on_provider_error` | `fallback_to_document` \| `decline` | `fallback_to_document` | Què passa quan no s'ha pogut contactar amb el registre. Mai es factura. |
| `<ISO3>.id_lookup.response_fields` | string\[] \| null | `null` | Subconjunt opcional de les claus dels camps de resposta de la font. Les claus desconegudes es rebutgen i els camps obligatoris de la font s'afegeixen sempre de nou, de manera que el valor desat és sempre una selecció vàlida. La implementació de preproducció actual aplica aquesta selecció a la sortida de comparació, al gènere opcional i als retrats del registre conservats. Els camps d'identitat obligatoris es mantenen. Consulta la nota sobre desplegament i conservació més avall. |
| `<ISO3>.wallet.enabled` | boolean | `false` | Ofereix l'inici de sessió amb cartera d'identitat digital en aquest país. |
| `<ISO3>.wallet.providers` | string\[] | `[]` | Identificadors de cartera del catàleg que accepta aquest país: una llista d'acceptats, mai un rànquing. L'ordre que envies es normalitza a l'ordre del catàleg. Es requereix almenys una cartera quan `enabled` és `true`. Es rebutja una cartera que no s'ofereix al país o que encara no està disponible. |
| `<ISO3>.wallet.on_failure` | `fallback_to_document` \| `decline` \| `retry` | `fallback_to_document` | Què passa quan l'inici de sessió es cancel·la, caduca o falla. `retry` manté l'usuari al pas de la cartera per tornar-ho a intentar (només cartera); es rebutja juntament amb `document.fallback_only`. |

Validació que aplica l'API en desar:

* Un codi de país desconegut, una clau desconeguda dins d'un país o una clau desconeguda dins d'un mètode es rebutgen: no es descarta res en silenci.
* Un país on no està habilitat cap mètode es rebutja: cap usuari d'aquell país podria verificar-se.
* Una cartera o una consulta només poden passar a la captura de document quan la captura de document està activada en aquest país. `fallback_to_document` en un país on `document.enabled` és `false` es rebutja en temps d'execució, perquè no hi ha on fer la reserva.
* `document.fallback_only: true` es rebutja amb HTTP 400 tret que `document.enabled` sigui `true` i almenys una cartera o consulta d'identitat d'aquell país passi a la captura de document.

> [!WARNING]
>
> La implementació de preproducció actual aplica `id_lookup.response_fields` a la sortida de comparació, al gènere opcional i als retrats del registre conservats. Els camps d'identitat obligatoris continuen formant part del registre de verificació. Això no garanteix que cada payload intermedi del proveïdor quedi exclòs del tractament. La implementació en producció no s'ha verificat per a aquest canvi: confirma el comportament al teu entorn de destinació abans de confiar en la selecció de camps per complir requisits de conservació.

Consulta el catàleg de capacitats abans d'escriure `methods`, a través de la pestanya **Països** de la consola o amb l'eina MCP [`didit_workflow_get_id_verification_methods_catalog`](https://docs.didit.me/ca/integration/mcp/tools). El comportament, la cobertura i la facturació es troben a [Mètodes de verificació d'identitat](https://docs.didit.me/ca/core-technology/id-verification/verification-methods.md).

## NFC / Passaport electrònic

Valor de funcionalitat: `NFC`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `allow_nfc_skip` | boolean | Permet als usuaris saltar la lectura NFC quan el seu document admet la lectura del xip. |
| `skip_nfc_action` | action | Acció quan l'usuari salta la lectura NFC. |
| `unverified_chip_action` | action | Acció quan falla la verificació del xip. |
| `trust_anchor_missing_action` | action | Resultat quan els hashs dels grups de dades del xip són íntegres però la cadena de certificats no es pot verificar, perquè no s'ha carregat l'ancoratge de confiança CSCA del país emissor. |
| `jpki_request_attributes` | boolean | Targeta My Number del Japó ([JPKI](https://docs.didit.me/ca/core-technology/nfc-verification/overview.md#japan-my-number-card-jpki), només SDK natius): llegeix també el certificat de signatura, que requereix el PIN de signatura de la targeta i conté el nom, la data de naixement, el sexe i l'adreça del titular, que es comparen amb les dades de la verificació d'identitat. Per defecte `true`. `false` llegeix només el certificat d'autenticació de l'usuari (PIN de 4 dígits), que demostra la targeta i el PIN però no conté dades del titular. |
| `jpki_certificate_invalid_action` | action | Resultat quan un certificat de la targeta My Number no es vincula a l'autoritat de certificació JPKI, està fora del seu període de validesa o no és un certificat de targeta del tipus sol·licitat (`JPKI_CERTIFICATE_INVALID`). Per defecte `DECLINE`. |
| `jpki_signature_invalid_action` | action | Resultat quan la signatura de la targeta My Number sobre el repte d'un sol ús no es verifica, de manera que no queda demostrada la possessió de la targeta ni el coneixement del seu PIN (`JPKI_SIGNATURE_INVALID`). Per defecte `DECLINE`. |
| `jpki_certificate_revoked_action` | action | Resultat quan la comprovació de revocació indica que un certificat de la targeta My Number està revocat (`JPKI_CERTIFICATE_REVOKED`). Per defecte `DECLINE`. |
| `jpki_revocation_unchecked_action` | action | Resultat quan la targeta My Number s'ha verificat però no hi ha resposta sobre la revocació, de manera que no es pot descartar que la targeta estigui revocada (`JPKI_REVOCATION_UNCHECKED`). Per defecte `REVIEW`. |
| `jpki_inconsistent_data_action` | action | Resultat quan el nom, la data de naixement, el sexe o l'adreça del certificat de signatura de la targeta My Number no coincideixen amb les dades de verificació d'identitat de la mateixa targeta (`JPKI_AND_OCR_DATA_NOT_SAME`). Per defecte `REVIEW`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Prova de vida

Valor de la funcionalitat: `LIVENESS`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `face_liveness_method` | string | Un dels valors `ACTIVE_3D`, `FLASHING` o `PASSIVE`. |
| `face_liveness_mode` | string | Substitució del mode de prova de vida. |
| `face_liveness_flash_mode` | string | Mode de flaix per als mètodes `ACTIVE_3D` i `FLASHING`. `"0"` (no estricte, per defecte) verifica que els colors que es mostren a la pantalla es reflecteixin a la cara de l'usuari; `"1"` (estricte) a més exigeix que els reflexos coincideixin amb la seqüència exacta de colors mostrada, cosa que ofereix més protecció contra atacs de repetició i d'injecció de vídeo, però amb més falsos rebutjos. |
| `face_liveness_score_decline_threshold` | integer | Llindar de rebuig. |
| `face_liveness_score_review_threshold` | integer | Llindar de revisió. |
| `face_liveness_possible_duplicated_face_action` | action | Acció quan la cara pot estar duplicada. |
| `face_liveness_multiple_faces_action` | action | Acció quan es detecten diverses cares. |
| `face_liveness_video_anomaly_action` | action | Acció quan la gravació emmagatzemada conté una seqüència de moviment repetida. Per defecte `NO_ACTION`; `REVIEW` i `DECLINE` poden escalar de manera asíncrona una verificació ja decidida. Els fotogrames fixos escassos o repetits, per si sols, no l'activen. |
| `face_liveness_attack_face_match_action` | action | Acció quan la cara de prova de vida coincideix amb una cara d'una sessió anterior d'aquesta aplicació d'un altre usuari, la captura del qual es va jutjar com a atac de prova de vida amb alta confiança (advertència `FACE_MATCHES_LIVENESS_ATTACK`). Accepta `NO_ACTION` o `REVIEW`; `DECLINE` s'accepta però s'aplica com a `REVIEW`, perquè un usuari genuí pot ser rebutjat una vegada per error i després superar la verificació. Per defecte, `NO_ACTION`. |
| `race_map_similarity_thresholds` | object | Llindars de similitud per grup demogràfic. |
| `face_privacy_mode_enabled` | boolean | Activa el mode de privacitat per als recursos facials. |
| `face_quality_review_threshold` | integer | Llindar de revisió per a la qualitat de la imatge facial. |
| `face_quality_decline_threshold` | integer | Llindar de rebuig per a la qualitat de la imatge facial. Ha de ser menor o igual que el llindar de revisió. |
| `face_luminance_min_threshold` | integer | Llindar mínim de lluminositat. Ha de ser inferior a `face_luminance_max_threshold`. |
| `face_luminance_min_action` | action | Acció quan la lluminositat és massa baixa. |
| `face_luminance_max_threshold` | integer | Llindar màxim de lluminositat. |
| `face_luminance_max_action` | action | Acció quan la lluminositat és massa alta. |
| `face_liveness_max_attempts` | integer | Nombre total d'enviaments de prova de vida per sessió, de `1` a `3`. El valor per defecte `3` vol dir un intent inicial més dos reintents. Si s'estableix `1`, els reintents no es desactiven per a les fallades de qualitat de captura: quan tots els advertiments de l'intent són ambientals (`LOW_FACE_LUMINANCE`, `HIGH_FACE_LUMINANCE`, `LOW_FACE_QUALITY`, `HIGH_FACE_OCCLUSION`, `NO_FACE_DETECTED`), l'usuari sempre rep un segon intent amb indicacions útils per corregir-ho. |
| `cross_org_fraud_face_action` | action | **Obsolet i ja no s'aplica.** Tractava una cara com si tingués un veredicte de frau, cosa que una identitat biomètrica estable no pot tenir. Encara s'accepta perquè els fluxos de treball existents continuïn validant-se. Utilitza `cross_org_identity_claim_pattern_action`. |
| `cross_org_identity_claim_pattern_action` | action | Decisió quan altres organitzacions de la xarxa han registrat esdeveniments de reclamació d'identitat per a aquesta mateixa persona en els quals la identitat reclamada no coincidia. Només Revisió o Cap acció; un Rebuig establert aquí es rebaixa a Revisió. Consulta [Reclamacions d'identitat entre organitzacions](https://docs.didit.me/ca/core-technology/liveness/cross-organization-identity-claims.md). |
| `external_capture_device_action` | action | Decisió quan es detecta un dispositiu de captura extern. |
| `face_audio_recording_enabled` | boolean | Grava el micròfon durant la captura del selfie, perquè un revisor pugui escoltar la sessió. Desactivat per defecte. |
| `face_search_enabled` | boolean | Executa la [Cerca facial 1:N](https://docs.didit.me/ca/core-technology/face-search/overview.md#desactivar-la-cerca-facial-automàtica) automàtica sobre el selfie: el compara amb usuaris verificats anteriorment, amb la llista de bloqueig i la llista d'autorització facials, i emmagatzema la seva plantilla biomètrica per a futures comparacions. Activat per defecte. `false` omet la cerca, no guarda cap plantilla facial per a aquest pas i deixa les accions relacionades amb les cares duplicades sense cap element sobre el qual actuar. |
| `face_liveness_uncertain_retry_enabled` | boolean | Només per a la prova de vida activa del SDK natiu. Si està activat, una captura la puntuació de prova de vida de la qual es troba estrictament entre `face_liveness_score_decline_threshold` i `face_liveness_score_review_threshold` mai no es decideix, sigui quin sigui el veredicte que el motor li hagi assignat: a la persona se li indica que el resultat no era clar i se li demana que torni a capturar, cada vegada, fora del pressupost de `face_liveness_max_attempts` (que encara s'aplica a les captures que el motor no ha pogut puntuar). Desactivat per defecte; el flux web l'ignora. |
| `face_liveness_duplicated_face_name_mismatch_action` | action | Decisió quan es troba una cara duplicada amb un nom diferent. |
| `face_liveness_duplicated_face_document_mismatch_action` | action | Decisió quan es troba una cara duplicada i el document d'identitat de l'usuari amb qui s'ha produït la coincidència mostra una data de naixement diferent. La mateixa persona amb un document diferent o renovat no es marca. Per defecte, `REVIEW`. |
| `frame_injection_action` | action | Decisió quan es detecten fotogrames de vídeo injectats. |
| `screen_capture_action` | action | Decisió quan el selfie és una fotografia d'una pantalla. |
| `virtual_camera_action` | action | Decisió quan es detecta un flux de càmera virtual. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Coincidència facial

Valor de la funcionalitat: `FACE_MATCH`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `face_match_score_decline_threshold` | enter | Llindar de rebuig. |
| `face_match_score_review_threshold` | enter | Llindar de revisió. |
| `face_match_max_attempts` | enter | Nombre total d'enviaments de coincidència facial per sessió, de `1` a `3`. El valor per defecte `3` vol dir un intent inicial i dos reintents. |
| `face_match_not_computed_action` | acció restringida | Veredicte quan no es pot generar cap puntuació de coincidència facial (falta el retrat o la selfie). |
| `face_match_eyes_covered_action` | acció | Veredicte quan la regió dels ulls està coberta a la selfie. El valor per defecte és `NO_ACTION`, que registra l'evidència sense canviar el resultat de la Coincidència facial. Aquest senyal encara s'està calibrant, de manera que només es registra en mode d'ombra fins que s'indiqui que la regió està calibrada: si establiu `REVIEW` o `DECLINE` ara, tindrà efecte a partir d'aquest moment. |
| `face_match_mouth_covered_action` | acció | Veredicte quan la regió de la boca està coberta a la selfie. El mateix valor per defecte `NO_ACTION` i la mateixa advertència de calibratge que `face_match_eyes_covered_action`. |
| `face_match_face_covered_action` | acció | Veredicte quan la cara en conjunt està coberta a la selfie. El mateix valor per defecte `NO_ACTION` i la mateixa advertència de calibratge que `face_match_eyes_covered_action`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Estimació d'edat

Valor de funcionalitat: `AGE_ESTIMATION`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `enable_id_verification_fallback` | boolean | Executa la verificació d'identitat quan l'estimació d'edat cau al rang limítrof. |
| `minimum_age_threshold` | integer | Edat mínima acceptada, de `1` a `100`. |
| `borderline_minimum_age_threshold` | integer | Límit inferior del rang limítrof, de `1` a `100`. |
| `borderline_maximum_age_threshold` | integer | Límit superior del rang limítrof, de `1` a `100`. |
| `face_liveness_method` | string | Un dels valors `ACTIVE_3D`, `FLASHING` o `PASSIVE`. |
| `face_liveness_flash_mode` | string | Mode de flaix per als mètodes `ACTIVE_3D` i `FLASHING`. `"0"` (no estricte, per defecte) verifica que els colors que es projecten intermitentment a la pantalla es reflecteixen a la cara de l'usuari; `"1"` (estricte) exigeix a més que els reflexos coincideixin amb la seqüència exacta de colors que han parpellejat. |
| `face_liveness_score_decline_threshold` | number | Llindar de rebuig per a la prova de vida que utilitza l'estimació d'edat. |
| `face_liveness_score_review_threshold` | number | Llindar de revisió per a la prova de vida que utilitza l'estimació d'edat. |
| `face_liveness_possible_duplicated_face_action` | action | Acció quan la cara pot estar duplicada. |
| `face_liveness_multiple_faces_action` | action | Acció quan es detecten diverses cares. |
| `face_liveness_video_anomaly_action` | action | Acció quan la gravació emmagatzemada conté una seqüència de moviment repetida. Per defecte `NO_ACTION`; `REVIEW` i `DECLINE` poden escalar de manera asíncrona una verificació ja decidida. Les imatges fixes escasses o repetides per si soles no l'activen. |
| `face_liveness_attack_face_match_action` | action | Acció quan la cara de la prova de vida coincideix amb una cara d'una sessió anterior d'aquesta aplicació d'un altre usuari la captura del qual es va considerar un atac de prova de vida amb alta confiança (advertència `FACE_MATCHES_LIVENESS_ATTACK`). Accepta `NO_ACTION` o `REVIEW`; `DECLINE` s'accepta però s'aplica com a `REVIEW`, perquè un usuari genuí pot ser rebutjat una vegada per error i després superar la verificació. Per defecte `NO_ACTION`. |
| `face_privacy_mode_enabled` | boolean | Activa el mode de privadesa per als recursos facials. |
| `face_quality_review_threshold` | integer | Llindar de revisió per a la qualitat facial. |
| `face_quality_decline_threshold` | integer | Llindar de rebuig per a la qualitat facial. |
| `face_luminance_min_threshold` | integer | Llindar mínim de lluminositat. |
| `face_luminance_min_action` | action | Acció quan la lluminositat és massa baixa. |
| `face_luminance_max_threshold` | integer | Llindar màxim de lluminositat. |
| `face_luminance_max_action` | action | Acció quan la lluminositat és massa alta. |
| `face_liveness_max_attempts` | integer | Total d'enviaments de prova de vida per sessió, de `1` a `3`. El valor per defecte `3` vol dir un intent inicial i dos reintents. Si s'estableix `1` no es desactiven els reintents per als errors de qualitat de captura: quan totes les advertències de l'intent són ambientals (`LOW_FACE_LUMINANCE`, `HIGH_FACE_LUMINANCE`, `LOW_FACE_QUALITY`, `HIGH_FACE_OCCLUSION`, `NO_FACE_DETECTED`), l'usuari sempre rep un segon intent amb indicacions per corregir-ho. |
| `external_capture_device_action` | action | Veredicte quan es detecta un dispositiu de captura extern. |
| `face_audio_recording_enabled` | boolean | Grava el micròfon durant la captura del selfie, perquè un revisor pugui escoltar la sessió. Desactivat per defecte. |
| `face_search_enabled` | boolean | Executa automàticament la [Cerca facial 1:N](https://docs.didit.me/ca/core-technology/face-search/overview.md#desactivar-la-cerca-facial-automàtica) sobre el selfie: el compara amb usuaris verificats anteriorment, amb la llista de bloqueig de cares i amb la llista d'autorització de cares, i emmagatzema la seva plantilla biomètrica per a comparacions posteriors. Activat per defecte. `false` omet la cerca, no guarda cap plantilla facial per a aquest pas i fa que les accions relatives a cares duplicades no tinguin res sobre què actuar. |
| `face_liveness_uncertain_retry_enabled` | boolean | Només per a la prova de vida activa del SDK natiu. Quan està activat, una captura la puntuació de la qual es troba estrictament entre `face_liveness_score_decline_threshold` i `face_liveness_score_review_threshold` mai no es decideix, independentment del veredicte que el motor li hagi assignat: a la persona se li indica que el resultat no era clar i se li demana que torni a capturar, cada vegada, fora del límit de `face_liveness_max_attempts` (que encara s'aplica a les captures que el motor no ha pogut puntuar). Desactivat per defecte; el flux web l'ignora. |
| `face_liveness_duplicated_face_name_mismatch_action` | action | Veredicte quan es troba una cara duplicada amb un nom diferent. |
| `face_liveness_duplicated_face_document_mismatch_action` | action | Veredicte quan es troba una cara duplicada i el document d'identitat de l'usuari amb qui s'ha produït la coincidència mostra una data de naixement diferent. La mateixa persona amb un document diferent o renovat no es marca. Per defecte `REVIEW`. |
| `frame_injection_action` | action | Veredicte quan es detecten fotogrames injectats al vídeo. |
| `screen_capture_action` | action | Veredicte quan el selfie és una foto d'una pantalla. |
| `virtual_camera_action` | action | Veredicte quan es detecta un flux de càmera virtual. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Verificació de telèfon

Valor de la funcionalitat: `PHONE_VERIFICATION`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `code_size` | enter | Mida del codi OTP, de `4` a `8`. |
| `phone_max_retries` | enter | Nombre màxim de reintents d'enviament, de `1` a `5`. |
| `phone_max_check_attempts` | enter | Nombre màxim d'intents de verificació del codi OTP, de `1` a `5`. |
| `phone_verification_countries` | objecte | Codi de país ISO2 a configuració de canal. Exemple: `{ "US": { "sms": { "enabled": true } } }`. |
| `disposable_number_action` | acció | Acció per als números d'un sol ús. |
| `voip_number_action` | acció | Acció per als números VoIP. |
| `duplicated_phone_number_action` | acció | Acció per als números de telèfon duplicats. |
| `high_risk_phone_action` | acció | Acció quan el proveïdor de lliurament bloqueja l'enviament del codi OTP. Només `DECLINE` o `REVIEW`; per defecte, `DECLINE`. S'aplica només quan tots els bloquejos del pas tenen `risk_factors` exactament iguals a `["device_attribute"]`; qualsevol altre factor de risc, qualsevol barreja que l'inclogui, o cap factor de risc, es rebutja independentment d'aquesta configuració. |
| `phone_shared_device_mode` | booleà | Permet el mode de verificació de telèfon en un dispositiu compartit. |
| `phone_enrichment_enabled` | booleà | Activa l'enriquiment amb intel·ligència telefònica (risc del tipus de línia, índex de confiança, operador, historial de portabilitat i intercanvi de SIM, puntuació de risc de frau). **Es cobren \$0.05 per verificació**, a sobre del preu de la verificació de telèfon. |
| `phone_intelligence_score_action` | acció | Acció quan la puntuació de risc de frau del telèfon és igual o superior a `phone_intelligence_score_threshold`. |
| `phone_intelligence_score_threshold` | enter | Puntuació de risc de frau (`0`–`100`, com més alta, més elevat és el risc) que activa `phone_intelligence_score_action`. Per defecte, `80`. |
| `phone_type_risk_action` | acció | Acció quan el número està marcat com a pertanyent a un tipus de telèfon d'alt risc. |
| `recent_port_action` | acció | Acció quan el número s'ha fet una portabilitat del número recentment (senyal de portabilitat o d'intercanvi de SIM). |
| `low_phone_trust_action` | acció | Acció quan l'índex de confiança del telèfon és igual o inferior a `phone_trust_index_threshold`. |
| `phone_trust_index_threshold` | enter | Índex de confiança (`0`–`100`, com més baix, més elevat és el risc) igual o inferior al qual s'aplica `low_phone_trust_action`. Per defecte, `30`. |
| `phone_social_enabled` | booleà | Activa la comprovació de la petjada social: en quines plataformes professionals, de missatgeria, xarxes socials i comerç electrònic està registrat el número verificat. **Es cobren \$0.05 per verificació** a sobre del preu de la verificació de telèfon, independentment de `phone_enrichment_enabled`. |
| `phone_no_social_presence_action` | acció | Acció quan la comprovació de la petjada social no troba el número registrat en cap de les plataformes que cobreix, un senyal habitual d'identitat sintètica. Per defecte, `NO_ACTION`. |
| `cross_org_fraud_phone_action` | acció | Veredicte quan una altra organització de la xarxa ha marcat aquest número com a fraudulent. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

La verificació de telèfon està desactivada fins que l'organització fa la primera recàrrega.

> [!NOTE]
>
> L'enriquiment amb intel·ligència telefònica és un complement opcional. Quan `phone_enrichment_enabled` és `true`, cada verificació de telèfon completada s'enriqueix amb intel·ligència telefònica i es **facturen \$0.05 per sol·licitud** a sobre del cost estàndard de la verificació de telèfon. Les accions basades en la puntuació només tenen efecte quan la puntuació d'enriquiment està disponible; les accions per índex de confiança, tipus de telèfon i portabilitat s'apliquen tan bon punt s'executa l'enriquiment.
>
> La comprovació de la petjada social és un segon complement, independent del primer. Quan `phone_social_enabled` és `true`, cada verificació de telèfon completada també informa de les plataformes en línia en què està registrat el número (missatgeria, xarxes socials, comerç electrònic i serveis professionals) i es **facturen \$0.05 per sol·licitud**. Es pot activar amb o sense `phone_enrichment_enabled`: els dos complements tenen preus i facturació independents. Una consulta que no troba el número en cap de les plataformes que cobreix és una resposta vàlida i facturable, i activa `phone_no_social_presence_action`. Per ramificar el resultat en un graf de flux de treball, feu servir `phone.social_profiles_registered` (el nombre de plataformes on està registrat el número).

## Verificació de correu electrònic

Valor de la funcionalitat: `EMAIL_VERIFICATION`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `email_code_size` | enter | Mida de l'OTP, de `4` a `8`. |
| `email_max_retries` | enter | Nombre màxim de reintents d'enviament, de `1` a `5`. |
| `email_max_check_attempts` | enter | Nombre màxim d'intents de comprovació de l'OTP, de `1` a `5`. |
| `email_alphanumeric_code` | booleà | Utilitza codis alfanumèrics per al correu electrònic. |
| `breached_email_action` | acció | Acció per a correus electrònics compromesos en filtracions de dades. |
| `disposable_email_action` | acció | Acció per a correus electrònics temporals. |
| `duplicated_email_action` | acció | Acció per a correus electrònics duplicats. |
| `only_corporate_emails_allowed` | booleà | Rebutja les adreces de correu electrònic no corporatives. |
| `email_enrichment_enabled` | booleà | Activa l'enriquiment d'intel·ligència de correu electrònic (lliurabilitat, reputació del domini, exposició a filtracions de dades i puntuació de risc de frau). **Cobrat \$0.05 per verificació** a sobre del preu de la verificació de correu electrònic. |
| `email_intelligence_score_action` | acció | Acció quan la puntuació de risc de frau del correu electrònic és igual o superior a `email_intelligence_score_threshold`. |
| `email_intelligence_score_threshold` | enter | Puntuació de risc de frau (de `0`–`100`, com més alta, més arriscada) que activa `email_intelligence_score_action`. Per defecte `80`. |
| `recent_email_breach_action` | acció | Acció quan el correu electrònic apareix en una filtració de dades coneguda i recent. |
| `frequent_email_breach_action` | acció | Acció quan el correu electrònic apareix en moltes filtracions de dades conegudes. |
| `email_social_enabled` | booleà | Activa la comprovació de la petjada social: indica en quines plataformes de correu electrònic, xarxes socials i plataformes professionals, de comerç electrònic i d'entreteniment està registrada l'adreça verificada. **Cobrat \$0.05 per verificació** a sobre del preu de la verificació de correu electrònic, independentment de `email_enrichment_enabled`. |
| `email_no_social_presence_action` | acció | Acció quan la comprovació de la presència social no troba l'adreça registrada en cap de les plataformes que cobreix, un senyal habitual d'identitat sintètica. Per defecte `NO_ACTION`. |
| `cross_org_fraud_email_action` | acció | Veredicte quan aquesta adreça ha estat marcada com a fraudulenta per una altra organització de la xarxa. |
| `status_rules` | matriu | Regles d'estat personalitzades opcionals. |

> [!NOTE]
>
> L'enriquiment d'intel·ligència de correu electrònic és un complement opcional. Quan `email_enrichment_enabled` és `true`, cada verificació de correu electrònic completada s'enriqueix amb intel·ligència de correu electrònic i es **factura \$0.05 per sol·licitud** a sobre del cost estàndard de la verificació de correu electrònic. L'acció basada en la puntuació s'aplica quan la puntuació d'enriquiment està disponible; les accions per filtracions s'apliquen tan bon punt s'executa l'enriquiment.
>
> La comprovació de la presència social és un segon complement, independent. Quan `email_social_enabled` és `true`, cada verificació de correu electrònic completada també informa de les plataformes en línia en què està registrada l'adreça (proveïdors de correu electrònic, xarxes socials, serveis professionals, de comerç electrònic i d'entreteniment) i es **factura \$0.05 per sol·licitud**. Es pot activar amb o sense `email_enrichment_enabled`: els dos complements tenen un preu i es facturen de manera independent. Una consulta que no troba l'adreça en cap de les plataformes que cobreix és una resposta vàlida i facturable, i activa `email_no_social_presence_action`. Utilitza `email.social_profiles_registered` (el nombre de plataformes en què està registrada l'adreça) per bifurcar segons el resultat en un graf de flux de treball.

## Validació en bases de dades

Valor de la funcionalitat: `DATABASE_VALIDATION`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `database_validation_countries` | object | Codi de país ISO3 a `{ "services": ["service_id"] }`. Fes servir els ID de servei del catàleg de Validació en bases de dades. |
| `database_validation_partial_match_action` | action | Acció quan la validació en bases de dades retorna una coincidència parcial. |
| `database_validation_no_match_action` | action | Acció quan la validació en bases de dades no retorna cap coincidència. |
| `database_validation_not_applicable_action` | action | Acció quan la validació en bases de dades no es pot executar perquè el document no conté l'identificador que requereixen els serveis configurats (p. ex., un passaport sense número d'identificació nacional). Per defecte és `NO_ACTION`. |
| `database_validation_field_sources` | object | D'on llegir una entrada de la validació en bases de dades que cap pas anterior del graf no pot omplir. `source` indica el productor i `key` indica el valor dins d'aquest: una clau de camp de Document AI per a `document_ai`, un ID de node de qüestionari per a `questionnaire`, i `expected_details.<field>` o `metadata.<key>` per a `expected_data`. Les coincidències exactes de clau amb un pas anterior es resolen automàticament i intencionadament no es persisteixen, de manera que canviar el nom d'un camp de Document AI mai no deixa un mapatge obsolet guardat a la configuració. Una entrada malformada es rebutja amb un `400` que indica quin camp d'entrada és. Forma: `{"<db_validation_input_field>": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

Exemple:

```json theme={null}
{
  "feature": "DATABASE_VALIDATION",
  "config": {
    "database_validation_countries": {
      "BRA": {
        "services": ["SERVICE_ID_FROM_CATALOG"]
      }
    },
    "database_validation_field_sources": {
      "tax_id": {
        "source": "expected_data",
        "key": "expected_details.document_number"
      }
    },
    "database_validation_no_match_action": "REVIEW",
    "database_validation_partial_match_action": "REVIEW"
  }
}
```

> [!WARNING]
>
> `database_validation_countries` és el que fa que aquest pas faci alguna cosa. Una funcionalitat `DATABASE_VALIDATION` desada sense aquest camp s'accepta i després no executa cap comprovació, de manera que envia sempre almenys un país amb almenys un ID de servei.

Un ID de servei que el pas no pot executar es rebutja amb un `400` que l'indica i explica el motiu, i no es desa res. Això inclou un ID que no és al catàleg, un ID que pertany a un altre país, un servei que encara no està disponible i un servei que només s'ofereix mitjançant el [`POST /v3/database-validation/`](https://docs.didit.me/ca/core-technology/database-validation/overview) independent.
Un servei les entrades del qual cap pas anterior no proporciona es rebutja de la mateixa manera, amb la llista de les entrades que falten.
Un servei que el flux desat ja conté però que ja no pot executar s'elimina en desar-lo de nou.

Per exemple, aquest flux d'Argentina llegeix el número de DNI i el gènere de Verificació d'identitat i els comprova amb RENAPER sense selfie:

```json theme={null}
{
  "workflow_label": "Argentina DNI check",
  "features": [
    {"feature": "OCR"},
    {
      "feature": "DATABASE_VALIDATION",
      "config": {"database_validation_countries": {"ARG": {"services": ["arg_renaper_data"]}}}
    }
  ]
}
```

Fes servir `arg_renaper` en lloc d'això, després d'un pas `LIVENESS`, si també vols comparar el selfie amb la foto que RENAPER té. Consulta [RENAPER](https://docs.didit.me/ca/api-reference/database-validation/argentina/renaper.md) per a la seva puntuació de coincidència facial i el seu llindar.

## Verificació bancària

Valor de la funcionalitat: `BANK_VERIFICATION`.

L'usuari verifica un compte bancari, i el titular que informa el banc es compara amb la identitat que un pas anterior del flux ha establert. L'usuari ho fa amb un dels dos mètodes: l'inici de sessió al banc (`open_banking`), en què s'autentica al seu banc, o la comprovació del compte (`account_lookup`), en què escriu les dades del compte i el banc confirma el nom que hi consta. `bank_method_order` i el `methods` de cada país trien quins mètodes ofereix un país i quin va primer; consulta [Mètodes de verificació bancària](https://docs.didit.me/ca/core-technology/bank-verification/verification-methods.md). El pas produeix evidència (una puntuació del nom del titular, la comparació que l'ha generat i els codis de motiu), i les claus `bank_*_action` converteixen aquesta evidència en un estat.

Hi ha dues coses que decideixen si el node fa alguna cosa. `bank_countries` és una llista blanca, de manera que un mapa buit no ofereix cap banc i no executa cap comprovació. A més, el titular necessita alguna cosa amb què comparar-se: posa un pas `OCR`, `DATABASE_VALIDATION` o `QUESTIONNAIRE` abans, envia `expected_details` en crear la sessió o assigna tu mateix els camps amb `bank_field_sources`. Sense cap d'aquests, la titularitat només pot ser `unknown`, i això és el que decideix `bank_reference_identity_missing_action`.

> [!NOTE]
>
> La verificació bancària encara s'està desplegant, de manera que un node `BANK_VERIFICATION` només s'accepta en un compte on s'hagi activat. En qualsevol altre cas, el desament es rebutja i ho indica. Quina ruta executa el pas tampoc es configura aquí: és el parell `provider_key` i `fallback_to_native` que la [Marketplace](https://docs.didit.me/ca/console/marketplace.md) de la consola defineix per a tu.

### Connexió d'un compte

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_countries` | object | En quins països un usuari pot connectar-se a un banc. És una llista blanca: un mapa buit vol dir que el node no ofereix res i no executa res. `institutions` restringeix el selector a identificadors d'entitat concrets, i `"all"` ofereix tots els bancs del país que admeten la verificació d'identitat. Un país que cap ruta del node atén es manté: només ofereix les alternatives de reserva i Continua sense el teu banc, consulta [Quan la persona no pot verificar el seu banc](https://docs.didit.me/ca/core-technology/bank-verification/fallbacks.md). Un codi que no correspon a cap país es rebutja en desar. `methods` defineix quins dels dos mètodes ofereix el país, l'inici de sessió al banc (`open_banking`) i la comprovació del compte (`account_lookup`), i en quin ordre, per damunt del que estableix `bank_method_order`: l'usuari comença amb el primer i se li ofereix el segon com a alternativa. Un país habilitat el camp `methods` del qual inclou un mètode que cap ruta del node atén allà es rebutja en desar, i també es rebutja un país que una ruta atén però que `methods` deixa sense cap mètode. Forma: `{"<ISO3>": {"enabled": true\|false, "institutions": ["<institution_id>", ...]\|"all", "methods"?: ["open_banking"\|"account_lookup", ...]}}`. |
| `bank_method_order` | string\[] | Quins dels dos mètodes ofereix el pas, i en quin ordre, en tots els països que no defineixen un `methods` propi: `open_banking` (inici de sessió al banc: l'usuari s'autentica al seu banc, i només aquest mètode llegeix saldos, transaccions i ingressos) i `account_lookup` (la comprovació del compte: sense inici de sessió, només titularitat). En cada país l'usuari comença pel primer mètode que hi atén una ruta i se li ofereix l'altre com a alternativa; un mètode que cap ruta atén en un país se n'exclou. Cal almenys un mètode. Un desament que no n'envia cap rep `["open_banking", "account_lookup"]`, tret que enviï `bank_open_banking_enabled` o `bank_account_lookup_enabled`, que aleshores el defineixen. |
| `bank_scopes` | object | Què se li demana a l'usuari que autoritzi compartir. `ownership` és el que verifica el producte i no es pot desactivar. `identifiers` mostra l'IBAN o el número de compte sense emmascarar; `balances`, `transactions` i `income` llegeixen dades financeres reals, es facturen per separat i es rebutgen en desar tret que la teva aplicació tingui el permís de dades financeres. Només l'inici de sessió al banc llegeix dades: un país que ofereix la comprovació del compte no es rebutja, i un usuari que verifica per comprovació del compte supera la verificació sense les dades, que el resultat enumera a `financial_data.not_collected`. Un àmbit desactivat mai es demana, de manera que el banc no el mostra a la pantalla de consentiment. Per defecte, només `ownership`. Forma: `{"ownership": true, "identifiers": true\|false, "balances": true\|false, "transactions": true\|false, "income": true\|false}`. |
| `bank_eligible_account_types` | string\[] | Quins tipus de compte pot triar l'usuari: `checking`, `current`, `savings`, `business` o `other`. Les targetes de crèdit, els préstecs i els comptes d'inversió mai són elegibles, perquè no acrediten la titularitat d'un compte de pagament. Per defecte, compte corrent i compte a la vista. |
| `bank_account_selection` | string | `user` permet a l'usuari triar quin dels comptes connectats es verifica; `auto` agafa el primer d'elegibles. |
| `bank_require_oauth_only` | boolean | Ofereix només entitats accessibles mitjançant OAuth o entre aplicacions, mai una pantalla heretada de captura de credencials. En mercats on la banca oberta ja fa de l'OAuth l'única via, no canvia res. |
| `bank_max_attempts` | integer | Quants intents d'inici de sessió al banc té l'usuari, de `1` a `5`; un microdipòsit o una pujada d'extracte també en consumeix un. La comprovació del compte té el seu propi `bank_account_check_max_attempts`. Quan totes les maneres de verificar l'usuari que encara s'ofereixen, inclosa la pujada d'extracte, han esgotat els intents sense una connexió satisfactòria, `bank_attempts_exhausted_action` decideix. |
| `bank_connection_timeout_minutes` | integer | Quant de temps es manté oberta una connexió iniciada abans que l'intent s'abandoni, de `5` a `60` minuts. |
| `bank_allow_skip` | boolean | Substituït per `bank_continue_without_bank`: ara l'usuari sempre pot continuar sense banc. Es llegeix durant una versió a partir d'un desament que no envia `bank_continue_without_bank`: `true` defineix `from_start`, i qualsevol altre valor defineix `when_needed`. Cada desament el torna a escriure: `true` per a `from_start` i `false` per a `when_needed`. |

### Quan l'usuari no pot verificar

L'usuari sempre pot continuar sense banc, i el pas mai el deixa bloquejat. Consulta [Quan la persona no pot verificar el seu banc](https://docs.didit.me/ca/core-technology/bank-verification/fallbacks.md).

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_continue_without_bank` | string | Quan el pas mostra **Continue without your bank**. `when_needed`, el valor per defecte, el mostra quan cap mètode no funciona per al país o el banc de l'usuari, quan el seu banc no es pot contactar i cap altre mètode no els podria verificar, per exemple perquè la comprovació del compte tampoc no ha pogut contactar amb el banc, o quan diuen que no tenen banca en línia. `from_start` també el mostra a la primera pantalla. No es pot desactivar. Un desat que no envia ni aquesta clau ni `bank_allow_skip` obté `when_needed`. |
| `bank_statement_standalone_enabled` | boolean | Amb `bank_statement_enabled`, ofereix també la pujada d'extractes quan no s'ha fet cap intent bancari, a qualsevol país, inclòs un on cap ruta d'inici de sessió bancari ni de comprovació del compte hi dona servei. Llavors es factura per separat, com a `bank_statement_upload`, a USD 0.20 per extracte avaluat, abans de la tarifa del contracte o del preu especial: consulta [Preus](https://docs.didit.me/ca/core-technology/bank-verification/fallbacks.md#preus). Les sessions de sandbox ho poden provar sense facturació. Activat per defecte. |

Què significa continuar per a la sessió ho determinen `bank_unsupported_action`, `bank_attempts_exhausted_action` o `bank_skipped_action`, segons el motiu pel qual l'usuari ha continuat, tret que un intent avaluat abans ja hagi decidit el pas: consulta [Accions del veredicte](#accions-de-veredicte).

### Comparació del titular

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_reference_identity` | string | Quin pas anterior aporta la identitat amb què es compara el titular: `kyc` (Verificació d'identitat), `database_validation`, `expected_details` (el que has enviat en crear la sessió), `questionnaire`, o `auto` per usar el que hagi produït el flux de treball. El pas que l'ha aportat realment apareix en el resultat com a `reference_identity_source`. |
| `bank_field_sources` | object | D'on llegir un camp de la identitat de referència quan cap pas anterior del graf no el pot omplir. La clau del mapa és una de `full_name`, `first_name`, `last_name`, `address`; `source` indica el productor i `key` indica el valor que conté: una clau de camp de Document AI per a `document_ai`, un id de node de qüestionari per a `questionnaire`, i `expected_details.<field>` o `metadata.<key>` per a `expected_data`. Un valor sota `expected_details.` només pot nomenar un camp que el payload de creació de sessió porti realment: `address`, `country`, `date_of_birth`, `first_name`, `gender`, `id_country`, `identification_number`, `ip_address`, `last_name`, `nationality` o `poa_country`. Una entrada malformada es rebutja en desar, no s'omet. Forma: `{"full_name"\|"first_name"\|"last_name"\|"address": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`. |
| `bank_name_match_threshold` | integer | A partir d'aquesta puntuació, el nom del titular és una coincidència. `50` a `100`, per defecte `85`. |
| `bank_partial_match_floor` | integer | Per sota d'aquesta puntuació, el nom del titular és una no coincidència. `0` a `99`, per defecte `70`. La banda entre el mínim i el llindar és la coincidència parcial, així que el mínim ha d'estar estrictament per sota del llindar o el desat es rebutja. Un `null` explícit vol dir «usa el valor per defecte» en aquest cas, per això un llindar de `50` sense mínim es rebutja: es comprova com a `50` contra el mínim per defecte de `70`. |
| `bank_require_address_match` | boolean | Exigeix també que l'adreça del titular coincideixi. Un nom que ha arribat al llindar però la puntuació de l'adreça del qual queda per sota passa a coincidència parcial. Una institució que no retorna cap adreça eximeix el requisit; una sessió sense adreça pròpia amb què comparar-la no, i queda com a coincidència parcial. Desactivat per defecte. |
| `bank_use_provider_score` | boolean | Llegeix també la puntuació pròpia de la institució sobre el nom del titular i la deixa decidir quan és més alta que la de Didit o quan Didit no tenia cap nom de titular per puntuar. Un resultat decidit així informa `provider_only` com a mètode de coincidència, i una connexió que no ha retornat aquesta puntuació registra un avís `provider_score_unavailable`. Activat per defecte. |
| `bank_show_match_result_to_user` | boolean | Mostra a l'usuari el resultat de la titularitat dins del flux de verificació. Desactivat vol dir que es registra a la sessió però mai no es mostra. |

### Comprovació del compte

Aquestes claus només s'apliquen a la comprovació del compte. L'inici de sessió bancari manté les seves coincidències aproximades i el seu propi `bank_max_attempts`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_account_check_accept_close_match` | boolean | Activat (per defecte), un nom que el banc puntua entre `bank_partial_match_floor` i `bank_name_match_threshold` és una coincidència aproximada: l'usuari confirma el nom que té el banc quan `bank_suggest_holder_name` està activat, i `bank_partial_match_action` decideix. Desactivat, aquesta coincidència aproximada és una no coincidència (`OWNER_NAME_MISMATCH`, decidida per `bank_no_match_action`) i consumeix l'intent. |
| `bank_account_check_max_attempts` | integer | Quantes comprovacions de compte té l'usuari, de `1` a `5`, `3` si no es configura: quantes vegades pot escriure les dades del compte per a una comprovació que el banc respon. És un recompte separat de `bank_max_attempts`. Una comprovació rebutjada a causa de les dades introduïdes (un IBAN no vàlid) o una que el banc no ha pogut respondre no consumeix cap intent. |

### Dades financeres

`bank_expected_currencies` funciona només amb el consentiment `ownership` per defecte. Les altres tres claus llegeixen dades financeres reals, així que cadascuna necessita l'àmbit de consentiment corresponent dins de `bank_scopes`, i el desat es rebutja sense ell.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_expected_currencies` | string\[] | Monedes ISO 4217 en què s'espera que estigui el compte. Buit vol dir qualsevol; una discrepància s'informa a través de `bank_currency_mismatch_action`. |
| `bank_min_balance` | number | Saldo disponible mínim, en la moneda pròpia del compte. Per sota, s'activa `bank_low_balance_action`. Necessita l'àmbit `balances`. `0` és un llindar real i no és el mateix que deixar la clau fora: un compte en descobert activa l'acció. Aquesta acció és per defecte `NO_ACTION`, que deixa el veredicte sense canvis, de manera que rebutjar un compte en descobert també requereix `bank_low_balance_action: "DECLINE"`. |
| `bank_transactions_history_days` | enter | Fins a quin punt enrere es llegeix l'historial de transaccions, de `30` a `365` dies. Per defecte és `90`. Requereix l'àmbit `transactions`. |
| `bank_refresh_enabled` | booleà | Torna a obtenir les dades financeres del compte després que el pas ja s'hagi decidit, mentre el consentiment bancari sigui vigent. Requereix almenys un dels àmbits `balances`, `transactions` o `income`. Un consentiment que caduca després es tracta amb `bank_consent_expired_action`. |

### Què s'emmagatzema

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_store_full_identifiers` | booleà | Emmagatzema els identificadors del compte sense emmascarar en lloc d'emmascarats. Requereix l'àmbit `identifiers`. Fins i tot així, la forma sense emmascarar només es retorna a un cridant que tingui el permís de lectura de la verificació bancària. |
| `bank_store_raw_owner_data` | booleà | Conserva les dades del titular que va retornar l'entitat, juntament amb l'evidència de titularitat. Si està desactivat, només es conserva la comparació en si: puntuacions, mètode de coincidència i codis de motiu. |

### Accions de veredicte

Cada clau d'aquí accepta `DECLINE`, `REVIEW` o `NO_ACTION`, tret que estigui marcada com a restringida, i recorre al valor per defecte següent quan l'omets o envies `null`. Res que no sigui evidència positiva de titularitat s'aprova per defecte, i només l'evidència demostrable en contra de l'usuari en provoca el rebuig.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_no_match_action` | acció restringida | Veredicte quan el titular del compte no és demostrablement la persona verificada: la millor puntuació del nom és inferior a `bank_partial_match_floor`. Utilitza `DECLINE` o `REVIEW`. Per defecte és `DECLINE`. |
| `bank_partial_match_action` | acció | Veredicte quan el nom del titular queda entre `bank_partial_match_floor` i `bank_name_match_threshold`. Per defecte és `REVIEW`, i mai aprova per defecte. |
| `bank_not_verifiable_action` | acció | Veredicte quan l'entitat s'ha connectat però no ha retornat cap identitat del titular per comparar. Per defecte és `REVIEW`. |
| `bank_unknown_action` | acció | Veredicte quan no s'han pogut obtenir les evidències després de diversos reintents: un error transitori. Per defecte és `REVIEW`. |
| `bank_reference_identity_missing_action` | acció | Veredicte quan cap pas anterior no ha produït una identitat amb què comparar el titular, de manera que la titularitat només pot ser `unknown`. Per defecte és `REVIEW`. |
| `bank_joint_account_action` | acció | Veredicte quan el compte té més d'un titular. Per defecte és `NO_ACTION`. |
| `bank_business_account_action` | acció | Veredicte quan l'entitat classifica el titular com una empresa i no com una persona. Per defecte és `REVIEW` en un flux de treball de persona, i `NO_ACTION` en un flux de treball d'empresa (KYB) on la sessió espera trobar un titular empresarial. |
| `bank_unsupported_action` | acció | Veredicte quan l'usuari continua sense banc perquè cap mètode no ha pogut verificar el seu país o banc: cap ruta d'inici de sessió bancari o de comprovació de compte està disponible al país, o el banc que ha triat no es pot utilitzar en aquest pas. El resultat aleshores té `continued_without_bank` a true i `NOT_COVERED` als seus codis de motiu. Per defecte és `REVIEW`. |
| `bank_skipped_action` | acció restringida | Veredicte quan l'usuari ha triat Continua sense el teu banc mentre hi havia una manera de verificar disponible. El resultat aleshores té `continued_without_bank` a true i `SKIPPED` als seus codis de motiu. Utilitza `DECLINE` o `REVIEW`. Per defecte és `REVIEW`. |
| `bank_attempts_exhausted_action` | acció restringida | Veredicte quan l'usuari ha esgotat els intents de totes les maneres de verificar que encara se li ofereixen, inclosa la pujada d'un extracte (`bank_max_attempts`, i `bank_account_check_max_attempts` on el país ofereix la comprovació de compte), sense una connexió satisfactòria, també quan després continua sense banc. Utilitza `DECLINE` o `REVIEW`. Per defecte és `DECLINE`. |
| `bank_consent_expired_action` | acció | Veredicte quan el consentiment bancari caduca després que el pas ja s'hagi decidit. Només té sentit amb `bank_refresh_enabled`. Per defecte és `NO_ACTION`. |
| `bank_currency_mismatch_action` | acció | Veredicte quan la moneda del compte no és a `bank_expected_currencies`. Per defecte és `NO_ACTION`. |
| `bank_country_mismatch_action` | acció | Veredicte quan el país de l'entitat és diferent del país esperat o del país del document. Per defecte és `NO_ACTION`. |
| `bank_low_balance_action` | acció | Veredicte quan el saldo disponible és inferior a `bank_min_balance`. Requereix l'àmbit `balances`. Per defecte és `NO_ACTION`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

### Controls addicionals

Aquestes claus són opcionals. Cada clau d'acció accepta `DECLINE`, `REVIEW` o `NO_ACTION`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `bank_abandoned_action` | acció | Veredicte quan el pas acaba sense coincidència perquè la persona ha sortit del seu banc i no hi ha tornat mai (un intent ha caducat). |
| `bank_account_age_action` | acció | Veredicte quan el compte és més nou que `bank_account_age_days`, un patró habitual de compte mula. |
| `bank_account_age_days` | enter | Un compte l'historial del qual comença fa menys d'aquest nombre de dies es considera nou, d'1 a 365, amb 30 per defecte. Es llegeix de l'historial de transaccions, per tant només amb l'àmbit `transactions`. |
| `bank_account_lookup_enabled` | booleà | Obsolet: utilitza `bank_method_order` i `bank_countries.<ISO3>.methods`. Es llegeix durant una versió a partir d'un desament que no envia `bank_method_order`: amb `bank_open_banking_enabled`, estableix l'ordre, amb la comprovació de compte després de l'inici de sessió bancari quan està activada, i s'omet quan està desactivada o no definida. Cada desament el reescriu amb el valor que indica si algun país ofereix la comprovació de compte. |
| `bank_account_type_action` | acció | Veredicte quan el compte verificat és un compte d'estalvi. |
| `bank_address_match_threshold` | enter | A partir d'aquesta puntuació, l'adreça del titular coincideix, de 50 a 100, amb 70 per defecte. Només es llegeix amb `bank_require_address_match`. |
| `bank_address_mismatch_action` | acció | Veredicte quan l'adreça del titular és diferent, cosa que converteix una coincidència en una coincidència aproximada. Només amb `bank_require_address_match`. |
| `bank_auto_add_countries` | booleà | Ofereix tots els països que pot atendre una ruta d'aquest node, també els afegits després de desar el node, excepte els països que `bank_countries` desactiva. Desactivat quan la clau és absent, de manera que un node existent mai s'amplia per si sol. |
| `bank_cash_flow_action` | acció | Veredicte quan els diners entren i surten immediatament, o quan entren moltes transferències petites (flux de caixa de pas). Requereix l'àmbit `transactions`. |
| `bank_dob_match_enabled` | boolean | Compara la data de naixement del titular, quan el banc la comparteix, amb la verificada. Una discrepància mai no canvia el resultat de titularitat: activa `bank_dob_mismatch_action`. Activat per defecte. |
| `bank_dob_match_threshold` | integer | Amb una puntuació igual o superior a aquesta, la data de naixement coincideix; de 50 a 100, per defecte 70. Dues dates coincideixen en el dia o no, de manera que puntua 100 o 0. |
| `bank_dob_mismatch_action` | acció | Veredicte quan la data de naixement del titular és diferent. Només amb `bank_dob_match_enabled`. |
| `bank_email_match_enabled` | boolean | Compara el correu electrònic que el banc té registrat amb el correu verificat de la sessió. Una discrepància activa `bank_email_mismatch_action`. Desactivat per defecte. |
| `bank_email_match_threshold` | integer | Des d'aquesta puntuació o superior, el correu coincideix; de 50 a 100, per defecte 70. |
| `bank_email_mismatch_action` | acció | Veredicte quan el correu electrònic del titular és diferent. Només amb `bank_email_match_enabled`. |
| `bank_evidence_retention_days` | integer | Elimina les evidències bancàries aquests dies després del veredicte: 30, 90, 365 o 1825. Null les conserva amb la sessió. S'eliminen: les dades del titular, la identitat amb què es van comparar, els identificadors del compte, les dades financeres i un extracte pujat; una connexió encara activa es revoca. El veredicte, les puntuacions i els codis de motiu es conserven. En eliminar la sessió se suprimeix tot, el que passi primer. |
| `bank_fallback_used_action` | acció | Veredicte quan el compte s'ha verificat amb micro-ingressos o amb la càrrega d'un extracte. |
| `bank_match_any_holder` | boolean | Un compte conjunt o compartit coincideix quan QUALSEVOL titular indicat coincideix amb la persona. Desactivat: només el primer titular que indica el banc pot coincidir. Activat per defecte. |
| `bank_microdeposits_enabled` | boolean | Ofereix micro-ingressos com a alternativa: dos ingressos petits arriben al compte i la persona n'introdueix els imports. S'ofereix només en un país la ruta del qual els pot enviar, després d'un intent de verificació bancària cobrat dins la mateixa sessió. S'inclou sense cost addicional; el client paga el preu de la ruta una sola vegada. Les sessions de sandbox poden provar-ho sense facturació. El titular és el nom que la sessió ha verificat, que la persona declara que és el del compte, de manera que un compte verificat registra una advertència `holder_declared`. Activat per defecte. |
| `bank_mule_score_action` | acció | Veredicte quan la puntuació de mula és igual o superior a `bank_mule_score_threshold`. |
| `bank_mule_score_threshold` | integer | Amb una puntuació de mula igual o superior a aquesta, entre 0 i 100, s'activa `bank_mule_score_action`; per defecte 70. La puntuació combina un compte nou, el flux de caixa de pas, un saldo buidat i moltes transferències petites d'entrada, llegits de l'historial de transaccions (l'àmbit `transactions`). |
| `bank_open_banking_enabled` | boolean | Retirat: utilitza `bank_method_order` i `bank_countries.<ISO3>.methods`. Es llegeix durant una versió des d'un desat que no envia `bank_method_order`: amb `bank_account_lookup_enabled`, estableix l'ordre, amb l'inici de sessió bancari quan està activat o sense definir. Cada desat el torna a escriure com a indicació de si algun país ofereix l'inici de sessió bancari. |
| `bank_phone_match_enabled` | boolean | Compara el telèfon que el banc té registrat amb el telèfon verificat de la sessió. Una discrepància activa `bank_phone_mismatch_action`. Desactivat per defecte. |
| `bank_phone_match_threshold` | integer | Des d'aquesta puntuació o superior, el telèfon coincideix; de 50 a 100, per defecte 70. |
| `bank_phone_mismatch_action` | acció | Veredicte quan el telèfon del titular és diferent. Només amb `bank_phone_match_enabled`. |
| `bank_popular_mode` | string | `auto` (el valor per defecte) ordena els bancs populars segons quins connecta més la gent del país; `manual` mostra en lloc d'això els `popular_institutions` de cada país de `bank_countries`, en el seu ordre. |
| `bank_statement_document_checks_action` | acció | Veredicte quan un extracte pujat presenta indicis d'edició o manipulació. Per defecte `REVIEW`. |
| `bank_statement_enabled` | boolean | Ofereix la pujada d'un extracte bancari com a alternativa: un extracte dels últims 3 mesos, comprovat per detectar manipulació, el nom del titular del qual es compara de la mateixa manera que en una verificació bancària. S'inclou sense cost addicional després d'un intent de verificació bancària cobrat dins la mateixa sessió. Amb `bank_statement_standalone_enabled` també s'ofereix sense cap intent bancari previ, en qualsevol país, i aleshores es factura per separat. Les sessions de sandbox poden provar-ho sense facturació. Desactivat per defecte. |
| `bank_suggest_holder_name` | boolean | En una coincidència aproximada, mostra a la persona el nom amb què el banc té registrat el compte i li demana que confirmi que és seu o que connecti un altre compte. La resposta es registra com a `holder_confirmation`; confirmar finalitza el pas amb `bank_partial_match_action`. Activat per defecte. |
| `fallback_to_native` | boolean | Indica si una connexió de mercat que no es pot establir recorre a la ruta nativa de Didit. Desactivat per defecte: una alternativa silenciosa gastaria el saldo de Didit en una sessió que esperaves executar amb el teu propi contracte de proveïdor. Una connexió alternativa es registra com a `credential_source = native` i es factura al preu de la ruta nativa. |
| `provider_key` | string | Quina ruta executa el pas. Buit (el valor per defecte) és la Bank Verification nativa de Didit, un producte independent del proveïdor que Didit encamina al proveïdor regional de banca oberta que dona servei al país i a l'entitat de l'usuari, amb els contractes i la facturació de Didit. Un valor indica un proveïdor de mercat amb les credencials del qual s'ha connectat aquesta aplicació: la sessió aleshores s'executa, es factura i es revoca al teu compte de proveïdor, i Didit només cobra la comissió de la plataforma de mercat. Un proveïdor no connectat es rebutja en desar. |

Exemple d'objecte `config`, per a un compte on Bank Verification està activada i la ruta que has seleccionat cobreix el país que indiques:

```json theme={null}
{
  "bank_method_order": ["open_banking", "account_lookup"],
  "bank_countries": {
    "ESP": { "enabled": true, "institutions": "all" }
  },
  "bank_scopes": { "ownership": true },
  "bank_eligible_account_types": ["checking", "current"],
  "bank_name_match_threshold": 85,
  "bank_partial_match_floor": 70,
  "bank_partial_match_action": "REVIEW",
  "bank_no_match_action": "DECLINE"
}
```

> [!WARNING]
>
> `bank_countries` és el que fa que aquest pas tingui efecte, i es comprova contra la ruta on s'executa el node, no contra una llista global. Un país on aquesta ruta no pot establir la titularitat del compte es rebutja en desar i s'indica a l'error, així que llegeix l'error en lloc de suposar que el país s'ha acceptat i que s'ometrà en executar.

## AML

Valor de la funcionalitat: `AML`.

Per al cribratge KYC de persones, utilitza aquests camps:

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `is_aml_ongoing_monitoring_enabled` | boolean | Activa el monitoratge AML continu. |
| `aml_score_approve_threshold` | integer | Llindar d'aprovació. |
| `aml_score_review_threshold` | integer | Llindar de revisió. |
| `aml_match_score_threshold` | integer | Llindar de puntuació de coincidència per a les possibles coincidències. |
| `aml_name_weight` | integer | Pes del nom. Si es proporciona algun pes AML, els pesos del nom, la data de naixement i el país han de sumar `100`. |
| `aml_dob_weight` | integer | Pes de la data de naixement. |
| `aml_country_weight` | integer | Pes del país. |
| `create_cases_on_hit` | boolean | Obre un cas automàticament quan el cribratge retorna una coincidència, en lloc de deixar que la coincidència es revisi des de la sessió. Desactivat per defecte. |
| `case_blueprint` | uuid | Plantilla de cas amb què es construeix el cas creat automàticament. Només té sentit amb `create_cases_on_hit`; si no s'estableix, s'utilitza la plantilla predeterminada del compte. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

Per al cribratge d'empreses KYB, utilitza aquests camps:

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `kyb_score_approve_threshold` | integer | Llindar d'aprovació de l'AML d'empresa. |
| `kyb_score_review_threshold` | integer | Llindar de revisió de l'AML d'empresa. |
| `kyb_enable_ongoing_monitoring` | boolean | Activa el monitoratge AML continu del KYB. |
| `kyb_company_aml_match_score_threshold` | integer | Llindar de puntuació de coincidència de l'AML d'empresa. |
| `kyb_company_aml_name_weight` | integer | Pes del nom de l'empresa. Els pesos AML d'empresa han de sumar `100` quan es proporcionin. |
| `kyb_company_aml_dob_weight` | integer | Pes de la data de constitució o de la data de naixement. |
| `kyb_company_aml_country_weight` | integer | Pes del país. |

### Cribratge d'una entitat extreta per un pas de Document AI

Un pas AML normalment llegeix a qui cribra des del pas `OCR` (una persona) o des del pas `KYB_REGISTRY` (una empresa). Un flux de treball l'únic pas d'extracció del qual és `DOCUMENT_AI`, és a dir, documents no estandarditzats com un certificat fiscal o una escriptura de constitució, no té cap dels dos, de manera que ha d'indicar d'on procedeix cada entrada del cribratge.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `aml_field_sources` | object | D'on llegir l'entitat que aquest pas sotmet a cribratge. `source` indica el productor i `key` indica el valor dins d'aquest: una clau de camp de Document AI per a `document_ai`, un identificador de node del qüestionari per a `questionnaire`, i `expected_details.<field>` o `metadata.<key>` per a `expected_data`. La CLAU del mapa és una de les quatre entrades del cribratge (`full_name`, `date_of_birth`, `nationality`, `document_number`), que per a una empresa es llegeixen com a nom legal, data de constitució, país i número de registre. Un camp de Document AI que ja té una d'aquestes quatre claus es mapeja automàticament i deliberadament no es persisteix, de manera que canviar-li el nom mai no congela un mapatge obsolet. Un mapatge explícit preval sobre el mapatge automàtic i sobre el document d'identitat, i un mapatge que no resol res en el moment de l'execució deixa l'entrada buida en lloc de recórrer a una altra font. En un flux de treball de negoci (KYB), l'empresa que retorna un pas `KYB_REGISTRY` és la font autoritzada: només un mapatge explícit substitueix una de les seves entrades, el mapatge automàtic no s'aplica per sobre d'un registre del registre mercantil, i sense cap pas de registre el mapatge és tota la identitat. Forma: `{"full_name"\|"date_of_birth"\|"nationality"\|"document_number": {"source": "document_ai"\|"questionnaire"\|"expected_data", "key": "<docai field key>\|<questionnaire node id>\|expected_details.<field>\|metadata.<key>"}}`. |
| `aml_entity_type` | string | `person` o `company`. Per defecte és `person` en un flux de treball de persona (KYC) i `company` en un flux de treball de negoci (KYB). Estableix `company` per cribrar l'empresa indicada en un document pujat sense un pas `KYB_REGISTRY`: el proveïdor cerca als registres d'empreses i la puntuació de coincidència es calcula com a empresa. |
| `aml_incomplete_data_action` | action | Veredicte quan el cribratge s'ha fet amb menys d'una identitat completa (nom, data de naixement i país). `REVIEW` és el valor per defecte. `NO_ACTION` continua amb dades reduïdes en un flux de treball que sap que només té un nom. El cribratge s'executa en tots dos casos, i el registre de dades parcials es guarda en tots dos casos; això només decideix quin efecte té sobre l'estat. |

Exemple: cribratge de l'empresa indicada en una *acta constitutiva* mexicana, sense cap document d'identitat en tot el flux de treball:

```json theme={null}
{
  "feature": "AML",
  "config": {
    "aml_entity_type": "company",
    "aml_field_sources": {
      "full_name": { "source": "document_ai", "key": "razon_social" },
      "document_number": { "source": "document_ai", "key": "rfc" },
      "date_of_birth": { "source": "document_ai", "key": "fecha_constitucion" },
      "nationality": { "source": "document_ai", "key": "pais" }
    },
    "aml_incomplete_data_action": "REVIEW"
  }
}
```

> [!WARNING]
>
> Sense cap pas `OCR` ni `KYB_REGISTRY` abans, un pas `AML` ha de poder omplir
> `full_name`: sense un nom, el proveïdor no pot fer cap cerca. Un flux de treball que no mapeja res, o que mapeja
> una clau de Document AI que cap pas anterior no extreu, es rebutja en desar en lloc de desar-se i quedar
> sense cribrar res. La precisió de l'AML depèn directament de quants identificadors proporciones: un cribratge només
> pel nom és el que genera un gran volum de falsos positius.

## Anàlisi de dispositiu i IP

Valor de la funcionalitat: `IP_ANALYSIS`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `ip_mismatch_action` | acció | Acció que es duu a terme quan la geolocalització de la IP no coincideix amb les dades esperades. |
| `ip_location_not_determined_action` | acció | Veredicte quan no s'ha registrat cap adreça que identifiqui l'usuari final, de manera que la sessió no té cap ubicació IP: país, ciutat, ISP, coordenades i fus horari no estan disponibles, i `ip_geofencing_by_country`, la comparació amb el país del document i les comprovacions de VPN o centre de dades no es poden executar. Per defecte és `NO_ACTION`, que manté visible l'advertència `IP_LOCATION_NOT_DETERMINED` a la sessió sense canviar-ne el veredicte; estableix `REVIEW` o `DECLINE` si una sessió sense ubicació no pot superar la verificació. |
| `vpn_detection_action` | acció | Acció que es duu a terme quan es detecta l'ús d'una VPN o d'un proxy. |
| `expected_ip_mismatch_action` | acció | Acció que es duu a terme quan la IP no coincideix amb la IP esperada. |
| `duplicated_ip_action` | acció | Acció que es duu a terme quan la IP es reutilitza de manera sospitosa. |
| `duplicated_device_action` | acció | Acció que es duu a terme quan la mateixa empremta persistent del dispositiu es reutilitza en sessions amb valors de `vendor_data` diferents. |
| `recovered_device_action` | acció | Acció que es duu a terme quan la recuperació d'empremta v2 vincula la sessió a un dispositiu vist anteriorment amb alta confiança, després que l'ID de dispositiu persistent hagi canviat. |
| `is_ip_geofencing_enabled` | booleà | Activa les restriccions de geofencing per IP. Quan és `false`, `ip_geofencing_by_country` es conserva però no s'aplica. |
| `ip_geofencing_by_country` | objecte | Regles d'ubicació IP per país, indexades pel codi de país ISO-3: `{"USA": {"allowed": true, "states": {"California": {"allowed": false}}}}`. Les entrades d'estat o regió substitueixen l'indicador del país; els països no inclosos es permeten. |
| `ip_geofencing_action` | acció | Acció que es duu a terme quan la IP de la sessió es troba en un país o en un estat o regió que no està permès. Per defecte és `DECLINE`. |
| `automation_detected_action` | acció | Veredicte quan la sessió sembla dirigida per automatització i no per una persona. |
| `cross_org_fraud_device_action` | acció | Veredicte quan aquest dispositiu ha estat marcat com a frau per una altra organització de la xarxa. |
| `cross_org_fraud_ip_action` | acció | Veredicte quan aquesta IP ha estat marcada com a fraudulenta per una altra organització de la xarxa. |
| `device_app_tampered_action` | acció | Veredicte quan el binari de l'aplicació amfitriona sembla manipulat. |
| `device_blocklist_action` | acció | Veredicte quan el dispositiu és a la llista de bloqueig de l'organització. |
| `device_debugger_action` | acció | Veredicte quan hi ha un depurador connectat a l'aplicació amfitriona. |
| `device_emulator_action` | acció | Veredicte quan el dispositiu és un emulador i no pas maquinari real. |
| `device_hooking_action` | acció | Veredicte quan es detecta enganxament o instrumentació en temps d'execució. |
| `device_integrity_missing_action` | acció | Veredicte quan no s'ha retornat cap atestació d'integritat del dispositiu de la plataforma. |
| `device_rooted_action` | acció | Veredicte quan el dispositiu té root o jailbreak. |
| `multiple_devices_action` | acció | Veredicte quan la sessió s'ha dut a terme des de més d'un dispositiu. |
| `device_liveness_attack_history_action` | acció | Acció que es duu a terme quan el mateix dispositiu (identificat pel seu ID de dispositiu persistent) s'ha fet servir en una sessió anterior d'un altre usuari la captura de prova de vida del qual s'ha considerat un atac (advertència `DEVICE_LINKED_TO_LIVENESS_ATTACK`). Per defecte és `NO_ACTION`. |
| `device_model_inconsistency_action` | acció | Acció que es duu a terme quan el mateix dispositiu (identificat pel seu ID de dispositiu persistent) s'ha informat com a model de dispositiu diferent en una sessió anterior (advertència `DEVICE_MODEL_INCONSISTENT`). Per defecte és `NO_ACTION`. |
| `status_rules` | matriu | Regles d'estat personalitzades opcionals. |

Exemple:

```json theme={null}
{
  "feature": "IP_ANALYSIS",
  "config": {
    "vpn_detection_action": "REVIEW",
    "duplicated_device_action": "REVIEW",
    "recovered_device_action": "REVIEW",
    "is_ip_geofencing_enabled": true,
    "ip_geofencing_by_country": {
      "USA": { "allowed": true, "states": { "California": { "allowed": false } } },
      "RUS": { "allowed": false, "states": null }
    },
    "ip_geofencing_action": "DECLINE"
  }
}
```

Utilitza `recovered_device_action` per separat de `duplicated_device_action` quan vulguis monitorar els dispositius recuperats amb alta confiança abans de rebutjar-los automàticament. Això resulta útil durant el desplegament, perquè les coincidències de dispositius recuperats estan pensades per detectar xarxes de frau, però cal calibrar-les igualment amb el teu propi trànsit.

## Verificació de la ubicació

Valor de la funcionalitat: `GEOLOCATION`.

Comprova on es troba la persona mentre es verifica, a partir de la posició del dispositiu o de la ubicació IP de la connexió, en relació amb les zones permeses i bloquejades, la ubicació IP i l'adreça del document. Consulta [Verificació de la ubicació](https://docs.didit.me/ca/core-technology/location-verification/overview.md) per saber com es comporta el pas i [el seu informe](https://docs.didit.me/ca/core-technology/location-verification/report-location-verification.md) per als camps de decisió. Col·loca'l després de Verificació d'identitat o de Comprovant de domicili si vols la distància fins a l'adreça d'un document, perquè la distància només es mesura quan hi ha una adreça registrada. Amb `geolocation_position_source` sense definir, la distància fins a la ubicació IP necessita un pas d'Anàlisi de dispositiu i IP al mateix flux de treball. Totes les claus són opcionals: un pas amb `config` buit demana al dispositiu una posició amb una precisió de 250 m, no més antiga de 120 segons, dona a la persona 3 intents i no aplica cap regla de zona.

Cada resultat té la seva pròpia clau d'acció. Una clau d'acció que no definiu pren el valor per defecte de la `geolocation_preset` que heu triat, o el valor per defecte de cada clau indicat més avall si no n'heu triat cap. Una ubicació incerta o denegada pren per defecte `REVIEW`, mai `DECLINE`, perquè un permís denegat o un radi ampli no és prova de frau. Una acció que definiu explícitament sempre té prioritat sobre la preconfiguració. Un desafiament reproduït (`LOCATION_REPLAY_DETECTED`) i una atestació del dispositiu fallida (`LOCATION_INTEGRITY_FAILED`) sempre rebutgen i no tenen clau d'acció.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `geolocation_position_source` | string | D'on prové la posició. `device_and_ip` demana la posició del dispositiu i la compara amb la ubicació IP de la connexió des de la qual s'envia (una consulta d'intel·ligència IP quan aquesta IP encara no és a la memòria cau). Sense definir (el valor per defecte) també demana la posició del dispositiu i, com abans que existís aquesta clau, la compara amb la ubicació IP que va observar el pas d'Anàlisi de dispositiu i IP de la sessió, de manera que no hi ha distància sense aquest pas i la connexió mai no es consulta. L'excepció és un node que actua sobre una troballa de VPN, proxy o Tor (la seva pròpia acció o la seva preconfiguració): consulta la connexió per a aquesta troballa i compara el dispositiu amb ella, exactament com ho fa `device_and_ip`. `device_only` mai no compara amb la ubicació IP i només consulta la connexió per a aquestes troballes; `ip_only` mai no demana res a la persona i jutja la ubicació IP de la connexió, a escala de ciutat i amb un radi de 50 km, sense regles de precisió, d'antiguitat ni de concessió d'una ubicació aproximada; amb `geolocation_areas`, una ciutat costanera es jutja dins del seu país tret que hi hagi un altre país dins d'aquest radi. En un node que demana el dispositiu, un intent sense posició del dispositiu es jutja com la negativa o l'error que és: la ubicació IP mai no el substitueix. |
| `geolocation_preset` | string | Els valors per defecte que pren cada acció no definida d'aquest node. `licensing`: fora d'una zona, dins d'una zona bloquejada, una VPN, Tor o un emulador rebutgen; un proxy i la resta de troballes es revisen, i una atestació del dispositiu que falta es queda sense acció. `fraud_screening`: el mateix, excepte que tot el que Licensing rebutja passa a revisió. Si és null, es mantenen els valors per defecte de sempre. Una acció definida explícitament sempre té prioritat. |
| `geolocation_accuracy_mode` | string | Què es demana al dispositiu. `precise` demana al sistema operatiu una posició precisa, i a una persona que només concedeix una posició aproximada se li demana que ho torni a intentar mentre queden intents i després es jutja per `geolocation_approximate_action`; `approximate_allowed` accepta una concessió aproximada sense aquest veredicte. `geolocation_max_accuracy_radius_m` s'aplica en tots dos casos. `precise` si no està definit. |
| `geolocation_max_accuracy_radius_m` | integer | El radi d'incertesa més ampli, en metres, que pot tenir una posició del dispositiu i encara comptar. De 10 a 50000 metres; 250 si no està definit. Una posició amb un radi d'incertesa més gran, o una que no informa de cap radi, fa el que indica `geolocation_low_accuracy_behavior` i es jutja per `geolocation_low_accuracy_action`. Un node `ip_only` no té radi del dispositiu i mai no l'aplica. |
| `geolocation_max_accuracy_radius_unit` | string | La unitat en què la consola mostra `geolocation_max_accuracy_radius_m`. Només és visual: el valor emmagatzemat és sempre en metres, cap regla no en depèn, i les dades del pas només el transmeten perquè un client pugui mostrar la mateixa unitat. |
| `geolocation_low_accuracy_behavior` | string | Què fa una posició amb un radi d'incertesa més gran que `geolocation_max_accuracy_radius_m`, o sense radi: `ask_again` (el valor per defecte) demana a la persona que ho torni a intentar mentre queden intents; `fail` finalitza el pas al primer cop. |
| `geolocation_max_age_seconds` | integer | Quants segons pot tenir com a màxim una posició del dispositiu quan el servidor la rep. De 5 a 3600 segons; 120 si no està definit. Si la posició és més antiga, es demana a la persona que ho torni a intentar mentre queden intents i després es jutja per `geolocation_stale_fix_action`. |
| `geolocation_timeout_seconds` | integer | Quants segons deixa el client que el dispositiu busqui una posició en cada intent; el servidor els transmet a les dades del pas i no n'aplica cap per si mateix. De 5 a 120 segons; 20 si no està definit. Un intent que no troba cap posició a temps s'envia com a `timeout`, es demana a la persona que ho torni a intentar mentre queden intents i després es jutja per `geolocation_unavailable_action`. |
| `geolocation_max_attempts` | integer | Quants intents té la persona en aquest node. De 1 a 5 intents; 3 si no està definit. Un intent en una situació que la persona encara pot rectificar (una negativa, una posició amb un radi ampli, antiga o aproximada, o una troballa d'una zona o d'un anonimitzador sobre la qual actua el node) es torna a demanar mentre queden intents, i l'últim és el que decideix el pas. Una posició simulada, o un emulador sobre el qual actua el node, finalitza el pas en l'intent en què s'ha informat. |
| `geolocation_allow_qr_handoff` | boolean | Ofereix continuar en un telèfon amb un codi QR mentre el pas encara és obert (`allow_qr_handoff` a les dades del pas, `can_handoff` a cada resposta d'enviament). Els SDK natius ja s'executen al telèfon i mai no mostren el codi. Activat per defecte. |
| `geolocation_allow_skip` | boolean | Permet a la persona continuar sense ubicació en qualsevol moment, des de la pantalla d'introducció o de reintent (`skipped: true`). L'omissió finalitza el pas i es jutja per `geolocation_unavailable_action`, excepte una omissió que respon a una negativa en un `geolocation_refusal_path` `continue_without_location`, que es registra com a aquella negativa. Desactivat per defecte. |
| `geolocation_deep_link_enabled` | boolean | Es reenvia al client com a `deep_link_enabled` a les dades del pas: s'ofereix obrir l'aplicació pròpia del client en lloc de continuar. El servidor no aplica cap regla. Desactivat per defecte. |
| `geolocation_refusal_path` | string | La manera de continuar que s'ofereix quan es denega l'accés a la ubicació. `retry_then_handoff` (el valor per defecte) torna a demanar-la mentre hi hagi intents disponibles i ofereix un traspàs al telèfon; `continue_without_location` permet que la persona continuï i registra el rebuig; `end_session` finalitza el pas i la sessió al primer rebuig, i requereix que `geolocation_permission_denied_action` sigui Review o Decline i un flux de treball que acabi amb una decisió Declined, In Review o Final. La sessió es decideix a partir dels passos executats i mai s'aprova: en un flux de treball que no pot acabar en aquesta decisió, pren l'altre final no aprovador (Declined per a In Review, In Review per a Declined). |
| `is_geolocation_geofencing_enabled` | boolean | Activa les regles d'àrees: `geolocation_areas`, o l'anterior `geolocation_geofencing_by_country`, només s'apliquen mentre això sigui true, i només llavors les dades del pas enumeren `available_areas`. Desactivat per defecte. Amb aquesta opció activada, una llista de `geolocation_areas` necessita com a mínim una àrea permesa. |
| `geolocation_areas` | array | Àrees permeses i bloquejades, aplicades mentre `is_geolocation_geofencing_enabled` sigui true. Només una posició dins d'una àrea permesa passa, i una àrea bloquejada sempre preval sobre una de permesa. Una posició compta amb tot el seu cercle de precisió: un cercle que creua una vora que decideix la resposta és indeterminat, mai fora. Un país o una regió acaba on comença una altra terra, mai a la línia de costa, i una posició que els contorns no situen en cap terra (un front de mar o un moll que la línia de costa simplificada ha retallat) és indeterminada per a tots els països o regions dins del seu radi més 12 milles nàutiques. `id` és el que citen les regles de branca i `geolocation.inside_areas` / `geolocation.blocked_areas`; `kind` determina la forma: un `country` complet (ISO 3166-1 alpha-3 amb un contorn publicat: un territori que els contorns dibuixen com a regió d'un altre país és aquesta `region`, com Reunió, com a regió de França amb el codi `FR-RE`, o Bonaire, Sint Eustatius i Saba de `NL-BQ1` a `NL-BQ3`), `region` (codis ISO 3166-2 d'un sol país amb límits publicats), `circle` (d'1 a 500 km) o `polygon` (de 3 a 200 punts, un anell les vores del qual mai es creuen ni es toquen). Com a màxim 50 àrees, amb identificadors únics, i com a mínim una àrea permesa mentre la geocerca estigui activada. No es pot combinar amb `geolocation_geofencing_by_country`. |
| `geolocation_geofencing_by_country` | object | Regles de permís i denegació per país i regió per a la pròpia posició del dispositiu, aplicades només mentre `is_geolocation_geofencing_enabled` sigui true. Té la mateixa forma que `ip_geofencing_by_country` d'Anàlisi d'IP, excepte que les claus de `states` són codis ISO 3166-2 (`US-NJ`), no noms d'estats, perquè la posició es resol en una subdivisió i no en l'etiqueta de ciutat del proveïdor. Un país que no apareix a la llista està permès. Es rebutja una regla de regió per a un país sense límits ISO 3166-2 publicats, en lloc d'ignorar-la en silenci. |
| `geolocation_ip_distance_km` | integer | Distància, en quilòmetres, que pot haver-hi entre la posició del dispositiu i la ubicació per IP, després de restar els dos radis d'incertesa, abans que s'apliqui `geolocation_ip_distance_action`. 200 quan la clau s'omet; null desactiva la comparació. Només un node amb `geolocation_position_source` definit com a `device_and_ip` o sense definir fa la comparació; aquesta clau indica amb quina ubicació per IP es compara. |
| `geolocation_ip_distance_unit` | string | La unitat en què la consola mostra `geolocation_ip_distance_km`. Només és visual: el valor emmagatzemat és sempre en quilòmetres i cap regla en depèn. |
| `geolocation_document_distance_km` | integer | Distància, en quilòmetres, que pot haver-hi entre la posició (la ubicació per IP en un node `ip_only`) i l'adreça que indica `geolocation_document_distance_basis`, abans que s'apliqui `geolocation_document_distance_action`. Si no està definida o és null (el valor per defecte), està desactivada. |
| `geolocation_document_distance_unit` | string | La unitat en què la consola mostra `geolocation_document_distance_km`. Només és visual: el valor emmagatzemat és sempre en quilòmetres i cap regla en depèn. |
| `geolocation_document_distance_basis` | string | Quina adreça s'usa com a punt de partida per mesurar `geolocation_document_distance_km`: `document` (el valor per defecte: l'adreça del document d'identitat i, després, el comprovant de domicili), només `proof_of_address`, o `declared` (el `expected_details.address` indicat en crear la sessió, geocodificat). |
| `geolocation_travel_tolerance_enabled` | boolean | Excusa la distància respecte de l'adreça quan la mateixa persona (mateix `vendor_data`) va ser vista a menys de `geolocation_travel_usual_area_km` d'aquesta adreça durant els últims `geolocation_travel_max_days` dies. Mai excusa una VPN, una posició suplantada, una àrea bloquejada ni estar fora de les àrees permeses. Només compta com a vista en aquell lloc una posició que el dispositiu ha mesurat: una lectura simulada o falsificada, un emulador o una atestació fallida mai ho fan. |
| `geolocation_travel_usual_area_km` | integer | Radi al voltant de l'adreça que es considera l'àrea habitual de la persona. De 10 a 500 km; 100 quan no està definit. |
| `geolocation_travel_max_days` | integer | Durant quant de temps, després de ser vista a l'àrea habitual, una posició llunyana encara es considera un viatge. De 1 a 90 dies; 14 quan no està definit. |
| `geolocation_consecutive_mismatch_count` | integer | Activa LOCATION\_CONSECUTIVE\_MISMATCHES quan aquesta comprovació i les comprovacions anteriors de la mateixa persona (mateix `vendor_data`) van quedar fora de les àrees permeses, dins d'una àrea bloquejada o massa lluny de l'adreça aquest nombre de vegades seguides. Una comprovació que no va comparar res no allarga ni trenca la ratxa, i tampoc ho fa una posició que el dispositiu no ha mesurat (una lectura simulada o falsificada, un emulador o una atestació fallida). De 2 a 10; null (el valor per defecte) està desactivat. |
| `geolocation_approximate_action` | action | Veredicte quan l'usuari ha concedit accés a una ubicació aproximada mentre `geolocation_accuracy_mode` en demana una de precisa. Per defecte és `REVIEW`. |
| `geolocation_blocked_area_action` | action | Veredicte quan la posició, i tot el seu cercle de precisió, es troba dins d'una àrea bloquejada de `geolocation_areas`. Per defecte és Decline. |
| `geolocation_consecutive_mismatch_action` | acció | Veredicte quan s'arriba a `geolocation_consecutive_mismatch_count` discrepàncies seguides. Per defecte: Revisió. |
| `geolocation_document_distance_action` | acció | Veredicte quan la posició del dispositiu està més lluny de l'adreça del document que `geolocation_document_distance_km`. L'adreça es geocodifica de manera aproximada, així que és un senyal feble. Per defecte: `REVIEW`. |
| `geolocation_emulator_action` | acció | Veredicte quan l'aplicació que ha compartit la localització informa que s'executa en un emulador. Els navegadors no ho poden informar. Tret que sigui Sense acció, finalitza el pas en aquest intent: tornar a comprovar-ho no pot canviar el dispositiu. Sense acció, tret que s'estableixi una altra cosa o que un preajust ho indiqui. |
| `geolocation_geofence_undetermined_action` | acció | Veredicte quan la posició no es pot situar dins ni fora de la geovalla perquè el seu cercle de precisió arriba fins al límit. La incertesa mai no es comunica com a fora. Per defecte: `REVIEW`. |
| `geolocation_geofencing_action` | acció | Veredicte quan la posició del dispositiu, i tot el seu cercle d'incertesa, queda fora de `geolocation_geofencing_by_country`. Per defecte: `DECLINE`. |
| `geolocation_integrity_missing_action` | acció | Veredicte quan un client natiu ha enviat una posició sense token d'atestació del dispositiu. Per defecte: Sense acció. Els clients web es registren com a no compatibles en lloc de com a absents, perquè cap navegador no pot fer atestació. |
| `geolocation_ip_distance_action` | acció | Veredicte quan la distància entre la posició del dispositiu i la ubicació IP de la sessió és superior a `geolocation_ip_distance_km`, després de restar els dos radis d'incertesa. Per defecte: `REVIEW`. |
| `geolocation_low_accuracy_action` | acció | Veredicte quan cap intent no ha establert la precisió requerida: la millor posició té un radi d'incertesa superior a `geolocation_max_accuracy_radius_m`, o no ha informat de cap radi. Una posició sense radi mai no es considera que compleixi el límit. Per defecte: `REVIEW`. |
| `geolocation_mock_location_action` | acció | Veredicte quan el sistema operatiu ha informat que la posició era simulada i no mesurada (proveïdor simulat d'Android, simulada per programari a iOS). Per defecte: `REVIEW`. |
| `geolocation_permission_denied_action` | acció | Veredicte quan l'usuari ha rebutjat o descartat la sol·licitud de localització en tots els intents permesos. Per defecte: Revisió. Un rebuig és una decisió, no un senyal de frau. |
| `geolocation_proxy_action` | acció | Veredicte quan la connexió que ha compartit la localització passa per un proxy obert, anònim o de relé privat. Sense acció, tret que s'estableixi una altra cosa o que un preajust ho indiqui. |
| `geolocation_stale_fix_action` | acció | Veredicte quan la posició es va mesurar més de `geolocation_max_age_seconds` abans que el servidor la rebés. Per defecte: `REVIEW`. |
| `geolocation_tor_action` | acció | Veredicte quan la connexió que ha compartit la localització és un node de sortida de Tor. Sense acció, tret que s'estableixi una altra cosa o que un preajust ho indiqui. |
| `geolocation_unavailable_action` | acció | Veredicte quan no s'ha pogut obtenir cap posició: els serveis de localització estan desactivats o restringits, el sistema de posicionament no ha retornat res, l'intent ha superat el temps d'espera, l'usuari ha saltat el pas o el client és massa antic per admetre'l. Per defecte: `REVIEW`. |
| `geolocation_vpn_action` | acció | Veredicte quan la connexió que ha compartit la localització és una VPN comercial. Tret que sigui Sense acció, es demana a la persona que la desactivi i torni a comprovar-ho mentre quedin intents. Sense acció, tret que s'estableixi una altra cosa o que un preajust ho indiqui. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. Pots aplicar-les als camps `geolocation.*` que s'enumeren a [Informe de verificació de localització](https://docs.didit.me/ca/core-technology/location-verification/report-location-verification.md#camps-per-a-regles-d’estat-i-branques). |

### Formes de les àrees

Cada element de `geolocation_areas` té un `id` (d'1 a 64 caràcters de `A-Z a-z 0-9 _ -`, únic a la llista), un `label` opcional (fins a 80 caràcters), un `type` que és `allowed` o `blocked`, i un `kind` que determina la forma.

| `kind` | Camps addicionals | Significat |
| - | - | - |
| `country` | `country` (ISO 3166-1 alpha-3) | Un país sencer que té un contorn publicat. |
| `region` | `country`, `regions` (codis ISO 3166-2 d'aquest país) | Una o més subdivisions d'un país amb límits publicats. |
| `circle` | `center` (`latitude`, `longitude`), `radius_km` (d'1 a 500) | Tots els punts dins del radi del centre. |
| `polygon` | `points` (de 3 a 200 elements de `latitude`, `longitude`) | Un anell tancat les arestes del qual mai no es creuen ni es toquen entre elles. |

Una llista conté com a màxim 50 àrees i necessita almenys una àrea `allowed` mentre `is_geolocation_geofencing_enabled` sigui `true`.
`geolocation_areas` i `geolocation_geofencing_by_country` no es poden enviar junts, i `geolocation_refusal_path: "end_session"` requereix que `geolocation_permission_denied_action` sigui `REVIEW` o `DECLINE`.
L'API rebutja una àrea que mai no podria coincidir, com una regió d'un país sense límits publicats, en lloc de desar-la.

Exemple:

```json theme={null}
{
  "feature": "GEOLOCATION",
  "config": {
    "geolocation_position_source": "device_and_ip",
    "geolocation_preset": "licensing",
    "geolocation_max_accuracy_radius_m": 250,
    "geolocation_max_attempts": 3,
    "is_geolocation_geofencing_enabled": true,
    "geolocation_areas": [
      { "id": "spain", "label": "Spain", "type": "allowed", "kind": "country", "country": "ESP" },
      { "id": "ceuta-melilla", "type": "blocked", "kind": "region", "country": "ESP", "regions": ["ES-CE", "ES-ML"] }
    ],
    "geolocation_ip_distance_km": 200,
    "geolocation_ip_distance_action": "REVIEW",
    "geolocation_vpn_action": "DECLINE"
  }
}
```

## Comprovant de domicili

Valor de la funcionalitat: `PROOF_OF_ADDRESS`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `poa_documents_allowed` | object | Configuració dels tipus de document de comprovant de domicili per codi de país ISO3. Cal habilitar almenys un tipus de document vàlid. |
| `poa_languages_allowed` | object | Codi d'idioma ISO 639-1 amb `0` o `1`. Cal habilitar almenys un idioma. |
| `poa_name_or_address_mismatch_action` | action | Acció quan el nom o l'adreça no coincideixen amb les dades esperades. |
| `poa_document_issues_action` | action | Acció quan el document té problemes de qualitat o d'extracció. |
| `poa_max_attempts_exceeded_action` | restricted action | Acció quan l'usuari supera el nombre màxim de reintents. Utilitza `DECLINE` o `REVIEW`. |
| `poa_document_authenticity_action` | restricted action | Acció quan fallen les comprovacions d'autenticitat. Utilitza `DECLINE` o `REVIEW`. |
| `poa_document_unproven_text_replacement_action` | action | Acció quan s'ha esborrat i reescrit en una altra tipografia un camp de text, i el fitxer no conté cap prova de si el contingut ha canviat (`POA_DOCUMENT_UNPROVEN_TEXT_REPLACEMENT`). |
| `poa_unsupported_document_type_action` | action | Acció quan el tipus de document no està admès. |
| `poa_unsupported_language_action` | action | Acció quan l'idioma del document no està admès. |
| `poa_issuer_not_identified_action` | action | Acció quan no s'identifica l'emissor del document. |
| `poa_issue_date_not_detected_action` | action | Acció quan no s'ha detectat la data d'emissió. |
| `poa_unparsable_or_invalid_address_action` | action | Acció quan l'adreça no és vàlida o no es pot analitzar. |
| `address_validation_enabled` | boolean | Valida l'adreça que llegeix aquest pas (impresa al comprovant de domicili; només es valida una càrrega que ha superat les comprovacions del document) contra dades de referència postals: confirma que l'adreça existeix i la normalitza, i mai no l'enllaça amb una persona. El resultat és l'objecte `address_validation` del pas a la decisió. **Es cobren \$0.10 per adreça validada**; una validació que no s'ha pogut executar (`unavailable`) és gratuïta. Desactivat per defecte. |
| `address_not_verified_action` | action | Acció quan Validació d'adreces no ha pogut confirmar l'adreça fins al nivell de l'edifici (`ADDRESS_NOT_VERIFIED`: `partially_verified` o `not_verified`). S'aplica només mentre `address_validation_enabled` està activat. Per defecte és `NO_ACTION`, que només registra l'avís. |
| `poa_name_match_score_threshold` | integer | Llindar de coincidència del nom. |
| `poa_max_retry_attempts` | integer | Límit de reintents, de `2` a `5`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Qüestionari

Valor de la funcionalitat: `QUESTIONNAIRE`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `questionnaire_uuid` | UUID | Obligatori. Utilitza el `questionnaire_id` que retorna `POST /v3/questionnaires/`. |
| `review_questionnaire_manually` | boolean | Envia les respostes del qüestionari a revisió manual. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. Pots fer referència als camps `questionnaire.answers.<question_id>`. |

## Registre KYB

Valor de la funcionalitat: `KYB_REGISTRY`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `kyb_accepted_countries` | object | Llista heretada de països ISO3 permesos per a la consulta al registre mercantil. Substituïda per `kyb_registry_countries_config`; encara es pot llegir i, per als fluxos de treball existents, encara es deriva d'ella, però ja no és la manera de configurar fluxos nous. |
| `kyb_manual_company_action` | action | Acció quan l'empresa requereix gestió manual. |
| `kyb_registry_fields_config` | object | Visibilitat i obligatorietat de cada camp del formulari de registre al flux allotjat. Vegeu-ne els detalls més avall. |
| `kyb_registry_countries_config` | object | Encaminament del registre per país, com a `{"<ISO2>": {"enabled": bool, "tier": "basic" \| "shareholders" \| "ubo"}}`. Cada país habilitat escull el nivell de dades que es cobra quan se selecciona una empresa (`basic` és el nivell Lite), i només es poden habilitar els nivells que el [endpoint de preus](https://docs.didit.me/ca/getting-started/kyb-registry-pricing.md) marca com a disponibles per a aquell país. Cal habilitar almenys un país: una comprovació al registre que no cerca enlloc es rebutja. Les empreses introduïdes manualment es facturen per separat i no fan servir aquesta configuració. |
| `kyb_registry_monitoring_enabled` | boolean | Manté el registre de l'empresa sota monitoratge continu després d'un resultat Shareholders o UBO: un canvi d'estat, de càrrecs, de titularitat o d'adreça torna la sessió a revisió i dispara un webhook. Només està disponible on el proveïdor de registre ofereix monitoratge. USD 2.00 per empresa i any, cancel·lable en qualsevol moment. Desactivat per defecte. |
| `kyb_vat_invalid_action` | action | Acció quan el número d'IVA de l'empresa no supera la validació VIES de la UE. Per defecte és `REVIEW`. |
| `kyb_vat_unverified_action` | action | Acció quan el número d'IVA no s'ha pogut validar perquè VIES no estava disponible. Per defecte és `NO_ACTION`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

`kyb_registry_fields_config` associa cada clau de camp configurable amb `{"enabled": bool, "required": bool}`. `enabled: false` amaga el camp, `enabled: true, required: false` el mostra com a opcional, i `enabled: true, required: true` el fa obligatori en enviar. `company_name`, `country_code` i `region` sempre es mostren i són obligatoris, i no es poden configurar. Quan l'objecte s'omet, és `null` o és `{}`, s'aplica el valor per defecte: només `incorporation_date` és obligatori i la resta de camps són opcionals.

```json theme={null}
{
  "kyb_registry_fields_config": {
    "registration_number": { "enabled": true, "required": true },
    "incorporation_date": { "enabled": true, "required": true },
    "vat_number": { "enabled": true, "required": false },
    "control_scheme": { "enabled": false, "required": false }
  }
}
```

Claus de camp configurables: `registration_number`, `incorporation_date`, `legal_address`, `vat_number`, `alternative_names`, `tax_number`, `company_type`, `legal_entity_identifier`, `location_of_registration`, `nature_of_business`, `registered_capital_amount`, `registered_capital_currency`, `website`, `email`, `phone`, `control_scheme`. Consulta [camps configurables del formulari de registre](https://docs.didit.me/ca/business-verification/company-data.md#configurable-registry-form-fields) per al comportament de l'usuari final i [validació de l'IVA i de l'identificador fiscal](https://docs.didit.me/ca/business-verification/company-data.md#validació-de-l’iva-i-del-identificador-fiscal) per saber com es comproven `vat_number` i `tax_number`.

## Documents KYB

Valor de la funcionalitat: `KYB_DOCUMENTS`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `kyb_required_document_groups` | object or array | Obligatori. Grups de documents KYB obligatoris. |
| `kyb_document_subtype_config` | object | Activació per subtipus de document i configuració d'edat. |
| `kyb_document_tampering_action` | acció restringida | Acció quan es detecta manipulació. Utilitza `DECLINE` o `REVIEW`. |
| `kyb_document_unproven_text_replacement_action` | acció | Acció quan un camp de text d'un document d'empresa s'ha esborrat i reescrit amb un altre tipus de lletra i el fitxer no conté cap prova que el contingut hagi canviat o no (`KYB_DOCUMENT_UNPROVEN_TEXT_REPLACEMENT`). |
| `kyb_document_critical_mismatch_action` | acció restringida | Acció per a discrepàncies crítiques de documents. Utilitza `DECLINE` o `REVIEW`. |
| `kyb_document_non_critical_mismatch_action` | acció | Acció per a discrepàncies no crítiques de documents. |
| `kyb_document_age_action` | acció | Acció quan no es compleixen les regles d'antiguitat del document. |
| `kyb_document_max_retry_attempts` | integer | Límit de reintents per als documents KYB. |
| `kyb_document_max_attempts_exceeded_action` | acció restringida | Acció quan se superen els intents màxims. Utilitza `DECLINE` o `REVIEW`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Persones clau KYB

Valor de la funcionalitat: `KYB_KEY_PEOPLE`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `kyb_ubo_ownership_threshold` | integer | Llindar de titularitat de les UBO, de `0` a `100`. |
| `kyb_shareholder_ownership_threshold` | integer | Llindar de titularitat dels accionistes, de `0` a `100`. No pot ser superior a `kyb_ubo_ownership_threshold`. |
| `kyb_key_people_ownership_required` | boolean | Exigeix un percentatge de participació a cada persona clau enviada. S'aplica en l'enviament i es mostra a la pàgina de verificació allotjada, que marca el camp com a obligatori. Per defecte `false`. |
| `kyb_require_ubo_kyc` | boolean | Exigeix que les UBO completin un flux de treball de verificació d'una persona. |
| `kyb_ubo_verification_workflow` | UUID | Obligatori quan `kyb_require_ubo_kyc` és `true`. Ha de fer referència a un flux de treball no KYB de la mateixa aplicació. |
| `kyb_require_officer_kyc` | boolean | Exigeix que els càrrecs directius completin una verificació d'una persona. |
| `kyb_shareholder_verification_workflow` | UUID | Flux de treball de verificació d'una persona per als accionistes. |
| `kyb_officer_verification_workflow` | UUID | Flux de treball de verificació d'una persona per als càrrecs directius. |
| `kyb_require_corporate_ubo_kyb` | boolean | Exigeix que les UBO corporatives completin el KYB. |
| `kyb_corporate_ubo_verification_workflow` | UUID | Obligatori quan `kyb_require_corporate_ubo_kyb` és `true`. Ha de fer referència a un flux de treball KYB de la mateixa aplicació. |
| `kyb_reject_if_ubo_rejected` | boolean | Rebutja l'empresa quan una verificació de UBO obligatòria és rebutjada. |
| `kyb_wait_for_all_ubos` | boolean | Espera totes les verificacions de UBO obligatòries abans de decidir la sessió KYB. |
| `kyb_role_config` | object or array | Configuració per rol. Cada rol KYC obligatori ha d'incloure un `verification_workflow`. |
| `kyb_reuse_verified_individuals` | boolean | Reutilitza les persones ja verificades quan sigui possible. |
| `kyb_notify_parties_by_email` | boolean | Envia notificacions per correu electrònic a les persones clau convidades. |
| `kyb_key_people_company_fields` | object | Quins detalls de l'empresa es recullen per a una persona clau CORPORATIVA. Té la mateixa estructura de llista de descriptors i les mateixes regles que `kyb_key_people_person_fields`. Format: `[{"key": "<field key>", "label": "<label>", "type": "text"\|"number"\|"date"\|"phone"\|"email", "required": true\|false, "custom": true\|false}]`. |
| `kyb_key_people_document_mismatch_action` | acció | Decisió quan el document d'una persona clau no coincideix amb els detalls declarats per a ella. |
| `kyb_key_people_person_fields` | object | Quins detalls personals es recullen per a una persona clau individual, com a LLISTA ORDENADA de descriptors de camp (no un mapa). `key` és obligatori i no pot estar buit; `type` ha de ser un dels valors text, number, date, phone o email; `custom` marca un camp afegit pel client i no un dels integrats. Format: `[{"key": "<field key>", "label": "<label>", "type": "text"\|"number"\|"date"\|"phone"\|"email", "required": true\|false, "custom": true\|false}]`. |
| `kyb_key_people_prefill_from_registry` | boolean | Omple prèviament la llista de persones clau amb el resultat del registre mercantil, perquè el client confirmi i corregeixi en lloc d'escriure tots els càrrecs directius i accionistes. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. |

## Document AI

Valor de funcionalitat: `DOCUMENT_AI`.

Sol·licita a l'usuari un o més documents i extreu els camps amb nom que tu defineixes amb un model de visió. Cada camp configurat esdevé un valor `document_ai.<key>` que pots utilitzar per fer bifurcacions, i el resultat del pas és `document_ai.status`.

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `document_ai_documents` | array | Obligatori. Els documents que cal sol·licitar (com a màxim `3`). Cada entrada és un objecte de document (vegeu més avall). |
| `document_ai_unreadable_document_action` | acció | Acció que s'aplica quan el document no es pot llegir o no se'n pot extreure cap dada. |
| `document_ai_missing_required_fields_action` | acció | Acció que s'aplica quan no es pot extreure un camp obligatori. |
| `document_ai_document_tampering_action` | acció restringida | Acció que s'aplica quan el document presenta indicis de manipulació. Utilitza `DECLINE` o `REVIEW`. |
| `document_ai_name_mismatch_action` | acció | Acció que s'aplica quan el nom complet extret no coincideix amb la identitat verificada. Requereix un camp marcat amb `is_full_name`. |
| `document_ai_unsupported_file_action` | acció | Acció que s'aplica quan el tipus de fitxer carregat no és compatible. |
| `document_ai_max_attempts_exceeded_action` | acció restringida | Acció que s'aplica quan l'usuari supera el nombre màxim d'intents. Utilitza `DECLINE` o `REVIEW`. |
| `document_ai_name_match_score_threshold` | integer | Puntuació mínima (`0`–`100`) perquè el nom complet extret coincideixi amb la identitat verificada. Per sota d'aquest valor, s'aplica `document_ai_name_mismatch_action`. |
| `document_ai_max_retry_attempts` | integer | Límit de reintents, de `2` a `5`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. Pots orientar-les als camps `document_ai.<key>`. |

Cada entrada de `document_ai_documents` és un document:

| Camp del document | Tipus | Descripció |
| - | - | - |
| `document_key` | string | Obligatori. Identificador estable del document, únic dins del pas. |
| `title` | string | Obligatori. Títol que es mostra a l'usuari. |
| `description` | string | Obligatori. Instruccions que es mostren a l'usuari sobre què ha de pujar. |
| `title_i18n` | object | Opcional. Codi de configuració regional amb el títol traduït (p. ex. `{ "es": "Comprobante de fondos" }`). |
| `description_i18n` | object | Opcional. Codi de configuració regional amb la descripció traduïda. |
| `fields` | array | Obligatori. Els camps que cal extreure (com a mínim un). Les claus dels camps han de ser úniques dins del document. |

Cada entrada de `fields` d'un document és un camp:

| Camp | Tipus | Descripció |
| - | - | - |
| `key` | string | Obligatori. Clau JSON estable per al valor extret, única dins del document. Fes-ne una bifurcació com a `document_ai.<key>`. |
| `name` | string | Obligatori. Etiqueta del camp comprensible per a les persones. |
| `name_i18n` | object | Opcional. Codi de configuració regional amb el nom del camp traduït. |
| `instruction` | string | Opcional. Instrucció que indica al model exactament què ha d'extreure per a aquest camp. |
| `type` | string | Tipus del camp: `text`, `number` o `date`. Per defecte és `text`. |
| `required` | boolean | Si el camp ha d'estar present. Per defecte és `false`. Quan és `true` i el valor falta, s'aplica `document_ai_missing_required_fields_action`. |
| `is_full_name` | boolean | Opcional, per defecte `false`. Marca el camp el valor del qual és el nom complet del titular del document, que es compara amb la identitat verificada (el nom obtingut en la verificació d'identitat, o les dades esperades de la sessió). **Com a màxim un camp per document** pot tenir-lo a `true`, i **no és obligatori**: un document pot no marcar-ne cap, cosa que fa que no es faci cap comparació de noms per a aquell document. Només els camps de tipus `text` poden indicar el nom complet. |

Exemple:

```json theme={null}
{
  "feature": "DOCUMENT_AI",
  "config": {
    "document_ai_documents": [
      {
        "document_key": "proof_of_funds",
        "title": "Proof of Funds",
        "description": "Upload a recent bank statement.",
        "title_i18n": { "es": "Comprobante de fondos" },
        "fields": [
          {
            "key": "account_holder",
            "name": "Account holder",
            "instruction": "The full name of the account holder as printed on the statement.",
            "type": "text",
            "required": true,
            "is_full_name": true
          },
          {
            "key": "closing_balance",
            "name": "Closing balance",
            "instruction": "The closing balance amount.",
            "type": "number",
            "required": false
          }
        ]
      }
    ],
    "document_ai_missing_required_fields_action": "REVIEW",
    "document_ai_name_mismatch_action": "REVIEW",
    "document_ai_name_match_score_threshold": 80
  }
}
```

## E-signature

Valor de la funcionalitat: `SIGNATURE`.

Permet que la persona verificada, o les persones clau d'una empresa, signin documents, en el nivell Simple (per defecte) o Advanced (AES). Col·loca-la després dels passos que verifiquen el signant: Verificació d'identitat, i Verificació de correu electrònic o de telèfon per al codi. Consulta [Signatura electrònica](https://docs.didit.me/ca/core-technology/electronic-signature/overview.md).

| Camp de configuració | Tipus | Descripció |
| - | - | - |
| `signature_documents` | array | Els documents pujats a aquest flux de treball a la consola, en l'ordre en què els veu el signant, com a `[{"uuid", "title", "file_name", "pages", "size_bytes"}]`. Només es llegeixen els valors `uuid` i el seu ordre; la resta prové dels fitxers emmagatzemats. Fins a 20 documents i 50 MB en total. Per defecte `[]`. |
| `signature_documents_source` | string | D'on provenen els documents: `workflow` (per defecte), `session` (`sign.documents` a [crear sessió](https://docs.didit.me/ca/sessions-api/create-session.md#documents-de-signatura-electrònica)) o `both` (primer els documents del flux de treball). |
| `signature_require_read_to_end` | boolean | El signant ha d'arribar al final de cada document sense camps abans d'acceptar-lo. Per defecte `true`. |
| `signature_consent_per_document` | boolean | El signant accepta cada document sense camps per separat. Per als documents amb camps, els camps guiats i el consentiment final el substitueixen. Per defecte `true`. |
| `signature_signer` | string | Qui signa: `verified_person` (per defecte, KYC), o per a KYB `legal_representative` (persones clau amb el rol `representative` o `authorized_signatory`) o `key_people` (cada persona física clau amb una sessió KYC). |
| `signature_level` | string | `simple` (per defecte): sense verificació d'identitat, correu electrònic, telèfon ni codi; el signant escriu el seu nom i signa des de l'enllaç de la sessió. `aes`: requereix una verificació d'identitat aprovada i un correu electrònic o telèfon verificat, i un codi d'un sol ús. `simple` es rebutja per als signants `legal_representative` i `key_people` amb `signature_simple_requires_verified_person`. Mentre `signature_availability.aes` sigui `false` al flux de treball, en desar un nou pas `aes` es retorna `400` amb `aes_not_available`. `qes` arribarà aviat: en desar-lo es retorna `400` amb `qes_not_available`. |
| `signature_format` | string | `pades` (per defecte). `xades` i `cades` es rebutgen per a AES amb `signature_format_not_supported`. |
| `signature_otp_channel` | string | On s'envia el codi d'un sol ús: `email` (per defecte) o `sms`. S'envia només a un contacte verificat anteriorment en la sessió. |
| `signature_email_signed_copy` | boolean | Envia al signant per correu electrònic una còpia dels documents signats. Requereix un correu electrònic verificat. Per defecte `true`. |
| `signature_evidence_page` | boolean | Afegeix la pàgina d'evidències a cada PDF signat. Per defecte `true`. |
| `signature_link_validity_days` | integer | Durant quant de temps és vàlid l'enllaç de signatura, de `1` a `30` dies des de la creació de la sessió. Per defecte `7`. |
| `signature_declined_action` | action | Decisió quan el signant rebutja la signatura. No es cobra res. Per defecte `REVIEW`. |
| `signature_otp_failed_action` | action | Decisió després de 3 codis incorrectes o més de 5 codis sol·licitats. Per defecte `DECLINE`. |
| `signature_name_mismatch_action` | action | Decisió quan el nom declarat d'una persona clau no coincideix amb el seu nom verificat. Per defecte `DECLINE`. |
| `signature_identity_not_verified_action` | action | Decisió quan el signant no té cap evidència d'identitat aprovada. Per defecte `DECLINE`. |
| `signature_document_changed_action` | action | Decisió quan un document ja no coincideix amb el SHA-256 registrat quan es va mostrar. Per defecte `DECLINE`. |
| `status_rules` | array | Regles d'estat personalitzades opcionals. Pots fer-les servir amb `signature.status`, `signature.level` i `signature.format`. |

Els camps d'un document del flux de treball es col·loquen a l'editor de plantilles de la consola. Per als documents de la sessió, envia'ls a `sign.documents[].fields`, i envia els valors dels camps `api.<key>` a `sign.field_values`. Consulta [Crear sessió](https://docs.didit.me/ca/sessions-api/create-session.md#documents-de-signatura-electrònica).

Exemple, per als documents enviats amb cada sessió:

```json theme={null}
{
  "feature": "SIGNATURE",
  "config": {
    "signature_documents_source": "session",
    "signature_signer": "verified_person",
    "signature_level": "aes",
    "signature_otp_channel": "email",
    "signature_link_validity_days": 14,
    "signature_declined_action": "REVIEW"
  }
}
```


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