# ALCANCE DETALLADO POR MÓDULO

**Fecha:** 2025-11-23
**Versión:** 1.0
**Basado en:** LISTA-MODULOS-ERP-GENERICO.md + Análisis Fase 0

---

## Introducción

Este documento define el alcance detallado de cada uno de los 14 módulos del ERP Genérico.

**Objetivo:** Establecer claramente qué incluye y qué NO incluye cada módulo para evitar:
- Scope creep (agregar funcionalidades innecesarias)
- Over-engineering (generalizar lo que debe ser específico)
- Conflictos entre módulos (límites difusos)

**Metodología:**
- ✅ **Incluido:** Funcionalidades que son genéricas y reutilizables en 70%+ de proyectos
- ❌ **Excluido:** Funcionalidades específicas de industria (construcción, vidrio, etc.)
- 🔧 **Límites:** Dónde termina un módulo y empieza otro

---

## MGN-001: Fundamentos

### Descripción

Módulo base que proporciona autenticación, autorización, gestión de usuarios y multi-tenancy. Es la columna vertebral de seguridad del ERP.

### Alcance Incluido (✅ Dentro del Alcance)

**Autenticación:**
- Login con email/password
- Generación de JWT tokens (access token + refresh token)
- Logout (invalidación de tokens)
- Registro de usuarios (signup) con validación de email
- Reset password (envío de token por email, expiración 24h)
- Cambio de contraseña (validación de contraseña fuerte: 8+ chars, mayúsculas, números, símbolos)
- Verificación de email (token de verificación)
- Política de contraseñas (longitud mínima, complejidad, expiración)

**Gestión de Usuarios:**
- CRUD de usuarios (create, read, update, soft delete)
- Perfiles de usuario (nombre, email, teléfono, foto, idioma preferido)
- Activación/desactivación de usuarios (active=true/false)
- Asignación de roles a usuarios (muchos a muchos)
- Historial de sesiones (last login, login count, IPs)

**Roles y Permisos (RBAC):**
- CRUD de roles (Administrator, Accountant, Supervisor, etc.)
- Permisos granulares CRUD por modelo (create, read, update, delete)
- Herencia de roles (ej: Supervisor hereda permisos de Employee)
- Permisos por campo (field-level permissions - opcional P1)
- Record Rules (RLS policies) - Filtros SQL dinámicos por rol

**Multi-Tenancy:**
- Schema-level isolation (cada tenant un schema PostgreSQL)
- Context switching (cambio de tenant por request)
- Función `get_current_tenant_id()` para RLS
- Validación de acceso cruzado entre tenants (estrictamente prohibido)

**Seguridad:**
- Hash de contraseñas (bcrypt, 10 rounds)
- Rate limiting (login attempts: 5 intentos/15min)
- Session management (tokens con expiración)
- CORS configuration
- Helmet.js (security headers)

### Alcance Excluido (❌ Fuera del Alcance)

**Autenticación Avanzada:**
- ❌ Login con OAuth2/OIDC (Google, Facebook, Azure AD) - **Razón:** No es esencial para MVP, se puede agregar después (P2)
- ❌ Autenticación de dos factores (2FA/MFA) - **Razón:** Importante, pero no crítico para inicio (P1)
- ❌ Biometría (huella, Face ID) - **Razón:** Específico de mobile (P2)
- ❌ SSO (Single Sign-On) - **Razón:** Empresarial avanzado (P2)

**Gestión de Usuarios Avanzada:**
- ❌ Delegación de permisos (usuario A delega a usuario B temporalmente) - **Razón:** Caso de uso específico (P2)
- ❌ Grupos de usuarios (además de roles) - **Razón:** Los roles son suficientes para MVP
- ❌ Aprobaciones workflow (aprobar creación de usuarios) - **Razón:** Overhead innecesario para inicio

**Multi-Tenancy Avanzado:**
- ❌ Database-level isolation (cada tenant una DB) - **Razón:** Schema-level es suficiente y más eficiente
- ❌ Tenants con custom domains - **Razón:** Complejidad infraestructura (P2)

### Límites con Otros Módulos

**Con MGN-002 (Empresas):**
- **MGN-001 termina:** Gestión de usuarios y roles
- **MGN-002 empieza:** Gestión de empresas/organizaciones (users pueden acceder a múltiples empresas)
- **Límite:** Usuario puede tener un rol diferente en cada empresa

**Con MGN-014 (Mensajería):**
- **MGN-001 termina:** Autenticación de usuarios
- **MGN-014 empieza:** Notificaciones a usuarios, mensajes
- **Límite:** MGN-001 provee el contexto de usuario actual, MGN-014 lo usa para notificar

### Casos de Uso Principales

1. **UC-AUTH-001:** Usuario se registra en el sistema
2. **UC-AUTH-002:** Usuario inicia sesión
3. **UC-AUTH-003:** Usuario solicita reset de contraseña
4. **UC-AUTH-004:** Administrador crea un nuevo usuario
5. **UC-AUTH-005:** Administrador asigna roles a usuario
6. **UC-AUTH-006:** Administrador define permisos de un rol
7. **UC-AUTH-007:** Sistema valida permisos de usuario para acción (CRUD)
8. **UC-AUTH-008:** Sistema cambia de tenant (multi-tenancy)

### Actores

- **Administrador:** Gestiona usuarios, roles, permisos
- **Usuario:** Se autentica, usa el sistema
- **Sistema:** Valida permisos automáticamente

### Referencias

- **Odoo:** base (res.users, res.groups, ir.model.access, ir.rule)
- **Gamilit:** auth_management schema
- **ADR:** ADR-001 (Stack), ADR-003 (Multi-Tenancy), ADR-006 (RBAC)

---

## MGN-002: Empresas y Organizaciones

### Descripción

Módulo que gestiona empresas/organizaciones y configuración multi-empresa. Permite que usuarios trabajen con múltiples empresas y que documentos pertenezcan a empresas específicas.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Empresas:**
- CRUD de empresas (create, read, update, soft delete)
- Datos de empresa: nombre, nombre legal, RFC/NIT/Tax ID, logo, email, teléfono, sitio web
- Dirección de empresa (calle, ciudad, estado, país, código postal)
- Configuración fiscal (régimen fiscal, responsabilidades tributarias)
- Moneda principal de la empresa
- Empresa vinculada a partner (patrón Odoo: una empresa también es un partner)

**Multi-Empresa:**
- Usuario puede tener acceso a múltiples empresas (tabla de asignación users_companies)
- Usuario puede tener roles diferentes en cada empresa
- Context switching: cambiar empresa activa sin logout
- Filtrado automático de datos por empresa (RLS)
- Validación de acceso cruzado entre empresas (un usuario no puede ver datos de empresa sin acceso)

**Jerarquías Organizacionales:**
- Holdings (parent_id): una empresa puede ser parte de un grupo
- Visualización de organigrama de empresas (árbol jerárquico)

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Consolidación financiera (balance consolidado de holdings) - **Razón:** Funcionalidad contable avanzada, va en MGN-004 o extensión (P2)
- ❌ Transferencias inter-compañía automáticas - **Razón:** Complejidad contable, no esencial para MVP (P2)
- ❌ Configuración de permisos cruzados entre empresas - **Razón:** Caso de uso específico, no genérico
- ❌ Unidades de negocio (Business Units) dentro de empresa - **Razón:** Puede modelarse con departamentos en MGN-010

**Específico de Industria:**
- ❌ Sucursales con inventario independiente - **Razón:** Es lógica de inventario (MGN-005)
- ❌ Centros de costos - **Razón:** Es lógica de contabilidad analítica (MGN-008)

### Límites con Otros Módulos

**Con MGN-001 (Fundamentos):**
- **MGN-001 termina:** Usuarios y roles
- **MGN-002 empieza:** Empresas y asignación usuario-empresa
- **Límite:** Un usuario puede tener rol diferente en cada empresa

**Con MGN-003 (Catálogos):**
- **MGN-002 termina:** Datos de empresa
- **MGN-003 empieza:** Partners (empresa también es un partner)
- **Límite:** Empresa tiene relación con partner (company.partner_id)

**Con MGN-004, MGN-005, MGN-006, MGN-007 (Módulos Transaccionales):**
- **MGN-002 termina:** Definición de empresa
- **Módulos transaccionales empiezan:** Documentos (facturas, órdenes, etc.) con company_id
- **Límite:** Todos los documentos deben tener company_id (FK a companies)

