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

# Códigos de aviso de risco de dispositivo e IP

> Consulte os códigos de aviso da Análise de dispositivo e IP da Didit: VPN/Tor, listas de bloqueio, IPs duplicados e discrepâncias de localização.

## Visão geral

A Análise de dispositivo e IP emite etiquetas de aviso em `ip_analyses[].warnings[]` sempre que deteta comportamentos suspeitos de dispositivo, rede ou localização. Nove etiquetas têm uma ação configurável (Recusar / Rever / Nenhuma ação) por nó de fluxo; as duas etiquetas de lista de bloqueio forçam sempre `Declined`, e as duas etiquetas de lista de permissões são sempre informativas. O `log_type` de cada aviso reflete a ação aplicada: `error` (Recusar), `warning` (Rever) ou `information` (Nenhuma ação). Cada risco é acionado no máximo uma vez por sessão.

Todos os riscos abaixo são verificados em relação ao pipeline de decisão em tempo real; os avisos contêm a etiqueta de funcionalidade `LOCATION` e a estrutura padrão do [objeto de aviso](https://docs.didit.me/pt/reference/data-models.md#objeto-de-aviso).

Os avisos de impressão digital do dispositivo estão intencionalmente divididos em sinais exatos e recuperados:

* `DUPLICATED_DEVICE_FINGERPRINT` significa que a mesma identidade determinística de dispositivo (`match_source` `persistent_id` ou `legacy_fp`) foi reutilizada entre sessões com valores de `vendor_data` diferentes.
* `DEVICE_RECOVERED_HIGH_CONFIDENCE` significa que a recuperação da impressão digital v2 associou a sessão a um dispositivo visto anteriormente **após** o ID persistente ter mudado (armazenamento eliminado, modo incógnito, reinstalação da aplicação). O aviso só surge quando a correspondência ultrapassa o limiar de similaridade de alta confiança e os controlos rígidos.

![Exemplo de aviso da Análise de dispositivo e IP da Didit com alertas de dispositivo, VPN, proxy e discrepância de localização](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/ip-analysis-warning-example.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=370f87af45a6138ebd7454abe9131665)

## Avisos gerados

| Risco | Causa | `log_type` | Afeta o estado | Mitigação recomendada |
| - | - | - | - | - |
| `PRIVATE_NETWORK_DETECTED` | `is_vpn_or_tor` era `true` — a sessão foi aberta através de VPN, proxy ou nó de saída Tor. `additional_data` é `null`. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Decida se a sua tolerância ao risco permite tráfego mascarado. Se o aceitar, deixe em No action. |
| `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | O país, em formato ISO, do documento de identificação difere do país determinado a partir do endereço IP. `additional_data` inclui ambos os códigos ISO-3: `document_country_code`, `ip_country_code`. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Reveja quando o utilizador viajar legitimamente. Recuse quando associado a sinais de VPN ou de dispositivo duplicado. |
| `EXPECTED_IP_ADDRESS_MISMATCH` | A sessão foi criada com um endereço IP esperado e o IP em tempo real difere. `additional_data` inclui `expected_ip_address` e `actual_ip_address`. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Utilize quando fixar previamente o IP na criação da sessão. Recuse a sessão ou reforce a autenticação em caso de divergência. |
| `IP_ADDRESS_IN_BLOCKLIST` | O endereço IP da sessão corresponde a uma entrada na lista de bloqueio de IP da aplicação. `additional_data`: `ip_address`. | sempre `error` | Força `Declined`. | Rejeite a sessão. Audite a origem da lista de bloqueio para despistar falsos positivos se necessário. |
| `DEVICE_FINGERPRINT_IN_BLOCKLIST` | A impressão digital do dispositivo da sessão corresponde a uma entrada na lista de bloqueio de dispositivos. `additional_data`: `device_fingerprint`. | sempre `error` | Força `Declined`. | Rejeite a sessão. |
| `IP_ADDRESS_IN_ALLOWLIST` | O IP da sessão teve correspondências duplicadas, mas consta da lista de permissões de IP da aplicação, pelo que o aviso de IP duplicado foi ignorado. `additional_data`: `ip_address`. | sempre `information` | Nenhum. | Utilize para NATs empresariais fidedignos, redes de QA ou pontos de acesso partilhados conhecidos. |
| `DEVICE_FINGERPRINT_IN_ALLOWLIST` | A impressão digital do dispositivo da sessão teve correspondências determinísticas duplicadas, mas consta da lista de permissões de dispositivos, pelo que o aviso de dispositivo duplicado foi ignorado. `additional_data`: `device_fingerprint`. | sempre `information` | Nenhum. | Utilize apenas para dispositivos partilhados fidedignos. As listas de bloqueio continuam a ter prioridade. |
| `DUPLICATED_IP_ADDRESS` | O mesmo IP foi utilizado noutra sessão com um `vendor_data` diferente. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`. Ignorado quando o IP está na lista de permissões. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Comum em NAT empresarial ou partilhado. Associe a outros sinais (dispositivo duplicado, divergência de país) antes de recusar. |
| `DUPLICATED_DEVICE_FINGERPRINT` | A mesma identidade determinística de dispositivo foi reutilizada em várias sessões com diferentes `vendor_data`. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`persistent_id` ou `legacy_fp`). Ignorado quando a impressão digital está na lista de permissões. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Forte indício de abuso de múltiplas contas. Reveja ou recuse consoante a tolerância à fraude. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | O modelo v2 de recuperação de dispositivo associou a sessão a um dispositivo visto anteriormente com elevada confiança, mesmo após a alteração do ID persistente. `additional_data`: `duplicated_session_id`, `duplicated_session_number`, `api_service`, `match_source` (`recovered_high`), `recovery_similarity`, `recovery_match_device_uuid`. Não é suprimido pela lista de permissões de dispositivos. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Comece com Review, meça a sua taxa de falsos positivos e, em seguida, torne a ação mais rigorosa. Forte indício de tentativas de reposição de armazenamento ou navegação anónima. |
| `DEVICE_LINKED_TO_LIVENESS_ATTACK` | O mesmo dispositivo (correspondido pelo seu ID de dispositivo persistente) foi utilizado numa sessão anterior de outro utilizador cuja captura de prova de vida foi considerada um ataque. Um dispositivo já utilizado para atacar a verificação de prova de vida é um forte indicador de que esta captura é realizada pelo mesmo atacante. `additional_data`: `liveness_attack_session_id`, `liveness_attack_session_number`, `liveness_attack_sessions_count`, `match_source` (`persistent_id`). | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Comece com Review e meça a sua taxa de falsos positivos antes de tornar a ação mais rigorosa para Decline. |
| `DEVICE_MODEL_INCONSISTENT` | O mesmo dispositivo (correspondido pelo seu ID de dispositivo persistente) foi comunicado como um modelo de dispositivo diferente numa sessão anterior. Um dispositivo físico não muda de modelo, pelo que o modelo comunicado foi provavelmente falsificado ou o identificador de dispositivo foi copiado para outro dispositivo. As cadeias de caracteres de modelos genéricos nunca são comparadas. `additional_data`: `device_model`, `earlier_device_model`, `earlier_session_id`, `earlier_session_number`, `match_source`. | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: No action). | Compare os dois modelos comunicados e reveja a sessão anterior antes de agir. |
| `IP_LOCATION_NOT_ALLOWED` | A delimitação geográfica por IP está ativada e o IP da sessão está localizado num país ou estado/região marcado como não permitido. `additional_data`: `ip_country_code` (ISO-3), `ip_country`, `ip_state`, `restricted_by` (`country` ou `state`). | reflete a ação configurada | Configurável: Decline / Review / No action (predefinição: Decline). | Utilize para aplicar restrições jurisdicionais. Combine com `vpn_detection_action` para que o tráfego mascarado não consiga contornar o bloqueio geográfico. |

