chore: actualiza precios Business Control y Enterprise; overage por plan; MSI en checkout

This commit is contained in:
Horux Dev
2026-06-25 05:36:25 +00:00
parent 1130a1833c
commit 0bded50e57
3 changed files with 85 additions and 12 deletions

View File

@@ -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) {

View File

@@ -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,
},
},
});