> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/resultados.md).

# Resultados

Nesta página explicaremos as diferentes possibilidades para finalizar o processo de captura do Widget.

Cada detalhe de cada evento (atributos, dados...) foi especificado na página ([Eventos](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/eventos.md)).

## Casos de sucesso

### Captura e extração bem-sucedidas

No momento em que a captura do Template Biométrico é concluída, os resultados extraídos serão oferecidos no evento `extractionFinish` ([link](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/eventos/extractionfinish.md)).

{% hint style="info" %}
Uma vez que este evento é emitido, a lógica para carregar a próxima view ou Widget deve ser implementada adaptando-se ao contexto da aplicação.
{% endhint %}

Há um exemplo:

```typescript
import { type ExtractionFinishEvent } from "@facephi/selphi-web-component";

const selphiWidget = document.querySelector('facephi-selphi-widget');
selphiWidget.addEventListener('extractionFinish', onExtractionFinish);

function onExtractionFinish(event: CustomEvent<ExtractionFinishEvent>) {
  const result = event.detail.detail;
  console.log('extractionFinish:', result);

  // Procesar los resultados en el backend
  saveResults(result.extractionData.bestImage, result.extractionData.templateRaw);

  // Cargar el siguiente widget o vista
  loadNextView();
}
```

***

## Casos de erro

É recomendado controlar os possíveis erros que podem ocorrer ao processar os dados obtidos para evitar mau funcionamento interno, uso incorreto do Widget ou ataques de força bruta.

### Códigos de erro

O Widget lançará uma exceção se ocorrer qualquer erro de uso ou interno.

As exceções poderão ser de dois tipos:

* Exceção terminal: Erro que será lançado quando o Widget não puder continuar sua execução. Esses erros podem ocorrer em ambientes ou configurações incorretas.
* Exceção de extração: Erro que será lançado durante o fluxo de captura ou extração. Esses erros permitem tentar novamente o fluxo do Widget, pois se devem a um uso incorreto do Widget por parte do usuário.

<table><thead><tr><th width="266.15625">Erro</th><th width="87.30078125">Código</th><th>Descrição</th></tr></thead><tbody><tr><td><strong>Exceções terminais</strong></td><td></td><td></td></tr><tr><td>AndroidWebViewBehaviour</td><td>SPI_227</td><td>Erro produzido após a execução do componente em um WebView em um ambiente Android.</td></tr><tr><td>UnknownInternalError</td><td>SPI_235</td><td>Erro interno no Widget. Se o erro persistir, será necessário entrar em contato com a equipe de suporte da Facephi</td></tr><tr><td>CameraHardwareError</td><td>SPI_204</td><td>Erro produzido durante o acesso às câmeras do dispositivo.</td></tr><tr><td>PermissionsDenied</td><td>SPI_242</td><td>Erro gerado ao não permitir as permissões necessárias para a execução do Widget.</td></tr><tr><td>CameraPermissionDenied</td><td>SPI_201</td><td>Erro ao não conceder as permissões para utilizar a(s) câmera(s) do dispositivo.</td></tr><tr><td>MicrophonePermissionDenied</td><td>SPI_218</td><td>Erro ao não conceder as permissões para utilizar o(s) microfone(s) do dispositivo.</td></tr><tr><td>SettingsError</td><td>SPI_219</td><td>Erro produzido por uma configuração incorreta.</td></tr><tr><td>BrowserApiNotCompatible</td><td>SPI_220</td><td>Erro produzido por um navegador não compatível.</td></tr><tr><td>SpoofingDetected</td><td>SPI_221</td><td>Erro gerado ao detectar um ataque de injeção no Widget.</td></tr><tr><td>ActiveLivenessError</td><td>SPI_205</td><td>Erro gerado ao falhar o teste de vida ativa na execução do Widget.</td></tr><tr><td><strong>Exceções de extração</strong></td><td></td><td></td></tr><tr><td>ErrorTimeout</td><td>SPI_001</td><td>Erro gerado ao ter excedido o limite de tempo estabelecido para a extração.</td></tr><tr><td>FaceNotFound</td><td>SPI_222</td><td>Erro gerado ao não encontrar um rosto durante o processo de captura.</td></tr><tr><td>EyesNotFound</td><td>SPI_223</td><td>Erro gerado ao não detectar os olhos no processo de captura.</td></tr><tr><td>OccludedEyes</td><td>SPI_237</td><td>Erro gerado ao reconhecer os olhos cobertos no processo de captura.</td></tr><tr><td>OccludedMouth</td><td>SPI_238</td><td>Erro gerado ao reconhecer a boca coberta no processo de captura.</td></tr><tr><td>DarkLightError</td><td>SPI_224</td><td>Erro gerado ao detectar pouca iluminação no processo de captura.</td></tr><tr><td>AngleExceeded</td><td>SPI_225</td><td>Erro gerado ao detectar um ângulo excessivo do rosto do usuário no processo de captura.</td></tr><tr><td>TooManyFaces</td><td>SPI_226</td><td>Erro gerado ao detectar vários rostos no processo de captura.</td></tr><tr><td>NotStabilizedSunGlasses</td><td>SPI_223</td><td>Erro gerado ao detectar óculos de sol no usuário no processo de captura.</td></tr><tr><td>NotStabilizedNoColor</td><td>SPI_224</td><td>Erro gerado ao não detectar cor no processo de captura.</td></tr></tbody></table>

