clinica-dental/docs/04-fase-saas/MGN-019-feature-flags/README.md
rckrdmrd 27b4e7bccf [DOCS] feat: Add phase 04-SAAS and 05-IA documentation structure
- 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>
2026-01-16 00:28:18 -06:00

177 lines
4.9 KiB
Markdown

---
id: MGN-019-feature-flags
title: Sistema de Feature Flags para Clinica Dental
type: Module
status: Draft
priority: P1
version: 1.0.0
created_date: 2026-01-13
updated_date: 2026-01-13
source: erp-core/MGN-019-feature-flags
normativas: [NOM-013-SSA2-2015]
---
# MGN-019: Sistema de Feature Flags Dental
## Descripcion
Sistema propio de feature flags para control granular de funcionalidades odontologicas por clinica y plan. Permite toggle de features dentales sin redeploy, rollout gradual de nuevas funcionalidades, y override manual por clinica para casos especiales.
## Objetivos
- Toggle de features dentales sin necesidad de redeploy
- Flags configurables por clinica y por plan
- Gradual rollout (porcentaje de clinicas)
- A/B testing de funcionalidades
- Override manual por clinica con expiracion opcional
## Alcance
| Caracteristica | Incluido | Notas |
|----------------|----------|-------|
| Boolean flags | Si | On/off simple |
| Plan-based flags | Si | Por tier de plan |
| Tenant override | Si | Admin puede activar/desactivar |
| Percentage rollout | Si | % de clinicas |
| User targeting | No | Fase posterior |
| Analytics | No | Fase posterior |
## Feature Flags Odontologicos
### Funcionalidades por Plan
| Feature Flag | Consultorio | Clinica | Centro |
|--------------|:-----------:|:-------:|:------:|
| `odontograma_digital` | - | X | X |
| `radiografias_digitales` | - | X | X |
| `ortodoncia_3d` | - | - | X |
| `asistente_ia_dental` | - | - | X |
| `whatsapp_pacientes` | - | - | X |
| `multi_sucursal` | - | - | X |
| `reportes_avanzados` | - | X | X |
| `integracion_laboratorio` | - | X | X |
| `presupuestos_financiados` | - | X | X |
### Features en Rollout
| Feature Flag | Descripcion | Rollout % | Estado |
|--------------|-------------|-----------|--------|
| `nuevo_odontograma_v2` | Nueva UI de odontograma | 25% | Beta |
| `radiografia_ia` | Analisis IA de radiografias | 10% | Alpha |
| `agenda_inteligente` | Sugerencias de agenda | 50% | Beta |
| `recordatorio_sms` | Recordatorios via SMS | 100% | GA |
### Features de Normativa
| Feature Flag | Descripcion | Default |
|--------------|-------------|---------|
| `consentimiento_digital` | Firma digital de consentimientos | Activado |
| `historial_nom013` | Historial conforme NOM-013-SSA2 | Activado |
| `bitacora_cofepris` | Bitacora de procedimientos | Activado |
## Arquitectura de Evaluacion
```
Request (ej: acceder odontograma_digital)
|
v
+-------------------+
| FeatureFlagService|
+-------------------+
|
+---> 1. Check tenant override (clinica especifica)
| |
| v (si existe)
| Return override value
|
+---> 2. Check plan features (Consultorio/Clinica/Centro)
| |
| v (si definido en plan)
| Return plan value
|
+---> 3. Check global flag + rollout
| |
| v
| Evaluate (boolean/percentage)
|
v
Return final value
```
## Prioridad de Evaluacion
1. **Tenant Override** - Maxima prioridad, permite excepciones (ej: demo, VIP)
2. **Plan Features** - Features incluidas en plan de la clinica
3. **Global Flag** - Valor default con soporte de rollout gradual
## Casos de Uso
### Ejemplo: Activar ortodoncia_3d para demo
```typescript
// Override para clinica en demo
await featureFlagService.setOverride({
tenantId: 'clinica_demo_123',
flag: 'ortodoncia_3d',
value: true,
expiresAt: addDays(new Date(), 14), // 14 dias de demo
reason: 'Demo para cliente potencial'
});
```
### Ejemplo: Rollout gradual de radiografia_ia
```typescript
// Configurar rollout al 25% de clinicas
await featureFlagService.setRollout({
flag: 'radiografia_ia',
percentage: 25,
filterByPlan: ['clinica', 'centro_dental']
});
```
### Ejemplo: Verificar feature en codigo
```typescript
@Get('odontograma/3d')
@FeatureGuard('ortodoncia_3d')
async getOdontograma3D(@Tenant() tenant: Tenant) {
// Solo accesible si flag activo para esta clinica
return this.ortodonciaService.get3DModel(tenant.id);
}
```
## Documentacion del Modulo
- [Mapa del Modulo](./_MAP.md)
- [Requerimientos](./requerimientos/INDICE-RF-FFLAGS.md)
- [Especificaciones](./especificaciones/INDICE-ET-FFLAGS.md)
- [Historias de Usuario](./historias-usuario/INDICE-US-FFLAGS.md)
- [Trazabilidad](./implementacion/TRACEABILITY.yml)
## Dependencias
### Modulos Requeridos
- **MGN-004-tenants** - Contexto de clinica
- **MGN-017-plans** - Planes de suscripcion
### Modulos Dependientes
- Odontograma (feature: odontograma_digital)
- Radiografias (feature: radiografias_digitales)
- Ortodoncia (feature: ortodoncia_3d)
- IA (feature: asistente_ia_dental)
- WhatsApp (feature: whatsapp_pacientes)
## Referencias
- **Fuente:** [erp-core/MGN-019-feature-flags](../../../../../erp-core/docs/04-fase-saas/MGN-019-feature-flags/)
- **Plans:** [MGN-017-plans](../MGN-017-plans/)
---
*Modulo MGN-019 - Feature Flags | Clinica Dental*
*Propagado desde erp-core via erp-clinicas*
*Actualizado: 2026-01-13*