[[00-Start|← Zurück zum Projektstart]] # Word-Export: Build-Pipeline Erzeugt aus den Markdown-Notizen dieses Ordners zwei Word-Dateien für die externe Weitergabe. Die `.docx` sind **bewusst nicht eingecheckt** – sie lassen sich jederzeit aus den Notizen neu erzeugen. | Datei | Inhalt | |---|---| | `Coole-Senioren-Gesamtdokumentation.docx` | Alle Notizen + Anhang PV-Kalkulation (**intern**, vollständig) | | `Coole-Senioren-Gesamtdokumentation-oeffentlich.docx` | dieselbe, aber **anonymisiert** – siehe „Zwei Fassungen" | | `09-CS-Final.docx` | Nur das kundenverständliche Dokument | ## Zwei Fassungen: intern und öffentlich Das PDF liegt öffentlich im Google Drive und ist vom [Obeco-Blog](https://www.obeco.de/blog/coole-senioren-klimatisierung-fuer-30-pflegezimmer.html) aus verlinkt. Die vollständige Adresse eines Pflegeheims mit Demenzstation gehört dort nicht hin – zusammen mit der Bewohnerumlage und dem Entwurfsstatus wäre die Einrichtung sonst eindeutig identifizierbar, obwohl die Umlage rechtlich noch nicht bestätigt ist. `--public` ersetzt deshalb die Adresse durch die Region: | Intern | Öffentlich | |---|---| | `Josefshausstraße 9, 56428 Dernbach (Westerwald)` | `Westerwald` | | `Dernbach/Westerwald` | `Westerwald` | Die **Region bleibt erhalten** – die PV-Ertragsrechnung (846 kWh/kWp/Jahr aus dem Solarkataster) braucht sie, die Hausnummer nicht. Sonst sind beide Fassungen identisch; der Unterschied beträgt genau vier Textstellen. > [!warning] Die Sperre ist hart > Bei `--public` bricht das Skript ab, wenn „Josefshaus", „56428" oder „Dernbach" im > Ergebnis auftauchen – auch aus neu hinzugekommenen Notizen. Umgekehrt bricht es ab, > wenn „Westerwald" gar nicht mehr vorkommt (dann hätte die Anonymisierung ins Leere > gegriffen). Neue identifizierende Angaben gehören in die Listen `ANON`/`VERBOTEN`. ## Voraussetzungen - **Pandoc** (`C:\Program Files\Pandoc\pandoc.exe`, getestet mit 3.10) - **Python 3** – bei Unicode-Fehlern in der Konsole: `PYTHONIOENCODING=utf-8` voranstellen ## Aufruf ```bash # 1) Markdown zusammenbauen -> _build/out/cs-gesamt.md + cs-final.md PYTHONIOENCODING=utf-8 python "40 Projekte/CooleSenioren/_build/build_cs.py" # 1b) Öffentliche Fassung (anonymisiert) -> out/cs-gesamt-oeffentlich.md PYTHONIOENCODING=utf-8 python "40 Projekte/CooleSenioren/_build/build_cs.py" --public # 2) Gesamtdokumentation "/c/Program Files/Pandoc/pandoc" "40 Projekte/CooleSenioren/_build/out/cs-gesamt.md" \ -o "40 Projekte/CooleSenioren/Coole-Senioren-Gesamtdokumentation.docx" \ --reference-doc="40 Projekte/CooleSenioren/_build/reference-footer.docx" \ --toc \ --metadata title="Coole Senioren" \ --metadata subtitle="Klimatisierung aller 30 Bewohnerzimmer – Gesamtdokumentation" \ --metadata author="Joachim Berger, Obeco" \ --metadata date="Stand: 16.07.2026" \ --metadata lang="de-DE" \ --metadata toc-title="Inhaltsverzeichnis" # 2b) Inhaltsverzeichnis hinter die erste Notiz schieben (Pflichtschritt, siehe unten) PYTHONIOENCODING=utf-8 python "40 Projekte/CooleSenioren/_build/place_toc.py" \ "40 Projekte/CooleSenioren/Coole-Senioren-Gesamtdokumentation.docx" # 3) Einzeldokument "/c/Program Files/Pandoc/pandoc" "40 Projekte/CooleSenioren/_build/out/cs-final.md" \ -o "40 Projekte/CooleSenioren/09-CS-Final.docx" \ --reference-doc="40 Projekte/CooleSenioren/_build/reference-footer.docx" \ --metadata title="Coole Senioren" \ --metadata subtitle="Das Wichtigste in Kürze" \ --metadata author="Joachim Berger, Obeco" \ --metadata date="Stand: 16.07.2026" ``` > [!warning] Word muss die Zieldatei geschlossen haben > Ist die `.docx` in Word geöffnet, bricht Pandoc mit `permission denied` ab. Erkennbar > an der Lockdatei `~$ole-Senioren-Gesamtdokumentation.docx` im Projektordner. ## Was `build_cs.py` aus den Notizen entfernt Vorgaben für die externe Weitergabe – alles Nutzerentscheidungen: | Was | Warum | |---|---| | Navigations-Kopfzeile (alles vor der H1) | Vault-Navigation, im Word sinnlos | | Status-Block + Änderungshistorie + Footer | interne Arbeitsstände | | Abschnitt `## Quellen` | Nutzervorgabe | | Inline-Marker `[1]`, `[3][4]` | würden nach Wegfall der Quellen ins Leere zeigen | | Erledigte Punkte `- [x]` inkl. Folgezeilen | nur Offenes soll ins Word | | Wikilinks `[[Ziel\|Label]]` | zu `Label` bzw. `Ziel` aufgelöst | `- [x]`-Punkte stehen seit dem 16.07.2026 ohnehin nicht mehr in den Notizen (sie wurden dort gelöscht); die Funktion bleibt als **Sicherheitsnetz** aktiv, falls wieder welche dazukommen. ## Eingebaute Prüfungen Das Skript bricht **hart ab**, statt eine kaputte Datei zu erzeugen: - Wikilink-Reste (`[[` / `]]`) im Ergebnis - Notiz ohne Status-Block (Struktur unerwartet) - Markdown-Link mit Zahlen-Label (`[2](url)`) – wäre kein Quellenmarker - Quellen-Abschnitte gefunden ≠ **9** (eine je Notiz; Zahl anpassen, wenn Notizen dazukommen) - Übrig gebliebene `[n]`-Marker oder Prosa-Verweise auf „Quelle […]" - Leerer `## Offene …`-Abschnitt (entstünde, wenn alle Punkte erledigt sind) ## Reihenfolge `MAIN` in `build_cs.py` bestimmt die Reihenfolge – sie weicht **bewusst** von der Dateinummerierung ab: `09-CS-Final` steht als kundenverständlicher Einstieg **vorne**, danach `00-Start` und die Detailnotizen, am Ende der Anhang PV-Kalkulation. Das fertige Dokument hat damit diesen Aufbau: | Reihenfolge | Inhalt | |---|---| | 1 | Titelseite (Titel, Untertitel, Verfasser, Stand) | | 2 | **Coole Senioren – Klimaanlagen für alle Bewohnerzimmer** (`09-CS-Final`) | | 3 | Inhaltsverzeichnis | | 4 | Projekt-Start und Detailnotizen | | 5 | Anhang PV-Kalkulation | ## place_toc.py – warum ein Extraschritt nötig ist Pandoc setzt das `--toc`-Verzeichnis **fest** hinter die Titelseite; für den docx-Writer gibt es keine Option zur Platzierung. Nutzervorgabe ist aber, dass die kundenverständliche Notiz **vor** dem Verzeichnis steht. `place_toc.py` verschiebt den `<w:sdt>`-Block deshalb nachträglich hinter den ersten Seitenumbruch und hängt einen weiteren Umbruch an, damit das Verzeichnis eine eigene Seite bekommt. > [!tip] Seitenzahlen stimmen trotzdem > Das TOC-Feld trägt `w:dirty="true"` – Word baut das Verzeichnis beim Öffnen neu auf. > Das Verschieben verfälscht die Seitenzahlen also nicht. Das Skript ist **nicht idempotent** und bricht bewusst ab, wenn das Verzeichnis schon verschoben wurde – so kann ein versehentlicher zweiter Lauf das Dokument nicht zerlegen. Es läuft nur für die Gesamtdokumentation; `09-CS-Final.docx` hat kein Inhaltsverzeichnis. ## reference-footer.docx Pandocs Standardvorlage, ergänzt um eine zentrierte Fußzeile „Seite X von Y" (`PAGE`/`NUMPAGES`-Felder). Ist eingecheckt (Ausnahme in `.gitignore`), muss also normalerweise nicht neu gebaut werden. Falls doch: `python _build/make_ref.py`. Das Skript injiziert ins OOXML: `word/footer1.xml`, einen Override in `[Content_Types].xml`, eine Relationship in `word/_rels/document.xml.rels` und die `<w:footerReference>` als erstes Kind des `<w:sectPr>`. Verfasser und Titel kommen **nicht** aus der Vorlage, sondern über `--metadata` beim Pandoc-Aufruf (siehe oben). ## Prosa-Umformulierungen Die Liste `PROSA` in `build_cs.py` ersetzt Formulierungen, die beim reinen Löschen der Quellennummer zerbrechen würden – aktuell: „Quelle [2] nennt" → „Eine Marktrecherche nennt". Bei neuen Prosa-Verweisen auf Quellen dort ergänzen, sonst schlägt die Prüfung an. --- **Status:** Aktiv **Version:** 1.2 **Letzte Aktualisierung:** 16.07.2026 16:15 Uhr ### Änderungshistorie | Version | Datum | Uhrzeit | Änderung | |---|---|---|---| | 1.0 | 16.07.2026 | 11:58 | Erstfassung – Build-Pipeline aus dem Temp-Ordner in den Vault übernommen und dokumentiert (Nutzervorgabe); Pfade in `build_cs.py`/`make_ref.py` auf skriptrelative Auflösung umgestellt, Zwischenstufen nach `_build/out/` (gitignored), `reference-footer.docx` als Ausnahme in `.gitignore` eingecheckt | | 1.1 | 16.07.2026 | 12:10 | **Nutzervorgabe:** Inhaltsverzeichnis steht jetzt hinter der Notiz „Coole Senioren – Klimaanlagen für alle Bewohnerzimmer" statt davor – neues Skript `place_toc.py` als Pflichtschritt 2b ergänzt (Pandoc kann die TOC-Position im docx nicht steuern). Dabei ergänzt: `toc-title=Inhaltsverzeichnis` und `lang=de-DE`, die Überschrift lautete bisher englisch „Table of Contents" | | 1.2 | 16.07.2026 | 16:15 | **Nutzervorgabe:** Schalter `--public` ergänzt – erzeugt eine anonymisierte Fassung für die öffentliche Weitergabe (Adresse des Heims → Region „Westerwald"). Anlass: Das PDF liegt öffentlich freigegeben im Google Drive und ist seit heute vom Obeco-Blog aus verlinkt. Harte Prüfung gegen identifizierende Reste eingebaut | --- [[00-Start|← Zurück zum Projektstart]] | [[Impressum|Impressum]] | [[Datenschutzerklärung|Datenschutz]]