FINORA|Documentación
EcosistemaPresentaciones
Pagos · Documentación

Banco simulado

El banco visto desde afuera: pago móvil, transferencias, QR, cripto y host ISO 8583 con reglas públicas.

Estado En redacciónRepositorio pagos/finora-banco-simStack Spring Boot · HTTP 8095 · ISO 8583 TCP 9600Actualizado 2026-09-04

1Qué es

Servicio que se comporta como el banco visto desde afuera para que el Merchant, la caja y el switch se prueben de punta a punta sin interconexión real. Existe porque el banco que aprobó la prueba del Merchant no puede darnos sus canales de pago móvil, crédito inmediato ni cripto antes de la demostración.

No es un mock: valida formatos, exige idempotencia, sabe quedarse en duda y responde a las consultas posteriores como lo haría un banco. Sus decisiones son deterministas y públicas: quien ensaya elige el desenlace con el monto o con el dato del pagador.

2Arquitectura

Dos caras

CaraPuertoQuién la usaContrato
HTTP autorizador8095Merchant (AuthorizerClient) para pago móvil, transferencia, QR y criptoPOST /api/v1/autorizador/autorizaciones, GET …/{id}, POST …/{id}/reverso
Host ISO 85839600 TCPSwitch Aurora (IsoNodeClient) para tarjetas emitidas por el bancoLayout j8583.xml del switch, EBCDIC Cp1047, bitmap binario, longitud de 2 bytes

Módulos: dominio (operación, libro en memoria, reglas y veredicto), api (contrato del autorizador y consola), iso (host Netty y autorizador de tarjetas). El libro es en memoria a propósito: el simulador se reinicia entre ensayos.

3Instalación y despliegue

./gradlew bootRun                      # http://localhost:8095  y  tcp 9600
./gradlew test                         # reglas, contrato HTTP y socket ISO real
docker buildx build --platform linux/amd64 -t git.dcgeeks.net/finora/banco-sim:prod-YYYYMMDD . --load
docker run -d --name finora-banco-sim --network finora_finora-net -p 8095:8095 -p 9600:9600 --restart unless-stopped git.dcgeeks.net/finora/banco-sim:prod-YYYYMMDD

Variables: SIM_HTTP_PUERTO, SIM_ISO_PUERTO, SIM_ISO_HABILITADO, SIM_LATENCIA_MS, SIM_DEMORA_DUDA_MS, SIM_TASA_VES_USDT, SIM_NOMBRE, SIM_CODIGO_BANCO.

4Operación diaria

La consola en / muestra el libro de operaciones en vivo, las reglas vigentes y el estado del host ISO. Antes de una demo: vaciar el libro (POST /api/v1/banco/operaciones/limpiar) y confirmar que el host ISO escucha.

Reglas

CanalCondiciónDesenlace
Todoscéntimos .51 / .05 / .6151 Fondos insuficientes / 05 No honrar / 61 Excede el límite
Todoscéntimos .96Aprobada, pero respondida tras 12 s: el cliente vence y queda EN DUDA; la consulta posterior confirma APROBADA
Todoscéntimos .91503 y no se registra: la consulta posterior devuelve 404
Pago móvilteléfono fuera de 0412/0414/0416/0424/0426 + 7 dígitos · termina en 000014 Teléfono inválido · 57 No afiliado
Transferenciacuenta distinta de 20 dígitos · termina en 000014 Cuenta inválida · 62 Cuenta bloqueada
Criptowallet fuera de 20–64 alfanuméricos · cualquier otra14 Wallet inválida · Aprobada con txHash y cotización USDT
Tarjeta ISOPAN termina en 5100 / 1732 / 0018 / 5156 · 9999 · otro51 / 43 / 54 / 41 · sin respuesta · 00 con código de autorización

5API e integraciones

Autorizar (el contrato que ya usa el Merchant)

POST /api/v1/autorizador/autorizaciones
{ "idOperacion": "PI-000123-1", "tipo": "COMPRA", "medio": "PAGO_MOVIL",
  "monto": 150.00, "moneda": "VES", "cuentaOrigen": "04141234567",
  "referenciaPago": "123456", "comercio": "900000000001", "terminal": "", "descripcion": "Venta 0042" }

