Skip to content

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:

  1. Validación de autenticación y autorización
  2. Auditoría de entrada
  3. Conversión y validación de datos de entrada
  4. Obtención del origen de la petición
  5. Verificación del estado de la API
  6. Consulta de información según parámetros proporcionados
  7. Auditoría de salida y BAM
  8. 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

CampoTipoObligatorioDescripción
AuthorizationstringToken de autorización Bearer
Content-Typestringapplication/json

Body

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera de la petición con información del sistema
WSRequestBodyobjectCuerpo de la petición con datos específicos

Estructura de WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformació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 WSRequestBody

CampoTipoObligatorioDescripción
AuditobjectNoAuditoría de la aplicación
Billing_AccountstringNo*Cuenta de facturación
CustomerobjectNo*Información del cliente
PhonestringNo*Número de conexión

*Al menos uno de estos campos debe estar presente

Estructura de WSRequestBody.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 WSRequestBody.Customer

CampoTipoObligatorioDescripción
Document_NumberstringNúmero de documento
Document_TypestringTipo de documento

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta con información del sistema

Body

CampoTipoObligatorioDescripción
CustomerobjectNoInformación del cliente
RecoverExperienceobjectNoInformación del cliente recurrente
ServiceobjectNoInformación del servicio
OrdersarrayNoLista de órdenes pendientes
PQRsarrayNoLista de PQRs pendientes

Estructura de WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformación asociada al sistema
ServiceobjectNoInformación asociada a la ejecución del servicio
PropertyarrayNoPropiedades asociadas 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.Service.StatusDetail

CampoTipoObligatorioDescripción
ErrorCodestringNoCódigo del error
ErrorDetailCodestringNoDetalle del error
ErrorMessagestringNoMensaje del error
ErrorMessageUserstringNoMensaje del error para el usuario

Estructura de WSResponseHeader.Property

CampoTipoObligatorioDescripción
NamestringNoNombre de la propiedad
ValuestringNoValor de la propiedad

Estructura de Customer

CampoTipoObligatorioDescripción
AddressstringNoDirección principal
AddressesarrayNoDirecciones asociadas al cliente
BillingsarrayNoCuentas facturación asociadas al cliente
CityobjectNoCiudad asociada al cliente
Civil_StatusstringNoEstado civil del cliente
ContactsarrayNoContactos asociados al cliente
Creation_DateobjectNoFecha creación del cliente
Customer_TypestringNoTipo de cliente
DepartmentobjectNoDepartamento asociado al cliente
Directv_SubscriptionobjectNoSubscripción de Directv
GenderstringNoGénero del cliente
Habeas_DataobjectNoInformación de la decisión de tratamiento de datos personales
MiETBUserobjectNoInformación de la cuenta de MiETB
PhonestringNoNúmero de teléfono del cliente
ServicesarrayNoListado de servicios asociados al cliente
StatestringNoEstado del cliente
Update_DateobjectNoFecha de actualización del cliente

Estructura de Customer.Addresses

CampoTipoObligatorioDescripción
AddressstringNoDirección
CityobjectNoCiudad
DepartmentobjectNoDepartamento
NeighborhoodstringNoBarrio
StratumstringNoEstrato

Estructura de Customer.Billings

CampoTipoObligatorioDescripción
Billing_AccountstringNoCuenta de facturación
Service_AccountstringNoCuenta de servicio
PhonestringNoNúmero de teléfono

Estructura de Customer.City

CampoTipoObligatorioDescripción
CodestringNoCódigo de la ciudad
NamestringNoNombre de la ciudad

Estructura de Customer.Contacts

CampoTipoObligatorioDescripción
Document_NumberstringNoNúmero de documento
Document_TypestringNoTipo de documento
EmailstringNoCorreo electrónico
NamestringNoNombre del contacto
PhonestringNoTeléfono del contacto

Estructura de Customer.Creation_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de creación
Formatted_DatestringNoFecha formateada

Estructura de Customer.Department

CampoTipoObligatorioDescripción
CodestringNoCódigo del departamento
NamestringNoNombre del departamento

Estructura de Customer.Directv_Subscription

