Skip to content

Actualización de Contacto PQR - notifications-v1-updatecontactpqr

Información del Servicio

Endpoint: /api/notifications/v1/updatecontactpqr
Método: POST
Versión: 1.0.0
Categoría: Notificaciones

Documentación del Servicio

Descripción general

El servicio notifications-v1-updatecontactpqr es un endpoint para actualizar los datos de contacto de una PQR mediante un proceso de validación por códigos de verificación. Este servicio funciona en dos momentos: primero genera códigos de validación y luego valida y actualiza los datos de contacto.

Categoría de negocio: Gestión de PQR y notificaciones.

Casos de uso principales:

  • Actualización de correo electrónico de contacto en PQR
  • Actualización de teléfono de contacto en PQR
  • Validación de identidad mediante códigos de verificación
  • Generación de códigos de validación por correo electrónico y SMS

Especificación técnica

  • Endpoint completo: /api/notifications/v1/updatecontactpqr
  • Método HTTP: POST
  • Capas involucradas:
    • Controlador: NotificationsController
    • Lógica de negocio: NotificationsBusiness
    • Acceso a datos: PQRUtil, CustomerUtil

Flujo de procesamiento:

  1. Validación de datos de entrada y auditoría
  2. Consulta de la PQR por número de identificación
  3. Consulta del cliente asociado a la PQR
  4. Consulta del contacto específico
  5. Generación de códigos de validación (primer momento)
  6. Validación de códigos y actualización de datos (segundo momento)

Dependencias principales:

  • PQRUtil para gestión de PQR
  • CustomerUtil para gestión de clientes
  • ResponsysServiceClient para validación de correos
  • ConfigurationUtil para configuración del sistema

Consideraciones de seguridad:

  • Autenticación mediante token Bearer
  • Validación de origen de la petición
  • Auditoría completa de transacciones
  • Validación de formatos de datos de entrada

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
ContactobjectDatos de contacto de la PQR a actualizar
Num_PQRstringNúmero o identificador de la PQR
Validation_Code_EmailobjectNo*Información del código de validación por correo electrónico
Validation_Code_SMSobjectNo*Información del código de validación por SMS
TokenstringNo*Token de validación para actualización

*Obligatorio cuando ya se solicitó un código previo

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
ProcessingServerstringServidor 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

Estructura de Contact

CampoTipoObligatorioDescripción
Document_NumberstringNúmero de identificación del contacto
Document_TypestringTipo de identificación del contacto
Email_ContactstringNo*Correo electrónico de contacto
Name_ContactstringNoNombre de contacto
Phone_ContactstringNo*Teléfono de contacto

*Al menos uno de los dos campos debe ser enviado

Estructura de Validation_Code_Email

CampoTipoObligatorioDescripción
Code_SystemstringCódigo de validación generado por el sistema
Code_UserstringCódigo de validación escrito por el usuario

Estructura de Validation_Code_SMS

CampoTipoObligatorioDescripción
Code_SystemstringCódigo de validación generado por el sistema
Code_UserstringCódigo de validación escrito por el usuario

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta con información del sistema

Body

CampoTipoObligatorioDescripción
Validation_Code_EmailobjectNoCódigo de validación enviado por correo electrónico
Validation_Code_SMSobjectNoCódigo de validación enviado por SMS
TokenstringNoToken para validación en la actualización

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
ResponseDateDateTimeNoFecha 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

Estructura de Validation_Code_Email

CampoTipoObligatorioDescripción
Code_SystemstringNoCódigo del sistema generado

Estructura de Validation_Code_SMS

CampoTipoObligatorioDescripción
Code_SystemstringNoCódigo del sistema generado

Manejo de errores

CódigoDescripciónEjemplo
ERROR_04Error en la conversión de datos de entrada"El request es nulo"
ERROR_06PQR no encontrada o sin contacto"La PQR especificada no existe"
ERROR_07Cliente no encontrado"El cliente asociado a la PQR no existe"
ERROR_08Contacto no encontrado"El contacto especificado no existe"
ERROR_09Error en validación de correo electrónico"El correo electrónico no es válido"
ERROR_10Error en validación de teléfono"El número de teléfono no es válido"
ERROR_11Error en generación de códigos"Error al generar códigos de validación"
ERROR_12Error en actualización de datos"Error al actualizar los datos de contacto"
ERROR_13Error en validación de códigos"Los códigos de validación son incorrectos"

Análisis de Componentes

Modelos y componentes

