Trabajos Programados
Hola Doc ejecuta varios procesos en segundo plano que cambian datos sin intervención de un usuario. El más importante es el ciclo diario que corre a la medianoche en hora de Panamá (America/Panama, UTC-5, sin horario de verano). Casi todo lo que “cambia solo de un día para otro” —vigencias vencidas, miembros activados o removidos, cambios de plan que entran en vigor— ocurre en este ciclo.
Esta página describe qué hace cada trabajo, en qué orden y con qué frecuencia, para poder explicar por qué un dato cambió a medianoche.
Ciclo diario (medianoche)
Sección titulada «Ciclo diario (medianoche)»El ciclo corre a las 00:00 de Panamá y también una vez al iniciar el servicio. Ejecuta siete pasos en orden estricto; el orden importa porque cada paso depende del estado dejado por el anterior.
graph TD
A[Inicio del ciclo<br/>00:00 America/Panama] --> B[1. Aplicar cambios de plan pendientes]
B --> C[2. Expirar suscripciones vencidas]
C --> D[3. Consumir meses pagados]
D --> E[4. Ciclo de vida de miembros + envejecimiento]
E --> F[5. Notificar expiraciones próximas]
F --> G[6. Notificar activaciones]
G --> H[7. Limpiar archivos de exportación antiguos]
| # | Paso | Qué hace |
|---|---|---|
| 1 | Aplicar cambios de plan pendientes | Activa los segmentos de la línea de tiempo en estado scheduled cuya fecha de inicio ya pasó. Ver Cambios de plan y línea de tiempo. |
| 2 | Expirar suscripciones | Marca EXPIRED las suscripciones ACTIVE/PENDING_ONBOARDING con vigencia vencida y SUSPENDED_EXPIRED las suspendidas (conserva la intención de suspensión). |
| 3 | Consumir meses pagados | Recalcula consumed_qty de los pagos con asignación FIFO; define cuántos meses quedan reembolsables. |
| 4 | Ciclo de vida de miembros | Activa miembros pendientes, remueve los marcados y procesa el envejecimiento (age-out). Ver Ciclo de vida de miembros. |
| 5 | Notificar expiraciones | Publica eventos de aviso de expiración próxima al sistema de comunicaciones. |
| 6 | Notificar activaciones | Publica eventos de activación (fin de carencia) al sistema de comunicaciones. |
| 7 | Limpiar exportaciones | Borra el contenido (file_data) de las exportaciones con más de 24 horas; conserva los metadatos para auditoría. |
Otros trabajos periódicos
Sección titulada «Otros trabajos periódicos»Además del ciclo diario hay dos trabajos de alta frecuencia:
| Trabajo | Frecuencia | Qué revisa |
|---|---|---|
| Detector de alertas de clínica | Cada 5 minutos (y al iniciar) | Recorre todos los inquilinos y genera las alertas de clínica descritas abajo. |
| Programador de exportaciones | Cada 1 minuto | Revisa los proveedores de exportación habilitados y dispara los que están “vencidos” según su horario. |
Reglas del detector de alertas de clínica
Sección titulada «Reglas del detector de alertas de clínica»Cada tipo de alerta tiene un umbral fijo y una regla de deduplicación: por norma general se mantiene una sola alerta sin resolver por clínica y por tipo.
| Alerta | Condición | Severidad | Deduplicación |
|---|---|---|---|
ticket_timeout | Ticket en estado pendiente por 3 horas o más. | Urgente | Una alerta por clínica; además una notificación por ticket. |
high_rejection | 5 o más tickets cerrados hoy (hora Panamá) y más del 40 % marcados “no atendido”. | Advertencia | Una por clínica. |
clinic_inactive | Clínica activa sin tickets en los últimos 7 días. | Info | Una por clínica. |
anomalous_usage | Más de 5 intentos del mismo identificador en una clínica dentro de 1 hora. | Urgente | Una por clínica. |
reservation_expired | Reserva en estado scheduled cuya hora reservada venció hace más de 3 horas. | Advertencia | Una por clínica; además una notificación por reserva. Ver Reservas y pre-tickets. |
Existe además el tipo amount_deviation, pero no lo genera este detector periódico: se crea de forma sincrónica al cerrar un ticket cuyo importe se desvía del precio de referencia. Ver Precios multinivel.
Exportaciones programadas
Sección titulada «Exportaciones programadas»El programador corre cada minuto y considera “vencido” a un proveedor cuando la hora y el minuto actuales coinciden con su schedule_time, según su frecuencia configurada:
- Diaria: a la hora exacta.
- Cada 12 horas / cada 6 horas: a la hora base y sus repeticiones del día.
- Cada hora: cuando coincide el minuto.
Se procesan como máximo 3 exportaciones en paralelo. El detalle del canal de entrega (correo o agente) está en Autenticación, límites de tasa y exportaciones.
Casos esperados en pruebas
Sección titulada «Casos esperados en pruebas»- Al iniciar el servicio, el ciclo diario se ejecuta una vez de inmediato.
- Una suscripción cuya vigencia venció ayer aparece
EXPIREDdespués del ciclo. - Una suscripción suspendida cuya vigencia vence pasa a
SUSPENDED_EXPIRED, no aEXPIRED. - Un cambio de plan programado para hoy queda activo después del ciclo.
- Un ticket pendiente por más de 3 horas genera una alerta
ticket_timeout. - Una reserva no consumida 3 horas después de su hora pasa a
expiredy notifica.