### Casos de Uso Principales

1. **UC-COMP-001:** Administrador crea una nueva empresa
2. **UC-COMP-002:** Administrador configura datos fiscales de empresa
3. **UC-COMP-003:** Administrador asigna usuarios a empresa
4. **UC-COMP-004:** Usuario cambia de empresa activa (context switching)
5. **UC-COMP-005:** Usuario con acceso a múltiples empresas ve lista de empresas permitidas
6. **UC-COMP-006:** Administrador crea holding (jerarquía de empresas)

### Actores

- **Administrador:** Gestiona empresas, configuración
- **Usuario Multi-Empresa:** Trabaja con varias empresas
- **Sistema:** Filtra datos por empresa automáticamente

### Referencias

- **Odoo:** base (res.company)
- **Gamilit:** core schema (companies table)
- **ADR:** ADR-002 (Arquitectura Modular), ADR-003 (Multi-Tenancy)

---

## MGN-003: Catálogos Maestros

### Descripción

Módulo que gestiona catálogos maestros universales: partners, países, monedas, unidades de medida, categorías de productos. Son datos de referencia compartidos por todos los módulos transaccionales.

### Alcance Incluido (✅ Dentro del Alcance)

**Partners Universales:**
- CRUD de partners (patrón Odoo: un partner puede ser cliente, proveedor, empleado, contacto)
- Flags: is_customer, is_supplier, is_employee, is_contact
- Datos generales: nombre, nombre legal, email, teléfono, sitio web
- Dirección (calle, ciudad, estado, país, código postal)
- Datos fiscales (Tax ID, régimen fiscal)
- Jerarquía (parent_id): un partner puede tener contactos hijos
- Condiciones de pago (payment terms)
- Calificación de partner (customer rank, supplier rank)

**Países y Regiones:**
- Catálogo de países (ISO 3166-1: código 2 letras, código 3 letras, código numérico)
- Estados/Provincias por país
- Ciudades (opcional, puede ser texto libre)
- Códigos postales
- Formatos de dirección por país (ej: USA → ZIP, México → CP)

**Monedas:**
- Catálogo de monedas (ISO 4217: USD, MXN, EUR, etc.)
- Tasas de cambio (con vigencia temporal: fecha inicio, fecha fin)
- Actualización manual de tasas (en MVP, automática en P1)
- Moneda de visualización vs moneda de registro

**Unidades de Medida (UoM):**
- Categorías de UoM (longitud, peso, volumen, tiempo, unidades)
- UoM por categoría (kg, g, ton / m, cm, km / L, mL / etc.)
- Factor de conversión (ej: 1 kg = 1000 g)
- UoM de referencia por categoría
- Conversiones automáticas dentro de categoría

**Categorías de Productos:**
- Jerarquía de categorías (parent_id)
- Categorías genéricas (materiales, servicios, etc.)
- Asignación de cuenta contable por categoría (opcional, integración con MGN-004)

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ CRM avanzado de partners (scoring, segmentación) - **Razón:** Va en MGN-009 (CRM)
- ❌ Portal de proveedores/clientes - **Razón:** Va en MGN-013 (Portal)
- ❌ Actualización automática de tasas de cambio (API externa) - **Razón:** No esencial para MVP (P1)
- ❌ Conversiones de UoM entre categorías - **Razón:** No tiene sentido (kg a metros)
- ❌ UoM compuestas (kg/m², m³/h) - **Razón:** Complejidad innecesaria (P2)

**Específico de Industria:**
- ❌ Partners con clasificación por industria (construcción, vidrio, etc.) - **Razón:** Específico de proyecto
- ❌ Catálogo de productos - **Razón:** Va en MGN-005 (Inventario), aquí solo categorías

### Límites con Otros Módulos

**Con MGN-002 (Empresas):**
- **MGN-002 termina:** Empresa
- **MGN-003 empieza:** Empresa también es un partner (company.partner_id)
- **Límite:** Empresa tiene relación 1-1 con partner

**Con MGN-004 (Financiero):**
- **MGN-003 termina:** Partners, monedas
- **MGN-004 empieza:** Facturas a partners, asientos con moneda
- **Límite:** MGN-003 provee catálogos, MGN-004 los usa

**Con MGN-005 (Inventario):**
- **MGN-003 termina:** Categorías de productos, UoM
- **MGN-005 empieza:** Productos (con categoría y UoM)
- **Límite:** MGN-003 provee categorías y UoM, MGN-005 crea productos

**Con MGN-006 (Compras) y MGN-007 (Ventas):**
- **MGN-003 termina:** Partners (proveedores, clientes)
- **MGN-006/007 empiezan:** Órdenes con partners
- **Límite:** MGN-003 gestiona partners, MGN-006/007 crean transacciones

### Casos de Uso Principales

1. **UC-CAT-001:** Usuario crea un nuevo cliente/proveedor (partner)
2. **UC-CAT-002:** Usuario busca un partner por nombre/email/Tax ID
3. **UC-CAT-003:** Usuario configura condiciones de pago de partner
4. **UC-CAT-004:** Administrador actualiza tasas de cambio de monedas
5. **UC-CAT-005:** Usuario convierte cantidades entre UoM (kg a g)
6. **UC-CAT-006:** Administrador crea jerarquía de categorías de productos
7. **UC-CAT-007:** Usuario agrega contactos a un partner (parent_id)

### Actores

- **Administrador:** Configura catálogos maestros
- **Usuario Ventas:** Gestiona clientes (partners con is_customer=true)
- **Usuario Compras:** Gestiona proveedores (partners con is_supplier=true)
- **Usuario RRHH:** Gestiona empleados (partners con is_employee=true)
- **Sistema:** Usa catálogos para validaciones y conversiones

### Referencias

- **Odoo:** base (res.partner, res.country, res.currency, uom.uom)
- **Gamilit:** core schema (partners, currencies, countries)
- **ADR:** ADR-007 (Database Design)

---

## MGN-004: Financiero Básico

### Descripción

Módulo de contabilidad general. Gestiona plan de cuentas, asientos contables, facturas, pagos, conciliación y reportes financieros básicos.

### Alcance Incluido (✅ Dentro del Alcance)

**Plan de Cuentas:**
- CRUD de cuentas contables (activo, pasivo, capital, ingresos, egresos)
- Jerarquía de cuentas (parent_id)
- Tipos de cuenta (view, payable, receivable, bank, cash, etc.)
- Código de cuenta (numérico o alfanumérico)
- Cuentas específicas por empresa (multi-empresa)
- Templates de plan de cuentas por país (México, USA)

**Asientos Contables:**
- Creación de asientos (journal entries) con líneas (débito/crédito)
- Validación débito = crédito (fundamental)
- Estados: draft → posted (no editable después de posted)
- Cancelación de asientos (reversing entry)
- Asientos por journal (ventas, compras, banco, misceláneos)
- Fecha de asiento vs fecha de registro
- Asientos automáticos desde módulos transaccionales (facturas, pagos)

**Facturas:**
- Facturas de cliente (customer invoices)
- Facturas de proveedor (vendor bills)
- Notas de crédito (credit notes)
- Estados: draft → open → paid → cancelled
- Líneas de factura (productos/servicios, cantidad, precio, impuestos)
- Cálculo automático de impuestos (IVA, retenciones)
- Generación automática de asientos contables al validar factura
- Multi-moneda (factura en USD, registro en MXN)

**Pagos:**
- Registro de pagos (customer payments, vendor payments)
- Métodos de pago (efectivo, transferencia, cheque, tarjeta)
- Pagos parciales
- Conciliación de pagos con facturas (payment reconciliation)
- Diferencias de pago (descuentos, redondeos)
- Pagos anticipados (advance payments)

**Reportes Financieros:**
- Balance General (Balance Sheet)
- Estado de Resultados (Profit & Loss / P&L)
- Filtros: por empresa, por fecha, por moneda
- Exportación: PDF, Excel

**Multi-Moneda:**
- Transacciones en moneda extranjera
- Conversión automática a moneda de empresa
- Gain/Loss por diferencia cambiaria
- Reportes en múltiples monedas

### Alcance Excluido (❌ Fuera del Alcance)

