Ambas organizaciones sincronizan automaticamente todos los dias a las 23:00 via crontab en el servidor 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
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
node scripts/dual-servicios/facturas-organizacion.js sincronizar "$FECHA" "$FECHA" por cada dia del rango, con pausa de 3 segundos entre iteraciones.
Ejecuta 3 pasos secuenciales con pausa de 2 segundos entre cada uno:
node scripts/flex-marketing/facturas-organizacion.js ventas
node scripts/flex-marketing/credit-notes-organizacion.js procesar
node scripts/flex-marketing/factura-compras-organizacion.js sincronizar
./scripts/flex-marketing/sincronizar-todo.sh
| Archivo | Contenido |
|---|---|
logs/dual_sync.log | Output del cron de DUAL |
logs/flex_sync.log | Output del cron de FLEX |
logs/dual-servicios/sync_auto_YYYYMMDD.log | Log detallado por ejecucion de DUAL |
logs/dual-servicios/sync_summary_*.json | Resumen JSON de sync DUAL (estadisticas por dia) |
logs/flex-marketing/sync_auto_YYYYMMDD.log | Log detallado por ejecucion de FLEX |
logs/flex-marketing/sync_summary_*.json | Resumen 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
Ambos scripts envian automaticamente un email cuando detectan errores durante la sincronizacion.
| Componente | Detalle |
|---|---|
| Utilidad | scripts/utilities/notify.js |
| SMTP | SendGrid (smtp.sendgrid.net:587) |
| Destinatario | Configurado en NOTIFY_EMAIL (.env) |
| Remitente | Configurado en SMTP_FROM (.env) |
| Contenido | HTML con estadisticas y detalle por dia/paso |
# 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>');
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM, NOTIFY_EMAIL
# 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
# 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
| Problema | Diagnostico | Solucion |
|---|---|---|
| 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.shchmod +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 |