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