**Contabilidad Avanzada:**
- ❌ Presupuestos financieros - **Razón:** Va en módulo específico o MGN-012 (P2)
- ❌ Consolidación multi-empresa - **Razón:** Funcionalidad avanzada (P2)
- ❌ Flujo de caja (Cash Flow) - **Razón:** Reporte avanzado (P1)
- ❌ Activos fijos (depreciación) - **Razón:** Módulo especializado (P2)
- ❌ Nómina contable - **Razón:** Va en MGN-010 (RRHH)
- ❌ Facturación electrónica (CFDI México, e-invoicing) - **Razón:** Específico de país (extensión)

**Reportes Avanzados:**
- ❌ Reportes IFRS/GAAP específicos - **Razón:** Requiere consultoría contable (P2)
- ❌ Dashboards financieros - **Razón:** Va en MGN-012 (Reportes y Analytics)
- ❌ Análisis de varianzas - **Razón:** Reporte avanzado (P2)

**Integraciones:**
- ❌ Integración con SAT México (timbrado CFDI) - **Razón:** Específico de país (extensión)
- ❌ Integración con bancos (conciliación automática) - **Razón:** Requiere APIs bancarias (P1)

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners, monedas
- **MGN-004 empieza:** Facturas a partners, conversión de monedas
- **Límite:** MGN-004 usa partners y monedas de MGN-003

**Con MGN-006 (Compras) y MGN-007 (Ventas):**
- **MGN-006/007 terminan:** Órdenes de compra/venta
- **MGN-004 empieza:** Facturas generadas desde órdenes, asientos contables
- **Límite:** Órdenes pueden generar facturas, pero la factura es documento contable (MGN-004)

**Con MGN-008 (Analítica):**
- **MGN-004 termina:** Asientos contables en plan de cuentas general
- **MGN-008 empieza:** Asientos con distribución analítica (por proyecto)
- **Límite:** MGN-004 registra contabilidad general, MGN-008 registra contabilidad analítica (paralela)

### Casos de Uso Principales

1. **UC-FIN-001:** Contador crea asiento contable manual
2. **UC-FIN-002:** Sistema genera asiento automático al validar factura de venta
3. **UC-FIN-003:** Usuario crea factura de cliente
4. **UC-FIN-004:** Usuario registra pago de cliente
5. **UC-FIN-005:** Usuario concilia pago con factura
6. **UC-FIN-006:** Contador genera Balance General
7. **UC-FIN-007:** Contador genera Estado de Resultados
8. **UC-FIN-008:** Usuario crea factura de proveedor en USD (empresa en MXN)

### Actores

- **Contador:** Gestiona plan de cuentas, asientos, reportes
- **Usuario Ventas:** Crea facturas de cliente
- **Usuario Compras:** Registra facturas de proveedor
- **Usuario Tesorería:** Registra pagos, concilia
- **Sistema:** Genera asientos automáticos, calcula impuestos

### Referencias

- **Odoo:** account (account.account, account.move, account.payment)
- **Gamilit:** financial_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-005: Inventario Básico

### Descripción

Módulo de gestión de inventario. Maneja productos, almacenes, ubicaciones, movimientos de stock, trazabilidad y valoración de inventario.

### Alcance Incluido (✅ Dentro del Alcance)

**Productos:**
- CRUD de productos (bienes físicos y servicios)
- Tipos de producto: almacenable (storable), consumible (consumable), servicio (service)
- Datos de producto: nombre, descripción, código interno, código de barras
- Categoría de producto (FK a MGN-003)
- Unidad de medida (UoM) - FK a MGN-003
- Variantes de producto (producto con múltiples atributos: talla, color)
- Precio de costo (para valoración)
- Precio de venta (sugerido)

**Almacenes y Ubicaciones:**
- CRUD de almacenes (warehouses)
- Ubicaciones jerárquicas (warehouse → zone → aisle → rack → level)
- Tipos de ubicación: física, virtual (proveedores, clientes, producción, pérdidas)
- Ubicación por defecto por almacén
- Inventario por ubicación

**Movimientos de Stock:**
- Movimientos de stock (stock moves): origen → destino
- Estados: draft → confirmed → done → cancelled
- Cantidad movida, UoM
- Doble movimiento (origen → tránsito → destino) para movimientos complejos
- Movimientos automáticos desde órdenes de compra/venta
- Movimientos manuales (ajustes, transferencias)

**Pickings (Albaranes):**
- Agrupación de movimientos: picking de recepción, entrega, interno
- Estados: draft → ready → done
- Validación parcial (recibir parte de una orden)
- Impresión de albaranes (PDF)

**Trazabilidad:**
- Lotes (batch/lot): productos con fecha de lote (ej: lote de producción)
- Números de serie (serial numbers): productos con número único (ej: computadoras)
- Trazabilidad completa (de dónde vino, a dónde fue)

**Valoración de Inventario:**
- Métodos: FIFO (First In First Out), LIFO (Last In First Out), Costo Promedio
- Cálculo automático de costo de producto
- Asientos contables automáticos (si valoración automática activada)

**Inventario Físico:**
- Conteos de inventario (inventory adjustments)
- Diferencias entre conteo físico y sistema
- Generación de ajustes automáticos

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Producción/Manufactura (MRP) - **Razón:** Módulo independiente (P2)
- ❌ Kits/Bundles (productos compuestos) - **Razón:** Complejidad (P1)
- ❌ Rutas de inventario complejas (push/pull rules) - **Razón:** Odoo avanzado (P2)
- ❌ Estrategias de picking (FIFO, LIFO, FEFO) - **Razón:** Warehouse management avanzado (P2)
- ❌ Codificación automática de productos - **Razón:** No es genérico
- ❌ Imágenes de productos (galería) - **Razón:** P1, inicialmente 1 imagen

**Específico de Industria:**
- ❌ Productos con ficha técnica (construcción) - **Razón:** Específico de industria
- ❌ Productos con explosión de insumos (APU) - **Razón:** Específico de construcción
- ❌ Control de caducidad (FEFO) - **Razón:** Específico de alimentos/farmacia (P1)

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Categorías de productos, UoM
- **MGN-005 empieza:** Productos con categoría y UoM
- **Límite:** MGN-005 usa catálogos de MGN-003

**Con MGN-004 (Financiero):**
- **MGN-005 termina:** Valoración de inventario (costo de producto)
- **MGN-004 empieza:** Asientos contables de valoración
- **Límite:** Si valoración automática activada, MGN-005 genera asientos en MGN-004

**Con MGN-006 (Compras):**
- **MGN-006 termina:** Orden de compra confirmada
- **MGN-005 empieza:** Picking de recepción, movimientos de stock
- **Límite:** Confirmación de PO genera picking automáticamente

**Con MGN-007 (Ventas):**
- **MGN-007 termina:** Orden de venta confirmada
- **MGN-005 empieza:** Picking de entrega, movimientos de stock
- **Límite:** Confirmación de SO genera picking automáticamente

### Casos de Uso Principales

1. **UC-INV-001:** Usuario crea un nuevo producto almacenable
2. **UC-INV-002:** Usuario crea un almacén con ubicaciones
3. **UC-INV-003:** Usuario realiza transferencia interna de stock
4. **UC-INV-004:** Usuario recibe productos (desde orden de compra)
5. **UC-INV-005:** Usuario entrega productos (desde orden de venta)
6. **UC-INV-006:** Usuario realiza conteo de inventario físico
7. **UC-INV-007:** Sistema calcula valoración de inventario (FIFO)
8. **UC-INV-008:** Usuario consulta trazabilidad de lote/número de serie

### Actores

- **Usuario Almacén:** Gestiona movimientos, recepciones, entregas
- **Usuario Compras:** Recibe productos de proveedores
- **Usuario Ventas:** Entrega productos a clientes
- **Contador:** Consulta valoración de inventario
- **Sistema:** Genera movimientos automáticos, calcula valoración

### Referencias

- **Odoo:** stock (stock.warehouse, stock.location, stock.move, stock.picking, stock.quant)
- **Gamilit:** inventory_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-006: Compras Básico

### Descripción

Módulo de gestión de compras. Maneja proveedores, solicitudes de cotización, órdenes de compra, recepciones y facturación de proveedores.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Proveedores:**
- Proveedores son partners con is_supplier=true (MGN-003)
- Condiciones de pago de proveedor
- Lead time (tiempo de entrega)
- Calificación de proveedor (supplier rank)

