252 lines
8.6 KiB
Markdown
252 lines
8.6 KiB
Markdown
# EPICA: EPIC-RT-002 - Punto de Venta (POS)
|
|
|
|
## Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | EPIC-RT-002 |
|
|
| **Nombre** | Punto de Venta (POS) |
|
|
| **Modulo** | pos |
|
|
| **Fase** | Fase 1 - MVP |
|
|
| **Prioridad** | P0 (Critico) |
|
|
| **Estado** | Backlog |
|
|
| **Story Points** | 55 |
|
|
| **Sprint(s)** | Sprint 2-4 |
|
|
|
|
---
|
|
|
|
## Descripcion
|
|
|
|
Sistema de punto de venta optimizado para retail. PWA que funciona offline, permite ventas rápidas con escaneo de código de barras, múltiples formas de pago, integración con programa de lealtad y sincronización automática con inventario central.
|
|
|
|
---
|
|
|
|
## Objetivo de Negocio
|
|
|
|
- Ventas rápidas (< 30 segundos por transacción)
|
|
- Operación sin interrupciones (offline)
|
|
- Control en tiempo real de ventas
|
|
- Experiencia fluida para cajeros
|
|
- Integración omnicanal
|
|
|
|
---
|
|
|
|
## Historias de Usuario
|
|
|
|
| ID | Historia | Prioridad | SP | Estado |
|
|
|----|----------|-----------|-----|--------|
|
|
| US-RT002-001 | Como cajero, quiero escanear código de barras para agregar productos rápidamente | P0 | 5 | Backlog |
|
|
| US-RT002-002 | Como cajero, quiero buscar producto por nombre si no tiene código de barras | P0 | 3 | Backlog |
|
|
| US-RT002-003 | Como cajero, quiero ver carrito de compra con totales en tiempo real | P0 | 3 | Backlog |
|
|
| US-RT002-004 | Como cajero, quiero aplicar descuento porcentual o monto fijo a la venta | P0 | 3 | Backlog |
|
|
| US-RT002-005 | Como cajero, quiero registrar pago en efectivo con cálculo de cambio | P0 | 3 | Backlog |
|
|
| US-RT002-006 | Como cajero, quiero registrar pago con tarjeta (terminal integrada) | P0 | 8 | Backlog |
|
|
| US-RT002-007 | Como cajero, quiero registrar pagos mixtos (parte efectivo, parte tarjeta) | P0 | 5 | Backlog |
|
|
| US-RT002-008 | Como cajero, quiero imprimir ticket de venta automáticamente | P0 | 3 | Backlog |
|
|
| US-RT002-009 | Como cajero, quiero que el POS funcione sin internet para no perder ventas | P0 | 8 | Backlog |
|
|
| US-RT002-010 | Como supervisor, quiero autorizar descuentos mayores al límite del cajero | P1 | 3 | Backlog |
|
|
| US-RT002-011 | Como cajero, quiero consultar puntos de cliente y aplicar canje | P1 | 5 | Backlog |
|
|
| US-RT002-012 | Como cajero, quiero cancelar venta parcial o totalmente | P1 | 3 | Backlog |
|
|
| US-RT002-013 | Como admin, quiero configurar impresoras y terminales de pago | P0 | 3 | Backlog |
|
|
|
|
**Total Story Points:** 55 SP
|
|
|
|
---
|
|
|
|
## Flujo de Venta
|
|
|
|
```
|
|
┌─────────────┐
|
|
│ INICIO │ ← Cajero listo
|
|
└──────┬──────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ ESCANER │ ← Agregar productos
|
|
└──────┬──────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ CARRITO │ ← Revisar y aplicar descuentos
|
|
└──────┬──────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ PAGO │ ← Efectivo/Tarjeta/Mixto
|
|
└──────┬──────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ TICKET │ ← Imprimir comprobante
|
|
└──────┬──────┘
|
|
│
|
|
▼
|
|
┌─────────────┐
|
|
│ COMPLETADO │ ← Venta registrada
|
|
└─────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Modos de Operación
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ MODOS DEL POS │
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ │
|
|
│ ONLINE │
|
|
│ ├── Sincronización en tiempo real │
|
|
│ ├── Validación de stock central │
|
|
│ ├── Procesamiento de pagos con tarjeta │
|
|
│ └── Consulta de puntos de lealtad │
|
|
│ │
|
|
│ OFFLINE (PWA) │
|
|
│ ├── Catálogo de productos en cache │
|
|
│ ├── Ventas en cola para sincronizar │
|
|
│ ├── Solo pagos en efectivo │
|
|
│ ├── Cálculo local de puntos │
|
|
│ └── Sincronización automática al reconectar │
|
|
│ │
|
|
└─────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Criterios de Aceptacion de la Epica
|
|
|
|
**Funcionales:**
|
|
- [ ] Escaneo de código de barras (cámara o lector USB)
|
|
- [ ] Búsqueda de productos por nombre/SKU
|
|
- [ ] Carrito con totales en tiempo real
|
|
- [ ] Descuentos (porcentuales y fijos)
|
|
- [ ] Pagos: efectivo, tarjeta, mixtos
|
|
- [ ] Impresión de tickets
|
|
- [ ] Modo offline con sincronización
|
|
- [ ] Consulta y canje de puntos
|
|
|
|
**No Funcionales:**
|
|
- [ ] Agregar producto < 500ms
|
|
- [ ] Cierre de venta < 3 segundos
|
|
- [ ] PWA instalable en tablet/PC
|
|
- [ ] Funcionamiento offline 24+ horas
|
|
|
|
**Tecnicos:**
|
|
- [ ] Service Workers para offline
|
|
- [ ] IndexedDB para almacenamiento local
|
|
- [ ] Integración con impresoras ESC/POS
|
|
- [ ] Integración con terminales de pago
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
**Esta epica depende de:**
|
|
| Epica/Modulo | Estado | Bloqueante |
|
|
|--------------|--------|------------|
|
|
| EPIC-RT-001 Fundamentos | Backlog | Si |
|
|
| EPIC-RT-003 Inventario | Backlog | Si |
|
|
| EPIC-RT-006 Precios | Backlog | Si |
|
|
|
|
**Esta epica bloquea:**
|
|
| Epica/Modulo | Razon |
|
|
|--------------|-------|
|
|
| EPIC-RT-007 Caja | Requiere ventas para arqueo |
|
|
| EPIC-RT-008 Reportes | Requiere datos de ventas |
|
|
| EPIC-RT-010 Facturacion | Requiere ventas completadas |
|
|
|
|
---
|
|
|
|
## Desglose Tecnico
|
|
|
|
**Database:**
|
|
- [ ] Schema: `pos`
|
|
- [ ] Tablas: 7 (sales, sale_items, payments, terminals, printers, offline_queue, sessions)
|
|
- [ ] Funciones: 3 (calculate_totals, apply_discount, sync_offline)
|
|
- [ ] Indices: Por fecha, cajero, terminal, ticket
|
|
|
|
**Backend:**
|
|
- [ ] Modulo: `pos`
|
|
- [ ] Entities: 6 (Sale, SaleItem, Payment, Terminal, Printer, OfflineSale)
|
|
- [ ] Endpoints: 15
|
|
- [ ] Tests: 35
|
|
|
|
**Frontend (PWA):**
|
|
- [ ] Paginas: 4 (POSMain, ProductSearch, Payment, Config)
|
|
- [ ] Componentes: 20 (Cart, ProductCard, PaymentModal, Scanner, etc.)
|
|
- [ ] Stores: 2 (posStore, offlineStore)
|
|
- [ ] Service Workers: Offline + Sync
|
|
|
|
---
|
|
|
|
## Endpoints API
|
|
|
|
| Metodo | Endpoint | Descripcion |
|
|
|--------|----------|-------------|
|
|
| POST | /api/pos/sales | Crear venta |
|
|
| GET | /api/pos/sales/:id | Detalle de venta |
|
|
| POST | /api/pos/sales/:id/items | Agregar item |
|
|
| DELETE | /api/pos/sales/:id/items/:itemId | Quitar item |
|
|
| POST | /api/pos/sales/:id/discount | Aplicar descuento |
|
|
| POST | /api/pos/sales/:id/pay | Registrar pago |
|
|
| POST | /api/pos/sales/:id/complete | Cerrar venta |
|
|
| POST | /api/pos/sales/:id/cancel | Cancelar venta |
|
|
| POST | /api/pos/sync | Sincronizar ventas offline |
|
|
| GET | /api/pos/products/search | Buscar productos |
|
|
| GET | /api/pos/products/:barcode | Buscar por código |
|
|
|
|
---
|
|
|
|
## Integraciones de Hardware
|
|
|
|
| Dispositivo | Protocolo | Notas |
|
|
|-------------|-----------|-------|
|
|
| Lector código barras | USB HID / WebSerial | Actúa como teclado |
|
|
| Impresora tickets | ESC/POS | USB o red |
|
|
| Terminal bancaria | API propietaria | Depende del proveedor |
|
|
| Cajón de dinero | Pulso via impresora | RJ-11 conectado a impresora |
|
|
|
|
---
|
|
|
|
## Riesgos
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Fallas de sincronización | Media | Alto | Cola de reintentos + alertas |
|
|
| Hardware incompatible | Media | Medio | Lista de dispositivos probados |
|
|
| Pérdida de datos offline | Baja | Alto | Respaldo en múltiples stores |
|
|
|
|
---
|
|
|
|
## Definition of Ready (DoR)
|
|
|
|
- [x] Historias de usuario definidas
|
|
- [x] Criterios de aceptacion claros
|
|
- [x] Dependencias identificadas
|
|
- [x] Estimacion completada
|
|
- [ ] Diseño de UI aprobado
|
|
- [ ] Hardware de prueba disponible
|
|
|
|
## Definition of Done (DoD)
|
|
|
|
- [ ] Flujo de venta completo funcionando
|
|
- [ ] Modo offline operativo
|
|
- [ ] Integración con impresora/lector
|
|
- [ ] Tests de integración pasando
|
|
- [ ] PWA instalable y funcional
|
|
- [ ] Documentación de API
|
|
|
|
---
|
|
|
|
## Historial
|
|
|
|
| Fecha | Cambio | Autor |
|
|
|-------|--------|-------|
|
|
| 2025-12-08 | Creacion de epica | Claude-Agent |
|
|
|
|
---
|
|
|
|
**Creada por:** Claude-Agent
|
|
**Fecha:** 2025-12-08
|
|
**Ultima actualizacion:** 2025-12-08
|