feat: mejorar pos movil y cierre de jornada
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-10-25
|
||||
25
openspec/changes/improve-mobile-pos-closing/design.md
Normal file
25
openspec/changes/improve-mobile-pos-closing/design.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Design
|
||||
|
||||
## Context
|
||||
|
||||
El Layout ya tiene menú y navegación suficiente; breadcrumbs duplican acciones. `JornadaService.cerrarJornada` crea un cuadre sin saldo real, mientras `Cuadre.vue` obliga a trabajar en otra ruta. POS muestra el catálogo completo antes del carrito.
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
**Goals:** priorizar carrito y cobro en móvil, mantener operaciones densas separadas por tabs, y hacer que el cierre sea una operación única con datos completos.
|
||||
|
||||
**Non-Goals:** eliminar la capacidad de consultar cuadres históricos ni cambiar el esquema de pagos.
|
||||
|
||||
## Decisions
|
||||
|
||||
- **POS:** mostrar búsqueda y botón de selección; el catálogo completo vive en un `v-dialog` con lista filtrable. El carrito permanece visible arriba en móvil y en columna fija en pantallas grandes.
|
||||
- **Devuelta:** sólo se solicita para efectivo; se calcula como recibido menos total y no permite confirmar si es negativo.
|
||||
- **Cierre:** `JornadaService.cerrarJornada` recibe efectivo contado obligatorio y banco QR opcional, calcula diferencias, guarda `CuadreCaja` y marca la jornada cerrada en una transacción.
|
||||
- **Inventario:** tabs `Catálogo`, `Ingresos` y `Ajustes` en móvil; el menú deja de exponer Ajustes como módulo aislado.
|
||||
- **Vuetify:** reemplazar inputs/select/button HTML de Gastos y Ajustes por `v-form`, `v-text-field`, `v-select`, `v-btn`, `v-list` y alertas.
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- [Cierre incompleto] El usuario puede no conocer el banco -> QR es opcional y se muestra como pendiente, sin bloquear el cierre.
|
||||
- [Cambio de API] Cerrar jornadas existentes sin saldo real requiere migración de comportamiento -> los registros históricos permanecen intactos.
|
||||
- [Modal POS] Un modal añade un paso -> evita que el carrito desaparezca y permite buscar entre catálogos grandes.
|
||||
31
openspec/changes/improve-mobile-pos-closing/proposal.md
Normal file
31
openspec/changes/improve-mobile-pos-closing/proposal.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Proposal
|
||||
|
||||
## Why
|
||||
|
||||
En celulares el POS ocupa toda la pantalla con el catálogo y el carrito queda fuera de vista. Además, breadcrumbs ya no son necesarios, Gastos y Ajustes conservan HTML nativo, y el cierre de caja está separado de la jornada aunque ambos deben ser una única operación de cierre.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Retirar breadcrumbs y usar tabs responsive en Inventario y otras secciones densas.
|
||||
- Convertir el selector de productos del POS en una búsqueda compacta con modal/lista de productos y carrito siempre accesible.
|
||||
- Rediseñar Gastos y Ajustes con componentes Vuetify.
|
||||
- Mover el ajuste de inventario al flujo de Inventario y retirar Ajustes como operación principal del menú.
|
||||
- Fusionar cierre de caja y cierre de jornada con efectivo contado obligatorio y banco QR opcional.
|
||||
- Calcular devuelta para pagos en efectivo antes de confirmar la venta.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `mobile-pos-flow`: selección de productos, carrito y devuelta optimizados para pantalla pequeña.
|
||||
- `unified-day-closing`: cierre atómico de caja y jornada.
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `toldo-poc`: navegación, inventario, gastos, ajustes y reportes operativos.
|
||||
|
||||
## Impact
|
||||
|
||||
- Vistas Vue/Vuetify de POS, Inventario, Gastos, Ajustes y Jornada.
|
||||
- `JornadaService` y modelos de cuadre.
|
||||
- Tests de casos de uso, Playwright y APK.
|
||||
@@ -0,0 +1,28 @@
|
||||
# Spec Delta
|
||||
|
||||
## Purpose
|
||||
|
||||
Permite vender cómodamente desde celulares mostrando el carrito, la búsqueda de productos y la devuelta sin obligar a recorrer una lista larga.
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Catálogo compacto en POS
|
||||
The system SHALL keep the cart visible and allow selecting products through a searchable compact list or dialog.
|
||||
|
||||
#### Scenario: Selección en móvil
|
||||
- **WHEN** user opens Ventas on a narrow viewport
|
||||
- **THEN** the cart and total remain visible
|
||||
- **AND** user can search and add a product from the catalog dialog
|
||||
|
||||
### Requirement: Calcular devuelta
|
||||
The system SHALL calculate and display change for cash payments before saving a sale.
|
||||
|
||||
#### Scenario: Pago en efectivo
|
||||
- **GIVEN** sale total is 12000
|
||||
- **WHEN** user enters 20000 as received cash
|
||||
- **THEN** the UI displays change of 8000
|
||||
- **AND** the sale can be confirmed
|
||||
|
||||
#### Scenario: Efectivo insuficiente
|
||||
- **WHEN** received cash is below the sale total
|
||||
- **THEN** confirmation is disabled and an actionable message is shown
|
||||
@@ -0,0 +1,28 @@
|
||||
# Spec Delta
|
||||
|
||||
## Purpose
|
||||
|
||||
Unifica la verificación del efectivo y pagos QR con el cierre de la jornada, evitando que el usuario cierre una jornada sin cuadrar los valores disponibles.
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Cierre unificado
|
||||
The system SHALL require counted cash and optionally accept the QR bank total before closing a day.
|
||||
|
||||
#### Scenario: Cierre con efectivo
|
||||
- **GIVEN** an open day with recorded sales and expenses
|
||||
- **WHEN** user enters counted cash and confirms closing
|
||||
- **THEN** cash difference is calculated and saved
|
||||
- **AND** the cash reconciliation and day are closed together
|
||||
|
||||
#### Scenario: Cierre con banco QR pendiente
|
||||
- **WHEN** user closes with counted cash and no bank total
|
||||
- **THEN** the day closes
|
||||
- **AND** QR bank comparison remains explicitly pending
|
||||
|
||||
### Requirement: Ajuste dentro de inventario
|
||||
The system SHALL expose inventory adjustments from the inventory area with product quantity and reason.
|
||||
|
||||
#### Scenario: Ajuste desde inventario
|
||||
- **WHEN** user selects a product, enters a new quantity and reason
|
||||
- **THEN** the inventory balance changes and the reason is recorded
|
||||
24
openspec/changes/improve-mobile-pos-closing/tasks.md
Normal file
24
openspec/changes/improve-mobile-pos-closing/tasks.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Tasks
|
||||
|
||||
## 1. POS móvil y cobro
|
||||
|
||||
- [x] 1.1 Rediseñar POS con carrito visible, selección en diálogo/lista filtrable y tabs responsive
|
||||
- [x] 1.2 Añadir efectivo recibido, devuelta y validación de pago insuficiente
|
||||
- [x] 1.3 Cubrir selección móvil y devuelta con tests unitarios/E2E
|
||||
|
||||
## 2. Cierre de jornada
|
||||
|
||||
- [x] 2.1 Cambiar servicio de cierre para recibir efectivo obligatorio y banco QR opcional en una transacción
|
||||
- [x] 2.2 Rediseñar Jornada con formulario de cierre y diferencias visibles
|
||||
- [x] 2.3 Retirar Cierre de caja del menú y cubrir cierre efectivo/QR/pending con tests
|
||||
|
||||
## 3. Inventario y formularios
|
||||
|
||||
- [x] 3.1 Mover Ajustes al área Inventario con tabs y quitar módulo independiente del menú
|
||||
- [x] 3.2 Convertir Gastos y Ajustes a formularios Vuetify
|
||||
- [x] 3.3 Añadir pruebas de regresión de inventario, gastos y ajustes
|
||||
|
||||
## 4. Verificación y entrega
|
||||
|
||||
- [x] 4.1 Ejecutar tests unitarios, `vue-tsc` y Playwright responsive
|
||||
- [x] 4.2 Generar APK y verificar metadatos/flujo de cierre
|
||||
Reference in New Issue
Block a user