feat(sat-sync): bajar concurrencia a 3 y aumentar pausa entre lotes a 30s

This commit is contained in:
Horux Dev
2026-08-27 05:58:55 +00:00
parent 26c1c0ec75
commit 85da7ce71c
2 changed files with 9 additions and 4 deletions

View File

@@ -15,11 +15,12 @@ const SYNC_CRON_SCHEDULE = '0 3-7 * * *'; // 3:00–7:00 AM CDMX — ~20% de ten
const RECOVERY_CRON_SCHEDULE = '0 14 * * *'; // 2:00 PM todos los días const RECOVERY_CRON_SCHEDULE = '0 14 * * *'; // 2:00 PM todos los días
const RETRY_4PM_CRON_SCHEDULE = '0 16 * * *'; // 4:00 PM todos los días const RETRY_4PM_CRON_SCHEDULE = '0 16 * * *'; // 4:00 PM todos los días
const CONCURRENT_SYNCS = 3; // Máximo de sincronizaciones simultáneas (legacy, se mantiene por compatibilidad) const CONCURRENT_SYNCS = 3; // Máximo de sincronizaciones simultáneas (legacy, se mantiene por compatibilidad)
const CONCURRENT_CONTRIBUYENTES = Number(process.env.SAT_CONCURRENT_CONTRIBUYENTES || '5'); // Máximo de contribuyentes en paralelo const CONCURRENT_CONTRIBUYENTES = Number(process.env.SAT_CONCURRENT_CONTRIBUYENTES || '3'); // Máximo de contribuyentes en paralelo
const OPINION_CRON_SCHEDULE = '0 4 * * 0'; // Sundays 4:00 AM const OPINION_CRON_SCHEDULE = '0 4 * * 0'; // Sundays 4:00 AM
const CSF_CRON_SCHEDULE = '0 4 1 * *'; // Día 1 de cada mes 04:00 AM (CSF mensual) const CSF_CRON_SCHEDULE = '0 4 1 * *'; // Día 1 de cada mes 04:00 AM (CSF mensual)
const INCREMENTAL_CRON_SCHEDULE = '0 12,16 * * *'; // 12:00 PM y 4:00 PM CDMX const INCREMENTAL_CRON_SCHEDULE = '0 12,16 * * *'; // 12:00 PM y 4:00 PM CDMX
const BATCH_JITTER_MS = Number(process.env.SAT_BATCH_JITTER_MS || '60000'); // Jitter máximo entre inicios de sync en un batch (default 60s) const BATCH_JITTER_MS = Number(process.env.SAT_BATCH_JITTER_MS || '60000'); // Jitter máximo entre inicios de sync en un batch (default 60s)
const BATCH_DELAY_MS = Number(process.env.SAT_BATCH_DELAY_MS || '30000'); // Pausa entre lotes para no saturar al SAT
const SUBSCRIPTION_LIFECYCLE_CRON = '30 2 * * *'; // 2:30 AM diario — aplica pending changes + expira trials const SUBSCRIPTION_LIFECYCLE_CRON = '30 2 * * *'; // 2:30 AM diario — aplica pending changes + expira trials
const EXPIRY_REMINDERS_CRON = '0 9 * * *'; // 9:00 AM diario — avisos pre-vencimiento (7d/3d/1d/0d) const EXPIRY_REMINDERS_CRON = '0 9 * * *'; // 9:00 AM diario — avisos pre-vencimiento (7d/3d/1d/0d)
@@ -384,9 +385,10 @@ async function runSyncJob(): Promise<void> {
return syncUnit(unit, '[SAT Cron]'); return syncUnit(unit, '[SAT Cron]');
})); }));
// Pequeña pausa entre lotes // Pausa entre lotes para no saturar al SAT
if (i + CONCURRENT_CONTRIBUYENTES < units.length) { if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
await new Promise(resolve => setTimeout(resolve, 5000)); console.log(`[SAT Cron] Pausa de ${BATCH_DELAY_MS / 1000}s entre lotes`);
await new Promise(resolve => setTimeout(resolve, BATCH_DELAY_MS));
} }
} }
@@ -533,8 +535,10 @@ async function runIncrementalSyncJob(): Promise<void> {
return syncUnit(unit, '[SAT Cron Inc]'); return syncUnit(unit, '[SAT Cron Inc]');
})); }));
// Pausa entre lotes para no saturar al SAT
if (i + CONCURRENT_CONTRIBUYENTES < units.length) { if (i + CONCURRENT_CONTRIBUYENTES < units.length) {
await new Promise(resolve => setTimeout(resolve, 5000)); console.log(`[SAT Cron Inc] Pausa de ${BATCH_DELAY_MS / 1000}s entre lotes`);
await new Promise(resolve => setTimeout(resolve, BATCH_DELAY_MS));
} }
} }

View File

@@ -16,6 +16,7 @@ module.exports = {
NODE_ENV: 'production', NODE_ENV: 'production',
PORT: 4000, PORT: 4000,
SAT_SYNC_EXCLUDED_TENANTS: 'DEMO2501019X2', SAT_SYNC_EXCLUDED_TENANTS: 'DEMO2501019X2',
SAT_CONCURRENT_CONTRIBUYENTES: '3',
}, },
}, },
{ {