Skip to content

Consulta de Órdenes de Servicios - orders-v4-get

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 es un endpoint para consultar órdenes de servicios de telecomunicaciones. Este servicio permite obtener información detallada de órdenes asociadas a clientes, servicios específicos, números de orden particulares o códigos CUN, con capacidades de filtrado avanzado y soporte para consultas asíncronas.

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 número de conexión (teléfono)
  • Consulta de órdenes por número de orden específico
  • Consulta de órdenes por CUN (Código Único de Negocio)
  • Filtrado de órdenes por estado, fechas y otros criterios

Especificación técnica

  • Endpoint completo: /api/orders/v4/get
  • Método HTTP: POST
  • Capas involucradas:
    • Controlador: OrdersController
    • Lógica de negocio: OrderBusiness
    • Acceso a datos: OrderUtil2, ServiceUtil2

Flujo de procesamiento:

  1. Recepción y validación de la solicitud
  2. Auditoría de entrada
  3. Conversión y validación de datos
  4. Consulta de órdenes según criterios (cliente, servicio, orden específica o CUN)
  5. Procesamiento de filtros y aplicación de reglas de negocio
  6. Generación de respuesta con información de órdenes
  7. Auditoría de salida

Dependencias principales:

  • OrderUtil2 (utilidades de órdenes)
  • ServiceUtil2 (utilidades de servicios)
  • CRUD_MDM_ORDEN (acceso a datos de órdenes)
  • CRUD_MDM_CD_ORDEN (acceso a datos de códigos de órdenes)

Consideraciones de seguridad:

  • Autenticación mediante token Bearer
  • Validación de headers de seguridad
  • Auditoría completa de transacciones
  • Sanitización de datos de entrada

Parámetros de entrada (Request)

Headers

CampoTipoObligatorioDescripción
AuthorizationstringToken Bearer para autenticación
Content-Typestringapplication/json
X-Request-IDstringNoIdentificador único de la solicitud

Body

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

Estructura de objetos anidados:

Estructura de WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema solicitante
PropertyobjectNoPropiedades adicionales del sistema

Estructura de WSRequestHeader.System

CampoTipoObligatorioDescripción
namestringNombre del sistema solicitante
correlationIDstringNoID de correlación para seguimiento
processingServerstringNoServidor de procesamiento

Estructura de WSRequestHeader.Property

CampoTipoObligatorioDescripción
keystringClave de la propiedad
valuestringValor de la propiedad

Estructura de WSRequestBody

CampoTipoObligatorioDescripción
AuditobjectNoInformación de auditoría
CUNstringNo*Número de CUN a consultar
CustomerobjectNo*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 de Audit

CampoTipoObligatorioDescripción
userstringNoUsuario que realiza la consulta
timestampstringNoTimestamp de la consulta
sessionstringNoID de sesión

Estructura de Customer

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

Estructura de Filter

CampoTipoObligatorioDescripción
StatusstringNoEstado de las órdenes a filtrar
DateFromstringNoFecha de inicio para filtrado
DateTostringNoFecha de fin para filtrado
OrderTypestringNoTipo de orden a filtrar

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
Content-Typestringapplication/json
X-Request-IDstringNoIdentificador único de la solicitud

Body

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta con información del sistema
WSResponseBodyobjectCuerpo de la respuesta con datos de órdenes

Estructura de objetos anidados:

Estructura de WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema que responde
ServiceobjectInformación del servicio y estado
PropertyobjectNoPropiedades adicionales

Estructura de WSResponseHeader.System

CampoTipoObligatorioDescripción
namestringNombre del sistema que responde
correlationIDstringNoID de correlación para seguimiento
processingServerstringNoServidor de procesamiento

Estructura de WSResponseHeader.Service

CampoTipoObligatorioDescripción
statusstringEstado de la respuesta (OK/ERROR)
responseDatestringFecha y hora de la respuesta
processingServerstringNoServidor de procesamiento
statusDetailarrayNoDetalles del estado con códigos y mensajes

Estructura de WSResponseHeader.Service.statusDetail

