# CHANGELOG - SIIP WhatsApp Notifications Plugin

## VERSIÓN 4.2.2 - 10-02-2026

### ✨ Nuevas Características (Features)

1️⃣ **Sistema de Navegación por Pestañas**:
_ Implementado sistema de pestañas horizontal similar a siip-payments-tools
_ Permite cambiar entre módulos sin volver al dashboard principal
_ Pestañas sticky que permanecen fijas al hacer scroll
_ Navegación fluida: Instaladores ↔ Notificaciones ↔ Pagos SPEI ↔ Pagos OXXO
_ Mejora significativa en la UX de navegación
_ Inicialización inteligente de módulos (carga solo cuando se accede)

### 🎨 Mejoras Visuales

- Pestañas con iconos representativos de cada módulo
- Estilo consistente con el diseño del plugin siip-payments-tools
- Adaptación completa a modos claro y oscuro
- Animaciones suaves en hover y transiciones de pestañas

## VERSIÓN 4.2.1 - 10-02-2026

### 🎨 Mejoras Visuales (Visual Enhancements)

1️⃣ **Footer Sticky (Pegado al Fondo)**:
_ Implementado sistema Flexbox en body y container
_ El footer ahora siempre se posiciona al fondo de la página \* Resuelve problema de footer flotante en módulos con poco contenido

2️⃣ **Footer con Versión Dinámica**:
_ Agregado footer profesional con branding SIIP Internet
_ Copyright dinámico con año actual usando PHP
_ Visualización clara de la versión del plugin (4.2.1)
_ Border superior prominente con color primario

### 🔄 Consistencia Visual

- Alineado con mejoras visuales del plugin `siip-payments-tools` v2.2.11
- Mantenida coherencia en diseño entre todos los plugins SIIP

### 📝 Nota

- Las esquinas redondeadas en imágenes del menú se consideraron pero se revirtieron
  debido a que los logos rectangulares (Stripe, OXXO) se distorsionaban con `object-fit: cover`

## VERSIÓN 4.2.0 - 17-01-2026

### 🚀 Nuevas Características (Features)

1. **Visualizador de Pagos Mensuales**:
   - Nueva sección en el portal administrativo para análisis visual de pagos.
   - Selector de mes para consultar estadísticas de cualquier período.
   - Tarjetas estadísticas mostrando: Total de clientes activos, Clientes que pagaron, Clientes pendientes.
   - Gráfica de dona (doughnut) interactiva con Chart.js mostrando proporción de pagos.
   - Tabla detallada de clientes pendientes con información de saldo.
   - Cálculo automático de porcentajes de completitud.
   - Loader/spinner animado mientras se cargan los datos.

2. **Integración de Microservicio para Metadata de Stripe**:
   - Nuevo microservicio Node.js (`vouchers-oxxopay-generator-service`) con acceso directo a la base de datos UCRM.
   - Endpoint `/stripe-metadata/:id` para obtener metadata de pagos Stripe que no está disponible en la API de UCRM.
   - Endpoint `/payments/:id/user` para actualizar el `userId` de pagos vía SQL directo (campo no modificable por API).
   - Configuración mediante archivo `.env` para credenciales de base de datos.

### 🔵 Mejoras (Enhancements)

1. **Sincronización Mejorada con CallBell**:
   - Fix crítico en sincronización de saldo: Ahora se actualiza correctamente en CallBell cuando se agregan facturas.
   - Logging detallado agregado a `onlyUpdate()` para diagnóstico de sincronización.
   - Comparación inteligente de campos para evitar PATCH innecesarios.
   - Sincronización automática al agregar/editar facturas (`invoice.add`, `invoice.edit`).
   - Sincronización automática al editar servicios (`service.edit`, `service.suspend`, etc.).

2. **Mejora en Categorización de Pagos Stripe**:
   - Lógica mejorada en `ensureStripePaymentAttribute()` para asignar correctamente el atributo `tipoPagoStripe`.
   - Normalización de valores de metadata: "OXXO" → "OXXO Pay" para coincidir con opciones de UCRM.
   - Prioridad a metadata obtenida del microservicio sobre adivinación por nombre de método.
   - Fix de validación 422 para pagos OXXO que fallaban por valor de atributo no válido.

