Zum Hauptinhalt springen

Betriebsmittel-Bewegungen

Zweck

Betriebsmittel-Bewegungen (OperatingEquipmentMovement) dokumentieren den Standortwechsel von Werkzeugen, Pruefkoffern und sonstigen Equipments. Drei Bewegungs-Typen sind möglich:

  • issueFromWarehouseToEmployee — Ausgabe vom Lager an Mitarbeiter.
  • returnFromEmployeeToWarehouse — Rueckgabe vom Mitarbeiter an Lager.
  • transferFromEmployeeToEmployee — Direktes Weitergeben zwischen zwei Mitarbeitern.

Nach Booking (POST /:id/book) wird die Bewegung mit Zeitstempel bookedAt eingefroren — Felder sind danach im FE disabled.

Voraussetzungen

- Mindestens ein Betriebsmittel. - Lager und/oder Mitarbeiter als Quelle/Ziel. - Berechtigung `create:OperatingEquipmentMovement`. Für Booking: `do:BookOperatingEquipmentMovement`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_OperatingEquipmentMovement, OperatingEquipmentMovementListe/Details aufrufbar
create/update/deleteOperatingEquipmentMovementPflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_OPERATING_EQUIPMENT_MOVEMENT
doBookOperatingEquipmentMovementBewegung buchen (einfrieren)APP_SPEAMCORE_DO_BOOK_OPERATING_EQUIPMENT_MOVEMENT

Schritt-für-Schritt-Anleitung

Bewegung anlegen

  1. Bewegungen (/operating-equipment-movements) → + Neu.
  2. Im Dropdown den Movement-Type wählen.
  3. Detail-Seite öffnet sich:
    • Bei issueFromWarehouseToEmployee: fromId ist Warehouse-Select, toId ist Employee-Select.
    • Bei returnFromEmployeeToWarehouse: umgekehrt.
    • Bei transferFromEmployeeToEmployee: beide Employee-Selects.
  4. Beschreibung ergaenzen.
  5. Tab Operating Equipments — die Geraete einer Bewegung zuordnen.

Bewegung buchen

  1. Buchen klicken — POST /:id/book setzt bookedAt.
  2. Alle Felder ausser description sind danach disabled.
Die Conditional FieldsConfig (3 Branches) wird **nur im Frontend** durchgesetzt. Der `bookedAt`-Lock blockiert FE-Eingaben — Backend muss separat Update-Block erzwingen.

Listenansicht — operating-equipment-movements

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

UI-Elemente

Button: „Buchen"

Detailseite. Erfordert do:BookOperatingEquipmentMovement. Setzt bookedAt und friert die Bewegung ein.

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
movementTypeja (disabled nach Anlage)Enum (3 Werte)Steuert die Conditional FieldsConfig für fromId/toId.
fromIdjaUUID (Warehouse oder Employee)Quelle der Bewegung. Disabled bei bookedAt != null.passende View-Permission je Type.
toIdjaUUID (Warehouse oder Employee)Ziel der Bewegung. Disabled bei bookedAt != null.passende View-Permission je Type.
descriptionneinTEXTBewegungsnotiz. Disabled bei bookedAt != null.
bookedAtDateTime (read-only)Zeitstempel der Buchung. null bei Entwurf, gesetzt nach Booking.

Workflows und Zustaende

Anlege-Pattern (Bewegungs-Logik)

Betriebsmittel-Bewegungen folgen einem strikten Audit-Trail-Modell:

  • Jede OperatingEquipmentMovement haelt fest wer wann welches Betriebsmittel wohin bewegt hat.
  • fromAssigneeType/fromAssigneeId und toAssigneeType/toAssigneeId (polymorph: Employee, Vehicle, Warehouse).
  • movedAt — Zeitstempel der Bewegung.

Zustand des Betriebsmittels wird durch die juengste Bewegung bestimmt — keine Direkt-Zuweisung.

**Storno** einer Bewegung erzeugt eine Gegen-Bewegung (`type = 'reversal'`) — keine echte Loeschung, weil der Audit-Trail erhalten bleiben muss.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • Betriebsmittel (/operating-equipments) — Geraete pro Bewegung.
  • Lager (/warehouses) — Quelle/Ziel je nach Type.
  • Mitarbeiter (/employees) — Quelle/Ziel je nach Type.

Häufige Fehler und Lösungen

FehlerLösung
Felder nicht editierbarBewegung wurde gebucht (bookedAt). Per Design — neue Korrektur-Bewegung anlegen.
fromId/toId Auswahl falsch typisiertMovement-Type erst bestaetigen — Conditional FieldsConfig zeigt anschliessend richtige Selects.
Booking schlaegt fehldo:BookOperatingEquipmentMovement fehlt oder Bewegung ist unvollstaendig.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/operating-equipment-movementsListeview OperatingEquipmentMovement
POST/api/operating-equipment-movementsAnlegencreate OperatingEquipmentMovement
GET/api/operating-equipment-movements/:idDetailview OperatingEquipmentMovement
PATCH/api/operating-equipment-movements/:idÄndern (geblockt bei bookedAt)update OperatingEquipmentMovement
DELETE/api/operating-equipment-movements/:idSoft-Deletedelete OperatingEquipmentMovement
POST/api/operating-equipment-movements/:id/bookBuchen / Einfrierendo BookOperatingEquipmentMovement

Versionshinweise

  • 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.