***

### Limite de tempo excedido durante a captura do Template Biométrico

Com os eventos `extractionTimeout` ([link](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/eventos/extractiontimeout.md)) e `timeoutErrorButtonClick` ([link](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/eventos/timeouterrorbuttonclick.md)) é possível controlar quando o usuário excede o tempo alocado ou as tentativas utilizadas.

Há um exemplo:

```typescript
import { type ExtractionTimeoutEvent, type TimeoutButtonClickEvent } from "@facephi/selphi-web-component";

const selphiWidget = document.querySelector('facephi-selphi-widget');
selphiWidget.addEventListener('extractionTimeout', onErrorTimeout);
selphiWidget.addEventListener('timeoutErrorButtonClick', onTimeoutButtonClick);
let userRetries = 0;

// El usuario no ha completado la extracción del patrón facial dentro del tiempo permitido
const onExtractionTimeout = (event: CustomEvent<ExtractionTimeoutEvent>) => {
  if (userRetries >= 3) {
    // Redirigir al usuario a una vista de error
    showRetriesExceededView();
  }
}

// El usuario ha hecho clic en el botón para reintentar la extracción en la vista de tiempo de espera del widget
const onTimeoutButtonClick = (event: CustomEvent<TimeoutButtonClickEvent>) => {
  userRetries++;
}
```

***

### Tentativas de captura esgotadas

Como alternativa à contagem manual da seção anterior, a propriedade [maxAttempts](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/propiedades/maxattempts.md) delega o limite de tentativas ao próprio Widget. Quando se esgotam, o Widget para de tentar novamente e emite `maxAttemptsExceeded` ([link](/docs.facephi-pt-br/sdks/sdk-web/componentes/selphi-biometria-facial/eventos/maxattemptsexceeded.md)).

Há um exemplo:

```typescript
import { type MaxAttemptsExceededEvent } from "@facephi/selphi-web-component";

const selphiWidget = document.querySelector('facephi-selphi-widget');
selphiWidget.maxAttempts = 3;
selphiWidget.addEventListener('maxAttemptsExceeded', onMaxAttemptsExceeded);

// El usuario ha consumido todos los intentos de captura permitidos
function onMaxAttemptsExceeded(event: CustomEvent<MaxAttemptsExceededEvent>) {
  const detail = event.detail.detail;
  console.log('maxAttemptsExceeded:', detail.message);

  // Redirigir al usuario a una vista de error
  showRetriesExceededView();
}
```

***

### O usuário fecha o Widget antes da captura do documento

Este evento se emite cuando el usuario hace clic en el ícono de salir del widget para cancelar el proceso de extracción. Una vez que se presiona el botón, el widget se cerrará.

Exemplo de código

```typescript
import { type UserCancelEvent } from "@facephi/selphi-web-component";
  
const selphiWidget = document.querySelector('facephi-selphi-widget');
selphiWidget.addEventListener('userCancel', handleUserCancel);

// El usuario ha hecho clic en el ícono de salir del widget para cancelar el proceso de extracción
function handleUserCancel(event: CustomEvent<UserCancelEvent>) {
  // Redirigir al usuario a la página principal del sitio web
  goLandingPage();
}
```

***

### Exceções terminais durante o ciclo de vida do Widget

Este evento se emite cuando se detecta un mal funcionamiento del sistema. Se puede usar para identificar y filtrar diferentes tipos de errores encontrados durante el proceso de captura.

Exemplo de código:

```typescript
import { type ExceptionCapturedEvent, type ErrorTimeoutEvent } from "@facephi/selphi-web-component";

const selphiWidget = document.querySelector('facephi-selphi-widget');
selphiWidget.addEventListener('exceptionCaptured', handleExceptionCaptured);
selphiWidget.addEventListener('errorTimeout', handleErrorTimeout);

// Se detecta un mal funcionamiento y el widget se ha detenido
function handleExceptionCaptured(event: CustomEvent<ExceptionCapturedEvent>) {
  const exceptionDetail = event.detail.detail;
  console.error('Widget Exception:', exceptionDetail.exceptionType);
}

// Se ha alcanzado el tiempo establecido en la propiedad `errorTimeout`
function handleErrorTimeout(event: CustomEvent<ErrorTimeoutEvent>) {
  const errorTimeoutDetail = event.detail.detail;
  // Redirigir al usuario a una vista de error
  showErrorView(errorTimeoutDetail.exceptionType);
}
```

***
