# Indice de Requerimientos: MGN-005 Catalogs

## Identificacion

| Campo | Valor |
|-------|-------|
| **Modulo** | MGN-005 |
| **Nombre** | Catalogs - Catalogos Maestros |
| **Prioridad** | P0 (Core) |
| **Version** | 1.0 |
| **Fecha** | 2025-12-05 |

---

## Descripcion General

El modulo de Catalogos proporciona datos maestros compartidos y especificos de tenant para el funcionamiento del ERP. Se divide en:

1. **Catalogos Globales** - Datos compartidos por todos los tenants (paises, monedas)
2. **Catalogos por Tenant** - Datos especificos de cada tenant (contacts, categorias, UoM)

**Referencia Odoo:**
- `res.partner` - Contacts (clientes, proveedores, empleados)
- `res.country` / `res.country.state` - Paises y estados
- `res.currency` / `res.currency.rate` - Monedas y tasas
- `uom.category` / `uom.uom` - Unidades de medida
- `res.partner.category` - Tags/categorias de contactos

---

## Resumen de Requerimientos

| ID | Titulo | Prioridad | Estado |
|----|--------|-----------|--------|
| RF-CATALOG-001 | Gestion de Contactos | Alta | Draft |
| RF-CATALOG-002 | Paises y Estados (Global) | Alta | Draft |
| RF-CATALOG-003 | Monedas y Tasas de Cambio (Global) | Alta | Draft |
| RF-CATALOG-004 | Unidades de Medida | Media | Draft |
| RF-CATALOG-005 | Categorias y Tags | Media | Draft |

---

## Arquitectura de Catalogos

### Catalogos Globales (Sin tenant_id)

Estos catalogos son compartidos por todos los tenants y no tienen `tenant_id`:

| Catalogo | Tabla | Descripcion |
|----------|-------|-------------|
| Paises | `core_catalogs.countries` | ISO 3166-1 (250+ paises) |
| Estados | `core_catalogs.states` | Subdivisiones por pais |
| Monedas | `core_catalogs.currencies` | ISO 4217 (180+ monedas) |
| Moneda base | USD | Todas las tasas se referencian a USD |

**Rationale:** Estos datos son estandares internacionales que no deben variar por tenant.

### Catalogos por Tenant (Con tenant_id)

Estos catalogos tienen `tenant_id` y RLS aplicado:

| Catalogo | Tabla | Descripcion |
|----------|-------|-------------|
| Contactos | `core_catalogs.contacts` | Clientes, proveedores, etc. |
| Categorias UoM | `core_catalogs.uom_categories` | Categorias de unidades |
| Unidades | `core_catalogs.uom` | Unidades de medida |
| Contact Tags | `core_catalogs.contact_tags` | Etiquetas para contactos |
| Tasas de cambio | `core_catalogs.currency_rates` | Tasas por tenant |

---

## Modelo de Contactos

### Tipos de Contacto (Ref: Odoo res.partner)

```
CONTACT_TYPE:
  - company     # Empresa/Organizacion
  - individual  # Persona fisica
  - contact     # Contacto de empresa (child)
```

### Roles de Contacto

Un contacto puede tener multiples roles:

```
CONTACT_ROLES:
  - customer     # Cliente (puede comprar)
  - vendor       # Proveedor (puede vender)
  - employee     # Empleado (puede ser usuario)
  - other        # Otro tipo
```

### Campos Principales

```
Datos basicos:
  - name, display_name
  - contact_type (company/individual/contact)
  - parent_id (para contactos de empresa)
  - roles[] (customer, vendor, employee)

Identificacion:
  - ref (codigo interno)
  - vat (RFC/NIT/RUT)
  - company_registry

Comunicacion:
  - email, phone, mobile
  - website

Direccion:
  - street, street2, city, zip
  - state_id, country_id

Contabilidad:
  - currency_id (moneda preferida)
  - payment_terms (condiciones de pago)
  - credit_limit

Relaciones:
  - user_id (si es un usuario del sistema)
  - commercial_partner_id (empresa matriz)
```

---

## Dependencias

### Requiere

| Modulo | Razon |
|--------|-------|
| MGN-001 Auth | Campos created_by, updated_by |
| MGN-004 Tenants | tenant_id para catalogos por tenant |

### Requerido por

| Modulo | Razon |
|--------|-------|
| MGN-010 Financial | Cuentas por pais, moneda |
| MGN-011 Inventory | Productos, UoM |
| MGN-012 Purchasing | Proveedores |
| MGN-013 CRM | Clientes, contactos |

---

## Metricas de Exito

| Metrica | Objetivo |
|---------|----------|
| Contactos por tenant | Sin limite |
| Busqueda de contactos | < 100ms |
| Tasas de cambio por moneda | Historico completo |
| UoM conversiones | Precision 6 decimales |

---

## Notas de Implementacion

### Diferencias con Odoo

| Aspecto | Odoo | ERP Suite |
|---------|------|-----------|
| Paises/Monedas | Por company (company_id) | Global (sin tenant_id) |
| Partner/User | Herencia delegada | Tablas separadas con FK |
| UoM | Global | Por tenant |
| Currency rates | Por company | Por tenant |

### Seed de Datos

Los catalogos globales (paises, monedas) se cargan desde archivos ISO:
- ISO 3166-1 para paises
- ISO 4217 para monedas
- Datos iniciales proporcionados en migracion

---

## Historial

| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | System | Creacion inicial basada en Odoo |
