Files
Michael StanglandClaude Sonnet 5 e8c5cd0a63 Testrun-Export nach tests/output umbiegen, Sivas-Bezeichner-Datei optional, Sivas-Merkmalzuordnung in Config
SSG_RUN_ALL_TESTS_EXPORT setzte *export-test-override* nicht, dadurch
landeten CSV/Sivas-Exporte trotz Automatik-Modus in DXFM_RESULTS statt in
tests/output wie die DXF/DWG-Dateien selbst - jetzt analog zu
TEST_EXPORT_ALL behoben.

EXPORTSIVAS schrieb bisher immer zusaetzlich eine "_mit_bezeichnung.csv"
(Klartext-Kopie). Neuer Schalter "Sivas Export mit Bezeichner" im Dialog
CSV_EXPORT_KONFIG (Standard aus) macht das optional.

Die Attribut->Sivas-Merkmal-Zuordnung der build_*_details-Funktionen in
export_sivas.py (Gefaellestrecke/Kreisel/Eckrad/Geruest/VarioFoerderer,
soweit nicht von der Segmentanzahl abhaengig) liegt jetzt deklarativ in
cfg/sivas.cfg statt hartcodiert im Python - neuer Loader
lib/sivas_mapping.py. Ablauflogik (Gruppierung, Automation-Summenzeile,
Segment-Zaehlung) bleibt Code. Gegen den alten Code mit synthetischen
Testblöcken verifiziert: identische Ausgabe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 16:39:18 +02:00

107 lines
4.8 KiB
INI

