# DistribuWeb — Contexto del Proyecto

Sistema de gestión para distribuidoras (Argentina). Desarrollado en español.

## Stack

- **Backend:** Laravel 13, PHP 8.3+, MariaDB
- **Frontend:** Vue 3.4, Inertia.js 2.0, PrimeVue 4.0 (tema Aura), Tailwind CSS 3.4
- **Charts:** Chart.js + vue-chartjs
- **State:** Pinia, VueUse
- **Auth/Permisos:** Laravel Sanctum + Spatie laravel-permission
- **Auditoría:** Spatie laravel-activitylog
- **PDF:** laravel-dompdf | **CSV import:** league/csv
- **Rutas frontend:** Ziggy
- **Servidor local:** WAMP (usar `npm run build` en lugar de `npm run dev`)
- **Timezone:** America/Argentina/Buenos_Aires | **Locale:** es

## Roles de usuario

`admin` · `vendedor` · `deposito` · `contable`

## Módulos completados (8 sprints)

1. Autenticación (Laravel Breeze)
2. Productos — CRUD + importación CSV
3. Listas de precios — con `margin_percent` y overrides por producto
4. Contactos — clientes/proveedores/ambos, con zona y límite de crédito
5. Stock — multi-depósito, transferencias, ajustes, snapshots, movimientos
6. Facturas de venta y compra — estados: `draft/ordered/shipped/delivered/paid/cancelled` + PDF
7. Cobros y cuentas corrientes
8. Auditoría y reportes (ventas, compras, stock, cuentas)

## Estructura clave

```
app/
  Http/Controllers/   # 14 controllers
  Models/             # 12 models (todos con SoftDeletes + LogsActivity)
  Services/           # 6 servicios de lógica de negocio
  Http/Requests/      # 12 form requests

resources/js/
  Pages/              # 44 páginas Vue (Inertia)
  Components/         # 21 componentes Vue
    Layout/AppLayout.vue
    Layout/ReportLayout.vue

routes/web.php        # Todas las rutas bajo middleware auth + verified
database/migrations/  # 9 migraciones
```

## Convenciones a respetar

- Todos los modelos usan `SoftDeletes` y `LogsActivity` (Spatie)
- Permisos manejados con roles Spatie (no gates ni policies custom)
- Componentes PrimeVue se importan manualmente en cada archivo (no están registrados globalmente), excepto `Tooltip` que se registra como directiva
- Clases CSS reutilizables: `form-input`, `form-label`, `form-error`, `btn-primary`, `btn-secondary`, `btn-sm`, `card`
- Formularios con `useForm` de Inertia (no axios directo, salvo consultas de precio en facturas)
- Responder y nombrar variables/comentarios en español

## Flujo de compilación

```bash
npm run build   # Compilar assets (WAMP no usa Vite dev server)
```

## Decisiones técnicas tomadas

- **AutoComplete de PrimeVue** en lugar de `<select>` para búsqueda de productos en facturas (busca por nombre, código y unidad). Implementado en `SaleForm.vue` y `PurchaseForm.vue`.
- El array `selectedProducts` (ref paralela a `form.items`) mantiene el objeto producto completo para el v-model del AutoComplete, mientras `form.items` solo guarda `product_id`.
