> 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/flutter/standalone-modules/deprecated-sdks/document-detector/v6-and-below.md).

# DocumentDetector v6.x e abaixo

## **Documentos suportados**

Atualmente, os documentos suportados no Android são: RG, CNH, RNE, CRLV, CTPS, Passaporte. Se você tiver sugestões de outros documentos, entre em contato conosco!

## **Política de Privacidade e Termos e Condições de Uso**

Ao usar nosso plugin, certifique-se de que concorda com nossa [**Política de Privacidade**](https://en.caf.io/politicas/politicas-de-privacidade) e com nossos [**Termos e Condições de Uso**](https://en.caf.io/politicas/termos-e-condicoes-de-uso).

## **Análises**

Nossos SDKs, por padrão, coletam informações sobre o usuário e o ambiente em execução para mapear melhor os fraudadores e entender seus comportamentos. Recomendamos manter essa coleta ativa, pois a única finalidade desses dados é reduzir fraudes, mas, se desejar, você pode desativá-la por meio da **`.setAnalyticsSettings(bool useAnalytics)`** parâmetro.

## **Pré-requisitos**

| **Configuração mínima**     | **Versão** |
| --------------------------- | ---------- |
| Flutter                     | 1.12+      |
| Dart                        | 2.12+      |
| API mínima do Android       | 21+        |
| Versão do SDK de compilação | 33         |
| iOS                         | 11.0+      |
| Xcode                       | 13.4.1+    |

## **Configurações**

### **Android**

No arquivo **`ROOT_PROJECT/android/app/build.gradle`**, adicione:

```groovy
android {

...

    dataBinding.enabled = true
    
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    aaptOptions {
        noCompress "tflite"
    }
}
// Para realizar a personalização do layout a partir do SDK, importe as seguintes bibliotecas
dependencies {
    implementation "androidx.camera:camera-view:1.2.0-alpha02"
    implementation 'com.combateafraude.sdk:document-detector:7.2.5'
    // SDK nativo Android que o plugin implementa
    
// bibliotecas de design que você usará no seu layout (estas são usadas em nosso modelo de exemplo para personalização)
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
}
```

### **iOS**

No **`ROOT_PROJECT/ios/Podfile`**, adicione ao final do arquivo:

```swift
source 'https://github.com/combateafraude/iOS.git'
source 'https://cdn.cocoapods.org/' # ou 'https://github.com/CocoaPods/Specs' se o CDN estiver fora do ar
```

Por fim, adicione as permissões ao arquivo **ROOT\_PROJECT/ios/Runner/Info.plist**:

```swift
<key>NSCameraUsageDescription</key>
<string>Para ler os documentos</string>

// Necessário apenas para o fluxo de envio de documentos
<key>NSPhotoLibraryUsageDescription</key>
    <string>Para selecionar imagens</string>
```

Para habilitar texto e voz em português, no seu projeto, no diretório ROOTPROJECT/ios, abra o arquivo .xcworkspace no Xcode e adicione em Project > Info > Localizations o idioma Portuguese (Brazil).

### **Flutter**

Adicione o plugin ao seu **`ROOT_PROJECT/pubspec.yaml`** arquivo:

```yaml
dependências:
    document_detector:
        git:
            url: https://github.com/combateafraude/Flutter.git
            ref: document-detector-v6.2.6
```

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

| **Permissão** | **Motivo**                              | **Obrigatório?** |
| ------------- | --------------------------------------- | ---------------- |
| **`CÂMERA`**  | Para capturar a(s) foto(s) do documento | Sim              |

## **Utilização**

```dart
DocumentDetector documentDetector = new DocumentDetector(mobileToken: mobileToken);
documentDetector.setDocumentFlow(List<DocumentDetectorStep> documentSteps);

// Outros parâmetros de personalização

DocumentDetectorResult documentDetectorResult = await documentDetector.start();

if (documentDetectorResult is DocumentDetectorSuccess) {
    // O SDK foi fechado com sucesso e as fotos dos documentos foram capturadas
} else if (documentDetectorResult is DocumentDetectorFailure) {
    // O SDK foi fechado devido a alguma falha e as fotos dos documentos não foram capturadas
} else {
    // O usuário simplesmente fechou o SDK, sem nenhum resultado
}
```

## **Desativando validações de segurança para testes**

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

```dart
DocumentDetectorAndroidSettings androidSettings =
    DocumentDetectorAndroidSettings(
        emulatorSettings: true,
        rootSettings: true,
        useDeveloperMode: true,
        useAdb: true,
        useDebug: true,
    );
    
documentDetector.setAndroidSettings(androidSettings);
```

> **Atenção!** Desativar as validações de segurança é recomendado apenas para ambientes de teste. Para publicar seu aplicativo em produção, recomendamos usar as configurações padrão.

### **Personalizações gerais**

| **DocumentDetector**                                                                                                                                                                                                                                                                                                                                                                                                    |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>.setPeopleId(String peopleId)</code></strong></p><p>CPF do usuário que está usando o plugin, para ser usado na detecção de fraudes via analytics</p>                                                                                                                                                                                                                                                   |
| <p><strong><code>.setAnalyticsSettings(bool useAnalytics)</code></strong></p><p>Ativa/desativa a coleta de dados para maximizar as informações antifraude. O padrão é <strong><code>true</code></strong></p>                                                                                                                                                                                                            |
| <p><strong><code>.setDocumentFlow(List\<DocumentDetectorStep> documentSteps)</code></strong></p><p>Fluxo de documentos a serem capturados no SDK</p>                                                                                                                                                                                                                                                                    |
| <p><strong><code>.setPopupSettings(bool show)</code></strong></p><p>Altera a configuração dos popups exibidos antes de cada documento. O padrão é <strong><code>true</code></strong></p>                                                                                                                                                                                                                                |
| <p><strong><code>.enableSound(bool enable)</code></strong></p><p>Ativa/desativa os sons. O padrão é <strong><code>true</code></strong></p>                                                                                                                                                                                                                                                                              |
| <p><strong><code>.setNetworkSettings(int requestTimeout)</code></strong></p><p>Altera as configurações padrão de rede. O padrão é <strong><code>60</code></strong> segundos</p>                                                                                                                                                                                                                                         |
| <p><strong><code>.setShowPreview(ShowPreview showPreview)</code></strong></p><p>Prévia para verificação da qualidade da foto</p>                                                                                                                                                                                                                                                                                        |
| <p><strong>.setAutoDetection(bool enable)</strong></p><p>Ativa/desativa a detecção automática e as verificações dos sensores. Use <strong><code>false</code></strong> para desativar todas as verificações no dispositivo. Assim, todas as validações serão realizadas no backend após a captura. O padrão é <strong><code>true</code></strong></p>                                                                     |
| <p><strong><code>.setCurrentStepDoneDelay(bool showDelay, int delay)</code></strong></p><p>Atrasar 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. O padrão é <strong><code>false</code></strong></p>                                                                                                           |
| <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.</p>                                                                                                                                                                                                                |
| <p><strong><code>.setGetImageUrlExpireTime(String expireTime)</code></strong></p><p>Define por quanto tempo a URL da imagem permanecerá no servidor até expirar. Espera-se receber um intervalo de tempo entre "30m" e "30d". O padrão é <strong><code>3h</code></strong></p>                                                                                                                                           |
| <p><strong><code>.setAndroidSettings(DocumentDetectorAndroidSettings androidSettings)</code></strong></p><p>Personalizações aplicadas apenas no Android</p>                                                                                                                                                                                                                                                             |
| <p><strong><code>.setIosSettings(DocumentDetectorIosSettings iosSettings)</code></strong></p><p>Personalizações aplicadas apenas no iOS</p>                                                                                                                                                                                                                                                                             |
| <p><strong><code>.setUploadSettings(UploadSettings uploadSettings)</code></strong></p><p>Define as configurações para envio de documentos. Ao habilitar esta opção, o fluxo do SDK solicitará ao usuário que 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. Por padrão, esta opção de fluxo não está habilitada</p> |
| <p><strong><code>.setStage(String stage)</code></strong></p><p>Permite escolher o ambiente em que o SDK será executado (produção ou beta). Os valores esperados <code>String</code> são: <strong>"PROD"</strong> e <strong>"BETA"</strong>. Esta configuração não é obrigatória; por padrão, o SDK usará o <strong>ambiente de produção</strong>.</p>                                                                   |

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

|

| **Construtor DocumentDetectorStep**                                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong><code>DocumentType document</code></strong></p><p>Documento a ser escaneado nesta respectiva etapa</p>                                            |
| <p><strong><code>DocumentDetectorStepCustomizationAndroid android</code></strong></p><p>Personalizações visuais da respectiva etapa aplicadas no Android</p> |
| <p><strong><code>DocumentDetectorStepCustomizationIos ios</code></strong></p><p>Personalizações visuais da respectiva etapa aplicadas no iOS</p>             |

| **Construtor UploadSettings**                                                                                                                                                            |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>bool compress</code></strong></p><p>Ativa/desativa a compressão do arquivo antes do envio. O padrão é <strong><code>true</code></strong></p>                            |
| <p><strong><code>int maxFileSize</code></strong></p><p>Define o tamanho máximo em KB do arquivo a ser enviado. O limite padrão é 20000 KB (20MB)</p>                                     |
| <p><strong><code>List\<String> fileFormats</code></strong></p><p>Define o(s) formato(s) de arquivo que serão aceitos para upload. Por padrão, aceita: .PDF, .JPG, .JPEG, .PNG, .HEIF</p> |
| <p><strong><code>String activityLayout</code></strong></p><p>Define o layout de fundo do envio de documentos</p>                                                                         |
| <p><strong><code>String popUpLayout</code></strong></p><p>Define o layout do popup de solicitação de envio de documentos</p>                                                             |

| **ShowPreview**                                                                                                   |
| ----------------------------------------------------------------------------------------------------------------- |
| **Como modificar:** Se você quiser modificar o texto selecionado, altere a String com a mensagem que deseja usar. |
| <p><strong><code>bool show</code></strong></p><p>Ativar/Desativar prévia</p>                                      |
| <p><strong><code>String title</code></strong></p><p>Título</p>                                                    |
| <p><strong><code>String subTitle</code></strong></p><p>Subtítulo</p>                                              |
| <p><strong><code>String confirmLabel</code></strong></p><p>Texto do botão de confirmação</p>                      |
| <p><strong><code>String retryLabel</code></strong></p><p>Texto do botão para refazer a captura</p>                |

Exemplo de uso

```dart
ShowPreview showPreview = new ShowPreview(
    show: true,
    title: "A foto ficou boa?",
    subtitle: "Veja se a foto está nítida",
    confirmLabel: "Sim, ficou boa!",
    retryLabel: "Tirar novamente");
    
documentDetector.setShowPreview(showPreview);
```

| **MessageSettings**                                                                                                                                                                      |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Como modificar:** Se você quiser modificar o texto selecionado, altere a String com a mensagem que deseja usar.                                                                        |
| <p><strong><code>String? waitMessage</code></strong></p><p>Padrão: "Por favor, aguarde..."</p>                                                                                           |
| <p><strong><code>String? fitTheDocumentMessage</code></strong></p><p>Padrão: "Encaixe o documento na marcação"</p>                                                                       |
| <p><strong><code>String? holdItMessage</code></strong> (Somente Android)</p><p>Padrão: "Segure assim"</p>                                                                                |
| <p><strong><code>String? verifyingQualityMessage</code></strong></p><p>Padrão: "Verificando a qualidade..."</p>                                                                          |
| <p><strong><code>String? lowQualityDocumentMessage</code></strong></p><p>Padrão: "Ops, não foi possível ler as informações. Tente novamente".</p>                                        |
| <p><strong><code>String? uploadingImageMessage</code></strong></p><p>Padrão: "Enviando imagem..."</p>                                                                                    |
| <p><strong><code>boolean? showOpenDocumentMessage</code></strong></p><p>Padrão: <strong><code>true</code></strong></p>                                                                   |
| <p><strong><code>String? openDocumentWrongMessage</code></strong></p><p>Padrão: "Feche seu documento e tente novamente"</p>                                                              |
| <p><strong><code>String? documentNotFoundMessage</code></strong></p><p>Padrão: "Não foi encontrado um documento"</p>                                                                     |
| <p><strong><code>String? sensorLuminosityMessage</code></strong></p><p>Padrão: "A área ao seu redor está escura demais".</p>                                                             |
| <p><strong><code>String? sensorOrientationMessage</code></strong></p><p>Padrão: "O dispositivo não está na horizontal”</p>                                                               |
| <p><strong><code>String? sensorStabilityMessage</code></strong></p><p>Padrão: "Mantenha o dispositivo parado”</p>                                                                        |
| <p><strong><code>String? unsupportedDocumentMessage</code></strong></p><p>Padrão: "Ops, parece que este documento não é compatível. Entre em contato conosco!"</p>                       |
| <p><strong><code>String? popupDocumentSubtitleMessage</code></strong></p><p>Padrão: "Posicione o documento sobre uma mesa, centralize-o na marcação e aguarde a captura automática."</p> |
| <p><strong><code>String? setPositiveButtonMessage</code></strong></p><p>Padrão: "OK, entendido!"</p>                                                                                     |
| <p><strong><code>String? wrongDocumentMessage\_RG\_FRONT</code></strong> (Somente Android)</p><p>Padrão: "Ops, esta é a frente do RG"</p>                                                |
| <p><strong><code>String? wrongDocumentMessage\_RG\_BACK</code></strong> (Somente Android)</p><p>Padrão: "Ops, este é o verso do RG".</p>                                                 |
| <p><strong><code>String? wrongDocumentMessage\_RG\_FULL</code></strong> (Somente Android)</p><p>Padrão: "Ops, este é o RG aberto"</p>                                                    |
| <p><strong><code>String? wrongDocumentMessage\_CNH\_FRONT</code></strong> (Somente Android)</p><p>Padrão: "Ops, esta é a frente da CNH"</p>                                              |
| <p><strong><code>String? wrongDocumentMessage\_CNH\_BACK</code></strong> (Somente Android)</p><p>Padrão: "Ops, este é o verso da CNH"</p>                                                |
| <p><strong><code>String? wrongDocumentMessage\_CNH\_FULL</code></strong> (Somente Android)</p><p>Padrão: "Ops, esta é a CNH aberta"</p>                                                  |
| <p><strong><code>String? wrongDocumentMessage\_CRLV</code></strong> (Somente Android)</p><p>Padrão: "Ops, este é o CRLV".</p>                                                            |
| <p><strong><code>String? wrongDocumentMessage\_RNE\_FRONT</code></strong> (Somente Android)</p><p>Padrão: "Ops, esta é a frente do RNE"</p>                                              |
| <p><strong><code>String? wrongDocumentMessage\_RNE\_BACK</code></strong> (Somente Android)</p><p>Padrão: "Ops, este é o verso do RNE"</p>                                                |

Exemplo de uso

```dart
MessageSettings messageSettings = new MessageSettings(
    fitTheDocumentMessageResIdName: "Exemplo de mensagem",
    holdItMessageResIdName: "Exemplo de mensagem",
    verifyingQualityMessageResIdName: "Exemplo de mensagem"
    lowQualityDocumentMessageResIdName:"Exemplo de mensagem" ,
    uploadingImageMessageResIdName:"Exemplo de mensagem",
    openDocumentWrongMessage: "Exemplo de mensagem",
    showOpenDocumentMessage: true);
    
documentDetector.setMessageSettings(messageSettings);
```

### **Android**

| **Construtor DocumentDetectorStepCustomizationAndroid**                                                                                                                                                                                                                                                                                                                                                                                   |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>String stepLabelStringResName</code></strong></p><p>Nome do recurso de string a ser exibido no rótulo do nome do documento. Por exemplo, se você quiser exibir a String "Test", crie uma String em <strong><code>ROOT\_PROJECT/android/app/src/main/res/values/strings.xml</code></strong> com o nome <strong><code>R.string.my\_custom\_string</code></strong> e o valor "Test" e parametriza "my\_custom\_string".</p> |
| <p><strong><code>String illustrationDrawableResName</code></strong></p><p>Nome do recurso drawable a ser exibido no popup de introdução da captura. Por exemplo, se você quiser exibir uma ilustração personalizada, salve-a em <strong><code>ROOT\_PROJECT/android/app/src/main/res/drawable/my\_custom\_illustration.png</code></strong> e parametriza "my\_custom\_illustration".</p>                                                  |
| <p><strong><code>String audioRawResName</code></strong></p><p>Nome do recurso raw a ser executado no início da captura. Por exemplo, se você quiser tocar um áudio personalizado, salve-o em <strong><code>ROOT\_PROJECT/android/app/src/main/res/raw/my\_custom\_audio.mp3</code></strong> e parametriza "my\_custom\_audio".</p>                                                                                                        |

| **Construtor DocumentDetectorAndroidSettings**                                                                                                                                                                                                                                                                     |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong><code>DocumentDetectorCustomizationAndroid customization</code></strong></p><p>Personalização do layout Android da activity</p>                                                                                                                                                                         |
| <p><strong><code>SensorSettingsAndroid sensorSettings</code></strong></p><p>Personalização das configurações do sensor de captura</p>                                                                                                                                                                              |
| <p><strong><code>List\<CaptureStage> captureStages</code></strong></p><p>Matriz de etapas para cada captura. Este parâmetro é útil se você quiser alterar a forma como o DocumentDetector executa, como configurações de detecção, captura automática ou manual, verificação da qualidade da foto etc.</p>         |
| <p><strong><code>Integer compressQuality</code></strong></p><p>Permite configurar a qualidade no processo de compressão. Por padrão, todas as capturas passam pela compressão. O método espera valores entre 50 e 100 como parâmetro, sendo 100 a melhor qualidade de compressão (recomendada). O padrão é 100</p> |
| <p><strong><code>bool enableSwitchCameraButton</code></strong></p><p>Permite ativar ou desativar o botão de troca de câmera. O padrão é <strong><code>Verdadeiro</code></strong></p>                                                                                                                               |
| <p><strong><code>Resolution resolution</code></strong></p><p>Permite definir a resolução de captura. O método recebe como parâmetro uma Resolution que fornece as opções HD, FULL\_HD, QUAD\_HD e ULTRA\_HD. O padrão é <strong><code>Resolution.ULTRA\_HD</code></strong></p>                                     |
| <p><strong><code>bool enableGoogleServices</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. O padrão é <strong><code>Verdadeiro</code></strong></p>                                          |
| <p><strong><code>bool enableEmulator</code></strong></p><p>Permite o uso de emulador quando <strong><code>true</code></strong></p>                                                                                                                                                                                 |
| <p><strong><code>bool enableRootDevices</code></strong></p><p>Permite o uso de dispositivos com root quando <strong><code>true</code></strong></p>                                                                                                                                                                 |
| <p><strong><code>bool useDebug</code></strong></p><p>Ativa/desativa o uso do app em modo de depuração. O padrão é <strong><code>false</code></strong></p>                                                                                                                                                          |

| **Construtor CaptureStage**                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>int durationMillis</code></strong></p><p>Duração, em milissegundos, desta respectiva etapa antes de avançar para a próxima, se houver. <strong><code>null</code></strong> ao infinito</p>                                                                                                                                                                                      |
| <p><strong><code>bool wantSensorCheck</code></strong></p><p>Sinalizador para definir se esta etapa ativa/desativa as validações dos sensores (luminosidade, orientação e estabilidade)</p>                                                                                                                                                                                                      |
| <p><strong><code>QualitySettings qualitySettings</code></strong></p><p>Configurações de verificação da qualidade do documento. O único parâmetro de <strong><code>QualitySettings</code></strong> é o limite de aceitação da verificação de qualidade, de 1.0 a 5.0, sendo 1.8 o recomendado</p>                                                                                                |
| <p><strong><code>DetectionSettings detectionSettings</code></strong></p><p>Configurações de detecção de documento para a câmera. Os <strong><code>DetectionSettings</code></strong> parâmetros são, respectivamente, o limite de aceitação do documento, em um valor de 0.0 a 1.0, sendo 0.91 o recomendado, e o número de quadros consecutivos corretos necessários, sendo o recomendado 5</p> |
| <p><strong><code>CaptureMode captureMode</code></strong></p><p>Modo de captura de foto. Pode ser <strong><code>CaptureMode.AUTOMATIC</code></strong> para captura automática ou <strong><code>CaptureMode.MANUAL</code></strong> para a exibição de um botão para o usuário capturar</p>                                                                                                        |

| **Construtor DocumentDetectorCustomizationAndroid**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>String styleResIdName</code></strong></p><p>Nome do recurso de estilo que define as cores do DocumentDetector. Por exemplo, se você quiser alterar as cores do SDK, crie um estilo em <strong><code>ROOT\_PROJECT/android/app/src/main/res/values/styles.xml</code></strong> com o nome <strong><code>R.style.my\_custom\_style</code></strong> seguindo o <a href="https://gist.github.com/murilofank/3ac0f921435466fd4e0b04d683597a38">modelo</a> e parametriza "my\_custom\_style".</p>                                       |
| <p><strong><code>String layoutResIdName</code></strong></p><p>Nome do layout do recurso que substituirá o layout padrão do DocumentDetector. Por exemplo, se você quiser alterar o layout do SDK, crie um layout em <strong><code>ROOT\_PROJECT/android/app/src/main/res/layout/my\_custom\_layout.xml</code></strong> seguindo o <a href="https://gist.github.com/murilofank/4548349dd1a3c412ce81db60ac3b0644">modelo</a> e parametriza "my\_custom\_layout". Verifique as bibliotecas de importação mencionadas <a href="#android">aqui</a></p> |
| <p><strong><code>String greenMaskResIdName</code></strong></p><p>Nome do recurso drawable para substituir a máscara verde padrão. Se você for usar este parâmetro, use uma máscara com a mesma área de recorte; isso é importante para o algoritmo de detecção. Por exemplo, salve a imagem da máscara em <strong><code>ROOT\_PROJECT/android/app/src/main/res/drawable/my\_custom\_green\_mask.png</code></strong> e parametriza "my\_custom\_green\_mask".</p>                                                                                  |
| <p><strong><code>String redMaskResIdName</code></strong></p><p>Nome do recurso drawable para substituir a máscara vermelha padrão. Se você for usar este parâmetro, use uma máscara com a mesma área de recorte; isso é importante para o algoritmo de detecção. Por exemplo, salve a imagem da máscara em <strong><code>ROOT\_PROJECT/android/app/src/main/res/drawable/my\_custom\_red\_mask.png</code></strong> e parametriza "my\_custom\_red\_mask".</p>                                                                                     |
| <p><strong><code>String whiteMaskResIdName</code></strong></p><p>Nome do recurso drawable para substituir a máscara branca padrão. Se você for usar este parâmetro, use uma máscara com a mesma área de recorte; isso é importante para o algoritmo de detecção. Por exemplo, salve a imagem da máscara em <strong><code>ROOT\_PROJECT/android/app/src/main/res/drawable/my\_custom\_white\_mask.png</code></strong> e parametriza "my\_custom\_white\_mask".</p>                                                                                 |
| <p><strong><code>MaskType maskType</code></strong></p><p>Define o tipo de máscara usada nas capturas. Existem três tipos: <strong><code>MaskType.DEFAULT</code></strong>, com o padrão pontilhado no formato do documento; <strong><code>MaskType.DETAILED</code></strong>, que exibe uma ilustração do documento solicitado, juntamente com a máscara pontilhada; <strong><code>MaskType.NONE</code></strong>, que remove completamente a máscara. O padrão é <strong><code>MaskType.DEFAULT</code></strong></p>                                 |

| **Construtor SensorSettingsAndroid**                                                                                                                                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>SensorLuminositySettingsAndroid sensorLuminositySettings</code></strong></p><p>Configurações do sensor de luminosidade a serem aplicadas em todas as etapas do SDK</p> |
| <p><strong><code>SensorOrientationSettingsAndroid sensorOrientationSettings</code></strong></p><p>Configurações do sensor de orientação a serem aplicadas em todas as etapas do SDK</p> |
| <p><strong><code>SensorStabilitySettingsAndroid sensorStabilitySettings</code></strong></p><p>Configurações do sensor de orientação a serem aplicadas em todas as etapas do SDK</p>     |

| **Construtor SensorLuminositySettingsAndroid**                                                                                                                                |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>int luminosityThreshold</code></strong></p><p>Limite inferior entre brilho aceitável/não aceitável, em lx. O padrão é <strong><code>5</code></strong> lx</p> |

| **Construtor SensorOrientationSettingsAndroid**                                                                                                                                                                                                |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>double orientationThreshold</code></strong></p><p>Limite inferior entre orientação correta/incorreta, em variação de m/s² em relação à orientação totalmente horizontal. O padrão é <strong><code>3</code></strong> m/s².</p> |

| **Construtor SensorStabilitySettingsAndroid**                                                                                                                                                                                    |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>int stabilityStabledMillis</code></strong></p><p>Quantos milissegundos o dispositivo móvel deve permanecer no limite correto para ser considerado estável. O padrão é <strong><code>2000</code></strong> ms</p> |
| <p><strong><code>double stabilityThreshold</code></strong></p><p>Limite inferior entre estável/instável, na variação em m/s² entre as duas últimas coletas do sensor. O padrão é <strong><code>0.5</code></strong> m/s².</p>     |

### **iOS**

| **Construtor de DocumentDetectorIosSettings**                                                                                                                                                                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p><strong><code>double detectionThreshold</code></strong></p><p>Limite de aceitação do documento, em um valor de 0.0 a 1.0. O padrão é 0.95</p>                                                                                                                                                       |
| <p><strong><code>bool verifyQuality</code></strong></p><p>Sinaliza se você deseja verificar a qualidade do documento capturado</p>                                                                                                                                                                     |
| <p><strong><code>double qualityThreshold</code></strong></p><p>Limite de aceitação da qualidade, entre 1.0 e 5.0. 1.8 é recomendado para OCR futuro</p>                                                                                                                                                |
| <p><strong><code>Personalização DocumentDetectorCustomizationIos</code></strong></p><p>Personalização visual do DocumentDetector</p>                                                                                                                                                                   |
| <p><strong><code>SensorSettingsIos sensorSettings</code></strong></p><p>Configurações personalizadas do sensor no iOS, nulo para desativar</p>                                                                                                                                                         |
| <p><strong><code>Bool enableManualCapture</code></strong></p><p>Ativa o modo de captura manual</p>                                                                                                                                                                                                     |
| <p><strong><code>double timeEnableManualCapture</code></strong></p><p>Tempo para habilitar o botão de captura manual</p>                                                                                                                                                                               |
| <p><strong><code>double compressQuality</code></strong></p><p>Permite definir a qualidade no processo de compressão. Por padrão, todas as capturas são compactadas. O método espera como parâmetro valores entre 0 e 1.0, sendo 1.0 a melhor compressão em qualidade (recomendada). O padrão é 1.0</p> |
| <p><strong><code>String resolution</code></strong></p><p>Permite definir a resolução de captura. O método recebe como parâmetro uma <strong><code>String IosResolution</code></strong> (o padrão é <strong><code>hd1280x720</code></strong>), que possui as seguintes opções:</p>                      |

| **Resolução**       | **Descrição**                                                                                                                               |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **`low`**           | Especifica as configurações de captura apropriadas para taxas de bits de vídeo e áudio de saída adequadas para compartilhamento via 3G      |
| **`medium`**        | Especifica as configurações de captura apropriadas para as taxas de bits de vídeo e áudio de saída adequadas para compartilhamento via WiFi |
| **`high`**          | Especifica as configurações de captura apropriadas para saída de vídeo e áudio em alta qualidade                                            |
| **`photo`**         | Especifica as configurações de captura apropriadas para saída de qualidade de foto em alta resolução                                        |
| **`inputPriority`** | Especifica as configurações de captura apropriadas para saída de qualidade de foto em alta resolução                                        |
| **`hd1280x720`**    | Especifica as configurações de captura apropriadas para saída de vídeo em qualidade 720p (1280 x 720 pixels)                                |
| **`hd1920x1080`**   | Configurações de captura adequadas para saída de vídeo em qualidade 1080p (1920 x 1080 pixels)                                              |
| **`hd4K3840x2160`** | Configurações de captura adequadas para saída de vídeo em qualidade 2160p (3840 x 2160 pixels)                                              |

| **Construtor de DocumentDetectorCustomizationIos**                                                                                                                                                                                                                                                                               |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>String colorHex</code></strong></p><p>A cor do tema do SDK. Por exemplo, se você quiser usar a cor preta, use "#000000".</p>                                                                                                                                                                                    |
| <p><strong><code>String greenMaskImageName</code></strong></p><p>Nome da imagem para substituir a máscara verde padrão. Lembre-se de adicionar a imagem em <strong><code>Assets Catalog Document</code></strong> no seu projeto XCode</p>                                                                                        |
| <p><strong><code>String whiteMaskImageName</code></strong></p><p>Nome da imagem para substituir a máscara branca padrão. Lembre-se de adicionar a imagem em <strong><code>Assets Catalog Document</code></strong> no seu projeto XCode</p>                                                                                       |
| <p><strong><code>String redMaskImageName</code></strong></p><p>Nome da imagem para substituir a máscara vermelha padrão. Lembre-se de adicionar a imagem em <strong><code>Assets Catalog Document</code></strong> no seu projeto XCode</p>                                                                                       |
| <p><strong><code>String closeImageName</code></strong></p><p>Nome da imagem para substituir o botão de fechar do SDK. Lembre-se de adicionar a imagem em <strong><code>Assets Catalog Document</code></strong> no seu projeto XCode</p>                                                                                          |
| <p><strong><code>bool showStepLabel</code></strong></p><p>Sinaliza se deve mostrar o rótulo da etapa atual</p>                                                                                                                                                                                                                   |
| <p><strong><code>bool showStatusLabel</code></strong></p><p>Sinaliza se deve mostrar o rótulo do status atual</p>                                                                                                                                                                                                                |
| <p><strong><code>double? buttonSize</code></strong></p><p>Valor que define o tamanho do botão "fechar" no SDK</p>                                                                                                                                                                                                                |
| <p><strong><code>String? buttonContentMode</code></strong></p><p>Atributo que define o modo de conteúdo do botão "fechar" no SDK. Escolha entre <a href="https://github.com/combateafraude/public-docs/blob/docs-sdks/flutter/deprecated-sdks/release-notes/obsolete-sdks-releases.md#27-de-maio-de-2022">estes valores</a>.</p> |

| **Construtor de SensorSettingsIos**                                                                                                                                         |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>SensorLuminositySettingsIos sensorLuminosity</code></strong></p><p>Configurações do sensor de luminosidade a serem aplicadas em todas as etapas do SDK</p> |
| <p><strong><code>SensorOrientationSettingsIos sensorOrientation</code></strong></p><p>Configurações do sensor de orientação a serem aplicadas em todas as etapas do SDK</p> |
| <p><strong><code>SensorStabilitySettingsIos sensorStability</code></strong></p><p>Configurações do sensor de estabilidade a serem aplicadas em todas as etapas do SDK</p>   |

| **Construtor de SensorLuminositySettingsIos**                                                                                                                         |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>double luminosityThreshold</code></strong></p><p>Limite entre brilho ambiente aceitável/inaceitável. O padrão é <strong><code>-3</code></strong></p> |

| **Construtor SensorOrientationSettingsAndroid**                                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>double orientationThreshold</code></strong></p><p>Limite entre orientação correta/incorreta do dispositivo. Quanto maior o valor, mais flexível ele será. O valor padrão é <strong><code>3</code></strong> m/s².</p> |

| **Construtor SensorStabilitySettingsAndroid**                                                                                                                                                                       |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong><code>double stabilityStabledMillis</code></strong></p><p>Tempo entre as coletas do sensor. O padrão é <strong><code>2000</code></strong> ms.</p>                                                        |
| <p><strong><code>double stabilityThreshold</code></strong></p><p>Limite entre estável/instável, na variação em m/s² entre as duas últimas coletas do sensor. O padrão é <strong><code>0.5</code></strong> m/s².</p> |

### **Coletando o resultado**

O objeto de retorno do DocumentDetector é do tipo abstrato **`DocumentDetectorResult`**. Ele pode ser uma instância de **`DocumentDetectorSuccess`**, **`DocumentDetectorFailure`** ou **`DocumentDetectorClosed`**.

### **DocumentDetectorSuccess**

| **Campo**                                                                                                                                                                                                                                                                                                                       | **Observação**                                                                                        |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| <p><strong><code>List\<Capture> captures</code></strong></p><p>Lista de capturas do documento</p>                                                                                                                                                                                                                               | Ela terá o mesmo comprimento e a mesma ordem que o parâmetro \*\*`List<DocumentDetectorStep>` \*\*    |
| <p><strong><code>String type</code></strong></p><p>Tipo de documento detectado pelo próprio SDK, útil para integração com nossa rota externa de OCR. Por exemplo, se você capturar <strong><code>DocumentType.CNH\_FRONT</code></strong> e <strong><code>DocumentType.CNH\_BACK</code></strong>, este parâmetro será "cnh".</p> | Será nulo se o SDK não conseguir verificar o tipo do documento ou se a detecção estiver desativada    |
| <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. Assim teremos mais dados sobre como o usuário se comportou durante a execução</p>                                                                           | Será nulo se o usuário definir **`useAnalytics = false`** ou as chamadas de analytics não funcionarem |

### **Captura**

| **Campo**                                                                                                                                                                                                                                                                          | **Observação**                                                                                    |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| <p><strong><code>String imagePath</code></strong></p><p>Endereço completo da imagem no dispositivo</p>                                                                                                                                                                             | -                                                                                                 |
| <p><strong><code>String imageUrl</code></strong></p><p>URL da imagem armazenada temporariamente nos servidores da CAF</p>                                                                                                                                                          | Será nulo se o SDK não conseguir verificar a qualidade ou se a qualidade estiver desativada       |
| <p><strong><code>String label</code></strong></p><p>Rótulo de detecção da captura. Por exemplo, se a captura se referir a um <strong><code>DocumentType.RG\_FRONT</code></strong>, este rótulo pode ser "rg\_front" ou "rg\_new\_front", que se refere aos novos modelos de RG</p> | Será nulo se a foto for coletada em uma etapa em que a detecção esteja desativada                 |
| <p><strong><code>double quality</code></strong></p><p>Qualidade da foto do documento, em um valor de 1.0 a 5.0</p>                                                                                                                                                                 | Será nulo se a foto for coletada em uma etapa em que a verificação de qualidade esteja desativada |

### **DocumentDtetectorFailure**

| **Campo**                                                                                                   |
| ----------------------------------------------------------------------------------------------------------- |
| <p><strong><code>String message</code></strong></p><p>Mensagem amigável explicando por que o SDK falhou</p> |
| <p><strong><code>String type</code></strong></p><p>Tipo de falha que encerrou o SDK</p>                     |

Os tipos de falha existentes são:

* **`InvalidTokenReason`**: quando o token informado é inválido. Isso não deve ocorrer em um ambiente de produção;
* **`PermissionReason`**: quando alguma permissão obrigatória não foi concedida pelo usuário. Isso só ocorrerá em um ambiente de produção se seu app não solicitar ao usuário ou se o usuário a desativar manualmente antes de iniciar;
* **`NetworkReason`**: falha na conexão com o servidor. Isso ocorrerá em produção se o dispositivo do usuário não estiver conectado à Internet;
* **`ServerReason`**: falha em alguma requisição aos nossos servidores;
* **`SecurityReason`**: quando o dispositivo não é seguro para executar o SDK;
* **`StorageReason`**: quando o dispositivo não tem espaço suficiente para capturar uma foto. Isso pode acontecer em produção;
* **`LibraryReason`**: quando alguma falha interna tornou impossível executar o SDK. Isso pode ocorrer devido a erros de configuração do projeto e não deve ocorrer em produção;

### **Personalizando views no iOS**

Para personalização no iOS, é necessário que os plugins do Flutter sejam adicionados localmente ao projeto. A personalização é feita nativamente com a abordagem ViewCode.

\*\*\*\*[**Clique** **aqui** ](https://github.com/combateafraude/Flutter/tree/ios-customization-example)para um exemplo com um guia de uso deste recurso.


---

# 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/flutter/standalone-modules/deprecated-sdks/document-detector/v6-and-below.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.