Quando o dispositivo recuperado ainda não tem sessões associadas elegíveis (pelo que nada é incluído em `matches[]`), `DEVICE_RECOVERED_HIGH_CONFIDENCE` continua a ser acionado com um formato alternativo de `additional_data`: `recovery_match_device_uuid`, `recovery_match_similarity`, `recovery_match_band`, `recovery_gate_reason`.

O `IP_LOCATION_NOT_ALLOWED` é acionado quando a delimitação geográfica por IP está ativada (`is_ip_geofencing_enabled`) e o IP da sessão está localizado num país ou estado/região marcado como não permitido em `ip_geofencing_by_country`. `additional_data` inclui `ip_country_code` (ISO-3), `ip_country`, `ip_state` e `restricted_by` (`country` ou `state`). As entradas de estado/região sobrepõem-se ao indicador de país e são comparadas de forma insensível a maiúsculas e minúsculas com o nome da região do fornecedor de IP (por exemplo, `"California"`); os países não listados na configuração são permitidos.

## Integridade do dispositivo e do runtime

Sinais reportados pelos SDKs nativos e pelo cliente web que descrevem o estado do dispositivo no qual a verificação foi executada. Existem para detetar ataques de injeção: um atacante capaz de obter acesso root a um dispositivo ou de intercetar o processo da aplicação (hooking) pode substituir o feed da câmara antes de este chegar às verificações biométricas.

Cada um destes controlos é configurável por fluxo e tem como predefinição **sem ação**, pelo que ativar a funcionalidade não altera quaisquer decisões até que opte por fazê-lo.

| Risco | Causa | Chave de configuração | Predefinição |
| - | - | - | - |
| `DEVICE_APP_TAMPERED` | A atestação da plataforma não conseguiu verificar se o pedido teve origem numa compilação genuína e não modificada da aplicação num dispositivo genuíno. | `device_app_tampered_action` | `NO_ACTION` |
| `DEVICE_RUNTIME_HOOKING_DETECTED` | Foi detetada uma framework de instrumentação ou hooking em runtime (Frida, Xposed, LSPosed, Substrate) no processo da aplicação. | `device_hooking_action` | `NO_ACTION` |
| `DEVICE_ROOTED_OR_JAILBROKEN` | O dispositivo apresenta indicadores de root ou jailbreak, que removem as proteções do sistema operativo que evitam a interceção da câmara. | `device_rooted_action` | `NO_ACTION` |
| `DEVICE_EMULATOR_DETECTED` | A sessão teve origem num emulador ou simulador em vez de num dispositivo físico. | `device_emulator_action` | `NO_ACTION` |
| `DEVICE_DEBUGGER_ATTACHED` | Foi associado um depurador ou rastreador de processos à aplicação durante a verificação. | `device_debugger_action` | `NO_ACTION` |
| `AUTOMATION_FRAMEWORK_DETECTED` | A sessão foi controlada por uma framework de automação de navegadores ou por um navegador sem interface em vez de ser controlada por uma pessoa. | `automation_detected_action` | `NO_ACTION` |
| `DEVICE_INTEGRITY_SIGNALS_MISSING` | O cliente indicou uma versão do SDK com suporte para relatórios de integridade, mas não foram recebidos sinais de integridade — o que pode indicar que os sinais foram removidos em trânsito. | `device_integrity_missing_action` | `NO_ACTION` |

> [!NOTE]
>
> Cada sonda opera em regime de melhor esforço. Quando uma verificação não pode ser executada, reporta **não determinado** em vez de um resultado limpo, pelo que uma sonda com falha nunca produz um falso positivo contra um utilizador legítimo. Os sinais são reportados a partir do SDK nativo **4.4.0**; as sessões de SDKs anteriores legitimamente não enviam nada e nunca acionam `DEVICE_INTEGRITY_SIGNALS_MISSING`.

> [!WARNING]
>
> Os sinais de root e emulador são comuns entre utilizadores legítimos em dispositivos modificados mas não fraudulentos. Comece por definir estes alertas como Revisão em vez de Recusar e acompanhe a sua taxa de recusa antes de aumentar o rigor.

