Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
+387
View File
@@ -0,0 +1,387 @@
---
name: pptx-infrago
description: >
Erstellt PowerPoint-Präsentationen (.pptx) im DB InfraGO Corporate Design mit Python.
Nutzt den offiziellen DB InfraGO Folienmaster (31 Layouts) und ein Helper-Modul.
Nutze diesen Skill wenn der User eine PowerPoint-Datei, .pptx, Foliensatz oder Vortrag
als PowerPoint-Datei (nicht HTML) erstellen möchte.
Keywords: PowerPoint, PPTX, Folien, Foliensatz, Vortrag, Folienmaster, python-pptx, Master.
compatibility: >
Benötigt Python 3.10+ mit python-pptx (>=1.0). DB-Rechner empfohlen für DB-Schriften
(DB Neo Office Head / DB Neo Office). Kein Internet nötig — Vorlage und Bilder liegen
im Skill.
metadata:
version: "1.3.0"
author: "Uwe Sülter"
theme: "DB InfraGO Folienmaster (offiziell)"
template: "InfraGo_master_vorlage.pptx"
---
# PowerPoint-Präsentationen im DB InfraGO Folienmaster
Self-contained Skill für `.pptx`-Dateien. Die offizielle Vorlage `InfraGo_master_vorlage.pptx`
und das Helper-Modul `db_infrago_pptx.py` liegen direkt im Skill-Ordner unter `assets/`.
**Grundprinzip:** Der Skill schreibt nicht selbst Folien-Geometrie, sondern nutzt die 31
fertigen Layouts des offiziellen Folienmasters. Pro Layout gibt es eine Funktion im
Helper-Modul. Logo, Footer-Slot, Foliennummer und Farben werden vom Master geerbt —
Python befüllt nur die Platzhalter (Footer und Foliennummer werden technisch aus dem
Layout in die Slide geklont, weil python-pptx das nicht von selbst tut).
## Ablauf
### Schritt 1: Infos sammeln
ALLE 6 Punkte MÜSSEN geklärt sein bevor es weitergeht. Auch wenn das Thema offensichtlich
scheint — Zielgruppe und Umfang IMMER nachfragen, NIEMALS selbst annehmen.
**Name ermitteln (Fallback-Kette):**
1. Steerings/Kontext prüfen — steht der Name schon im geladenen Kontext (z.B. kiro-umgebung.md)?
2. `git config user.name` ausführen
3. Wenn beides fehlschlägt: User fragen
1. **Thema** — Worum geht es?
2. **Zielgruppe** — Für wen? (Devs, POs, Management, Fachbereich?)
3. **Umfang** — Wie viele Folien / wie lang?
4. **Footer** — Default: "DB InfraGO AG | [Name] | [Team] | [Jahr]"
5. **Ablageort** — Wo soll die `.pptx`-Datei hin?
6. **Klassifizierung** — Welche Vertraulichkeitsstufe? Erlaubte Werte:
- `"DB Offen / DB Open"` — für öffentlich teilbare Inhalte
- `"DB Intern / DB internal"` — für konzerninterne Inhalte (häufigster Fall)
- `"DB Vertraulich / DB confidential"` — für vertrauliche Inhalte
- `""` (leer) — keine Klassifizierung anzeigen
**WICHTIG:** Dieser Skill darf NUR für die Stufen "DB Offen", "DB Intern" und
"DB Vertraulich" verwendet werden. Für höhere Stufen (z.B. "DB Streng Vertraulich")
ist die automatische Erstellung von Präsentationen NICHT zulässig — den User darauf
hinweisen und ablehnen.
Nachfrage-Template — IMMER komplett zeigen, KEINE Felder weglassen:
```
Bevor ich loslege, brauche ich noch ein paar Infos:
- **Thema:** [fehlt/vorhanden]
- **Zielgruppe:** [fehlt/vorhanden]
- **Umfang:** [fehlt/vorhanden]
- **Footer:** DB InfraGO AG | [git user.name] | [Team?] | [Jahr]
- **Ablageort:** [fehlt/vorhanden]
- **Klassifizierung:** [fehlt] — Erlaubt: "DB Offen / DB Open", "DB Intern / DB internal",
"DB Vertraulich / DB confidential", oder leer (keine Anzeige).
⚠️ Dieser Skill darf nur für DB Offen, DB Intern und DB Vertraulich genutzt werden.
Optional:
- Hintergrundbild für die Titelfolie? (Ich schlage selbst ein passendes Bild aus den
10 mitgelieferten Bildern vor — basierend auf dem Thema. Du kannst das Vorgeschlagene
bestätigen, ein anderes wählen oder einen eigenen Pfad angeben.)
- Bestimmte Inhalte die rein müssen? (Tabellen, Zitate, Statements, Bild-Folien?)
```
WICHTIG: NIEMALS "Laut Skill muss ich..." oder "Der Skill verlangt..." sagen. Natürlich
kommunizieren.
### Schritt 2: Hintergrundbild für Titelfolie auswählen
Ohne dass der User explizit ein Bild nennt: Schau ins Thema und schlage GENAU EIN Bild
aus `BACKGROUND_IMAGES` vor (siehe `assets/db_infrago_pptx.py` oder
[references/asset-katalog.md](references/asset-katalog.md)). Sag dem User welches Bild und
warum.
Beispielzuordnungen:
- Architektur, Datenflüsse, Migration → `datenstroeme`
- Innovation, neue Konzepte, Ideen → `gluehbirne`
- Strategie, Vision, Digitalisierung → `weltkugel` oder `digital_transformation`
- Infrastruktur, Bahnbetrieb, Wartung → `gleisarbeiter`
- Performance, Geschwindigkeit, Go-Live → `ice_bahnsteig`
- Teamwork, Onboarding, Integration → `puzzle`
- Demos, Abnahme, Qualitätssicherung → `laptop_checkmark`
- Daten, Code, Netzwerk → `binaercode`
- Neutral / kein klares Thema → `ice_line` (ICE-Silhouette mit Sand→Türkis Gradient)
### Schritt 3: Gliederung vorschlagen
Folien-Struktur als Markdown-Liste vorschlagen, jeweils mit dem Layout-Funktionsnamen
in Klammern. Beispiel:
```
1. Titelfolie (add_titel_bild_schwarz mit "datenstroeme")
2. Agenda (add_inhaltsverzeichnis_weiss)
3. Ausgangslage (add_titel_und_inhalt)
4. Lösung (add_titel_und_2_inhalte)
5. Beispiel (add_text_und_bild_links)
6. Statement (add_statement_rot)
7. Ausblick (add_titel_und_inhalt)
8. Schluss (add_ende_bild mit "ice_bahnsteig")
```
Auf Bestätigung warten, BEVOR Code geschrieben wird.
### Schritt 4: Python-Skript generieren
**Pfadberechnung:** Das Helper-Modul `db_infrago_pptx.py` und die Vorlage liegen im
Skill-Ordner. Python kann daraus importieren wenn der Skill-Ordner im `sys.path` ist
oder das Modul kopiert wird.
**Empfohlener Ansatz:** Im generierten Skript am Anfang den Skill-Ordner zum `sys.path`
hinzufügen — dann kein Kopieren, immer auf der aktuellen Helper-Version. `SKILL_DIR`
zeigt auf den `assets/`-Ordner deiner Skill-Installation:
- Windows (user-level): `C:\Users\<dein-username>\.kiro\skills\pptx-infrago\assets`
- Windows (workspace): `<projekt>\.kiro\skills\pptx-infrago\assets`
- macOS / Linux (user-level): `~/.kiro/skills/pptx-infrago/assets`
- macOS / Linux (workspace): `<projekt>/.kiro/skills/pptx-infrago/assets`
```python
# -*- coding: utf-8 -*-
import sys
from pathlib import Path
# Skill-Ordner zum sys.path hinzufügen — Pfad an deine Installation anpassen
SKILL_DIR = Path.home() / ".kiro" / "skills" / "pptx-infrago" / "assets"
sys.path.insert(0, str(SKILL_DIR))
from db_infrago_pptx import (
open_deck, save, add_notes, background_image_path,
add_titel_bild_schwarz, add_inhaltsverzeichnis_weiss,
add_titel_und_inhalt, add_titel_und_2_inhalte,
add_text_und_bild_links, add_statement_rot, add_ende_bild,
)
FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026"
KLASSIFIZIERUNG = "DB Intern / DB internal" # oder "" wenn keine Anzeige gewünscht
prs = open_deck()
# Folie 1: Titel mit Hintergrundbild
slide = add_titel_bild_schwarz(
prs,
titel="Mein Thema",
untertitel="Untertitel der Präsentation",
bild=background_image_path("datenstroeme"),
kategorie="Strategie",
footer=FOOTER,
klassifizierung=KLASSIFIZIERUNG,
)
add_notes(slide, "Begrüßung, Vorstellung des Themas, Motivation.")
# Folie 2: Agenda
add_inhaltsverzeichnis_weiss(
prs,
titel="Agenda",
eintraege=["Ausgangslage", "Lösung", "Beispiel", "Statement", "Ausblick"],
footer=FOOTER,
klassifizierung=KLASSIFIZIERUNG,
)
# … weitere Folien …
# Folie n: Schluss
add_ende_bild(prs, titel="Vielen Dank.", bild=background_image_path("ice_bahnsteig"))
out = save(prs, r"C:\BA\projekt\folien.pptx")
print(f"Datei erzeugt: {out}")
```
**Dateiname:** `YYYY-MM-DD_thema-kebab-case.py` für das Skript,
`YYYY-MM-DD_thema-kebab-case.pptx` als Output.
**Speaker Notes:** Für jeden Inhalts-Slide Speaker-Notes via `add_notes(slide, "...")`
schreiben. Notes enthalten Stichpunkte für den Vortragenden — Details die nicht auf den
Slide passen, Erklärungen, Überleitung zur nächsten Folie.
**Schreibstrategie:**
- fsWrite für Header + Imports + erste 12 Folien (max ~50 Zeilen)
- fsAppend in Blöcken à max 40 Zeilen
- Letzter fsAppend: Schlussfolie + `save()`-Aufruf
- Anzahl der Blöcke vorher abschätzen
- NIEMALS die Datei komplett neu schreiben weil ein Append fehlschlug — gezielt mit
strReplace patchen
### Schritt 5: Skript ausführen und PPTX öffnen — IN DERSELBEN ANTWORT
Direkt nach dem letzten fsAppend (mit `save()`) — OHNE vorher "fertig" zu sagen:
1. **Skript ausführen:** `python C:\BA\{Ablageort}\{Dateiname}.py`
2. **Datei öffnen:** `Invoke-Item "C:\BA\{Ablageort}\{Dateiname}.pptx"` — einfach machen,
nicht nachfragen.
3. **Kurzer Hinweis:** Dem User mitteilen, was generiert wurde und wie er die Datei
nachbearbeiten kann (PowerPoint öffnet automatisch).
## Slide-Funktionen Übersicht
Volle API-Doku siehe [references/slide-typen.md](references/slide-typen.md). Mapping
Layout-Index → Funktion siehe [references/layout-katalog.md](references/layout-katalog.md).
| Anlass | Funktion |
|---|---|
| Titel mit Bild | `add_titel_bild_schwarz` / `_weiss` |
| Titel im Rahmen | `add_titel_rahmen` |
| Agenda / Inhaltsverzeichnis | `add_inhaltsverzeichnis_weiss` / `_rot` / `_bild_*` |
| Kapiteltrenner | `add_kapiteltrenner_weiss` / `_bild_*` |
| Standard-Inhaltsfolie | `add_titel_und_inhalt` |
| Zwei-Spalten-Inhalt | `add_titel_und_2_inhalte` |
| Text + Bild | `add_text_und_bild_links` / `_rechts` |
| Vollbild mit Titelzeile | `add_bild_mit_titel_schwarz` / `_weiss` |
| Nur Titel (für eigenes Layout) | `add_nur_titel` / `_grau` |
| Komplett leer | `add_leer` |
| Aussage groß | `add_statement_rot` / `_weiss` |
| Zitat | `add_zitat_rot` / `_weiss` |
| Schlussfolie Bild | `add_ende_bild` |
| Schlussfolie Rot | `add_ende_rot` |
| Schlussfolie Logo | `add_ende_logo` |
| Bild-Agenda | `add_bild_agenda` |
| **Tabelle (Türkis-Header)** | `add_tabelle` |
| **Daten und Fakten (Kennzahl groß)** | `add_daten_und_fakten` |
| **Zeitstrahl (n Stationen)** | `add_zeitstrahl` |
| **Prozessablauf (n Schritte)** | `add_prozessablauf` |
| **Piktogramm einfügen** | `add_pictogram` (86 Icons aus DB-Master) |
## Kreative Folien — wenn die Templates nicht reichen
Die 31 Layouts decken die häufigsten Fälle ab, sind aber ausdrücklich KEIN Korsett.
Für Diagramme, eigene Skizzen, freie Visualisierungen, Roadmaps, BPMN-Skizzen,
Architektur-Bilder usw. gibt es zwei Layouts, die genau dafür gemacht sind:
| Funktion | Was du bekommst | Wann |
|---|---|---|
| `add_nur_titel(prs, titel, footer)` | Folientitel oben + komplett freier Inhaltsbereich | Diagramme mit Titelzeile |
| `add_nur_titel_grau(prs, titel, footer)` | Wie oben, aber grauer Hintergrund | Visuelle Abgrenzung im Foliensatz |
| `add_leer(prs, footer)` | Komplett freie Folie (nur Footer-Slot) | Vollbild-Visualisierung, eigene Header-Position |
Auf diesen Folien gilt: alles ist erlaubt. Logo, Foliennummer und Footer werden vom
Master geerbt — du sparst dir nur die starre Bullet-Liste.
Typische Erweiterungen mit `python-pptx`:
```python
from pptx.util import Cm, Pt
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.dml.color import RGBColor
from db_infrago_pptx import add_nur_titel, DB_TURQUOISE_500, DB_RED
FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026"
slide = add_nur_titel(prs, "Architektur-Skizze", FOOTER)
# Box
box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
Cm(2), Cm(4), Cm(8), Cm(3))
box.fill.solid(); box.fill.fore_color.rgb = DB_TURQUOISE_500
box.text_frame.text = "Frontend"
# Pfeil zwischen Boxen
conn = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT,
Cm(10), Cm(5.5), Cm(14), Cm(5.5))
conn.line.color.rgb = DB_RED
# Eigenes Bild
slide.shapes.add_picture(r"C:\diagramme\flow.png",
left=Cm(2), top=Cm(8), width=Cm(20))
# Freies Textfeld
tb = slide.shapes.add_textbox(Cm(2), Cm(15), Cm(20), Cm(2))
tb.text_frame.text = "Hinweis: Skizze, kein finales Design."
```
Mehr Beispiele und Patterns: [references/slide-typen.md](references/slide-typen.md)
unter „Kreative Folien".
**Wichtig bei kreativen Folien:**
- DB-Farbpalette nutzen (`DB_TURQUOISE_500`, `DB_RED`, `DB_SAND` usw. aus dem Helper)
- Maße in `Cm()` oder `Emu()` — nicht in Pixeln
- Folie ist 33.87 × 19.05 cm groß
- Master-Elemente nicht überdecken (Logo oben rechts, Footer unten)
## Hintergrundbilder (10 Stück)
Verwendung:
```python
from db_infrago_pptx import background_image_path
add_titel_bild_weiss(prs, "Titel", bild=background_image_path("datenstroeme"))
```
Verfügbare Keys: `ice_line`, `laptop_checkmark`, `datenstroeme`, `gleisarbeiter`,
`weltkugel`, `ice_bahnsteig`, `gluehbirne`, `puzzle`, `digital_transformation`,
`binaercode`. Details in [references/asset-katalog.md](references/asset-katalog.md).
User kann auch eigene Bilder per Pfad angeben (statt `background_image_path("...")`
einfach `r"C:\pfad\zu\bild.jpg"`).
## Piktogrammbibliothek (86 SVG-Icons)
Aus dem DB InfraGO Master extrahiert — alle als monochrome SVG-Vektoren, die zur
Laufzeit in jede DB-Farbe eingefärbt werden können (Türkis, Rot, Schwarz, Weiß).
PowerPoint 2016+ rendert SVGs nativ — die Icons bleiben gestochen scharf bei jeder
Größe.
```python
from db_infrago_pptx import add_pictogram, list_pictograms, DB_TURQUOISE_500, DB_RED
from pptx.util import Cm
# Auf einer "Nur Titel"-Folie 4 Icons mit Beschriftung platzieren
slide = add_nur_titel(prs, "Vorteile", footer=FOOTER)
add_pictogram(slide, "haekchen", Cm(2), Cm(7), Cm(4), color=DB_TURQUOISE_500)
add_pictogram(slide, "uhr", Cm(9), Cm(7), Cm(4), color=DB_TURQUOISE_500)
add_pictogram(slide, "datenbank", Cm(16), Cm(7), Cm(4), color=DB_TURQUOISE_500)
add_pictogram(slide, "puzzleteile", Cm(23), Cm(7), Cm(4), color=DB_TURQUOISE_500)
# Verfügbare Keys auflisten
for key, descr in list_pictograms():
print(f" {key:30s} {descr}")
```
**Häufige Keys** (sortiert nach Anwendung):
- Bestätigung: `haekchen`, `volltreffer`, `pruefliste`, `klemmbrett`
- Negation: `schliessen`, `verbotsschild`, `nicht_zulaessig`
- Daten: `datenbank`, `cloud`, `cloudcomputing`, `balkendiagramm`,
`flussdiagramm`, `verzweigungsdiagramm`, `abwaertstrend-diagramm`
- Kommunikation: `chat`, `chatblase`, `e-mail`, `kommentar_like`, `kommentar_herz`
- Zeit: `uhr`, `tageskalender`, `flip-kalender`
- Aktionen: `wiedergabe`, `aktualisieren`, `herunterladen`, `uebertragen`
- Pfeile: `pfeil_nach_oben`, `pfeil_nach_unten`, `pfeil_nach_rechts`, `pfeil_kreis`,
diverse Drehpfeile
- Sonstiges: `puzzleteile`, `handschlag`, `aktenkoffer`, `lupe`, `informationen`,
`hilfe`, `fragezeichen`, `ausrufezeichen`, `management`, `vertrag`,
`gehaltsabrechnung`, `geschichte`, `blockchain`, `computer`, `browserfenster`
Vollständige Liste mit `list_pictograms()` oder direkt aus `PICTOGRAMS.keys()`.
**Farb-Override** ist optional — ohne `color`-Parameter bleibt das Icon in der
SVG-Default-Farbe (meist schwarz). Empfehlung für CI-konforme Slides:
`DB_TURQUOISE_500` als Akzent oder `DB_BLACK` für neutralen Look.
## Design-Guide (DB InfraGO)
Siehe [references/ci-referenz.md](references/ci-referenz.md). Wichtigste Regeln:
- Folienmaster nicht überschreiben — er bringt Logo, Footer-Slot, Foliennummer und
Farben automatisch mit.
- Schriften: `DB Neo Office Head` (Überschriften) und `DB Neo Office` (Fließtext) — auf
DB-Rechnern installiert. Der Helper setzt diese explizit, damit sie nicht über
System-Defaults wie Calibri ersetzt werden.
- DB Rot (#EC0016) = Akzentfarbe (Logo, Highlights), NICHT Hauptfarbe.
- Primärfarben: Türkis (#006E6B / #00A099) + Sand (#FCE3BA).
- Schriftfarbe: nur Schwarz oder Weiß.
- Max 57 Bullets pro Folie, max 2 Sätze pro Bullet (besser: Stichworte).
- Eine Kernaussage pro Folie — nicht mehrere Themen mischen.
- Tabellen: max 56 Zeilen sichtbar, sonst aufteilen.
- Speaker Notes für Details nutzen.
- Jede Folie muss in 3060 Sekunden erfassbar sein.
- 3-Akt-Struktur: Eröffnung → Hauptteil mit Trennern → Abschluss.
- NIEMALS nur Vorname im Footer — immer "DB InfraGO AG | Vollständiger Name | Team | Jahr".
## Voraussetzungen
`python-pptx` muss installiert sein:
```powershell
pip install python-pptx
```
## Referenz-Dateien
- [references/layout-katalog.md](references/layout-katalog.md) — alle 31 Layouts mit Index, Name, Platzhaltern, Geometrie
- [references/slide-typen.md](references/slide-typen.md) — Funktions-API mit Code-Beispielen
- [references/asset-katalog.md](references/asset-katalog.md) — Hintergrundbilder mit Empfehlungen
- [references/ci-referenz.md](references/ci-referenz.md) — Farben, Schriften, CI-Regeln