# DEPENDENCY_GRAPH.yml - ERP Core
# Grafo de dependencias entre modulos
# Ubicacion Canonica: orchestration/inventarios/
# Ultima actualizacion: 2025-12-05

version: "2.0"
project: erp-core
updated_at: "2025-12-05"
updated_by: Requirements-Analyst

# =============================================================================
# PROPOSITO
# =============================================================================
# Este archivo documenta las dependencias entre modulos para:
# 1. Planificar orden de implementacion
# 2. Identificar modulos bloqueantes
# 3. Evitar dependencias circulares
# 4. Facilitar impacto de cambios

# =============================================================================
# NOTA IMPORTANTE - REESTRUCTURACION v2.0
# =============================================================================
# Los IDs de modulos fueron reorganizados en la migracion GAMILIT:
# - Fase 01 Foundation: MGN-001 a MGN-004 (sin cambios)
# - Fase 02 Core Business: MGN-005 a MGN-010 (reorganizado)
# - Fase 03 Extended: A definir
# - Fase 04 SaaS: A definir

# =============================================================================
# RESUMEN DE DEPENDENCIAS
# =============================================================================

summary:
  total_modules: 10  # Actualizados en estructura GAMILIT
  fase_01_foundation: 4
  fase_02_core_business: 6
  critical_path: [MGN-001, MGN-002, MGN-003, MGN-004, MGN-005]
  most_depended: MGN-001  # Todos dependen de auth
  most_dependencies: MGN-010  # Financial depende de multiples modulos

# =============================================================================
# GRAFO DE DEPENDENCIAS
# =============================================================================

