Skip to content

Agendamiento de PQR - pqr-v2-agenda

Información del Servicio

Endpoint: /api/pqr/v2/agenda
Método: POST
Versión: v2
Categoría: PQR - Agendamiento

Documentación del Servicio

Descripción general

El servicio pqr-v2-agenda es un endpoint para agendar una visita técnica a partir de una PQR previamente creada. Este servicio permite crear una agenda con una PQR existente, especificando la fecha, duración y franja horaria de la visita técnica.

Categoría de negocio: Gestión de PQRs y Agendamiento.

Casos de uso principales:

  • Agendamiento de visitas técnicas para PQRs existentes
  • Programación de citas de servicio técnico
  • Gestión de agenda de técnicos de campo

Especificación técnica

  • Endpoint completo: /api/pqr/v2/agenda
  • Método HTTP: POST
  • Capas involucradas:
    • Controlador: PQRController.Agenda_v2()
    • Lógica de negocio: PQRBusiness.Agenda_v2()
    • Acceso a datos: PQRUtil, AgendaUtil

Flujo de procesamiento:

  1. Validación de la petición y auditoría de entrada
  2. Conversión de datos de entrada
  3. Consulta de la PQR existente
  4. Validación de la PQR y sus datos asociados
  5. Creación de la agenda en ETA (Enterprise Technical Appointment)
  6. Actualización de la PQR con información de la agenda
  7. Auditoría de salida y respuesta

Dependencias principales:

  • PQRUtil para consulta de PQRs
  • AgendaUtil para gestión de agendas
  • CustomerUtil para validación de clientes
  • ServiceUtil para consulta de servicios

Consideraciones de seguridad:

  • Autenticación requerida mediante [Authorize]
  • Validación de usuario asociado al servicio
  • Auditoría completa de transacciones
  • Validación de titularidad del servicio

Parámetros de entrada (Request)

Headers

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera de la petición con información del sistema

Body

CampoTipoObligatorioDescripción
AuditobjectNoAuditoría de la aplicación
DatestringFecha de la visita técnica (formato: yyyy-MM-dd)
DurationstringDuración de la visita técnica obtenida de la consulta a ETA
Id_PQRstringNúmero de la PQR
TimeslotstringFranja horaria de la visita técnica obtenida de la consulta a ETA

Estructura de objetos anidados:

Estructura de WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectInformació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
ProcessingServerstringNoServidor de procesamiento del sistema

Estructura de WSRequestHeader.Property

CampoTipoObligatorioDescripción
NamestringNombre de la propiedad
ValuestringValor de la propiedad

Estructura de 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

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta

Body

CampoTipoObligatorioDescripción
CausalstringNoCausal de la PQR
Contact_Document_NumberstringNoNúmero de identificación del contacto
Contact_Document_TypestringNoTipo de identificación del contacto
Creation_DateDateTime?NoFecha de creación de la PQR
CUNstringNoCUN de la PQR
DescriptionstringNoDescripción de la PQR
Document_NumberstringNoNúmero de identificación del cliente
Document_TypestringNoTipo de identificación del cliente
IdstringNoNúmero de la PQR
Id_ETAstringNoIdentificador en ETA
Id_OSMstringNoIdentificador en OSM
KindstringNoClase de la PQR
PhonestringNoNúmero de conexión asociado a la PQR
ReasonstringNoRazón de creación de la PQR
StatestringNoEstado de la PQR
Solution_DateDateTime?NoFecha de solución de la PQR
SymptomstringNoSíntoma de la PQR
TypestringNoTipo de la PQR

Estructura de objetos anidados:

Estructura de WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformación asociada al sistema
ServiceobjectNoInformación asociada a la ejecución del servicio
PropertyarrayNoArreglo de propiedades asociado 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
ResponseDateDateTime?NoFecha de la respuesta
ProcessingServerstringNoServidor de procesamiento de la solicitud
StatusDetailarrayNoDetalle del procesamiento de la solicitud