**Solicitudes de Cotización (RFQ):**
- Creación de RFQ a proveedores
- Líneas de RFQ (productos, cantidades, precios esperados)
- Envío de RFQ por email (PDF)
- Estados: draft → sent → bid → cancelled

**Órdenes de Compra:**
- Creación de órdenes de compra (purchase orders)
- Conversión de RFQ a PO
- Líneas de PO (productos, cantidades, precio unitario, subtotal, impuestos, total)
- Estados: draft → confirmed → received → billed → cancelled
- Fechas: fecha de orden, fecha de entrega esperada
- Términos de pago
- Notas de orden

**Workflow de Aprobación:**
- Aprobación manual de órdenes (si monto > umbral)
- Estados de aprobación: pending_approval → approved → rejected
- Historial de aprobaciones

**Recepciones:**
- Integración con MGN-005 (Inventario)
- Generación automática de picking de recepción al confirmar PO
- Validación de recepción (parcial o total)
- Control de cantidades recibidas vs ordenadas

**Facturación de Proveedores:**
- Integración con MGN-004 (Financiero)
- Creación de factura de proveedor desde PO
- Control de cantidades facturadas vs recibidas vs ordenadas (3-way match)
- Validación de factura (genera asiento contable)

**Reportes Básicos:**
- Reporte de compras por proveedor
- Reporte de compras por producto
- Reporte de órdenes pendientes de recepción

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Requisiciones de compra (purchase requisitions) - **Razón:** Proceso adicional (P1)
- ❌ Acuerdos marco con proveedores (blanket orders) - **Razón:** Complejidad (P2)
- ❌ Subastas inversas - **Razón:** No es común en mayoría de industrias (P2)
- ❌ Comparación automática de cotizaciones - **Razón:** Funcionalidad avanzada (P1)
- ❌ Integración con catálogos de proveedores (punchout) - **Razón:** Requiere integraciones externas (P2)
- ❌ Workflow de aprobación complejo (múltiples niveles) - **Razón:** Inicialmente 1 nivel es suficiente (P1)

**Específico de Industria:**
- ❌ Gestión de contratos de construcción - **Razón:** Específico de industria
- ❌ Retenciones de garantía - **Razón:** Puede ser específico de construcción

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners (proveedores)
- **MGN-006 empieza:** Órdenes de compra a proveedores
- **Límite:** MGN-006 usa proveedores de MGN-003

**Con MGN-004 (Financiero):**
- **MGN-006 termina:** Orden de compra, recepción
- **MGN-004 empieza:** Factura de proveedor (genera asiento contable)
- **Límite:** PO puede generar factura de proveedor (vendor bill en MGN-004)

**Con MGN-005 (Inventario):**
- **MGN-006 termina:** Orden de compra confirmada
- **MGN-005 empieza:** Picking de recepción, movimientos de stock
- **Límite:** Confirmación de PO genera picking en MGN-005

**Con MGN-008 (Analítica):**
- **MGN-006 termina:** Líneas de orden de compra
- **MGN-008 empieza:** Distribución analítica de costos por proyecto
- **Límite:** Líneas de PO pueden tener analytic_account_id

### Casos de Uso Principales

1. **UC-COM-001:** Usuario crea RFQ y envía a proveedores
2. **UC-COM-002:** Usuario convierte RFQ a orden de compra
3. **UC-COM-003:** Usuario crea orden de compra directamente
4. **UC-COM-004:** Sistema genera picking de recepción al confirmar PO
5. **UC-COM-005:** Usuario valida recepción de productos
6. **UC-COM-006:** Usuario crea factura de proveedor desde PO
7. **UC-COM-007:** Sistema valida 3-way match (PO vs Recepción vs Factura)
8. **UC-COM-008:** Aprobador aprueba/rechaza orden de compra

### Actores

- **Usuario Compras:** Crea RFQ, órdenes de compra
- **Aprobador Compras:** Aprueba órdenes > umbral
- **Usuario Almacén:** Valida recepciones
- **Contador:** Registra facturas de proveedor
- **Sistema:** Genera pickings, valida 3-way match

### Referencias

- **Odoo:** purchase (purchase.order, purchase.order.line)
- **Gamilit:** purchasing_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-007: Ventas Básico

### Descripción

Módulo de gestión de ventas. Maneja clientes, cotizaciones, órdenes de venta, entregas y facturación de clientes.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Clientes:**
- Clientes son partners con is_customer=true (MGN-003)
- Condiciones de pago de cliente
- Límite de crédito
- Calificación de cliente (customer rank)

**Cotizaciones:**
- Creación de cotizaciones (quotations)
- Líneas de cotización (productos, cantidades, precio unitario, descuentos, subtotal, impuestos, total)
- Estados: draft → sent → sale → cancelled
- Envío de cotización por email (PDF)
- Validez de cotización (fecha de expiración)
- Términos y condiciones

**Órdenes de Venta:**
- Conversión de cotización a orden de venta (sale order)
- Creación directa de orden de venta
- Líneas de SO (productos/servicios, cantidades, precio, descuentos, impuestos)
- Estados: quotation → sale → delivery → invoice → done
- Fechas: fecha de orden, fecha de entrega esperada
- Notas de orden

**Entregas:**
- Integración con MGN-005 (Inventario)
- Generación automática de picking de entrega al confirmar SO
- Validación de entrega (parcial o total)
- Control de cantidades entregadas vs ordenadas

**Facturación de Clientes:**
- Integración con MGN-004 (Financiero)
- Creación de factura de cliente desde SO
- Control de cantidades facturadas vs entregadas vs ordenadas
- Validación de factura (genera asiento contable)
- Facturación anticipada (down payment)

**Portal de Clientes Básico:**
- Cliente puede ver sus cotizaciones
- Cliente puede aprobar cotización online
- Firma electrónica de cotización (canvas HTML5)
- (Funcionalidad completa en MGN-013)

**Reportes Básicos:**
- Reporte de ventas por cliente
- Reporte de ventas por producto
- Reporte de órdenes pendientes de entrega

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Subscripciones/Ventas recurrentes - **Razón:** Modelo de negocio específico (P2)
- ❌ Órdenes de venta con múltiples entregas (delivery schedules) - **Razón:** Complejidad (P1)
- ❌ Pricing rules complejos (descuentos escalonados) - **Razón:** Funcionalidad avanzada (P1)
- ❌ Comisiones de ventas - **Razón:** Módulo independiente (P2)
- ❌ Contratos de venta - **Razón:** Complejidad (P2)
- ❌ Integración con e-commerce - **Razón:** Requiere plataforma externa (extensión)

**Específico de Industria:**
- ❌ Gestión de proyectos de venta - **Razón:** Va en MGN-011 (Proyectos)
- ❌ Venta de servicios profesionales con timesheet - **Razón:** Combina MGN-007 + MGN-011

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners (clientes)
- **MGN-007 empieza:** Cotizaciones y órdenes de venta a clientes
- **Límite:** MGN-007 usa clientes de MGN-003

**Con MGN-004 (Financiero):**
- **MGN-007 termina:** Orden de venta, entrega
- **MGN-004 empieza:** Factura de cliente (genera asiento contable)
- **Límite:** SO puede generar factura de cliente (customer invoice en MGN-004)

**Con MGN-005 (Inventario):**
- **MGN-007 termina:** Orden de venta confirmada
- **MGN-005 empieza:** Picking de entrega, movimientos de stock
- **Límite:** Confirmación de SO genera picking en MGN-005

**Con MGN-008 (Analítica):**
- **MGN-007 termina:** Líneas de orden de venta
- **MGN-008 empieza:** Distribución analítica de ingresos por proyecto
- **Límite:** Líneas de SO pueden tener analytic_account_id

**Con MGN-009 (CRM):**
- **MGN-009 termina:** Oportunidad de venta (lead)
- **MGN-007 empieza:** Cotización creada desde oportunidad
- **Límite:** Lead puede convertirse en quotation

**Con MGN-013 (Portal):**
- **MGN-007 termina:** Creación de cotización
- **MGN-013 empieza:** Vista de cotización en portal, aprobación
- **Límite:** MGN-007 tiene portal básico, MGN-013 tiene portal completo

### Casos de Uso Principales

