# Arquitectura Pandora CRM

## Principio

`panel.pandora.farm` permanece como fuente oficial hasta el corte. `crm.pandora.farm` se desarrolla y valida en paralelo.

## Capas

- **UI:** Vue 3 + Inertia + Tailwind.
- **HTTP:** rutas Laravel, middleware de permisos y controllers.
- **Dominio:** Models/Services/Actions; la lógica de negocio no debe volver a concentrarse en un archivo monolítico.
- **Persistencia:** PostgreSQL con migrations versionadas y FK reales.
- **Migración:** conexión `legacy_mysql` de solo lectura.
- **Auditoría:** `audit_logs` para cambios críticos.

## Decisiones de datos

### Clientes

`clients` contiene identidad, contacto, facturación y clasificación VIP. Las direcciones están exclusivamente en `client_addresses`. La dirección que estaba incrustada en `clients` en MySQL se importa como dirección `Principal`.

### Órdenes

La PK interna es UUID. El número humano se conserva en `order_number`; al importar una orden legacy, `order_number` conserva el antiguo `orders.id`. Los snapshots de dirección, SKU, nombre y precio se mantienen para no alterar historia si cambia el catálogo o la dirección del cliente.

### Inventario

El saldo no se usa como único historial. `inventory_balances` contiene el saldo actual y `inventory_movements` registra movimientos. Para aves, el saldo referencia `product_variants` y utiliza `dimension_key = gallo|gallina`. Para productos comunes utiliza `dimension_key = default`.

El producto padre de aves no recibe además un balance del viejo `products.stock_qty` si tiene variantes, evitando doble contabilización.

### Seguridad

No hay credenciales en PHP. Todos los secretos viven en `.env`. El importer puede usar un usuario MySQL `SELECT` únicamente. Fortify rechaza usuarios inactivos y conserva los hashes bcrypt legacy; al iniciar sesión, Laravel puede rehashearlos de forma transparente cuando corresponda.

### PWA

La aplicación es instalable y cachea assets estáticos. No se habilita creación/edición de órdenes offline en v0.1.0 para evitar conflictos de inventario entre dispositivos.
