michangarrito/backups/docs-backup-2026-01-10/docs/01-epicas/MCH-004-punto-venta.md
rckrdmrd 97f407c661 [MIGRATION-V2] feat: Migrar michangarrito a estructura v2
- Prefijo v2: MCH
- TRACEABILITY-MASTER.yml creado
- Listo para integracion como submodulo

Workspace: v2.0.0 | SIMCO: v4.0.0
2026-01-10 11:28:54 -06:00

160 lines
3.6 KiB
Markdown

# MCH-004: Punto de Venta Basico
## Metadata
- **Codigo:** MCH-004
- **Fase:** 1 - MVP Core
- **Prioridad:** P0
- **Estado:** Completado
- **Fecha inicio:** 2026-01-06
- **Fecha fin:** 2026-01-06
## Descripcion
Sistema de punto de venta (POS) optimizado para micro-negocios: interfaz tactil rapida, carrito de compra, multiples metodos de pago, generacion de tickets, y registro de ventas.
## Objetivos
1. Grid de productos tactil
2. Carrito con modificacion de cantidades
3. Multiples metodos de pago
4. Generacion de ticket/recibo
5. Historial de ventas del dia
## Alcance
### Incluido
- Grid de productos por categoria
- Carrito con +/- cantidad
- Descuentos por item o total
- Metodos: efectivo, tarjeta, fiado
- Ticket imprimible/compartible
- Reporte diario de ventas
### Excluido
- Ventas con factura fiscal - MCH-027
- Pagos parciales mixtos - fase posterior
- Mesas/comandas (restaurante) - vertical separada
## Modelo de Datos
### Tablas (schema: sales)
**sales**
- id, tenant_id, user_id, customer_id
- subtotal, tax, discount, total
- payment_method, payment_reference
- status (completed/voided), notes, created_at
**sale_items**
- id, sale_id, product_id, quantity
- unit_price, discount, total
**payment_methods**
- id, tenant_id, name, type, settings, active
**cash_registers**
- id, tenant_id, name, opening_balance, current_balance, status
## Endpoints API
| Metodo | Endpoint | Descripcion |
|--------|----------|-------------|
| GET | /sales | Listar ventas |
| GET | /sales/:id | Obtener venta |
| POST | /sales | Registrar venta |
| POST | /sales/:id/void | Cancelar venta |
| GET | /sales/daily-report | Reporte del dia |
| GET | /sales/by-date | Ventas por rango |
## Flujos de Usuario
### Venta Rapida
```
1. Empleado abre POS
2. Selecciona productos del grid
- O escanea codigo de barras
3. Ajusta cantidades si necesario
4. Aplica descuento (opcional)
5. Selecciona metodo de pago
6. Si efectivo: ingresa monto recibido
7. Sistema calcula cambio
8. Genera ticket
9. Venta registrada
```
### Venta a Credito (Fiado)
```
1. Empleado agrega productos
2. Selecciona cliente existente
3. Elige "Fiado" como pago
4. Sistema verifica limite de credito
5. Si aprobado: registra venta
6. Actualiza saldo del cliente
```
## Entregables
| Entregable | Estado | Archivo |
|------------|--------|---------|
| DDL sales schema | Completado | `06-sales.sql` |
| sales.module | Completado | `modules/sales/` |
| POS.tsx | Completado | `pages/POS.tsx` |
| Cart component | Completado | `components/pos/Cart.tsx` |
| PaymentModal | Completado | `components/pos/PaymentModal.tsx` |
| ReceiptModal | Completado | `components/pos/ReceiptModal.tsx` |
## Dependencias
### Depende de
- MCH-001 (Infraestructura)
- MCH-002 (Auth)
- MCH-003 (Productos)
### Bloquea a
- MCH-005 (Pagos)
- MCH-008 (Fiados)
- MCH-009 (Predicciones)
## Criterios de Aceptacion
- [x] Grid de productos carga correctamente
- [x] Carrito funciona (agregar/quitar/cantidad)
- [x] Descuentos se aplican correctamente
- [x] Pago en efectivo con cambio
- [x] Ticket se genera con todos los datos
- [x] Historial de ventas funcional
## UI Components
### POS Page
- Grid de productos (izquierda)
- Carrito (derecha)
- Barra de busqueda/escaneo
### ProductGrid
- Productos como cards con imagen
- Categorias como tabs
- Click para agregar al carrito
### Cart
- Lista de items con cantidad
- Botones +/- por item
- Total, descuento, impuesto
- Boton "Cobrar"
### PaymentModal
- Metodos de pago disponibles
- Campo monto recibido (efectivo)
- Calculo de cambio
- Boton confirmar
### ReceiptModal
- Datos del negocio
- Lista de productos
- Totales
- Botones: imprimir, compartir, cerrar
---
**Ultima actualizacion:** 2026-01-07