1. **UC-VEN-001:** Usuario crea cotización y envía a cliente
2. **UC-VEN-002:** Cliente aprueba cotización online (portal básico)
3. **UC-VEN-003:** Usuario convierte cotización a orden de venta
4. **UC-VEN-004:** Sistema genera picking de entrega al confirmar SO
5. **UC-VEN-005:** Usuario valida entrega de productos
6. **UC-VEN-006:** Usuario crea factura de cliente desde SO
7. **UC-VEN-007:** Usuario registra pago de cliente (MGN-004)
8. **UC-VEN-008:** Usuario consulta reporte de ventas por cliente

### Actores

- **Usuario Ventas:** Crea cotizaciones, órdenes de venta
- **Usuario Almacén:** Valida entregas
- **Contador:** Genera facturas de cliente
- **Cliente (Portal):** Aprueba cotizaciones online
- **Sistema:** Genera pickings, facturas

### Referencias

- **Odoo:** sale (sale.order, sale.order.line)
- **Gamilit:** sales_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-008: Contabilidad Analítica

### Descripción

Módulo de contabilidad analítica. Permite tracking de costos e ingresos por proyecto, departamento, centro de costo. Es paralelo a la contabilidad general (MGN-004).

### Alcance Incluido (✅ Dentro del Alcance)

**Cuentas Analíticas:**
- CRUD de cuentas analíticas (analytic accounts)
- Tipos: proyecto, departamento, centro de costo, cliente
- Jerarquía (parent_id): proyectos con sub-proyectos
- Estado: activo/inactivo
- Presupuesto asignado (opcional)
- Vinculación con company_id (multi-empresa)

**Líneas Analíticas:**
- Registro automático de líneas analíticas desde transacciones
- Líneas con: cuenta analítica, monto, fecha, descripción, documento origen
- Líneas de costo (negativas) e ingreso (positivas)
- Agrupación por cuenta analítica

**Distribución Analítica:**
- Una transacción puede distribuirse a múltiples cuentas analíticas
- Porcentaje de distribución (ej: 60% Proyecto A, 40% Proyecto B)
- Validación: suma de porcentajes = 100%

**Integración con Módulos Transaccionales:**
- Campo `analytic_account_id` en:
  - Líneas de factura (MGN-004)
  - Líneas de orden de compra (MGN-006)
  - Líneas de orden de venta (MGN-007)
  - Timesheet de empleados (MGN-010)
  - Tareas de proyectos (MGN-011)
- Generación automática de líneas analíticas al confirmar documentos

**Tags Analíticos:**
- Etiquetas adicionales (ej: torre, etapa, fase)
- Múltiples tags por línea analítica
- Filtros por tags en reportes

**Reportes Analíticos:**
- Balance por cuenta analítica (costos vs ingresos)
- P&L por proyecto
- Comparación presupuesto vs real
- Reporte de rentabilidad por proyecto
- Filtros: por fecha, empresa, tipo de cuenta

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Presupuestos complejos (revisiones, versiones) - **Razón:** Funcionalidad avanzada (P1)
- ❌ Alertas de sobre-presupuesto - **Razón:** Funcionalidad avanzada (P1)
- ❌ Forecast (proyecciones) - **Razón:** Requiere algoritmos (P2)
- ❌ Cross-charging (facturación inter-proyectos) - **Razón:** Complejidad (P2)

**Específico de Industria:**
- ❌ APU (Análisis de Precio Unitario) construcción - **Razón:** Específico de construcción
- ❌ Curva S - **Razón:** Específico de construcción
- ❌ Costos por fase de obra - **Razón:** Puede modelarse con tags analíticos

### Límites con Otros Módulos

**Con MGN-004 (Financiero):**
- **MGN-004 termina:** Asientos en contabilidad general
- **MGN-008 empieza:** Distribución analítica de asientos
- **Límite:** Contabilidad general y analítica son paralelas (una transacción genera asiento en ambas)

**Con MGN-006 (Compras) y MGN-007 (Ventas):**
- **MGN-006/007 terminan:** Líneas de órdenes
- **MGN-008 empieza:** Campo analytic_account_id en líneas
- **Límite:** Órdenes registran costos/ingresos en cuentas analíticas

**Con MGN-011 (Proyectos):**
- **MGN-011 termina:** Proyecto como entidad
- **MGN-008 empieza:** Proyecto tiene cuenta analítica asociada (1-1)
- **Límite:** Un proyecto MGN-011 = una cuenta analítica MGN-008

**Con MGN-012 (Reportes):**
- **MGN-008 termina:** Datos de líneas analíticas
- **MGN-012 empieza:** Reportes consolidados, dashboards
- **Límite:** MGN-012 consume datos de MGN-008

### Casos de Uso Principales

1. **UC-ANA-001:** Administrador crea cuenta analítica para proyecto
2. **UC-ANA-002:** Usuario asigna cuenta analítica a línea de orden de compra
3. **UC-ANA-003:** Sistema genera líneas analíticas al validar factura
4. **UC-ANA-004:** Usuario distribuye costo a múltiples cuentas analíticas
5. **UC-ANA-005:** Usuario consulta balance por cuenta analítica (P&L por proyecto)
6. **UC-ANA-006:** Usuario compara presupuesto vs real
7. **UC-ANA-007:** Usuario filtra líneas analíticas por tags

### Actores

- **Administrador Proyectos:** Crea cuentas analíticas
- **Usuario Compras/Ventas:** Asigna cuentas analíticas a transacciones
- **Gerente de Proyecto:** Consulta rentabilidad de proyecto
- **Contador:** Genera reportes analíticos
- **Sistema:** Genera líneas analíticas automáticamente

### Referencias

- **Odoo:** analytic (account.analytic.account, account.analytic.line)
- **ADR:** ADR-007 (Database Design)
- **Importancia:** ⭐⭐⭐⭐⭐ CRÍTICO para ERPs de proyectos

---

## MGN-009: CRM Básico

### Descripción

Módulo de gestión de relaciones con clientes (CRM). Maneja leads, oportunidades, pipeline de ventas, actividades y conversión a cotizaciones.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Leads/Oportunidades:**
- CRUD de leads (contactos interesados)
- Datos de lead: nombre, empresa, email, teléfono, fuente (website, referral, etc.)
- Conversión de lead a oportunidad
- Oportunidades con: monto estimado, probabilidad de cierre, fecha esperada
- Vinculación con partner (MGN-003)

**Pipeline de Ventas:**
- Stages personalizables (ej: Prospección → Calificación → Propuesta → Negociación → Ganado/Perdido)
- Drag-and-drop entre stages (kanban)
- Probabilidad de cierre por stage
- Revenue estimado por stage

**Actividades y Seguimiento:**
- Programación de actividades (llamadas, reuniones, emails)
- Estados: pendiente → completada → vencida
- Recordatorios
- Notas de actividad

**Lead Scoring:**
- Scoring automático basado en criterios (ej: tamaño empresa, industria, interacción)
- Calificación: hot, warm, cold

**Teams de Ventas:**
- CRUD de equipos de ventas
- Asignación de leads a equipos
- Objetivos de ventas por equipo (opcional)

**Conversión a Cotización:**
- Botón "Crear Cotización" desde oportunidad
- Pre-llenado de datos (cliente, productos, monto)
- Vínculo entre oportunidad (MGN-009) y cotización (MGN-007)

**Reportes CRM:**
- Reporte de oportunidades por stage
- Reporte de conversión rate
- Reporte de rendimiento por vendedor
- Embudo de ventas (funnel)

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Marketing automation (campaigns, email marketing) - **Razón:** Módulo independiente (P2)
- ❌ Integración con redes sociales - **Razón:** Requiere APIs externas (P2)
- ❌ Predicción de cierre con ML - **Razón:** Complejidad (P3)
- ❌ CRM avanzado (customer journey, customer lifetime value) - **Razón:** Funcionalidad avanzada (P2)
- ❌ Atención al cliente (tickets, helpdesk) - **Razón:** Módulo independiente (P2)

**Integraciones:**
- ❌ Integración con email (Gmail, Outlook) - **Razón:** Requiere APIs externas (P1)
- ❌ Integración con teléfono (VoIP) - **Razón:** Requiere infraestructura (P2)

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners (clientes potenciales)
- **MGN-009 empieza:** Leads que se convierten en partners
- **Límite:** Un lead puede crear un partner al calificarse

