feat(sat): reporte diario de errores SAT por proxy
- Agrega tabla sat_proxy_errors con proxy_usado, error_code, stage, message. - sat-client.service.ts expone proxyInfo usado en cada conexión SAT. - sat.service.ts registra errores de bloqueo/devolución del SAT en sat_proxy_errors y guarda proxyUsed en sat_sync_jobs. - Nuevo job sat-proxy-report.job.ts: cron 8 AM CDMX, envía email a ADMIN_EMAIL con errores de las últimas 24h agrupados por proxy/error_code. - Template de email sat-proxy-report.ts y método sendSatProxyReport. - Registra el cron en src/index.ts. - Actualiza docs/SAT-SYNC-IMPLEMENTATION.md.
This commit is contained in:
@@ -94,6 +94,7 @@ Definidos en `apps/api/src/jobs/sat-sync.job.ts`:
|
||||
| Incremental Enterprise | `0 11,15,19 * * *` | 11 AM, 3 PM, 7 PM | Sync incremental |
|
||||
| SAT Watchdog | `0 */2 * * *` | Cada 2 horas | Marcar jobs `running` sin heartbeat como failed |
|
||||
| SAT Monitor | `0 */2 * * *` | Cada 2 horas | Alertar por email de jobs fallidos |
|
||||
| SAT Proxy Report | `0 8 * * *` | 8:00 AM | Reporte diario de errores SAT por proxy |
|
||||
|
||||
## 6. Flujo de sincronización
|
||||
|
||||
@@ -144,6 +145,21 @@ SAT_CONCURRENT_CONTRIBUYENTES=10
|
||||
- **`ProxyManager`** (`apps/api/src/services/sat/proxy.service.ts`): parsea `SAT_PROXY_LIST`, rota proxies y crea `HttpsProxyAgent`.
|
||||
- **`sat-client.service.ts`**: usa el agente del proxy en cada petición SOAP al SAT.
|
||||
|
||||
### Reporte diario de errores por proxy
|
||||
|
||||
Cada error de bloqueo/devolución del SAT se guarda en `public.sat_proxy_errors` con el proxy usado.
|
||||
|
||||
Un cron a las **8:00 AM CDMX** envía un email a `ADMIN_EMAIL` con:
|
||||
|
||||
- Total de errores en las últimas 24 horas.
|
||||
- Tabla agrupada por `proxy` + `error_code`.
|
||||
|
||||
Archivos:
|
||||
|
||||
- `apps/api/src/jobs/sat-proxy-report.job.ts` — cron y consulta.
|
||||
- `apps/api/src/services/email/templates/sat-proxy-report.ts` — template del email.
|
||||
- `apps/api/src/services/email/email.service.ts` — `sendSatProxyReport`.
|
||||
|
||||
### Comportamiento
|
||||
|
||||
- Cada llamada a `getNextProxy()` devuelve el siguiente proxy del pool (round-robin).
|
||||
@@ -269,6 +285,8 @@ psql "$DATABASE_URL" -c "
|
||||
|
||||
- **Proxies SAT rotativos**: integración de `ProxyManager` y pool de proxies HTTP/HTTPS para evitar bloqueo por IP del SAT.
|
||||
- **Concurrencia por contribuyente**: el scheduler daily e incremental procesa hasta `SAT_CONCURRENT_CONTRIBUYENTES=10` RFCs en paralelo, sin importar a cuántos tenants pertenezcan.
|
||||
- **Reporte diario de errores por proxy**: cron a las 8 AM CDMX que envía a `ADMIN_EMAIL` un resumen de errores SAT agrupados por proxy/IP.
|
||||
- Tabla `public.sat_proxy_errors` para trazabilidad de bloqueos por IP.
|
||||
- Variables de entorno: `SAT_PROXY_LIST`, `SAT_PROXY_STRATEGY`, `SAT_PROXY_FALLBACK_DIRECT`, `SAT_CONCURRENT_CONTRIBUYENTES`.
|
||||
|
||||
### 2026-07-31
|
||||
@@ -288,6 +306,7 @@ psql "$DATABASE_URL" -c "
|
||||
## 15. Próximos pasos
|
||||
|
||||
- [x] Implementar proxies rotativos para evitar bloqueo por IP del SAT.
|
||||
- [x] Reporte diario de errores por proxy.
|
||||
- [ ] Monitorear tasa de éxito tras proxies + concurrencia por contribuyente.
|
||||
- [ ] Revisar/renovar FIELs inválidas reportadas por el monitor.
|
||||
- [ ] Evaluar ampliar ventana horaria del daily (6–10 AM) si el volumen de RFCs supera el throughput con 10 paralelos.
|
||||
|
||||
Reference in New Issue
Block a user