Skip to content

Orders v4 Get – Consulta de Órdenes de Servicios de Telecomunicaciones

Información del Servicio

Endpoint: /api/orders/v4/get
Método: POST
Versión: v4
Categoría: Gestión de Órdenes

Documentación del Servicio

Descripción general

El servicio orders-v4-get permite consultar las órdenes asociadas a un cliente, servicio o una orden específica en el sistema de gestión de órdenes de ETB. Este servicio es la versión más reciente y optimizada del endpoint de consulta de órdenes, implementando operaciones asíncronas para mejorar el rendimiento.

Categoría de negocio: Gestión de Órdenes de Servicios de Telecomunicaciones

Casos de uso principales:

  • Consulta de órdenes por cliente (tipo y número de documento)
  • Consulta de órdenes por servicio (número de conexión)
  • Consulta de una orden específica por número de orden
  • Consulta de órdenes por CUN (Código Único de Negocio)
  • Filtrado de órdenes por estado, fechas y criterios específicos

Especificación técnica

  • Endpoint completo: /api/orders/v4/get
  • Método HTTP: POST
  • Tipo de respuesta: Asíncrona (async/await)

Capas involucradas:

  1. Controlador: OrdersController.Get_v4() - Maneja la recepción de la petición HTTP
  2. Lógica de negocio: OrderBusiness.Get_v4() - Procesa la lógica de consulta
  3. Acceso a datos: OrderUtil2 - Realiza las consultas a las bases de datos MongoDB
  4. Utilidades: ServiceUtil2, ConfigurationUtil, AuditUtil

Flujo de procesamiento:

  1. Recepción de la petición HTTP en el controlador
  2. Validación y conversión de datos de entrada
  3. Auditoría de entrada
  4. Obtención del origen y configuración del sistema
  5. Validación de parámetros de consulta
  6. Ejecución de consulta según el criterio proporcionado:
    • Por cliente (Document_Type + Document_Number)
    • Por número de orden (Num_Order)
    • Por CUN (CUN)
    • Por número de conexión (Phone)
  7. Aplicación de filtros y enriquecimiento de datos
  8. Construcción de la respuesta
  9. Auditoría de salida

Dependencias principales:

  • OrderUtil2.GetInstance - Utilidad para consultas de órdenes
  • ServiceUtil2.GetInstance - Utilidad para consultas de servicios
  • ConfigurationUtil.GetInstance - Utilidad de configuración
  • AuditUtil.GetInstance - Utilidad de auditoría
  • CRUD_MDM_ORDEN - Acceso a datos de órdenes móviles
  • CRUD_MDM_CD_ORDEN - Acceso a datos de órdenes fijas

Consideraciones de seguridad:

  • Autenticación mediante token Bearer
  • Validación de origen del sistema
  • Auditoría completa de entrada y salida
  • Validación de parámetros de entrada

Parámetros de entrada (Request)

Headers

CampoTipoObligatorioDescripción
AuthorizationstringToken Bearer para autenticación
X_SYSTEMstringNombre del sistema que origina la petición
X_CHANNELstringNoCanal de origen de la petición
X_CORRELATION_IDstringNoID de correlación para seguimiento
X_CIV_REQUESTstringNoVector de inicialización para encriptación

Body

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera de la petición con información del sistema
WSRequestBodyobjectCuerpo de la petición con los parámetros de consulta

Estructura WSRequestHeader:

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema
PropertyarrayNoPropiedades adicionales de la petición

Estructura System:

CampoTipoObligatorioDescripción
namestringNombre del sistema
correlationIDstringID de correlación
processingServerstringServidor de procesamiento

Estructura WSRequestBody:

CampoTipoObligatorioDescripción
AuditobjectNoInformación de auditoría
CUNstringNo*Número de CUN a consultar
CustomerobjectNo*Información del cliente a consultar
FilterobjectNoFiltros aplicables a la consulta
Num_OrderstringNo*Número de orden a consultar
PhonestringNo*Número de conexión a consultar

*Al menos uno de estos campos debe ser proporcionado

Estructura Customer:

