feat(doku): Anleitung, PDF und Ende-zu-Ende-Abnahme (#36)
@@ -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.
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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 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
|
||||
|
||||

|
||||
|
||||
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 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.
|
||||
|
||||

|
||||
|
||||
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** 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.
|
||||
|
||||

|
||||
|
||||
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).
|
||||
@@ -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**“).
|
||||
|
||||

|
||||
|
||||
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 |
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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?
|
||||
|
||||

|
||||
|
||||
- **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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.**
|
||||
|
||||

|
||||
|
||||
### 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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
**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
|
||||
|
||||

|
||||
|
||||
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).
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
**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
|
||||
|
||||

|
||||
|
||||
### 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
|
||||
|
||||

|
||||
|
||||
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.**
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
After Width: | Height: | Size: 394 KiB |
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 282 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 303 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 346 KiB |
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 800 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 187 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 368 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 435 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 191 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 605 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 331 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 216 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 438 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 368 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 510 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 254 KiB |
|
After Width: | Height: | Size: 118 KiB |
@@ -20,11 +20,12 @@ als Unterpunkte mit Aufgabe und Dauer.
|
||||
| #015 | M10 – Dashboard und Archiv | 2 h 20 min |
|
||||
| #016 | M11 – Verzeichnis und LDAP-Abgleich | 3 h 25 min |
|
||||
| #017 | M12 – Seed der sieben Vorlagen | 1 h 30 min |
|
||||
| | **Summe** | **27 h 40 min** |
|
||||
| #018 | M13 – E2E-Tests, Anleitung, PDF | 2 h 15 min |
|
||||
| | **Summe** | **29 h 55 min** |
|
||||
|
||||
| Meilenstein | Tatsächlich | Status |
|
||||
|---|---|---|
|
||||
| v0.1.0 | 27 h 40 min | in Arbeit |
|
||||
| v0.1.0 | 29 h 55 min | in Arbeit |
|
||||
|
||||
---
|
||||
|
||||
@@ -829,3 +830,72 @@ als Unterpunkte mit Aufgabe und Dauer.
|
||||
[#021](issues/021-stabiler-schluessel-vorlagen.md) (stabiler Schlüssel für Seed-Vorlagen)
|
||||
- #018 E2E-Tests, Anleitung und PDF — die Hauptabläufe in beiden Betriebsmodi, die bebilderte
|
||||
Anleitung für Techniker und Admins und der PDF-Export über Chromium.
|
||||
|
||||
---
|
||||
|
||||
## 2026-09-26 · Sitzung 14 · 05:30–10:50
|
||||
|
||||
**Issue:** #018 (M13)
|
||||
**Version:** 0.1.0
|
||||
|
||||
### Erledigt
|
||||
|
||||
- **Vier Teile parallel**: vorhandene Abläufe robust machen, vier neue Abläufe, die Anleitung, der
|
||||
PDF-Export. Das Fundament — gemeinsamer Helfer, Vorabprüfung, Betriebsmodus — kam vorher von mir
|
||||
- **Anleitung** unter `docs/anleitung/`: neun Kapitel, rund 11.600 Wörter, getrennt für Technik und
|
||||
Verwaltung, mit 35 Bildern und einem Fehlerbehebungskapitel aus 18 echten Meldungen
|
||||
- **`pnpm docs:pdf`**: 72 Seiten A4, Deckblatt, Inhaltsverzeichnis, Seitenzahlen, hell gedruckt,
|
||||
ohne neue Abhängigkeit (`react-markdown` über `react-dom/server`)
|
||||
- **Markierungen** in den Screenshots: Rahmen in der Akzentfarbe mit Nummer, für die Stellen, die
|
||||
ein Kapitel gerade beschreibt
|
||||
- **Vier neue Abläufe**: Hauptablauf von vorn bis hinten, Onboarding mit Zwischenablage-Vergleich,
|
||||
Rollen, und 390 px auf achtzehn Seiten
|
||||
- **101 Ende-zu-Ende-Abläufe** grün (vorher 67), Gesamtsuite unverändert grün
|
||||
|
||||
### Entscheidungen
|
||||
|
||||
- **Die Voraussetzungen eines Laufs werden geprüft, nicht behauptet.** `tests/e2e/global-setup.ts`
|
||||
fragt vor dem ersten Ablauf: läuft ein gebauter Stand, steht der Seed-Bestand, und liest der
|
||||
Server **dieselbe** Datenbank wie der Testprozess? Jede Meldung nennt die Ursache und was zu tun
|
||||
ist. Die dritte Frage hat in #017 einen halben Abend gekostet.
|
||||
- **Das PDF kommt nicht ins Repo.** Es entsteht aus Kapiteln und Bildern, die beide versioniert
|
||||
sind, und würde bei jedem Lauf 8,7 MB neu anhängen. Der Auftrag sagt „liegt jedem Release bei“ —
|
||||
genau so wird es gemacht.
|
||||
- **Die `beispiel:*`-Skripte bleiben.** Sie sollten laut ihrem Kopfkommentar mit #017 verschwinden;
|
||||
dort wurden zwei Dinge verwechselt. Der Seed richtet eine **Installation** ein, die Skripte
|
||||
stellen her, was **Screenshots und Abläufe** brauchen: einen offenen Entwurf, einen halb
|
||||
abgearbeiteten Lauf, eine Person aus dem Verzeichnis.
|
||||
|
||||
### Probleme
|
||||
|
||||
- **Das Projekt „handy" prüfte 412 px statt 390.** `devices["Pixel 7"]` ist 412 breit; CLAUDE.md und
|
||||
das Abnahmekriterium nennen 390. Jeder „trägt am Handy ohne horizontales Scrollen"-Test lief damit
|
||||
gegen eine Breite, die niemand verlangt hatte — zweiundzwanzig Pixel, die eine ausbrechende Seite
|
||||
tadellos aussehen lassen. Nach der Korrektur blieb die Suite grün; die Zusage hielt also, sie war
|
||||
nur nie geprüft.
|
||||
- **Eine Auskunft, die niemand je gesehen hat.** Ein angemeldeter Benutzer ohne Recht wurde auf
|
||||
`/anmelden?fehler=keinrecht` geschickt — und die Anmeldeseite schickt einen Angemeldeten sofort
|
||||
weiter auf die Übersicht. Die Meldung „Für diesen Bereich fehlt dir die Berechtigung" war
|
||||
unerreichbar, der Kommentar im Code versprach sie trotzdem. Jetzt gibt es `/kein-zugriff`.
|
||||
- **Zwei Tests, die Schaden anrichteten.** Der Verzeichnis-Ablauf nahm die erste vorhandene Quelle
|
||||
und schrieb ihre Attributzuordnung um — in einer echten Installation die produktive. Und ein
|
||||
Nachlauf setzte die Namensregeln auf leer, statt den vorherigen Wert zurückzustellen: er löschte,
|
||||
was der Seed eingerichtet hatte. Beides stammt aus meinen eigenen Meilensteinen.
|
||||
- **Vier stille Annahmen**: Vorlage über die Position in der Liste, „die Datenbank enthält schon
|
||||
Läufe", `test.skip` bei fehlenden Daten, und Fixtures im Kopfkommentar statt geprüft. Alle vier
|
||||
fielen erst auf, als zum ersten Mal gegen eine **frisch eingerichtete** Installation geprüft
|
||||
wurde.
|
||||
- **Sechs Abläufe kannten die Kundenebene nicht.** Im Modus DIENSTLEISTUNG hat jedes Anlege-Formular
|
||||
ein Feld mehr, und es ist Pflicht: `kundeErmitteln` wirft sonst. Schlimmer als das Feld ist die
|
||||
Regel dahinter — ein Lauf kann strukturell kein Gerät und keine Abteilung eines fremden Kunden
|
||||
wählen, dafür sorgen zusammengesetzte Fremdschlüssel. „Irgendein Kunde" ist dort nicht ungenau,
|
||||
sondern rot. Beim Onboarding war es sogar eine Reihenfolge: die Kundenwahl stand hinter dem
|
||||
Namensvorschlag, und ohne Kunden können die Namensregeln gar nicht greifen.
|
||||
- **Parallele Arbeit an einem Verzeichnis geht schief.** Eine Wegwerf-Probe für den PDF-Bau hat die
|
||||
`README.md` der Anleitung überschrieben, während sie geschrieben wurde. Wiederhergestellt, aber
|
||||
der Ablageort für Proben gehört in das Verzeichnis für Zwischenstände, nicht neben die Arbeit.
|
||||
|
||||
### Nächster Schritt
|
||||
|
||||
- #019 Betriebswege und Release `v0.1.0` — `deploy/install.sh`, der Proxmox-One-Liner, die
|
||||
Betriebsdokumentation und der Tag mit Release-Notes.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# #018 M13 – E2E-Tests, Anleitung, PDF
|
||||
|
||||
**Status:** offen
|
||||
**Status:** erledigt
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** phase-1, test, docs
|
||||
**Geschätzt:** 14 h **Tatsächlich:** –
|
||||
**Geschätzt:** 14 h **Tatsächlich:** 2 h 15 min
|
||||
|
||||
## Ziel
|
||||
|
||||
@@ -11,27 +11,75 @@ Nachweis, dass die Abläufe wirklich durchlaufen, und eine Anleitung, mit der ei
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Playwright-Hauptablauf: anmelden → „PC Neuinstallation“ für `PC-001` starten → Schritte abhaken → Wert eintragen → einen Schritt „nicht zutreffend“ mit Notiz → abschließen → archivieren → im Archiv finden → Schreibschutz greift
|
||||
- [ ] Derselbe Hauptablauf mit `SEED_MODE=SERVICE` gegen `MUS-PC-001`, mit Kundenwahl im Start-Dialog
|
||||
- [ ] Playwright-QR-Ablauf: `/t/LZ-7K3F9Q` ohne Anmeldung → Login → Geräteseite → „Vorlage zuweisen“ → Lauf erscheint unter „Zugewiesen“ → „Starten“ setzt `IN_ARBEIT`; dazu unregistrierter Tag → Registrierformular → Geräteseite; unbekannter Tag → Hinweis
|
||||
- [ ] Playwright-Onboarding-Ablauf: Vorlage starten → Vorname und Nachname eingeben → UPN, `sam` und Mail werden vorgeschlagen → Abteilung „Buchhaltung“ wählen → im Schritt „Konto anlegen“ steht der fertige `New-ADUser`-Befehl → Kopieren liefert exakt diesen Text (Clipboard auslesen)
|
||||
- [ ] Playwright-Mobilprüfung: auf allen Hauptseiten bei 390 × 844 ist `scrollWidth <= clientWidth`
|
||||
- [ ] Playwright-Rollenprüfung: `LESER` sieht keine Schreib-Knöpfe und wird serverseitig abgewiesen
|
||||
- [ ] Die Abläufe suchen ihre Vorlage **am Namen**, nicht über `select ... { index: 1 }`. Aufgefallen in #017: gegen eine frisch geseedete Datenbank steht an erster Stelle „Mitarbeiter-Offboarding“ mit Pflichtvariablen, die der Helfer nicht füllt — sechs Abläufe liefen je 30 s in den Zeitablauf. Ein Ablauf, der von der Sortierung der Vorlagenliste abhängt, prüft nicht, was er zu prüfen vorgibt
|
||||
- [ ] Die Voraussetzungen eines E2E-Laufs stehen an einer Stelle und werden geprüft, statt im Kopfkommentar zu stehen (`pnpm beispiel:vorlage`, `pnpm beispiel:stammdaten`, `pnpm beispiel:lauf`) — besser noch: die Abläufe legen an, was sie brauchen. Die drei Skripte tragen auch die Screenshots; was davon bleibt und was in die Abläufe wandert, wird hier entschieden. In den Seed gehört es **nicht**: eine frische Installation soll keine Demo-Läufe und keine offenen Entwürfe mitbringen (in #017 geprüft und so entschieden)
|
||||
- [ ] Kein Ablauf setzt voraus, dass die Datenbank schon Läufe enthält. `uebersicht-druck.spec.ts` sucht sich mit `lauf.findFirstOrThrow()` irgendeinen Lauf und „Zuletzt bearbeitet" muss gefüllt sein — gegen eine frisch eingerichtete Installation scheitert beides mit „No record was found", und das sagt nichts über die Ursache (gesehen in #017)
|
||||
- [ ] Der E2E-Lauf prüft beim Start, dass er **dieselbe** Datenbank benutzt wie der Server unter Test. Die Abläufe legen ihre Daten über `prisma` aus `.env` an, die Adresse des Servers steht in `E2E_APP_URL` — zeigen beide auf verschiedene Datenbanken, schreibt der Test in die eine und sucht in der anderen. Die Meldung heißt dann „0 Treffer“ und sagt nichts über die Ursache (gesehen in #017)
|
||||
- [ ] `pnpm docs:screenshots`: Playwright-Skript, Desktop 1440 × 900 und Handy 390 × 844, Seed-Daten, dunkles Design, mit Markierungen (Rahmen, Nummern) für die beschriebenen Stellen; Ablage `docs/anleitung/bilder/`
|
||||
- [ ] `pnpm docs:pdf`: Anleitung als PDF über Chromium (`page.pdf`, A4, `printBackground`), Ablage `docs/anleitung/laufzettel-anleitung.pdf`
|
||||
- [ ] `docs/anleitung/` auf Deutsch, getrennt für Techniker und Admins: Erste Schritte · Vorlagen bauen · Läufe abarbeiten (Desktop und Handy) · QR-Tags drucken und registrieren · Mitarbeiter und Abteilungen · Betriebsmodus · Admin: Verzeichnis, Benutzer, Einstellungen · Fehlerbehebung
|
||||
- [ ] `README.md` vollständig: Setup, alle Umgebungsvariablen, Betrieb mit Docker Compose, authentik-Anbindung inkl. Gruppen für Rollen, Seed, Sicherungshinweis für die Datenbank
|
||||
- [x] Playwright-Hauptablauf: anmelden → „PC Neuinstallation“ für `PC-001` starten → Schritte abhaken → Wert eintragen → einen Schritt „nicht zutreffend“ mit Notiz → abschließen → archivieren → im Archiv finden → Schreibschutz greift
|
||||
- [x] Derselbe Hauptablauf mit `SEED_MODE=SERVICE` gegen `MUS-PC-001`, mit Kundenwahl im Start-Dialog
|
||||
- [x] Playwright-QR-Ablauf: `/t/LZ-7K3F9Q` ohne Anmeldung → Login → Geräteseite → „Vorlage zuweisen“ → Lauf erscheint unter „Zugewiesen“ → „Starten“ setzt `IN_ARBEIT`; dazu unregistrierter Tag → Registrierformular → Geräteseite; unbekannter Tag → Hinweis
|
||||
- [x] Playwright-Onboarding-Ablauf: Vorlage starten → Vorname und Nachname eingeben → UPN, `sam` und Mail werden vorgeschlagen → Abteilung „Buchhaltung“ wählen → im Schritt „Konto anlegen“ steht der fertige `New-ADUser`-Befehl → Kopieren liefert exakt diesen Text (Clipboard auslesen)
|
||||
- [x] Playwright-Mobilprüfung: auf allen Hauptseiten bei 390 × 844 ist `scrollWidth <= clientWidth`
|
||||
- [x] Playwright-Rollenprüfung: `LESER` sieht keine Schreib-Knöpfe und wird serverseitig abgewiesen
|
||||
- [x] Die Abläufe suchen ihre Vorlage **am Namen**, nicht über `select ... { index: 1 }`. Aufgefallen in #017: gegen eine frisch geseedete Datenbank steht an erster Stelle „Mitarbeiter-Offboarding“ mit Pflichtvariablen, die der Helfer nicht füllt — sechs Abläufe liefen je 30 s in den Zeitablauf. Ein Ablauf, der von der Sortierung der Vorlagenliste abhängt, prüft nicht, was er zu prüfen vorgibt
|
||||
- [x] Die Voraussetzungen eines E2E-Laufs stehen an einer Stelle und werden geprüft, statt im Kopfkommentar zu stehen (`pnpm beispiel:vorlage`, `pnpm beispiel:stammdaten`, `pnpm beispiel:lauf`) — besser noch: die Abläufe legen an, was sie brauchen. Die drei Skripte tragen auch die Screenshots; was davon bleibt und was in die Abläufe wandert, wird hier entschieden. In den Seed gehört es **nicht**: eine frische Installation soll keine Demo-Läufe und keine offenen Entwürfe mitbringen (in #017 geprüft und so entschieden)
|
||||
- [x] Kein Ablauf setzt voraus, dass die Datenbank schon Läufe enthält. `uebersicht-druck.spec.ts` sucht sich mit `lauf.findFirstOrThrow()` irgendeinen Lauf und „Zuletzt bearbeitet" muss gefüllt sein — gegen eine frisch eingerichtete Installation scheitert beides mit „No record was found", und das sagt nichts über die Ursache (gesehen in #017)
|
||||
- [x] `pnpm beispiel:stammdaten` und `pnpm beispiel:lauf` laufen nur im Modus `INTERN`: sie rufen die Dienste ohne Kunden und scheitern im Modus `DIENSTLEISTUNG` an `MandantFehler: Im Modus Dienstleistung muss ein Kunde gewählt werden`. Das ist richtiges Verhalten der App und eine Lücke der Skripte — wer den Hauptablauf in beiden Modi fahren will, braucht sie in beiden
|
||||
- [x] Der E2E-Lauf prüft beim Start, dass er **dieselbe** Datenbank benutzt wie der Server unter Test. Die Abläufe legen ihre Daten über `prisma` aus `.env` an, die Adresse des Servers steht in `E2E_APP_URL` — zeigen beide auf verschiedene Datenbanken, schreibt der Test in die eine und sucht in der anderen. Die Meldung heißt dann „0 Treffer“ und sagt nichts über die Ursache (gesehen in #017)
|
||||
- [x] `pnpm docs:screenshots`: Playwright-Skript, Desktop 1440 × 900 und Handy 390 × 844, Seed-Daten, dunkles Design, mit Markierungen (Rahmen, Nummern) für die beschriebenen Stellen; Ablage `docs/anleitung/bilder/`
|
||||
- [x] `pnpm docs:pdf`: Anleitung als PDF über Chromium (`page.pdf`, A4, `printBackground`), Ablage `docs/anleitung/laufzettel-anleitung.pdf`
|
||||
- [x] `docs/anleitung/` auf Deutsch, getrennt für Techniker und Admins: Erste Schritte · Vorlagen bauen · Läufe abarbeiten (Desktop und Handy) · QR-Tags drucken und registrieren · Mitarbeiter und Abteilungen · Betriebsmodus · Admin: Verzeichnis, Benutzer, Einstellungen · Fehlerbehebung
|
||||
- [x] `README.md` vollständig: Setup, alle Umgebungsvariablen, Betrieb mit Docker Compose, authentik-Anbindung inkl. Gruppen für Rollen, Seed, Sicherungshinweis für die Datenbank
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Alle Playwright-Abläufe grün, in `INTERN` und in `DIENSTLEISTUNG`
|
||||
- [ ] Der Kopier-Knopf liefert exakt den erwarteten Befehlstext, zeichengenau geprüft
|
||||
- [ ] Keine Hauptseite scrollt bei 390 px horizontal
|
||||
- [ ] `pnpm docs:screenshots` erzeugt alle in der Anleitung verlinkten Bilder reproduzierbar neu
|
||||
- [ ] `pnpm pruefe:doku` meldet kein fehlendes Bild
|
||||
- [ ] Das PDF enthält alle Kapitel mit Bildern, Umlaute korrekt, keine abgeschnittenen Seiten
|
||||
- [ ] Die README beschreibt authentik so, dass ein Dritter die Anbindung ohne Rückfrage hinbekommt
|
||||
- [x] Alle Playwright-Abläufe grün, in `INTERN` und in `DIENSTLEISTUNG`
|
||||
- [x] Der Kopier-Knopf liefert exakt den erwarteten Befehlstext, zeichengenau geprüft
|
||||
- [x] Keine Hauptseite scrollt bei 390 px horizontal
|
||||
- [x] `pnpm docs:screenshots` erzeugt alle in der Anleitung verlinkten Bilder reproduzierbar neu
|
||||
- [x] `pnpm pruefe:doku` meldet kein fehlendes Bild
|
||||
- [x] Das PDF enthält alle Kapitel mit Bildern, Umlaute korrekt, keine abgeschnittenen Seiten
|
||||
- [x] Die README beschreibt authentik so, dass ein Dritter die Anbindung ohne Rückfrage hinbekommt
|
||||
|
||||
## Ergebnis
|
||||
|
||||
Erledigt am 2026-09-26. **101 Ende-zu-Ende-Abläufe** im Modus `INTERN` und **97** im Modus
|
||||
`DIENSTLEISTUNG`, beide ohne Fehlschlag; Vitest unverändert bei 1130. Die Anleitung steht unter
|
||||
`docs/anleitung/` mit 35 Bildern, das PDF hat 72 Seiten.
|
||||
|
||||
### Was die Abläufe jetzt anders machen
|
||||
|
||||
- **Die Voraussetzungen werden geprüft, nicht behauptet.** `tests/e2e/global-setup.ts` fragt vor dem
|
||||
ersten Ablauf: antwortet ein gebauter Stand, steht der Seed-Bestand, und liest der Server
|
||||
**dieselbe** Datenbank wie der Testprozess? Die dritte Frage hat in #017 einen halben Abend
|
||||
gekostet, weil ihre Antwort „0 Treffer" hieß.
|
||||
- **Jeder Ablauf legt an, was er braucht, und räumt es weg.** Keine Vorlage über `index: 1`, keine
|
||||
Annahme „die Datenbank enthält schon Läufe", kein `test.skip` bei fehlenden Daten.
|
||||
- **Zehn Kopien von `anmelden()`** sind zu einer geworden.
|
||||
|
||||
### Drei Fehler, die dabei herauskamen
|
||||
|
||||
1. **Das Projekt „handy" prüfte 412 px statt 390.** `devices["Pixel 7"]` ist 412 breit; CLAUDE.md und
|
||||
das Abnahmekriterium nennen 390. Jeder „trägt am Handy ohne horizontales Scrollen"-Test lief
|
||||
gegen eine Breite, die niemand verlangt hatte. Nach der Korrektur blieb alles grün — die Zusage
|
||||
hielt, sie war nur nie geprüft.
|
||||
2. **Eine Auskunft, die niemand je gesehen hat.** Ein angemeldeter Benutzer ohne Recht wurde auf
|
||||
`/anmelden?fehler=keinrecht` geschickt, und die Anmeldeseite leitet einen Angemeldeten sofort
|
||||
weiter. Die Meldung war unerreichbar, der Kommentar im Code versprach sie. Jetzt gibt es
|
||||
`/kein-zugriff` mit der eigenen Rolle darin.
|
||||
3. **Zwei Tests, die Schaden anrichteten:** der Verzeichnis-Ablauf schrieb die Attributzuordnung der
|
||||
**ersten vorhandenen** Quelle um — in einer echten Installation die produktive; und ein Nachlauf
|
||||
setzte die Namensregeln auf leer, statt den vorherigen Wert zurückzustellen.
|
||||
|
||||
### Der zweite Betriebsmodus
|
||||
|
||||
Der erste Durchgang im Modus `DIENSTLEISTUNG` hatte **28 rote Abläufe**, sechs Ursachen, alle
|
||||
dieselbe blinde Stelle: die Kundenebene. Dort hat jedes Anlege-Formular ein Pflichtfeld mehr, und
|
||||
dahinter steht eine Regel, die nicht verhandelbar ist — ein Lauf kann **strukturell** kein Gerät und
|
||||
keine Abteilung eines fremden Kunden wählen, dafür sorgen zusammengesetzte Fremdschlüssel. „Irgendein
|
||||
Kunde" ist dort nicht ungenau, sondern rot. Beim Onboarding war es sogar eine Reihenfolge: die
|
||||
Kundenwahl stand hinter dem Namensvorschlag, und ohne Kunden greifen die Namensregeln nicht.
|
||||
|
||||
Ohne dieses Abnahmekriterium wäre der zweite Betriebsmodus ungeprüft ins Release gegangen.
|
||||
|
||||
### Beim Schreiben der Anleitung aufgefallen
|
||||
|
||||
Zwei Stellen, an denen die App etwas kann, das niemand bedienen kann — beide als Issue festgehalten,
|
||||
nicht weggeschwiegen: [#022](022-schnellstart-pflegen.md) (Schnellstart je Gerätetyp setzt nur der
|
||||
Seed) und [#023](023-protokoll-ansicht.md) (das Protokoll wird geschrieben, aber nie angezeigt).
|
||||
|
||||
@@ -26,6 +26,8 @@ Zwei erprobte Wege in den Betrieb und ein sauberes erstes Release.
|
||||
- [ ] Devlog-Phasenzusammenfassung: Gesamtstunden, Stunden je Meilenstein, größte Zeitfresser, Abweichung vom Plan
|
||||
- [ ] `CHANGELOG.md` für `v0.1.0` mit Datum, Version in `package.json`, Tag `v0.1.0`, Gitea-Release mit Changelog-Auszug, Anleitung als PDF beigelegt
|
||||
|
||||
- [ ] Die Anleitung als PDF (`pnpm docs:pdf`) dem Gitea-Release als Datei beilegen — im Repo liegt sie nicht, sie entsteht aus den Kapiteln und Bildern
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] `docker run --rm debian:13` mit `deploy/install.sh` installiert vollständig durch: Postgres läuft, Migration und Seed gelaufen, Dienst antwortet auf `/api/gesundheit`
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# #022 Schnellstart je Gerätetyp pflegen
|
||||
|
||||
**Status:** offen
|
||||
**Im Tracker:** [#34](https://git.wilde-server.de/florian.wilde/Laufzettel/issues/34)
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** phase-2, frontend, backend
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
|
||||
Welche Vorlagen auf der Geräteseite als **Schnellstart** erscheinen, steht in `GeraetetypVorlage` —
|
||||
und lässt sich nur über den Seed setzen. In der Oberfläche gibt es dafür nichts. Wer eine eigene
|
||||
Vorlage als Schnellstart für Notebooks haben will, kommt nicht heran; wer eine der sieben
|
||||
Seed-Vorlagen dort loswerden will, auch nicht.
|
||||
|
||||
Aufgefallen beim Schreiben der Anleitung in [#018](018-e2e-anleitung-pdf.md): Kapitel 03 beschreibt
|
||||
den Schnellstart, konnte aber nicht sagen, wer ihn einrichtet.
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Admin-Seite (oder ein Abschnitt unter Admin → Einstellungen): je Gerätetyp eine sortierbare
|
||||
Liste der Vorlagen, die dort erscheinen sollen
|
||||
- [ ] Nur **veröffentlichte**, nicht archivierte Vorlagen zur Auswahl; die Reihenfolge ist die
|
||||
Reihenfolge der Kacheln (`position`)
|
||||
- [ ] Recht `verwaltung`, Änderung ins `Protokoll`
|
||||
- [ ] Der Seed legt die Vorgaben weiter an, überschreibt aber nie eine im Betrieb geänderte
|
||||
Zuordnung — dieselbe Regel wie für alles andere im Seed
|
||||
- [ ] Anleitung Kapitel 03 und 07 nachziehen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Test: eine zugewiesene Vorlage erscheint als Kachel auf der Geräteseite des passenden Typs
|
||||
- [ ] Test: eine archivierte Vorlage verschwindet aus dem Schnellstart, ohne dass jemand aufräumt
|
||||
- [ ] Test: `LESER` und `TECHNIKER` dürfen nicht ändern
|
||||
@@ -0,0 +1,35 @@
|
||||
# #023 Protokoll ansehen
|
||||
|
||||
**Status:** offen
|
||||
**Im Tracker:** [#35](https://git.wilde-server.de/florian.wilde/Laufzettel/issues/35)
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** phase-2, frontend
|
||||
|
||||
## Ziel
|
||||
|
||||
Laufzettel schreibt ein Protokoll über alles, was nachvollziehbar bleiben muss — Rollenänderungen,
|
||||
veröffentlichte Vorlagen, archivierte und zurückgeholte Läufe, Verzeichnisquellen, den Moduswechsel.
|
||||
**Ansehen kann es niemand.** Es gibt keine Oberfläche dafür; wer wissen will, wer wann eine Rolle
|
||||
geändert hat, braucht `psql`.
|
||||
|
||||
Aufgefallen beim Schreiben der Anleitung in [#018](018-e2e-anleitung-pdf.md).
|
||||
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Admin → Protokoll: Liste mit Zeitpunkt, Urheber, Aktion, betroffener Zeile, umblätterbar
|
||||
- [ ] Filter nach Zeitraum, Aktion und Urheber; Volltext über die Aktion
|
||||
- [ ] Die Mandantensicht gilt auch hier: ein Eintrag zu einem fremden Kunden ist nicht sichtbar
|
||||
- [ ] Recht `verwaltung` — das Protokoll sagt, wer was getan hat, und ist damit selbst eine Auskunft
|
||||
über Menschen
|
||||
- [ ] Ein Eintrag ohne Urheber (Systemlauf, etwa der Zeitplan) wird als solcher gezeigt, nicht als
|
||||
Lücke
|
||||
- [ ] Am Lauf selbst: die Einträge dieses Laufs in seiner Abarbeitungsansicht, eingeklappt
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Test: ein Eintrag eines fremden Kunden erscheint nicht
|
||||
- [ ] Test: `TECHNIKER` kommt nicht auf die Seite
|
||||
- [ ] Test: ein erzeugtes Passwort taucht in keinem Eintrag auf
|
||||
- [ ] Am Handy kein horizontales Scrollen
|
||||
@@ -22,8 +22,10 @@ Diese Dateien sind die Quelle; `pnpm issues:sync` spiegelt sie in den Gitea-Trac
|
||||
| #015 | [M10 – Dashboard und Archiv](015-dashboard-archiv.md) | erledigt | v0.1.0 | 8 h | 2 h 20 min |
|
||||
| #016 | [M11 – Verzeichnis und LDAP-Abgleich](016-verzeichnis-ldap.md) | erledigt | v0.1.0 | 12 h | 3 h 25 min |
|
||||
| #017 | [M12 – Seed der sieben Vorlagen](017-seed-sieben-vorlagen.md) | erledigt | v0.1.0 | 8 h | 1 h 30 min |
|
||||
| #018 | [M13 – E2E-Tests, Anleitung, PDF](018-e2e-anleitung-pdf.md) | offen | v0.1.0 | 14 h | – |
|
||||
| #018 | [M13 – E2E-Tests, Anleitung, PDF](018-e2e-anleitung-pdf.md) | erledigt | v0.1.0 | 14 h | 2 h 15 min |
|
||||
| #019 | [M14 – Betriebswege und Release v0.1.0](019-betrieb-release.md) | offen | v0.1.0 | 10 h | – |
|
||||
| #020 | [Vorgesetzter auch für von Hand angelegte Personen](020-vorgesetzter-manuell.md) | offen | v0.2.0 | 3 h | – |
|
||||
| #021 | [Stabiler Schlüssel für Seed-Vorlagen](021-stabiler-schluessel-vorlagen.md) | offen | v0.2.0 | 2 h | – |
|
||||
| | **Summe** | | | **141 h** | **27 h 40 min** |
|
||||
| #022 | [Schnellstart je Gerätetyp pflegen](022-schnellstart-pflegen.md) | offen | v0.2.0 | 3 h | – |
|
||||
| #023 | [Protokoll ansehen](023-protokoll-ansicht.md) | offen | v0.2.0 | 4 h | – |
|
||||
| | **Summe** | | | **148 h** | **29 h 55 min** |
|
||||
|
||||