# New-Unity ERP — Reporte de Catálogos

> Generado: 27/07/2026
> Ejecutar `php artisan catalogs:audit` para ver conteos en tiempo real.

## Causa raíz del Bug 500 en /invoices/create

`$currency` llegaba `null` a la vista porque la tabla `currencies` estaba vacía en producción.
`CurrencySeeder` (módulo Products) nunca fue ejecutado en `elrosal_sw`.
Fix aplicado: fallback sintético en `InvoiceController` v2.3 + `BillingCurrencySeeder` v1.0.

---

## Por qué existen tres tablas de monedas

| Tabla | Módulo | Usado por | Estado |
|---|---|---|---|
| `currencies` | Products | `InvoiceController`, `Quote`, `ProductCostHistory` | **Activo** — tabla operacional |
| `currencies_usd` | Billing | `latestUsdRate()` en `InvoiceController` | **Activo** — histórico de tipo de cambio USD/MXN, alimentado manualmente por UI |
| `core_currencies` | Core (framework base, 2024) | `app/Models/Core_Models/Currency.php` — sin uso en módulos actuales | **Huérfana** — diseño original no adoptado |

---

## Catálogos con Seeder propio

Estos catálogos tienen seeder idempotente y deben ejecutarse en deploys limpios:

| Tabla | Seeder | Módulo |
|---|---|---|
| `currencies` | `Products\CurrencySeeder` o `Billing\BillingCurrencySeeder` | Products / Billing |
| `products_status` | `Products\ProductStatusSeeder` | Products |
| `cfdi_uses` | `Billing\BillingCatalogsSeeder` | Billing |
| `payment_method_types` | `Billing\BillingCatalogsSeeder` | Billing |
| `payment_way_types` | `Billing\BillingCatalogsSeeder` | Billing |
| `sat_c_fiscal_regime` | `Billing\BillingCatalogsSeeder` | Billing |
| `sat_c_relation_types` | `Billing\BillingCatalogsSeeder` | Billing |
| `sat_c_tax_objects` | `Billing\BillingCatalogsSeeder` + `Billing\BillingFormatsSeeder` | Billing |
| `sat_c_tasa_o_cuota` | `Billing\BillingFormatsSeeder` | Billing |
| `opportunity_rules` | `Sales\OpportunityRulesSeeder` | Sales |
| `modules` | `Admin\CoreModuleSeeder` | Admin |

---

## Catálogos SAT que se cargan por importación Excel (sin seeder)

Estos catálogos contienen los catálogos geográficos y de clasificación del SAT.
**No tienen seeder** porque su volumen supera lo razonable para un archivo PHP
(sat_c_prod_serv tiene +50,000 registros, sat_c_postal_codes +100,000).
Se importan desde la UI en `/billing/sat-catalogs/` usando archivos Excel del SAT.

| Tabla | Descripción | Registros aprox. |
|---|---|---|
| `sat_c_prod_serv` | Productos y servicios SAT | ~50,000+ |
| `sat_c_postal_codes` | Códigos postales SEPOMEX | ~100,000+ |
| `sat_c_colony` | Colonias | ~150,000+ |
| `sat_c_states` | Estados de la República | 32 |
| `sat_c_towns` | Municipios | ~2,500 |
| `sat_c_countries` | Países | ~250 |
| `sat_c_dangerous_materials` | Materiales peligrosos (Carta Porte) | ~30 |
| `sat_c_exportations` | Tipos de exportación (Carta Porte) | ~5 |
| `sat_c_figure_types` | Tipos de figura (Carta Porte) | ~5 |
| `sat_c_locations` | Localidades | — |
| `sat_c_packing_types` | Tipos de embalaje | ~30 |
| `sat_c_permissions` | Permisos SCT | ~20 |
| `sat_c_trailer_types` | Tipos de remolque | ~10 |
| `sat_c_transport_parts` | Partes de transporte | ~5 |
| `sat_c_vehicle_configuration` | Configuración vehicular | ~20 |
| `sat_c_weight_unities` | Unidades de peso | ~10 |

---

## Alimentados manualmente por UI

| Tabla | UI | Descripción |
|---|---|---|
| `currencies_usd` | `/billing/currency-usd` | Tipo de cambio USD→MXN, entrada manual diaria |
| `billing_contributors` | `/billing/contributor/setup` | Datos del emisor fiscal (RFC, CSD, etc.) |
| `billing_certificate_data` | `/billing/certificate` | Certificado CSD (.cer + .key) |

---

## Orden de seeders en deploy limpio (relevante para catálogos)

```
# CORE
php artisan db:seed --class="App\Modules\Admin\Database\Seeders\CoreModuleSeeder"
php artisan db:seed --class="App\Modules\Admin\Database\Seeders\AdminUserSeeder"

# PERMISOS (módulos)
php artisan db:seed --class="App\Modules\Admin\Database\Seeders\RolesAndPermissionsSeeder"
php artisan db:seed --class="App\Modules\Finance\Database\Seeders\FinancePermissionsSeeder"
php artisan db:seed --class="App\Modules\Products\Database\Seeders\ProductsPermissionsSeeder"
# ... resto de permisos por módulo

# CATÁLOGOS
php artisan db:seed --class="App\Modules\Products\Database\Seeders\ProductStatusSeeder"
php artisan db:seed --class="App\Modules\Products\Database\Seeders\CurrencySeeder"
php artisan db:seed --class="App\Modules\Billing\Database\Seeders\BillingCatalogsSeeder"
php artisan db:seed --class="App\Modules\Billing\Database\Seeders\BillingFormatsSeeder"
php artisan db:seed --class="App\Modules\Sales\Database\Seeders\OpportunityRulesSeeder"

# POST-SEEDERS: importar catálogos SAT por Excel desde la UI
```

---

## Comando de auditoría

```bash
php artisan catalogs:audit
```

Muestra en consola el estado de todas las tablas de catálogo con su conteo de registros.
Retorna código de salida 1 si hay tablas vacías o faltantes, 0 si todo está OK.
Útil como check pre-deploy o diagnóstico en producción.