CampoTipoObligatorioDescripción
Document_TypestringTipo de documento del cliente
Document_NumberstringNúmero de documento del cliente

Estructura Filter:

CampoTipoObligatorioDescripción
AddressbooleanNoConsultar dirección asignada
Billing_AccountbooleanNoConsultar cuenta de facturación
End_DatedatetimeNoFecha fin de la consulta
Extend_SearchbooleanNoRealizar consulta extendida (6 meses)
New_OfferbooleanNoConsultar nueva oferta
Old_OfferbooleanNoConsultar oferta anterior
SchedulebooleanNoConsultar información de agendamiento
Start_DatedatetimeNoFecha inicio de la consulta
StatesobjectNoFiltrado de estados de la orden
TechnicianbooleanNoConsultar información del técnico

Estructura States:

CampoTipoObligatorioDescripción
ActionbooleanNoIncluir (true) o excluir (false) estados
CancelledbooleanNoIncluir órdenes canceladas
CompletedbooleanNoIncluir órdenes completadas
PendingbooleanNoIncluir órdenes pendientes
StatesarrayNoLista de estados específicos

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
Content-Typestringapplication/json
X-Correlation-IDstringNoID de correlación de la respuesta

Body

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta
WSResponseBodyobjectCuerpo de la respuesta con los datos de órdenes

Estructura WSResponseHeader:

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema
ServiceobjectInformación del servicio y estado
PropertyarrayNoPropiedades adicionales de la respuesta

Estructura Service:

CampoTipoObligatorioDescripción
StatusstringEstado del servicio (OK/FAIL)
StatusDetailarrayNoDetalles del estado y mensajes

Estructura WSResponseBody:

CampoTipoObligatorioDescripción
OrdersarrayNoLista de órdenes encontradas

Estructura Order (elemento de Orders):

CampoTipoObligatorioDescripción
IdstringIdentificador único de la orden
CUNstringNoCódigo Único de Negocio
Order_TypestringTipo de orden (VTA, PRCH, CTEC, etc.)
StatestringEstado actual de la orden
Creation_DatedatetimeFecha de creación de la orden
PhonestringNoNúmero de conexión asociado
CustomerobjectNoInformación del cliente
ServiceobjectNoInformación del servicio
ScheduleobjectNoInformación de agendamiento
New_OfferobjectNoNueva oferta contratada
Old_OfferobjectNoOferta anterior
TechnicianobjectNoInformación del técnico asignado

Manejo de errores

CódigoDescripciónEjemplo
ERROR_04Objetos no acordes a la peticiónRequest nulo o malformado
ERROR_06Parámetros de consulta insuficientesNo se proporcionó criterio de búsqueda
OK_01Consulta exitosa con resultadosSe encontraron órdenes
OK_02Consulta exitosa sin resultadosNo se encontraron órdenes
BOTERRORExcepción no controladaError interno del sistema

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 peticiones
  • BotBaseResponseHeader - Cabecera estándar de respuestas
  • Audit - Información de auditoría

Utilidades y servicios comunes:

  • OrderUtil2 - Utilidad principal para consultas de órdenes
  • ServiceUtil2 - Utilidad para consultas de servicios
  • ConfigurationUtil - Gestión de configuraciones del sistema
  • AuditUtil - Gestión de auditoría y logs
  • CRUD_MDM_ORDEN - Acceso a datos de órdenes móviles
  • CRUD_MDM_CD_ORDEN - Acceso a datos de órdenes fijas

Patrones de diseño implementados:

  • Singleton Pattern: Utilizado en las utilidades (GetInstance)
  • Factory Pattern: Para la creación de modelos de respuesta
  • Repository Pattern: En las clases CRUD para acceso a datos
  • Strategy Pattern: Para diferentes tipos de consulta según criterios

Componentes reutilizados:

  • OrderFilter - Filtros de consulta reutilizables
  • OrderStateFilter - Filtros de estado específicos
  • Basic_Service - Modelo básico de servicio
  • OrderModel - Modelo principal de orden

