# Fluxos do SPID Services

Este documento descreve brevemente os fluxos de operação do **SPID Services**, a API para integração com o *SPID Client*.

Há dois fluxos essenciais, *Captura Presencial* e *Captura Remota*, detalhados a abaixo.

## Captura Presencial

O fluxo de operação para captura presencial segue o diagrama abaixo, e a principal diferenciação depende do CPF consultado já existir na base. Todas as operações mencionadas neste fluxo estão detalhadas no manual [SPID Services API](https://docs.griaule.com/psbio/spid/broken-reference).

![Fluxo SPID Services: Captura Presencial](https://316985283-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-ebbafc9281fc17e24cc48bc9c357674c936e43b6%2Ffluxo_spid_services_presencial.png?alt=media)

### Autenticação

1. A aplicação deve se autenticar no SPID Client com a chamada [Login](https://docs.griaule.com/psbio/spid/broken-reference) e se certificar que a operação foi bem sucedida com a chamada [Login Status](https://docs.griaule.com/psbio/spid/broken-reference).
2. A aplicação deve iniciar uma verificação chamando [Verify](https://docs.griaule.com/psbio/spid/broken-reference) com o CPF do indivíduo.

Caso o CPF do indivíduo não esteja na base, a chamada retornará *PERSON\_NOT\_FOUND*, e a aplicação deverá seguir [Indivíduo Não Cadastrado](#individuo-nao-cadastrado). Caso contrário, deverá seguir o [Indivíduo Já Cadastrado](#individuo-ja-cadastrado).

### Indivíduo Não Cadastrado

1. A aplicação precisa realizar o *enroll* do indivíduo, chamando [Enroll](https://docs.griaule.com/psbio/spid/broken-reference) (Enroll) e chamar [Capture Status](https://docs.griaule.com/psbio/spid/broken-reference) até obter o status *CLIENT\_CAPTURE\_DONE*.
2. A aplicação deve iniciar a autenticação biométrica do operador com [Operator Capture](https://docs.griaule.com/psbio/spid/broken-reference), e chamar [Capture Status](https://docs.griaule.com/psbio/spid/broken-reference) até obter a indicação de sucesso *OPERATOR\_CAPTURE\_DONE*.
3. A aplicação deve enviar a captura com [Capture Send](https://docs.griaule.com/psbio/spid/broken-reference) (*Send*). Neste caso, a operação será assíncrona, o a resposta esperada é *CAPTURE\_ENQUEUED*.
4. Opcionalmente, a aplicação pode consultar o status do processamento do enroll com [Capture Result by ID](https://docs.griaule.com/psbio/spid/broken-reference). O processamento do enroll pode ser demorado, e a aplicação não deve assumir que obterá uma resposta definitiva em um curto período de espera.
5. A aplicação pode obter o relatório da operação com [Capture Report](https://docs.griaule.com/psbio/spid/broken-reference), concluindo o fluxo de tratamento do indivíduo.

### Indivíduo Já Cadastrado

1. A chamada **Verify** retornará *CLIENT\_CAPTURING* e será iniciada a captura biométrica do indivíduo. A aplicação deve chamar [Capture Status](https://docs.griaule.com/psbio/spid/broken-reference) até obter indicação que a captura foi concluída, *CLIENT\_CAPTURE\_DONE*.
2. A aplicação deve iniciar a autenticação biométrica do operador com [Operator Capture](https://docs.griaule.com/psbio/spid/broken-reference), e chamar [Capture Status](https://docs.griaule.com/psbio/spid/broken-reference) até obter a indicação de sucesso *OPERATOR\_CAPTURE\_DONE*.
3. A aplicação deve enviar a captura com [Capture Send](https://docs.griaule.com/psbio/spid/broken-reference) (*Send*). Neste caso, a operação será síncrona e retornará a resposta *VERIFIED* indicando sucesso.
4. A aplicação deve obter o status o match biométrico, chamando [Capture Result by ID](https://docs.griaule.com/psbio/spid/broken-reference) com o *TGUID* recebido no passo anterior. Se não houve match (*SEARCH\_NOT\_MATCH*), a aplicação pode, se desejar, realizar o enroll do indivíduo.
5. A aplicação pode obter o relatório da operação com [Capture Report](https://docs.griaule.com/psbio/spid/broken-reference), concluindo o fluxo de tratamento do indivíduo.

### Reenvios

Os envios (**Capture Send**) podem falhar por erros de transmissão e falhas temporárias de infra-estrutura (servidores indisponíveis ou sobrecarregados). Recomenda-se que a aplicação realize uma vez por dia o reenvio das operações pendentes, chamando [Capture Resend All](https://docs.griaule.com/psbio/spid/broken-reference) (*Capture Resend All*).

## Captura Remota

O fluxo de operação para captura remota através de serviço externo de verificação, que inclui um aplicativo instalado no dispositivo (smartphone/tablet) do cliente, segue o diagrama abaixo. Todas as operações mencionadas neste fluxo estão detalhadas no manual [SPID Services API](https://docs.griaule.com/psbio/spid/broken-reference). A captura remota permite tanto a verificação de clientes já cadastrados na base (Remote Verify) como o cadastro de novos clientes (Remote Enroll).

![Fluxo SPID Services: Captura Remota](https://316985283-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-0a13df1762df2220eca4eff1bf8ffe8685c2de31%2Ffluxo_spid_services_remoto.png?alt=media)

### Autenticação

1. A aplicação deve se autenticar no SPID Client com a chamada [Login](https://docs.griaule.com/psbio/spid/broken-reference) e se certificar que a operação foi bem sucedida com a chamada [Login Status](https://docs.griaule.com/psbio/spid/broken-reference).

### Captura do Operador

1. A aplicação deve iniciar a autenticação biométrica do operador com [Operator Capture](https://docs.griaule.com/psbio/spid/broken-reference), e chamar [Capture Status](https://docs.griaule.com/psbio/spid/broken-reference) até obter a indicação de sucesso *OPERATOR\_CAPTURE\_DONE*.

### Verificação Remota do Cliente

1. A aplicação deve iniciar a verificação remota do cliente com a a chamada [Remote Verify](https://docs.griaule.com/psbio/spid/broken-reference). Esta chamada retornará uma *URL* (usada pelo aplicativo externo do cliente para submeter os dados biométricos para verificação) e um *TGUID* (identificador da transação).
2. A *URL* é repassada ao serviço de verificação remota, que realizará a captura biométrica (através de aplicativo no dispositivo do cliente) e utilizará a URL para submeter os dados biométricos capturados.
3. A aplicação deve verificar o resultado da verificação biométrica com a chamada [Remote Verify Result by ID](https://docs.griaule.com/psbio/spid/broken-reference), que retornará *SEARCH\_MATCH* ou *SEARCH\_NOT\_MATCH*, indicando o resultado da operação.
