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.
Estados de un segmento
Sección titulada «Estados de un segmento»| Estado | Significado |
|---|---|
active | Segmento vigente hoy. |
scheduled | Programado para entrar en vigor en una fecha futura (límite del ciclo). |
completed | Segmento ya cumplido; fue reemplazado por uno posterior. |
cleared | Anulado 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.
Cómo se procesa un pago con plan
Sección titulada «Cómo se procesa un pago con plan»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]
| Caso | Comportamiento |
|---|---|
| Primer plan | Se 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 distinto | Se 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í.
Activación en el ciclo diario
Sección titulada «Activación en el ciclo diario»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
completedsin activarlo. - Si la suscripción ya no es elegible (
CANCELLED,EXPIREDoSUSPENDED_EXPIRED), lo marcacleared. - En caso contrario lo activa: marca el segmento anterior como
completed, este comoactivey actualiza el plan de la suscripción. Todo en una transacción atómica.
Efecto de las devoluciones
Sección titulada «Efecto de las devoluciones»Las notas de crédito interactúan con la línea de tiempo (ver Notas de crédito):
| Devolución | Efecto en la línea de tiempo |
|---|---|
| De un plan programado, total | Elimina el segmento scheduled y reduce la vigencia; registra cleared en la bitácora. |
| De un plan programado, parcial | Recorta hacia atrás el effective_until del segmento programado. |
| De un plan activo, total | Cancela la suscripción y marca cleared todos los segmentos active y scheduled. |
| De un plan activo, parcial | Reduce la vigencia, elimina los segmentos programados que quedan más allá de la nueva vigencia y recorta el último segmento si la excede. |
Bitácora de cambios
Sección titulada «Bitácora de cambios»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.
Acceso de miembros en planes individuales
Sección titulada «Acceso de miembros en planes individuales»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.
Casos esperados en pruebas
Sección titulada «Casos esperados en pruebas»- 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.