Skip to content

Customers v1 EnrollValidationCode - Generación de Códigos LISIM

Información del Servicio

Endpoint: /api/customers/v1/enrollvalidationcode
Método: POST
Versión: v1
Categoría: Customer Management

Documentación del Servicio

Descripción general

El servicio customers-v1-enrollvalidationcode es un componente fundamental del sistema BotServices que permite generar códigos de validación LISIM (Línea de Servicio de Identificación y Medición) para clientes. Este servicio forma parte del proceso de autenticación y validación de identidad de los clientes de ETB.

Propósito Principal

  • Generar códigos de validación únicos para verificar la identidad del cliente
  • Enviar códigos de validación por SMS y correo electrónico
  • Validar la información de contacto del cliente (teléfono y email)
  • Proporcionar un token de sesión para procesos posteriores de validación

Categoría de negocio: Gestión de Clientes - Autenticación y Validación

Casos de Uso Principales

  1. Validación de identidad del cliente durante procesos de autogestión
  2. Verificación de información de contacto (teléfono y email)
  3. Proceso de registro y actualización de datos del cliente
  4. Autenticación en portales de autogestión
  5. Validación previa a la realización de trámites comerciales

Especificación Técnica

Capas involucradas:

  1. Controlador: CustomersController.EnrollValidationCode_v1()
  2. Lógica de negocio: CustomerBusiness.EnrollValidationCode_v1()
  3. Utilidades: CustomerUtil.GenerateValidationCode()
  4. Acceso a datos: Operaciones en base de datos MongoDB y servicios externos
  5. Servicios externos:
    • ResponsysServiceClient (validación de correo)
    • ProcesosCodigoLISIMClient (generación de códigos)

Flujo de procesamiento:

  1. Recepción de la solicitud HTTP POST
  2. Validación de autenticación y autorización
  3. Conversión y validación de datos de entrada
  4. Auditoría de entrada
  5. Obtención del origen de la petición
  6. Consulta del cliente en base de datos
  7. Validación de parámetros de configuración
  8. Generación de códigos de validación LISIM
  9. Actualización de información del cliente
  10. Auditoría de salida y BAM
  11. Respuesta con códigos generados

Dependencias principales:

  • CustomerBusiness - Lógica de negocio principal
  • CustomerUtil - Utilidades para gestión de clientes
  • AuditUtil - Gestión de auditoría
  • ConfigurationUtil - Gestión de configuraciones
  • ResponsysServiceClient - Validación de correos
  • ProcesosCodigoLISIMClient - Generación de códigos LISIM
  • CRUD_MDM_CLIENTE - Acceso a datos del cliente

Consideraciones de Seguridad

  • Autenticación mediante token JWT
  • Validación de origen de la petición
  • Auditoría completa de entrada y salida
  • Control de intentos de validación
  • Validación de formato de teléfono y correo
  • Encriptación de datos sensibles

Parámetros de Entrada (Request)

Headers

CampoTipoObligatorioDescripción
AuthorizationstringToken JWT de autenticación
Content-Typestringapplication/json
X-Requested-WithstringNoXMLHttpRequest

Body - WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema que origina la petición
System.NamestringNombre del sistema (ej: "KIOSKOS", "AUTOGESTION")
System.CorrelationIDstringIdentificador único de correlación
System.ProcessingServerstringServidor de procesamiento
PropertyarrayNoPropiedades adicionales de la petición

Body - WSRequestBody

CampoTipoObligatorioDescripción
AuditobjectInformación de auditoría de la aplicación
Audit.CanalstringCanal desde donde se origina la petición
Audit.Id_DevicestringNoIdentificador del dispositivo
Audit.SOstringNoSistema operativo del dispositivo
Audit.IP_AddressstringNoDirección IP del cliente
Audit.IP_LatitudestringNoLatitud de la ubicación IP
Audit.IP_LongitudestringNoLongitud de la ubicación IP
Audit.WhatsApp_Phone_NumberstringNoNúmero de WhatsApp del cliente
Audit.Facebook_UserstringNoUsuario de Facebook del cliente
Audit.Twitter_UserstringNoUsuario de Twitter del cliente
Document_NumberstringNúmero de identificación del cliente
Document_TypestringTipo de identificación (CC, CE, NIT, etc.)
EmailstringCorreo electrónico del cliente
PhonestringNúmero de teléfono del cliente

