diff --git a/DEVLOG.md b/DEVLOG.md index fd288b3..652ad8b 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -2623,3 +2623,35 @@ Keine Commits in dieser Session. - flutter_app/pubspec.yaml | 1 + --- +## 2026-09-04 17:59 – 17:59 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** backend + +### Commits +- 66757e4 Karte 10: Code128-Label als PDF (Objekt + Geräte-Exemplar) + +### Geänderte Dateien +- DEVLOG.md | 16 +++++++++ +- backend/DEVLOG.md | 16 +++++++++ +- backend/app/api/v1/endpoints/objekte.py | 40 ++++++++++++++++++++++- +- backend/app/services/label.py | 57 +++++++++++++++++++++++++++++++++ +- backend/pyproject.toml | 2 ++ +- backend/tests/test_objekte.py | 49 ++++++++++++++++++++++++++++ + +--- +## 2026-09-04 18:00 – 18:01 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- DEVLOG.md | 16 +++++++++ +- backend/DEVLOG.md | 16 +++++++++ +- backend/app/api/v1/endpoints/objekte.py | 40 ++++++++++++++++++++++- +- backend/app/services/label.py | 57 +++++++++++++++++++++++++++++++++ +- backend/pyproject.toml | 2 ++ +- backend/tests/test_objekte.py | 49 ++++++++++++++++++++++++++++ + +--- diff --git a/arbeitskarten/10_qr_barcode.md b/arbeitskarten/10_qr_barcode.md index 9850126..1da8c8e 100644 --- a/arbeitskarten/10_qr_barcode.md +++ b/arbeitskarten/10_qr_barcode.md @@ -25,3 +25,18 @@ QR/Barcode-Scan ist gewünschte spätere Funktion: - Anforderungen an Label aus Einsatzumfeld: witterungsbeständig/abriebfest (Rucksäcke/Fahrzeuge im Rettungsdiensteinsatz), Kontrast/Größe für zuverlässigen Kamera-Scan (siehe oben). - Klartext-Fallback auf Label empfohlen (Code + lesbare Objekt-ID), falls Scan mal ausfällt. - Konkretes Layout/Material erst bei Umsetzung (Prompt 24) final festlegen, hier nur als Anforderung vermerkt. + +## Umsetzungsstand (2026-09-04) +- Backend: `objektposition.code`-Feld, Lookup-/Vorschlag-Endpunkte, PDF-Label-Erzeugung (`app/services/label.py`) fertig. +- Frontend/Flutter: Kamera-Scan (Objekt-Code, Scan-First) fertig. +- **Offen: Label-Druck-Test mit echten Geräten** (physischer Schritt, nicht per Code erledigbar). Test-PDF erzeugen: `python -m scripts.test_label_erzeugen` im Backend-venv. + +### Test-Checkliste (pro Labelgröße/-material einmal durchgehen) +1. Test-Label drucken (`test_label_erzeugen.py`, mind. eine Größe pro geplantes Labelformat). +2. Auf Ziel-Untergrund kleben/befestigen (Rucksack-Stoff, Fahrzeuglack o. Ä. – reale Anbringung testen, nicht nur Tisch/Papier). +3. Mit jedem vorgesehenen Scan-Gerät testen (PWA im Handy-/Tablet-Browser, Flutter-App auf Android): + - Normalabstand (~15–20 cm) und Winkel 0° + - Schräger Winkel (~30°) + - Schwaches Licht / Gegenlicht +4. Bei Fehlschlag: Modulbreite/Ruhezone in `_BARCODE_OPTIONEN` (`app/services/label.py`) erhöhen, neues Test-Label drucken, erneut testen. +5. Ergebnis (Gerät, Abstand/Winkel, Erfolg/Fehlschlag) hier oder in einer neuen Notiz festhalten, bevor Seriendruck freigegeben wird. diff --git a/backend/scripts/test_label_erzeugen.py b/backend/scripts/test_label_erzeugen.py new file mode 100644 index 0000000..c6d5c08 --- /dev/null +++ b/backend/scripts/test_label_erzeugen.py @@ -0,0 +1,34 @@ +"""Test-Label-PDF für den Karte-10-Druck-/Scan-Test (keine DB-Verbindung nötig). + +Deployment-Regel (Prompt 19): nur Skript-Datei hier, Ausführung auf Zielsystem +oder jeder Umgebung mit installierten Backend-Dependencies. + +Aufruf (im aktivierten venv): + + python -m scripts.test_label_erzeugen + python -m scripts.test_label_erzeugen --code RK-99999 --zusatz "Test-Rucksack" +""" + +from __future__ import annotations + +import argparse +from pathlib import Path + +from app.services.label import generiere_code128_label_pdf + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--code", default="TEST-00001") + parser.add_argument("--zusatz", default="Testobjekt Druck-/Scan-Check") + parser.add_argument("--ausgabe", default="test-label.pdf") + args = parser.parse_args() + + pdf = generiere_code128_label_pdf(args.code, args.zusatz) + pfad = Path(args.ausgabe) + pfad.write_bytes(pdf) + print(f"Label geschrieben: {pfad.resolve()} (Code: {args.code})") + + +if __name__ == "__main__": + main()