Consulta de Agendas Disponibles - pqr-v2-agendaavailable
Información del Servicio
Endpoint: /api/pqr/v2/agendaavailable
Método: POST
Versión: v2
Categoría: Gestión de PQRs
Documentación del Servicio
Descripción general
El servicio pqr-v2-agendaavailable es un endpoint para consultar las agendas disponibles por el número de conexión sin depender de la creación de una PQR. Este servicio permite consultar la disponibilidad de cupos en ETA enviando las fechas a consultar (en formato yyyy-MM-dd) y el producto. En caso de enviar el número de la PQR, se consultará la agenda disponible para esa PQR específica.
Categoría de negocio: Gestión de PQRs y Agendas.
Casos de uso principales:
- Consulta de disponibilidad de agendas por número de conexión
- Consulta de disponibilidad de agendas por PQR específica
- Validación de cupos disponibles en ETA
- Consulta por tipología de PQR (causal, clase, motivo, síntoma)
Especificación técnica
- Endpoint completo:
/api/pqr/v2/agendaavailable - Método HTTP: POST
- Capas involucradas:
- Controlador: PQRController
- Lógica de negocio: PQRBusiness
- Acceso a datos: PQRUtil, ConfigurationUtil
Flujo de procesamiento:
- Validación de auditoría de entrada
- Conversión y validación de datos de entrada
- Obtención del origen de la petición
- Validación de estado de la API
- Consulta por número de PQR o por filtros
- Consulta de información del cliente y servicio
- Consulta de agendas disponibles
- Generación de respuesta
Dependencias principales:
- AuditUtil para auditoría
- ConfigurationUtil para configuración
- PQRUtil para gestión de PQRs
- CustomerUtil para información de clientes
Consideraciones de seguridad:
- Validación de autenticación SOAP
- Auditoría completa de peticiones
- Validación de origen de petición
- Control de acceso por configuración
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 |
| Causal | string | No* | Este campo representa el causal de la PQR. Debe ser enviado junto al motivo, clase y síntoma de la PQR |
| Class | string | No* | Este campo representa la clase de la PQR. Debe ser enviado junto al motivo, causal y síntoma de la PQR |
| Failure | string | No | Falla del bot petición. En caso de enviar este campo, no será tenido en cuenta el causal, síntoma, motivo ni clase |
| Filter_Date | array | No | Fechas a consultar disponibilidad en ETA con formato yyyy-MM-dd |
| Id_PQR | string | No* | Número de la PQR. Si se envía no se tendrán en cuenta los demás campos. Se consultará la disponibilidad del cupo para esa PQR |
| Phone | string | No | Número de Conexión |
| Product | string | No | Producto instalado del servicio del cliente |
| Reason | string | No* | Este campo representa el motivo de la PQR. Debe ser enviado junto a la clase, causal y síntoma de la PQR |
| Symptom | string | No* | Este campo representa el síntoma de la PQR. Debe ser enviado junto a la clase, causal y motivo de la PQR |
Estructura de objetos anidados:
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 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 |
|---|---|---|---|
| Agendas | array | No | Lista de agendas disponibles |
| Count | int | No | Número total de agendas disponibles |
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.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la propiedad |
| Value | string | No | Valor de la propiedad |
Estructura de Agendas
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Id_ETA | string | No | Identificador en ETA |
| Duration | string | No | Duración de la agenda |
| Order_Number | string | No | Número de la PQR |
| Query_Date | string | No | Fecha de la agenda |
| Skill | string | No | Skill |
| Timeslot | string | No | Franja horaria técnica |
| Timeslot_User | string | No | Franja horaria a mostrar al usuario final |
| Zone | string | No | Zona de la locación del cliente |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_04 | El request es nulo | Error en la conversión de datos de entrada |
| ERROR_05 | PQR no encontrada o inactiva | La PQR especificada no existe o no está activa |
| ERROR_06 | Cliente no encontrado | No se pudo obtener información del cliente |
| ERROR_07 | Servicio no encontrado | No se pudo obtener información del servicio |
| ERROR_08 | No hay agendas disponibles | No se encontraron agendas disponibles para los criterios especificados |
Análisis de Componentes
Modelos y componentes
Modelos base utilizados:
- BaseRequestAgendaAvailableV2
- BaseResponseAgendaAvailableV2
- AgendaAvailableRequest_v2
- AgendaAvailableResponse_v2
- AgendaAvailableItemResponse_v2
Utilidades y servicios comunes:
- AuditUtil para auditoría
- ConfigurationUtil para configuración
- PQRUtil para gestión de PQRs
- CustomerUtil para información de clientes
Patrones de diseño implementados:
- Singleton para instancias de negocio
- Factory para creación de respuestas
- Strategy para diferentes tipos de consulta
Componentes reutilizados:
- BotBaseRequestHeader/ResponseHeader
- Audit para auditoría
- ResultModel para manejo de errores
Referencias cruzadas:
- PQRController para endpoint REST
- PQR.asmx para endpoint SOAP
- PQRBusiness para lógica de negocio
Ejemplos de Request/Response
Solicitud (request)
{
"WSRequestHeader": {
"System": {
"name": "Kioskos",
"correlationID": "Kioskos-21062022-20451",
"processingServer": null
},
"Property": []
},
"WSRequestBody": {
"Audit": {
"Canal": "web",
"Id_Device": null,
"SO": null,
"IP_Address": null,
"IP_Latitude": null,
"IP_Longitude": null,
"WhatsApp_Phone_Number": null,
"Facebook_User": null
},
"Causal": "FALLA_TECNICA",
"Class": "INTERNET",
"Failure": null,
"Filter_Date": ["2024-12-20", "2024-12-21"],
"Id_PQR": "MDM-PQR-4085967",
"Phone": null,
"Product": null,
"Reason": "SIN_SERVICIO",
"Symptom": "SIN_CONECTIVIDAD"
}
}Respuesta exitosa
{
"WSRequestHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.5656121512688825",
"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": "6012937005",
"Product": "Internet",
"Failure": "Parámetros mal_Internet_FO",
"Audit": {
"Canal": "whatsapp",
"Date": "2025-07-31",
"Hour": "01:04:13"
}
}
}Respuesta de error
{
"WSResponseHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.5656121512688825",
"processingServer": null
},
"Service": {
"status": "OK",
"responseDate": "2025-07-31T01:04:14.7740457Z",
"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-02",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "AM2 - 08:00 10:00",
"Timeslot_User": "08:00 - 10:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-02",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "AM3 - 10:00 12:00",
"Timeslot_User": "10:00 - 12:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-02",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "PM1 - 13:00 15:00",
"Timeslot_User": "13:00 - 15:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-02",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "PM2 - 15:00 17:00",
"Timeslot_User": "15:00 - 17:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-01",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "AM2 - 08:00 10:00",
"Timeslot_User": "08:00 - 10:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-01",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "AM3 - 10:00 12:00",
"Timeslot_User": "10:00 - 12:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-01",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "PM1 - 13:00 15:00",
"Timeslot_User": "13:00 - 15:00",
"Zone": "HOLANDA"
},
{
"Id_ETA": null,
"Duration": "120",
"Order_Number": null,
"Query_Date": "2025-08-01",
"Skill": "ASEGFTTH_Plata",
"Timeslot": "PM2 - 15:00 17:00",
"Timeslot_User": "15:00 - 17:00",
"Zone": "HOLANDA"
}
],
"Count": 8
}
}Diagramas Técnicos
3.1 Flujo de datos
graph TD
A[Recepción de la solicitud] --> B[PQRController]
B --> C[PQRBusiness.AgendaAvailable_v2]
C --> D[AuditUtil.Save_Request]
C --> E[Conversión de datos]
E --> F[ConfigurationUtil.Get_Origin]
F --> G[Validación API]
G --> H[Consulta PQR/Cliente]
H --> I[Consulta Agendas]
I --> J[Generación Respuesta]
J --> K[AuditUtil.Save_Response]3.2 Arquitectura de clases
classDiagram
class PQRController {
+AgendaAvailable_v2()
}
class PQRBusiness {
+AgendaAvailable_v2()
}
class PQRUtil {
+Get_By_Id()
+Is_Active()
}
class ConfigurationUtil {
+Get_Origin()
+Is_Api_Turned_On()
}
class AuditUtil {
+Save_Request()
+Save_Response()
}
PQRController --> PQRBusiness
PQRBusiness --> PQRUtil
PQRBusiness --> ConfigurationUtil
PQRBusiness --> AuditUtil3.3 Secuencia de ejecución
sequenceDiagram
participant Cliente
participant PQRController
participant PQRBusiness
participant PQRUtil
participant ConfigurationUtil
participant AuditUtil
Cliente->>PQRController: POST /api/pqr/v2/agendaavailable
PQRController->>PQRBusiness: AgendaAvailable_v2()
PQRBusiness->>AuditUtil: Save_Request()
PQRBusiness->>ConfigurationUtil: Get_Origin()
PQRBusiness->>ConfigurationUtil: Is_Api_Turned_On()
PQRBusiness->>PQRUtil: Get_By_Id()
PQRBusiness->>PQRUtil: Is_Active()
PQRBusiness->>AuditUtil: Save_Response()
PQRBusiness-->>PQRController: BaseResponseAgendaAvailableV2
PQRController-->>Cliente: Respuesta JSONPolíticas y Consideraciones
Políticas de seguridad
Mecanismos de autenticación y autorización:
- Validación de autenticación SOAP para endpoints SOAP
- Auditoría completa de todas las peticiones
- Validación de origen de petición
Validaciones de seguridad implementadas:
- Validación de datos de entrada
- Control de acceso por configuración de API
- Validación de PQRs activas
Límites de tasa (rate limits):
- Control por configuración de API
- Auditoría de consumo por sistema
SLAs aplicables:
- Tiempo de respuesta esperado: < 5 segundos
- Disponibilidad: 99.9%
Recomendaciones y mejores prácticas
Puntos de mejora específicos en el código:
- Implementar cache para consultas frecuentes de configuración
- Optimizar consultas a base de datos MongoDB
- Implementar circuit breaker para servicios externos
Optimizaciones posibles:
- Paralelizar consultas de cliente y servicio
- Implementar paginación para grandes volúmenes de agendas
- Cache de agendas disponibles por zona y fecha
Consideraciones de mantenimiento importantes:
- Monitoreo de performance de consultas ETA
- Validación periódica de configuraciones
- Backup y recuperación de datos de auditoría
Sugerencias de seguridad aplicables:
- Implementar rate limiting por IP
- Validación de tokens JWT para endpoints REST
- Encriptación de datos sensibles en auditoría