Vorratsschrank - Scan-Station fuer durchgaengiges Scannen mit Hardware-Scanner #171

Closed
opened 2026-09-07 09:38:05 +02:00 by lena · 2 comments
Collaborator

Story: Vorratsschrank - Scan-Station

As a Nutzer, der einen ganzen Einkauf auf einmal in den Vorratsschrank einsortiert (oder wieder entnimmt),
I want to eine dedizierte Seite, die dauerhaft scan-bereit bleibt und einen an einen Hardware-Barcode-Scanner (HID-Tastatur-Emulation, z. B. Inateck BCST-55) angeschlossenen Ablauf unterstuetzt,
so that ich nicht nach jedem einzelnen Scan wieder in ein Modal klicken oder den Modus manuell umschalten muss.

Background

Der bestehende ScanPantryProductBarcodeCommand (#94/#104) wird bereits von PantryBarcodeScanner.tsxs Kamera-Modal genutzt. Diese Story ergaenzt einen zweiten Einstiegspunkt fuer den gleichen Command: eine eigene Route /pantry/:pantryId/scan, erreichbar ueber einen neuen Menuepunkt in der Vorratsschrank-Kopfzeile.

Acceptance criteria:

  • Neue Route /pantry/:pantryId/scan mit eigener Seite PantryScanStationPage, erreichbar ueber einen neuen Menuepunkt in PantryPages Kopfzeilen-Menue.
  • Eingabefeld bleibt nach jedem Scan fokussiert (kein erneuter Klick noetig), mit Hinweis + Re-Fokus-Button falls der Fokus doch verloren geht.
  • Zwei gedruckte Steuer-Barcodes (9-stellig, ausserhalb aller Standard-Retail-Formate) schalten zwischen Check-in (+1) und Check-out (-1) um, ohne API-Aufruf.
  • Unbekannter Barcode fragt wie im bestehenden Scan-Modal nach einem Namen (Open-Food-Facts-Vorschlag oder manuell), bevor das Produkt angelegt wird.
  • Kurzer Ton per Web Audio API bestaetigt jeden erfolgreichen Scan (Check-in/Check-out unterschiedliche Tonhoehe), damit man nicht staendig auf den Bildschirm schauen muss; Fehler bekommen einen eigenen tieferen Ton.
  • Verlauf der letzten Scans (max. 20) wird auf der Seite angezeigt.
  • Offline-Guard wie beim bestehenden Scan-Modal (kein Scan-Versuch ohne Verbindung).

Out of scope for this story:

  • Kamera-basiertes Scannen (bleibt beim bestehenden Modal) - diese Seite ist explizit fuer einen angeschlossenen Hardware-Scanner gedacht.
  • Konfigurierbare/benutzerdefinierte Steuer-Barcodes.

Open questions: Keine.

## Story: Vorratsschrank - Scan-Station **As a** Nutzer, der einen ganzen Einkauf auf einmal in den Vorratsschrank einsortiert (oder wieder entnimmt), **I want to** eine dedizierte Seite, die dauerhaft scan-bereit bleibt und einen an einen Hardware-Barcode-Scanner (HID-Tastatur-Emulation, z. B. Inateck BCST-55) angeschlossenen Ablauf unterstuetzt, **so that** ich nicht nach jedem einzelnen Scan wieder in ein Modal klicken oder den Modus manuell umschalten muss. ## Background Der bestehende `ScanPantryProductBarcodeCommand` (#94/#104) wird bereits von `PantryBarcodeScanner.tsx`s Kamera-Modal genutzt. Diese Story ergaenzt einen zweiten Einstiegspunkt fuer den gleichen Command: eine eigene Route `/pantry/:pantryId/scan`, erreichbar ueber einen neuen Menuepunkt in der Vorratsschrank-Kopfzeile. **Acceptance criteria:** - [x] Neue Route `/pantry/:pantryId/scan` mit eigener Seite `PantryScanStationPage`, erreichbar ueber einen neuen Menuepunkt in `PantryPage`s Kopfzeilen-Menue. - [x] Eingabefeld bleibt nach jedem Scan fokussiert (kein erneuter Klick noetig), mit Hinweis + Re-Fokus-Button falls der Fokus doch verloren geht. - [x] Zwei gedruckte Steuer-Barcodes (9-stellig, ausserhalb aller Standard-Retail-Formate) schalten zwischen Check-in (+1) und Check-out (-1) um, ohne API-Aufruf. - [x] Unbekannter Barcode fragt wie im bestehenden Scan-Modal nach einem Namen (Open-Food-Facts-Vorschlag oder manuell), bevor das Produkt angelegt wird. - [x] Kurzer Ton per Web Audio API bestaetigt jeden erfolgreichen Scan (Check-in/Check-out unterschiedliche Tonhoehe), damit man nicht staendig auf den Bildschirm schauen muss; Fehler bekommen einen eigenen tieferen Ton. - [x] Verlauf der letzten Scans (max. 20) wird auf der Seite angezeigt. - [x] Offline-Guard wie beim bestehenden Scan-Modal (kein Scan-Versuch ohne Verbindung). **Out of scope for this story:** - Kamera-basiertes Scannen (bleibt beim bestehenden Modal) - diese Seite ist explizit fuer einen angeschlossenen Hardware-Scanner gedacht. - Konfigurierbare/benutzerdefinierte Steuer-Barcodes. **Open questions:** Keine.
lena self-assigned this 2026-09-07 09:38:24 +02:00
Author
Collaborator

Claiming this. Implementation already exists locally (PantryScanStationPage + route + i18n), built on the existing ScanPantryProductBarcodeCommand (#94/#104). Verifying build/tests, self-review, then committing to master.

Claiming this. Implementation already exists locally (PantryScanStationPage + route + i18n), built on the existing ScanPantryProductBarcodeCommand (#94/#104). Verifying build/tests, self-review, then committing to master.
Author
Collaborator

Merged and pushed to master (commit 1b8468c).

Scope: new PantryScanStationPage at route /pantry/:pantryId/scan, reachable via a new menu item in the pantry header. Full-page, continuously scan-ready UI for a hardware HID-keyboard barcode scanner (e.g. Inateck BCST-55), as a second entry point alongside the existing camera-scan modal (both stay available). Reuses the existing ScanPantryProductBarcodeCommand unchanged - no backend changes were needed. Two printed digit-only control barcodes (999000001/999000002) switch check-in/check-out mode locally, no API call. Unknown-barcode flow reuses UnknownProductNameEntry for the same Open-Food-Facts-suggestion-or-manual-name flow as the existing modal. A short Web Audio beep confirms each scan (distinct pitch for check-in/out/error) and a client-side recent-scans log (last 20) is shown below the input. Offline-guarded like the existing scan modal.

Tests: PantryScanStationPage.test.tsx covers the default check-in scan, control-barcode mode switching, the unknown-barcode name-prompt round trip, and the offline guard.

Note: this session found the repo already had this feature mostly built but uncommitted from an earlier interactive session, plus a concurrent autonomous-loop run landed on the same working copy mid-cycle (#166 Masterpackliste activity feed + two independent test fixes + a duplicate docs change) - reconciled via merge/rebase, verified no content was lost (tree-diffed against the pre-rebase merge commit), full backend (1002 tests) and frontend (1209 tests) suites green post-reconciliation.

Security: reviewed via the security-review skill - no findings (backend command/authorization unchanged, no dangerouslySetInnerHTML, control barcodes are pure local UI state with no server round-trip).

Merged and pushed to master (commit 1b8468c). Scope: new `PantryScanStationPage` at route `/pantry/:pantryId/scan`, reachable via a new menu item in the pantry header. Full-page, continuously scan-ready UI for a hardware HID-keyboard barcode scanner (e.g. Inateck BCST-55), as a second entry point alongside the existing camera-scan modal (both stay available). Reuses the existing `ScanPantryProductBarcodeCommand` unchanged - no backend changes were needed. Two printed digit-only control barcodes (999000001/999000002) switch check-in/check-out mode locally, no API call. Unknown-barcode flow reuses `UnknownProductNameEntry` for the same Open-Food-Facts-suggestion-or-manual-name flow as the existing modal. A short Web Audio beep confirms each scan (distinct pitch for check-in/out/error) and a client-side recent-scans log (last 20) is shown below the input. Offline-guarded like the existing scan modal. Tests: `PantryScanStationPage.test.tsx` covers the default check-in scan, control-barcode mode switching, the unknown-barcode name-prompt round trip, and the offline guard. Note: this session found the repo already had this feature mostly built but uncommitted from an earlier interactive session, plus a concurrent autonomous-loop run landed on the same working copy mid-cycle (#166 Masterpackliste activity feed + two independent test fixes + a duplicate docs change) - reconciled via merge/rebase, verified no content was lost (tree-diffed against the pre-rebase merge commit), full backend (1002 tests) and frontend (1209 tests) suites green post-reconciliation. Security: reviewed via the security-review skill - no findings (backend command/authorization unchanged, no dangerouslySetInnerHTML, control barcodes are pure local UI state with no server round-trip).
lena closed this issue 2026-09-07 09:58:49 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/todo#171
No description provided.