CampoTipoObligatorioDescripción
errorCodestringNoCódigo de error específico
errorMessagestringNoMensaje de error técnico
errorMessageUserstringNoMensaje de error para el usuario

Estructura de WSResponseBody

CampoTipoObligatorioDescripción
OrdersarrayNoLista de órdenes encontradas

Estructura de Order

CampoTipoObligatorioDescripción
OrderIdstringID único de la orden
OrderNumberstringNúmero de la orden
OrderTypestringTipo de orden
StatusstringEstado actual de la orden
PrioritystringNoPrioridad de la orden
CreationDatestringFecha de creación
LastUpdateDatestringFecha de última actualización
CustomerobjectNoInformación del cliente asociado
ServiceobjectNoInformación del servicio asociado
TechnicianobjectNoInformación del técnico asignado
ScheduleobjectNoInformación de agendamiento

Estructura de Order.Customer

CampoTipoObligatorioDescripción
CustomerIdstringID del cliente
DocumentTypestringTipo de documento
DocumentNumberstringNúmero de documento
NamestringNombre completo del cliente
PhonestringNoTeléfono de contacto
EmailstringNoCorreo electrónico

Estructura de Order.Service

CampoTipoObligatorioDescripción
ServiceIdstringID del servicio
ServiceTypestringTipo de servicio
PhoneNumberstringNoNúmero de teléfono
AddressstringNoDirección del servicio
StatusstringEstado del servicio

Estructura de Order.Technician

CampoTipoObligatorioDescripción
TechnicianIdstringNoID del técnico
NamestringNoNombre del técnico
PhonestringNoTeléfono del técnico
EmailstringNoCorreo del técnico

Estructura of Order.Schedule

CampoTipoObligatorioDescripción
ScheduleIdstringNoID del agendamiento
ScheduledDatestringNoFecha programada
ScheduledTimestringNoHora programada
StatusstringNoEstado del agendamiento

Manejo de errores

CódigoDescripciónEjemplo
ERROR_04Error en la conversión de datos del request"El request es nulo"
ERROR_06No se proporcionó criterio de búsqueda válido"Debe proporcionar al menos un criterio de búsqueda"
OK_01Consulta exitosa con resultados"Consulta realizada exitosamente"
OK_02Consulta exitosa sin resultados"No se encontraron órdenes"
BOTERRORError interno del sistema"Se ha generado una excepción no controlada"

Análisis de Componentes

Modelos y componentes

Modelos base utilizados:

  • BaseRequest (solicitud base)
  • BaseResponse (respuesta base)
  • BotBaseRequestHeader (cabecera de solicitud)
  • BotBaseResponseHeader (cabecera de respuesta)

Utilidades y servicios comunes:

  • OrderUtil2 (utilidades para manejo de órdenes)
  • ServiceUtil2 (utilidades para manejo de servicios)
  • AuditUtil (utilidades de auditoría)
  • ConfigurationUtil (utilidades de configuración)

Patrones de diseño implementados:

  • Patrón Singleton (OrderBusiness, ServiceUtil2)
  • Patrón Factory (creación de respuestas)
  • Patrón Repository (acceso a datos)

Componentes reutilizados:

  • BaseRequest/BaseResponse (estructura base)
  • Audit (auditoría de transacciones)
  • OrderFilter (filtros de órdenes)

Referencias cruzadas:

  • /api/orders/v1/get (versión anterior)
  • /api/orders/v2/get (versión anterior)
  • /api/orders/v3/get (versión anterior)

Ejemplos de Request/Response

Solicitud (request)

json
{
  "WSRequestHeader": {
    "System": {
      "name": "SISTEMA_CLIENTE",
      "correlationID": "REQ-12345-67890",
      "processingServer": "SRV-001"
    },
    "Property": [
      {
        "key": "version",
        "value": "1.0"
      }
    ]
  },
  "WSRequestBody": {
    "Audit": {
      "user": "usuario_sistema",
      "timestamp": "2024-01-15T10:30:00",
      "session": "SESS-12345"
    },
    "Customer": {
      "Document_Type": "CC",
      "Document_Number": "12345678"
    },
    "Filter": {
      "Status": "PENDIENTE",
      "DateFrom": "2024-01-01",
      "DateTo": "2024-12-31"
    }
  }
}

