first
This commit is contained in:
commit
c87b0b1775
23 changed files with 2658 additions and 0 deletions
190
00_Konzept/README_konzept.md
Normal file
190
00_Konzept/README_konzept.md
Normal 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_01–04 tr_01 … tr_12 op_01–07 sp_01–11 rv_01–06
|
||||||
|
│
|
||||||
|
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_01–ds_04 (4) |
|
||||||
|
| **Transition** | orange | tr_01–tr_12 (9 Aktivitäten + 3 Gates) |
|
||||||
|
| **Operation** | grün | op_01–op_07 (7) |
|
||||||
|
| **Support** | teal | sp_01–sp_11 (11) |
|
||||||
|
| **Review** | lila | rv_01–rv_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 1–2 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.
|
||||||
35
01_3D-Druck/README_3d-druck.md
Normal file
35
01_3D-Druck/README_3d-druck.md
Normal 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,6–1,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).
|
||||||
BIN
01_3D-Druck/board-layout.png
Normal file
BIN
01_3D-Druck/board-layout.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 258 KiB |
310
01_3D-Druck/board-layout.svg
Normal file
310
01_3D-Druck/board-layout.svg
Normal 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 & 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 -> 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 & 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 & 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 |
202
01_3D-Druck/gen_board_layout.py
Normal file
202
01_3D-Druck/gen_board_layout.py
Normal 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("&", "&").replace("<", "<").replace(">", ">")
|
||||||
|
|
||||||
|
|
||||||
|
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})")
|
||||||
131
01_3D-Druck/materialliste.md
Normal file
131
01_3D-Druck/materialliste.md
Normal 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 | **1–2** |
|
||||||
|
| 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,6–1,0 mm; bei sehr kleiner Schrift Label-Variante wählen.
|
||||||
|
- Farbtrennung über Filamentwechsel je Phase, nicht über Lackierung (abriebfest).
|
||||||
33
01_3D-Druck/openscad/README_openscad.md
Normal file
33
01_3D-Druck/openscad/README_openscad.md
Normal 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.
|
||||||
42
01_3D-Druck/openscad/action-stein.scad
Normal file
42
01_3D-Druck/openscad/action-stein.scad
Normal 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);
|
||||||
|
}
|
||||||
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal file
77
01_3D-Druck/openscad/aktiv-feld.scad
Normal 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();
|
||||||
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal file
48
01_3D-Druck/openscad/aktivitaets-plaque.scad
Normal 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();
|
||||||
|
}
|
||||||
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal file
52
01_3D-Druck/openscad/aktivitaets-tile.scad
Normal 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();
|
||||||
70
01_3D-Druck/openscad/gate-tor.scad
Normal file
70
01_3D-Druck/openscad/gate-tor.scad
Normal 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();
|
||||||
|
}
|
||||||
125
01_3D-Druck/visual-prompts_3d-producer.md
Normal file
125
01_3D-Druck/visual-prompts_3d-producer.md
Normal 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 A–D 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.
|
||||||
82
02_Spielfiguren/README_spielfiguren.md
Normal file
82
02_Spielfiguren/README_spielfiguren.md
Normal 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.
|
||||||
176
02_Spielfiguren/figuren-set-b_minifiguren.md
Normal file
176
02_Spielfiguren/figuren-set-b_minifiguren.md
Normal 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.
|
||||||
225
02_Spielfiguren/figuren-varianten.md
Normal file
225
02_Spielfiguren/figuren-varianten.md
Normal 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.
|
||||||
83
03_Karten/README_karten.md
Normal file
83
03_Karten/README_karten.md
Normal 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_03–sp_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_05–sp_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
101
04_Tablet-Quiz/README.md
Normal 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 1–3 (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 4–5).
|
||||||
|
- 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.
|
||||||
491
04_Tablet-Quiz/prototype/index.html
Normal file
491
04_Tablet-Quiz/prototype/index.html
Normal 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 <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_02–tr_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>
|
||||||
28
05_Workshop-Dokumentation/README_dokumentation.md
Normal file
28
05_Workshop-Dokumentation/README_dokumentation.md
Normal 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**.
|
||||||
66
05_Workshop-Dokumentation/logbuch-vorlage.md
Normal file
66
05_Workshop-Dokumentation/logbuch-vorlage.md
Normal 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: ____________________
|
||||||
38
05_Workshop-Dokumentation/reflexionskarten.md
Normal file
38
05_Workshop-Dokumentation/reflexionskarten.md
Normal 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
53
README.md
Normal 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) | — | — | ✅ |
|
||||||
Loading…
Add table
Add a link
Reference in a new issue