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

# Verificação de localização: geofencing e distância de IP

> Confirme a localização com a Didit: posição do dispositivo, geofencing, distância de IP e deteção de spoofing. $0.05 por verificação.

O passo de verificação de localização da Didit confirma onde uma pessoa se encontra enquanto realiza a verificação, através da leitura única da posição do dispositivo (navegador ou SDK nativo) ou da localização por IP da ligação, e comparando-a com áreas permitidas e bloqueadas, a localização por IP e a morada nos seus documentos.
Nos fluxos e na API, trata-se da funcionalidade `GEOLOCATION`, as suas definições são as chaves `geolocation_*` e o seu resultado é `geolocation_checks[]` na decisão da sessão.

## Quando utilizar

* Detém uma licença apenas para determinadas jurisdições (jogos de azar, corretagem, crédito) e precisa de comprovar que a pessoa se encontrava dentro de uma delas quando submeteu o pedido.
* Precisa de manter as pessoas fora de locais bloqueados, como uma região sob sanções ou um estado onde não presta serviço.
* Pretende mais um sinal de fraude: uma posição do dispositivo distante da localização por IP ou da morada no documento de identificação, uma posição simulada, uma VPN ou um emulador.
* Não necessita das deslocações ou do histórico da pessoa, apenas de uma leitura obtida durante a sessão.

## Como funciona

**1. Aviso e permissão**

A pessoa vê o motivo pelo qual a sua localização é necessária e que esta é lida apenas uma vez, para esta verificação.
O seu navegador ou telemóvel solicita então a permissão.
A Didit regista o aviso que a pessoa aceitou (versão, idioma e hora) como `consent` no resultado.

**2. Uma posição por tentativa**

O cliente mantém a melhor leitura até que esta seja suficientemente precisa ou que o tempo limite por tentativa (por predefinição, 20 segundos) expire.
Cada tentativa inclui um desafio de utilização única válido por 5 minutos e associado à sessão, para que uma submissão capturada não possa ser reproduzida.

**3. Verificações**

A Didit avalia a precisão, a atualidade, permissões de localização aproximada, sinais de spoofing, áreas, a distância até à localização por IP e à morada do documento, deteções de VPN, proxy, Tor e emulador, bem como as verificações anteriores da pessoa.

**4. Resultado**

