El módulo de Ventas es el punto de transacción principal de Tiendas Mi Cholo. Incluye un POS (Point of Sale) con soporte para escaneo de códigos de barras, atajos de teclado (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt
Use this file to discover all available pages before exploring further.
F2 buscar producto, F4 buscar cliente, F9 confirmar venta), cálculo automático de IGV al 18 %, descuentos por línea de ítem y tres tipos de comprobante. Cuando una venta se registra, el stock de cada producto se descuenta en la misma transacción de base de datos y se genera un movimiento de inventario tipo SALIDA de forma automática.
Flujo de una Venta
Seleccionar tipo de comprobante
El operador elige entre BOLETA, FACTURA o TICKET. Para FACTURA es obligatorio asociar un cliente con RUC. Para BOLETA y TICKET el cliente es opcional (se usa “Público General” si se deja vacío).
Buscar y seleccionar cliente
Se busca al cliente por nombre, apellido o número de documento. Si no existe, el sistema lo crea automáticamente con los datos ingresados. Para FACTURA se valida que el RUC tenga exactamente 11 dígitos.
Agregar productos al carrito
El operador escanea el código de barras del producto o lo busca por nombre/código interno. Al encontrar una coincidencia exacta de código de barras, el producto se agrega al carrito directamente sin confirmación adicional. Si el producto no tiene stock, se muestra un error y no se agrega.
Ajustar cantidades y descuentos
Cada ítem del carrito muestra controles
+/− para modificar la cantidad. El campo descuento es un porcentaje (0–100) que se aplica al subtotal de ese ítem.Seleccionar método de pago
El operador selecciona Efectivo, Tarjeta o Yape/Plin. Si elige efectivo, puede ingresar el monto recibido y el sistema calcula el vuelto automáticamente.
Confirmar la venta
Al hacer clic en Confirmar Venta (o presionar
F9), el frontend envía la petición POST /api/ventas. El backend valida el stock de cada producto, calcula el total con IGV, genera el número de venta, descuenta el stock y crea los movimientos de inventario en una sola transacción.Estados de una Venta
| Estado | Descripción |
|---|---|
COMPLETADA | Estado inicial al registrar exitosamente. El stock ya fue descontado. |
PENDIENTE | Reservado para uso futuro (ventas a crédito, etc.). |
ANULADA | La venta fue cancelada por un ADMIN. El stock fue revertido. |
Tipos de Comprobante
| Tipo | Uso |
|---|---|
BOLETA | Venta al consumidor final con DNI. Cliente opcional. |
FACTURA | Venta a empresa. Requiere RUC (11 dígitos) y razón social. |
TICKET | Ticket simplificado, sin datos de cliente obligatorios. |
Cálculo de IGV y Totales
El backend calcula los montos exclusivamente en el servidor — el frontend solo presenta los valores calculados:V-YYYY-NNNN (ej. V-2024-0001).
Registrar una Venta — API
Campos del detalle (detalles[])
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
productoId | Long | ✅ | ID del producto a vender |
cantidad | Integer | ✅ | Unidades a vender (mínimo 1) |
precioUnitario | BigDecimal | ✅ | Precio unitario aplicado (≥ 0) |
descuento | BigDecimal | ❌ | Descuento en % sobre el ítem (0–100, default 0) |
200 OK: objeto Venta completo con número generado, totales calculados y datos del cliente y usuario.
Anular una Venta
- El estado cambia a
ANULADA. - Por cada ítem del detalle,
stockActualdel producto se incrementa en la cantidad vendida. - Se crea un movimiento de inventario con
tipo = ENTRADAymotivo = "Anulación venta V-YYYY-NNNN".
200 OK: objeto Venta con estado = "ANULADA".
Permisos por Rol
| Operación | ADMIN | VENDEDOR | ALMACENERO |
|---|---|---|---|
Listar ventas (GET) | ✅ | ✅ | ✅ |
| Ver detalle por ID | ✅ | ✅ | ✅ |
Registrar venta (POST) | ✅ | ✅ | ❌ |
Anular venta (PATCH) | ✅ | ❌ | ❌ |