## Definições configuráveis

Controlos de fluxo por nó (também configuráveis globalmente nas definições de verificação da aplicação; todas as ações têm como predefinição **Sem ação**, salvo indicação em contrário):

| Definição | Determina | Predefinição |
| - | - | - |
| `vpn_detection_action` | `PRIVATE_NETWORK_DETECTED` | Sem ação |
| `ip_mismatch_action` | `COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP` | Sem ação |
| `expected_ip_mismatch_action` | `EXPECTED_IP_ADDRESS_MISMATCH` | Sem ação |
| `duplicated_ip_action` | `DUPLICATED_IP_ADDRESS` | Sem ação |
| `duplicated_device_action` | `DUPLICATED_DEVICE_FINGERPRINT` | Sem ação |
| `recovered_device_action` | `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Sem ação |
| `device_liveness_attack_history_action` | `DEVICE_LINKED_TO_LIVENESS_ATTACK` | Sem ação |
| `device_model_inconsistency_action` | `DEVICE_MODEL_INCONSISTENT` | Sem ação |
| `ip_geofencing_action` | `IP_LOCATION_NOT_ALLOWED` | Recusar |

As listas de permissões de IP e dispositivos suprimem apenas o aviso exato de IP duplicado ou de dispositivo duplicado determinístico para o valor autorizado. Não suprimem avisos de VPN/proxy, discrepância de país, discrepância de IP esperado, dispositivo recuperado ou de listas de bloqueio.

Os avisos de dispositivo recuperado são úteis para detetar redes de fraude que alternam contas e sessões no mesmo hardware, mas a Didit é conservadora por conceção — o sistema prefere não detetar alguns utilizadores duplicados a associar dispositivos não relacionados quando as evidências não são suficientemente fortes. **Implementação recomendada**: comece com Revisão, acompanhe o volume durante duas semanas e, em seguida, aumente o rigor da ação se a sua taxa de falsos positivos for baixa.

## Dispositivo duplicado vs. dispositivo recuperado

Trate os dois avisos de forma diferente — são acionados com base em evidências distintas:

| Aviso | Acionador | Significado típico | Primeira ação recomendada |
| - | - | - | - |
| `DUPLICATED_DEVICE_FINGERPRINT` | Correspondência exata da identidade persistente do dispositivo (`persistent_id`) ou da hash da impressão digital legada (`legacy_fp`). | Evidência forte de que o mesmo dispositivo surge em diferentes utilizadores. | Revisão ou Recusa, consoante a sua tolerância à fraude. |
| `DEVICE_RECOVERED_HIGH_CONFIDENCE` | Recuperação v2 de elevada confiança (`recovered_high`) após alteração do armazenamento, da sessão ou da identidade da aplicação. | Sinal forte de tentativas de navegação anónima, reposição de armazenamento ou reinstalação da aplicação. Intencionalmente separado para que possa monitorizá-lo de forma independente. | Comece por Revisão e aumente o rigor após medir a sua taxa de falsos positivos. |

## Correspondências entre sessões

Quando o mesmo endereço IP, a identidade exata do dispositivo ou um dispositivo recuperado é detetado em sessões pertencentes a **utilizadores diferentes**, o Didit regista-os como `matches[]` em `ip_analyses[]`. As sessões são agrupadas por `vendor_data`: as sessões com o mesmo `vendor_data` são tratadas como o mesmo utilizador e excluídas das correspondências. Sem `vendor_data`, cada sessão é tratada como um utilizador único e todos os potenciais duplicados são apresentados — recomendamos vivamente fornecer sempre `vendor_data` para reduzir o ruído.

Cada correspondência inclui:

* `session_id`, `session_number`, `vendor_data` e `verification_date` da sessão correspondente, além do seu `status` do ciclo de vida e `api_service` (`null` para sessões de fluxo); `source` é sempre `session`
* `match_type` — `ip_address` ou `device_fingerprint`
* `match_source` — `ip_address`, `persistent_id`, `legacy_fp` ou `recovered_high`
* `matched_value` — o IP partilhado, o identificador do dispositivo ou (para correspondências recuperadas) o UUID do dispositivo recuperado
* `confidence` (0–1, `1 - P(false positive)`) e `match_mode` (`deterministic` / `probabilistic` / `co_occurrence`)
* `device_info` — `device_brand`, `device_model`, `browser_family`, `os_family`, `platform`, `device_fingerprint`
* `location_info` — `ip_address`, `ip_country`, `ip_country_code`, `ip_state`, `ip_city`, `is_vpn_or_tor`, `is_data_center`
* Dados adicionais do dispositivo recuperado quando `match_source` é `recovered_high`: `recovery_similarity`, `tls_ja4_corroborated`, `recovery_gate_reason`

As correspondências de IP e de dispositivo estão limitadas a 5 cada (no máximo 10 entradas). Consulte a [página do relatório](https://docs.didit.me/pt/core-technology/ip-analysis/report-ip-analysis.md#semântica-de-correspondência) para o esquema completo de correspondência e o modelo de confiança.

## Exemplos

### VPN + discrepância de país (configurado para Revisão)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "PRIVATE_NETWORK_DETECTED",
      "additional_data": null,
      "log_type": "warning",
      "short_description": "Private network (VPN/Tor) detected",
      "long_description": "The system detected that the user tried to use a private network (VPN/TOR) to complete the verification process.",
      "node_id": "ip-1"
    },
    {
      "feature": "LOCATION",
      "risk": "COUNTRY_FROM_DOCUMENT_DOES_NOT_MATCH_COUNTRY_FROM_IP",
      "additional_data": { "document_country_code": "ESP", "ip_country_code": "NLD" },
      "log_type": "warning",
      "short_description": "Document country does not match IP country",
      "long_description": "The country from the document does not match the country from the IP address, suggesting a potential mismatch between the document and the user's location.",
      "node_id": "ip-1"
    }
  ]
}
```

