Esta guia documenta el modulo de consumo de credito directo soportado por ms-credigestion, donde NoviSuite intermedia entre el dashboard o MBA3 y el sistema de credito directo ISISYSTEM para realizar consumos de credito en tiempo real.
ms-credigestion se encarga de:
Recibir solicitudes HTTP REST/JSON desde el dashboard o MBA3
Traducirlas a llamadas SOAP/XML contra los servicios WCF de ISISYSTEM
Parsear las respuestas XML y devolverlas como JSON limpio
Persistir el estado de cada autorizacion/consumo en PostgreSQL local
Manejar el ciclo de vida completo: consulta → financiacion → autorizacion → OTP → confirmacion → reverso
Flujo general: Dashboard/MBA3 → NoviSuite (ms-credigestion) → SOAP/XML → ISISYSTEM → XML → JSON → Dashboard/MBA3
Dato Valor Dominio produccion https://credigestion-api.novicompu.comPuerto HTTP 3005Base de datos local credigestion_service_developmentHealth check GET /upIntegracion SOAP upstream ISISYSTEM (Cartera + Central)
Todos los endpoints de consumo usan solo Bearer JWT . No aceptan ServiceKey.
Esquema Header Bearer JWTAuthorization: Bearer <token>
Accion Endpoint Metodo SOAP Servicio ISISYSTEM Persiste en DB Consultar linea de credito POST /consumo/cupoConsultarTarjeta Cartera No Consultar financiacion POST /consumo/financiacionConsultarAlternativaFinanciacion Central No Generar autorizacion POST /consumo/autorizacionGrabarAutorizacion Cartera Si Registrar OTP POST /consumo/otp— (local) — Si Confirmar consumo POST /consumo/confirmarGrabarConsumo Cartera Si Reversar autorizacion POST /consumo/reversoGrabarReversoAutorizacion Cartera Si Reversar consumo POST /consumo/reverso-consumoGrabarReversoConsumo Cartera Si
La traduccion REST → SOAP, los namespaces, constantes inyectadas y manejo de errores estan documentados en Modulo isisystem-soap .
Servicio URL Operaciones Cartera http://186.5.126.42:8092/Cartera/ServicioCartera.svcConsultarTarjeta, GrabarAutorizacion, GrabarConsumo, GrabarReversoAutorizacion, GrabarReversoConsumo Central http://186.5.126.42:8092/Central/ServicioCentral.svcConsultarAlternativaFinanciacion
Constante Valor por defecto Variable de entorno Usuario USUARIOASIISISYSTEM_USUARIOCodigo Empresa 000598ISISYSTEM_CODIGO_EMPRESATerminal NOVISUITE-01ISISYSTEM_TERMINALTimeout 30 segundosISISYSTEM_TIMEOUT
cNumeroTarjeta ↔ identificacion: El campo SOAP debe ir poblado con la cedula del cliente. El servicio aplica el fallback cNumeroTarjeta = dto.numero_tarjeta ?? dto.identificacion.
OTP bypass: Si dto.otp viene vacio, se envia automaticamente cCodigoOtp = ISISYSTEM_OTP_BYPASS.
Mapeo de errores SOAP:
nNumeroError === 2 (cliente sin tarjeta) → HTTP 404
Cualquier nNumeroError con lError: true → HTTP 422 (error de negocio)
Nodos vacios xsi:nil="true": El parser detecta via isNilOrEmptyObject() y retorna null.
Consulta la linea de credito / tarjeta de un cliente en ISISYSTEM.
Autenticacion: Bearer JWT
"codigo_empresa" : " 000598 " ,
"identificacion" : " 0916884245 " ,
"numero_tarjeta" : " 0916884245 "
Campo Obligatorio Validacion codigo_empresaSi string, max 20 identificacionSi string, max 50 numero_tarjetaNo string, max 20
"cliente" : " MARCILLO ERICK " ,
"numero_tarjeta" : " 0916884245 " ,
"fecha_activacion" : " 2024-01-15 " ,
"fecha_ultima_compra" : " 2026-03-20 " ,
"fecha_ultimo_pago" : " 2026-04-01 " ,
"cCodigoTipoCupo" : " 003 " ,
"cDescripcionTipoCupo" : " CRÉDITO DIRECTO " ,
"nCupoDisponible" : 1500.00 ,
"nCupoAsignado" : 3000.00 ,
"nCupoUtilizado" : 1500.00
"cCodigoTipoOperacion" : " 001 " ,
"cDescripcionTipoOperacion" : " COMPRAS " ,
"nCupoDisponibleOpe" : 1500.00 ,
HTTP Caso 400Body invalido 401JWT invalido 502ISISYSTEM rechazo 504timeout
Consulta las alternativas de financiacion (plazos y cuotas) para un monto dado.
Autenticacion: Bearer JWT
"codigo_empresa" : " 000598 " ,
"numero_tarjeta" : " 0916884245 " ,
"codigo_producto" : " 004 " ,
"codigo_tipo_cupo" : " 003 " ,
"items" : [{ "texto_articulo" : " TV Samsung 55 " , "cantidad" : 1 , "precio" : " 400.00 " }]
Campo Obligatorio Validacion codigo_empresaSi string, max 20 numero_tarjetaSi string, max 20 codigo_productoSi string, max 3 codigo_tipo_cupoSi string, max 3 codigo_tipo_operacionNo string, max 3 montoSi numerico como string itemsNo ArticuloConsumoDto[]
Campo Obligatorio Validacion codigo_articuloNo string texto_articuloSi string cantidadSi entero, min 1 precioSi numerico como string codigo_tipo_articuloNo string caracteristicasNo string (formato 025:AZUL-026:23x45)
{ "plazo" : 3 , "cuota_mensual" : 136.50 , "cuota_garantia_extendida" : 0 , "interes_total" : 9.50 , "deuda_total" : 409.50 , "cuota_entrada_minima" : 0 },
{ "plazo" : 6 , "cuota_mensual" : 70.25 , "interes_total" : 21.50 , "deuda_total" : 421.50 },
{ "plazo" : 12 , "cuota_mensual" : 37.80 , "interes_total" : 53.60 , "deuda_total" : 453.60 }
HTTP Caso 400Body invalido 401JWT invalido 502ISISYSTEM rechazo 504timeout
Solicita la autorizacion de consumo en ISISYSTEM. Crea un registro local en PostgreSQL con el estado inicial.
Autenticacion: Bearer JWT
"codigo_empresa" : " 000598 " ,
"identificacion" : " 0916884245 " ,
"numero_tarjeta" : " 0916884245 " ,
"codigo_producto" : " 004 " ,
"punto_venta" : " POS-001 " ,
"codigo_tipo_cupo" : " 003 "
Campo Obligatorio Validacion codigo_empresaSi string, max 20 identificacionSi string, max 50 numero_tarjetaSi string, max 20 codigo_productoSi string, max 3 plazoSi entero, min 1 montoSi numerico como string punto_ventaSi string, max 50 codigo_tipo_cupoNo string, max 3 codigo_tipo_operacionNo string, max 3 cuota_inicialNo numerico como string garantia_extendidaNo boolean itemsNo ArticuloConsumoDto[]
"autorizacion_id" : " 14022 " ,
"numero_operacion" : 56789 ,
"codigo_seguridad_enviado" : true ,
"biometria_requerida" : false ,
Clave: Si codigo_seguridad_enviado=true, se requiere el paso OTP. Si es false (QA), se salta a confirmacion.
HTTP Caso 400Body invalido 401JWT invalido 502ISISYSTEM rechazo (lError: true) 504timeout
Registra el codigo OTP ingresado por el cliente. Solo checkpoint local — no llama a ISISYSTEM. El OTP se valida en /confirmar.
Autenticacion: Bearer JWT
{ "autorizacion_id" : " 14022 " , "otp" : " 483926 " }
Campo Obligatorio Validacion autorizacion_idSi string, max 50 otpSi string, max 10
{ "success" : true , "autorizacion_id" : " 14022 " , "estado" : " OTP_RECIBIDO " , "message" : " OTP registrado. Proceda a confirmar el consumo. " }
Solo se puede registrar OTP si el estado actual es AUTORIZADO
Si el estado no es valido, devuelve 400 Bad Request
HTTP Caso 400estado invalido 401JWT invalido 404autorizacion no encontrada
Confirma el consumo enviando la factura y OTP a ISISYSTEM (GrabarConsumo).
Autenticacion: Bearer JWT
"autorizacion_id" : " 14022 " ,
"numero_factura" : " FAC-001-001-000012345 " ,
"monto_facturado" : " 400 " ,
"fecha_factura" : " 2026-04-15 " ,
Campo Obligatorio Validacion autorizacion_idSi string, max 50 numero_facturaSi string, max 50 monto_facturadoSi numerico como string fecha_facturaSi string, max 10 (yyyy-mm-dd) valor_ivaNo numerico como string valor_comisionNo numerico como string
Al confirmar, el servicio toma del registro local (credigestion_consumos):
codigo_producto, codigo_tipo_cupo, codigo_tipo_operacion (de la autorizacion)
numero_tarjeta, identificacion (del cliente)
otp (registrado en /otp)
plazo, monto (del consumo original)
"autorizacion_id" : " 14022 " ,
"numero_operacion" : 56789 ,
"fecha_max_pago" : " 2026-05-15 " ,
"tabla_amortizacion" : [{ "numero_cuota" : 1 , "fecha_vencimiento" : " 2026-05-15 " , "valor_capital" : 33.33 , "valor_interes" : 4.47 , "valor_cuota" : 37.80 }],
"cupos_afectados" : [{ "cCodigoTipoCupo" : " 003 " , "nCupoDisponible" : 1100.00 , "nCupoUtilizado" : 1900.00 }]
Se acepta tanto AUTORIZADO como OTP_RECIBIDO
Si el OTP no fue registrado previamente, se envia "0" como cCodigoOtp (ISISYSTEM decide si lo requiere)
HTTP Caso 400body invalido o estado no es AUTORIZADO/OTP_RECIBIDO 401JWT invalido 404autorizacion no encontrada 502ISISYSTEM rechazo (puede ser OTP invalido) 504timeout
Reversa una autorizacion antes de confirmar.
Autenticacion: Bearer JWT
{ "autorizacion_id" : " 14022 " , "numero_tarjeta" : " 0916884245 " , "identificacion" : " 0916884245 " }
Campo Obligatorio Validacion autorizacion_idSi string, max 50 numero_tarjetaNo Se toma del registro si no se envia identificacionNo Se toma del registro si no se envia
{ "success" : true , "estado" : " REVERSADO " , "message" : " Autorizacion reversada exitosamente " }
No se puede reversar si el estado es CONSUMIDO (ya fue confirmado — usar /reverso-consumo)
No se puede reversar si ya esta en estado REVERSADO
HTTP Caso 400body invalido o estado no permite reverso 401JWT invalido 404autorizacion no encontrada 502ISISYSTEM rechazo el reverso 504timeout
Reversa un consumo ya confirmado. Usa numero_factura como referencia.
Autenticacion: Bearer JWT
{ "autorizacion_id" : " 14022 " , "numero_tarjeta" : " 0916884245 " }
Campo Obligatorio Validacion autorizacion_idSi string, max 50 numero_tarjetaNo Se toma del registro si no se envia
El servicio construye la llamada SOAP GrabarReversoConsumo con:
cNumeroReferencia: numero de factura del registro local
cNumeroTarjeta: del DTO o del registro local
cTerminal: variable de entorno ISISYSTEM_TERMINAL
cUsuario: variable de entorno ISISYSTEM_USUARIO
lAjusteConciliacion: false
{ "success" : true , "estado" : " CONSUMO_REVERSADO " , "numero_factura" : " FAC-001-001-000012345 " , "message" : " Reverso realizado correctamente " }
Solo se puede reversar si el estado es CONSUMIDO
Si no tiene numero_factura registrado, devuelve 400
No se puede reversar si esta en estado AUTORIZADO, OTP_RECIBIDO, REVERSADO o CONSUMO_REVERSADO
HTTP Caso 400body invalido, estado no es CONSUMIDO, o no hay factura registrada 401JWT invalido 404autorizacion no encontrada 502ISISYSTEM rechazo el reverso del consumo 504timeout
[*] --> AUTORIZADO : POST /autorizacion\n(GrabarAutorizacion SOAP)
AUTORIZADO --> OTP_RECIBIDO : POST /otp\n(checkpoint local)
AUTORIZADO --> CONSUMIDO : POST /confirmar\n(GrabarConsumo SOAP)
AUTORIZADO --> REVERSADO : POST /reverso\n(GrabarReversoAutorizacion SOAP)
OTP_RECIBIDO --> CONSUMIDO : POST /confirmar\n(GrabarConsumo SOAP)
CONSUMIDO --> CONSUMO_REVERSADO : POST /reverso-consumo\n(GrabarReversoConsumo SOAP)
CONSUMO_REVERSADO --> [*]
Estado Actual Accion Estado Resultante AUTORIZADOPOST /otpOTP_RECIBIDOAUTORIZADOPOST /confirmarCONSUMIDOAUTORIZADOPOST /reversoREVERSADOOTP_RECIBIDOPOST /confirmarCONSUMIDOCONSUMIDOPOST /reverso-consumoCONSUMO_REVERSADO
REVERSADO — autorizacion anulada antes de consumir
CONSUMO_REVERSADO — consumo confirmado y luego anulado
Columna Tipo Descripcion idbigint PK ID interno autorizacion_idvarchar(50) Numero de autorizacion de ISISYSTEM numero_operacionvarchar(20) Numero de operacion de ISISYSTEM estadovarchar(30) Estado actual codigo_empresavarchar(20) Codigo de empresa identificacionvarchar(50) Cedula del cliente numero_tarjetavarchar(20) Numero de tarjeta codigo_productovarchar(10) Codigo de producto codigo_tipo_cupovarchar(10) Codigo tipo de cupo codigo_tipo_operacionvarchar(10) Codigo tipo de operacion montodecimal(18,2) Monto autorizado plazoint Plazo autorizado punto_ventavarchar(50) Punto de venta otpvarchar(10) OTP registrado numero_facturavarchar(50) Numero de factura monto_facturadodecimal(18,2) Monto facturado fecha_facturadate Fecha de factura isisystem_auth_responsejsonb Respuesta cruda de GrabarAutorizacion isisystem_consumo_responsejsonb Respuesta cruda de GrabarConsumo biometria_requeridaboolean Si requiere biometria imagen_qrtext QR en base64 (si aplica) source_systemvarchar(50) Origen (default: NOVISUITE) created_at / updated_attimestamp Fechas de creacion/modificacion
El filtro global del servicio responde errores con este envelope:
"message" : " ISISYSTEM rechazo la operacion: GrabarConsumo " ,
"message" : " ISISYSTEM rechazo la operacion: GrabarAutorizacion " ,
"upstreamMessage" : " Cupo insuficiente para el monto solicitado " ,
"operation" : " GrabarAutorizacion " ,
"message" : " ISISYSTEM no respondio a tiempo durante GrabarConsumo "
"message" : " La autorizacion 14022 no esta en estado AUTORIZADO (actual: CONSUMIDO) "
"message" : " No se encontro autorizacion 14022 "
Variable Valor QA Nota ISISYSTEM_USUARIOPOSNVC001Usuario funcional asignado a NoviSuite ISISYSTEM_CODIGO_EMPRESA000598Empresa por defecto ISISYSTEM_OTP_BYPASS999999OTP fijo mientras no este Biometria
Cedula Cliente Cupo Disponible Estado 0914665005GILBERT TACLE $1700 Activa 0926208323TINOCO SALTOS $1685 Activa
OTP bypass QA: 999999 (se inyecta automaticamente si el campo OTP esta vacio)
Mapeo cNumeroTarjeta: en QA el campo debe ir poblado con la cedula del cliente
Productos: el wizard usa "004" por defecto; verificar disponibilidad en QA
curl -X POST http://localhost:3005/api/v1/credigestion/consumo/cupo \
-H " Content-Type: application/json " \
-H " Authorization: Bearer <JWT> " \
"codigo_empresa": "000598",
"identificacion": "0916884245"
curl -X POST http://localhost:3005/api/v1/credigestion/consumo/autorizacion \
-H " Content-Type: application/json " \
-H " Authorization: Bearer <JWT> " \
"codigo_empresa": "000598",
"identificacion": "0916884245",
"numero_tarjeta": "0916884245",
"codigo_producto": "004",
"punto_venta": "POS-001",
"codigo_tipo_cupo": "003"
curl -X POST http://localhost:3005/api/v1/credigestion/consumo/confirmar \
-H " Content-Type: application/json " \
-H " Authorization: Bearer <JWT> " \
"autorizacion_id": "14022",
"numero_factura": "FAC-001-001-000012345",
"monto_facturado": "400",
"fecha_factura": "2026-04-15"
curl -X POST http://localhost:3005/api/v1/credigestion/consumo/reverso-consumo \
-H " Content-Type: application/json " \
-H " Authorization: Bearer <JWT> " \
"autorizacion_id": "14022"
# -- ISISYSTEM SOAP (credito directo) --
ISISYSTEM_CARTERA_URL=http://186.5.126.42:8092/Cartera/ServicioCartera.svc
ISISYSTEM_CENTRAL_URL=http://186.5.126.42:8092/Central/ServicioCentral.svc
ISISYSTEM_USUARIO=POSNVC001
ISISYSTEM_CODIGO_EMPRESA=000598
ISISYSTEM_TERMINAL=NOVISUITE-01
ISISYSTEM_OTP_BYPASS=999999
El modulo isisystem-soap es global — cualquier otro modulo del servicio puede inyectar IsisystemSoapService
Las constantes SOAP (cUsuario, cCodigoEmpresa, cTerminal) no se envian desde el request del cliente; el servicio las inyecta automaticamente
El OTP no tiene un endpoint SOAP propio — /otp es un checkpoint local que guarda el codigo, y la validacion real ocurre en /confirmar (GrabarConsumo con cCodigoOtp)
Si no se registra OTP antes de confirmar, se envia "0" como cCodigoOtp
Para reversar una autorizacion (antes de confirmar): usar /reverso → GrabarReversoAutorizacion
Para reversar un consumo (despues de confirmar): usar /reverso-consumo → GrabarReversoConsumo
El numero_factura es el cNumeroReferencia que se envia a GrabarReversoConsumo
Timeout SOAP configurable via ISISYSTEM_TIMEOUT (en segundos, default 30)