chore: actualiza precios Business Control y Enterprise; overage por plan; MSI en checkout
This commit is contained in:
@@ -201,18 +201,27 @@ export async function handleAddonPayment(addonId: string, mpPaymentId: string, s
|
||||
|
||||
// ────────────────────────────────────────────────────────────────
|
||||
// Overage automático: Business Control y Enterprise (business_cloud) incluyen
|
||||
// 100 contribuyentes; cada uno adicional cuesta $45/mes. Se modela como un
|
||||
// único `SubscriptionAddon` con `codename = 'contribuyente_extra_business_cloud'`
|
||||
// (codename heredado por compat con suscripciones existentes; nombre display ya
|
||||
// es genérico), `contribuyenteId = null` (tenant-level) y
|
||||
// `quantity = activeCount − 100`. El cobro MP usa un preapproval propio; cuando
|
||||
// `quantity` cambia, se actualiza vía `updatePreapprovalAmount` (sin
|
||||
// re-autorización del usuario).
|
||||
// 100 contribuyentes; cada RFC adicional cuesta:
|
||||
// - Business Control: $25/mes
|
||||
// - Enterprise: $60/mes
|
||||
// Se modela como un único `SubscriptionAddon` con
|
||||
// `codename = 'contribuyente_extra_business_cloud'` (codename heredado por
|
||||
// compat con suscripciones existentes; nombre display ya es genérico),
|
||||
// `contribuyenteId = null` (tenant-level) y `quantity = activeCount − 100`.
|
||||
// El cobro MP usa un preapproval propio; cuando `quantity` cambia, se actualiza
|
||||
// vía `updatePreapprovalAmount` (sin re-autorización del usuario).
|
||||
// ────────────────────────────────────────────────────────────────
|
||||
|
||||
const DESPACHO_INCLUDED_RFCS = 100;
|
||||
const OVERAGE_ADDON_CODENAME = 'contribuyente_extra_business_cloud';
|
||||
|
||||
function getOverageUnitPrice(plan: string): number {
|
||||
if (plan === 'business_control') return 25;
|
||||
if (plan === 'business_cloud') return 60;
|
||||
// Fallback por si en el futuro se agrega otro plan con overage
|
||||
return 45;
|
||||
}
|
||||
|
||||
export type OverageAction = 'none' | 'created' | 'updated' | 'cancelled' | 'skipped';
|
||||
|
||||
export interface OverageAdjustResult {
|
||||
@@ -228,9 +237,9 @@ export interface OverageAdjustResult {
|
||||
/**
|
||||
* Ajusta el add-on de overage para el tenant según el número actual de
|
||||
* contribuyentes activos. Aplica a planes Business Control y Enterprise
|
||||
* (business_cloud) — ambos incluyen 100 contribuyentes y cobran $45/mes por
|
||||
* cada adicional. Idempotente: llamar varias veces con el mismo `activeCount`
|
||||
* no tiene efecto.
|
||||
* (business_cloud) — ambos incluyen 100 contribuyentes y cobran $25/mes
|
||||
* (Business Control) o $60/mes (Enterprise) por cada adicional. Idempotente:
|
||||
* llamar varias veces con el mismo `activeCount` no tiene efecto.
|
||||
*
|
||||
* Casos:
|
||||
* - Plan no permite overage (mi_empresa, mi_empresa_plus, trial, etc.) → 'skipped'
|
||||
@@ -291,7 +300,7 @@ export async function adjustDespachoOverage(
|
||||
}
|
||||
|
||||
// Hay overage → crear o actualizar addon
|
||||
const price = Number(catalogo.precio);
|
||||
const price = getOverageUnitPrice(sub.plan);
|
||||
const newAmount = price * overage;
|
||||
|
||||
if (!existing) {
|
||||
|
||||
@@ -221,6 +221,9 @@ export async function createProrationPreference(params: {
|
||||
pending: `${backUrlBase()}/configuracion/suscripcion?upgrade=pending`,
|
||||
},
|
||||
auto_return: 'approved',
|
||||
payment_methods: {
|
||||
installments: 12,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -266,6 +269,9 @@ export async function createSubscriptionPreference(params: {
|
||||
pending: `${backUrlBase()}/configuracion/suscripcion?subscription=pending`,
|
||||
},
|
||||
auto_return: 'approved',
|
||||
payment_methods: {
|
||||
installments: 12,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user