Estructura de WSResponseHeader.Property

CampoTipoObligatorioDescripción
NamestringNoNombre de la propiedad
ValuestringNoValor de la propiedad

Manejo de errores

CódigoDescripciónEjemplo
ERROR_00Excepción técnicaLa solicitud no fue exitosa. Se ha generado una excepción técnica
ERROR_01Usuario no encontradoLa solicitud no fue exitosa. No fue posible obtener el usuario asociado
ERROR_02Origen no encontradoLa solicitud no fue exitosa. No fue posible obtener el origen
ERROR_03Validación de petición fallidaLa solicitud no fue exitosa. No fue posible validar la petición
ERROR_04Objetos no acordesLa solicitud no fue exitosa. Fueron enviados objetos no acordes a la petición

Análisis de Componentes

Modelos y componentes

Modelos base utilizados:

  • BaseRequestAgenda_v2 - Modelo de petición
  • BaseResponseAgenda_v2 - Modelo de respuesta
  • AgendaRequest_v2 - Contenido de la petición
  • AgendaResponse_v2 - Contenido de la respuesta

Utilidades y servicios comunes:

  • PQRBusiness - Lógica de negocio principal
  • PQRUtil - Operaciones de PQRs
  • AgendaUtil - Gestión de agendas
  • AuditUtil - Auditoría de transacciones

Patrones de diseño implementados:

  • Singleton Pattern en PQRBusiness
  • Template Method en el flujo de procesamiento
  • Strategy Pattern para diferentes tipos de validación

Componentes reutilizados:

  • BotBaseRequestHeader/ResponseHeader para cabeceras estándar
  • Audit para auditoría
  • PQRModel para modelo de datos

Referencias cruzadas:

  • PQRController para endpoint
  • PQRBusiness para lógica de negocio
  • PQRUtil para operaciones de base de datos

Ejemplos de Request/Response

Solicitud (request)

json
{
  "WSRequestHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.03201327641925744",
      "processingServer": null
    },
    "Property": [
      {
        "name": null,
        "value": null
      }
    ]
  },
  "WSRequestBody": {
    "Id_PQR": "MDM-PQR-4159147",
    "Date": "2025-07-26",
    "Timeslot": "PM2",
    "Duration": "120",
    "Audit": {
      "Canal": "Whatsapp"
    }
  }
}

Respuesta exitosa

json
{
  "WSResponseHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.03201327641925744",
      "processingServer": null
    },
    "Service": {
      "status": "OK",
      "responseDate": "2025-07-25T12:36:38.9784777Z",
      "processingServer": null,
      "statusDetail": [
        {
          "errorCode": "OK_01",
          "errorDetailCode": "La solicitud LUZ-0.3502884354642898 fue exitosa",
          "errorMessage": "La solicitud fue exitosa",
          "errorMessageUser": null
        }
      ]
    },
    "Property": [
      {
        "name": null,
        "value": null
      }
    ]
  },
  "WSResponseBody": {
    "Causal": "FALLA INTERNET",
    "Contact_Document_Number": "99103441",
    "Contact_Document_Type": "1",
    "Creation_Date": "2025-07-25T12:36:21Z",
    "CUN": "4347250001277543",
    "Description": "Cliente reporta falla en el servicio",
    "Document_Number": "99203441",
    "Document_Type": "NIT",
    "Id": "MDM-PQR-4159147",
    "Id_ETA": "8846003",
    "Id_OSM": null,
    "Kind": "PETICION",
    "Phone": "6012728457",
    "Reason": "FALLA TECNICA",
    "State": "Enviado a Segundo Nivel",
    "Solution_Date": null,
    "Symptom": "SIN SERVICIO -F",
    "Type": "PRODUCTO"
  }
}

Respuesta de error

