11 KiB
11 KiB
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)
- Autenticación de usuarios: Login con sesiones, cookies
- Gestión de usuarios: CRUD usuarios con perfiles completos
- Sistema RBAC: Roles (groups), permisos por modelo (ir.model.access)
- Record Rules (RLS): Filtros SQL dinámicos por rol (ir.rule)
- Herencia de roles: Grupos pueden heredar permisos de otros grupos
- Permisos campo-level: Restricción de acceso a campos específicos
- Multi-company: Usuarios acceden a múltiples empresas
- OAuth2 login: Google, Facebook, Microsoft
- API Keys: Tokens para integraciones externas
- Password policies: Complejidad, expiración, historial
Del Módulo auth_signup
- Signup con validación: Registro de usuarios con email verification
- 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]
- ✅ Autenticación JWT: Incluida en MGN-001 (Login con JWT tokens)
- ✅ Gestión de usuarios: Incluida en MGN-001 (CRUD completo)
- ✅ RBAC: Incluida en MGN-001 (Roles, permisos CRUD por modelo)
- ✅ Multi-tenancy schema-level: Incluida en MGN-001 (Isolation por schema)
- ✅ Signup: Incluida en MGN-001 (Registro con validación email)
- ✅ Reset password: Incluida en MGN-001 (Token seguro, 24h)
- ✅ Cambio de contraseña: Incluida en MGN-001 (Con validación fuerte)
- ✅ 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:
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:
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:
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
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
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)
- 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:
- API Keys (P0): Crítico para integración INFONAVIT API
- Herencia de roles (P0): Simplifica gestión de permisos
- Permisos field-level (P0): Ocultar campos sensibles (presupuestos, costos)
- 2FA (P1): Seguridad para usuarios críticos
- 159 RLS Policies completas (P0): Construcción tiene ~20, faltan 139
6. RECOMENDACIONES
Para MGN-001
- Incluir API Keys (GAP-001): CRÍTICO para integraciones. Implementar con scopes granulares
- Incluir permisos field-level (GAP-002): CRÍTICO para seguridad. Implementar con tabla auth.field_permissions
- 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
- Retroalimentación 1: Agregar API Keys para integración INFONAVIT API
- Retroalimentación 2: Completar RLS Policies (20 → 159, faltan 139)
- Retroalimentación 3: Implementar herencia de roles para simplificar gestión
- 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)