Planes, límites y entitlements
Personaliza capacidades Free, Plus y Max, límites por organización, mapeos Stripe, gracia, suscripciones acumuladas y excepciones de soporte.
Sincronizado con el commit
7d452a6del starter.
Una sola puerta de entitlements
Ninguna ruta o componente importa src/config/plans.ts ni compara tier === "max". Se pregunta por capacidad o límite a src/services/entitlements.ts:
await requireEntitlement(orgUuid, "tasks.text_to_video");
await enforceLimit(orgUuid, "storage.totalMb", { current, adding });Así, renombrar un plan o añadir un cuarto nivel no rompe condiciones dispersas. Las pruebas de arquitectura imponen esta frontera.
Catálogo predeterminado
| Capacidad o límite | Free | Plus | Max |
|---|---|---|---|
| Miembros | 1 | 5 | 20 |
| Subidas | Sí | Sí | Sí |
| Archivo máximo | 5 MB | 25 MB | 200 MB |
| Almacenamiento total | 100 MB | 5.000 MB | 50.000 MB |
| Texto a vídeo | No | Sí | Sí |
| Tareas mensuales | 0 | 50 | Sin límite |
| Créditos mensuales | 0 | 500 | 2.500 |
null significa ilimitado. Los créditos de registro son una concesión única; Free no tiene una tarea recurrente.
Resolución del plan
Los planes pertenecen a la organización. subscriptions guarda el estado actual y orders el historial financiero inmutable. El resolver elige la suscripción vigente de mayor rango. active y trialing dan acceso; past_due tiene siete días de gracia.
Una organización puede tener varias suscripciones: sus créditos se suman, pero solo el nivel efectivo más alto define los límites. La pantalla de facturación muestra todas las suscripciones actuales.
Personalizar
- Añade nombres en
src/types/plan.ts. - Define cada valor para todos los niveles en
src/config/plans.ts. - Mantén importes, intervalos, créditos, monedas y Prices en
src/config/billing.ts. - Protege la operación con
requireEntitlementoenforceLimit.
Los nuevos checkouts usan variables privadas STRIPE_PRICE_*; los alias públicos antiguos solo mantienen despliegues y suscripciones existentes.
Los downgrades no eliminan datos ni miembros. Soporte puede aplicar una excepción de plazas auditada. Los comps manuales son filas normales de subscriptions con source = "manual".