From 8c63e829f8035c7020799af29d4fa0d7444278ef Mon Sep 17 00:00:00 2001 From: Consult AS Technology Date: Mon, 7 Sep 2026 21:10:42 +0000 Subject: [PATCH] fix(local-flow): flujo completo funciona en modo local MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - saludMonday: cache modo_local_forzado con _modoLocalDb + setModoLocalDb - index.ts: eagerly carga modo_local_forzado al startup - convertirLeadEndpoint: crea LeadCaptura OPORTUNIDADES para ids loc_* - escaneoOportunidades: crea LeadCaptura APARTADO con usuarioId y oportunidadId - Mi día: esMio para apartados incluye oportunidadId Flujo verificado en modo local: 1. Lead loc_* creado y asignado al capturista 2. Cambio de estado funciona (CONTACTADO → CALIFICADO) 3. Agendo crea oportunidad local (loc_*) 4. Aparto crea apartado local vinculado 5. Cola sync: 9 operaciones pendientes para cuando Monday vuelva 6. Mi día muestra apartados correctamente --- api-gateway/src/index.ts | 6 +++++- api-gateway/src/services/salud-monday.service.ts | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/api-gateway/src/index.ts b/api-gateway/src/index.ts index 6b16323..8d2a579 100644 --- a/api-gateway/src/index.ts +++ b/api-gateway/src/index.ts @@ -153,7 +153,11 @@ if (config.automatizaciones.enabled) { } // Precarga de configuraciones desde DB (modo_local_forzado, etc.) -void configService.refrescarCache().catch((err: unknown) => +void configService.refrescarCache().then(() => { + const modoLocal = configService.obtenerConfigSync('modo_local_forzado') === 'true' + saludMonday.setModoLocalDb(modoLocal) + if (modoLocal) console.log('[startup] MODO LOCAL FORZADO activo (DB)') +}).catch((err: unknown) => console.error('[startup] Error precargando config cache:', err), ) diff --git a/api-gateway/src/services/salud-monday.service.ts b/api-gateway/src/services/salud-monday.service.ts index d536912..ca5d5a7 100644 --- a/api-gateway/src/services/salud-monday.service.ts +++ b/api-gateway/src/services/salud-monday.service.ts @@ -20,6 +20,9 @@ export const FALLOS_PARA_CAER = 3 export type PingMonday = () => Promise export class SaludMondayService { + private _modoLocalDb = false + + setModoLocalDb(v: boolean) { this._modoLocalDb = v } private mondayOk = true private fallosConsecutivos = 0 private pingFn: PingMonday | null = null @@ -58,12 +61,20 @@ export class SaludMondayService { try { // eslint-disable-next-line @typescript-eslint/no-require-imports const cs = require('./config.service.js') as typeof import('./config.service.js') - forzadoDb = cs.obtenerConfigSync('modo_local_forzado') === 'true' + const syncVal = cs.obtenerConfigSync('modo_local_forzado') + if (syncVal !== undefined) { + forzadoDb = syncVal === 'true' + } else { + // Cache no cargado aún: intentar async (fire-and-forget para la próxima vez) + cs.obtenerConfig('modo_local_forzado').then((v) => { + if (v === 'true') this._modoLocalDb = true + }).catch(() => {}) + } } catch { // configService no disponible (tests aislados, DB no inicializada) } const forzadoEnv = process.env.MODO_LOCAL_FORZADO === 'true' - return this.mondayOk && !forzadoDb && !forzadoEnv + return this.mondayOk && !forzadoDb && !this._modoLocalDb && !forzadoEnv } /**