# Venta a granel y básculas

## Paso a paso

Las tareas más comunes, resumidas. El detalle de cada una está en las secciones numeradas.

### Marcar un producto como granel (administrador)

1. Da de alta el producto en **📦 Productos → Nuevo producto**, o edítalo con **✏️** en Inventario.
2. En **Se vende por**, elige **Peso / Granel**.
3. Escribe el **Precio por kilo** y guarda.

Ver sección 2.

### Corregir un error de captura en un producto a granel (administrador)

1. Revisa qué quedó mal en **Inventario → ✏️ → 📋 Ver lotes** del producto.
2. Aplica la corrección que corresponda:
   - **Precio mal**: edita el producto (✏️), cambia el **Precio por kilo** y guarda.
   - **Costo mal**: en **Ver lotes**, pulsa **💲** en el lote, escribe el costo correcto **por kg**, el motivo y tu PIN.
   - **Cantidad mal** (por ejemplo, capturaste paquetes en lugar de kilos): usa **Ajuste de inventario** con los kg reales contados.
3. Verifica que el producto muestre la existencia, el costo y el precio esperados.

Ver sección 8.

### Vender a granel

1. En el **Punto de Venta**, haz clic en el producto (su precio dice "/kg").
2. Elige **⚖️ Por peso (kg)** y escribe el peso, o espera a que lo llene la báscula. Si el cliente pide "$50 de jamón", elige **💲 Por importe ($)** y escribe 50.
3. Pulsa **✅ Agregar al Carrito** y cobra normalmente.

Ver sección 4.

### Conectar la báscula (opcional)

1. Abre **⚙️ Configuración → Báscula** y marca **Báscula habilitada**.
2. Escribe el **Puerto** (ej. `COM3`) y la **Velocidad** (normalmente 9600).
3. Pulsa **🔌 Probar Conexión** y luego **💾 Guardar Configuración de Báscula**.

Ver sección 3.

## 1. ¿Qué es la Venta a Granel?

Es la forma de vender productos que se despachan **por peso** (queso, jamón, granos, dulces a granel, etc.) en vez de por pieza entera. Un producto marcado como "a granel" acepta cantidades con decimales (kilogramos con hasta 3 decimales, es decir, hasta gramos) y se puede vender de dos formas en el Punto de Venta:

- **Por peso**: capturando cuántos kg se están despachando (a mano, o leídos en vivo de una báscula conectada).
- **Por importe $**: el cajero teclea cuánto dinero pagó el cliente (ej. "$50 de jamón") y el sistema calcula el peso equivalente dividiendo entre el precio por kg.

Los productos normales (por pieza) **no cambian en nada**: esta es una función opcional que solo aplica a los productos que el administrador marque explícitamente como "a granel".

**Quién puede usarlo:** vender a granel en el POS lo puede hacer **cualquier empleado**, igual que una venta normal. Marcar un producto como "a granel" y configurar la báscula son acciones de **administrador únicamente**, porque viven dentro de Inventario y Configuración.

## 2. Marcar un producto como "a granel"

1. Ve a **Inventario** y da de alta un producto nuevo (o edita uno existente con **✏️**) — ver el [manual de Inventario](./inventario.md).
2. En el campo **"Se vende por"**, elige **"Peso / Granel (kg, admite decimales y venta por báscula)"** en vez de "Pieza".
3. La **Cantidad** de ese producto ahora acepta decimales (ej. `3.500` para 3.5 kg de stock) y el **Precio** se interpreta como **precio por kilogramo**.
4. Guarda normalmente.

Un producto ya creado se puede cambiar de "Pieza" a "Granel" (o viceversa) editándolo, pero lo normal es decidirlo al darlo de alta para no mezclar historial de cantidades enteras con decimales del mismo producto.

## 3. Configurar la báscula (opcional)

La venta a granel **funciona sin báscula física**, capturando el peso a mano. Si el negocio tiene una báscula conectada por USB/serial (puerto COM), se puede configurar para leer el peso en vivo:

1. En el menú lateral ve a **⚙️ Configuración → Báscula** (ver el [manual de Configuración](./configuracion.md)).
2. Marca **"Báscula habilitada"**.
3. Captura el **Puerto** (ej. `COM3`) y la **Velocidad (baud rate)** — revisa el manual de tu báscula para saber cuáles usa; 9600 es el valor más común.
4. Clic en **🔌 Probar Conexión** para guardar y verificar de inmediato si el sistema logra conectarse.
5. El estado debajo del formulario muestra si quedó **conectada**, **sin poder conectar** (con el detalle del error) o si el **módulo de báscula no está disponible en este servidor** (el paquete de software correspondiente no está instalado).
6. Clic en **💾 Guardar Configuración de Báscula** para dejarlo guardado de forma permanente (arranca solo la próxima vez que se inicie el sistema).

**Si no hay báscula conectada, o falla la conexión**, el sistema **nunca se bloquea**: el modal de venta a granel simplemente pide el peso escrito a mano, como si la báscula no existiera.

## 4. Vender un producto a granel

1. En el **Punto de Venta**, haz clic en la tarjeta de un producto marcado como "a granel" (se distingue porque el precio se muestra como **"$X.XX/kg"** y el stock como **"X.XXX kg"** en vez de un número entero). Se abre el modal **"⚖️ Venta a Granel"** en vez de agregarse directo al carrito.
2. Elige el **modo de captura**:
   - **⚖️ Por peso (kg)**: escribe el peso directamente, o espera a que se llene solo si hay una báscula conectada (el modal indica "Báscula conectada (lectura en vivo)" cuando esto está pasando).
   - **💲 Por importe ($)**: escribe cuánto dinero pagó el cliente; el sistema calcula el peso equivalente dividiendo entre el precio por kg del producto.
