Requisição de consulta
Um consumidor envia uma consulta com o documento do tomador, o tipo de cliente e um intervalo de datas de referência. A requisição também declara a autorização do titular sob a LC 105/2001. Essa declaração é uma flag obrigatória, e o registro de consentimento fica com a instituição. A chamada é síncrona. O resultado decodificado chega no corpo da resposta da mesma requisição, e não há um fluxo de criar-e-depois-consultar. A resposta carrega um identificador para uma releitura posterior. O BACEN cobra por cliente e por data de referência, então um intervalo estreito custa menos. Um consumidor que reenvia uma requisição envia uma chave de idempotência, e a nova tentativa não paga uma segunda tarifa.
Resolução de credencial e proteções de canal
O Lerian SCR resolve a credencial de canal da instituição antes de abrir o caminho do circuit breaker. Uma falha de credencial é uma falha local, e uma indisponibilidade do vault nunca aciona o breaker do canal. O adapter então emite um
GET HTTPS para a operação /wsscr2n/cliente/resumo do BACEN e define HTTP Basic na requisição. O canal autentica apenas o servidor, pelo pool de certificados do sistema do host, com TLS 1.2 como piso e sem certificado de cliente.
Três guardas ficam na frente da chamada, nesta ordem. A consolidação de Single-flight funde consultas concorrentes idênticas em uma única chamada upstream. Um circuit breaker por instituição então decide se a chamada prossegue. Dentro do breaker, um semáforo limita as conexões concorrentes a duas por instituição. Por padrão, o breaker aciona após cinco falhas consecutivas, ou após uma taxa de falha de 0,5 em pelo menos dez requisições. Em seguida, ele entra em um período de resfriamento de 30 segundos.
Apenas uma falha de transporte ou um erro de plataforma do BACEN aciona o breaker. Uma resposta de “sem posição” e uma rejeição do lado do cliente não o fazem. Um breaker aberto retorna SCR-1002 de imediato e não contata nenhum upstream.
Cache de resultado e tarifa
O Lerian SCR lê um cache Redis antes de chamar o BACEN. O cache mantém uma entrada por mês de referência sob a chave
scr:pos:{tenantID}:{blindIndexHex}:{AAAAMM}. A instituição vem primeiro, e o tomador aparece apenas como um índice cego. Cada valor carrega o mesmo envelope AES-256-GCM em repouso que a linha de auditoria.
Um hit completo pula a chamada ao BACEN e a tarifa, e ainda assim audita e emite. Um hit parcial busca apenas os meses ausentes. Uma requisição que pede dados atualizados pula a leitura e paga a tarifa.
Por padrão, uma entrada para o mês corrente vive quatro horas, e uma entrada para um mês fechado vive 720 horas. Um mês que o BACEN omite se torna um marcador de sem posição, então uma repetição do mesmo intervalo não paga por esse mês novamente.
Uma entrada ilegível conta como um miss. Um deployment sem Redis dá miss sempre. Uma gravação em cache é best-effort e nunca falha uma consulta.
Decodificação
O BACEN responde com códigos de modalidade, fonte de recursos, indexador, variação cambial, segmento do credor, tipo de garantia, tipo de informação adicional e tipo de cliente. O Lerian SCR resolve cada código em relação às tabelas de anexo do SCR, que vêm embutidas no serviço, e retorna um par
{ code, description }.
Um código desconhecido mantém o código, retorna uma descrição nula e incrementa uma métrica de código desconhecido. Ele nunca falha a consulta. Um código vazio retorna um código vazio sem descrição e não dispara nenhuma métrica.
O decodificador lê apenas códigos de domínio. Ele nunca vê o documento do tomador.
Auditoria e eventos
Todo desfecho terminal grava uma linha de auditoria. A linha e seu evento de outbox fazem commit em uma única transação, então nenhuma consulta sai sem seu rastro. Uma gravação com falha falha a consulta com
SCR-9001, um 503 que permite nova tentativa. O consumidor nunca recebe uma posição de crédito não auditada. A linha mantém seus dados pessoais sob criptografia AES-256-GCM e um índice cego HMAC-SHA256, com duas chaves independentes.
O outbox carrega dois tipos de evento: studio.lerian.br-scr.consulta.completed para uma consulta atendida, e studio.lerian.br-scr.consulta.failed para uma malsucedida. O dispatcher publica ambos no tópico lerian.streaming.br-scr, com lerian.streaming.br-scr.dlq para mensagens poison.
Um operador pode desativar a emissão. As linhas então ficam pendentes no outbox e são enviadas assim que um broker estiver disponível.