3. **Configuración para Producción**:
   - Archivo `.env` agregado al microservicio con todas las credenciales de base de datos.
   - `docker-compose.yml` refactorizado para usar variables de entorno desde `.env`.
   - Red Docker `unms_internal` configurada para comunicación segura entre servicios.
   - Puerto 5432 de PostgreSQL expuesto en `docker-compose.yml` principal para acceso del microservicio.

### 🐛 Correcciones (Bug Fixes)

1. **Fix Metadata de Pagos Stripe**: Los pagos por transferencia bancaria y OXXO ahora se categorizan correctamente.
2. **Fix sincronización CallBell**: Saldo y estado del cliente ahora se actualizan correctamente en tiempo real.
3. **Fix networking Docker**: Resueltos problemas de `ECONNREFUSED` entre contenedores mediante configuración de red interna.
4. **Fix validación de atributos**: Normalización de valores para evitar errores 422 en la API de UCRM.

### 📝 Documentación

1. Logging mejorado en `ClientCallBellAPI.php` para comparaciones de campo.
2. Logging agregado en `AbstractMessageNotifierFacade.php` para diagnóstico de sync.
3. Documentación completa del flujo de datos del visualizador de pagos.

## VERSIÓN 4.1.0 - 15-01-2026

### 🚀 Nuevas Características (Features)

1. **Microservicio PDF (`pdf-cropper`)**:
   - Nuevo servicio en Python (FastAPI + Poppler) desplegado en Docker (Puerto 8050) para la conversión de PDF a Imagen.
   - Reemplaza la librería `Imagick` de PHP, aislando el procesamiento pesado fuera del plugin.
   - **Modo Full**: Garantiza la conversión del PDF completo respetando su relación de aspecto original (sin recortes ni "square crop").
   - **Overlay de Texto**: Capacidad nativa en el backend para sobreescribir texto dinámicamente (ej. cambiar "Tarjeta de crédito Stripe" por "OXXO Pay") basado en parámetros.
2. **Integración S3 / MinIO**:
   - Implementación de `MinioStorageService`.
   - Los comprobantes (JPG) y Vouchers OXXO se suben automáticamente a MinIO en lugar de usar FTP.
   - Generación de URLs públicas seguras.

### 🧹 Mantenimiento y Limpieza (Chores/Refactor)

1. **Limpieza Automática (Cleanup)**:
   - Se implementó lógica para eliminar archivos temporales locales (PDFs descargados, JPGs generados) inmediatamente después de una subida exitosa a MinIO.
2. **Refactor `ClientCallBellAPI`**:
   - Eliminación de código muerto relacionado con FTP de WordPress.
   - Implementación de cliente HTTP Guzzle para comunicación con `pdf-cropper`.
   - **Cache Busting**: Se añade Timestamp al nombre de archivo (`_time()`) para evitar caché agresivo en WhatsApp/Navegadores.

### 🐛 Correcciones (Bug Fixes)

1. **Fix Recorte de Imagen**: Se eliminó la restricción de relación de aspecto 1:1 (cuadrado) para evitar recortes.
2. **Standardización de Notas**: Actualización de `AbstractStripeOperationsFacade` para incluir explícitamente "OXXO" o "Transferencia" en las notas de pago.

## VERSIÓN 4.0.0 - 10-01-2026

### 🟢 Novedades (Re-diseño UI/UX + Integ. Pagos)

1️⃣ **Portal Administrativo Integrado (Stripe + Oxxo)**: Se ha rediseñado completamente el panel administrativo (`Dashboard`) para incluir una sección dedicada a **Pagos Online**, permitiendo la generación de referencias SPEI y OXXO Pay sin salir del portal.
2️⃣ **Visualización Inline de Vouchers OXXO**: Ahora los comprobantes de pago OXXO se generan y visualizan inmediatamente en una vista partida (Datos + Imagen) dentro del dashboard, eliminando la necesidad de abrir enlaces externos para verificación.
3️⃣ **Carga FTP Híbrida**: Optimización inteligente que sube los vouchers al servidor FTP solo cuando es necesario (integraciones externas/webhooks) y utiliza visualización local para el administrador, garantizando máxima velocidad de interfaz.
4️⃣ **Modo Oscuro & UI Premium**: Nueva capa visual con sidebar expandido, cabecera global "Sticky", y un sistema de colores adaptativo (Modo Sol/Luna) para una mejor experiencia de usuario.
5️⃣ **Seguridad Reforzada**: Refactorización completa del manejo de credenciales, eliminando datos hardcodeados en el código y centralizándolos en la configuración segura del plugin.