Cada constatação gera um [aviso](https://docs.didit.me/pt/core-technology/location-verification/warnings-location-verification.md) cuja ação configurada (`NO_ACTION`, `REVIEW` ou `DECLINE`) define o estado do passo.
A ação mais forte prevalece.

## Fontes de posição

Escolhe a proveniência da posição com `geolocation_position_source`.

| Valor | O que acontece |
| - | - |
| `device_and_ip` | A posição do dispositivo é comparada com a localização por IP da ligação a partir da qual foi enviada. |
| `device_only` | Apenas a posição do dispositivo. Nunca é comparada com a localização por IP. |
| `ip_only` | Nunca é solicitada qualquer permissão à pessoa. Em vez disso, é avaliada a localização por IP da ligação (nível de cidade, raio de 50 km), sem regras de precisão, atualidade ou permissão de localização aproximada. |
| não definido | É solicitada a posição ao dispositivo, sendo esta comparada com a localização por IP observada no passo de Análise de dispositivo e IP da sessão. Um nó que atue sobre uma deteção de VPN, proxy ou Tor consulta a localização por IP da ligação e comporta-se como `device_and_ip`. |

Num nó que consulta o dispositivo, uma tentativa sem posição é avaliada como uma recusa ou falha, conforme o caso: a localização por IP nunca a substitui.

## Valores predefinidos e limites de configuração

Todas as chaves são opcionais.
A lista completa encontra-se na [referência das configurações das funcionalidades dos fluxos](https://docs.didit.me/pt/management-api/workflows/feature-configs.md#verificação-de-localização).

| Definição | Predefinição | Limites |
| - | - | - |
| `geolocation_max_accuracy_radius_m` | 250 m | 10 a 50,000 m |
| `geolocation_max_age_seconds` | 120 s | 5 a 3,600 s |
| `geolocation_timeout_seconds` | 20 s | 5 a 120 s |
| `geolocation_max_attempts` | 3 | 1 a 5 |
| `geolocation_accuracy_mode` | `precise` | `precise` ou `approximate_allowed` |
| `geolocation_low_accuracy_behavior` | `ask_again` | `ask_again` ou `fail` |
| `geolocation_allow_qr_handoff` | on | on ou off |
| `geolocation_allow_skip` | off | on ou off |
| `geolocation_refusal_path` | `retry_then_handoff` | `retry_then_handoff`, `continue_without_location`, `end_session` |
| `is_geolocation_geofencing_enabled` | off | on ou off |
| `geolocation_ip_distance_km` | 200 km | 0 ou mais, `null` desativa a comparação |
| `geolocation_document_distance_km` | off | 0 ou mais |
| `geolocation_travel_tolerance_enabled` | off | área habitual de 10 a 500 km (predefinição 100), 1 a 90 dias (predefinição 14) |
| `geolocation_consecutive_mismatch_count` | off | 2 a 10 |

### Predefinições

`geolocation_preset` define o valor predefinido de todas as ações que deixar por configurar.
`licensing` recusa uma posição fora das áreas permitidas, dentro de uma área bloqueada, através de VPN ou Tor, ou num emulador, e envia para revisão quando é detetado um proxy.
`fraud_screening` aplica as mesmas constatações, mas envia para revisão tudo o que `licensing` recusaria.
Uma ação que configure explicitamente prevalece sempre.

## Geofencing

Ative `is_geolocation_geofencing_enabled` e liste as `geolocation_areas`.
Uma área é um país inteiro, regiões (ISO 3166-2) de um país, um círculo (1 a 500 km) ou um polígono (3 a 200 pontos).
Apenas uma posição dentro de uma área permitida é aprovada, e uma área bloqueada prevalece sempre sobre uma permitida.
Uma lista suporta até 50 áreas e requer pelo menos uma área permitida.

A Didit avalia todo o círculo de precisão da posição, não apenas o seu centro:

* Um círculo totalmente fora de todas as áreas permitidas é `LOCATION_OUTSIDE_GEOFENCE`.
* Um círculo que cruze uma fronteira que determine a resposta é `LOCATION_GEOFENCE_UNDETERMINED`, nunca «fora».
* Um círculo totalmente dentro de uma área bloqueada é `LOCATION_IN_BLOCKED_AREA`, sendo gerado em conjunto com o veredito da área permitida.

Um país ou região termina onde começa outro território terrestre, não na sua linha de costa.
É mostrado à pessoa onde o serviço está disponível, mas nunca quais as áreas que estão bloqueadas.
As regras de área também funcionam num passo `ip_only`, avaliadas a partir da localização por IP.
A definição anterior `geolocation_geofencing_by_country` continua a funcionar, mas não pode ser combinada com `geolocation_areas`.

## Verificações de distância

| Verificação | Medida entre | Definição |
| - | - | - |
| Distância do IP | A posição do dispositivo e a localização do IP, após subtrair ambos os raios de incerteza (0 significa que se sobrepõem). | `geolocation_ip_distance_km`, `geolocation_ip_distance_action` |
| Distância do documento | A posição e uma morada, geocodificada de forma aproximada, pelo que é um sinal fraco. | `geolocation_document_distance_km`, `geolocation_document_distance_basis`, `geolocation_document_distance_action` |
| Sequência | As verificações anteriores da pessoa (mesmo `vendor_data`) que estiveram fora de uma área permitida, numa área bloqueada ou demasiado longe da morada. | `geolocation_consecutive_mismatch_count` |

O parâmetro `geolocation_document_distance_basis` escolhe a morada: `document` (o documento de identidade e, depois, o comprovativo de morada), `proof_of_address` ou `declared` (`expected_details.address` da criação da sessão).
Com `geolocation_travel_tolerance_enabled`, uma pessoa vista perto da sua morada nos últimos `geolocation_travel_max_days` dias não é sinalizada por estar longe dela agora.
A tolerância de viagem nunca isenta uma VPN, uma posição com spoofing, uma área bloqueada ou uma posição fora das áreas permitidas.

## Sinais de spoofing e integridade

* **Fornecedores de localização simulada**: o Android e o iOS comunicam quando uma posição é simulada em vez de medida.
* **Atestação do dispositivo**: os SDKs nativos podem anexar uma atestação do dispositivo. Uma atestação com falha resulta sempre em recusa. Uma atestação em falta é registada e, por predefinição, não desencadeia qualquer ação. Os navegadores não conseguem atestar e são registados como `unsupported`, não como uma falha.
* **VPN, proxy e Tor**: detetados na ligação que partilhou a localização. Quando a sua ação para um deles não for `NO_ACTION`, é pedido à pessoa que o desative e tente novamente enquanto restarem tentativas.
* **Emuladores**: comunicados apenas por aplicações nativas. Um emulador termina o passo nessa tentativa, pois nenhuma nova tentativa altera o dispositivo.
* **Reprodução**: um desafio apresentado noutra sessão resulta sempre em recusa.

## Resultados

A tentativa aceite do passo tem um `outcome`:

| Resultado | Significado |
| - | - |
| `verified` | Uma posição que cumpriu todas as regras. |
| `low_accuracy` / `accuracy_undetermined` | O raio era maior do que o limite, ou o dispositivo não comunicou nenhum. |
| `stale` | A posição era mais antiga do que `geolocation_max_age_seconds`. |
| `approximate` | Foi concedida apenas uma posição aproximada, quando era necessária uma precisa. |
| `denied` / `restricted` | A pessoa recusou, ou o sistema bloqueia a localização. |
| `unavailable` / `timeout` | O dispositivo não encontrou qualquer posição, ou não o fez a tempo. |
| `mock_detected` | O sistema comunicou a posição como simulada. |
| `outside_geofence` / `in_blocked_area` | A posição está fora de todas as áreas permitidas, ou dentro de uma área bloqueada. |
| `anonymizer_detected` | Foi detetada uma VPN, proxy, nó de saída Tor ou emulador, e o seu fluxo age em conformidade. |
| `skipped` | A pessoa continuou sem partilhar. |
| `replay_rejected` | O desafio pertencia a outra sessão. |
| `unsupported_client` | A aplicação ou o SDK são demasiado antigos para apresentar o passo. |

Enquanto restarem tentativas, um resultado de raio amplo, desatualizado, aproximado, recusado ou relacionado com uma área solicita à pessoa que tente novamente, e apenas a última tentativa gera avisos.
Uma posição simulada, ou um emulador sobre o qual o seu fluxo aja, termina o passo na tentativa que o comunicou.

## Experiência da pessoa

### Consentimento e permissão

Nada é lido antes de a pessoa aceitar o aviso e responder ao pedido do sistema.
O aviso indica que a localização é lida uma única vez, para esta verificação, e não constitui um registo dos seus movimentos.
Uma pessoa que recuse é tratada de acordo com `geolocation_refusal_path`:

* `retry_then_handoff` pergunta novamente enquanto restarem tentativas e, em seguida, oferece a opção de continuar num telemóvel.
* `continue_without_location` oferece a opção de prosseguir sem localização e regista a recusa como o resultado.
* `end_session` termina o passo e a sessão na primeira recusa. Exige que `geolocation_permission_denied_action` esteja definido como `REVIEW` ou `DECLINE`, e a sessão nunca é aprovada.

Com o parâmetro `geolocation_allow_skip` ativado, a pessoa pode continuar sem localização a qualquer momento, e o passo é avaliado por `geolocation_unavailable_action`.

### Navegador

O fluxo alojado solicita a posição ao navegador e apresenta ajuda passo a passo para o Chrome e o Safari quando a localização está desativada para o site.
Um navegador não consegue distinguir uma concessão precisa de uma aproximada, pelo que os resultados web nunca geram `LOCATION_APPROXIMATE_ONLY`, e nunca comunica um fornecedor de localização simulada, um emulador ou uma atestação.
Um computador não pode partilhar uma posição precisa, pelo que o fluxo disponibiliza um código QR que continua a mesma verificação no telemóvel da pessoa (`geolocation_allow_qr_handoff`, ativado por defeito), e o computador avança autonomamente quando o telemóvel terminar.
Quando incorporar o fluxo num iframe, inclua `geolocation` no atributo `allow`; consulte o [iframe em contexto](https://docs.didit.me/pt/integration/web-sdks/incontext-iframe.md).
Uma página que bloqueie a política de permissões de geolocalização é tratada como uma decisão do site, e não como uma recusa da pessoa.

### SDKs nativos

Os SDKs para iOS e Android consultam o sistema operativo e podem anexar a atestação do dispositivo e sinalizadores de localização simulada.
No iOS, adicione `NSLocationWhenInUseUsageDescription` ao `Info.plist`, e no Android o SDK declara `ACCESS_FINE_LOCATION` e `ACCESS_COARSE_LOCATION` e faz o pedido em tempo de execução apenas quando um fluxo inclui este passo.
Consulte os [SDKs nativos](https://docs.didit.me/pt/integration/native-sdks/overview.md).
Uma concessão aproximada no iOS ou Android gera `LOCATION_APPROXIMATE_ONLY`, a menos que `geolocation_accuracy_mode` seja `approximate_allowed`.
Uma aplicação ou versão do SDK anterior a este passo encerra o passo com `unsupported_client` em vez de deixar a sessão bloqueada.

## O que a decisão devolve

A [decisão da sessão](https://docs.didit.me/pt/sessions-api/retrieve-session.md) e o webhook `status.updated` contêm duas listas:

* `geolocation_checks[]`: um item por passo de Localização, contendo a tentativa aceite desse passo, com os seus `warnings`.
* `geolocation_attempts[]`: todas as tentativas de cada passo de Localização, da mais antiga para a mais recente.

Consulte o [relatório de verificação de localização](https://docs.didit.me/pt/core-technology/location-verification/report-location-verification.md) para conhecer todos os campos.
As coordenadas, precisão, cidade e país são dados pessoais do utilizador final, pelo que os atributos de resposta de um fluxo podem restringir quais os campos de `geolocation_checks` devolvidos pela sua decisão.

## Preços

A verificação de localização custa **\$0.05 por verificação** e não faz parte do plano gratuito.
A Didit cobra uma vez por cada passo de Localização numa sessão, qualquer que seja o seu resultado, dado que a verificação foi executada e devolveu uma resposta.
As novas tentativas dentro do mesmo passo são gratuitas.
Um novo envio que conclua o passo novamente é cobrado de novo.

## Sandbox

As sessões em sandbox executam o mesmo passo no mesmo fluxo alojado, e o dispositivo ou navegador continua a comunicar uma posição real.
As sessões em sandbox nunca contactam o serviço de pesquisa de IP, pelo que a comparação de IP utiliza apenas o que a sessão já contém.
A utilização é registada com um preço de 0, pelo que uma sessão em sandbox nunca é cobrada.
Não existem entradas mágicas para este passo.

## Relacionado

* [Relatório de verificação de localização](https://docs.didit.me/pt/core-technology/location-verification/report-location-verification.md) - todos os campos de `geolocation_checks[]` e `geolocation_attempts[]`.
* [Avisos de verificação de localização](https://docs.didit.me/pt/core-technology/location-verification/warnings-location-verification.md) - todos os códigos `LOCATION_*` e a respetiva ação.
* [Configurações de funcionalidades do fluxo](https://docs.didit.me/pt/management-api/workflows/feature-configs.md#verificação-de-localização) - todas as chaves `geolocation_*`.
* [Análise de dispositivo e IP](https://docs.didit.me/pt/core-technology/ip-analysis/overview.md) - geolocalização por IP e verificações de VPN para a sessão.


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