6.7 KiB
Spec: toldo-poc
Capability: Inventario
Requirement: Registrar inventario inicial
The system SHALL allow registering initial inventory for products at the start of market day.
Scenario: Registro de inventario inicial
- GIVEN products exist for producers
- WHEN user registers initial inventory with quantities for each product
- THEN movements of type INGRESO_INICIAL are recorded
- AND initial inventory is stored for the day
Requirement: Detectar diferencias de inventario
The system SHALL detect and record differences between expected inventory (from previous day) and actual inventory.
Scenario: Diferencia detectada
- GIVEN there is a previous day's final inventory
- WHEN current inventory count differs from expected
- THEN the difference is recorded and visible in reports
- AND the real inventory is used going forward
Requirement: Registrar ingresos entre semana
The system SHALL allow registering product restocks during the week to warehouse/bodega.
Scenario: Ingreso en semana
- GIVEN a product needs restocking
- WHEN user registers ingreso with product, quantity, and person who received
- THEN movement of type INGRESO_SEMANA is recorded with receivedBy
- AND inventory is updated
Capability: Ventas
Requirement: Registrar ventas
The system SHALL allow registering sales with product lines, quantities, prices, and payment method.
Scenario: Venta en efectivo
- GIVEN products with stock available
- WHEN user creates a sale with product lines paying in EFECTIVO
- THEN venta and ventaLineas are recorded
- AND inventory is decremented
- AND sale is counted in cash total
Scenario: Venta con QR
- GIVEN products with stock available
- WHEN user creates a sale with product lines paying in QR
- THEN sale is recorded with formaPago QR
- AND sale is counted in QR total separately
Requirement: Productos distintos por productor
The system SHALL treat products from different producers as different products even if same name.
Scenario: Mismo nombre diferente productor
- GIVEN "Café molido 250gr" exists for Productor A and Productor B
- WHEN selling
- THEN they are different productos with different IDs
- AND reported separately by producer
Capability: Gastos
Requirement: Registrar gastos
The system SHALL allow registering expenses during the day.
Scenario: Gasto registrado
- GIVEN an expense occurs
- WHEN user registers gasto with concepto and monto
- THEN gasto is recorded with fecha
- AND included in cash reconciliation
Capability: Cuadre de Caja
Requirement: Realizar cuadre de caja
The system SHALL allow end-of-day cash reconciliation.
Scenario: Cuadre completo
- GIVEN base inicial, ventas (cash/QR), gastos (cash/QR) recorded
- WHEN user performs cuadre
- THEN saldoEsperadoEfectivo is calculated (base + ventas efectivo - gastos efectivo)
- AND user can enter saldoRealEfectivo
- AND descuadreEfectivo is calculated
- AND QR totals compared (registrado vs banco)
- AND totalVentas = ventas efectivo + ventas QR
Requirement: Detectar descuadres
The system SHALL track and report discrepancies.
Scenario: Descuadre en efectivo
- GIVEN saldoEsperadoEfectivo != saldoRealEfectivo
- WHEN cuadre is saved
- THEN descuadreEfectivo is recorded
- AND visible in cuadre report
Capability: Ajustes
Requirement: Ajustes requieren motivo
The system SHALL require a reason for any adjustment.
Scenario: Ajustar inventario con motivo
- GIVEN need to adjust inventory
- WHEN user creates ajuste with producto, cantidadNueva, and motivo
- THEN ajuste is saved with motivo (non-empty)
- AND marked as modified/changed
- AND motivo appears in final report
Requirement: Ajustes trazables
The system SHALL track all adjustments with before/after values.
Scenario: Trazabilidad de ajuste
- GIVEN an adjustment is made
- THEN cantidadAnterior, cantidadNueva, diferencia recorded
- AND fecha and motivo recorded
- AND appears in reports marked as changed
Capability: Reportes
Requirement: Reporte por productor
The system SHALL generate reports by producer.
Scenario: Reporte por productor completo
- GIVEN sales and inventory data for the day
- WHEN generating report by producer
- THEN shows inventory differences vs previous day
- AND shows initial inventory (real)
- AND shows inventory movements from sales (salidas)
- AND shows sales value for producer's products
- AND shows total per producer
Requirement: Reporte de cuadre de caja
The system SHALL generate cash reconciliation report.
Scenario: Reporte cuadre
- GIVEN cuadre data
- WHEN generating report
- THEN shows fecha/hora, concepto, ingreso, gastos, saldo
- AND separate sections for efectivo and QR
- AND shows descuadres if any
- AND shows totalVentas (efectivo + QR)
Requirement: Reporte consolidado
The system SHALL generate consolidated reports by date range, week, or month.
Scenario: Consolidado por rango
- GIVEN multiple days of data
- WHEN generating consolidated report for date range
- THEN aggregates sales, expenses, adjustments
- AND shows totals by producer
Capability: Persistencia y Exportar/Importar
Requirement: Exportar datos
The system SHALL export all data in versioned JSON format.
Scenario: Exportar
- GIVEN data exists in the app
- WHEN user exports
- THEN JSON file is generated with schemaVersion, appVersion, exportedAt, data
- AND file can be saved/shared
Requirement: Importar datos
The system SHALL import data with validation and migration support.
Scenario: Importar válido
- GIVEN a valid exported JSON file
- WHEN user imports
- THEN schemaVersion is validated
- AND data is migrated if needed or imported directly
- AND data is stored in local DB
Scenario: Importar incompatible
- GIVEN JSON with incompatible schemaVersion
- WHEN user imports
- THEN clear error message is shown
- AND import is rejected
Capability: Offline y Empaquetado
Requirement: Funcionar offline
The system SHALL work completely offline.
Scenario: Modo avión
- GIVEN app installed/running with no network
- WHEN performing all operations (inventory, sales, expenses, reports)
- THEN all operations work correctly
- AND data persists locally
Requirement: Empaquetado APK
The system SHALL be buildable as Android APK via Capacitor.
Scenario: Generar APK
- GIVEN built web assets
- WHEN running cap sync android
- THEN Android project is updated
- AND APK can be built and installed on Android tablet