erp-core/docs/02-definicion-modulos/gaps/GAP-ANALYSIS-MGN-001.md

263 lines
11 KiB
Markdown

# GAP ANALYSIS - MGN-001: Fundamentos
**Fecha:** 2025-11-23
**Basado en:** Odoo base + auth_signup, Gamilit auth_management, Construcción MAI-001
**Estado:** Gap analysis completado
## Resumen Ejecutivo
| Métrica | Valor |
|---------|-------|
| **Funcionalidades de Odoo** | 12 |
| **Funcionalidades incluidas en MGN-001** | 8 |
| **Gaps identificados** | 7 |
| **Gaps P0 (críticos)** | 3 |
| **Gaps P1 (altos)** | 2 |
| **Gaps P2 (bajos)** | 2 |
| **% Cobertura** | 67% |
## 1. FUNCIONALIDADES DE ODOO
### Del Módulo base (res.users, res.groups, ir.model.access, ir.rule)
1. **Autenticación de usuarios:** Login con sesiones, cookies
2. **Gestión de usuarios:** CRUD usuarios con perfiles completos
3. **Sistema RBAC:** Roles (groups), permisos por modelo (ir.model.access)
4. **Record Rules (RLS):** Filtros SQL dinámicos por rol (ir.rule)
5. **Herencia de roles:** Grupos pueden heredar permisos de otros grupos
6. **Permisos campo-level:** Restricción de acceso a campos específicos
7. **Multi-company:** Usuarios acceden a múltiples empresas
8. **OAuth2 login:** Google, Facebook, Microsoft
9. **API Keys:** Tokens para integraciones externas
10. **Password policies:** Complejidad, expiración, historial
### Del Módulo auth_signup
11. **Signup con validación:** Registro de usuarios con email verification
12. **Reset password:** Token seguro con expiración
## 2. FUNCIONALIDADES INCLUIDAS EN MGN-001
[Lista de funcionalidades que se incluyen según ALCANCE-POR-MODULO.md]
1.**Autenticación JWT:** Incluida en MGN-001 (Login con JWT tokens)
2.**Gestión de usuarios:** Incluida en MGN-001 (CRUD completo)
3.**RBAC:** Incluida en MGN-001 (Roles, permisos CRUD por modelo)
4.**Multi-tenancy schema-level:** Incluida en MGN-001 (Isolation por schema)
5.**Signup:** Incluida en MGN-001 (Registro con validación email)
6.**Reset password:** Incluida en MGN-001 (Token seguro, 24h)
7.**Cambio de contraseña:** Incluida en MGN-001 (Con validación fuerte)
8.**RLS Policies:** Incluida en MGN-001 (Record-level security)
## 3. GAPS IDENTIFICADOS
### Gap P0 (Críticos - Debe incluirse en MVP)
#### GAP-MGN-001-001: API Keys para Integraciones Externas
- **Descripción:** Sistema de autenticación con API Keys para integraciones M2M (machine-to-machine)
- **Referencia Odoo:** base (API access tokens)
- **Impacto:** CRÍTICO
- **Justificación impacto:** Necesario para integración con INFONAVIT API, servicios externos, webhooks. Sin esto, todas las integraciones deben usar usuarios normales (riesgo de seguridad)
- **Recomendación:** INCLUIR en MVP
- **Esfuerzo estimado:** 8 SP
- **Implementación sugerida:**
```sql
CREATE TABLE auth.api_keys (
id UUID PRIMARY KEY,
user_id UUID REFERENCES auth.users(id),
key_hash TEXT NOT NULL, -- bcrypt hash
name TEXT NOT NULL,
scopes TEXT[], -- ['read:projects', 'write:budgets']
expires_at TIMESTAMP,
last_used_at TIMESTAMP,
created_at TIMESTAMP DEFAULT NOW()
);
```
- **Dependencias:** MGN-001 (usuarios)
#### GAP-MGN-001-002: Permisos Granulares a Nivel de Campo
- **Descripción:** Restricción de acceso a campos específicos por rol (field-level permissions)
- **Referencia Odoo:** ir.model.fields.access
- **Impacto:** CRÍTICO
- **Justificación impacto:** INFONAVIT requiere ocultar campos sensibles (presupuestos, costos) a ciertos roles. Sin esto, usuarios ven información que no deben
- **Recomendación:** INCLUIR en MVP
- **Esfuerzo estimado:** 13 SP
- **Implementación sugerida:**
```sql
CREATE TABLE auth.field_permissions (
id UUID PRIMARY KEY,
role_id UUID REFERENCES auth.roles(id),
table_name TEXT NOT NULL,
field_name TEXT NOT NULL,
can_read BOOLEAN DEFAULT FALSE,
can_write BOOLEAN DEFAULT FALSE,
UNIQUE(role_id, table_name, field_name)
);
```
- **Dependencias:** MGN-001 (RBAC)
#### GAP-MGN-001-003: Herencia de Roles
- **Descripción:** Roles pueden heredar permisos de otros roles (role inheritance)
- **Referencia Odoo:** res.groups (implied_ids)
- **Impacto:** CRÍTICO
- **Justificación impacto:** Evita duplicación de permisos. Ej: "Supervisor" hereda de "Employee" + permisos adicionales. Sin esto, mantener permisos es muy manual
- **Recomendación:** INCLUIR en MVP
- **Esfuerzo estimado:** 10 SP
- **Implementación sugerida:**
```sql
CREATE TABLE auth.role_inheritance (
parent_role_id UUID REFERENCES auth.roles(id),
child_role_id UUID REFERENCES auth.roles(id),
PRIMARY KEY (parent_role_id, child_role_id)
);
```
- **Dependencias:** MGN-001 (roles)
### Gap P1 (Altos - Deseable para MVP)
#### GAP-MGN-001-004: Two-Factor Authentication (2FA)
- **Descripción:** Autenticación de dos factores (TOTP, SMS, email)
- **Referencia Odoo:** auth_totp
- **Impacto:** ALTO
- **Justificación impacto:** Aumenta seguridad significativamente, especialmente para usuarios con permisos críticos (Director, Administrador). NO bloquea operación básica pero es importante
- **Recomendación:** CONSIDERAR para MVP o Fase 2
- **Esfuerzo estimado:** 13 SP
- **Implementación sugerida:**
- TOTP (Google Authenticator, Authy)
- Backup codes
- Recovery email
```sql
CREATE TABLE auth.user_2fa (
user_id UUID PRIMARY KEY REFERENCES auth.users(id),
method TEXT NOT NULL, -- 'totp' | 'sms' | 'email'
secret TEXT, -- TOTP secret
backup_codes TEXT[], -- Array de códigos de respaldo
enabled BOOLEAN DEFAULT FALSE
);
```
- **Dependencias:** MGN-001 (autenticación)
#### GAP-MGN-001-005: OAuth2 Social Login
- **Descripción:** Login con proveedores externos (Google, Microsoft, Facebook)
- **Referencia Odoo:** auth_oauth
- **Impacto:** ALTO
- **Justificación impacto:** Mejora UX (usuarios no necesitan recordar contraseña). Útil para derechohabientes (login con Google). NO es crítico pero mejora adopción
- **Recomendación:** CONSIDERAR para MVP o Fase 2
- **Esfuerzo estimado:** 13 SP
- **Implementación sugerida:**
- Passport.js con estrategias Google, Microsoft
- Vincular OAuth account a usuario existente
```sql
CREATE TABLE auth.oauth_providers (
user_id UUID REFERENCES auth.users(id),
provider TEXT NOT NULL, -- 'google' | 'microsoft' | 'facebook'
provider_user_id TEXT NOT NULL,
access_token TEXT,
refresh_token TEXT,
UNIQUE(provider, provider_user_id)
);
```
- **Dependencias:** MGN-001 (autenticación)
### Gap P2 (Medios/Bajos - No crítico)
#### GAP-MGN-001-006: Delegación Temporal de Permisos
- **Descripción:** Usuario A puede delegar permisos a usuario B temporalmente
- **Referencia Odoo:** No existe en Odoo (funcionalidad custom)
- **Impacto:** BAJO
- **Justificación impacto:** Caso de uso específico (Director delega durante vacaciones). No es genérico, puede implementarse con lógica custom
- **Recomendación:** POSPONER a Fase 2 o posterior
- **Esfuerzo estimado:** 8 SP
#### GAP-MGN-001-007: Password Policy Configurable
- **Descripción:** Políticas de contraseña configurables (longitud mínima, complejidad, expiración, historial)
- **Referencia Odoo:** base (password_policy)
- **Impacto:** MEDIO
- **Justificación impacto:** Útil para compliance (ISO 27001), pero política hardcodeada (8+ chars, mayúsculas, números) es suficiente para MVP
- **Recomendación:** POSPONER a Fase 2
- **Esfuerzo estimado:** 5 SP
## 4. FUNCIONALIDADES SOBRANTES (No en Odoo, pero incluidas)
1. **Multi-Tenancy Schema-Level:** No en Odoo (Odoo usa multi-company a nivel de filas). Incluimos schema-level isolation para mejor seguridad y performance
- Razón: Mejor aislamiento, queries más rápidas (sin filtros WHERE company_id)
- Patrón Gamilit: 9 schemas separados
## 5. ANÁLISIS COMPARATIVO CON CONSTRUCCIÓN
### Funcionalidades en ERP Construcción (MAI-001)
**Implementadas:**
- ✅ Autenticación JWT
- ✅ Usuarios (CRUD básico)
- ✅ Roles (CRUD)
- ✅ Permisos por modelo (básico)
- ✅ Multi-tenancy (schema-level)
- ✅ Signup (con email)
- ✅ Reset password
**Parcialmente implementadas:**
- 🟡 RLS Policies (~20 policies, Odoo tiene 159)
- 🟡 RBAC (sin herencia de roles)
**No implementadas:**
- ❌ API Keys
- ❌ Permisos field-level
- ❌ 2FA
- ❌ OAuth2
- ❌ Password policies configurables
### Gaps vs Construcción
**Funcionalidades que Construcción NO tiene pero DEBERÍA tener según Odoo:**
1. **API Keys (P0):** Crítico para integración INFONAVIT API
2. **Herencia de roles (P0):** Simplifica gestión de permisos
3. **Permisos field-level (P0):** Ocultar campos sensibles (presupuestos, costos)
4. **2FA (P1):** Seguridad para usuarios críticos
5. **159 RLS Policies completas (P0):** Construcción tiene ~20, faltan 139
## 6. RECOMENDACIONES
### Para MGN-001
- [x] **Incluir API Keys (GAP-001):** CRÍTICO para integraciones. Implementar con scopes granulares
- [x] **Incluir permisos field-level (GAP-002):** CRÍTICO para seguridad. Implementar con tabla auth.field_permissions
- [x] **Incluir herencia de roles (GAP-003):** CRÍTICO para mantenibilidad. Implementar con tabla auth.role_inheritance
- [ ] **Considerar 2FA (GAP-004):** Deseable para MVP, implementar TOTP con backup codes
- [ ] **Considerar OAuth2 (GAP-005):** Deseable para UX, implementar Google + Microsoft
### Para ERP Construcción
- [x] **Retroalimentación 1:** Agregar API Keys para integración INFONAVIT API
- [x] **Retroalimentación 2:** Completar RLS Policies (20 → 159, faltan 139)
- [x] **Retroalimentación 3:** Implementar herencia de roles para simplificar gestión
- [x] **Retroalimentación 4:** Agregar permisos field-level para campos sensibles
- [ ] **Retroalimentación 5:** Considerar 2FA para Director y Administrador
## 7. IMPACTO EN STORY POINTS
| Concepto | SP Original | SP Gaps P0 | SP Nuevo | Δ SP |
|----------|-------------|------------|----------|------|
| MGN-001 Original | 50 SP | - | 50 SP | - |
| GAP-001 (API Keys) | - | +8 SP | - | +8 SP |
| GAP-002 (Field permissions) | - | +13 SP | - | +13 SP |
| GAP-003 (Role inheritance) | - | +10 SP | - | +10 SP |
| **MGN-001 Total** | **50 SP** | **+31 SP** | **81 SP** | **+31 SP (+62%)** |
**Análisis:** Agregar gaps P0 aumenta MGN-001 en 62%. Si incluimos P1 (2FA, OAuth2), llegaría a 107 SP (+114%).
**Recomendación:**
- MVP: 81 SP (incluir P0)
- Fase 2: +26 SP (2FA + OAuth2)
## 8. REFERENCIAS
- [ALCANCE-POR-MODULO.md - MGN-001](../ALCANCE-POR-MODULO.md#mgn-001-fundamentos)
- [MAPEO-ODOO-TO-MGN.md](../../00-analisis-referencias/odoo/MAPEO-ODOO-TO-MGN.md)
- [odoo-base-analysis.md](../../00-analisis-referencias/odoo/odoo-base-analysis.md)
- [odoo-auth-analysis.md](../../00-analisis-referencias/odoo/odoo-auth-analysis.md)
- [ADR-001: Stack Tecnológico](../../adr/ADR-001-stack-tecnologico.md)
- [ADR-003: Multi-Tenancy](../../adr/ADR-003-multi-tenancy.md)
- [ADR-006: RBAC](../../adr/ADR-006-rbac.md)