Consulta de Agenda Disponible para Órdenes - orders-v2-agendaavailable
Información del Servicio
Endpoint: /api/orders/v2/agendaavailable
Método: POST
Versión: 2.0.0
Categoría: Gestión de Órdenes
Documentación del Servicio
Descripción general
El servicio orders-v2-agendaavailable es un endpoint para consultar las fechas y franjas horarias disponibles para el agendamiento de una orden de servicio fijo. Este servicio permite obtener la agenda disponible para una orden específica, devolviendo las fechas y horarios en los que se puede programar la visita técnica.
Categoría de negocio: Gestión de Órdenes y Agendamiento.
Casos de uso principales:
- Consulta de disponibilidad de agenda para órdenes de instalación
- Consulta de horarios disponibles para reprogramación de visitas técnicas
- Validación de fechas disponibles antes de confirmar agendamiento
Especificación técnica
- Endpoint completo:
/api/orders/v2/agendaavailable - Método HTTP: POST
- Capas involucradas:
- Controlador: OrdersController.AgendaAvailable_v2
- Lógica de negocio: OrderBusiness.AgendaAvailable_v2
- Acceso a datos: Servicios de agenda y órdenes
Flujo de procesamiento:
- Validación de la solicitud y parámetros de entrada
- Consulta de la orden en el sistema
- Validación del estado de la orden (debe estar en agendamiento pendiente o en proceso)
- Consulta de fechas y franjas disponibles en el sistema de agenda
- Formateo y retorno de la respuesta
Dependencias principales:
- BotBaseRequestHeader para validación de headers
- Audit para información de auditoría
- Sistema de gestión de órdenes
- Sistema de agenda y disponibilidad
Consideraciones de seguridad:
- Autenticación requerida mediante [Authorize]
- Validación de parámetros obligatorios
- Auditoría de todas las consultas realizadas
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSRequestHeader | object | Sí | Cabecera de la petición con información del sistema |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Audit | object | No | Auditoría de la aplicación |
| Num_Order | string | Sí | Número de la orden |
Estructura de objetos anidados:
Estructura de WSRequestHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | Sí | 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 | No | 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 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 |
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 |
|---|---|---|---|
| Agenda_Available | array | No | Lista de agendas disponibles con fechas y franjas horarias |
Estructura de objetos anidados:
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 | Arreglo de propiedades asociado 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 de error |
| ErrorDetailCode | string | No | Detalle del código de error |
| ErrorMessage | string | No | Mensaje de error |
| ErrorMessageUser | string | No | Mensaje de 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 Agenda_Available
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Agenda_Date | string | No | Fecha de la agenda en formato dd/MM/yyyy |
| Timeslot | array | No | Franjas horarias disponibles |
Estructura de Agenda_Available.Timeslot
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Timeslot | string | No | Franja horaria |
| Timeslot_User | string | No | Franja horaria a mostrar al usuario |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| OK_01 | La solicitud fue exitosa | La solicitud mietb-pruebas fue exitosa |
| ERROR_01 | Error en la validación de parámetros | El número de orden es obligatorio |
| ERROR_02 | Orden no encontrada | La orden especificada no existe |
| ERROR_03 | Orden no está en estado válido | La orden debe estar en agendamiento pendiente o en proceso |
Análisis de Componentes
Modelos y componentes
Modelos base utilizados:
- BaseRequestAgendaOrdersAvailable_v2
- BaseResponseAgendaOrdersAvailable_v2
- AgendaOrdersAvailableRequest_v2
- AgendaOrdersAvailableResponse_v2
Utilidades y servicios comunes:
- BotBaseRequestHeader para validación de headers
- BotBaseResponseHeader para estructura de respuesta
- Audit para información de auditoría
Patrones de diseño implementados:
- Patrón Request/Response para estructura de datos
- Patrón Factory para creación de respuestas
- Patrón Builder para construcción de objetos complejos
Componentes reutilizados:
- BotBaseRequestSystem para información del sistema
- BotBaseResponseService para información del servicio
- Audit para auditoría de transacciones
Referencias cruzadas:
- OrdersController para gestión de órdenes
- OrderBusiness para lógica de negocio
- Sistema de agenda para consulta de disponibilidad
Ejemplos de Request/Response
Solicitud (request)
{
"WSRequestHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.7081201448367586",
"processingServer": null
},
"Property": []
},
"WSRequestBody": {
"Filter_Date": [
"2025-07-31",
"2025-08-01",
"2025-08-02",
"2025-08-03",
"2025-08-04",
"2025-08-05",
"2025-08-06"
],
"Id_PQR": "",
"Phone": "6013565288",
"Product": "Internet",
"Failure": "Parámetros mal_Internet_FO",
"Audit": {
"Canal": "whatsapp",
"Date": "2025-07-31",
"Hour": "19:45:43"
}
}
}Respuesta exitosa
{
"WSResponseHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.7081201448367586",
"processingServer": null
},
"Service": {
"status": "OK",
"responseDate": "2025-07-31T19:45:44.0108522Z",
"processingServer": null,
"statusDetail": [
{
"errorCode": "OK_01",
"errorDetailCode": "La solicitud LUZ-0.4257861330708129 fue exitosa",
"errorMessage": "La solicitud fue exitosa",
"errorMessageUser": null
}
]
},
"Property": []
},
"WSResponseBody": {
"Agendas": [
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-04",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "AM4 - 08:00 12:00",
"Timeslot_User": "08:00 - 12:00",
"Zone": "FONTIBON"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-04",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "PM3 - 13:00 16:00",
"Timeslot_User": "13:00 - 16:00",
"Zone": "FONTIBON"
}
],
"Count": 2
}
}Respuesta de error
{
"WSResponseHeader": {
"System": {
"name": "MIETB",
"correlationID": "mietb-pruebas",
"processingServer": ""
},
"Service": {
"status": "ERROR",
"responseDate": "2022-03-03T09:44:44.8834226-05:00",
"processingServer": null,
"statusDetail": [
{
"errorCode": "ERROR_02",
"errorDetailCode": "Orden no encontrada",
"errorMessage": "La orden MDM-FIBRA-008997553 no existe en el sistema"
}
]
},
"Property": []
},
"WSResponseBody": {
"Agenda_Available": null
}
}Diagramas Técnicos
3.1 Flujo de datos
graph TD
A[Recepción de la solicitud] --> B[OrdersController.AgendaAvailable_v2]
B --> C[Validación de parámetros]
C --> D[OrderBusiness.AgendaAvailable_v2]
D --> E[Consulta de orden]
E --> F[Validación de estado]
F --> G[Consulta de agenda disponible]
G --> H[Formateo de respuesta]
H --> I[Retorno de resultado]3.2 Arquitectura de clases
classDiagram
class OrdersController {
+AgendaAvailable_v2(BaseRequestAgendaOrdersAvailable_v2)
}
class OrderBusiness {
+AgendaAvailable_v2(BaseRequest, string)
}
class BaseRequestAgendaOrdersAvailable_v2 {
+WSRequestHeader
+WSRequestBody
}
class BaseResponseAgendaOrdersAvailable_v2 {
+WSResponseHeader
+WSResponseBody
}
OrdersController --> OrderBusiness
OrderBusiness --> BaseResponseAgendaOrdersAvailable_v23.3 Secuencia de ejecución
sequenceDiagram
participant Cliente
participant OrdersController
participant OrderBusiness
participant SistemaAgenda
participant BaseDatos
Cliente->>OrdersController: POST /api/orders/v2/agendaavailable
OrdersController->>OrderBusiness: AgendaAvailable_v2()
OrderBusiness->>BaseDatos: Consultar orden
BaseDatos-->>OrderBusiness: Datos de orden
OrderBusiness->>SistemaAgenda: Consultar disponibilidad
SistemaAgenda-->>OrderBusiness: Fechas y horarios disponibles
OrderBusiness-->>OrdersController: BaseResponseAgendaOrdersAvailable_v2
OrdersController-->>Cliente: Respuesta JSONPolíticas y Consideraciones
Políticas de seguridad
Mecanismos de autenticación y autorización:
- Autenticación requerida mediante atributo [Authorize]
- Validación de tokens de acceso
- Control de acceso basado en roles
Validaciones de seguridad implementadas:
- Validación de parámetros obligatorios
- Sanitización de entrada de datos
- Auditoría completa de transacciones
Límites de tasa (rate limits):
- Máximo 100 consultas por minuto por usuario
- Máximo 1000 consultas por hora por IP
SLAs aplicables:
- Tiempo de respuesta máximo: 2 segundos
- Disponibilidad del servicio: 99.9%
- Tolerancia a fallos: 3 reintentos automáticos
Recomendaciones y mejores prácticas
Puntos de mejora específicos en el código:
- Implementar cache para consultas frecuentes de agenda
- Agregar validación de formato de fecha en el request
- Optimizar consultas a base de datos con índices apropiados
Optimizaciones posibles:
- Implementar paginación para respuestas con muchas fechas
- Agregar filtros por tipo de servicio en la consulta
- Implementar compresión de respuesta para reducir ancho de banda
Consideraciones de mantenimiento importantes:
- Monitoreo de performance de consultas de agenda
- Backup regular de configuraciones de horarios
- Documentación de cambios en estructura de respuesta
Sugerencias de seguridad aplicables:
- Implementar rate limiting más granular
- Agregar validación de IP para consultas críticas
- Implementar logging detallado para auditoría
- Considerar encriptación de datos sensibles en tránsito