Cambio de Plan (Upgrade/Downgrade)
El sistema permite que los clientes cambien el plan de la suscripción con cálculo automático de proration (prorrateo proporcional).
Tipos de Cambio
| Tipo | Descripción |
|---|---|
| upgrade | Nuevo plan más caro que el actual |
| downgrade | Nuevo plan más barato que el actual |
| lateral | Mismo valor (cambio de features) |
Timing del Cambio
| Timing | Descripción |
|---|---|
| immediate | Se aplica inmediatamente, cobra/acredita la diferencia proporcional |
| end_of_period | Programa el cambio para el inicio del próximo período |
Proration (Prorrateo Proporcional)
Métodos de Proration
| Método | Descripción |
|---|---|
full_proration | Acredita el plan anterior y cobra el nuevo por el tiempo restante |
partial_proration | Cobra solo la diferencia (solo para upgrade) |
no_proration | Sin ajuste de valor a mitad del ciclo |
Fórmula de Cálculo
dias_restantes = max(0, techo((fin_período - ahora) / 86400000))
total_dias_período = techo((fin_período - inicio_período) / 86400000))
Full proration:
crédito = (precio_anterior × dias_restantes) / total_dias_período
cobro = (precio_nuevo × dias_restantes) / total_dias_período
Partial proration (solo upgrade):
diferencia = precio_nuevo - precio_anterior
cobro = (diferencia × dias_restantes) / total_dias_período
Cobro neto = cobro - crédito
Configuración Predeterminada
La configuración de cambio de plan define el comportamiento predeterminado:
| Configuración | Predeterminado |
|---|---|
| Permitir upgrade | Sí |
| Permitir downgrade | Sí |
| Proration en upgrade | full_proration |
| Proration en downgrade | no_proration |
| Timing del upgrade | immediate |
| Timing del downgrade | end_of_period |
| Reembolso en downgrade | No |
| Crédito en downgrade | Sí |
| Aplicar descuento en el cambio | Sí |
Reglas de Cambio de Plan
Es posible crear reglas específicas para controlar las transiciones entre planes:
| Campo | Descripción |
|---|---|
| Plan de origen | Plan actual (null = cualquiera) |
| Plan de destino | Nuevo plan (null = cualquiera) |
| Tipo de cambio | upgrade, downgrade o lateral |
| Permitido | Si la transición está permitida |
| Timing | Sobrescribe el timing predeterminado |
| Método de proration | Sobrescribe el método predeterminado |
| Descuento (%) | Descuento porcentual en el cobro |
| Días de bonificación | Extensión del período de prueba |
| Mensaje | Razón si no está permitido |
| Prioridad | Mayor prioridad prevalece |
Orden de Prioridad de las Reglas
- Regla con plan de origen Y plan de destino (más específica)
- Regla con solo plan de origen
- Regla con solo plan de destino
- Regla global (ambos null)
Vista Previa del Cambio
Antes de ejecutar, es posible visualizar:
- Si el cambio está permitido
- Tipo (upgrade/downgrade/lateral)
- Valores de crédito y cobro prorrateados
- Cobro neto final
- Fecha efectiva
- Días restantes en el período
Ejecución del Cambio
Cambio Inmediato
- Se calculan la validación y la vista previa
- Se crea el registro de PlanChange (estado:
pending) - Se genera crédito si
prorationCreditSubcents > 0 - Se genera factura si
netChargeSubcents > 0 - La suscripción se actualiza con el nuevo plan
- PlanChange se marca como
completed
Cambio Programado
- Se crea el registro de PlanChange (estado:
scheduled) - En la fecha efectiva, el worker procesa el cambio
- La suscripción se actualiza con el nuevo plan
- PlanChange se marca como
completed
Limitación: El sistema mantiene solo un cambio programado a la vez. Un nuevo cambio programado cancela el anterior.
Cancelar Cambio Programado
Los cambios programados pueden cancelarse antes de la fecha efectiva. El estado cambia a canceled y el motivo se registra.