257 lines
4.4 KiB
Markdown
257 lines
4.4 KiB
Markdown
# DIRECTIVA-PUNTO-VENTA
|
|
|
|
**Version:** 1.0
|
|
**Fecha:** 2025-12-08
|
|
**Vertical:** Retail / POS
|
|
**Nivel:** 2B.2
|
|
|
|
---
|
|
|
|
## PROPOSITO
|
|
|
|
Define las directrices para la implementacion del sistema de punto de venta (POS).
|
|
|
|
---
|
|
|
|
## ALCANCE
|
|
|
|
- Terminal de venta
|
|
- Sesiones de caja
|
|
- Procesamiento de pagos
|
|
- Cortes y arqueos
|
|
- Operacion offline
|
|
|
|
---
|
|
|
|
## PRINCIPIOS
|
|
|
|
### 1. Rendimiento Critico
|
|
|
|
El POS debe responder en menos de 100ms por transaccion:
|
|
- Busqueda de productos: < 50ms
|
|
- Calculo de totales: < 10ms
|
|
- Registro de venta: < 100ms
|
|
|
|
### 2. Disponibilidad
|
|
|
|
- El sistema debe funcionar offline
|
|
- Sincronizacion automatica cuando hay conexion
|
|
- No perder transacciones nunca
|
|
|
|
### 3. Seguridad en Efectivo
|
|
|
|
- Control estricto de sesiones de caja
|
|
- Movimientos de efectivo auditados
|
|
- Cortes obligatorios al cerrar
|
|
|
|
---
|
|
|
|
## FLUJO DE OPERACION
|
|
|
|
### Apertura de Caja
|
|
|
|
```
|
|
1. Cajero inicia sesion
|
|
|
|
|
2. Verifica caja asignada
|
|
|
|
|
3. Registra fondo inicial
|
|
|
|
|
4. Sesion activa
|
|
```
|
|
|
|
### Venta
|
|
|
|
```
|
|
1. Escaneo/busqueda de producto
|
|
|
|
|
2. Agregar al carrito
|
|
|
|
|
3. Aplicar descuentos/promociones
|
|
|
|
|
4. Calcular total
|
|
|
|
|
5. Seleccionar metodo de pago
|
|
|
|
|
6. Procesar pago
|
|
|
|
|
7. Imprimir ticket
|
|
|
|
|
8. Actualizar inventario
|
|
```
|
|
|
|
### Cierre de Caja
|
|
|
|
```
|
|
1. Iniciar corte
|
|
|
|
|
2. Declarar efectivo fisico
|
|
|
|
|
3. Sistema calcula esperado
|
|
|
|
|
4. Registrar diferencias
|
|
|
|
|
5. Cerrar sesion
|
|
```
|
|
|
|
---
|
|
|
|
## MODELO DE DATOS
|
|
|
|
### pos_sessions
|
|
```yaml
|
|
campos:
|
|
- id: uuid
|
|
- user_id: FK -> auth.users (cajero)
|
|
- cash_register_id: FK -> cash_registers
|
|
- opening_balance: decimal
|
|
- closing_balance: decimal
|
|
- expected_balance: decimal
|
|
- difference: decimal
|
|
- status: enum(open, closing, closed)
|
|
- opened_at: timestamp
|
|
- closed_at: timestamp
|
|
```
|
|
|
|
### pos_orders
|
|
```yaml
|
|
campos:
|
|
- id: uuid
|
|
- session_id: FK -> pos_sessions
|
|
- customer_id: FK -> retail.customers (opcional)
|
|
- order_number: string
|
|
- subtotal: decimal
|
|
- discount: decimal
|
|
- tax: decimal
|
|
- total: decimal
|
|
- status: enum(draft, paid, refunded, cancelled)
|
|
- payment_method: enum(cash, card, mixed)
|
|
- created_at: timestamp
|
|
```
|
|
|
|
### cash_movements
|
|
```yaml
|
|
campos:
|
|
- id: uuid
|
|
- session_id: FK -> pos_sessions
|
|
- movement_type: enum(sale, refund, cash_in, cash_out)
|
|
- amount: decimal
|
|
- payment_method: enum(cash, card)
|
|
- reference: string
|
|
- notes: text
|
|
- created_at: timestamp
|
|
```
|
|
|
|
---
|
|
|
|
## OPERACION OFFLINE
|
|
|
|
### Datos en Cache Local
|
|
|
|
- Catalogo de productos
|
|
- Precios vigentes
|
|
- Promociones activas
|
|
- Clientes frecuentes
|
|
|
|
### Sincronizacion
|
|
|
|
```
|
|
[Terminal POS] <---> [Cola Local] <---> [Servidor Central]
|
|
| | |
|
|
Operacion Buffer Sincronizador
|
|
| | |
|
|
Cache IndexedDB PostgreSQL
|
|
```
|
|
|
|
### Conflictos
|
|
|
|
- El servidor tiene la version autoritativa
|
|
- Las ventas offline siempre se registran
|
|
- Los ajustes de inventario se reconcilian
|
|
|
|
---
|
|
|
|
## INTEGRACION CON HARDWARE
|
|
|
|
### Dispositivos Soportados
|
|
|
|
| Dispositivo | Protocolo | Notas |
|
|
|-------------|-----------|-------|
|
|
| Impresora tickets | ESC/POS | USB o Red |
|
|
| Lector codigo barras | HID | USB |
|
|
| Cajon de dinero | Pulso via impresora | - |
|
|
| Terminal bancaria | ISO 8583 | Integracion PAC |
|
|
|
|
### Arquitectura
|
|
|
|
```
|
|
[App POS]
|
|
|
|
|
[Driver Layer]
|
|
|
|
|
+---+---+---+
|
|
| | | |
|
|
Print Scan Drawer Card
|
|
```
|
|
|
|
---
|
|
|
|
## FACTURACION CFDI
|
|
|
|
### Flujo de Facturacion
|
|
|
|
1. Cliente solicita factura
|
|
2. Sistema recupera datos de venta
|
|
3. Genera XML CFDI 4.0
|
|
4. Envia a PAC para timbrado
|
|
5. Almacena UUID
|
|
6. Envia por email
|
|
|
|
### Consideraciones
|
|
|
|
- Facturacion global para tickets sin factura
|
|
- Complementos de pago para credito
|
|
- Cancelaciones dentro de plazo legal
|
|
|
|
---
|
|
|
|
## INTEGRACION CON ERP CORE
|
|
|
|
### Herencia de Specs
|
|
|
|
| Spec Core | Aplicacion |
|
|
|-----------|------------|
|
|
| SPEC-PRICING-RULES | Precios y promociones |
|
|
| SPEC-INVENTARIOS-CICLICOS | Conteos de tienda |
|
|
| SPEC-TRAZABILIDAD-LOTES-SERIES | Productos con caducidad |
|
|
|
|
### APIs a Extender
|
|
|
|
- `ProductService` -> `RetailProductService`
|
|
- `InventoryService` -> Multi-sucursal
|
|
- `InvoiceService` -> CFDI automatico
|
|
|
|
---
|
|
|
|
## METRICAS
|
|
|
|
| Metrica | Objetivo | Alerta |
|
|
|---------|----------|--------|
|
|
| Tiempo de venta | < 30 seg | > 60 seg |
|
|
| Disponibilidad | 99.9% | < 99% |
|
|
| Diferencias de caja | 0 | > $100 |
|
|
| Ventas sin factura | < 10% | > 20% |
|
|
|
|
---
|
|
|
|
## REFERENCIAS
|
|
|
|
- HERENCIA-SPECS-ERP-CORE.md
|
|
- DATABASE_INVENTORY.yml
|
|
- MASTER_INVENTORY.yml
|
|
- CFDI 4.0 SAT
|
|
|
|
---
|
|
|
|
**Documento de directiva oficial**
|