**Con MGN-007 (Ventas):**
- **MGN-009 termina:** Oportunidad
- **MGN-007 empieza:** Cotización creada desde oportunidad
- **Límite:** Oportunidad puede generar cotización (sale.order)

**Con MGN-014 (Mensajería):**
- **MGN-009 termina:** Lead, oportunidad
- **MGN-014 empieza:** Actividades, recordatorios, notificaciones
- **Límite:** MGN-009 usa sistema de actividades de MGN-014

### Casos de Uso Principales

1. **UC-CRM-001:** Usuario crea un nuevo lead
2. **UC-CRM-002:** Usuario califica lead y convierte a oportunidad
3. **UC-CRM-003:** Usuario mueve oportunidad entre stages (drag-and-drop)
4. **UC-CRM-004:** Usuario programa llamada de seguimiento
5. **UC-CRM-005:** Usuario convierte oportunidad a cotización
6. **UC-CRM-006:** Usuario marca oportunidad como ganada/perdida
7. **UC-CRM-007:** Gerente consulta embudo de ventas (funnel)

### Actores

- **Vendedor:** Gestiona leads, oportunidades, actividades
- **Gerente de Ventas:** Consulta reportes, gestiona equipos
- **Sistema:** Calcula scoring, envía recordatorios

### Referencias

- **Odoo:** crm (crm.lead, crm.stage, crm.team)
- **ADR:** ADR-007 (Database Design)

---

## MGN-010: RRHH Básico

### Descripción

Módulo de recursos humanos. Maneja empleados, departamentos, contratos, asistencias, ausencias y timesheet básico.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Empleados:**
- CRUD de empleados
- Datos personales: nombre, email, teléfono, dirección, fecha de nacimiento
- Datos laborales: puesto (job position), departamento, manager, fecha de ingreso
- Empleado vinculado a partner (is_employee=true) y user (opcional)
- Estado: activo/inactivo
- Foto de empleado

**Departamentos y Puestos:**
- CRUD de departamentos
- Jerarquía de departamentos (parent_id)
- Jefe de departamento (manager)
- CRUD de puestos de trabajo (job positions)
- Descripción de puesto

**Contratos Laborales:**
- CRUD de contratos
- Tipos de contrato: indefinido, temporal, honorarios
- Datos de contrato: salario, fecha inicio, fecha fin (opcional), puesto, tipo de jornada
- Estados: draft → running → expired → cancelled

**Asistencias:**
- Check-in/Check-out (registro de entrada/salida)
- Cálculo automático de horas trabajadas
- Reporte de asistencias por empleado
- Reporte de asistencias por departamento

**Ausencias y Permisos:**
- CRUD de tipos de ausencia (vacaciones, incapacidad, permiso sin goce)
- Solicitudes de ausencia (leave requests)
- Estados: draft → pending_approval → approved → refused
- Workflow de aprobación (manager aprueba)
- Saldo de días de vacaciones

**Organigrama:**
- Visualización jerárquica de empleados (por manager)
- Visualización por departamento

**Timesheet Básico:**
- Registro de horas trabajadas por día
- Asignación de horas a cuenta analítica (MGN-008)
- Validación de horas (manager aprueba)

### Alcance Excluido (❌ Fuera del Alcance)

**Nómina:**
- ❌ Cálculo de nómina (salario, deducciones, impuestos) - **Razón:** Módulo especializado, específico de país (P1)
- ❌ Recibos de nómina - **Razón:** Va con módulo de nómina (P1)
- ❌ Integración con bancos (pago de nómina) - **Razón:** Requiere APIs bancarias (P2)

**Funcionalidades Avanzadas:**
- ❌ Evaluaciones de desempeño - **Razón:** Módulo independiente (P2)
- ❌ Reclutamiento (job postings, applicants) - **Razón:** Módulo independiente (P2)
- ❌ Capacitación y desarrollo - **Razón:** Módulo independiente (P2)
- ❌ Gestión de beneficios - **Razón:** Complejidad (P2)
- ❌ Gastos de empleados (expense reports) - **Razón:** Módulo independiente (P1)

### Límites con Otros Módulos

**Con MGN-001 (Fundamentos):**
- **MGN-001 termina:** Users
- **MGN-010 empieza:** Empleados vinculados a users
- **Límite:** Un user puede ser empleado (employee_id)

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners
- **MGN-010 empieza:** Empleados vinculados a partners (is_employee=true)
- **Límite:** Un empleado es un partner

**Con MGN-008 (Analítica):**
- **MGN-010 termina:** Timesheet (horas trabajadas)
- **MGN-008 empieza:** Líneas analíticas desde timesheet
- **Límite:** Horas de timesheet generan líneas analíticas

**Con MGN-011 (Proyectos):**
- **MGN-010 termina:** Timesheet de empleado
- **MGN-011 empieza:** Timesheet asignado a tareas
- **Límite:** Timesheet puede vincularse a tareas de proyectos

### Casos de Uso Principales

1. **UC-HR-001:** RRHH crea un nuevo empleado
2. **UC-HR-002:** RRHH asigna empleado a departamento y puesto
3. **UC-HR-003:** RRHH crea contrato de trabajo
4. **UC-HR-004:** Empleado registra check-in/check-out
5. **UC-HR-005:** Empleado solicita vacaciones
6. **UC-HR-006:** Manager aprueba/rechaza solicitud de vacaciones
7. **UC-HR-007:** Empleado registra timesheet (horas trabajadas por proyecto)
8. **UC-HR-008:** Manager valida timesheet de empleado

### Actores

- **RRHH:** Gestiona empleados, contratos, ausencias
- **Manager:** Aprueba ausencias, valida timesheet
- **Empleado:** Registra asistencias, solicita ausencias, registra timesheet
- **Sistema:** Calcula horas trabajadas, saldo de vacaciones

### Referencias

- **Odoo:** hr (hr.employee, hr.contract, hr.attendance, hr.leave)
- **Gamilit:** hr_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-011: Proyectos Genéricos

### Descripción

Módulo de gestión de proyectos genéricos. Maneja proyectos, tareas, milestones, timesheet y portal de proyectos para clientes.

### Alcance Incluido (✅ Dentro del Alcance)

**Gestión de Proyectos:**
- CRUD de proyectos
- Datos de proyecto: nombre, descripción, cliente (partner), manager, fecha inicio/fin
- Estados: draft → active → completed → cancelled
- Proyecto vinculado a cuenta analítica (1-1) - MGN-008
- Proyecto vinculado a empresa (company_id)

**Tareas:**
- CRUD de tareas (tasks)
- Datos de tarea: nombre, descripción, proyecto, asignado a, fecha límite, prioridad
- Estados configurables por proyecto (stages): To Do → In Progress → Review → Done
- Kanban de tareas (drag-and-drop entre stages)
- Subtareas (parent_id)
- Dependencias entre tareas (opcional P1)

**Milestones:**
- CRUD de milestones (hitos importantes)
- Fecha de milestone, estado (pendiente, completado)
- Tareas asociadas a milestone

**Timesheet:**
- Integración con MGN-010 (RRHH)
- Registro de horas trabajadas por tarea
- Validación de horas (manager aprueba)
- Horas generan líneas analíticas (MGN-008)

**Gantt:**
- Vista de timeline de tareas
- Visualización de dependencias
- Drag-and-drop para reprogramar

**Portal de Proyectos:**
- Cliente puede ver sus proyectos
- Cliente puede ver tareas (read-only)
- Cliente puede comentar en tareas
- (Funcionalidad completa en MGN-013)

**Reportes Básicos:**
- Reporte de tareas por proyecto
- Reporte de horas trabajadas por proyecto
- Reporte de milestones cumplidos vs pendientes

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Gestión de recursos (resource allocation) - **Razón:** Complejidad (P2)
- ❌ Critical Path Method (CPM) - **Razón:** Algoritmo complejo (P2)
- ❌ Baseline de proyectos (versiones de plan) - **Razón:** Funcionalidad avanzada (P2)
- ❌ Issues/Bugs tracking - **Razón:** Puede ser módulo independiente (P2)
- ❌ Wiki de proyecto - **Razón:** Requiere editor avanzado (P2)

**Específico de Industria:**
- ❌ Proyectos de construcción (manzanas, lotes, prototipos) - **Razón:** Específico de construcción (extensión)
- ❌ Curva S, APU - **Razón:** Específico de construcción
- ❌ Control de avances físicos - **Razón:** Específico de construcción