Respuesta exitosa

json
{
  "WSResponseHeader": {
    "System": {
      "name": "SISTEMA_ORDENES",
      "correlationID": "REQ-12345-67890",
      "processingServer": "SRV-001"
    },
    "Service": {
      "status": "OK",
      "responseDate": "2024-01-15T10:30:05",
      "processingServer": "SRV-001",
      "statusDetail": [
        {
          "errorCode": "OK_01",
          "errorMessage": "Consulta realizada exitosamente",
          "errorMessageUser": "Se encontraron 2 órdenes"
        }
      ]
    }
  },
  "WSResponseBody": {
    "Orders": [
      {
        "OrderId": "ORD-001",
        "OrderNumber": "123456789",
        "OrderType": "INSTALACION",
        "Status": "PENDIENTE",
        "Priority": "ALTA",
        "CreationDate": "2024-01-10T08:00:00",
        "LastUpdateDate": "2024-01-15T09:30:00",
        "Customer": {
          "CustomerId": "CUST-001",
          "DocumentType": "CC",
          "DocumentNumber": "12345678",
          "Name": "Juan Pérez",
          "Phone": "3001234567",
          "Email": "juan.perez@email.com"
        },
        "Service": {
          "ServiceId": "SERV-001",
          "ServiceType": "INTERNET_FIJO",
          "PhoneNumber": "6012345678",
          "Address": "Calle 123 #45-67, Bogotá",
          "Status": "ACTIVO"
        },
        "Technician": {
          "TechnicianId": "TECH-001",
          "Name": "Carlos Rodríguez",
          "Phone": "3009876543",
          "Email": "carlos.rodriguez@etb.com"
        },
        "Schedule": {
          "ScheduleId": "SCH-001",
          "ScheduledDate": "2024-01-20",
          "ScheduledTime": "14:00",
          "Status": "CONFIRMADO"
        }
      }
    ]
  }
}

Respuesta de error

json
{
  "WSResponseHeader": {
    "System": {
      "name": "SISTEMA_ORDENES",
      "correlationID": "REQ-12345-67890",
      "processingServer": "SRV-001"
    },
    "Service": {
      "status": "ERROR",
      "responseDate": "2024-01-15T10:30:00",
      "processingServer": "SRV-001",
      "statusDetail": [
        {
          "errorCode": "ERROR_06",
          "errorMessage": "Debe proporcionar al menos un criterio de búsqueda",
          "errorMessageUser": "Por favor, especifique un criterio de búsqueda válido"
        }
      ]
    }
  },
  "WSResponseBody": {
    "Orders": null
  }
}

Diagramas Técnicos

3.1 Flujo de datos

mermaid
graph TD
  A[Recepción de la solicitud] --> B[OrdersController.Get_v4]
  B --> C[Validación de autenticación]
  C --> D[OrderBusiness.Get_v4]
  D --> E[Auditoría de entrada]
  E --> F[Conversión de datos]
  F --> G{Validación de criterios}
  G -->|Cliente| H[OrderUtil2.GetByCustomer]
  G -->|Número de orden| I[OrderUtil2.GetByNumOrder]
  G -->|CUN| J[OrderUtil2.GetByCUN]
  G -->|Teléfono| K[ServiceUtil2.GetBasicByPhone]
  K --> L[OrderUtil2.GetByService]
  H --> M[Procesamiento de filtros]
  I --> M
  J --> M
  L --> M
  M --> N[Generación de respuesta]
  N --> O[Auditoría de salida]
  O --> P[Respuesta al cliente]

3.2 Arquitectura de clases

