# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Projektübersicht Sphinx-basiertes Dokumentationssystem für Transport- und Hängefördersysteme (Firma Schönenberger, umgesetzt von Mista GmbH). JSON-gesteuerter Build erzeugt aus modularen Textbausteinen mehrsprachige PDF-Dokumentationen (250+ Seiten). Projekt befindet sich in der Planungs-/Aufbauphase – die Sphinx-Extensions und der Build-Prozess sind noch zu implementieren. ## Entwicklungsumgebung ```bash # Setup (einmalig) bin/install_py.bat # Windows bash bin/install_py.sh # Linux # Umgebung aktivieren bin/activate_venv.bat # Windows source bin/activate_venv.sh # Linux # Shell mit gesetzten Umgebungsvariablen bin/get_cmd.bat # Windows source bin/get_cmd.sh # Linux ``` Python-Code kommt nach `lib/`, Konfiguration nach `cfg/`. Die `bin/`-Skripte setzen Umgebungsvariablen (`PROJECT`, `PV_BIN`, `PV_LIB`, `PV_CFG`, `PV_DATA`, `PV_LOG`, `PV_RESULTS`, `PV_EXAMPLES`) und erweitern `PYTHONPATH` um `PV_LIB`. ## Architektur: Zwei-Repo-System Dieses Repo (`docu_build`) dient als Entwicklungs- und Planungsumgebung. Das Zielsystem besteht aus zwei getrennten Repos: - **transport-docs-base** (Gitea, = dieses Repo): Wiederverwendbare Inhalte – Sphinx-Extensions (`_ext/`), Module (`modules/`), Kapitelgerüste (`chapters/`), Assets, Glossar, LaTeX-Templates. Semver-versioniert via `VERSION`-Datei. - **projekt-kunde-xyz** (pro Anlage): `anlage.json` (ERP-Export), projektspezifische Bilder, Overrides, `conf.py`, `build.py`. Bindet Base-Repo als `transport-docs-base/` ein (Symlink/Mount). ### Technologie-Stack | Komponente | Technologie | |------------------|--------------------------------------------------| | Build-System | Sphinx (Python) | | Textformat | reStructuredText (rST) | | Templating | Jinja2 (Rahmenkapitel, Titelseite) | | PDF-Erzeugung | LaTeX (pdflatex/lualatex) | | Versionierung | Git (Gitea auf Hetzner) | | Konfiguration | JSON (ERP-Export) + YAML (Modul-Metadaten) | | CI/Automatisierung | Gitea Actions oder n8n | | Bildkonvertierung | ezdxf → SVG, Pillow (Optimierung) | ### Build-Pipeline (zu implementieren) `anlage.json` → `build.py` → Versionscheck → Abhängigkeiten auflösen (meta.yaml) → Overrides anwenden → Sphinx-Quellen generieren → `sphinx-build -b latex` → pdflatex → PDF pro Sprache. Ausgabe: `_output/P-XXXX_Dokumentation_DE.pdf`. ### Kernmechanismen **Override-Reihenfolge**: `projekt/overrides/` > `transport-docs-base/modules/` bzw. `chapters/` **Mehrsprachigkeit**: Dateinamenskonvention `{name}.{lang}.rst`, Fallback auf `de`. Bilder via `localized-figure`-Direktive (`assets/localized/{lang}/`). Glossar aus `terms.{lang}.csv` (Semikolon-getrennt). **anlage.json**: Steuert Zusammenstellung – enthält `projekt` (Metadaten, Sprachen, Normenregion), `maschinen` (Modulliste mit Positionen/Varianten/Optionen), `zusatz_kapitel`. **meta.yaml** (pro Modul): Definiert `display_name` (mehrsprachig), `chapters` (Kapitelzuordnung mit Sections), `images` (shared/localized/module_local), `requires` (Abhängigkeiten). Details siehe `doc/Kernkonzepte.md`. ### Kapitelstruktur (`chapters/`) ```text 00_inhaltsverzeichnis – Inhaltsverzeichnis (wird generiert) 01_zertifikate – CE/UKCA-Konformität, Konfigurationsbeschreibung 02_sicherheit – Allgemein, Normen, Risikobewertung 03_anlagenbeschreibung – Module werden hier via meta.yaml eingefügt 04_betrieb – Betriebsanleitung 05_wartung – Wartungsanleitung, Schmierplan 06_steuerung – Funktionsbeschreibungen pro Steuerungssystem 07_ersatzteile – Ersatzteillisten 08_lieferantendoku – Antriebe, Elektrik, Pneumatik, Stahlbau, Sicherheitseinr. 09_technische_unterlagen – Layouts, Schaltpläne, Notstopp, Bereichsstopp 10_anhang – Prüfberichte, Abnahmeprotokolle ``` Details siehe `doc/kapitelstruktur.md`. ### Sphinx-Extensions (zu implementieren in `_ext/`) - **anlagen_builder.py**: JSON + meta.yaml → toctree-Einträge, Abhängigkeitsauflösung (topologisch), Override-Logik - **localized_figure.py**: Direktive `.. localized-figure::` – Bildpfad nach Sprache auflösen, Fallback `de` - **glossary_loader.py**: CSV → `.. glossary::` Blöcke, ermöglicht `:term:` Verlinkung ### Hilfsskripte (zu implementieren in `scripts/`) - `dxf2svg.py` – DXF → SVG (ezdxf) - `optimize_images.py` – Bildoptimierung (Pillow, max 2000px, 85% JPG) - `validate_modules.py` – meta.yaml-Konsistenzprüfung ## Coding-Konventionen - Python: Type Hints, Docstrings, pyright-kompatibel - rST: Eine Datei pro Section, Dateiname = Section-Slug - YAML: 2 Spaces Einrückung, keine Tabs - Commits: Conventional Commits (`feat:`, `fix:`, `docs:`) - Bilder: Dateinamen lowercase, Underscores, beschreibend (`weiche_typ_a_foto_01.jpg`)