### 🔵 Mejoras

1️⃣ **Navegación Intuitiva**: Menú lateral rediseñado con accesos directos claros a "Pagos Stripe", "Notificaciones" y "Gestión de Instaladores".
2️⃣ **Feedback Visual**: Nuevas alertas toast y modales informativos para confirmar acciones (Generación de referencias, errores de API, etc.).
3️⃣ **Compatibilidad**: Ajustes en `manifest.json` y estructura de archivos para asegurar compatibilidad total con las últimas versiones de UISP.

## VERSIÓN 3.1.0 - 07-01-2026

### 🟢 Novedades

1️⃣ **Re-envío Manual de Notificaciones de Pago**: Se añadió un nuevo apartado en el Dashboard que permite buscar clientes y re-disparar notificaciones de WhatsApp para pagos específicos de forma manual.
2️⃣ **Buscador de Clientes en Dashboard**: Integración de buscador dinámico para localizar clientes y visualizar su historial de los últimos 10 pagos.

## VERSIÓN 3.0.0 - 02-01-2026

### 🟢 Novedades

1️⃣ **Soporte Multi-Servicio para Antenas**: Ahora el plugin gestiona múltiples servicios por cliente, mostrando cada contraseña con el formato `Servicio 1: <pass> Servicio 2: <pass> ...`.
2️⃣ **Validación Granular de Provisionamiento**: Se implementó una lógica de detección por etapas (Servicio -> Sitio UISP -> Dispositivo) para evitar generar contraseñas en sitios "Location Inactive".
3️⃣ **Lazy Loading & Optimización de Recursos**: Implementación de un "Lazy Check" que detecta si ya hay una contraseña válida en el CRM para omitir llamadas innecesarias a la API de UISP, mejorando la velocidad y reduciendo el consumo de CPU.

### 🔵 Mejoras

1️⃣ **Etiquetado Inteligente de Servicios**: Las etiquetas `Servicio 1:`, `Servicio 2:` ahora solo aparecen si el cliente tiene múltiples servicios; para un solo servicio, la contraseña se muestra directamente.
2️⃣ **Sincronización Avanzada con CallBell**: - Nuevo campo `Password Antena` enviado en formato JSON estructurado. - Unificación de peticiones PATCH (Resumen + Campos) en una sola llamada para mayor eficiencia.
3️⃣ **Contraseñas "Printer-Friendly"**: El generador de contraseñas ahora utiliza un set de caracteres optimizado para mini-impresoras térmicas (Alfanumérico + `@`, `#`), eliminando caracteres ambiguos como `l`, `I`, `0`, `O`.
4️⃣ **Mensajes de Estado en CRM**: Se agregaron alertas visuales en el campo de contraseña para indicar estados de provisión: `⚠️ Sin sitio vinculado`, `⚠️ Sin antena vinculada`, `⚠️ Cliente sin servicios`.
5️⃣ **Robustez en Entornos de Prueba**: Refinamiento del bypass de desarrollo para mantener la estabilidad de las claves generadas y evitar bucles infinitos de webhooks.

### 🟡 Bugs Resueltos

1️⃣ **Sincronización de Saldo**: Se corrigió la discrepancia de nombres entre `Saldo Actual` y `Saldo` que causaba actualizaciones redundantes infinitas con CallBell.
2️⃣ **Parseo de Passwords**: Refinamiento de expresiones regulares para capturar correctamente contraseñas multi-servicio.
3️⃣ Se solucionó el bucle infinito de actualizaciones en el atributo `passwordAntenaCliente` que ocurría al detectar cambios en servicios sin dispositivos vinculados.

## VERSIÓN 2.9.3 - 23-12-2025

### 🟢 Novedades

1️⃣ Resolución dinámica del ID del método de pago ("Transferencia bancaria") mediante consulta a la API de UISP, mejorando la portabilidad del plugin entre distintos servidores.
2️⃣ Implementación de registro de pago automático desde Webhook Stripe para eventos de tipo `customer_cash_balance_transaction.created` (Saldo aplicado).

### 🟡 Bugs Resueltos

