# Sprint 1.5a · Catálogos a sembrar

> Datos iniciales que se cargan automáticamente al hacer `migrate:tenant <slug>`.
> Estos son catálogos chilenos comunes a todas las funerarias.

## Filosofía

Cuando Crono Systems crea un tenant nuevo (ej: `funeraria-elcarmen.innovium.cl`), el sistema **automáticamente** siembra estos catálogos para que el admin no tenga que cargarlos manualmente. Después puede activar/desactivar items según le convenga.

---

## Seeds obligatorios (al crear tenant)

### 1. `entidades_previsionales` — 30 entradas

```sql
INSERT INTO entidades_previsionales (nombre, tipo, activo, orden_visual) VALUES
-- AFPs (administradoras de fondos de pensiones)
('HABITAT', 'afp', 1, 10),
('PROVIDA', 'afp', 1, 20),
('CUPRUM', 'afp', 1, 30),
('PLAN VITAL', 'afp', 1, 40),
('MODELO', 'afp', 1, 50),
('CAPITAL', 'afp', 1, 60),
('UNO', 'afp', 1, 70),

-- Compañías de seguros de vida
('PENTA VIDA', 'seguro', 1, 100),
('BICE VIDA', 'seguro', 1, 110),
('EUROAMÉRICA', 'seguro', 1, 120),
('CHILENA CONSOLIDADA', 'seguro', 1, 130),
('VIDA SECURITY', 'seguro', 1, 140),
('RENTA NACIONAL', 'seguro', 1, 150),
('CONSORCIO', 'seguro', 1, 160),
('CN LIFE', 'seguro', 1, 170),
('CONFUTURO', 'seguro', 1, 180),
('CORSEGUROS', 'seguro', 1, 190),
('PRINCIPAL', 'seguro', 1, 200),
('METLIFE', 'seguro', 1, 210),
('BICE SEGUROS', 'seguro', 1, 220),
('MAPFRE', 'seguro', 1, 230),
('BCI SEGUROS', 'seguro', 1, 240),
('OHIO', 'seguro', 1, 250),
('LEMANS', 'seguro', 1, 260),

-- Sociales / IPS
('IPS', 'ips', 1, 300),
('CAPREDENA', 'ips', 1, 310),
('DIPRECA', 'ips', 1, 320),
('PGU', 'ips', 1, 330),

-- Mutuales
('MUTUAL DE CARABINEROS', 'mutual', 1, 400),
('SINDICATO TRAB. Nº2', 'mutual', 1, 410);
```

### 2. `parentescos` — 19 entradas

```sql
INSERT INTO parentescos (nombre, activo, orden_visual) VALUES
('Padre', 1, 10),
('Madre', 1, 20),
('Hijo(a)', 1, 30),
('Hermano(a)', 1, 40),
('Abuelo(a)', 1, 50),
('Nieto(a)', 1, 60),
('Tío(a)', 1, 70),
('Sobrino(a)', 1, 80),
('Primo(a)', 1, 90),
('Padrastro', 1, 100),
('Madrastra', 1, 110),
('Hijastro(a)', 1, 120),
('Hermanastro(a)', 1, 130),
('Esposo(a)', 1, 140),
('Cuñado(a)', 1, 150),
('Suegro(a)', 1, 160),
('Yerno', 1, 170),
('Nuera', 1, 180),
('Otro', 1, 999);
```

### 3. `estados_civiles` — 5 entradas

```sql
INSERT INTO estados_civiles (id, nombre) VALUES
(1, 'Soltero(a)'),
(2, 'Casado(a)'),
(3, 'Viudo(a)'),
(4, 'Divorciado(a)'),
(5, 'Conviviente Civil');
```

### 4. `nacionalidades` — 160 entradas

Las copiamos del legacy (lista completa). Te dejo las **20 más usadas** acá; las otras 140 las puede generar el seeder leyendo del archivo `nacionalidades.sql`.

```sql
INSERT INTO nacionalidades (id, nacionalidad, pais, activo) VALUES
(31, 'CHILENA', 'CHILE', 1),  -- por defecto, aparece arriba
(8, 'ARGENTINA', 'ARGENTINA', 1),
(120, 'PERUANA', 'PERU', 1),
(19, 'BOLIVIANA', 'BOLIVIA', 1),
(35, 'COLOMBIANA', 'COLOMBIA', 1),
(155, 'VENEZOLANA', 'VENEZUELA', 1),
(42, 'ECUATORIANA', 'ECUADOR', 1),
(64, 'HAITIANA', 'HAITI', 1),
(53, 'FRANCESA', 'FRANCIA', 1),
(76, 'ITALIANA', 'ITALIA', 1),
(47, 'ESPAÑOLA', 'ESPAÑA', 1),
(3, 'ALEMANA', 'ALEMANIA', 1),
(70, 'INGLESA', 'INGLATERRA', 1),
(114, 'NORTEAMERICANA', 'ESTADOS UNIDOS', 1),
(127, 'RUSA', 'RUSIA', 1),
(32, 'CHINA', 'CHINA', 1),
(78, 'JAPONESA', 'JAPON', 1),
(144, 'SURCOREANA', 'COREA DEL SUR', 1),
(21, 'BRASILEÑA', 'BRASIL', 1),
(103, 'MEXICANA', 'MÉXICO', 1);
-- ... resto de las 160 nacionalidades
```