CampoTipoObligatorioDescripción
Account_NumberstringNoNúmero de cuenta
StatusstringNoEstado de la suscripción

Estructura de Customer.Habeas_Data

CampoTipoObligatorioDescripción
DecisionstringNoDecisión tomada por el cliente
DateDateTimeNoFecha de la decisión

Estructura de Customer.MiETBUser

CampoTipoObligatorioDescripción
UsernamestringNoNombre de usuario
StatusstringNoEstado de la cuenta

Estructura de Customer.Services

CampoTipoObligatorioDescripción
PhonestringNoNúmero de teléfono
TechnologystringNoTecnología del servicio
StatusstringNoEstado del servicio

Estructura de Customer.Update_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de actualización
Formatted_DatestringNoFecha formateada

Estructura de RecoverExperience

CampoTipoObligatorioDescripción
Attention_TypestringNoTipo de atención
CategorystringNoCategoría del cliente
Recover_ExperienceboolNoBandera que determina si se debe recuperar la experiencia

Estructura de Service

CampoTipoObligatorioDescripción
AddressobjectNoDirección asociada al servicio
BillingobjectNoCuenta facturación asociada al servicio
BundleobjectNoBundle del servicio
ChargingobjectNoInformación de OCS
CollectionsobjectNoInformación de Collections
Contracted_OfferobjectNoOferta contratada del servicio
Creation_DateobjectNoFecha creación del servicio
CustomerobjectNoCliente asociado al servicio
Directv_SubscriptionobjectNoInformación relacionada a la subscripción de Directv
FilesarrayNoArchivos asociados al servicio
Has_Family_And_FriendsboolNoBandera que determina si el servicio forma parte de una comunidad
Has_PasaGigasboolNoBandera que determina si el servicio tiene Pasa Gigas
HomeobjectNoInformación del hogar asociado al servicio
InventoryobjectNoInformación asociada al inventario
MiETBUserobjectNoUsuario de MiETB asociado al servicio
OTAobjectNoInformación del equipo asociado a la línea
PasaGigasobjectNoBeneficio PasaGigas asociado al servicio
Permanence_ClausearrayNoClausula de permanencia asociada al servicio
Rate_IncreaseobjectNoIncremento de tarifas del servicio
Update_DateobjectNoFecha actulización del servicio

Estructura de Service.Address

CampoTipoObligatorioDescripción
AddressstringNoDirección
CityobjectNoCiudad
DepartmentobjectNoDepartamento
NeighborhoodstringNoBarrio
StratumstringNoEstrato

Estructura de Service.Billing

CampoTipoObligatorioDescripción
Billing_AccountstringNoCuenta de facturación
Service_AccountstringNoCuenta de servicio
PhonestringNoNúmero de teléfono

Estructura de Service.Bundle

CampoTipoObligatorioDescripción
NamestringNoNombre del bundle
TypestringNoTipo de bundle
StatusstringNoEstado del bundle

Estructura de Service.Charging

CampoTipoObligatorioDescripción
Account_StatusstringNoEstado de la cuenta
BalancedecimalNoSaldo disponible
Last_RechargeDateTimeNoÚltima recarga

Estructura de Service.Collections

CampoTipoObligatorioDescripción
Debt_AmountdecimalNoMonto de la deuda
Due_DateDateTimeNoFecha de vencimiento
StatusstringNoEstado de cobranza

Estructura de Service.Contracted_Offer

CampoTipoObligatorioDescripción
NamestringNoNombre de la oferta
TypestringNoTipo de oferta
StatusstringNoEstado de la oferta

Estructura de Service.Creation_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de creación
Formatted_DatestringNoFecha formateada

Estructura de Service.Customer

CampoTipoObligatorioDescripción
Document_NumberstringNoNúmero de documento
Document_TypestringNoTipo de documento
NamestringNoNombre del cliente

Estructura de Service.Directv_Subscription

CampoTipoObligatorioDescripción
Account_NumberstringNoNúmero de cuenta
StatusstringNoEstado de la suscripción

Estructura de Service.Files

CampoTipoObligatorioDescripción
NamestringNoNombre del archivo
TypestringNoTipo de archivo
UrlstringNoURL del archivo

Estructura de Service.Home

CampoTipoObligatorioDescripción
AddressstringNoDirección del hogar
TypestringNoTipo de hogar

Estructura de Service.Inventory

CampoTipoObligatorioDescripción
EquipmentstringNoEquipo
Serial_NumberstringNoNúmero de serie
StatusstringNoEstado del inventario

Estructura de Service.MiETBUser

CampoTipoObligatorioDescripción
UsernamestringNoNombre de usuario
StatusstringNoEstado de la cuenta

Estructura de Service.OTA

CampoTipoObligatorioDescripción
EquipmentstringNoEquipo
StatusstringNoEstado del equipo

Estructura de Service.PasaGigas

CampoTipoObligatorioDescripción
AvailableboolNoDisponible
AmountdecimalNoCantidad disponible

Estructura de Service.Permanence_Clause

CampoTipoObligatorioDescripción
TypestringNoTipo de cláusula
End_DateDateTimeNoFecha de finalización
StatusstringNoEstado de la cláusula

Estructura de Service.Rate_Increase

CampoTipoObligatorioDescripción
PercentagedecimalNoPorcentaje de incremento
Effective_DateDateTimeNoFecha efectiva
StatusstringNoEstado del incremento

Estructura de Service.Update_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de actualización
Formatted_DatestringNoFecha formateada

Estructura de Orders

CampoTipoObligatorioDescripción
AgendaobjectNoInformación relacionada al agendamiento de la orden
Cancelation_InfoobjectNoInformación asociada a la cancelación de la orden
ChannelstringNoCanal asociado a la orden
CharacteristicsarrayNoListado de caracteristicas de la orden
Creator_UserstringNoUsuario creador de la orden
CustomerobjectNoCliente asociado a la orden
Id_MongostringNoId de mongo de la orden
Modifying_UserstringNoUsuario modificador de la orden
New_OfferobjectNoNueva oferta asociada a la orden
Old_OfferobjectNoOferta anterior asociada a la orden
PromotionsarrayNoPromociones asociadas a la orden
Sub_ChannelstringNoSub canal asociado a la orden
TechnicianobjectNoTécnico asociado a la orden
TechnologystringNoTecnología asociada a la orden (FIJA o MOVIL)

Estructura de Orders.Agenda

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de agenda
Time_SlotstringNoFranja horaria
StatusstringNoEstado de la agenda

Estructura de Orders.Cancelation_Info

CampoTipoObligatorioDescripción
ReasonstringNoMotivo de cancelación
DateDateTimeNoFecha de cancelación
UserstringNoUsuario que canceló

Estructura de Orders.Characteristics

CampoTipoObligatorioDescripción
NamestringNoNombre de la característica
ValuestringNoValor de la característica
TypestringNoTipo de característica

Estructura de Orders.Customer

CampoTipoObligatorioDescripción
Document_NumberstringNoNúmero de documento
Document_TypestringNoTipo de documento
NamestringNoNombre del cliente

Estructura de Orders.New_Offer

CampoTipoObligatorioDescripción
NamestringNoNombre de la oferta
TypestringNoTipo de oferta
PricedecimalNoPrecio de la oferta

Estructura de Orders.Old_Offer

CampoTipoObligatorioDescripción
NamestringNoNombre de la oferta
TypestringNoTipo de oferta
PricedecimalNoPrecio de la oferta

Estructura de Orders.Promotions

CampoTipoObligatorioDescripción
NamestringNoNombre de la promoción
TypestringNoTipo de promoción
DiscountdecimalNoDescuento de la promoción

Estructura de Orders.Technician

CampoTipoObligatorioDescripción
NamestringNoNombre del técnico
IdstringNoIdentificador del técnico
PhonestringNoTeléfono del técnico

Estructura de PQRs

CampoTipoObligatorioDescripción
AgendaobjectNoAgenda activa de la PQR
AgendasarrayNoListado de agendas asociadas a la PQR
ActivitiesarrayNoLista de actividades de la PQR
Assigned_UserstringNoUsuario asignado a la PQR
Billing_AccountobjectNoCuenta de facturación asociada a la PQR
CharacteristicsarrayNoListado de caracteristicas de la PQR
Contact_Document_NumberstringNoNúmero documento de contacto
Contact_Document_TypestringNoTipo de documento de contacto
Creation_DateobjectNoFecha de creación de la PQR
Creation_UserstringNoUsuario creador de la PQR
Is_Agenda_SuspendedboolNoBandera que determina si la agenda de la PQR está suspendida
Is_SonboolNoBandera que determina si es una PQR hija
Notification_MediumstringNoMedio de notificación
Modification_DateobjectNoFecha de modificación de la PQR
OrderobjectNoOrden asociada a la PQR
Radication_DateobjectNoFecha de radicación de la PQR
Reception_MediumstringNoMedio de recepción
ServiceobjectNoServicio relacionado a la PQR
Sub_ChannelstringNoSub canal de la PQR
Suspension_DetailobjectNoListado de suspensiones de la PQR
Solution_DateobjectNoFecha de solucion de la PQR

Estructura de PQRs.Agenda

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de agenda
Time_SlotstringNoFranja horaria
StatusstringNoEstado de la agenda

Estructura de PQRs.Agendas

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de agenda
Time_SlotstringNoFranja horaria
StatusstringNoEstado de la agenda

Estructura de PQRs.Activities

CampoTipoObligatorioDescripción
TypestringNoTipo de actividad
DescriptionstringNoDescripción de la actividad
DateDateTimeNoFecha de la actividad

Estructura de PQRs.Billing_Account

CampoTipoObligatorioDescripción
Billing_AccountstringNoCuenta de facturación
Service_AccountstringNoCuenta de servicio
PhonestringNoNúmero de teléfono

Estructura de PQRs.Characteristics

CampoTipoObligatorioDescripción
NamestringNoNombre de la característica
ValuestringNoValor de la característica
TypestringNoTipo de característica

Estructura de PQRs.Creation_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de creación
Formatted_DatestringNoFecha formateada

Estructura de PQRs.Modification_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de modificación
Formatted_DatestringNoFecha formateada

Estructura de PQRs.Order

CampoTipoObligatorioDescripción
IdstringNoIdentificador de la orden
TypestringNoTipo de orden
StatusstringNoEstado de la orden

Estructura de PQRs.Radication_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de radicación
Formatted_DatestringNoFecha formateada

Estructura de PQRs.Service

CampoTipoObligatorioDescripción
PhonestringNoNúmero de teléfono
TechnologystringNoTecnología del servicio
StatusstringNoEstado del servicio

Estructura de PQRs.Suspension_Detail

CampoTipoObligatorioDescripción
ReasonstringNoMotivo de suspensión
DateDateTimeNoFecha de suspensión
StatusstringNoEstado de la suspensión

Estructura de PQRs.Solution_Date

CampoTipoObligatorioDescripción
DateDateTimeNoFecha de solución
Formatted_DatestringNoFecha formateada

Manejo de errores

CódigoDescripciónEjemplo
ERROR_04El request es nulo o no contiene los parámetros requeridos"El request es nulo"
ERROR_07Cliente no encontrado"Cliente no encontrado con los parámetros proporcionados"
BOTERRORError 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)

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

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

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

mermaid
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

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

3.3 Secuencia de ejecución

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

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

  1. Implementar validación más robusta de parámetros de entrada
  2. Agregar logging detallado para debugging
  3. Optimizar consultas a base de datos con índices apropiados

Optimizaciones posibles:

  1. Implementar cache para consultas frecuentes
  2. Paralelizar consultas de órdenes y PQRs
  3. Optimizar consultas de MongoDB

Consideraciones de mantenimiento importantes:

  1. Mantener actualizada la documentación de modelos
  2. Revisar regularmente los filtros de consulta
  3. Monitorear el rendimiento de las consultas

Sugerencias de seguridad aplicables:

  1. Implementar rate limiting por IP
  2. Agregar validación de entrada más estricta
  3. Implementar auditoría de acceso más detallada