antes de la limpieza y refacorización del código

This commit is contained in:
DANYDHSV 2025-12-24 02:03:41 -06:00
parent 0e37fd153f
commit 5425659428
3 changed files with 128 additions and 57 deletions

61
CHANGELOG.md Normal file
View File

@ -0,0 +1,61 @@
# CHANGELOG - siip-whatsapp-notifications
## 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.

107
README.md
View File

@ -1,80 +1,73 @@
# SIIP - Procesador de Pagos en línea con Stripe, Oxxo y Transferencia, Sincronizador de CallBell y Envío de Notificaciones y comprobantes vía WhatsApp # SIIP - WhatsApp Notifications & Stripe Payments for UCRM
Este plugin sincroniza los clientes del sitema UISP CRM con los contactos de WhatsApp en CallBell, además procesa pagos de Stripe como las trasferencias bancarias y genera referencias de pago vía OXXO, además envía comprobantes de pago en formato imagen PNG o texto vía Whatsapp a los clientes Este plugin es una solución integral para automatizar la comunicación con clientes y la gestión de pagos en UISP/UCRM. Actúa como puente entre el CRM, Stripe y la plataforma de mensajería CallBell.
# REGISTRO DE CAMBIOS ## 🚀 Funcionalidades Principales
## VERSIÓN 2.9.3 - 23-12-2025 - **Notificaciones Dinámicas**: Envío automático de mensajes por WhatsApp para facturas, pagos, suspensiones y reactivaciones.
### 🟢 Novedades - **Gestión de Agenda (Jobs/Tasks)**: Notificación inteligente a técnicos e instaladores sobre nuevas tareas, reprogramaciones y desasignaciones.
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. - **Pagos con Stripe & OXXO**: Generación automatizada de referencias de OXXO con captura de pantalla (Puppeteer) y alojamiento en la nube (WordPress).
2⃣ Implementación de registro de pago automático desde Webhook Stripe para eventos de tipo `customer_cash_balance_transaction.created` (Saldo aplicado). - **Sincronización CallBell**: Mantenimiento de la información del cliente actualizada en la plataforma de chat CallBell.
- **Resolución Dinámica**: Detección automática de métodos de pago y atributos personalizados para máxima portabilidad.
### 🟡 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 ## 🏗️ Arquitectura del Sistema
### 🟡 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 El plugin utiliza un patrón de diseño basado en **Facades** para desacoplar la lógica de despacho de los servicios externos.
### 🟡 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 ### Componentes Clave
### 🟢 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 - **Despachador Central (`Plugin.php`)**: Gestiona tanto los webhooks internos de UCRM como los externos (Stripe). Controla el estado de las notificaciones de tareas mediante prefijos en los títulos (`[NOTIFICACION-PENDIENTE]`).
1⃣ Se modificaron nodos del bot ***OXXO_BOT*** para poder adaptar esta actualización correctamente. - **Fachada de Mensajería (`AbstractMessageNotifierFacade`)**: Contiene la lógica de negocio para decidir qué notificar, cuándo y a quién.
- **Interfaz CallBell (`ClientCallBellAPI`)**: Encapsula las llamadas a la API de CallBell, manejando plantillas y mensajes multimedia.
- **Operaciones OXXO (`AbstractOxxoOperationsFacade`)**: Orquesta el flujo de pago: Stripe (Referencia) -> Puppeteer (Screenshot) -> WordPress (Hosting) -> CallBell (WhatsApp).
2⃣ Mejoras en el código fuente del flujo de trabajo para las referencias de OXXO PAGO. ---
## 🛠️ Requisitos e Integraciones
## VERSIÓN 2.8.6 Para un funcionamiento óptimo, el plugin requiere:
### 🔵 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 1. **UISP/UCRM**: Versión compatible con el SDK de Ubiquiti.
### 🔵 Mejoras 2. **Stripe API**: Token y Webhooks configurados para transacciones en tiempo real.
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. 3. **CallBell API**: Token de acceso para el envío de mensajes a través de plantillas de WhatsApp.
2⃣ Se crearon nuevas plantillas de tipo utilidad y se adaptaron al flujo de trabajo en el código. 4. **Microservicio Puppeteer**: Un contenedor Docker con la API de Puppeteer para capturar vouchers.
5. **Hosting WordPress (FTP)**: Para alojar temporalmente las imágenes de los vouchers enviadas a los clientes.
### 🟡 Bugs Resueltos ---
1⃣ Se soluciono el bug que impedía enviar notificaciones a los instaladores para nuevas tareas.
### 🟡 Bugs Resueltos ## 🏷️ Configuración de UCRM
## VERSIÓN 2.8.2 ### Contactos y Etiquetas
El plugin selecciona los números de destino basándose en el **Tipo de Contacto** definido en UCRM:
- `WhatsApp`: Recibe notificaciones y actualizaciones de datos.
- `WhatsNotifica`: Recibe solo notificaciones.
- `WhatsActualiza`: Utilizado solo para sincronizar datos con CallBell.
### 🟡 Bugs Resueltos ### Atributos Personalizados
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. Es necesario configurar los siguientes atributos en UCRM:
- `stripeCustomerId`: ID del cliente en Stripe.
- `clabeInterbancaria`: CLABE personalizada para transferencias.
- `passwordAntenaCliente`: Almacena la contraseña del equipo del cliente (sincronizada con la bóveda).
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. ---
## 🔄 Flujos de Trabajo Destacados
## VERSIÓN 2.8.1 ### 📅 Notificación de Visitas Técnicas
Cuando se asigna o reprograma una tarea:
1. El plugin detecta el cambio en el `assignedUserId` o la fecha.
2. Envía un mensaje al cliente con el nombre del técnico y la fecha (sin hora, por privacidad/logística).
3. Envía un mensaje al técnico con la dirección, ubicación en Google Maps y la contraseña de la antena obtenida de la bóveda de UISP.
### 🟡 Bugs Resueltos ### 💳 Registro de Pagos por Transferencia
1⃣ No se enviaban las notificaciones de las tareas al instalador. 1. Stripe envía un webhook de saldo aplicado (`customer_cash_balance_transaction.created`).
2. El plugin resuelve dinámicamente el ID del método "Transferencia bancaria".
3. Registra el pago automáticamente en UCRM vinculado al `clientId` en los metadatos.
---
## VERSIÓN 2.8.0 ## 📝 Registro de Cambios
### 🟢 Novedades Para consultar la evolución del proyecto, ver el archivo [CHANGELOG.md](./CHANGELOG.md).
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.

