Betriebsmittel
Zweck
Betriebsmittel sind Werkzeuge, Geraete und Material, die in der Brandschutz-Praxis unterwegs sind — z. B. Pruefkoffer, Werkzeuge, Messgeraete. Pro Betriebsmittel pflegen Sie Lager-Ort, Lieferant, Bewegungen, Dokumente und einen QR-Code zur Vor-Ort-Identifikation.
Voraussetzungen
Berechtigungen (CASL)
Frontend-Page-Guard:
| Action | Subject | Keycloak-Rolle |
|---|---|---|
view | FE_OperatingEquipment | — |
view | OperatingEquipment | APP_SPEAMCORE_VIEW_OPERATING_EQUIPMENT |
Tab-Subjects:
| Tab | Sub-Pfad | Subject |
|---|---|---|
| Bewegungen | /operating-equipments/:id/operating-equipment-movement-operating-equipments | OperatingEquipmentMovement:view |
| Dokumente | /operating-equipments/:id/documents | Document:view, DocumentParent:view |
API-Datenzugriff:
| Action | Subject | Endpoint | Keycloak-Rolle |
|---|---|---|---|
view | OperatingEquipment | GET /api/operating-equipments, GET /api/operating-equipments/:id | APP_SPEAMCORE_VIEW_OPERATING_EQUIPMENT |
create | OperatingEquipment | POST /api/operating-equipments | APP_SPEAMCORE_CREATE_OPERATING_EQUIPMENT |
update | OperatingEquipment | PATCH /api/operating-equipments/:id | APP_SPEAMCORE_UPDATE_OPERATING_EQUIPMENT |
delete | OperatingEquipment | DELETE /api/operating-equipments/:id | APP_SPEAMCORE_DELETE_OPERATING_EQUIPMENT |
Schritt-für-Schritt-Anleitung
Betriebsmittel anlegen
- Betriebsmittel (
/operating-equipments) → + Neu. - Das System legt einen leeren Datensatz an und navigiert direkt auf die Detail-Seite (Mutation mit leerem Body).
- Pflegen Sie
name, wählen Sie ein Lager und optional einen Spot. - Optional: Lieferant, Bilder, Custom-Felder ergaenzen.
- Änderungen werden automatisch gespeichert.
Lager-Ort wechseln
Wenn Sie ein Betriebsmittel umlagern wollen, ändern Sie warehouseId — der warehouseSpotId-Filter wird sofort neu gebaut. Der vorhandene Spot wird automatisch geleert, wenn er nicht im neuen Lager existiert.
Code-Lookup: Bewegungen werden nicht automatisch beim Ändern eines OperatingEquipments erzeugt — sie sind explizite Datensaetze, die über /operating-equipment-movements angelegt werden. Die Sub-Liste /operating-equipments/:id/operating-equipment-movement-operating-equipments zeigt nur Bewegungen, in denen das Equipment bereits beteiligt war.
QR-Code einsetzen
Der QR-Code auf der Detail-Seite zeigt auf die Public-Route /qr/:id und ermoeglicht im Aussendienst Vor-Ort-Identifikation per Smartphone-Kamera.