Referencias cruzadas:

  • /api/orders/v1/get - Versión anterior del servicio
  • /api/orders/v2/get - Versión con información de portabilidad
  • /api/orders/v3/get - Versión con consulta por usuario MiETB
  • /api/service/v4/get - Servicio relacionado para consulta de servicios

Ejemplos de Request/Response

Solicitud (request)

json
{
  "WSRequestHeader": {
    "System": {
      "name": "PORTALWEB",
      "correlationID": "PORTALWEB-2025712-163437553",
      "processingServer": null
    },
    "Property": []
  },
  "WSRequestBody": {
    "Audit": {
      "Canal": "WEB",
      "Id_Device": null,
      "SO": null,
      "IP_Address": null,
      "WhatsApp_Phone_Number": null
    },
    "CUN": "",
    "Customer": {
      "Document_Number": "10411445740",
      "Document_Type": "CC"
    },
    "Filter": {
      "Address": false,
      "Billing_Account": false,
      "End_Date": null,
      "New_Offer": true,
      "Old_Offer": true,
      "Schedule": true,
      "Start_Date": null,
      "States": {
        "Action": true,
        "Completed": false,
        "Cancelled": false,
        "Pending": true
      },
      "Technician": true,
      "Types": {
        "Action": true,
        "Aseguramiento": true,
        "Cambio_Plan": true,
        "Suspension_Reconexion": true,
        "Tramites": true,
        "Traslado": true,
        "Venta": true
      }
    },
    "Num_Order": "",
    "Phone": ""
  }
}

Respuesta exitosa

json
{
  "WSResponseHeader": {
    "System": {
      "name": "BOT_SYSTEM",
      "correlationID": "12345-67890-abcde",
      "processingServer": "BOT-SERVER-01"
    },
    "Service": {
      "Status": "OK",
      "StatusDetail": [
        {
          "ErrorCode": "OK_01",
          "ErrorDetailCode": "Consulta exitosa. Se encontraron 2 órdenes.",
          "Origin": "BOT_SYSTEM"
        }
      ]
    }
  },
  "WSResponseBody": {
    "Orders": [
      {
        "Id": "ORD-2024-001",
        "CUN": "CUN123456789",
        "Order_Type": "VTA",
        "State": "O160",
        "Creation_Date": "2024-01-15T10:30:00",
        "Phone": "3001234567",
        "Customer": {
          "Document_Type": "CC",
          "Document_Number": "12345678",
          "Name": "Juan Pérez"
        },
        "Service": {
          "Phone": "3001234567",
          "Technology": "FTTH",
          "State": "Activo"
        },
        "Schedule": {
          "Date": "2024-01-20T14:00:00",
          "Status": "Agendado"
        },
        "New_Offer": {
          "Name": "Plan Hogar 100MB",
          "Price": 50000
        }
      },
      {
        "Id": "ORD-2024-002",
        "CUN": "CUN987654321",
        "Order_Type": "PRCH",
        "State": "O40",
        "Creation_Date": "2024-01-10T09:15:00",
        "Phone": "3001234567",
        "Customer": {
          "Document_Type": "CC",
          "Document_Number": "12345678",
          "Name": "Juan Pérez"
        },
        "Service": {
          "Phone": "3001234567",
          "Technology": "FTTH",
          "State": "Activo"
        }
      }
    ]
  }
}

Respuesta de error

json
{
  "WSResponseHeader": {
    "System": {
      "name": "BOT_SYSTEM",
      "correlationID": "12345-67890-abcde",
      "processingServer": "BOT-SERVER-01"
    },
    "Service": {
      "Status": "FAIL",
      "StatusDetail": [
        {
          "ErrorCode": "ERROR_06",
          "ErrorDetailCode": "No se proporcionó criterio de búsqueda válido. Debe enviar al menos uno de los siguientes: Customer, Num_Order, CUN o Phone.",
          "Origin": "BOT_SYSTEM"
        }
      ]
    }
  },
  "WSResponseBody": {
    "Orders": null
  }
}

Diagramas Técnicos

3.1 Flujo de datos

