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

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)

  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

  1. Signup con validación: Registro de usuarios con email verification
  2. 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:
    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)

  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

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

8. REFERENCIAS