json
{
  "WSResponseHeader": {
    "System": {
      "name": "Kioskos",
      "correlationID": "Kioskos-21062022-20451",
      "processingServer": "SERVER01"
    },
    "Service": {
      "status": "FAIL",
      "responseDate": "2022-06-21T20:45:00",
      "processingServer": "SERVER01",
      "statusDetail": [
        {
          "errorCode": "ERROR_03",
          "errorMessage": "La solicitud Kioskos-21062022-20451 no fue exitosa. No fue posible validar la petición",
          "errorDetailCode": "ERROR_03",
          "errorMessageUser": "Error en la validación de la petición"
        }
      ]
    },
    "Property": []
  },
  "WSResponseBody": null
}

Diagramas Técnicos

3.1 Flujo de datos

mermaid
graph TD
  A[Recepción de la solicitud] --> B[PQRController.Agenda_v2]
  B --> C[PQRBusiness.Agenda_v2]
  C --> D[Auditoría de entrada]
  D --> E[Conversión de datos]
  E --> F[Consulta PQR existente]
  F --> G[Validación de PQR]
  G --> H[Creación agenda en ETA]
  H --> I[Actualización PQR]
  I --> J[Auditoría de salida]
  J --> K[Respuesta al cliente]

3.2 Arquitectura de clases

mermaid
classDiagram
  class PQRController {
    +Agenda_v2(BaseRequestAgenda_v2)
  }
  class PQRBusiness {
    +Agenda_v2(BaseRequest, string)
  }
  class PQRUtil {
    +GetBasicById(string)
  }
  class AgendaUtil {
    +CreateAgenda(AgendaModel)
  }
  class AuditUtil {
    +Save_Request(BaseRequest, string, bool)
  }
  PQRController --> PQRBusiness
  PQRBusiness --> PQRUtil
  PQRBusiness --> AgendaUtil
  PQRBusiness --> AuditUtil

3.3 Secuencia de ejecución

mermaid
sequenceDiagram
  participant Cliente
  participant PQRController
  participant PQRBusiness
  participant PQRUtil
  participant AgendaUtil
  participant AuditUtil
  Cliente->>PQRController: POST /api/pqr/v2/agenda
  PQRController->>PQRBusiness: Agenda_v2(request, name)
  PQRBusiness->>AuditUtil: Save_Request()
  PQRBusiness->>PQRUtil: GetBasicById(Id_PQR)
  PQRUtil-->>PQRBusiness: PQRModel
  PQRBusiness->>AgendaUtil: CreateAgenda(agenda)
  AgendaUtil-->>PQRBusiness: Result
  PQRBusiness->>AuditUtil: Save_Response()
  PQRBusiness-->>PQRController: BaseResponseAgenda_v2
  PQRController-->>Cliente: Response

Políticas y Consideraciones

Políticas de seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante token Bearer
  • Validación de usuario asociado al servicio
  • Verificación de titularidad del servicio

Validaciones de seguridad implementadas:

  • Validación de formato de fecha (yyyy-MM-dd)
  • Validación de duración de visita técnica
  • Validación de franja horaria válida
  • Validación de existencia de PQR

Límites de tasa (rate limits):

  • No se especifican límites específicos en el código
  • Se recomienda implementar rate limiting por IP/usuario

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:

  1. Implementar validación más robusta de fechas y horarios
  2. Agregar logging detallado para debugging
  3. Implementar retry logic para fallos de ETA
  4. Agregar métricas de performance

Optimizaciones posibles:

  1. Cache de configuraciones de agenda
  2. Validación asíncrona de disponibilidad
  3. Implementar circuit breaker para ETA
  4. Optimizar consultas a base de datos

Consideraciones de mantenimiento importantes:

  1. Monitoreo de integración con ETA
  2. Validación periódica de tipologías de PQR
  3. Backup de configuraciones de agenda
  4. Documentación de cambios en ETA

Sugerencias de seguridad aplicables:

  1. Implementar rate limiting
  2. Agregar validación de IP whitelist
  3. Implementar audit trail completo
  4. Validar formato de datos de entrada