Saltar al contenido principal

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

TipoDescripción
upgradeNuevo plan más caro que el actual
downgradeNuevo plan más barato que el actual
lateralMismo valor (cambio de features)

Timing del Cambio

TimingDescripción
immediateSe aplica inmediatamente, cobra/acredita la diferencia proporcional
end_of_periodPrograma el cambio para el inicio del próximo período

Proration (Prorrateo Proporcional)

Métodos de Proration

MétodoDescripción
full_prorationAcredita el plan anterior y cobra el nuevo por el tiempo restante
partial_prorationCobra solo la diferencia (solo para upgrade)
no_prorationSin 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ónPredeterminado
Permitir upgrade
Permitir downgrade
Proration en upgradefull_proration
Proration en downgradeno_proration
Timing del upgradeimmediate
Timing del downgradeend_of_period
Reembolso en downgradeNo
Crédito en downgrade
Aplicar descuento en el cambio

Reglas de Cambio de Plan

Es posible crear reglas específicas para controlar las transiciones entre planes:

CampoDescripción
Plan de origenPlan actual (null = cualquiera)
Plan de destinoNuevo plan (null = cualquiera)
Tipo de cambioupgrade, downgrade o lateral
PermitidoSi la transición está permitida
TimingSobrescribe el timing predeterminado
Método de prorationSobrescribe el método predeterminado
Descuento (%)Descuento porcentual en el cobro
Días de bonificaciónExtensión del período de prueba
MensajeRazón si no está permitido
PrioridadMayor prioridad prevalece

Orden de Prioridad de las Reglas

  1. Regla con plan de origen Y plan de destino (más específica)
  2. Regla con solo plan de origen
  3. Regla con solo plan de destino
  4. 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

  1. Se calculan la validación y la vista previa
  2. Se crea el registro de PlanChange (estado: pending)
  3. Se genera crédito si prorationCreditSubcents > 0
  4. Se genera factura si netChargeSubcents > 0
  5. La suscripción se actualiza con el nuevo plan
  6. PlanChange se marca como completed

Cambio Programado

  1. Se crea el registro de PlanChange (estado: scheduled)
  2. En la fecha efectiva, el worker procesa el cambio
  3. La suscripción se actualiza con el nuevo plan
  4. 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.