# ============================================================
# sivas.cfg - Attribut->Sivas-Merkmal-Zuordnung fuer lib/export_sivas.py
#
# Deckt NUR die "einfachen" Faelle ab: eine Sivas-Merkmalnummer entspricht
# genau einem (ggf. per Fallback alternativen) Block-Attribut, optional mit
# festem Default und/oder einer benannten Transform-Funktion. Berechnete
# Werte, die von der Anzahl vorhandener Segmente abhaengen oder mehrere
# Attribute kombinieren (VarioFoerderer-Gefaelle-/Vario-Segmentpaare 4312-
# 4392/4353-4386, die ILS-Automation-Summenzeile) bleiben bewusst Python-Code
# in export_sivas.py - ein flaches Attribut-Mapping kann bedingte/berechnete
# Werte nicht abbilden.
#
# Format je Zeile (Abschnitt = Elementtyp, Key = Sivas-Merkmalnummer):
# merkmal = attribut
# merkmal = attribut : default
# merkmal = attribut | alt_attribut : default
# merkmal = attribut : default | transform
#
# attribut - Name des Block-Attributs (ssg-attrib-*, siehe jeweiliges
# .lsp-Modul). Fehlt es in der Zeichnung, greift default.
# | alt_attribut - optionaler Fallback-Attributname (aeltere Zeichnungen mit
# abweichendem Attributnamen, z.B. N_SEPARATOREN vor der
# Umbenennung zu ANZAHL_SEPARATOR). Wird nur genutzt, wenn
# attribut selbst fehlt.
# : default - Vorgabewert, falls weder attribut noch alt_attribut in
# der Zeichnung gesetzt sind. Fehlt ":", ist default "".
# | transform - Name einer Python-Funktion in export_sivas.py
# (TRANSFORMS-Dict), die den ermittelten Rohwert
# (Attribut- oder Default-Wert) in die Sivas-Anzeige
# umwandelt (z.B. "0"/"1" -> "Ja"/"Nein"). Bekannte Namen:
# ja_nein, geruest_typ_anzeige. Ein unbekannter Name
# bricht NICHT ab, der Rohwert wird unveraendert
# uebernommen (siehe sivas_mapping.anwenden).
#
# Abschnittsnamen entsprechen den bisherigen build_*_details-Funktionen in
# export_sivas.py: [gefaellestrecke], [kreisel], [eckrad], [geruest]. Die
# geruest-typ-Anzeige-Tabelle (ASCII-Attributwert -> Sivas-Klartext mit
# Umlauten) UND SEPARATOR_BEARBEITUNG_ANZEIGE bleiben eigene, kleine
# Abschnitte weiter unten.
# ============================================================
[gefaellestrecke]
2950= MONTAGEHOEHE_m : 0
4384= : Gefällestrecke
4318= L_GF_m
4391= GF_WINKEL
4337= ANZAHL_SEPARATOR : 0
4338= : ohne HARTCOAT HRC 50 ± 5
4339= ANZAHL_SCANNER : 0
3992= GERUEST_EINZELMODUL : 0 | ja_nein
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
# 4300 (Streckengruppe "ein Objekt"/"mehrere Objekte") und 4311 (Anzahl der
# gruppierten Bloecke) bleiben Code (streckengruppe_objekt_text, anzahl-Param.).
[kreisel]
2952= MONTAGEHOEHE_m : 0
3511= : 1
3515= ANZAHL_SEPARATOR | N_SEPARATOREN : 2
3517= ANZAHL_SCANNER | N_SCANNER : 0
3519= ANZAHL_RAMPEN | N_RAMPEN : 0
3992= GERUEST_EINZELMODUL : 0 | ja_nein
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
# 3510 (Kreiselart-Anzeigetext) und 3512 (Abstand in m, gerundet) bleiben
# Code (bedingte Umbenennung bzw. Umrechnung mm->m).
[eckrad]
# Bewusst (noch) beschreibende Klartext-Keys statt Merkmalnummern (kein
# bekanntes Sivas-Merkmal fuer Eckrad-Geruest hinterlegt) - details_mit_
# bezeichnung() in export_sivas.py laesst nicht-numerische Keys unveraendert.
# "ist_eins" liefert ein ECHTES bool (True/False), NICHT "Ja"/"Nein" wie
# ja_nein bei Kreisel/Gefaellestrecke - json.dumps schreibt dann true/false
# ohne Anfuehrungszeichen (bisheriges Verhalten von build_eckrad_details).
Geruest fuer Einzelmodul= GERUEST_EINZELMODUL : 0 | ist_eins
Geruestoption fuer Einzelmodul= GERUEST_TYP : Schoenenberger Geruest
[geruest]
Farbe= FARBE
[variofoerderer]
# Nur die von der Segmentanzahl UNABHAENGIGEN Top-Level-Felder einer VF_N-
# Streckengruppe (siehe build_variofoerderer_details in export_sivas.py).
# Die Gefaelle-/Vario-Segmentpaare (4312-4392, 4353/4354/4386) haengen an der
# Listenlaenge von L_GF_m/L_VF_m und bleiben Code.
2950= MONTAGEHOEHE_m : 0
4329= GF_Bogen_L_90 : 0
4330= GF_Bogen_L_60 : 0
4331= GF_Bogen_L_30 : 0
4332= GF_Bogen_R_90 : 0
4333= GF_Bogen_R_60 : 0
4334= GF_Bogen_R_30 : 0
4373= VF_Bogen_A_90 : 0
4374= VF_Bogen_A_60 : 0
4375= VF_Bogen_A_30 : 0
4376= VF_Bogen_I_90 : 0
4377= VF_Bogen_I_60 : 0
4378= VF_Bogen_I_30 : 0
4381= ANZAHL_SEPARATOR : 0
4382= : ohne HARTCOAT HRC 50 ± 5
4383= ANZAHL_SCANNER : 0
3992= GERUEST_EINZELMODUL : 0 | ja_nein
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
[geruest_typ_anzeige]
# ASCII-Attributwert (GERUEST_TYP) -> Sivas-Klartext mit Umlauten/Sonder-
# zeichen (Attribute selbst bleiben ASCII, siehe CLAUDE.md-Konvention).
Schoenenberger Geruest= Schönenberger-Gerüst