1️⃣ Se corrigió el error de validación de la API de UCRM (422) mediante el cast explícito de `clientId` a integer y el uso de `methodId` como string.

## VERSIÓN 2.9.2

### 🟡 Bugs Resueltos

1️⃣ Se solucionó un bug que impedía obtener la contraseñas de la bóveda, ya que el response de la API cambió en la última actualización y la esstructura nueva impedía acceder al dato del password

## VERSIÓN 2.8.8

### 🟡 Bugs Resueltos

1️⃣ Se solucionó un bug que impedía al BOT del CallBell mostrar el monto de la referencia de OXXO en el mensaje donde se le entrega el voucher al cliente, para el caso donde el cliente elegía crear su referencia con la CANTIDAD TOTAL.

## VERSIÓN 2.8.7

### 🟢 Novedades

1️⃣ Ahora las referencias de **OXXO Pago** han cambiado, en lugar de enviarse la URL o link de pago al cliente será la imagen del código de barras y la información que aparece en el link directamente en el mensaje, de esta manera será más cómodo para el cliente tener la imagen en su chat a tener que abrir una URL o link externo.

### 🔵 Mejoras

1️⃣ Se modificaron nodos del bot **_OXXO_BOT_** para poder adaptar esta actualización correctamente.
2️⃣ Mejoras en el código fuente del flujo de trabajo para las referencias de OXXO PAGO.

## VERSIÓN 2.8.6

### 🔵 Mejoras

1️⃣ Se modificó la información para el envío de notificaciones a llos instaladores en el flujo de trabajo para la desasignación de tareas que hacía que no se viera correctamente la información

## VERSIÓN 2.8.5

### 🔵 Mejoras

1️⃣ Se modificó la información para el envío de notificaciones a los clientes para su visita técnica: ahora ya no se envían las horas en que serán las visitas, SOLO LA FECHA.
2️⃣ Se crearon nuevas plantillas de tipo utilidad y se adaptaron al flujo de trabajo en el código.

### 🟡 Bugs Resueltos

1️⃣ Se soluciono el bug que impedía enviar notificaciones a los instaladores para nuevas tareas.

## VERSIÓN 2.8.2

### 🟡 Bugs Resueltos

1️⃣ No se enviaban las notificaciones de las tareas al instalador. Se cambió la plantilla de CallBell o WhatsApp con 3 variables en lugar de 8.
2️⃣ Se agregó un nuevo tipo de pago ("applied_to_payment") en las propiedades de los Webhooks recibidos mediante Stripe por concepto de transferencias bancarias. Ya que sólo se revisaba el tipo de pago "funded" y eso hacía que no enviara los comprobantes de pago a los clientes para todos los casos.

## VERSIÓN 2.8.1

### 🟡 Bugs Resueltos

1️⃣ No se enviaban las notificaciones de las tareas al instalador.

## VERSIÓN 2.8.0

### 🟢 Novedades

1️⃣ Envío de contraseña de antena en el mensaje que se manda al instalador cuando se le asigna una tarea/servicio.
2️⃣ Para clientes nuevos o que no tengan el campo personalizado de “Password Antena Cliente” al actualizarlos se les asignará ese campo o cuando se les actualice su servicio.
3️⃣ Ahora se puede modificar tantas veces sea necesaria una tarea o servicio como su fecha o el instalador mientras la tarea permanezca en estado “Abiertos” SIN que se envíen notificaciones a los clientes o instaladores.
4️⃣ Se agregó un prefijo al título de la tarea/servicio agendado cuando recién se da de alta para identificar que esta no ha sido notificada aún y se pueden realizar ajustes.

### 🔵 Mejoras

1️⃣ Se modificó el flujo de trabajo para el envío de notificaciones a los clientes para su visita técnica, ahora son cuatro distintos tipos de flujo, anteriormente tres.
2️⃣ Se reemplazaron algunas plantillas de mensajes de CallBell.
3️⃣ Se renombró el uso de la etiqueta “CREARCLABESTRIPE” por “CREAR CLABE STRIPE” para un mejor entendimiento de su uso.

### 🟡 Bugs Resueltos

1️⃣ Envío de notificaciones a los clientes y a los instaladores al CERRAR una tarea/servicio (Se mandaban mensajes de asignación y de visita del técnico ) haciendo no posible cerrar las tareas.
