===================================================================
 ALIGANT ERP V5 - MÓDULO MAESTROS (Productos / Categorías /
 Unidades de medida / Conversiones de producto)
===================================================================
Solo el MAESTRO de productos, preparado para la lógica real
Supermar/Samag. NO incluye compras, recepción, inventario,
traspasos, ventas ni producción (eso vendrá después; el diseño ya
queda listo para conectarlos).

-------------------------------------------------------------------
 1) DÓNDE PEGA CADA ARCHIVO  (raíz: C:\xampp2\htdocs\aligant_erp_v5\)
-------------------------------------------------------------------
NUEVOS:
  config\permisos.php                         (REEMPLAZA: agrega módulos maestros)
  database\migrations\2025_04_01_000001_create_categorias_table.php
  database\migrations\2025_04_01_000002_create_unidades_medida_table.php
  database\migrations\2025_04_01_000003_create_productos_table.php
  database\migrations\2025_04_01_000004_create_producto_conversiones_table.php
  database\seeders\MaestrosSeeder.php
  app\Models\Categoria.php
  app\Models\UnidadMedida.php
  app\Models\Producto.php
  app\Models\ProductoConversion.php
  app\Http\Controllers\ProductoController.php
  app\Http\Controllers\CategoriaController.php
  app\Http\Controllers\UnidadMedidaController.php
  app\Http\Controllers\ProductoConversionController.php
  app\Http\Requests\ProductoRequest.php
  app\Http\Requests\CategoriaRequest.php
  app\Http\Requests\UnidadMedidaRequest.php
  app\Http\Requests\ProductoConversionRequest.php
  resources\views\productos\{index,create,edit,show,_form}.blade.php
  resources\views\categorias\{index,create,edit,show,_form}.blade.php
  resources\views\unidades\{index,create,edit,show,_form}.blade.php
  resources\views\conversiones\{index,create,edit,_form}.blade.php

REEMPLAZAN:
  routes\web.php                              (agrega rutas de maestros)
  resources\views\layouts\sidebar.blade.php   (nueva sección "Maestros")

NO se toca: Empresas, Sucursales, Usuarios, Roles, Permisos, layout/paleta.

-------------------------------------------------------------------
 2) COMANDOS PARA QUE SURJAN LOS CAMBIOS
-------------------------------------------------------------------
  php artisan migrate
  php artisan db:seed --class=Database\\Seeders\\MaestrosSeeder
  php artisan optimize:clear
  -> recarga con Ctrl+F5

  (Opcional) Para que el rol Super Administrador tome los permisos de
  los nuevos módulos de maestros:
  php artisan db:seed --class=Database\\Seeders\\SuperAdminSeeder

-------------------------------------------------------------------
 3) CÓMO MODELA EL CASO REAL (merluza)
-------------------------------------------------------------------
  - Unidad de COMPRA:     Caja        (unidad_compra_id)
  - Unidad de STOCK:      Kg          (unidad_stock_id)  <- el stock se controla aquí
  - Unidad de VENTA:      Kg          (unidad_venta_id)
  - Unidad de PRODUCCIÓN: Bandeja/Un  (unidad_produccion_id, opcional)
  - factor_compra_stock:           10 (1 caja = 10 kg estimados)
  - peso_estimado_por_unidad_compra:10 (kg estimados por caja)
  - permite_peso_variable:         Sí (al recibir se pesa el real, ej. 96 kg)
  - Tipo:
      * Merluza a granel  -> materia_prima  (se_compra, se_vende, controla_stock)
      * Bandeja de merluza-> producto_elaborado (se_procesa / se_vende)
  - Conversiones de producto: equivalencias extra por producto
    (ej. 1 Caja = 10 Kg), en el módulo Conversiones.

  Diferencia materia prima vs elaborado se resuelve con el campo "tipo"
  y los flags se_compra / se_vende / se_procesa / controla_stock.

-------------------------------------------------------------------
 4) REGLAS APLICADAS
-------------------------------------------------------------------
  - codigo_interno único; codigo_barras único solo si existe (nullable).
  - No se elimina un producto si tiene movimientos: hoy el método
    Producto::tieneMovimientos() devuelve false (aún no hay módulos de
    movimiento). Cuando existan compras/inventario/etc., se agregan ahí
    sus comprobaciones y el borrado queda bloqueado automáticamente.
  - No se elimina una categoría con productos, ni una unidad usada por
    productos o conversiones (integridad por FK + validación).
  - Laravel 12 + MySQL. Paleta Ocean Executive (clases aerp-) intacta.

===================================================================
