Solicitud de consulta
Un consumidor publica una consulta con el documento del prestatario, el tipo de cliente, y un rango de fechas de referencia. La solicitud también declara la autorización del titular conforme a la LC 105/2001. Esa declaración es una marca obligatoria, y el registro de consentimiento permanece con la institución. La llamada es síncrona. El resultado decodificado llega en el cuerpo de la respuesta de la misma solicitud, y no existe un flujo de crear y luego sondear. La respuesta lleva un identificador para una relectura posterior. BACEN cobra por cliente y por fecha de referencia, por lo que un rango acotado cuesta menos. Un consumidor que reintenta una solicitud envía una clave de idempotencia, y el reintento no paga una segunda tarifa.
Resolución de credenciales y protecciones del canal
Lerian SCR resuelve la credencial de canal de la institución antes de abrir la ruta del circuit breaker. Un fallo de credencial es un fallo local, y una caída del vault nunca activa el breaker del canal. El adaptador entonces emite un
GET HTTPS a la operación /wsscr2n/cliente/resumo de BACEN y establece HTTP Basic en la solicitud. El canal autentica solo al servidor, a través del almacén de certificados del sistema anfitrión, con TLS 1.2 como mínimo y sin certificado de cliente.
Tres protecciones se ubican delante de la llamada, en este orden. La coalescencia single-flight fusiona consultas concurrentes idénticas en una sola llamada upstream. Un circuit breaker por institución decide entonces si la llamada continúa. Dentro del breaker, un semáforo limita las conexiones concurrentes a dos por institución. Por defecto, el breaker se activa tras cinco fallos consecutivos, o tras una tasa de fallos de 0,5 en al menos diez solicitudes. Luego se enfría durante 30 segundos.
Solo un fallo de transporte o un error de la plataforma de BACEN activa el breaker. Una respuesta de “sin posición” y un rechazo del lado del cliente no lo hacen. Un breaker abierto devuelve SCR-1002 de inmediato y no contacta a ningún upstream.
Caché de resultados y tarifa
Lerian SCR lee una caché de Redis antes de llamar a BACEN. La caché contiene una entrada por mes de referencia bajo la clave
scr:pos:{tenantID}:{blindIndexHex}:{AAAAMM}. La institución va primero, y el prestatario aparece solo como un índice ciego. Cada valor lleva el mismo sobre AES-256-GCM en reposo que la fila de auditoría.
Un acierto completo omite la llamada a BACEN y la tarifa, y aun así audita y emite. Un acierto parcial obtiene solo los meses faltantes. Una solicitud que pide datos frescos omite la lectura y paga la tarifa.
Por defecto, una entrada del mes en curso vive cuatro horas, y una entrada de un mes cerrado vive 720 horas. Un mes que BACEN omite se convierte en un marcador de ausencia de posición, por lo que una repetición del mismo rango no vuelve a pagar por ese mes.
Una entrada ilegible cuenta como un fallo de caché. Un despliegue sin Redis falla siempre. Una escritura de caché es best-effort y nunca hace fallar una consulta.
Decodificación
BACEN responde con códigos para modalidad, fuente de fondeo, indexador, variación cambiaria, segmento del acreedor, tipo de garantía, tipo de información adicional, y tipo de cliente. Lerian SCR resuelve cada código contra las tablas anexas de SCR, que vienen incluidas en el servicio, y devuelve un par
{ code, description }.
Un código desconocido conserva el código, devuelve una descripción nula, e incrementa una métrica de código desconocido. Nunca hace fallar la consulta. Un código vacío devuelve un código vacío sin descripción y no dispara ninguna métrica.
El decodificador lee solo códigos de dominio. Nunca ve el documento del prestatario.
Auditoría y eventos
Todo resultado terminal escribe una fila de auditoría. La fila y su evento de outbox hacen commit en una sola transacción, por lo que ninguna consulta queda sin su registro. Una escritura fallida hace fallar la consulta con
SCR-9001, un 503 reintentable. El consumidor nunca recibe una posición de crédito sin auditar. La fila mantiene sus datos personales bajo cifrado AES-256-GCM y un índice ciego HMAC-SHA256, con dos claves independientes.
El outbox lleva dos tipos de evento: studio.lerian.br-scr.consulta.completed para una consulta atendida, y studio.lerian.br-scr.consulta.failed para una fallida. El despachador publica ambos en el topic lerian.streaming.br-scr, con lerian.streaming.br-scr.dlq para mensajes envenenados.
Un operador puede desactivar la emisión. Las filas entonces permanecen pendientes en el outbox y se envían en cuanto un broker esté disponible.