Respuesta Esperada (Response)

Headers

CampoTipoObligatorioDescripción
Content-Typestringapplication/json
Cache-ControlstringNono-cache

Body - WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema de respuesta
System.NamestringNombre del sistema que procesó la petición
System.CorrelationIDstringIdentificador de correlación de respuesta
ServiceobjectInformación del servicio
Service.StatusstringEstado del servicio (OK/FAIL)
Service.StatusDetailarrayDetalles del estado del servicio
PropertyarrayNoPropiedades adicionales de la respuesta

Body - WSResponseBody

CampoTipoObligatorioDescripción
Code_EmailstringCódigo de validación generado para email
Code_PhonestringCódigo de validación generado para SMS
TokenstringToken único asociado a la validación

Manejo de Errores

CódigoDescripciónEjemplo
ERROR_04Fueron enviados objetos no acordes a la peticiónRequest nulo o campos obligatorios faltantes
ERROR_08El correo electrónico no es válidoFormato de email incorrecto
ERROR_09El número de teléfono no es válidoTeléfono no empieza con 3 o formato inválido
ERROR_10Error al generar códigos de validaciónFallo en servicio LISIM
ERROR_12Error técnico en la generación de códigosExcepción no controlada
OK_01Operación exitosaCódigos generados correctamente

Análisis de Componentes

Modelos y Componentes

Modelos base utilizados:

  • BaseRequest - Clase base para todas las peticiones
  • BaseResponse - Clase base para todas las respuestas
  • BotBaseRequestHeader - Cabecera estándar de petición
  • BotBaseResponseHeader - Cabecera estándar de respuesta
  • ResultModel - Modelo para manejo de resultados y errores

Modelos específicos del servicio:

  • BaseRequestEnrollValidationCode_v1 - Petición específica del servicio
  • BaseResponseEnrollValidationCode_v1 - Respuesta específica del servicio
  • EnrollValidationCodeRequest_v1 - Body de la petición
  • EnrollValidationCodeResponse_v1 - Body de la respuesta

Utilidades y servicios comunes:

  • CustomerUtil - Utilidades para gestión de clientes
  • AuditUtil - Gestión de auditoría y logs
  • ConfigurationUtil - Gestión de configuraciones y tipologías
  • SecurityUtil - Validaciones de seguridad
  • UtilDate - Utilidades de fecha y hora

Patrones de diseño implementados:

  • Singleton Pattern: Utilizado en todas las clases de utilidad
  • Factory Pattern: Para creación de modelos de respuesta
  • Strategy Pattern: Para diferentes tipos de validación
  • Observer Pattern: Para auditoría y logging

Componentes reutilizados:

  • Sistema de auditoría (AuditUtil)
  • Gestión de configuraciones (ConfigurationUtil)
  • Validaciones de seguridad (SecurityUtil)
  • Modelos base de request/response
  • Cliente LISIM (ProcesosCodigoLISIMClient)

Referencias Cruzadas

  • /api/customers/v1/validatecodelsim - Validación de códigos generados
  • /api/customers/v1/get - Consulta de información del cliente
  • /api/customers/v1/update - Actualización de datos del cliente

Ejemplos de Request/Response

Solicitud (Request)

json
{
  "WSRequestHeader": {
    "System": {
      "Name": "KIOSKOS",
      "CorrelationID": "KIOSKOS-21062022-045820",
      "ProcessingServer": "BOT-SERVER-01"
    },
    "Property": [
      {
        "Name": "Version",
        "Value": "1.0"
      }
    ]
  },
  "WSRequestBody": {
    "Audit": {
      "Canal": "KIOSKOS",
      "Id_Device": "KIOSK-001",
      "SO": "Windows 10",
      "IP_Address": "192.168.1.100",
      "IP_Latitude": "4.7110",
      "IP_Longitude": "-74.0721",
      "WhatsApp_Phone_Number": "",
      "Facebook_User": "",
      "Twitter_User": ""
    },
    "Document_Number": "98302931",
    "Document_Type": "CC",
    "Email": "cliente@ejemplo.com",
    "Phone": "3001234567"
  }
}

Respuesta Exitosa