Toolbar (Detail-Seite)
Schlanke Toolbar oben rechts:
| Icon | Aktion (aria-label) | CASL | Wirkung |
|---|---|---|---|
| ← | Zurückgehen | — | Zurück zur Liste. |
| 🏠 | Zur Startseite gehen | — | Springt auf das Dashboard / /. |
| ⏮/◀/▶/⏭ | Pagination | — | Navigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung. |
Globale Floating-Drawer (links)
Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:
- KAL. (Mini-Kalender)
- ZEIT (Persoenliche Wochen-Arbeitszeit)
- ARBEIT (Eigene bevorstehende Aufträge)
UI-Elemente
Button: „+ Neu"
Listenseite. Erfordert create:OperatingEquipment. Erzeugt einen leeren Datensatz via POST /api/operating-equipments und navigiert auf Details — Sie tippen direkt im Form.
Tab: „General Data"
Standard-Tab. Form mit OperatingEquipmentForm — Standard-Felder + Attribute-Felder + Custom-Felder + Bilder + QR-Code.
Tab: „Bewegungen"
Sub-Liste der OperatingEquipmentMovement-Einträge — wann wurde das Betriebsmittel von wo nach wo verlagert.
Tab: „Dokumente"
Polymorpher DocumentParent-Anhang. Erfordert Document:view und DocumentParent:view.
Komponente: QrCodeComponent
Erzeugt den QR-Code zur /qr/:id-Route. Beim Scannen kommt der Anwender auf die Public-Detail-Seite (auch ohne Login für Identifikation).
Felder und Eingaben
| Feldname | Pflicht | Datentyp | Beschreibung | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|---|---|
operatingEquipmentNo | automatisch | NumberCircleAssignment | Aus Nummernkreis. Disabled. | Wird in Bewegungs-Listen, Aufträgen und im QR-Code verwendet. | view:NumberCircleAssignment |
name | nein | String | Bezeichnung des Betriebsmittels. | Anzeige in Listen und Auswahl-Selects. | — |
warehouseId | nein | UUID (Searchable Select) | Lager, in dem das Betriebsmittel registriert ist. | Aktiviert die warehouseSpotId-Auswahl, gefiltert auf dieses Lager. Bewegungen werden anhand dieses Werts berechnet. | view:Warehouse. |
warehouseSpotId | nein | UUID (Select) | Konkreter Lager-Spot (Regal/Fach). Disabled + invisible, wenn warehouseId leer ist. | Wird beim Wechsel von warehouseId automatisch geleert, wenn der Spot im neuen Lager nicht existiert. | view:WarehouseSpot; passender Spot existiert im gewählten Lager. |
supplierId | nein | UUID (Searchable Select) | Lieferant des Betriebsmittels. Clearable. | Wird in der Detail-Anzeige und in Reports verwendet. | view:Supplier |
Custom-Felder
Am unteren Rand der Detail-Seite stehen die Buttons aus Standardwerte und Attributfelder — Sie koennen pro Betriebsmittel Attribut- und Freitextfelder hinzufuegen (z. B. Pruefdatum, Kalibrierungsintervall).
Workflows und Zustaende
Betriebsmittel haben kein Status-Feld — Aktivität wird über paranoid Soft-Delete gesteuert. Bewegungen werden in der Bewegungs-Sub-Liste festgehalten.
Wiederverwendbare Konzepte
- Standardwerte und Attributfelder — Custom-Felder auf der Detail-Seite.
- Polymorpher Parent-Pattern —
DocumentParentundAttributeParentpolymorph. - Berechtigungen verstehen (CASL)
Verknuepfungen zu anderen Modulen
- Lager (
/warehouses) — Pflicht-Auswahl beiwarehouseId. - Lieferanten (
/suppliers) — optionale Auswahl beisupplierId. - OperatingEquipmentMovement — Bewegungen über Tab.
- Dokumente — Anhänge per
DocumentParent. /qr/:id— Public-QR-Detail-Route für Vor-Ort-Identifikation.
Häufige Fehler und Lösungen
| Fehler | Lösung |
|---|---|
warehouseSpotId änderbar trotz leerem Lager | Per Design — erst warehouseId setzen, dann Spot. |
| Spot ist beim Lagerwechsel verloren | Wenn der Spot im neuen Lager nicht existiert, wird er beim Wechsel automatisch geleert. Neuen Spot wählen. |
| QR-Code zeigt 404 | /qr/:id-Route ist nur bei aktiver id gültig. Soft-Delete prüfen. |
Auswahl warehouseSpotId leer | Lager hat keine Spots angelegt — vorher in der Lager-Detail-Seite Spots ergaenzen. |
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/operating-equipments | Liste | view OperatingEquipment |
GET | /api/operating-equipments/:id | Detail | view OperatingEquipment |
POST | /api/operating-equipments | Anlegen (mit leerem Body durch Listenseite) | create OperatingEquipment |
PATCH | /api/operating-equipments/:id | Ändern | update OperatingEquipment |
DELETE | /api/operating-equipments/:id | Soft-Delete | delete OperatingEquipment |
Versionshinweise
- 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard (Page-Komponente, Modal, Hooks, Field-Wirkungen).