modules:

  # ---------------------------------------------------------------------------
  # FASE FOUNDATION - Base del sistema
  # ---------------------------------------------------------------------------

  - id: MGN-001
    name: Autenticacion
    phase: foundation
    layer: core
    depends_on: []
    required_by:
      - MGN-002   # Users necesita auth
      - MGN-003   # Roles necesita auth
      - MGN-004   # Tenants necesita auth
      - MGN-005   # Catalogs necesita auth
      - MGN-006   # Inventory
      - MGN-007   # Sales
      - MGN-008   # Purchases
      - MGN-009   # Reports
      - MGN-010   # Accounting
      - MGN-011   # HR
      - MGN-012   # Manufacturing
      - MGN-013   # Projects
      - MGN-014   # CRM
      - MGN-015   # Assets
      - MGN-016   # Subscriptions
      - MGN-017   # Payments
      - MGN-018   # WhatsApp
      - MGN-019   # Audit
    dependency_type: hard  # Sin esto nada funciona
    notes: "Modulo base obligatorio para todos"

  - id: MGN-002
    name: Usuarios
    phase: foundation
    layer: core
    depends_on:
      - {module: MGN-001, type: hard, reason: "Usuarios requieren autenticacion"}
    required_by:
      - MGN-003   # Roles asigna a usuarios
      - MGN-004   # Tenants tiene usuarios
      - MGN-011   # HR gestiona usuarios
      - MGN-019   # Audit registra usuarios
    notes: "Gestion de perfiles y preferencias"

  - id: MGN-003
    name: Roles y Permisos
    phase: foundation
    layer: core
    depends_on:
      - {module: MGN-001, type: hard, reason: "RBAC protege endpoints"}
      - {module: MGN-002, type: hard, reason: "Roles se asignan a usuarios"}
    required_by:
      - MGN-004   # Tenants tiene roles por defecto
      - MGN-005   # Catalogs usa permisos
      - MGN-006   # Inventory usa permisos
      - MGN-007   # Sales usa permisos
      - MGN-008   # Purchases usa permisos
      - MGN-009   # Reports usa permisos
      - MGN-010   # Accounting usa permisos
    notes: "Todos los modulos de negocio dependen de permisos"

  - id: MGN-004
    name: Multi-tenant
    phase: foundation
    layer: core
    depends_on:
      - {module: MGN-001, type: hard, reason: "Tenant se asocia en auth"}
      - {module: MGN-002, type: hard, reason: "Usuarios pertenecen a tenant"}
      - {module: MGN-003, type: hard, reason: "Roles son por tenant"}
    required_by:
      - MGN-005   # Catalogs son por tenant
      - MGN-006   # Inventory por tenant
      - MGN-007   # Sales por tenant
      - MGN-008   # Purchases por tenant
      - MGN-010   # Accounting por tenant
      - MGN-016   # Subscriptions por tenant
    notes: "Aislamiento de datos obligatorio"

  # ---------------------------------------------------------------------------
  # FASE 02 CORE BUSINESS - Modulos de Negocio Base
  # ---------------------------------------------------------------------------
  # NOTA: Esta seccion fue reorganizada en la migracion GAMILIT v2.0
  # Los modulos MGN-005 a MGN-010 ahora corresponden a:
  # - MGN-005: Catalogos (datos maestros genericos)
  # - MGN-006: Settings (configuraciones)
  # - MGN-007: Audit (auditoria)
  # - MGN-008: Notifications (notificaciones)
  # - MGN-009: Reports (reportes y dashboards)
  # - MGN-010: Financial (base financiera)

  - id: MGN-005
    name: Catalogos Maestros
    phase: core_business
    layer: business
    status: migrado_gamilit
    ubicacion: docs/02-fase-core-business/MGN-005-catalogs/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Catalogos por tenant"}
    required_by:
      - MGN-010   # Financial usa catalogos de monedas, tipos
    shared_entities:
      - catalogs     # Definiciones de catalogos
      - catalog_items # Items de cada catalogo
    notes: "Catalogos genericos reutilizables (paises, monedas, unidades, etc.)"

  - id: MGN-006
    name: Settings
    phase: core_business
    layer: platform
    status: estructura_gamilit
    ubicacion: docs/02-fase-core-business/MGN-006-settings/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Settings por tenant"}
    required_by:
      - ALL  # Todos los modulos consumen configuraciones
    notes: "Configuraciones globales, por tenant y por usuario"

  - id: MGN-007
    name: Audit
    phase: core_business
    layer: platform
    status: estructura_gamilit
    ubicacion: docs/02-fase-core-business/MGN-007-audit/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-002, type: hard, reason: "Registra acciones de usuarios"}
      - {module: MGN-004, type: hard, reason: "Audit por tenant"}
    required_by: []
    notes: "Modulo transversal de auditoria, no tiene dependientes directos"

  - id: MGN-008
    name: Notifications
    phase: core_business
    layer: platform
    status: estructura_gamilit
    ubicacion: docs/02-fase-core-business/MGN-008-notifications/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-002, type: hard, reason: "Notificaciones a usuarios"}
      - {module: MGN-004, type: hard, reason: "Notificaciones por tenant"}
      - {module: MGN-006, type: soft, reason: "Preferencias de notificacion"}
    required_by:
      - BUSINESS_MODULES  # Modulos de negocio envian notificaciones
    notes: "Sistema multi-canal (email, push, in-app)"

  - id: MGN-009
    name: Reports
    phase: core_business
    layer: reporting
    status: estructura_gamilit
    ubicacion: docs/02-fase-core-business/MGN-009-reports/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Reportes por tenant"}
      - {module: MGN-008, type: soft, reason: "Envio programado de reportes"}
    required_by:
      - VERTICALS  # Verticales extienden con reportes especificos
    notes: "Reportes, dashboards, exportacion multi-formato"

  - id: MGN-010
    name: Financial Base
    phase: core_business
    layer: business
    status: estructura_gamilit
    ubicacion: docs/02-fase-core-business/MGN-010-financial/
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Contabilidad por tenant"}
      - {module: MGN-005, type: soft, reason: "Catalogos de monedas, tipos cuenta"}
    required_by:
      - FINANCIAL_VERTICALS  # Facturacion, CxC, CxP, Tesoreria
    notes: "Plan de cuentas, monedas, asientos contables base"

  # ---------------------------------------------------------------------------
  # FASES FUTURAS - Pendiente de Definicion
  # ---------------------------------------------------------------------------
  # Los modulos de Fase Extended y SaaS seran definidos cuando se complete
  # la documentacion de Fase 02 Core Business.
  #
  # Modulos planificados (IDs a confirmar):
  # - Inventory (control de stock)
  # - Sales (ventas, cotizaciones)
  # - Purchases (compras, ordenes)
  # - RRHH (empleados, nomina)
  # - CRM (leads, oportunidades)
  # - Projects (proyectos, tareas)
  # - Assets (activos fijos)
  # - Subscriptions (planes SaaS)
  # - Payments (Stripe integration)
  # - WhatsApp (integration)

