This commit is contained in:
breitenbach76 2026-05-28 15:50:08 +02:00
commit c87b0b1775
23 changed files with 2658 additions and 0 deletions

View file

@ -0,0 +1,190 @@
# Gesamtkonzept — SLC-Workshop Tabletop
**Version:** 0.4 (Konzept · lineares Board · RACI-Aktiv-Feld · App-gekoppelte Lernschleife)
**Stand:** 2026-05-27
**Quelle:** Service-Lifecycle-Blueprint v3.2 (`#02_service-portfolio-management/.../02_spm_service-lifecycle-blueprint/`)
> Änderung ggü. v0.1: Board ist **linear** (durchgehende Bahn), kein geschlossener
> Ring. Der DPM-Rücklauf wird als Ausgang am Review-Ende dargestellt, nicht als
> Brückensegment.
>
> Änderung ggü. v0.3: Die **Erklärung** wandert von der Plättchen-Rückseite in die
> **Companion-App**. Plättchen tragen nur noch die **Kurzbezeichnung** (einseitig).
> Pro Station gilt die Schleife **Diskussion → App-Quiz → Auflösung → Reflexion**;
> die App führt die Stationsreihenfolge automatisch.
---
## 1. Zweck & Zielgruppe
Ein haptisches Workshop-Format, mit dem Teams der Stadt Freiburg / DIGIT den
Service-Lifecycle **erleben statt nur lesen**. Eingesetzt wird es zur Schulung
neuer Beteiligter, zur gemeinsamen Validierung des Blueprints und als
Feedback-Instrument: Wo das Spiel hakt, ist meist auch das Konzept unklar.
Lernziele:
- Phasenfolge und Aktivitäten des Lifecycles verstehen.
- Begreifen, **wer** an **welchem Gate** entscheidet (Governance / RACI).
- Die Operation↔Support-Schleife und die Rückkopplung in den Demand-Lifecycle nachvollziehen.
## 2. Das Spielbrett — lineare Bahn
Der Service-Lifecycle ist eine **durchgehende Bahn** von Design bis Review. Ein
Service-Token wandert von links nach rechts; Operation und Support bilden eine
sichtbare Hin-und-zurück-Schleife. Am Review-Ende führen zwei Ausgänge zurück in
den Demand-Lifecycle (Redesign / Retirement) — bewusst **kein** kurzgeschlossener
Pfeil zu Design.
```
Gate 1 Gate 2 / Gate 3
│ │
[ DESIGN ]──▶[ TRANSITION ]──▶[ OPERATION ]⇄[ SUPPORT ]──▶[ REVIEW ]
ds_0104 tr_01 … tr_12 op_0107 sp_0111 rv_0106
rv_05 (Redesign) / rv_06 (Retirement) ──▶ zurück in DPM (Demand-Lifecycle)
```
Loop-Ebene: **Operation ⇄ Support** ist der innere Sub-Loop (laufender Betrieb,
dreht sich häufig); der DPM-Rücklauf ist die langlebige „Wiedergeburt" eines
Services und verlässt das Board am Review-Ende.
### Aufbau aus modularen Tiles
Das Board ist ein **Tile-System**: kleine, untereinander steckbare Basistiles
(je eine Aktivität/Gate pro Tile), die zu einer Bahn aneinandergereiht werden.
Bei Platzmangel kann die Bahn **mäandrierend** (Zeilen-Umbruch) gelegt werden.
Das hält die 3D-Druckteile klein genug für übliche Druckbetten. Maße & Mechanik:
[`../01_3D-Druck/`](../01_3D-Druck/).
## 3. Phasen & Aktivitäten
Präfixe: `ds_` Design · `tr_` Transition · `op_` Operation · `sp_` Support · `rv_` Review.
| Phase | Farbe | Aktivitäten |
|-------|-------|-------------|
| **Design** | blau | ds_01ds_04 (4) |
| **Transition** | orange | tr_01tr_12 (9 Aktivitäten + 3 Gates) |
| **Operation** | grün | op_01op_07 (7) |
| **Support** | teal | sp_01sp_11 (11) |
| **Review** | lila | rv_01rv_06 (6) |
Vollständige Aktivitätsliste mit Namen: siehe Blueprint-README (Quelle oben).
Die **Plättchen-Kurzbezeichnung** (ID + Name) und die **App-Auflösung** werden
beide 1:1 aus den `service-lifecycle_*.yaml` gezogen — keine Doppelpflege.
## 4. Die Gates
| Gate | ID | Position | Gate-Keeper | Pflicht-Figuren am Tor |
|------|----|----------|-------------|------------------------|
| Gate 1 | tr_01 | Entry Transition | **SOR** | SPM + SO + AL B&C + AL App |
| Gate 2 | tr_09 | nach Build | **SO** (allein) | SO |
| Gate 3 | tr_12 | Exit Transition → Operation | **SOR** | SPM + SO + AL B&C + AL App |
Entscheidungspfade als Chips: **Go / Go mit Auflagen / Zurück / Ablehnung**
(exakt die im Blueprint dokumentierten Pfade). Gate 1 verzweigt zusätzlich
**Entwicklung (tr_02)** vs. **Konfiguration (tr_05)**.
> Hinweis Governance: Laut Rollen-YAML v1.1 wurde „Operations Manager" durch
> **AL Basis & Cloud** und **AL Applikationen** ersetzt (GOV-SOR-005). Beide sind
> ständige, stimmberechtigte SOR-Mitglieder.
## 5. Spielelemente (Mechaniken)
### 5.1 Action-Stein (Szenario-Träger)
Ein Spielstein mit aufrechtem Kartenschlitz. Die gezogene **Action Card** (z.B.
„Strategiewechsel") steckt sichtbar im Stein und wandert mit ihm durch die
Phasen. Footprint des Steins = Footprint der Aktivitäts-Verankerung.
### 5.2 Aktivitätsplättchen + App-Auflösung (Kern-Mechanik)
- **Plättchen ist einseitig:** nur **ID + Kurzbezeichnung** (`op_05 — Überwachen
der Services`). **Keine Erklärung auf der Rückseite** — die liegt in der App.
- Sitzt in der **Verankerung** (Vertiefung) des Tiles und ist **entnehmbar**.
- **Spielzug:** Action-Stein erreicht das Plättchen → Gruppe **diskutiert anhand der
Kurzbezeichnung**, was hier passiert (noch **nichts** aufdecken) → Plättchen
herausnehmen, Action-Stein in die freie Verankerung stellen (markiert „wir sind
hier") → **App-Quiz** zur Station → **Auflösung in der App** → kurze Reflexion.
- Die Erklärung wird also **erarbeitet, nicht vorgelesen**: erst Diskussion, dann
Quiz (vermittelnd), dann die ausführliche App-Auflösung.
### 5.3 Rollen-Figuren & Platzierung
Schlanke Pöppel je Rolle (Höhe ~22 mm, Pin Ø 4 mm), farb- und formcodiert.
Es gibt **einheitliche Steckplätze (Ø 4,2 mm)** an zwei Orten:
- **Aktiv-Feld (RACI pro Schritt):** Eine mobile Stecklochleiste steht **neben dem
Action-Stein** und wandert mit ihm. Sie hat vier beschriftete Zonen
**R · A · C · I**. Beim Bearbeiten einer Aktivität werden die beteiligten Rollen
in die passende RACI-Zone gesteckt — sichtbar wird nicht nur *wer*, sondern *in
welcher Verantwortung*. **A** hat genau einen Platz (genau eine Rolle accountable).
- **Gate-Versammlung:** An den Gates müssen die **Pflicht-Figuren** in die
Tor-Steckplätze, sonst „öffnet" das Gate nicht.
Die Tiles bleiben dadurch clean; die Figuren sind bewusst klein (Standfläche ≤ 8 mm),
damit mehrere in einer Zonen-Reihe stehen. Details & Designvarianten:
[`../02_Spielfiguren/`](../02_Spielfiguren/).
### 5.4 Weitere Karten & Chips
- **Artefaktkarten:** Was an einer Aktivität entsteht (Projektauftrag, Betriebsdoku, Test-Report, Service-Qualitätsbericht, Incident/Problem Record, Workaround, Review-Bericht).
- **Störungskarten:** Gegenstück zu Action Cards (Incident-Welle, Sicherheitsvorfall, Budgetkürzung, Eskalation) — zwingen in die Operation↔Support-Schleife oder über ein Gate zurück.
- **Entscheidungs-Chips:** Go / Go mit Auflagen / Zurück / Ablehnung.
- **DPM-Rücklauf-Karte:** markiert am Review-Ende, wenn der Service als Redesign/Retirement zurück in den Demand-Lifecycle geht.
- **„Unklar"-Marker:** rote Punkte für Verständnislücken (→ Dokumentation).
Details: [`../03_Karten/`](../03_Karten/).
### 5.5 Companion-App (Lernschleife & Auflösung)
Die App ist der **erklärende Gegenpart** zum Board und ersetzt die frühere
Plättchen-Rückseite. Sie **führt die Stationsreihenfolge automatisch** (linearer
Lifecycle, „Nächste Station") — die Plättchen brauchen daher keinen Code.
Pro Station liefert die App die Schrittigkeit:
1. **Diskussion zuerst (am Board):** Gruppe deutet die Kurzbezeichnung; App noch zu.
2. **Quiz (vermittelnd):** kurze Fragen, die *durch* den Stoff führen (parate
Active-Recall-Mechanik), nicht nur abprüfen.
3. **Auflösung:** ausführliche Erklärung, was hinter der Aktivität steckt
(gespeist aus den `service-lifecycle_*.yaml` + Rollen/RACI).
4. **Reflexion:** Gruppe gleicht ihren Tipp mit der Auflösung ab; „Unklar"-Marker
bei Lücken.
Schwach beantwortete Stationen werden protokolliert (→ Abschnitt 8). MVP-Scope:
[`../04_Tablet-Quiz/`](../04_Tablet-Quiz/).
## 6. Spielablauf
1. **Setup:** Bahn legen, Plättchen in Verankerungen, Rollen-Figuren am Spielfeldrand, Action/Störungs-Decks bereit, Tablet aktiviert.
2. **Rollen verteilen:** Jede Person hält 12 Rollen-Figuren und spricht, wenn ihre Rolle dran ist.
3. **Szenario ziehen:** Action Card in den Stein, Stein auf `ds_01` (erste Station).
4. **Station bearbeiten (Lernschleife, App noch zu):** Pro Aktivität die drei Leitfragen diskutieren —
1. Was passiert hier konkret für dieses Szenario?
2. Wer macht es (Rolle, RACI)? → die genannten **Rollen-Figuren ins Aktiv-Feld
in die passende R/A/C/I-Zone stecken**
3. Welches Artefakt entsteht?
Plättchen herausnehmen, **Action-Stein in die Verankerung** („wir sind hier").
Dann **App-Quiz** zur Station → **Auflösung in der App** → Gruppe reflektiert /
gleicht ab. Danach Aktiv-Feld leeren und mit dem Action-Stein zur **nächsten
Station** weiterziehen (App schaltet weiter).
5. **Gates:** Diskussion, Pflicht-Figuren setzen, Entscheidungs-Chip wählen, Token durch das Tor schieben.
6. **Schleife:** Störungskarten und Support-Phase durchspielen, bis Review erreicht ist.
7. **Review-Entscheidung:** Improvement / Redesign (rv_05) / Retirement (rv_06) — Redesign & Retirement geben den Service über die DPM-Rücklauf-Karte ab.
8. **Debrief:** Logbuch & Reflexion (→ [`../05_Workshop-Dokumentation/`](../05_Workshop-Dokumentation/)).
## 7. Didaktische Hebel
- **Active Recall:** erst diskutieren/raten anhand der Kurzbezeichnung, dann App-Quiz, dann Auflösung — statt passivem Vorlesen.
- **Embodiment:** Rollen-Figuren in der Hand erzwingen Beteiligung und vermitteln Verantwortlichkeiten körperlich (RACI im Aktiv-Feld).
- **Forcierte Konsens-Entscheidung an Gates:** trainiert Governance statt reiner Stoffvermittlung.
- **Produktives Ringen:** Die App löst erst *nach* dem Gruppentipp auf.
- **Low-stakes:** Punkte optional, Diskussion vor Wettbewerb.
## 8. Dokumentation & Feedback-Schleife
Verständnislücken im Spiel = oft Lücken im Konzept. Deshalb wird dokumentiert:
- „Unklar"-Marker direkt auf dem Board → sichtbare **Heatmap**, abfotografieren.
- Logbuch-Bogen pro Runde (Pfad, Gate-Entscheidungen, unklare Aktivitäten, Stimmung).
- Tablet-Export der schwach beantworteten Aktivitäten.
Diese Daten fließen zurück in die Weiterentwicklung des Blueprints.
## 9. Offene Punkte / nächste Schritte
- [ ] Print-Test der 3D-Maße (Stein-Stabilität mit aufrechter Karte validieren).
- [ ] Plättchen-Texte aus den YAMLs final generieren (Layout).
- [ ] Tablet-Quiz: MVP-Scope festlegen (siehe `04_Tablet-Quiz/`).
- [ ] Pilot-Workshop terminieren und Logbuch testen.

View file

@ -0,0 +1,35 @@
# 3D-Druck — Übersicht
Alles, was der 3D-Druck-Producer braucht, um die haptischen Spielelemente zu
fertigen. Großflächige Grafik (Aufdrucke, Beschriftungen) wird **nicht** gedruckt,
sondern als Aufkleber/Print-Layout aufgebracht — die 3D-Teile liefern Form,
Verankerung und Steckmechanik.
## Inhalt dieses Ordners
| Datei | Zweck |
|-------|-------|
| [`materialliste.md`](materialliste.md) | Alle Bauteile mit Maßen, Mengen, Material- und Druckempfehlung |
| [`visual-prompts_3d-producer.md`](visual-prompts_3d-producer.md) | Bild-Prompts als Orientierungs-Renderings für den Producer |
| [`board-layout.svg`](board-layout.svg) | Maßstäbliche Layout-Skizze des gesamten Boards (exakt 40 Tiles, Sequenz, Loop) |
| `board-layout.png` | PNG-Vorschau der Layout-Skizze |
| [`gen_board_layout.py`](gen_board_layout.py) | Generator-Skript für die Layout-Skizze (bei Änderungen erneut ausführen) |
| [`openscad/`](openscad/) | Parametrische Modelle (OpenSCAD) der Schlüsselteile zum direkten Slicen |
## Grundsätzliche Design-Entscheidungen
- **Modulares Tile-System** statt eines großen Boards — jedes Teil passt auf ein übliches Druckbett (≥ 200 × 200 mm).
- **Lineare Bahn** (kein Ring) — Tiles werden zu einer durchgehenden Linie aneinandergereiht, bei Platzmangel mäandrierend.
- **Eine standardisierte Verankerung** (Ø 50 mm Rundsockel) für *alle* Plättchen und für den Action-Stein → Teile sind austauschbar.
- **Steckverbindungen** (Puzzle-Tabs) zwischen Tiles, damit die Bahn stabil zusammenhält und flexibel gelegt werden kann.
- **Materialempfehlung:** PLA für Tiles/Plättchen/Gates (formstabil, günstig), PLA + Gewichtseinlage (M8-Mutter) für den Action-Stein (Standfestigkeit mit aufrechter Karte).
## Drucker-Annahmen
- Bauraum mind. 220 × 220 × 220 mm.
- Düse 0,4 mm, Schichthöhe 0,2 mm.
- Beschriftungen werden als **vertiefte Gravur** (negativ, 0,61,0 mm tief) modelliert, alternativ als aufgeklebtes Label.
> Alle Maße sind ein **Start-Spec** und vor der Serienfertigung an einem
> Funktionsmuster zu prüfen (insb. Passung Sockel↔Plättchen↔Stein und
> Kippstabilität des Steins mit Karte).

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View file

@ -0,0 +1,310 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1936 816" font-family="Arial, Helvetica, sans-serif">
<rect x="0" y="0" width="1936" height="816" fill="#f7f7f5"/>
<defs><marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto" markerUnits="strokeWidth"><path d="M0,0 L7,3 L0,6 Z" fill="#666"/></marker></defs>
<text x="30" y="44" font-size="26" font-weight="800" fill="#1a1a1a">Service-Lifecycle — Board-Layout (40 Tiles)</text>
<text x="30" y="68" font-size="14" fill="#555">37 Aktivitaeten + 3 Gates · 1 Tile = 100x100 mm · lineare Bahn, Sequenz links nach rechts</text>
<rect x="30" y="96" width="150" height="74" rx="9" fill="#2F80C9"/>
<text x="105.0" y="131.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">DESIGN</text>
<text x="105.0" y="151.0" text-anchor="middle" font-size="12" fill="#fff">4 Tiles</text>
<circle cx="200" cy="133.0" r="9" fill="#f7f7f5"/>
<rect x="200" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
<circle cx="312" cy="133.0" r="8" fill="#2F80C9"/>
<circle cx="218" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
<text x="256.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_01</text>
<text x="256.0" y="148" text-anchor="middle" font-size="10" fill="#333">Eigenschaften definieren</text>
<line x1="320" y1="133.0" x2="326" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="328" cy="133.0" r="9" fill="#f7f7f5"/>
<rect x="328" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
<circle cx="440" cy="133.0" r="8" fill="#2F80C9"/>
<circle cx="346" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
<text x="384.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_02</text>
<text x="384.0" y="148" text-anchor="middle" font-size="10" fill="#333">Komponenten designen</text>
<line x1="448" y1="133.0" x2="454" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="456" cy="133.0" r="9" fill="#f7f7f5"/>
<rect x="456" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
<circle cx="568" cy="133.0" r="8" fill="#2F80C9"/>
<circle cx="474" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
<text x="512.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_03</text>
<text x="512.0" y="148" text-anchor="middle" font-size="10" fill="#333">Vorgehen beschreiben</text>
<line x1="576" y1="133.0" x2="582" y2="133.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="584" cy="133.0" r="9" fill="#f7f7f5"/>
<rect x="584" y="96" width="112" height="74" rx="9" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
<circle cx="696" cy="133.0" r="8" fill="#2F80C9"/>
<circle cx="602" cy="114" r="7" fill="none" stroke="#2F80C9" stroke-width="1.5"/>
<text x="640.0" y="126" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">ds_04</text>
<text x="640.0" y="148" text-anchor="middle" font-size="10" fill="#333">Implementierung vorbereiten</text>
<path d="M 640.0 170 V 193.0 H 256.0 V 214" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
<rect x="30" y="216" width="150" height="74" rx="9" fill="#E8893B"/>
<text x="105.0" y="251.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">TRANSITION</text>
<text x="105.0" y="271.0" text-anchor="middle" font-size="12" fill="#fff">12 Tiles</text>
<circle cx="200" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="200" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
<circle cx="312" cy="253.0" r="8" fill="#E8893B"/>
<path d="M 244.0 248 V 234 A 12 12 0 0 1 268.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
<text x="256.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_01</text>
<text x="256.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Entw. / Konfig.?</text>
<line x1="320" y1="253.0" x2="326" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="328" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="328" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="440" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="346" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="384.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_02</text>
<text x="384.0" y="268" text-anchor="middle" font-size="10" fill="#333">Entwicklung koordinieren</text>
<line x1="448" y1="253.0" x2="454" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="456" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="456" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="568" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="474" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="512.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_03</text>
<text x="512.0" y="268" text-anchor="middle" font-size="10" fill="#333">Anwendungen entwickeln</text>
<line x1="576" y1="253.0" x2="582" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="584" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="584" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="696" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="602" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="640.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_04</text>
<text x="640.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten annehmen</text>
<line x1="704" y1="253.0" x2="710" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="712" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="712" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="824" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="730" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="768.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_05</text>
<text x="768.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten konfigurieren</text>
<line x1="832" y1="253.0" x2="838" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="840" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="840" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="952" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="858" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="896.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_06</text>
<text x="896.0" y="268" text-anchor="middle" font-size="10" fill="#333">Betriebsdoku erstellen</text>
<line x1="960" y1="253.0" x2="966" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="968" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="968" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="1080" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="986" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="1024.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_07</text>
<text x="1024.0" y="268" text-anchor="middle" font-size="10" fill="#333">Komponenten testen</text>
<line x1="1088" y1="253.0" x2="1094" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1096" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="1096" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="1208" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="1114" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="1152.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_08</text>
<text x="1152.0" y="268" text-anchor="middle" font-size="10" fill="#333">Formale Uebergabe</text>
<line x1="1216" y1="253.0" x2="1222" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1224" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="1224" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
<circle cx="1336" cy="253.0" r="8" fill="#E8893B"/>
<path d="M 1268.0 248 V 234 A 12 12 0 0 1 1292.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
<text x="1280.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_09</text>
<text x="1280.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Entry-Pruefung</text>
<line x1="1344" y1="253.0" x2="1350" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1352" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="1352" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="1464" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="1370" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="1408.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_10</text>
<text x="1408.0" y="268" text-anchor="middle" font-size="10" fill="#333">Ausrollen</text>
<line x1="1472" y1="253.0" x2="1478" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1480" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="1480" y="216" width="112" height="74" rx="9" fill="#fcf0e7" stroke="#E8893B" stroke-width="2"/>
<circle cx="1592" cy="253.0" r="8" fill="#E8893B"/>
<circle cx="1498" cy="234" r="7" fill="none" stroke="#E8893B" stroke-width="1.5"/>
<text x="1536.0" y="246" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">tr_11</text>
<text x="1536.0" y="268" text-anchor="middle" font-size="10" fill="#333">Aktivierung vorbereiten</text>
<line x1="1600" y1="253.0" x2="1606" y2="253.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1608" cy="253.0" r="9" fill="#f7f7f5"/>
<rect x="1608" y="216" width="112" height="74" rx="9" fill="#E8893B" stroke="#E8893B" stroke-width="3"/>
<circle cx="1720" cy="253.0" r="8" fill="#E8893B"/>
<path d="M 1652.0 248 V 234 A 12 12 0 0 1 1676.0 234 V 248" fill="none" stroke="#ffffff" stroke-width="3"/>
<text x="1664.0" y="268" text-anchor="middle" font-size="14" font-weight="700" fill="#ffffff">tr_12</text>
<text x="1664.0" y="283" text-anchor="middle" font-size="10.5" fill="#ffffff">Go-Live-Freigabe</text>
<path d="M 1664.0 290 V 313.0 H 256.0 V 334" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
<rect x="30" y="336" width="150" height="74" rx="9" fill="#5BAE5B"/>
<text x="105.0" y="371.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">OPERATION</text>
<text x="105.0" y="391.0" text-anchor="middle" font-size="12" fill="#fff">7 Tiles</text>
<circle cx="200" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="200" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="312" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="218" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="256.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_01</text>
<text x="256.0" y="388" text-anchor="middle" font-size="10" fill="#333">Early Life Support</text>
<line x1="320" y1="373.0" x2="326" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="328" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="328" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="440" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="346" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="384.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_02</text>
<text x="384.0" y="388" text-anchor="middle" font-size="10" fill="#333">Betriebs-Leitlinien</text>
<line x1="448" y1="373.0" x2="454" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="456" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="456" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="568" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="474" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="512.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_03</text>
<text x="512.0" y="388" text-anchor="middle" font-size="10" fill="#333">Laufender Betrieb</text>
<line x1="576" y1="373.0" x2="582" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="584" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="584" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="696" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="602" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="640.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_04</text>
<text x="640.0" y="388" text-anchor="middle" font-size="10" fill="#333">Ressourcen &amp; Budget</text>
<line x1="704" y1="373.0" x2="710" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="712" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="712" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="824" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="730" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="768.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_05</text>
<text x="768.0" y="388" text-anchor="middle" font-size="10" fill="#333">Services ueberwachen</text>
<line x1="832" y1="373.0" x2="838" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="840" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="840" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="952" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="858" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="896.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_06</text>
<text x="896.0" y="388" text-anchor="middle" font-size="10" fill="#333">Qualitaetsbericht</text>
<line x1="960" y1="373.0" x2="966" y2="373.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="968" cy="373.0" r="9" fill="#f7f7f5"/>
<rect x="968" y="336" width="112" height="74" rx="9" fill="#ebf5eb" stroke="#5BAE5B" stroke-width="2"/>
<circle cx="1080" cy="373.0" r="8" fill="#5BAE5B"/>
<circle cx="986" cy="354" r="7" fill="none" stroke="#5BAE5B" stroke-width="1.5"/>
<text x="1024.0" y="366" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">op_07</text>
<text x="1024.0" y="388" text-anchor="middle" font-size="10" fill="#333">Proaktive Problemerkennung</text>
<path d="M 1024.0 410 V 433.0 H 256.0 V 454" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
<rect x="30" y="456" width="150" height="74" rx="9" fill="#3FB5B5"/>
<text x="105.0" y="491.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">SUPPORT</text>
<text x="105.0" y="511.0" text-anchor="middle" font-size="12" fill="#fff">11 Tiles</text>
<circle cx="200" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="200" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="312" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="218" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="256.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_01</text>
<text x="256.0" y="508" text-anchor="middle" font-size="10" fill="#333">Support-Leitlinien</text>
<line x1="320" y1="493.0" x2="326" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="328" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="328" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="440" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="346" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="384.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_02</text>
<text x="384.0" y="508" text-anchor="middle" font-size="10" fill="#333">Wissensdatenbank</text>
<line x1="448" y1="493.0" x2="454" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="456" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="456" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="568" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="474" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="512.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_03</text>
<text x="512.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incidents/Requests verteilen</text>
<line x1="576" y1="493.0" x2="582" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="584" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="584" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="696" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="602" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="640.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_04</text>
<text x="640.0" y="508" text-anchor="middle" font-size="10" fill="#333">Requests bearbeiten</text>
<line x1="704" y1="493.0" x2="710" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="712" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="712" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="824" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="730" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="768.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_05</text>
<text x="768.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incident 1st Level</text>
<line x1="832" y1="493.0" x2="838" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="840" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="840" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="952" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="858" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="896.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_06</text>
<text x="896.0" y="508" text-anchor="middle" font-size="10" fill="#333">Incident 2nd Level</text>
<line x1="960" y1="493.0" x2="966" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="968" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="968" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="1080" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="986" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="1024.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_07</text>
<text x="1024.0" y="508" text-anchor="middle" font-size="10" fill="#333">Record geloest</text>
<line x1="1088" y1="493.0" x2="1094" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1096" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="1096" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="1208" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="1114" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="1152.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_08</text>
<text x="1152.0" y="508" text-anchor="middle" font-size="10" fill="#333">Schliessen</text>
<line x1="1216" y1="493.0" x2="1222" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1224" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="1224" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="1336" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="1242" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="1280.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_09</text>
<text x="1280.0" y="508" text-anchor="middle" font-size="10" fill="#333">Problem Record anlegen</text>
<line x1="1344" y1="493.0" x2="1350" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1352" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="1352" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="1464" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="1370" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="1408.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_10</text>
<text x="1408.0" y="508" text-anchor="middle" font-size="10" fill="#333">Wiederk. Incidents -&gt; Problem</text>
<line x1="1472" y1="493.0" x2="1478" y2="493.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="1480" cy="493.0" r="9" fill="#f7f7f5"/>
<rect x="1480" y="456" width="112" height="74" rx="9" fill="#e7f6f6" stroke="#3FB5B5" stroke-width="2"/>
<circle cx="1592" cy="493.0" r="8" fill="#3FB5B5"/>
<circle cx="1498" cy="474" r="7" fill="none" stroke="#3FB5B5" stroke-width="1.5"/>
<text x="1536.0" y="486" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">sp_11</text>
<text x="1536.0" y="508" text-anchor="middle" font-size="10" fill="#333">RCA &amp; Workaround</text>
<path d="M 1536.0 530 V 553.0 H 256.0 V 574" fill="none" stroke="#999" stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>
<rect x="30" y="576" width="150" height="74" rx="9" fill="#8E63B5"/>
<text x="105.0" y="611.0" text-anchor="middle" font-size="17" font-weight="800" fill="#fff">REVIEW</text>
<text x="105.0" y="631.0" text-anchor="middle" font-size="12" fill="#fff">6 Tiles</text>
<circle cx="200" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="200" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="312" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="218" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="256.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_01</text>
<text x="256.0" y="628" text-anchor="middle" font-size="10" fill="#333">Taktische RCA + KPIs</text>
<line x1="320" y1="613.0" x2="326" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="328" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="328" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="440" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="346" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="384.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_02</text>
<text x="384.0" y="628" text-anchor="middle" font-size="10" fill="#333">Performance &amp; Improvement</text>
<line x1="448" y1="613.0" x2="454" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="456" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="456" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="568" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="474" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="512.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_03</text>
<text x="512.0" y="628" text-anchor="middle" font-size="10" fill="#333">SOR Periodischer Review</text>
<line x1="576" y1="613.0" x2="582" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="584" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="584" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="696" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="602" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="640.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_04</text>
<text x="640.0" y="628" text-anchor="middle" font-size="10" fill="#333">Service Improvement</text>
<line x1="704" y1="613.0" x2="710" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="712" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="712" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="824" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="730" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="768.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_05</text>
<text x="768.0" y="628" text-anchor="middle" font-size="10" fill="#333">Redesign / Erweiterung</text>
<line x1="832" y1="613.0" x2="838" y2="613.0" stroke="#666" stroke-width="2.2" marker-end="url(#ah)"/>
<circle cx="840" cy="613.0" r="9" fill="#f7f7f5"/>
<rect x="840" y="576" width="112" height="74" rx="9" fill="#f1ecf6" stroke="#8E63B5" stroke-width="2"/>
<circle cx="952" cy="613.0" r="8" fill="#8E63B5"/>
<circle cx="858" cy="594" r="7" fill="none" stroke="#8E63B5" stroke-width="1.5"/>
<text x="896.0" y="606" text-anchor="middle" font-size="15" font-weight="700" fill="#1a1a1a">rv_06</text>
<text x="896.0" y="628" text-anchor="middle" font-size="10" fill="#333">Ausserbetriebnahme</text>
<path d="M 22 373.0 C 4 373.0, 4 493.0, 22 493.0" fill="none" stroke="#d23" stroke-width="2.6" marker-end="url(#ah)" marker-start="url(#ah)"/>
<text x="2" y="433.0" font-size="11" fill="#d23" transform="rotate(-90 8 433.0)" text-anchor="middle">Betriebs-Loop</text>
<line x1="958" y1="613.0" x2="1022" y2="613.0" stroke="#8E63B5" stroke-width="2.6" marker-end="url(#ah)"/>
<text x="1030" y="607.0" font-size="12.5" font-weight="700" fill="#8E63B5">zurueck in DPM</text>
<text x="1030" y="625.0" font-size="11" fill="#666">rv_05 Redesign / rv_06 Retirement</text>
<rect x="30" y="752" width="26" height="18" rx="4" fill="#E8893B"/>
<text x="64" y="766" font-size="12.5" fill="#333">Gate-Tile (Tor mit Rollen-Steckplaetzen)</text>
<rect x="360" y="752" width="26" height="18" rx="4" fill="#e6eff8" stroke="#2F80C9" stroke-width="2"/>
<text x="394" y="766" font-size="12.5" fill="#333">Aktivitaets-Tile (mit Verankerung fuer einseitiges Plaettchen)</text>
<text x="30" y="788" font-size="12.5" fill="#555">Breiteste Phase: 12 Tiles ~ 134 cm (bei 100 mm Tiles + 12 mm Verbinder). Bahn bei Platzmangel maeandrierend faltbar.</text>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,202 @@
#!/usr/bin/env python3
"""Generiert die Board-Layout-Skizze (SVG) fuer den SLC-Workshop.
Lineares Phasen-Swimlane-Layout: jede Phase eine Zeile, Tiles links->rechts.
Exakt 40 Tiles (37 Aktivitaeten + 3 Gates). Reproduzierbar: bei Aenderungen
einfach erneut ausfuehren -> board-layout.svg.
"""
# (id, kurzname, is_gate)
PHASES = [
("DESIGN", "#2F80C9", [
("ds_01", "Eigenschaften definieren", False),
("ds_02", "Komponenten designen", False),
("ds_03", "Vorgehen beschreiben", False),
("ds_04", "Implementierung vorbereiten", False),
]),
("TRANSITION", "#E8893B", [
("tr_01", "Entw. / Konfig.?", True),
("tr_02", "Entwicklung koordinieren", False),
("tr_03", "Anwendungen entwickeln", False),
("tr_04", "Komponenten annehmen", False),
("tr_05", "Komponenten konfigurieren", False),
("tr_06", "Betriebsdoku erstellen", False),
("tr_07", "Komponenten testen", False),
("tr_08", "Formale Uebergabe", False),
("tr_09", "Entry-Pruefung", True),
("tr_10", "Ausrollen", False),
("tr_11", "Aktivierung vorbereiten", False),
("tr_12", "Go-Live-Freigabe", True),
]),
("OPERATION", "#5BAE5B", [
("op_01", "Early Life Support", False),
("op_02", "Betriebs-Leitlinien", False),
("op_03", "Laufender Betrieb", False),
("op_04", "Ressourcen & Budget", False),
("op_05", "Services ueberwachen", False),
("op_06", "Qualitaetsbericht", False),
("op_07", "Proaktive Problemerkennung", False),
]),
("SUPPORT", "#3FB5B5", [
("sp_01", "Support-Leitlinien", False),
("sp_02", "Wissensdatenbank", False),
("sp_03", "Incidents/Requests verteilen", False),
("sp_04", "Requests bearbeiten", False),
("sp_05", "Incident 1st Level", False),
("sp_06", "Incident 2nd Level", False),
("sp_07", "Record geloest", False),
("sp_08", "Schliessen", False),
("sp_09", "Problem Record anlegen", False),
("sp_10", "Wiederk. Incidents -> Problem", False),
("sp_11", "RCA & Workaround", False),
]),
("REVIEW", "#8E63B5", [
("rv_01", "Taktische RCA + KPIs", False),
("rv_02", "Performance & Improvement", False),
("rv_03", "SOR Periodischer Review", False),
("rv_04", "Service Improvement", False),
("rv_05", "Redesign / Erweiterung", False),
("rv_06", "Ausserbetriebnahme", False),
]),
]
# Layout-Parameter
TILE_W, TILE_H = 112, 74
GAP_X, GAP_Y = 16, 46
LABEL_W = 150
X0 = 30 + LABEL_W + 20
Y0 = 96
MAX_TILES = max(len(t) for _, _, t in PHASES)
WIDTH = X0 + MAX_TILES * (TILE_W + GAP_X) + 200
HEIGHT = Y0 + len(PHASES) * (TILE_H + GAP_Y) + 120
TILE_MM = 100 # ein Tile = 100x100 mm
def esc(s):
return s.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
def lighten(hexcol, f=0.85):
h = hexcol.lstrip("#")
r, g, b = int(h[0:2], 16), int(h[2:4], 16), int(h[4:6], 16)
r = int(r + (255 - r) * f)
g = int(g + (255 - g) * f)
b = int(b + (255 - b) * f)
return f"#{r:02x}{g:02x}{b:02x}"
def tile_svg(x, y, tid, name, color, is_gate):
fill = color if is_gate else lighten(color, 0.88)
stroke = color
sw = 3 if is_gate else 2
txtcol = "#ffffff" if is_gate else "#1a1a1a"
parts = []
# Puzzle-Notch links (Hintergrundfarbe), Bump rechts (Randfarbe)
parts.append(f'<circle cx="{x}" cy="{y+TILE_H/2}" r="9" fill="#f7f7f5"/>')
parts.append(f'<rect x="{x}" y="{y}" width="{TILE_W}" height="{TILE_H}" rx="9" '
f'fill="{fill}" stroke="{stroke}" stroke-width="{sw}"/>')
parts.append(f'<circle cx="{x+TILE_W}" cy="{y+TILE_H/2}" r="8" fill="{stroke}"/>')
if is_gate:
# kleiner Torbogen + GATE-Label
ax, ay = x + TILE_W/2, y + 14
parts.append(f'<path d="M {ax-12} {ay+18} V {ay+4} A 12 12 0 0 1 {ax+12} {ay+4} '
f'V {ay+18}" fill="none" stroke="#ffffff" stroke-width="3"/>')
parts.append(f'<text x="{x+TILE_W/2}" y="{y+TILE_H-22}" text-anchor="middle" '
f'font-size="14" font-weight="700" fill="{txtcol}">{esc(tid)}</text>')
parts.append(f'<text x="{x+TILE_W/2}" y="{y+TILE_H-7}" text-anchor="middle" '
f'font-size="10.5" fill="{txtcol}">{esc(name)}</text>')
else:
parts.append(f'<circle cx="{x+18}" cy="{y+18}" r="7" fill="none" '
f'stroke="{stroke}" stroke-width="1.5"/>') # Verankerung
parts.append(f'<text x="{x+TILE_W/2}" y="{y+30}" text-anchor="middle" '
f'font-size="15" font-weight="700" fill="{txtcol}">{esc(tid)}</text>')
parts.append(f'<text x="{x+TILE_W/2}" y="{y+52}" text-anchor="middle" '
f'font-size="10" fill="#333">{esc(name)}</text>')
return "\n".join(parts)
def arrow(x1, y1, x2, y2, color="#666", w=2.2):
return (f'<line x1="{x1}" y1="{y1}" x2="{x2}" y2="{y2}" stroke="{color}" '
f'stroke-width="{w}" marker-end="url(#ah)"/>')
svg = []
svg.append(f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 {WIDTH} {HEIGHT}" '
f'font-family="Arial, Helvetica, sans-serif">')
svg.append(f'<rect x="0" y="0" width="{WIDTH}" height="{HEIGHT}" fill="#f7f7f5"/>')
svg.append('<defs><marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" '
'orient="auto" markerUnits="strokeWidth">'
'<path d="M0,0 L7,3 L0,6 Z" fill="#666"/></marker></defs>')
# Titel
svg.append(f'<text x="30" y="44" font-size="26" font-weight="800" fill="#1a1a1a">'
f'Service-Lifecycle — Board-Layout (40 Tiles)</text>')
svg.append(f'<text x="30" y="68" font-size="14" fill="#555">'
f'37 Aktivitaeten + 3 Gates · 1 Tile = {TILE_MM}x{TILE_MM} mm · '
f'lineare Bahn, Sequenz links nach rechts</text>')
row_y = {}
for ri, (pname, color, tiles) in enumerate(PHASES):
y = Y0 + ri * (TILE_H + GAP_Y)
row_y[pname] = y
# Phasen-Label
svg.append(f'<rect x="30" y="{y}" width="{LABEL_W}" height="{TILE_H}" rx="9" '
f'fill="{color}"/>')
svg.append(f'<text x="{30+LABEL_W/2}" y="{y+TILE_H/2-2}" text-anchor="middle" '
f'font-size="17" font-weight="800" fill="#fff">{esc(pname)}</text>')
svg.append(f'<text x="{30+LABEL_W/2}" y="{y+TILE_H/2+18}" text-anchor="middle" '
f'font-size="12" fill="#fff">{len(tiles)} Tiles</text>')
# Tiles
prev = None
for ti, (tid, name, is_gate) in enumerate(tiles):
x = X0 + ti * (TILE_W + GAP_X)
if prev is not None:
svg.append(arrow(prev + 8, y + TILE_H/2, x - 2, y + TILE_H/2))
svg.append(tile_svg(x, y, tid, name, color, is_gate))
prev = x + TILE_W
# Connector zur naechsten Phase (von letztem Tile runter zur naechsten Zeile Start)
if ri < len(PHASES) - 1:
lastx = X0 + (len(tiles) - 1) * (TILE_W + GAP_X) + TILE_W/2
ny = y + TILE_H + GAP_Y
svg.append(f'<path d="M {lastx} {y+TILE_H} V {y+TILE_H+GAP_Y/2} '
f'H {X0+TILE_W/2} V {ny-2}" fill="none" stroke="#999" '
f'stroke-width="2.2" stroke-dasharray="5 4" marker-end="url(#ah)"/>')
# Operation <-> Support Loop (links neben den Labels)
oy = row_y["OPERATION"] + TILE_H/2
sy = row_y["SUPPORT"] + TILE_H/2
svg.append(f'<path d="M 22 {oy} C 4 {oy}, 4 {sy}, 22 {sy}" fill="none" '
f'stroke="#d23" stroke-width="2.6" marker-end="url(#ah)" marker-start="url(#ah)"/>')
svg.append(f'<text x="2" y="{(oy+sy)/2}" font-size="11" fill="#d23" '
f'transform="rotate(-90 8 {(oy+sy)/2})" text-anchor="middle">Betriebs-Loop</text>')
# Exit nach Review (DPM-Ruecklauf)
ry = row_y["REVIEW"] + TILE_H/2
rx = X0 + (len(PHASES[-1][2]) - 1) * (TILE_W + GAP_X) + TILE_W
svg.append(arrow(rx + 6, ry, rx + 70, ry, color="#8E63B5", w=2.6))
svg.append(f'<text x="{rx+78}" y="{ry-6}" font-size="12.5" font-weight="700" '
f'fill="#8E63B5">zurueck in DPM</text>')
svg.append(f'<text x="{rx+78}" y="{ry+12}" font-size="11" fill="#666">'
f'rv_05 Redesign / rv_06 Retirement</text>')
# Legende / Massstab
ly = HEIGHT - 64
svg.append(f'<rect x="30" y="{ly}" width="26" height="18" rx="4" fill="#E8893B"/>')
svg.append(f'<text x="64" y="{ly+14}" font-size="12.5" fill="#333">Gate-Tile (Tor mit Rollen-Steckplaetzen)</text>')
svg.append(f'<rect x="360" y="{ly}" width="26" height="18" rx="4" fill="{lighten("#2F80C9",0.88)}" stroke="#2F80C9" stroke-width="2"/>')
svg.append(f'<text x="394" y="{ly+14}" font-size="12.5" fill="#333">Aktivitaets-Tile (mit Verankerung fuer einseitiges Plaettchen)</text>')
# Gesamtbreite-Hinweis
total_mm = MAX_TILES * (TILE_MM + 12)
svg.append(f'<text x="30" y="{HEIGHT-28}" font-size="12.5" fill="#555">'
f'Breiteste Phase: {MAX_TILES} Tiles ~ {total_mm/10:.0f} cm '
f'(bei {TILE_MM} mm Tiles + 12 mm Verbinder). Bahn bei Platzmangel maeandrierend faltbar.</text>')
svg.append('</svg>')
out = "board-layout.svg"
with open(out, "w", encoding="utf-8") as f:
f.write("\n".join(svg))
total = sum(len(t) for _, _, t in PHASES)
gates = sum(1 for _, _, t in PHASES for _, _, g in t if g)
print(f"geschrieben: {out}")
print(f"Tiles gesamt: {total} (Aktivitaeten: {total-gates}, Gates: {gates})")

View file

@ -0,0 +1,131 @@
# Materialliste — zu druckende Elemente
Stand: 2026-05-27 · Maße in mm · Mengen für **ein** Workshop-Set.
## Standard-Schnittstelle (für alle Teile gültig)
- **Verankerung (Sockel):** zylindrische Vertiefung **Ø 50 mm, Tiefe 4 mm**, mit
0,4 mm Spielpassung. Sowohl Aktivitätsplättchen als auch der Action-Stein-Fuß
passen hinein.
- **Tile-Steckverbindung:** Puzzle-Tab **12 mm breit, 6 mm tief**, mittig je Kante.
- **Figuren-Steckplatz:** Pin-Loch **Ø 4,2 mm, Tiefe 4 mm** (für Figuren-Pin Ø 4,0 mm).
Einheitlich am **Aktiv-Feld** und an den **Gate-Toren** — jede Figur passt überall.
---
## 1. Phasen-Basistiles (lineare Bahn)
| Merkmal | Wert |
|---------|------|
| Grundfläche | 100 × 100 × 6 mm |
| Verankerung | zentriert, Ø 50 × 4 mm |
| Kanten | Puzzle-Tabs (Tab/Slot abwechselnd) |
| Farbe | je Phase (blau/orange/grün/teal/lila) |
| Menge | **40** (eine je Lifecycle-ID: 37 Aktivitäten + 3 Gate-Positionen) |
| Material | PLA, Infill 15 % |
| Druckzeit | ~1,5 h/Tile |
> Tiles bleiben bewusst **clean** (nur Verankerung + Tabs). Die Rollen-Platzierung
> übernimmt das mobile **Aktiv-Feld** (Abschnitt 4a), das neben dem Action-Stein steht.
Alle Tiles sind **gerade** und werden zu einer **linearen Bahn** aneinandergereiht
(kein Ring). Bei Platzmangel kann die Bahn mäandrierend (Zeilenumbruch) gelegt
werden — die Puzzle-Tabs erlauben auch 90°-Ecken.
## 2. Aktivitätsplättchen (einseitig)
| Merkmal | Wert |
|---------|------|
| Form | Rundscheibe Ø 49 × 4 mm (passt in Verankerung) |
| Gravur | **einseitig: ID + Kurzbezeichnung** (z. B. `op_05 — Überwachen der Services`). Rückseite leer/Phasenfarbe — Erklärung liegt in der App |
| Griff | umlaufende Fase 1 mm zum leichten Herausnehmen |
| Menge | **37** (eine je Aktivität; an den 3 Gate-Positionen steht stattdessen ein Gate-Tor) |
| Material | PLA, je Phase eingefärbt (matcht Tile) |
> Plättchen bleibt entnehmbar: beim Bearbeiten herausnehmen und den Action-Stein
> in die Verankerung stellen („wir sind hier"). Die ausführliche Auflösung kommt
> über die Companion-App, nicht über eine Rückseiten-Gravur.
> Bei zu kleiner Schrift für Gravur: glatte Scheibe drucken + bedrucktes Label aufkleben.
## 3. Action-Stein (Szenario-Träger)
| Merkmal | Wert |
|---------|------|
| Fuß | Ø 49 × 5 mm (sitzt in Verankerung) |
| Körper | Zylinder Ø 35, Höhe 30 mm |
| Kartenschlitz | Breite 74 mm, Tiefe 4 mm, Höhe 25 mm (für Karte 70 mm breit) |
| Gewichtseinlage | Aussparung für M8-Mutter im Fuß (Kippschutz) |
| Stabilitäts-Option | zusätzlicher Standring Ø 70 mm, falls Karte zu kopflastig |
| Menge | **12** |
| Material | PLA, Infill ≥ 40 % + Metalleinlage |
## 4. Gate-Tore
| Merkmal | Wert |
|---------|------|
| Form | Bogen/Tor, lichte Weite 90 mm, Höhe 100 mm, Materialstärke 8 mm |
| Standfüße | 2 × Grundplatte 30 × 60 mm, überspannt 2 Tiles |
| Rollen-Steckplätze | Lochreihe **Ø 4,2 mm** an der Basis (für Figuren-Pin), 4 Plätze, Pitch 8 mm |
| Kartenschlitz | oben quer, Breite 65 mm, Tiefe 3 mm (Gate-Beschreibungskarte) |
| Gravur | „Gate 1/2/3" + Gate-Keeper |
| Menge | **3** |
| Material | PLA, Infill 20 % |
## 4a. Aktiv-Feld (RACI-Stecklochleiste)
Mobile Leiste, die **neben dem Action-Stein** steht und mit ihm weiterwandert.
Hier werden die je Aktivität beteiligten Rollen-Figuren nach **RACI** gesteckt —
RACI wird so **pro Schritt** sichtbar, ohne die Tiles zu verändern.
| Merkmal | Wert |
|---------|------|
| Grundkörper | ~86 × 26 × 6 mm (Länge ergibt sich aus den Zonen), Ecken r3 |
| Zonen | **R** (2 Plätze) · **A** (1 Platz) · **C** (3 Plätze) · **I** (3 Plätze) |
| Steckplätze | Ø 4,2 mm, Tiefe 4 mm, Pitch 8 mm (für Figuren-Pin Ø 4,0) |
| Gravur | Zonen-Buchstaben R / A / C / I vorne, Tiefe 0,8 mm |
| Menge | **1** (ggf. 2 bei parallelen Tischen) |
| Material | PLA, Infill 20 % |
> **A = genau 1 Platz** — bildet ab, dass je Aktivität genau eine Rolle
> *Accountable* ist (RACI-Regel aus `spm_rollen.yaml`). Nicht jeder Platz muss
> belegt sein; die Leiste ist großzügig ausgelegt.
> Optional: Rastnase, damit die Leiste an den Action-Stein-Fuß andockt.
## 5. Rollen-Figuren
| Merkmal | Wert |
|---------|------|
| Form | Schlanker Pöppel, Höhe ~22 mm, **Standfuß-Pin Ø 4,0 mm × 4 mm** (passt in Aktiv-Feld & Gate-Loch Ø 4,2) |
| Standfläche | schmal (~8 mm), damit mehrere Figuren in einer Zonen-Reihe nebeneinander stehen |
| Codierung | Farbe + Formvariante je Rollenkategorie |
| Menge | siehe `../02_Spielfiguren/` (Governance, Management, Teams) |
| Material | PLA, eingefärbt |
## 6. Entscheidungs-Chips (optional 3D statt Karte)
| Merkmal | Wert |
|---------|------|
| Form | Münze Ø 30 × 4 mm, Symbolgravur |
| Varianten | Go / Go mit Auflagen / Zurück / Ablehnung |
| Menge | je 3 |
| Material | PLA |
---
## Stückliste (Kurzfassung)
| Teil | Menge | Datei |
|------|------:|-------|
| Phasen-Basistile | 40 | `openscad/aktivitaets-tile.scad` |
| Aktivitätsplättchen | 37 | `openscad/aktivitaets-plaque.scad` |
| Action-Stein | 2 | `openscad/action-stein.scad` |
| Aktiv-Feld (RACI-Leiste) | 1 | `openscad/aktiv-feld.scad` |
| Gate-Tor | 3 | `openscad/gate-tor.scad` |
| Rollen-Figuren | ~20 | (Standard-Meeple-Modell + Einfärbung) |
| Entscheidungs-Chips | 12 | (einfache Münze + Gravur) |
## Hinweise für den Producer
- Toleranzen Sockel/Plättchen an **einem Probedruck** kalibrieren (Drucker-spezifisch).
- Gravurtiefe 0,61,0 mm; bei sehr kleiner Schrift Label-Variante wählen.
- Farbtrennung über Filamentwechsel je Phase, nicht über Lackierung (abriebfest).

View file

@ -0,0 +1,33 @@
# OpenSCAD-Modelle
Parametrische Quellmodelle der Schlüsselteile. In [OpenSCAD](https://openscad.org)
öffnen, Parameter im Customizer anpassen, mit **F6** rendern und über
*Datei → Export → STL* slicebereit exportieren.
| Datei | Bauteil |
|-------|---------|
| `aktivitaets-tile.scad` | Phasen-Basistile (100×100, Verankerung Ø50, Puzzle-Tabs) |
| `aktivitaets-plaque.scad` | Beidseitiges Aktivitätsplättchen (Ø49) — Text per Variable |
| `action-stein.scad` | Szenario-Träger mit Kartenschlitz + M8-Gewichtsaussparung |
| `gate-tor.scad` | Gate-Tor mit 4 Rollen-Steckplätzen + Kartenschlitz |
## Serienfertigung der Plättchen
`aktivitaets-plaque.scad` enthält den Text als Variablen (`front_id`,
`front_name`, `back_text`). Für alle 38 Aktivitäten empfiehlt sich ein kleines
Skript, das die Werte aus den `service-lifecycle_*.yaml` liest und je Aktivität
ein STL erzeugt (z.B. via OpenSCAD-Kommandozeile `-D` Parameter-Override):
```bash
openscad -o op_05.stl \
-D 'front_id="op_05"' \
-D 'front_name="Ueberwachen der Services"' \
-D 'back_text="..."' \
aktivitaets-plaque.scad
```
## Hinweise
- Gravur-Text bewusst kurz halten; lange Kurzbeschreibungen ggf. auf Label auslagern.
- Umlaute in Gravuren je nach Font kritisch — im Zweifel `ae/oe/ue` verwenden (so in den Vorlagen).
- Vor Serienstart **ein** Tile + Plättchen + Stein als Passungs-Funktionsmuster drucken.

View file

@ -0,0 +1,42 @@
// Action-Stein: Szenario-Traeger mit aufrechtem Kartenschlitz
// SLC-Workshop Tabletop · Einheiten: mm
/* [Fuss] */
foot_d = 49; // sitzt in Verankerung (Ø50)
foot_h = 5;
stand_ring = 70; // optionaler Standring fuer Kippstabilitaet
use_ring = true;
/* [Koerper] */
body_d = 35;
body_h = 30;
/* [Kartenschlitz] */
card_w = 74; // fuer Karte 70 mm breit
card_t = 4; // Schlitzdicke
card_h = 25; // Einstecktiefe
/* [Gewichtseinlage M8] */
nut_af = 13; // Schluesselweite M8-Mutter
nut_h = 6.5;
$fn = 96;
module base() {
if (use_ring)
cylinder(d = stand_ring, h = 2);
translate([0,0,0]) cylinder(d = foot_d, h = foot_h);
}
module body() {
translate([0,0,foot_h]) cylinder(d = body_d, h = body_h);
}
difference() {
union() { base(); body(); }
// Kartenschlitz (zentriert in X, durch den Koerperkopf)
translate([-card_w/2, -card_t/2, foot_h + body_h - card_h])
cube([card_w, card_t, card_h + 1]);
// Gewichtsaussparung im Fuss (Sechskant fuer M8-Mutter)
translate([0, 0, -0.1])
cylinder(d = nut_af / cos(30), h = nut_h, $fn = 6);
}

View file

@ -0,0 +1,77 @@
// Aktiv-Feld RACI-Stecklochleiste
// SLC-Workshop Tabletop · Einheiten: mm
// Steht NEBEN dem Action-Stein. Bei jeder Aktivitaet werden die beteiligten
// Rollen-Figuren nach RACI in die passende Zone gesteckt:
// R = Responsible · A = Accountable (genau 1) · C = Consulted · I = Informed
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
/* [Leiste] */
strip_w = 26; // Tiefe (zum Spieler)
strip_h = 6; // Dicke
corner_r = 3;
/* [Steckplaetze] */
pin_hole_d = 4.2; // Loch fuer Figuren-Pin (Pin Oe 4,0 + Spiel)
pin_hole_depth = 4;
pin_pitch = 8; // Mitte-zu-Mitte innerhalb einer Zone
zone_gap = 10; // Luecke zwischen den Zonen
end_margin = 8; // Rand links/rechts
socket_y = 5; // Lochreihe nach hinten versetzt (weg von der Beschriftung)
/* [Beschriftung] */
label_size = 7; // Buchstabengroesse
label_depth = 0.8; // Gravurtiefe
label_y = -8; // Position der Buchstaben (vorne, zum Spieler)
/* [Zonen] */
// [Label, Anzahl Steckplaetze] A bewusst nur 1 (genau eine Rolle accountable)
zones = [ ["R", 2], ["A", 1], ["C", 3], ["I", 3] ];
$fn = 48;
// --- Hilfsfunktionen -------------------------------------------------------
function zone_span(c) = (c - 1) * pin_pitch;
function sumspan(i = 0) =
i >= len(zones) ? 0 : zone_span(zones[i][1]) + sumspan(i + 1);
function total_len() =
end_margin * 2 + zone_gap * (len(zones) - 1) + sumspan();
// linker Startversatz der Zone idx (Summe vorheriger Zonen + Luecken)
function zone_offset(idx, i = 0, acc = 0) =
i >= idx ? acc
: zone_offset(idx, i + 1, acc + zone_span(zones[i][1]) + zone_gap);
// --- Geometrie -------------------------------------------------------------
module rounded_rect(l, w, h, r) {
linear_extrude(h)
offset(r) offset(-r)
square([l, w], center = true);
}
module raci_strip() {
L = total_len();
difference() {
rounded_rect(L, strip_w, strip_h, corner_r);
for (idx = [0 : len(zones) - 1]) {
cnt = zones[idx][1];
sx = -L/2 + end_margin + zone_offset(idx);
// Steckplaetze der Zone
for (i = [0 : cnt - 1])
translate([sx + i * pin_pitch, socket_y, strip_h - pin_hole_depth])
cylinder(d = pin_hole_d, h = pin_hole_depth + 0.1);
// Zonen-Beschriftung (mittig unter den Loechern)
cx = sx + zone_span(cnt) / 2;
translate([cx, label_y, strip_h - label_depth])
linear_extrude(label_depth + 0.1)
text(zones[idx][0], size = label_size,
halign = "center", valign = "center");
}
}
}
raci_strip();

View file

@ -0,0 +1,48 @@
// Beidseitiges Aktivitaetsplaettchen (Rundscheibe fuer Verankerung)
// SLC-Workshop Tabletop · Einheiten: mm
// Text per Variable setzen; fuer Serie ueber Skript je Aktivitaet generieren.
/* [Scheibe] */
disc_d = 49; // Durchmesser (Verankerung 50 - Passung)
disc_h = 4; // Dicke
chamfer = 1; // Fase als Griffhilfe
/* [Gravur] */
engrave_depth = 0.8;
front_id = "op_05";
front_name = "Ueberwachen der Services";
back_text = "Laufende Ueberwachung von Verfuegbarkeit, Leistung und Qualitaet des Service.";
font = "Liberation Sans:style=Bold";
$fn = 96;
module disc_body() {
// Scheibe mit beidseitiger Fase
hull() {
cylinder(d = disc_d - 2*chamfer, h = 0.01);
translate([0,0,chamfer]) cylinder(d = disc_d, h = disc_h - 2*chamfer);
translate([0,0,disc_h-0.01]) cylinder(d = disc_d - 2*chamfer, h = 0.01);
}
}
module front_engraving() {
translate([0, 6, disc_h - engrave_depth])
linear_extrude(engrave_depth + 0.1)
text(front_id, size=7, halign="center", font=font);
translate([0, -6, disc_h - engrave_depth])
linear_extrude(engrave_depth + 0.1)
text(front_name, size=3.2, halign="center", font=font);
}
module back_engraving() {
// gespiegelt, weil Rueckseite
mirror([1,0,0])
translate([0, 0, -0.1])
linear_extrude(engrave_depth + 0.1)
text(back_text, size=2.6, halign="center", font=font);
}
difference() {
disc_body();
front_engraving();
back_engraving();
}

View file

@ -0,0 +1,52 @@
// Phasen-Basistile mit zentraler Verankerung und Puzzle-Tabs
// SLC-Workshop Tabletop · Einheiten: mm
// Anpassen und mit OpenSCAD nach STL exportieren (F6 -> Export).
/* [Tile] */
tile_size = 100; // Kantenlaenge
tile_height = 6; // Dicke
corner_r = 3; // Eckenradius
/* [Verankerung / Sockel] */
socket_d = 50; // Durchmesser Vertiefung
socket_depth = 4; // Tiefe
fit_clear = 0.4; // Spielpassung
/* [Puzzle-Tabs] */
tab_w = 12; // Breite
tab_d = 6; // Tiefe (Ueberstand / Aussparung)
tab_h = tile_height;
$fn = 64;
module rounded_square(s, r, h) {
linear_extrude(h)
offset(r) offset(-r)
square([s, s], center=true);
}
module tab(positive=true) {
// Tab ragt heraus (positive) oder wird ausgespart (negative)
d = positive ? tab_d : tab_d + fit_clear;
w = positive ? tab_w : tab_w + fit_clear;
translate([0, 0, tab_h/2])
cube([w, d*2, tab_h], center=true);
}
module tile() {
difference() {
union() {
rounded_square(tile_size, corner_r, tile_height);
// Tabs an Nord- und Ost-Kante (positive)
translate([0, tile_size/2, 0]) tab(true);
translate([ tile_size/2, 0, 0]) rotate([0,0,90]) tab(true);
}
// Verankerung
translate([0, 0, tile_height - socket_depth])
cylinder(d = socket_d + fit_clear, h = socket_depth + 0.1);
// Slots an Sued- und West-Kante (negative)
translate([0, -tile_size/2, 0]) tab(false);
translate([-tile_size/2, 0, 0]) rotate([0,0,90]) tab(false);
}
}
tile();

View file

@ -0,0 +1,70 @@
// Gate-Tor mit Rollen-Steckplaetzen und Kartenschlitz
// SLC-Workshop Tabletop · Einheiten: mm
/* [Tor] */
opening_w = 90; // lichte Weite
opening_h = 100; // lichte Hoehe
thick = 8; // Materialstaerke (Tiefe)
post_w = 12; // Pfostenbreite
top_h = 14; // Hoehe des Querbalkens
/* [Fuesse] */
foot_w = 60;
foot_d = 30;
foot_h = 4;
/* [Rollen-Steckplaetze] */
peg_d = 8.2; // Loch fuer Figuren-Pin (Ø7,5 + Passung)
peg_count = 4;
peg_depth = 6;
/* [Kartenschlitz oben] */
card_w = 65;
card_t = 3;
card_depth = 10;
$fn = 48;
total_w = opening_w + 2*post_w;
total_h = opening_h + top_h + foot_h;
module arch() {
difference() {
// Aussenkontur
translate([-total_w/2, 0, 0])
cube([total_w, thick, opening_h + top_h]);
// Oeffnung
translate([-opening_w/2, -0.1, 0])
cube([opening_w, thick + 0.2, opening_h]);
}
}
module feet() {
for (x = [-1, 1])
translate([x*(opening_w/2 + post_w/2) - foot_w/2, -(foot_d-thick)/2, 0])
cube([foot_w, foot_d, foot_h]);
}
module peg_holes() {
// Lochreihe entlang der Vorderkante der Fuesse
spacing = (opening_w + post_w) / (peg_count - 1);
for (i = [0 : peg_count - 1])
translate([-(opening_w + post_w)/2 + i*spacing, foot_d/2 - peg_d, foot_h])
rotate([180,0,0])
cylinder(d = peg_d, h = peg_depth);
}
module card_slot() {
translate([-card_w/2, thick/2 - card_t/2, opening_h + top_h - card_depth])
cube([card_w, card_t, card_depth + 0.1]);
}
// Tor inkl. Kartenschlitz
difference() {
translate([0,0,foot_h]) arch();
translate([0,0,foot_h]) card_slot();
}
// Fuesse inkl. Rollen-Steckplaetze
difference() {
feet();
peg_holes();
}

View file

@ -0,0 +1,125 @@
# Visual-Prompts für den 3D-Druck-Producer
Diese Prompts erzeugen **Orientierungs-Renderings** (kein Marketing-Bild),
die dem Producer Form, Proportion und Steckmechanik der Bauteile zeigen.
Empfohlen für Bildmodelle wie Nano Banana / Imagen. Englisch erzielt meist die
sauberste Geometrie; Beschriftungen bewusst sparsam halten.
> **Board-Layout:** linear (durchgehende Bahn), **kein Kreis**.
> **Wichtig:** die **einseitigen, entnehmbaren Aktivitätsplättchen** müssen
> sichtbar sein — einige liegen flach in der Verankerung (Code-Seite oben),
> einige sind herausgenommen und liegen daneben (Rückseite leer), sodass die
> **freie Verankerung** erkennbar ist (dort steht dann der Action-Stein).
> *(Stand v0.2-Renderings — Erklärung liegt inzwischen in der App, nicht auf der
> Rückseite; RACI-Aktiv-Feld + verschlankte Figuren sind hier noch nicht abgebildet.)*
---
## Prompt A — Bauteil-Übersicht (Exploded-Style)
```
Clean technical product render, neutral light-grey studio background, exploded
view of a set of 3D-printed tabletop game components in matte PLA. Show: a square
modular base tile (100x100mm) with puzzle-tab edges and a round centered recess;
a round single-sided insert disc that fits the recess (top face with a short
engraved code, plain back); a cylindrical game token
with a wide weighted base and a vertical card slot on top; a small upright
arch-shaped "gate" with peg holes at its base; a meeple figure with a round pin
foot. Parts floating slightly apart to show how they connect. Soft shadows,
isometric angle, high detail, dimension-focused, minimal text.
```
## Prompt B — Aktivitätsplättchen: einseitig & entnehmbar
```
Close-up technical render of round single-sided game discs in matte colored PLA,
each about 49mm diameter and 4mm thick with a chamfered edge for easy gripping.
Three discs shown: one sitting flush inside a square tile's round recess (top face
showing a short engraved activity code), one lifted out by fingers, and one lying
beside the tile with a plain blank back. The empty recess of one tile is clearly
visible (this is where the upright action token will stand). Emphasis on the
removable fit and the freed socket. Neutral grey background, soft studio light,
shallow depth of field, premium board-game component photography.
```
## Prompt C — Action-Stein im Detail
```
Close-up technical render of a single 3D-printed game token, matte white PLA.
Cylindrical body on a wide round base, with a vertical slot on top holding an
upright rectangular card. The base diameter is clearly wider than the body for
stability. The token stands inside a square tile's round recess (the same recess
that normally holds an activity disc). Quarter-section cutaway shows a hexagonal
cavity in the base for a metal weight. Neutral grey background, soft studio
lighting, isometric, emphasis on proportions and the card slot fit, no decorative
text.
```
## Prompt D — Gate-Tor mit Rollen-Steckplätzen
```
Technical product render of a small upright arch-shaped game piece in matte PLA,
like a doorway about 100mm tall with 90mm clear opening, 8mm thick. Two flat feet
at the base spanning two tiles of a straight track. A row of four small round holes
along the front base edge for inserting pin-footed figures. A thin horizontal slot
across the top of the arch holding a small reference card. A round-pin meeple figure
is inserted in one of the base holes. Neutral background, isometric, soft shadows,
focus on the peg-hole mechanism, minimal text.
```
## Prompt E — Tile-Steckmechanik (gerade Bahn)
```
Top-down and slight-angle technical render of four square modular game tiles
(matte PLA, different solid colors: blue, orange, green, teal) connected via
puzzle-tab edges into a STRAIGHT row / track. Each tile has a round recessed socket
in its center: two sockets hold flat round single-sided discs (engraved code on
top), one socket is empty showing the recess, one holds a small upright arch gate. Clean grey background, soft light, isometric, emphasis on how
tiles interlock into a straight line, minimal text.
```
## Prompt F — Komplettaufbau (Referenz für Proportionen)
```
Wide isometric technical render of a fully assembled LINEAR tabletop game on a
neutral surface: square color-coded tiles connected into a long straight track
left to right through five color zones (blue, orange, green, teal, purple); two of
the zones (green and teal) sit side by side with two curved arrows forming a small
loop between them; three upright arch gates stand on the track; small meeple figures
placed at the gates; round single-sided activity discs sit in the tile sockets with
a couple lifted out leaving empty sockets; one cylindrical token with an
upright card stands in a socket; at the right end two exit arrows lead off the board.
Matte PLA materials, soft studio lighting, clean and diagrammatic,
proportion-accurate, minimal text.
```
## Prompt G — Gesamtaufbau, 40 Einzeltiles (Tisch-Optik)
> Hinweis: Bild-KIs zählen nicht zuverlässig — die exakte Tile-Zahl ist über
> [`board-layout.svg`](board-layout.svg) garantiert. Dieser Prompt liefert die
> **Optik/Stimmung**, nicht die exakte Anzahl. Raster explizit vorgeben erhöht
> die Trefferquote.
```
Isometric high-angle photograph of a complete modular tabletop board on a large
wooden meeting table, spanning about 1.2 meters. The board is assembled from many
small individual square puzzle tiles interlocking via tab-and-slot edges; each tile
is one lifecycle step. Tiles are color-grouped into five phases laid out as fixed
grids: DESIGN (blue) 4 tiles, TRANSITION (orange) 12 tiles with three of them marked
by a small upright arch gate, OPERATION (green) 7 tiles, SUPPORT (teal) 11 tiles,
REVIEW (purple) 6 tiles. Each tile has a round recessed socket holding a flat
single-sided disc; a few discs are lifted out leaving empty sockets. Between the green and teal phases two curved arrows form a
small loop; two exit arrows leave the purple phase at the right. A cylindrical token
with an upright card stands in a socket at the start. A coffee mug and notebook give
scale. Soft daylight, matte PLA surfaces, clean modern design, large phase labels
only, minimal small text.
```
---
### Hinweise zum Einsatz
- Prompts AD sind **Bauteil-Referenzen** (für Fertigung), Prompt E zeigt die **Steckmechanik**, Prompt F den **Gesamtaufbau** (lineare Bahn).
- **Prompt B** zeigt die einseitigen, entnehmbaren Plättchen und die freigelegte Verankerung (dort steht der Action-Stein).
- Verbindliche Maße stehen in [`materialliste.md`](materialliste.md) und in den OpenSCAD-Modellen — die Bilder dienen nur der Orientierung, nicht als Maßvorlage.
- Bei unsauberer Geometrie: Anzahl beschriebener Teile pro Prompt reduzieren.

View file

@ -0,0 +1,82 @@
# Spielfiguren — Rollen
Die Figuren bilden die Rollen aus dem Service-Lifecycle ab. Quelle:
[`spm_rollen.yaml`](../../../%2302_service-portfolio-management/02.1_spm_konzepte/02_spm_service-lifecycle-blueprint/spm_rollen.yaml) (v1.1).
Jede Figur ist ein schlanker Pöppel mit **Pin-Fuß Ø 4,0 mm**, der in die
einheitlichen Steckplätze (Ø 4,2 mm) von **Aktiv-Feld und Gate-Toren** passt.
Codierung über **Farbe** (Kategorie) und optional **Formvariante**.
> **Platzierung (v0.3):** Figuren werden nicht nur an Gates gesteckt, sondern bei
> **jeder Aktivität** in das mobile **Aktiv-Feld** neben dem Action-Stein — in die
> passende **RACI-Zone (R/A/C/I)**. So wird pro Schritt sichtbar, *wer* in *welcher
> Verantwortung* agiert. Deshalb: schlanke Figuren (Standfläche ≤ 8 mm), damit
> mehrere in einer Zonen-Reihe (Pitch 8 mm) nebeneinander passen.
> Aktiv-Feld-Maße: [`../01_3D-Druck/openscad/aktiv-feld.scad`](../01_3D-Druck/openscad/aktiv-feld.scad).
> **Design-Varianten je Rolle:** konkrete Figuren-Entwürfe (3 Stil-Tracks +
> Bild-KI-Prompts) für alle 16 Rollen in [`figuren-varianten.md`](figuren-varianten.md).
> **Ausgearbeitetes Set B** (stilisierte Minifiguren, einheitlicher runder Sockel):
> [`figuren-set-b_minifiguren.md`](figuren-set-b_minifiguren.md).
## Rollen & Codierung
### Governance (Entscheider) — Gold/Gelb
| Figur | Kürzel | Rolle |
|-------|--------|-------|
| Service-Portfolio-Manager | SPM | strategische Portfolio-Steuerung |
| Service Owner | SO | End-to-End-Verantwortung je Service |
| Service Operations Runde | SOR | Gremium (Freigaben, Betriebsreife) |
> **SOR ist ein Gremium**, kein Einzelner. Praktisch wird die SOR durch ihre
> ständigen Mitglieder am Tor repräsentiert: **SPM + SO + AL B&C + AL App**.
> Optional eine eigene „SOR"-Sammelfigur als Marker.
### Management (operative Führung) — Blau
| Figur | Kürzel |
|-------|--------|
| Abteilungsleitung Basis & Cloud | AL B&C |
| Abteilungsleitung Applikationen | AL App |
| Support Manager | Sup Mgr |
| Problem Manager | Prob Mgr |
| Projektleitung | PL |
### Teams (Sammelfiguren) — Grün
| Figur | Kürzel |
|-------|--------|
| Betriebsteam | Betrieb |
| Service-Support Team | Support |
| Projektteam | Projekt |
### Operative Einzelrollen — Grau (optional, für Detailtiefe)
Queue Koordinator, 1st Level Agent, 2nd Level Agent, Testmanagement, Architektur.
### Externe — Weiß
Lieferant / Hersteller / Entwickler.
## Gate-Zuordnung (wer muss zusammenkommen)
| Gate | ID | Gate-Keeper | Pflicht-Figuren am Tor |
|------|----|-------------|------------------------|
| Gate 1 | tr_01 | SOR | SPM + SO + AL B&C + AL App |
| Gate 2 | tr_09 | SO | SO |
| Gate 3 | tr_12 | SOR | SPM + SO + AL B&C + AL App |
**Regel:** Ein Gate „öffnet" erst, wenn alle Pflicht-Figuren in seinen
Steckplätzen stehen. Fehlt eine Rolle, kann nicht entschieden werden — das macht
die Governance-Anforderung körperlich erfahrbar.
## Phasen-Beteiligung (für Embodiment-Modus)
Aus `lifecycle_relevanz` der Rollen-YAML — wer in welcher Phase „sprechen" muss:
- **Design:** SPM, SO, PL, Projektteam, Architektur, Testmanagement, Lieferant
- **Transition:** SPM, SOR, SO, AL B&C, AL App, Sup Mgr, PL, Projekt-/Betriebsteam, Lieferant
- **Operation:** SO, AL B&C, AL App, Betriebsteam
- **Support:** SO, Sup Mgr, Prob Mgr, Support-Team, Queue Koord, L1, L2, Lieferant
- **Review:** SPM, SOR, SO, Prob Mgr
## Mengen (ein Set)
Je Pflicht-/Hauptrolle 1 Figur; Teams je 1; operative Rollen optional. Richtwert
**~20 Figuren**. Für größere Gruppen Governance-/SOR-Figuren ggf. doppeln.

View file

@ -0,0 +1,176 @@
# Figuren-Set B — Stilisierte Minifiguren (runder Sockel)
Track-B-Umsetzung für **alle 16 Rollen**: charaktervolle, brettspieltypische
Minifiguren — alle auf dem **gleichen schlanken runden Sockel**, damit sie in
dieselben Steckplätze (Tile-Reihe **und** Gate, Ø 4,2 mm) passen und als
geschlossenes Set wirken.
> **Wichtig (v0.3):** Da bei jeder Aktivität mehrere Figuren in einer Zonen-Reihe
> des **Aktiv-Felds** (neben dem Action-Stein) stehen (Pitch **8 mm**), muss der
> Sockel **schlank** sein (Ø ≤ 8 mm) und der Pin **Ø 4,0 mm**. Kein breiter
> Diorama-Sockel — sonst kollidieren Nachbarfiguren.
Rollenquelle: [`spm_rollen.yaml`](../../../%2302_service-portfolio-management/02.1_spm_konzepte/02_spm_service-lifecycle-blueprint/spm_rollen.yaml) (v1.1).
---
## Style-Bible (gilt für ALLE 16 Figuren — vor jeden Prompt setzen)
> `Stylized board-game miniature character in matte PLA, chunky friendly proportions
> (large head, simplified body, no thin fragile parts), standing on an identical
> small ROUND disc base ~8mm diameter with a centered round pin foot Ø4mm
> underneath. Figure height ~22mm including base. Clean technical product render,
> neutral light-grey studio background, soft studio light, isometric, high detail,
> tiny role abbreviation engraved on the back of the base.`
**Damit das Set zusammenpasst:**
- **Identischer schlanker Rundsockel** für jede Figur (Ø ~8 mm, gleiche Höhe, Pin Ø 4 mm) — passt in Tile-Reihe und Gate.
- Gleiche **Proportionen** (großer Kopf, gedrungener Körper) — variiert wird nur Pose + Attribut.
- **Farbe = Kategorie:** Governance Gold/Gelb · Management Blau · Teams Grün · Operative Grau · Externe Weiß.
- Attribut/Requisit darf in Kontrastton abgesetzt sein.
- Keine dünnen, bruchgefährdeten Teile (druck- & spielfest).
> **Ausnahme Sammelfiguren (SOR, Teams):** Diese dürfen einen breiteren Sockel
> haben (Diorama/Trio). Sie stehen dann **neben** dem Aktiv-Feld bzw. überspannen
> 2 Steckplätze einer Zone — nicht einzeln in der schmalen 8-mm-Reihe.
> Einzelrollen bleiben beim schlanken Ø-8-mm-Sockel.
---
# GOVERNANCE — Gold/Gelb
### SPM — Service-Portfolio-Manager
Strategischer Steuermann des ganzen Portfolios.
```
gold matte miniature character, confident standing pose, wearing a small pointed crown, holding up a fanned spread of three tiny service tiles in one hand, the other hand resting on a small ship's-wheel/compass, "SPM" engraved on the round base rim.
```
### SO — Service Owner
Hütet einen einzelnen Service end-to-end.
```
gold matte miniature character, protective stance cradling a single glowing round service orb with a tiny name-plate against its chest, a key pendant hanging at the neck, "SO" engraved on the round base rim.
```
### SOR — Service Operations Runde *(Gremium)*
Marker-Figur: das Entscheider-Gremium.
```
gold matte miniature marker on the same round disc base: a miniature round council table with four tiny stylized seats around it and a small judge's gavel standing upright in the center, "SOR" engraved on the round base rim.
```
---
# MANAGEMENT — Blau
### AL B&C — Abteilungsleitung Basis & Cloud
Infrastruktur: Netze, Server, Cloud.
```
blue matte miniature character, sturdy pose, torso stylized as a small ribbed server rack, a little cloud floating just above the head, holding a server module under one arm, "AL B&C" engraved on the round base rim.
```
### AL App — Abteilungsleitung Applikationen
Anwendungen, Fachverfahren.
```
blue matte miniature character, holding an upright glowing application window panel with a title bar and three dots, a small "</>" badge on the chest, "AL App" engraved on the round base rim.
```
### Sup Mgr — Support Manager
Organisiert & sichert den Support.
```
blue matte miniature character wearing a headset with a boom mic, holding a clipboard with a checkmark, organizing/directing pose, "Sup Mgr" engraved on the round base rim.
```
### Prob Mgr — Problem Manager
Root-Cause-Jäger.
```
blue matte miniature character in a detective pose holding an oversized magnifying glass up near its face, a small root/branch pattern at its feet, "Prob Mgr" engraved on the round base rim.
```
### PL — Projektleitung
Taktgeber des Projekts.
```
blue matte miniature character wearing a hard hat, holding a clipboard with a Gantt-bar chart, raising a small pennant baton in the other hand, "PL" engraved on the round base rim.
```
---
# TEAMS (Sammelfiguren) — Grün
*Als „mehrere Personen" lesbar — Trio auf einem gemeinsamen runden Sockel.*
### Betrieb — Betriebsteam
Laufender Betrieb, Monitoring, Deployment.
```
green matte miniature: three chunky figures grouped together on one shared round disc base, a gear and a heartbeat monitor line motif between them, busy working pose, "Betrieb" engraved on the round base rim.
```
### Support — Service-Support Team
1st/2nd-Level, Nutzeranfragen.
```
green matte miniature: three chunky figures grouped on one shared round disc base, each wearing a small headset, a speech bubble above the group, "Support" engraved on the round base rim.
```
### Projekt — Projektteam
Entwicklung, Test, Doku, Übergabe.
```
green matte miniature: three chunky figures grouped on one shared round disc base, leaning over a rolled-out blueprint with a wrench beside them, "Projekt" engraved on the round base rim.
```
---
# OPERATIVE EINZELROLLEN — Grau
### Queue Koord — Queue Koordinator
Ticket-Lotse.
```
grey matte miniature character in a traffic-controller pose holding a signal paddle, branching routing arrows on the round base surface, "Queue" engraved on the round base rim.
```
### L1 — 1st Level Agent
Erste Anlaufstelle.
```
grey matte miniature character, slim friendly pose wearing a headset, a large number "1" on its chest, "L1" engraved on the round base rim.
```
### L2 — 2nd Level Agent
Tiefe Analyse.
```
grey matte miniature character wearing a headset, holding a screwdriver, a large number "2" on its chest, leaning over an opened device, "L2" engraved on the round base rim.
```
### Test Mgmt — Testmanagement
Prüft Betriebsreife.
```
grey matte miniature character holding a shield with a large checkmark, a small test tube at the belt, inspecting pose, "Test" engraved on the round base rim.
```
### Arch — Architektur
Standards & Zielarchitektur.
```
grey matte miniature character holding an open drafting compass over a small blueprint, a ruler in the other hand, "Arch" engraved on the round base rim.
```
---
# EXTERNE — Weiß
### Lieferant — Lieferant / Hersteller / Entwickler
Liefert externe Komponenten.
```
white matte miniature character carrying a shipping crate on one shoulder, a small delivery label, friendly delivering pose, "Lieferant" engraved on the round base rim.
```
---
## Set-Render (alle Figuren zusammen)
Für ein Übersichtsbild des kompletten Sets:
```
Group product render of a complete set of stylized matte PLA board-game miniatures,
all standing on identical round disc bases, arranged in rows by color category:
gold (governance) front row, blue (management), green (team trios), grey (operatives),
white (external) — consistent chunky proportions and base, neutral grey background,
soft studio light, isometric, cohesive collectible set look, minimal engraved labels.
```
## Hinweise
- Attribute (Krone, Lupe, Headset, Kiste) ggf. als separate Aufsteck-/Anbauteile drucken → weniger Stützstruktur, mischbar.
- Identischer Sockel ist hier das verbindende Element — bei der Modellierung als **gemeinsames Basis-Modul** anlegen und die Figuren darauf setzen.
- Verbindliche Maße: [`materialliste.md`](../01_3D-Druck/materialliste.md) und die OpenSCAD-Modelle. Diese Prompts sind Konzept-/Orientierungsbilder, keine Maßvorlage.

View file

@ -0,0 +1,225 @@
# Figuren-Varianten — alle 16 Rollen
Designvorschläge für die Rollen-Figuren des SLC-Workshops. Für **jede Rolle** drei
Stil-Varianten plus ein fertiger Bild-KI-Prompt (Englisch, für Nano Banana / Imagen).
Rollenquelle: [`spm_rollen.yaml`](../../../%2302_service-portfolio-management/02.1_spm_konzepte/02_spm_service-lifecycle-blueprint/spm_rollen.yaml) (v1.1).
## Die drei Stil-Tracks (gelten für jede Rolle)
| Track | Idee | Druck/Aufwand |
|-------|------|---------------|
| **A — Meeple + Attribut** | Klassische Meeple-Grundform, oben ein rollentypisches Attribut aufgesetzt. Konsistent zur bestehenden Mechanik. | einfach |
| **B — Charakter-Mini** | Stilisierte Spielfigur mit Pose & Requisit, Brettspiel-Optik. | mittel/aufwendig |
| **C — Totem / Symbol** | Abstrakter geometrischer Turm mit graviertem Rollen-Symbol. Edel, robust, gut steckbar. | einfach |
**Gemeinsame Constraints (in jedem Track):**
- Pin-Fuß **Ø 4,0 mm** (passt in einheitliche Steckplätze Ø 4,2 mm — Tile-Reihe & Gate)
- Schlanker Sockel **Ø ≤ 8 mm**, damit mehrere Figuren in einer Aktiv-Feld-Zone (Pitch 8 mm) nebeneinander stehen
- Höhe ~22 mm, matte PLA
- **Farbe = Kategorie** (siehe unten), Attribut/Gravur in Kontrastton möglich
- Kürzel klein an Sockel oder Brust graviert
**Farbcodierung (Kategorie):** Governance = Gold/Gelb · Management = Blau · Teams = Grün · Operative Einzelrollen = Grau · Externe = Weiß
**Gemeinsamer Bild-KI-Stil-Vorspann (vor jeden Prompt setzbar):**
> `Clean technical product render, matte PLA tabletop game figure, single piece on neutral light-grey studio background, soft studio light, isometric, round pin foot at base, height ~40mm, minimal engraved label, high detail.`
---
# GOVERNANCE — Gold/Gelb
## SPM — Service-Portfolio-Manager
Steuert das gesamte Portfolio, strategisch. **Signatur: Krone + aufgefächerte Service-Plättchen** (das ganze Portfolio in der Hand).
- **A:** Meeple mit kleiner Zacken-Krone, vor der Brust ein Fächer aus 3 Mini-Tiles.
- **B:** Stehende Figur, ein Arm hält einen Fächer aus Service-Karten, anderer auf einem Steuerrad/Kompass.
- **C:** Goldener Turm, Spitze als Krone, Schaft mit graviertem Fächer-Symbol „SPM".
```
matte gold PLA game figure: a regal meeple wearing a small pointed crown, holding a fanned-out spread of three tiny service tiles against its chest, a small steering-compass at its side, "SPM" engraved on the base, round pin foot.
```
## SO — Service Owner
End-to-End-Verantwortung für **einen** Service. **Signatur: schützend gehaltener Service-Orb + Schlüssel** (Ownership).
- **A:** Meeple, beide Arme umschließen eine Kugel mit Namensschild; Schlüssel am Hals.
- **B:** Figur, die eine leuchtende Service-Kugel wie einen Schatz hält, Schlüssel-Anhänger.
- **C:** Goldturm mit zentraler Kugel-Einfassung und graviertem Schlüssel „SO".
```
matte gold PLA game figure: a meeple cradling a single round service orb with a tiny name-plate against its body, a key pendant on its chest, protective stance, "SO" engraved on base, round pin foot.
```
## SOR — Service Operations Runde *(Gremium, kein Einzelner)*
Bewertet & entscheidet im Gremium. **Signatur: runder Tisch / Ring mit 4 Sitzen + Richterhammer.**
- **A:** Sammel-Marker: runde Scheibe mit 4 kleinen Steck-Pins (für SPM+SO+AL B&C+AL App), Hammer-Aufsatz mittig.
- **B:** Mini-Diorama: vier winzige Köpfe um einen Ring-Tisch, Gavel in der Mitte.
- **C:** Breiter Goldturm mit Ring-Krone und 4 Kerben, graviertes „SOR" + Hammer.
```
matte gold PLA game marker: a round table disc with four small empty peg sockets evenly spaced around its rim and a small judge's gavel standing in the center, "SOR" engraved on the rim, broad stable round base with pin foot.
```
---
# MANAGEMENT — Blau
## AL B&C — Abteilungsleitung Basis & Cloud
Infrastruktur-Betrieb (Netze, Server, Cloud). **Signatur: Server-Rack-Körper + Wolke obenauf.**
- **A:** Meeple, dessen Rumpf als kleines Server-Rack gerillt ist, kleine Wolke als „Hut".
- **B:** Figur mit Helm, hält ein Server-Modul, Cloud-Symbol auf der Schulter.
- **C:** Blauer Turm aus gestapelten Rack-Einschüben, Spitze als Wolke, „AL B&C".
```
matte blue PLA game figure: a manager meeple whose torso is shaped like a small ribbed server rack, a little cloud sitting on top like a hat, holding a server module, "AL B&C" engraved on base, round pin foot.
```
## AL App — Abteilungsleitung Applikationen
Anwendungs-Betrieb (Fachverfahren, SAP). **Signatur: App-Fenster-Panel + Code-Brackets `</>`.**
- **A:** Meeple, vor der Brust ein App-Fenster-Tile mit Titelleisten-Punkten.
- **B:** Figur mit Helm, hält ein schwebendes Anwendungsfenster, `</>` graviert.
- **C:** Blauer Turm, Front als App-Fenster mit Titelbalken, „AL App".
```
matte blue PLA game figure: a manager meeple holding an upright application-window panel with a title-bar and three dots, small "</>" engraved on its chest, "AL App" on base, round pin foot.
```
## Sup Mgr — Support Manager
Organisiert & sichert Qualität des Supports. **Signatur: Headset + Klemmbrett/Checkliste.**
- **A:** Meeple mit Headset, hält ein Klemmbrett mit Häkchen.
- **B:** Figur mit Headset und Mikrofon-Arm, Klemmbrett in der Hand, dirigierende Pose.
- **C:** Blauer Turm mit Headset-Bügel als Krone, graviertes Häkchen, „Sup Mgr".
```
matte blue PLA game figure: a meeple wearing a headset with a boom mic, holding a clipboard with a checkmark, organizing pose, "Sup Mgr" engraved on base, round pin foot.
```
## Prob Mgr — Problem Manager
Root-Cause-Analyse, strukturelle Störungen. **Signatur: überdimensionierte Lupe + Wurzel-Symbol.**
- **A:** Meeple, hält eine große Lupe; an der Basis ein eingraviertes Wurzelgeflecht.
- **B:** Detektiv-Pose mit Lupe vor dem „Auge", kleines Wurzel/Baum-Symbol am Sockel.
- **C:** Blauer Turm mit Lupen-Kopf, Schaft mit gravierten Verzweigungen (Root-Cause), „Prob Mgr".
```
matte blue PLA game figure: a detective-like meeple holding an oversized magnifying glass up to its face, a small root/branch pattern engraved at the base, "Prob Mgr" engraved, round pin foot.
```
## PL — Projektleitung
Plant & steuert Entwicklungsprojekte. **Signatur: Klemmbrett mit Gantt + Dirigentenstab/Wimpel.**
- **A:** Meeple mit Bauhelm, hält Klemmbrett mit Balkenplan; kleiner Stab.
- **B:** Figur mit Helm, eine Hand am Klemmbrett, andere hebt einen Wimpel/Stab (Taktgeber).
- **C:** Blauer Turm, Spitze als Wimpel, Front mit graviertem Balkenplan, „PL".
```
matte blue PLA game figure: a meeple wearing a hard hat, holding a clipboard with a Gantt-bar chart, raising a small pennant baton in the other hand, "PL" engraved on base, round pin foot.
```
---
# TEAMS (Sammelfiguren) — Grün
*Sollen als „mehrere Personen" lesbar sein — breitere Basis, Trio-Anmutung.*
## Betrieb — Betriebsteam
Laufender Betrieb, Monitoring, Deployment. **Signatur: Trio-Block + Zahnrad & Herzschlag-Linie.**
- **A:** Drei verschmolzene Meeple-Köpfe auf breiter Basis, Zahnrad-Aufsatz.
- **B:** Drei kleine Figuren um einen Monitor mit Herzschlag-Kurve.
- **C:** Grüner Breitturm mit 3 Kerben oben, graviertes Zahnrad + EKG-Linie, „Betrieb".
```
matte green PLA team figure: three meeple heads merged on one wide base, a gear and a heartbeat monitor line engraved across the front, "Betrieb" engraved, broad stable base with round pin foot.
```
## Support — Service-Support Team
1st/2nd-Level, Nutzeranfragen. **Signatur: Trio mit Headsets + Sprechblase.**
- **A:** Drei verbundene Köpfe, jeder mit Mini-Headset; Sprechblase als Aufsatz.
- **B:** Drei Figuren an einer Theke, Sprechblasen darüber.
- **C:** Grüner Breitturm, Sprechblasen-Krone, gravierte Headsets, „Support".
```
matte green PLA team figure: three connected meeple heads each wearing a tiny headset, a speech bubble on top, "Support" engraved on the wide base, round pin foot.
```
## Projekt — Projektteam
Entwicklung, Test, Doku, Übergabe. **Signatur: Trio + Blaupause-Rolle & Schraubenschlüssel.**
- **A:** Drei Köpfe auf Basis, eine Blaupausen-Rolle und ein Schraubenschlüssel gekreuzt.
- **B:** Drei Figuren über einem ausgerollten Bauplan gebeugt.
- **C:** Grüner Breitturm mit gravierten gekreuzten Werkzeugen + Plan, „Projekt".
```
matte green PLA team figure: three merged meeple heads on a wide base, a rolled blueprint and a wrench crossed in front, "Projekt" engraved, round pin foot.
```
---
# OPERATIVE EINZELROLLEN — Grau *(optional, für Detailtiefe)*
## Queue Koord — Queue Koordinator
Ticket-Routing, Priorisierung, SLA. **Signatur: Signal-Paddel + verzweigende Pfeile.**
- **A:** Meeple mit Lotsen-Paddel, an der Basis abzweigende Pfeile.
- **B:** Verkehrslotsen-Pose mit zwei Paddeln, Routing-Pfeile am Boden.
- **C:** Grauer Turm mit Pfeil-Verzweigung graviert, „Queue".
```
matte grey PLA game figure: a meeple holding a traffic-control paddle, branching routing arrows engraved at the base, "Queue" engraved, round pin foot.
```
## L1 — 1st Level Agent
Erste Anlaufstelle, Standardfälle. **Signatur: Headset + großes „1".**
- **A:** Schlanker Meeple mit Headset, „1"-Badge an der Brust.
- **B:** Figur am Empfangstresen mit Headset, „1" über dem Kopf.
- **C:** Grauer Turm, Headset-Bügel, große gravierte „1".
```
matte grey PLA game figure: a slim meeple wearing a headset, a large number "1" engraved on its chest, "L1" on base, round pin foot.
```
## L2 — 2nd Level Agent
Komplexe Störungen, tiefe Analyse. **Signatur: Headset + Werkzeug + großes „2".**
- **A:** Meeple mit Headset, hält Schraubendreher, „2"-Badge.
- **B:** Figur mit Headset über aufgeklapptem Gerät gebeugt, „2".
- **C:** Grauer Turm, Headset + graviertes Werkzeug, große „2".
```
matte grey PLA game figure: a meeple wearing a headset and holding a screwdriver, a large number "2" engraved on its chest, "L2" on base, round pin foot.
```
## Test Mgmt — Testmanagement
Plant & verantwortet Tests, Betriebsreife. **Signatur: Häkchen-Schild + Reagenzglas.**
- **A:** Meeple, hält ein Schild mit großem Häkchen, Reagenzglas am Gürtel.
- **B:** Figur mit Prüf-Klemmbrett, hebt ein Reagenzglas prüfend.
- **C:** Grauer Turm mit graviertem Häkchen-im-Kreis + Glaskolben, „Test".
```
matte grey PLA game figure: a meeple holding a shield with a large checkmark and a small test tube at its belt, "Test" engraved on base, round pin foot.
```
## Arch — Architektur
Standards, Zielarchitektur, Risiken. **Signatur: Zirkel + Blaupause.**
- **A:** Meeple, hält einen geöffneten Zirkel über einer Mini-Blaupause.
- **B:** Figur am Stehpult mit Bauplan, Zirkel und Lineal in der Hand.
- **C:** Grauer Turm, Spitze als Zirkel, Front mit graviertem Grundriss-Raster, „Arch".
```
matte grey PLA game figure: a meeple holding an open drafting compass over a small blueprint, a ruler in the other hand, "Arch" engraved on base, round pin foot.
```
---
# EXTERNE — Weiß
## Lieferant — Lieferant / Hersteller / Entwickler
Liefert externe Komponenten/Anpassungen. **Signatur: Paket/Kiste auf der Schulter.**
- **A:** Meeple, trägt eine Versandkiste auf der Schulter; Klebeband-Gravur.
- **B:** Lieferanten-Pose mit Kiste vor dem Bauch, kleines Etikett.
- **C:** Weißer Turm in Kisten-Optik (Versand-Markierungen graviert), „Lieferant".
```
matte white PLA game figure: a meeple carrying a shipping crate on its shoulder, packaging tape lines engraved, a small label, "Lieferant" engraved on base, round pin foot.
```
---
## Hinweise zum Einsatz
- **Konsistenz-Tipp:** Für ein stimmiges Set einen Track durchziehen (z. B. alles Track A) und nur Governance optional als Track B aufwerten, damit die Entscheider-Figuren hervorstechen.
- **Gate-Lesbarkeit:** Die vier SOR-Pflichtrollen (SPM, SO, AL B&C, AL App) sollten am auffälligsten sein — sie müssen an den Gates zwingend zusammenkommen.
- **Druck:** Attribute (Krone, Lupe, Headset) als separate Aufsteck-Teile drucken senkt die Stützstruktur-Last und erlaubt Mischen.
- Verbindliche Maße über [`materialliste.md`](../01_3D-Druck/materialliste.md) und die OpenSCAD-Modelle; diese Prompts sind Konzept-/Orientierungsbilder, keine Maßvorlage.

View file

@ -0,0 +1,83 @@
# Karten & Chips
Alle bedruckten Spielkarten und die Entscheidungs-Chips. Layout im
Freiburg-digital-Look (rot/weiß, Wappen-Logo) analog zur bestehenden Action Card.
## Kartenformate
| Kartentyp | Format | Hinweis |
|-----------|--------|---------|
| Action Cards | 70 × 120 mm (Tarot) | passt in Action-Stein-Schlitz (74 mm) |
| Störungskarten | 70 × 120 mm | gleiches Format, anderer Akzent |
| Artefaktkarten | 63 × 88 mm (Bridge) | werden bei Aktivitäten mitgeführt |
| Gate-Beschreibungskarten | 60 × 90 mm | stecken im Gate-Tor-Schlitz (65 mm) |
| Entscheidungs-Chips | Ø 30 mm | Karte oder 3D-Münze |
---
## 1. Action Cards (Szenario-Deck)
Triggern eine Lifecycle-Runde. Aufbau: **Banner „ACTION CARD" · Icon · Titel ·
Szenariotext · Leitfrage · Logo**. Beispiel (vorhanden):
> **Strategiewechsel** — „Das Ticketsystem muss kurzfristig an die neue
> Servicestrategie der Stadt angepasst werden. Was passiert an welchen Stellen?"
Weitere Szenario-Vorschläge:
- **Neues Fachverfahren** — ein neuer Service soll von Grund auf entstehen (voller Build-Pfad).
- **Standardsoftware-Rollout** — Konfiguration statt Entwicklung (Gate-1-Pfad „Konfiguration").
- **Major Incident** — wiederkehrende Störung eskaliert (Support→Problem→Review).
- **Außerbetriebnahme** — ein Altservice soll abgelöst werden (Pfad Richtung rv_06).
- **Sicherheits-Update** — kurzfristige Änderung im Betrieb mit Re-Transition.
## 2. Störungskarten (Ereignis-Deck)
Gegenstück zu Action Cards: werfen den Service in die **Operation↔Support-Schleife**
oder über ein Gate zurück. Beispiele:
- **Incident-Welle** → Support-Schleife sp_03sp_08.
- **Strukturelles Problem** → sp_09/sp_10 + Problem Manager.
- **Sicherheitsvorfall** → Re-Transition (zurück über Gate).
- **Budgetkürzung** → Review-Entscheidung erzwungen.
- **Lieferant fällt aus** → Build/Support verzögert.
## 3. Artefaktkarten (Ergebnisse)
Wird an einer Aktivität ein Artefakt erzeugt, kommt die Karte ins Spiel und wird
mitgeführt. Mapping:
| Artefakt | entsteht bei |
|----------|--------------|
| Projektauftrag | Eingang aus DPM → ds_01 |
| Service-Definition / Steckbrief | ds_01 |
| Betriebsdokumentation | tr_06 |
| Test-Report | tr_07 |
| Service-Qualitätsbericht | op_06 |
| Incident Record | sp_05sp_07 |
| Problem Record | sp_09 / sp_10 |
| Workaround | sp_11 |
| Service-Review-Bericht | rv_02 / rv_03 |
## 4. Gate-Beschreibungskarten
Eine Karte je Gate, steckt im Tor-Schlitz: Gate-Nummer, Gate-Keeper,
Pflicht-Rollen, Entscheidungspfade.
| Gate | Keeper | Pfade |
|------|--------|-------|
| Gate 1 (tr_01) | SOR | Entwicklung (tr_02) / Konfiguration (tr_05) |
| Gate 2 (tr_09) | SO | Go / Go mit Auflagen / Zurück / Ablehnung |
| Gate 3 (tr_12) | SOR | Go-Live / mit Auflagen / Zurück / Ablehnung |
## 5. Entscheidungs-Chips
Vier Typen, an Gates gelegt: **Go · Go mit Auflagen · Zurück · Ablehnung**.
Als Karte (Ø 30 mm Stanzung) oder als 3D-Münze (siehe Materialliste).
---
## Druck-Pipeline (Hinweis)
Karteninhalte lassen sich aus den `service-lifecycle_*.yaml` und `spm_rollen.yaml`
generieren (eine Quelle, kein Doppeln). Empfehlung: ein Template (HTML→PDF im
Freiburg-Layout), das die YAML-Felder einsetzt — analog zur bestehenden
Action-Card-Gestaltung. Umsetzung offen / späterer Schritt.

101
04_Tablet-Quiz/README.md Normal file
View file

@ -0,0 +1,101 @@
# Tablet-Quiz — Begleit-App (Teilprojekt)
**Status:** Konzept · **Typ:** eigenständiges Software-Teilprojekt des SLC-Workshops
Das Tablet-Quiz ist der **digitale Begleiter** des Tabletops — kein Ersatz fürs
Brett. Es ist der **erklärende Gegenpart** zu den Plättchen und **ersetzt deren
Rückseite**: Die Plättchen tragen nur noch die Kurzbezeichnung, die ausführliche
Erklärung liefert die App. Sie **führt die Stationsreihenfolge** (linearer
Lifecycle), stellt pro Station ein **vermittelndes Quiz**, gibt danach die
**ausführliche Auflösung** und protokolliert Verständnislücken fürs Debrief.
---
## 1. Ziel & Rolle im Spiel
- **Stationsführung:** schaltet Station für Station automatisch weiter („Nächste Station") — die Plättchen brauchen keinen Code.
- **Active Recall verstärken:** erst Diskussion am Board, dann vermittelndes Quiz, dann Auflösung — Gruppe rät, App bestätigt/korrigiert.
- **Vollständige Erklärung:** liefert nach dem Quiz die ausführliche Auflösung (ersetzt die Plättchenrückseite) aus dem Blueprint (Single Source of Truth).
- **Dokumentation:** erfasst automatisch, welche Aktivitäten unklar waren (→ `../05_Workshop-Dokumentation/`).
Bewusst **nicht** das Ziel: das Spiel digital ersetzen, Echtzeit-Multiplayer,
Accounts/Login, Cloud-Pflicht.
## 2. Datengrundlage (keine Doppelpflege)
Die App liest ausschließlich die bestehenden Blueprint-Dateien und leitet
Fragen daraus ab:
| Quelle | liefert |
|--------|---------|
| `service-lifecycle_*.yaml` | Aktivitäten, Beschreibungen, Reihenfolge, Gates |
| `spm_rollen.yaml` | Rollen, RACI, Gate-Keeper |
Ein Build-Schritt konvertiert die YAMLs in ein statisches `questions.json`.
Damit bleibt der Blueprint die einzige Wahrheit; Inhalte werden nie im App-Code
dupliziert.
## 3. Fragetypen
1. **Reihenfolge:** „Was kommt nach `tr_08`?"
2. **Rolle / RACI:** „Wer ist *Accountable* für `op_06`?"
3. **Artefakt:** „Welches Artefakt entsteht bei `tr_07`?"
4. **Gate-Logik:** „Wer muss an Gate 1 zustimmen?" / „Welche Pfade gibt es?"
5. **Zuordnung:** „In welcher Phase liegt `sp_09`?"
Jede Frage: Gruppentipp → *Auflösen*-Button → Modellantwort. Im Anschluss an das
Quiz folgt die **ausführliche Auflösung** der Station (vollständige Beschreibung +
Rollen/RACI + Artefakt aus der YAML) — das ist der Inhalt, der früher auf der
Plättchenrückseite stand.
## 4. Ablauf (UI-Flow)
```
[Start] → Szenario wählen (= Action Card)
→ App führt zur aktuellen Station (linearer Lifecycle, Fortschritt sichtbar)
→ Station:
→ Gruppe diskutiert am Board anhand der Kurzbezeichnung (App noch zu)
→ Quiz (vermittelnd): Frage(n) → Gruppentipp → "Auflösen" → richtig/falsch
→ ausführliche Auflösung der Station (Erklärung + RACI + Artefakt)
→ Gruppe reflektiert; optional "war unklar" markieren
→ "Nächste Station"
→ an Gates: Gate-Frage + Rollen-Check
→ [Ende] → Debrief-Export (unklare Aktivitäten, Quote, Pfad)
```
## 5. Funktionsumfang (MVP)
- [ ] `questions.json` + Stations-Inhalte aus YAMLs generieren (Build-Skript).
- [ ] Stationsführung: linearer Durchlauf mit „Nächste Station" + Fortschritt/Phasen-Farben.
- [ ] Fragetypen 13 (vermittelndes Quiz).
- [ ] „Auflösen"-Mechanik (Antwort erst auf Klick) **+ ausführliche Stationsauflösung** (Erklärung/RACI/Artefakt) nach dem Quiz.
- [ ] „Unklar"-Markierung je Aktivität.
- [ ] Debrief-Export (Markdown/JSON, lokal).
### Später (Ausbau)
- Gate-Fragen mit Rollen-Check (Typ 45).
- Mehrere Szenarien mit unterschiedlichen Fragesets.
- Punktestand / Team-Modus.
- Mehrsprachigkeit.
## 6. Technik-Empfehlung
- **Single-Page-Web-App**, offline lauffähig (PWA), passt zum bestehenden
HTML-first-Stil im Repo (vgl. MB-Retro-HTMLs).
- Kein Backend nötig: statisches `questions.json` + LocalStorage für das Logbuch.
- Tablet im Kiosk-/Vollbildmodus; keine Konten, keine Cloud.
- Stack-Vorschlag: Vanilla JS oder leichtes Framework, ein Build-Skript (Node/Python)
für die YAML→JSON-Konvertierung.
## 7. Schnittstellen zum restlichen Spiel
- **Eingang:** Szenarioauswahl = gezogene Action Card (`../03_Karten/`).
- **Inhalt:** Aktivitäten/Gates/Rollen = Brett-Elemente (`../00_Konzept/`).
- **Ausgang:** Debrief-Daten → Workshop-Dokumentation (`../05_Workshop-Dokumentation/`).
## 8. Offene Punkte
- [ ] Format `questions.json` spezifizieren.
- [ ] Entscheidung Framework vs. Vanilla.
- [ ] Wer pflegt/baut? (intern DIGIT vs. extern)
- [ ] Datenschutz: rein lokal, keine personenbezogenen Daten — bestätigen.

View file

@ -0,0 +1,491 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>SLC-Workshop — Companion-App (Prototyp)</title>
<style>
:root {
--bg: #f4f5f7;
--panel: #ffffff;
--ink: #1d2430;
--muted: #6b7686;
--line: #e2e6ec;
--accent: #e2001a; /* Freiburg-Rot */
--ok: #1f9d57;
--bad: #d23b3b;
--design: #2f80c9;
--transition: #e8862b;
--operation: #2f9e57;
--support: #18a9a0;
--review: #8358c6;
--radius: 14px;
--shadow: 0 1px 3px rgba(20,30,50,.08), 0 6px 24px rgba(20,30,50,.06);
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; }
body {
font: 16px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
color: var(--ink); background: var(--bg);
-webkit-font-smoothing: antialiased;
}
header {
display: flex; align-items: center; gap: 16px;
padding: 12px 20px; background: var(--panel);
border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 5;
}
header .brand { font-weight: 700; letter-spacing: .2px; }
header .brand b { color: var(--accent); }
header .tag { font-size: 12px; color: var(--muted); border:1px solid var(--line); padding:2px 8px; border-radius:999px; }
header .spacer { flex: 1; }
.scenario select, button {
font: inherit; border-radius: 10px; border: 1px solid var(--line);
background: #fff; color: var(--ink); padding: 8px 12px; cursor: pointer;
}
button.primary { background: var(--accent); color: #fff; border-color: var(--accent); font-weight: 600; }
button.ghost { background: #fff; }
button:disabled { opacity: .45; cursor: default; }
.progress { height: 6px; background: var(--line); }
.progress > div { height: 100%; background: var(--accent); transition: width .3s; }
.layout { display: grid; grid-template-columns: 300px 1fr; gap: 0; min-height: calc(100% - 55px); }
@media (max-width: 820px) { .layout { grid-template-columns: 1fr; } aside { display:none; } }
aside { border-right: 1px solid var(--line); background: var(--panel); padding: 14px; overflow:auto; }
aside h3 { font-size: 11px; text-transform: uppercase; letter-spacing: .8px; color: var(--muted); margin: 16px 0 6px; }
.stationItem {
display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:10px;
cursor:pointer; font-size: 14px;
}
.stationItem:hover { background: #f7f9fb; }
.stationItem.active { background: #eef4fb; font-weight:600; }
.stationItem .dot { width:10px; height:10px; border-radius:50%; flex:none; }
.stationItem .id { color: var(--muted); font-variant-numeric: tabular-nums; font-size:12px; }
.stationItem .flag { margin-left:auto; color: var(--accent); }
.stationItem.done .id::after { content:" ✓"; color: var(--ok); }
main { padding: 28px clamp(20px, 5vw, 64px); overflow:auto; }
.card { background: var(--panel); border:1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); padding: 26px; max-width: 860px; margin: 0 auto; }
.phaseChip { display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:.6px; color:#fff; padding:5px 12px; border-radius:999px; }
.gateChip { background: var(--ink); }
.stationName { font-size: 28px; font-weight: 700; margin: 14px 0 4px; line-height:1.2; }
.stationId { color: var(--muted); font-size: 14px; }
.token { font-size:13px; color:var(--muted); margin-top:10px; }
.token b { color: var(--ink); }
.step { margin-top: 22px; }
.stepHead { display:flex; align-items:center; gap:10px; font-size:12px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); margin-bottom:10px; }
.stepHead .n { width:22px; height:22px; border-radius:50%; background:var(--ink); color:#fff; display:grid; place-items:center; font-size:12px; }
.discuss { background:#fbfdff; border:1px dashed var(--line); border-radius:12px; padding:18px 20px; }
.discuss ul { margin:8px 0 0; padding-left:20px; }
.discuss li { margin:4px 0; }
.q { border:1px solid var(--line); border-radius:12px; padding:18px 20px; margin-bottom:14px; }
.q .frage { font-weight:600; margin-bottom:12px; }
.opts { display:grid; gap:8px; }
.opt { text-align:left; padding:12px 14px; border-radius:10px; border:1px solid var(--line); background:#fff; cursor:pointer; }
.opt:hover { border-color:#c9d2dd; }
.opt.sel { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(226,0,26,.12); }
.opt.correct { border-color: var(--ok); background:#f1faf4; }
.opt.wrong { border-color: var(--bad); background:#fdf3f3; }
.opt .mark { float:right; font-weight:700; }
.qExpl { margin-top:10px; font-size:14px; color:var(--muted); border-left:3px solid var(--line); padding-left:12px; }
.reveal h4 { margin: 18px 0 6px; font-size: 13px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted); }
.reveal p { margin: 0 0 8px; }
.reveal ul { margin: 4px 0; padding-left: 20px; }
table.raci { width:100%; border-collapse: collapse; font-size:14px; }
table.raci th, table.raci td { text-align:left; padding:8px 10px; border-bottom:1px solid var(--line); }
table.raci th { color:var(--muted); font-weight:600; font-size:12px; text-transform:uppercase; letter-spacing:.5px; }
.raciBadge { display:inline-block; min-width:22px; text-align:center; font-weight:700; border-radius:6px; padding:2px 6px; font-size:12px; }
.raci-A { background:#fbe3e3; color:#b5202a; }
.raci-R { background:#e3eefb; color:#1f5fae; }
.raci-C { background:#fff1dd; color:#b5701a; }
.raci-I { background:#eef0f3; color:#5a6675; }
.pfade { display:grid; gap:8px; }
.pfad { border:1px solid var(--line); border-left:4px solid var(--transition); border-radius:8px; padding:10px 12px; }
.pfad b { display:block; }
.actions { display:flex; gap:10px; align-items:center; margin-top:24px; flex-wrap:wrap; }
.actions .spacer { flex:1; }
.unclear { display:flex; align-items:center; gap:8px; color:var(--muted); font-size:14px; }
dialog { border:none; border-radius:16px; padding:0; box-shadow: var(--shadow); max-width: 640px; width: 92%; }
dialog::backdrop { background: rgba(15,22,35,.45); }
.modal { padding: 24px; }
.modal h2 { margin:0 0 6px; }
pre.export { background:#0f1623; color:#d6e2f0; padding:14px; border-radius:10px; overflow:auto; max-height:320px; font-size:13px; }
.stat { display:flex; gap:20px; margin:14px 0; }
.stat div b { display:block; font-size:24px; }
.stat div span { color:var(--muted); font-size:12px; }
.note { font-size:12px; color:var(--muted); margin-top:18px; text-align:center; }
</style>
</head>
<body>
<header>
<div class="brand">SLC&nbsp;<b>Companion</b></div>
<span class="tag">Prototyp · v0.4</span>
<div class="scenario">
<select id="scenarioSel" title="Action Card / Szenario"></select>
</div>
<div class="spacer"></div>
<button class="ghost" id="resetBtn" title="Durchlauf zurücksetzen">Zurücksetzen</button>
<button class="primary" id="debriefBtn">Debrief</button>
</header>
<div class="progress"><div id="progressBar" style="width:0%"></div></div>
<div class="layout">
<aside id="stationList"></aside>
<main><div class="card" id="panel"></div></main>
</div>
<dialog id="debriefDlg">
<div class="modal">
<h2>Debrief-Export</h2>
<p style="color:var(--muted);margin-top:0">Lokale Auswertung dieses Durchlaufs — nichts wird hochgeladen.</p>
<div class="stat" id="debriefStat"></div>
<pre class="export" id="debriefText"></pre>
<div class="actions">
<button class="ghost" id="copyBtn">In Zwischenablage</button>
<div class="spacer"></div>
<button class="primary" id="closeDebrief">Schließen</button>
</div>
</div>
</dialog>
<script>
/* =========================================================================
BEISPIELDATEN — Auszug aus den Lifecycle-YAMLs (Design, Gate 1, Operation).
Im Echtbetrieb generiert ein Build-Skript questions.json aus
service-lifecycle_*.yaml + spm_rollen.yaml (keine Doppelpflege).
========================================================================= */
const ROLLEN = {
spm:"Service-Portfolio-Manager", sor:"Service Operations Runde (SOR)",
service_owner:"Service Owner", al_basis_cloud:"AL Basis & Cloud",
al_applikationen:"AL Applikationen", support_manager:"Support Manager",
problem_manager:"Problem Manager", projektleitung:"Projektleitung",
betriebsteam:"Betriebsteam", service_support_team:"Service-Support Team",
projektteam:"Projektteam", queue_koordinator:"Queue Koordinator",
first_level_agent:"1st Level Agent", second_level_agent:"2nd Level Agent",
testmanagement:"Testmanagement", architektur:"Architektur",
lieferant:"Lieferant", operations_manager:"Betrieb (AL B&C / AL App)"
};
const PHASEN = {
design:{label:"Design", color:"var(--design)"},
transition:{label:"Transition", color:"var(--transition)"},
operation:{label:"Operation", color:"var(--operation)"},
support:{label:"Support", color:"var(--support)"},
review:{label:"Review", color:"var(--review)"}
};
const SZENARIEN = [
"Neues Fachverfahren wird eingeführt",
"Cloud-Migration eines Bestandsservices",
"Strategiewechsel: Service soll abgelöst werden"
];
const STATIONEN = [
{ id:"ds_01", phase:"design", typ:"aktivitaet",
name:"Definieren der erforderlichen Service-Eigenschaften",
beschreibung:"Grundlegende Definition des neuen oder geänderten Services aus fachlicher Perspektive. Startpunkt für die Service-Definition als zentrales Artefakt.",
umfasst:["Zweck, Nutzen, Zielgruppen","Utility & Warranty","SLA-/SLO-Anforderungen","Abhängigkeiten zu unterstützenden Services","Fachliche & technische Anforderungen"],
artefakt:"Service-Definition (Entwurf)",
raci:[["service_owner","A"],["projektleitung","R"],["betriebsteam","C"],["architektur","C"],["spm","C"]],
quiz:[
{frage:"Wer trägt die Ergebnisverantwortung (A) für diese Aktivität?",
optionen:["Service Owner","Projektleitung","SPM","Architektur"], richtig:0,
expl:"Der (designierte) Service Owner ist Accountable; die Projektleitung führt operativ aus (R)."},
{frage:"Welches zentrale Artefakt entsteht hier?",
optionen:["Betriebshandbuch","Service-Definition","Review-Bericht","Incident Record"], richtig:1,
expl:"Die Service-Definition ist das zentrale Artefakt der Design-Phase."}
]},
{ id:"ds_02", phase:"design", typ:"aktivitaet",
name:"Designen der Service- und Service-Management-Komponenten",
beschreibung:"Einarbeiten der Service-Eigenschaften in ein vollständiges Designmodell.",
umfasst:["Servicearchitektur (Komponenten, Schnittstellen)","Design der Betriebs- & Supportprozesse","Sicherheit/Compliance/Datenschutz","Monitoring & Reporting","Rollenmodell"],
artefakt:"Service Design Document",
raci:[["service_owner","A"],["architektur","R"],["projektteam","R"],["spm","I"]],
quiz:[
{frage:"Wer führt das Architektur-Design operativ aus (R)?",
optionen:["SPM","Service Owner","Architektur","Support Manager"], richtig:2,
expl:"Architektur und Projektteam sind Responsible; der Service Owner bleibt Accountable."}
]},
{ id:"ds_03", phase:"design", typ:"aktivitaet",
name:"Beschreiben des Vorgehens zur Implementierung",
beschreibung:"Planen, WIE der Service organisatorisch eingeführt wird (nicht technisch deployt wird).",
umfasst:["Organisatorische Integration","Rollenübergaben","Anpassung Richtlinien/Prozesse/Tools","Trainings & Kommunikation","Time-to-Operate"],
artefakt:"Implementation Blueprint",
raci:[["service_owner","A"],["projektleitung","R"],["betriebsteam","C"],["service_support_team","C"],["spm","I"]],
quiz:[
{frage:"Was wird hier geplant?",
optionen:["Das technische Deployment","Wie der Service organisatorisch eingeführt wird","Die Incident-Bearbeitung","Die Portfolio-Strategie"], richtig:1,
expl:"ds_03 plant die organisatorische Einführung — bewusst getrennt vom technischen Build."}
]},
{ id:"ds_04", phase:"design", typ:"aktivitaet",
name:"Vorbereiten der Service-Implementierung",
beschreibung:"Finalisieren aller organisatorischen Voraussetzungen für die spätere Übergabe in den Betrieb.",
umfasst:["Abstimmung mit Betrieb & Support","Prozesse/Tools/Strukturen vorbereiten","ELS-Konzept (Early Life Support)","Service vollständig im Portfolio erfasst"],
artefakt:"Übergabe-Readiness (organisatorisch)",
raci:[["service_owner","A"],["projektleitung","R"],["betriebsteam","C"],["service_support_team","C"],["spm","I"]],
quiz:[
{frage:"Wofür steht das ELS-Konzept?",
optionen:["Early Life Support","End of Life Service","Enterprise License System","Externer Lieferanten-Support"], richtig:0,
expl:"Early Life Support = erhöhte Betreuung direkt nach Go-Live (siehe op_01)."}
]},
{ id:"tr_01", phase:"transition", typ:"gate", gateNr:1,
name:"Gate 1: Entwicklung oder Konfiguration?",
beschreibung:"Entry-Gate der Transition: Entscheidung, ob die Service-Komponenten entwickelt oder nur konfiguriert werden. Erfordert SOR-Approval (Budget- und Ressourcenimplikationen).",
umfasst:["Aufwandsschätzung (Build vs. Configure)","Technische Risiken","Budget-Abgleich","ggf. Lieferanten-Einbindung","SOR-Vorlage für Freigabe"],
artefakt:"Gate-Entscheidung + SOR-Vorlage",
pfade:[
["Entwicklung","Neuentwicklung/wesentliche Anpassung → weiter zu tr_02"],
["Konfiguration","Bestehende Komponenten konfigurieren → springt zu tr_05"]
],
pruef:[
["Design-Vollständigkeit","Ist das Service Design Document vollständig?"],
["Budget-Verfügbarkeit","Ist Budget für die Strategie verfügbar?"],
["Projektressourcen","Können Ressourcen mobilisiert werden?"],
["Betriebs-/Support-Bereitschaft","Grundsätzliches Commitment vorhanden?"]
],
raci:[["sor","A"],["service_owner","R"],["projektleitung","R"],["architektur","R"],["spm","C"],["lieferant","I"]],
quiz:[
{frage:"Wer entscheidet an Gate 1 (Accountable)?",
optionen:["Service Owner","SOR","SPM","Projektleitung"], richtig:1,
expl:"Gate 1 ist eine SOR-Gremienentscheidung (Budget-/Ressourcenimplikationen)."},
{frage:"Welche zwei Pfade öffnet Gate 1?",
optionen:["Go oder Stop","Intern oder Extern","Entwicklung oder Konfiguration","Test oder Release"], richtig:2,
expl:"Entwicklung (tr_02) vs. Konfiguration (tr_05) — Konfiguration überspringt tr_02tr_04."}
]},
{ id:"op_01", phase:"operation", typ:"aktivitaet",
name:"Early Life Support (ELS)",
beschreibung:"Phase erhöhter Aufmerksamkeit direkt nach Go-Live: produktiv, aber intensiver beobachtet und betreut als im Normalbetrieb.",
umfasst:["Erhöhte Monitoring-Bereitschaft","Direkte Eskalation zum Projektteam","Schnelles Troubleshooting","Erste Incidents aufarbeiten","ELS-Exit-Entscheidung (SO)"],
artefakt:"Stabilisierter Service (ELS-Exit)",
raci:[["service_owner","A"],["support_manager","R"],["operations_manager","R"],["projektteam","C"],["spm","I"]],
quiz:[
{frage:"Wer entscheidet über den ELS-Exit?",
optionen:["SOR","Service Owner","Support Manager","Betrieb"], richtig:1,
expl:"Der Service Owner entscheidet eigenständig (Informationspflicht an SPM)."}
]},
{ id:"op_02", phase:"operation", typ:"aktivitaet",
name:"Bereitstellen von Leitlinien für den Service-Betrieb",
beschreibung:"Strukturelle Grundlage für den täglichen Servicebetrieb.",
umfasst:["Betriebshandbuch bereitstellen/pflegen","Betriebsprozesse & Arbeitsanweisungen","Rollen, Eskalation, Kommunikation klar","Standard Changes & Known Errors"],
artefakt:"Betriebshandbuch",
raci:[["service_owner","A"],["operations_manager","R"]],
quiz:[
{frage:"Welches Artefakt ist hier zentral?",
optionen:["Service-Definition","Betriebshandbuch","Testbericht","Gate-Vorlage"], richtig:1,
expl:"Das Betriebshandbuch ist die strukturelle Grundlage des laufenden Betriebs."}
]}
];
/* ====================== STATE ====================== */
const LS_KEY = "slc-companion-proto";
function defaultState(){
return { scenario:0, index:0, stage:"discuss", quizIndex:0,
picks:{}, done:{}, unclear:{} };
}
let S = load();
function load(){ try{ return Object.assign(defaultState(), JSON.parse(localStorage.getItem(LS_KEY)||"{}")); }catch(e){ return defaultState(); } }
function save(){ localStorage.setItem(LS_KEY, JSON.stringify(S)); }
/* ====================== HELPERS ====================== */
const $ = s => document.querySelector(s);
const cur = () => STATIONEN[S.index];
function pkey(sid, qi){ return sid+"#"+qi; }
function roleLabel(id){ return ROLLEN[id] || id; }
/* ====================== RENDER: SIDEBAR ====================== */
function renderList(){
const groups = {};
STATIONEN.forEach((st,i)=>{ (groups[st.phase]=groups[st.phase]||[]).push({st,i}); });
let html = "";
for(const ph in PHASEN){
if(!groups[ph]) continue;
html += `<h3>${PHASEN[ph].label}</h3>`;
groups[ph].forEach(({st,i})=>{
const cls = [ "stationItem", i===S.index?"active":"", S.done[st.id]?"done":"" ].join(" ");
html += `<div class="${cls}" data-i="${i}">
<span class="dot" style="background:${PHASEN[ph].color}"></span>
<span class="id">${st.id}</span>
<span class="nm">${st.typ==="gate"?"⛩ ":""}${st.name.length>34?st.name.slice(0,32)+"…":st.name}</span>
${S.unclear[st.id]?'<span class="flag"></span>':''}
</div>`;
});
}
$("#stationList").innerHTML = html;
$("#stationList").querySelectorAll(".stationItem").forEach(el=>{
el.onclick = ()=>{ S.index = +el.dataset.i; S.stage="discuss"; S.quizIndex=0; save(); render(); };
});
const pct = Math.round(Object.keys(S.done).length / STATIONEN.length * 100);
$("#progressBar").style.width = pct+"%";
}
/* ====================== RENDER: PANEL ====================== */
function render(){
renderList();
const st = cur();
const ph = PHASEN[st.phase];
const chip = st.typ==="gate"
? `<span class="phaseChip gateChip">⛩ Gate ${st.gateNr}</span>`
: `<span class="phaseChip" style="background:${ph.color}">${ph.label}</span>`;
let body = `
${chip}
<div class="stationName">${st.name}</div>
<div class="stationId">${st.id}</div>
<div class="token">Action-Stein: <b>${SZENARIEN[S.scenario]}</b></div>
`;
if(S.stage==="discuss") body += renderDiscuss(st);
else if(S.stage==="quiz") body += renderQuiz(st);
else body += renderReveal(st);
$("#panel").innerHTML = body;
wire(st);
}
function renderDiscuss(st){
return `
<div class="step">
<div class="stepHead"><span class="n">1</span> Diskussion · App noch zu</div>
<div class="discuss">
<strong>Besprecht in der Gruppe — anhand der Kurzbezeichnung:</strong>
<ul>
<li>Was passiert hier konkret für euer Szenario?</li>
<li>Wer macht es? Steckt die Rollen-Figuren ins <b>Aktiv-Feld (R/A/C/I)</b>.</li>
<li>Welches Artefakt entsteht?</li>
</ul>
</div>
</div>
<div class="actions">
<div class="spacer"></div>
<button class="primary" id="toQuiz">Quiz starten →</button>
</div>`;
}
function renderQuiz(st){
const qi = S.quizIndex, q = st.quiz[qi];
const picked = S.picks[pkey(st.id,qi)];
const answered = picked !== undefined;
const opts = q.optionen.map((o,i)=>{
let cls = "opt";
if(answered){
if(i===q.richtig) cls+=" correct";
else if(i===picked) cls+=" wrong";
} else if(i===picked) cls+=" sel";
const mark = answered ? (i===q.richtig?'<span class="mark" style="color:var(--ok)"></span>': (i===picked?'<span class="mark" style="color:var(--bad)"></span>':'')) : '';
return `<button class="${cls}" data-opt="${i}" ${answered?'disabled':''}>${o}${mark}</button>`;
}).join("");
return `
<div class="step">
<div class="stepHead"><span class="n">2</span> Quiz · Frage ${qi+1} / ${st.quiz.length}</div>
<div class="q">
<div class="frage">${q.frage}</div>
<div class="opts">${opts}</div>
${answered ? `<div class="qExpl">${q.expl}</div>` : ``}
</div>
</div>
<div class="actions">
<button class="ghost" id="backDiscuss">← Diskussion</button>
<div class="spacer"></div>
${answered
? (qi < st.quiz.length-1
? `<button class="primary" id="nextQ">Nächste Frage →</button>`
: `<button class="primary" id="toReveal">Auflösung anzeigen →</button>`)
: `<button class="primary" disabled>Antwort wählen…</button>`}
</div>`;
}
function renderReveal(st){
const raci = st.raci.map(([r,c])=>`<tr><td>${roleLabel(r)}</td><td><span class="raciBadge raci-${c}">${c}</span></td></tr>`).join("");
let extra = "";
if(st.typ==="gate"){
extra += `<h4>Entscheidungspfade</h4><div class="pfade">` +
st.pfade.map(([n,d])=>`<div class="pfad"><b>${n}</b><span style="color:var(--muted)">${d}</span></div>`).join("") + `</div>`;
extra += `<h4>Prüf-Dimensionen</h4><ul>` + st.pruef.map(([n,d])=>`<li><b>${n}</b> — ${d}</li>`).join("") + `</ul>`;
}
return `
<div class="step reveal">
<div class="stepHead"><span class="n">3</span> Auflösung & Reflexion</div>
<p>${st.beschreibung}</p>
<h4>Umfasst</h4>
<ul>${st.umfasst.map(u=>`<li>${u}</li>`).join("")}</ul>
<h4>Rollen / RACI</h4>
<table class="raci"><thead><tr><th>Rolle</th><th>RACI</th></tr></thead><tbody>${raci}</tbody></table>
<h4>Artefakt</h4><p>${st.artefakt}</p>
${extra}
</div>
<div class="actions">
<label class="unclear"><input type="checkbox" id="unclear" ${S.unclear[st.id]?'checked':''}/> War unklar</label>
<div class="spacer"></div>
${S.index < STATIONEN.length-1
? `<button class="primary" id="nextStation">Nächste Station →</button>`
: `<button class="primary" id="finish">Durchlauf abschließen</button>`}
</div>`;
}
/* ====================== WIRING ====================== */
function wire(st){
const b = id => $("#"+id);
if(b("toQuiz")) b("toQuiz").onclick = ()=>{ S.stage="quiz"; S.quizIndex=0; save(); render(); };
if(b("backDiscuss")) b("backDiscuss").onclick = ()=>{ S.stage="discuss"; save(); render(); };
$("#panel").querySelectorAll(".opt[data-opt]").forEach(el=>{
el.onclick = ()=>{ S.picks[pkey(st.id,S.quizIndex)] = +el.dataset.opt; save(); render(); };
});
if(b("nextQ")) b("nextQ").onclick = ()=>{ S.quizIndex++; save(); render(); };
if(b("toReveal")) b("toReveal").onclick = ()=>{ S.stage="reveal"; save(); render(); };
if(b("unclear")) b("unclear").onchange = e=>{ if(e.target.checked) S.unclear[st.id]=true; else delete S.unclear[st.id]; save(); renderList(); };
if(b("nextStation")) b("nextStation").onclick = ()=>{ S.done[st.id]=true; S.index++; S.stage="discuss"; S.quizIndex=0; save(); render(); };
if(b("finish")) b("finish").onclick = ()=>{ S.done[st.id]=true; save(); openDebrief(); };
}
/* ====================== DEBRIEF ====================== */
function quizScore(){
let correct=0, total=0;
STATIONEN.forEach(st=> st.quiz.forEach((q,qi)=>{
const p = S.picks[pkey(st.id,qi)];
if(p!==undefined){ total++; if(p===q.richtig) correct++; }
}));
return {correct,total};
}
function openDebrief(){
const {correct,total} = quizScore();
const doneN = Object.keys(S.done).length;
const unclearList = STATIONEN.filter(st=>S.unclear[st.id]);
$("#debriefStat").innerHTML = `
<div><b>${doneN}/${STATIONEN.length}</b><span>Stationen</span></div>
<div><b>${total?Math.round(correct/total*100):0}%</b><span>Quiz richtig (${correct}/${total})</span></div>
<div><b>${unclearList.length}</b><span>als unklar markiert</span></div>`;
let md = `# SLC-Workshop — Debrief\n\n`;
md += `**Szenario:** ${SZENARIEN[S.scenario]}\n`;
md += `**Stationen bearbeitet:** ${doneN}/${STATIONEN.length}\n`;
md += `**Quiz:** ${correct}/${total} richtig\n\n`;
md += `## Als unklar markiert\n`;
md += unclearList.length ? unclearList.map(st=>`- ${st.id} — ${st.name}`).join("\n") : "_keine_";
md += `\n\n## Quiz-Detail\n`;
STATIONEN.forEach(st=> st.quiz.forEach((q,qi)=>{
const p = S.picks[pkey(st.id,qi)];
if(p===undefined) return;
md += `- [${p===q.richtig?"✓":"✗"}] ${st.id}: ${q.frage} → „${q.optionen[p]}"\n`;
}));
$("#debriefText").textContent = md;
$("#debriefDlg").showModal();
}
/* ====================== INIT ====================== */
(function init(){
const sel = $("#scenarioSel");
sel.innerHTML = SZENARIEN.map((s,i)=>`<option value="${i}">${s}</option>`).join("");
sel.value = S.scenario;
sel.onchange = ()=>{ S.scenario = +sel.value; save(); render(); };
$("#debriefBtn").onclick = openDebrief;
$("#closeDebrief").onclick = ()=> $("#debriefDlg").close();
$("#copyBtn").onclick = ()=> navigator.clipboard?.writeText($("#debriefText").textContent);
$("#resetBtn").onclick = ()=>{ if(confirm("Durchlauf zurücksetzen?")){ S=defaultState(); save(); render(); } };
render();
})();
</script>
</body>
</html>

View file

@ -0,0 +1,28 @@
# Workshop-Dokumentation
Was während und nach dem Spiel festgehalten wird — damit die Gruppe **danach
darüber diskutieren** kann und Verständnislücken in den Blueprint zurückfließen.
## Drei Erfassungsebenen
1. **Auf dem Board (live):** „Unklar"-Marker (rote Punkte) direkt auf die
Aktivitäts-Verankerung legen, wo es hakte. Am Ende ergibt das eine **sichtbare
Heatmap** der Verständnislücken — einfach abfotografieren.
2. **Logbuch-Bogen** (1 Seite/Runde): gewählter Pfad, Gate-Entscheidungen, unklare
Aktivitäten, Stimmungs-Check. Vorlage: [`logbuch-vorlage.md`](logbuch-vorlage.md).
3. **Tablet-Export** (falls genutzt): schwach beantwortete Aktivitäten + Quote.
## Abschluss-Reflexion
Mit den [`reflexionskarten.md`](reflexionskarten.md) im Plenum, ~10 Minuten.
## Auswertung / Feedback-Schleife
Nach dem Workshop:
- Heatmap-Foto + Logbuch + Tablet-Export zusammenführen.
- Häufig markierte Aktivitäten = Kandidaten für Nachschärfung im
Service-Lifecycle-Blueprint (`#02_service-portfolio-management/...`).
- Erkenntnisse als kurze Notiz an die Blueprint-Pflege geben.
> Leitgedanke: Wo das Spiel hakt, ist meist auch das Konzept unklar. Die
> Dokumentation ist damit zugleich **Schulungs-Feedback** und **Konzept-Review**.

View file

@ -0,0 +1,66 @@
# Logbuch — SLC-Workshop (eine Runde)
> Pro durchgespieltem Szenario ausfüllen. Druckvorlage; im Workshop handschriftlich.
**Datum:** ________________ **Gruppe / Anzahl:** ________________
**Moderation:** ________________
---
## Szenario (Action Card)
**Titel:** ____________________________________________
**Kurz:** ____________________________________________
---
## Gewählter Pfad
Reihenfolge der durchlaufenen Aktivitäten (IDs):
```
ds_ ___ → tr_ ___ → ... → op_ ___ → sp_ ___ → rv_ ___
```
Gate-1-Pfad: ☐ Entwicklung (tr_02) ☐ Konfiguration (tr_05)
## Gate-Entscheidungen
| Gate | Anwesende Rollen vollständig? | Entscheidung (Go / Auflagen / Zurück / Ablehnung) | Diskussionspunkt |
|------|:----------------------------:|---------------------------------------------------|------------------|
| Gate 1 | ☐ ja ☐ nein | | |
| Gate 2 | ☐ ja ☐ nein | | |
| Gate 3 | ☐ ja ☐ nein | | |
## Unklare Aktivitäten (Heatmap)
Welche Aktivitäten waren unklar / strittig? (IDs + warum)
| Aktivität | unklar weil … |
|-----------|----------------|
| | |
| | |
| | |
## Stimmungs-Check je Phase
(1 = zäh/verwirrend … 5 = klar/flüssig)
| Phase | 1 | 2 | 3 | 4 | 5 |
|-------|:-:|:-:|:-:|:-:|:-:|
| Design | ☐ | ☐ | ☐ | ☐ | ☐ |
| Transition | ☐ | ☐ | ☐ | ☐ | ☐ |
| Operation | ☐ | ☐ | ☐ | ☐ | ☐ |
| Support | ☐ | ☐ | ☐ | ☐ | ☐ |
| Review | ☐ | ☐ | ☐ | ☐ | ☐ |
## Offene Fragen / Aha-Momente
____________________________________________________________
____________________________________________________________
## Tablet-Quiz (falls genutzt)
Trefferquote: ______ % · schwächste Aktivitäten: ____________________

View file

@ -0,0 +1,38 @@
# Reflexionskarten — Abschluss
> Zum Ausdrucken/Ausschneiden. Im Plenum reihum, ~10 Minuten. Eine Karte pro
> Frage; die Gruppe greift verdeckt und beantwortet.
---
**Karte 1 — Überraschung**
Was hat dich heute am Lifecycle überrascht?
**Karte 2 — Realitätscheck**
Wo war das Modell anders als euer Arbeitsalltag?
**Karte 3 — Fehlende Rolle**
Hat an einer Stelle eine Rolle gefehlt oder war eine zu viel?
**Karte 4 — Schwierigstes Gate**
Welches Gate war am schwersten zu entscheiden — und warum?
**Karte 5 — Die Schleife**
Wie habt ihr die Operation↔Support-Schleife erlebt?
**Karte 6 — Wiedergeburt**
War die Review-Entscheidung (Improvement / Redesign / Retirement) eindeutig?
**Karte 7 — Klarste Aktivität**
Welche Aktivität war am verständlichsten — was hat sie klar gemacht?
**Karte 8 — Eine Änderung**
Wenn du eine Sache am Konzept ändern dürftest — welche?
---
## Moderationshinweis
Die Antworten auf **Karte 2, 3 und 8** sind die wertvollsten für die
Blueprint-Weiterentwicklung — kurz mitschreiben und an die Konzeptpflege geben
(siehe [`README_dokumentation.md`](README_dokumentation.md)).

53
README.md Normal file
View file

@ -0,0 +1,53 @@
# SLC-Workshop — Tabletop zum Service-Lifecycle
Ein physisches Tabletop-Workshop-Format, mit dem Teams den **Service-Lifecycle des
SPM-Konzepts** (Design → Transition → Operation ↔ Support → Review) gemeinsam
durchspielen. Ein Szenario („Action Prompt") wandert als Spielstein durch alle
Phasen, Aktivitäten und Gates. An jeder Station wird diskutiert, wer was tut und
welches Artefakt entsteht; ein optionales Tablet-Quiz vertieft und protokolliert.
**Auftraggeber-Kontext:** Stadt Freiburg / DIGIT — DIGITOM
**Inhaltliche Quelle:** [`#02_service-portfolio-management/02.1_spm_konzepte/02_spm_service-lifecycle-blueprint/`](../../%2302_service-portfolio-management/02.1_spm_konzepte/02_spm_service-lifecycle-blueprint/)
**Status:** Konzept / Vorbereitung Prototyp
---
## Kernidee in einem Satz
Der Service-Lifecycle wird zu einer **linearen Spielbahn**, auf der ein Service
als Spielstein von Design bis Review wandert — Entscheidungen fallen an drei
Gates, an denen die richtigen Rollen-Figuren physisch zusammenkommen müssen.
## Zentrale Spielmechaniken
1. **Action-Stein** — trägt die gezogene Szenario-Karte aufrecht und wandert durch die Phasen.
2. **Aktivitätsplättchen (einseitig)** — nur ID + Kurzbezeichnung. Aus der Verankerung genommen → Stein nimmt den freien Platz ein (= „wir sind hier"). Die Erklärung liegt in der App, nicht auf der Rückseite.
3. **RACI-Aktiv-Feld** — mobile Leiste neben dem Action-Stein; beteiligte Rollen werden je Aktivität in die Zonen R/A/C/I gesteckt. Gates bleiben zusätzliche Pflicht-Versammlung.
4. **Artefakt- & Störungskarten** — machen Ergebnisse und die Operation↔Support-Schleife greifbar.
5. **Companion-App (Lernschleife)** — führt die Stationsreihenfolge, stellt pro Station ein vermittelndes Quiz, liefert die Auflösung und protokolliert Verständnislücken.
## Ordnerübersicht
| Ordner | Inhalt |
|--------|--------|
| [`00_Konzept/`](00_Konzept/) | Gesamtkonzept: Board, Phasen, Gates, Mechaniken, Spielablauf, Didaktik |
| [`01_3D-Druck/`](01_3D-Druck/) | Materialliste mit Maßen, OpenSCAD-Modelle, Visual-Prompts für den 3D-Druck-Producer |
| [`02_Spielfiguren/`](02_Spielfiguren/) | Rollen-Figuren, Farbcodierung, Gate-Zuordnung |
| [`03_Karten/`](03_Karten/) | Action Cards, Störungs-, Artefakt- und Entscheidungskarten + Druckmaße |
| [`04_Tablet-Quiz/`](04_Tablet-Quiz/) | Eigenständiges Teilprojekt: Begleit-App (Konzept & Architektur) |
| [`05_Workshop-Dokumentation/`](05_Workshop-Dokumentation/) | Logbuch-Vorlage, Reflexionskarten, Debrief |
## Bauteile auf einen Blick
| Komponente | 3D-Druck | Print/Karte | Software |
|------------|:--------:|:-----------:|:--------:|
| Phasen-Basistiles (Bahn) | ✅ | — | — |
| Aktivitätsplättchen (einseitig, Kurzbezeichnung) | ✅ | — | — |
| Action-Stein (Szenario-Träger) | ✅ | — | — |
| RACI-Aktiv-Feld (Stecklochleiste) | ✅ | — | — |
| Gate-Tore | ✅ | — | — |
| Rollen-Figuren | ✅ | — | — |
| Action Cards / Störungskarten | — | ✅ | — |
| Artefaktkarten / Entscheidungs-Chips | (Chips ✅) | ✅ | — |
| Logbuch / Reflexionskarten | — | ✅ | — |
| Companion-App (Quiz + Auflösung) | — | — | ✅ |