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

This commit was merged in pull request #36.
This commit is contained in:
2026-09-26 09:04:15 +00:00
parent 9bd198a531
commit fbbb634e56
104 changed files with 4527 additions and 299 deletions
+178
View File
@@ -0,0 +1,178 @@
# Mitarbeiter, Abteilungen und Geräte
Unter **Mitarbeiter & Geräte** (im Modus Dienstleistung: **Personen & Geräte**) liegen die
Stammdaten. Oben schalten zwei Reiter um: **Personen** und **Geräte**.
Personen und Geräte pflegen darf die Rolle **Techniker**, **Redakteur** oder **Administrator** —
beim Onboarding steht der Techniker vor der Person, bevor der nächste Verzeichnisabgleich gelaufen
ist. **Abteilungen** bleiben beim **Administrator**: an ihnen hängen Ziel-OU und Standardgruppen,
also das, was die späteren PowerShell-Befehle in ein Verzeichnis schreiben.
## Personen
![Die Personenliste mit Suche und Kennzeichen je Person](bilder/mitarbeiter-liste-desktop.png)
Gesucht wird über **Name, Mail, UPN oder sam** — im Ticket steht mal das eine, mal das andere. Dazu
der Filter **Abteilung** und das Häkchen **auch deaktivierte**; ohne das erscheinen nur aktive
Personen.
Eine Zeile trägt den Namen, die Kennungen, die Abteilung und die Zahl der Geräte und Läufe. Zwei
Kennzeichen sind wichtig:
- **aus dem Verzeichnis** — diese Person kommt aus dem Active Directory. Ihre Stammdaten werden
dort gepflegt.
- **deaktiviert** — nicht mehr im Haus. Steht mit Durchstreichung da.
### Eine Person von Hand anlegen
Unter **Person von Hand anlegen**: **Vorname**, **Nachname**, **Mail-Adresse (optional)** und
**Abteilung (optional)** — für die Abteilung schlägt das Feld vorhandene Namen vor. Hinter
**Verzeichnis-Angaben (UPN, sAMAccountName, Titel)** stehen die drei Felder, die das Verzeichnis
sonst liefert. Im Modus Dienstleistung außerdem der **Kunde**. Dann **Person anlegen**.
Gedacht ist das für das Onboarding: die Person entsteht hier, das AD-Konto danach. Eine so angelegte
Person bleibt vollständig änderbar, und der nächste Verzeichnisabgleich **übernimmt** sie über UPN
oder sAMAccountName, statt sie ein zweites Mal anzulegen.
### Die Seite einer Person
![Die Seite einer Person mit Geräten und Stammdaten](bilder/mitarbeiter-seite-desktop.png)
Oben Name, Titel, Abteilung, gegebenenfalls der Vorgesetzte. Darunter:
- der Knopf **deaktivieren** beziehungsweise **wieder aktivieren**,
- **Geräte** — was dieser Person zugeordnet ist, mit Tag-Code,
- **Stammdaten** — das Formular, **Stammdaten speichern** übernimmt.
Kommt die Person **aus dem Verzeichnis**, ist jedes Feld der Stammdaten gesperrt, und oben steht,
warum: „Die Stammdaten werden dort gepflegt — eine Änderung hier würde der nächste Abgleich
zurücksetzen.“ Die Werte stehen trotzdem da, nur schreibgeschützt; ein ausgeblendetes Feld wäre eine
schlechtere Auskunft als ein gesperrtes. **Deaktivieren lässt sie sich trotzdem.**
![Eine Person aus dem Verzeichnis mit gesperrten Stammdaten](bilder/mitarbeiter-verzeichnis-desktop.png)
### Deaktivieren statt löschen
**Personen werden nie gelöscht, nur deaktiviert.** Ein archivierter Lauf muss auch in zehn Jahren
noch sagen können, für wen er lief. Eine deaktivierte Person verschwindet aus den Auswahllisten,
bleibt aber in jeder Historie auffindbar.
## Personen aus einer CSV-Datei einlesen
![Der CSV-Import für Personen mit Spaltenliste und Meldungen je Zeile](bilder/personen-import-desktop.png)
Unter **Personen aus einer CSV-Datei einlesen**. Die Spalten heißen wie im Verzeichnis, die
deutschen Entsprechungen gehen genauso:
| Spalte | Auch |
|---|---|
| `givenName` | vorname |
| `sn` | surname, nachname |
| `displayName` | anzeigename |
| `mail` | email, mailadresse |
| `upn` | userPrincipalName |
| `sam` | sAMAccountName |
| `department` | abteilung |
| `title` | titel |
Groß- und Kleinschreibung ist unerheblich, Trennzeichen darf Komma oder Semikolon sein, höchstens
500 Zeilen je Datei. Datei wählen oder Inhalt einfügen, im Modus Dienstleistung den **Kunden**
wählen, dann **Einlesen**.
Was der Import zusagt:
- **Wiedererkannt** wird eine Person über `sam` oder `upn`, sonst über den Anzeigenamen. Wer schon
da ist, wird aktualisiert statt ein zweites Mal angelegt.
- **Eine leere Zelle löscht nichts.** Was in der Datei nicht steht, bleibt, wie es ist.
- Fehlen `givenName` und `sn`, wird `displayName` am letzten Leerzeichen geteilt.
- **Personen aus dem Verzeichnis werden nicht überschrieben** — solche Zeilen werden gemeldet.
- Eine **deaktivierte** Person wird erkannt und aktualisiert, aber **nicht wieder aktiviert**. Dafür
gibt es den Schalter auf ihrer Seite.
- **Abteilungen legt der Import nicht an.** Der Name wird nur bei der Person eingetragen; als
Abteilung mit Ziel-OU und Standardgruppen übernimmt sie ein Administrator.
Eine fehlerhafte Zeile bricht den Import nicht ab. Sie wird unten mit ihrer **Zeilennummer** und dem
Grund gemeldet — genau die Zeilen sind in der Datei zu ändern.
## Abteilungen
Abteilungen liegen unter **Admin → Abteilungen**, weil an ihnen die Struktur des Verzeichnisses
hängt.
![Die Abteilungsliste mit Ziel-OU und Standardgruppen](bilder/abteilungen-desktop.png)
Eine Abteilung hat:
- **Name** — er muss **genauso lauten wie im Verzeichnis**, sonst findet die Zuordnung ihn nicht.
Verknüpft wird über den Abteilungsnamen der Person, nicht über eine Kennung.
- **Ziel-OU (optional)** — wo ein neues Konto landet, etwa
`OU=Buchhaltung,OU=Benutzer,DC=firma,DC=de`. Sie füllt den Platzhalter `{{ou}}`.
- **Standardgruppen, mit Komma getrennt** — sie füllen `{{gruppen}}`. **Die Reihenfolge bleibt
erhalten**, sie landet so im Gruppen-Befehl.
- **Mail-Domain (optional)** und **Notizen (optional)**.
Ein Tippfehler in der Ziel-OU legt ein Konto an der falschen Stelle an — das ist der Grund, warum
diese Seite dem Administrator gehört. Fehlen Ziel-OU und Standardgruppen, bleiben `{{ou}}` und
`{{gruppen}}` im Lauf leer.
**Bearbeiten** klappt das Formular an der Zeile auf. **archivieren** nimmt eine Abteilung aus dem
Angebot; gelöscht wird nichts, an einer Abteilung hängen Läufe. **wieder freigeben** macht es
rückgängig.
### Noch nicht gepflegte Abteilungen
![Vorschläge für Abteilungen, die bei Personen vorkommen, aber nicht gepflegt sind](bilder/abteilungen-vorschlaege-desktop.png)
Steht ein Abteilungsname bei Personen, ohne dass es dazu eine Abteilung gibt, erscheint oben
**Noch nicht gepflegt**. Ein Klick auf **Anlegen** legt die Abteilung mit diesem Namen an — **und
nur den Namen.** Ziel-OU, Standardgruppen und Mail-Domain sind danach leer und werden in der Liste
darunter nachgetragen.
## Geräte
![Die Geräteliste mit Filtern, Kennzeichen und Aktionen](bilder/geraete-liste-desktop.png)
Gesucht wird über **Hostname, Bezeichnung, Seriennummer, Tag-Code**, gefiltert nach **Typ** und mit
dem Häkchen **auch archivierte**.
Jede Karte zeigt Tag-Code, Namen, Typ, Besitzer, Modell, Serien- und Inventarnummer und die Zahl der
Läufe. Der Name führt auf die [Geräteseite](03-qr-tags.md). Kennzeichen: **Tag ohne Zuordnung** für
einen vorgedruckten Aufkleber, **archiviert** für ein Gerät außer Dienst.
**Stammdaten bearbeiten** klappt das Formular an der Karte auf: Hostname, Bezeichnung, Typ, Modell,
Seriennummer, Inventarnummer, Besitzer und Notizen. Zur Wahl als Besitzer stehen nur aktive Personen
desselben Kunden.
### Ein Gerät anlegen
Unter **Gerät anlegen**: **Hostname** und **Bezeichnung** (eines von beiden genügt), **Typ**,
**Modell**, **Seriennummer**, **Inventarnummer**, **Besitzer (optional)**, **Notizen (optional)**
und im Modus Dienstleistung der **Kunde**. Dann **Gerät anlegen**.
Der **Tag-Code entsteht dabei** und steht danach in der Erfolgsmeldung — er kommt auf den Aufkleber.
Drucke das Etikett gleich mit, solange du weißt, welches Gerät gemeint ist.
### Geräte aus einer CSV-Datei einlesen
Dieselbe Mechanik wie bei den Personen, höchstens 500 Zeilen. Spalten: `hostname`, `label`
(bezeichnung), `serialNumber`, `inventoryNumber`, `type`, `model`. **Eine der beiden Spalten
`hostname` oder `label` muss es geben** — sonst weiß niemand, was das Gerät ist. Jede eingelesene
Zeile verbraucht einen Tag-Code; lieber zweimal drucken als einmal zu viel einlesen.
### Archivieren statt löschen
**archivieren** nimmt ein Gerät aus dem Bestand: es taucht in keiner Auswahl mehr auf und nimmt
keine neue Arbeit an, bleibt aber in jeder Historie und lässt sich mit **wieder freigeben**
zurückholen. Das ist der normale Weg für ein ausgemustertes Gerät.
**löschen** ist die einzige echte Löschung in Laufzettel, und sie ist eng eingehegt:
- Sie erscheint nur, wenn **kein Lauf** an dem Gerät hängt. Sonst sagt Laufzettel: „An … hängen 3
Läufe. Das Gerät lässt sich deshalb nur archivieren.“
- Sie verlangt die Rolle **Administrator**.
- Sie fragt nach.
Der Grund für die Ausnahme: der Vertipper von eben stünde sonst für immer in der Liste. Der Preis
steht in der Rückfrage: **der Tag-Code bleibt für immer vergeben.** Er wird nie neu ausgegeben, ein
Aufkleber zeigt nie auf ein zweites Gerät — und ein schon gedruckter Aufkleber dieses Codes ist
danach wertlos.