- 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>
177 lines
4.9 KiB
Markdown
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*
|