=========================================================
  ALIGANT ERP V5  ·  MÓDULO INVENTARIO
=========================================================

QUÉ INCLUYE
- Bodegas (CRUD): empresa, sucursal opcional, nombre, tipo
  (Central / Sucursal / Producción / Merma / Virtual), activa.
- Stock por bodega: producto, categoría, empresa, bodega, unidad
  de stock, stock actual, stock mínimo y estado
  (Normal / Bajo / Crítico / Sin stock).
- Movimientos: historial completo con fecha, empresa, bodega,
  producto, tipo, cantidad, unidad, documento, usuario y observación.
- Traspasos entre bodegas (descuenta origen, aumenta destino,
  genera 2 movimientos: salida + entrada).
- Ajustes manuales con motivo obligatorio.
- Inventario físico: conteo por bodega y aplicación de diferencias.

REGLA CLAVE
El stock SIEMPRE se maneja en la unidad de stock del producto
(ej: merluza se compra en cajas pero su stock es en Kg).
Todo cambio de stock pasa por un MOVIMIENTO (StockService): el
stock nunca se edita "a mano". El stock actual es la suma firmada
de todos los movimientos del producto en esa bodega.

---------------------------------------------------------
DÓNDE PEGAR LOS ARCHIVOS
Descomprime el ZIP DENTRO de:
   C:\xampp2\htdocs\aligant_erp_v5\
y acepta sobrescribir. El ZIP respeta la estructura del proyecto:

  app\Services\StockService.php                     (nuevo)
  app\Models\  -> Bodega, MovimientoStock (ACTUALIZADOS),
                  Stock, Traspaso, TraspasoDetalle, Ajuste,
                  InventarioFisico, InventarioFisicoDetalle (nuevos)
  app\Http\Controllers\  -> Bodega, Stock, MovimientoStock,
                  Traspaso, Ajuste, InventarioFisico
  app\Http\Requests\     -> BodegaRequest, TraspasoRequest, AjusteRequest
  database\migrations\   -> 8 migraciones (2025_06_01_*)
  database\seeders\InventarioSeeder.php
  config\permisos.php                               (REEMPLAZA)
  routes\web.php                                    (REEMPLAZA)
  resources\views\layouts\sidebar.blade.php         (REEMPLAZA)
  resources\views\bodegas|stock|movimientos|traspasos|ajustes|fisico\*

IMPORTANTE (sobrescrituras compatibles):
- Bodega y MovimientoStock se ACTUALIZAN: conservan todo lo de
  Abastecimiento y agregan los campos nuevos. No rompen nada.
- routes\web.php, config\permisos.php y sidebar.blade.php vienen
  COMPLETOS (todo lo anterior + inventario). Reemplázalos enteros.

---------------------------------------------------------
COMANDOS (consola en C:\xampp2\htdocs\aligant_erp_v5\)

  php artisan migrate
  php artisan db:seed --class=Database\Seeders\InventarioSeeder
  php artisan db:seed --class=Database\Seeders\SuperAdminSeeder
  php artisan optimize:clear

Luego en el navegador: Ctrl + F5.

- migrate: crea/ajusta las tablas (bodegas, stocks, traspasos,
  ajustes, inventarios_fisicos, movimientos_stock).
- InventarioSeeder: crea la Bodega Central (BCEN) de Supermar y
  RECALCULA el stock a partir de los movimientos ya existentes
  (incluye los ingresos por compra de Abastecimiento).
- SuperAdminSeeder: regenera los permisos e incluye los nuevos
  módulos (bodegas, stock, movimientos, traspasos, ajustes,
  inventario_fisico) para el rol Super Administrador.

---------------------------------------------------------
FLUJO INVENTARIO FÍSICO
1) Inventario físico > Nuevo: eliges bodega + fecha. Al crear se
   toma una "foto" del stock actual como líneas a contar.
2) En la ficha ingresas el stock contado y "Guardar conteo"
   (calcula la diferencia).
3) "Aplicar diferencias al stock": genera un ajuste por cada
   diferencia y cierra el inventario.

REGLAS APLICADAS
- No se puede traspasar más de lo disponible (se valida antes).
- No se permite stock negativo (salvo el inventario físico, que
  puede corregir hacia abajo con permiso al aplicar).
- Botón "Recalcular desde movimientos" en Stock por si necesitas
  reconstruir el stock cacheado.
=========================================================