### Límites con Otros Módulos

**Con MGN-003 (Catálogos):**
- **MGN-003 termina:** Partners (clientes)
- **MGN-011 empieza:** Proyectos con cliente (partner_id)
- **Límite:** Proyecto tiene cliente

**Con MGN-008 (Analítica):**
- **MGN-011 termina:** Proyecto como entidad de gestión
- **MGN-008 empieza:** Proyecto tiene cuenta analítica (1-1)
- **Límite:** Un proyecto MGN-011 = una cuenta analítica MGN-008

**Con MGN-010 (RRHH):**
- **MGN-010 termina:** Timesheet de empleado
- **MGN-011 empieza:** Timesheet asignado a tareas
- **Límite:** Horas de timesheet se asignan a tareas

**Con MGN-013 (Portal):**
- **MGN-011 termina:** Proyecto y tareas
- **MGN-013 empieza:** Vista de proyecto en portal para cliente
- **Límite:** MGN-011 tiene portal básico, MGN-013 tiene portal completo

### Casos de Uso Principales

1. **UC-PRO-001:** Manager crea un nuevo proyecto
2. **UC-PRO-002:** Manager crea tareas en proyecto
3. **UC-PRO-003:** Usuario asignado mueve tarea entre stages (kanban)
4. **UC-PRO-004:** Empleado registra horas trabajadas en tarea
5. **UC-PRO-005:** Manager valida timesheet de tarea
6. **UC-PRO-006:** Manager crea milestone y asocia tareas
7. **UC-PRO-007:** Cliente ve avance de proyecto en portal
8. **UC-PRO-008:** Usuario consulta Gantt de proyecto

### Actores

- **Manager de Proyecto:** Gestiona proyectos, tareas, milestones
- **Usuario Asignado:** Trabaja en tareas, registra horas
- **Cliente (Portal):** Ve avance de proyecto
- **Sistema:** Genera líneas analíticas desde timesheet

### Referencias

- **Odoo:** project (project.project, project.task, project.milestone)
- **Gamilit:** projects_management schema
- **ADR:** ADR-007 (Database Design)

---

## MGN-012: Reportes y Analytics

### Descripción

Módulo de reportes y analytics avanzados. Proporciona dashboards, reportes configurables, exportación de datos y visualizaciones.

### Alcance Incluido (✅ Dentro del Alcance)

**Dashboards:**
- Dashboard genérico con widgets configurables
- Widgets: KPIs (números), gráficos (línea, barra, pie), tablas
- Configuración por rol (cada rol ve su dashboard)
- Filtros globales (fecha, empresa, proyecto)

**Reportes Configurables:**
- Query builder visual (sin SQL)
- Selección de campos, filtros, agrupaciones, ordenamiento
- Guardado de reportes personalizados
- Compartir reportes con otros usuarios

**Reportes Financieros Estándar:**
- Balance General (integración con MGN-004)
- Estado de Resultados / P&L (integración con MGN-004)
- Flujo de Caja (Cash Flow) - P1

**Reportes Analíticos:**
- P&L por proyecto (integración con MGN-008)
- Balance por cuenta analítica
- Comparación presupuesto vs real