Modelos base utilizados:

  • UpdateContactPQRRequest_v1: Modelo de petición principal
  • UpdateContactPQRResponse_v1: Modelo de respuesta principal
  • UpdateContactPQRInfoRequest_v1: Información del contacto
  • UpdateContactPQRValidationRequest_v1: Códigos de validación
  • UpdateContactPQRValidationResponse_v1: Respuesta de códigos

Utilidades y servicios comunes:

  • PQRUtil: Gestión de PQR y códigos de validación
  • CustomerUtil: Gestión de clientes y contactos
  • ResponsysServiceClient: Validación de correos electrónicos
  • ConfigurationUtil: Configuración del sistema

Patrones de diseño implementados:

  • Singleton pattern para servicios de negocio
  • Factory pattern para creación de respuestas
  • Strategy pattern para validaciones

Componentes reutilizados:

  • BotBaseRequestHeader/BotBaseResponseHeader: Cabeceras estándar
  • Audit: Auditoría de transacciones
  • BaseRequest/BaseResponse: Clases base de petición/respuesta

Referencias cruzadas:

  • PQRController: Gestión de PQR
  • CustomerController: Gestión de clientes
  • NotificationsController: Gestión de notificaciones

Ejemplos de Request/Response

Solicitud (request) - Primer momento (Generación de códigos)

json
{
  "WSRequestHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.9473387148006269",
      "processingServer": null
    },
    "Property": [
      {
        "value": null,
        "name": null
      }
    ]
  },
  "WSRequestBody": {
    "Audit": {
      "IP_Address": "10.10.0.1",
      "SO": "Android 9",
      "Id_Device": "d952095584ec1d26",
      "Canal": null,
      "IP_Longitude": "-74.0980",
      "WhatsApp_Phone_Number": "{au_whatsapp_number}",
      "Facebook_User": "{au_facebook_user}",
      "Twitter_User": "{au_twitter_user}",
      "IP_Latitude": "4.8094"
    },
    "Contact": {
      "Document_Number": "992041",
      "Document_Type": "NIT",
      "Email_Contact": "Prueba@gmail.com",
      "Phone_Contact": "3124883086",
      "Name_Contact": "SinlisimNIT Pruebaj"
    },
    "Num_PQR": null,
    "Validation_Code_Email": {
      "Code_System": "",
      "Code_User": ""
    },
    "Validation_Code_SMS": {
      "Code_System": "",
      "Code_User": ""
    },
    "Token": ""
  }
}

Respuesta exitosa - Primer momento

json
{
  "WSResponseHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.8787339309809213",
      "processingServer": null
    },
    "Service": {
      "status": "OK",
      "responseDate": "2025-07-31T01:07:23.588756Z",
      "processingServer": null,
      "statusDetail": [
        {
          "errorCode": "OK_01",
          "errorDetailCode": "La solicitud fue exitosa",
          "errorMessage": "La solicitud LUZ-0.8787339309809213 fue exitosa.",
          "errorMessageUser": null
        }
      ]
    },
    "Property": [
      {
        "name": null,
        "value": null
      }
    ]
  },
  "WSResponseBody": null
}

Solicitud (request) - Segundo momento (Validación y actualización)

json
{
  "WSRequestHeader": {
    "System": {
      "Name": "SISTEMA_CLIENTE",
      "CorrelationID": "123456789",
      "ProcessingServer": "SERVER01"
    }
  },
  "WSRequestBody": {
    "Contact": {
      "Document_Number": "12345678",
      "Document_Type": "CC",
      "Email_Contact": "usuario@ejemplo.com",
      "Phone_Contact": "3001234567",
      "Name_Contact": "Juan Pérez"
    },
    "Num_PQR": "PQR2024001",
    "Validation_Code_Email": {
      "Code_System": "ABC123",
      "Code_User": "ABC123"
    },
    "Validation_Code_SMS": {
      "Code_System": "XYZ789",
      "Code_User": "XYZ789"
    },
    "Token": "TOKEN_VALIDACION_123456"
  }
}

Respuesta de error

json
{
  "WSResponseHeader": {
    "System": {
      "Name": "SISTEMA_CLIENTE",
      "CorrelationID": "123456789",
      "ProcessingServer": "SERVER01"
    },
    "Service": {
      "Status": "ERROR",
      "ResponseDate": "2024-12-19T10:30:00",
      "ProcessingServer": "SERVER01",
      "StatusDetail": [
        {
          "ErrorCode": "ERROR_10",
          "ErrorMessage": "El número de teléfono no es válido",
          "ErrorDetail": "El número de teléfono no es válido"
        }
      ]
    }
  }
}

