> For the complete documentation index, see [llms.txt](https://docs.caf.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.caf.io/caf-sdk/caf-sdk-pt-br/android/standalone-modules/deprecated-sdks/document-detector-deprecated.md).

# DocumentDetector v7 ou inferior (Obsoleto)

## **Documentos suportados**

Atualmente, os documentos suportados no Android são:

```java
public enum Document {
    RG_FRONT, // frente do RG, parte onde está a foto
    RG_BACK, // verso do RG, onde estão os dados
    RG_FULL, // RG aberta, mostrando tanto a frente quanto o verso
    CNH_FRONT, // frente da CNH, parte onde está a foto
    CNH_BACK, // verso da CNH, parte onde está a assinatura
    CNH_FULL, // CNH aberta, mostrando tanto a frente quanto o verso
    CRLV, // CRLV
    RNE_FRONT, // frente do RNE e do RNM, onde estão os dados
    RNE_BACK, // verso do RNE e do RNM, onde está a foto
    PASSPORT, // Passaporte, apenas um lado, mostrando todos os dados
    CTPS_FRONT, // frente da CTPS, onde contém a foto
    CTPS_BACK, // verso da CTPS, onde contém os dados
    OTHERS, // outros documentos de identificação em geral, como RNE, Identidade Militar, OAB e CRLV
    ANY; // permite o envio de qualquer tipo de documento, todos os citados acima, inclusive qualquer outro documento, pois não são feitas tipificações
}
```

## **Tamanho do SDK**

O tamanho do SDK é de aproximadamente 3,3 MB, o que pode diminuir devido a [estes elementos](https://github.com/combateafraude/public-docs/blob/docs-sdks/reduce-sdks-size.md).

## **Permissões em tempo de execução**

| Permissão                   | Motivo                                                                                          | Obrigatório?                       |
| --------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------- |
| **`CÂMERA`**                | Para capturar fotos dos documentos.                                                             | Somente para o recurso de captura. |
| **`READ_EXTERNAL_STORAGE`** | Para acessar o armazenamento externo do dispositivo e selecionar documentos no fluxo de upload. | Somente para o recurso de upload.  |
| **`ACCESS_FINE_LOCATION`**  | Para coletar dados de conexão com a torre de sinal, apenas para fins analíticos.                | Não.                               |

## **Instanciando o SDK**

Primeiramente, instancie um objeto do tipo **`DocumentDetector`**. Este objeto conterá todas as suas regras de negócio para o SDK:

```java
DocumentDetector mDocumentDetector = new DocumentDetector.Builder(String mobileToken)
    // veja a tabela abaixo
    .build();
```

> Todos os parâmetros anotados com `@Nullable` podem receber `null` valores, útil se você quiser configurar apenas um dos parâmetros do mesmo método.

### **Método builder**

| Parâmetro                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Obrigatório                                                                                                                                                                                                                                                                                                                                                              |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong><code>String mobileToken</code></strong></p><p>Token associado à sua conta, para usar o SDK.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | Sim.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setDocumentSteps(DocumentDetectorStep\[] documentSteps)</code></strong></p><p>Define o fluxo de captura do documento conforme explicado <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#documentdetectorstep">aqui</a></p>                                                                                                                                                                                                                                                                                                                                                                       | Sim.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setPeopleId(String peopleId)</code></strong></p><p>Identificador do usuário para fins de identificação do perfil de fraude e para auxiliar na identificação de logs do Analytics em casos de bugs e erros.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                           | Não. Usado apenas para [analytics](https://github.com/combateafraude/public-docs/blob/docs-sdks/analytics.md) fins.                                                                                                                                                                                                                                                      |
| <p><strong><code>.setAnalyticsSettings(boolean useAnalytics)</code></strong></p><p>Ativa/desativa a coleta de dados para <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/analytics.md">analytics</a>.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                            | Não. O valor padrão é true.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setCaptureStages(CaptureStage\[] captureStages)</code></strong></p><p>Configura os requisitos para cada etapa de captura. Normalmente variando da mais exigente, que requer a maior qualidade, até a menos exigente, com a menor qualidade, conforme explicado <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#capturestage">aqui</a>.</p>                                                                                                                                                                                                                                                       | Não.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setPopupSettings(boolean show)</code></strong></p><p>Ativa/desativa os pop-ups exibidos antes de cada captura de documento.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | Não. O valor padrão é true.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setLayout(@Nullable @LayoutRes Integer layoutId)</code></strong></p><p>Substitui o layout padrão do SDK. Crie um arquivo na pasta layout do seu projeto, copie este <a href="https://gist.github.com/murilofank/4548349dd1a3c412ce81db60ac3b0644">modelo</a> e faça as alterações que desejar.</p>                                                                                                                                                                                                                                                                                                                                                       | Não.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setMask(MaskType type)</code></strong></p><p>Define o design da máscara exibida durante as capturas. Há três tipos:</p><ul><li><strong><code>MaskType.DEFAULT</code></strong>, com o padrão pontilhado no formato do documento;</li><li><strong><code>MaskType.DETAILED</code></strong>, que mostra uma ilustração do documento solicitado, juntamente com a máscara pontilhada;</li><li><strong><code>MaskType.NONE</code></strong>, que remove completamente a máscara.</li></ul>                                                                                                                                                                      | Não. O valor padrão é **`MaskType.DEFAULT`**.                                                                                                                                                                                                                                                                                                                            |
| <p><strong><code>.setMask(@DrawableRes Integer greenMask, @DrawableRes Integer whiteMask, @DrawableRes Integer redMask)</code></strong></p><p>Permite a personalização completa das máscaras exibidas durante a captura do documento. São necessários três tipos, um para cada feedback de validação do documento durante a captura: SUCCESS (greenMask), NORMAL (whiteMask) e ERROR (redMask). Ao optar por esta opção, use máscaras com a mesma área de detecção do documento; isso é extremamente importante para que o algoritmo faça as validações durante a captura.</p>                                                                                             | <p>Não. Veja nossos modelos de máscara para obter a área de detecção:</p><p><a href="https://gist.github.com/MiguelXCruz/b3fda2a47fc42b369f6fa6cd20821a79">NORMAL</a></p><p><a href="https://gist.github.com/MiguelXCruz/c10c07a5a4cb40e5bd5ba5152bd85596">SUCESSO</a></p><p><a href="https://gist.github.com/MiguelXCruz/e6a9723d42016d2fb0687cfae8c0cce3">ERRO</a></p> |
| <p><strong><code>.setStyle(@StyleRes int styleResourceId)</code></strong></p><p>Configure uma nova diretriz de estilo para o SDK. Crie um arquivo styles.xml no seu projeto com este <a href="https://gist.github.com/murilofank/3ac0f921435466fd4e0b04d683597a38">modelo</a> e personalize-o.</p>                                                                                                                                                                                                                                                                                                                                                                         | Não.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setAudioSettings(boolean enable)</code></strong></p><p>Ativa/desativa a reprodução de áudio do SDK.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | Não. O valor padrão é **`true`**.                                                                                                                                                                                                                                                                                                                                        |
| <p><strong><code>.setNetworkSettings(int requestTimeout)</code></strong></p><p>Define o <em>das requisições</em> tempo limite.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Não. O valor padrão é 60 (segundos).                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setLuminositySensorSettings(@Nullable SensorLuminositySettings sensorLuminositySettings)</code></strong></p><p>Define o limite entre brilho ambiente aceitável/não aceitável. Defina <strong><code>null</code></strong> se você não quiser usar este sensor.</p>                                                                                                                                                                                                                                                                                                                                                                                         | Não. As configurações padrão são 5 (lx).                                                                                                                                                                                                                                                                                                                                 |
| <p><strong><code>.setOrientationSensorSettings(@Nullable SensorOrientationSettings sensorOrientationSettings)</code></strong></p><p>Define o limite entre a orientação correta/incorreta do dispositivo. Quanto maior o valor, mais flexível ele será. Defina <strong><code>null</code></strong> se você não quiser usar este sensor.</p>                                                                                                                                                                                                                                                                                                                                  | Não. A configuração padrão é 3 (m/s²).                                                                                                                                                                                                                                                                                                                                   |
| <p><strong><code>.setStabilitySensorSettings(@Nullable SensorStabilitySettings sensorStabilitySettings)</code></strong></p><p>Define as configurações do sensor de estabilidade. Defina <strong><code>null</code></strong> se você não quiser usar este sensor.</p>                                                                                                                                                                                                                                                                                                                                                                                                        | Não. A configuração padrão é tempo 2000 (ms) e limite 0,5 (m/s²).                                                                                                                                                                                                                                                                                                        |
| <p><strong><code>.setProxySettings(@Nullable ProxySettings proxySettings)</code></strong></p><p>Define as configurações de proxy. Siga o <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/configurations/proxy-configuration.md">este</a> guia.</p>                                                                                                                                                                                                                                                                                                                                                                                                   | Não. A configuração padrão é **`null`**.                                                                                                                                                                                                                                                                                                                                 |
| <p><strong><code>.setPreviewSettings(@NonNull PreviewSettings previewSettings)</code></strong></p><p>Ativa/desativa e permite configurar a visualização da captura realizada, solicitando a confirmação do usuário para prosseguir.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                    | Não. O padrão é desativado.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setAutoDetection(boolean enable)</code></strong></p><p>Ativa/desativa a detecção automática e as verificações dos sensores. Use false para desativar todas as verificações no dispositivo. Dessa forma, todas as validações serão realizadas no backend após a captura.</p>                                                                                                                                                                                                                                                                                                                                                                              | Não. O padrão é **`true`**.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setCurrentStepDoneDelay(boolean showDelay, int delay)</code></strong></p><p>Atraso a atividade após a conclusão de cada etapa. Este método pode ser usado para exibir uma mensagem de sucesso na própria tela após a captura, por exemplo.</p>                                                                                                                                                                                                                                                                                                                                                                                                           | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setMessageSettings(MessageSettings messageSettings)</code></strong></p><p>Permite personalizar as mensagens exibidas no balão de "status" durante o processo de captura e análise. Veja os atributos disponíveis <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#messagesettings">aqui</a>.</p>                                                                                                                                                                                                                                                                                                  | Não.                                                                                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.enableSwitchCameraButton(boolean enable)</code></strong></p><p>Ativa/desativa o botão para o usuário alternar entre as câmeras frontal e traseira.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Não. O padrão é **`true`**.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setResolutionSettings(Resolution resolution)</code></strong></p><p>Permite definir a resolução de captura. O método recebe como parâmetro uma <strong><code>Resolução</code></strong> que possui as seguintes opções:</p><ul><li><strong><code>HD: 720x1280</code></strong></li><li><strong><code>FULL\_HD: 1080x1920</code></strong></li><li><strong><code>QUAD\_HD: 1440x2560</code></strong></li><li><strong><code>ULTRA\_HD: 2160x3840</code></strong></li></ul>                                                                                                                                                                                     | Não. O padrão é **`Resolution.ULTRA_HD`**.                                                                                                                                                                                                                                                                                                                               |
| <p><strong><code>.setCompressSettings(@IntRange(from = 50, to = 100) int compressQuality)</code></strong></p><p>Permite configurar a qualidade no processo de compressão. Por padrão, todas as capturas passam por compressão. O método espera como parâmetro valores entre 50 e 100, sendo 100 a compressão de melhor qualidade (recomendada).</p>                                                                                                                                                                                                                                                                                                                        | Não. O padrão é **`100`**.                                                                                                                                                                                                                                                                                                                                               |
| <p><strong><code>.enableGoogleServices(boolean enable)</code></strong></p><p>Permite ativar/desativar recursos do SDK que consomem GoogleServices no SDK; não recomendamos desativar os serviços devido à perda de segurança.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                          | Não. O padrão é **`true`**.                                                                                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setUseEmulator(boolean use)</code></strong></p><p>Permite o uso de emuladores quando <strong><code>true</code></strong>. Não é recomendado ativar esta opção; use-a apenas para fins de teste.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                       | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setUseRoot(boolean use)</code></strong></p><p>Permite o uso de dispositivos com root quando <strong><code>true</code></strong>. Não é recomendado ativar esta opção; use-a apenas para fins de teste.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setUseDeveloperMode(boolean use)</code></strong></p><p>Ativa o uso do modo desenvolvedor quando <strong><code>true</code></strong>. Não é recomendado ativar esta opção; use-a apenas para fins de teste.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                            | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setUseAdb(boolean use)</code></strong></p><p>Ativa o modo de depuração do Android Debug Bridge (ADB) quando <strong><code>true</code></strong>. Não é recomendado ativar esta opção; use-a apenas para fins de teste.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setUseDebug(boolean use)</code></strong></p><p>Permite usar o app em modo de depuração quando <strong><code>true</code></strong>. Não é recomendado ativar esta opção; use-a apenas para fins de teste.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                              | Não. O padrão é **`false`**.                                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setGetImageUrlExpireTime (String expireTime)</code></strong></p><p>Define por quanto tempo a URL da imagem ficará no servidor até expirar. Espere receber um intervalo de tempo entre "30m" e "30d".</p><p>Exemplos:</p><ul><li><strong><code>setGetImageUrlExpireTime("30m")</code></strong>: Para configurar apenas minuto(s)</li><li><strong><code>setGetImageUrlExpireTime("24h")</code></strong>: Para configurar apenas hora(s)</li><li><strong><code>setGetImageUrlExpireTime("1h 10m")</code></strong>: Para definir hora(s) e minuto(s)</li><li><strong><code>setGetImageUrlExpireTime("10d")</code></strong>: Para configurar dia(s)</li></ul> | Não. O padrão é **`3h`**.                                                                                                                                                                                                                                                                                                                                                |
| <p><a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#uploadsettings"><strong><code>.setUploadSettings(UploadSettings uploadSettings)</code></strong></a></p><p>Define as configurações para o envio de documentos. Ao ativar esta opção, o fluxo do SDK solicitará que o usuário envie os arquivos do documento em vez de capturá-los com a câmera do dispositivo. Esta opção também inclui verificações de qualidade do documento. Veja como configurá-la <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#uploadsettings">aqui</a>.</p>                     | Não. Por padrão, esta opção está desativada.                                                                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setAllowedPassportCountriesList(CountryCodeList\[] countryList)</code></strong></p><p>Ativa a opção de permitir passaportes de apenas um determinado país emissor ou de uma lista de países. Veja a lista completa em: <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3">ISO 3166-1 alpha-3</a></p><p>Exemplo:</p><ul><li><strong><code>.setAllowedPassportCountriesList(new CountryCodesList\[]{CountryCodesList.BRA})</code></strong></li></ul>                                                                                                                                                                                               | Não. Por padrão, são aceitos passaportes emitidos por qualquer país.                                                                                                                                                                                                                                                                                                     |
| <p><strong><code>.setStage(CafStage stage)</code></strong></p><p>Permite escolher o ambiente em que o SDK será executado (produção, beta). O método recebe como parâmetro um enum <strong><code>CafStage</code></strong> para selecionar o ambiente:</p>                                                                                                                                                                                                                                                                                                                                                                                                                   | Não. O padrão é **`CafStage.PROD`**                                                                                                                                                                                                                                                                                                                                      |
| **Enum**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | **Descrição**                                                                                                                                                                                                                                                                                                                                                            |
| **`CafStage.PROD`**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | Usará a Trust Platform **produção** para registrar as execuções do SDK.                                                                                                                                                                                                                                                                                                  |
| **`CafStage.BETA`**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | Usará a Trust Platform **beta** para registrar as execuções do SDK.                                                                                                                                                                                                                                                                                                      |

{% hint style="warning" %}
Cada ambiente (beta e produção) requer seu próprio mobileToken específico, gerado na Trust Platform do respectivo ambiente.
{% endhint %}

### **DocumentDetectorStep**

Para criar um fluxo de captura, você precisará criar um array de **`DocumentDetectorStep`**, em que cada elemento será uma etapa de captura. Para construir cada `DocumentDetectorStep` objeto, você pode inserir os seguintes elementos:

```java
DocumentDetectorStep detectorStep = new DocumentDetectorStep(Document.RG_FRONT);
```

| Parâmetro                                                                                                                                                                                                                                                                                                                                     | Obrigatório                                                                            |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| <p><strong><code>documento Document</code></strong></p><p>Identifica qual documento você deseja capturar na respectiva etapa. Veja os tipos de documentos suportados <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/android/deprecated/v7-or-below.md#supported-documents">aqui</a>.</p>                               | Sim.                                                                                   |
| <p><strong><code>.setStepLabel(@StringRes int stepLabel)</code></strong></p><p>Define o texto a ser exibido na parte inferior do layout.</p>                                                                                                                                                                                                  | Não. Existe um padrão por **`Documento`** tipo.                                        |
| <p><strong><code>.setIllustration(@StringRes int illustration)</code></strong></p><p>Define a ilustração a ser exibida no pop-up antes da captura.</p>                                                                                                                                                                                        | Não. Existe um padrão por **`Documento`** tipo.                                        |
| <p><strong><code>.setStepAudio(@RawRes int stepAudio)</code></strong></p><p>Define o áudio que será reproduzido no início da etapa.</p>                                                                                                                                                                                                       | Não. Existe um padrão por **`Documento`** tipo.                                        |
| <p><strong><code>.setMask(@DrawableRes Integer whiteMaskResId, @DrawableRes Integer greenMaskResId, @DrawableRes Integer redMaskResId)</code></strong></p><p>Define as máscaras para cada tipo de documento. O uso deste método substitui as máscaras definidas no <code>.setMask</code> método da <code>DocumentDetector.Builder.</code></p> | Não. O padrão é definido pelo **`.setMask`** método do **`DocumentDetector.Builder`**. |

### **CaptureStage**

Para melhorar a UX do cliente, recomendamos criar etapas de dificuldade para o DocumentDetector. Para isso, oferecemos o objeto CaptureStage, no qual você pode definir os seguintes parâmetros:

| Parâmetro                                                                                                                                                                                                                                                                                             |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>Long durationMillis</code></strong></p><p>Duração da etapa, em milissegundos. Se você não quiser um tempo limite, defina <strong><code>null</code></strong>.</p>                                                                                                                     |
| <p><strong><code>boolean wantSensorCheck</code></strong></p><p>Ativa/desativa o uso de sensores para capturar a foto.</p>                                                                                                                                                                             |
| <p><strong><code>QualitySettings qualitySettings</code></strong></p><p>Configurações da verificação de qualidade do documento. Se você não quiser verificar a qualidade do documento, defina <strong><code>null</code></strong>.</p>                                                                  |
| <p><strong><code>DetectionSettings detectionSettings</code></strong></p><p>Configurações para detecção automática de documentos. Se você não quiser usar a detecção automática, defina <strong><code>null</code></strong>.</p>                                                                        |
| <p><strong><code>CaptureMode captureMode</code></strong></p><p>Modo de captura do documento, que pode ser <strong><code>CaptureMode.AUTOMATIC</code></strong> ou <strong><code>CaptureMode.MANUAL</code></strong>. Na captura manual, um botão será habilitado para o usuário realizar a captura.</p> |

Como o **`.setCaptureStages`** parâmetro não é obrigatório; se ele não for usado, o **`DocumentDetector`** usará este padrão:

```java
QualitySettings qualitySettings = new QualitySettings(1.8);
DetectionSettings detectionSettings = new DetectionSettings(0.95, 5);

new CaptureStage[]{
    new CaptureStage(20000L, true, qualitySettings, detectionSettings, CaptureMode.AUTOMATIC),
    new CaptureStage(15000L, false, qualitySettings, detectionSettings, CaptureMode.AUTOMATIC),
    new CaptureStage(10000L, false, qualitySettings, detectionSettings, CaptureMode.MANUAL),
    new CaptureStage(null, false, qualitySettings, null, CaptureMode.MANUAL)
}
```

#### **QualitySettings**

| Parâmetro                                                                                                                     | Observações                                         |
| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| <p><strong><code>double threshold</code></strong></p><p>Limite que define se a captura do documento tem qualidade ou não.</p> | Varia de 1,0 a 5,0, sendo 1,8 o limite recomendado. |

#### **DetectionSettings**

| Parâmetro                                                                                                                                          | Observações                                                                          |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| <p><strong><code>double threshold</code></strong></p><p>Limite que define se o documento exibido pelo usuário é ou não o documento solicitado.</p> | Um valor entre 0,0 e 1,0, sendo 0,95 o recomendado.                                  |
| <p><strong><code>int consecutiveFrames</code></strong></p><p>Número de quadros consecutivos corretos para aceitação do documento.</p>              | 5 é o recomendado. Quanto mais quadros, mais tempo levará para detectar o documento. |

### **UploadSettings**

Para habilitar a funcionalidade de envio de documentos, é necessário instanciar um objeto do tipo UploadSettings(boolean enable) e definir seus parâmetros:

| Parâmetro                                                                                                                                             | Obrigatório                                                  |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| <p><strong><code>.setEnable(Boolean enable)</code></strong></p><p>Ativa/desativa este recurso.</p>                                                    | Não. O padrão é true.                                        |
| <p><strong><code>.setCompress(Boolean enable)</code></strong></p><p>Ativa/desativa a compressão de arquivos antes do envio.</p>                       | Não. O padrão é **`true`**.                                  |
| <p><strong><code>.setFileFormats(FileFormat\[] fileFormats)</code></strong></p><p>Define o(s) formato(s) de arquivo que serão aceitos para envio.</p> | Não. Por padrão, .PDF, .JPG, .JPEG, .PNG, .HEIF são aceitos. |
| <p><strong><code>.setMaxFileSize(Integer maxFileSize)</code></strong></p><p>Define o limite máximo em KB do arquivo a ser enviado.</p>                | Não. O limite padrão é 10000 KB (10 MB).                     |
| <p><strong><code>.setActivityLayout ( Integer activityLayout)</code></strong></p><p>Define o layout de fundo do envio do documento.</p>               | Não.                                                         |
| <p><strong><code>.setPopUpLayout (Integer popUpLayout)</code></strong></p><p>Define o layout do pop-up de solicitação de envio do documento.</p>      | Não.                                                         |

Atualmente, os formatos de arquivo suportados são:

```java
public enum FileFormat {
    PNG("image/png"),
    JPG ("image/jpg"),
    JPEG ("image/jpeg"),
    PDF("application/pdf"),
    HEIF("image/heif");
}
```

### **MessageSettings**

Para usar, basta instanciar um **`MessageSettings`** objeto e usar os métodos conforme necessário para personalização.

| Método                                                                                                                                                                                                                                                                                                                                                                                                                    | Valor padrão                                                                                                                    |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>.setPopupDocumentSubtitleMessage(@NonNull @StringRes Integer message)</code></strong></p><p>Mensagem exibida no subtítulo do pop-up que traz a ilustração do documento cuja captura está sendo solicitada.</p>                                                                                                                                                                                           | “Posicione o documento em uma mesa, centralize-o na marcação e aguarde a captura automática.”                                   |
| <p><strong><code>.setFitTheDocumentMessage(Integer message)</code></strong></p><p>Mensagem informando para encaixar o documento na máscara.</p>                                                                                                                                                                                                                                                                           | "Encaixe o documento na marcação"                                                                                               |
| <p><strong><code>.setHoldItMessage(Integer message)</code></strong></p><p>Mensagem exibida no momento em que a captura está sendo realizada.</p>                                                                                                                                                                                                                                                                          | "Segure assim"                                                                                                                  |
| <p><strong><code>.setVerifyingQualityMessage(Integer message)</code></strong></p><p>Mensagem exibida quando o SDK faz uma requisição ao backend, verificando a qualidade.</p>                                                                                                                                                                                                                                             | "Verificando qualidade…"                                                                                                        |
| <p><strong><code>.setLowQualityDocumentMessage(Integer message)</code></strong></p><p>Mensagem exibida quando a qualidade da captura falha.</p>                                                                                                                                                                                                                                                                           | "Ops, não foi possível ler as informações. Por favor, tente novamente"                                                          |
| <p><strong><code>.setUploadingImageMessage(Integer message)</code></strong></p><p>Mensagem exibida quando não há verificação de qualidade e a captura está sendo salva nos servidores.</p>                                                                                                                                                                                                                                | "Enviando imagem…"                                                                                                              |
| <p><strong><code>.setShowOpenDocumentErrorMessage(boolean show, @Nullable Integer message)</code></strong></p><p>Mensagem exibida ao mostrar um documento aberto; a mensagem será exibida junto com a mensagem de erro no documento em uso. Exemplo: se o usuário apresentar uma CNH aberta (carteira de motorista brasileira), a mensagem de erro padrão "Essa é uma CNH Aberta" + a mensagem definida será exibida.</p> | "Use o documento fechado e tente novamente"                                                                                     |
| <p><strong><code>.setWaitMessage(boolean show, @Nullable Integer message)</code></strong></p><p>Mensagem exibida ao iniciar a câmera.</p>                                                                                                                                                                                                                                                                                 | "Aguarde..."                                                                                                                    |
| <p><strong><code>.setSensorLuminosityMessage(@NonNull @StringRes Integer message)</code></strong></p><p>Mensagem exibida quando o limite de brilho é menor do que o esperado.</p>                                                                                                                                                                                                                                         | "Ambiente muito escuro"                                                                                                         |
| <p><strong><code>.setSensorOrientationMessage(@NonNull @StringRes Integer message)</code></strong></p><p>Mensagem exibida quando o limite de orientação é menor do que o esperado.</p>                                                                                                                                                                                                                                    | "Celular não está na vertical"                                                                                                  |
| <p><strong><code>.setSensorStabilityMessage(@NonNull @StringRes Integer message)</code></strong></p><p>Mensagem exibida quando o limite de orientação é menor do que o esperado.</p>                                                                                                                                                                                                                                      | "Mantenha o celular parado"                                                                                                     |
| <p><strong><code>.setWrongDocumentMessage\_RG\_FRONT(Integer message)</code></strong></p><p>Mensagem exibida quando a frente do RG (carteira de identidade brasileira) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                   | "Ops, esta é a frente do RG"                                                                                                    |
| <p><strong><code>.setWrongDocumentMessage\_RG\_BACK(Integer message)</code></strong></p><p>Mensagem exibida quando a versão do RG (carteira de identidade brasileira) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                    | "Ops, este é o verso do RG"                                                                                                     |
| <p><strong><code>.setWrongDocumentMessage\_RG\_FULL(Integer message)</code></strong></p><p>Mensagem exibida quando o RG aberto (carteira de identidade brasileira) é exibido em um fluxo diferente do esperado.</p>                                                                                                                                                                                                       | "Ops, este é o RG aberto"                                                                                                       |
| <p><strong><code>.setWrongDocumentMessage\_CNH\_FRONT(Integer message)</code></strong></p><p>Mensagem exibida quando a frente da CNH (Carteira Nacional de Habilitação) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                  | "Ops, esta é a frente da CNH"                                                                                                   |
| <p><strong><code>.setWrongDocumentMessage\_CNH\_BACK(Integer message)</code></strong></p><p>Mensagem exibida quando a versão da CNH (Carteira Nacional de Habilitação) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                   | "Ops, este é o verso da CNH"                                                                                                    |
| <p><strong><code>.setWrongDocumentMessage\_CNH\_FULL(Integer message)</code></strong></p><p>Mensagem exibida quando a CNH aberta (Carteira Nacional de Habilitação) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                      | "Ops, esta é a CNH aberta"                                                                                                      |
| <p><strong><code>.setWrongDocumentMessage\_CRLV(Integer message)</code></strong></p><p>Mensagem exibida quando o CRLV (Certificado de Registro e Licenciamento de Veículo) é exibido em um fluxo diferente do esperado.</p>                                                                                                                                                                                               | "Ops, este é o CRLV"                                                                                                            |
| <p><strong><code>.setWrongDocumentMessage\_RNE\_FRONT(Integer message)</code></strong></p><p>Mensagem exibida quando a frente do RNE (Registro Nacional de Estrangeiros) é exibida em um fluxo diferente do esperado.</p>                                                                                                                                                                                                 | "Ops, esta é a frente do RNE"                                                                                                   |
| <p><strong><code>.setWrongDocumentMessage\_RNE\_BACK(Integer message)</code></strong></p><p>Mensagem exibida quando o verso do RNE (Registro Nacional de Estrangeiros) é exibido em um fluxo diferente do esperado.</p>                                                                                                                                                                                                   | "Ops, este é o verso do RNE"                                                                                                    |
| <p><strong><code>.setPositiveButtonMessage(Integer message)</code></strong></p><p>Permite personalizar a mensagem do botão de confirmação.</p>                                                                                                                                                                                                                                                                            | Não. O padrão é "Ok, entendi!"                                                                                                  |
| <p><strong><code>.setUploadedImageIsTooLargeTitle</code></strong></p><p>Define o título do pop-up de envio quando o arquivo enviado excede o tamanho máximo permitido.</p>                                                                                                                                                                                                                                                | Não. O padrão é "Tamanho do arquivo excedido"                                                                                   |
| <p><strong><code>.setUploadedImageIsTooLargeMessage</code></strong></p><p>Define a mensagem do pop-up de envio quando o arquivo enviado excede o tamanho máximo permitido.</p>                                                                                                                                                                                                                                            | Não. O padrão é "Parece que o arquivo que você escolheu excede o tamanho permitido. Tente enviar um arquivo menor."             |
| <p><strong><code>.setUploadedImageHasInvalidFormatTitle</code></strong></p><p>Define o título do pop-up de envio quando o formato do arquivo enviado não é válido.</p>                                                                                                                                                                                                                                                    | Não. O padrão é "Formato inválido."                                                                                             |
| <p><strong><code>.setUploadedImageNotSupportedFormatMessage</code></strong></p><p>Define a mensagem do pop-up de envio quando o formato do arquivo enviado não é válido.</p>                                                                                                                                                                                                                                              | Não. O padrão é "Parece que o formato do arquivo não é suportado. Tente reenviar usando os formatos JPG, PNG ou PDF."           |
| <p><strong><code>.setUploadedImageGenericErrorTitle</code></strong></p><p>Define o título genérico de erro do pop-up de envio.</p>                                                                                                                                                                                                                                                                                        | Não. O padrão é "Ops, algo deu errado."                                                                                         |
| <p><strong><code>.setUploadedImageWrongMessage</code></strong></p><p>Define a mensagem de erro genérica do pop-up de envio.</p>                                                                                                                                                                                                                                                                                           | Não. O padrão é "Parece que o documento não é o esperado. Envie um arquivo com o tipo de documento solicitado."                 |
| <p><code>.</code><strong><code>setUploadedImageLowQualityTitle</code></strong></p><p>Define o título do pop-up de envio quando a qualidade da imagem enviada falha.</p>                                                                                                                                                                                                                                                   | Não. O padrão é "Ops, qualidade baixa"                                                                                          |
| <p><strong><code>.setUploadedImageLowQualityMessage</code></strong></p><p>Define a mensagem do pop-up de envio quando a qualidade da imagem enviada falha.</p>                                                                                                                                                                                                                                                            | Não. O padrão é "Parece que a qualidade da imagem do documento está muito baixa. Tente enviar um arquivo com melhor qualidade." |
| <p><strong><code>.setUploadPopupLoadingMessage</code></strong></p><p>Define a mensagem exibida no pop-up de envio enquanto o arquivo está sendo enviado.</p>                                                                                                                                                                                                                                                              | Não. O padrão é "Enviando documento"                                                                                            |

**Exemplo**

```java
MessageSettings messageSettings = new MessageSetings()
.setFitTheDocumentMessage(R.string.exempleFit)
.setHoldItMessage(R.string.exempleHoldIt);
```

### **Validações de segurança**

Estamos constantemente tomando medidas para tornar o produto cada vez mais seguro, mitigando uma série de ataques observados no processo de captura e, consequentemente, reduzindo ao máximo possível as fraudes de identidade. O SDK possui alguns bloqueios que podem impedir sua execução em determinados contextos. **Para** **desativá-las**, você pode usar os métodos conforme mostrado no exemplo abaixo:

```java
DocumentDetector.Builder("mobileToken")
    .setUseEmulator(true)
    .setUseRoot(true)
    .setUseDeveloperMode(true)
    .setUseAdb(true)
    .setUseDebug(true)
    .build();
```

{% hint style="warning" %}
A desativação das validações de segurança é recomendada **apenas para fins de teste**. Para publicar seu aplicativo em produção, recomendamos usar as configurações padrão.
{% endhint %}

## Iniciando a Activity

Depois de criar o **`DocumentDetector`**, inicie a **`DocumentDetectorActivity`** passando este objeto como parâmetro via extra do intent:

```java
Intent mIntent = new Intent(context, DocumentDetectorActivity.class);
mIntent.putExtra(DocumentDetector.PARAMETER_NAME, mDocumentDetector);
startActivityForResult(mIntent, REQUEST_CODE);
```

## Obtendo o resultado

Para obter o **`DocumentDetectorResult`** objeto, que contém as capturas feitas pelo SDK, sobrescreva o **`onActivityResult`** método na mesma Activity em que você iniciou a **`DocumentDetectorActivity`**:

```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE){
        if (resultCode == RESULT_OK && data != null){
            DocumentDetectorResult mDocumentDetectorResult = (DocumentDetectorResult) data.getSerializableExtra(DocumentDetectorResult.PARAMETER_NAME);
            // verifique mDocumentDetectorResult.getSDKFailure() para descobrir por que o SDK foi encerrado
        } else {
            // o usuário fechou a activity
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}
```

### **DocumentDetectorResult**

| Parâmetro                                                                                                                                                                                                                                                     | Permitir nulo                                                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| <p><strong><code>Capture\[] captures</code></strong></p><p>A matriz com as respectivas capturas dos documentos parametrizados.</p>                                                                                                                            | Sim, em caso de erro                                                                            |
| <p><strong><code>String type</code></strong></p><p>A classe do fluxo do documento lido. Este parâmetro é útil em uma integração com nossa rota de OCR.</p>                                                                                                    | Sim, em caso de erro ou quando você não conseguir verificar a qualidade.                        |
| <p><strong><code>String trackingId</code></strong></p><p>Identificador desta execução em nossos servidores. Se possível, salve este campo e envie-o para nossa API. Dessa forma, teremos mais dados sobre como o usuário se comportou durante a execução.</p> | Sim, se o usuário definir **`useAnalytics = false`** ou as chamadas de analytics não funcionam. |
| <p><strong><code>SDKFailure sdkFailure</code></strong></p><p>Objeto que informa o motivo do encerramento do SDK. Para mais informações, veja <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/sdks-response.md">aqui</a>.</p>            | Sim, em caso de sucesso                                                                         |

#### **Captura**

| Parâmetro                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Permitir nulo                                         |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| <p><strong><code>String imagePath</code></strong></p><p>Caminho completo da imagem no dispositivo do usuário.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                 | Não.                                                  |
| <p><strong><code>String imageUrl</code></strong></p><p>URL do documento no servidor da CAF.</p>                                                                                                                                                                                                                                                                                                                                                                                                                                                   | Não.                                                  |
| <p><strong><code>String label</code></strong></p><p>Identificação do tipo do documento capturado, entre as seguintes possibilidades: <strong><code>\["blank", "cnh\_back", "cnh\_front", "cnh\_full", "new\_cnh\_back", "new\_cnh\_front", "new\_cnh\_full", "crlv", "crlv\_new", "generic", "rg\_back", "rg\_front", "rg\_full", "rg\_new\_back", "rg\_new\_front", "rg\_new\_full", "rne\_back", "rne\_front", "rnm\_back", "rnm\_front", "ctps\_back", "ctps\_front", "passport", "cin\_front", "cin\_back"]</code></strong><code>.</code></p> | Sim, quando você não conseguir verificar a qualidade. |
| <p><strong><code>Qualidade dupla</code></strong></p><p>A qualidade é inferida pelo algoritmo de qualidade do documento quando ativado. Varia de 1,0 a 5,0.</p>                                                                                                                                                                                                                                                                                                                                                                                    | Sim, quando você não conseguir verificar a qualidade. |
| <p><strong><code>int lensFacing</code></strong></p><p>Define o lado da câmera que foi usado. Use <strong><code>DocumentDetectorResult.LENS\_FACING\_FRONT</code></strong> ou <strong><code>DocumentDetectorResult.LENS\_FACING\_FRONT</code></strong> para validar.</p>                                                                                                                                                                                                                                                                           | Não.                                                  |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.caf.io/caf-sdk/caf-sdk-pt-br/android/standalone-modules/deprecated-sdks/document-detector-deprecated.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