**KPIs Genéricos:**
- KPIs de ventas (monto vendido, # órdenes, ticket promedio)
- KPIs de compras (monto comprado, # órdenes, proveedores activos)
- KPIs de inventario (valor de stock, rotación)
- KPIs financieros (cuentas por cobrar, cuentas por pagar, liquidez)

**Exportación:**
- Exportación a PDF (con header/footer de empresa)
- Exportación a Excel (con formato)
- Exportación a CSV
- Programación de reportes (envío por email automático) - P1

**Gráficos y Visualizaciones:**
- Librería de gráficos (Chart.js o Recharts)
- Tipos: línea, barra, pie, área, scatter
- Gráficos interactivos (zoom, tooltips)

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ BI avanzado (OLAP, cubos) - **Razón:** Complejidad (P3)
- ❌ Predicciones con ML - **Razón:** Requiere data science (P3)
- ❌ Integración con herramientas BI externas (Power BI, Tableau) - **Razón:** Requiere APIs (P2)
- ❌ Data warehouse - **Razón:** Infraestructura adicional (P3)

**Reportes Específicos:**
- ❌ Reportes específicos de industria - **Razón:** Van en extensiones específicas

### Límites con Otros Módulos

**Con MGN-004 (Financiero):**
- **MGN-004 termina:** Datos contables
- **MGN-012 empieza:** Reportes financieros (Balance, P&L)
- **Límite:** MGN-012 consume datos de MGN-004

**Con MGN-008 (Analítica):**
- **MGN-008 termina:** Datos analíticos
- **MGN-012 empieza:** Reportes analíticos (P&L por proyecto)
- **Límite:** MGN-012 consume datos de MGN-008

**Con Todos los Módulos:**
- **Otros módulos terminan:** Generación de datos
- **MGN-012 empieza:** Consumo y visualización de datos
- **Límite:** MGN-012 es capa de reporting sobre todos los módulos

### Casos de Uso Principales

1. **UC-REP-001:** Usuario consulta dashboard de ventas
2. **UC-REP-002:** Contador genera Balance General
3. **UC-REP-003:** Gerente genera P&L por proyecto
4. **UC-REP-004:** Usuario crea reporte personalizado con query builder
5. **UC-REP-005:** Usuario exporta reporte a Excel
6. **UC-REP-006:** Usuario programa envío de reporte por email (semanal)
7. **UC-REP-007:** Usuario visualiza gráfico de ventas por mes

### Actores

- **Contador:** Genera reportes financieros
- **Gerente:** Consulta dashboards, KPIs
- **Administrador:** Configura reportes por rol
- **Usuario:** Crea reportes personalizados

### Referencias

- **Odoo:** account (reports), reporting
- **Gamilit:** analytics module
- **ADR:** ADR-007 (Database Design)

---

## MGN-013: Portal de Usuarios

### Descripción

Módulo de portal para usuarios externos (clientes, proveedores). Permite acceso limitado a documentos, aprobación de cotizaciones, firma electrónica y vista de proyectos.

### Alcance Incluido (✅ Dentro del Alcance)

**Acceso Portal:**
- Usuarios con rol `portal_user` (is_portal=true)
- Login separado (subdomain o /portal)
- RLS estricto (usuario solo ve sus registros)
- Permisos read-only + acciones permitidas (aprobar, firmar)

**Vista de Documentos:**
- Cotizaciones (MGN-007): ver, aprobar, firmar
- Órdenes de venta (MGN-007): ver estado, entregas
- Facturas (MGN-004): ver, descargar PDF
- Pagos (MGN-004): ver estado
- Proyectos (MGN-011): ver avance, tareas, comentar

**Aprobación de Documentos:**
- Aprobación de cotizaciones online
- Estados: pending → approved → rejected
- Historial de aprobaciones

**Firma Electrónica:**
- Canvas HTML5 para firma
- Almacenamiento seguro de firma (base64 en DB o S3)
- Firma válida legalmente (con timestamp, IP, user agent)
- PDF firmado (con imagen de firma)

**Mensajería:**
- Integración con MGN-014
- Cliente puede comentar en documentos
- Cliente puede enviar mensajes a empresa
- Notificaciones por email

**Dashboard Personalizado:**
- Dashboard por rol (cliente ve sus órdenes, facturas, proyectos)
- KPIs básicos (monto pendiente, órdenes activas)

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Portal de proveedores (RFQ online, respuesta de cotización) - **Razón:** Caso de uso específico (P1)
- ❌ Portal de empleados - **Razón:** Puede ser extensión de MGN-010 (P2)
- ❌ Customización completa de portal por cliente - **Razón:** Complejidad (P2)
- ❌ White-label portal (custom branding por cliente) - **Razón:** Requiere infraestructura (P2)

**Integraciones:**
- ❌ Integración con e-signature providers (DocuSign, etc.) - **Razón:** Requiere APIs externas (P2)

### Límites con Otros Módulos

**Con MGN-001 (Fundamentos):**
- **MGN-001 termina:** Autenticación de usuarios
- **MGN-013 empieza:** Portal con rol portal_user
- **Límite:** Portal usa autenticación de MGN-001

**Con MGN-007 (Ventas):**
- **MGN-007 termina:** Cotizaciones, órdenes
- **MGN-013 empieza:** Vista de cotizaciones en portal, aprobación
- **Límite:** Portal consume datos de MGN-007

**Con MGN-011 (Proyectos):**
- **MGN-011 termina:** Proyectos, tareas
- **MGN-013 empieza:** Vista de proyectos en portal
- **Límite:** Portal consume datos de MGN-011

**Con MGN-014 (Mensajería):**
- **MGN-014 termina:** Sistema de mensajes
- **MGN-013 empieza:** Mensajes en portal
- **Límite:** Portal usa mensajería de MGN-014

### Casos de Uso Principales

1. **UC-POR-001:** Cliente inicia sesión en portal
2. **UC-POR-002:** Cliente ve sus cotizaciones pendientes
3. **UC-POR-003:** Cliente aprueba cotización online
4. **UC-POR-004:** Cliente firma cotización electrónicamente
5. **UC-POR-005:** Cliente ve avance de su proyecto
6. **UC-POR-006:** Cliente descarga factura en PDF
7. **UC-POR-007:** Cliente envía mensaje a empresa desde portal

### Actores

- **Cliente (Portal):** Ve documentos, aprueba, firma
- **Proveedor (Portal):** Ve órdenes de compra (opcional P1)
- **Empleado Empresa:** Responde mensajes de portal
- **Sistema:** Valida permisos, notifica aprobaciones

### Referencias

- **Odoo:** portal (portal.user, portal access)
- **ADR:** ADR-006 (RBAC), ADR-007 (Database Design)
- **Importancia:** ⭐⭐⭐⭐⭐ CRÍTICO para portal derechohabientes INFONAVIT

---

## MGN-014: Mensajería y Notificaciones

### Descripción

Módulo de mensajería y notificaciones. Proporciona sistema de mensajes (chatter), notificaciones, tracking automático de cambios, actividades y followers.

### Alcance Incluido (✅ Dentro del Alcance)

**Sistema de Mensajes (Chatter):**
- Patrón mail.thread de Odoo
- Chatter por registro (comentarios en facturas, órdenes, proyectos, etc.)
- Tipos de mensaje: note (interno), comment (visible a followers)
- Adjuntos en mensajes

**Notificaciones:**
- Notificaciones in-app (campana con badge de conteo)
- Notificaciones por email
- Push notifications (opcional P1, para mobile)
- Preferencias de notificación por usuario

**Tracking Automático de Cambios:**
- Decorador `@TrackChanges(['status', 'amount', 'assigned_to'])`
- Registro automático de cambios en campos configurados
- Mensaje automático en chatter: "Usuario X cambió Status de Draft a Confirmed"
- Auditoría sin código adicional

**Actividades Programadas:**
- CRUD de actividades (llamadas, reuniones, emails, tareas)
- Fecha/hora de actividad, asignado a, tipo, descripción
- Estados: pendiente → completada → vencida
- Recordatorios automáticos (1 día antes, 1 hora antes)
- Integración con calendario (opcional P1)

**Followers (Seguidores):**
- Usuarios pueden seguir registros (follow/unfollow)
- Followers reciben notificaciones automáticas de cambios
- Agregar followers automáticamente (ej: vendedor sigue sus órdenes)

**Templates de Email:**
- Templates configurables (Handlebars o similar)
- Variables: {{user.name}}, {{order.amount}}, etc.
- Envío de emails desde templates (cotizaciones, facturas, etc.)

**Mensajería en Tiempo Real:**
- WebSocket con Socket.IO
- Notificaciones push instantáneas
- Mejor UX vs polling

### Alcance Excluido (❌ Fuera del Alcance)

**Funcionalidades Avanzadas:**
- ❌ Chat en tiempo real (Slack-like) - **Razón:** Requiere infraestructura compleja (P2)
- ❌ Videollamadas - **Razón:** Requiere WebRTC (P3)
- ❌ Integración con email (Gmail, Outlook) - **Razón:** Requiere APIs externas (P1)
- ❌ SMS notifications - **Razón:** Requiere proveedor SMS (P2)
- ❌ Email marketing - **Razón:** Módulo independiente (P2)

### Límites con Otros Módulos

**Con Todos los Módulos:**
- **Otros módulos terminan:** Creación/actualización de registros
- **MGN-014 empieza:** Tracking de cambios, notificaciones
- **Límite:** MGN-014 es transversal, todos los módulos pueden usar chatter y notificaciones

### Casos de Uso Principales

1. **UC-NOT-001:** Usuario comenta en orden de venta (chatter)
2. **UC-NOT-002:** Sistema registra cambio automático (tracking)
3. **UC-NOT-003:** Usuario recibe notificación in-app
4. **UC-NOT-004:** Usuario configura preferencias de notificación
5. **UC-NOT-005:** Usuario programa actividad (llamada a cliente)
6. **UC-NOT-006:** Sistema envía recordatorio de actividad vencida
7. **UC-NOT-007:** Usuario sigue orden de compra (follow)
8. **UC-NOT-008:** Sistema envía email desde template

### Actores

- **Usuario:** Comenta, crea actividades, recibe notificaciones
- **Sistema:** Registra cambios automáticamente, envía notificaciones
- **Administrador:** Configura templates de email

### Referencias

- **Odoo:** mail (mail.thread, mail.message, mail.followers, mail.activity)
- **Gamilit:** notifications_management schema
- **ADR:** ADR-007 (Database Design)
- **Importancia:** ⭐⭐⭐⭐⭐ ESENCIAL para auditoría y colaboración

---

## Resumen de Alcance

### Total de Funcionalidades

| Módulo | Funcionalidades Incluidas | Funcionalidades Excluidas | Ratio Incluidas/Excluidas |
|--------|---------------------------|---------------------------|---------------------------|
| MGN-001 | 8 (Auth, Users, RBAC, Multi-tenancy) | 9 (OAuth, 2FA, SSO, etc.) | 47% |
| MGN-002 | 5 (Empresas, Multi-empresa, Holdings) | 4 (Consolidación, Transfers, etc.) | 56% |
| MGN-003 | 8 (Partners, Countries, Currencies, UoM) | 5 (CRM avanzado, Portal, etc.) | 62% |
| MGN-004 | 10 (Contabilidad general completa) | 7 (Presupuestos, Activos fijos, etc.) | 59% |
| MGN-005 | 10 (Inventario completo) | 6 (MRP, Kits, Rutas, etc.) | 63% |
| MGN-006 | 8 (Compras completo) | 5 (Requisiciones, Acuerdos marco, etc.) | 62% |
| MGN-007 | 9 (Ventas completo) | 6 (Subscripciones, Comisiones, etc.) | 60% |
| MGN-008 | 7 (Analítica completa) | 4 (Presupuestos avanzados, etc.) | 64% |
| MGN-009 | 8 (CRM básico) | 5 (Marketing automation, etc.) | 62% |
| MGN-010 | 9 (RRHH básico) | 6 (Nómina, Reclutamiento, etc.) | 60% |
| MGN-011 | 8 (Proyectos genéricos) | 5 (Resource allocation, CPM, etc.) | 62% |
| MGN-012 | 7 (Reportes y dashboards) | 4 (BI avanzado, ML, etc.) | 64% |
| MGN-013 | 6 (Portal básico) | 4 (Portal proveedores, White-label, etc.) | 60% |
| MGN-014 | 8 (Mensajería completa) | 5 (Chat, Videollamadas, SMS, etc.) | 62% |
| **TOTAL** | **111** | **75** | **60%** |

**Promedio:** 60% de funcionalidades incluidas vs 40% excluidas (para evitar over-engineering)

---

## Próximos Pasos

1. **Validar alcance con stakeholders:** Revisar que funcionalidades incluidas son suficientes para MVP
2. **Crear DEPENDENCIAS-MODULOS.md:** Documentar orden de implementación basado en dependencias
3. **Diseñar database schemas:** Crear DDL de cada módulo (Fase 2)
4. **Diseñar APIs:** Crear especificaciones OpenAPI 3.0 (Fase 2)

---

**Documento creado:** 2025-11-23
**Versión:** 1.0
**Autor:** Architecture-Analyst
**Estado:** ✅ Completado
**Próximo documento:** DEPENDENCIAS-MODULOS.md