mermaid
graph TD
    A[Cliente HTTP Request] --> B[OrdersController.Get_v4]
    B --> C[Validación de Headers]
    C --> D[Conversión BaseRequest]
    D --> E[AuditUtil.Save_Request_Async]
    E --> F[OrderBusiness.Get_v4]
    F --> G{Validación Request}
    G -->|Válido| H[ConfigurationUtil.Get_Origin]
    G -->|Inválido| I[Error ERROR_04]
    H --> J[Validación Parámetros]
    J --> K{Criterio de Consulta}
    K -->|Customer| L[OrderUtil2.GetByCustomer]
    K -->|Num_Order| M[OrderUtil2.GetByNumOrder]
    K -->|CUN| N[OrderUtil2.GetByCUN]
    K -->|Phone| O[ServiceUtil2.GetBasicByPhone]
    O --> P[OrderUtil2.GetByService]
    L --> Q[Construcción Response]
    M --> Q
    N --> Q
    P --> Q
    Q --> R[AuditUtil.Save_Request_Async]
    R --> S[HTTP Response]
    I --> S

3.2 Arquitectura de clases

mermaid
classDiagram
    class OrdersController {
        +Get_v4(BaseRequestGet_v4) Task~BaseResponseGet_v4~
    }
    
    class OrderBusiness {
        +Get_v4(BaseRequest, string) Task~BaseResponseGet_v4~
    }
    
    class OrderUtil2 {
        +GetByCustomer(RequestModel, string, string, OrderFilter) Task~List~OrderModel~~
        +GetByNumOrder(RequestModel, string, OrderFilter) Task~OrderModel~
        +GetByCUN(RequestModel, string, OrderFilter) Task~OrderModel~
        +GetByService(RequestModel, Basic_Service, OrderFilter) Task~List~OrderModel~~
    }
    
    class ServiceUtil2 {
        +GetBasicByPhone(string) Task~Basic_Service~
    }
    
    class BaseRequestGet_v4 {
        +WSRequestHeader BotBaseRequestHeader
        +WSRequestBody GetRequest_v4
    }
    
    class GetRequest_v4 {
        +Audit Audit
        +string CUN
        +GetRequestClient_v4 Customer
        +OrderFilter Filter
        +string Num_Order
        +string Phone
    }
    
    class BaseResponseGet_v4 {
        +WSResponseHeader BotBaseResponseHeader
        +WSResponseBody GetResponse_v4
    }
    
    class GetResponse_v4 {
        +List~OrderModel~ Orders
    }
    
    OrdersController --> OrderBusiness
    OrderBusiness --> OrderUtil2
    OrderBusiness --> ServiceUtil2
    OrdersController --> BaseRequestGet_v4
    OrdersController --> BaseResponseGet_v4
    BaseRequestGet_v4 --> GetRequest_v4
    BaseResponseGet_v4 --> GetResponse_v4

3.3 Secuencia de ejecución

