Validación de Códigos LSIM - customers-v1-validatecodelsim
Información del Servicio
Endpoint: /api/customers/v1/validatecodelsim
Método: POST
Versión: v1
Categoría: Validación de Identidad
Documentación del Servicio
Descripción general
El servicio customers-v1-validatecodelsim es un endpoint para validar códigos de validación LSIM (Línea de Servicio de Identificación Móvil) generados por el sistema de autenticación. Este servicio permite verificar la identidad del cliente mediante códigos enviados por SMS o email.
Categoría de negocio: Validación de Identidad y Autenticación.
Casos de uso principales:
- Validación de códigos de autenticación enviados por SMS
- Validación de códigos de autenticación enviados por email
- Cálculo de score de riesgo del cliente (opcional)
- Verificación de límites de reintentos de validación
Especificación técnica
- Endpoint completo:
/api/customers/v1/validatecodelsim - Método HTTP: POST
- Capas involucradas:
- Controlador:
CustomersController.ValidateCodeLisim_v1 - Lógica de negocio:
CustomerBusiness.ValidateCodeLsim_v1 - Acceso a datos:
CustomerUtil.ValidateCodeLISIM
- Controlador:
Flujo de procesamiento:
- Auditoría de entrada de la petición
- Conversión y validación de datos de entrada
- Obtención del origen de la petición
- Verificación de estado de la API (encendida/apagada)
- Consulta del cliente en la base de datos
- Validación de cantidad de reintentos permitidos
- Validación de códigos LSIM
- Cálculo de score (opcional)
- Auditoría de salida y respuesta
Dependencias principales:
CustomerUtil- Utilidades para operaciones de clientesConfigurationUtil- Gestión de configuraciones y tipologíasAuditUtil- Auditoría de transaccionesSecurityUtil- Utilidades de seguridad y autenticación
Consideraciones de seguridad:
- Validación de origen de la petición
- Control de reintentos de validación
- Auditoría completa de transacciones
- Validación de códigos de autenticación
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSRequestHeader | object | Sí | Cabecera estándar de la petición que contiene información del sistema y propiedades |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Audit | object | No | Información de auditoría de la aplicación |
| Calculate_Score | bool | No | Bandera que determina si debe o no calcular el score |
| Document_Number | string | Sí | Número de identificación del cliente |
| Document_Type | string | Sí | Tipo de identificación del cliente |
| Generate_Codes | array | Sí | Lista de códigos generados para validar |
| Token | string | No | Token asociado a la validación |
Estructura de objetos anidados:
Estructura de WSRequestHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | Sí | Información asociada al sistema |
| Property | array | No | Propiedades asociadas al consumo del servicio web |
Estructura de WSRequestHeader.System
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre del sistema |
| CorrelationID | string | Sí | Identificador de la petición |
| ProcessingServer | string | Sí | Servidor de procesamiento del sistema |
Estructura de WSRequestHeader.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre de la propiedad |
| Value | string | Sí | Valor de la propiedad |
Estructura de Audit
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Canal | string | No | Canal sobre el cual se hizo la petición |
| Id_Device | string | No | Identificador del dispositivo móvil |
| SO | string | No | Sistema operativo del dispositivo |
| IP_Address | string | No | Dirección IP desde donde se realiza la petición |
| WhatsApp_Phone_Number | string | No | Número de Whatsapp desde donde se realiza la petición |
Estructura de Generate_Codes
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Code_System | string | Sí | Código del sistema |
| Code_Type | string | Sí | Tipo de código: SMS o EMAIL |
| Code_User | string | Sí | Código del usuario |
Respuesta esperada (Response)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSResponseHeader | object | Sí | Cabecera estándar de la respuesta que contiene información del sistema, servicio y propiedades |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Score | int | No | Score obtenido por LSIM (solo si Calculate_Score = true) |
Estructura de objetos anidados:
Estructura de WSResponseHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | No | Información asociada al sistema |
| Service | object | No | Información asociada a la ejecución del servicio |
| Property | array | No | Arreglo de propiedades asociado al servicio |
Estructura de WSResponseHeader.System
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre del sistema |
| CorrelationID | string | No | Identificador de la petición |
| ProcessingServer | string | No | Servidor de procesamiento del sistema |
Estructura de WSResponseHeader.Service
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Status | string | No | Estado de la ejecución del servicio web |
| ResponseDate | DateTime | No | Fecha de la respuesta |
| ProcessingServer | string | No | Servidor de procesamiento de la solicitud |
| StatusDetail | array | No | Detalle del procesamiento de la solicitud |
Estructura de WSResponseHeader.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la propiedad |
| Value | string | No | Valor de la propiedad |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_03 | No se pudo validar la petición | "La solicitud {0} no fue exitosa. No fue posible validar la petición" |
| ERROR_04 | Objetos no acordes a la petición | "La solicitud {0} no fue exitosa. Fueron enviados objetos no acordes a la petición" |
| ERROR_05 | Cliente no encontrado | "La solicitud {0} no fue exitosa. Cliente no encontrado" |
| ERROR_06 | Límite de reintentos excedido | "La solicitud {0} no fue exitosa. Límite de reintentos excedido" |
| ERROR_07 | Error en validación de reintentos | "La solicitud {0} no fue exitosa. Error en validación de reintentos" |
| ERROR_08 | Error en validación de códigos LSIM | "La validación de los códigos no fue exitosa" |
| ERROR_10 | Error en validación de códigos | "La solicitud {0} no fue exitosa. Error en validación de códigos" |
| ERROR_11 | Error al obtener score | "La solicitud {0} no fue exitosa. Error al obtener score" |
| ERROR_12 | Error en cálculo de score | "La solicitud {0} no fue exitosa. Error en cálculo de score" |
| OK_01 | Procesamiento exitoso | "La solicitud {0} fue exitosa" |
Análisis de Componentes
Modelos y componentes
Modelos base utilizados:
BaseRequestValidateCodeLSIM_v1- Modelo de petición para validación de códigos LSIMBaseResponseValidateCodeLSIM_v1- Modelo de respuesta para validación de códigos LSIMValidateCodeLSIMRequest_v1- Body de la petición con códigos y parámetrosValidateCodeLSIMResponse_v1- Body de la respuesta con scoreValidateCodeLSIMCodeRequest_v1- Estructura de códigos individuales
Utilidades y servicios comunes:
CustomerUtil- Operaciones de clientes y validacionesConfigurationUtil- Gestión de configuraciones y tipologíasAuditUtil- Auditoría de transaccionesSecurityUtil- Utilidades de seguridad
Patrones de diseño implementados:
- Singleton Pattern:
CustomerBusiness.GetInstance - Template Method: Flujo de procesamiento estándar con validaciones
- Strategy Pattern: Diferentes estrategias de validación según tipo de código
Componentes reutilizados:
- Modelos base de request/response (
BotBaseRequestHeader,BotBaseResponseHeader) - Utilidades de configuración y auditoría
- Sistema de manejo de errores estándar
Referencias cruzadas:
- Endpoint relacionado:
/api/mietb-api/v1/customer/validatecodelsim(versión proxy) - Servicio SOAP:
/soap/customers/v1/validatecodelsim
Ejemplos de Request/Response
Solicitud (request)
{
"WSRequestHeader": {
"System": {
"Name": "MiETB",
"CorrelationID": "123456789",
"ProcessingServer": "BOTAPP01"
},
"Property": [
{
"Name": "CHANNEL",
"Value": "WEB"
}
]
},
"WSRequestBody": {
"Audit": {
"Canal": "WEB",
"Id_Device": "DESKTOP-ABC123",
"SO": "Windows 10",
"IP_Address": "192.168.1.100"
},
"Calculate_Score": true,
"Document_Number": "12345678",
"Document_Type": "CC",
"Generate_Codes": [
{
"Code_System": "123456",
"Code_Type": "SMS",
"Code_User": "123456"
}
],
"Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}Respuesta exitosa
{
"WSResponseHeader": {
"System": {
"Name": "MiETB",
"CorrelationID": "123456789",
"ProcessingServer": "BOTAPP01"
},
"Service": {
"Status": "OK",
"ResponseDate": "2024-12-19T10:30:00",
"ProcessingServer": "BOTAPP01",
"StatusDetail": [
{
"ErrorCode": "OK_01",
"ErrorMessage": "La solicitud 123456789 fue exitosa",
"ErrorMessageUser": "Validación exitosa"
}
]
},
"Property": [
{
"Name": "CHANNEL",
"Value": "WEB"
}
]
},
"WSResponseBody": {
"Score": 85
}
}Respuesta de error
{
"WSResponseHeader": {
"System": {
"Name": "MiETB",
"CorrelationID": "123456789",
"ProcessingServer": "BOTAPP01"
},
"Service": {
"Status": "FAIL",
"ResponseDate": "2024-12-19T10:30:00",
"ProcessingServer": "BOTAPP01",
"StatusDetail": [
{
"ErrorCode": "ERROR_10",
"ErrorMessage": "La solicitud 123456789 no fue exitosa. Error en validación de códigos",
"ErrorMessageUser": "Código de validación incorrecto"
}
]
},
"Property": [
{
"Name": "CHANNEL",
"Value": "WEB"
}
]
},
"WSResponseBody": null
}Diagramas Técnicos
3.1 Flujo de datos
graph TD
A[Recepción de la solicitud] --> B[Auditoría de entrada]
B --> C[Conversión de datos]
C --> D[Obtención del origen]
D --> E[Verificación API encendida]
E --> F[Consulta del cliente]
F --> G[Validación de reintentos]
G --> H[Validación de códigos LSIM]
H --> I{Cálculo de score?}
I -->|Sí| J[Cálculo de score]
I -->|No| K[Respuesta exitosa]
J --> K
K --> L[Auditoría de salida]3.2 Arquitectura de clases
classDiagram
class CustomersController {
+ValidateCodeLisim_v1()
}
class CustomerBusiness {
+ValidateCodeLsim_v1()
}
class CustomerUtil {
+ValidateCodeLISIM()
+Can_Validation_Code()
+Get_Score()
}
class ConfigurationUtil {
+Get_Origin()
+Is_Api_Turned_On()
+Get_By_Code()
}
CustomersController --> CustomerBusiness
CustomerBusiness --> CustomerUtil
CustomerBusiness --> ConfigurationUtil3.3 Secuencia de ejecución
sequenceDiagram
participant Cliente
participant CustomersController
participant CustomerBusiness
participant CustomerUtil
participant ConfigurationUtil
participant AuditUtil
Cliente->>CustomersController: POST /api/customers/v1/validatecodelsim
CustomersController->>CustomerBusiness: ValidateCodeLsim_v1()
CustomerBusiness->>AuditUtil: Save_Request()
CustomerBusiness->>CustomerBusiness: Conversión de datos
CustomerBusiness->>ConfigurationUtil: Get_Origin()
CustomerBusiness->>ConfigurationUtil: Is_Api_Turned_On()
CustomerBusiness->>CustomerUtil: Get()
CustomerBusiness->>CustomerUtil: Can_Validation_Code()
CustomerBusiness->>CustomerUtil: ValidateCodeLISIM()
CustomerBusiness->>CustomerUtil: Get_Score()
CustomerBusiness->>AuditUtil: Save_Validation_Codes()
CustomerBusiness-->>CustomersController: BaseResponseValidateCodeLSIM_v1
CustomersController-->>Cliente: Respuesta JSONPolíticas y Consideraciones
Políticas de seguridad
Mecanismos de autenticación y autorización:
- Validación de origen de la petición mediante
ConfigurationUtil.Get_Origin - Control de reintentos de validación por cliente
- Auditoría completa de todas las transacciones
Validaciones de seguridad implementadas:
- Verificación de estado de la API (encendida/apagada)
- Validación de códigos de autenticación LSIM
- Control de límites de reintentos por cliente
- Validación de datos de entrada obligatorios
Límites de tasa (rate limits):
- Control de reintentos por cliente mediante
CustomerUtil.Can_Validation_Code - Validación de códigos con límites de tiempo
- Auditoría de intentos fallidos
SLAs aplicables:
- Tiempo de respuesta esperado: < 5 segundos
- Disponibilidad del servicio: 99.9%
- Tolerancia a fallos: Reintentos automáticos con backoff
Recomendaciones y mejores prácticas
Puntos de mejora específicos en el código:
- Manejo de excepciones: Implementar logging detallado de excepciones para facilitar debugging
- Validaciones: Agregar validaciones más específicas para tipos de documento
- Performance: Considerar cache de configuraciones para mejorar tiempos de respuesta
Optimizaciones posibles:
- Conexiones a base de datos: Implementar connection pooling para optimizar consultas
- Cálculo de score: Considerar cache de scores para clientes frecuentes
- Validación de códigos: Implementar validación en paralelo para múltiples códigos
Consideraciones de mantenimiento importantes:
- Configuraciones: Mantener actualizadas las tipologías de error en base de datos
- Auditoría: Revisar periódicamente los logs de auditoría para detectar patrones anómalos
- Monitoreo: Implementar métricas de performance y disponibilidad
Sugerencias de seguridad aplicables:
- Rate limiting: Implementar límites más estrictos por IP y usuario
- Encriptación: Considerar encriptación adicional para códigos sensibles
- Validación de tokens: Implementar validación más robusta de tokens JWT
- Logging de seguridad: Agregar logging específico para eventos de seguridad