Planes y límites¶
En DiagramaHub los planes son datos, no código: cada operador decide qué planes ofrece, cuántos proyectos y diagramas permite cada uno y cuánto cobra (o si no cobra nada). No hay funciones exclusivas de un plan: todos los planes dan acceso a todas las funciones y solo cambian los límites.
El modelo Plan¶
Los planes viven en la colección plans de MongoDB.
| Campo | Tipo | Descripción |
|---|---|---|
name |
texto (1–50) | Nombre visible. Único. |
code |
texto (1–30) | Código único en mayúsculas, dígitos, _ o - (p. ej. TEAM). FREE está reservado. |
description |
texto (≤500) | Descripción opcional. |
max_projects |
entero | Máximo de proyectos. -1 o vacío = ilimitado. |
max_diagrams |
entero | Máximo de diagramas. -1 o vacío = ilimitado. |
prices |
diccionario | Precio mensual por moneda, p. ej. {"usd": 4, "mxn": 70}. Vacío = gratis. |
is_active |
booleano | Un plan inactivo deja de ofrecerse, pero sus suscriptores lo conservan. |
gateway_config |
objeto | IDs de producto y precio en Stripe; se llena solo al sincronizar. |
Monedas admitidas: usd, eur, gbp, mxn y brl.
El plan gratuito (FREE)¶
- Se crea automáticamente con el primer registro de un usuario no administrador, con
nombre
Gratuito, 1 proyecto y 10 diagramas. - Todo usuario nuevo recibe una suscripción a
FREE, también al registrarse con Google. - No se puede eliminar, desactivar ni cambiar su código. Sí puedes editar su nombre, descripción y límites.
Si la base de datos viene de una versión sin planes, crea el plan y asigna FREE a los
usuarios existentes con los scripts del backend (ambos son idempotentes):
docker exec -it diagramahub-backend python -m scripts.create_free_plan
docker exec -it diagramahub-backend python -m scripts.migrate_users_to_subscriptions --dry-run
docker exec -it diagramahub-backend python -m scripts.migrate_users_to_subscriptions
Administradores¶
Los administradores no tienen límites: el control de uso los deja crear proyectos y diagramas sin restricción y no reciben una suscripción.
Crear y editar planes¶
Abre Administración → Planes (ruta /admin/plans).
flowchart TD
N[Nuevo plan] --> P{¿Precio > 0?}
P -->|No| G[Plan gratuito<br/>solo en MongoDB]
P -->|Sí| S{¿Stripe activo?}
S -->|No| E[Error: se requiere<br/>una vinculación con Stripe]
S -->|Sí| C[Se crea el producto y el precio<br/>en Stripe y se guardan sus IDs]
C --> M[Agregar precios en<br/>otras monedas]
Reglas que aplica el servidor:
- Un plan de pago necesita una pasarela Stripe activa (Integraciones). Al crearlo, DiagramaHub crea el producto y el precio en Stripe.
- El precio en USD es el principal. Las demás monedas se agregan después, una vez que el plan está sincronizado con Stripe.
- No se puede cambiar el precio de un plan con suscriptores activos. Crea un plan nuevo y desactiva el anterior.
- Cambiar nombre, descripción o precio de un plan de pago lo vuelve a sincronizar con Stripe.
- Al eliminar un plan con suscriptores, solo se desactiva (y se archiva en Stripe); los suscriptores lo conservan. Sin suscriptores, se archiva en Stripe y se borra.
Cómo se aplican los límites¶
Los límites se comprueban en el servidor antes de crear un proyecto o un diagrama,
incluidos los que llegan por importación. Al alcanzar el límite, la API responde 403 y la
interfaz ofrece cambiar de plan. El cliente nunca decide si algo está permitido.
sequenceDiagram
participant U as Usuario
participant API as Backend
participant L as Control de uso
U->>API: Crear diagrama
API->>L: ¿Dentro del límite del plan?
alt admin o límite -1
L-->>API: Permitido
else uso < límite
L-->>API: Permitido
else uso ≥ límite
L-->>API: Rechazado
API-->>U: 403 límite alcanzado
end
Cada usuario consulta su uso en GET /api/v1/subscriptions/usage.
Instancia sin cobros¶
Si no conectas Stripe, todos los usuarios usan planes gratuitos. Para una instancia interna
sin límites, edita FREE y pon -1 en proyectos y diagramas.