- Update docs/_MAP.md with new phase references - Add docs/04-fase-saas/ phase structure - Add docs/05-fase-ia/ phase structure Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
174 lines
5.0 KiB
Markdown
174 lines
5.0 KiB
Markdown
---
|
|
id: MGN-017-plans
|
|
title: Modulo Plans - Planes y Feature Gating para Clinica Dental
|
|
type: Module
|
|
status: Draft
|
|
version: 1.0.0
|
|
created_date: 2026-01-13
|
|
updated_date: 2026-01-13
|
|
source: erp-core/MGN-017-plans
|
|
normativas: [NOM-013-SSA2-2015]
|
|
---
|
|
|
|
# MGN-017: Modulo Plans - Planes y Feature Gating Dental
|
|
|
|
## Descripcion
|
|
|
|
El modulo **Plans** gestiona la definicion de planes de suscripcion para clinicas dentales, feature gating por plan, y enforcement de limites y cuotas por consultorio. Controla acceso a funcionalidades especializadas como odontograma digital, radiografias, ortodoncia 3D y herramientas de IA.
|
|
|
|
## Objetivos
|
|
|
|
1. **Definicion de Planes Dentales** - Planes diferenciados por tipo de consultorio
|
|
2. **Feature Gating Odontologico** - Control de acceso a funcionalidades dentales
|
|
3. **Limites por Sillon** - Enforcar limites por numero de sillones
|
|
4. **Usage Tracking** - Monitorear uso de funcionalidades
|
|
5. **Upgrade/Downgrade** - Flujos para cambio de plan
|
|
|
|
## Planes para Clinica Dental
|
|
|
|
| Plan | Precio/mes | Sillones | Usuarios | Storage | Pacientes/mes |
|
|
|------|------------|----------|----------|---------|---------------|
|
|
| **Consultorio** | $499 MXN | 1 | 3 | 5 GB | 100 |
|
|
| **Clinica** | $1,499 MXN | 5 | 15 | 25 GB | 500 |
|
|
| **Centro Dental** | $3,999 MXN | Ilimitado | Ilimitado | 100 GB | Ilimitado |
|
|
|
|
## Features por Plan
|
|
|
|
| Feature | Consultorio | Clinica | Centro Dental |
|
|
|---------|-------------|---------|---------------|
|
|
| odontograma_basico | Si | Si | Si |
|
|
| odontograma_digital | No | Si | Si |
|
|
| radiografias_digitales | No | Si | Si |
|
|
| ortodoncia_3d | No | No | Si |
|
|
| presupuestos_dentales | Si | Si | Si |
|
|
| reportes_basicos | Si | Si | Si |
|
|
| reportes_avanzados | No | Si | Si |
|
|
| whatsapp_business | No | No | Si |
|
|
| asistente_ia | No | No | Si |
|
|
| multi_sucursal | No | No | Si |
|
|
| api_access | No | Si | Si |
|
|
| exportar_datos | Si | Si | Si |
|
|
| historial_auditoria | 7 dias | 30 dias | 365 dias |
|
|
|
|
## Limites por Plan
|
|
|
|
| Limite | Consultorio | Clinica | Centro Dental |
|
|
|--------|-------------|---------|---------------|
|
|
| Sillones | 1 | 5 | Ilimitado |
|
|
| Usuarios | 3 | 15 | Ilimitado |
|
|
| Pacientes/mes | 100 | 500 | Ilimitado |
|
|
| Storage | 5 GB | 25 GB | 100 GB |
|
|
| Radiografias/mes | 50 | 250 | Ilimitado |
|
|
| API calls/mes | 0 | 10,000 | Ilimitado |
|
|
|
|
## Alcance
|
|
|
|
| Caracteristica | Incluido | Notas |
|
|
|----------------|----------|-------|
|
|
| Plans CRUD | Si | Admin only |
|
|
| Limites por sillon | Si | Enforcement estricto |
|
|
| Feature flags dentales | Si | Boolean y limites |
|
|
| Quota enforcement | Si | Middleware |
|
|
| Usage tracking | Si | Snapshots diarios |
|
|
| Usage alerts | Si | 80%, 90%, 100% |
|
|
| Overage billing | No | Fase posterior |
|
|
|
|
## Arquitectura
|
|
|
|
### Flujo de Quota Check
|
|
|
|
```
|
|
Request (ej: crear_radiografia)
|
|
|
|
|
v
|
|
+-------------------+
|
|
| QuotaMiddleware |-----> Permitido (si dentro de limite)
|
|
+-------------------+
|
|
|
|
|
v (check)
|
|
+-------------------+
|
|
| PlanLimitsService |
|
|
+-------------------+
|
|
|
|
|
v
|
|
+-------------------+
|
|
| Usage Tracking |
|
|
+-------------------+
|
|
|
|
|
v (excede limite)
|
|
QuotaExceededException -> "Limite de radiografias alcanzado"
|
|
```
|
|
|
|
### Prioridad de Evaluacion
|
|
|
|
1. **Tenant Override** - Maxima prioridad, excepciones manuales
|
|
2. **Plan Features** - Features incluidas en plan de la clinica
|
|
3. **Global Flag** - Valor default con soporte de rollout
|
|
|
|
## Casos de Uso Odontologicos
|
|
|
|
### Ejemplo: Verificar Feature Odontograma Digital
|
|
|
|
```typescript
|
|
// Controller
|
|
@Get('odontograma/digital')
|
|
@FeatureGuard('odontograma_digital')
|
|
async getDigitalOdontograma(@Tenant() tenant: Tenant) {
|
|
// Solo accesible para planes Clinica y Centro
|
|
return this.odontogramaService.getDigital(tenant.id);
|
|
}
|
|
```
|
|
|
|
### Ejemplo: Verificar Limite de Radiografias
|
|
|
|
```typescript
|
|
// Antes de crear radiografia
|
|
const canCreate = await this.quotaService.checkLimit(
|
|
tenantId,
|
|
'radiografias_mes',
|
|
1 // cantidad a crear
|
|
);
|
|
|
|
if (!canCreate) {
|
|
throw new QuotaExceededException(
|
|
'Limite de radiografias mensuales alcanzado. ' +
|
|
'Actualiza a plan Clinica para mas radiografias.'
|
|
);
|
|
}
|
|
```
|
|
|
|
## Contenido del Modulo
|
|
|
|
- [_MAP.md](./_MAP.md) - Indice del modulo
|
|
- [requerimientos/](./requerimientos/) - Requerimientos funcionales
|
|
- [especificaciones/](./especificaciones/) - Especificaciones tecnicas
|
|
- [historias-usuario/](./historias-usuario/) - User stories
|
|
- [implementacion/](./implementacion/) - Trazabilidad
|
|
|
|
## Dependencias
|
|
|
|
### Modulos Requeridos
|
|
|
|
- **MGN-001-tenants** - Gestion de tenants (tenant_id)
|
|
- **MGN-016-billing** - Suscripciones y pagos (plan_id)
|
|
|
|
### Modulos Dependientes
|
|
|
|
- Odontograma (feature gating)
|
|
- Radiografias (limites)
|
|
- Ortodoncia (feature gating)
|
|
- IA (feature gating)
|
|
- WhatsApp (feature gating)
|
|
|
|
## Referencias
|
|
|
|
- **Fuente:** [erp-core/MGN-017-plans](../../../../../erp-core/docs/04-fase-saas/MGN-017-plans/)
|
|
- **Billing:** [MGN-016-billing](../MGN-016-billing/)
|
|
- **Feature Flags:** [MGN-019-feature-flags](../MGN-019-feature-flags/)
|
|
|
|
---
|
|
|
|
*Modulo: MGN-017-plans | Clinica Dental*
|
|
*Propagado desde erp-core via erp-clinicas*
|
|
*Actualizado: 2026-01-13*
|