feat(doku): Anleitung, PDF und Ende-zu-Ende-Abnahme
Prüfung / pruefung (push) Canceled after 0s
Prüfung / pruefung (pull_request) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
Prüfung / e2e (pull_request) Canceled after 0s

Neun Kapitel unter docs/anleitung/ fuer Technik und Verwaltung, mit 35
Bildern aus `pnpm docs:screenshots` und einem Fehlerbehebungskapitel aus
echten Meldungen. `pnpm docs:pdf` macht daraus 72 Seiten A4 — hell
gedruckt, mit Deckblatt, Inhaltsverzeichnis und Seitenzahlen, ohne neue
Abhaengigkeit.

Die Ablaeufe pruefen ihre Voraussetzungen, bevor der erste startet:
antwortet ein gebauter Stand, steht der Seed-Bestand, und liest der
Server dieselbe Datenbank wie der Testprozess. Jeder Ablauf legt an, was
er braucht, und raeumt es weg. Vier neue kommen dazu: Hauptablauf,
Onboarding mit Vergleich der Zwischenablage, Rollen und 390 px auf
achtzehn Seiten.

Drei Fehler kamen dabei heraus. Das Projekt „handy" pruefte 412 px statt
der verlangten 390. Ein angemeldeter Benutzer ohne Recht erfuhr nie,
warum er abgewiesen wurde — die Meldung stand auf einer Seite, die ihn
sofort weiterleitet; jetzt gibt es /kein-zugriff. Und der
Verzeichnis-Ablauf schrieb die Attributzuordnung der ersten vorhandenen
Quelle um, in einer echten Installation also der produktiven.

101 Ablaeufe in INTERN und 97 in DIENSTLEISTUNG, beide ohne Fehlschlag.

