# Hoja de Ruta: Implementación de Productos Flexibles

Este documento detalla los pasos para adaptar el sistema SGB y permitir una gestión flexible de productos, incluyendo aquellos vendidos por peso, unidad o con precio abierto.

## Fase 1: Base de Datos

1.  **Respaldo Urgente:** Crear un respaldo completo de la base de datos `sgb_db` antes de realizar cualquier modificación estructural.
2.  **Modificar Tabla `productos`:** Aplicar los siguientes cambios mediante `ALTER TABLE`:
    *   Añadir `modo_venta` ENUM('UNIDAD', 'PESO', 'PRECIO_ABIERTO') NOT NULL DEFAULT 'UNIDAD' COMMENT 'Define cómo se vende el producto'.
    *   Añadir `controla_stock` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1: Descontar de stock en ventas, 0: No descontar'.
    *   **Nota Importante sobre `unidad_medida`:** Se decidió **NO renombrar** la columna `unidad_medida` en esta fase. Renombrarla ahora rompería el código PHP existente que la utiliza (ej. `inventario_nuevo2.php`, `inventario.php`). Se mantiene `unidad_medida` y su significado se interpretará junto con `modo_venta` en la lógica PHP (Fases 3 y 4).
3.  **Limpieza:** Eliminar las tablas obsoletas `productos_especiales` y `productos_especiales_default` mediante `DROP TABLE`.

## Fase 2: Datos Iniciales y Ajuste

4.  **Ajustar Productos Existentes:** Revisar todos los registros en la tabla `productos` y asignar los valores correctos para los nuevos campos (`modo_venta`, `unidad_medida_base`, `controla_stock`) según la naturaleza de cada producto.
5.  **Cargar Ejemplos Clave (Opcional):** Considerar insertar registros de ejemplo para los distintos `modo_venta` si no existen (ej. Pan por Kg, Artículo Varios, etc.) para facilitar la configuración inicial al usuario.

## Fase 3: Desarrollo Backend (PHP/Lógica del Servidor)

6.  **Módulo Admin - Gestión Productos:**
    *   Actualizar la interfaz de usuario (formularios) de creación/edición de productos para incluir campos que permitan configurar `modo_venta`, `unidad_medida_base` (condicionalmente visible/requerido), y `controla_stock`.
    *   Adaptar la lógica PHP que procesa el guardado/actualización de productos para manejar correctamente estos nuevos campos.
7.  **Lógica del Punto de Venta (POS):**
    *   Modificar el proceso de añadir un artículo al carro de ventas:
        *   Leer el `modo_venta` del producto seleccionado.
        *   Implementar flujos distintos según el `modo_venta`:
            *   **'UNIDAD':** Solicitar/usar cantidad. Calcular `precio_total = cantidad * producto.precio_venta`. Gestionar stock si `controla_stock=1`.
            *   **'PESO':** Solicitar/recibir peso. Calcular `precio_total = peso * producto.precio_venta`. Gestionar stock (en `unidad_medida_base`) si `controla_stock=1`.
            *   **'PRECIO_ABIERTO':** Solicitar precio final directamente. `precio_total = precio_ingresado`. Stock usualmente no aplica.
    *   Asegurar que la tabla `detalle_venta` almacene apropiadamente la cantidad o el peso vendido, según corresponda.
8.  **Reportes de Inventario:**
    *   Ajustar las consultas de reportes de inventario para filtrar opcionalmente por `controla_stock = 1`.
    *   Verificar que las unidades de medida se muestren de forma coherente en los reportes.

## Fase 4: Desarrollo Frontend (Interfaz de Usuario - POS)

9.  **Interfaz del POS:**
    *   Modificar la interfaz de usuario del POS para que el campo de entrada principal cambie dinámicamente según el `modo_venta` del producto (campo para cantidad, campo para peso, campo para precio).
    *   Mostrar indicadores visuales claros de la unidad de venta (ej. "/Kg", "/Un") junto al precio donde sea relevante.

## Fase 5: Pruebas Exhaustivas

10. **Pruebas Funcionales:**
    *   Validar la creación, edición y venta de productos para cada `modo_venta`.
    *   Verificar la exactitud de los cálculos de precios.
    *   Comprobar el correcto funcionamiento del descuento (o no descuento) de stock.
    *   Probar la interacción con códigos de barras existentes y la búsqueda manual de productos.
11. **Pruebas de Reportes:**
    *   Asegurar que los reportes de ventas e inventario reflejen correctamente las transacciones con los diferentes tipos de productos y unidades.

Con esta hoja de ruta implementada, el sistema podrá manejar flexiblemente productos como Panadería (unidad/peso), Pastelería (unidad), Fiambrería (peso), Verdulería (peso/unidad), Platos Preparados (unidad), Helados (unidad/peso), etc. 