Ir al contenido

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.

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]
#PasoQué hace
1Aplicar cambios de plan pendientesActiva 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.
2Expirar suscripcionesMarca EXPIRED las suscripciones ACTIVE/PENDING_ONBOARDING con vigencia vencida y SUSPENDED_EXPIRED las suspendidas (conserva la intención de suspensión).
3Consumir meses pagadosRecalcula consumed_qty de los pagos con asignación FIFO; define cuántos meses quedan reembolsables.
4Ciclo de vida de miembrosActiva miembros pendientes, remueve los marcados y procesa el envejecimiento (age-out). Ver Ciclo de vida de miembros.
5Notificar expiracionesPublica eventos de aviso de expiración próxima al sistema de comunicaciones.
6Notificar activacionesPublica eventos de activación (fin de carencia) al sistema de comunicaciones.
7Limpiar exportacionesBorra el contenido (file_data) de las exportaciones con más de 24 horas; conserva los metadatos para auditoría.

Además del ciclo diario hay dos trabajos de alta frecuencia:

TrabajoFrecuenciaQué revisa
Detector de alertas de clínicaCada 5 minutos (y al iniciar)Recorre todos los inquilinos y genera las alertas de clínica descritas abajo.
Programador de exportacionesCada 1 minutoRevisa los proveedores de exportación habilitados y dispara los que están “vencidos” según su horario.

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.

AlertaCondiciónSeveridadDeduplicación
ticket_timeoutTicket en estado pendiente por 3 horas o más.UrgenteUna alerta por clínica; además una notificación por ticket.
high_rejection5 o más tickets cerrados hoy (hora Panamá) y más del 40 % marcados “no atendido”.AdvertenciaUna por clínica.
clinic_inactiveClínica activa sin tickets en los últimos 7 días.InfoUna por clínica.
anomalous_usageMás de 5 intentos del mismo identificador en una clínica dentro de 1 hora.UrgenteUna por clínica.
reservation_expiredReserva en estado scheduled cuya hora reservada venció hace más de 3 horas.AdvertenciaUna 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.

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.

  • Al iniciar el servicio, el ciclo diario se ejecuta una vez de inmediato.
  • Una suscripción cuya vigencia venció ayer aparece EXPIRED después del ciclo.
  • Una suscripción suspendida cuya vigencia vence pasa a SUSPENDED_EXPIRED, no a EXPIRED.
  • 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 expired y notifica.