### 5. `regiones`, `provincias`, `comunas` — datos públicos del SUBDERE

**16 regiones:**
1. Tarapacá
2. Antofagasta
3. Atacama
4. Coquimbo
5. Valparaíso
6. Metropolitana de Santiago
7. O'Higgins
8. Maule
9. Biobío
10. La Araucanía
11. Los Lagos
12. Magallanes
13. Los Ríos
14. Arica y Parinacota
15. Aysén
16. Ñuble

**Provincias y comunas:** dataset público disponible en GitHub (ej: https://github.com/jlhonora/lsusb/blob/master/regiones-provincias-comunas-chile.csv) o lo construye Claude Code con lookups.

⚠️ **Decisión:** sembrar las 346 comunas de una vez al hacer `migrate:tenant`. Es data estática. ~50KB.

### 6. `capillas` — 3 entradas

```sql
INSERT INTO capillas (id, nombre) VALUES
(1, 'No'),
(2, 'Cirios'),
(3, 'Eléctrica');
```

### 7. `tipos_carroza` — 4 entradas

```sql
INSERT INTO tipos_carroza (id, nombre, color) VALUES
(1, 'Blanca', 'BLANCO'),
(2, 'Negra', 'NEGRO'),
(3, 'Plata', 'GRIS'),
(4, 'Personalizada', 'OTRO');
```

---

## Seed adicional por tenant (al crear)

### 8. `sucursales` — 1 entrada inicial

```sql
INSERT INTO sucursales (nombre, direccion, activo)
VALUES ('Casa Matriz', NULL, 1);
```

El admin debe completar dirección + teléfono después.

### 9. `contratos_secuencias` — 2 entradas

```sql
INSERT INTO contratos_secuencias (tipo_contrato, ultimo_numero) VALUES
('NI', 0),
('NF', 0);
```

**Excepción para tenant `demo`:** si el tenant es `demo`, sembrar:

```sql
INSERT INTO contratos_secuencias (tipo_contrato, ultimo_numero) VALUES
('NI', 1148),  -- siguiente contrato será 1149 como Infinia real
('NF', 0);
```

Esto le da realismo cuando hagas demos a clientes.

---

## Cómo se siembra

En `app/Cli/MigrateTenantCommand.php` (que ya existe), agregar al final:

```php
// Después de aplicar todas las migrations:
$this->seedCatalogosChilenos($tenantSlug);

private function seedCatalogosChilenos(string $tenantSlug): void
{
    $sqlFiles = [
        'database/seeds/catalogos/01_entidades_previsionales.sql',
        'database/seeds/catalogos/02_parentescos.sql',
        'database/seeds/catalogos/03_estados_civiles.sql',
        'database/seeds/catalogos/04_nacionalidades.sql',
        'database/seeds/catalogos/05_regiones.sql',
        'database/seeds/catalogos/06_provincias.sql',
        'database/seeds/catalogos/07_comunas.sql',
        'database/seeds/catalogos/08_capillas.sql',
        'database/seeds/catalogos/09_tipos_carroza.sql',
        'database/seeds/tenant/01_sucursal_inicial.sql',
        'database/seeds/tenant/02_secuencias.sql',
    ];
    
    foreach ($sqlFiles as $file) {
        $sql = file_get_contents($file);
        Database::tenant($tenantSlug)->exec($sql);
    }
}
```

---

## Convenios — vacío al inicio

La tabla `convenios` se crea **vacía**. El admin de cada funeraria carga sus propios convenios en `/admin/convenios` (pantalla simple que agregamos).

Ejemplos típicos:
- "Funcionarios Públicos" — 10% descuento
- "Empleados Empresa XX" — 15% descuento
- "Sindicato Telefónica" — 20% descuento

---

## Velatorios — vacío al inicio

Idem convenios. La funeraria carga sus propios velatorios en `/admin/velatorios`.

---

## Qué hacer en demo + infinia (que ya existen)

Como demo e infinia ya están creados de Sprint 1.2, hay que correr una **migración adicional** que aplique los seeds retroactivamente:

```bash
# Comando nuevo
php scripts/innovium catalogos:seed demo
php scripts/innovium catalogos:seed infinia
```

Esto carga los catálogos chilenos en los tenants existentes sin romper datos.