Closes #18

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-26 11:03:02 +02:00
co-authored by Claude Opus 5
parent 9bd198a531
commit 10e272654f
104 changed files with 4527 additions and 299 deletions
+88
View File
@@ -0,0 +1,88 @@
# Erste Schritte
## Anmelden
Ruf die Adresse auf, die deine IT dir gegeben hat. Ohne Anmeldung landest du immer auf der
Anmeldeseite.
![Die Anmeldeseite mit Feldern für E-Mail und Passwort](bilder/anmelden-desktop.png)
Es gibt bis zu zwei Wege, und welche du siehst, hängt von der Einrichtung ab:
- **Mit … anmelden** — der Knopf oben trägt den Namen deines Anmeldeanbieters, etwa „Mit authentik
anmelden“. Das ist der normale Weg: du gibst dein Passwort dort ein, nicht hier.
- **E-Mail und Passwort** — ein lokales Konto, gedacht als Notfallzugang, wenn der Anbieter
ausfällt. Felder: **E-Mail**, **Passwort**, dann **Anmelden**.
Steht dort „Es ist kein Anmeldeweg eingerichtet“, ist die Anwendung noch nicht fertig
konfiguriert — das löst ein Administrator.
Warst du auf einer bestimmten Seite und deine Anmeldung ist abgelaufen, kommst du nach dem
Anmelden genau dorthin zurück. Das gilt auch für einen gescannten Aufkleber: du landest hinterher
auf der Geräteseite und nicht auf der Übersicht.
**Abmelden** geht über das Symbol neben deinem Namen, unten in der Seitenleiste; am Handy steht es
im Menü.
## Der Aufbau der Oberfläche
Am Schreibtisch liegt links eine dunkle Seitenleiste, rechts der Inhalt. Ganz oben in der Leiste
sitzt der Knopf **Scannen** — dort fängt der Techniker an. Darunter die Navigation:
| Eintrag | Was dort steht |
|---|---|
| **Übersicht** | was dringend ist, was bei dir liegt, woran zuletzt gearbeitet wurde |
| **Läufe** | alle offenen, laufenden und abgeschlossenen Läufe |
| **Vorlagen** | die Checklisten und ihre Versionen |
| **Mitarbeiter & Geräte** | Personen und Geräte, über zwei Reiter umschaltbar |
| **Kunden** | nur im Modus Dienstleistung |
| **Archiv** | Volltextsuche über abgeschlossene und archivierte Läufe |
| **Admin** | Einstellungen, Benutzer, Abteilungen, Verzeichnis — nur für Administratoren |
Was deine Rolle nicht darf, steht gar nicht in der Leiste. Ein ausgegrauter Eintrag heißt dagegen:
diese Seite gibt es noch nicht.
Unten in der Leiste stehen dein Name, deine Rolle, der Knopf zum Abmelden und die Versionsnummer.
Am Handy wird aus der Leiste eine Kopfzeile: links das Zeichen, rechts der Knopf **Scannen** und
daneben das Menü mit denselben Einträgen.
![Die Übersicht am Handy mit Kopfzeile, Scannen-Knopf und Menü](bilder/uebersicht-handy.png)
## Die Übersicht
Die Übersicht ist der Einstieg am Schreibtisch — das Gegenstück zum Aufkleber am Gerät. Sie ist
nach Dringlichkeit sortiert und zeigt vier Blöcke, jeder mit höchstens fünf Läufen:
- **Überfällig** — Läufe, deren Fälligkeitsdatum verstrichen ist und die noch offen oder in Arbeit
sind. Das ist das Einzige auf der Seite in Warnfarbe, und das ist Absicht: riefe jeder Block,
riefe keiner.
- **Mir zugewiesen** — was auf dich wartet. Zugewiesen wird beim Anlegen eines Laufs oder auf der
Geräteseite.
- **Zuletzt bearbeitet** — woran zuletzt gearbeitet wurde, auch von Kolleginnen und Kollegen.
- **Schnellstart** — die Vorlagen, aus denen hier am häufigsten Läufe entstehen. Ein Klick führt
in den Start-Dialog. Der Block erscheint nur, wenn du Läufe bearbeiten darfst.
Jede Zeile trägt den Status, bei Bedarf die Frist und einen Fortschrittsbalken („7 von 21“). Ein
Klick öffnet den Lauf. Leere Blöcke verschwinden nicht, sondern sagen, warum sie leer sind — eine
Seite, deren Abschnitte kommen und gehen, lässt sich nicht lesen.
## Die vier Rollen
Rechte hängen allein an der Rolle, und geprüft wird jede Anfrage neu gegen die Datenbank. Eine
Rollenänderung wirkt also sofort, ohne neues Anmelden.
| Rolle | Darf |
|---|---|
| **Leser** | alles ansehen: Läufe, Vorlagen, Geräte, Personen, Archiv |
| **Techniker** | dazu Läufe starten, abarbeiten, abschließen und archivieren; Geräte und Personen pflegen; Tags registrieren |
| **Redakteur** | dazu Vorlagen anlegen, bearbeiten und veröffentlichen |
| **Administrator** | alles: Benutzer, Verzeichnis, Abteilungen, Einstellungen, Kunden, Tag-Stapel, Geräte löschen — und als Einziger einen Lauf aus dem Archiv zurückholen |
Zwei Dinge liegen bewusst nur beim Administrator: das **Zurückholen aus dem Archiv**, weil das
Archiv die Zusage ist, dass sich ein abgeschlossener Lauf nicht mehr ändert, und das **endgültige
Löschen eines Geräts**, weil dabei ein Tag-Code für immer verbrennt.
Wichtig zu unterscheiden: **Benutzer** sind die Menschen, die Laufzettel bedienen und sich
anmelden. **Mitarbeiter** (im Modus Dienstleistung: **Personen**) sind die Leute, für die Läufe
geführt werden — die kommen meist aus dem Verzeichnis und melden sich hier nie an.
+269
View File
@@ -0,0 +1,269 @@
# Läufe abarbeiten
Ein Lauf ist eine Checkliste für einen konkreten Fall. Er wird vorbereitet, abgearbeitet,
abgeschlossen und irgendwann archiviert. Dieses Kapitel geht diesen Weg von vorn nach hinten
durch — am Schreibtisch und am Handy.
Ein Lauf hat vier Zustände:
| Zustand | Bedeutung |
|---|---|
| **offen** | vorbereitet und meist jemandem zugewiesen. Niemand arbeitet daran. |
| **in Arbeit** | jemand hat ihn begonnen. |
| **abgeschlossen** | fertig für jetzt. Notizen und Kommentare gehen weiter. |
| **archiviert** | schreibgeschützt, für immer. |
„Abgeschlossen“ und „archiviert“ sind bewusst zwei Dinge. Nach dem Abschluss lässt sich noch eine
Seriennummer berichtigen oder ein Kommentar nachtragen — das passiert oft. Erst das **Archivieren**
macht einen Lauf unveränderlich.
## Die Laufliste
![Die Laufliste mit Filtern und Fortschrittsbalken je Lauf](bilder/laeufe-liste-desktop.png)
Unter **Läufe** stehen alle offenen, laufenden und abgeschlossenen Läufe. Archivierte stehen hier
nicht — die findet das [Archiv](#im-archiv-suchen).
Gefiltert wird über die Zeile darüber: **Suche** (Titel, Ticket, Hostname oder Person), **Status**
und das Häkchen **nur meine**. Danach **Filtern**; **zurücksetzen** räumt alles weg. Der Filter
steht in der Adresse, ein Lesezeichen darauf funktioniert also.
Jede Zeile zeigt Titel, Status, gegebenenfalls „seit … fällig“, die Vorlage mit ihrer Version, das
Gerät, die Person und den Fortschritt. Es werden höchstens 200 Läufe gezeigt; fehlt deiner, such
nach Titel, Ticket, Hostname oder Person.
## Einen Lauf anlegen
Es gibt drei Wege, und der schnellste ist meist nicht dieser:
- **Am Gerät**: Aufkleber scannen, auf der Geräteseite eine Schnellstart-Kachel antippen. Der Lauf
entsteht und beginnt sofort, mit Gerät und Besitzer, ohne eine einzige Eingabe. Siehe
[Kapitel 03](03-qr-tags.md).
- **Aus der Übersicht**: der Block **Schnellstart** führt mit vorgewählter Vorlage in den Dialog.
- **Über den Knopf Lauf starten** in der Laufliste — der vollständige Weg, hier beschrieben.
![Der Start-Dialog mit Vorlage, Gerät, Person und den Angaben zum Lauf](bilder/lauf-starten-desktop.png)
Der Dialog fragt in der Reihenfolge, in der man denkt:
1. **Vorlage** — es stehen nur veröffentlichte Vorlagen zur Wahl, jeweils die zuletzt
veröffentlichte Fassung. Steht dort nichts, gibt es noch keine veröffentlichte Vorlage; ein
Entwurf ist noch niemandes Arbeitsanweisung.
2. **Gerät (optional)** — oder „kein Gerät“. Wählst du ein Gerät, wird sein Besitzer als Person
vorgeschlagen.
3. **Person (optional)** — jemand aus dem Verzeichnis, oder „keine Person aus dem Verzeichnis“.
4. **… oder Name als Freitext** — für ein Onboarding, bevor die Person im Verzeichnis steht. Eines
von beidem, nicht beides. Der Freitextname lässt sich später mit dem AD-Konto verknüpfen.
5. **Angaben zu diesem Lauf** — die Variablen der Vorlage. Ein Sternchen heißt Pflicht. Fragt die
Vorlage nach `upn`, `sam`, `mail` oder `hostname`, gibt es den Knopf **Namen aus den Regeln
vorschlagen**: er füllt leere Felder nach den Namensregeln des Hauses, ausgefüllte bleiben
stehen.
6. Aufgeklappt hinter **Titel, Ticket, Abteilung, Zuweisung und Fälligkeit** stehen die Beigaben.
Bleibt der **Titel** leer, bildet Laufzettel ihn aus Vorlage, Gerät oder Person und Datum. Die
**Abteilung** ist wichtiger, als sie aussieht: sie speist `{{ou}}` und `{{gruppen}}` in den
Befehlen dieses Laufs.
7. Im Modus Dienstleistung außerdem der **Kunde**.
**Lauf anlegen** legt ihn an und springt hinein. Er beginnt als **offen** — das ist die Zuweisung.
Gestartet wird er erst, wenn ihn jemand zur Bearbeitung öffnet.
Ein Lauf hängt für immer an der Version, mit der er gestartet wurde. Eine spätere Veröffentlichung
ändert ihn nicht, und den Wechsel auf eine neuere Version weist Laufzettel ausdrücklich ab. Für
eine neuere Fassung startest du einen neuen Lauf.
## Die Abarbeitungsansicht
![Ein Lauf in Arbeit mit Abschnitten, Schritten und Fortschrittsbalken](bilder/lauf-abarbeiten-desktop.png)
Oben stehen Titel, Vorlage mit Version, Gerät, Person und Ticket, darunter der Fortschrittsbalken
und die Knöpfe. Welcher Knopf da ist, hängt vom Zustand ab:
| Zustand | Knopf |
|---|---|
| offen | **Lauf beginnen** |
| in Arbeit | **Lauf abschließen** |
| abgeschlossen | **archivieren** |
| archiviert | **aus dem Archiv zurückholen** (nur Administrator) |
Daneben immer: der Umschalter **Kompakt** / **Ausführlich** und **Drucken**.
**Lauf beginnen** setzt den Lauf auf „in Arbeit“ und hält den Startzeitpunkt fest. Ein Lauf, den
jemand nur aufschlägt, hat noch nicht begonnen — sonst sähe die Liste nach Arbeit aus, die niemand
tut.
**Ausführlich** zeigt die Hilfetexte der Schritte, **Kompakt** blendet sie alle aus. Beim ersten
Mal sind sie der eigentliche Wert, beim dritten Mal stehen sie im Weg.
### Abschnitte
Die Schritte stecken in Abschnitten mit zweistelliger Nummer: `01 · Vorbereitung`. Die Nummer kommt
aus der Position und steht nirgends gespeichert. Ein Klick auf die Überschrift klappt den Abschnitt
zu oder auf; daneben steht „3 von 7“. Abschnitte, in denen nichts mehr zu tun ist, sind beim
Aufbau der Seite schon zu.
Enthält ein Abschnitt Befehlsschritte, gibt es **Alle Befehle als Skript kopieren** — einmal
kopieren statt achtmal.
### Einen Schritt erledigen
Unter jedem Schritt stehen drei Pillen:
- **erledigt** — getan.
- **nicht zutreffend** — trifft in diesem Fall nicht zu. Verlangt eine Begründung.
- **fehlgeschlagen** — hat nicht funktioniert. Verlangt eine Begründung.
„erledigt“ speichert mit einem Klick. Bei den anderen zwei erscheint erst das Feld **Begründung**,
dann der Knopf **Mit Begründung speichern**. Ohne Begründung steht im Archiv ein übersprungener
Schritt ohne Grund — und genau das macht ein Archiv wertlos.
Ein Klick auf die bereits gesetzte Pille nimmt die Angabe zurück; das Zurücknehmen braucht keine
Begründung.
**Jeder Schritt speichert einzeln.** Es gibt kein Gesamtformular und keinen Speichern-Knopf am
Ende: ein verlorener Klick soll nicht zwei Stunden Haken kosten.
Ein rotes Sternchen am Titel heißt **Pflichtschritt**. Ein Pflichtschritt muss erledigt oder
ausdrücklich als nicht zutreffend eingetragen sein, bevor sich der Lauf abschließen lässt.
### Werte erfassen
Je nach Schritt-Typ steht über den Pillen ein Eingabefeld — Text, Zahl, Auswahl oder Datum. Getippt
wird, dann **Wert speichern**. Das ist ein eigener Knopf und kein automatisches Speichern: ein halb
getippter Wert soll nicht in die Datenbank.
Eine Zahl außerhalb der erwarteten Grenzen wird **markiert, nicht abgewiesen** („Erwartet werden 8
bis 64 GB“). Ein Rechner mit 4 GB statt der erwarteten 8 ist ein Befund, den der Lauf festhalten
soll, kein Eingabefehler.
### Befehle kopieren
![Ein Befehlsschritt mit fertigem PowerShell-Befehl und dem Knopf zum Kopieren](bilder/lauf-befehlsschritt-desktop.png)
Ein Schritt vom Typ **Befehl** zeigt den fertigen Befehl in Monospace, mit allen Platzhaltern
eingesetzt. **Befehl kopieren** legt ihn in die Zwischenablage, der Knopf bestätigt kurz mit
„Kopiert.“. Der Text steht vollständig da, du kannst ihn also auch markieren.
Drei Hinweise können daneben stehen:
- **Ein Platzhalter ließ sich nicht einsetzen** — er steht als `{{name}}` im Befehl und muss vor
dem Ausführen von Hand ersetzt werden. Das ist eine Warnung und keine Sperre; vielleicht setzt du
den Wert selbst ein.
- **Ein Passwort** — enthält der Befehl `{{generiertes_passwort}}`, entsteht das Passwort bei jeder
Anzeige neu und wird **nirgends gespeichert**: nicht im Lauf, nicht im Kommentar, nicht im
Protokoll, nicht im Ausdruck. Wer es nicht sofort weiterreicht, hat es verloren. Sobald sich die
Seite neu aufbaut — auch nach dem Speichern eines Schritts — steht dort ein anderes.
- **Der Befehl ließ sich nicht sicher füllen** — dann gibt es keinen Kopier-Knopf, sondern eine
Fehlermeldung. Ein halb maskierter Befehl zum Kopieren wäre die gefährlichste aller Antworten.
### Einen ganzen Abschnitt überspringen
Am Ende jedes Abschnitts sitzt **Abschnitt trifft nicht zu**. Der Fall aus dem Alltag: im
Onboarding gibt es zwei Konto-Abschnitte, und je nach Kunde trifft einer gar nicht zu. Du gibst
eine Begründung ein und drückst **Abschnitt vermerken** — die Begründung steht danach an jedem
Schritt des Abschnitts. Achtzehn Haken einzeln mit derselben Begründung zu versehen macht niemand,
und wer es nicht macht, lässt sie weg.
### Kommentare
Zwei Orte, zwei Bedeutungen:
- **Kommentar zu diesem Schritt** — aufklappbar unter dem Schritt, für das, was genau dort
aufgefallen ist.
- **Kommentare zum Lauf** — der Kasten unten, für alles andere.
Beide fragen dasselbe: „Was sollte man später wissen?“ Dann **Kommentar hinzufügen**. Kommentare
werden mit Name und Zeitpunkt festgehalten und lassen sich nicht löschen.
### Zwei Techniker am selben Lauf
Die Seite fragt alle zehn Sekunden nach Änderungen und lädt sich neu, wenn sich wirklich etwas
geändert hat. Bei verstecktem Tab pausiert die Abfrage.
Steht ein erzeugtes Passwort auf dem Bildschirm, lädt sie **nicht** von selbst neu — stattdessen
erscheint oben ein Streifen: „Jemand anderes hat an diesem Lauf etwas geändert. Beim Neuladen
entsteht ein neues Passwort.“ Du entscheidest mit **Neu laden**, wann es passt.
### Einen Freitextnamen später verknüpfen
Läuft ein Onboarding auf einen Freitextnamen, erscheint oben **„…“ mit einem AD-Konto verknüpfen**.
Zwei Wege: die Person aus der Liste wählen, oder — wenn das Konto gerade erst im Verzeichnis
entstanden und noch nicht abgeglichen ist — ihren **UPN** eintragen. Danach **Verknüpfen**. Ohne
das findet die Person in ihrer Historie später nichts wieder.
## Abschließen
**Lauf abschließen** geht nur, wenn kein Pflichtschritt mehr offen ist. Erledigt und „nicht
zutreffend“ zählen beide, **fehlgeschlagen nicht** — ein fehlgeschlagener Schritt ist entweder zu
beheben oder mit Begründung als nicht zutreffend einzutragen. Solange etwas offen ist, ist der
Knopf gesperrt und darunter steht, was fehlt.
Wird danach eine Änderung nachgetragen, die einen Pflichtschritt wieder offen lässt, nimmt sich der
Abschluss selbst zurück. Damit lügt „abgeschlossen“ nie.
## Archivieren — das ist endgültig
**archivieren** fragt nach: „Nach dem Archivieren ändert sich an diesem Lauf nichts mehr — kein
Kommentar, keine Notiz, kein Schritt.“ Erst **Ja, archivieren** vollzieht es.
Danach ist der Lauf schreibgeschützt. Er zeigt für immer, was damals abgearbeitet wurde. Nur ein
**Administrator** holt ihn mit **aus dem Archiv zurückholen** auf „abgeschlossen“ zurück, und das
wird protokolliert.
Archiviere also erst, wenn wirklich alles drinsteht. Es gibt keinen Grund zur Eile: ein
abgeschlossener Lauf steht auch im Archiv und ist durchsuchbar.
## Drucken
**Drucken** öffnet einen hellen Beleg auf A4, ohne Navigation, zum Abheften. Im Browser dann
**Jetzt drucken**; wer ein PDF braucht, druckt in eine Datei.
![Die Druckansicht eines Laufs auf A4, hell und ohne Navigation](bilder/druckansicht-desktop.png)
Auf dem Blatt stehen Kopfdaten, alle Abschnitte mit Zustand, Wert und Notiz je Schritt und die
Kommentare. **Ein erzeugtes Passwort steht dort nie** — an seiner Stelle steht
`[Passwort – nicht gespeichert]`, und erzeugt wird auch keines. Auf einem Blatt, das jemand
abheftet, darf keines stehen.
Von der Person stehen nur Name, UPN und Abteilung auf dem Beleg. Ein Ausdruck liegt herum, wird
kopiert und weitergegeben; was darauf steht, ist aus der Hand gegeben.
## Im Archiv suchen
![Das Archiv mit Suchfeld, Filtern und Fundstellen im Treffer](bilder/archiv-desktop.png)
Das **Archiv** durchsucht abgeschlossene und archivierte Läufe — ihren Titel, die Notizen und Werte
der Schritte und die Kommentare. Es zeigt zu jedem Treffer die Fundstelle mit dem Text drumherum:
Wer im Archiv sucht, will nicht wissen, *dass* etwas passt, sondern *wo*.
Der **Suchbegriff** braucht mindestens zwei Zeichen; ohne Begriff wird nur gefiltert. Hinter
**Weitere Filter** stehen Person, Abteilung, Gerät, Bearbeiter, Kunde und der Zeitraum
(**abgelegt ab** / **abgelegt bis**). Als Ablage gilt der Zeitpunkt der Archivierung, sonst der des
Abschlusses, sonst der des Anlegens — danach ist auch sortiert. Mit dem Häkchen **auch offene und
laufende Läufe** kommen die noch nicht fertigen dazu.
Gezeigt werden höchstens 100 Treffer; steht das dabei, holt ein engerer Zeitraum oder ein genauerer
Begriff die übrigen hervor.
## Am Handy
Die Abarbeitungsansicht ist für das Handy gemacht, weil dort gearbeitet wird: neben dem
aufgeschraubten Rechner, im Serverraum, vor dem Drucker.
![Ein Lauf am Handy, ein Abschnitt aufgeklappt](bilder/lauf-abarbeiten-handy.png)
Was du wissen solltest:
- **Es gibt nie horizontales Scrollen.** Alles steht untereinander, auch bei 390 Pixeln Breite.
Knöpfe und Pillen sind 44 Pixel hoch und mit dem Daumen zu treffen.
- **Schalte auf Kompakt.** Ohne die Hilfetexte passen dreimal so viele Schritte auf den Schirm.
- **Klapp erledigte Abschnitte zu.** Fertige Abschnitte sind beim Öffnen des Laufs schon zu; beim
Nachtragen einer Notiz bleibt ein selbst aufgeklappter Abschnitt offen, auch wenn dazwischen
gespeichert wird.
- **Jeder Klick speichert sofort.** Bei wackligem WLAN ist das der Unterschied zwischen „ein Haken
fehlt“ und „zwei Stunden fehlen“. Bleibt eine Pille nach dem Tippen ungesetzt, war die
Verbindung weg — tippe sie noch einmal.
- **Befehle kopieren** funktioniert auch am Handy, ist dort aber selten nützlich: den
PowerShell-Befehl führst du ohnehin an einem Rechner aus. Nimm dafür den Weg über die
Übersicht am Schreibtisch oder schicke dir den Lauf per Link.
- **Der Einstieg ist der Aufkleber.** Scannen, Geräteseite, „Starten“ — dazu
[Kapitel 03](03-qr-tags.md).
+164
View File
@@ -0,0 +1,164 @@
# QR-Aufkleber und Tags
Auf jedem Objekt klebt ein Aufkleber mit einem QR-Code und dem Code darunter zum Ablesen, etwa
`LZ-7K3F9Q`. Objekt heißt: nicht nur PCs. Ein Serverschrank, ein Raum, eine Firewall oder ein
Drucker bekommen genauso einen.
Im QR-Code steht nichts als die Adresse dieser Anwendung plus der Tag-Code. Kein Name, keine
Seriennummer, kein Besitzer — ein Aufkleber hängt sichtbar am Gerät und wird von jedem Telefon
gelesen, auch von einem fremden. Hinter der Adresse verlangt Laufzettel eine Anmeldung.
**Ein Tag-Code wird nie geändert und nie neu vergeben.** Auch nicht, nachdem das Gerät archiviert
oder gelöscht wurde. Das ist der Grund, warum der Aufkleber die einzige Angabe am Gerät ist, die
Jahre hält: Hostnamen ändern sich, Besitzer wechseln, Seriennummern werden abgeschrieben.
Im Code gibt es die Zeichen `0`, `O`, `1` und `I` nicht — sie sind zu leicht zu verwechseln.
Groß- und Kleinschreibung ist beim Eintippen unerheblich.
## Zwei Wege, wie ein Tag entsteht
**Weg A — Gerät zuerst.** Du legst das Gerät in der Geräteliste an; der Tag-Code entsteht dabei und
steht danach in der Erfolgsmeldung. Dann druckst du sein Etikett und klebst es auf. Siehe
[Kapitel 05](05-mitarbeiter-geraete.md).
**Weg B — Aufkleber zuerst.** Du legst auf Vorrat einen Stapel Tags an, druckst den Bogen und
klebst die Aufkleber auf, was gerade da ist. Wer später davorsteht, scannt und trägt ein, was es
ist. Das ist der Weg für eine Lieferung von zwanzig Notebooks.
## Einen Stapel Tags anlegen
Das verlangt die Rolle **Administrator**: ein Stapel verbraucht unwiderruflich Tag-Codes. Der Weg
dorthin steht in der Geräteliste unten („Aufkleber auf Vorrat drucken? **Tag-Stapel anlegen**“).
![Die Seite Tags mit dem Formular für einen Stapel und der Liste der noch nicht zugeordneten Tags](bilder/tags-desktop.png)
Unter **Stapel anlegen** steht die **Anzahl**, voreingestellt 50 — das sind gut zwei A4-Bogen und
der übliche Vorrat. Höchstens 500 auf einmal. Im Modus Dienstleistung wählst du außerdem den
**Kunden**. Dann **Stapel anlegen**.
Danach erscheint direkt daneben **Etiketten für diesen Stapel drucken** — genau diese Codes, nicht
alles, was noch offen ist.
> **Jeder Tag verbraucht einen Tag-Code für immer**, auch einer, dessen Aufkleber nie geklebt wird.
> Ein Stapel, den niemand klebt, ist verbraucht. Lege also so viele an, wie du wirklich aufklebst.
Darunter listet **Noch nicht zugeordnet** alle Tags, die auf ein Gerät warten. Jede Zeile führt über
den Code zum Registrierformular und hat rechts **Einzeletikett** zum Nachdrucken. Über der Liste
steht **Etiketten drucken** für den ganzen Vorrat.
Ein Tag ohne Gerät steht auch in der Geräteliste, dort mit dem Kennzeichen „Tag ohne Zuordnung“.
## Etiketten drucken
Es gibt zwei Formate, und die Druckansicht schaltet zwischen ihnen um:
| Format | Maße | Wofür |
|---|---|---|
| **Einzeletikett** | 62 × 29 mm, ein Stück je Seite | Etikettendrucker |
| **A4-Bogen** | 3 × 8 Stück à 70 × 37 mm | Stanzbogen im Laserdrucker |
![Die Druckansicht im Format 62 × 29 mm, ein Etikett je Seite](bilder/etikett-62x29-desktop.png)
![Die Druckansicht als A4-Bogen mit dem Raster aus 3 × 8 Etiketten](bilder/etiketten-a4-desktop.png)
Auf dem Etikett stehen der QR-Code, der Tag-Code zum Ablesen, Hostname oder Bezeichnung des Geräts,
der Besitzer, das Wort „laufzettel“ und im Modus Dienstleistung das Kundenkürzel. Etiketten sind
immer hell, auch wenn die Anwendung dunkel ist.
Vor dem Drucken:
- **Skalierung im Druckdialog auf 100 % stellen und Kopf- und Fußzeilen abschalten** — sonst sitzen
die Etiketten neben ihrer Stanzung.
- Steht oben eine rote Warnung **„APP_URL ist nicht gesetzt“**, brich ab und hol einen
Administrator. Die QR-Codes zeigen dann ins Leere, und auf dem Bildschirm sieht das Etikett
trotzdem richtig aus. Ein geklebter Aufkleber lässt sich nicht berichtigen.
Ein Etikett nachdrucken geht jederzeit: auf der Geräteseite über **Etikett drucken**, in der
Tag-Liste über **Einzeletikett**. Auch das Etikett eines archivierten Geräts lässt sich weiter
drucken — der Aufkleber am Karton im Lager soll lesbar bleiben. Zum Nachdrucken genügt die Rolle
**Leser**; niemand soll für einen abgerissenen Aufkleber den Administrator fragen müssen.
## Einen Aufkleber scannen
Der Knopf **Scannen** steht an beiden Stellen ganz oben — in der Seitenleiste und am Handy in der
Kopfzeile. Halte den Aufkleber ins Bild; Laufzettel springt von selbst weiter, sobald der Code
erkannt ist.
![Der Scanner am Handy mit Kamerabild und dem Feld zum Eintippen](bilder/scannen-handy.png)
Drei Dinge, die passieren können:
- **Der Code gehört zu einem Gerät** — du landest auf der Geräteseite.
- **Der Code gehört zu einem vorgedruckten Tag** — du landest im Registrierformular.
- **Es ist kein Laufzettel-Code** — es erscheint der Hinweis „Das ist kein Laufzettel-Tag. Halte den
Aufkleber mit dem Code LZ-… ins Bild.“
Unter dem Kamerabild steht immer das Feld **Code eintippen**. Es ist der Weg, wenn die Kamera nicht
will: kein HTTPS, verweigerte Berechtigung, Rechner ohne Kamera, ausgefallener QR-Leser. Dann tippst
du den Code ab, der lesbar unter dem QR steht, und drückst **Öffnen**. Ein Scanner, der nicht
startet, darf keine Sackgasse sein.
Am Schreibtisch brauchst du keine Kamera: in der Tag-Liste und in der Geräteliste führt der Code
als Link dorthin, wohin auch der Scan führt.
## Einen unregistrierten Tag registrieren
Steht hinter dem Code noch kein Gerät, erscheint **Gerät registrieren**. Dafür braucht es die Rolle
**Techniker**, **Redakteur** oder **Administrator**; einem Leser sagt die Seite, dass ihm die
Berechtigung fehlt.
![Das Registrierformular hinter einem vorgedruckten Aufkleber](bilder/tag-registrieren-handy.png)
Fünf Angaben, mehr nicht — der Rest lässt sich später in der Geräteliste nachtragen:
- **Typ** — PC, Notebook, Server, Firewall, Switch, Drucker, Raum oder Sonstiges.
- **Hostname** und **Bezeichnung** — eines von beiden genügt. Ein Raum oder ein Serverschrank hat
keinen Hostname, ein Notebook keine Bezeichnung.
- **Seriennummer** und **Inventarnummer**.
- **Besitzer (optional)** — oder „niemand — Server, Raum oder Poolgerät“. Zur Wahl stehen nur
Personen desselben Kunden.
Der **Tag-Code steht oben, aber nicht als Feld**: er ist schon gedruckt und geklebt, und jede
Änderung daran wird abgewiesen.
**Gerät registrieren** führt direkt auf die Geräteseite.
## Die Geräteseite
Das ist das Ziel jedes gescannten Aufklebers — die Seite, die ein Techniker am Handy vor dem Gerät
aufschlägt. Sie beantwortet in dieser Reihenfolge: Was ist das hier? Was wartet daran? Was kann ich
sofort anfangen? Was war schon?
![Die Geräteseite mit Kopfdaten, Zuweisungen, Schnellstart und Historie](bilder/geraeteseite-desktop.png)
- **Kopf** — Name, Tag-Code, Typ, Besitzer, Modell, Serien- und Inventarnummer, Notizen. Rechts
**Etikett drucken**. Hinter **QR-Code anzeigen** steht derselbe Code als Bild auf dem Schirm, für
den Fall, dass der Aufkleber abgerissen ist.
- **Zugewiesen** — was an diesem Gerät wartet. Ein offener Lauf hat den Knopf **Starten**: er setzt
ihn auf „in Arbeit“ und führt hinein. Ein laufender hat **Weiter**, ein fertiger **Ansehen**.
- **Schnellstart** — eine Kachel je Vorlage, die für diesen Gerätetyp hinterlegt ist. Ein Tipp legt
den Lauf mit diesem Gerät und seinem Besitzer an und beginnt ihn, ohne eine einzige Eingabe.
Steht auf der Kachel „fragt noch nach Angaben“, führt sie stattdessen in den Start-Dialog — dort
sind Gerät und Person schon vorbelegt.
- **Vorlage zuweisen** — für später oder für jemand anderen: Vorlage, **Techniker (optional)**,
**Fällig am (optional)**, dann **Lauf zuweisen**. Der Lauf entsteht als **offen** und erscheint
oben unter „Zugewiesen“.
- **Historie** — die letzten 20 Läufe an diesem Gerät, mit Abschlussdatum und Fortschritt. Für die
älteren und die archivierten nimm das [Archiv](02-laeufe-abarbeiten.md).
Ein archiviertes Gerät und ein Tag ohne Zuordnung nehmen keine neue Arbeit auf. Statt Formularen,
die hinterher abgelehnt würden, steht dort dann der nächste Schritt.
![Die Geräteseite am Handy](bilder/geraeteseite-handy.png)
## Am Handy
- **Scannen ist der Einstieg**, und der Knopf steht deshalb in der Kopfzeile immer da.
- **Die Kamera braucht HTTPS.** Auf einer Adresse ohne Verschlüsselung gibt kein Browser sie frei —
dann bleibt das Feld zum Eintippen.
- **Freigabe verweigert?** Gib die Kamera in den Einstellungen des Browsers für diese Seite frei
und lade neu.
- Die rückwärtige Kamera wird von selbst genommen. Halte den Aufkleber in den hellen Rahmen in der
Bildmitte; bei schlechtem Licht hilft ein Schritt zur Seite mehr als näher herangehen.
- **Registrieren geht am Handy vollständig.** Du stehst vor dem Gerät und liest den Hostname vom
Anmeldebildschirm ab — genau dafür sind es nur fünf Felder.
+240
View File
@@ -0,0 +1,240 @@
# Vorlagen bauen
Eine Vorlage ist die Checkliste selbst: was bei einer PC-Neuinstallation zu tun ist, in welcher
Reihenfolge, mit welchen Hilfetexten und welchen Befehlen. Vorlagen anlegen, bearbeiten und
veröffentlichen darf die Rolle **Redakteur** oder **Administrator**.
Die wichtigste Regel steht am Anfang, weil alles andere daraus folgt:
> **Eine veröffentlichte Version wird nie verändert.** Sonst zeigte ein alter Lauf Schritte, die es
> damals nicht gab. „Bearbeiten“ legt deshalb eine vollständige Kopie als **Entwurf** an. Je Vorlage
> gibt es höchstens einen Entwurf. Läufe starten nur an veröffentlichten Versionen und hängen für
> immer an der Version, mit der sie gestartet wurden.
## Die Vorlagenliste
![Die Vorlagenliste mit Filtern und Kennzeichen je Vorlage](bilder/vorlagen-liste-desktop.png)
Gefiltert wird nach **Suche**, **Kategorie**, **Schlagwort** und mit dem Häkchen **auch
archivierte**, dann **Filtern**.
Die Kennzeichen an einer Zeile sagen den Zustand:
| Kennzeichen | Bedeutung |
|---|---|
| **v3** | Version 3 ist veröffentlicht und gültig |
| **noch nicht veröffentlicht** | es gibt nur einen Entwurf; daran lässt sich kein Lauf starten |
| **Entwurf vorhanden** | es wird gerade an einer neuen Version gearbeitet |
| **archiviert** | aus dem Angebot genommen |
| **nur …** | gilt nur für einen Kunden (Modus Dienstleistung) |
Gibt es einen Entwurf, führt **Entwurf öffnen** direkt in den Editor — der häufigste Fall ist,
weiterzuarbeiten an dem, was man gestern angefangen hat.
Unten auf der Seite steht **Vorlage anlegen**: **Name**, **Beschreibung (optional)**, **Kategorie
(optional)**, **Schlagworte, mit Komma getrennt** und im Modus Dienstleistung **Nur für einen
Kunden (optional)**. Die neue Vorlage beginnt als Entwurf. Namen sind nicht eindeutig; zwei
Vorlagen dürfen gleich heißen.
## Die Vorlagenseite
![Die Seite einer Vorlage mit Versionsgeschichte, Kopfdaten und weiteren Aktionen](bilder/vorlagen-seite-desktop.png)
Sie beantwortet drei Fragen auf einen Blick: Was ist gerade gültig? Wird gerade daran gearbeitet?
Was wurde wann veröffentlicht?
**Bearbeiten** ist der wichtigste Knopf. Er erzeugt eine tiefe Kopie der letzten veröffentlichten
Version als neuen Entwurf und führt in den Editor. Gibt es schon einen Entwurf, heißt der Knopf
**Entwurf weiter bearbeiten** und führt genau dorthin — auch wenn zwei Redakteure gleichzeitig
klicken.
Unter **Versionen** steht die Geschichte: Nummer, Veröffentlichungszeitpunkt und -person, die Zahl
der Läufe und die Änderungsnotiz. Je Zeile **Ansehen** (beziehungsweise **Im Editor öffnen** beim
Entwurf) und **Als JSON exportieren**.
Unter **Kopfdaten** stehen Name, Beschreibung, Kategorie, Schlagworte und die Kundenzuordnung. Sie
hängen an der Vorlage, nicht an einer Version — ein Tippfehler im Namen kostet also keine neue
Version. **Kopfdaten speichern** übernimmt sie.
Unter **Weiteres**:
- **Duplizieren** — legt eine neue Vorlage an, mit dem Inhalt der neuesten Version als Entwurf.
Gut als Ausgangspunkt für eine Abwandlung.
- **archivieren** / **wieder freigeben** — archiviert wird, was nicht mehr angeboten werden soll.
Gelöscht wird nichts: an einer Vorlage hängen Läufe. Ein Entwurf einer archivierten Vorlage lässt
sich noch bearbeiten, aber nicht veröffentlichen.
- **Entwurf verwerfen** — mit Rückfrage. Der Entwurf ist danach weg und nicht wiederherstellbar;
die veröffentlichte Version bleibt unberührt.
## Der Editor
![Der Vorlagen-Editor mit Variablen, Abschnitten und Schritten](bilder/vorlagen-editor-desktop.png)
Oben stehen Name, **Version N** und der Zustand — **Entwurf** oder **veröffentlicht** — und daneben
**Nicht gespeichert** oder **gespeichert**.
Unten klebt eine Leiste mit **Speichern** und derselben Auskunft in Worten. **Es gibt kein
automatisches Speichern**: eine halb umgebaute Vorlage soll nicht nebenbei zur Wahrheit werden.
Solange etwas nicht gespeichert ist, fragt der Browser vor dem Verlassen der Seite nach.
Eine veröffentlichte Version öffnet der Editor nur lesend — mit denselben Feldern, nur
schreibgeschützt. Oben steht dann, warum.
### Abschnitte
Ein Abschnitt fasst die Schritte zusammen, die zusammengehören. **Abschnitt hinzufügen** legt einen
an; er bekommt einen **Titel des Abschnitts** und darunter seine Schritte.
Die zweistellige Nummer (`01 · Vorbereitung`) kommt aus der Position und wird **nie gespeichert**.
Schreib sie also nicht in den Titel — beim ersten Umsortieren wäre sie falsch.
Sortiert wird auf zwei Wegen: mit dem Anfasser links ziehen, oder über die Pfeile **nach oben** und
**nach unten** an der Zeile. Der zweite Weg ist am Handy der bessere. Schritte werden innerhalb
ihres Abschnitts sortiert und lassen sich nicht in einen anderen ziehen.
Höchstens 200 Abschnitte, höchstens 500 Schritte je Abschnitt.
### Schritte und ihre Typen
Jeder Schritt hat **Titel**, **Typ** und das Häkchen **Pflichtschritt**. Dazu je nach Typ:
| Typ | Was der Techniker tut | Einstellungen |
|---|---|---|
| **Haken** | abhaken | keine |
| **Text** | Text eintragen | **Mehrzeiliges Feld** |
| **Zahl** | Zahl eintragen | **Mindestens**, **Höchstens**, **Einheit** |
| **Auswahl** | aus einer Liste wählen | **Optionen** (mindestens eine) |
| **Datum** | Datum wählen | keine |
| **Befehl** | Befehl kopieren und ausführen | **Shell** (powershell, bash, cmd), **Befehl** |
Mindestens und Höchstens sind **Hinweise, kein Verbot**: ein Wert außerhalb wird im Lauf markiert
und trotzdem gespeichert.
**Pflichtschritt** heißt: der Lauf lässt sich nicht abschließen, solange dieser Schritt weder
erledigt noch ausdrücklich als nicht zutreffend eingetragen ist. Setz das sparsam — sind alle
Schritte Pflicht, ist keiner Pflicht.
Beim Wechsel des Typs räumt der Editor die Einstellungen auf, damit nicht der Befehl eines
ehemaligen Befehlsschritts unsichtbar mitwandert.
### Hilfetext und Doku-Link
Der **Hilfetext** ist in der Abarbeitungsansicht ausklappbar und darf **Markdown** enthalten:
`**fett**`, Listen, Links, `` `Code` ``. **Kein HTML.** Hier steht das, was jemand beim ersten Mal
wissen muss — im Modus „Kompakt“ blendet der Techniker ihn später aus.
Der **Doku-Link** erscheint im Lauf als **Anleitung öffnen**. Nur `http`- und `https`-Adressen.
### Variablen
Variablen werden **beim Start eines Laufs abgefragt** und füllen die Platzhalter. **Variable
hinzufügen** legt eine an:
- **Schlüssel** — der Name im Platzhalter `{{schluessel}}`. Ein Variablenschlüssel beginnt mit einem
Kleinbuchstaben und besteht aus Kleinbuchstaben, Ziffern und Unterstrich, höchstens 40 Zeichen.
`vorname`, `ad_gruppe` und `raum2` gehen; `Vorname`, `mit-strich` und `2te_wahl` nicht. Die
Strenge hat einen Grund: derselbe Schlüssel steht in PowerShell-Befehlen, und `{{Vor-Name}}` ließe
sich dort nicht mehr von der Syntax der Shell trennen.
- **Beschriftung** — was im Startformular über dem Feld steht.
- **Typ** — Text, Zahl, Auswahl oder Datum.
- **Pflichtangabe beim Start** — ohne Eingabe lässt sich der Lauf nicht anlegen.
- **Optionen** — nur bei Auswahl.
Ein Schlüssel darf nur einmal vorkommen; der Editor markiert eine Doppelung sofort. Eine Variable,
die nirgends verwendet wird, ist erlaubt — sie wird trotzdem beim Start abgefragt.
Fünf Namen sind als Variable gesperrt: `techniker`, `datum`, `kunde`, `kundenkuerzel` und
`generiertes_passwort`. Sie sagen, **wer, wann und für wen** — eine Variable dafür hieße, dass in
einem fertigen Befehl ein fremder Name oder ein falsches Datum stehen kann, ohne dass es auffällt.
Höchstens 200 Variablen.
### Platzhalter
Ein Platzhalter `{{schluessel}}` in **Titel, Hilfetext oder Befehl** wird beim Abarbeiten ersetzt.
Leerzeichen in den Klammern sind erlaubt: `{{ vorname }}` wird erkannt.
Er wird aus einer Variablen der Vorlage gefüllt — oder aus einem der **eingebauten** Werte. Welche
es gibt, steht im Editor hinter **Welche Platzhalter gibt es?**, nach Quelle gruppiert:
| Quelle | Platzhalter |
|---|---|
| Gerät und Lauf | `hostname`, `seriennummer`, `inventarnummer`, `ticket`, `datum`, `techniker`, und im Modus Dienstleistung `kunde`, `kundenkuerzel` |
| Mitarbeiter | `mitarbeiter`, `benutzer`, `vorname`, `nachname`, `upn`, `sam`, `mail`, `abteilung`, `titel`, `vorgesetzter`, `vorgesetzter_sam`, `dn` |
| Abteilung | `ou` (Ziel-Container), `gruppen` (Standardgruppen, kommagetrennt) |
| Einstellungen | `ou_gesperrt` (Ziel-OU für deaktivierte Konten) |
| Besonders | `generiertes_passwort` |
`{{generiertes_passwort}}` ist der Sonderfall: **20 Zeichen, bei jeder Anzeige neu erzeugt und
nirgends gespeichert** — nicht im Lauf, nicht im Kommentar, nicht im Protokoll, nicht im Ausdruck.
Auf einem Ausdruck steht an seiner Stelle `[Passwort – nicht gespeichert]`. Bau also keinen Ablauf,
der davon ausgeht, dass man das Passwort später nachschlagen kann.
Ein Platzhalter, der zu keiner Variablen und keinem eingebauten Wert passt, wird oben im Editor
**gewarnt**, aber nicht abgewiesen: ein Tippfehler soll hier auffallen und nicht erst dem Techniker
im Lauf — es kann aber sein, dass die Variable gleich noch kommt. Im Lauf bleibt ein unbekannter
Platzhalter als Text stehen.
Für Befehlsschritte gilt eine zusätzliche Regel: **die Anführungszeichen gehören in die Vorlage,
nicht in den Wert.** Schreib also `New-ADUser -Name "{{vorname}} {{nachname}}"`. Steht ein
Platzhalter in einem Befehl nicht zwischen den erwarteten Anführungszeichen, wird der Schritt im
Lauf abgewiesen, statt einen halb maskierten Befehl zum Kopieren anzubieten.
### Vorschau
**Vorschau** zeigt die Vorlage so, wie sie im Lauf aussieht: mit Beispielwerten in allen
Platzhaltern, abgeschalteten Feldern und nummerierten Abschnitten. Gespeichert wird dabei nichts,
und für `{{generiertes_passwort}}` entsteht **kein** Passwort — dort steht
`BEISPIEL-PASSWORT-NICHT-ECHT`.
Nutz sie vor dem Veröffentlichen, besonders bei Befehlen: erst hier sieht man, ob der fertige Befehl
so aussieht, wie er aussehen soll.
## Veröffentlichen
Im Abschnitt **Veröffentlichen** trägst du eine **Änderungsnotiz (optional)** ein — ein Satz, was
sich gegenüber der letzten Version geändert hat; sie steht später in der Versionsgeschichte. Dann
**Veröffentlichen**.
**Veröffentlicht wird das Gespeicherte, nicht das, was auf dem Bildschirm steht.** Gibt es nicht
gespeicherte Änderungen, warnt der Editor — erst speichern, dann veröffentlichen.
Danach ist die Version unveränderlich, und Läufe können daran starten. Der Editor schaltet in den
Lesemodus.
Willst du weiter daran arbeiten, drückst du auf der Vorlagenseite wieder **Bearbeiten**: es entsteht
ein neuer Entwurf mit der nächsthöheren Nummer.
## Export und Import
**Als JSON exportieren** auf der Vorlagenseite lädt eine Version als Datei herunter. Das Dokument
enthält Kopfdaten, Variablen, Abschnitte und Schritte — und ausdrücklich keine Kennungen,
Zeitstempel, Läufe oder Kundenzuordnung. Damit lässt es sich in eine **andere**
Laufzettel-Installation einspielen.
Eingespielt wird in der Vorlagenliste unter **Vorlage aus einer Datei einspielen**: Datei wählen
oder den Inhalt einfügen, dann **Einspielen**. Zu wissen:
- Es entsteht immer eine **neue** Vorlage; der Import schreibt nie in eine bestehende hinein.
- Sie bekommt genau eine Version als **Entwurf**. Erst nach dem Ansehen und Veröffentlichen lässt
sich ein Lauf daran starten.
- Die Versionsnummer der Quelle wandert nicht mit: hier fängt die Vorlage wieder bei 1 an.
- Eine eingespielte Vorlage gilt zunächst für alle Kunden. Die Zuordnung setzt du danach in den
Kopfdaten.
- Schlägt die Prüfung fehl, wird **nichts** geschrieben, und die Meldung nennt die erste
Beanstandung mit ihrem Pfad, etwa
`struktur.abschnitte.1.schritte.2.titel: Ein Schritt braucht einen Titel.`
Das Format ist vollständig beschrieben in [docs/vorlagen-format.md](../vorlagen-format.md) — für
den Fall, dass jemand eine Vorlage von Hand schreiben oder ein Skript dafür bauen will.
## Vorlagen einem Gerätetyp zuordnen
Damit auf der Geräteseite ein **Schnellstart** erscheint, muss für den Gerätetyp eine Vorlage
hinterlegt sein — etwa „PC Neuinstallation“ für den Typ PC. Diese Zuordnung wird beim Einrichten der
Anwendung gesetzt und lässt sich in der Oberfläche noch nicht ändern; wende dich dafür an die
Person, die Laufzettel betreibt.
Ohne Zuordnung bleibt der Schnellstart leer, und das ist kein Mangel: unter **Vorlage zuweisen**
steht auf der Geräteseite jede Vorlage, die zu diesem Gerät passt, und der Start-Dialog kennt sie
ohnehin alle.
+178
View File
@@ -0,0 +1,178 @@
# Mitarbeiter, Abteilungen und Geräte
Unter **Mitarbeiter & Geräte** (im Modus Dienstleistung: **Personen & Geräte**) liegen die
Stammdaten. Oben schalten zwei Reiter um: **Personen** und **Geräte**.
Personen und Geräte pflegen darf die Rolle **Techniker**, **Redakteur** oder **Administrator** —
beim Onboarding steht der Techniker vor der Person, bevor der nächste Verzeichnisabgleich gelaufen
ist. **Abteilungen** bleiben beim **Administrator**: an ihnen hängen Ziel-OU und Standardgruppen,
also das, was die späteren PowerShell-Befehle in ein Verzeichnis schreiben.
## Personen
![Die Personenliste mit Suche und Kennzeichen je Person](bilder/mitarbeiter-liste-desktop.png)
Gesucht wird über **Name, Mail, UPN oder sam** — im Ticket steht mal das eine, mal das andere. Dazu
der Filter **Abteilung** und das Häkchen **auch deaktivierte**; ohne das erscheinen nur aktive
Personen.
Eine Zeile trägt den Namen, die Kennungen, die Abteilung und die Zahl der Geräte und Läufe. Zwei
Kennzeichen sind wichtig:
- **aus dem Verzeichnis** — diese Person kommt aus dem Active Directory. Ihre Stammdaten werden
dort gepflegt.
- **deaktiviert** — nicht mehr im Haus. Steht mit Durchstreichung da.
### Eine Person von Hand anlegen
Unter **Person von Hand anlegen**: **Vorname**, **Nachname**, **Mail-Adresse (optional)** und
**Abteilung (optional)** — für die Abteilung schlägt das Feld vorhandene Namen vor. Hinter
**Verzeichnis-Angaben (UPN, sAMAccountName, Titel)** stehen die drei Felder, die das Verzeichnis
sonst liefert. Im Modus Dienstleistung außerdem der **Kunde**. Dann **Person anlegen**.
Gedacht ist das für das Onboarding: die Person entsteht hier, das AD-Konto danach. Eine so angelegte
Person bleibt vollständig änderbar, und der nächste Verzeichnisabgleich **übernimmt** sie über UPN
oder sAMAccountName, statt sie ein zweites Mal anzulegen.
### Die Seite einer Person
![Die Seite einer Person mit Geräten und Stammdaten](bilder/mitarbeiter-seite-desktop.png)
Oben Name, Titel, Abteilung, gegebenenfalls der Vorgesetzte. Darunter:
- der Knopf **deaktivieren** beziehungsweise **wieder aktivieren**,
- **Geräte** — was dieser Person zugeordnet ist, mit Tag-Code,
- **Stammdaten** — das Formular, **Stammdaten speichern** übernimmt.
Kommt die Person **aus dem Verzeichnis**, ist jedes Feld der Stammdaten gesperrt, und oben steht,
warum: „Die Stammdaten werden dort gepflegt — eine Änderung hier würde der nächste Abgleich
zurücksetzen.“ Die Werte stehen trotzdem da, nur schreibgeschützt; ein ausgeblendetes Feld wäre eine
schlechtere Auskunft als ein gesperrtes. **Deaktivieren lässt sie sich trotzdem.**
![Eine Person aus dem Verzeichnis mit gesperrten Stammdaten](bilder/mitarbeiter-verzeichnis-desktop.png)
### Deaktivieren statt löschen
**Personen werden nie gelöscht, nur deaktiviert.** Ein archivierter Lauf muss auch in zehn Jahren
noch sagen können, für wen er lief. Eine deaktivierte Person verschwindet aus den Auswahllisten,
bleibt aber in jeder Historie auffindbar.
## Personen aus einer CSV-Datei einlesen
![Der CSV-Import für Personen mit Spaltenliste und Meldungen je Zeile](bilder/personen-import-desktop.png)
Unter **Personen aus einer CSV-Datei einlesen**. Die Spalten heißen wie im Verzeichnis, die
deutschen Entsprechungen gehen genauso:
| Spalte | Auch |
|---|---|
| `givenName` | vorname |
| `sn` | surname, nachname |
| `displayName` | anzeigename |
| `mail` | email, mailadresse |
| `upn` | userPrincipalName |
| `sam` | sAMAccountName |
| `department` | abteilung |
| `title` | titel |
Groß- und Kleinschreibung ist unerheblich, Trennzeichen darf Komma oder Semikolon sein, höchstens
500 Zeilen je Datei. Datei wählen oder Inhalt einfügen, im Modus Dienstleistung den **Kunden**
wählen, dann **Einlesen**.
Was der Import zusagt:
- **Wiedererkannt** wird eine Person über `sam` oder `upn`, sonst über den Anzeigenamen. Wer schon
da ist, wird aktualisiert statt ein zweites Mal angelegt.
- **Eine leere Zelle löscht nichts.** Was in der Datei nicht steht, bleibt, wie es ist.
- Fehlen `givenName` und `sn`, wird `displayName` am letzten Leerzeichen geteilt.
- **Personen aus dem Verzeichnis werden nicht überschrieben** — solche Zeilen werden gemeldet.
- Eine **deaktivierte** Person wird erkannt und aktualisiert, aber **nicht wieder aktiviert**. Dafür
gibt es den Schalter auf ihrer Seite.
- **Abteilungen legt der Import nicht an.** Der Name wird nur bei der Person eingetragen; als
Abteilung mit Ziel-OU und Standardgruppen übernimmt sie ein Administrator.
Eine fehlerhafte Zeile bricht den Import nicht ab. Sie wird unten mit ihrer **Zeilennummer** und dem
Grund gemeldet — genau die Zeilen sind in der Datei zu ändern.
## Abteilungen
Abteilungen liegen unter **Admin → Abteilungen**, weil an ihnen die Struktur des Verzeichnisses
hängt.
![Die Abteilungsliste mit Ziel-OU und Standardgruppen](bilder/abteilungen-desktop.png)
Eine Abteilung hat:
- **Name** — er muss **genauso lauten wie im Verzeichnis**, sonst findet die Zuordnung ihn nicht.
Verknüpft wird über den Abteilungsnamen der Person, nicht über eine Kennung.
- **Ziel-OU (optional)** — wo ein neues Konto landet, etwa
`OU=Buchhaltung,OU=Benutzer,DC=firma,DC=de`. Sie füllt den Platzhalter `{{ou}}`.
- **Standardgruppen, mit Komma getrennt** — sie füllen `{{gruppen}}`. **Die Reihenfolge bleibt
erhalten**, sie landet so im Gruppen-Befehl.
- **Mail-Domain (optional)** und **Notizen (optional)**.
Ein Tippfehler in der Ziel-OU legt ein Konto an der falschen Stelle an — das ist der Grund, warum
diese Seite dem Administrator gehört. Fehlen Ziel-OU und Standardgruppen, bleiben `{{ou}}` und
`{{gruppen}}` im Lauf leer.
**Bearbeiten** klappt das Formular an der Zeile auf. **archivieren** nimmt eine Abteilung aus dem
Angebot; gelöscht wird nichts, an einer Abteilung hängen Läufe. **wieder freigeben** macht es
rückgängig.
### Noch nicht gepflegte Abteilungen
![Vorschläge für Abteilungen, die bei Personen vorkommen, aber nicht gepflegt sind](bilder/abteilungen-vorschlaege-desktop.png)
Steht ein Abteilungsname bei Personen, ohne dass es dazu eine Abteilung gibt, erscheint oben
**Noch nicht gepflegt**. Ein Klick auf **Anlegen** legt die Abteilung mit diesem Namen an — **und
nur den Namen.** Ziel-OU, Standardgruppen und Mail-Domain sind danach leer und werden in der Liste
darunter nachgetragen.
## Geräte
![Die Geräteliste mit Filtern, Kennzeichen und Aktionen](bilder/geraete-liste-desktop.png)
Gesucht wird über **Hostname, Bezeichnung, Seriennummer, Tag-Code**, gefiltert nach **Typ** und mit
dem Häkchen **auch archivierte**.
Jede Karte zeigt Tag-Code, Namen, Typ, Besitzer, Modell, Serien- und Inventarnummer und die Zahl der
Läufe. Der Name führt auf die [Geräteseite](03-qr-tags.md). Kennzeichen: **Tag ohne Zuordnung** für
einen vorgedruckten Aufkleber, **archiviert** für ein Gerät außer Dienst.
**Stammdaten bearbeiten** klappt das Formular an der Karte auf: Hostname, Bezeichnung, Typ, Modell,
Seriennummer, Inventarnummer, Besitzer und Notizen. Zur Wahl als Besitzer stehen nur aktive Personen
desselben Kunden.
### Ein Gerät anlegen
Unter **Gerät anlegen**: **Hostname** und **Bezeichnung** (eines von beiden genügt), **Typ**,
**Modell**, **Seriennummer**, **Inventarnummer**, **Besitzer (optional)**, **Notizen (optional)**
und im Modus Dienstleistung der **Kunde**. Dann **Gerät anlegen**.
Der **Tag-Code entsteht dabei** und steht danach in der Erfolgsmeldung — er kommt auf den Aufkleber.
Drucke das Etikett gleich mit, solange du weißt, welches Gerät gemeint ist.
### Geräte aus einer CSV-Datei einlesen
Dieselbe Mechanik wie bei den Personen, höchstens 500 Zeilen. Spalten: `hostname`, `label`
(bezeichnung), `serialNumber`, `inventoryNumber`, `type`, `model`. **Eine der beiden Spalten
`hostname` oder `label` muss es geben** — sonst weiß niemand, was das Gerät ist. Jede eingelesene
Zeile verbraucht einen Tag-Code; lieber zweimal drucken als einmal zu viel einlesen.
### Archivieren statt löschen
**archivieren** nimmt ein Gerät aus dem Bestand: es taucht in keiner Auswahl mehr auf und nimmt
keine neue Arbeit an, bleibt aber in jeder Historie und lässt sich mit **wieder freigeben**
zurückholen. Das ist der normale Weg für ein ausgemustertes Gerät.
**löschen** ist die einzige echte Löschung in Laufzettel, und sie ist eng eingehegt:
- Sie erscheint nur, wenn **kein Lauf** an dem Gerät hängt. Sonst sagt Laufzettel: „An … hängen 3
Läufe. Das Gerät lässt sich deshalb nur archivieren.“
- Sie verlangt die Rolle **Administrator**.
- Sie fragt nach.
Der Grund für die Ausnahme: der Vertipper von eben stünde sonst für immer in der Liste. Der Preis
steht in der Rückfrage: **der Tag-Code bleibt für immer vergeben.** Er wird nie neu ausgegeben, ein
Aufkleber zeigt nie auf ein zweites Gerät — und ein schon gedruckter Aufkleber dieses Codes ist
danach wertlos.
+171
View File
@@ -0,0 +1,171 @@
# Verzeichnis anbinden
Unter **Admin → Verzeichnis** wird ein Active Directory als Quelle der Personen eingerichtet. Dann
muss beim Start eines Laufs nichts abgetippt werden, und `{{vorname}}`, `{{upn}}`, `{{sam}}` und
`{{abteilung}}` stehen von selbst zur Verfügung.
Zwei Dinge vorweg:
- Der Reiter gibt es **nur im Modus Intern**. Dort hat das Haus ein Verzeichnis, aus dem seine Leute
kommen. Im Modus Dienstleistung wären es Verzeichnisse fremder Kunden, und die bindet Laufzettel
ausdrücklich nicht an — dort kommen Personen von Hand oder per CSV.
- **Laufzettel schreibt nie ins Verzeichnis.** Ein Dienstkonto mit **Leserechten** genügt.
Gespeichert werden nur die zugeordneten Felder — keine Passwörter, keine
Gruppenmitgliedschaften.
Wer im Verzeichnis verschwindet oder dort deaktiviert wird, wird hier **inaktiv**. Gelöscht wird
nie, sonst verlöre die Historie ihre Namen.
## Eine Quelle anlegen
![Die Seite Verzeichnis mit Quelle, Status und Formular](bilder/verzeichnis-desktop.png)
Das Formular **Quelle anlegen** steht unten auf der Seite. Die Felder:
| Feld | Was hinein gehört |
|---|---|
| **Name** | wie du die Quelle nennst, etwa „Firmen-AD“ |
| **Adresse** | `ldaps://dc01.firma.local:636` — nur Schema, Rechner und Port |
| **Anmelde-DN** | das Dienstkonto, etwa `CN=laufzettel,OU=Dienstkonten,DC=firma,DC=local` |
| **Passwort** | wird verschlüsselt gespeichert und nie wieder angezeigt |
| **Basis-DN** | wo gesucht wird, etwa `OU=Benutzer,DC=firma,DC=local` |
| **Filter (optional)** | leer lassen nimmt den Standard: aktive Personenkonten |
| **Abgleich alle … Minuten** | zwischen 5 und 10080 (fünf Minuten bis eine Woche) |
| **Nach Zeitplan abgleichen** | das Häkchen schaltet den Zeitplan ein |
Für die **Adresse** gibt es drei Formen:
- `ldaps://host:636` — verschlüsselt ab dem ersten Byte. **Die richtige Wahl.**
- `ldap+starttls://host:389` — unverschlüsselt verbunden und dann hochgestuft.
- `ldap://host:389` — im Klartext. Sobald du das eintippst, warnt das Formular: dann geht auch das
Bind-Passwort im Klartext über das Netz. Für ein Dienstkonto im Active Directory ist das keine gute
Idee.
In die Adresse gehören **kein Pfad und keine Zugangsdaten**. Der Basis-DN hat sein eigenes Feld,
Bind-DN und Passwort ebenso; Laufzettel weist eine Adresse mit `/` oder `@` dahinter ausdrücklich ab.
Der **Standardfilter** schließt deaktivierte Konten aus. Das ist der Sinn: wer aus dem Ergebnis
verschwindet, wird hier deaktiviert. Ein eigener Filter engt weiter ein, etwa auf eine einzelne OU.
Dann **Quelle anlegen**.
## Attributzuordnung
Hinter **Attributzuordnung anpassen** steht, welches Verzeichnis-Attribut auf welches Feld geht. Die
Vorgaben sind die Namen eines Active Directory:
| Feld | Vorgabe |
|---|---|
| Vorname | `givenName` |
| Nachname | `sn` |
| Anzeigename | `displayName` |
| E-Mail | `mail` |
| UPN | `userPrincipalName` |
| Anmeldename (sam) | `sAMAccountName` |
| Abteilung | `department` |
| Titel | `title` |
| Vorgesetzter | `manager` |
| Kennung (dauerhaft) | `objectGUID` |
Ein OpenLDAP heißt an einigen Stellen anders — dort ist die dauerhafte Kennung etwa `entryUUID`.
Leer gelassene Felder bekommen die Vorgabe zurück.
> **Die Kennung ist das eine Feld, das später nicht mehr geändert werden sollte.** An ihr erkennt der
> Abgleich eine Person wieder. Ein anderer Wert legt beim nächsten Lauf **alle Personen neu an**.
## Eigenes CA-Zertifikat
Nur nötig, wenn der Domänencontroller ein Zertifikat aus einer eigenen CA trägt. Hinter **Eigenes
CA-Zertifikat hinterlegen** fügst du den **PEM**-Text ein, beginnend mit
`-----BEGIN CERTIFICATE-----`. Ohne Eintrag gelten die Wurzelzertifikate des Systems.
Ist eines hinterlegt, sagt die Seite das. Das Feld bleibt beim Bearbeiten trotzdem leer: **Text
eintragen ersetzt es, leer lassen behält es**, und das Häkchen **Hinterlegtes Zertifikat entfernen**
nimmt es weg. Beides zugleich ergibt keinen Sinn und wird abgewiesen.
Dasselbe gilt für das **Passwort**: leer lassen behält das gespeicherte. Sonst nähme jede
Namensänderung der Quelle ihre Anmeldung.
## Verbindung testen
![Das Ergebnis eines Verbindungstests: „Die Verbindung steht. 4 Einträge gelesen, 1 übersprungen“ und darunter die ersten drei Einträge mit UPN, Mail, DN, sam und Abteilung](bilder/verbindungstest-desktop.png)
**Verbindung testen** liest die ersten Einträge und zeigt sie so, wie sie ankämen — **gespeichert
wird nichts**. Mach das immer vor dem ersten Abgleich. Klappt es nicht, steht der Grund in Rot
darunter; die häufigsten stehen in [Kapitel 08](08-fehlerbehebung.md).
Der Wert steckt nicht im „geht“, sondern in der Liste darunter: erst an den zugeordneten Feldern
siehst du, ob die Zuordnung stimmt. Ein grünes „Verbindung erfolgreich“ sähe genauso aus, wenn `sam`
und `upn` vertauscht wären — und der Fehler fiele erst auf, wenn ein PowerShell-Befehl den falschen
Anmeldenamen trägt.
Prüf also Zeile für Zeile: Steht unter **UPN** wirklich der UPN? Unter **sam** der Anmeldename? Ist
die **Abteilung** genau der Name, unter dem du die Abteilung gepflegt hast?
Ein **Vorgesetzter** erscheint im Test nur, wenn er zufällig unter diesen Einträgen ist. Beim
vollständigen Abgleich wird er aufgelöst.
## Zeitplan und „Jetzt abgleichen“
Ist **Nach Zeitplan abgleichen** gesetzt, läuft der Abgleich von selbst im gewählten Intervall; an
der Quelle steht dann „alle 60 min“, sonst „kein Zeitplan“.
**Jetzt abgleichen** startet ihn sofort — nach einer Änderung am Filter will niemand bis zur nächsten
vollen Stunde warten. Es ist derselbe Vorgang, den auch der Zeitplan ruft, es gibt also keinen
zweiten Weg mit eigenen Regeln.
Läuft für diese Quelle gerade schon ein Abgleich, sagt Laufzettel das und tut nichts: „Für … läuft
gerade schon ein Abgleich. Bitte das Ergebnis abwarten.“
## Was der Abgleich tut
1. Er liest das Verzeichnis in Seiten von je tausend Einträgen.
2. Jeder Eintrag wird über die **Kennung** wiedererkannt und aktualisiert, oder neu angelegt.
3. Eine **von Hand angelegte** Person wird über `upn` oder `sam` gefunden und **übernommen**, nicht
verdoppelt. Genau so ist das Onboarding gedacht: die Person entsteht hier, das AD-Konto danach.
4. **Erst nach einem vollständigen Durchlauf** wird deaktiviert, wer nicht wiedergesehen wurde. Ein
Netzwerkfehler nach der halben Liste soll nicht die andere Hälfte der Firma abschalten.
Drei Sicherungen, die alle denselben Fehler verhindern — dass eine kaputte Eingabe wie „alle sind
gegangen“ aussieht:
- **Ließ sich kein einziger Eintrag zuordnen, gilt der Abgleich als gescheitert** und es wird niemand
deaktiviert. Die Meldung sagt: „Niemand wurde deaktiviert. Prüf die Attributzuordnung, besonders
das Kennungsattribut.“
- **Übersprungene Einträge sind nicht verschwunden** und werden aus der Abschaltung herausgenommen.
- Eine Person, die schon eine **andere** Quelle führt, wird nie übernommen.
Der Abgleich läuft nicht in einer Transaktion. Bricht er in der Mitte ab, bleiben die bis dahin
geschriebenen Personen stehen — ein zweiter Lauf holt den Rest.
## Das Abgleich-Log
![Das aufgeklappte Abgleich-Log mit Zeitpunkt, Bilanz und Fehlermeldung eines Laufs](bilder/abgleich-log-desktop.png)
An der Quelle steht der letzte Stand: „Zuletzt abgeglichen am …“ oder „Letzter Abgleich gescheitert“
mit der Meldung dazu.
Hinter **Abgleich-Log** stehen die letzten Läufe mit Zeitpunkt, wer sie ausgelöst hat (steht dort
**Zeitplan**, war es niemand von Hand — das ist der Regelfall) und der Bilanz:
| Zahl | Bedeutung |
|---|---|
| **gelesen** | Einträge, die aus dem Verzeichnis kamen |
| **angelegt** | neue Personen |
| **übernommen** | von Hand angelegte Personen, die jetzt am Verzeichnis hängen |
| **aktualisiert** | vorhandene Personen mit geänderten Feldern |
| **deaktiviert** | nicht mehr wiedergesehene Personen |
| **übersprungen** | Einträge, die sich nicht zuordnen ließen |
**Nullen werden gezeigt.** „0 angelegt, 0 aktualisiert“ ist die Auskunft, dass der Abgleich lief und
sich im Verzeichnis nichts geändert hat. Fehlte die Zeile, sähe ein erfolgreicher Lauf ohne Änderung
aus wie ein Lauf, der nie stattfand.
**Übersprungene** Einträge sind kein Fehler der Quelle, sondern einzelne krumme Konten — sie stehen
deshalb als Hinweis und nicht als Fehler da. Steigt die Zahl, prüf die Attributzuordnung.
## Ohne Verzeichnis
Eine Quelle ist keine Voraussetzung. Personen lassen sich von Hand anlegen oder aus einer CSV-Datei
einlesen — ein Verzeichnis nimmt nur die Arbeit ab. Siehe
[Kapitel 05](05-mitarbeiter-geraete.md).
+154
View File
@@ -0,0 +1,154 @@
# Verwaltung
Der Bereich **Admin** gehört der Rolle **Administrator**. Oben schalten Reiter um:
**Einstellungen**, **Benutzer**, **Abteilungen** und — nur im Modus Intern — **Verzeichnis**.
Abteilungen sind in [Kapitel 05](05-mitarbeiter-geraete.md) beschrieben, das Verzeichnis in
[Kapitel 06](06-verzeichnis.md).
## Benutzer und Rollen
![Die Benutzerliste mit Rollenwahl je Konto](bilder/admin-benutzer-desktop.png)
**Benutzer** sind die Menschen, die Laufzettel bedienen. Nicht zu verwechseln mit den Mitarbeitern
aus dem Verzeichnis: die melden sich hier nie an.
Je Konto stehen Name, E-Mail, die Anmeldewege (**Anbieter**, **Passwort** oder „kein Anmeldeweg“) und
der Zeitpunkt der letzten Anmeldung. Rechts:
- die **Rollenwahl** mit dem Knopf **Setzen**,
- der Schalter **aktiv** / **deaktiviert**.
Beim eigenen Konto steht statt des Schalters **das bist du** — niemand soll sich selbst aussperren.
Ein deaktiviertes Konto wird auch mit einem noch gültigen Sitzungs-Cookie abgewiesen, und eine
geänderte Rolle greift sofort: Rolle und Aktiv-Status werden bei jeder Anfrage aus der Datenbank
gelesen.
**Bei Anmeldung über den Anbieter wird die Rolle aus den Gruppen gesetzt und überschreibt eine hier
gewählte.** Wer eine Rolle dauerhaft ändern will, ändert sie also in der Gruppenzuordnung des
Anbieters, nicht hier.
Welche Rolle was darf, steht in [Kapitel 01](01-erste-schritte.md).
### Ein lokales Konto anlegen
Unter **Lokales Konto anlegen**: **Name**, **E-Mail**, **Rolle** und **Passwort (mindestens 12
Zeichen)**, dann **Konto anlegen**. Das Passwort wird nur als Hash gespeichert.
Gedacht ist das als **Notfallzugang**, falls der Anmeldeanbieter ausfällt. Ist der lokale Login
abgeschaltet, sagt die Seite das; neue Konten entstehen dann beim ersten Anmelden über den Anbieter
von selbst.
## Einstellungen
![Die Einstellungen mit Betriebsmodus, Organisation, Namensregeln und Sperr-OU](bilder/admin-einstellungen-desktop.png)
### Organisation
Der Name des eigenen Betriebs. Im Modus **Intern** erscheint er nirgends in der Oberfläche — er wird
erst sichtbar, wenn du auf Dienstleistung umstellst, denn dann wird daraus der erste Kunde.
### Namensregeln
Vorlagen für **UPN**, **Anmeldename (sam)**, **Mail** und **Hostname**. Beim Start eines Laufs
berechnet Laufzettel daraus Vorschläge, die der Techniker überschreiben kann — der Knopf dafür heißt
dort **Namen aus den Regeln vorschlagen**.
Platzhalter in den Regeln:
| Platzhalter | Bedeutung |
|---|---|
| `{vorname}` | der Vorname |
| `{nachname}` | der Nachname |
| `{v}` | der erste Buchstabe des Vornamens |
| `{nnn}` | eine fortlaufende Nummer |
| `{kundenkuerzel}` | das Kürzel des Kunden (nur Modus Dienstleistung) |
Beispiele: `{vorname}.{nachname}@firma.de` für den UPN, `{v}{nachname}` für den Anmeldenamen,
`PC-{nnn}` für den Hostname.
Ein Vorschlag ist ein Angebot, keine Zusage: **verbindlich wird ein Name erst beim Anlegen im
Verzeichnis.** Sind keine Regeln hinterlegt, sagt der Start-Dialog das und lässt die Felder leer.
### Sperr-OU
Die Ziel-OU für deaktivierte Konten, etwa `OU=Gesperrt,OU=Benutzer,DC=firma,DC=local`. Sie füllt den
Platzhalter `{{ou_gesperrt}}` und wird beim Offboarding gebraucht.
**Speichern** übernimmt alle drei Abschnitte auf einmal.
### Adresse für die QR-Codes
Ganz unten steht, welche Adresse in den gedruckten QR-Codes landet, als Beispiel ausgeschrieben:
`https://…/t/LZ-7K3F9Q`.
**Sie lässt sich hier nicht ändern.** Sie kommt aus der Umgebung der Anwendung, weil gedruckte
Aufkleber sonst ins Leere zeigen würden. Steht dort „APP_URL ist nicht gesetzt — Etiketten können
noch nicht gedruckt werden“, muss das erst beim Betrieb der Anwendung eingetragen werden. **Drucke
vorher keine Etiketten.**
## Betriebsmodus umstellen
![Der Bestätigungsdialog für den Moduswechsel mit den Folgen](bilder/admin-moduswechsel-desktop.png)
Oben auf der Einstellungsseite steht der aktuelle Modus mit einer Erklärung und darunter der Weg zum
anderen. Der Wechsel braucht keinen Neustart.
**Zu Dienstleistung wechseln** klappt einen Dialog auf, der die Folgen aufzählt — dieselbe Prüfung,
die der Wechsel danach durchsetzt, keine nachgebaute zweite Wahrheit:
- Die bisherige eigene Organisation wird zum **ersten Kunden**.
- Alle Geräte, Personen, Abteilungen und Läufe bleiben daran hängen.
- Kunden werden zu einer sichtbaren Ebene: Kundenliste, Kundenwahl beim Start eines Laufs,
Kundenkürzel auf den Etiketten.
Dafür trägst du **Name als erster Kunde** und **Kürzel (2–6 Zeichen)** ein, setzt das Häkchen „Ja,
den Betriebsmodus jetzt auf … umstellen“ und drückst **Auf Dienstleistung umstellen**.
Der Rückweg ist enger: **er geht nur mit genau einem nicht archivierten Kunden.**
![Der abgelehnte Moduswechsel mit der Begründung](bilder/admin-moduswechsel-abgelehnt-desktop.png)
Gibt es mehr, steht dort „Wechsel zu Intern gerade nicht möglich“ mit der Zahl und dem Hinweis, die
übrigen Kunden zu archivieren. Geht es, lauten die Folgen:
- Der einzige Kunde wird zur eigenen Organisation und **verschwindet aus der Oberfläche**.
- Alle Daten bleiben erhalten, nur die Kundenebene wird ausgeblendet.
- Archivierte Kunden bleiben archiviert und tauchen nicht wieder auf.
Der Wechsel ist also in beide Richtungen eine Datenänderung und kein Datenverlust. Trotzdem ist er
keine Kleinigkeit: er ändert, was die ganze Anwendung zeigt — deshalb das Häkchen.
## Kunden
![Die Kundenliste mit Kürzel, Zählung und der eigenen Organisation](bilder/kunden-desktop.png)
Den Menüpunkt **Kunden** gibt es nur im Modus Dienstleistung. Geräte, Personen, Abteilungen und
Läufe hängen an genau einem Kunden, und diese Grenze ist nicht nur eine Anzeige: ein Lauf kann kein
Gerät, keine Person und keine Abteilung eines fremden Kunden wählen.
Je Kunde stehen das **Kürzel**, der Name und die Zählung (Geräte, Personen, Läufe). Der eigene
Betrieb trägt das Kennzeichen **eigene Organisation**.
**Kunde anlegen** verlangt Name und Kürzel. Das **Kürzel erscheint auf den Etiketten** und lässt
sich in der Hostname-Regel als `{kundenkuerzel}` verwenden — wähl es also so, dass man es auf einem
Aufkleber erkennt.
**Bearbeiten** ändert Name, Kürzel und Notizen. **archivieren** nimmt einen Kunden außer Dienst;
gelöscht wird nichts, sonst verlöre das Archiv seine Bezüge. Die eigene Organisation lässt sich
nicht archivieren.
Eine Vorlage lässt sich **einem** Kunden zuordnen („nur Musterfirma GmbH“) oder für alle gelten
lassen. Eine kundenspezifische Vorlage startet keinen Lauf bei einem anderen Kunden.
## Was protokolliert wird
Laufzettel schreibt ein Protokoll über das, was nachvollziehbar bleiben muss: Rollenänderungen,
veröffentlichte Vorlagen, eingespielte Vorlagen, archivierte und zurückgeholte Läufe, angelegte und
gelöschte Verzeichnisquellen, den Moduswechsel. Ein Protokolleintrag verliert seinen Urheber nie. Eine
eigene Ansicht dafür gibt es in der Oberfläche noch nicht; was am Lauf selbst geschehen ist, steht in
seiner Abarbeitungsansicht und im Ausdruck.
Ein **erzeugtes Passwort steht nie im Protokoll** — es wird nirgends gespeichert. Gäbe es ein Feld
dafür, wäre die Versuchung groß, es „nur fürs Protokoll“ mitzuschreiben.
+229
View File
@@ -0,0 +1,229 @@
# Fehlerbehebung
Symptom, Ursache, was zu tun ist. Jede Meldung steht hier so, wie Laufzettel sie zeigt.
## „E-Mail-Adresse oder Passwort stimmt nicht.“
**Ursache:** falsche Zugangsdaten — **oder** ein deaktiviertes Konto. Die Meldung unterscheidet das
nicht, weil sie sonst verriete, welche Adressen es gibt.
**Was tun:** Zugangsdaten prüfen. Bist du sicher, dass sie stimmen, lass einen Administrator unter
**Admin → Benutzer** nachsehen, ob dein Konto auf **aktiv** steht. Ein deaktiviertes Konto wird auch
mit noch gültiger Anmeldung abgewiesen.
## „Der Anbieter war nicht erreichbar. Bitte später erneut versuchen.“
**Ursache:** der Anmeldeanbieter antwortet nicht.
**Was tun:** Gibt es ein lokales Konto, melde dich damit an — genau dafür ist es da. Sonst hilft nur
warten und die Störung melden. Der Notfallzugang steht unter **Admin → Benutzer → Lokales Konto
anlegen** und sollte eingerichtet sein, *bevor* der Anbieter ausfällt.
## „Dafür fehlt dir die Berechtigung“
**Ursache:** deine Rolle darf diese Seite nicht.
**Was tun:** In der Seitenleiste steht ohnehin nur, was du darfst — die Meldung kommt meist von einem
Link, den jemand weitergegeben hat. Brauchst du den Bereich wirklich, lass dir vom Administrator eine
stärkere Rolle geben. Kommt die Rolle vom Anmeldeanbieter, muss sie dort in der Gruppenzuordnung
geändert werden; eine hier gesetzte Rolle wird beim nächsten Anmelden überschrieben.
## „Deine Anmeldung gilt nicht mehr.“
**Ursache:** die Sitzung ist abgelaufen, während das Formular offen stand.
**Was tun:** Genau das, was die Meldung sagt: in einem **zweiten Tab** neu anmelden und dann hier
noch einmal klicken. Was du eingegeben hast, steht weiterhin auf der Seite — **lade sie nicht neu**,
das würde die Eingaben verwerfen.
## Ein Schritt lässt sich nicht speichern
**Ursache und was tun**, in dieser Reihenfolge prüfen:
1. **„… ist archiviert und damit schreibgeschützt.“** — der Lauf ist archiviert. Siehe unten.
2. **„Ein Schritt, der nicht zutrifft, braucht eine Begründung“** oder **„Ein fehlgeschlagener
Schritt braucht eine Notiz“** — füll das Feld **Begründung** und drück **Mit Begründung
speichern**. Ohne Begründung stünde im Archiv ein übersprungener Schritt ohne Grund.
3. **Die Pille springt zurück, ohne Meldung** — die Verbindung war weg. Tippe noch einmal. Jeder
Schritt speichert einzeln, es geht also nur dieser eine Klick verloren.
4. **Nichts passiert, gar nichts** — lade die Seite neu. Ist die Anmeldung abgelaufen, siehst du
danach die Anmeldeseite und kommst nach dem Anmelden auf dieselbe Stelle zurück.
5. **Deine Rolle ist Leser** — dann gibt es die Pillen nicht, sondern nur die Anzeige des Zustands.
Läufe bearbeiten darf erst der Techniker.
## Der Lauf lässt sich nicht abschließen
**Ursache:** es ist noch ein Pflichtschritt offen. Der Knopf ist dann gesperrt, und darunter steht,
wie viele es sind; die Meldung nennt die Titel: „Der Lauf lässt sich noch nicht abschließen. Offen
sind: …“
**Was tun:** Die genannten Schritte erledigen — oder, wenn sie nicht zutreffen, mit Begründung als
**nicht zutreffend** eintragen. **Ein fehlgeschlagener Schritt zählt nicht als erledigt:** er ist
entweder zu beheben oder mit Begründung als nicht zutreffend einzutragen. Trifft ein ganzer Abschnitt
nicht zu, nimm **Abschnitt trifft nicht zu** — eine Begründung für achtzehn Schritte.
## Der Lauf ist archiviert
**Ursache:** jemand hat ihn archiviert. Damit ist er schreibgeschützt: kein Haken, kein Wert, keine
Notiz, kein Kommentar geht mehr. Das ist die Zusage, für die das Archiv da ist.
**Was tun:** Prüf zuerst, ob du es wirklich brauchst. Für eine Ergänzung genügt oft ein neuer Lauf,
der auf den alten verweist — das ist der ehrlichere Weg, weil er datiert ist.
Muss es der alte Lauf sein, bittet du einen **Administrator**: nur er sieht auf der Laufseite **aus
dem Archiv zurückholen**. Der Lauf steht danach wieder auf „abgeschlossen“ und lässt sich ändern; das
Zurückholen wird protokolliert.
**Vorbeugen:** archiviere erst, wenn wirklich alles drinsteht. Es gibt keinen Grund zur Eile — ein
abgeschlossener Lauf steht auch schon im Archiv und ist durchsuchbar.
## „Kein Laufzettel-Tag“ nach dem Scannen
**Ursache:** einer von drei Fällen, und Laufzettel unterscheidet sie absichtlich nicht — die
Unterscheidung verriete, welche Codes es gibt:
- Es gibt den Code nicht.
- Der Code hat nicht die richtige Form.
- Der Code gehört zu einem **anderen Kunden**.
**Was tun:** Lies den Code unter dem QR ab und vergleich ihn. Ein Laufzettel-Code beginnt mit `LZ-`
und hat sechs Zeichen dahinter, **ohne** die Zeichen `0`, `O`, `1` und `I`. Wer `O` statt `Q` liest,
tippt einen Code, den es nicht geben kann — das ist Absicht, denn ein „verbessertes“ Zeichen könnte
auf ein anderes, vorhandenes Gerät führen.
Stimmt der Code und du siehst trotzdem nichts, gehört der Aufkleber zu einem Kunden, den du nicht
sehen darfst. Frag einen Administrator.
## Der Scanner startet nicht
| Meldung | Ursache | Was tun |
|---|---|---|
| „Die Kamera gibt es nur über HTTPS.“ | die Seite läuft unverschlüsselt | Die verschlüsselte Adresse verwenden. Bis dahin: Code eintippen. |
| „Die Kamera ist nicht freigegeben.“ | Berechtigung verweigert | In den Einstellungen des Browsers die Kamera für diese Seite freigeben und neu laden. |
| „Dieser Browser gibt keine Kamera frei.“ | kein Kamerazugriff möglich | Code eintippen. |
| „Der QR-Leser lässt sich nicht starten.“ | der Decoder ließ sich nicht laden | Seite neu laden. Bleibt es dabei, einem Administrator melden; bis dahin Code eintippen. |
| „Das ist kein Laufzettel-Tag.“ | ein fremder QR-Code im Bild | Den richtigen Aufkleber ins Bild halten — den mit `LZ-…`. |
In allen Fällen gilt: unter dem Kamerabild steht das Feld **Code eintippen**. Der Code steht lesbar
unter dem QR. Ein Scanner, der nicht startet, ist keine Sackgasse.
## Das Etikett wird nicht gelesen
**Ursache und was tun:**
1. **Falsch skaliert gedruckt.** Im Druckdialog **Skalierung auf 100 %** stellen und **Kopf- und
Fußzeilen abschalten**. „An Seite anpassen“ verkleinert den QR-Code und frisst die Ruhezone am
Rand, die der Leser braucht.
2. **Der Drucker hat gespart.** Manche Treiber lassen Flächen weg oder drucken sie grau. Ein QR-Code
braucht harten Schwarz-Weiß-Kontrast; stell den Farbmodus auf normal, nicht auf Toner-Sparen.
3. **Der Aufkleber ist beschädigt oder verschmutzt.** Tipp den Code darunter ein und drucke das
Etikett neu: auf der Geräteseite **Etikett drucken**. Der Code bleibt derselbe.
4. **Das Etikett sitzt neben der Stanzung.** Dann war die Skalierung falsch — siehe Punkt 1. Das
Raster des A4-Bogens füllt das Blatt genau aus und verträgt keinen Seitenrand.
5. **Der QR-Code führt ins Leere.** Dann war beim Drucken die Adresse der Anwendung nicht gesetzt
(die Druckansicht warnt davor in Rot). Ein geklebter Aufkleber lässt sich nicht berichtigen: die
Adresse eintragen lassen, Etiketten neu drucken und **überkleben**. Der Tag-Code selbst bleibt
gültig.
## „APP_URL ist nicht gesetzt“
**Ursache:** die Anwendung weiß nicht, unter welcher Adresse sie erreichbar ist. Die QR-Codes zeigen
dann auf `http://localhost:3000` und führen von keinem anderen Gerät irgendwohin.
**Was tun:** **Nicht drucken.** Ein Administrator trägt die Adresse in der Umgebung der Anwendung ein;
in der Oberfläche geht das nicht, weil gedruckte Aufkleber sonst ins Leere zeigen würden. Unter
**Admin → Einstellungen** steht ganz unten, welche Adresse gerade gilt.
## Der Verzeichnisabgleich meldet einen Fehler
| Meldung | Ursache | Was tun |
|---|---|---|
| „… ist keine LDAP-Adresse.“ | Schema fehlt oder falsch | `ldaps://host:636`, `ldap+starttls://host:389` oder `ldap://host:389` eintragen. |
| „In … fehlt der Rechnername.“ | nur das Schema eingetragen | Rechner und Port ergänzen. |
| „… enthält einen Pfad.“ | der Basis-DN steht in der Adresse | Adresse auf Schema, Rechner und Port kürzen; der Basis-DN hat sein eigenes Feld. |
| „… enthält Zugangsdaten.“ | `benutzer@host` in der Adresse | Bind-DN und Passwort in ihre eigenen Felder. |
| „Das Bind-Passwort fehlt.“ | leeres Passwortfeld beim Anlegen | Passwort eintragen; ein anonymer Bind wird nicht unterstützt. |
| Fehler beim Verbinden oder Anmelden | Netz, Firewall, Zertifikat, falsches Dienstkonto | Erreichbarkeit und Port prüfen. Bei einem Zertifikat aus eigener CA das **PEM** hinterlegen. Dann **Verbindung testen**. |
| „Niemand wurde deaktiviert. Prüf die Attributzuordnung, besonders das Kennungsattribut.“ | kein einziger Eintrag ließ sich zuordnen | Das ist die Notbremse: es wurde **nichts** abgeschaltet. Unter **Attributzuordnung anpassen** die **Kennung (dauerhaft)** prüfen — im Active Directory `objectGUID`, im OpenLDAP meist `entryUUID`. |
| „Für … läuft gerade schon ein Abgleich.“ | ein zweiter Lauf, oft der Zeitplan | Abwarten und das **Abgleich-Log** ansehen. |
| „Das CA-Zertifikat muss im PEM-Format vorliegen …“ | falscher Text eingefügt | Der Text muss mit `-----BEGIN CERTIFICATE-----` beginnen. |
**Übersprungene Einträge** im Log sind kein Fehler der Quelle, sondern einzelne krumme Konten. Steigt
die Zahl, prüf die Attributzuordnung.
**Der Abgleich lief, hat aber nichts getan** („0 angelegt, 0 aktualisiert“): das ist die Auskunft,
dass sich im Verzeichnis nichts geändert hat. Alles in Ordnung.
## „Der Entwurf wurde zwischenzeitlich von jemand anderem gespeichert.“
**Ursache:** zwei Redakteure am selben Entwurf.
**Was tun:** **Lade die Seite nicht neu** — deine Eingaben stehen noch da und wären danach weg. Öffne
den Entwurf in einem zweiten Tab, sieh dir die fremde Fassung an und trag deine Änderungen dort nach.
Wird es viel, hilft **Aufbau als JSON herauskopieren** unten an der Speicherleiste: damit rettest du
deinen Stand als Text heraus.
Denselben Ausweg gibt es bei **jedem** fehlgeschlagenen Speichern im Editor, egal woran es lag.
## Der Lauf zeigt einen Platzhalter wie `{{ad_gruppe}}`
**Ursache:** der Platzhalter gehört zu keiner Variablen und zu keinem eingebauten Wert. Im Lauf bleibt
er als Text stehen — sichtbar, aber nutzlos. Meist ein Tippfehler in der Vorlage.
**Was tun:** Im Befehl vor dem Ausführen von Hand ersetzen (der Kasten warnt davor: „konnte nicht
eingesetzt werden und steht so im Befehl“). Dann sag es dem Redakteur: im Editor steht die Warnung
oben, und die Vorlage braucht entweder die Variable oder den richtigen Schlüssel. Das wirkt erst in
der **nächsten** Version — laufende Läufe hängen an ihrer.
## Das Passwort ist weg
**Ursache:** `{{generiertes_passwort}}` wird bei jeder Anzeige neu erzeugt und **nirgends
gespeichert**. Sobald sich die Seite neu aufbaut — auch nach dem Speichern eines Schritts — steht dort
ein anderes. Auf dem Ausdruck steht `[Passwort – nicht gespeichert]`.
**Was tun:** Es gibt keinen Weg, es nachzuschlagen; es existiert nicht mehr. Setz im Zielsystem ein
neues Passwort und gib es weiter. Beim nächsten Mal: **kopieren und sofort weiterreichen**, bevor du
etwas anderes anklickst. Meldet der Streifen oben „Beim Neuladen entsteht ein neues Passwort“,
kopiere das angezeigte erst.
## Ein Gerät lässt sich nicht löschen
**Ursache:** an dem Gerät hängt mindestens ein Lauf — die Meldung nennt die Zahl. Ein Lauf muss für
immer nachvollziehbar bleiben. Oder deine Rolle ist nicht **Administrator**; nur er sieht den Knopf.
**Was tun:** **archivieren** statt löschen. Das Gerät verschwindet aus allen Auswahllisten und nimmt
keine neue Arbeit an, bleibt aber in jeder Historie — und lässt sich mit **wieder freigeben**
zurückholen.
Und bedenke: eine echte Löschung **verbrennt den Tag-Code für immer**. Ein schon gedruckter Aufkleber
dieses Codes ist danach wertlos.
## Eine Vorlage steht nicht zur Wahl
**Ursache:** eine von vier, in dieser Reihenfolge zu prüfen:
1. Sie hat **keine veröffentlichte Version** — ein Entwurf ist noch niemandes Arbeitsanweisung.
2. Sie ist **archiviert**.
3. Sie gehört **einem anderen Kunden** („nur Musterfirma GmbH“).
4. Auf der Geräteseite: sie verlangt **Pflichtangaben**. Dann steht sie mit dem Zusatz „fragt noch
nach Angaben“ dabei und führt in den Start-Dialog, statt sofort zu starten — hier wird ja niemand
gefragt.
**Was tun:** Fall 1 und 2 löst ein Redakteur auf der Vorlagenseite (**Veröffentlichen**
beziehungsweise **wieder freigeben**), Fall 3 ein Administrator über die Kundenzuordnung in den
Kopfdaten. Fall 4 ist kein Fehler: nimm den Start-Dialog.
## Ein Lauf oder ein Gerät ist nicht auffindbar
**Ursache und was tun:**
- **Die Liste ist gekappt.** Die Laufliste zeigt höchstens 200 Läufe, die Archivsuche höchstens 100
Treffer, die Gerätehistorie die letzten 20. Steht das dabei, such genauer statt zu blättern:
Titel, Ticket, Hostname, Person oder Tag-Code.
- **Der Lauf ist archiviert.** Archivierte Läufe stehen **nicht** in der Laufliste. Nimm das
**Archiv** — dort auch das Häkchen **auch offene und laufende Läufe**, wenn du beides zugleich
suchst.
- **Die Person ist deaktiviert.** Setz in der Personenliste das Häkchen **auch deaktivierte**.
- **Das Gerät ist archiviert.** Setz in der Geräteliste das Häkchen **auch archivierte**.
- **Es gehört einem anderen Kunden.** Dann ist es für dich nicht vorhanden, und daran ändert auch ein
weitergegebener Link nichts.
+55
View File
@@ -0,0 +1,55 @@
# Laufzettel — Anleitung
Laufzettel ist eine Checkliste für wiederkehrende IT-Arbeiten. Ein Redakteur schreibt einmal auf,
was bei einer PC-Neuinstallation, einem Onboarding oder einem Patchday zu tun ist — das ist eine
**Vorlage**. Aus einer veröffentlichten Vorlage entsteht ein **Lauf**: die Abschrift für einen
bestimmten Fall, mit einem bestimmten Gerät und einer bestimmten Person. Den Lauf arbeitet ein
Techniker Schritt für Schritt ab, oft am Handy, direkt am Gerät. Am Ende wird er abgeschlossen und
archiviert und ändert sich nie wieder.
Auf jedem Gerät klebt ein QR-Aufkleber. Wer ihn scannt, landet auf der Geräteseite und sieht, was
dort zu tun ist und was dort schon getan wurde. Der Code auf dem Aufkleber wird nie geändert und
nie an ein zweites Gerät vergeben — er ist die einzige Angabe am Gerät, die Jahre hält.
![Die Übersicht nach dem Anmelden mit den Blöcken „Überfällig“, „Mir zugewiesen“ und „Zuletzt bearbeitet“](bilder/uebersicht-desktop.png)
## Wer welches Kapitel braucht
**Techniker** — du arbeitest Läufe ab, scannst Aufkleber und druckst Etiketten:
- [01 Erste Schritte](01-erste-schritte.md) — anmelden, wo was steht
- [02 Läufe abarbeiten](02-laeufe-abarbeiten.md) — der Alltag, am Schreibtisch und am Handy
- [03 QR-Aufkleber und Tags](03-qr-tags.md) — scannen, registrieren, Etiketten drucken
- [08 Fehlerbehebung](08-fehlerbehebung.md) — wenn etwas klemmt
**Administrator oder Redakteur** — du richtest ein und pflegst:
- [04 Vorlagen bauen](04-vorlagen.md) — Abschnitte, Schritte, Variablen, veröffentlichen
- [05 Mitarbeiter, Abteilungen und Geräte](05-mitarbeiter-geraete.md) — Stammdaten und CSV-Import
- [06 Verzeichnis anbinden](06-verzeichnis.md) — Active Directory als Quelle der Personen
- [07 Verwaltung](07-admin.md) — Benutzer, Rollen, Einstellungen, Betriebsmodus, Kunden
## Zwei Betriebsmodi
Laufzettel läuft in einem von zwei Modi. Der Modus entscheidet, ob es eine Kundenebene gibt, und
ändert einige Beschriftungen.
| Modus | Für wen | Kundenebene |
|---|---|---|
| **Intern** | eine Firma und ihre eigenen Mitarbeiter | unsichtbar |
| **Dienstleistung** | IT-Dienstleister mit mehreren Kunden | sichtbar: Kundenliste, Kundenwahl, Kürzel auf dem Etikett |
Im Modus Intern heißt der Menüpunkt „Mitarbeiter & Geräte“, im Modus Dienstleistung „Personen &
Geräte“; dort kommt außerdem „Kunden“ dazu, und das Verzeichnis fällt weg. Wo diese Anleitung
„Person“ schreibt, heißt es im Modus Intern auch „Mitarbeiter“ — gemeint ist dasselbe. Umgestellt
wird der Modus unter Admin, siehe [Kapitel 07](07-admin.md).
## Drei Zusagen, die überall gelten
1. **Eine veröffentlichte Version wird nie verändert.** Sonst zeigte ein alter Lauf Schritte, die
es damals nicht gab. „Bearbeiten“ erzeugt stattdessen eine Kopie als Entwurf.
2. **Ein archivierter Lauf ist schreibgeschützt.** Kein Haken, keine Notiz, kein Kommentar geht
danach noch. Nur ein Administrator holt ihn zurück.
3. **Gelöscht wird fast nichts.** Geräte, Abteilungen, Vorlagen und Kunden werden archiviert,
Personen nur deaktiviert. Ein archivierter Lauf muss auch in zehn Jahren noch sagen können, für
wen er lief.
Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB