Enrutamiento e Inicialización de Conversaciones Luz - max-v2-route
Información del Servicio
Endpoint: /api/max/v2/route
Método: POST
Versión: v2
Categoría: Atención y Soporte
Documentación del Servicio
Descripción general
El servicio max-v2-route es un endpoint para enrutar e inicializar una conversación en Luz. Este servicio permite obtener información completa de clientes, servicios, órdenes pendientes y PQRs asociadas a un cliente o servicio específico.
Categoría de negocio: Servicios de atención al cliente y gestión de conversaciones.
Casos de uso principales:
- Inicialización de conversaciones en el chatbot Luz
- Consulta de información completa del cliente por documento de identidad
- Consulta de servicios por cuenta de facturación
- Consulta de servicios por número telefónico
- Obtención de órdenes pendientes asociadas
- Consulta de PQRs activas del cliente
Especificación técnica
- Endpoint completo:
/api/max/v2/route - Método HTTP: POST
- Capas involucradas:
- Controlador: MaxController.Route_v2()
- Lógica de negocio: MaxBusiness.Route_v2()
- Acceso a datos: CustomerUtil2, ServiceUtil2, OrderUtil2, PQRUtil2
Flujo de procesamiento:
- Validación de autenticación y autorización
- Auditoría de entrada
- Conversión y validación de datos de entrada
- Obtención del origen de la petición
- Verificación del estado de la API
- Consulta de información según parámetros proporcionados
- Auditoría de salida y BAM
- Retorno de respuesta estructurada
Dependencias principales:
- MaxBusiness (Lógica de negocio)
- CustomerUtil2 (Gestión de clientes)
- ServiceUtil2 (Gestión de servicios)
- OrderUtil2 (Gestión de órdenes)
- PQRUtil2 (Gestión de PQRs)
- ConfigurationUtil (Configuraciones)
- AuditUtil (Auditoría)
Consideraciones de seguridad:
- Autenticación requerida mediante [Authorize]
- Validación de origen de petición
- Auditoría completa de entrada y salida
- Manejo de errores estructurado
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Authorization | string | Sí | Token de autorización Bearer |
| Content-Type | string | Sí | application/json |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSRequestHeader | object | Sí | Cabecera de la petición con información del sistema |
| WSRequestBody | object | Sí | Cuerpo de la petición con datos específicos |
Estructura de WSRequestHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | No | 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 WSRequestBody
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Audit | object | No | Auditoría de la aplicación |
| Billing_Account | string | No* | Cuenta de facturación |
| Customer | object | No* | Información del cliente |
| Phone | string | No* | Número de conexión |
*Al menos uno de estos campos debe estar presente
Estructura de WSRequestBody.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 WSRequestBody.Customer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Document_Number | string | Sí | Número de documento |
| Document_Type | string | Sí | Tipo de documento |
Respuesta esperada (Response)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSResponseHeader | object | Sí | Cabecera de la respuesta con información del sistema |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Customer | object | No | Información del cliente |
| RecoverExperience | object | No | Información del cliente recurrente |
| Service | object | No | Información del servicio |
| Orders | array | No | Lista de órdenes pendientes |
| PQRs | array | No | Lista de PQRs pendientes |
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 | Propiedades asociadas 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.Service.StatusDetail
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| ErrorCode | string | No | Código del error |
| ErrorDetailCode | string | No | Detalle del error |
| ErrorMessage | string | No | Mensaje del error |
| ErrorMessageUser | string | No | Mensaje del error para el usuario |
Estructura de WSResponseHeader.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la propiedad |
| Value | string | No | Valor de la propiedad |
Estructura de Customer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Address | string | No | Dirección principal |
| Addresses | array | No | Direcciones asociadas al cliente |
| Billings | array | No | Cuentas facturación asociadas al cliente |
| City | object | No | Ciudad asociada al cliente |
| Civil_Status | string | No | Estado civil del cliente |
| Contacts | array | No | Contactos asociados al cliente |
| Creation_Date | object | No | Fecha creación del cliente |
| Customer_Type | string | No | Tipo de cliente |
| Department | object | No | Departamento asociado al cliente |
| Directv_Subscription | object | No | Subscripción de Directv |
| Gender | string | No | Género del cliente |
| Habeas_Data | object | No | Información de la decisión de tratamiento de datos personales |
| MiETBUser | object | No | Información de la cuenta de MiETB |
| Phone | string | No | Número de teléfono del cliente |
| Services | array | No | Listado de servicios asociados al cliente |
| State | string | No | Estado del cliente |
| Update_Date | object | No | Fecha de actualización del cliente |
Estructura de Customer.Addresses
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Address | string | No | Dirección |
| City | object | No | Ciudad |
| Department | object | No | Departamento |
| Neighborhood | string | No | Barrio |
| Stratum | string | No | Estrato |
Estructura de Customer.Billings
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Billing_Account | string | No | Cuenta de facturación |
| Service_Account | string | No | Cuenta de servicio |
| Phone | string | No | Número de teléfono |
Estructura de Customer.City
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Code | string | No | Código de la ciudad |
| Name | string | No | Nombre de la ciudad |
Estructura de Customer.Contacts
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Document_Number | string | No | Número de documento |
| Document_Type | string | No | Tipo de documento |
| string | No | Correo electrónico | |
| Name | string | No | Nombre del contacto |
| Phone | string | No | Teléfono del contacto |
Estructura de Customer.Creation_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de creación |
| Formatted_Date | string | No | Fecha formateada |
Estructura de Customer.Department
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Code | string | No | Código del departamento |
| Name | string | No | Nombre del departamento |
Estructura de Customer.Directv_Subscription
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Account_Number | string | No | Número de cuenta |
| Status | string | No | Estado de la suscripción |
Estructura de Customer.Habeas_Data
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Decision | string | No | Decisión tomada por el cliente |
| Date | DateTime | No | Fecha de la decisión |
Estructura de Customer.MiETBUser
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Username | string | No | Nombre de usuario |
| Status | string | No | Estado de la cuenta |
Estructura de Customer.Services
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Phone | string | No | Número de teléfono |
| Technology | string | No | Tecnología del servicio |
| Status | string | No | Estado del servicio |
Estructura de Customer.Update_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de actualización |
| Formatted_Date | string | No | Fecha formateada |
Estructura de RecoverExperience
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Attention_Type | string | No | Tipo de atención |
| Category | string | No | Categoría del cliente |
| Recover_Experience | bool | No | Bandera que determina si se debe recuperar la experiencia |
Estructura de Service
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Address | object | No | Dirección asociada al servicio |
| Billing | object | No | Cuenta facturación asociada al servicio |
| Bundle | object | No | Bundle del servicio |
| Charging | object | No | Información de OCS |
| Collections | object | No | Información de Collections |
| Contracted_Offer | object | No | Oferta contratada del servicio |
| Creation_Date | object | No | Fecha creación del servicio |
| Customer | object | No | Cliente asociado al servicio |
| Directv_Subscription | object | No | Información relacionada a la subscripción de Directv |
| Files | array | No | Archivos asociados al servicio |
| Has_Family_And_Friends | bool | No | Bandera que determina si el servicio forma parte de una comunidad |
| Has_PasaGigas | bool | No | Bandera que determina si el servicio tiene Pasa Gigas |
| Home | object | No | Información del hogar asociado al servicio |
| Inventory | object | No | Información asociada al inventario |
| MiETBUser | object | No | Usuario de MiETB asociado al servicio |
| OTA | object | No | Información del equipo asociado a la línea |
| PasaGigas | object | No | Beneficio PasaGigas asociado al servicio |
| Permanence_Clause | array | No | Clausula de permanencia asociada al servicio |
| Rate_Increase | object | No | Incremento de tarifas del servicio |
| Update_Date | object | No | Fecha actulización del servicio |
Estructura de Service.Address
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Address | string | No | Dirección |
| City | object | No | Ciudad |
| Department | object | No | Departamento |
| Neighborhood | string | No | Barrio |
| Stratum | string | No | Estrato |
Estructura de Service.Billing
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Billing_Account | string | No | Cuenta de facturación |
| Service_Account | string | No | Cuenta de servicio |
| Phone | string | No | Número de teléfono |
Estructura de Service.Bundle
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre del bundle |
| Type | string | No | Tipo de bundle |
| Status | string | No | Estado del bundle |
Estructura de Service.Charging
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Account_Status | string | No | Estado de la cuenta |
| Balance | decimal | No | Saldo disponible |
| Last_Recharge | DateTime | No | Última recarga |
Estructura de Service.Collections
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Debt_Amount | decimal | No | Monto de la deuda |
| Due_Date | DateTime | No | Fecha de vencimiento |
| Status | string | No | Estado de cobranza |
Estructura de Service.Contracted_Offer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la oferta |
| Type | string | No | Tipo de oferta |
| Status | string | No | Estado de la oferta |
Estructura de Service.Creation_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de creación |
| Formatted_Date | string | No | Fecha formateada |
Estructura de Service.Customer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Document_Number | string | No | Número de documento |
| Document_Type | string | No | Tipo de documento |
| Name | string | No | Nombre del cliente |
Estructura de Service.Directv_Subscription
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Account_Number | string | No | Número de cuenta |
| Status | string | No | Estado de la suscripción |
Estructura de Service.Files
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre del archivo |
| Type | string | No | Tipo de archivo |
| Url | string | No | URL del archivo |
Estructura de Service.Home
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Address | string | No | Dirección del hogar |
| Type | string | No | Tipo de hogar |
Estructura de Service.Inventory
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Equipment | string | No | Equipo |
| Serial_Number | string | No | Número de serie |
| Status | string | No | Estado del inventario |
Estructura de Service.MiETBUser
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Username | string | No | Nombre de usuario |
| Status | string | No | Estado de la cuenta |
Estructura de Service.OTA
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Equipment | string | No | Equipo |
| Status | string | No | Estado del equipo |
Estructura de Service.PasaGigas
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Available | bool | No | Disponible |
| Amount | decimal | No | Cantidad disponible |
Estructura de Service.Permanence_Clause
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Type | string | No | Tipo de cláusula |
| End_Date | DateTime | No | Fecha de finalización |
| Status | string | No | Estado de la cláusula |
Estructura de Service.Rate_Increase
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Percentage | decimal | No | Porcentaje de incremento |
| Effective_Date | DateTime | No | Fecha efectiva |
| Status | string | No | Estado del incremento |
Estructura de Service.Update_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de actualización |
| Formatted_Date | string | No | Fecha formateada |
Estructura de Orders
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Agenda | object | No | Información relacionada al agendamiento de la orden |
| Cancelation_Info | object | No | Información asociada a la cancelación de la orden |
| Channel | string | No | Canal asociado a la orden |
| Characteristics | array | No | Listado de caracteristicas de la orden |
| Creator_User | string | No | Usuario creador de la orden |
| Customer | object | No | Cliente asociado a la orden |
| Id_Mongo | string | No | Id de mongo de la orden |
| Modifying_User | string | No | Usuario modificador de la orden |
| New_Offer | object | No | Nueva oferta asociada a la orden |
| Old_Offer | object | No | Oferta anterior asociada a la orden |
| Promotions | array | No | Promociones asociadas a la orden |
| Sub_Channel | string | No | Sub canal asociado a la orden |
| Technician | object | No | Técnico asociado a la orden |
| Technology | string | No | Tecnología asociada a la orden (FIJA o MOVIL) |
Estructura de Orders.Agenda
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de agenda |
| Time_Slot | string | No | Franja horaria |
| Status | string | No | Estado de la agenda |
Estructura de Orders.Cancelation_Info
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Reason | string | No | Motivo de cancelación |
| Date | DateTime | No | Fecha de cancelación |
| User | string | No | Usuario que canceló |
Estructura de Orders.Characteristics
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la característica |
| Value | string | No | Valor de la característica |
| Type | string | No | Tipo de característica |
Estructura de Orders.Customer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Document_Number | string | No | Número de documento |
| Document_Type | string | No | Tipo de documento |
| Name | string | No | Nombre del cliente |
Estructura de Orders.New_Offer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la oferta |
| Type | string | No | Tipo de oferta |
| Price | decimal | No | Precio de la oferta |
Estructura de Orders.Old_Offer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la oferta |
| Type | string | No | Tipo de oferta |
| Price | decimal | No | Precio de la oferta |
Estructura de Orders.Promotions
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la promoción |
| Type | string | No | Tipo de promoción |
| Discount | decimal | No | Descuento de la promoción |
Estructura de Orders.Technician
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre del técnico |
| Id | string | No | Identificador del técnico |
| Phone | string | No | Teléfono del técnico |
Estructura de PQRs
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Agenda | object | No | Agenda activa de la PQR |
| Agendas | array | No | Listado de agendas asociadas a la PQR |
| Activities | array | No | Lista de actividades de la PQR |
| Assigned_User | string | No | Usuario asignado a la PQR |
| Billing_Account | object | No | Cuenta de facturación asociada a la PQR |
| Characteristics | array | No | Listado de caracteristicas de la PQR |
| Contact_Document_Number | string | No | Número documento de contacto |
| Contact_Document_Type | string | No | Tipo de documento de contacto |
| Creation_Date | object | No | Fecha de creación de la PQR |
| Creation_User | string | No | Usuario creador de la PQR |
| Is_Agenda_Suspended | bool | No | Bandera que determina si la agenda de la PQR está suspendida |
| Is_Son | bool | No | Bandera que determina si es una PQR hija |
| Notification_Medium | string | No | Medio de notificación |
| Modification_Date | object | No | Fecha de modificación de la PQR |
| Order | object | No | Orden asociada a la PQR |
| Radication_Date | object | No | Fecha de radicación de la PQR |
| Reception_Medium | string | No | Medio de recepción |
| Service | object | No | Servicio relacionado a la PQR |
| Sub_Channel | string | No | Sub canal de la PQR |
| Suspension_Detail | object | No | Listado de suspensiones de la PQR |
| Solution_Date | object | No | Fecha de solucion de la PQR |
Estructura de PQRs.Agenda
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de agenda |
| Time_Slot | string | No | Franja horaria |
| Status | string | No | Estado de la agenda |
Estructura de PQRs.Agendas
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de agenda |
| Time_Slot | string | No | Franja horaria |
| Status | string | No | Estado de la agenda |
Estructura de PQRs.Activities
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Type | string | No | Tipo de actividad |
| Description | string | No | Descripción de la actividad |
| Date | DateTime | No | Fecha de la actividad |
Estructura de PQRs.Billing_Account
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Billing_Account | string | No | Cuenta de facturación |
| Service_Account | string | No | Cuenta de servicio |
| Phone | string | No | Número de teléfono |
Estructura de PQRs.Characteristics
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la característica |
| Value | string | No | Valor de la característica |
| Type | string | No | Tipo de característica |
Estructura de PQRs.Creation_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de creación |
| Formatted_Date | string | No | Fecha formateada |
Estructura de PQRs.Modification_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de modificación |
| Formatted_Date | string | No | Fecha formateada |
Estructura de PQRs.Order
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Id | string | No | Identificador de la orden |
| Type | string | No | Tipo de orden |
| Status | string | No | Estado de la orden |
Estructura de PQRs.Radication_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de radicación |
| Formatted_Date | string | No | Fecha formateada |
Estructura de PQRs.Service
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Phone | string | No | Número de teléfono |
| Technology | string | No | Tecnología del servicio |
| Status | string | No | Estado del servicio |
Estructura de PQRs.Suspension_Detail
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Reason | string | No | Motivo de suspensión |
| Date | DateTime | No | Fecha de suspensión |
| Status | string | No | Estado de la suspensión |
Estructura de PQRs.Solution_Date
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Date | DateTime | No | Fecha de solución |
| Formatted_Date | string | No | Fecha formateada |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_04 | El request es nulo o no contiene los parámetros requeridos | "El request es nulo" |
| ERROR_07 | Cliente no encontrado | "Cliente no encontrado con los parámetros proporcionados" |
| BOTERROR | Error interno del sistema | "se ha generado una excepcion no controlada" |
Análisis de Componentes
Modelos y componentes
Modelos base utilizados:
- BaseRequestRoute_v2 (Request)
- BaseResponseRoute_v2 (Response)
- RouteRequest_v2 (Body Request)
- RouteResponse_v2 (Body Response)
- RouteRequestCustomer_v2 (Customer Request)
Utilidades y servicios comunes:
- CustomerUtil2 (Gestión de clientes)
- ServiceUtil2 (Gestión de servicios)
- OrderUtil2 (Gestión de órdenes)
- PQRUtil2 (Gestión de PQRs)
- ConfigurationUtil (Configuraciones)
- AuditUtil (Auditoría)
Patrones de diseño implementados:
- Singleton (MaxBusiness)
- Factory (Util classes)
- Repository (Data access)
Componentes reutilizados:
- BotBaseRequestHeader/ResponseHeader
- Audit (Auditoría)
- CustomerModel, ServiceModel, OrderModel, PQRModel
Referencias cruzadas:
- MaxController (Controlador principal)
- MaxBusiness (Lógica de negocio)
- CustomerUtil2, ServiceUtil2, OrderUtil2, PQRUtil2 (Utilidades)
Ejemplos de Request/Response
Solicitud (request)
{
"WSRequestHeader": {
"System": {
"Name": "MAX",
"CorrelationID": "12345-67890",
"ProcessingServer": "MAX-SERVER-01"
},
"Property": [
{
"Name": "CHANNEL",
"Value": "WEB"
}
]
},
"WSRequestBody": {
"Audit": {
"Canal": "WEB",
"Id_Device": "DESKTOP-ABC123",
"SO": "Windows 10",
"IP_Address": "192.168.1.100"
},
"Customer": {
"Document_Type": "CC",
"Document_Number": "12345678"
}
}
}Respuesta exitosa
{
"WSResponseHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.1813156884341699",
"processingServer": null
},
"Service": {
"status": "OK",
"responseDate": "2025-07-12T17:00:05.0765152Z",
"processingServer": null,
"statusDetail": [
{
"errorCode": "OK_01",
"errorDetailCode": "La solicitud LUZ-0.35358949387322314 fue exitosa. Se el cliente / servicio",
"errorMessage": "La solicitud fue exitosa",
"errorMessageUser": null
}
]
},
"Property": []
},
"WSResponseBody": {
"Customer": {
"Address": "CL 0 0 0 SMZ 10 MADRID MZ 2 CA 6",
"Addresses": null,
"Billings": null,
"City": {
"Country": {
"Id": "593b0ac99a8e4177d410df4d",
"Name": "Colombia"
},
"Department": {
"Id": "50",
"Name": "META"
},
"Home_Coverage": true,
"Home_Coverage_Type": "NOGIS",
"Localities": null,
"Mobile_Coverage": true,
"Mobile_Coverages": [
{
"Days": "2",
"Hours": "0",
"Operator": "DHL",
"Type": "BASICA"
}
],
"Id": "50001",
"Name": "VILLAVICENCIO"
},
"Civil_Status": null,
"Contacts": null,
"Creation_Date": {
"Date": "2023-08-10T15:42:25.182Z",
"Format_1": "10/08",
"Format_2": "10/08/2023",
"Format_3": "10/08/2023 15:42:25",
"Format_4": "10/08/2023 03:42:25 PM",
"Day": {
"Format_1": "10",
"Format_2": "Jue.",
"Format_3": "Jueves"
},
"Month": {
"Format_1": "08",
"Format_2": "Ago.",
"Format_3": "Agosto"
},
"Year": {
"Format_1": "23",
"Format_2": "2023",
"Format_3": "02023"
},
"Hour": {
"Format_1": "15:42:25",
"Format_2": "03:42:25 PM",
"Format_3": "15",
"Format_4": "03 PM",
"Format_5": "42",
"Format_6": "25"
}
},
"Customer_Type": null,
"Department": {
"Cities": [
{
"Id": "50110",
"Name": "BARRANCA DE UPIA"
},
{
"Id": "50006",
"Name": "ACACIAS"
}
],
"Country": {
"Id": "593b0ac99a8e4177d410df4d",
"Name": "Colombia"
},
"Coverage": true,
"Id": "50",
"Name": "META"
},
"Directv_Subscription": null,
"Gender": null,
"Habeas_Data": null,
"MiETBUser": null,
"Phone": "6013777777",
"State": "PENDIENTE",
"Update_Date": {
"Date": "2023-08-11T08:42:58.628Z",
"Format_1": "11/08",
"Format_2": "11/08/2023",
"Format_3": "11/08/2023 08:42:58",
"Format_4": "11/08/2023 08:42:58 AM",
"Day": {
"Format_1": "11",
"Format_2": "Vie.",
"Format_3": "Viernes"
},
"Month": {
"Format_1": "08",
"Format_2": "Ago.",
"Format_3": "Agosto"
},
"Year": {
"Format_1": "23",
"Format_2": "2023",
"Format_3": "02023"
},
"Hour": {
"Format_1": "08:42:58",
"Format_2": "08:42:58 AM",
"Format_3": "08",
"Format_4": "08 AM",
"Format_5": "42",
"Format_6": "58"
}
},
"ATDP": {
"Channel": "Portal Fija",
"Date": {
"Date": "2023-08-10T20:43:33.886Z",
"Format_1": "10/08",
"Format_2": "10/08/2023",
"Format_3": "10/08/2023 20:43:33",
"Format_4": "10/08/2023 08:43:33 PM",
"Day": {
"Format_1": "10",
"Format_2": "Jue.",
"Format_3": "Jueves"
},
"Month": {
"Format_1": "08",
"Format_2": "Ago.",
"Format_3": "Agosto"
},
"Year": {
"Format_1": "23",
"Format_2": "2023",
"Format_3": "02023"
},
"Hour": {
"Format_1": "20:43:33",
"Format_2": "08:43:33 PM",
"Format_3": "20",
"Format_4": "08 PM",
"Format_5": "43",
"Format_6": "33"
}
},
"Decision": "AUTORIZA",
"PQR": "64d54bb0c7c6a3141802b8e7",
"User": "braylopo"
},
"Birthday": null,
"Business": null,
"Collection_Communications": null,
"Document_Number": "1234567890",
"Document_Type": "CC",
"Email": "pruebamailcliente@gmail.com",
"Mobile_Phone": "3058337166",
"Mobile_Phone2": "",
"Name": {
"Complete_Name": "ANA FRANCISCA SILVA",
"First_Name": "ANA",
"First_Surname": "SILVA",
"Names": "ANA FRANCISCA",
"Second_Name": "FRANCISCA",
"Second_Surname": "",
"Surnames": "SILVA "
},
"Segmentation": {
"Attention_Scheme": null,
"Category": "PLATA",
"Profile": null,
"Segment": "Hogares",
"UEN": "Hogares y MiPymes",
"Segment_UEN": "Hogares"
},
"Validation_Code": {
"Is_Blocked": false,
"Is_Enabled": false,
"Last_Try": {
"Date": "0001-01-01T00:00:00",
"Format_1": null,
"Format_2": null,
"Format_3": null,
"Format_4": null,
"Day": null,
"Month": null,
"Year": null,
"Hour": null
},
"Reset_Date": null,
"Retries": 0,
"Retries_Remain": null
}
},
"RecoverExperience": null,
"Service": null,
"Orders": null,
"PQRs": null
}
}Respuesta de error
{
"WSResponseHeader": {
"System": {
"Name": "MAX",
"CorrelationID": "12345-67890",
"ProcessingServer": "MAX-SERVER-01"
},
"Service": {
"Status": "ERROR",
"ResponseDate": "2024-12-19T10:30:00",
"ProcessingServer": "MAX-SERVER-01",
"StatusDetail": [
{
"ErrorCode": "ERROR_07",
"ErrorDetailCode": "Cliente no encontrado con los parámetros proporcionados",
"ErrorMessage": "No se encontró información del cliente con documento CC 12345678",
"ErrorMessageUser": "No se encontró información del cliente"
}
]
},
"Property": [
{
"Name": "CHANNEL",
"Value": "WEB"
}
]
},
"WSResponseBody": {
"Customer": null,
"Orders": null,
"PQRs": null
}
}Diagramas Técnicos
3.1 Flujo de datos
graph TD
A[Recepción de la solicitud] --> B[MaxController.Route_v2]
B --> C[Auditoría de entrada]
C --> D[Validación de datos]
D --> E[Obtención de origen]
E --> F[Verificación API]
F --> G{Parámetros de consulta}
G -->|Documento| H[Consulta por cliente]
G -->|Cuenta facturación| I[Consulta por servicio]
G -->|Teléfono| J[Consulta por teléfono]
H --> K[Obtención de órdenes y PQRs]
I --> K
J --> K
K --> L[Auditoría de salida]
L --> M[Respuesta estructurada]3.2 Arquitectura de clases
classDiagram
class MaxController {
+Route_v2(BaseRequestRoute_v2) Task~BaseResponseRoute_v2~
}
class MaxBusiness {
+Route_v2(BaseRequest, string) Task~BaseResponseRoute_v2~
}
class CustomerUtil2 {
+GetById(Origin, string, string, Filter) Task~CustomerModel~
+GetRecoverExperience(Origin, Customer, string) Task~CustomerRecoverExperience~
}
class ServiceUtil2 {
+GetByBilling(Origin, string, Filter) Task~ServiceModel~
+GetByPhone(Origin, string, Filter) Task~ServiceModel~
}
class OrderUtil2 {
+GetByCustomer(Origin, string, string, Filter) Task~List~OrderModel~~
+GetByService(Origin, Service, Filter) Task~List~OrderModel~~
}
class PQRUtil2 {
+GetByCustomer(string, string, Filter) Task~List~PQRModel~~
+GetByService(string, string, Filter) Task~List~PQRModel~~
}
MaxController --> MaxBusiness
MaxBusiness --> CustomerUtil2
MaxBusiness --> ServiceUtil2
MaxBusiness --> OrderUtil2
MaxBusiness --> PQRUtil23.3 Secuencia de ejecución
sequenceDiagram
participant Cliente
participant MaxController
participant MaxBusiness
participant CustomerUtil2
participant ServiceUtil2
participant OrderUtil2
participant PQRUtil2
participant AuditUtil
Cliente->>MaxController: POST /api/max/v2/route
MaxController->>MaxBusiness: Route_v2(request, name)
MaxBusiness->>AuditUtil: Save_Request_Async()
MaxBusiness->>MaxBusiness: Validación de datos
MaxBusiness->>MaxBusiness: Obtención de origen
MaxBusiness->>MaxBusiness: Verificación API
alt Consulta por documento
MaxBusiness->>CustomerUtil2: GetById()
CustomerUtil2-->>MaxBusiness: CustomerModel
MaxBusiness->>OrderUtil2: GetByCustomer()
MaxBusiness->>PQRUtil2: GetByCustomer()
else Consulta por cuenta
MaxBusiness->>ServiceUtil2: GetByBilling()
ServiceUtil2-->>MaxBusiness: ServiceModel
MaxBusiness->>OrderUtil2: GetByService()
MaxBusiness->>PQRUtil2: GetByService()
else Consulta por teléfono
MaxBusiness->>ServiceUtil2: GetByPhone()
ServiceUtil2-->>MaxBusiness: ServiceModel
MaxBusiness->>OrderUtil2: GetByService()
MaxBusiness->>PQRUtil2: GetByService()
MaxBusiness->>CustomerUtil2: GetRecoverExperience()
end
OrderUtil2-->>MaxBusiness: List<OrderModel>
PQRUtil2-->>MaxBusiness: List<PQRModel>
CustomerUtil2-->>MaxBusiness: CustomerRecoverExperience
MaxBusiness->>AuditUtil: Save_Request_Async()
MaxBusiness->>AuditUtil: Save_Max_Route()
MaxBusiness-->>MaxController: BaseResponseRoute_v2
MaxController-->>Cliente: Response JSONPolíticas y Consideraciones
Políticas de seguridad
Mecanismos de autenticación y autorización:
- Autenticación mediante [Authorize] attribute
- Validación de tokens Bearer
- Verificación de origen de petición
Validaciones de seguridad implementadas:
- Validación de datos de entrada
- Sanitización de parámetros
- Control de acceso por origen
Límites de tasa (rate limits):
- No aplica límite específico
- Control por autenticación
SLAs aplicables:
- Tiempo de respuesta: < 5 segundos
- Disponibilidad: 99.9%
Recomendaciones y mejores prácticas
Puntos de mejora específicos en el código:
- Implementar validación más robusta de parámetros de entrada
- Agregar logging detallado para debugging
- Optimizar consultas a base de datos con índices apropiados
Optimizaciones posibles:
- Implementar cache para consultas frecuentes
- Paralelizar consultas de órdenes y PQRs
- Optimizar consultas de MongoDB
Consideraciones de mantenimiento importantes:
- Mantener actualizada la documentación de modelos
- Revisar regularmente los filtros de consulta
- Monitorear el rendimiento de las consultas
Sugerencias de seguridad aplicables:
- Implementar rate limiting por IP
- Agregar validación de entrada más estricta
- Implementar auditoría de acceso más detallada