Ir al contenido

Cambios de Plan y Línea de Tiempo

Una suscripción puede cambiar de plan a lo largo del tiempo (de individual a grupal, de un nivel a otro). Para no perder el historial ni romper la vigencia ya pagada, Hola Doc no sobrescribe el plan: mantiene una línea de tiempo de segmentos, donde cada segmento representa qué plan estuvo (o estará) vigente y entre qué fechas. Los cambios a un plan distinto no son inmediatos: se programan para el siguiente ciclo y los activa el ciclo diario de medianoche.

EstadoSignificado
activeSegmento vigente hoy.
scheduledProgramado para entrar en vigor en una fecha futura (límite del ciclo).
completedSegmento ya cumplido; fue reemplazado por uno posterior.
clearedAnulado antes de cumplirse (suscripción cancelada/expirada o devolución).

Cada segmento guarda el plan, su tipo, las fechas effective_from / effective_until y, si aplica, la transacción de origen.

Cuando llega un pago, el sistema compara el plan del pago con el último segmento de la línea de tiempo y aplica uno de tres casos:

graph TD
    A[Pago con plan] --> B{¿La suscripción<br/>ya tenía plan?}
    B -->|No| C[Primer plan:<br/>segmento active inmediato]
    B -->|Sí| D{¿Mismo plan que<br/>el último segmento?}
    D -->|Sí| E[Extender effective_until<br/>del segmento actual]
    D -->|No| F[Encolar segmento scheduled<br/>desde el límite del ciclo]
    F --> G[El ciclo diario lo activa<br/>en su effective_from]
CasoComportamiento
Primer planSe asigna de inmediato y se crea un segmento active desde el inicio hasta la vigencia.
Mismo plan (renovación)Se extiende el effective_until del segmento actual; no se crea uno nuevo.
Plan distintoSe encola un segmento scheduled que empieza en el límite del ciclo (la vigencia previa a esta extensión) y cubre el nuevo período.

Suscripciones heredadas: si una suscripción es anterior a esta funcionalidad y no tiene línea de tiempo, en el primer cambio el sistema sintetiza un segmento active a partir de su estado actual y continúa desde ahí.

El primer paso del ciclo diario busca los segmentos scheduled cuyo effective_from ya pasó y decide:

  • Si el segmento ya quedó completamente en el pasado, lo marca completed sin activarlo.
  • Si la suscripción ya no es elegible (CANCELLED, EXPIRED o SUSPENDED_EXPIRED), lo marca cleared.
  • En caso contrario lo activa: marca el segmento anterior como completed, este como active y actualiza el plan de la suscripción. Todo en una transacción atómica.

Las notas de crédito interactúan con la línea de tiempo (ver Notas de crédito):

DevoluciónEfecto en la línea de tiempo
De un plan programado, totalElimina el segmento scheduled y reduce la vigencia; registra cleared en la bitácora.
De un plan programado, parcialRecorta hacia atrás el effective_until del segmento programado.
De un plan activo, totalCancela la suscripción y marca cleared todos los segmentos active y scheduled.
De un plan activo, parcialReduce la vigencia, elimina los segmentos programados que quedan más allá de la nueva vigencia y recorta el último segmento si la excede.

Cada evento se asienta en la bitácora del cambio de plan, con tipo scheduled, applied, extended o cleared, los planes y tipos anterior y nuevo, la fecha de vigencia y una nota legible. Es un registro de solo anexado para auditar toda la historia del plan.

Al pasar a un plan individual, los miembros no titulares pierden el acceso de cabina: la consulta de miembro marca PlanAccessDenied para ellos aunque la suscripción siga activa. El cambio programado se detecta en la verificación al momento del acceso, no se anticipa al reservar.

  • El primer plan de una suscripción crea un segmento activo inmediato.
  • Renovar con el mismo plan extiende la vigencia sin crear un segmento nuevo.
  • Cambiar a un plan distinto encola un segmento programado que se activa en la renovación.
  • Una suscripción heredada sin línea de tiempo la sintetiza en el primer cambio.
  • Una devolución total cancela la suscripción y anula los segmentos.