Skip to content

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

Flujo de procesamiento:

  1. Auditoría de entrada de la petición
  2. Conversión y validación de datos de entrada
  3. Obtención del origen de la petición
  4. Verificación de estado de la API (encendida/apagada)
  5. Consulta del cliente en la base de datos
  6. Validación de cantidad de reintentos permitidos
  7. Validación de códigos LSIM
  8. Cálculo de score (opcional)
  9. Auditoría de salida y respuesta

Dependencias principales:

  • CustomerUtil - Utilidades para operaciones de clientes
  • ConfigurationUtil - Gestión de configuraciones y tipologías
  • AuditUtil - Auditoría de transacciones
  • SecurityUtil - 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

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera estándar de la petición que contiene información del sistema y propiedades

Body

CampoTipoObligatorioDescripción
AuditobjectNoInformación de auditoría de la aplicación
Calculate_ScoreboolNoBandera que determina si debe o no calcular el score
Document_NumberstringNúmero de identificación del cliente
Document_TypestringTipo de identificación del cliente
Generate_CodesarrayLista de códigos generados para validar
TokenstringNoToken asociado a la validación

Estructura de objetos anidados:

Estructura de WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectInformación asociada al sistema
PropertyarrayNoPropiedades asociadas al consumo del servicio web

Estructura de WSRequestHeader.System

CampoTipoObligatorioDescripción
NamestringNombre del sistema
CorrelationIDstringIdentificador de la petición
ProcessingServerstringServidor de procesamiento del sistema

Estructura de WSRequestHeader.Property

CampoTipoObligatorioDescripción
NamestringNombre de la propiedad
ValuestringValor de la propiedad

Estructura de Audit

CampoTipoObligatorioDescripción
CanalstringNoCanal sobre el cual se hizo la petición
Id_DevicestringNoIdentificador del dispositivo móvil
SOstringNoSistema operativo del dispositivo
IP_AddressstringNoDirección IP desde donde se realiza la petición
WhatsApp_Phone_NumberstringNoNúmero de Whatsapp desde donde se realiza la petición

Estructura de Generate_Codes

CampoTipoObligatorioDescripción
Code_SystemstringCódigo del sistema
Code_TypestringTipo de código: SMS o EMAIL
Code_UserstringCódigo del usuario

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera estándar de la respuesta que contiene información del sistema, servicio y propiedades

Body

CampoTipoObligatorioDescripción
ScoreintNoScore obtenido por LSIM (solo si Calculate_Score = true)

Estructura de objetos anidados:

Estructura de WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformación asociada al sistema
ServiceobjectNoInformación asociada a la ejecución del servicio
PropertyarrayNoArreglo de propiedades asociado al servicio

Estructura de WSResponseHeader.System

CampoTipoObligatorioDescripción
NamestringNoNombre del sistema
CorrelationIDstringNoIdentificador de la petición
ProcessingServerstringNoServidor de procesamiento del sistema

Estructura de WSResponseHeader.Service

CampoTipoObligatorioDescripción
StatusstringNoEstado de la ejecución del servicio web
ResponseDateDateTimeNoFecha de la respuesta
ProcessingServerstringNoServidor de procesamiento de la solicitud
StatusDetailarrayNoDetalle del procesamiento de la solicitud

Estructura de WSResponseHeader.Property

CampoTipoObligatorioDescripción
NamestringNoNombre de la propiedad
ValuestringNoValor de la propiedad

Manejo de errores

CódigoDescripciónEjemplo
ERROR_03No se pudo validar la petición"La solicitud {0} no fue exitosa. No fue posible validar la petición"
ERROR_04Objetos no acordes a la petición"La solicitud {0} no fue exitosa. Fueron enviados objetos no acordes a la petición"
ERROR_05Cliente no encontrado"La solicitud {0} no fue exitosa. Cliente no encontrado"
ERROR_06Límite de reintentos excedido"La solicitud {0} no fue exitosa. Límite de reintentos excedido"
ERROR_07Error en validación de reintentos"La solicitud {0} no fue exitosa. Error en validación de reintentos"
ERROR_08Error en validación de códigos LSIM"La validación de los códigos no fue exitosa"
ERROR_10Error en validación de códigos"La solicitud {0} no fue exitosa. Error en validación de códigos"
ERROR_11Error al obtener score"La solicitud {0} no fue exitosa. Error al obtener score"
ERROR_12Error en cálculo de score"La solicitud {0} no fue exitosa. Error en cálculo de score"
OK_01Procesamiento 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 LSIM
  • BaseResponseValidateCodeLSIM_v1 - Modelo de respuesta para validación de códigos LSIM
  • ValidateCodeLSIMRequest_v1 - Body de la petición con códigos y parámetros
  • ValidateCodeLSIMResponse_v1 - Body de la respuesta con score
  • ValidateCodeLSIMCodeRequest_v1 - Estructura de códigos individuales

Utilidades y servicios comunes:

  • CustomerUtil - Operaciones de clientes y validaciones
  • ConfigurationUtil - Gestión de configuraciones y tipologías
  • AuditUtil - Auditoría de transacciones
  • SecurityUtil - 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)

json
{
  "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

json
{
  "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

json
{
  "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

mermaid
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

mermaid
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 --> ConfigurationUtil

3.3 Secuencia de ejecución

mermaid
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 JSON

Polí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:

  1. Manejo de excepciones: Implementar logging detallado de excepciones para facilitar debugging
  2. Validaciones: Agregar validaciones más específicas para tipos de documento
  3. Performance: Considerar cache de configuraciones para mejorar tiempos de respuesta

Optimizaciones posibles:

  1. Conexiones a base de datos: Implementar connection pooling para optimizar consultas
  2. Cálculo de score: Considerar cache de scores para clientes frecuentes
  3. Validación de códigos: Implementar validación en paralelo para múltiples códigos

Consideraciones de mantenimiento importantes:

  1. Configuraciones: Mantener actualizadas las tipologías de error en base de datos
  2. Auditoría: Revisar periódicamente los logs de auditoría para detectar patrones anómalos
  3. Monitoreo: Implementar métricas de performance y disponibilidad

Sugerencias de seguridad aplicables:

  1. Rate limiting: Implementar límites más estrictos por IP y usuario
  2. Encriptación: Considerar encriptación adicional para códigos sensibles
  3. Validación de tokens: Implementar validación más robusta de tokens JWT
  4. Logging de seguridad: Agregar logging específico para eventos de seguridad