mermaid
sequenceDiagram
    participant Client
    participant OrdersController
    participant OrderBusiness
    participant OrderUtil2
    participant ServiceUtil2
    participant CRUD_MDM_ORDEN
    participant CRUD_MDM_CD_ORDEN
    participant AuditUtil
    
    Client->>OrdersController: POST /api/orders/v4/get
    OrdersController->>AuditUtil: Save_Request_Async (entrada)
    OrdersController->>OrderBusiness: Get_v4(request, request_name)
    
    OrderBusiness->>OrderBusiness: Validación de request
    alt Request válido
        OrderBusiness->>OrderBusiness: Obtener origen y configuración
        OrderBusiness->>OrderBusiness: Validar criterios de consulta
        
        alt Consulta por Customer
            OrderBusiness->>OrderUtil2: GetByCustomer(Origin, DocType, DocNum, Filter)
            OrderUtil2->>CRUD_MDM_ORDEN: GetByCustomer(DocType, DocNum, Filter)
            OrderUtil2->>CRUD_MDM_CD_ORDEN: GetByCustomer(DocType, DocNum, Filter)
            CRUD_MDM_ORDEN-->>OrderUtil2: List<MDM_ORDEN>
            CRUD_MDM_CD_ORDEN-->>OrderUtil2: List<MDM_CD_ORDEN>
            OrderUtil2-->>OrderBusiness: List<OrderModel>
        else Consulta por Phone
            OrderBusiness->>ServiceUtil2: GetBasicByPhone(Phone)
            ServiceUtil2-->>OrderBusiness: Basic_Service
            OrderBusiness->>OrderUtil2: GetByService(Origin, Service, Filter)
            OrderUtil2-->>OrderBusiness: List<OrderModel>
        else Consulta por Num_Order
            OrderBusiness->>OrderUtil2: GetByNumOrder(Origin, NumOrder, Filter)
            OrderUtil2-->>OrderBusiness: OrderModel
        else Consulta por CUN
            OrderBusiness->>OrderUtil2: GetByCUN(Origin, CUN, Filter)
            OrderUtil2-->>OrderBusiness: OrderModel
        end
        
        OrderBusiness->>OrderBusiness: Construir respuesta
        OrderBusiness-->>OrdersController: BaseResponseGet_v4
    else Request inválido
        OrderBusiness->>OrderBusiness: Generar error ERROR_04
        OrderBusiness-->>OrdersController: BaseResponseGet_v4 con error
    end
    
    OrdersController->>AuditUtil: Save_Request_Async (salida)
    OrdersController-->>Client: HTTP Response

Políticas y Consideraciones

Políticas de seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante token Bearer JWT
  • Validación obligatoria del header X_SYSTEM
  • Verificación de origen del sistema en configuración
  • Auditoría completa de todas las transacciones

Validaciones de seguridad implementadas:

  • Validación de formato de token de autenticación
  • Verificación de IP de origen en auditoría
  • Validación de parámetros de entrada contra inyección
  • Sanitización de datos de consulta

Límites de tasa (rate limits):

  • No se implementan rate limits específicos en esta versión
  • Se recomienda implementar límites por sistema/origen

SLAs aplicables:

  • Tiempo de respuesta esperado: < 2 segundos
  • Disponibilidad del servicio: 99.9%
  • Tolerancia a fallos: Circuit breaker implementado en capa de datos

Recomendaciones y mejores prácticas

Puntos de mejora específicos en el código:

  1. Implementar rate limiting: Agregar límites de tasa por sistema para prevenir abuso
  2. Optimizar consultas paralelas: Mejorar el uso de Task.WhenAll en consultas múltiples
  3. Agregar métricas de rendimiento: Implementar logging de tiempos de respuesta
  4. Mejorar manejo de errores: Implementar retry policies para consultas a base de datos

Optimizaciones posibles:

csharp
// Ejemplo de optimización de consultas paralelas
var tasks = new List<Task>();
tasks.Add(GetOrdersByCustomerAsync(customer));
tasks.Add(GetOrdersByServiceAsync(service));
var results = await Task.WhenAll(tasks);

Consideraciones de mantenimiento importantes:

  • Monitorear el rendimiento de consultas a MongoDB
  • Revisar regularmente los índices de las colecciones MDM_ORDEN y MDM_CD_ORDEN
  • Mantener actualizada la configuración de tipologías de error
  • Validar periódicamente la integridad de los datos de auditoría

Sugerencias de seguridad aplicables:

  1. Implementar rate limiting por IP y sistema
  2. Agregar validación de formato de documentos
  3. Implementar logging de consultas sensibles
  4. Agregar encriptación de datos sensibles en logs
  5. Implementar timeout configurable para consultas

Ejemplo de implementación de rate limiting:

csharp
[RateLimit(MaxRequests = 100, TimeWindow = 60)] // 100 requests por minuto
public async Task<BaseResponseGet_v4> Get_v4(BaseRequestGet_v4 request)
{
    // Implementación actual
}

Notas adicionales:

  • El servicio es compatible con versiones anteriores (v1, v2, v3)
  • Se recomienda migrar a esta versión para mejor rendimiento
  • La consulta asíncrona mejora significativamente el tiempo de respuesta
  • Los filtros son opcionales pero recomendados para optimizar consultas