200 { "aprobada": true, "codigo": "00", "mensaje": "Aprobada", "referenciaBanco": "PM000100001",
      "saldoDisponible": 4500.00, "banco": "Banco Simulado FINORA", "estado": "APROBADA" }

cuentaOrigen es el teléfono en pago móvil, la cuenta de 20 dígitos en transferencia, la wallet en cripto. referenciaPago es la clave C2P o la referencia del pago ya hecho; viaja y no se guarda.

Consultar y reversar

GET  /api/v1/autorizador/autorizaciones/{id}   → { estado: APROBADA|RECHAZADA|EN_PROCESO|REVERSADA, codigoRespuesta, mensaje, referenciaBanco }  (404 si nunca llegó)
POST /api/v1/autorizador/autorizaciones/{id}/reverso

Servicios del banco

GET  /api/v1/banco                      identidad y estado del host ISO
GET  /api/v1/banco/operaciones          libro (más recientes primero)
GET  /api/v1/banco/reglas               catálogo de reglas
GET  /api/v1/banco/pagomovil/p2c/verificar?referencia=&monto=&telefono=
GET  /api/v1/banco/cripto/cotizacion?activo=USDT&montoVes=

Cómo se conecta

Merchant: nodo BANCO_SIM en tba_authorizer_node con una ruta por medio en tba_authorizer_route (changelog 060-banco-simulado-y-rieles.xml). Para pasar al banco real basta cambiar base_url o crear otro nodo con menor prioridad.

Switch: dat_switch_node con protocolo ISO 8583 TCP, host finora-banco-sim, puerto 9600, framing LENGTH_PREFIX_2, y una tbl_bin_route por cada BIN del banco.

6Runbooks

  • Desplegar: construir la imagen amd64, transferirla al CT y arrancar el contenedor en la red finora_finora-net con el nombre finora-banco-sim (el Merchant lo resuelve por ese nombre).
  • Verificar: curl http://localhost:8095/api/v1/banco debe responder con isoHost.escuchando = true.
  • Ensayar una duda: cobrar un monto con céntimos .96; el Merchant marcará EN_DUDA y su barrido la resolverá como aprobada al consultar.
  • Rollback: parar el contenedor. El Merchant devolverá 91 en los medios que dependen de él; tarjeta no se ve afectada.

7Preguntas frecuentes

¿Guarda dinero o saldos? No. Cada operación es final en el momento y el saldo informado es simulado.

¿Firma o cifra? No hay MAC ni TLS: es un banco de laboratorio dentro de la red privada.

¿Qué pasa al reiniciarlo? El libro se vacía. Una operación en duda que el Merchant consulte después del reinicio recibirá 404 y se resolverá como no cobrada.

Otras guías

FINORA CoreCore bancario: clientes, cuentas, créditos, contabilidad, cumplimiento y SWIFT. Switch AuroraSwitch transaccional ISO 8583: pipeline de pasos, enrutamiento por BIN, nodos emisores y modo core. FINORA MerchantNodo de aceptación de pagos: comercios, terminales, medios de pago, orquestación, lotes y liquidación. Terminal AuroraPOSAplicación Android del punto de venta: EMV, API ECR para la caja e ISO 8583 hacia el switch. FINORA CajaCaja de escritorio (Electron): flujo guiado de cobro, terminal semi‑integrado y modo desatendido. Tienda de demostraciónComercio en línea que compra de verdad a través del switch, con medios simulados rotulados. Simulador ISO 8583Cliente de certificación: guiones, set de tarjetas, HSM simulado y proyectos cifrados. Payment Hub (netgw)Mensajería ISO 20022: pacs.008/002, outbox y rieles SWIFT, LBTR, CCE e interno. FINORA TrustFideicomisos: patrimonios, aportes, rendimientos y reportes. FINORA InvestInversiones: instrumentos, posiciones, valoración y órdenes. InstaladorInstalación dev/qa/prod por país con baseline y contextos Liquibase.