- MCH-002: 4 HU (MCH-US-010 a MCH-US-013), 13 SP - MCH-003: 5 HU (MCH-US-020 a MCH-US-024), 8 SP - MCH-004: 6 HU (MCH-US-030 a MCH-US-035), 21 SP - MCH-005: 4 HU (MCH-US-040 a MCH-US-043), 13 SP Formato: Como/Quiero/Para + Criterios [CA-XXX-N] + Tareas [MCH-TT-XXX-NN] Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
340 lines
9.7 KiB
Markdown
340 lines
9.7 KiB
Markdown
---
|
|
id: EPIC-MCH-004
|
|
type: Epic
|
|
title: "MCH-004: Punto de Venta Basico"
|
|
code: MCH-004
|
|
status: Completado
|
|
phase: 1
|
|
priority: P0
|
|
story_points: 21
|
|
created_at: 2026-01-06
|
|
updated_at: 2026-01-17
|
|
simco_version: "4.0.1"
|
|
dependencies:
|
|
blocks: ["MCH-005", "MCH-008", "MCH-009"]
|
|
depends_on: ["MCH-001", "MCH-002", "MCH-003"]
|
|
---
|
|
|
|
# MCH-004: Punto de Venta Basico
|
|
|
|
## Metadata
|
|
- **Codigo:** MCH-004
|
|
- **Fase:** 1 - MVP Core
|
|
- **Prioridad:** P0
|
|
- **Estado:** Completado
|
|
- **Story Points:** 21
|
|
- **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
|
|
```
|
|
|
|
## Historias de Usuario
|
|
|
|
### MCH-US-030: Grid de Productos Tactil
|
|
|
|
**Como** empleado del negocio
|
|
**Quiero** ver un grid de productos organizado por categorias con interfaz tactil
|
|
**Para** seleccionar rapidamente los productos que el cliente desea comprar
|
|
|
|
**Story Points:** 5
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-030-1] El grid muestra productos como cards con imagen, nombre y precio
|
|
- [CA-030-2] Los productos se organizan en tabs por categoria
|
|
- [CA-030-3] Click/tap en producto lo agrega al carrito automaticamente
|
|
- [CA-030-4] Existe barra de busqueda para filtrar productos
|
|
- [CA-030-5] Soporte para escaneo de codigo de barras
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-030-01 | Crear componente ProductGrid | Frontend | Completado |
|
|
| MCH-TT-030-02 | Implementar tabs de categorias | Frontend | Completado |
|
|
| MCH-TT-030-03 | Integrar barra de busqueda | Frontend | Completado |
|
|
| MCH-TT-030-04 | Agregar soporte para codigo de barras | Frontend | Completado |
|
|
|
|
---
|
|
|
|
### MCH-US-031: Carrito de Compras Interactivo
|
|
|
|
**Como** empleado del negocio
|
|
**Quiero** gestionar un carrito de compras con modificacion de cantidades
|
|
**Para** ajustar los items antes de procesar la venta
|
|
|
|
**Story Points:** 3
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-031-1] Lista de items muestra producto, cantidad, precio unitario y subtotal
|
|
- [CA-031-2] Botones +/- permiten modificar cantidad de cada item
|
|
- [CA-031-3] Posibilidad de eliminar items del carrito
|
|
- [CA-031-4] Muestra subtotal, descuento, impuesto y total
|
|
- [CA-031-5] Boton "Cobrar" visible y accesible
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-031-01 | Crear componente Cart.tsx | Frontend | Completado |
|
|
| MCH-TT-031-02 | Implementar logica de cantidades | Frontend | Completado |
|
|
| MCH-TT-031-03 | Calcular totales dinamicamente | Frontend | Completado |
|
|
|
|
---
|
|
|
|
### MCH-US-032: Procesamiento de Pagos Multiples
|
|
|
|
**Como** empleado del negocio
|
|
**Quiero** procesar pagos con diferentes metodos (efectivo, tarjeta, fiado)
|
|
**Para** ofrecer flexibilidad a los clientes en su forma de pago
|
|
|
|
**Story Points:** 5
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-032-1] Modal muestra metodos de pago disponibles para el tenant
|
|
- [CA-032-2] Pago en efectivo permite ingresar monto recibido
|
|
- [CA-032-3] Sistema calcula y muestra el cambio automaticamente
|
|
- [CA-032-4] Pago fiado requiere seleccionar cliente y verifica limite de credito
|
|
- [CA-032-5] Confirmacion de pago registra la venta
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-032-01 | Crear DDL tabla payment_methods | DDL | Completado |
|
|
| MCH-TT-032-02 | Implementar PaymentModal.tsx | Frontend | Completado |
|
|
| MCH-TT-032-03 | Crear endpoint POST /sales | Backend | Completado |
|
|
| MCH-TT-032-04 | Integrar verificacion de credito | Backend | Completado |
|
|
|
|
---
|
|
|
|
### MCH-US-033: Generacion de Tickets
|
|
|
|
**Como** empleado del negocio
|
|
**Quiero** generar tickets/recibos de venta
|
|
**Para** entregar comprobante al cliente y mantener registro
|
|
|
|
**Story Points:** 3
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-033-1] Ticket muestra datos del negocio (nombre, direccion, telefono)
|
|
- [CA-033-2] Lista detallada de productos con cantidades y precios
|
|
- [CA-033-3] Muestra subtotal, descuentos, impuestos y total
|
|
- [CA-033-4] Opcion para imprimir ticket
|
|
- [CA-033-5] Opcion para compartir ticket (WhatsApp, email)
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-033-01 | Crear componente ReceiptModal.tsx | Frontend | Completado |
|
|
| MCH-TT-033-02 | Implementar formato de impresion | Frontend | Completado |
|
|
| MCH-TT-033-03 | Agregar funcionalidad de compartir | Frontend | Completado |
|
|
|
|
---
|
|
|
|
### MCH-US-034: Historial de Ventas
|
|
|
|
**Como** dueno del negocio
|
|
**Quiero** ver el historial de ventas del dia
|
|
**Para** monitorear el desempeno y tomar decisiones
|
|
|
|
**Story Points:** 3
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-034-1] Lista de ventas del dia con hora, total y metodo de pago
|
|
- [CA-034-2] Detalle de cada venta al hacer click
|
|
- [CA-034-3] Filtro por rango de fechas disponible
|
|
- [CA-034-4] Reporte diario con totales por metodo de pago
|
|
- [CA-034-5] Posibilidad de anular ventas con autorizacion
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-034-01 | Crear endpoint GET /sales/daily-report | Backend | Completado |
|
|
| MCH-TT-034-02 | Crear endpoint GET /sales/by-date | Backend | Completado |
|
|
| MCH-TT-034-03 | Implementar vista de historial | Frontend | Completado |
|
|
| MCH-TT-034-04 | Crear endpoint POST /sales/:id/void | Backend | Completado |
|
|
|
|
---
|
|
|
|
### MCH-US-035: Gestion de Caja Registradora
|
|
|
|
**Como** administrador del negocio
|
|
**Quiero** gestionar la caja registradora con apertura y cierre
|
|
**Para** controlar el efectivo y cuadrar al final del dia
|
|
|
|
**Story Points:** 2
|
|
|
|
**Criterios de Aceptacion:**
|
|
- [CA-035-1] Apertura de caja con saldo inicial
|
|
- [CA-035-2] Seguimiento de saldo actual durante el dia
|
|
- [CA-035-3] Cierre de caja con cuadre de efectivo
|
|
- [CA-035-4] Registro de cajas por sucursal/punto de venta
|
|
|
|
**Tareas:**
|
|
| ID | Tarea | Tipo | Estado |
|
|
|----|-------|------|--------|
|
|
| MCH-TT-035-01 | Crear DDL tabla cash_registers | DDL | Completado |
|
|
| MCH-TT-035-02 | Implementar servicio de caja | Backend | Completado |
|
|
| MCH-TT-035-03 | Integrar caja con flujo de POS | Frontend | Completado |
|
|
|
|
---
|
|
|
|
## Resumen de Story Points
|
|
|
|
| Historia | Descripcion | Story Points |
|
|
|----------|-------------|--------------|
|
|
| MCH-US-030 | Grid de Productos Tactil | 5 |
|
|
| MCH-US-031 | Carrito de Compras Interactivo | 3 |
|
|
| MCH-US-032 | Procesamiento de Pagos Multiples | 5 |
|
|
| MCH-US-033 | Generacion de Tickets | 3 |
|
|
| MCH-US-034 | Historial de Ventas | 3 |
|
|
| MCH-US-035 | Gestion de Caja Registradora | 2 |
|
|
| **TOTAL** | **Epica MCH-004** | **21** |
|
|
|
|
---
|
|
|
|
## 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-17
|