3. Debajo se muestra en vivo el **total a agregar** ($ y kg equivalentes), para confirmar antes de agregarlo.
4. Clic en **✅ Agregar al Carrito**.

El sistema **no deja agregar más peso del que hay en stock** — avisa cuántos kg hay disponibles si se intenta exceder el límite, igual que con productos por pieza.

## 5. El producto a granel en el carrito

- Se muestra el peso con 3 decimales (ej. `2.350 kg`) y el precio como "$/kg".
- En vez de los botones **+ / -** (que solo tienen sentido para unidades enteras), aparece un botón **✏️ Editar**, que reabre el mismo modal de venta a granel con el peso/importe actual precargado para corregirlo.
- **✕** quita el artículo del carrito igual que cualquier otro.

## 6. El ticket de una venta a granel

En el ticket impreso, un renglón de producto a granel se ve distinto a uno por pieza:

- Por pieza: `3x Coca-Cola 600ml`
- A granel: `2.350 kg x $180.00/kg — Queso Oaxaca Granel`

Esto permite que el cliente vea claramente el peso despachado y el precio por kilogramo que se le cobró.

## 7. Cómo capturar el inventario de un producto a granel

Un producto a granel se captura **siempre en kilogramos**, no en paquetes ni piezas. El costo también es **por kilo**.

**Ejemplo:** llegan 3 paquetes de jamón de 3.95 kg, y el proveedor cobra **$190 por kg**.

| Campo | Cálculo | Captura |
|---|---|---|
| Cantidad | 3 × 3.95 kg | **11.85** |
| Costo por kg | el precio del proveedor | **190.00** |
| Precio por kg | tu precio de venta | **220.00** |

Si el proveedor cobra **por paquete** (ej. $190 el paquete de 3.95 kg), convierte primero a kilos: $190 ÷ 3.95 kg = **$48.10 por kg**. Captura ese costo por kg, no el del paquete.

Para comprobar: cantidad × costo por kg debe dar, aproximadamente, lo que pagaste (11.85 kg × $190 = $2,251.50).

Para meter la mercancía, usa **📥 Agregar inventario** (o **Compras**, si tienes la factura). El formulario de edición del producto no permite cambiar cantidad ni costo cuando ya hay existencias, porque esos datos salen de los **lotes**.

## 8. Corregir un error de captura

| Qué quedó mal | Cómo se corrige |
|---|---|
| **Precio** | Edita el producto (✏️) y cambia el precio. Solo afecta ventas nuevas. |
| **Costo de un lote** capturado con *Agregar inventario*, como lote inicial o como ajuste | En **📋 Ver lotes**, pulsa **💲** en ese lote. Escribe el costo correcto, el motivo y tu PIN de administrador. |
| **Costo de un lote de Compras** | No se edita a mano: el costo sale de la factura. Cancela la compra (con PIN) y captúrala de nuevo. |
| **Cantidad** (ej. paquetes en vez de kilos) | **Ajuste de inventario** con los kg realmente contados y un motivo. Si el lote completo está mal y no se ha vendido nada, también puedes darlo de baja y agregar uno nuevo. |
| **Caducidad** | En **📋 Ver lotes**, pulsa **📅** en el lote. |

**Qué pasa al corregir el costo de un lote (💲):**
- El lote conserva su cantidad y su historial: no se borra ni se crea otro.
- La corrección queda anotada en el lote ("Costo corregido de $X a $Y: motivo"), junto con el motivo original.
- El costo del producto se recalcula con el promedio ponderado de sus lotes con existencia, y el margen se actualiza.
- Las **ventas ya hechas conservan el costo con que se vendieron**: sus ganancias en los reportes no cambian.
- No se puede corregir un lote dado de baja ni un lote de Compras.

## 9. Preguntas frecuentes

**¿Puedo convertir un producto normal en "a granel" después de haber vendido piezas de él?**
Sí, se puede editar en cualquier momento, pero no es recomendable mezclar: el historial de ventas anteriores (por pieza) no cambia, solo las ventas nuevas usarán el comportamiento de peso/decimales.

**¿Qué pasa si la báscula se desconecta a medio turno?**
El modal deja de mostrar la lectura en vivo y el estado cambia a "no conectada" — el cajero simplemente escribe el peso a mano y la venta sigue funcionando normal.

**¿El sistema redondea el peso?**
Sí, a 3 decimales (gramos). Por ejemplo, si la báscula reporta `1.2347`, el sistema lo guarda como `1.235`.

**¿Qué báscula soporta el sistema?**
Cualquier báscula que se conecte por puerto serie (USB o RS-232) y transmita el peso en texto plano, como las marcas comunes tipo Torrey o CAS (formato típico `ST,GS,+001.250kg`). El puerto y la velocidad se ajustan en Configuración porque cada modelo puede variar.

**Configuré la báscula pero dice "El módulo de báscula no está disponible en este servidor", ¿qué hago?**
Significa que el software necesario para leer puertos serie no está instalado en este equipo. La venta a granel sigue funcionando en modo manual mientras tanto; para lectura automática, hay que instalar ese componente en el servidor (tarea técnica, no desde esta pantalla).

**¿Puedo hacer una venta por importe $ en un producto que NO es a granel?**
No, "por importe $" solo está disponible para productos marcados como "Peso / Granel" — en un producto por pieza no tendría sentido, porque las piezas no se dividen.
