# 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)