Grund-Codes, Stationen & Abteilungen
Was ist das
Drei kleine Kataloge halten die großen Artefakte sauber. Grund-Codes benennen, warum etwas passiert: Ausschuss, Stillstand, ein leerer Rest. Stationen benennen, wo gebucht wird. Abteilungen geben jeder Gruppe ihren eigenen Einstiegs-Bildschirm. Keiner dieser Kataloge bucht selbst etwas; sie liefern nur die Auswahllisten und Namen, auf die Ansichten und Aktionen zugreifen.
Ohne diese Kataloge würde jede Aktion ihre eigenen Textbausteine mitbringen, ein Terminal würde jeden beliebigen Namen als Login akzeptieren, und die Startseite hätte für jede Gruppe dieselbe Ansicht. Die drei Kataloge sind klein, aber sie sind die Stelle, an der ein Admin diese Dinge einmal festlegt, statt sie in jeder einzelnen Aktion oder Ansicht neu zu tippen.
Grund-Codes
Es gibt zwei Kataloge: machine für Stillstands- und Zustandsgründe, product für Ausschuss und Restmengen. Ein machine-Grund trägt keine Kategorie. Ein product-Grund braucht dagegen eine Kategorie, entweder scrap (Ausschuss) oder box_close (Kiste mit Rest abschließen).
Jeder Grund-Code hat drei Felder: code (Groß-Kürzel, ^[A-Z][A-Z0-9_]{0,63}$), ein label für die Anzeige am Terminal und ein active-Flag. Sie legen Grund-Codes unter „Grund-Codes“ an und pflegen sie dort. Aktionen binden die Kataloge als Auswahllisten über eine options_source: machine-reasons für Zustandsgründe, scrap-reasons für Ausschuss, box-close-reasons für Restmengen. Ein unbekannter oder deaktivierter Code wird abgelehnt; die Buchung kommt nicht durch.
Das Speichern ist ein Upsert über (catalog, code). Legen Sie denselben Code im selben Katalog erneut an, überschreibt das den bestehenden Eintrag; im jeweils anderen Katalog bleibt er unberührt. Die gespeicherten Codes sind zugleich die Grundlage der Ausschuss-Auswertungen im Kennzahlen-Cockpit: Jede Ausschussbuchung trägt ihren Grund-Code, und das Cockpit gruppiert danach.
Welche Codes Sie anlegen, richtet sich nach den Buchungsgründen Ihres Betriebs. Verwenden Sie kurze, dauerhaft verständliche Kürzel. Änderungen am Anzeigenamen dürfen die Bedeutung bereits gebuchter Codes nicht verfälschen.
Stationen
Eine Station hat nur zwei Felder: einen Namen (^[a-z][a-z0-9-]{0,63}$) und einen Anzeigenamen. Bei einem nicht leeren Stationsnamen prüft der Login von Bedienern und Planern den Eintrag gegen dieses Register; die Ausnahmen stehen im Kapitel Rollen & Stationen. Das Einspielen eines Profils registriert dessen Maschinen automatisch als Stationen, jeweils mit der Maschinen-ID als Name. Zusätzliche Terminals, etwa ein reiner Scan-Platz ohne eigene Maschine, legt ein Admin unter „Stationen“ an.
Auch das Speichern einer Station ist ein Upsert, hier über den Namen. Ein erneuter Seed-Lauf überschreibt eine schon vorhandene Station nicht: Ändert ein Admin später den Anzeigenamen, bleibt diese Änderung auch nach einem Neustart erhalten.
Abteilungen
Eine Abteilung ist ein Paar aus Gruppe und Ansicht, dazu eine optionale Bezeichnung für die Anzeige. Die Zuweisung erscheint als Kachel auf der Seite „Abteilungen“. Ihr Link öffnet die Ansicht mit der Gruppe im URL-Parameter capability. Einzelne Abteilungen erscheinen derzeit nicht zusätzlich als eigene Einträge in der Seitenleiste.
Wie Sie die Zuweisung anlegen oder entfernen und wie sich Abteilungen von angehefteten Ansichten unterscheiden, beschreibt Navigation & Erscheinungsbild.
Beispiele
{
"name": "status-melden",
"summary": "Status melden",
"min_role": "operator",
"params": [
{
"name": "machine",
"kind": "text",
"label": "Maschine",
"source": "context",
"required": true
},
{
"name": "state",
"kind": "select",
"label": "Status",
"source": "operator",
"required": true,
"options": [
"running",
"idle",
"down",
"maintenance"
]
},
{
"name": "reason",
"kind": "select",
"label": "Grund",
"source": "operator",
"required": false,
"options_source": "machine-reasons"
}
],
"steps": [
{
"command": "machine.set_state",
"bind": {
"machine": {
"param": "machine"
},
"reason": {
"param": "reason"
},
"state": {
"param": "state"
}
}
}
]
}Der Grund ist ein select-Param mit options_source: machine-reasons, also der verwalteten Grund-Code-Liste für Maschinenzustände. Er ist nicht required: Ein Statuswechsel ohne Grund bleibt möglich, etwa beim normalen Wechsel auf running. Trägt der Bediener trotzdem einen Grund ein, muss es ein aktiver Code aus genau diesem Katalog sein; ein deaktivierter oder erfundener Code wird durch dieselbe Prüfung abgelehnt, die auch am Katalog selbst gilt.
{
"name": "maschine-leeren",
"summary": "Restmenge der aktiven Kiste an dieser Maschine als Ausschuss abschließen.",
"min_role": "operator",
"params": [
{
"name": "machine",
"kind": "text",
"label": "Maschine",
"source": "context",
"required": true
},
{
"name": "reason_codes",
"kind": "select",
"label": "Grund",
"source": "operator",
"required": true,
"options_source": "box-close-reasons"
}
],
"steps": [
{
"command": "lot.close_empty",
"bind": {
"machine": {
"param": "machine"
},
"reason_codes": {
"param": "reason_codes"
}
}
}
]
}Der Grund kommt hier als Pflichtfeld, mit options_source: box-close-reasons. Ohne gültigen Code aus diesem Katalog gibt es keine Buchung: lot.close_empty lehnt den Aufruf ab. Anders als bei status-melden ist der Grund hier keine Kür, sondern die einzige Angabe, die der Bediener überhaupt macht; die Maschine liefert den Kontext, die Kiste löst die Aktion selbst auf.
Fallstricke
- Deaktivieren statt löschen. Ein Grund-Code verschwindet aus den Auswahllisten, sobald er auf
active: falsesteht. Die Historie behält ihn trotzdem: Bereits gebuchte Zeilen zeigen weiter seinen Code und sein Label. - Kategorie nur bei
product. Einproduct-Code ohne Kategorie ist ungültig, einmachine-Code mit Kategorie ebenso. Die beiden Kataloge folgen unterschiedlichen Regeln, nicht derselben. - Nicht leere Station vor der ersten Anmeldung anlegen. Bediener und Planer können einen nicht leeren Stationsnamen nur verwenden, wenn er registriert ist. Das Feld „Station“ darf für jede Rolle leer bleiben. Admins dürfen sich auch mit einem nicht leeren, unregistrierten Namen anmelden.
- Upsert je Katalog und Code. Dasselbe Kürzel in
machineund inproductsind zwei getrennte Einträge. Legen SieSTOERUNGim einen Katalog an, ändert das nichts an einem gleichnamigen Code im anderen. - Ein erneuter Seed überschreibt nichts Vorhandenes. Das gilt für Stationen und Grund-Codes: Ein zweiter Seed-Lauf legt nur an, was noch fehlt. Eine Beschriftung oder ein Grund-Code, den ein Admin manuell angepasst hat, bleibt auch nach einem Neustart erhalten.