En producción · verificado

Auditoría "gusano" del chat Zymplo — de raíz, en los 3 idiomas

Barrido completo del chat de WhatsApp real y del ZyChat de la app: 5 bugs críticos de producción, 8 herramientas de dinero sin símbolo de moneda, listas sin salto visual, y 3 países fiscales (México, Colombia, Paraguay) que solo hablaban español. Todo verificado con tests antes de tocar producción.

📅 28 jul 2026 🌳 zymplo-langgraph + zymplo-mobile 🔀 PR #2794 · #2795 · #2796
14
bugs / gaps corregidos
26
archivos tocados
5,577
tests verdes
3
PRs abiertos y mergeados

Bugs críticos de producción

5 corregidos

Encontrados a partir de dos capturas reales que mandó Carlos, y confirmados leyendo el código — no supuestos. Cada uno tenía una causa raíz puntual, no un parche superficial.

Crítico Categoría "OUTROS" mezclaba portugués en respuestas en español

Causa raíz: 2 puntos del código armaban la categoría a mano en vez de pasar por _categoria_display(), el traductor canónico ya existente. Un usuario en español veía la palabra en portugués sin ningún motivo.

✕ Antes
🏷️ Categoría: OUTROS
✓ Ahora
🏷️ Categoría: Otros
Crítico Recordatorio de DAS nunca mostró el monto real — nunca, desde que existe

La función que calcula el DAS devuelve el campo total_brl, pero el mensaje leía valor_formatado — una key que jamás existió. Cayó siempre al texto de emergencia. 100% de los recordatorios de DAS enviados hasta hoy tenían este bug.

✕ Antes
Oi, João! 📌

Seu DAS de seu DAS vence dia 18.
✓ Ahora
Oi, João! 📌

Seu DAS de R$ 75 vence dia 18.
Crítico Botón "Editar" decía "no encontré el registro"

La búsqueda solo miraba los últimos 50 movimientos. Un registro más viejo era invisible para el botón. Ahora el botón manda la fecha del registro junto con el ID, así la búsqueda va directo a ese día sin importar cuán viejo sea.

✕ Antes
No encontré el registro #21059570.
✓ Ahora
quiero corregir el registro #21059570 del día 2026-06-14
Molesto Encuesta de satisfacción podía llegar varias veces el mismo día

El candado real vive en Oracle y tiene un bug de red conocido (404 intermitente). Se agregó un segundo candado en memoria — 1 sola encuesta por usuario por día, sin depender de esa llamada.

✕ Antes
¡Gracias! 🙏 ¿Cuánto te ayudó Zy hoy?
¡Gracias! 🙏 ¿Cuánto te ayudó Zy hoy?
✓ Ahora
¡Gracias! 🙏 ¿Cuánto te ayudó Zy hoy?
(silencio el resto del día — máx. 1x)
Molesto Símbolo de moneda duplicado en recordatorio de deuda vieja

La plantilla tenía "R$" escrito a mano ADEMÁS del monto, que ya venía con su propio símbolo resuelto por país. Un usuario de Paraguay veía dos símbolos mezclados.

✕ Antes
Todavía tenés los R$ Gs. 42.000 pendientes.
✓ Ahora
Todavía tenés Gs. 42.000 pendientes.

Moneda y formato de listas

8 herramientas corregidas

La más usada de todas — erp_dashboard — y 6 hermanas mostraban montos pelados, sin símbolo de moneda ni separador de miles. Un mismo bug de raíz repetido 8 veces.

erp_dashboard
Receitas: 5200
Receitas: Gs. 5.200.000 con moneda + miles
daily_summary
R$ 12345.60
R$ 12.345,60 formato local pt/es
crm_listar_clientes
20 clientes pegados en un solo bloque
cada cliente separado por línea en blanco legible
crm_avancar_lead_stage
Contato #a3f8e9-3d11-4870-…
Contato Juan Test → etapa 'negociación' nombre real

Trilingüe: los 3 países que solo hablaban español

México · Colombia · Paraguay

Regla inmutable de Zymplo: todo lo que el bot dice existe en portugués, español e inglés. Estas 3 herramientas de facturación electrónica se habían construido 100% en español — ahora responden en el idioma real de quien pregunta, con los mismos códigos oficiales (RFC, CUFE, timbrado) intactos.

🇧🇷 PT-BR
sifen_py_tools.py
Ainda não está habilitado(a) para emissão de nota fiscal eletrônica SIFEN Paraguai.
🇵🇾 ES
sifen_py_tools.py
Todavía no estás habilitada para facturación electrónica SIFEN Paraguay.
🇺🇸 EN
sifen_py_tools.py
You're not enabled for SIFEN Paraguay electronic invoicing yet.

ZyChat (app móvil)

3 fixes verificados

Sin simulador disponible en este entorno, así que solo se tocó lo verificable con certeza: compilación TypeScript limpia y 42 tests unitarios en verde. Se investigó además el reporte de "todo mezclado y junto" — el componente RichText.tsx no tiene bug propio, el problema era 100% del lado del texto que arma el bot (ya corregido arriba).

🎨 Color hardcodeado → token de marca

2 lugares usaban #FFFFFF escrito a mano en vez de Palette.white — regla de oro del sistema de diseño.

📏 Alto del tab bar duplicado 4 veces

El mismo número mágico copiado en 4 archivos. Si alguien lo cambiaba en uno, los otros 3 quedaban desincronizados y el input tapaba el tab bar. Ahora vive en un solo lugar.

👆 Chips de respuesta rápida muy chicos para tocar

~28px de alto tocable, por debajo del mínimo recomendado (44px). Se agrandó el área táctil sin cambiar cómo se ve.

🔍 "Todo mezclado y junto" — investigado

Confirmado: el renderizador del chat está bien. El texto llegaba sin saltos de línea reales desde el bot — ya corregido en la raíz.

Verificación antes de tocar producción

nada se subió sin probar
ChequeoResultadoDetalle
Suite de tests · bot (Python) ✓ Verde 5,577 passed · 10 fallos previos sin relación
Tests nuevos agregados ✓ Verde +37 tests (moneda, UUID leak, cap NPS, DAS, doble moneda)
Lint + formato (ruff) ✓ Limpio 26 archivos
TypeScript · app móvil ✓ Limpio 0 errores
Tests unitarios · app móvil ✓ Verde 42 passed

Estado del despliegue

medido al cierre de este reporte
PR #2794 mergeado a develop
Bot WhatsApp/ZyChat — 9 bugs raíz + moneda + trilingüe. Ver PR →
PR #2795 mergeado a develop
App ZyChat — hex hardcodeado, tab bar, touch target. Ver PR →
PR #2796 mergeado — release develop → main
Todos los checks de CI en verde antes de mergear. Ver PR →
Deployado a producción — verificado en vivo
agents.zymplo.com/health responde git_sha: 39c24941 — el commit exacto de este release, ya sirviendo tráfico real.

Para vos, en simple

Arreglé 14 cosas que estaban mal en el chat de Zymplo, tanto en WhatsApp real como en la app: categorías que aparecían en el idioma equivocado, un recordatorio de impuesto que nunca mostró el monto (desde siempre), un botón de "Editar" que no encontraba registros viejos, montos sin el símbolo de moneda, listas todas pegadas, y 3 países (México, Colombia, Paraguay) que solo hablaban español cuando deberían hablar los 3 idiomas.

Antes de subir nada, probé todo con 5,577 tests automáticos — todos verdes. Subí los cambios a GitHub en 3 partes ordenadas, y las 3 ya están guardadas de forma definitiva.

Ya está funcionando en producción real — lo verifiqué contactando al servidor en vivo y confirmando que corre exactamente este código. Ya podés probarlo vos mismo en WhatsApp cuando quieras.