# Spec Delta ## MODIFIED Requirements ### Requirement: Realizar cuadre de caja The system SHALL allow completing an end-of-day reconciliation with cash counted and QR bank total, while clearly showing the expected values and calculated differences. #### 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** user can enter total QR reported by the bank - **AND** descuadreEfectivo and descuadreQR are calculated - **AND** totalVentas = ventas efectivo + ventas QR ### Requirement: Reporte por productor The system SHALL generate reports by producer including initial real inventory, expected inventory, differences, sales movements, and sales value. #### 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 consolidado The system SHALL generate consolidated totals for a user-selected date range and identify the selected period in the result. #### 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 - **AND** rejects an end date before the start date with a clear validation message ### Requirement: Exportar datos The system SHALL export all operational data, including market days, in versioned JSON format. #### Scenario: Exportar jornada completa - **GIVEN** data exists in the app - **WHEN** user exports - **THEN** JSON file is generated with schemaVersion, appVersion, exportedAt, data - **AND** data includes jornadas so an imported device preserves day status and traceability ## ADDED Requirements ### Requirement: Navegación adaptada al dispositivo The system SHALL provide consistent navigation and visible context on desktop, tablet, and mobile widths. #### Scenario: Navegación móvil - **WHEN** the app is opened on a narrow viewport - **THEN** the navigation can be opened and closed without covering the active content - **AND** the current section and active day status remain visible ### Requirement: POS seguro y comprensible The system SHALL guide the user through product selection, quantity editing, payment selection, and sale confirmation without allowing invalid quantities or sales outside an open day. #### Scenario: Venta válida desde POS - **GIVEN** an open day and products with available stock - **WHEN** user adds products, adjusts quantities, selects cash or QR, and confirms - **THEN** a confirmation feedback identifies amount and payment method - **AND** the cart is cleared only after successful persistence #### Scenario: Venta inválida - **GIVEN** no open day or a non-positive quantity - **WHEN** user attempts to confirm the sale - **THEN** the sale is not persisted - **AND** an inline, actionable validation message is shown ### Requirement: Flujo de configuración inicial The system SHALL guide a first-time user to create at least one producer and product before attempting an operational sale. #### Scenario: Configuración vacía - **WHEN** no producers or products exist - **THEN** the dashboard explains the next setup step and links directly to inventory setup - **AND** the POS explains why a sale cannot yet be created ### Requirement: Pruebas de flujo crítico The project SHALL include automated browser coverage for the main operational flow and responsive navigation. #### Scenario: Jornada completa en navegador - **WHEN** the test opens a day, creates catalog data, records a multi-line sale and expense, and closes the day - **THEN** the expected totals and closed status are visible - **AND** the test can run with network access disabled after the app has loaded