Files
ankn a5f8fb49ab 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.
2026-06-30 20:39:52 +02:00

2613 lines
185 KiB
PowerShell

<#
.SYNOPSIS
Pusht pathOS-Analyse-Ergebnisse als Unterseiten nach Confluence
.DESCRIPTION
Erstellt Unterseiten unter der Seite "Analyse pathOS" (ID: 581013135)
Kompatibel mit PowerShell 5.1
.USAGE
powershell -ExecutionPolicy Bypass -File ".\project-audit\scripts\confluence-push.ps1"
#>
$ConfluenceUrl = "https://arija-confluence.jaas.service.deutschebahn.com"
$SpaceKey = "BES"
$ParentPageId = "581013135"
$ApiBase = "$ConfluenceUrl/rest/api"
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$ProjectDir = Split-Path -Parent $ScriptDir
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Write-Host "============================================================"
Write-Host " pathOS Analyse -> Confluence Push"
Write-Host "============================================================"
Write-Host " Ziel: $ConfluenceUrl/spaces/$SpaceKey/pages/$ParentPageId"
Write-Host ""
# Token aus .secrets laden (falls vorhanden)
$SecretsPath = Join-Path $ScriptDir "..\.secrets"
$PAT = $null
if (Test-Path $SecretsPath) {
Get-Content $SecretsPath | ForEach-Object {
if ($_ -match "^CONFLUENCE_TOKEN=(.+)$") {
$val = $Matches[1].Trim()
if ($val -ne "HIER_TOKEN_EINTRAGEN") { $PAT = $val }
}
}
}
if (-not $PAT) { $PAT = Read-Host "Confluence PAT" }
$Headers = @{ "Authorization" = "Bearer $PAT"; "Content-Type" = "application/json" }
function Safe-String($val) {
if ($null -eq $val) { return "" }
return [string]$val
}
function HtmlEncode($text) {
if ($null -eq $text) { return "" }
return [System.Security.SecurityElement]::Escape($text)
}
# Umlaute als HTML-Entities ersetzen (PS5.1-sicher)
function Fix-Umlauts($html) {
if ($null -eq $html -or $html -eq "") { return $html }
# Schritt 1: Englische/technische Woerter schuetzen
$Protect = @(
'Israel','Michael','Raphael','Emmanuel','Manuel','Daniel','Samuel',
'Maurer','Enabler','enabler','Container','container','Cluster','cluster',
'User','user','Tracing','Staging','Logging','Alerting','Monitoring',
'Deployment','deployment','Security','security','Recovery','Discovery',
'Delivery','Pipeline','pipeline','Release','release',
'Performance','performance','Interface','interface',
'Service','service','Feature','feature','Issue','issue',
'value','true','blue','Due','due','Queue','queue',
'Unique','unique','Continue','continue',
'Funnel','Tunnel','tunnel','Buildpacks','Dockerfile',
'OpenSearch','Gherkin','Kubernetes','Helmfile','Renovate',
'Operate','Template','template','Tasklist',
'Smoke','smoke','Analyse','analyse','Analysis',
'Baseline','baseline','Namespace','namespace',
'Codebase','Database','database','Rescue','rescue',
'Oire','oire','Oire','Detailanalyse','detailanalyse',
'Unteranalyse','unteranalyse'
)
foreach ($w in $Protect) { $html = $html.Replace($w, "PROTECT_$w") }
# Schritt 2: Personen-Namen zuerst (exakt)
$html = $html.Replace('Hoerpel', 'H&ouml;rpel')
$html = $html.Replace('Ruecker', 'R&uuml;cker')
$html = $html.Replace('Koehler', 'K&ouml;hler')
$html = $html.Replace('Goendoer', 'G&ouml;nd&ouml;r')
# Schritt 3: ss-Ligaturen
$html = $html.Replace('Massnahme', 'Ma&szlig;nahme')
$html = $html.Replace('massnahme', 'ma&szlig;nahme')
$html = $html.Replace('Groesse', 'Gr&ouml;&szlig;e')
$html = $html.Replace('groesse', 'gr&ouml;&szlig;e')
$html = $html.Replace('gleichmaessig', 'gleichm&auml;&szlig;ig')
$html = $html.Replace('regelmaessig', 'regelm&auml;&szlig;ig')
$html = $html.Replace('schliessen', 'schlie&szlig;en')
$html = $html.Replace('Schliessen', 'Schlie&szlig;en')
# Schritt 4: ue-Muster
$html = $html.Replace('Uebersicht', '&Uuml;bersicht')
$html = $html.Replace('uebersicht', '&uuml;bersicht')
$html = $html.Replace('Ueberblick', '&Uuml;berblick')
$html = $html.Replace('ueberblick', '&uuml;berblick')
$html = $html.Replace('Uebergreifend', '&Uuml;bergreifend')
$html = $html.Replace('uebergreifend', '&uuml;bergreifend')
$html = $html.Replace('Ueberwachung', '&Uuml;berwachung')
$html = $html.Replace('ueberwachung', '&uuml;berwachung')
$html = $html.Replace('Uebernahme', '&Uuml;bernahme')
$html = $html.Replace('Ueberarbeitung', '&Uuml;berarbeitung')
$html = $html.Replace('Ueber', '&Uuml;ber')
$html = $html.Replace('ueber', '&uuml;ber')
$html = $html.Replace('Pruefung', 'Pr&uuml;fung')
$html = $html.Replace('pruefung', 'pr&uuml;fung')
$html = $html.Replace('Pruef', 'Pr&uuml;f')
$html = $html.Replace('pruef', 'pr&uuml;f')
$html = $html.Replace('fuehrung', 'f&uuml;hrung')
$html = $html.Replace('Fuehrung', 'F&uuml;hrung')
$html = $html.Replace('Ausfuehr', 'Ausf&uuml;hr')
$html = $html.Replace('ausfuehr', 'ausf&uuml;hr')
$html = $html.Replace('Einfuehr', 'Einf&uuml;hr')
$html = $html.Replace('einfuehr', 'einf&uuml;hr')
$html = $html.Replace('Verfueg', 'Verf&uuml;g')
$html = $html.Replace('verfueg', 'verf&uuml;g')
$html = $html.Replace('Abkuerz', 'Abk&uuml;rz')
$html = $html.Replace('abkuerz', 'abk&uuml;rz')
$html = $html.Replace('Verschluess', 'Verschl&uuml;ss')
$html = $html.Replace('verschluess', 'verschl&uuml;ss')
$html = $html.Replace('Schluess', 'Schl&uuml;ss')
$html = $html.Replace('schluess', 'schl&uuml;ss')
$html = $html.Replace('Verknuepf', 'Verkn&uuml;pf')
$html = $html.Replace('verknuepf', 'verkn&uuml;pf')
$html = $html.Replace('Unterstuetz', 'Unterst&uuml;tz')
$html = $html.Replace('unterstuetz', 'unterst&uuml;tz')
$html = $html.Replace('Stueck', 'St&uuml;ck')
$html = $html.Replace('stueck', 'st&uuml;ck')
$html = $html.Replace('Luecke', 'L&uuml;cke')
$html = $html.Replace('luecke', 'l&uuml;cke')
$html = $html.Replace('Rueckweg', 'R&uuml;ckweg')
$html = $html.Replace('rueckweg', 'r&uuml;ckweg')
$html = $html.Replace('Rueckmeld', 'R&uuml;ckmeld')
$html = $html.Replace('rueckmeld', 'r&uuml;ckmeld')
$html = $html.Replace('Frueh', 'Fr&uuml;h')
$html = $html.Replace('frueh', 'fr&uuml;h')
$html = $html.Replace('wuerde', 'w&uuml;rde')
$html = $html.Replace('Wuerde', 'W&uuml;rde')
$html = $html.Replace('muessen', 'm&uuml;ssen')
$html = $html.Replace('Muessen', 'M&uuml;ssen')
$html = $html.Replace('muesste', 'm&uuml;sste')
$html = $html.Replace('Muesste', 'M&uuml;sste')
$html = $html.Replace('koennte', 'k&ouml;nnte')
$html = $html.Replace('Koennte', 'K&ouml;nnte')
$html = $html.Replace('Nuetzlich', 'N&uuml;tzlich')
$html = $html.Replace('nuetzlich', 'n&uuml;tzlich')
$html = $html.Replace('fuer ', 'f&uuml;r ')
$html = $html.Replace('Fuer ', 'F&uuml;r ')
# Schritt 5: oe-Muster
$html = $html.Replace('Loesung', 'L&ouml;sung')
$html = $html.Replace('loesung', 'l&ouml;sung')
$html = $html.Replace('Erhoeh', 'Erh&ouml;h')
$html = $html.Replace('erhoeh', 'erh&ouml;h')
$html = $html.Replace('noetig', 'n&ouml;tig')
$html = $html.Replace('Noetig', 'N&ouml;tig')
$html = $html.Replace('moeglich', 'm&ouml;glich')
$html = $html.Replace('Moeglich', 'M&ouml;glich')
$html = $html.Replace('geloest', 'gel&ouml;st')
$html = $html.Replace('hoechst', 'h&ouml;chst')
$html = $html.Replace('Hoechst', 'H&ouml;chst')
$html = $html.Replace('koennen', 'k&ouml;nnen')
$html = $html.Replace('Koennen', 'K&ouml;nnen')
$html = $html.Replace('Zugehoer', 'Zugeh&ouml;r')
$html = $html.Replace('zugehoer', 'zugeh&ouml;r')
$html = $html.Replace('gehoer', 'geh&ouml;r')
$html = $html.Replace('Behoerd', 'Beh&ouml;rd')
$html = $html.Replace('behoerd', 'beh&ouml;rd')
# Schritt 6: ae-Muster
$html = $html.Replace('Aenderung', '&Auml;nderung')
$html = $html.Replace('aenderung', '&auml;nderung')
$html = $html.Replace('Aelteste', '&Auml;lteste')
$html = $html.Replace('aelteste', '&auml;lteste')
$html = $html.Replace('anfaellig', 'anf&auml;llig')
$html = $html.Replace('Anfaellig', 'Anf&auml;llig')
$html = $html.Replace('faellig', 'f&auml;llig')
$html = $html.Replace('faehig', 'f&auml;hig')
$html = $html.Replace('traeger', 'tr&auml;ger')
$html = $html.Replace('Traeger', 'Tr&auml;ger')
$html = $html.Replace('laenger', 'l&auml;nger')
$html = $html.Replace('Laenger', 'L&auml;nger')
$html = $html.Replace('erklaer', 'erkl&auml;r')
$html = $html.Replace('klaer', 'kl&auml;r')
$html = $html.Replace('Klaer', 'Kl&auml;r')
$html = $html.Replace('verstaerk', 'verst&auml;rk')
$html = $html.Replace('Verstaend', 'Verst&auml;nd')
$html = $html.Replace('verstaend', 'verst&auml;nd')
$html = $html.Replace('Abhaengig', 'Abh&auml;ngig')
$html = $html.Replace('abhaengig', 'abh&auml;ngig')
$html = $html.Replace('haeufig', 'h&auml;ufig')
$html = $html.Replace('Haeufig', 'H&auml;ufig')
$html = $html.Replace('laeuft', 'l&auml;uft')
$html = $html.Replace('Laeuft', 'L&auml;uft')
$html = $html.Replace('waere', 'w&auml;re')
$html = $html.Replace('Waere', 'W&auml;re')
$html = $html.Replace('schaerfen', 'sch&auml;rfen')
$html = $html.Replace('Schaerfen', 'Sch&auml;rfen')
$html = $html.Replace('aufraeumen', 'aufr&auml;umen')
$html = $html.Replace('Aufraeumen', 'Aufr&auml;umen')
$html = $html.Replace('Verlaenger', 'Verl&auml;nger')
$html = $html.Replace('verlaenger', 'verl&auml;nger')
$html = $html.Replace('Naechst', 'N&auml;chst')
$html = $html.Replace('naechst', 'n&auml;chst')
$html = $html.Replace('schaetz', 'sch&auml;tz')
$html = $html.Replace('Schaetz', 'Sch&auml;tz')
$html = $html.Replace('Qualitaet', 'Qualit&auml;t')
$html = $html.Replace('qualitaet', 'qualit&auml;t')
$html = $html.Replace('Aktivitaet', 'Aktivit&auml;t')
$html = $html.Replace('Stabilitaet', 'Stabilit&auml;t')
$html = $html.Replace('Komplexitaet', 'Komplexit&auml;t')
$html = $html.Replace('Prioritaet', 'Priorit&auml;t')
# Generisches -taet Suffix (Universitaet, Kapazitaet, etc.)
$html = $html -replace '([a-z])taet\b', '$1t&auml;t'
# Schritt 7: Schutz aufheben
$html = $html.Replace('PROTECT_', '')
return $html
}
function Create-Or-Update-Page {
param([string]$Title, [string]$HtmlBody, [string]$ParentId)
# Umlaute automatisch konvertieren
$HtmlBody = Fix-Umlauts $HtmlBody
# Pruefen ob Seite existiert
$SearchUri = "$ApiBase/content?spaceKey=$SpaceKey&title=$([Uri]::EscapeDataString($Title))&type=page"
try {
$SearchResp = Invoke-WebRequest -Uri $SearchUri -Headers $Headers -UseBasicParsing -ErrorAction Stop
$SearchData = $SearchResp.Content | ConvertFrom-Json
} catch {
Write-Host " FEHLER bei Suche: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
if ($SearchData.results -and $SearchData.results.Count -gt 0) {
# Seite existiert - pruefen ob Inhalt sich geaendert hat
$PageId = $SearchData.results[0].id
try {
$VerResp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId`?expand=version,body.storage" -Headers $Headers -UseBasicParsing -ErrorAction Stop
$VerData = $VerResp.Content | ConvertFrom-Json
$Version = $VerData.version.number + 1
$CurrentBody = ""
if ($VerData.body -and $VerData.body.storage) { $CurrentBody = $VerData.body.storage.value }
# Vergleich: HTML-normalisiert (Tags, Entities, Whitespace)
$NormCurrent = ($CurrentBody -replace '<[^>]+>' -replace '&\w+;' -replace '\s+', ' ').Trim()
$NormNew = ($HtmlBody -replace '<[^>]+>' -replace '&\w+;' -replace '\s+', ' ').Trim()
if ($NormCurrent -eq $NormNew) {
Write-Host " Keine Aenderung (ID: $PageId)" -ForegroundColor DarkGray
return $PageId
}
} catch {
$Version = $SearchData.results[0].version.number + 1
}
Write-Host " Aktualisiere (ID: $PageId, Version: $Version)..." -NoNewline
$Body = @{
version = @{ number = $Version }
title = $Title
type = "page"
body = @{
storage = @{
value = $HtmlBody
representation = "storage"
}
}
} | ConvertTo-Json -Depth 10
try {
$Resp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId" -Method Put -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing -ErrorAction Stop
Write-Host " OK" -ForegroundColor Green
return ($Resp.Content | ConvertFrom-Json).id
} catch {
Write-Host " FEHLER: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
} else {
# Neue Seite erstellen
Write-Host " Erstelle neue Seite..." -NoNewline
$Body = @{
type = "page"
title = $Title
space = @{ key = $SpaceKey }
ancestors = @(@{ id = $ParentId })
body = @{
storage = @{
value = $HtmlBody
representation = "storage"
}
}
} | ConvertTo-Json -Depth 10
try {
$Resp = Invoke-WebRequest -Uri "$ApiBase/content" -Method Post -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing -ErrorAction Stop
Write-Host " OK" -ForegroundColor Green
return ($Resp.Content | ConvertFrom-Json).id
} catch {
Write-Host " FEHLER: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
}
}
# ============================================================
# SEITENINHALTE DEFINIEREN
# ============================================================
Write-Host ""
Write-Host ">> Teste Verbindung..." -ForegroundColor Yellow
try {
$TestResp = Invoke-WebRequest -Uri "$ApiBase/content/$ParentPageId" -Headers $Headers -UseBasicParsing -ErrorAction Stop
$TestData = $TestResp.Content | ConvertFrom-Json
Write-Host " Zielseite gefunden: $($TestData.title)" -ForegroundColor Green
} catch {
Write-Host " Verbindung fehlgeschlagen: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
# --- Seite 1: Uebersicht ---
Write-Host ""
Write-Host ">> Seite 1: Uebersicht und Gesamtbild" -ForegroundColor Yellow
$OverviewHtml = @"
<h2>pathOS Portfolio-Audit - Uebersicht</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | <strong>Basis:</strong> 167 GitLab-Projekte, 143 Confluence-Seiten, Runbook (arc42)</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body><p>Dieses Dokument wird iterativ erweitert. Aktuelle Phase: Domain Discovery + Technische Erstanalyse.</p></ac:rich-text-body></ac:structured-macro>
<h3>Was ist pathOS?</h3>
<p>pathOS (ehemals &quot;Bestellsystem&quot;) ist die Nachfolgeplattform des <strong>Trassenportal Netz (TPN)</strong> - dem seit 2002 produktiven System zur Trassenbestellung bei DB InfraGO. pathOS modernisiert den gesamten Bestellprozess fuer Zugtrassen.</p>
<p>EVU-Kunden bestellen ueber pathOS Trassen (Fahrwege) auf dem deutschen Schienennetz. Das System verarbeitet Anmeldungen, koordiniert mit dem Fahrplan, erstellt Angebote und verwaltet Vertraege.</p>
<h3>Zahlen auf einen Blick</h3>
<table>
<tr><th>Kennzahl</th><th>Wert</th></tr>
<tr><td>GitLab-Projekte gesamt</td><td>167</td></tr>
<tr><td>Davon aktiv (&lt; 6 Monate)</td><td>~109</td></tr>
<tr><td>Davon archiviert</td><td>32</td></tr>
<tr><td>Untergruppen</td><td>9 (APIs, Apps, Docs, Infra, Libraries, Mocks, QA, Sandbox, Tools)</td></tr>
<tr><td>Hauptsprache</td><td>Java / Spring Boot (47 Projekte)</td></tr>
<tr><td>Build-System</td><td>Maven (83 Projekte)</td></tr>
<tr><td>Containerisiert</td><td>46 Projekte mit Dockerfile</td></tr>
<tr><td>Umgebungen</td><td>17+ (DEV, ABN, PROD Stages)</td></tr>
<tr><td>Externe Schnittstellen</td><td>15+</td></tr>
<tr><td>Kafka-Topics</td><td>25+</td></tr>
<tr><td>ADRs</td><td>75</td></tr>
<tr><td>Confluence-Seiten (pathOS Space)</td><td>143+</td></tr>
</table>
<h3>Technologie-Stack</h3>
<table>
<tr><th>Schicht</th><th>Technologie</th></tr>
<tr><td>Frontend</td><td>Angular, TypeScript, SCSS</td></tr>
<tr><td>Backend</td><td>Java, Spring Boot</td></tr>
<tr><td>Workflow</td><td>Camunda 8 (BPMN)</td></tr>
<tr><td>Messaging</td><td>Apache Kafka (AWS MSK)</td></tr>
<tr><td>Datenbank</td><td>PostgreSQL (AWS RDS), OpenSearch</td></tr>
<tr><td>Identity</td><td>Keycloak (Test), DB WebSSO / Entra ID (Prod)</td></tr>
<tr><td>Container</td><td>Docker, Kubernetes (AWS EKS via CNP)</td></tr>
<tr><td>CI/CD</td><td>GitLab CI, Helm, Helmfile, Cloud Native Buildpacks</td></tr>
<tr><td>Monitoring</td><td>Prometheus, Grafana, Talo (Logging), Tempo (Tracing)</td></tr>
<tr><td>Security</td><td>Trivy, OWASP ZAP, Fortify, SonarQube, DefectDojo, Renovate</td></tr>
<tr><td>Datenformat</td><td>TAF/TAP TSI (EU-Standard), TDM (internes Modell)</td></tr>
</table>
<h3>Teams</h3>
<table>
<tr><th>Team</th><th>Verantwortung</th></tr>
<tr><td>Team Zero</td><td>TAF/TAP Schnittstellen, Stammdaten (Common Interface, Stammdaten-Bereitstellung)</td></tr>
<tr><td>Team 404</td><td>Bestellportal (Portal UI, Portal Middleware)</td></tr>
<tr><td>Team CIB</td><td>Prozesse und Backend (Steuerung Vertrieb, Auftrags-Verwaltung)</td></tr>
<tr><td>Team STeam</td><td>Infrastruktur, DevOps, Security (CI/CD, Deployment, Keycloak, Monitoring)</td></tr>
<tr><td>Team BSSUPPORT</td><td>2nd Level Support</td></tr>
</table>
"@
$Page1Id = Create-Or-Update-Page -Title "1. Uebersicht und Gesamtbild" -HtmlBody $OverviewHtml -ParentId $ParentPageId
# --- Seite 2: Problemfelder ---
Write-Host ""
Write-Host ">> Seite 2: Identifizierte Problemfelder" -ForegroundColor Yellow
$ProblemsHtml = @"
<h2>Identifizierte Problemfelder</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Basierend auf GitLab-Inventar, Confluence-Analyse und Runbook</p>
<h3>P1: Deployment-Komplexitaet (KRITISCH)</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<ul>
<li>47 Infra-Projekte (28% aller Repos) - hoechster Anteil aller Gruppen</li>
<li>17+ Umgebungen mit jeweils eigenem Kafka-Cluster, DB-Instanz, Keycloak</li>
<li>5+ separate Keycloak-Projekte (Image, Setup, Deployment, Scripts, Theme, Post-Config)</li>
<li>Manuelle Release-Orchestrierung ueber MS Teams-Kanal</li>
<li>Deployment als &quot;ein einziges Kubernetes-Deployment&quot; ist Ziel, aber noch nicht erreicht</li>
<li>Keine automatisierten Smoketests nach Deployment (erst seit 03/2026 in Arbeit)</li>
<li>Deployment-Dauer auf TTT-ITU/TTT-KTU zu hoch (Confluence: Verbesserung Deploymentvorgehen)</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
<h3>P2: Fehlende Dokumentation (HOCH)</h3>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<ul>
<li>~60% der GitLab-Projekte ohne Beschreibung</li>
<li>Runbook wird gerade neu erstellt (Technische Roadmap Item 10.1/10.2)</li>
<li>Vorstudie von 2019 teilweise veraltet</li>
<li>Mehrere Runbook-Abschnitte mit &quot;TBD&quot; markiert</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
<h3>P3: Technische Schulden (HOCH)</h3>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<ul>
<li>Spring Boot 3.5 EOL Juni 2026 - Upgrade auf 4.0.5 laeuft aktiv ueber alle Teams (Portal fertig, CI/SV/AV in Arbeit)</li>
<li>AppMesh AWS EOL 2026 - Alternative noch nicht umgesetzt (O2CBS-555)</li>
<li>Full-Table-Scans in Auftrags-Verwaltung-Trasse (Roadmap 7.1)</li>
<li>Bidirektionale Abhaengigkeit CI/TTK - SV (ADR-56, in Arbeit)</li>
<li>SOAP als Altlast in Common Interface (TAF/TAP TSI Vorgabe)</li>
<li>30 von 53 Roadmap-Items haben noch kein Ticket</li>
<li>CI/CD Pipeline-Komplexitaet zu hoch (pipeship + CNB)</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
<h3>P4: Altsystem-Abhaengigkeit (HOCH)</h3>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<ul>
<li>TPN (seit 2002) laeuft parallel - Kommunikation ueber Kafka</li>
<li>Datensynchronisation TPN &lt;&gt; pathOS noetig (Roadmap 5.4)</li>
<li>TTTneo als Uebergangsloesung mit komplexer Umgebungsverschaltung</li>
<li>Gleiche Ressourcen/Mitarbeiter fuer beide Systeme</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
<h3>P5: Team-Struktur und Wissen (MITTEL)</h3>
<ul>
<li>DevOps-Know-How wird gerade aufgebaut (Runbook Kap. 8.36)</li>
<li>Rollierendes Deployment-Verantwortungssystem erst seit 06/2025</li>
<li>Keine 1:1 Zuordnung Teams zu Subdomaenen (Runbook: bewusste Entscheidung)</li>
<li>Umfangreicher DevOps-Wissensbedarf dokumentiert (K8s, Helm, Kafka, AWS, Postgres, Netcool)</li>
</ul>
<h3>Positiv</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<ul>
<li>Klare Gruppenstruktur in GitLab (APIs, Apps, Infra, Libraries, QA, Tools)</li>
<li>Security-Tooling umfassend (Trivy, OWASP ZAP, Fortify, SonarQube, DefectDojo, Renovate)</li>
<li>75 Architecture Decision Records - gute Entscheidungsdokumentation</li>
<li>Aktive Entwicklung - die meisten Kernprojekte in den letzten Tagen aktualisiert</li>
<li>Detailliertes Runbook (arc42) vorhanden</li>
<li>Disaster-Recovery-Konzept ausgearbeitet</li>
<li>Patch- und Schwachstellenmanagement etabliert</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
"@
$Page2Id = Create-Or-Update-Page -Title "2. Identifizierte Problemfelder" -HtmlBody $ProblemsHtml -ParentId $ParentPageId
# --- Seite 3: Technische Roadmap Zusammenfassung ---
Write-Host ""
Write-Host ">> Seite 3: Technische Roadmap 2026 - Zusammenfassung" -ForegroundColor Yellow
$RoadmapHtml = @"
<h2>Technische Roadmap 2026 - Zusammenfassung</h2>
<p><strong>53 technische Themen</strong>, davon 17 MUSS (UKA/GELV), 24 MUSS 2026, 12 SOLL.</p>
<p>Status: 7 in Arbeit, 16 zu erledigen (mit Ticket), 30 ohne Ticket.</p>
<h3>Kritischste Themen (MUSS UKA/GELV)</h3>
<table>
<tr><th>#</th><th>Thema</th><th>Status</th><th>PI</th></tr>
<tr><td>1.1</td><td>Umstellung Kubernetes-Cluster/Namespaces</td><td>In Arbeit</td><td>PI 40</td></tr>
<tr><td>1.2</td><td>Anbindung Netcool (Betriebsueberwachung)</td><td>Funnel</td><td>PI 40/41</td></tr>
<tr><td>1.3</td><td>Laufzeit-Artefakte aus ECR statt Artifactory</td><td>Funnel</td><td>PI 41</td></tr>
<tr><td>2.1</td><td>Vereinfachung Staging</td><td>Kein Ticket</td><td>PI 41</td></tr>
<tr><td>3.1</td><td>Security-Groups auf egress-Ebene</td><td>Kein Ticket</td><td>PI 41</td></tr>
<tr><td>3.2</td><td>Konzept Secret-Rotation</td><td>Kein Ticket</td><td>PI 41</td></tr>
<tr><td>4.1</td><td>Umsetzung Monitoring-Konzept</td><td>In Arbeit</td><td>PI 40-42</td></tr>
<tr><td>5.1</td><td>Camunda Point-in-Time-Recovery</td><td>Validierung</td><td>PI 39/40</td></tr>
<tr><td>5.2</td><td>Desaster-Recovery-Test 3</td><td>Validierung</td><td>PI 39/40</td></tr>
<tr><td>5.3</td><td>Notfall-Recovery-Test (kompletter Neuaufbau)</td><td>Kein Ticket</td><td>PI 40/41</td></tr>
<tr><td>6.1</td><td>ADR 72: Anbindung TraPo und C&amp;R</td><td>Analysis</td><td>PI 40/41</td></tr>
<tr><td>7.1</td><td>AV-Trasse: Full-Table-Scans vermeiden</td><td>Kein Ticket</td><td>PI 41</td></tr>
<tr><td>8.1</td><td>Upgrade Spring Boot 4 (EOL 3.5: Juni 2026!)</td><td>Funnel</td><td>PI 40</td></tr>
<tr><td>8.2</td><td>Upgrade Camunda 8.8</td><td>Kein Ticket</td><td>PI 41</td></tr>
<tr><td>9.1</td><td>Weiterentwicklung Testvorgehen (ADR-70)</td><td>In Arbeit</td><td>PI 40/41</td></tr>
<tr><td>9.2</td><td>LuP Neo: Neu-Konzeption</td><td>Analysis</td><td>PI 41</td></tr>
<tr><td>10.1</td><td>Ausarbeitung Runbook</td><td>In Arbeit</td><td>PI 41</td></tr>
</table>
"@
$Page3Id = Create-Or-Update-Page -Title "3. Technische Roadmap 2026 - Zusammenfassung" -HtmlBody $RoadmapHtml -ParentId $ParentPageId
# --- Seite 4: GitLab Projektlandschaft ---
Write-Host ""
Write-Host ">> Seite 4: GitLab Projektlandschaft" -ForegroundColor Yellow
$GitlabHtml = @"
<h2>GitLab Projektlandschaft</h2>
<p><strong>167 Projekte</strong> in 9 Untergruppen. Generiert am $(Get-Date -Format 'yyyy-MM-dd').</p>
<h3>Gruppenstruktur</h3>
<table>
<tr><th>Gruppe</th><th>Anzahl</th><th>Beschreibung</th></tr>
<tr><td>apis/</td><td>37</td><td>API-Definitionen, OpenAPI-Specs, Datenmodelle</td></tr>
<tr><td>apps/</td><td>19</td><td>Laufende Services und Anwendungen</td></tr>
<tr><td>docs/</td><td>7</td><td>Dokumentation, Runbook, Schemas</td></tr>
<tr><td>infra/</td><td>47</td><td>Deployment, CI/CD, Helm Charts, Keycloak, Monitoring</td></tr>
<tr><td>libraries/</td><td>7</td><td>Shared Libraries (core-components, logging, signatures)</td></tr>
<tr><td>mocks/</td><td>11</td><td>Mock-Services fuer Tests</td></tr>
<tr><td>qa/</td><td>15</td><td>Tests (System, Integration, Performance, Security)</td></tr>
<tr><td>sandbox/</td><td>13</td><td>Experimente, PoCs, Pipeline-Tests</td></tr>
<tr><td>tools/</td><td>10</td><td>Hilfswerkzeuge (Camunda, Kafka, Migration)</td></tr>
</table>
<h3>Sprachen-Verteilung</h3>
<table>
<tr><th>Sprache</th><th>Projekte</th></tr>
<tr><td>Java</td><td>47</td></tr>
<tr><td>Dockerfile</td><td>46</td></tr>
<tr><td>Shell</td><td>22</td></tr>
<tr><td>Python</td><td>15</td></tr>
<tr><td>Gherkin</td><td>14</td></tr>
<tr><td>JavaScript/TypeScript</td><td>10</td></tr>
</table>
<h3>Status-Verteilung</h3>
<table>
<tr><th>Status</th><th>Anzahl</th></tr>
<tr><td>Aktiv (letzte 6 Monate)</td><td>~109</td></tr>
<tr><td>Inaktiv (6M+)</td><td>21</td></tr>
<tr><td>Inaktiv (1Y+)</td><td>5</td></tr>
<tr><td>Archiviert</td><td>32</td></tr>
</table>
"@
$Page4Id = Create-Or-Update-Page -Title "4. GitLab Projektlandschaft" -HtmlBody $GitlabHtml -ParentId $ParentPageId
# --- Seite 5: Abkuerzungsverzeichnis ---
Write-Host ""
Write-Host ">> Seite 5: Abkuerzungsverzeichnis" -ForegroundColor Yellow
$GlossarHtml = @"
<h2>Abkuerzungsverzeichnis pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Alphabetisch sortiert</p>
<table>
<tr><th>Abkuerzung</th><th>Bedeutung</th></tr>
<tr><td>AC</td><td>AbrechnungsCockpit Trasse</td></tr>
<tr><td>ADR</td><td>Architecture Decision Record</td></tr>
<tr><td>AV / AVT</td><td>Auftrags-Verwaltung-Trasse</td></tr>
<tr><td>BaDiFa</td><td>Bahndigitale Fahrplanung</td></tr>
<tr><td>BEP</td><td>TrassenProduktPruefenUndErgaenzen (Bestelleingangspruefung)</td></tr>
<tr><td>BNetzA</td><td>Bundesnetzagentur</td></tr>
<tr><td>CI</td><td>Common Interface (TAF/TAP TSI)</td></tr>
<tr><td>CNP</td><td>Cloud Native Platform</td></tr>
<tr><td>CRD</td><td>Common Reference Data (RNE)</td></tr>
<tr><td>EIU</td><td>Eisenbahninfrastrukturunternehmen</td></tr>
<tr><td>ERegG</td><td>Eisenbahnregulierungsgesetz</td></tr>
<tr><td>EVU</td><td>Eisenbahnverkehrsunternehmen</td></tr>
<tr><td>GELV</td><td>Gelegenheitsverkehr (Meilenstein)</td></tr>
<tr><td>GFD-Z</td><td>Gelegenheitsfahrdienstleistung Zentral</td></tr>
<tr><td>IFP</td><td>Integrierte FahrPlanbearbeitung</td></tr>
<tr><td>IM</td><td>Infrastruktur-Manager (M15)</td></tr>
<tr><td>ISGW</td><td>Internet Service Gateway</td></tr>
<tr><td>KDV</td><td>Kundendatenverwaltung (CRM)</td></tr>
<tr><td>KOMBau</td><td>Kommunikationsplattform Bau</td></tr>
<tr><td>NEP</td><td>Netzfahrplan-Erstellungsprozess (NEP1 = erste Anmeldephase, NEP2 = zweite)</td></tr>
<tr><td>NAÄ</td><td>Netzausgeloeste Aenderungen (Aenderungen an Trassen durch den Infrastrukturbetreiber)</td></tr>
<tr><td>NuR</td><td>Nutzer- und Rechteverwaltung (Einfachbahn)</td></tr>
<tr><td>NVN</td><td>Neuverkehrsnachlass (Rabatt-Tool)</td></tr>
<tr><td>PI</td><td>Program Increment (SAFe)</td></tr>
<tr><td>PMW</td><td>Portal MiddleWare</td></tr>
<tr><td>PzP</td><td>Punkt-zu-Punkt Rabatte</td></tr>
<tr><td>RNE</td><td>RailNetEurope</td></tr>
<tr><td>RuT-K</td><td>Rechnerunterstuetzte Trassenkonstruktion</td></tr>
<tr><td>SIPS</td><td>Security Infrastructure Proxy Service (Access Proxy)</td></tr>
<tr><td>SNB</td><td>Schienennetz-Benutzungsbedingungen (Network Statement)</td></tr>
<tr><td>SV</td><td>Steuerung Vertrieb (Camunda-Prozess)</td></tr>
<tr><td>TADEF</td><td>TAF/TAP DEFinition (Connector)</td></tr>
<tr><td>TDM</td><td>Trassen-Daten-Modell (internes Datenformat)</td></tr>
<tr><td>TPN</td><td>Trassenportal Netz (Altsystem seit 2002)</td></tr>
<tr><td>TPS</td><td>Trassenpreis-Service (Rabatt)</td></tr>
<tr><td>TTT</td><td>TAF/TAP TSI (Telematics Applications for Freight/Passengers - Technical Specification for Interoperability)</td></tr>
<tr><td>TTTneo</td><td>Neue Umsetzungsstrategie TTT (Trassenmanagement)</td></tr>
<tr><td>ujBau</td><td>Unterjaehriger Baufahrplan</td></tr>
<tr><td>UKA</td><td>Unternehmenskritische Anwendung</td></tr>
<tr><td>VDV</td><td>Vertragsdaten-Verteiler</td></tr>
</table>
"@
$Page5Id = Create-Or-Update-Page -Title "5. Abkuerzungsverzeichnis" -HtmlBody $GlossarHtml -ParentId $ParentPageId
# --- Seite 6: Architekturskizze ---
Write-Host ""
Write-Host ">> Seite 6: Architekturskizze" -ForegroundColor Yellow
# draw.io XML einlesen
$DrawioPath = Join-Path $ProjectDir "diagrams\pathos-architektur.drawio"
$DrawioXml = ""
if (Test-Path $DrawioPath) {
$DrawioXml = Get-Content $DrawioPath -Raw -Encoding UTF8
# XML-Sonderzeichen fuer Confluence Storage escapen
$DrawioXml = $DrawioXml -replace '&(?!amp;|lt;|gt;|quot;|apos;)', '&amp;'
Write-Host " draw.io Datei geladen ($($DrawioXml.Length) Zeichen)"
} else {
Write-Host " WARNUNG: draw.io Datei nicht gefunden: $DrawioPath" -ForegroundColor Yellow
}
$ArchHtml = @"
<h2>Architekturskizze pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Systemkontext nach C4-Methodik</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Das Diagramm zeigt den Systemkontext von pathOS mit allen internen Komponenten und externen Schnittstellen. Farbkodierung: Gruen = Portal/Benutzer, Gelb = Prozesse/Fahrplan, Blau = Backend/Daten, Rot = TAF-TAP/Altsystem, Orange = Infrastruktur.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Systemkontext</h3>
<table>
<tr>
<td style="width:50%;vertical-align:top;">
<h4>Interne Komponenten (pathOS)</h4>
<table>
<tr><th>Komponente</th><th>Technologie</th><th>Funktion</th></tr>
<tr><td style="background:#d5e8d4;">Portal UI</td><td>Angular</td><td>Benutzeroberflaeche fuer EVU und Kundenbetreuer</td></tr>
<tr><td style="background:#d5e8d4;">Portal Middleware</td><td>Spring Boot</td><td>Backend fuer Portal, Validierung, Autorisierung</td></tr>
<tr><td style="background:#fff2cc;">Steuerung Vertrieb</td><td>Camunda 8</td><td>Workflow-Engine, orchestriert den Bestellprozess</td></tr>
<tr><td style="background:#f8cecc;">Common Interface</td><td>Spring Boot, SOAP</td><td>TAF/TAP TSI Schnittstelle fuer EVU-Systeme</td></tr>
<tr><td style="background:#dae8fc;">Auftrags-Verwaltung</td><td>Spring Boot</td><td>Speicherung und Bereitstellung von Auftragsdaten</td></tr>
<tr><td style="background:#dae8fc;">Kundendaten-Bereitstellung</td><td>Spring Boot</td><td>Import und Bereitstellung von CRM-Kundendaten</td></tr>
<tr><td style="background:#dae8fc;">Stammdaten-Bereitstellung</td><td>Spring Boot</td><td>Import und Bereitstellung von IM-Stammdaten</td></tr>
<tr><td style="background:#dae8fc;">Rabattnummern-Bereitstellung</td><td>Spring Boot</td><td>NVN, PzP, Elfen Rabattdaten</td></tr>
<tr><td style="background:#f5f5f5;">IFP-Connector</td><td>Spring Boot</td><td>Kafka-Adapter zu TPN/IFP</td></tr>
<tr><td style="background:#f5f5f5;">TAF/TAP-TDM-Konverter</td><td>Spring Boot</td><td>Konvertierung TAF/TAP XML zu TDM JSON</td></tr>
<tr><td style="background:#f5f5f5;">Vertragsdaten-Verteiler</td><td>Spring Boot</td><td>Kafka-basierte Weiterleitung an Stationsportal</td></tr>
<tr><td style="background:#f5f5f5;">Archivierungsservice</td><td>Spring Boot</td><td>Archivierung bei AC Trasse</td></tr>
<tr><td style="background:#f5f5f5;">TBV-Absicherung-Konverter</td><td>Spring Boot</td><td>Tunnelbegegnungsverbot-Pruefung</td></tr>
</table>
</td>
<td style="width:50%;vertical-align:top;">
<h4>Externe Systeme</h4>
<table>
<tr><th>System</th><th>Protokoll</th><th>Funktion</th></tr>
<tr><td style="background:#f8cecc;">TPN (Altsystem)</td><td>Kafka (MSK)</td><td>Parallelbetrieb, Produktions-/Vertriebsauftraege</td></tr>
<tr><td style="background:#fff2cc;">BaDiFa</td><td>REST</td><td>Fahrplankonstruktion, Kapazitaetsbuchung</td></tr>
<tr><td style="background:#fff2cc;">BEP</td><td>REST</td><td>Bestelleingangspruefung</td></tr>
<tr><td style="background:#dae8fc;">AC Trasse</td><td>REST</td><td>Preise, Abrechnung, Archivierung</td></tr>
<tr><td style="background:#dae8fc;">Infrastruktur-Manager</td><td>REST</td><td>Betriebsstellen, Strecken, Stammdaten</td></tr>
<tr><td style="background:#dae8fc;">KDV (CRM)</td><td>REST</td><td>Kundenstammdaten</td></tr>
<tr><td style="background:#d5e8d4;">NuR / DB WebSSO</td><td>OIDC / REST</td><td>Authentifizierung und Autorisierung</td></tr>
<tr><td style="background:#dae8fc;">NVN-Tool</td><td>REST</td><td>Neuverkehrsnachlass-Rabatte</td></tr>
<tr><td style="background:#dae8fc;">Stationsportal</td><td>Kafka</td><td>Vertragsdaten-Konsument</td></tr>
<tr><td style="background:#dae8fc;">KOMBau</td><td>Kafka</td><td>Kommunikation Bau</td></tr>
<tr><td style="background:#f8cecc;">EVU-Systeme</td><td>SOAP/XML</td><td>TAF/TAP Common Interfaces</td></tr>
<tr><td style="background:#d5e8d4;">Click&amp;Ride</td><td>REST</td><td>Vereinfachte Gelegenheitsverkehr-Bestellung</td></tr>
<tr><td style="background:#dae8fc;">GeoServer</td><td>WMS/WFS</td><td>Kartendarstellung</td></tr>
<tr><td style="background:#dae8fc;">TBV</td><td>Kafka</td><td>Tunnelbegegnungsverbot</td></tr>
<tr><td style="background:#dae8fc;">RNE / CRD</td><td>Internet</td><td>Europaeische Referenzdaten</td></tr>
</table>
</td>
</tr>
</table>
<h3>Infrastruktur</h3>
<table>
<tr><th>Dienst</th><th>Technologie</th><th>Details</th></tr>
<tr><td>Container-Orchestrierung</td><td>AWS EKS via CNP</td><td>Mehrere Cluster (DEV, ABN, PROD)</td></tr>
<tr><td>Messaging</td><td>Apache Kafka (AWS MSK)</td><td>12+ Cluster, 25+ Topics</td></tr>
<tr><td>Datenbank</td><td>PostgreSQL (AWS RDS)</td><td>3 Cluster in PROD (SV, AV, Rest)</td></tr>
<tr><td>Suchengine</td><td>OpenSearch</td><td>Fuer Camunda Operate/Tasklist/Zeebe</td></tr>
<tr><td>Identity</td><td>Keycloak (Test) / DB WebSSO (Prod)</td><td>OIDC, Entra ID</td></tr>
<tr><td>CI/CD</td><td>GitLab CI, Helm, Helmfile</td><td>167 Repositories</td></tr>
<tr><td>Monitoring</td><td>Prometheus, Grafana, Talo, Tempo</td><td>Metriken, Logging, Tracing</td></tr>
</table>
<h3>Datenfluss: Trassenbestellung (vereinfacht)</h3>
<ol>
<li>EVU erstellt <strong>Train</strong>-Objekt (Planungsphase, Portal oder API)</li>
<li>Train wird in <strong>PathRequests</strong> aufgesplittet (Anmeldung)</li>
<li><strong>Steuerung Vertrieb</strong> orchestriert: BEP-Pruefung, Fahrplanauftrag an BaDiFa</li>
<li>BaDiFa erstellt <strong>Path</strong>-Objekte, sendet <strong>PathDetailsMessages</strong></li>
<li>AC Trasse berechnet <strong>Trassenpreis</strong></li>
<li>Angebot wird dem EVU praesentiert (Portal oder Common Interface)</li>
<li>EVU nimmt an: <strong>ProduktVertrag</strong> wird erstellt</li>
<li>Vertragsdaten werden an Stationsportal, AC Trasse, Archiv verteilt</li>
</ol>
"@
$Page6Id = Create-Or-Update-Page -Title "6. Architekturskizze" -HtmlBody $ArchHtml -ParentId $ParentPageId
# --- Seite 7: Projektfortschritt ---
Write-Host ""
Write-Host ">> Seite 7: Projektfortschritt" -ForegroundColor Yellow
$ProgressHtml = @"
<h2>Projektfortschritt - pathOS Portfolio-Audit</h2>
<p><strong>Business Owner:</strong> Andre Knie | <strong>Methodik:</strong> Iterativ (Gather - Analyze - Condense - Explore)</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Dieses Projekt analysiert systematisch die ~140 GitLab-Projekte, Confluence-Dokumentation und Architektur von pathOS. Ziel: Klares Gesamtbild, Problemanalyse und priorisierte Roadmap.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Phasenuebersicht</h3>
<table>
<tr><th>Phase</th><th>Beschreibung</th><th>Status</th></tr>
<tr><td style="background:#d5e8d4;"><strong>Phase 1: Domain Discovery</strong></td><td>Domaene verstehen, Daten sammeln, erstes Gesamtbild</td><td>&#9989; Abgeschlossen (80 Min)</td></tr>
<tr><td style="background:#d5e8d4;"><strong>Phase 2: Technischer Deep Dive</strong></td><td>Code-Analyse, Dependencies, Architektur-Bewertung</td><td>&#9989; Abgeschlossen (55 Min)</td></tr>
<tr><td style="background:#d5e8d4;"><strong>Phase 3: Team &amp; Workflow</strong></td><td>Team-Mapping, Entwicklungsworkflows, Reorganisation</td><td>&#9989; Abgeschlossen (30 Min)</td></tr>
<tr><td><strong>Phase 4: Roadmap &amp; Aktionsplan</strong></td><td>Priorisierte Massnahmen, Management-Praesentation</td><td>&#9744; Geplant</td></tr>
</table>
<h3>Iteration 01 - Domain Discovery</h3>
<p><strong>Datum:</strong> 2026-04-22 | <strong>Dauer:</strong> ~80 Minuten (09:00-10:20)</p>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Status</th><th>Zeitraum</th><th>Dauer</th></tr>
<tr style="background:#d5e8d4;"><td>0</td><td>Workspace-Setup, Interview, Scope/Rules/Glossar</td><td>&#9989;</td><td>09:00-09:10</td><td>~10 Min</td></tr>
<tr style="background:#d5e8d4;"><td>1</td><td>Oeffentliche Quellen recherchieren + Domaenenwissen</td><td>&#9989;</td><td>09:10-09:15</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>2</td><td>GitLab-Zugang + Inventory-Script (Python -> PS5.1 Fixes)</td><td>&#9989;</td><td>09:15-09:30</td><td>~15 Min</td></tr>
<tr style="background:#d5e8d4;"><td>3</td><td>GitLab-Inventory ausfuehren + Erstanalyse (167 Projekte)</td><td>&#9989;</td><td>09:30-09:35</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>4</td><td>Confluence-Zugang + Export-Script (Encoding-Fixes)</td><td>&#9989;</td><td>09:35-09:45</td><td>~10 Min</td></tr>
<tr style="background:#d5e8d4;"><td>5</td><td>Confluence-Export (143 Seiten) + Schluesselseiten analysieren</td><td>&#9989;</td><td>09:45-09:50</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>6</td><td>Gesamtbild + Architektur-Diagramme</td><td>&#9989;</td><td>09:50-09:55</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>7</td><td>Runbook einlesen und analysieren (arc42, ~346KB)</td><td>&#9989;</td><td>09:55-10:00</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>8</td><td>Confluence-Push-Script + 5 Seiten publiziert</td><td>&#9989;</td><td>10:00-10:08</td><td>~8 Min</td></tr>
<tr style="background:#d5e8d4;"><td>9</td><td>UKA-Korrektur + Architekturskizze + Fortschritt-Seite</td><td>&#9989;</td><td>10:08-10:20</td><td>~12 Min</td></tr>
<tr><td></td><td><strong>Gesamt Iteration 01</strong></td><td></td><td><strong>09:00-10:20</strong></td><td><strong>~80 Min</strong></td></tr>
</table>
<h3>Iteration 02 - Technischer Deep Dive</h3>
<p><strong>Datum:</strong> 2026-04-22 | <strong>Dauer:</strong> ~55 Minuten (10:45-11:40)</p>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Status</th><th>Zeitraum</th><th>Dauer</th></tr>
<tr style="background:#d5e8d4;"><td>1</td><td>Kern-Service READMEs analysieren (apps/)</td><td>&#9989;</td><td>10:45-10:50</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>2</td><td>pom.xml / package.json ziehen (23 Projekte, Script)</td><td>&#9989;</td><td>10:50-11:00</td><td>~10 Min</td></tr>
<tr style="background:#d5e8d4;"><td>3</td><td>Spring Boot + Java Versionen erfassen</td><td>&#9989;</td><td>11:00-11:05</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>4</td><td>Dependency-Graph zwischen Services erstellen</td><td>&#9989;</td><td>11:05-11:10</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>5</td><td>Shared Libraries + CVE-Patches analysieren</td><td>&#9989;</td><td>11:10-11:20</td><td>~10 Min</td></tr>
<tr style="background:#d5e8d4;"><td>6</td><td>Technische Gesundheits-Scorecard erstellen</td><td>&#9989;</td><td>11:20-11:30</td><td>~10 Min</td></tr>
<tr style="background:#d5e8d4;"><td>7</td><td>Ergebnisse dokumentieren + Confluence vorbereitet</td><td>&#9989;</td><td>11:30-11:40</td><td>~10 Min</td></tr>
<tr><td></td><td><strong>Gesamt Iteration 02</strong></td><td></td><td><strong>10:45-11:40</strong></td><td><strong>~55 Min</strong></td></tr>
</table>
<h3>Iteration 03 - Team und Workflow Analyse</h3>
<p><strong>Datum:</strong> 2026-04-22 | <strong>Dauer:</strong> ~30 Minuten (14:06-14:36)</p>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Status</th><th>Zeitraum</th><th>Dauer</th></tr>
<tr style="background:#d5e8d4;"><td>1</td><td>Team-zu-Projekt-Mapping aus Runbook + Confluence</td><td>&#9989;</td><td>14:06-14:15</td><td>~9 Min</td></tr>
<tr style="background:#d5e8d4;"><td>2</td><td>Umgebungs-Workflow analysieren (17+ Umgebungen)</td><td>&#9989;</td><td>14:15-14:20</td><td>~5 Min</td></tr>
<tr style="background:#d5e8d4;"><td>3</td><td>Release-Prozess + Engpaesse identifizieren</td><td>&#9989;</td><td>14:20-14:28</td><td>~8 Min</td></tr>
<tr style="background:#d5e8d4;"><td>4</td><td>Reorganisations-Empfehlungen + Confluence vorbereitet</td><td>&#9989;</td><td>14:28-14:36</td><td>~8 Min</td></tr>
<tr><td></td><td><strong>Gesamt Iteration 03</strong></td><td></td><td><strong>14:06-14:36</strong></td><td><strong>~30 Min</strong></td></tr>
</table>
<h3>Ergebnisse Iteration 01</h3>
<table>
<tr><th>Ergebnis</th><th>Details</th></tr>
<tr><td>GitLab-Inventar</td><td>167 Projekte inventarisiert, klassifiziert, Sprachen/Tags erfasst</td></tr>
<tr><td>Confluence-Export</td><td>143 Seiten exportiert (Markdown + HTML)</td></tr>
<tr><td>Runbook-Analyse</td><td>Komplettes arc42-Dokument (~346KB) eingelesen und ausgewertet</td></tr>
<tr><td>Domaenenwissen</td><td>Oeffentliche Quellen zu Trassenbestellung, ERegG, SNB recherchiert</td></tr>
<tr><td>Glossar</td><td>35+ Abkuerzungen und Fachbegriffe dokumentiert</td></tr>
<tr><td>Problemfelder</td><td>5 Hauptprobleme identifiziert (Deployment, Doku, Tech Debt, Altsystem, Teams)</td></tr>
<tr><td>Architekturskizze</td><td>Systemkontext mit allen Komponenten und Schnittstellen</td></tr>
<tr><td>Confluence-Seiten</td><td>7 Seiten unter "Analyse pathOS" publiziert</td></tr>
</table>
<h3>Naechste Schritte (Priorisierung offen)</h3>
<table>
<tr><th>Option</th><th>Beschreibung</th><th>Geschaetzter Aufwand</th></tr>
<tr><td>Architektur-Diagramme verfeinern</td><td>draw.io Diagramm erstellen, Datenfluss detaillieren</td><td>~30 Min</td></tr>
<tr><td>Team-zu-Projekt-Mapping</td><td>Welches Team besitzt welche Repos? Basis fuer Reorganisation</td><td>~45 Min</td></tr>
<tr><td>Deep Dive Kern-Services</td><td>pom.xml, Dependencies, Code-Metriken der wichtigsten Services</td><td>~60 Min</td></tr>
<tr><td>Geschaeftsprozesse vertiefen</td><td>Vorstudie Kapitel 3-5, BPMN-Prozesse aus Confluence</td><td>~45 Min</td></tr>
<tr><td>Management-Praesentation</td><td>Erste Folien/Confluence-Homepage fuer Management Board</td><td>~30 Min</td></tr>
</table>
"@
$Page7Id = Create-Or-Update-Page -Title "7. Projektfortschritt" -HtmlBody $ProgressHtml -ParentId $ParentPageId
# --- Seite 8: Nuetzliche Links ---
Write-Host ""
Write-Host ">> Seite 8: Nuetzliche Links" -ForegroundColor Yellow
$LinksHtml = @"
<h2>Nuetzliche Links - pathOS</h2>
<p>Zentrale Anlaufstellen fuer das pathOS-Projekt und die Analyse.</p>
<h3>Interne Systeme</h3>
<table>
<tr><th>System</th><th>URL</th><th>Beschreibung</th></tr>
<tr><td><strong>GitLab (pathOS)</strong></td><td><a href="https://git.tech.rz.db.de/bestellsystem1">git.tech.rz.db.de/bestellsystem1</a></td><td>167 Projekte, 9 Untergruppen</td></tr>
<tr><td><strong>Confluence (pathOS Space)</strong></td><td><a href="https://arija-confluence.jaas.service.deutschebahn.com/spaces/BES/pages/196749641/pathOS">Confluence BES Space</a></td><td>Fachliche und technische Dokumentation</td></tr>
<tr><td><strong>Runbook (Architektur)</strong></td><td><a href="https://bestellsystem1.gitpages.tech.rz.db.de/docs/runbook/02-architecture/00-architecture.html">Runbook Architektur</a></td><td>arc42-Architekturdokumentation (aktuell)</td></tr>
<tr><td><strong>Portal UI (Produktion)</strong></td><td><a href="https://pathos.app.db.de">pathos.app.db.de</a></td><td>Produktives Bestellportal</td></tr>
<tr><td><strong>Portal UI (KTU/Test)</strong></td><td><a href="https://pathos-iat.app.db.de">pathos-iat.app.db.de</a></td><td>Kundentestumgebung ABN1</td></tr>
<tr><td><strong>Portal UI (EVU-Test)</strong></td><td><a href="https://pathos-test.app.db.de">pathos-test.app.db.de</a></td><td>EVU-Integrationstests ABN8</td></tr>
<tr><td><strong>Common Interface (Prod)</strong></td><td><a href="https://api.pathos.dbinfrago.com">api.pathos.dbinfrago.com</a></td><td>TAF/TAP SOAP-Schnittstelle</td></tr>
<tr><td><strong>Stammdaten (Prod)</strong></td><td><a href="https://sb.pathos.dbinfrago.com">sb.pathos.dbinfrago.com</a></td><td>Stammdaten-REST-API fuer EVUs</td></tr>
<tr><td><strong>Jira</strong></td><td><a href="https://arija.jaas.service.deutschebahn.com">arija.jaas.service.deutschebahn.com</a></td><td>Ticketsystem (O2CBS-, O2CSYS-, TTTI-Projekte)</td></tr>
<tr><td><strong>Kafka UI (DEV)</strong></td><td><a href="https://kafka-ui.bsz-dev.cnp-test.comp.db.de">kafka-ui.bsz-dev.cnp-test.comp.db.de</a></td><td>Kafka-Topics Entwicklung</td></tr>
<tr><td><strong>Kafka UI (ABN)</strong></td><td><a href="https://kafka-ui.bsz-abn.cnp-test.comp.db.de">kafka-ui.bsz-abn.cnp-test.comp.db.de</a></td><td>Kafka-Topics Abnahme</td></tr>
<tr><td><strong>SonarQube</strong></td><td>(intern)</td><td>Code-Qualitaet</td></tr>
<tr><td><strong>DefectDojo</strong></td><td><a href="https://vistadojo-prd2-igo.vista.comp.db.de">vistadojo-prd2-igo.vista.comp.db.de</a></td><td>Schwachstellenverwaltung</td></tr>
<tr><td><strong>Grafana (Monitoring)</strong></td><td>(via CNP)</td><td>Metriken, Logging, Tracing</td></tr>
</table>
<h3>Oeffentliche Quellen</h3>
<table>
<tr><th>Quelle</th><th>URL</th><th>Beschreibung</th></tr>
<tr><td><strong>DB InfraGO</strong></td><td><a href="https://www.dbinfrago.com">dbinfrago.com</a></td><td>Unternehmensseite</td></tr>
<tr><td><strong>DB InfraGO GitHub</strong></td><td><a href="https://github.com/dbinfrago">github.com/dbinfrago</a></td><td>Oeffentliche Repos (Capella, OpenStation, etc.)</td></tr>
<tr><td><strong>Network Statement (SNB)</strong></td><td><a href="https://www.dbinfrago.com/web-en/rail-network/network_statement">SNB / Network Statement</a></td><td>Vertragliche Grundlage Trassennutzung</td></tr>
<tr><td><strong>Bundesnetzagentur (Schiene)</strong></td><td><a href="https://www.bundesnetzagentur.de/EN/Areas/Rail/Companies/Charges/GenGuidelinesRO/table.html">BNetzA Trassenpreise</a></td><td>Regulierung und Trassenpreise</td></tr>
<tr><td><strong>DB API Marketplace</strong></td><td><a href="https://developers.deutschebahn.com">developers.deutschebahn.com</a></td><td>Oeffentliche DB APIs</td></tr>
<tr><td><strong>TAF/TAP TSI (RNE)</strong></td><td>(RNE Website)</td><td>EU-Standard fuer Trassenanmeldung</td></tr>
</table>
<h3>Analyse-Ergebnisse (dieses Projekt)</h3>
<table>
<tr><th>Dokument</th><th>Ort</th><th>Beschreibung</th></tr>
<tr><td>Lokaler Workspace</td><td><code>project-audit/</code></td><td>Alle Rohdaten, Scripts, Analysen</td></tr>
<tr><td>GitLab-Inventar</td><td><code>project-audit/data/gitlab-inventory/</code></td><td>167 Projekte als JSON, CSV, Markdown</td></tr>
<tr><td>Confluence-Export</td><td><code>project-audit/data/confluence-export/</code></td><td>143 Seiten als Markdown + HTML</td></tr>
<tr><td>Analysen</td><td><code>project-audit/analysis/</code></td><td>Gesamtbild, Runbook-Analyse, Diagramme</td></tr>
<tr><td>Scripts</td><td><code>project-audit/scripts/</code></td><td>GitLab-Inventory, Confluence-Export, Push</td></tr>
</table>
"@
$Page8Id = Create-Or-Update-Page -Title "8. Nuetzliche Links" -HtmlBody $LinksHtml -ParentId $ParentPageId
# --- Seite 9: Customer Journey Happy Path ---
Write-Host ""
Write-Host ">> Seite 9: Customer Journey - Happy Path" -ForegroundColor Yellow
$JourneyHtml = @"
<h2>Customer Journey: Happy Path Trassenbestellung</h2>
<p><strong>Szenario:</strong> Ein EVU-Sachbearbeiter bestellt eine Trasse im Gelegenheitsverkehr ueber das Bestellportal.</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Dieser Happy Path zeigt den idealen Ablauf ohne Fehler, Ablehnungen oder Sonderfaelle. Er illustriert den Datenfluss durch alle beteiligten IT-Systeme aus Kundensicht.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Uebersicht: 7 Schritte aus Kundensicht</h3>
<table>
<tr>
<td style="background:#dae8fc;text-align:center;padding:15px;width:14%;"><strong>1. Login</strong><br/>Portal oeffnen<br/>DB WebSSO</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:15px;width:14%;"><strong>2. Planung</strong><br/>Route waehlen<br/>Entwurf erstellen</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#fff2cc;text-align:center;padding:15px;width:14%;"><strong>3. Anmeldung</strong><br/>Train erstellen<br/>Absenden</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#f5f5f5;text-align:center;padding:15px;width:14%;"><strong>4. Warten</strong><br/>Status: In<br/>Bearbeitung</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:15px;width:14%;"><strong>5. Angebot</strong><br/>Preis + Laufweg<br/>pruefen</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#d5e8d4;text-align:center;padding:15px;width:14%;font-weight:bold;"><strong>6. Annehmen</strong><br/>Vertrag<br/>abschliessen</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#d5e8d4;text-align:center;padding:15px;width:14%;"><strong>7. Vertrag</strong><br/>einsehen<br/>PDF laden</td>
</tr>
</table>
<h3>Detaillierter Datenfluss pro Schritt</h3>
<h4>Schritt 1: Login</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Oeffnet <a href="https://pathos.app.db.de">pathos.app.db.de</a>, wird zu DB WebSSO weitergeleitet, gibt Benutzername + Passwort + 2. Faktor ein</td></tr>
<tr><th>IT-Systeme</th><td><strong>SIPS Access Proxy</strong> &#10132; <strong>DB WebSSO (Entra ID)</strong> &#10132; <strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> (Token-Validierung) &#10132; <strong>NuR-Service</strong> (Kundennummern laden)</td></tr>
<tr><th>Daten</th><td>JWT Token, Benutzerrolle, zugeordnete Kundennummern</td></tr>
<tr><th>Protokoll</th><td>OIDC (OpenID Connect), REST</td></tr>
</table>
<h4>Schritt 2: Planung</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Waehlt Start-/Zielbahnhof, Datum, Zuggattung, Geschwindigkeit. Sieht Route auf Karte. Kann Entwurf speichern.</td></tr>
<tr><th>IT-Systeme</th><td><strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> (Stammdaten aus Cache) &#10132; <strong>Stammdaten-Bereitstellung</strong> (Betriebsstellen, Strecken, Zuggattungen) &#10132; <strong>GeoServer</strong> (Kartendarstellung)</td></tr>
<tr><th>Daten</th><td>Betriebsstellen, Streckenklassen, Zuggattungen, Triebfahrzeuge, Ordnungsrahmen</td></tr>
<tr><th>Protokoll</th><td>REST/JSON (intern), WMS/WFS (GeoServer)</td></tr>
</table>
<h4>Schritt 3: Anmeldung absenden</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Klickt &quot;Anmeldung absenden&quot;. Sieht Bestaetigung mit Vorgangsnummer.</td></tr>
<tr><th>IT-Systeme</th><td><strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> (Validierung) &#10132; <strong>Kafka</strong> (Topic: eingangsnachricht) &#10132; <strong>Steuerung Vertrieb</strong> (Camunda-Prozessinstanz starten) &#10132; <strong>Auftrags-Verwaltung</strong> (Train + PathRequest speichern)</td></tr>
<tr><th>Daten</th><td>Train-Objekt (TDM JSON), PathRequest, TrainID, Kundennummer</td></tr>
<tr><th>Protokoll</th><td>REST &#10132; Kafka &#10132; REST</td></tr>
</table>
<h4>Schritt 4: Verarbeitung (Kunde wartet)</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Sieht Status &quot;In Bearbeitung&quot; im Portal. Kann andere Anmeldungen bearbeiten.</td></tr>
<tr><th>IT-Systeme</th><td>
<ol>
<li><strong>Steuerung Vertrieb</strong> &#10132; <strong>BEP</strong> (Bestelleingangspruefung, REST) - Plausibilitaetspruefung</li>
<li><strong>Steuerung Vertrieb</strong> &#10132; <strong>Kafka</strong> (produktionsauftrag-to-connector) &#10132; <strong>IFP-Connector</strong> &#10132; <strong>Kafka</strong> (produktionsauftrag-to-ifp) &#10132; <strong>TPN/BaDiFa</strong> - Fahrplankonstruktionsauftrag</li>
<li><strong>TPN/BaDiFa</strong> konstruiert Trasse (kann Minuten bis Wochen dauern)</li>
<li><strong>TPN</strong> &#10132; <strong>Kafka</strong> (vertriebsauftrag-to-connector) &#10132; <strong>IFP-Connector</strong> &#10132; <strong>Kafka</strong> (vertriebsauftrag-to-sv) &#10132; <strong>Steuerung Vertrieb</strong> - PathDetailsMessage empfangen</li>
<li><strong>Steuerung Vertrieb</strong> &#10132; <strong>AC Trasse</strong> (REST) - Trassenpreis ermitteln</li>
<li><strong>Steuerung Vertrieb</strong> &#10132; <strong>Auftrags-Verwaltung</strong> (Kafka: auftragsverwaltung) - Angebot speichern</li>
<li><strong>Archivierungsservice</strong> &#10132; <strong>AC Trasse Archiv</strong> (REST) - Revisionssichere Ablage</li>
</ol>
</td></tr>
<tr><th>Daten</th><td>PathRequest &#10132; Produktionsauftrag &#10132; Path + PathDetailsMessage &#10132; Trassenpreis &#10132; VertragsAngebot</td></tr>
<tr><th>Protokoll</th><td>Kafka (async), REST (sync)</td></tr>
</table>
<h4>Schritt 5: Angebot pruefen</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Erhaelt Benachrichtigung (oder sieht neuen Status im Portal). Oeffnet Angebot: Laufweg, Verkehrstage, Trassenpreis.</td></tr>
<tr><th>IT-Systeme</th><td><strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> &#10132; <strong>Auftrags-Verwaltung</strong> (REST: Auftraege-API) - Angebot mit PathDetails laden</td></tr>
<tr><th>Daten</th><td>VertragsAngebot (PathDetailsMessage), Trassenpreis, Laufweg, Verkehrstage</td></tr>
<tr><th>Protokoll</th><td>REST/JSON</td></tr>
</table>
<h4>Schritt 6: Angebot annehmen</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Klickt &quot;Angebot annehmen&quot;. Sieht Bestaetigung: Vertrag geschlossen.</td></tr>
<tr><th>IT-Systeme</th><td><strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> &#10132; <strong>Kafka</strong> (eingangsnachricht) &#10132; <strong>Steuerung Vertrieb</strong> (Camunda: Annahme-Schritt) &#10132; <strong>Auftrags-Verwaltung</strong> (ProduktVertrag erstellen, Kafka: auftragsverwaltung)</td></tr>
<tr><th>Daten</th><td>Annahme-Nachricht &#10132; ProduktVertrag (TDM)</td></tr>
<tr><th>Protokoll</th><td>REST &#10132; Kafka &#10132; REST</td></tr>
</table>
<h4>Schritt 7: Vertrag und Nachverarbeitung</h4>
<table>
<tr><th style="width:15%;">Kundensicht</th><td>Sieht Vertrag im Portal. Kann PDF herunterladen. Trasse ist gebucht.</td></tr>
<tr><th>IT-Systeme</th><td>
<ul>
<li><strong>Portal UI</strong> &#10132; <strong>Portal Middleware</strong> &#10132; <strong>Auftrags-Verwaltung</strong> - Vertrag anzeigen</li>
<li><strong>Steuerung Vertrieb</strong> &#10132; <strong>AC Trasse</strong> (REST) - Abrechnung ausloesen</li>
<li><strong>Archivierungsservice</strong> &#10132; <strong>AC Trasse Archiv</strong> - Vertrag revisionssicher ablegen</li>
<li><strong>Vertragsdaten-Verteiler</strong> &#10132; <strong>Kafka</strong> (vertragsdaten-to-stationsportal) &#10132; <strong>Stationsportal</strong></li>
<li><strong>TBV-Absicherung-Konverter</strong> &#10132; <strong>Kafka</strong> (tbvAbsicherung) &#10132; <strong>TBV</strong> (Tunnelbegegnungsverbot)</li>
</ul>
</td></tr>
<tr><th>Daten</th><td>ProduktVertrag, Abrechnungsdaten, Vertragsdaten fuer Stationsportal, TBV-Pruefung</td></tr>
<tr><th>Protokoll</th><td>REST, Kafka</td></tr>
</table>
<h3>Zusammenfassung Datenfluss</h3>
<table>
<tr><th>Schritt</th><th>Beteiligte Systeme</th><th>Kernobjekt</th><th>Dauer (GELV)</th></tr>
<tr><td>1. Login</td><td>Portal, WebSSO, NuR</td><td>JWT Token</td><td>Sekunden</td></tr>
<tr><td>2. Planung</td><td>Portal, Stammdaten, GeoServer</td><td>Entwurf</td><td>Minuten</td></tr>
<tr><td>3. Anmeldung</td><td>Portal, SV, AV</td><td>Train + PathRequest</td><td>Sekunden</td></tr>
<tr><td>4. Verarbeitung</td><td>SV, BEP, IFP, TPN/BaDiFa, AC</td><td>Produktionsauftrag &#10132; PathDetails</td><td>Minuten-Stunden</td></tr>
<tr><td>5. Angebot</td><td>Portal, AV</td><td>VertragsAngebot</td><td>Sekunden</td></tr>
<tr><td>6. Annahme</td><td>Portal, SV, AV</td><td>ProduktVertrag</td><td>Sekunden</td></tr>
<tr><td>7. Vertrag</td><td>Portal, AV, AC, Archiv, Stationsportal, TBV</td><td>ProduktVertrag + Abrechnung</td><td>Sekunden-Minuten</td></tr>
</table>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<p><strong>Hinweis:</strong> Bei Netzfahrplan-Anmeldungen (NFPL) dauert Schritt 4 deutlich laenger (Wochen bis Monate), da die Fahrplankonstruktion im Rahmen des Jahresfahrplans erfolgt. Zusaetzlich gibt es VNP/ENP-Signale und ein Koordinierungsverfahren bei Konflikten.</p>
</ac:rich-text-body></ac:structured-macro>
"@
$Page9Id = Create-Or-Update-Page -Title "9. Customer Journey - Happy Path" -HtmlBody $JourneyHtml -ParentId $ParentPageId
# --- Seite 10: Technischer Deep Dive ---
Write-Host ""
Write-Host ">> Seite 10: Technischer Deep Dive" -ForegroundColor Yellow
$TechHtml = @"
<h2>Technischer Deep Dive - Versionen und Abhaengigkeiten</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Basis: 23 pom.xml + 1 package.json der Kern-Services</p>
<h3>Technische Gesundheits-Scorecard</h3>
<table>
<tr><th>Kategorie</th><th>Bewertung</th><th>Details</th></tr>
<tr><td>Java-Version</td><td style="background:#fff2cc;">&#128993;</td><td>21 in Services, aber Parent-POM noch auf 17. Inkonsistenz.</td></tr>
<tr><td><strong>Spring Boot</strong></td><td style="background:#fff2cc;">&#128993;</td><td><strong>3.5.13 auf Master &#8212; Upgrade auf 4.0.5 laeuft aktiv. Portal fertig, CI/SV/AV in Arbeit. EOL 3.5: Juni 2026.</strong></td></tr>
<tr><td>Camunda</td><td style="background:#d5e8d4;">&#128994;</td><td>8.8.22 - aktuell, Upgrade auf 8.9 geplant</td></tr>
<tr><td>Angular</td><td style="background:#d5e8d4;">&#128994;</td><td>21.2.4 - sehr aktuell</td></tr>
<tr><td>Dependencies</td><td style="background:#d5e8d4;">&#128994;</td><td>Renovate aktiv, CVEs werden gepatcht</td></tr>
<tr><td>Versionskonsistenz</td><td style="background:#fff2cc;">&#128993;</td><td>SV hat eigenen Parent-POM, Cucumber/OTel Versionen divergieren</td></tr>
<tr><td>Modularitaet</td><td style="background:#fff2cc;">&#128993;</td><td>SV mit 18 Maven-Modulen sehr komplex</td></tr>
<tr><td>API-Versionierung</td><td style="background:#d5e8d4;">&#128994;</td><td>Saubere OpenAPI-basierte Versionierung (data-model v10.0.0)</td></tr>
<tr><td>Security</td><td style="background:#d5e8d4;">&#128994;</td><td>Aktive CVE-Patches, Signature-Libs, OAuth2, Mutual SSL</td></tr>
<tr><td>Feature Toggles</td><td style="background:#d5e8d4;">&#128994;</td><td>Togglz integriert in SV und AV</td></tr>
<tr><td>Monitoring</td><td style="background:#d5e8d4;">&#128994;</td><td>OpenTelemetry, Micrometer, Prometheus</td></tr>
<tr><td>Testing</td><td style="background:#fff2cc;">&#128993;</td><td>Cucumber + JUnit + WireMock, Testkonzept in Ueberarbeitung (ADR-70)</td></tr>
</table>
<h3>Zentrale Versionen</h3>
<table>
<tr><th>Komponente</th><th>Version</th><th>Risiko</th></tr>
<tr><td>Java</td><td>17 (Parent) / 21 (Services)</td><td style="background:#fff2cc;">Parent noch auf 17</td></tr>
<tr style="background:#fff2cc;"><td><strong>Spring Boot</strong></td><td><strong>3.5.13 (Master) → 4.0.5 (in Arbeit)</strong></td><td><strong>Upgrade laeuft, EOL Juni 2026</strong></td></tr>
<tr><td>Camunda 8</td><td>8.8.22</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>Angular</td><td>21.2.4</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>PostgreSQL Driver</td><td>42.7.10</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>Flyway</td><td>11.20.3</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>Log4j2</td><td>2.25.4</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>Jackson</td><td>2.21.2</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>OpenAPI Generator</td><td>7.21.0</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>AWS SDK</td><td>2.42.34</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>TypeScript</td><td>~5.9.2</td><td style="background:#d5e8d4;">OK</td></tr>
</table>
<h3>Aktive CVE-Patches (aus pom.xml)</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p>Folgende CVEs wurden aktiv in den pom.xml-Dateien gepatcht:</p>
<ul>
<li>CVE-2025-48924: commons-lang3 (3.20.0)</li>
<li>CVE-2025-53864: nimbus-jose-jwt (10.9)</li>
<li>CVE-2025-66566: lz4-java (1.11.0)</li>
<li>CVE-2026-1002: vertx-core (4.5.26)</li>
<li>CVE-2026-40477/78: thymeleaf (excluded via Togglz)</li>
<li>Diverse GHSA: tomcat-embed-core (10.1.54), log4j-core (2.25.4)</li>
</ul>
</ac:rich-text-body></ac:structured-macro>
<h3>Steuerung-Vertrieb: Komplexester Service</h3>
<p><strong>18 Maven-Module:</strong> testutils, model-process, model, tdm-utils, kafka-utils, i18n, api-adapter, persistence, monitoring-utils, process-configuration, camunda-interface, camunda8, application, camunda8-jobworker, assemblies, kit, kafka, feature-toggle</p>
<p><strong>10+ interne API-Dependencies:</strong> trassenanmeldung (v8.11.0), versandauftrag (v3.11.0), versandergebnis (v2.14.0), vertriebsauftraege (v8.3.0), produktionsauftrag (v3.5.0), eventmodel (v3.2.0), kundendaten (v2.9.0), objectinfomessage (v2.11.0), data-model (v10.0.0), camunda-events (v2.2.0)</p>
<h3>Handlungsempfehlungen</h3>
<table>
<tr><th>Prio</th><th>Empfehlung</th><th>Begruendung</th></tr>
<tr style="background:#fff2cc;"><td><strong>HOCH</strong></td><td>Spring Boot 4 Upgrade abschliessen</td><td>EOL 3.5 ist Juni 2026. Upgrade laeuft aktiv (Portal fertig, CI/SV/AV in Arbeit). Ziel: 4.0.5</td></tr>
<tr style="background:#f8cecc;"><td><strong>KRITISCH</strong></td><td>Parent-POM Konsolidierung</td><td>SV nutzt eigenen Parent. Divergenz fuehrt zu Inkonsistenzen.</td></tr>
<tr style="background:#fff2cc;"><td>HOCH</td><td>Java-Version im Parent auf 21</td><td>Alle Services nutzen bereits 21, Parent hinkt hinterher.</td></tr>
<tr style="background:#fff2cc;"><td>HOCH</td><td>Cucumber-Version vereinheitlichen</td><td>7.34.3 vs 7.23.0 zwischen Parent und SV.</td></tr>
<tr style="background:#fff2cc;"><td>HOCH</td><td>SV-Modularitaet pruefen</td><td>18 Module ist sehr viel. Konsolidierungspotenzial?</td></tr>
<tr><td>MITTEL</td><td>OpenTelemetry synchronisieren</td><td>2.27.0 vs 2.26.1 zwischen Parent und SV</td></tr>
<tr><td>MITTEL</td><td>Testkonzept modernisieren</td><td>ADR-70 in Arbeit, Cucumber -> JUnit Migration</td></tr>
</table>
"@
$Page10Id = Create-Or-Update-Page -Title "10. Technischer Deep Dive" -HtmlBody $TechHtml -ParentId $ParentPageId
# --- Seite 11: Team & Workflow Analyse ---
Write-Host ""
Write-Host ">> Seite 11: Team und Workflow Analyse" -ForegroundColor Yellow
$TeamHtml = @"
<h2>Team und Workflow Analyse</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Basis: Runbook, Confluence, GitLab-Berechtigungen</p>
<h3>Team-Struktur (IST - seit PI 39)</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Seit PI 39 neue Struktur:</strong> Team STeam wurde aufgeloest. Stattdessen gibt es ein OPs-Team mit 2 festen + rotierenden Mitgliedern aus allen Teams. Die STeam-Aufgaben wurden auf die Entwicklungsteams verteilt.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Team</th><th>Subdomaene</th><th>Kern-Verantwortung</th><th>Projekte (ca.)</th></tr>
<tr style="background:#f8cecc;"><td><strong>Team Zero</strong></td><td>TAF/TAP Schnittstellen</td><td>Common Interface, Stammdaten, TAF/TAP-TDM-Konverter, TBV-Konverter + OPs-Anteil</td><td>~12</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team 404</strong></td><td>Bestellportal</td><td>Portal UI (Angular), Portal Middleware + OPs-Anteil</td><td>~4</td></tr>
<tr style="background:#fff2cc;"><td><strong>Team CIB</strong></td><td>Prozesse + Backend</td><td>Steuerung Vertrieb (Camunda), Auftrags-Verwaltung, IFP-Connector + OPs-Anteil</td><td>~15</td></tr>
<tr style="background:#dae8fc;"><td><strong>Team OPs (NEU)</strong></td><td>Infrastruktur / DevOps</td><td>CI/CD, Deployment, Monitoring, Security. 2 feste + rotierende Mitglieder</td><td>~47 (verteilt)</td></tr>
<tr><td><del>Team STeam</del></td><td><del>Infrastruktur</del></td><td colspan="2"><strong>AUFGELOEST seit PI 39 - Aufgaben verteilt auf alle Teams + OPs</strong></td></tr>
<tr><td><strong>Team BSSUPPORT</strong></td><td>Support</td><td>2nd Level Support</td><td>0 (Jira)</td></tr>
<tr><td><strong>Team FbF</strong></td><td>Fachliche Betriebsfuehrung</td><td>Fachlicher Betrieb, Konfiguration</td><td>0</td></tr>
</table>
<h3>Umgebungs-Pipeline</h3>
<table>
<tr><th>Stage</th><th>Umgebungen</th><th>Zweck</th></tr>
<tr style="background:#d5e8d4;"><td><strong>DEV</strong></td><td>BU, EU, BASE-AT, IEU, SIT, SIT2, LUP, Demo</td><td>Entwicklung, Review, Integration, Performance</td></tr>
<tr style="background:#fff2cc;"><td><strong>ABN</strong></td><td>E2E, SAT1-3, ABN1-2-4-8, PREPROD</td><td>TTT-Integration, Kundentests, Abnahme</td></tr>
<tr style="background:#f8cecc;"><td><strong>PROD</strong></td><td>PROD</td><td>Produktionsumgebung (SL Gold)</td></tr>
</table>
<p><strong>17+ Umgebungen</strong> mit jeweils eigenem Kafka-Cluster, DB-Instanz und Keycloak.</p>
<h3>Identifizierte Engpaesse</h3>
<table>
<tr><th>ID</th><th>Engpass</th><th>Schwere</th><th>Details</th></tr>
<tr style="background:#f8cecc;"><td>E1</td><td><strong>Deployment-Bottleneck</strong></td><td>KRITISCH</td><td>17+ Umgebungen, manuelle Orchestrierung, kein Auto-Smoketest, TTT-Abstimmung noetig</td></tr>
<tr style="background:#f8cecc;"><td>E2</td><td><strong>OPs-Team Kapazitaet</strong></td><td>HOCH</td><td>Nur 2 feste Mitglieder fuer 47 Infra-Projekte. Rotierende Besetzung birgt Wissensverlust-Risiko.</td></tr>
<tr style="background:#fff2cc;"><td>E3</td><td><strong>Cross-Team Dependencies</strong></td><td>HOCH</td><td>10+ interne APIs, kein Contract Testing (ADR-50 obsolet), Schnittstellenaenderungen erfordern Koordination</td></tr>
<tr style="background:#fff2cc;"><td>E4</td><td><strong>TTT-Abhaengigkeit</strong></td><td>MITTEL</td><td>Releases muessen mit TTT-Releasemanagement abgestimmt werden</td></tr>
<tr><td>E5</td><td><strong>Wissenskonzentration</strong></td><td>MITTEL</td><td>DevOps-Know-How erst seit 02/2025 im Aufbau, Ziel &quot;You build it, you run it&quot; noch nicht erreicht</td></tr>
</table>
<h3>Reorganisations-Empfehlungen</h3>
<h4>Kurzfristig (naechste PIs)</h4>
<ol>
<li><strong>DevOps-Wissen verteilen:</strong> Jedes Team mindestens 2 Personen mit Deployment-Faehigkeit</li>
<li><strong>Deployment-Automatisierung:</strong> Smoketests nach jedem Deployment</li>
<li><strong>Release-Checkliste digitalisieren:</strong> Confluence-Checkliste in Pipeline integrieren</li>
</ol>
<h4>Mittelfristig (2-3 PIs)</h4>
<ol start="4">
<li><strong>Infra-Verantwortung aufteilen:</strong> Teams uebernehmen Infra fuer eigene Services (STeam wird Enabler)</li>
<li><strong>Contract Testing einfuehren:</strong> Pact oder aehnliches zwischen den Teams</li>
<li><strong>Umgebungen reduzieren:</strong> 17+ pruefen, SAT1/SAT2/SAT3 konsolidieren?</li>
</ol>
<h4>Langfristig (6+ Monate)</h4>
<ol start="7">
<li><strong>Team-Schnitt an Subdomaenen:</strong> Klare Ownership pro Bounded Context</li>
<li><strong>Platform Team:</strong> STeam wird Platform Team mit Self-Service-Tools</li>
<li><strong>TTT-Entkopplung:</strong> Eigene E2E-Tests die TTT-Abhaengigkeit reduzieren</li>
</ol>
"@
$Page11Id = Create-Or-Update-Page -Title "11. Team und Workflow Analyse" -HtmlBody $TeamHtml -ParentId $ParentPageId
# --- Seite 12: Roadmap und Aktionsplan ---
Write-Host ""
Write-Host ">> Seite 12: Roadmap und Aktionsplan" -ForegroundColor Yellow
$RoadmapActionHtml = @"
<h2>Roadmap und Aktionsplan pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Konsolidierung aller Findings aus Phase 1-3</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p><strong>Management Summary:</strong> pathOS ist ein funktionierendes, aktiv entwickeltes System mit solidem Tech-Stack. Die Hauptrisiken liegen nicht im Code, sondern in der operativen Komplexitaet: 17+ Umgebungen, 47 Infra-Projekte bei einem Team, Spring Boot EOL in 2 Monaten, Parallelbetrieb mit Altsystem TPN.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>SOFORT (naechste 2 Monate)</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<table>
<tr><th>#</th><th>Aktion</th><th>Begruendung</th><th>Aufwand</th></tr>
<tr><td>A1</td><td><strong>Spring Boot 4 Upgrade abschliessen</strong></td><td>EOL 3.5 ist Juni 2026. Upgrade laeuft aktiv (Portal fertig, CI/SV/AV in Arbeit, Ziel: 4.0.5).</td><td>HOCH (1-2 Sprints verbleibend)</td></tr>
<tr><td>A2</td><td>Parent-POM Java auf 21 anheben</td><td>Inkonsistenz: Parent=17, Services=21</td><td>NIEDRIG (1 Tag)</td></tr>
<tr><td>A3</td><td>Parent-POM Konsolidierung pruefen</td><td>SV hat eigenen Parent, Versionsdivergenzen</td><td>MITTEL (1 Sprint)</td></tr>
</table>
</ac:rich-text-body></ac:structured-macro>
<h3>KURZFRISTIG (naechste 2-3 PIs)</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Begruendung</th><th>Aufwand</th></tr>
<tr><td>A4</td><td><strong>Deployment-Automatisierung</strong></td><td>Smoketests, Release-Checkliste in Pipeline</td><td>MITTEL (2 Sprints)</td></tr>
<tr><td>A5</td><td><strong>DevOps-Wissen verteilen</strong></td><td>Jedes Team 2+ Personen mit Deployment-Faehigkeit</td><td>MITTEL (laufend)</td></tr>
<tr><td>A6</td><td>Camunda 8.8 auf 8.9 Upgrade</td><td>Roadmap Item 8.2</td><td>MITTEL (1-2 Sprints)</td></tr>
<tr><td>A7</td><td>Monitoring-Konzept abschliessen</td><td>Roadmap Item 4.1, seit PI 39</td><td>MITTEL (1 Sprint)</td></tr>
<tr><td>A8</td><td>Disaster-Recovery-Test 3</td><td>Roadmap Item 5.2/5.3</td><td>MITTEL (1 Sprint)</td></tr>
<tr><td>A9</td><td>Secret-Rotation Konzept</td><td>Roadmap Item 3.2</td><td>MITTEL (1 Sprint)</td></tr>
<tr><td>A10</td><td>AppMesh-Alternative</td><td>AWS EOL 2026</td><td>Abhaengig von CNP</td></tr>
<tr><td>A11</td><td>Repo-Beschreibungen ergaenzen</td><td>60% ohne Beschreibung</td><td>NIEDRIG (1 Tag)</td></tr>
<tr><td>A12</td><td>Archivierte Repos aufraeumen</td><td>32 archivierte Projekte</td><td>NIEDRIG (1 Tag)</td></tr>
</table>
<h3>MITTELFRISTIG (3-6 Monate)</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Begruendung</th><th>Aufwand</th></tr>
<tr><td>A13</td><td><strong>Infra-Verantwortung aufteilen</strong></td><td>STeam als Bottleneck entlasten</td><td>HOCH (mehrere PIs)</td></tr>
<tr><td>A14</td><td><strong>Contract Testing einfuehren</strong></td><td>10+ APIs ohne Contract Tests</td><td>MITTEL (2-3 Sprints)</td></tr>
<tr><td>A15</td><td>Umgebungen konsolidieren</td><td>17+ pruefen, SAT1/2/3 zusammenlegen?</td><td>MITTEL (1-2 Sprints)</td></tr>
<tr><td>A16</td><td>Full-Table-Scans in AV beheben</td><td>Roadmap Item 7.1</td><td>MITTEL (1-2 Sprints)</td></tr>
<tr><td>A17</td><td>Daten-Partitionierung Fahrplanjahr</td><td>Roadmap Item 7.2, bis Maerz 2027</td><td>HOCH (2-3 Sprints)</td></tr>
<tr><td>A18</td><td>Keycloak-Projekte konsolidieren</td><td>5+ separate Repos</td><td>NIEDRIG (1 Sprint)</td></tr>
<tr><td>A19</td><td>API-Versionierung formalisieren</td><td>Roadmap Item 6.4</td><td>MITTEL (1 Sprint)</td></tr>
<tr><td>A20</td><td>GitLab-Repos restrukturieren</td><td>Roadmap Item 6.7</td><td>MITTEL (1-2 Sprints)</td></tr>
</table>
<h3>LANGFRISTIG (6+ Monate)</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Begruendung</th><th>Aufwand</th></tr>
<tr><td>A21</td><td><strong>Team-Schnitt an Subdomaenen</strong></td><td>Klare Ownership pro Bounded Context</td><td>HOCH (Orga)</td></tr>
<tr><td>A22</td><td><strong>STeam wird Platform Team</strong></td><td>Self-Service-Tools statt Bottleneck</td><td>HOCH (Orga)</td></tr>
<tr><td>A23</td><td>TTT-Entkopplung</td><td>Eigene E2E-Tests</td><td>HOCH (mehrere PIs)</td></tr>
<tr><td>A24</td><td>TPN-Abloesung abschliessen</td><td>Parallelbetrieb beenden</td><td>SEHR HOCH</td></tr>
</table>
<h3>Risiko-Matrix</h3>
<table>
<tr><th>Risiko</th><th>Wahrscheinlichkeit</th><th>Impact</th><th>Massnahme</th></tr>
<tr style="background:#fff2cc;"><td>Spring Boot EOL (Upgrade laeuft)</td><td>MITTEL (Upgrade aktiv)</td><td>HOCH</td><td>A1 &#8212; Portal fertig, CI/SV/AV in Arbeit</td></tr>
<tr style="background:#fff2cc;"><td>AppMesh EOL ohne Alternative</td><td>MITTEL</td><td>HOCH</td><td>A10</td></tr>
<tr style="background:#fff2cc;"><td>Deployment-Ausfall durch Komplexitaet</td><td>MITTEL</td><td>HOCH</td><td>A4, A5, A15</td></tr>
<tr style="background:#f8cecc;"><td>STeam-Mitarbeiter verlassen Projekt</td><td>MITTEL</td><td>KRITISCH</td><td>A5, A13, A22</td></tr>
<tr style="background:#fff2cc;"><td>DB-Performance bei Wachstum</td><td>MITTEL</td><td>HOCH</td><td>A16, A17</td></tr>
<tr style="background:#d5e8d4;"><td>Security-Incident (veraltete Deps)</td><td>NIEDRIG</td><td>HOCH</td><td>Renovate aktiv</td></tr>
</table>
"@
$Page12Id = Create-Or-Update-Page -Title "12. Roadmap und Aktionsplan" -HtmlBody $RoadmapActionHtml -ParentId $ParentPageId
# --- Seite 13: Jira-Analyse ---
Write-Host ""
Write-Host ">> Seite 13: Jira-Analyse" -ForegroundColor Yellow
$JiraHtml = @"
<h2>Jira-Analyse pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | 1949 Issues ueber 7 Team-Projekte + ART-Board (90 Tage)</p>
<h3>Team-Uebersicht (alle Boards)</h3>
<table>
<tr><th>Team</th><th>Key</th><th>Issues</th><th>Fertig</th><th>In Arbeit</th><th>Offen</th><th>Bugs</th><th>Enabler</th><th>Completion</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Team 404</strong></td><td>O2C404</td><td>500</td><td>315</td><td>33</td><td>152</td><td style="background:#f8cecc;">165</td><td>53</td><td>63%</td></tr>
<tr><td><strong>Team Zero</strong></td><td>O2CZERO</td><td>417</td><td>251</td><td>15</td><td>151</td><td>64</td><td>56</td><td>60%</td></tr>
<tr><td><strong>OPs Squad</strong></td><td>O2COS</td><td>379</td><td>292</td><td>14</td><td>73</td><td style="background:#f8cecc;">116</td><td>60</td><td>77%</td></tr>
<tr><td><strong>Team CIB</strong></td><td>O2CCIB</td><td>342</td><td>239</td><td>13</td><td>90</td><td>67</td><td>16</td><td>70%</td></tr>
<tr style="background:#fff2cc;"><td><strong>DevOps</strong></td><td>O2CDEVOPS</td><td>289</td><td>158</td><td>39</td><td>92</td><td>27</td><td style="background:#f8cecc;">156</td><td>55%</td></tr>
<tr><td>QA/Test</td><td>O2CQST</td><td>14</td><td>11</td><td>0</td><td>3</td><td>0</td><td>1</td><td>79%</td></tr>
<tr><td><del>STeam</del></td><td>O2CSYS</td><td>8</td><td>5</td><td>0</td><td>3</td><td>0</td><td>4</td><td>63%</td></tr>
<tr style="background:#dae8fc;"><td><strong>GESAMT</strong></td><td></td><td><strong>1949</strong></td><td><strong>1271</strong></td><td><strong>114</strong></td><td><strong>564</strong></td><td><strong>439</strong></td><td><strong>346</strong></td><td><strong>65%</strong></td></tr>
</table>
<h3>Kritische Erkenntnisse</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<ol>
<li><strong>Bug-Explosion bei Team 404:</strong> 165 Bugs (33% aller Issues!) &#8212; Portal hat massive Qualitaetsprobleme</li>
<li><strong>OPs: 116 Bugs</strong> (31%) &#8212; Infrastruktur-Stabilitaet</li>
<li><strong>DevOps = 54% Enabler:</strong> 156 von 289 Issues sind Enabler &#8212; reiner technischer Overhead</li>
<li><strong>Jan Lubenow: 114 von 289 DevOps-Issues (39%)</strong> &#8212; kritische Personenabhaengigkeit!</li>
<li><strong>STeam praktisch aufgeloest:</strong> Nur noch 8 Issues, Arbeit nach OPs + DevOps migriert</li>
</ol>
</ac:rich-text-body></ac:structured-macro>
<h3>OPs-Team Rotation (bestaetigt)</h3>
<p>Assignees im OPs-Board kommen aus allen Teams:</p>
<table>
<tr><th>Person</th><th>Stamm-Team</th><th>OPs-Issues</th></tr>
<tr><td>Steven Meixner</td><td>Zero</td><td>27</td></tr>
<tr><td>Hans-Henning Ramberger</td><td>CIB</td><td>23</td></tr>
<tr><td>Jonas Koehler</td><td>CIB</td><td>19</td></tr>
<tr><td>Henrik Scholl</td><td>OPs (fest)</td><td>19</td></tr>
<tr><td>Kathrin Schleich</td><td>Zero</td><td>12</td></tr>
<tr><td>Diego Da Costa Souza</td><td>404</td><td>10</td></tr>
<tr><td>Frank Lemke</td><td>Zero</td><td>10</td></tr>
</table>
<h3>Teamgroessen (aus Assignees)</h3>
<table>
<tr><th>Team</th><th>Aktive Personen</th><th>Kern (&gt;10 Issues)</th><th>Top-Contributor</th></tr>
<tr><td>Team 404</td><td>15</td><td>7</td><td>Ana Cvitkovic (78)</td></tr>
<tr><td>Team CIB</td><td>16</td><td>6</td><td>Bishara Jaser (73)</td></tr>
<tr><td>Team Zero</td><td>9</td><td>6</td><td>Steven Meixner (64)</td></tr>
<tr><td>OPs Squad</td><td>23 (rotierend)</td><td>7</td><td>Steven Meixner (27)</td></tr>
<tr style="background:#fff2cc;"><td>DevOps</td><td>7</td><td>3</td><td><strong>Jan Lubenow (114!)</strong></td></tr>
</table>
<h3>Naechste Iteration: Offene Datenquellen</h3>
<table>
<tr><th>Quelle</th><th>Beschreibung</th><th>Status</th></tr>
<tr><td><strong>TTTI Board</strong></td><td>Uebergreifende Issues pathOS &lt;&gt; TTT-Verbund</td><td>Naechste Iteration</td></tr>
<tr><td><strong>TTTSol Board</strong></td><td>Fachliche Klaerungen</td><td>Naechste Iteration</td></tr>
<tr><td><strong>Support-Board</strong></td><td>Kunden-Issues, anderes Jira, wird neu aufgesetzt</td><td>Naechste Iteration</td></tr>
</table>
"@
$Page13Id = Create-Or-Update-Page -Title "13. Jira-Analyse" -HtmlBody $JiraHtml -ParentId $ParentPageId
# --- Seite 14: Audit-Backlog ---
Write-Host ""
Write-Host ">> Seite 14: Audit-Backlog" -ForegroundColor Yellow
$NextHtml = @"
<h2>Audit-Backlog pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Wird regelmaessig aktualisiert</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Dieses Backlog dokumentiert alle offenen Aufgaben, laufende Arbeiten und moegliche Erweiterungen des pathOS Portfolio-Audits. Status: &#128994; In Progress | &#128993; Bald | &#9898; Irgendwann</p>
</ac:rich-text-body></ac:structured-macro>
<h3>&#128994; In Progress</h3>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Beschreibung</th><th>Seit</th></tr>
<tr><td>1</td><td>Personal-Analyse verfeinern</td><td>Tenure-Daten vollstaendig (176 Personen). Bug-Causation-Methodik dokumentiert. Naechster Schritt: Git-Contributions korrelieren.</td><td>27.04.</td></tr>
<tr><td>2</td><td>Confluence-Seiten pflegen</td><td>22 Seiten + Stammseite aktiv. Regelmaessige Updates bei neuen Erkenntnissen.</td><td>22.04.</td></tr>
<tr><td>3</td><td>Knowledge Graph erweitern</td><td>SQLite-DB mit 35 Nodes, 29 Edges. Jira-Exports und SonarQube-Metriken einpflegen.</td><td>27.04.</td></tr>
</table>
<h3>&#128993; Bald (naechste 1-2 Wochen)</h3>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Beschreibung</th><th>Prioritaet</th></tr>
<tr><td>4</td><td>Management-Praesentation</td><td>Kompakte Zusammenfassung fuer Management Board: Status, Findings, Herausforderungen, naechste Schritte. Als Confluence-Seite.</td><td>HOCH</td></tr>
<tr><td>5</td><td>Team-Reorganisation vertiefen</td><td>Konkrete Vorschlaege basierend auf Velocity + Personendaten. OPs-Rotation optimieren, SPOF-Risiken adressieren.</td><td>HOCH</td></tr>
<tr><td>6</td><td>Code-Qualitaet / SonarQube vertiefen</td><td>Testabdeckung pro Team/Service. Coverage-Trends. Kritische Smells priorisieren (S1192 in SV: 976 Duplikate).</td><td>HOCH</td></tr>
<tr><td>7</td><td>VDV-Erweiterung Abrechnung klaeren</td><td>Welche Daten, Schnittstelle zu AC, Business Owner treibt an. 5 blocked High-Priority Tickets in TTTSol.</td><td>MITTEL</td></tr>
<tr><td>8</td><td>Confluence Seiten 1-5 Inhalt aktualisieren</td><td>Inhalte teilweise veraltet (noch aus Iteration 1). Mit aktuellen Erkenntnissen anreichern.</td><td>MITTEL</td></tr>
</table>
<h3>&#9898; Irgendwann (Backlog)</h3>
<table>
<tr><th>#</th><th>Aufgabe</th><th>Beschreibung</th><th>Abhaengigkeit</th></tr>
<tr><td>9</td><td>Support-Board analysieren</td><td>Anderes Jira-System, wird gerade neu aufgesetzt. 2nd-Level-Support-Tickets auswerten.</td><td>Neues Board muss stehen</td></tr>
<tr><td>10</td><td>Performance-Daten</td><td>Produktions-Metriken (Response Times, Error Rates), LuP-Ergebnisse. Prometheus/Grafana-Zugang noetig.</td><td>Zugang zu Monitoring</td></tr>
<tr><td>11</td><td>Geschaeftsprozesse (BPMN) vertiefen</td><td>Camunda-Prozesse aus Confluence dokumentiert. Tiefere Analyse der Prozess-Instanzen und Fehlerquoten.</td><td>Camunda-Zugang</td></tr>
<tr><td>12</td><td>draw.io Diagramme einbetten</td><td>Architektur-Diagramm als draw.io Macro in Confluence einbetten (manuell).</td><td>Keine</td></tr>
<tr><td>13</td><td>Git-Contributions analysieren</td><td>Commit-Frequenz, Code-Ownership pro Service, Bus-Faktor berechnen.</td><td>GitLab API</td></tr>
<tr><td>14</td><td>Dependency-Analyse</td><td>Abhaengigkeiten zwischen Services (Kafka-Topics, REST-Calls). Service-Mesh-Topologie.</td><td>Keine</td></tr>
<tr><td>15</td><td>Incident-Analyse</td><td>Produktions-Incidents seit Go-Live (Dez 2025). MTTR, Haeufigkeit, betroffene Services.</td><td>Incident-Daten</td></tr>
<tr><td>16</td><td>Kosten-Analyse</td><td>AWS-Kosten pro Service/Team. Optimierungspotenzial (Right-Sizing, Reserved Instances).</td><td>AWS Cost Explorer Zugang</td></tr>
<tr><td>17</td><td>Automatisierte Reports</td><td>Woechentlicher/monatlicher Report-Generator (Velocity, Bug-Rate, SonarQube-Trends).</td><td>Stabile Datenbasis</td></tr>
<tr><td>18</td><td>Test-Seite loeschen</td><td>"TEST Umlaut-Pruefung" (ID: 583338908) von Confluence entfernen.</td><td>Keine</td></tr>
</table>
<h3>Erledigte Meilensteine</h3>
<table>
<tr><th>Datum</th><th>Meilenstein</th></tr>
<tr><td>22.04.2026</td><td>Domain Discovery: 167 GitLab-Projekte, 143 Confluence-Seiten, Runbook analysiert</td></tr>
<tr><td>22.04.2026</td><td>Technical Deep Dive: 23 pom.xml, Dependency-Versionen, Tech-Stack dokumentiert</td></tr>
<tr><td>23.04.2026</td><td>TTT-Programm: Go-Live Dez 2025, Hypercare, 8 Programmrisiken dokumentiert</td></tr>
<tr><td>23.04.2026</td><td>Velocity 12 Monate: 4875 Issues, Go-Live-Effekt, Team-Trends identifiziert</td></tr>
<tr><td>24.04.2026</td><td>SonarQube: 74 Projekte, Smells-Detail, Coverage pro Team</td></tr>
<tr><td>24.04.2026</td><td>Geschaeftsprozesse: BPMN-Flows aus Camunda/Confluence dokumentiert</td></tr>
<tr><td>24.04.2026</td><td>Produkt-Roadmap konsolidiert (PO-Input + technische Roadmap)</td></tr>
<tr><td>27.04.2026</td><td>Personal-Analyse: Tenure (176 Personen), Bug-Korrelation, Risiko-Matrix</td></tr>
<tr><td>27.04.2026</td><td>Knowledge Graph + Skills aufgesetzt (SQLite, FTS5, 3 Kiro-Skills)</td></tr>
<tr><td>30.04.2026</td><td>Tenure vollstaendig, Bug-Causation Methodik dokumentiert, Backlog erstellt</td></tr>
</table>
<h3>Datenquellen-Status</h3>
<table>
<tr><th>Quelle</th><th>Umfang</th><th>Status</th></tr>
<tr style="background:#d5e8d4;"><td>GitLab</td><td>167 Projekte</td><td>&#9989; Inventarisiert</td></tr>
<tr style="background:#d5e8d4;"><td>Confluence (BES Space)</td><td>143 Seiten</td><td>&#9989; Exportiert</td></tr>
<tr style="background:#d5e8d4;"><td>Confluence (TTSI Space)</td><td>44 Seiten</td><td>&#9989; Exportiert</td></tr>
<tr style="background:#d5e8d4;"><td>Runbook (arc42)</td><td>~346KB</td><td>&#9989; Eingelesen</td></tr>
<tr style="background:#d5e8d4;"><td>pom.xml / package.json</td><td>23 + 1</td><td>&#9989; Analysiert</td></tr>
<tr style="background:#d5e8d4;"><td>SonarQube</td><td>74 Projekte + Smells</td><td>&#9989; Analysiert</td></tr>
<tr style="background:#d5e8d4;"><td>Jira (alle Boards)</td><td>24.700 Issues</td><td>&#9989; Analysiert</td></tr>
<tr style="background:#d5e8d4;"><td>Velocity (12 Monate)</td><td>4875 Issues</td><td>&#9989; Analysiert</td></tr>
<tr style="background:#d5e8d4;"><td>Tenure-Daten</td><td>176 Personen</td><td>&#9989; Vollstaendig</td></tr>
<tr style="background:#fff2cc;"><td>Support-Board</td><td>Anderes Jira</td><td>&#9888; Wird neu aufgesetzt</td></tr>
<tr style="background:#f8cecc;"><td>Performance-Daten</td><td>Produktion</td><td>&#10060; Kein Zugang</td></tr>
<tr style="background:#f8cecc;"><td>Incident-Daten</td><td>Seit Go-Live</td><td>&#10060; Kein Zugang</td></tr>
<tr style="background:#f8cecc;"><td>AWS-Kosten</td><td>Cost Explorer</td><td>&#10060; Kein Zugang</td></tr>
</table>
"@
$Page14Id = Create-Or-Update-Page -Title "14. Naechste Schritte" -HtmlBody $NextHtml -ParentId $ParentPageId
# --- Seite 15: Management Summary ---
Write-Host ""
Write-Host ">> Seite 15: Management Summary" -ForegroundColor Yellow
$MgmtHtml = @"
<h2>Management Summary &#8212; pathOS Portfolio-Audit</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | <strong>Business Owner:</strong> Andre Knie</p>
<ac:structured-macro ac:name="panel"><ac:parameter ac:name="title">Kernaussage</ac:parameter><ac:parameter ac:name="borderStyle">solid</ac:parameter><ac:parameter ac:name="borderColor">#345B63</ac:parameter><ac:rich-text-body>
<p style="font-size:14px;">pathOS ist seit <strong>Dezember 2025 produktiv</strong> (Go/No-Go Sep 2025 positiv). Das System ist <strong>funktionierend und aktiv entwickelt</strong> mit solidem Tech-Stack und guter Security. Die <strong>Hauptrisiken liegen in der operativen Komplexitaet</strong> und Personenabhaengigkeiten &#8212; nicht im Code selbst.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Aktueller Status (April 2026)</h3>
<table>
<tr><th style="width:25%;">Bereich</th><th style="width:15%;">Status</th><th>Details</th></tr>
<tr style="background:#d5e8d4;"><td>Produktivbetrieb</td><td>&#128994; Stabil</td><td>Seit Dez 2025 produktiv. Verlaengerte Hypercare laeuft noch. NEP2 stabil.</td></tr>
<tr style="background:#fff2cc;"><td>Spring Boot Upgrade</td><td>&#128993; In Arbeit</td><td>EOL 3.5: Juni 2026. Portal fertig, CI/SV/AV in Arbeit. Alle 3 Teams beteiligt.</td></tr>
<tr style="background:#fff2cc;"><td>Portal-Qualitaet (404)</td><td>&#128993; Kritisch</td><td>Bug-Rate 33% (steigend). Frontend-Qualitaetsproblem. 2 Entwickler mit &gt;69% Bug-Anteil.</td></tr>
<tr style="background:#d5e8d4;"><td>Backend (CIB)</td><td>&#128994; Gut</td><td>Bug-Rate von 36% auf 9% gesunken. Erfolgsgeschichte nach Go-Live.</td></tr>
<tr style="background:#d5e8d4;"><td>Schnittstellen (Zero)</td><td>&#128994; Stabil</td><td>Niedrigste Bug-Rate (15%). Beste Code-Qualitaet (91.8% Coverage).</td></tr>
<tr style="background:#f8cecc;"><td>DevOps SPOF</td><td>&#128308; Risiko</td><td>Jan Lubenow = 39% aller DevOps-Issues. Kritischer Single Point of Failure.</td></tr>
</table>
<h3>Letzte Meilensteine</h3>
<table>
<tr><th>Datum</th><th>Meilenstein</th></tr>
<tr><td>Dez 2025</td><td>&#128994; Go-Live pathOS (produktiv)</td></tr>
<tr><td>Sep 2025</td><td>&#128994; Go/No-Go positiv</td></tr>
<tr><td>Apr 2026</td><td>&#128994; Spring Boot 4 Portal abgeschlossen</td></tr>
<tr><td>Apr 2026</td><td>&#128993; Portfolio-Audit gestartet (167 Projekte, 24.7K Issues analysiert)</td></tr>
<tr><td>Apr 2026</td><td>&#128993; Personal-Analyse: 176 Personen, Tenure, Bug-Korrelation</td></tr>
</table>
<h3>&#128270; Zentrale Findings</h3>
<table>
<tr><th style="width:5%;">#</th><th style="width:30%;">Finding</th><th>Evidenz</th><th style="width:15%;">Bewertung</th></tr>
<tr><td>1</td><td>Portal-Frontend hat systematisches Qualitaetsproblem</td><td>Bug-Rate 33% (steigend), 2 Devs mit &gt;69% Bug-Anteil, QA wenig aktiv. Tenure korreliert NICHT mit Qualitaet.</td><td style="background:#f8cecc;">KRITISCH</td></tr>
<tr><td>2</td><td>DevOps ist personenabhaengig</td><td>Jan Lubenow: 39% aller Issues, 1222 Issues gesamt. Kein gleichwertiger Backup.</td><td style="background:#f8cecc;">KRITISCH</td></tr>
<tr><td>3</td><td>CIB zeigt: Stabilisierung ist moeglich</td><td>Bug-Rate von 36% (Jan) auf 9% (Apr). Kern-Trio (Bishara/Saurav/Jonas) mit &gt;93% Done-Rate.</td><td style="background:#d5e8d4;">POSITIV</td></tr>
<tr><td>4</td><td>Zero liefert beste Code-Qualitaet</td><td>4.2 Smells/1K LoC, 91.8% Coverage. Stabiles Team + gute Praktiken = niedrige Bug-Rate.</td><td style="background:#d5e8d4;">POSITIV</td></tr>
<tr><td>5</td><td>OPs-Rotation belastet Zero ueberproportional</td><td>3 von 5 Rotatoren kommen aus Zero. Steven Meixner: 91 Issues (Zero + OPs).</td><td style="background:#fff2cc;">MITTEL</td></tr>
<tr><td>6</td><td>Inaktive Mitglieder blockieren Kapazitaet</td><td>Norbert Maurer (83% offen), Alexander Petioky (1 Issue/90d), Luca Caracciolo (QA, 5 Issues).</td><td style="background:#fff2cc;">MITTEL</td></tr>
</table>
<h3>&#9888; Aktuelle Herausforderungen</h3>
<h4>Geschaeftskritisch (Kundenversprechen / Regulatorik)</h4>
<table>
<tr><th style="width:5%;">#</th><th style="width:25%;">Risiko</th><th style="width:15%;">Tickets</th><th>Situation</th></tr>
<tr style="background:#f8cecc;"><td>1</td><td><strong>Implizite Annahme NAÄ</strong></td><td>TTTSOL-2184 (Highest)<br/>O2CCIB-6931 (offen)</td><td>Kunden versprochen, dass sie den Standard-Prozess erleben. CIB-Umsetzung auf naechsten PI geschoben. Fachlich TopThema, technisch unpriorisiert.</td></tr>
<tr style="background:#f8cecc;"><td>2</td><td><strong>20h Zug &#8212; Abrechnung</strong></td><td>TTTSOL-1677 (High)<br/>TTTSOL-2149 (BLOCKED)</td><td>Loesung funktioniert nicht. Abrechnung des 20h-Zugs ist blockiert. Korrekte Abrechnung nicht moeglich.</td></tr>
<tr style="background:#f8cecc;"><td>3</td><td><strong>Abrechnung TTT / AC Trasse</strong></td><td>41 offene Tickets<br/>8 davon Highest</td><td>Grundlegendes Risiko: Nicht korrekt abrechnen zu koennen. Taskforce-FplW aktiv. Tobias Gehrmann bearbeitet 3 Highest-Tickets.</td></tr>
</table>
<h4>Technisch / Operativ</h4>
<ol>
<li><strong>Spring Boot 3.5 EOL Juni 2026</strong> &#8212; Upgrade laeuft, aber Zeitdruck. 3 Services noch nicht fertig.</li>
<li><strong>Portal-Bug-Rate steigt</strong> &#8212; Kundenseitig sichtbar (EVU-Feedback). Systematisches Frontend-Problem.</li>
<li><strong>DevOps-SPOF</strong> &#8212; Wenn Jan Lubenow ausfaellt, steht Deployment/CI/CD still.</li>
<li><strong>Hypercare-Belastung</strong> &#8212; Verlaengerte Hypercare bindet Kapazitaet (07:00-19:00).</li>
<li><strong>TTTI-Integration</strong> &#8212; 311 offene Tests, 42 echte Bugs. Weniger dramatisch als Zahlen suggerieren.</li>
</ol>
<h3>&#128640; Empfohlene naechste Schritte (Top 5)</h3>
<table>
<tr><th>#</th><th>Massnahme</th><th>Ziel</th><th>Zeithorizont</th></tr>
<tr><td>1</td><td><strong>Jan Lubenow entlasten</strong></td><td>Wissenstransfer auf David Steinkopff + Henrik Scholl. Kein Einzelner &gt;25%.</td><td>Sofort</td></tr>
<tr><td>2</td><td><strong>Portal-Qualitaet steigern</strong></td><td>Code-Reviews Emmanuel/Leon. QA aktivieren. Frontend-Testautomatisierung.</td><td>PI 40</td></tr>
<tr><td>3</td><td><strong>Steven Meixner entlasten</strong></td><td>OPs-Rotation auf CIB/404 ausweiten. Zero-Kernarbeit schuetzen.</td><td>PI 40/41</td></tr>
<tr><td>4</td><td><strong>Spring Boot 4 abschliessen</strong></td><td>CI, SV, AV auf 4.0.5. Deadline: Juni 2026 (EOL).</td><td>PI 40</td></tr>
<tr><td>5</td><td><strong>CIB Best Practices teilen</strong></td><td>Bishara/Saurav/Jonas als Mentoren fuer 404. Arbeitsweise uebertragen.</td><td>PI 41</td></tr>
</table>
<h3>&#128200; Zeitstrahl: Fachliche und technische Meilensteine</h3>
<table style="border-collapse:collapse;width:100%;">
<tr style="background:#345B63;color:white;">
<th style="width:18%;padding:6px;">Thema</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Apr</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Mai</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Jun</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Jul</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Aug</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Sep</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Okt</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Nov</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Dez</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Jan 27</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Feb</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">M&#228;r</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Apr</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Mai</th>
<th style="width:6%;padding:4px;text-align:center;font-size:10px;">Jun</th>
</tr>
<tr><td colspan="16" style="background:#dae8fc;padding:4px;font-weight:bold;font-size:11px;">FACHLICHE MEILENSTEINE</td></tr>
<tr><td style="font-size:11px;">Hypercare (verl.)</td>
<td style="background:#f8cecc;" colspan="3"></td><td colspan="12"></td></tr>
<tr><td style="font-size:11px;"><strong>NEP2</strong></td>
<td style="background:#fff2cc;" colspan="5"></td><td colspan="10"></td></tr>
<tr><td style="font-size:11px;"><strong>GelV</strong></td>
<td colspan="2"></td><td style="background:#fff2cc;" colspan="5"></td><td colspan="8"></td></tr>
<tr><td style="font-size:11px;">ujBau</td>
<td colspan="4"></td><td style="background:#dae8fc;" colspan="6"></td><td colspan="5"></td></tr>
<tr><td style="font-size:11px;">FplJ 28 Vorbereitung</td>
<td colspan="7"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="5"></td></tr>
<tr><td style="font-size:11px;">SL Silber Plus</td>
<td colspan="4"></td><td style="background:#d5e8d4;">&#9650;</td><td colspan="10"></td></tr>
<tr><td colspan="16" style="background:#f5f5f5;padding:4px;font-weight:bold;font-size:11px;">TECHNISCHE MEILENSTEINE</td></tr>
<tr><td style="font-size:11px;"><strong>Spring Boot 4</strong></td>
<td style="background:#fff2cc;" colspan="2"></td><td style="background:#f8cecc;">EOL</td><td colspan="12"></td></tr>
<tr><td style="font-size:11px;">Camunda 8.9</td>
<td colspan="3"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="10"></td></tr>
<tr><td style="font-size:11px;">Monitoring + Netcool</td>
<td style="background:#fff2cc;" colspan="3"></td><td colspan="12"></td></tr>
<tr><td style="font-size:11px;">DR-Test + Secrets</td>
<td colspan="2"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="11"></td></tr>
<tr><td style="font-size:11px;">Deployment-Autom.</td>
<td colspan="3"></td><td style="background:#fff2cc;" colspan="3"></td><td colspan="9"></td></tr>
<tr><td style="font-size:11px;">Daten-Partitionierung</td>
<td colspan="6"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="6"></td></tr>
<tr><td style="font-size:11px;">Team-Reorg</td>
<td colspan="9"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="2"></td></tr>
<tr><td style="font-size:11px;">TPN-Abloesung</td>
<td colspan="10"></td><td style="background:#d5e8d4;" colspan="5"></td></tr>
</table>
<p style="font-size:10px;"><span style="background:#f8cecc;padding:2px 8px;">Kritisch</span> <span style="background:#fff2cc;padding:2px 8px;">In Arbeit</span> <span style="background:#dae8fc;padding:2px 8px;">Geplant</span> <span style="background:#d5e8d4;padding:2px 8px;">Strategisch</span></p>
<h3>&#128203; Analyse-Basis</h3>
<table>
<tr><th>Quelle</th><th>Umfang</th></tr>
<tr><td>GitLab-Projekte</td><td>167 (automatisiert inventarisiert)</td></tr>
<tr><td>Confluence-Seiten</td><td>187 (BES + TTSI Space)</td></tr>
<tr><td>Jira-Issues</td><td>24.700 (Bulk-Export, 176 Personen)</td></tr>
<tr><td>SonarQube</td><td>74 Projekte (Smells + Coverage)</td></tr>
<tr><td>Runbook/arc42</td><td>~346KB Architekturdokumentation</td></tr>
<tr><td>pom.xml / package.json</td><td>23 + 1 (Versionsanalyse)</td></tr>
</table>
<p>Durchgefuehrt in 5 Sessions (Apr 2026). Alle Detail-Ergebnisse in den Unterseiten dokumentiert.</p>
"@
$Page15Id = Create-Or-Update-Page -Title "Management Summary" -HtmlBody $MgmtHtml -ParentId $ParentPageId
# --- Seite 16: TTT-Programm und NEP2 ---
Write-Host ""
Write-Host ">> Seite 16: TTT-Programm und NEP2" -ForegroundColor Yellow
$TttHtml = @"
<h2>TTT-Programm und NEP2 &#8212; Kontext fuer pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Quelle: TTSI Confluence Space</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p><strong>Status:</strong> pathOS ist seit Dezember 2025 produktiv (FplJ 27). Go/No-Go war September 2025 &#8212; positiv entschieden. Aktuell: Verlaengerte Hypercare + NEP2.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Was ist TTT?</h3>
<p><strong>TTT</strong> (TAF/TAP TSI &#8212; Telematics Applications for Freight / Telematics Applications for Passengers, Technical Specification for Interoperability) ist das uebergreifende Programm zur Einfuehrung des europaeischen Standards fuer Trassenbestellung bei DB InfraGO. <strong>Regulatorisch verpflichtend</strong> (EU-Verordnungen). Bereits 4x verschoben seit 2014. ~400 Marktteilnehmer muessen gleichzeitig umgestellt werden.</p>
<h3>Beteiligte Value Teams</h3>
<table>
<tr><th>Value Team</th><th>Bereich</th><th>System</th></tr>
<tr style="background:#dae8fc;"><td><strong>O2C</strong> (Order2Cash)</td><td>Vertrieb</td><td><strong>pathOS</strong> &#8212; Trassenbestellung</td></tr>
<tr><td>C2S (Capacity2Schedule)</td><td>Fahrplan</td><td>Fahrplanung, Kapazitaetsmanagement</td></tr>
<tr><td>S2O (Schedule2Operate)</td><td>Betrieb</td><td>Betriebliche Meldungen</td></tr>
</table>
<h3>Meilensteine</h3>
<table>
<tr><th>Meilenstein</th><th>Bedeutung</th><th>Status</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Go/No-Go</strong></td><td>Entscheidung September 2025</td><td>&#9989; Positiv entschieden</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Go-Live FplJ 27</strong></td><td>Fahrplanwechsel Dezember 2025</td><td>&#9989; Produktiv seit ~4 Monaten</td></tr>
<tr style="background:#d5e8d4;"><td><strong>NEP1</strong></td><td>Netzfahrplan-Erstbestellung</td><td>&#9989; Abgeschlossen</td></tr>
<tr style="background:#fff2cc;"><td><strong>Hypercare</strong></td><td>Verlaengerte Stabilisierungsphase</td><td>&#9888; Laeuft noch</td></tr>
<tr style="background:#fff2cc;"><td><strong>NEP2</strong></td><td>Netzfahrplan Phase 2</td><td>&#9888; Aktuell in Arbeit</td></tr>
<tr style="background:#fff2cc;"><td><strong>GelV</strong></td><td>Gelegenheitsverkehr</td><td>&#9888; In Umsetzung</td></tr>
<tr><td>ujBau</td><td>Umgebungsjahresbau</td><td>In Planung</td></tr>
</table>
<h3>Go/No-Go (ABGESCHLOSSEN)</h3>
<table>
<tr><th>Datum</th><th>Ereignis</th><th>Status</th></tr>
<tr style="background:#d5e8d4;"><td>August 2025</td><td>Messung vor Stellungnahmeverfahren</td><td>&#9989;</td></tr>
<tr style="background:#d5e8d4;"><td>September 2025</td><td>Messung nach Stellungnahmeverfahren</td><td>&#9989;</td></tr>
<tr style="background:#d5e8d4;"><td><strong>September 2025</strong></td><td><strong>Go/No-Go Entscheidung &#8212; POSITIV</strong></td><td>&#9989;</td></tr>
<tr style="background:#d5e8d4;"><td>Dezember 2025</td><td>Fahrplanwechsel &#8212; Go-Live FplJ 27</td><td>&#9989;</td></tr>
<tr style="background:#fff2cc;"><td>Seit Dezember 2025</td><td>Hypercare (verlaengert)</td><td>&#9888; Laeuft noch</td></tr>
</table>
<h3>Programmrisiken (historisch &#8212; vor Go-Live identifiziert)</h3>
<ac:structured-macro ac:name="note"><ac:rich-text-body><p>Diese Risiken wurden vor dem Go-Live (Dez 2025) identifiziert. Einige sind durch den erfolgreichen Go-Live mitigiert, andere bestehen in veraenderter Form weiter.</p></ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>ID</th><th>Risiko</th><th>Status nach Go-Live</th></tr>
<tr style="background:#d5e8d4;"><td>TTTSOL-52</td><td>Unrealistische Go-Live-Entscheidung</td><td>&#9989; Go-Live war erfolgreich</td></tr>
<tr style="background:#fff2cc;"><td>TTTSOL-51</td><td>Rueckstand bei funktionalen Anforderungen</td><td>&#9888; NEP2 + GelV noch in Arbeit</td></tr>
<tr style="background:#fff2cc;"><td>TTTSOL-50</td><td>Budgetrisiken</td><td>&#9888; Weiterhin relevant</td></tr>
<tr style="background:#fff2cc;"><td>TTTSOL-48</td><td>Ressourcenengpaesse</td><td>&#9888; Weiterhin relevant (Konkurrenz mit anderen Themen)</td></tr>
<tr style="background:#fff2cc;"><td>TTTSOL-47</td><td>Mangelnde Qualitaetssicherung</td><td>&#9888; 165 Portal-Bugs, 476 TTTI-Issues offen</td></tr>
<tr style="background:#fff2cc;"><td>TTTSOL-44</td><td>Ueberplanung ujBau (110 Capabilities)</td><td>&#9888; Weiterhin relevant</td></tr>
</table>
<h3>Aktueller Fokus fuer pathOS</h3>
<table>
<tr>
<td style="background:#d5e8d4;text-align:center;padding:10px;">&#9989; Go-Live<br/>Dez 2025</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#fff2cc;text-align:center;padding:10px;font-weight:bold;">JETZT<br/>Hypercare<br/>+ NEP2</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#f8cecc;text-align:center;padding:10px;">Jun 2026<br/>Spring Boot 4<br/>(EOL 3.5!)</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#fff2cc;text-align:center;padding:10px;">Aug 2026<br/>SL Silber Plus<br/>Hypercare Ende</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:10px;">H2 2026<br/>GelV, ujBau<br/>FplJ 28</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#d5e8d4;text-align:center;padding:10px;">2027<br/>Team-Reorg<br/>TPN-Abloesung</td>
</tr>
</table>
"@
$Page16Id = Create-Or-Update-Page -Title "15. TTT-Programm und NEP2" -HtmlBody $TttHtml -ParentId $ParentPageId
# --- Seite 17: Roadmap uebergreifend + pathOS ---
Write-Host ""
Write-Host ">> Seite 17: Roadmap uebergreifend + pathOS" -ForegroundColor Yellow
$RoadmapFullHtml = @"
<h2>Roadmap: TTT-Programm und pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | pathOS ist seit Dezember 2025 produktiv (FplJ 27)</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p><strong>Status:</strong> pathOS ist seit ~4 Monaten produktiv. Go-Live war Dezember 2025. Wir befinden uns in <strong>verlaengerter Hypercare + NEP2</strong>. Service Level Silber Plus wird ab August 2026 erwartet.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Zeitachse: April 2026 bis Mitte 2027</h3>
<table>
<tr>
<td style="background:#f8cecc;text-align:center;padding:12px;font-weight:bold;">Apr-Jun 2026<br/>JETZT<br/>Stabilisieren<br/>Spring Boot 4<br/>NEP2</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#fff2cc;text-align:center;padding:12px;font-weight:bold;">Jul-Sep 2026<br/>Haerten<br/>SL Silber Plus<br/>Hypercare Ende<br/>GelV</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:12px;">Okt-Dez 2026<br/>Skalieren<br/>ujBau<br/>FplJ 28 Vorb.</td>
<td style="text-align:center;font-size:20px;">&#10132;</td>
<td style="background:#d5e8d4;text-align:center;padding:12px;">Jan-Jun 2027<br/>Weiterentwickeln<br/>Team-Reorg<br/>TPN-Abloesung</td>
</tr>
</table>
<h3>Phase A: JETZT (April-Juni 2026) &#8212; Stabilisieren + Schulden abbauen</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body><p>Spring Boot 3.5 EOL ist Juni 2026. Upgrade muss jetzt laufen.</p></ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>#</th><th>Aktion</th><th>Deadline</th><th>Team</th></tr>
<tr style="background:#fff2cc;"><td>A1</td><td><strong>Spring Boot 4 Upgrade</strong></td><td>Juni 2026 (EOL 3.5)</td><td>Alle &#8212; LAEUFT! Portal fertig, CI/SV/AV in Arbeit</td></tr>
<tr><td>A2</td><td>Parent-POM Java 21 + Konsolidierung</td><td>Mai 2026</td><td>OPs</td></tr>
<tr style="background:#fff2cc;"><td>A3</td><td><strong>NEP2 Funktionalitaet liefern</strong></td><td>Laufend</td><td>CIB, Zero</td></tr>
<tr><td>A4</td><td>Hypercare-Bugs abarbeiten</td><td>Laufend</td><td>Alle</td></tr>
<tr><td>A5</td><td>Monitoring + Netcool</td><td>Juni 2026</td><td>OPs</td></tr>
<tr><td>A7</td><td>Portal-Bugs reduzieren (165 Bugs!)</td><td>Laufend</td><td>404</td></tr>
</table>
<h3>Phase B: Sommer 2026 (Juli-September) &#8212; Haerten + Erweitern</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Deadline</th><th>Team</th></tr>
<tr style="background:#d5e8d4;"><td>B1</td><td><strong>Hypercare beenden</strong></td><td>Juli 2026</td><td>Alle</td></tr>
<tr style="background:#fff2cc;"><td>B2</td><td><strong>Service Level Silber Plus erreichen</strong></td><td>August 2026</td><td>OPs</td></tr>
<tr><td>B3</td><td>DR-Test 3 + Secret-Rotation</td><td>Juli 2026</td><td>OPs</td></tr>
<tr><td>B5</td><td>Camunda 8.9 + AV Performance</td><td>Aug 2026</td><td>CIB</td></tr>
<tr><td>B7</td><td>Deployment-Automatisierung</td><td>Aug 2026</td><td>OPs + alle</td></tr>
<tr><td>B8</td><td><strong>GelV Erweiterungen</strong></td><td>Sep 2026</td><td>CIB, 404</td></tr>
<tr><td>B10</td><td>AppMesh-Alternative</td><td>Sep 2026</td><td>OPs/CNP</td></tr>
</table>
<h3>Phase C: Herbst 2026 (Oktober-Dezember) &#8212; Skalieren</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Deadline</th><th>Team</th></tr>
<tr><td>C1</td><td>Daten-Partitionierung Fahrplanjahr</td><td>Dez 2026</td><td>CIB</td></tr>
<tr><td>C2</td><td>ujBau-Funktionalitaet</td><td>Laufend</td><td>CIB, Zero</td></tr>
<tr><td>C3</td><td>Umgebungen konsolidieren (17+ reduzieren)</td><td>Nov 2026</td><td>OPs</td></tr>
<tr><td>C4</td><td>Contract Testing einfuehren</td><td>Okt 2026</td><td>Alle</td></tr>
<tr><td>C6</td><td>FplJ 28 Vorbereitung</td><td>Dez 2026</td><td>Alle</td></tr>
</table>
<h3>Phase D: Fruehling 2027 (Januar-Juni) &#8212; Weiterentwickeln</h3>
<table>
<tr><th>#</th><th>Aktion</th><th>Zeitraum</th><th>Team</th></tr>
<tr style="background:#dae8fc;"><td>D1</td><td><strong>Team-Reorganisation</strong></td><td>Q1 2027</td><td>PM/RTE</td></tr>
<tr style="background:#dae8fc;"><td>D2</td><td><strong>OPs wird Platform Team</strong></td><td>Q1 2027</td><td>PM/RTE</td></tr>
<tr><td>D4</td><td>GitLab-Repos restrukturieren</td><td>Q1 2027</td><td>OPs</td></tr>
<tr><td>D6</td><td>TPN vollstaendig abloesen</td><td>Q2 2027</td><td>Zero, CIB</td></tr>
<tr><td>D7</td><td>TTT-Entkopplung</td><td>Q2 2027</td><td>Alle</td></tr>
</table>
<h3>Zeitstrahl nach Teams (April 2026 &#8212; Juni 2027)</h3>
<table style="border-collapse:collapse;width:100%;">
<tr style="background:#345B63;color:white;">
<th style="width:14%;padding:6px;">Team / Thema</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Apr 26</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Mai</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Jun</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Jul</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Aug</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Sep</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Okt</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Nov</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Dez</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Jan 27</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Feb</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">M&#228;r</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Apr</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Mai</th>
<th style="width:6%;padding:3px;text-align:center;font-size:9px;">Jun</th>
</tr>
<tr><td colspan="16" style="background:#f8cecc;padding:3px;font-weight:bold;font-size:10px;">TEAM 404 (Portal)</td></tr>
<tr><td style="font-size:10px;">Spring Boot 4</td><td style="background:#fff2cc;" colspan="2"></td><td colspan="13"></td></tr>
<tr><td style="font-size:10px;">NEP2 Portal-Features</td><td style="background:#fff2cc;" colspan="4"></td><td colspan="11"></td></tr>
<tr><td style="font-size:10px;">Portal-Bugs (165!)</td><td style="background:#f8cecc;" colspan="5"></td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">GelV Portal</td><td colspan="2"></td><td style="background:#dae8fc;" colspan="4"></td><td colspan="9"></td></tr>
<tr><td style="font-size:10px;">ujBau Portal</td><td colspan="5"></td><td style="background:#dae8fc;" colspan="4"></td><td colspan="6"></td></tr>
<tr><td colspan="16" style="background:#fff2cc;padding:3px;font-weight:bold;font-size:10px;">TEAM CIB (Prozesse/Backend)</td></tr>
<tr><td style="font-size:10px;">Spring Boot 4 (SV)</td><td style="background:#fff2cc;" colspan="2"></td><td colspan="13"></td></tr>
<tr><td style="font-size:10px;">NEP2 Prozesse</td><td style="background:#fff2cc;" colspan="5"></td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">Camunda 8.9</td><td colspan="3"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">AV Full-Table-Scans</td><td colspan="3"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">Daten-Partitionierung</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="6"></td></tr>
<tr><td style="font-size:10px;">GelV Backend</td><td colspan="2"></td><td style="background:#dae8fc;" colspan="5"></td><td colspan="8"></td></tr>
<tr><td colspan="16" style="background:#dae8fc;padding:3px;font-weight:bold;font-size:10px;">TEAM ZERO (TAF/TAP)</td></tr>
<tr><td style="font-size:10px;">Spring Boot 4 (CI/AV)</td><td style="background:#fff2cc;" colspan="2"></td><td colspan="13"></td></tr>
<tr><td style="font-size:10px;">NEP2 Schnittstellen</td><td style="background:#fff2cc;" colspan="5"></td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">EVU-Onboarding</td><td colspan="5"></td><td style="background:#dae8fc;" colspan="4"></td><td colspan="6"></td></tr>
<tr><td style="font-size:10px;">TPN-Abloesung</td><td colspan="9"></td><td style="background:#d5e8d4;" colspan="6"></td></tr>
<tr><td colspan="16" style="background:#f5f5f5;padding:3px;font-weight:bold;font-size:10px;">OPs / DevOps</td></tr>
<tr><td style="font-size:10px;">Monitoring + Netcool</td><td style="background:#fff2cc;" colspan="3"></td><td colspan="12"></td></tr>
<tr><td style="font-size:10px;">DR-Test + Secrets</td><td colspan="2"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="11"></td></tr>
<tr><td style="font-size:10px;">SL Silber Plus</td><td colspan="4"></td><td style="background:#d5e8d4;">&#9650;</td><td colspan="10"></td></tr>
<tr><td style="font-size:10px;">Deployment-Autom.</td><td colspan="3"></td><td style="background:#fff2cc;" colspan="3"></td><td colspan="9"></td></tr>
<tr><td style="font-size:10px;">AppMesh-Alternative</td><td colspan="4"></td><td style="background:#fff2cc;" colspan="2"></td><td colspan="9"></td></tr>
<tr><td style="font-size:10px;">Umgebungen reduzieren</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="6"></td></tr>
<tr><td colspan="16" style="background:#d5e8d4;padding:3px;font-weight:bold;font-size:10px;">UEBERGREIFEND / ORGA</td></tr>
<tr><td style="font-size:10px;">Hypercare (verl.)</td><td style="background:#f8cecc;" colspan="3"></td><td colspan="12"></td></tr>
<tr><td style="font-size:10px;">TTTI-Bugs (42)</td><td style="background:#fff2cc;" colspan="4"></td><td colspan="11"></td></tr>
<tr><td style="font-size:10px;">Contract Testing</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="6"></td></tr>
<tr><td style="font-size:10px;">Team-Reorganisation</td><td colspan="9"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="2"></td></tr>
<tr><td style="font-size:10px;">Platform Team</td><td colspan="9"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="2"></td></tr>
</table>
<p style="font-size:10px;"><span style="background:#f8cecc;padding:2px 8px;">Kritisch/Aktiv</span> <span style="background:#fff2cc;padding:2px 8px;">In Arbeit</span> <span style="background:#dae8fc;padding:2px 8px;">Geplant</span> <span style="background:#d5e8d4;padding:2px 8px;">Strategisch</span> &#9650; = Meilenstein</p>
<h3>Zusammenfassung</h3>
<table>
<tr><th>Zeitraum</th><th>Fokus</th><th>Kritischste Aktion</th></tr>
<tr style="background:#f8cecc;"><td><strong>Apr-Jun 2026</strong></td><td>Stabilisieren</td><td>Spring Boot 4 (EOL Juni!), NEP2, Hypercare-Bugs</td></tr>
<tr style="background:#fff2cc;"><td><strong>Jul-Sep 2026</strong></td><td>Haerten</td><td>SL Silber Plus (Aug), Hypercare beenden, GelV</td></tr>
<tr><td><strong>Okt-Dez 2026</strong></td><td>Skalieren</td><td>Daten-Partitionierung, ujBau, FplJ 28</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Jan-Jun 2027</strong></td><td>Weiterentwickeln</td><td>Team-Reorg, Platform Team, TPN-Abloesung</td></tr>
</table>
"@
$Page17Id = Create-Or-Update-Page -Title "16. Roadmap uebergreifend und pathOS" -HtmlBody $RoadmapFullHtml -ParentId $ParentPageId
# --- Seite 18: TTTI Deep Dive ---
Write-Host ""
Write-Host ">> Seite 18: TTTI Deep Dive" -ForegroundColor Yellow
$TttiHtml = @"
<h2>TTTI Board Deep Dive</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | 1000 Issues gesamt, 558 offen</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p><strong>Bewertung:</strong> Der &quot;Rueckstau&quot; von 558 offenen Issues ist weniger dramatisch als es aussieht. Der Grossteil sind ungefuehrte Tests (311) und organisatorische Aufgaben (171). Die <strong>42 echten Bugs</strong> sind der relevante Handlungsbedarf.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Aufschluesselung der 558 offenen Issues</h3>
<table>
<tr><th>Typ</th><th>Anzahl</th><th>Anteil</th><th>Bewertung</th></tr>
<tr><td>Test Execution</td><td>220</td><td>39%</td><td>Geplante Testlaeufe, noch nicht durchgefuehrt</td></tr>
<tr><td>Aufgabe</td><td>171</td><td>31%</td><td>Organisatorische/koordinative Items</td></tr>
<tr><td>Test</td><td>91</td><td>16%</td><td>Testfall-Definitionen</td></tr>
<tr style="background:#fff2cc;"><td><strong>Bug</strong></td><td><strong>42</strong></td><td><strong>8%</strong></td><td><strong>Echte Fehler &#8212; relevanter Handlungsbedarf</strong></td></tr>
<tr><td>Test Plan / Test Set</td><td>28</td><td>5%</td><td>Test-Organisation</td></tr>
<tr><td>Story</td><td>6</td><td>1%</td><td>Feature-Anforderungen</td></tr>
</table>
<h3>Bug-Status (42 offene Bugs)</h3>
<table>
<tr><th>Status</th><th>Anzahl</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Ready for Release</td><td>5</td><td>Quasi geloest</td></tr>
<tr style="background:#d5e8d4;"><td>Test</td><td>9</td><td>Fix wird getestet</td></tr>
<tr style="background:#fff2cc;"><td>In Bearbeitung</td><td>10</td><td>Wird aktiv bearbeitet</td></tr>
<tr style="background:#f8cecc;"><td>Offen</td><td>12</td><td>Noch nicht angefasst</td></tr>
<tr style="background:#f8cecc;"><td>Blocked</td><td>6</td><td>Blockiert durch Abhaengigkeiten</td></tr>
</table>
<h3>Kritischste Bugs (High/Highest/Kritisch)</h3>
<h4>pathOS-bezogen</h4>
<table>
<tr><th>Key</th><th>Status</th><th>Beschreibung</th></tr>
<tr><td>TTTI-8102</td><td style="background:#f8cecc;">Offen</td><td>C-Kundennummern koennen nicht an GFD-Z uebergeben werden</td></tr>
<tr><td>TTTI-7983</td><td style="background:#d5e8d4;">Ready</td><td>Camunda Tasklist PROD: Technischer Fehler TPN-TTTRelatedPlannedTransportId null</td></tr>
<tr><td>TTTI-7982</td><td style="background:#d5e8d4;">Ready</td><td>Camunda Tasklist PROD: pathID kann nicht aufgeloest werden</td></tr>
<tr><td>TTTI-7200</td><td style="background:#d5e8d4;">Ready</td><td>NAE wird nicht an Kunden uebergeben</td></tr>
</table>
<h4>TPN-bezogen</h4>
<table>
<tr><th>Key</th><th>Status</th><th>Beschreibung</th></tr>
<tr><td>TTTI-7949</td><td style="background:#fff2cc;">In Bearbeitung</td><td>Kundenclient: Aenderung nur auf Primaervertrag ausloesbar</td></tr>
<tr><td>TTTI-7025</td><td style="background:#f8cecc;">Blocked</td><td>TPN wirft Fehler bei Pruefung Bestellung in Abgeschlossen</td></tr>
<tr><td>TTTI-7297</td><td style="background:#fff2cc;">In Bearbeitung</td><td>Postkorb: Zugnummer-Spalte zeigt falsch Rot</td></tr>
</table>
<h4>ujBau-bezogen</h4>
<table>
<tr><th>Key</th><th>Status</th><th>Beschreibung</th></tr>
<tr><td>TTTI-6572</td><td style="background:#f8cecc;">Offen</td><td>Netzausgeloeste Aenderung kommt nicht an (pathOS/TPN)</td></tr>
<tr><td>TTTI-8143</td><td style="background:#f8cecc;">Blocked</td><td>VT fuer Bautrasse werden nicht ausgestanzt</td></tr>
<tr><td>TTTI-5654</td><td style="background:#f8cecc;">Blocked</td><td>JourneyLocationTypeCode 05 nicht in PDM vorhanden</td></tr>
<tr><td>TTTI-7890</td><td style="background:#f8cecc;">Offen</td><td>Bautrasse bleibt im Phasenstatus FPE offen</td></tr>
</table>
<h4>Abrechnung-bezogen</h4>
<table>
<tr><th>Key</th><th>Status</th><th>Beschreibung</th></tr>
<tr><td>TTTI-8005</td><td style="background:#fff2cc;">In Bearbeitung</td><td>Aufteilen scheitert (vmtl. wg. VZReg am EinbruchsBf)</td></tr>
<tr><td>TTTI-7986</td><td style="background:#fff2cc;">In Bearbeitung</td><td>Fpl26: Berichte scheitern mit Timeout</td></tr>
</table>
<h3>35 Blocked Issues</h3>
<table>
<tr><th>Typ</th><th>Anzahl</th></tr>
<tr><td>Aufgabe</td><td>21</td></tr>
<tr><td>Test</td><td>7</td></tr>
<tr><td>Bug</td><td>6</td></tr>
<tr><td>Story</td><td>1</td></tr>
</table>
<p>Primaer organisatorische Blocker und Abhaengigkeiten zu anderen Systemen (TPN, GFD-Z, ujBau-Tools).</p>
<h3>Top-Labels (offene Issues)</h3>
<table>
<tr><th>Label</th><th>Anzahl</th><th>Bedeutung</th></tr>
<tr><td>TTT_MUSS</td><td>21</td><td>Muss-Anforderungen fuer TTT</td></tr>
<tr><td>FAHRPLAN</td><td>17</td><td>Fahrplan-Integration</td></tr>
<tr><td>TTT_ujBau</td><td>10</td><td>Bau-bezogene Integration</td></tr>
<tr><td>TTT_Kunde</td><td>8</td><td>Kundenseitige Themen</td></tr>
<tr><td>EVU_SST_TTT</td><td>8</td><td>EVU-Schnittstellen-Tests</td></tr>
</table>
"@
$Page18Id = Create-Or-Update-Page -Title "17. TTTI Deep Dive" -HtmlBody $TttiHtml -ParentId $ParentPageId
# --- Seite 19: Velocity und Team-Analyse ---
Write-Host ""
Write-Host ">> Seite 19: Velocity und Team-Analyse" -ForegroundColor Yellow
$VeloHtml = @"
<h2>Velocity und Team-Analyse (12 Monate)</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Zeitraum: April 2025 &#8212; April 2026 | 4875 Issues analysiert</p>
<h3>Monatlicher Durchsatz (alle Teams)</h3>
<table style="font-size:11px;">
<tr style="background:#345B63;color:white;"><th>Monat</th><th>404</th><th>CIB</th><th>Zero</th><th>OPs</th><th>DevOps</th><th><strong>Total</strong></th><th>Bugs</th><th>Bug%</th><th>Kontext</th></tr>
<tr><td>2025-05</td><td>108</td><td>86</td><td>154</td><td>&#8212;</td><td>13</td><td><strong>361</strong></td><td>37</td><td>10%</td><td>Entwicklung</td></tr>
<tr><td>2025-06</td><td>77</td><td>63</td><td>110</td><td>&#8212;</td><td>32</td><td><strong>282</strong></td><td>34</td><td>12%</td><td>Entwicklung</td></tr>
<tr><td>2025-07</td><td>137</td><td>88</td><td>167</td><td>&#8212;</td><td>84</td><td><strong>476</strong></td><td>83</td><td>17%</td><td>Pre-Go/No-Go</td></tr>
<tr><td>2025-08</td><td>90</td><td>41</td><td>182</td><td>&#8212;</td><td>99</td><td><strong>412</strong></td><td>65</td><td>16%</td><td>Go/No-Go Vorb.</td></tr>
<tr style="background:#d5e8d4;"><td>2025-09</td><td>160</td><td>82</td><td>119</td><td>&#8212;</td><td>78</td><td><strong>439</strong></td><td>71</td><td>16%</td><td><strong>Go/No-Go positiv</strong></td></tr>
<tr><td>2025-10</td><td>158</td><td>78</td><td>128</td><td>&#8212;</td><td>57</td><td><strong>421</strong></td><td>81</td><td>19%</td><td>Pre-Go-Live</td></tr>
<tr><td>2025-11</td><td>178</td><td>119</td><td>92</td><td>&#8212;</td><td>69</td><td><strong>458</strong></td><td>104</td><td>23%</td><td>Pre-Go-Live Peak</td></tr>
<tr style="background:#fff2cc;"><td>2025-12</td><td>97</td><td>48</td><td>100</td><td>&#8212;</td><td>45</td><td><strong>290</strong></td><td>73</td><td>25%</td><td><strong>GO-LIVE</strong></td></tr>
<tr><td>2026-01</td><td>134</td><td>83</td><td>98</td><td>39</td><td>117</td><td><strong>471</strong></td><td>96</td><td>20%</td><td>Hypercare</td></tr>
<tr style="background:#f8cecc;"><td>2026-02</td><td>102</td><td>54</td><td>79</td><td>88</td><td>38</td><td><strong>361</strong></td><td>103</td><td><strong>29%</strong></td><td><strong>Hypercare Peak</strong></td></tr>
<tr><td>2026-03</td><td>172</td><td>74</td><td>100</td><td>127</td><td>57</td><td><strong>530</strong></td><td>117</td><td>22%</td><td>Stabilisierung</td></tr>
<tr><td>2026-04*</td><td>108</td><td>80</td><td>52</td><td>51</td><td>26</td><td><strong>317</strong></td><td>64</td><td>20%</td><td>Normalisierung</td></tr>
</table>
<p style="font-size:10px;">*April noch nicht abgeschlossen</p>
<h3>Bug-Rate Entwicklung</h3>
<table>
<tr><th>Phase</th><th>Zeitraum</th><th>Bug-Rate</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Entwicklung</td><td>Apr-Jun 2025</td><td>10-14%</td><td>Normal</td></tr>
<tr><td>Pre-Go-Live</td><td>Jul-Nov 2025</td><td>16-23%</td><td>Steigend (erwartbar)</td></tr>
<tr style="background:#fff2cc;"><td>Go-Live</td><td>Dez 2025</td><td>25%</td><td>Go-Live Stress</td></tr>
<tr style="background:#f8cecc;"><td>Hypercare Peak</td><td>Feb 2026</td><td><strong>29%</strong></td><td>Hoechster Wert!</td></tr>
<tr style="background:#d5e8d4;"><td>Normalisierung</td><td>Apr 2026</td><td>20%</td><td>Sinkend, aber noch hoch</td></tr>
</table>
<h3>Team-Ueberblicke</h3>
<h4>Team 404 (Portal) &#8212; 15 Personen, 1537 Issues/12M</h4>
<ac:structured-macro ac:name="warning"><ac:rich-text-body><p>Bug-Rate steigt seit Go-Live (22% &#8594; 33%). Portal ist Kundenfacing &#8212; Bugs werden direkt von EVUs gemeldet.</p></ac:rich-text-body></ac:structured-macro>
<table style="font-size:11px;">
<tr><th>Person</th><th>Total</th><th>Done</th><th>Open</th><th>Bugs</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Ana Cvitkovic</strong></td><td>78</td><td>71</td><td>7</td><td>3</td><td>&#11088; Top-Performer: Hoechster Output, niedrigste Bug-Rate</td></tr>
<tr><td>Jasmin Keskin</td><td>45</td><td>33</td><td>12</td><td>19</td><td>Hohe Bug-Zuweisung (42%)</td></tr>
<tr><td>Emmanuel Kontcheu Tagne</td><td>42</td><td>32</td><td>10</td><td>29</td><td>&#9888; 69% Bugs! Primaer Bug-Fixer</td></tr>
<tr><td>Diego Da Costa Souza</td><td>41</td><td>30</td><td>11</td><td>6</td><td>Spring Boot 4 Portal &#8212; erledigt</td></tr>
<tr><td>Leon Hoerpel</td><td>35</td><td>22</td><td>13</td><td>25</td><td>71% Bugs, hoher Backlog</td></tr>
<tr><td>Dominik Ruecker</td><td>31</td><td>19</td><td>12</td><td>16</td><td>52% Bugs</td></tr>
<tr><td>Annette Halbhuber</td><td>26</td><td>13</td><td>13</td><td>12</td><td>50% offen, 46% Bugs</td></tr>
<tr><td>Simon Reitinger</td><td>15</td><td>15</td><td>0</td><td>11</td><td>100% Done, primaer Bug-Fixer</td></tr>
<tr style="background:#f5f5f5;"><td><em>Marcel Hufgard</em></td><td>8</td><td>4</td><td>4</td><td>0</td><td>Geringe Sichtbarkeit</td></tr>
<tr style="background:#f5f5f5;"><td><em>4 weitere</em></td><td>4</td><td>0-5</td><td>&#8212;</td><td>0</td><td>Kaum sichtbar (je 0-1 Issues)</td></tr>
</table>
<h4>Team CIB (Backend) &#8212; 16 Personen, 905 Issues/12M</h4>
<ac:structured-macro ac:name="tip"><ac:rich-text-body><p>Bug-Rate sinkt dramatisch (36% Jan &#8594; 9% April). Backend stabilisiert sich. Positiver Trend.</p></ac:rich-text-body></ac:structured-macro>
<table style="font-size:11px;">
<tr><th>Person</th><th>Total</th><th>Done</th><th>Open</th><th>Bugs</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Bishara Jaser</strong></td><td>73</td><td>68</td><td>5</td><td>16</td><td>&#11088; Top-Performer: 93% Done, solide Bug-Rate</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Saurav Kumar</strong></td><td>48</td><td>45</td><td>3</td><td>4</td><td>&#11088; 94% Done, nur 8% Bugs</td></tr>
<tr><td>Jonas Koehler</td><td>34</td><td>34</td><td>0</td><td>14</td><td>100% Done, 41% Bugs</td></tr>
<tr><td>Dong-Won Han</td><td>20</td><td>16</td><td>4</td><td>2</td><td>Solide</td></tr>
<tr><td>Hans-Henning Ramberger</td><td>16</td><td>16</td><td>0</td><td>0</td><td>100% Done, 0 Bugs &#8212; Enabler/Infra?</td></tr>
<tr><td>Vasileios Dimitriadis</td><td>11</td><td>9</td><td>2</td><td>5</td><td>45% Bugs</td></tr>
<tr><td>Christian Meins</td><td>9</td><td>6</td><td>3</td><td>7</td><td>78% Bugs!</td></tr>
<tr style="background:#f5f5f5;"><td><em>Harry Braun</em></td><td>5</td><td>0</td><td>4</td><td>0</td><td>&#9888; Spring Boot 4 SV &#8212; alles offen</td></tr>
<tr style="background:#f5f5f5;"><td><em>5 weitere</em></td><td>1-6</td><td>&#8212;</td><td>&#8212;</td><td>&#8212;</td><td>Geringe Sichtbarkeit</td></tr>
</table>
<h4>Team Zero (TAF/TAP) &#8212; 9 Personen, 1409 Issues/12M</h4>
<table style="font-size:11px;">
<tr><th>Person</th><th>Total</th><th>Done</th><th>Open</th><th>Bugs</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Steven Meixner</strong></td><td>64</td><td>63</td><td>1</td><td>21</td><td>&#11088; 98% Done, auch 27 OPs-Issues &#8212; Allrounder</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Bing Shi</strong></td><td>63</td><td>52</td><td>11</td><td>4</td><td>&#11088; Hoher Output, nur 6% Bugs</td></tr>
<tr><td>Frank Lemke</td><td>49</td><td>43</td><td>6</td><td>6</td><td>Solide, auch OPs-Beitraege</td></tr>
<tr><td>Kathrin Schleich</td><td>27</td><td>26</td><td>1</td><td>7</td><td>96% Done</td></tr>
<tr><td>Michael Weisberg</td><td>23</td><td>11</td><td>12</td><td>0</td><td>&#9888; 52% offen &#8212; Backlog-Problem?</td></tr>
<tr><td>Bernd Klebl</td><td>16</td><td>6</td><td>10</td><td>6</td><td>&#9888; 63% offen</td></tr>
<tr style="background:#f8cecc;"><td><em>Norbert Maurer [X]</em></td><td>12</td><td>2</td><td>10</td><td>0</td><td>&#9888; 83% offen, [X] = extern/ausgeschieden?</td></tr>
</table>
<h4>DevOps &#8212; 7 Personen, 719 Issues/12M</h4>
<ac:structured-macro ac:name="warning"><ac:rich-text-body><p>Jan Lubenow: 114 von 289 Issues (39%). Kritische Personenabhaengigkeit.</p></ac:rich-text-body></ac:structured-macro>
<table style="font-size:11px;">
<tr><th>Person</th><th>Total</th><th>Done</th><th>Open</th><th>Bugs</th><th>Bewertung</th></tr>
<tr style="background:#f8cecc;"><td><strong>Jan Lubenow</strong></td><td>114</td><td>82</td><td>32</td><td>13</td><td>&#9888; 39% aller DevOps-Issues! Single Point of Failure</td></tr>
<tr><td>David Steinkopff</td><td>18</td><td>9</td><td>9</td><td>2</td><td>50% offen</td></tr>
<tr><td>Henrik Scholl</td><td>10</td><td>10</td><td>0</td><td>0</td><td>100% Done</td></tr>
<tr style="background:#f5f5f5;"><td><em>4 weitere</em></td><td>6-8</td><td>&#8212;</td><td>&#8212;</td><td>&#8212;</td><td>Geringe Sichtbarkeit</td></tr>
</table>
<h3>Zusammenfassung: Kritische Erkenntnisse</h3>
<table>
<tr><th>Erkenntnis</th><th>Details</th><th>Handlungsbedarf</th></tr>
<tr style="background:#f8cecc;"><td><strong>Jan Lubenow = DevOps SPOF</strong></td><td>39% aller DevOps-Issues, 32 offen</td><td>Wissenstransfer, zweite Person aufbauen</td></tr>
<tr style="background:#f8cecc;"><td><strong>Team 404 Bug-Rate steigt</strong></td><td>33% im Maerz, Portal ist Kundenfacing</td><td>Qualitaetsmassnahmen, mehr Testing</td></tr>
<tr style="background:#fff2cc;"><td><strong>Norbert Maurer [X] &#8212; 83% offen</strong></td><td>12 Issues, 10 offen, markiert mit [X]</td><td>Klaeren: Ausgeschieden? Issues umverteilen</td></tr>
<tr style="background:#fff2cc;"><td><strong>Michael Weisberg &#8212; 52% offen</strong></td><td>23 Issues in Zero, 12 offen</td><td>Backlog pruefen, ggf. umpriorisieren</td></tr>
<tr style="background:#fff2cc;"><td><strong>Harry Braun &#8212; SB4 SV alles offen</strong></td><td>5 Issues, 0 Done, 4 offen</td><td>Spring Boot 4 SV-Upgrade blockiert?</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Ana Cvitkovic = 404 MVP</strong></td><td>78 Issues, 71 Done, nur 3 Bugs</td><td>Anerkennung, Wissenstransfer foerdern</td></tr>
<tr style="background:#d5e8d4;"><td><strong>CIB stabilisiert sich</strong></td><td>Bug-Rate 36% &#8594; 9%</td><td>Positiver Trend, beibehalten</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Steven Meixner = Zero+OPs Allrounder</strong></td><td>64 Zero + 27 OPs = 91 Issues</td><td>Wertvoll, aber Ueberlastungsrisiko</td></tr>
</table>
"@
$Page19Id = Create-Or-Update-Page -Title "18. Velocity und Team-Analyse" -HtmlBody $VeloHtml -ParentId $ParentPageId
# --- Seite 20: SonarQube Code-Qualitaet ---
Write-Host ""
Write-Host ">> Seite 20: SonarQube Code-Qualitaet" -ForegroundColor Yellow
$SonarHtml = @"
<h2>SonarQube Code-Qualitaet</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | 74 Projekte (Master/Main Branches)</p>
<h3>Code-Qualitaet nach Team</h3>
<table>
<tr style="background:#345B63;color:white;"><th>Team</th><th>Lines of Code</th><th>Bugs</th><th>Vulns</th><th>Code Smells</th><th>Smells/1K Lines</th><th>Avg Coverage</th><th>QGate OK</th><th>QGate ERROR</th></tr>
<tr style="background:#fff2cc;"><td><strong>Team CIB</strong></td><td>119K</td><td>15</td><td>0</td><td>2737</td><td style="background:#f8cecc;"><strong>23.0</strong></td><td>85.7%</td><td>3</td><td>5</td></tr>
<tr><td><strong>Team 404</strong></td><td>71K</td><td>7</td><td>0</td><td>450</td><td>6.4</td><td>83.2%</td><td>0</td><td>3</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team Zero</strong></td><td>49K</td><td>2</td><td>0</td><td>209</td><td style="background:#d5e8d4;"><strong>4.2</strong></td><td style="background:#d5e8d4;"><strong>91.8%</strong></td><td>7</td><td>3</td></tr>
<tr><td>OPs</td><td>4K</td><td>1</td><td>6</td><td>191</td><td style="background:#f8cecc;">45.4</td><td>0%</td><td>1</td><td>3</td></tr>
<tr><td>Shared Libs</td><td>4K</td><td>0</td><td>0</td><td>32</td><td>8.5</td><td>0%</td><td>1</td><td>4</td></tr>
</table>
<h3>Bewertung nach Team</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<p><strong>Team Zero = Beste Code-Qualitaet:</strong> Niedrigste Smell-Dichte (4.2/1K), hoechste Coverage (91.8%), nur 2 Bugs, 7 von 10 Projekten bestehen Quality Gate.</p>
</ac:rich-text-body></ac:structured-macro>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Team CIB = Hoechste technische Schuld:</strong> 2737 Code Smells bei 119K Lines (23/1K). Primaer durch Steuerung-Vertrieb (93K Lines, 2214 Smells). Coverage ist gut (85.7%), aber die Smell-Dichte ist 5x hoeher als bei Zero.</p>
</ac:rich-text-body></ac:structured-macro>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<p><strong>Team 404 = Solide:</strong> 6.4 Smells/1K ist akzeptabel. Coverage 83.2%. Aber: Kein einziges Projekt besteht das Quality Gate (0 OK, 3 ERROR).</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Kern-Services im Detail</h3>
<table style="font-size:11px;">
<tr style="background:#345B63;color:white;"><th>Service</th><th>Team</th><th>Lines</th><th>Bugs</th><th>Smells</th><th>Coverage</th><th>Dupl%</th><th>QGate</th></tr>
<tr style="background:#fff2cc;"><td><strong>steuerung-vertrieb</strong></td><td>CIB</td><td>93K</td><td>3</td><td style="background:#f8cecc;">2214</td><td>81.6%</td><td>3.8%</td><td>ERROR</td></tr>
<tr><td>portal-ui</td><td>404</td><td>43K</td><td>4</td><td>77</td><td>85.8%</td><td>2.7%</td><td>ERROR</td></tr>
<tr style="background:#f8cecc;"><td><strong>tadef-connector</strong></td><td>Zero</td><td>28K</td><td>0</td><td>99</td><td style="background:#f8cecc;"><strong>0.0%</strong></td><td>5.3%</td><td>ERROR</td></tr>
<tr><td>portal-middleware</td><td>404</td><td>26K</td><td>1</td><td>343</td><td>81.4%</td><td>1.2%</td><td>ERROR</td></tr>
<tr style="background:#d5e8d4;"><td>auftrags-verwaltung-trasse</td><td>CIB</td><td>8.4K</td><td>0</td><td>102</td><td>86.2%</td><td>2.3%</td><td style="background:#d5e8d4;">OK</td></tr>
<tr><td>archivierungsservice</td><td>CIB</td><td>6.7K</td><td>2</td><td>83</td><td>78.8%</td><td>4.7%</td><td>ERROR</td></tr>
<tr style="background:#d5e8d4;"><td>taftap-tdm-konverter</td><td>Zero</td><td>6.6K</td><td>0</td><td>26</td><td style="background:#d5e8d4;">90.6%</td><td>0.0%</td><td style="background:#d5e8d4;">OK</td></tr>
<tr style="background:#d5e8d4;"><td>stammdaten-bereitstellung</td><td>Zero</td><td>5K</td><td>0</td><td>13</td><td>82.0%</td><td>2.4%</td><td style="background:#d5e8d4;">OK</td></tr>
<tr style="background:#d5e8d4;"><td>common-interface</td><td>Zero</td><td>4K</td><td>0</td><td>37</td><td style="background:#d5e8d4;"><strong>93.8%</strong></td><td>0.0%</td><td style="background:#d5e8d4;">OK</td></tr>
<tr style="background:#d5e8d4;"><td>kundendaten-bereitstellung</td><td>Zero</td><td>1.8K</td><td>0</td><td>2</td><td style="background:#d5e8d4;"><strong>96.9%</strong></td><td>0.0%</td><td style="background:#d5e8d4;">OK</td></tr>
<tr style="background:#d5e8d4;"><td>vertragsdaten-verteiler</td><td>CIB</td><td>342</td><td>0</td><td>3</td><td style="background:#d5e8d4;"><strong>97.2%</strong></td><td>0.0%</td><td style="background:#d5e8d4;">OK</td></tr>
</table>
<h3>Kritische Findings</h3>
<table>
<tr><th>Finding</th><th>Details</th><th>Handlungsbedarf</th></tr>
<tr style="background:#f8cecc;"><td><strong>tadef-connector: 0% Coverage</strong></td><td>28K Lines ohne einen einzigen Test</td><td>HOCH: Tests schreiben oder Risiko akzeptieren</td></tr>
<tr style="background:#f8cecc;"><td><strong>SV: 2214 Code Smells</strong></td><td>23 Smells pro 1000 Lines, 5x hoeher als Zero</td><td>MITTEL: Refactoring-Sprint einplanen</td></tr>
<tr style="background:#fff2cc;"><td><strong>Team 404: 0 QGate OK</strong></td><td>Kein Portal-Projekt besteht das Quality Gate</td><td>MITTEL: QGate-Kriterien pruefen</td></tr>
<tr style="background:#fff2cc;"><td><strong>OPs: 6 Vulnerabilities</strong></td><td>In database-setup und Infra-Tools</td><td>MITTEL: Security-Fixes</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Zero: Vorbildlich</strong></td><td>4.2 Smells/1K, 91.8% Coverage, 7/10 QGate OK</td><td>Best Practice teilen</td></tr>
</table>
<h3>Rueckschluesse auf Umsetzungsqualitaet</h3>
<table>
<tr><th>Team</th><th>Code-Qualitaet</th><th>Interpretation</th></tr>
<tr style="background:#d5e8d4;"><td><strong>Team Zero</strong></td><td>&#11088; Sehr gut</td><td>Hohe Coverage, wenig Smells, sauberer Code. Erfahrenes Team mit starkem Qualitaetsbewusstsein.</td></tr>
<tr><td><strong>Team 404</strong></td><td>&#128993; Gut</td><td>Akzeptable Smell-Dichte, gute Coverage. Aber QGate-Failures deuten auf neue Features ohne vollstaendige Qualitaetspruefung.</td></tr>
<tr style="background:#fff2cc;"><td><strong>Team CIB</strong></td><td>&#128993; Gemischt</td><td>SV ist der Problembereich (2214 Smells). Andere CIB-Projekte (AV, VDV) sind sauber. SV-Komplexitaet (18 Module, Camunda) erklaert teilweise die Smell-Dichte.</td></tr>
<tr><td><strong>OPs</strong></td><td>&#128308; Verbesserungswuerdig</td><td>Infra-Code hat 6 Vulnerabilities und hohe Smell-Dichte. Aber: Infra-Code hat andere Qualitaetsanforderungen als Applikationscode.</td></tr>
</table>
<h3>Deep Dive: Coverage erklaert Bug-Rate NICHT</h3>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<table>
<tr><th>Team</th><th>Coverage</th><th>Jira Bug-Rate (90d)</th><th>Korrelation?</th></tr>
<tr><td>404</td><td>84.2%</td><td>33% (steigend)</td><td><strong>NEIN</strong> &#8212; Hohe Coverage, trotzdem viele Bugs</td></tr>
<tr><td>CIB</td><td>78.2%</td><td>20% (sinkend)</td><td>Teilweise &#8212; Niedrigere Coverage, aber Bug-Rate sinkt</td></tr>
<tr><td>Zero</td><td>91.8%</td><td>15% (stabil)</td><td><strong>JA</strong> &#8212; Beste Coverage = wenigste Bugs</td></tr>
</table>
<p><strong>Fazit:</strong> Team 404 hat gute Coverage aber die hoechste Bug-Rate. Das Problem liegt in der <strong>Testqualitaet</strong> (Edge Cases, Integration, E2E) &#8212; nicht in der Testquantitaet.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>&#9888; Shared Libraries ohne Tests</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<table>
<tr><th>Library</th><th>Lines</th><th>Coverage</th><th>Genutzt von</th></tr>
<tr><td>core-components-kafka</td><td>1.567</td><td>0%</td><td>Allen Kafka-Services</td></tr>
<tr><td>core-components-common</td><td>1.096</td><td>0%</td><td>Allen Services</td></tr>
<tr><td>signature-database</td><td>1.091</td><td>0%</td><td>Signatur-Validierung</td></tr>
<tr><td>signature-message</td><td>622</td><td>0%</td><td>Signatur-Validierung</td></tr>
</table>
<p><strong>Risiko:</strong> Ein Bug in diesen Libraries betrifft das gesamte System. Empfehlung: Coverage auf &gt;90% bringen.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Top 5 Empfehlungen</h3>
<ol>
<li><strong>Shared Libraries testen</strong> (DRINGEND) &#8212; 0% Coverage bei Code der ueberall genutzt wird.</li>
<li><strong>Portal: E2E-Tests statt mehr Unit-Tests</strong> &#8212; Coverage ist gut (84%). Problem sind fehlende Edge-Case- und Integrationstests.</li>
<li><strong>SV-Smells abbauen</strong> &#8212; Sprint-weise 50-100 Smells pro PI. Start mit S1192 (976 String-Duplikate).</li>
<li><strong>tadef-connector klaeren</strong> &#8212; 27.6K Lines ohne Coverage. Generierter Code? Dann aus Metriken ausschliessen.</li>
<li><strong>Archivierungsservice stabilisieren</strong> &#8212; 2 Bugs fixen, Coverage von 78.8% auf &gt;85%.</li>
</ol>
<h3>Branch-Analyse (GitLab, 13 Kern-Services)</h3>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | 452 Branches ueber 13 Services</p>
<table>
<tr><th>Metrik</th><th>Wert</th><th>Bewertung</th></tr>
<tr><td>Branches gesamt</td><td>452</td><td></td></tr>
<tr><td>Aktiv (&#8804;30 Tage)</td><td>166</td><td>Gesunde Aktivitaet</td></tr>
<tr style="background:#f8cecc;"><td>Stale (&gt;60 Tage)</td><td>246</td><td>Aufraeumen noetig!</td></tr>
<tr><td>Spring Boot 4 Branches</td><td>9 (alle aktiv)</td><td>Upgrade laeuft</td></tr>
<tr><td>Renovate-Branches</td><td>95 (68 frisch)</td><td>Bot funktioniert</td></tr>
<tr style="background:#f8cecc;"><td>Aeltester Branch</td><td>1114 Tage (portal-ui)</td><td>3+ Jahre!</td></tr>
</table>
<h4>Aktivste Entwickler (letzte 30 Tage)</h4>
<table>
<tr><th>Entwickler</th><th>Branches</th><th>Services</th><th>Bemerkung</th></tr>
<tr><td>Leon Hoerpel</td><td>25</td><td>9 Services</td><td>Breiteste Streuung, aber 71% Bug-Rate</td></tr>
<tr><td>Jonas Koehler</td><td>13</td><td>4 Services</td><td>Vielseitig, 100% Done-Rate</td></tr>
<tr><td>Diego Da Costa Souza</td><td>6</td><td>Portal (UI + MW)</td><td>Spring Boot 4 Portal</td></tr>
<tr><td>Steven Meixner</td><td>6</td><td>5 Services (Zero)</td><td>Allrounder, SPOF-Risiko</td></tr>
<tr><td>Bishara Jaser</td><td>4</td><td>Archivierung, SV</td><td>Leistungstraeger CIB</td></tr>
<tr><td>Saurav Kumar</td><td>3</td><td>IFP, PMW, SV</td><td>Spring Boot 4 SV</td></tr>
</table>
<h4>Spring Boot 4 Status (aus Branches)</h4>
<table>
<tr><th>Service</th><th>Branch</th><th>Bearbeiter</th><th>Status</th></tr>
<tr style="background:#d5e8d4;"><td>Portal (UI + MW)</td><td>renovate/spring-and-hibernate</td><td>Bot + Diego</td><td>&#9989; Fertig</td></tr>
<tr style="background:#fff2cc;"><td>Steuerung Vertrieb</td><td>feat/O2CCIB-8031-springboot-4</td><td>Saurav Kumar</td><td>&#128993; In Arbeit</td></tr>
<tr style="background:#fff2cc;"><td>Archivierungsservice</td><td>feat/O2CCIB-8031-springboot-4</td><td>Hans-Henning Ramberger</td><td>&#128993; In Arbeit</td></tr>
<tr style="background:#fff2cc;"><td>IFP-Connector</td><td>feat/O2CCIB-8031-springboot-4</td><td>(CIB)</td><td>&#128993; In Arbeit</td></tr>
<tr style="background:#fff2cc;"><td>AV-Trasse</td><td>test/O2CZERO-7043</td><td>(Zero)</td><td>&#128993; Test-Phase</td></tr>
</table>
<h4>&#9888; Branch-Hygiene</h4>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>portal-ui: 101 stale Branches</strong> &#8212; aeltester 1114 Tage (3 Jahre!). Empfehlung: Alle Branches &gt;6 Monate loeschen.</p>
<p><strong>246 stale Branches gesamt</strong> &#8212; erhoehen Merge-Konflikte. Regelmaessiges Cleanup empfohlen (monatlich Branches &gt;90d pruefen).</p>
</ac:rich-text-body></ac:structured-macro>
"@
$Page20Id = Create-Or-Update-Page -Title "19. SonarQube Code-Qualitaet" -HtmlBody $SonarHtml -ParentId $ParentPageId
# --- Seite 22: Smells Detail ---
Write-Host ""
Write-Host ">> Seite 22: SonarQube Smells Detail" -ForegroundColor Yellow
$SmellsHtml = @"
<h2>SonarQube Smells Detail-Analyse</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | 10 Kern-Services, Cross-Projekt-Analyse</p>
<h3>Top 10 Smell-Kategorien (Cross-Projekt)</h3>
<table>
<tr style="background:#345B63;color:white;"><th>#</th><th>Rule</th><th>Beschreibung</th><th>Total</th><th>Hauptverursacher</th><th>Root Cause</th></tr>
<tr style="background:#f8cecc;"><td>1</td><td><strong>S1192</strong></td><td>String-Duplikate (hardcoded statt Konstanten)</td><td><strong>1078</strong></td><td>SV (976!)</td><td>Fehlende String-Konstanten. Einfachster Quick-Win.</td></tr>
<tr style="background:#f8cecc;"><td>2</td><td><strong>S100</strong></td><td>Methoden-Namenskonvention verletzt</td><td><strong>429</strong></td><td>SV (300), Camunda BW (90)</td><td>Vermutlich generierter Code (OpenAPI) oder Altlasten.</td></tr>
<tr style="background:#fff2cc;"><td>3</td><td><strong>S1874</strong></td><td>Deprecated API Usage</td><td><strong>210</strong></td><td>SV (188), AV (22)</td><td>Veraltete APIs nach Framework-Upgrades nicht nachgezogen.</td></tr>
<tr style="background:#fff2cc;"><td>4</td><td><strong>S1104</strong></td><td>Public Fields (statt private + Getter)</td><td><strong>168</strong></td><td>SV (61), Camunda BW (46), TADEF (33)</td><td>DTOs/Models ohne Encapsulation. Oft bei generierten Klassen.</td></tr>
<tr><td>5</td><td><strong>S1118</strong></td><td>Utility Class ohne private Constructor</td><td><strong>99</strong></td><td>SV (56), verteilt</td><td>Einfacher Fix: Private Constructor hinzufuegen.</td></tr>
<tr><td>6</td><td><strong>S1117</strong></td><td>Local Variable Shadows Field</td><td><strong>92</strong></td><td>SV (78)</td><td>Gleiche Variablennamen in Methode und Klasse. Bug-Risiko.</td></tr>
<tr><td>7</td><td><strong>S115</strong></td><td>Constant Naming Convention</td><td><strong>76</strong></td><td>PMW (36), SV (35)</td><td rowspan="2">Namenskonventionen nicht eingehalten. Gleiche Root Cause.</td></tr>
<tr><td>8</td><td><strong>S116</strong></td><td>Field Naming Convention</td><td><strong>67</strong></td><td>SV (58)</td></tr>
<tr style="background:#fff2cc;"><td>9</td><td><strong>S1135</strong></td><td>TODO/FIXME Kommentare</td><td><strong>61</strong></td><td>SV (46), AV (10)</td><td>Unerledigte technische Schuld im Code dokumentiert.</td></tr>
<tr style="background:#f8cecc;"><td>10</td><td><strong>S3776</strong></td><td>Cognitive Complexity zu hoch</td><td><strong>55</strong></td><td>PMW (28), SV (21)</td><td>Methoden zu komplex. Wichtigster Wartbarkeits-Indikator!</td></tr>
</table>
<h3>Muster und Root Causes</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Steuerung Vertrieb dominiert:</strong> SV verursacht 976 von 1078 String-Duplikaten, 300 von 429 Namenskonventions-Verletzungen, 188 von 210 Deprecated-API-Nutzungen. Das ist der mit Abstand groesste Hebel fuer Verbesserung.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Muster</th><th>Rules</th><th>Total</th><th>Empfehlung</th></tr>
<tr style="background:#f8cecc;"><td><strong>String-Hygiene</strong></td><td>S1192</td><td>1078</td><td>Strings in Konstanten extrahieren. Kann teilweise automatisiert werden (IDE Refactoring).</td></tr>
<tr style="background:#fff2cc;"><td><strong>Namenskonventionen</strong></td><td>S100, S115, S116</td><td>572</td><td>Pruefen ob generierter Code (OpenAPI) die Ursache ist. Falls ja: Generator-Config anpassen. Falls nein: Rename-Refactoring.</td></tr>
<tr style="background:#fff2cc;"><td><strong>Deprecated APIs</strong></td><td>S1874</td><td>210</td><td>Nach Spring Boot 4 Upgrade systematisch deprecated Calls ersetzen.</td></tr>
<tr><td><strong>Encapsulation</strong></td><td>S1104, S1118</td><td>267</td><td>Public Fields privatisieren, Utility-Constructors. Niedrighaengende Fruechte.</td></tr>
<tr style="background:#f8cecc;"><td><strong>Komplexitaet</strong></td><td>S3776</td><td>55</td><td>Komplexe Methoden aufteilen. Hoechste Prioritaet fuer Wartbarkeit. PMW und SV.</td></tr>
<tr><td><strong>Tech Debt Marker</strong></td><td>S1135</td><td>61</td><td>TODOs reviewen: Erledigen oder als Tickets erfassen und aus Code entfernen.</td></tr>
</table>
<h3>Empfohlene Reihenfolge fuer Cleanup</h3>
<ol>
<li><strong>S3776 Cognitive Complexity</strong> (55) &#8212; Hoechste Prioritaet, direkte Auswirkung auf Wartbarkeit und Bug-Rate</li>
<li><strong>S1874 Deprecated APIs</strong> (210) &#8212; Im Zuge des Spring Boot 4 Upgrades miterledigen</li>
<li><strong>S1192 String-Duplikate</strong> (1078) &#8212; Groesste Zahl, aber einfacher Fix. IDE-Refactoring.</li>
<li><strong>S100/S115/S116 Namenskonventionen</strong> (572) &#8212; Pruefen ob OpenAPI-Generator die Ursache ist</li>
<li><strong>S1135 TODOs</strong> (61) &#8212; Review und aufraumen</li>
</ol>
<h3>Top Smells pro Kern-Service</h3>
<h4>Steuerung Vertrieb (CIB) &#8212; 2214 Smells</h4>
<table style="font-size:11px;">
<tr><th>Rule</th><th>Count</th><th>Beschreibung</th></tr>
<tr><td>S1192</td><td>976</td><td>String-Duplikate</td></tr>
<tr><td>S100</td><td>300</td><td>Methoden-Namenskonvention</td></tr>
<tr><td>S1874</td><td>188</td><td>Deprecated API</td></tr>
<tr><td>S3252</td><td>79</td><td>Static member access via instance</td></tr>
<tr><td>S1117</td><td>78</td><td>Variable shadows field</td></tr>
</table>
<h4>Portal Middleware (404) &#8212; 343 Smells</h4>
<table style="font-size:11px;">
<tr><th>Rule</th><th>Count</th><th>Beschreibung</th></tr>
<tr><td>S1854</td><td>40</td><td>Unused assignments</td></tr>
<tr><td>S1481</td><td>39</td><td>Unused local variables</td></tr>
<tr><td>S115</td><td>36</td><td>Constant naming</td></tr>
<tr><td>S3776</td><td>28</td><td>Cognitive complexity</td></tr>
<tr><td>S6353</td><td>23</td><td>Regex simplification</td></tr>
</table>
<h4>Portal UI (404) &#8212; 77 Smells</h4>
<table style="font-size:11px;">
<tr><th>Rule</th><th>Count</th><th>Beschreibung</th></tr>
<tr><td>S4325</td><td>15</td><td>Unnecessary type assertion (TS)</td></tr>
<tr><td>AvoidCommentedOutCode</td><td>12</td><td>Auskommentierter Code</td></tr>
<tr><td>S1135</td><td>12</td><td>TODO comments</td></tr>
<tr><td>S1128</td><td>8</td><td>Unused imports</td></tr>
<tr><td>S4623</td><td>7</td><td>Undefined should not be passed as argument</td></tr>
</table>
"@
$Page22Id = Create-Or-Update-Page -Title "19a. SonarQube Smells Detail" -HtmlBody $SmellsHtml -ParentId $ParentPageId
# Neue Seiten in Reorg-Liste merken (fuer manuelles Verschieben)
Write-Host ""
Write-Host " HINWEIS: Neue Seiten manuell verschieben:" -ForegroundColor Yellow
if ($Page22Id) { Write-Host " - '19a. SonarQube Smells Detail' -> unter 'Technische Analyse'" }
if ($Page21Id) { Write-Host " - '20. Geschaeftsprozesse' -> unter 'Systemueberblick'" }
# --- Seite 21: Geschaeftsprozesse ---
Write-Host ""
Write-Host ">> Seite 21: Geschaeftsprozesse" -ForegroundColor Yellow
$ProzessHtml = @"
<h2>Geschaeftsprozesse pathOS</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Quellen: Vorstudie (Kap. 3), Runbook (Kap. 6), TTSI Fachliche Dokumentation</p>
<h3>Fahrplanphasen im Netzfahrplan</h3>
<table>
<tr>
<td style="background:#d5e8d4;text-align:center;padding:10px;"><strong>NEP1</strong><br/>Erstbestellung<br/>FCFS-Vorteil<br/>&#9989; Abgeschlossen</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#fff2cc;text-align:center;padding:10px;"><strong>NEP2</strong><br/>Phase 2<br/>Koordinierung<br/>&#9888; Aktuell</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:10px;"><strong>VNP</strong><br/>Vorlaeufiger<br/>Netzfahrplan</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#dae8fc;text-align:center;padding:10px;"><strong>ENP</strong><br/>Endgueltiger<br/>Netzfahrplan</td>
<td style="text-align:center;">&#10132;</td>
<td style="background:#d5e8d4;text-align:center;padding:10px;"><strong>GelV</strong><br/>Gelegenheits-<br/>verkehr (24/7)<br/>&#9989; Produktiv</td>
</tr>
</table>
<h3>Leistungsprozesse</h3>
<table>
<tr><th>Prozess</th><th>Beschreibung</th><th>pathOS-Rolle</th></tr>
<tr><td><strong>LN34-01 Netzfahrplan</strong></td><td>Jaehrliche Erstellung (NEP1, NEP2, VNP, ENP)</td><td>Anmeldung, Angebot, Vertrag</td></tr>
<tr><td><strong>LN34-03 Gelegenheitsverkehr</strong></td><td>Kurzfristige Bestellungen (48h bis 4 Wochen)</td><td>Vollstaendiger Bestellprozess</td></tr>
<tr><td>LN34-02 Rahmenvertrag</td><td>Mehrjaehrige Kapazitaet (auslaufend, letzte bis 2031)</td><td>Begrenzt (Verweis auf bestehende RV)</td></tr>
<tr><td>LN34-07 Kapazitaetsmanagement</td><td>Betriebsprogrammstudien</td><td>Nicht direkt in pathOS</td></tr>
</table>
<h3>Kernprozess: Trassenbestellung End-to-End</h3>
<table>
<tr><th style="width:5%;">#</th><th style="width:15%;">Schritt</th><th style="width:10%;">Akteur</th><th style="width:20%;">System</th><th style="width:20%;">Nachricht/Aktion</th><th style="width:30%;">Details</th></tr>
<tr style="background:#d5e8d4;"><td>1</td><td><strong>Planung</strong></td><td>EVU</td><td>Portal UI</td><td>Route, Stammdaten, Entwurf</td><td>Stammdaten aus SB, Karte aus GeoServer</td></tr>
<tr style="background:#d5e8d4;"><td>2</td><td><strong>Anmeldung</strong></td><td>EVU</td><td>Portal/CI</td><td>PathRequestMessage</td><td>Train + PathRequest erstellen, Validierung in PMW</td></tr>
<tr style="background:#fff2cc;"><td>3</td><td><strong>BEP-Pruefung</strong></td><td>pathOS</td><td>SV &#8594; BEP</td><td>FahrlagePruefen (REST)</td><td>Automatische Plausibilitaetspruefung</td></tr>
<tr style="background:#fff2cc;"><td>4</td><td><strong>Konstruktion</strong></td><td>Fahrplan</td><td>SV &#8594; IFP &#8594; TPN/BaDiFa</td><td>Produktionsauftrag (Kafka)</td><td>Fahrplankonstruktion, kann Minuten bis Wochen dauern</td></tr>
<tr style="background:#fff2cc;"><td>5</td><td><strong>Angebot</strong></td><td>Fahrplan</td><td>TPN &#8594; IFP &#8594; SV</td><td>Vertriebsauftrag (Kafka)</td><td>PathDetailsMessage mit Laufweg</td></tr>
<tr style="background:#fff2cc;"><td>6</td><td><strong>Preis</strong></td><td>pathOS</td><td>SV &#8594; AC Trasse</td><td>ermittleTrassenPreis (REST)</td><td>Verbindliche Preisauskunft</td></tr>
<tr style="background:#d5e8d4;"><td>7</td><td><strong>Angebot pruefen</strong></td><td>EVU</td><td>Portal/CI</td><td>PathDetailsMessage anzeigen</td><td>Laufweg, Verkehrstage, Preis</td></tr>
<tr style="background:#d5e8d4;"><td>8</td><td><strong>Annehmen</strong></td><td>EVU</td><td>Portal/CI</td><td>Annahme</td><td>ProduktVertrag wird erstellt</td></tr>
<tr><td>9</td><td><strong>Nachverarbeitung</strong></td><td>pathOS</td><td>AV, AC, Archiv, VDV</td><td>Vertrag, Abrechnung, Archiv</td><td>Stationsportal, TBV, ggf. Abrechnung ueber VDV</td></tr>
</table>
<h3>Weitere Geschaeftsvorfaelle</h3>
<table>
<tr><th>Vorfall</th><th>Beschreibung</th><th>Besonderheit</th></tr>
<tr><td><strong>Netzausgeloeste Aenderung (NAE)</strong></td><td>DB InfraGO aendert/storniert Trassen (z.B. Bauarbeiten)</td><td>Ausgeloest durch Fahrplan, nicht EVU. Verzoegert.</td></tr>
<tr><td><strong>Vertragsaenderung (VAEND)</strong></td><td>Aenderungen nach Vertragsschluss (Zeit, Raum, Storno)</td><td>Erfordert neues Train-Objekt nach Vertragsschluss</td></tr>
<tr><td><strong>ujBau</strong></td><td>Bau-bezogene Trassenbestellungen</td><td>Bautrassen, GPE-Stellungnahmen, KOMBau-Plattform</td></tr>
<tr><td><strong>Rahmenvertrag</strong></td><td>Verweis auf bestehende RV bei NEP-Anmeldung</td><td>Auslaufend (letzte bis 2031), kein Neuabschluss</td></tr>
</table>
<h3>Datenfluss zwischen Domaenen</h3>
<table>
<tr><th style="width:33%;">VERTRIEB (pathOS)</th><th style="width:33%;">FAHRPLAN (TPN/BaDiFa)</th><th style="width:33%;">BETRIEB (S2O)</th></tr>
<tr>
<td>Trassenanmeldung &#10132;<br/>&#10132; Konstruktionsergebnis<br/>Angebot an EVU<br/>Vertragsschluss &#10132;<br/>Abrechnung (AC)<br/>Archivierung</td>
<td>&#10132; Konstruktionsauftrag<br/>Konstruktionsergebnis &#10132;<br/><br/>&#10132; Fahrplanveroeffentlichung<br/><br/></td>
<td><br/><br/><br/>&#10132; Betriebsplanung<br/>&#10132; Betriebliche Meldungen<br/></td>
</tr>
</table>
<h3>Offene Erweiterungen</h3>
<table>
<tr><th>Thema</th><th>Status</th><th>Beschreibung</th></tr>
<tr><td>Buendelprodukte</td><td>Vision</td><td>Trasse + Anlage + Stationshalt + Energie in einem Bestellvorgang</td></tr>
<tr><td>Click&amp;Ride Integration</td><td>ADR-72, in Arbeit</td><td>Vereinfachte GelV-Bestellung</td></tr>
<tr><td>TraPo-Anbindung</td><td>ADR-74, in Arbeit</td><td>Neues Trassenportal</td></tr>
<tr><td>VDV fuer Abrechnung</td><td>Strategisch</td><td>Vertragsdaten-Verteiler auch fuer AC Trasse</td></tr>
<tr><td>Rolling Planning</td><td>Langfristig</td><td>Nachfolger Rahmenvertraege (TTR-Projekt)</td></tr>
</table>
"@
$Page21Id = Create-Or-Update-Page -Title "20. Geschaeftsprozesse" -HtmlBody $ProzessHtml -ParentId $ParentPageId
# --- Seite 23: Produkt-Roadmap (konsolidiert) ---
Write-Host ""
Write-Host ">> Seite 23: Produkt-Roadmap (konsolidiert)" -ForegroundColor Yellow
$ProdRoadmapHtml = @"
<h2>Produkt-Roadmap pathOS (konsolidiert)</h2>
<p><strong>Stand:</strong> 2026-04-24 | Quellen: PO-Input (CIB, Zero, 404), BO-Sicht, Technische Analyse, Jira</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Diese Roadmap konsolidiert die Team-Roadmaps der POs mit der BO-Sicht und den technischen Findings. Sie ersetzt die rein technische Roadmap (Seite 16) durch eine ganzheitliche Produkt-Perspektive.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Strategische Handlungsfelder (BO-Sicht)</h3>
<table>
<tr><th>Feld</th><th>Kernfrage</th><th>Massnahmen</th></tr>
<tr style="background:#f8cecc;"><td><strong>Support-Enablement</strong></td><td>Was braucht der Support, was muss er liefern?</td><td>Tools, Zugang, Wissen, SLAs, Eskalationswege</td></tr>
<tr style="background:#f8cecc;"><td><strong>Monitoring</strong></td><td>Was fehlt dem OPs Squad?</td><td>Grafana Boards, Alerting, Netcool</td></tr>
<tr style="background:#fff2cc;"><td><strong>Axt schaerfen</strong></td><td>Wie steigern wir Entwicklungseffizienz?</td><td>Smells reduzieren, Tests ausbauen, Pipelines beschleunigen</td></tr>
<tr style="background:#fff2cc;"><td><strong>Feature-Enablement</strong></td><td>Welche Features brauchen Support und Squad?</td><td>Vorpruefung, Fehlermeldungen, Suchfunktion</td></tr>
<tr><td><strong>Organisatorische Regeln</strong></td><td>Welche Regeln fuer Support und Squad?</td><td>Deployment-Verantwortung, Wissenstransfer</td></tr>
<tr><td><strong>Fachlichkeits-Loop</strong></td><td>Wie kommt Kundenfeedback schneller ins Produkt?</td><td>Feedback-Prozess, fachliches Verstaendnis aufbauen</td></tr>
</table>
<h3>Zeitstrahl: April 2026 &#8212; Mitte 2027</h3>
<table style="border-collapse:collapse;width:100%;font-size:10px;">
<tr style="background:#345B63;color:white;">
<th style="width:18%;">Thema</th>
<th style="width:6%;">Apr</th><th style="width:6%;">Mai</th><th style="width:6%;">Jun</th>
<th style="width:6%;">Jul</th><th style="width:6%;">Aug</th><th style="width:6%;">Sep</th>
<th style="width:6%;">Okt</th><th style="width:6%;">Nov</th><th style="width:6%;">Dez</th>
<th style="width:6%;">Jan</th><th style="width:6%;">Feb</th><th style="width:6%;">Mar</th>
<th style="width:6%;">Apr</th><th style="width:6%;">Mai</th><th style="width:6%;">Jun</th>
</tr>
<tr><td colspan="16" style="background:#f8cecc;padding:3px;font-weight:bold;">STABILISIEREN (Hypercare beenden)</td></tr>
<tr><td>Spring Boot 4</td><td style="background:#fff2cc;" colspan="2"></td><td colspan="13"></td></tr>
<tr><td>Monitoring + Alerting</td><td style="background:#fff2cc;" colspan="4"></td><td colspan="11"></td></tr>
<tr><td>Support-Enablement</td><td style="background:#f8cecc;" colspan="3"></td><td colspan="12"></td></tr>
<tr><td>Portal-Bugs (165)</td><td style="background:#f8cecc;" colspan="4"></td><td colspan="11"></td></tr>
<tr><td colspan="16" style="background:#fff2cc;padding:3px;font-weight:bold;">HAERTEN (Qualitaet + Effizienz)</td></tr>
<tr><td>Vorpruefung Portal</td><td colspan="2"></td><td style="background:#fff2cc;" colspan="3"></td><td colspan="10"></td></tr>
<tr><td>Aenderungswesen final.</td><td colspan="2"></td><td style="background:#fff2cc;" colspan="3"></td><td colspan="10"></td></tr>
<tr><td>Fehlermeldungen-Konzept</td><td colspan="3"></td><td style="background:#fff2cc;" colspan="3"></td><td colspan="9"></td></tr>
<tr><td>Smells reduzieren (SV)</td><td colspan="2"></td><td style="background:#dae8fc;" colspan="4"></td><td colspan="9"></td></tr>
<tr><td>Tests ausbauen</td><td colspan="2"></td><td style="background:#dae8fc;" colspan="6"></td><td colspan="7"></td></tr>
<tr><td>RV aufraeumen</td><td colspan="3"></td><td style="background:#d5e8d4;" colspan="2"></td><td colspan="10"></td></tr>
<tr><td colspan="16" style="background:#dae8fc;padding:3px;font-weight:bold;">ERWEITERN (Kundenmehrwert)</td></tr>
<tr><td>Uebersichtsseite Vorg.</td><td colspan="4"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="8"></td></tr>
<tr><td>Expertenmodus</td><td colspan="5"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="7"></td></tr>
<tr><td>Massenkopie Takt</td><td colspan="5"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="7"></td></tr>
<tr><td>E-Mail Benachrichtig.</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="2"></td><td colspan="7"></td></tr>
<tr><td>Suchfunktion</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="3"></td><td colspan="6"></td></tr>
<tr><td>Click&amp;Ride</td><td colspan="4"></td><td style="background:#dae8fc;" colspan="5"></td><td colspan="6"></td></tr>
<tr><td>RouteUpdate-Prozess</td><td colspan="6"></td><td style="background:#dae8fc;" colspan="4"></td><td colspan="5"></td></tr>
<tr><td colspan="16" style="background:#d5e8d4;padding:3px;font-weight:bold;">WEITERENTWICKELN (Langfristig)</td></tr>
<tr><td>Entkopplung Zuglaufp.</td><td colspan="8"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="3"></td></tr>
<tr><td>Ersatz Msg Routing ID</td><td colspan="9"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="2"></td></tr>
<tr><td>LuP neu</td><td colspan="10"></td><td style="background:#d5e8d4;" colspan="5"></td></tr>
<tr><td>Team-Reorganisation</td><td colspan="9"></td><td style="background:#d5e8d4;" colspan="4"></td><td colspan="2"></td></tr>
</table>
<p style="font-size:9px;"><span style="background:#f8cecc;padding:2px 6px;">Kritisch</span> <span style="background:#fff2cc;padding:2px 6px;">Kurzfristig</span> <span style="background:#dae8fc;padding:2px 6px;">Mittelfristig</span> <span style="background:#d5e8d4;padding:2px 6px;">Langfristig</span></p>
<h3>Phase 1: STABILISIEREN (April&#8212;Juli 2026)</h3>
<p>Hypercare beenden, Monitoring aufbauen, Support enablen.</p>
<table>
<tr><th>Thema</th><th>Team</th><th>Details</th></tr>
<tr style="background:#f8cecc;"><td><strong>Spring Boot 4 abschliessen</strong></td><td>Alle</td><td>Portal fertig, CI/SV/AV in Arbeit. EOL 3.5: Juni 2026.</td></tr>
<tr style="background:#f8cecc;"><td><strong>Monitoring + Alerting</strong></td><td>OPs, Zero</td><td>Grafana Boards nutzbar machen, Netcool, Logs anpassen. Kein Dauerzustand.</td></tr>
<tr style="background:#f8cecc;"><td><strong>Support-Enablement</strong></td><td>BSSUPPORT, OPs</td><td>Was braucht Support? Tools, Zugang, Wissen, SLAs, Eskalationswege definieren.</td></tr>
<tr><td><strong>Portal-Bugs reduzieren</strong></td><td>404</td><td>165 Bugs, 33% Bug-Rate. Stabilisierung vor neuen Features.</td></tr>
<tr><td>Workarounds TTK aufraeumen</td><td>Zero</td><td>Technische Schuld aus Go-Live Phase.</td></tr>
<tr><td>Verschluesselung einschalten</td><td>Zero</td><td>Security-Anforderung.</td></tr>
</table>
<h3>Phase 2: HAERTEN (Juli&#8212;Oktober 2026)</h3>
<p>Qualitaet steigern, Entwicklungseffizienz erhoehen, "Axt schaerfen".</p>
<table>
<tr><th>Thema</th><th>Team</th><th>Details</th></tr>
<tr style="background:#fff2cc;"><td><strong>Vorpruefung Portal</strong></td><td>CIB, 404</td><td>Button "Vorpruefung": PMW+SV+BEP Validierung vor Absenden. Hohe Kundenwirkung.</td></tr>
<tr style="background:#fff2cc;"><td><strong>Aenderungswesen finalisieren</strong></td><td>CIB</td><td>Parallele Aenderungsbestellungen validieren. Mit Fahrplan abgestimmt.</td></tr>
<tr><td><strong>Fehlermeldungen-Konzept</strong></td><td>404</td><td>Verstaendliche, benutzerfreundliche Meldungen. Reduziert Support-Aufwand.</td></tr>
<tr><td><strong>Smells reduzieren (SV)</strong></td><td>CIB</td><td>2214 Code Smells, 976 String-Duplikate. IDE-Refactoring.</td></tr>
<tr><td><strong>Automatisierte Tests ausbauen</strong></td><td>404, alle</td><td>Deutlich erweitern. Testumgebung mit TPN dauerhaft bereitstellen.</td></tr>
<tr><td>Rahmenvertraege aufraeumen</td><td>CIB</td><td>Prozesse/Tests ausbauen. Reduziert Pipeline-Laufzeiten.</td></tr>
<tr><td>Camunda 8.9</td><td>CIB</td><td>Nach 8.8 ist vor 8.9. Support-Zeitraeume beachten.</td></tr>
<tr><td>Performance AV</td><td>Zero</td><td>Full-Table-Scans, Optimierung.</td></tr>
</table>
<h3>Phase 3: ERWEITERN (Oktober 2026&#8212;Maerz 2027)</h3>
<p>Kundenmehrwert liefern, nachgelieferte Features umsetzen.</p>
<table>
<tr><th>Thema</th><th>Team</th><th>Details</th></tr>
<tr><td><strong>Uebersichtsseite Vorgaenge</strong></td><td>404</td><td>Zusammengehoerige Vorgaenge gruppiert nach RouteID.</td></tr>
<tr><td><strong>Expertenmodus</strong></td><td>404</td><td>Kompakte Maske fuer erfahrene Nutzer.</td></tr>
<tr><td><strong>Massenkopie Taktbestellungen</strong></td><td>404</td><td>Mehrere Takte per Massenkopierfunktion.</td></tr>
<tr><td><strong>E-Mail Benachrichtigungen</strong></td><td>404</td><td>Bei NAE oder Angebotseingang.</td></tr>
<tr><td><strong>Suchfunktion</strong></td><td>404</td><td>Leistungsfaehige Suche integrieren.</td></tr>
<tr><td><strong>Click&amp;Ride Anbindung</strong></td><td>CIB, Zero</td><td>ADR-72. SUBP arbeitet bereits an Teilen.</td></tr>
<tr><td><strong>RouteUpdate-Prozess</strong></td><td>CIB</td><td>Nach Go-Live verschoben. Gross.</td></tr>
<tr><td>&#167;22 ERegG</td><td>CIB</td><td>Eintritt Drittunternehmen.</td></tr>
<tr><td>Stationsportal fertigstellen</td><td>Zero</td><td>Anbindung abschliessen.</td></tr>
<tr><td>PCS aufraeumen + Rueckweg</td><td>Zero</td><td>Gross.</td></tr>
</table>
<h3>Phase 4: WEITERENTWICKELN (ab Q2 2027)</h3>
<p>Strategische Themen, grosse Umbauten.</p>
<table>
<tr><th>Thema</th><th>Team</th><th>Details</th></tr>
<tr><td>Entkopplung Zuglaufpunkte/Zugcharakteristik</td><td>404</td><td>Vererbungslogik entfernen. Gross.</td></tr>
<tr><td>Ersatz Message Routing ID</td><td>Zero</td><td>SenderReference, iRFP. Gross.</td></tr>
<tr><td>LuP neu</td><td>Zero</td><td>Komplett neu. Gross.</td></tr>
<tr><td>XSD 3.5.2</td><td>Zero</td><td>Kann gross werden.</td></tr>
<tr><td>TDM aufraeumen</td><td>Zero</td><td>Technische Schuld.</td></tr>
<tr><td>Team-Reorganisation</td><td>PM/RTE</td><td>Subdomaenen-Schnitt, Platform Team.</td></tr>
<tr><td>Abrechnung klaeren</td><td>CIB</td><td>VDV-Erweiterung oder andere Loesung. Unklar.</td></tr>
</table>
<h3>Laufende Themen (alle Teams, permanent)</h3>
<table>
<tr><th>Thema</th><th>Team</th></tr>
<tr><td>Bug Fix + Support</td><td>Alle</td></tr>
<tr><td>Lieferungen testen, bauen, dokumentieren</td><td>Alle</td></tr>
<tr><td>Framework-Updates (Camunda, Spring, Angular)</td><td>Alle</td></tr>
<tr><td>Neue Mitarbeiter aufgleisen</td><td>Alle</td></tr>
<tr><td>Fachlichkeits-Loop: Kundenfeedback schneller ins Produkt</td><td>404, CIB, FbF</td></tr>
</table>
"@
$Page23Id = Create-Or-Update-Page -Title "21. Produkt-Roadmap (konsolidiert)" -HtmlBody $ProdRoadmapHtml -ParentId $ParentPageId
# --- Seite 24: Personal- und Bug-Analyse ---
Write-Host ""
Write-Host ">> Seite 22: Personal- und Bug-Analyse" -ForegroundColor Yellow
$PersonalHtml = @"
<h2>Personal- und Bug-Analyse pathOS</h2>
<p><strong>Stand:</strong> 2026-04-30 | <strong>Quellen:</strong> Jira (90d + 12M), Rollen-Mapping (BO-Input), Tenure-Daten (176 Personen, 24.7K Issues)</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Diese Analyse korreliert Personaldaten (Rollen, Tenure, Aktivitaet) mit Bug-Raten und Qualitaetskennzahlen pro Team und Entwickler.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Team-Gesundheit im Ueberblick</h3>
<table>
<tr><th>Team</th><th>Personen</th><th>Kern-Devs</th><th>Bug-Rate (90d)</th><th>Bug-Rate (12M)</th><th>Trend</th><th>Bewertung</th></tr>
<tr style="background:#f8cecc;"><td><strong>Team 404</strong></td><td>10</td><td>7</td><td>33%</td><td>25%</td><td>&#8593; Steigend</td><td>KRITISCH</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team CIB</strong></td><td>13</td><td>6</td><td>20%</td><td>23%</td><td>&#8595; Sinkend</td><td>GUT</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team Zero</strong></td><td>9</td><td>6</td><td>15%</td><td>15%</td><td>&#8594; Stabil</td><td>GUT</td></tr>
<tr style="background:#fff2cc;"><td><strong>OPs Squad</strong></td><td>7+ rot.</td><td>2 fest</td><td>31%</td><td>27%</td><td>&#8595; Sinkend</td><td>BEOBACHTEN</td></tr>
<tr style="background:#fff2cc;"><td><strong>DevOps</strong></td><td>7</td><td>3</td><td>9%</td><td>7%</td><td>&#8594; Stabil</td><td>OK (SPOF)</td></tr>
</table>
<h3>Team 404 (Portal) &#8212; KRITISCH</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p>Hoechste Bug-Rate (33%), steigend seit Go-Live. Portal ist kundenseitig &#8212; Bugs werden direkt von EVUs gemeldet.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Done%</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Ana Cvitkovic</td><td>Business Engineer</td><td>2021-08</td><td>78</td><td>niedrig</td><td>hoch</td><td>TOP &#8212; Anker des Teams</td></tr>
<tr><td>Jasmin Keskin</td><td>Frontend Dev</td><td>2021-08</td><td>45</td><td>42%</td><td>mittel</td><td>Bug-anfaellig</td></tr>
<tr style="background:#f8cecc;"><td>Emmanuel Kontcheu Tagne</td><td>Frontend Dev</td><td>2021-08</td><td>42</td><td>69%</td><td>mittel</td><td>KRITISCH</td></tr>
<tr><td>Diego Da Costa Souza</td><td>Frontend Dev</td><td>2021-09</td><td>41</td><td>mittel</td><td>mittel</td><td>Spring Boot 4 Portal</td></tr>
<tr style="background:#f8cecc;"><td>Leon Hoerpel</td><td>Dev</td><td>2023-03</td><td>35</td><td>71%</td><td>mittel</td><td>KRITISCH</td></tr>
<tr><td>Dominik Ruecker</td><td>Backend Dev</td><td>2021-08</td><td>31</td><td>mittel</td><td>mittel</td><td>Veteran (434 Issues)</td></tr>
<tr style="background:#d5e8d4;"><td>Annette Halbhuber</td><td>Lead Dev</td><td>2021-09</td><td>26</td><td>niedrig</td><td>hoch</td><td>Stabil, Lead</td></tr>
<tr style="background:#d5e8d4;"><td>Simon Reitinger</td><td>Dev</td><td>2025-11</td><td>15</td><td>0%</td><td>100%</td><td>Exzellenter Start</td></tr>
<tr><td>Marcel Hufgard</td><td>PO</td><td>2021-12</td><td>8</td><td>&#8212;</td><td>&#8212;</td><td>Product Owner</td></tr>
<tr style="background:#fff2cc;"><td>Luca Caracciolo</td><td>QA</td><td>2021-09</td><td>5</td><td>&#8212;</td><td>&#8212;</td><td>Wenig aktiv</td></tr>
</table>
<p><strong>Kernproblem:</strong> Emmanuel (69% Bugs) und Leon (71% Bugs) arbeiten beide im Frontend. Das Portal-Frontend hat ein systematisches Qualitaetsproblem. QA (Luca) ist wenig aktiv &#8212; Testabdeckung unzureichend.</p>
<h3>Team CIB (Prozesse/Backend) &#8212; Erfolgsgeschichte</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<p>Bug-Rate von 36% (Jan) auf 9% (Apr) gesunken. Backend stabilisiert sich nach Go-Live.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Done%</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Bishara Jaser</td><td>Dev</td><td>2022-08</td><td>73</td><td>niedrig</td><td>93%</td><td>TOP &#8212; Leistungstraeger</td></tr>
<tr style="background:#d5e8d4;"><td>Saurav Kumar</td><td>Dev</td><td>2022-01</td><td>48</td><td>8%</td><td>94%</td><td>TOP &#8212; niedrigste Bug-Rate</td></tr>
<tr style="background:#d5e8d4;"><td>Jonas Koehler</td><td>Dev</td><td>2024-04</td><td>34</td><td>niedrig</td><td>100%</td><td>Exzellent</td></tr>
<tr><td>Dong-Won Han</td><td>Dev</td><td>2021-09</td><td>20</td><td>mittel</td><td>mittel</td><td>Veteran</td></tr>
<tr><td>Hans-Henning Ramberger</td><td>Dev</td><td>2024-05</td><td>16</td><td>mittel</td><td>mittel</td><td>Auch OPs</td></tr>
<tr><td>Vasileios Dimitriadis</td><td>Dev</td><td>2023-11</td><td>11</td><td>mittel</td><td>mittel</td><td>Wenig aktiv</td></tr>
<tr><td>Christian Meins</td><td>PO</td><td>2021-10</td><td>9</td><td>&#8212;</td><td>&#8212;</td><td>Product Owner</td></tr>
<tr><td>Harry Braun</td><td>Dev</td><td>2025-12</td><td>5</td><td>mittel</td><td>mittel</td><td>SB4 SV</td></tr>
<tr><td>Olaf Becken</td><td>Business Engineer</td><td>2024-05</td><td>5</td><td>&#8212;</td><td>&#8212;</td><td></td></tr>
<tr style="background:#fff2cc;"><td>Alexander Petioky</td><td>Dev</td><td>2021-10</td><td>1</td><td>&#8212;</td><td>&#8212;</td><td>Kaum aktiv</td></tr>
</table>
<p><strong>Kern-Trio:</strong> Bishara + Saurav + Jonas (155 Issues, &gt;93% Done). Deren Arbeitsweise sollte als Vorbild fuer andere Teams dienen.</p>
<h3>Team Zero (TAF/TAP) &#8212; Stabil</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<p>Niedrigste Bug-Rate (15%), stabiler Output. Beste SonarQube-Qualitaet (4.2 Smells/1K, 91.8% Coverage).</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Steven Meixner</td><td>Dev</td><td>2022-07</td><td>64 + 27 OPs</td><td>niedrig</td><td>TOP &#8212; Allrounder (SPOF!)</td></tr>
<tr style="background:#d5e8d4;"><td>Bing Shi</td><td>Dev</td><td>2022-04</td><td>63</td><td>niedrig</td><td>Stark</td></tr>
<tr style="background:#d5e8d4;"><td>Frank Lemke</td><td>Dev</td><td>2022-12</td><td>49</td><td>niedrig</td><td>Auch OPs</td></tr>
<tr><td>Kathrin Schleich</td><td>Dev</td><td>2021-09</td><td>27</td><td>niedrig</td><td>Auch OPs</td></tr>
<tr style="background:#fff2cc;"><td>Michael Weisberg</td><td>Test</td><td>2024-11</td><td>23</td><td>&#8212;</td><td>52% offen</td></tr>
<tr><td>Bernd Klebl</td><td>PO</td><td>2021-09</td><td>16</td><td>&#8212;</td><td>Auch OPs</td></tr>
<tr style="background:#f8cecc;"><td>Norbert Maurer</td><td>Dev</td><td>2021-11</td><td>12</td><td>&#8212;</td><td>83% offen &#8212; ausgeschieden?</td></tr>
</table>
<h3>DevOps &#8212; SPOF-Risiko</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Jan Lubenow = 39% aller DevOps-Issues</strong> &#8212; kritischster Single Point of Failure im gesamten Programm.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Anteil</th></tr>
<tr style="background:#f8cecc;"><td><strong>Jan Lubenow</strong></td><td>Lead Dev</td><td>2022-09</td><td>114</td><td>39%</td></tr>
<tr><td>David Steinkopff</td><td>Dev</td><td>2023-03</td><td>18</td><td>6%</td></tr>
<tr><td>Henrik Scholl</td><td>Dev</td><td>2024-10</td><td>10</td><td>3%</td></tr>
<tr><td>Christian Prause</td><td>Dev</td><td>2025-08</td><td>7</td><td>2%</td></tr>
<tr><td>Patrick Lewandowski</td><td>Dev</td><td>2025-07</td><td>6</td><td>2%</td></tr>
<tr><td>Michael Mh Jahn</td><td>Dev</td><td>2022-01</td><td>6</td><td>2%</td></tr>
<tr><td>Sebastian Goendoer</td><td>Dev</td><td>2023-05</td><td>3</td><td>1%</td></tr>
</table>
<h3>Tenure vs. Bug-Rate &#8212; Korrelation</h3>
<table>
<tr><th>Team</th><th>Hypothese: Laenger dabei = weniger Bugs?</th><th>Ergebnis</th></tr>
<tr><td>Team 404</td><td>Emmanuel (56 Mon., 69% Bugs), Leon (37 Mon., 71%), Simon (5 Mon., 0%)</td><td><strong>WIDERLEGT</strong> &#8212; Systematisches Problem</td></tr>
<tr><td>Team CIB</td><td>Saurav (51 Monate, 8% Bugs), Bishara (44 Monate, niedrig)</td><td><strong>BESTAETIGT</strong> &#8212; Erfahrung + gute Prozesse</td></tr>
<tr><td>Team Zero</td><td>Alle Veteranen niedrige Bug-Rate, beste SonarQube-Werte</td><td><strong>BESTAETIGT</strong> &#8212; Stabiles Team + Praktiken</td></tr>
</table>
<p><strong>Fazit:</strong> Tenure allein erklaert die Bug-Rate nicht. Team 404 hat ein systematisches Frontend-Qualitaetsproblem, das nicht durch Erfahrung geloest wird. CIB und Zero zeigen, dass gute Prozesse + Erfahrung zusammen wirken.</p>
<h3>Methodischer Hinweis</h3>
<ac:structured-macro ac:name="note"><ac:rich-text-body>
<p>Die Bug-Raten in den Team-Tabellen basieren auf dem <strong>Anteil der Bug-Tickets an den zugewiesenen Issues</strong> einer Person (90 Tage). Separate Causation-CSVs verwenden eine Korrelationsmethodik (14-Tage-Fenster), die Raten &gt;100% erzeugt und nur als relative Gewichtung innerhalb eines Teams nuetzlich ist.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Risiko-Matrix Personal</h3>
<h4>KRITISCH (sofort handeln)</h4>
<table>
<tr><th>Risiko</th><th>Person(en)</th><th>Impact</th><th>Massnahme</th></tr>
<tr style="background:#f8cecc;"><td>SPOF DevOps</td><td>Jan Lubenow (39%)</td><td>Deployment, CI/CD, Infra</td><td>Wissenstransfer, Dokumentation</td></tr>
<tr style="background:#f8cecc;"><td>SPOF Zero/OPs</td><td>Steven Meixner (91 Issues)</td><td>TAF/TAP + Infrastruktur</td><td>Entlastung, Backup aufbauen</td></tr>
<tr style="background:#f8cecc;"><td>Bug-Verursacher 404</td><td>Emmanuel (69%), Leon (71%)</td><td>Portal-Qualitaet</td><td>Code-Reviews, Pair Programming</td></tr>
</table>
<h4>HOCH (kurzfristig)</h4>
<table>
<tr><th>Risiko</th><th>Person(en)</th><th>Impact</th><th>Massnahme</th></tr>
<tr style="background:#fff2cc;"><td>QA-Engpass 404</td><td>Luca Caracciolo (5 Issues)</td><td>Testabdeckung Portal</td><td>Aktivieren oder ersetzen</td></tr>
<tr style="background:#fff2cc;"><td>Test-Backlog Zero</td><td>Michael Weisberg (52% offen)</td><td>Testabdeckung TAF/TAP</td><td>Priorisierung</td></tr>
<tr style="background:#fff2cc;"><td>Inaktive Mitglieder</td><td>Norbert Maurer, Alexander Petioky</td><td>Offene Issues, Wissen</td><td>Status klaeren</td></tr>
</table>
<h3>Top 5 Massnahmen (priorisiert)</h3>
<ol>
<li><strong>Jan Lubenow entlasten</strong> &#8212; Wissenstransfer auf David Steinkopff + Henrik Scholl. DevOps-Runbook beschleunigen. Ziel: Kein Einzelner &gt;25% der Issues.</li>
<li><strong>Portal-Qualitaet steigern (404)</strong> &#8212; Code-Reviews fuer Emmanuel/Leon verstaerken. Frontend-Testautomatisierung ausbauen. QA aktivieren. Fehlermeldungen-Konzept umsetzen.</li>
<li><strong>Steven Meixner entlasten</strong> &#8212; OPs-Rotation auf CIB/404 ausweiten. Steven soll sich auf Zero-Kernarbeit konzentrieren.</li>
<li><strong>Inaktive klaeren</strong> &#8212; Norbert Maurer (Zero), Alexander Petioky (CIB), Sebastian Goendoer (OPs): Status klaeren, offene Issues umverteilen.</li>
<li><strong>CIB Best Practices teilen</strong> &#8212; Bishara/Saurav/Jonas als Mentoren. Deren Arbeitsweise (&gt;93% Done, &lt;10% Bugs) als Vorbild fuer 404.</li>
</ol>
"@
$Page24Id = Create-Or-Update-Page -Title "22. Personal- und Bug-Analyse" -HtmlBody $PersonalHtml -ParentId $ParentPageId
# --- Seite 25: Risiko-Radar ---
Write-Host ""
Write-Host ">> Seite 23: Risiko-Radar" -ForegroundColor Yellow
$RisikoHtml = @"
<h2>Risiko-Radar &#8212; Geschaeftskritische Themen</h2>
<p><strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd') | Quelle: Jira (Labels TopThema, Konzernreporting, Taskforce-FplW, TTT_Kunde)</p>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p>Diese Seite zeigt geschaeftskritische Risiken die ueber rein technische Probleme hinausgehen: Kundenversprechen, regulatorische Anforderungen, Eskalationen, Abrechnungsrisiken. Wird woechentlich aktualisiert.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>&#128308; Kritisch (sofort handeln)</h3>
<table>
<tr><th style="width:5%;">#</th><th style="width:12%;">Ticket</th><th style="width:30%;">Thema</th><th style="width:12%;">Status</th><th>Impact / Risiko</th></tr>
<tr style="background:#f8cecc;"><td>1</td><td>TTTSOL-2184<br/>O2CCIB-6931</td><td><strong>Implizite Annahme NAÄ</strong></td><td>Highest<br/>Umsetzung geschoben</td><td>Kundenversprechen gebrochen. EVUs erleben nicht den Standard-Prozess. Fernverkehr + Regio betroffen.</td></tr>
<tr style="background:#f8cecc;"><td>2</td><td>TTTSOL-1677<br/>TTTSOL-2149</td><td><strong>20h Zug &#8212; Abrechnung</strong></td><td>High<br/>BLOCKED</td><td>Loesung funktioniert nicht. Korrekte Abrechnung nicht moeglich. Cargo betroffen.</td></tr>
<tr style="background:#f8cecc;"><td>3</td><td>TTTSOL-2186</td><td><strong>DB Cargo Eskalation CIO Board</strong></td><td>Highest<br/>In Bearbeitung</td><td>PCS + gestaffelter VNP-Versand. Eskaliert bis CIO-Ebene. Konzernreporting.</td></tr>
<tr style="background:#f8cecc;"><td>4</td><td>TTTSOL-2035<br/>TTTSOL-2147<br/>TTTSOL-2148</td><td><strong>Abrechnung TTT / AC Trasse</strong></td><td>Highest (3x)<br/>Taskforce aktiv</td><td>41 offene Tickets, 8 Highest. Grundlegendes Risiko: Nicht korrekt abrechnen zu koennen.</td></tr>
<tr style="background:#f8cecc;"><td>5</td><td>TTTSOL-1956</td><td><strong>Vertragskorrektur in die Vergangenheit</strong></td><td>Highest<br/>In Bearbeitung</td><td>Rueckwirkende Korrekturen = Abrechnungsrisiko. Konzernreporting.</td></tr>
</table>
<h3>&#128992; Hoch (kurzfristig klaeren)</h3>
<table>
<tr><th style="width:5%;">#</th><th style="width:12%;">Ticket</th><th style="width:30%;">Thema</th><th style="width:12%;">Status</th><th>Impact / Risiko</th></tr>
<tr style="background:#fff2cc;"><td>6</td><td>TTTSOL-1900<br/>TTTSOL-2185</td><td><strong>Mittiger Teilausfall (SEV)</strong></td><td>Highest<br/>Taskforce</td><td>Fernverkehr: Kein Workaround fuer SEV-Faelle. Betrieb + E2E-Test betroffen.</td></tr>
<tr style="background:#fff2cc;"><td>7</td><td>TTTSOL-1819</td><td><strong>Ad-hoc Verkehre &lt;1h (FV)</strong></td><td>BLOCKED<br/>TopThema</td><td>Fernverkehr kann kurzfristige Zuege nicht bestellen. Konzernreporting.</td></tr>
<tr style="background:#fff2cc;"><td>8</td><td>TTTSOL-1853</td><td><strong>Teilstorno in LeiDaF</strong></td><td>Highest<br/>Taskforce</td><td>Stornierungen werden nicht verarbeitet. Fahrplanwechsel betroffen.</td></tr>
<tr style="background:#fff2cc;"><td>9</td><td>TTTSOL-1683</td><td><strong>OTN-Vergabe Fpl 2027</strong></td><td>Highest<br/>Taskforce</td><td>Fahrplan 2027 betroffen. Muss vor Fahrplanwechsel geloest sein.</td></tr>
<tr style="background:#fff2cc;"><td>10</td><td>TTTSOL-1707</td><td><strong>Nachtsprung auf Fremd-EIU</strong></td><td>Highest<br/>In Bearbeitung</td><td>Sonderfall innerdeutsch. Handover-Problem.</td></tr>
<tr style="background:#fff2cc;"><td>11</td><td>TTTSOL-433</td><td><strong>TrainID mit anderer Trasse verknuepfen</strong></td><td>High<br/>TopThema</td><td>Alternativangebote. Konzernreporting + Kundenkommunikation.</td></tr>
</table>
<h3>&#128993; Beobachten</h3>
<table>
<tr><th style="width:5%;">#</th><th style="width:12%;">Ticket</th><th style="width:30%;">Thema</th><th style="width:12%;">Status</th><th>Impact / Risiko</th></tr>
<tr><td>12</td><td>TTTI-7811</td><td>KV-Profile loeschen nicht moeglich</td><td>Zeitkritisch</td><td>TPN-Import betroffen. Kunde gemeldet.</td></tr>
<tr><td>13</td><td>TTTI-8171</td><td>PROD Operate-Incident ConstraintViolation</td><td>High, Offen</td><td>Produktions-Incident. Kunde betroffen.</td></tr>
<tr><td>14</td><td>TTTI-7751</td><td>IFP-Connector: value too long</td><td>High, In Bearbeitung</td><td>Datenintegritaet. Kunde gemeldet.</td></tr>
<tr><td>15</td><td>TTTSOL-2043</td><td>OIM-Aktualisierung nicht unterstuetzt</td><td>High, Review</td><td>DB Cargo + Kundenkommunikation. InfraGO-Entscheidung.</td></tr>
</table>
<h3>Kennzahlen</h3>
<table>
<tr><th>Metrik</th><th>Wert</th><th>Trend</th></tr>
<tr><td>TopThema (offen)</td><td>3</td><td>&#8594; Stabil</td></tr>
<tr><td>Konzernreporting (offen)</td><td>26</td><td>&#8594;</td></tr>
<tr><td>Taskforce-FplW (offen)</td><td>15</td><td>&#8594;</td></tr>
<tr><td>TTT_Kunde (offen)</td><td>65</td><td>&#8594;</td></tr>
<tr><td>Blocked + High/Highest</td><td>38</td><td>&#8594;</td></tr>
<tr><td>TTT_offenePunkte + Highest</td><td>13</td><td>&#8594;</td></tr>
<tr><td>TTT_MUSS (offen)</td><td>196</td><td>&#8594;</td></tr>
</table>
<h3>Erkennungsmethodik</h3>
<p>Geschaeftskritische Risiken werden ueber folgende Jira-Signale identifiziert:</p>
<ul>
<li><strong>Labels:</strong> TopThema, Konzernreporting, Taskforce-FplW, TTT_Kunde, TTT_offenePunkte</li>
<li><strong>Status:</strong> Blocked + hohe Prioritaet</li>
<li><strong>Eskalation:</strong> Im Titel oder in CIO-Board-Kontext</li>
<li><strong>Kundenrelevanz:</strong> Labels DBFernverkehr, DBCargo, DBRegio</li>
<li><strong>Regulatorik:</strong> TTT_MUSS, BNetzA-Bezug</li>
</ul>
<p>Script: <code>jira-critical-scan.py</code> &#8212; wird woechentlich ausgefuehrt.</p>
"@
$Page25Id = Create-Or-Update-Page -Title "23. Risiko-Radar" -HtmlBody $RisikoHtml -ParentId $ParentPageId
# --- Stammseite aktualisieren ---
Write-Host ""
Write-Host ">> Stammseite aktualisieren..." -ForegroundColor Yellow
$StammHtml = @"
<h2>Analyse pathOS &#8212; Portfolio-Audit</h2>
<p><strong>Business Owner:</strong> Andre Knie | <strong>Start:</strong> 2026-04-22 | <strong>Stand:</strong> $(Get-Date -Format 'yyyy-MM-dd')</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Systematische Analyse der pathOS-Plattform (167 GitLab-Projekte, 24.700 Jira-Issues, 187 Confluence-Seiten, SonarQube, Runbook). pathOS ist seit <strong>Dezember 2025 produktiv</strong> (Go/No-Go Sep 2025 positiv). Aktuell: Verlaengerte Hypercare + NEP2 + Spring Boot 4 Upgrade.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>&#9888; Geschaeftskritische Risiken (aktuell)</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<table>
<tr><th>Risiko</th><th>Ticket</th><th>Status</th><th>Impact</th></tr>
<tr><td><strong>Implizite Annahme NAÄ</strong></td><td>TTTSOL-2184 / O2CCIB-6931</td><td>Fachlich Highest, Umsetzung auf naechsten PI geschoben</td><td>Kundenversprechen nicht eingehalten. EVUs erleben nicht den Standard-Prozess.</td></tr>
<tr><td><strong>20h Zug &#8212; Abrechnung</strong></td><td>TTTSOL-1677 / TTTSOL-2149</td><td>TTTSOL-2149 BLOCKED</td><td>Loesung funktioniert nicht. Korrekte Abrechnung nicht moeglich.</td></tr>
<tr><td><strong>Abrechnung TTT / AC Trasse</strong></td><td>41 offene Tickets (8 Highest)</td><td>Taskforce aktiv</td><td>Grundlegendes Risiko: Nicht korrekt abrechnen zu koennen.</td></tr>
</table>
</ac:rich-text-body></ac:structured-macro>
<h3>Schnelleinstieg</h3>
<table>
<tr>
<td style="width:50%;vertical-align:top;padding:10px;">
<h4><ac:link><ri:page ri:content-title="Management Summary"/></ac:link></h4>
<p>Kompakte Zusammenfassung: Status, Findings, Herausforderungen, naechste Schritte. Fuer Management Board.</p>
</td>
<td style="width:50%;vertical-align:top;padding:10px;">
<h4><ac:link><ri:page ri:content-title="Roadmap und Planung"/></ac:link></h4>
<p>Priorisierte Aktionen und Zeitplaene bis Mitte 2027.</p>
</td>
</tr>
</table>
<h3>Bereiche</h3>
<table>
<tr><th>Bereich</th><th>Inhalt</th></tr>
<tr><td><ac:link><ri:page ri:content-title="Systemueberblick"/></ac:link></td><td>Architektur, Komponenten, Customer Journey, GitLab-Landschaft, Glossar</td></tr>
<tr><td><ac:link><ri:page ri:content-title="Technische Analyse"/></ac:link></td><td>Versionen, SonarQube (Coverage vs. Bug-Rate), Branch-Analyse, Technische Roadmap</td></tr>
<tr><td><ac:link><ri:page ri:content-title="Teams und Velocity"/></ac:link></td><td>Team-Struktur, 12-Monats-Velocity, Personal-Analyse (176 Personen), Risiko-Matrix</td></tr>
<tr><td><ac:link><ri:page ri:content-title="TTT-Programm"/></ac:link></td><td>TAF/TAP TSI Kontext, NEP2, TTTI-Integration, Geschaeftskritische Risiken</td></tr>
<tr><td><ac:link><ri:page ri:content-title="Roadmap und Planung"/></ac:link></td><td>Aktionsplan (24 Massnahmen), Produkt-Roadmap, Audit-Backlog</td></tr>
</table>
<h3>Letzte Aktualisierungen</h3>
<table>
<tr><th>Datum</th><th>Was</th></tr>
<tr><td>30.04.2026</td><td>Geschaeftskritische Risiken (NAÄ, 20h Zug, Abrechnung) aufgenommen</td></tr>
<tr><td>30.04.2026</td><td>Branch-Analyse (452 Branches, 13 Services, Spring Boot 4 Status)</td></tr>
<tr><td>30.04.2026</td><td>SonarQube Deep Dive: Coverage erklaert Bug-Rate nicht</td></tr>
<tr><td>30.04.2026</td><td>Personal-Analyse: Tenure vollstaendig (176 Personen)</td></tr>
<tr><td>27.04.2026</td><td>Knowledge Graph + Skills aufgesetzt</td></tr>
<tr><td>24.04.2026</td><td>SonarQube, Geschaeftsprozesse, Produkt-Roadmap</td></tr>
<tr><td>23.04.2026</td><td>TTT-Programm, TTTI, Velocity 12M, Team-Personenanalyse</td></tr>
<tr><td>22.04.2026</td><td>Domain Discovery, Tech Deep Dive, Team-Analyse, Roadmap</td></tr>
</table>
"@
# Stammseite updaten (ID bekannt: 581013135)
try {
$StammResp = Invoke-WebRequest -Uri "$ApiBase/content/$ParentPageId`?expand=version" -Headers $Headers -UseBasicParsing -ErrorAction Stop
$StammData = $StammResp.Content | ConvertFrom-Json
$StammVersion = $StammData.version.number + 1
Write-Host " Aktualisiere Stammseite (Version: $StammVersion)..." -NoNewline
$StammHtml = Fix-Umlauts $StammHtml
$StammBody = @{
version = @{ number = $StammVersion }
title = "Analyse pathOS"
type = "page"
body = @{
storage = @{
value = $StammHtml
representation = "storage"
}
}
} | ConvertTo-Json -Depth 10
$StammResult = Invoke-WebRequest -Uri "$ApiBase/content/$ParentPageId" -Method Put -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($StammBody)) -UseBasicParsing -ErrorAction Stop
Write-Host " OK" -ForegroundColor Green
} catch {
Write-Host " FEHLER: $($_.Exception.Message)" -ForegroundColor Red
}
# --- Zusammenfassung ---
Write-Host ""
Write-Host "============================================================" -ForegroundColor Green
Write-Host " FERTIG! Seiten erstellt/aktualisiert:" -ForegroundColor Green
if ($Page1Id) { Write-Host " 1. Uebersicht: $ConfluenceUrl/pages/viewpage.action?pageId=$Page1Id" }
if ($Page2Id) { Write-Host " 2. Problemfelder: $ConfluenceUrl/pages/viewpage.action?pageId=$Page2Id" }
if ($Page3Id) { Write-Host " 3. Roadmap: $ConfluenceUrl/pages/viewpage.action?pageId=$Page3Id" }
if ($Page4Id) { Write-Host " 4. GitLab: $ConfluenceUrl/pages/viewpage.action?pageId=$Page4Id" }
if ($Page5Id) { Write-Host " 5. Glossar: $ConfluenceUrl/pages/viewpage.action?pageId=$Page5Id" }
if ($Page6Id) { Write-Host " 6. Architektur: $ConfluenceUrl/pages/viewpage.action?pageId=$Page6Id" }
if ($Page7Id) { Write-Host " 7. Fortschritt: $ConfluenceUrl/pages/viewpage.action?pageId=$Page7Id" }
if ($Page8Id) { Write-Host " 8. Links: $ConfluenceUrl/pages/viewpage.action?pageId=$Page8Id" }
if ($Page9Id) { Write-Host " 9. Customer Journey: $ConfluenceUrl/pages/viewpage.action?pageId=$Page9Id" }
if ($Page10Id) { Write-Host " 10. Tech Deep Dive: $ConfluenceUrl/pages/viewpage.action?pageId=$Page10Id" }
if ($Page11Id) { Write-Host " 11. Team Analyse: $ConfluenceUrl/pages/viewpage.action?pageId=$Page11Id" }
if ($Page12Id) { Write-Host " 12. Roadmap: $ConfluenceUrl/pages/viewpage.action?pageId=$Page12Id" }
if ($Page13Id) { Write-Host " 13. Jira: $ConfluenceUrl/pages/viewpage.action?pageId=$Page13Id" }
if ($Page14Id) { Write-Host " 14. Naechste Schritte: $ConfluenceUrl/pages/viewpage.action?pageId=$Page14Id" }
if ($Page15Id) { Write-Host " 0. Management Summary: $ConfluenceUrl/pages/viewpage.action?pageId=$Page15Id" }
if ($Page16Id) { Write-Host " 15. TTT/NEP2: $ConfluenceUrl/pages/viewpage.action?pageId=$Page16Id" }
if ($Page17Id) { Write-Host " 16. Roadmap: $ConfluenceUrl/pages/viewpage.action?pageId=$Page17Id" }
if ($Page18Id) { Write-Host " 17. TTTI: $ConfluenceUrl/pages/viewpage.action?pageId=$Page18Id" }
if ($Page19Id) { Write-Host " 18. Velocity: $ConfluenceUrl/pages/viewpage.action?pageId=$Page19Id" }
if ($Page20Id) { Write-Host " 19. SonarQube: $ConfluenceUrl/pages/viewpage.action?pageId=$Page20Id" }
if ($Page22Id) { Write-Host " 19a. Smells: $ConfluenceUrl/pages/viewpage.action?pageId=$Page22Id" }
if ($Page21Id) { Write-Host " 20. Prozesse: $ConfluenceUrl/pages/viewpage.action?pageId=$Page21Id" }
if ($Page23Id) { Write-Host " 21. Produkt-Roadmap: $ConfluenceUrl/pages/viewpage.action?pageId=$Page23Id" }
if ($Page24Id) { Write-Host " 22. Personal-Analyse: $ConfluenceUrl/pages/viewpage.action?pageId=$Page24Id" }
if ($Page25Id) { Write-Host " 23. Risiko-Radar: $ConfluenceUrl/pages/viewpage.action?pageId=$Page25Id" }
Write-Host " Stammseite: $ConfluenceUrl/spaces/$SpaceKey/pages/$ParentPageId"
Write-Host "============================================================" -ForegroundColor Green