### Ocorrência na lista de bloqueio (força a recusa)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "IP_ADDRESS_IN_BLOCKLIST",
      "additional_data": { "ip_address": "45.61.20.5" },
      "log_type": "error",
      "short_description": "IP address in blocklist",
      "long_description": "The IP address used for this session was found in the application's IP blocklist, indicating a known suspicious or forbidden origin.",
      "node_id": "ip-1"
    }
  ]
}
```

### Dispositivo recuperado com alta confiança (configurado para Revisão)

```json theme={null}
{
  "warnings": [
    {
      "feature": "LOCATION",
      "risk": "DEVICE_RECOVERED_HIGH_CONFIDENCE",
      "additional_data": {
        "duplicated_session_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "duplicated_session_number": 5101,
        "api_service": null,
        "match_source": "recovered_high",
        "recovery_similarity": 0.9874,
        "recovery_match_device_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
      },
      "log_type": "warning",
      "short_description": "Device matches a previously seen device with high confidence",
      "long_description": "A previously seen device matched this session with high confidence through v2 fuzzy fingerprint recovery after passing strict hard gates, indicating the same physical device under a fresh persistent_id.",
      "node_id": "ip-1"
    }
  ]
}
```

## Relacionado

* [Relatório de análise de dispositivo e IP](https://docs.didit.me/pt/core-technology/ip-analysis/report-ip-analysis.md) — formato completo da resposta e semântica do estado
* [Visão geral da análise de dispositivo e IP](https://docs.didit.me/pt/core-technology/ip-analysis/overview.md) — o que cada bloco mede
* [Modelos de dados — Análise de IP](https://docs.didit.me/pt/reference/data-models.md#análise-de-ip) — esquema canónico
* [Webhooks](https://docs.didit.me/pt/integration/webhooks.md) — o evento `status.updated` inclui avisos da análise de IP

### Tipos de aviso


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