json
{
  "WSResponseHeader": {
    "System": {
      "Name": "BOTServices",
      "CorrelationID": "KIOSKOS-21062022-045820"
    },
    "Service": {
      "Status": "OK",
      "StatusDetail": [
        {
          "ErrorCode": "OK_01",
          "ErrorDetailCode": "OK_01",
          "ErrorDetailMessage": "La respuesta fue exitosa"
        }
      ]
    }
  },
  "WSResponseBody": {
    "Code_Email": "123456",
    "Code_Phone": "789012",
    "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

Respuesta de Error

json
{
  "WSResponseHeader": {
    "System": {
      "Name": "BOTServices",
      "CorrelationID": "KIOSKOS-21062022-045820"
    },
    "Service": {
      "Status": "FAIL",
      "StatusDetail": [
        {
          "ErrorCode": "ERROR_09",
          "ErrorDetailCode": "ERROR_09",
          "ErrorDetailMessage": "El número de teléfono no es válido"
        }
      ]
    }
  },
  "WSResponseBody": null
}

Diagramas Técnicos

3.1 Flujo de Datos

mermaid
graph TD
    A[Cliente] --> B[API Gateway]
    B --> C[CustomersController]
    C --> D[CustomerBusiness]
    D --> E[AuditUtil - Entrada]
    E --> F[Validación de datos]
    F --> G[CustomerUtil]
    G --> H[ResponsysServiceClient]
    H --> I[ProcesosCodigoLISIMClient]
    I --> J[Generación de códigos]
    J --> K[Actualización BD]
    K --> L[AuditUtil - Salida]
    L --> M[Respuesta al cliente]
    
    F -->|Error| N[Error Response]
    H -->|Error| N
    I -->|Error| N
    K -->|Error| N

3.2 Arquitectura de Clases

mermaid
classDiagram
    class CustomersController {
        +EnrollValidationCode_v1(BaseRequestEnrollValidationCode_v1)
    }
    
    class CustomerBusiness {
        +EnrollValidationCode_v1(BaseRequest, string)
    }
    
    class CustomerUtil {
        +GenerateValidationCode(RequestModel, CustomerModel, string, string, ref string, ref string, ref string)
        +Can_Validation_Code(CustomerModel)
        +UpdateValidationCodeAttempt(CustomerModel, bool)
    }
    
    class BaseRequestEnrollValidationCode_v1 {
        +WSRequestHeader: BotBaseRequestHeader
        +WSRequestBody: EnrollValidationCodeRequest_v1
    }
    
    class BaseResponseEnrollValidationCode_v1 {
        +WSResponseHeader: BotBaseResponseHeader
        +WSResponseBody: EnrollValidationCodeResponse_v1
    }
    
    class EnrollValidationCodeRequest_v1 {
        +Audit: Audit
        +Document_Number: string
        +Document_Type: string
        +Email: string
        +Phone: string
    }
    
    class EnrollValidationCodeResponse_v1 {
        +Code_Email: string
        +Code_Phone: string
        +Token: string
    }
    
    CustomersController --> CustomerBusiness
    CustomerBusiness --> CustomerUtil
    CustomerBusiness --> BaseResponseEnrollValidationCode_v1
    BaseRequestEnrollValidationCode_v1 --> EnrollValidationCodeRequest_v1
    BaseResponseEnrollValidationCode_v1 --> EnrollValidationCodeResponse_v1

3.3 Secuencia de Ejecución

mermaid
sequenceDiagram
    participant Client
    participant Controller as CustomersController
    participant Business as CustomerBusiness
    participant CustomerUtil
    participant ResponsysClient
    participant LISIMClient
    participant Database
    participant AuditUtil
    
    Client->>Controller: POST /api/customers/v1/enrollvalidationcode
    Controller->>Business: EnrollValidationCode_v1()
    Business->>AuditUtil: Save_Request() - Entrada
    Business->>Business: Validación de datos de entrada
    alt Datos válidos
        Business->>CustomerUtil: GenerateValidationCode()
        CustomerUtil->>ResponsysClient: ValidaCorreo()
        ResponsysClient-->>CustomerUtil: Resultado validación
        alt Correo válido
            CustomerUtil->>LISIMClient: GenerarCodigosValidacionLISIM()
            LISIMClient-->>CustomerUtil: Códigos generados
            CustomerUtil->>Database: Actualizar información cliente
            Database-->>CustomerUtil: Confirmación
            CustomerUtil-->>Business: Resultado exitoso
        else Correo inválido
            CustomerUtil-->>Business: ERROR_08
        end
    else Datos inválidos
        Business-->>Business: ERROR_04
    end
    Business->>AuditUtil: Save_Request() - Salida
    Business->>AuditUtil: Save_Generate_Validation_Codes()
    Business-->>Controller: BaseResponseEnrollValidationCode_v1
    Controller-->>Client: Respuesta HTTP

Políticas y Consideraciones

Políticas de Seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante JWT (JSON Web Token)
  • Validación de origen de la petición mediante SecurityUtil
  • Control de acceso basado en roles y permisos
  • Validación de IP y geolocalización

Validaciones de seguridad implementadas:

  • Validación de formato de correo electrónico
  • Validación de formato de número de teléfono (debe empezar con 3 y tener máximo 10 dígitos)
  • Control de intentos de validación por cliente
  • Validación de tipo de documento
  • Sanitización de datos de entrada

Límites de tasa (rate limits):

  • Control de intentos por cliente mediante parámetros configurables
  • Límite de intentos por día configurado en base de datos
  • Tiempo de espera entre intentos (horas configurables)
  • Bloqueo temporal tras exceder límites

SLAs aplicables:

  • Tiempo de respuesta máximo: 30 segundos
  • Disponibilidad: 99.9%
  • Tolerancia a fallos: 3 reintentos automáticos
  • Tiempo de procesamiento: < 5 segundos

Recomendaciones y Mejores Prácticas

Puntos de mejora específicos:

  1. Manejo de excepciones:
csharp
// Actual - Captura genérica
catch
{
    continuar = false;
    Result = new BotModel.Principal.ResultModel(ConfigurationUtil.GetInstance.Get_Tipology(Tipologias, "ERROR_12"));
}

// Recomendado - Captura específica
catch (Exception ex)
{
    continuar = false;
    _telemetryTracker.TrackException(ex);
    Result = new BotModel.Principal.ResultModel(ConfigurationUtil.GetInstance.Get_Tipology(Tipologias, "ERROR_12"));
}
  1. Validación de parámetros:
csharp
// Actual - Validación básica
if (String.IsNullOrEmpty(Phone) || !Phone.StartsWith("3") || Phone.Length > 10 || !Phone.All(char.IsDigit))

// Recomendado - Validación con regex
if (!Regex.IsMatch(Phone, @"^3\d{9}$"))
  1. Logging estructurado:
csharp
// Agregar logging estructurado para mejor trazabilidad
_logger.LogInformation("Generando códigos de validación para cliente {DocumentType}:{DocumentNumber}", 
    Customer.Document_Type, Customer.Document_Number);

Optimizaciones posibles:

  1. Caché de configuraciones:

    • Implementar caché distribuido para tipologías de error
    • Reducir consultas a base de datos para configuraciones
  2. Procesamiento asíncrono:

    • Convertir operaciones de auditoría a async/await
    • Implementar procesamiento en background para logs
  3. Validación temprana:

    • Validar formato de datos antes de consultas a servicios externos
    • Implementar circuit breaker para servicios externos

Consideraciones de mantenimiento:

  1. Monitoreo:

    • Implementar métricas de rendimiento
    • Agregar alertas para fallos de servicios externos
    • Monitorear tasa de éxito/fallo
  2. Documentación:

    • Mantener documentación de cambios en el servicio
    • Documentar nuevos códigos de error
    • Actualizar ejemplos de uso
  3. Testing:

    • Implementar tests unitarios para CustomerUtil
    • Agregar tests de integración para flujo completo
    • Implementar tests de carga para validar rendimiento

Sugerencias de seguridad:

  1. Encriptación:

    • Encriptar códigos de validación en tránsito
    • Implementar rotación de tokens
    • Agregar firma digital a las respuestas
  2. Validación adicional:

    • Implementar validación de dispositivo
    • Agregar verificación de comportamiento (fraude)
    • Validar geolocalización del cliente
  3. Auditoría mejorada:

    • Logging de eventos de seguridad
    • Alertas para patrones sospechosos
    • Retención de logs por períodos configurables

Notas Adicionales

  • El servicio es parte del ecosistema de autenticación LISIM de ETB
  • Los códigos generados tienen un tiempo de vida limitado
  • El token devuelto debe ser utilizado en el servicio de validación correspondiente
  • El servicio está diseñado para ser escalable y tolerante a fallos