Processamento

A rotina de Processamento compreende o trabalho de conciliação dos dados recebidos pelas instituições, bem como o procedimento de fechamento periódico.

O desenho esquemático abaixo mostra como esse processo funciona:

Desenho esquemático do processo de conciliação

Conciliação

O processo de conciliação consiste em encontrar os reportes feitos por duas instituições que representem a requisição e a devida resposta de uma transação de negócio. O processo acontece de maneira assíncrona após a recepção do reporte, e consiste em se buscar um reporte que contenha o mesmo valor no atributo fapiInteractionId. Se esse reporte-par não existir, o reporte corrente é considerado não pareado (status UNPAIRED). Caso esse registro exista, a segunda etapa de validação busca conciliar os campos clientOrgId, serverOrgId, statusCode, httpMethod e endpoint. Se esses campos estiverem com valores iguais nos dois reportes, ambos serão considerados conciliados (status PAIRED). Caso esses dados não sejam iguais, eles são considerados pareados e inconsistentes (status PAIRED_INCONSISTENT), e portanto divergentes. Existe um caso onde o client não gera o fapiInteractionId e não recebe uma resposta do server (p/ex: em casos de timeout - code 408 - ou erros de servidor - série 5xx), e portanto o campo fapiInteractionId não será enviado pelo client. Nesse caso, existe uma validação na entrada do reporte que verifica o campo statusCode: caso o valor seja diferente de 408 ou da série 5xx, esse reporte será marcado imediatamente como DISCARDED. Caso contrário, ele será enviado para validação e será conciliado como SINGLE, uma vez que não existirá uma contraparte possível.

Para maiores informações sobre cada status, consulte o tópico Ciclo de vida do reporte mais abaixo. O fluxo da regra de conciliação é descrita no diagrama a seguir:

Diagrama de atividades do processo de conciliação

 

Importante

Os participantes devem sempre que possível enviar os reportes dos dois lados, seja como server ou como client, mesmo que a chamada não tenha sido bem sucedida, uma vez que elas serão usadas para fins de controle estatístico e de monitoramento do ecossistema (objetivo principal da plataforma), incluindo casos de erros http séries 5xx, 4xx, etc.

Fases do processamento

O processo de conciliação ocorre em três momentos do fluxo de processamento dos reportes: Recepção, Fechamento e na Resolução de Divergências.

Recepção

Quando um report é recebido pela API, ele é validado e enfileirado para que cada reporte seja processado individualmente. É nesse momento que a maioria dos reportes serão conciliados.

Fechamento

No momento do fechamento, a plataforma busca por todos os registros que ainda permanecem como pendentes e aplica a regra da conciliação sobre eles. Esse passo é necessário para evitar eventuais problemas de concorrência no processamento em tempo real. O momento do fechamento e os SLAs a serem cumpridos pelo sparticipantes serão oportunamente definidos pelos GTs responsáveis.

Resolução de Divergências

Registros com os status UNPAIRED e PAIRED_INCONSISTENT são considerados divergentes e deverão passar pelo processo de resolução. Este processo será oportunamente definido pelos GT responsáveis.

Ciclo de vida do reporte

O diagrama abaixo ilustra as interações entre os status de um reporte:

 

Um reporte deverá sempre estar em um dos seguinte status:

DISCARDED

 

O status DISCARDED indica que o reporte foi enviado pelo participante e será descartado para fins de composição de métricas. Ainda que não utilizado nas métricas, ele será persistido e só será utilizado em relatórios estatísticos, não sendo possível corrigí-lo e nem utilizá-lo em nenhum processo de negócio. Esse status é devolvido para o participante de maneira síncrona no momento da inclusão do reporte. Consulte a documentação da API para informações sobre o schema a ser enviado.
Transições: N/A (estado terminal)

ACCEPTED

 

O status ACCEPTED indica que a validação de formato do reporte não apresentou erros e este será enviado para processamento.
Transições:
[1] Transiciona para PAIRED para indicar que outro reporte foi encontrado com o mesmo fapiInteractionId e os demais dados foram conciliados
[2] Transiciona para PAIRED_INCONSISTENT quando outro reporte foi encontrado com o mesmo fapiInteractionId mas os demais dados não foram conciliados
[3] Transiciona para UNPAIRED quando não existe outro reporte com o mesmo fapiInteractionId.
[7] Transiciona para SINGLE quando não existe fapiInteractionId e o status é 408 (timeout) ou da série 5xx.
[9] Transiciona para DISCARDED quando existe algum tipo de erro semântico no reporte.

SINGLE

 

O status SINGLE indica que o reporte em questão não tem uma contraparte. Ele é utilizado em casos onde a conciliação entre dois reportes não é possível. Os casos onde isso pode ocorrer são:

  • Impossibilidade de conciliação por falta de fapiInteractionId: ocorre quando o client não gera o fapiInteractionId e o server está impossibilitado de responder à requisição - o que pode acontecer em um caso de timeout ou em um erro 5xx. Nesse caso, o reporte é considerado válido uma vez que ele representa uma chamada que será contabilizada em métricas.

  • Resolução de divergência manual: ocorre quando um reporte está divergente e não há uma possibilidade de conciliação por falha no processo. Nesses casos, uma intervenção manual pode colocar o reporte em questão como SINGLE (ou DISCARDED dependendo do tipo de resolução).

 

Transições: N/A (estado terminal)

UNPAIRED

 

O status UNPAIRED significa que o reporte atual não possui uma correspondência em outro reporte através do atributo fapiInteractionId. Indica um reporte divergente.
Transições:
[4] Transiciona para PAIRED para indicar que outro reporte foi encontrado com o mesmo fapiInteractionId e os demais dados foram conciliados. Esse processo só vai acontecer quando o reporte par for enviado.
[5] Transiciona para PAIRED_INCONSISTENT caso um reporte seja enviado com o mesmo fapiInteractionId mas algum dado esteja inconsistênte entre os reportes.
[8] Transiciona para SINGLE caso o reporte seja válido, mas não haja a possibilidade de conciliá-lo com outro reporte.

PAIRED_INCONSISTENT

 

O status PAIRED_INCONSISTENT significa que o reporte corrente possui uma contraparte com o mesmo fapiInteractionId, mas algum dado esteja inconsistente entre os reportes. Indica um reporte divergente.
Transições:
[6] Transiciona para PAIRED caso o processo de resolução de divergência"*" corrija um dos dois reportes. Processo a ser definido.

PAIRED

 

Indica que o reporte tem uma contraparte com o mesmo fapiInteractionId e os demais dados estão conciliados. Representa o estado final desejado em um fluxo correto.
Transições: N/A (estado terminal)