# DEPENDENCY_GRAPH.yml - ERP Core
# Grafo de dependencias entre modulos
# Ubicacion Canonica: orchestration/inventarios/
# Ultima actualizacion: 2026-01-10

version: "2.1"
project: erp-core
updated_at: "2026-01-10"
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: 18  # 10 Core + 8 Verticales planificados
  fase_01_foundation: 4
  fase_02_core_business: 6
  fase_03_verticals: 8  # MGN-011 a MGN-018 (planificados)
  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"

  # ---------------------------------------------------------------------------
  # FASE 03 VERTICALS - Modulos Verticales de Negocio
  # ---------------------------------------------------------------------------
  # Modulos especializados que extienden la funcionalidad core.
  # Estado: Planificados - Pendientes de implementacion
  # Dependencias: Todos requieren Fase 01 y Fase 02 completadas

  - id: MGN-011
    name: Inventory
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-011-inventory/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Inventario por tenant"}
      - {module: MGN-005, type: hard, reason: "Catalogos de productos, unidades"}
      - {module: MGN-007, type: soft, reason: "Auditoria de movimientos"}
    required_by:
      - MGN-012  # Sales consume inventario
      - MGN-013  # Purchases actualiza inventario
    notes: "Control de stock, almacenes, movimientos, kardex"

  - id: MGN-012
    name: Sales
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-012-sales/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Ventas por tenant"}
      - {module: MGN-005, type: hard, reason: "Catalogos de clientes, productos"}
      - {module: MGN-010, type: hard, reason: "Facturacion usa Financial"}
      - {module: MGN-011, type: soft, reason: "Disponibilidad de inventario"}
    required_by:
      - MGN-014  # CRM relaciona con ventas
    notes: "Cotizaciones, pedidos, facturacion, notas credito/debito"

  - id: MGN-013
    name: Purchases
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-013-purchases/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Compras por tenant"}
      - {module: MGN-005, type: hard, reason: "Catalogos de proveedores, productos"}
      - {module: MGN-010, type: hard, reason: "Registro contable de compras"}
      - {module: MGN-011, type: soft, reason: "Ingreso a inventario"}
    required_by: []
    notes: "Ordenes de compra, recepciones, cuentas por pagar"

  - id: MGN-014
    name: CRM
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-014-crm/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "CRM por tenant"}
      - {module: MGN-005, type: hard, reason: "Catalogos de contactos"}
      - {module: MGN-008, type: soft, reason: "Notificaciones de seguimiento"}
      - {module: MGN-012, type: soft, reason: "Conversion a ventas"}
    required_by:
      - MGN-018  # WhatsApp integra con CRM
    notes: "Leads, oportunidades, pipeline, seguimiento clientes"

  - id: MGN-015
    name: RRHH
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-015-rrhh/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-002, type: hard, reason: "Empleados como usuarios"}
      - {module: MGN-004, type: hard, reason: "RRHH por tenant"}
      - {module: MGN-010, type: hard, reason: "Nomina usa Financial"}
    required_by: []
    notes: "Empleados, contratos, nomina, vacaciones, evaluaciones"

  - id: MGN-016
    name: Projects
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-016-projects/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-002, type: hard, reason: "Asignacion de usuarios"}
      - {module: MGN-004, type: hard, reason: "Proyectos por tenant"}
      - {module: MGN-008, type: soft, reason: "Notificaciones de tareas"}
    required_by: []
    notes: "Proyectos, tareas, seguimiento tiempo, recursos"

  - id: MGN-017
    name: Assets
    phase: verticals
    layer: business
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-017-assets/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "Activos por tenant"}
      - {module: MGN-005, type: hard, reason: "Catalogos de tipos activo"}
      - {module: MGN-010, type: hard, reason: "Depreciacion usa Financial"}
    required_by: []
    notes: "Activos fijos, depreciacion, mantenimiento, bajas"

  - id: MGN-018
    name: WhatsApp Integration
    phase: verticals
    layer: integration
    status: planificado
    ubicacion: docs/03-fase-verticals/MGN-018-whatsapp/  # Planificado
    depends_on:
      - {module: MGN-001, type: hard, reason: "Auth requerido"}
      - {module: MGN-004, type: hard, reason: "WhatsApp por tenant"}
      - {module: MGN-008, type: hard, reason: "Usa sistema de notificaciones"}
      - {module: MGN-014, type: soft, reason: "Interaccion con CRM"}
    required_by: []
    external_dependencies:
      - {service: "WhatsApp Business API", type: mandatory}
    notes: "Mensajeria automatizada, chatbots, notificaciones WhatsApp"

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

analysis:

  # Ruta critica de implementacion (actualizada v2.1)
  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)"
      - step: 8
        phase: "Fase 03 Verticals"
        modules: [MGN-011]
        reason: "Inventario base para operaciones"
      - step: 9
        phase: "Fase 03 Verticals"
        modules: [MGN-012, MGN-013]
        reason: "Sales y Purchases (paralelo, dependen de Inventory)"
      - step: 10
        phase: "Fase 03 Verticals"
        modules: [MGN-014, MGN-015, MGN-016, MGN-017]
        reason: "CRM, RRHH, Projects, Assets (paralelo, independientes)"
      - step: 11
        phase: "Fase 03 Verticals"
        modules: [MGN-018]
        reason: "WhatsApp Integration (depende de CRM)"

  # Modulos que bloquean a mas modulos (actualizado v2.1)
  blocking_analysis:
    - module: MGN-001
      blocks: 17
      criticality: critical
      description: "Todos los modulos dependen de auth"
    - module: MGN-004
      blocks: 14
      criticality: critical
      description: "Todos los modulos core y verticales dependen de tenants"
    - module: MGN-005
      blocks: 6
      criticality: high
      description: "Financial y verticales comerciales usan catalogos"
    - module: MGN-010
      blocks: 5
      criticality: high
      description: "Sales, Purchases, RRHH, Assets dependen de Financial"
    - module: MGN-011
      blocks: 2
      criticality: medium
      description: "Sales y Purchases dependen de Inventory"
    - module: MGN-014
      blocks: 1
      criticality: low
      description: "WhatsApp depende de CRM"
    - 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"

  - date: "2026-01-10"
    action: "Actualizacion v2.1 - Documentacion Modulos Verticales"
    author: Requirements-Analyst
    changes:
      - "Adicion de modulos MGN-011 a MGN-018 (Fase 03 Verticals)"
      - "MGN-011 Inventory, MGN-012 Sales, MGN-013 Purchases"
      - "MGN-014 CRM, MGN-015 RRHH, MGN-016 Projects"
      - "MGN-017 Assets, MGN-018 WhatsApp Integration"
      - "Actualizacion de total_modules a 18"
      - "Extension de critical_path con steps 8-11"
      - "Actualizacion de blocking_analysis con nuevas dependencias"