View File

@ -2670,3 +2670,20 @@ Response 2 Patch CallBell: {"contact":{"uuid":"74cc2bb45eb8409f92cd5dba99200d26"
[2025-12-23 20:31:06.433190] [debug] Valor de JSON: {"uuid":"a71274f0-6397-4d85-8348-6ff80240c138","changeType":"edit","entity":"payment","entityId":"716","eventName":"payment.edit","extraData":{"entity":{"id":716,"clientId":2,"methodId":"1dd098fa-5d63-4c8d-88b7-3c27ffbbb6ae","checkNumber":null,"createdDate":"2025-12-23T14:31:01-0600","amount":250,"currencyCode":"MXN","note":null,"receiptSentDate":null,"providerName":null,"providerPaymentId":null,"providerPaymentTime":null,"paymentCovers":[],"creditAmount":250,"userId":null,"attributes":[]},"entityBeforeEdit":{"id":716,"clientId":2,"methodId":"1dd098fa-5d63-4c8d-88b7-3c27ffbbb6ae","checkNumber":null,"createdDate":"2025-12-23T14:31:01-0600","amount":250,"currencyCode":"MXN","note":null,"receiptSentDate":null,"providerName":null,"providerPaymentId":null,"providerPaymentTime":null,"paymentCovers":[],"creditAmount":250,"userId":null,"attributes":[]}}} [2025-12-23 20:31:06.433190] [debug] Valor de JSON: {"uuid":"a71274f0-6397-4d85-8348-6ff80240c138","changeType":"edit","entity":"payment","entityId":"716","eventName":"payment.edit","extraData":{"entity":{"id":716,"clientId":2,"methodId":"1dd098fa-5d63-4c8d-88b7-3c27ffbbb6ae","checkNumber":null,"createdDate":"2025-12-23T14:31:01-0600","amount":250,"currencyCode":"MXN","note":null,"receiptSentDate":null,"providerName":null,"providerPaymentId":null,"providerPaymentTime":null,"paymentCovers":[],"creditAmount":250,"userId":null,"attributes":[]},"entityBeforeEdit":{"id":716,"clientId":2,"methodId":"1dd098fa-5d63-4c8d-88b7-3c27ffbbb6ae","checkNumber":null,"createdDate":"2025-12-23T14:31:01-0600","amount":250,"currencyCode":"MXN","note":null,"receiptSentDate":null,"providerName":null,"providerPaymentId":null,"providerPaymentTime":null,"paymentCovers":[],"creditAmount":250,"userId":null,"attributes":[]}}}
[2025-12-24 6:25:03.189116] [notice] Logging level set to:debug
[2025-12-24 6:25:03.189222] [debug] valor del webhook: {"uuid":"e1dfdfb6-2413-4638-99a7-d502dc1e6c11","changeType":"overdue","entity":"invoice","entityId":"2812","eventName":"invoice.overdue","extraData":{"entity":{"id":2812,"clientId":118,"number":"002761","createdDate":"2025-12-09T10:00:01-0600","dueDate":"2025-12-23T10:00:01-0600","emailSentDate":"2025-12-24T00:00:00-0600","maturityDays":14,"taxableSupplyDate":"2025-12-07T18:00:00-0600","notes":null,"adminNotes":null,"items":[{"id":2824,"type":"service","label":"plan300 09\/11\/2025 \u2013 08\/12\/2025","price":300,"quantity":1,"total":300,"unit":null,"tax1Id":null,"tax2Id":null,"tax3Id":null,"serviceId":105,"serviceSurchargeId":null,"productId":null,"feeId":null,"discountPrice":0,"discountQuantity":0,"discountTotal":0}],"subtotal":300,"discount":null,"discountLabel":"Descuento","taxes":[],"total":300,"amountPaid":0,"totalUntaxed":300,"totalDiscount":0,"totalTaxAmount":0,"amountToPay":300,"currencyCode":"MXN","status":1,"paymentCovers":[],"invoiceTemplateId":2,"proformaInvoiceTemplateId":2,"organizationName":"SIIP Pruebas","organizationRegistrationNumber":null,"organizationTaxId":null,"organizationStreet1":"Morel 34","organizationStreet2":null,"organizationCity":"Dolores Hidalgo","organizationStateId":null,"organizationCountryId":173,"organizationZipCode":"37800","organizationBankAccountName":null,"organizationBankAccountField1":null,"organizationBankAccountField2":null,"clientFirstName":"Toro Sentado","clientLastName":"Ram\u00edrez","clientCompanyName":null,"clientCompanyRegistrationNumber":null,"clientCompanyTaxId":null,"clientStreet1":"56 Chiapas","clientStreet2":null,"clientCity":"Dolores Hidalgo Cuna de la Independencia Nacional","clientCountryId":173,"clientStateId":null,"clientZipCode":"37800","attributes":[],"uncollectible":false,"proforma":false,"generatedInvoiceId":null,"proformaInvoiceId":null,"isAppliedVatReverseCharge":false,"payAutomatically":false,"printed":false},"entityBeforeEdit":null}}
[2025-12-24 6:25:03.403584] [debug] valor el evento recibido por webhook: invoice.overdue
[2025-12-24 6:25:03.403646] [debug] Valor de JSON: {"uuid":"e1dfdfb6-2413-4638-99a7-d502dc1e6c11","changeType":"overdue","entity":"invoice","entityId":"2812","eventName":"invoice.overdue","extraData":{"entity":{"id":2812,"clientId":118,"number":"002761","createdDate":"2025-12-09T10:00:01-0600","dueDate":"2025-12-23T10:00:01-0600","emailSentDate":"2025-12-24T00:00:00-0600","maturityDays":14,"taxableSupplyDate":"2025-12-07T18:00:00-0600","notes":null,"adminNotes":null,"items":[{"id":2824,"type":"service","label":"plan300 09\/11\/2025 \u2013 08\/12\/2025","price":300,"quantity":1,"total":300,"unit":null,"tax1Id":null,"tax2Id":null,"tax3Id":null,"serviceId":105,"serviceSurchargeId":null,"productId":null,"feeId":null,"discountPrice":0,"discountQuantity":0,"discountTotal":0}],"subtotal":300,"discount":null,"discountLabel":"Descuento","taxes":[],"total":300,"amountPaid":0,"totalUntaxed":300,"totalDiscount":0,"totalTaxAmount":0,"amountToPay":300,"currencyCode":"MXN","status":1,"paymentCovers":[],"invoiceTemplateId":2,"proformaInvoiceTemplateId":2,"organizationName":"SIIP Pruebas","organizationRegistrationNumber":null,"organizationTaxId":null,"organizationStreet1":"Morel 34","organizationStreet2":null,"organizationCity":"Dolores Hidalgo","organizationStateId":null,"organizationCountryId":173,"organizationZipCode":"37800","organizationBankAccountName":null,"organizationBankAccountField1":null,"organizationBankAccountField2":null,"clientFirstName":"Toro Sentado","clientLastName":"Ram\u00edrez","clientCompanyName":null,"clientCompanyRegistrationNumber":null,"clientCompanyTaxId":null,"clientStreet1":"56 Chiapas","clientStreet2":null,"clientCity":"Dolores Hidalgo Cuna de la Independencia Nacional","clientCountryId":173,"clientStateId":null,"clientZipCode":"37800","attributes":[],"uncollectible":false,"proforma":false,"generatedInvoiceId":null,"proformaInvoiceId":null,"isAppliedVatReverseCharge":false,"payAutomatically":false,"printed":false},"entityBeforeEdit":null}}
[2025-12-24 6:25:03.403850] [debug] Factura vencida
[2025-12-24 6:25:03.403898] [debug] datos del notification para el invoice overdue:{"uuid":"e1dfdfb6-2413-4638-99a7-d502dc1e6c11","changeType":"overdue","entity":"invoice","entityId":2812,"message":null,"clientId":118,"eventName":"invoice.overdue","clientData":{"id":118,"userIdent":null,"previousIsp":null,"isLead":false,"clientType":1,"companyName":null,"companyRegistrationNumber":null,"companyTaxId":null,"companyWebsite":null,"street1":"56 Chiapas","street2":null,"city":"Dolores Hidalgo Cuna de la Independencia Nacional","countryId":173,"stateId":null,"zipCode":"37800","fullAddress":"Chiapas 56, Centro, Dolores Hidalgo Cuna de la Independencia Nacional, Gto., M\u00e9xico","invoiceStreet1":null,"invoiceStreet2":null,"invoiceCity":null,"invoiceStateId":null,"invoiceCountryId":null,"invoiceZipCode":null,"invoiceAddressSameAsContact":true,"note":null,"sendInvoiceByPost":null,"invoiceMaturityDays":null,"stopServiceDue":null,"stopServiceDueDays":null,"organizationId":1,"tax1Id":null,"tax2Id":null,"tax3Id":null,"registrationDate":"2024-04-25T00:00:00-0600","leadConvertedAt":null,"companyContactFirstName":null,"companyContactLastName":null,"isActive":false,"firstName":"Toro Sentado","lastName":"Ram\u00edrez","username":null,"contacts":[{"id":122,"clientId":118,"email":"pepeeltoro141089@gmail.com","phone":null,"name":null,"isBilling":true,"isContact":true,"types":[{"id":1,"name":"Billing"},{"id":2,"name":"General"},{"id":1000,"name":"WhatsApp"}]}],"attributes":[{"id":119,"clientId":118,"customAttributeId":11,"name":"Clabe Interbancaria","key":"clabeInterbancaria","value":"002180173419260258","clientZoneVisible":true},{"id":216,"clientId":118,"customAttributeId":17,"name":"Password Antena Cliente","key":"passwordAntenaCliente","value":"gYAIEK:Be}SK*01z5+\/V","clientZoneVisible":false}],"accountBalance":-5700,"accountCredit":0,"accountOutstanding":5700,"currencyCode":"MXN","organizationName":"SIIP Pruebas","bankAccounts":[],"tags":[],"invitationEmailSentDate":null,"avatarColor":"#fb8c00","addressGpsLat":21.1572733,"addressGpsLon":-100.9403274,"isArchived":false,"generateProformaInvoices":null,"usesProforma":false,"hasOverdueInvoice":true,"hasOutage":false,"hasSuspendedService":true,"hasServiceWithoutDevices":true,"referral":null,"hasPaymentSubscription":false,"hasAutopayCreditCard":false},"serviceData":null,"invoiceData":{"id":2812,"clientId":118,"number":"002761","createdDate":"2025-12-09T10:00:01-0600","dueDate":"2025-12-23T10:00:01-0600","emailSentDate":"2025-12-24T00:00:00-0600","maturityDays":14,"taxableSupplyDate":"2025-12-07T18:00:00-0600","notes":null,"adminNotes":null,"items":[{"id":2824,"type":"service","label":"plan300 09\/11\/2025 \u2013 08\/12\/2025","price":300,"quantity":1,"total":300,"unit":null,"tax1Id":null,"tax2Id":null,"tax3Id":null,"serviceId":105,"serviceSurchargeId":null,"productId":null,"feeId":null,"discountPrice":-0,"discountQuantity":0,"discountTotal":-0}],"subtotal":300,"discount":null,"discountLabel":"Descuento","taxes":[],"total":300,"amountPaid":0,"totalUntaxed":300,"totalDiscount":-0,"totalTaxAmount":0,"amountToPay":300,"currencyCode":"MXN","status":1,"paymentCovers":[],"invoiceTemplateId":2,"proformaInvoiceTemplateId":2,"organizationName":"SIIP Pruebas","organizationRegistrationNumber":null,"organizationTaxId":null,"organizationStreet1":"Morel 34","organizationStreet2":null,"organizationCity":"Dolores Hidalgo","organizationStateId":null,"organizationCountryId":173,"organizationZipCode":"37800","organizationBankAccountName":null,"organizationBankAccountField1":null,"organizationBankAccountField2":null,"clientFirstName":"Toro Sentado","clientLastName":"Ram\u00edrez","clientCompanyName":null,"clientCompanyRegistrationNumber":null,"clientCompanyTaxId":null,"clientStreet1":"56 Chiapas","clientStreet2":null,"clientCity":"Dolores Hidalgo Cuna de la Independencia Nacional","clientCountryId":173,"clientStateId":null,"clientZipCode":"37800","attributes":[],"uncollectible":false,"proforma":false,"generatedInvoiceId":null,"proformaInvoiceId":null,"isAppliedVatReverseCharge":false,"payAutomatically":false,"printed":false},"paymentData":null}
[2025-12-24 6:25:03.403930] [debug] ***Se notifica al cliente que la factura de su servicio está vencida***
contac vacio
[2025-12-24 6:25:03.404103] [debug] Numero de cel obtenido
[2025-12-24 6:25:03.404118] [warning] No se encontró un teléfono celular válido para el cliente: 118