mermaid
classDiagram
  class OrdersController {
    +Get_v4(BaseRequestGet_v4)
  }
  class OrderBusiness {
    +Get_v4(BaseRequest, string)
  }
  class OrderUtil2 {
    +GetByCustomer(RequestModel, string, string, OrderFilter)
    +GetByNumOrder(RequestModel, string, OrderFilter)
    +GetByCUN(RequestModel, string, OrderFilter)
    +GetByService(RequestModel, Basic_Service, OrderFilter)
  }
  class ServiceUtil2 {
    +GetBasicByPhone(string)
  }
  class CRUD_MDM_ORDEN {
    +GetByCustomer(string, string, OrderFilter)
    +GetByNumOrder(string)
  }
  class CRUD_MDM_CD_ORDEN {
    +GetByCustomer(string, string, OrderFilter)
    +GetByNumOrder(string)
  }
  OrdersController --> OrderBusiness
  OrderBusiness --> OrderUtil2
  OrderBusiness --> ServiceUtil2
  OrderUtil2 --> CRUD_MDM_ORDEN
  OrderUtil2 --> CRUD_MDM_CD_ORDEN

3.3 Secuencia de ejecución

mermaid
sequenceDiagram
  participant Cliente
  participant OrdersController
  participant OrderBusiness
  participant OrderUtil2
  participant ServiceUtil2
  participant Database
  Cliente->>OrdersController: POST /api/orders/v4/get
  OrdersController->>OrderBusiness: Get_v4(request, request_name)
  OrderBusiness->>OrderBusiness: Auditoría de entrada
  OrderBusiness->>OrderBusiness: Conversión de datos
  alt Consulta por cliente
    OrderBusiness->>OrderUtil2: GetByCustomer(origin, docType, docNumber, filter)
    OrderUtil2->>Database: Consulta MDM_ORDEN y MDM_CD_ORDEN
  else Consulta por número de orden
    OrderBusiness->>OrderUtil2: GetByNumOrder(origin, numOrder, filter)
    OrderUtil2->>Database: Consulta por número de orden
  else Consulta por CUN
    OrderBusiness->>OrderUtil2: GetByCUN(origin, cun, filter)
    OrderUtil2->>Database: Consulta por CUN
  else Consulta por teléfono
    OrderBusiness->>ServiceUtil2: GetBasicByPhone(phone)
    ServiceUtil2->>Database: Consulta servicio básico
    OrderBusiness->>OrderUtil2: GetByService(origin, service, filter)
    OrderUtil2->>Database: Consulta órdenes por servicio
  end
  Database-->>OrderUtil2: Resultados
  OrderUtil2-->>OrderBusiness: Lista de órdenes
  OrderBusiness->>OrderBusiness: Procesamiento de filtros
  OrderBusiness->>OrderBusiness: Auditoría de salida
  OrderBusiness-->>OrdersController: BaseResponseGet_v4
  OrdersController-->>Cliente: Respuesta JSON

Políticas y Consideraciones

Políticas de seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante token Bearer
  • Validación de headers de seguridad obligatorios
  • Auditoría completa de todas las transacciones

Validaciones de seguridad implementadas:

  • Validación de IP de origen
  • Verificación de permisos por sistema
  • Sanitización de datos de entrada

Límites de tasa (rate limits):

  • Máximo 1000 consultas por minuto por sistema
  • Límite de 100 consultas por segundo por IP

SLAs aplicables:

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

Recomendaciones y mejores prácticas

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

  1. Implementar cache distribuido para mejorar rendimiento
  2. Agregar validación de formato de documentos
  3. Implementar paginación para grandes volúmenes de datos
  4. Mejorar manejo de excepciones específicas

Optimizaciones posibles:

  1. Usar índices compuestos en base de datos
  2. Implementar consultas paralelas para múltiples criterios
  3. Optimizar consultas de base de datos con proyecciones
  4. Implementar cache de configuración de tipologías

Consideraciones de mantenimiento importantes:

  1. Monitorear tiempos de respuesta de base de datos
  2. Revisar logs de auditoría regularmente
  3. Mantener actualizada la configuración de tipologías
  4. Validar integridad de datos periódicamente

Sugerencias de seguridad aplicables:

  1. Implementar encriptación de datos sensibles en tránsito
  2. Agregar validación de tokens JWT
  3. Implementar rate limiting por usuario
  4. Agregar logging de eventos de seguridad