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.
441 lines
28 KiB
Python
441 lines
28 KiB
Python
"""Pusht Meilensteinplan 12 Monate als Confluence-Seite 27."""
|
|
import urllib.request, json, ssl, urllib.parse
|
|
from pathlib import Path
|
|
|
|
secrets = {}
|
|
with open("project-audit/.secrets", "r", encoding="utf-8-sig") as f:
|
|
for line in f:
|
|
if "=" in line and not line.startswith("#"):
|
|
k, v = line.strip().split("=", 1)
|
|
secrets[k.strip()] = v.strip()
|
|
|
|
TOKEN = secrets.get("CONFLUENCE_TOKEN", "")
|
|
BASE = "https://arija-confluence.jaas.service.deutschebahn.com/rest/api"
|
|
SPACE = "BES"
|
|
PARENT = "581013135"
|
|
TITLE = "27. Meilensteinplan 12 Monate (Jun 2026 - Mai 2027)"
|
|
|
|
ctx = ssl.create_default_context()
|
|
ctx.check_hostname = False
|
|
ctx.verify_mode = ssl.CERT_NONE
|
|
|
|
html = """<h1>Meilensteinplan pathOS — 12 Monate</h1>
|
|
<p><strong>Stand:</strong> 2026-05-12 | <strong>Status:</strong> ENTWURF<br/>
|
|
<strong>Vision:</strong> pathOS als Kernplattform eines integrierten InfraGO-Bestellportals<br/>
|
|
<strong>Prioritäten:</strong> Stabilität → Regulatorik → Kunden-Features<br/>
|
|
<strong>Kapazität:</strong> ~400 Issues/Monat (alle Teams), ~35 Personen</p>
|
|
|
|
<ac:structured-macro ac:name="info"><ac:rich-text-body>
|
|
<p><strong>4 Phasen, 13 Meilensteine:</strong> Stabilisieren → Normalbetrieb + Regulatorik → Skalieren + Reorg → Integrieren + Vision</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h2>Grafische Übersicht: Timeline</h2>
|
|
|
|
<table style="width:100%; border-collapse:collapse; font-size:12px;">
|
|
<tr style="background:#f0f0f0;">
|
|
<th style="width:18%; padding:4px; border:1px solid #ccc;">Meilenstein</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jun</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jul</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Aug</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Sep</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Okt</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Nov</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Dez</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Jan</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Feb</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Mär</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Apr</th>
|
|
<th style="width:6.8%; padding:4px; border:1px solid #ccc; text-align:center;">Mai</th>
|
|
</tr>
|
|
"""
|
|
html += """<tr style="background:#fff3e0; font-weight:bold;">
|
|
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 1: STABILISIEREN</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M1: Spring Boot 4 ⚠</td>
|
|
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M2: Bug-Rate <25%</td>
|
|
<td style="background:#ff9800; border:1px solid #ccc;"></td>
|
|
<td style="background:#ff9800; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M3: Führungswechsel</td>
|
|
<td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
"""
|
|
html += """<tr style="background:#e3f2fd; font-weight:bold;">
|
|
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 2: NORMALBETRIEB + REGULATORIK</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M4: SL Silber Plus ⚠</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M5: Abrechnung TTT</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#ff9800; border:1px solid #ccc;"></td>
|
|
<td style="background:#ff9800; border:1px solid #ccc;"></td>
|
|
<td style="background:#ff9800; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M6: NAÄ produktiv</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#4caf50; border:1px solid #ccc;"></td>
|
|
<td style="background:#4caf50; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M7: OpsDev formiert</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
|
|
<td style="background:#7b1fa2; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
"""
|
|
html += """<tr style="background:#e8f5e9; font-weight:bold;">
|
|
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 3: SKALIEREN + REORG</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M8: FplJ 28 ⚠</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#e53935; border:1px solid #ccc;"></td>
|
|
<td style="background:#e53935; border:1px solid #ccc;"></td>
|
|
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M9: Rechnungsbeginn TTT ⚠</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#e53935; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M10: Reorg abgeschlossen</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
|
|
<td style="background:#7b1fa2; border:1px solid #ccc;"></td>
|
|
<td style="background:#7b1fa2; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
"""
|
|
html += """<tr style="background:#fce4ec; font-weight:bold;">
|
|
<td style="padding:2px 4px; border:1px solid #ccc;" colspan="13">Phase 4: INTEGRIEREN + VISION</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M11: TrassenOrder-Integr.</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M12: Plattform-Vision</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#1565c0; border:1px solid #ccc;"></td>
|
|
<td style="background:#1565c0; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding:4px; border:1px solid #ccc;">M13: Kundenzufriedenheit</td>
|
|
<td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td><td style="border:1px solid #ccc;"></td>
|
|
<td style="background:#4caf50; border:1px solid #ccc;"></td>
|
|
<td style="background:#4caf50; border:1px solid #ccc;"></td>
|
|
<td style="background:#4caf50; border:1px solid #ccc; text-align:center; color:white;">★</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><strong>Legende:</strong> ★ = Deadline | ⚠ = Harte externe Deadline |
|
|
<span style="background:#e53935; color:white; padding:2px 6px;">MUSS</span>
|
|
<span style="background:#ff9800; color:white; padding:2px 6px;">HOCH</span>
|
|
<span style="background:#4caf50; color:white; padding:2px 6px;">Feature</span>
|
|
<span style="background:#1565c0; color:white; padding:2px 6px;">Strategie</span>
|
|
<span style="background:#7b1fa2; color:white; padding:2px 6px;">Reorg</span></p>
|
|
"""
|
|
html += """
|
|
<h2>Phase 1: STABILISIEREN (Jun – Jul 2026)</h2>
|
|
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
|
|
<p>Technische Schulden abbauen, Hypercare beenden, Führungswechsel vorbereiten</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M1: Spring Boot 4 abgeschlossen (30. Jun 2026) ⚠</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>SV, AV, IFP auf Spring Boot 4</td><td>CIB (Saurav, Hans-Henning)</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>CI, AV-Trasse auf Spring Boot 4</td><td>Zero (O2CZERO-7043)</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>Alle Services auf Java 21</td><td>Alle</td><td>Teilweise</td></tr>
|
|
<tr><td>Regressionstests nach Upgrade</td><td>QA + Teams</td><td>Offen</td></tr>
|
|
</table>
|
|
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
|
|
<p><strong>Risiko:</strong> EOL 3.5 ist Juni 2026 — kein Security-Support mehr danach. MUSS-Termin.</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M2: Bug-Rate Portal unter 25% (31. Jul 2026)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Entkopplung Zuglaufpunkte/Zugcharakteristik (Hauptursache)</td><td>404</td><td>Offen</td></tr>
|
|
<tr><td>Fehlermeldungen-Konzept umsetzen</td><td>404</td><td>Offen</td></tr>
|
|
<tr><td>E2E-Tests (Playwright) für Top-10-Flows</td><td>404</td><td>Offen</td></tr>
|
|
<tr><td>Testumgebung mit TPN dauerhaft verfügbar</td><td>404 + OPs</td><td>Offen</td></tr>
|
|
</table>
|
|
|
|
<h3>M3: Führungswechsel + Hypercare-Ende (Jul 2026)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Neue Führung eingesetzt</td><td>Management</td><td>Offen</td></tr>
|
|
<tr><td>Hypercare-Kriterien definiert und erfüllt</td><td>PO + BO</td><td>Offen</td></tr>
|
|
<tr><td>Übergang zu Normalbetrieb dokumentiert</td><td>Alle</td><td>Offen</td></tr>
|
|
<tr><td>Support-Prozesse definiert (Eskalation, SLAs)</td><td>BSSUPPORT + OPs</td><td>Offen</td></tr>
|
|
</table>
|
|
"""
|
|
html += """
|
|
<h2>Phase 2: NORMALBETRIEB + REGULATORIK (Aug – Nov 2026)</h2>
|
|
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
|
|
<p>Vertragliche Pflichten erfüllen, Abrechnung stabilisieren, Team-Reorg starten</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M4: Service Level Silber Plus (31. Aug 2026) ⚠</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Netcool-Anbindung produktiv</td><td>OPs</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>Monitoring-Konzept abgeschlossen</td><td>OPs + Zero</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>Disaster-Recovery-Test 3 bestanden</td><td>OPs</td><td>🔄 Validierung</td></tr>
|
|
<tr><td>Deployment-Automatisierung (Smoketests)</td><td>OPs/DevOps</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>Secret-Rotation implementiert</td><td>OPs</td><td>Offen</td></tr>
|
|
<tr><td>Kubernetes-Namespaces umgestellt</td><td>OPs</td><td>🔄 In Arbeit</td></tr>
|
|
</table>
|
|
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
|
|
<p><strong>Risiko:</strong> Vertragsverletzung bei Versäumnis. Keine Verhandlungsmasse.</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M5: Abrechnung TTT produktionsreif (31. Okt 2026)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>20h-Zug Abrechnung (TTTSOL-2149) entblockt</td><td>CIB</td><td>❌ Blocked</td></tr>
|
|
<tr><td>Zugtrasse mit Umleitung ohne VT-Wechsel (TTTSOL-2147)</td><td>CIB</td><td>Offen</td></tr>
|
|
<tr><td>Abrechnung fremde Infrastruktur (TTTSOL-2148)</td><td>CIB</td><td>Offen</td></tr>
|
|
<tr><td>Neue Zugnummer Umleitungsfall (TTTSOL-2035)</td><td>CIB</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>VDV-Erweiterung für AC Trasse (strategisch)</td><td>CIB + Zero</td><td>Offen</td></tr>
|
|
<tr><td>Alle 41 Abrechnungs-Tickets priorisiert</td><td>CIB PO</td><td>Offen</td></tr>
|
|
</table>
|
|
<ac:structured-macro ac:name="note"><ac:rich-text-body>
|
|
<p>Rechnungsbeginn TTT ist Januar 2027. Bis Oktober müssen kritische Fälle gelöst sein. Nov/Dez = Buffer für Regressionstests.</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M6: NAÄ implizite Annahme produktiv (30. Sep 2026)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>O2CCIB-6931 assigned und implementiert</td><td>CIB</td><td>⚠ Geschoben</td></tr>
|
|
<tr><td>Prozess-Design mit Fachbereich abgestimmt</td><td>CIB BA</td><td>Offen</td></tr>
|
|
<tr><td>E2E-Test NAÄ-Szenario</td><td>CIB + 404</td><td>Offen</td></tr>
|
|
</table>
|
|
|
|
<h3>M7: Team-Reorg Phase 1 — OpsDev formiert (30. Sep 2026)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>OpsDev-Team definiert (~6 Personen)</td><td>Management + Leads</td><td>Offen</td></tr>
|
|
<tr><td>OpsDev-Lead benannt</td><td>Management</td><td>Offen</td></tr>
|
|
<tr><td>Jan Lubenow Wissenstransfer (50% abgeschlossen)</td><td>DevOps</td><td>⚠ Kritisch</td></tr>
|
|
<tr><td>Bug-Triage-Prozess definiert</td><td>OpsDev-Lead</td><td>Offen</td></tr>
|
|
<tr><td>OPs-Rotation beendet (feste Zuordnung)</td><td>Management</td><td>Offen</td></tr>
|
|
</table>
|
|
"""
|
|
html += """
|
|
<h2>Phase 3: SKALIEREN + REORG (Dez 2026 – Feb 2027)</h2>
|
|
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
|
|
<p>Fahrplanwechsel absichern, Team-Umstellung abschließen, Plattform-Denken etablieren</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M8: Fahrplanwechsel FplJ 28 (Dez 2026) ⚠</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>GelV-Erweiterungen (TTT-Meilenstein)</td><td>CIB + Zero</td><td>Offen</td></tr>
|
|
<tr><td>OTN-Vergabe Fpl 2027 (TTTSOL-1683)</td><td>CIB</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>ujBau Funktionalität</td><td>Alle</td><td>🔄 In Arbeit</td></tr>
|
|
<tr><td>FplJ-28-spezifische Validierungen getestet</td><td>QA</td><td>Offen</td></tr>
|
|
<tr><td>Daten-Partitionierung (Performance)</td><td>CIB/Zero</td><td>Offen</td></tr>
|
|
</table>
|
|
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
|
|
<p><strong>Risiko:</strong> Fahrplanwechsel ist harter externer Termin. Kein Verschieben möglich.</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M9: Rechnungsbeginn TTT (Jan 2027) ⚠</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Alle kritischen Abrechnungsfälle gelöst (aus M5)</td><td>CIB</td><td>Abhängig von M5</td></tr>
|
|
<tr><td>Rechnungslauf erfolgreich getestet (Staging)</td><td>CIB + QA</td><td>Offen</td></tr>
|
|
<tr><td>Monitoring für Abrechnungsfehler aktiv</td><td>OPs/OpsDev</td><td>Offen</td></tr>
|
|
<tr><td>Fallback-Prozess bei Abrechnungsfehlern definiert</td><td>CIB + BO</td><td>Offen</td></tr>
|
|
</table>
|
|
|
|
<h3>M10: Team-Reorg abgeschlossen (31. Jan 2027)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>2 fachliche Teams formiert ("Bestellen" + "Verarbeiten")</td><td>Management</td><td>Offen</td></tr>
|
|
<tr><td>Service-Ownership klar zugeordnet</td><td>Team-Leads</td><td>Offen</td></tr>
|
|
<tr><td>PO-Struktur definiert</td><td>Management</td><td>Offen</td></tr>
|
|
<tr><td>Wissenstransfer abgeschlossen</td><td>Alle</td><td>Offen</td></tr>
|
|
<tr><td>Erste Sprints in neuer Struktur erfolgreich</td><td>Teams</td><td>Offen</td></tr>
|
|
<tr><td>Metriken definiert (Bug-Rate, Durchlaufzeit, Deploy-Freq.)</td><td>BO + Leads</td><td>Offen</td></tr>
|
|
</table>
|
|
<ac:structured-macro ac:name="note"><ac:rich-text-body>
|
|
<p>Reorg NACH Fahrplanwechsel abschließen — nicht während des kritischen Zeitraums umbauen.</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
"""
|
|
html += """
|
|
<h2>Phase 4: INTEGRIEREN + VISION (Feb – Mai 2027)</h2>
|
|
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Ziel</ac:parameter><ac:rich-text-body>
|
|
<p>TrassenOrder-Learnings integrieren, Plattform-Architektur vorbereiten, Kundenzufriedenheit steigern</p>
|
|
</ac:rich-text-body></ac:structured-macro>
|
|
|
|
<h3>M11: TrassenOrder-Integration definiert (28. Feb 2027)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>TrassenOrder Livegang evaluiert (Q4 2026)</td><td>TraPo + BO</td><td>Offen</td></tr>
|
|
<tr><td>Abgrenzung pathOS/TrassenOrder dokumentiert</td><td>POs + Architektur</td><td>Offen</td></tr>
|
|
<tr><td>API-Vertrag zwischen pathOS und TrassenOrder</td><td>CIB/Zero + TraPo</td><td>Offen</td></tr>
|
|
<tr><td>Entscheidung: GelV bei pathOS oder TraPo?</td><td>BO + Management</td><td>Offen</td></tr>
|
|
<tr><td>Übernahme-Szenario TraPo → pathOS-Team bewertet</td><td>Management</td><td>Offen</td></tr>
|
|
</table>
|
|
|
|
<h3>M12: Plattform-Architektur-Vision (31. März 2027)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Architektur-Vision "Integriertes Bestellportal" dokumentiert</td><td>Architektur + BO</td><td>Offen</td></tr>
|
|
<tr><td>Kernkomponenten als integrierbare Module identifiziert</td><td>Architektur</td><td>Offen</td></tr>
|
|
<tr><td>Schnittstellen-Strategie (API-First) definiert</td><td>Architektur + Teams</td><td>Offen</td></tr>
|
|
<tr><td>Roadmap für Anlage + Nebenleistungen (nächste 12M)</td><td>BO + POs</td><td>Offen</td></tr>
|
|
<tr><td>TPN-Ablösung Zeitplan konkretisiert</td><td>POs + Kunden</td><td>Offen</td></tr>
|
|
</table>
|
|
|
|
<h3>M13: Kundenzufriedenheit messbar verbessert (Mai 2027)</h3>
|
|
<table>
|
|
<tr><th>Was</th><th>Wer</th><th>Status</th></tr>
|
|
<tr><td>Bug-Rate Portal unter 15% (von 33%)</td><td>Team "Bestellen"</td><td>Offen</td></tr>
|
|
<tr><td>Vorprüfung Portal produktiv</td><td>CIB + 404</td><td>Offen</td></tr>
|
|
<tr><td>Expertenmodus verfügbar</td><td>404</td><td>Offen</td></tr>
|
|
<tr><td>Übersichtsseite Vorgänge live</td><td>404</td><td>Offen</td></tr>
|
|
<tr><td>Kundenfeedback-Loop etabliert</td><td>PO + UX</td><td>Offen</td></tr>
|
|
<tr><td>NPS oder CSAT Baseline gemessen</td><td>PO + BO</td><td>Offen</td></tr>
|
|
</table>
|
|
"""
|
|
html += """
|
|
<h2>Kritischer Pfad & Abhängigkeiten</h2>
|
|
<table>
|
|
<tr><th>Pfad</th><th>Abhängigkeit</th><th>Konsequenz bei Verzögerung</th></tr>
|
|
<tr><td>M1 → M4</td><td>Spring Boot 4 muss fertig sein für SL Silber+ (Security-Compliance)</td><td>Vertragsverletzung</td></tr>
|
|
<tr><td>M5 → M9</td><td>Abrechnung muss bis Okt stehen für Rechnungsbeginn Jan</td><td>Falsche Rechnungen an Kunden</td></tr>
|
|
<tr><td>M3 → M7 → M10</td><td>Führungswechsel ermöglicht Reorg, Reorg nach FplJ abschließen</td><td>Produktivitätsverlust</td></tr>
|
|
<tr><td>M8 (extern)</td><td>Fahrplanwechsel ist Fixpunkt — alles andere drumherum planen</td><td>Fahrplan gefährdet</td></tr>
|
|
</table>
|
|
|
|
<h2>Risiko-Matrix</h2>
|
|
<table>
|
|
<tr><th>Risiko</th><th>Wahrscheinlichkeit</th><th>Impact</th><th>Mitigation</th></tr>
|
|
<tr style="background:#ffcdd2;"><td>Abrechnung bleibt blocked (20h-Zug)</td><td>HOCH</td><td>KRITISCH</td><td>Eskalation an TTT-Programm, Workaround</td></tr>
|
|
<tr style="background:#ffcdd2;"><td>Bug-Rate 404 steigt weiter</td><td>HOCH</td><td>HOCH</td><td>Entkopplung Zuglaufpunkte priorisieren</td></tr>
|
|
<tr><td>SL Silber+ Deadline gerissen</td><td>Mittel</td><td>HOCH</td><td>Früh mit UKA abstimmen, Teilabnahme?</td></tr>
|
|
<tr><td>Reorg destabilisiert Teams</td><td>Mittel</td><td>HOCH</td><td>Sukzessiv, nicht Big Bang. Nach FplJ.</td></tr>
|
|
<tr><td>Jan Lubenow fällt aus (SPOF)</td><td>Niedrig</td><td>KRITISCH</td><td>Wissenstransfer ab sofort priorisieren</td></tr>
|
|
<tr><td>TrassenOrder scheitert/pivotiert</td><td>Mittel</td><td>MITTEL</td><td>pathOS bleibt autark, GelV intern weiter</td></tr>
|
|
<tr><td>Spring Boot 4 nicht rechtzeitig</td><td>Niedrig</td><td>KRITISCH</td><td>Fokus, keine Ablenkung</td></tr>
|
|
</table>
|
|
|
|
<h2>Reorg-Zeitplan (sukzessiv)</h2>
|
|
<table>
|
|
<tr><th>Zeitraum</th><th>Schritt</th><th>Risiko</th></tr>
|
|
<tr><td><strong>Jul 2026</strong></td><td>Führungswechsel, Vision kommunizieren</td><td>Niedrig</td></tr>
|
|
<tr><td><strong>Aug-Sep 2026</strong></td><td>OpsDev-Team formieren (aus OPs + DevOps-Teilen)</td><td>Mittel</td></tr>
|
|
<tr><td><strong>Okt 2026</strong></td><td>OPs-Rotation beenden, feste Zuordnung</td><td>Niedrig</td></tr>
|
|
<tr><td><strong>Nov 2026</strong></td><td>Fachliche Teams vorbereiten (Service-Mapping, Wissenstransfer)</td><td>Mittel</td></tr>
|
|
<tr><td><strong>Jan 2027</strong></td><td>Umstellung auf 2 fachliche Teams ("Bestellen" + "Verarbeiten")</td><td>Hoch</td></tr>
|
|
<tr><td><strong>Feb 2027</strong></td><td>Erste Sprints in neuer Struktur, Nachjustierung</td><td>Mittel</td></tr>
|
|
<tr><td><strong>März 2027</strong></td><td>TrassenOrder-Team-Integration bewerten</td><td>Mittel</td></tr>
|
|
</table>
|
|
|
|
<h2>Metriken zur Erfolgsmessung</h2>
|
|
<table>
|
|
<tr><th>Metrik</th><th>Baseline (Mai 2026)</th><th>Ziel Sep 2026</th><th>Ziel Jan 2027</th><th>Ziel Mai 2027</th></tr>
|
|
<tr><td>Bug-Rate Portal</td><td>33%</td><td>25%</td><td>20%</td><td><15%</td></tr>
|
|
<tr><td>Bug-Rate Gesamt</td><td>20%</td><td>18%</td><td>15%</td><td><12%</td></tr>
|
|
<tr><td>Deployment-Frequenz</td><td>? (messen!)</td><td>1x/Woche</td><td>2x/Woche</td><td>Täglich möglich</td></tr>
|
|
<tr><td>Mean Time to Recovery</td><td>? (messen!)</td><td><4h</td><td><2h</td><td><1h</td></tr>
|
|
<tr><td>Offene Highest-Tickets</td><td>8+</td><td><5</td><td><3</td><td>0</td></tr>
|
|
<tr><td>SPOF-Index (>30%)</td><td>2 (Jan, Steven)</td><td>1</td><td>0</td><td>0</td></tr>
|
|
<tr><td>Kundenzufriedenheit</td><td>Nicht gemessen</td><td>Baseline</td><td>+10 Pkt</td><td>+20 Pkt</td></tr>
|
|
</table>
|
|
|
|
<h2>Offene Entscheidungen</h2>
|
|
<table>
|
|
<tr><th>#</th><th>Entscheidung</th><th>Deadline</th><th>Wer</th></tr>
|
|
<tr><td>1</td><td>Wer wird neue Führung?</td><td>Jun 2026</td><td>Management</td></tr>
|
|
<tr><td>2</td><td>OpsDev-Lead: Intern oder extern?</td><td>Jul 2026</td><td>Management</td></tr>
|
|
<tr><td>3</td><td>SV-Monolith: Aufteilen oder einem Team zuordnen?</td><td>Okt 2026</td><td>Architektur + BO</td></tr>
|
|
<tr><td>4</td><td>PO-Struktur: 1 pro Team oder übergreifend?</td><td>Nov 2026</td><td>BO</td></tr>
|
|
<tr><td>5</td><td>TrassenOrder: Eigenes Team oder Integration?</td><td>Feb 2027</td><td>BO + Management</td></tr>
|
|
<tr><td>6</td><td>GelV-Ownership: pathOS oder TraPo?</td><td>Feb 2027</td><td>BO</td></tr>
|
|
<tr><td>7</td><td>Nächste Domäne nach Trasse (Anlage? Nebenleistungen?)</td><td>März 2027</td><td>BO + Strategie</td></tr>
|
|
</table>
|
|
|
|
<hr/>
|
|
<p><em>Erstellt im Rahmen des pathOS Portfolio-Audits. Kontakt: Andre Knie</em></p>
|
|
"""
|
|
|
|
# Push to Confluence
|
|
def api_request(url, method="GET", data=None):
|
|
req = urllib.request.Request(url, method=method)
|
|
req.add_header("Authorization", f"Bearer {TOKEN}")
|
|
req.add_header("Content-Type", "application/json")
|
|
if data:
|
|
req.data = json.dumps(data).encode("utf-8")
|
|
return json.loads(urllib.request.urlopen(req, context=ctx, timeout=30).read().decode("utf-8"))
|
|
|
|
# Check if page exists
|
|
search_url = f"{BASE}/content?spaceKey={SPACE}&title={urllib.parse.quote(TITLE)}&type=page"
|
|
req = urllib.request.Request(search_url)
|
|
req.add_header("Authorization", f"Bearer {TOKEN}")
|
|
resp = urllib.request.urlopen(req, context=ctx, timeout=30)
|
|
search_data = json.loads(resp.read().decode("utf-8"))
|
|
|
|
if search_data.get("results"):
|
|
# Update existing page
|
|
page_id = search_data["results"][0]["id"]
|
|
ver_url = f"{BASE}/content/{page_id}?expand=version"
|
|
req2 = urllib.request.Request(ver_url)
|
|
req2.add_header("Authorization", f"Bearer {TOKEN}")
|
|
ver_data = json.loads(urllib.request.urlopen(req2, context=ctx, timeout=30).read().decode("utf-8"))
|
|
version = ver_data["version"]["number"] + 1
|
|
|
|
body = json.dumps({
|
|
"version": {"number": version},
|
|
"title": TITLE,
|
|
"type": "page",
|
|
"body": {"storage": {"value": html, "representation": "storage"}}
|
|
}).encode("utf-8")
|
|
req3 = urllib.request.Request(f"{BASE}/content/{page_id}", method="PUT", data=body)
|
|
req3.add_header("Authorization", f"Bearer {TOKEN}")
|
|
req3.add_header("Content-Type", "application/json")
|
|
result = json.loads(urllib.request.urlopen(req3, context=ctx, timeout=30).read().decode("utf-8"))
|
|
print(f"Aktualisiert: https://arija-confluence.jaas.service.deutschebahn.com/pages/viewpage.action?pageId={result['id']}")
|
|
else:
|
|
# Create new page
|
|
body = json.dumps({
|
|
"type": "page",
|
|
"title": TITLE,
|
|
"space": {"key": SPACE},
|
|
"ancestors": [{"id": PARENT}],
|
|
"body": {"storage": {"value": html, "representation": "storage"}}
|
|
}).encode("utf-8")
|
|
req3 = urllib.request.Request(f"{BASE}/content", method="POST", data=body)
|
|
req3.add_header("Authorization", f"Bearer {TOKEN}")
|
|
req3.add_header("Content-Type", "application/json")
|
|
result = json.loads(urllib.request.urlopen(req3, context=ctx, timeout=30).read().decode("utf-8"))
|
|
print(f"Erstellt: https://arija-confluence.jaas.service.deutschebahn.com/pages/viewpage.action?pageId={result['id']}")
|