# =============================================================================
# ANALISIS DE DEPENDENCIAS
# =============================================================================

analysis:

  # Ruta critica de implementacion (actualizada v2.0)
  critical_path:
    description: "Orden minimo de implementacion"
    sequence:
      - step: 1
        phase: "Fase 01 Foundation"
        modules: [MGN-001]
        reason: "Base de autenticacion"
      - step: 2
        phase: "Fase 01 Foundation"
        modules: [MGN-002]
        reason: "Gestion de usuarios"
      - step: 3
        phase: "Fase 01 Foundation"
        modules: [MGN-003]
        reason: "Control de acceso"
      - step: 4
        phase: "Fase 01 Foundation"
        modules: [MGN-004]
        reason: "Multi-tenancy"
      - step: 5
        phase: "Fase 02 Core Business"
        modules: [MGN-005, MGN-006]
        reason: "Catalogos y Settings (paralelo)"
      - step: 6
        phase: "Fase 02 Core Business"
        modules: [MGN-007, MGN-008]
        reason: "Audit y Notifications (paralelo)"
      - step: 7
        phase: "Fase 02 Core Business"
        modules: [MGN-009, MGN-010]
        reason: "Reports y Financial (paralelo)"

  # Modulos que bloquean a mas modulos (actualizado)
  blocking_analysis:
    - module: MGN-001
      blocks: 9
      criticality: critical
      description: "Todos los modulos dependen de auth"
    - module: MGN-004
      blocks: 6
      criticality: critical
      description: "Todos los modulos core business dependen de tenants"
    - module: MGN-005
      blocks: 1
      criticality: medium
      description: "Financial usa catalogos"
    - module: MGN-006
      blocks: 1
      criticality: medium
      description: "Notifications usa settings"

  # Dependencias circulares (no debe haber ninguna)
  circular_dependencies: []

  # Dependencias externas
  external_services:
    - name: PostgreSQL
      used_by: [ALL]
      criticality: critical
    - name: Redis
      used_by: [MGN-001, MGN-008]
      criticality: high
    - name: SMTP/Email
      used_by: [MGN-008]
      criticality: medium

# =============================================================================
# REGLAS DE DEPENDENCIA
# =============================================================================

rules:
  - name: "No dependencias circulares"
    description: "Ningun modulo puede depender indirectamente de si mismo"
    enforcement: mandatory

  - name: "Foundation primero"
    description: "Modulos foundation deben implementarse antes que business"
    enforcement: mandatory

  - name: "Hard vs Soft"
    description: |
      - hard: Modulo no funciona sin dependencia
      - soft: Funcionalidad reducida sin dependencia
    enforcement: recommended

  - name: "Actualizacion de grafo"
    description: "Actualizar este archivo al agregar dependencias"
    enforcement: mandatory

# =============================================================================
# HISTORIAL
# =============================================================================

history:
  - date: "2025-12-05"
    action: "Creacion del grafo de dependencias"
    author: Requirements-Analyst

  - date: "2025-12-05"
    action: "Actualizacion v2.0 - Reestructuracion GAMILIT"
    author: Requirements-Analyst
    changes:
      - "Reorganizacion de IDs MGN-005 a MGN-010"
      - "Actualizacion de dependencias Fase 02"
      - "Simplificacion de modulos futuros (pendiente definicion)"
      - "Actualizacion de ruta critica"
