'use client'; import { Header } from '@/components/layouts/header'; import { Card, CardContent, CardHeader, CardTitle } from '@horux/shared-ui'; import { useAuthStore } from '@/stores/auth-store'; import { isGlobalAdminRfc, DESPACHO_PLAN_PRICES, DESPACHO_PLANS, DESPACHO_OVERAGE_PRICE_MENSUAL, type DespachoPaidPlan, } from '@horux/shared'; import { Tags, ShieldAlert, Info, AlertTriangle } from 'lucide-react'; const PLAN_ORDER: DespachoPaidPlan[] = [ 'mi_empresa', 'mi_empresa_plus', 'business_control', 'business_cloud', ]; function fmtCurrency(n: number | null): string { if (n == null) return '—'; return `$${n.toLocaleString('es-MX')}`; } export default function PreciosSuscripcionPage() { const { user } = useAuthStore(); const isGlobalAdmin = isGlobalAdminRfc(user?.tenantRfc, user?.role, user?.platformRoles); if (!isGlobalAdmin) { return ( <>

Acceso restringido

Solo admin global puede consultar el catálogo de precios.

); } return ( <>
Los planes despacho están configurados en{' '} packages/shared/src/constants/despacho-plans.ts. Para modificar precios, edita ese archivo y redespliega — los cambios aplican a contrataciones nuevas y renovaciones; las suscripciones vigentes conservan su precio.
Planes despacho
{PLAN_ORDER.map((plan) => { const price = DESPACHO_PLAN_PRICES[plan]; const limits = DESPACHO_PLANS[plan]; return ( ); })}
Plan Mensual (MXN) Anual — primer año Anual — renovación RFCs incluidos Timbres/mes
{limits.name} {price.permiteMonthly ? {fmtCurrency(price.monthly)} : No aplica} {fmtCurrency(price.firstYear)} {price.firstYear !== price.renewal ? {fmtCurrency(price.renewal)} : {fmtCurrency(price.renewal)}} {limits.maxRfcs} {limits.timbresIncluidosMes}

Cobro adicional por RFC extra:{' '} ${DESPACHO_OVERAGE_PRICE_MENSUAL}/mes por cada contribuyente que exceda los 100 incluidos. Solo aplica a Business Control y Enterprise; los planes Mi Empresa tienen límite duro de 1 RFC.

Mi Empresa y Mi Empresa+ permiten facturación mensual o anual; al pagar anual se cobra el equivalente a 10 meses (descuento del 17%).

); }