Diagramas Técnicos

3.1 Flujo de datos

mermaid
graph TD
  A[Recepción de la solicitud] --> B[NotificationsController]
  B --> C[NotificationsBusiness]
  C --> D[Validación de datos]
  D --> E[Consulta PQR]
  E --> F[Consulta Cliente]
  F --> G[Consulta Contacto]
  G --> H{¿Token presente?}
  H -->|No| I[Generar códigos de validación]
  H -->|Sí| J[Validar códigos]
  I --> K[Enviar códigos por email/SMS]
  J --> L[Actualizar datos de contacto]
  K --> M[Respuesta con códigos]
  L --> N[Respuesta de actualización]

3.2 Arquitectura de clases

mermaid
classDiagram
  class NotificationsController {
    +UpdateContactPQR_v1()
  }
  class NotificationsBusiness {
    +UpdateContactPQR_v1()
  }
  class PQRUtil {
    +GenerateValidationCode_UpdateContact()
    +ValidationCode_UpdateContact()
    +Update_Contact_ETA()
  }
  class CustomerUtil {
    +Get()
    +Get_Contact()
    +Update_Contact()
  }
  class ResponsysServiceClient {
    +ValidaCorreo()
  }
  NotificationsController --> NotificationsBusiness
  NotificationsBusiness --> PQRUtil
  NotificationsBusiness --> CustomerUtil
  NotificationsBusiness --> ResponsysServiceClient

3.3 Secuencia de ejecución

mermaid
sequenceDiagram
  participant Cliente
  participant NotificationsController
  participant NotificationsBusiness
  participant PQRUtil
  participant CustomerUtil
  participant ResponsysServiceClient
  
  Cliente->>NotificationsController: Solicitud POST
  NotificationsController->>NotificationsBusiness: UpdateContactPQR_v1()
  NotificationsBusiness->>NotificationsBusiness: Validar datos de entrada
  NotificationsBusiness->>PQRUtil: Consultar PQR
  NotificationsBusiness->>CustomerUtil: Consultar Cliente
  NotificationsBusiness->>CustomerUtil: Consultar Contacto
  
  alt Primer momento (sin token)
    NotificationsBusiness->>PQRUtil: Generar códigos de validación
    NotificationsBusiness->>ResponsysServiceClient: Validar correo
    NotificationsBusiness-->>Cliente: Respuesta con códigos
  else Segundo momento (con token)
    NotificationsBusiness->>PQRUtil: Validar códigos
    NotificationsBusiness->>CustomerUtil: Actualizar contacto
    NotificationsBusiness->>PQRUtil: Actualizar PQR
    NotificationsBusiness-->>Cliente: Respuesta de actualización
  end

Políticas y Consideraciones

Políticas de seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante token Bearer en header Authorization
  • Validación de origen de la petición mediante configuración
  • Auditoría completa de todas las transacciones

Validaciones de seguridad implementadas:

  • Validación de formato de correo electrónico
  • Validación de formato de número de teléfono (debe empezar con 3 y tener máximo 10 dígitos)
  • Validación de existencia de PQR y cliente
  • Validación de códigos de verificación

Límites de tasa (rate limits):

  • Configuración por origen de petición
  • Control de frecuencia de generación de códigos
  • Validación de intentos de actualización

SLAs aplicables:

  • Tiempo de respuesta máximo: 30 segundos
  • Disponibilidad: 99.9%
  • Tolerancia a fallos: Configuración por endpoint

Recomendaciones y mejores prácticas

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

  1. Implementar cache para consultas frecuentes de PQR y cliente
  2. Agregar validación de formato de correo más robusta
  3. Implementar rate limiting más granular
  4. Mejorar manejo de errores con códigos más específicos

Optimizaciones posibles:

  1. Paralelizar consultas de PQR, cliente y contacto
  2. Implementar batch processing para múltiples actualizaciones
  3. Optimizar consultas a base de datos con índices apropiados
  4. Implementar circuit breaker para servicios externos

Consideraciones de mantenimiento importantes:

  1. Monitoreo de performance de generación de códigos
  2. Auditoría de intentos fallidos de validación
  3. Backup y recuperación de datos de códigos de validación
  4. Actualización de configuraciones de seguridad

Sugerencias de seguridad aplicables:

  1. Implementar encriptación de códigos de validación
  2. Agregar validación de IP para prevenir ataques
  3. Implementar timeout para códigos de validación
  4. Agregar logging de seguridad para auditoría