patrickandClaude Sonnet 5 17cac8543f
CI / backend-tests (push) Successful in 2m15s
CI / frontend-build (push) Successful in 27s
perf(db): 80 fehlende Indizes auf Fremdschlüssel-Spalten ergänzt
Postgres legt für FK-Spalten selbst KEINEN Index an (nur für die
referenzierte PK-Seite) - grep über alle Models ergab 0 explizite Indizes
im gesamten Schema trotz 86 Fremdschlüsseln. Ohne Index braucht jede
Lookup-Query von der "viele"-Seite (z.B. "alle Fehlbestände zu diesem
Objekt", "alle Kontrollen zu diesem Benutzer") einen Sequential Scan -
bei aktueller Datenmenge unauffällig, würde mit wachsendem Bestand aber
zum Problem.

5 Spalten ausgelassen, weil bereits über eine UniqueConstraint als
führende Spalte indiziert (Postgres nutzt den führenden Teil eines
zusammengesetzten Unique-Index für Einzelspalten-Lookups genauso):
objektposition.objekt_id, bestand.lagerplatz_id, beladungsvorlage.
objekttyp_id, vorlagenposition.vorlage_id, benutzer_qualifikation.
benutzer_id. dokument.vorgaenger_id hatte bereits einen Index (Migration
0027).

Fund beim Abgleich gegen die database-optimization-Checkliste aus
ai-coding-starter-kit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 11:31:49 +02:00

MABEA — Digitales Materialmanagement Rettungsdienst/KatS

Ersetzt papierbasierte Materiallisten (Excel-Rucksacklisten) im Rettungsdienst/Katastrophenschutz durch eine digitale Soll/Ist-Kontrolle mit Rollen, Historie und Eskalation. Fachlich vor Technik entstanden — Konzeptphase in ergebnisse/, laufender Fortschritt gegen echten Code-Stand in arbeitskacheln/00_index.md.

Funktionsumfang

  • Digitale Akte je Objekt (Rucksack, Fahrzeug, Gerät, Anhänger) — aggregiert Beladung, Kontrollen, Mängel, Dokumente, Wartung, Historie an einer Stelle
  • Soll/Ist-Kontrolle mit Beladungsvorlagen, individuellen Abweichungen, Fach-Zuordnung, QR-/Barcode-Scan zum Objekt- und Positions-Lookup
  • Fehlbestandsmanagement: Entstehung, Nachfüllung (auch sofort während der Kontrolle), Mindermengen-Genehmigung mit Historie
  • Zentrale Einsatzbereitschafts-Engine — begründete Ampel (bereit/eingeschränkt/unbekannt/nicht bereit) aus Fehlbeständen, Mängeln, Prüf-/Wartungsfristen, Fahrzeug-HU/UVV
  • Mängel-Ticketsystem mit Priorität und Status
  • Wartung: Wartungspläne, Intervalle, Wartungsaufträge je Objekttyp
  • Warehouse: Lagerort-Hierarchie, Lagerplätze, Bestand, Materialbewegungen
  • Beladungsplanung per Klick-Zuordnung (kein Drag&Drop — touch-tauglich)
  • Personal & Qualifikationen: Einheiten-Hierarchie, Qualifikationstypen/-nachweise, "wer darf dieses Fahrzeug fahren"
  • Ausgabe/Rückgabe personenbezogener Materialien/Leihgeräte
  • Dokumentenverwaltung: Upload mit fester Kategorie (Prüfprotokoll/Wartungsbericht/Bedienungsanleitung/Rechnung/Zulassungsdokument), SHA-256-Duplikat-Erkennung, Online-Ansicht im Browser, typbasierte Zugriffsrechte (Rechnungen nur für Verantwortliche)
  • Globale Suche (Strg/⌘+K) über Objektnamen/-codes und geführte Materialien, per PostgreSQL-Trigram-Index
  • Benachrichtigung & Eskalation bei lange offenen Fehlbeständen
  • Zuständigkeiten flexibel Standorten/Objekten zuweisbar (kein starres zentral/dezentral)
  • Verantwortlichen-Dashboard — frei anordenbares und größenveränderbares Kachel-Raster, Status-Monitor-Modus für Wandbildschirme
  • PWA mit Offline-Queue — Kontroll-Eingaben werden bei fehlender Verbindung lokal gepuffert und automatisch nachgereicht
  • Granulares Rechte-System zusätzlich zu den vier Basisrollen (Mitarbeiter/Materialverantwortlicher/Leitungsverantwortlicher/Administration)
  • Dark Mode, Command Palette, zentrale Statuskomponenten

Vollständiger, gegen den Code abgeglichener Stand je Einzelfunktion: arbeitskacheln/00_index.md. Nutzer-Anleitung: docs/BENUTZERHANDBUCH.md.

Techstack

  • Backend: Python/FastAPI, SQLAlchemy (async), Alembic-Migrationen, PostgreSQL, JWT-Auth, slowapi Rate-Limiting
  • Frontend: React 18 + Vite + TypeScript, PWA (vite-plugin-pwa), Tailwind CSS v4, handgebaute shadcn/ui-artige Primitives, react-grid-layout fürs Dashboard
  • Tests: pytest (Backend, gegen echte Postgres-Testdatenbank) + Vitest/Testing Library (Frontend-Unit-Tests) + Playwright (Frontend-E2E, aktuell nicht in CI)
  • Hosting: eigener Linux-Server, nginx + systemd, kein Docker-Zwang

Projektstruktur

backend/            FastAPI-App (app/api/v1/endpoints, app/models, app/services, app/schemas)
backend/alembic/    Migrationen, fortlaufend nummeriert
backend/tests/      pytest-Suite
frontend/           React-PWA (src/pages, src/components, src/styles/global/*)
frontend/e2e/       Playwright-Tests (gemockte API)
arbeitskacheln/     Backlog (Epics/Kacheln, Status-Spalte = Code-Abgleich)
ergebnisse/         Fachkonzept-Ergebnisse aus der Klärungsphase
docs/               Nutzer-Doku

Entwicklung

Backend:

cd backend
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/alembic upgrade head
.venv/bin/uvicorn app.main:app --reload

Frontend:

cd frontend
npm install
npm run dev      # Dev-Server
npm run test     # Vitest Unit-Tests
npm run build    # Typecheck + Produktions-Build

Beide Teile brauchen eine lokale .env/PostgreSQL-Instanz — siehe backend/example.env.

S
Description
No description provided
Readme
5.2 MiB
Languages
Python 58.3%
TypeScript 35.4%
Dart 3.9%
CSS 1.8%
Shell 0.5%