# RF-MGN-002-001: Gestión de Empresas **Módulo:** MGN-002 - Empresas y Organizaciones **Prioridad:** P0 (MVP) **Story Points:** 8 **Estado:** Definido **Fecha:** 2025-11-23 ## Descripción El sistema debe permitir la creación, lectura, actualización y desactivación (soft delete) de empresas. Cada empresa tiene datos generales, fiscales, dirección y configuración. Una empresa también es un partner (patrón Odoo). ## Actores - **Actor Principal:** Administrador de Sistema - **Actores Secundarios:** Contador (configura datos fiscales) ## Precondiciones 1. Usuario administrador debe estar autenticado 2. Tenant debe estar activo 3. Catálogo de países y monedas debe estar disponible (MGN-003) ## Flujo Principal 1. Administrador accede a módulo de Gestión de Empresas 2. Administrador crea nueva empresa con datos generales: - Nombre comercial y nombre legal - RFC/NIT/Tax ID - Email corporativo, teléfono, sitio web 3. Administrador configura dirección: - Calle, número, colonia - Ciudad, estado, país, código postal 4. Administrador configura datos fiscales: - Régimen fiscal - Moneda principal (currency_id) 5. Sistema crea partner automáticamente (is_company=true) 6. Sistema vincula empresa con partner (company.partner_id) 7. Sistema guarda logo de empresa (opcional) 8. Sistema crea registro en core.companies 9. Empresa queda disponible para asignar usuarios ## Flujos Alternativos ### FA-1: Actualización de Datos de Empresa 1. Administrador selecciona empresa existente 2. Administrador modifica datos (nombre, dirección, fiscal) 3. Sistema valida cambios 4. Sistema actualiza core.companies y core.partners 5. Cambios se reflejan inmediatamente ### FA-2: Configuración de Holdings (Jerarquía) 1. Administrador crea empresa hija 2. Administrador selecciona parent_id (empresa padre/holding) 3. Sistema valida que no haya ciclos (A → B → A) 4. Sistema crea jerarquía en core.companies 5. Sistema puede visualizar organigrama de empresas ### FA-3: Desactivación de Empresa 1. Administrador desactiva empresa (status='inactive') 2. Sistema valida que no haya documentos pendientes (órdenes, facturas draft) 3. Si hay pendientes, sistema retorna error 400: "Empresa tiene documentos pendientes" 4. Si no hay pendientes, sistema desactiva empresa 5. Usuarios pierden acceso a empresa desactivada ### FA-4: Subir Logo de Empresa 1. Administrador sube logo (PNG, JPG, max 2MB) 2. Sistema valida formato y tamaño 3. Sistema guarda en storage (S3 o file system) 4. Sistema actualiza company.logo_url 5. Logo se muestra en documentos (facturas, cotizaciones) ## Reglas de Negocio - **RN-1:** Una empresa también es un partner (company.partner_id) - **RN-2:** Tax ID debe ser único por país - **RN-3:** Empresa debe tener moneda principal definida - **RN-4:** Empresa puede ser parte de holding (parent_id) - **RN-5:** No se permiten ciclos en jerarquías (validación) - **RN-6:** Empresa desactivada no permite creación de nuevos documentos - **RN-7:** Logo máximo 2MB, formatos: PNG, JPG, SVG ## Criterios de Aceptación - [ ] Administrador puede crear empresas con datos generales y fiscales - [ ] Sistema crea partner automáticamente para cada empresa - [ ] Administrador puede configurar dirección y país de empresa - [ ] Administrador puede subir logo de empresa (max 2MB) - [ ] Empresa tiene moneda principal definida - [ ] Administrador puede crear jerarquías (holdings con empresas hijas) - [ ] Sistema valida que Tax ID sea único por país - [ ] Sistema previene ciclos en jerarquías - [ ] Administrador puede desactivar empresas sin documentos pendientes - [ ] Logo de empresa se muestra en documentos (facturas, cotizaciones) ## Entidades Involucradas - **Principales:** - core.companies (name, legal_name, tax_id, currency_id, parent_id, logo_url) - core.partners (empresa también es partner) - **Relacionadas:** - core.countries (país de empresa) - core.currencies (moneda principal) ## Referencias - [ALCANCE-POR-MODULO.md - MGN-002](../../01-definicion-modulos/ALCANCE-POR-MODULO.md#mgn-002-empresas-y-organizaciones) - [Auth Schema DDL](../database-design/schemas/auth-schema-ddl.sql) - [Core Schema DDL](../database-design/schemas/core-schema-ddl.sql) - [Gap Analysis MGN-002](../../01-definicion-modulos/gaps/GAP-ANALYSIS-MGN-002.md) ## Notas Técnicas - **Patrón Odoo:** res.company (empresa también es res.partner) - **Validación Tax ID:** Regex por país (México RFC: 12-13 chars alfanumérico) - **Logo Storage:** - Desarrollo: file system local - Producción: AWS S3 o similar - **Jerarquías:** Visualización con tree view o organigrama D3.js - **Backend:** NestJS CompaniesService - **Frontend:** Formulario con tabs (General, Fiscal, Dirección) ## Dependencias - **RF Dependientes:** - RF-MGN-001-001 (Autenticación) - RF-MGN-003-001 (Partners - se crea automáticamente) - RF-MGN-003-002 (Países) - RF-MGN-003-003 (Monedas) - **Bloqueante para:** RF-MGN-002-003 (Asignación usuarios a empresas)