Programacion

Ambas organizaciones sincronizan automaticamente todos los dias a las 23:00 via crontab en el servidor de produccion.

DUAL Dual Servicios

0 23 * * *
Facturas de venta dia por dia

FLEX Flex Marketing

0 23 * * *
Ventas + Notas de credito + Compras

Crontab de produccion

# DUAL - Facturas de venta dia por dia
0 23 * * * cd /var/www/apiqb && ./scripts/dual-servicios/sincronizar-por-dias-auto.sh >> /var/www/apiqb/logs/dual_sync.log 2>&1

# FLEX - Ventas, notas de credito y compras
0 23 * * * cd /var/www/apiqb && ./scripts/flex-marketing/sincronizar-todo.sh >> /var/www/apiqb/logs/flex_sync.log 2>&1
DUAL — sincronizar-por-dias-auto.sh

Procesa facturas de venta dia por dia. Sin argumentos usa la fecha de hoy. Pausa de 3 segundos entre dias.

# Solo hoy (por defecto)
./scripts/dual-servicios/sincronizar-por-dias-auto.sh

# Dia especifico
./scripts/dual-servicios/sincronizar-por-dias-auto.sh 2026-01-15

# Rango de fechas
./scripts/dual-servicios/sincronizar-por-dias-auto.sh 2026-01-01 2026-01-31
Internamente: Ejecuta node scripts/dual-servicios/facturas-organizacion.js sincronizar "$FECHA" "$FECHA" por cada dia del rango, con pausa de 3 segundos entre iteraciones.
FLEX — sincronizar-todo.sh

Ejecuta 3 pasos secuenciales con pausa de 2 segundos entre cada uno:

1
Facturas de venta node scripts/flex-marketing/facturas-organizacion.js ventas
2
Notas de credito node scripts/flex-marketing/credit-notes-organizacion.js procesar
3
Facturas de compra node scripts/flex-marketing/factura-compras-organizacion.js sincronizar
./scripts/flex-marketing/sincronizar-todo.sh
Logs
ArchivoContenido
logs/dual_sync.logOutput del cron de DUAL
logs/flex_sync.logOutput del cron de FLEX
logs/dual-servicios/sync_auto_YYYYMMDD.logLog detallado por ejecucion de DUAL
logs/dual-servicios/sync_summary_*.jsonResumen JSON de sync DUAL (estadisticas por dia)
logs/flex-marketing/sync_auto_YYYYMMDD.logLog detallado por ejecucion de FLEX
logs/flex-marketing/sync_summary_*.jsonResumen JSON de sync FLEX (estadisticas por paso)

Los resumenes JSON son consumidos por el dashboard via endpoint /sync-logs (ultimos 20 resumenes).

# Ultimas lineas del log de DUAL
tail -50 /var/www/apiqb/logs/dual_sync.log

# Ultimas lineas del log de FLEX
tail -50 /var/www/apiqb/logs/flex_sync.log

# Buscar errores
grep -i "error" /var/www/apiqb/logs/dual_sync.log | tail -20

# Ver ultimo resumen JSON de DUAL
cat logs/dual-servicios/sync_summary_*.json | python3 -m json.tool | tail -30
Notificaciones email

Ambos scripts envian automaticamente un email cuando detectan errores durante la sincronizacion.

ComponenteDetalle
Utilidadscripts/utilities/notify.js
SMTPSendGrid (smtp.sendgrid.net:587)
DestinatarioConfigurado en NOTIFY_EMAIL (.env)
RemitenteConfigurado en SMTP_FROM (.env)
ContenidoHTML con estadisticas y detalle por dia/paso

Uso manual

# Enviar resumen desde archivo JSON
node scripts/utilities/notify.js --subject "Titulo" --file logs/dual-servicios/sync_summary_*.json

# Enviar mensaje directo
node scripts/utilities/notify.js --subject "Alerta" --body "<p>Mensaje HTML</p>"

# Uso desde codigo
const { sendNotification } = require('./scripts/utilities/notify');
await sendNotification('Titulo', '<p>Contenido HTML</p>');
Variables .env requeridas: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM, NOTIFY_EMAIL
Ejecucion manual

DUAL Facturas de venta

# Sincronizar hoy
node scripts/dual-servicios/facturas-organizacion.js sincronizar

# Sincronizar rango
node scripts/dual-servicios/facturas-organizacion.js sincronizar 2026-01-01 2026-01-31

FLEX Facturas, NC y compras

# Facturas de venta
node scripts/flex-marketing/facturas-organizacion.js ventas

# Notas de credito
node scripts/flex-marketing/credit-notes-organizacion.js procesar

# Facturas de compra
node scripts/flex-marketing/factura-compras-organizacion.js sincronizar
Troubleshooting
ProblemaDiagnosticoSolucion
Cron no ejecuta sudo systemctl status cron Verificar servicio activo, revisar /var/log/syslog
Scripts sin permisos ls -la scripts/*/sincronizar*.sh chmod +x scripts/dual-servicios/sincronizar-por-dias-auto.sh
chmod +x scripts/flex-marketing/sincronizar-todo.sh
Token QB expirado Logs con errores 401 Auto-refresh incluido. Si refresh token expiro (>100 dias), re-auth manual via /connect/:org
.env no accesible cat /var/www/apiqb/.env Verificar permisos del archivo y usuario del cron