--- 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*