# RF-MGN-002-002: Configuración de Empresa

**Módulo:** MGN-002 - Empresas y Organizaciones
**Prioridad:** P0 (MVP)
**Story Points:** 5
**Estado:** Definido
**Fecha:** 2025-11-23

## Descripción

El sistema debe permitir configurar parámetros operativos y contables de cada empresa, como cuentas contables por defecto, journals, términos de pago, almacenes, y configuraciones de módulos.

## Actores

- **Actor Principal:** Administrador de Empresa
- **Actores Secundarios:** Contador (configura cuentas contables)

## Precondiciones

1. Empresa debe estar creada (RF-MGN-002-001)
2. Plan de cuentas debe estar definido (MGN-004)
3. Usuario debe tener permisos de administración de empresa

## Flujo Principal

1. Administrador accede a Configuración de Empresa
2. Administrador configura parámetros contables:
   - Cuenta de ingresos por defecto
   - Cuenta de egresos por defecto
   - Cuenta de banco principal
   - Journal de ventas, compras, banco, misceláneos
3. Administrador configura parámetros operativos:
   - Términos de pago por defecto (ej: 30 días)
   - Almacén principal
   - Prefijos de documentos (SO-, PO-, INV-)
   - Zona horaria
   - Idioma por defecto
4. Administrador configura módulos habilitados:
   - ¿Usar inventario? (true/false)
   - ¿Usar proyectos? (true/false)
   - ¿Usar CRM? (true/false)
5. Sistema valida configuración
6. Sistema guarda en core.company_settings
7. Configuración se aplica a nuevos documentos

## Flujos Alternativos

### FA-1: Configuración de Facturación Electrónica
1. Si país requiere facturación electrónica (ej: México CFDI)
2. Administrador configura credenciales de PAC
3. Administrador configura certificados (CSD)
4. Sistema valida credenciales con PAC
5. Facturación electrónica queda habilitada

### FA-2: Configuración de Multi-Moneda
1. Administrador habilita multi-moneda
2. Administrador selecciona monedas adicionales permitidas
3. Sistema configura tasas de cambio (MGN-003)
4. Documentos pueden crearse en múltiples monedas

### FA-3: Plantillas de Documentos
1. Administrador personaliza plantillas de documentos
2. Administrador sube plantilla PDF para facturas/cotizaciones
3. Sistema valida formato (HTML + CSS o PDF template)
4. Plantilla se usa en generación de PDFs

### FA-4: Configuración Inválida
1. Si administrador configura cuenta contable inexistente
2. Sistema retorna error 400: "Cuenta contable no encontrada"

## Reglas de Negocio

- **RN-1:** Configuración es por empresa (multi-empresa independiente)
- **RN-2:** Cuentas contables por defecto deben existir en plan de cuentas
- **RN-3:** Almacén principal debe existir en core.warehouses
- **RN-4:** Prefijos de documentos deben ser únicos por empresa
- **RN-5:** Zona horaria afecta fechas de documentos y reportes
- **RN-6:** Idioma por defecto aplica a emails y documentos
- **RN-7:** Configuración de módulos controla funcionalidades visibles

## Criterios de Aceptación

- [ ] Administrador puede configurar cuentas contables por defecto
- [ ] Administrador puede configurar journals por defecto
- [ ] Administrador puede configurar términos de pago por defecto
- [ ] Administrador puede configurar almacén principal
- [ ] Administrador puede personalizar prefijos de documentos
- [ ] Administrador puede configurar zona horaria e idioma
- [ ] Administrador puede habilitar/deshabilitar módulos
- [ ] Sistema valida que cuentas y almacenes existan
- [ ] Configuración se aplica a nuevos documentos
- [ ] Cambios de configuración son inmediatos

## Entidades Involucradas

- **Principales:**
  - core.company_settings (configuración por empresa)
  - core.companies (empresa propietaria)
- **Relacionadas:**
  - financial.accounts (cuentas contables)
  - financial.journals (journals)
  - inventory.warehouses (almacén principal)

## Referencias

- [ALCANCE-POR-MODULO.md - MGN-002](../../01-definicion-modulos/ALCANCE-POR-MODULO.md#mgn-002-empresas-y-organizaciones)
- [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 (campos de configuración)
- **Almacenamiento:** JSON en core.company_settings.settings_json
- **Ejemplo Settings JSON:**
  ```json
  {
    "accounting": {
      "default_income_account_id": 123,
      "default_expense_account_id": 124,
      "sales_journal_id": 1,
      "purchase_journal_id": 2
    },
    "operations": {
      "default_payment_term": "30 days",
      "default_warehouse_id": 1,
      "document_prefixes": {"SO": "SO-", "PO": "PO-"}
    },
    "regional": {
      "timezone": "America/Mexico_City",
      "language": "es_MX"
    },
    "modules": {
      "use_inventory": true,
      "use_projects": true,
      "use_crm": false
    }
  }
  ```
- **Backend:** NestJS CompanySettingsService
- **Frontend:** Formulario con tabs por categoría

## Dependencias

- **RF Dependientes:**
  - RF-MGN-002-001 (Gestión de Empresas)
  - RF-MGN-004-001 (Plan de Cuentas)
- **Bloqueante para:** Módulos transaccionales (usan configuración de empresa)
