# Sinais do aparelho

<https://unifokal.com/docs/modulos/device-intel>

## Sinais do aparelho

! **Ainda não está aberto para venda.** O módulo aparece na [tabela de preços](https://unifokal.com/precos) com preço e com o selo "Em breve", e o `create` de flow o recusa até a abertura. A trava não é técnica: é a base legal da coleta, que exige o teste de balanceamento documentado, transparência ao titular e um mecanismo de oposição que funcione. Enquanto isso, a coleta fica desligada no servidor. O contrato de resposta abaixo é o que o backend já emite, para você planejar a integração.

O módulo `device_intel` faz **três perguntas ao navegador do titular** durante a captura, e agrega a pior observação da sessão num veredito explicável: se o navegador está sendo controlado por um programa de automação (o sinalizador padronizado que Selenium, Playwright e Puppeteer acendem), se as funções nativas dele foram reescritas por algum script, e se um aparelho que se anuncia como celular admite não ter nenhum ponto de toque. São **três perguntas em quatro campos**: o quarto campo que o widget envia não é um sinal novo, ele registra apenas se a primeira pergunta pôde sequer ser feita naquele navegador. Você recebe os três sinais nomeados, com a cobertura da leitura declarada ao lado, e não um score fechado que você teria que aceitar sem entender.

```
// device_intel no check_details: os três sinais, nomeados
{ "module": "device_intel", "passed": true, "outcome": "approved", "score": 90,
  "data": { "device": {
      "automation": false,   // o navegador declarou estar sob controle de um programa
      "tampered": false,     // alguma função nativa amostrada foi reescrita por script
      "incoherent": false,   // user-agent de celular declarando zero ponto de toque
      "quality": "present",  // present = os três medidos; partial = só parte deles
      "measured": 3 } } }
```

**Os três campos têm três valores, não dois:** `true` significa que medimos e o sinal acusou, `false` significa que medimos e não acusou, e `null` significa que **ninguém mediu**. O terceiro valor existe porque "não medi" e "está limpo" são coisas opostas, e tratá-las como iguais seria a única forma de este módulo mentir. Quando nada foi medido, a verificação sai com `"pending"` no resumo `checks` e **o módulo não é cobrado**: você não paga por uma pergunta que não chegou a ser feita.

! **O sinal nunca recusa ninguém sozinho, e isso é estrutural.** Tudo aqui é declaração do próprio navegador, e quem controla a máquina controla a declaração: o pior desfecho possível é `review`, em qualquer combinação dos três sinais e com qualquer calibração. Só a automação declarada leva sozinha à revisão; os outros dois precisam aparecer juntos, porque função nativa reescrita é o efeito comum de uma extensão de privacidade e reprovar por isso seria punir quem se protege.

**O que este módulo não faz.** Ele **não identifica o aparelho**: as três respostas são de sim ou não e nenhuma delas distingue um celular de outro, então isso não serve para reconhecer quem volta amanhã, e nenhum identificador de aparelho sai no payload. Ele **roda inteiro no navegador do titular**, sem instalar nada no aparelho dele: os três sinais nomeados acima são o escopo completo da leitura, e é sobre eles que você recebe resposta.

**Navegador que esconde essas leituras não é suspeito.** Os navegadores modernos estão fechando essa janela de propósito, e isso é bom: o Safari passou a bloquear parte dessas leituras para scripts conhecidos de rastreamento e a injetar ruído em canvas, áudio e WebGL, e o Firefox particiona o estado por site. Por isso leitura ausente é sempre neutra aqui, o campo `quality` diz quanto foi medido, e o módulo diz em voz alta quando não mediu.
