Files
dxfmakros/cfg/sivas_merkmal_zuordnung.md
T
y.wang 4ce2a02205 feat: Sivas-Merkmale 4427-4432 (AS-/ES-Element) im Export befuellen
Die Streckenbloecke GF_N und VF_N tragen Winkel und Seite ihres AS-/ES-
Elements bereits als Attribute des gemeinsamen Schemas (WINKEL_AS/SEITE_AS/
WINKEL_ES/SEITE_ES, *strecke-attr-front* in ssg_core.lsp). Diese Information
landet jetzt auch im details-JSON des Sivas-Exports.

Zuordnung (Sivas-Hierarchie: 4431/4432 schalten Winkel und Seite frei):
  4431/4432  AS-/ES-Element vorhanden   Ja/Nein
  4427/4429  Winkel                     "30 °"/"90 °"
  4428/4430  Seite                      links/rechts

Die Zuordnung steht vollstaendig in cfg/sivas.cfg - mit denselben sechs
Zeilen in [gefaellestrecke] und [variofoerderer], jeweils direkt hinter 2950,
was auch die Reihenfolge im details-JSON bestimmt.

Ob ein Element vorhanden ist, entscheidet ausschliesslich WINKEL_AS/WINKEL_ES:
das Schema laesst den Winkel leer, wenn keines gewaehlt wurde, waehrend
SEITE_AS/SEITE_ES mit "rechts" immer einen Vorgabewert tragen. Ohne Element
bleiben Winkel UND Seite leer, damit in Sivas keine Seite unter einem
"Nein"-Knoten haengt.

Weitere Punkte:
- sivas_mapping: neuer Dekorator @braucht_attribs. Ein so markierter
  Transform wird als fn(wert, attribs) statt fn(wert) aufgerufen und sieht
  damit die uebrigen Attribute des Blocks - noetig, weil die Seite vom
  Winkel abhaengt. Ohne diese Klammer muessten bedingte Merkmale wieder als
  Python-Code aus der Config herauswandern.
- Die Winkel-Schreibweise der Sivas-Auswahlliste ("30 °" mit Leerzeichen vor
  dem Gradzeichen) steht als Tabelle [as_es_winkel_anzeige] in sivas.cfg,
  Bauart wie [geruest_typ_anzeige] - weicht Sivas davon ab, ist das die
  einzige Stelle zum Nachziehen.
- gefaellestrecke_signature beruecksichtigt AS/ES: zwei sonst baugleiche
  Gefaellestrecken mit AS links bzw. rechts bleiben getrennte Zeilen, sonst
  zeigte die gemeinsame Zeile nur die Seite des ersten Blocks.
- Altbestand ohne diese Attribute meldet "Nein" statt abzubrechen.
- Merkmalsstamm_in_Sivas.xlsx auf den aktuellen Sivas-Stand gebracht
  (enthaelt neben 4427-4432 auch 4002, 7010-7013 und Klartext-Korrekturen;
  4339/4383 heissen jetzt eindeutig "... Gefaellestrecke"/"... Variofoerderer").
- 12 neue Tests in tests/test_export_sivas_as_es.py, ohne BricsCAD lauffaehig.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-21 12:55:01 +02:00

15 KiB

Sivas-Merkmal-Zuordnung (export_sivas.py)

Diese Datei dokumentiert, welches Block-Attribut in export_raw.json welche Sivas-Merkmalnummer im details-JSON von export_sivas.py befuellt (Spalte Nr;TeileArt;SivasNummer;Bezeichnung;Dispogruppe;Anzahl;Laenge[mm];IDs;details). Bezeichnungen stammen aus cfg/Merkmalsstamm_in_Sivas.xlsx. Einzige Quelle der Wahrheit ist der Code in lib/export_sivas.py - diese Datei ist ein Backup/Nachschlagewerk, bei Aenderungen am Code bitte hier nachziehen.

Stand: abgeglichen mit lib/export_sivas.py nach der Umstellung von beschreibenden JSON-Keys auf reine Merkmalnummern (Sept. 2026), ergaenzt um die AS-/ES-Element-Merkmale 4427-4432 (Okt. 2026).

ILS 2.0 Kreisel (SivasNr 6200, Dispogruppe 20)

Gruppierung: gleiche Kreiselart+Abstand+Separatoren/Scanner/Rampen+Geruest werden zu EINER Zeile zusammengefasst (kreisel_signature). Die Anzahl-Spalte traegt die reale Stueckzahl der Gruppe.

Merkmalnr Bezeichnung (Merkmalstamm) Block-Attribut Berechnung
2952 Kreiselhoehe in Meter MONTAGEHOEHE_m direkt
3510 Kreisel oder Kreisel mit PINBAND oder Verbindungskreisel KREISELART "PIN" -> "Kreisel mit PINBAND", sonst "Kreisel"
3511 Kreisel - zu fertigende Menge - fest "1" (reale Stueckzahl steht in der Anzahl-Spalte der Zeile)
3512 Kreisel - Abstand (Kreiselachse A - Kreiselachse B) in Meter ABSTAND round(ABSTAND/1000, 2)
3515 Kreisel - Anzahl der Separatoren ANZAHL_SEPARATOR (Fallback N_SEPARATOREN) direkt
3517 Kreisel - Anzahl der Scanner ANZAHL_SCANNER (Fallback N_SCANNER) direkt
3519 Kreisel - Anzahl der Rampen ANZAHL_RAMPEN (Fallback N_RAMPEN) direkt
3992 Geruest fuer Einzelmodul GERUEST_EINZELMODUL "1" -> "Ja", sonst "Nein"
3993 Geruestoption fuer Einzelmodul GERUEST_TYP Anzeige-Uebersetzung, siehe GERUEST_TYP_ANZEIGE ("Schoenenberger Geruest" -> "Schoenenberger-Geruest" mit Umlauten)

ILS 2.0 Strecke - Streckengruppe VF_N (SivasNr 6220, Dispogruppe 20)

Je VF_N-Block IMMER eine eigene Zeile (keine Gruppierung), Anzahl-Spalte immer 1. Sivas kennt je Streckengruppe nur EIN Gefaelle-Segment-Paar (001/002) und EIN Vario-Segment (001).

Merkmalnr Bezeichnung (Merkmalstamm) Block-Attribut Berechnung
2950 Anlagenhoehe in Meter MONTAGEHOEHE_m direkt
4300 Streckengruppe - fest "mehrere Objekte"
4311 Strecken- zu fertigende Menge - fest "1"
4312 Streckengruppe - Gefaellestrecke (Segment 001 vorhanden) L_GF_m (1. Wert vorhanden?) "Ja"/"Nein"
4318 Streckengruppe - Gefaellestrecke 001-Laenge in Meter L_GF_m (1. Wert) nur wenn Segment 1 existiert
4391 Streckengruppe - Gefaellestrecke 001 -Winkel GF_WINKEL (1. Wert) int(...), nur wenn Segment 1 existiert
4314 Streckengruppe - Gefaellestrecke 002 (Segment vorhanden) L_GF_m (2. Wert vorhanden?) "Ja"/"Nein"
4319 Streckengruppe - Gefaellestrecke 002-Laenge in Meter L_GF_m (2. Wert) nur wenn Segment 2 existiert
4392 Streckengruppe - Gefaellestrecke 002- Winkel GF_WINKEL (2. Wert) int(...), nur wenn Segment 2 existiert
4329-4334 ...Kurven Gefaellestrecke links/rechts 90/60/30 Grad GF_Bogen_L_90/60/30, GF_Bogen_R_90/60/30 direkt
4337 Streckengruppe - Anzahl der Separatoren - Gefaellestrecke - Platzhalter, fest "0" (Aufteilung Gefaelle-/Vario-Anteil noch nicht umgesetzt, siehe unten)
4338 Streckengruppe - Bearbeitung Gefaellestreckenteilstueck fuer Separator (829516050) - fest SEPARATOR_BEARBEITUNG_ANZEIGE = "ohne HARTCOAT HRC 50 +/- 5"
4339 Streckengruppe - Anzahl der Scanner (Gefaelle-Anteil) - Platzhalter, fest "0"
4340 Streckengruppe - Variofoerderer (vorhanden) L_VF_m (vorhanden?) "Ja"/"Nein"
4341 ...Anzahl der Motoren fuer Vario-Foerderer (links) MOTORSEITE Anzahl Eintraege == "links"
4342 ...Anzahl der Motoren fuer Vario-Foerderer (rechts) MOTORSEITE Anzahl Eintraege == "rechts"
4353 Streckengruppe - Variofoerderer 001-Laenge in Meter L_VF_m (1. Wert) nur wenn Vario-Segment existiert
4354 Streckengruppe - Variofoerderer 001-Richtung ANTRIEBFAHRTRICHTUNG (1. Wert) kleingeschrieben ("Auf" -> "auf")
4386 Streckengruppe - Variofoerderer 001- Winkel VF_WINKEL (1. Wert) int(...)
4373-4378 ...Kurven Variofoerderer Aussen-/Innenbogen 90/60/30 Grad VF_Bogen_A_90/60/30, VF_Bogen_I_90/60/30 direkt
4381 Streckengruppe - Anzahl der Separatoren - Variofoerderer ANZAHL_SEPARATOR voller Blockwert (Aufteilung noch offen, siehe 4337)
4382 (dieselbe Bezeichnung wie 4338 im Merkmalstamm) - fest SEPARATOR_BEARBEITUNG_ANZEIGE
4383 Streckengruppe - Anzahl der Scanner (Vario-Anteil) ANZAHL_SCANNER voller Blockwert
4427-4432 AS-/ES-Element (vorhanden/Winkel/Seite) WINKEL_AS/SEITE_AS/WINKEL_ES/SEITE_ES siehe eigener Abschnitt unten
3992 Geruest fuer Einzelmodul GERUEST_EINZELMODUL wie Kreisel
3993 Geruestoption fuer Einzelmodul GERUEST_TYP wie Kreisel

Offener Punkt: 4337/4339 (Gefaelle-Anteil) stehen fest auf "0", 4381/4383 (Vario-Anteil) tragen den KOMPLETTEN ANZAHL_SEPARATOR/ANZAHL_SCANNER-Wert des Blocks. Die korrekte Aufteilung auf beide Streckenabschnitte folgt erst, wenn die Separator-/Scanner-Zuordnung im Zeichnungsmodell selbst ueberarbeitet ist (siehe build_variofoerderer_details in export_sivas.py).

ILS 2.0 Gefaellestrecke - eigenstaendige GF_N-Gruppe (SivasNr 6220, Dispogruppe 20)

Gruppierung: gleiche Masse (Hoehe/Laenge/Winkel/Separatoren/Scanner/Typ/ Geruest) werden zu EINER Zeile zusammengefasst (gefaellestrecke_signature). ANDERS ALS BEI KREISEL bleibt die Anzahl-Spalte fest auf 1 - die reale Stueckzahl der Gruppe steht im Merkmal 4311.

Merkmalnr Bezeichnung (Merkmalstamm) Block-Attribut Berechnung
2950 Anlagenhoehe in Meter MONTAGEHOEHE_m direkt
4300 Streckengruppe TYP "Streckengruppe" -> "mehrere Objekte", sonst ("Gefaellestrecke") -> "ein Objekt"
4384 Gefaellestrecke oder Vario-Foerderer - fest "Gefaellestrecke"
4311 Strecken- zu fertigende Menge - Anzahl der in dieser Zeile gruppierten, baugleichen GF_N-Bloecke (Gegenstueck zur Anzahl-Spalte, die hier fest 1 ist)
4318 Streckengruppe - Gefaellestrecke 001-Laenge in Meter L_GF_m direkt
4391 Streckengruppe - Gefaellestrecke 001 -Winkel GF_WINKEL direkt
4337 Streckengruppe - Anzahl der Separatoren - Gefaellestrecke ANZAHL_SEPARATOR direkt (kein Split noetig, kein Vario-Anteil vorhanden)
4338 Streckengruppe - Bearbeitung Gefaellestreckenteilstueck fuer Separator (829516050) - fest SEPARATOR_BEARBEITUNG_ANZEIGE
4339 Streckengruppe - Anzahl der Scanner ANZAHL_SCANNER direkt
4427-4432 AS-/ES-Element (vorhanden/Winkel/Seite) WINKEL_AS/SEITE_AS/WINKEL_ES/SEITE_ES siehe eigener Abschnitt unten
3992 Geruest fuer Einzelmodul GERUEST_EINZELMODUL wie Kreisel
3993 Geruestoption fuer Einzelmodul GERUEST_TYP wie Kreisel

Die Gruppierung (gefaellestrecke_signature) beruecksichtigt AS-/ES-Element mit: zwei sonst baugleiche Gefaellestrecken mit AS links bzw. AS rechts bleiben getrennte Zeilen, sonst zeigte die gemeinsame Zeile nur die Seite des ersten Blocks.

AS-/ES-Element (4427-4432) - gilt fuer VF_N UND GF_N

Die Zuordnung steht vollstaendig in cfg/sivas.cfg - mit denselben sechs Zeilen in [gefaellestrecke] UND [variofoerderer], weil beide Blockarten dieselben Attribute des gemeinsamen Strecken-Schemas tragen (*strecke-attr-front* in ssg_core.lsp). In export_sivas.py stehen nur die Transform-Funktionen.

Sivas-Hierarchie (Merkmalstamm): 4431/4432 ("Ja"/"Nein") sind die Oberknoten, Winkel und Seite haengen als Unterknoten darunter - darum auch diese Reihenfolge in der Config.

Merkmalnr Bezeichnung (Merkmalstamm) Block-Attribut Transform Berechnung
4431 AS-Element WINKEL_AS as_es_vorhanden "Ja", wenn ein Winkel gesetzt ist, sonst "Nein"
4427 AS-Element - Winkel WINKEL_AS as_es_winkel Optionswert der Auswahlliste ("30" -> "30 °", Tabelle [as_es_winkel_anzeige]); leer, wenn kein AS-Element
4428 AS-Element - Seite SEITE_AS as_seite kleingeschrieben ("links"/"rechts"); leer, wenn kein AS-Element
4432 ES-Element WINKEL_ES as_es_vorhanden wie 4431
4429 ES-Element - Winkel WINKEL_ES as_es_winkel wie 4427
4430 ES-Element - Seite SEITE_ES es_seite wie 4428

Warum der Winkel ueber das Vorhandensein entscheidet und nicht die Seite: das Schema laesst WINKEL_AS/WINKEL_ES leer, wenn kein Element gewaehlt wurde, waehrend SEITE_AS/SEITE_ES mit "rechts" immer einen Vorgabewert tragen. Ohne Element bleiben darum Winkel UND Seite leer - sonst stuende in Sivas eine Seite unter einem "Nein"-Knoten.

Winkel-Schreibweise: die Sivas-Auswahlliste fuehrt "30 °"/"90 °" (mit Leerzeichen vor dem Gradzeichen), das Block-Attribut dagegen die nackte Zahl. Die Uebersetzung steht als Tabelle [as_es_winkel_anzeige] in sivas.cfg (gleiche Bauart wie [geruest_typ_anzeige]) - weicht Sivas davon ab, ist das die einzige Stelle zum Nachziehen. Ein Winkel ohne Eintrag dort wird unveraendert uebernommen.

Neu im Mapping-Mechanismus: 4428/4430 brauchen ein ZWEITES Attribut (die Seite haengt am Winkel). Dafuer gibt es in sivas_mapping.py den Dekorator @braucht_attribs - ein so markierter Transform wird als fn(wert, attribs) statt fn(wert) aufgerufen und sieht damit die uebrigen Attribute des Blocks. Ohne diese Klammer muessten bedingte Merkmale wieder als Python-Code aus der Config herauswandern.

ILS 2.0 Zusatzmodul (SivasNr 6215, Dispogruppe 20)

BTMT-Beladestationen UND Abwurfstationen (Klammerbuegel-Entladung) in EINER Zeile zusammengefasst. Anzahl-Spalte fest 1, Bezeichnung leer, IDs beider Blockarten kombiniert.

Merkmalnr Bezeichnung (Merkmalstamm) Quelle Berechnung
3501 BT - Beladung (mit Vereinzeler, ohne Separator) Vorhandensein von BTMT-Beladung-Bloecken (pattern_btmt_beladung) "Ja", wenn mind. 1 Block, sonst "Nein"
3503 Anzahl der BT - Beladung (mit Vereinzeler, ohne Separator) Anzahl BTMT-Beladung-Bloecke direkt gezaehlt
3502 Abwurf fuer Klammerbuegel Sitzbezuege / Kleiderbuegel Vorhandensein von Abwurf-Bloecken (pattern_btmt_entladung) "Ja", wenn mind. 1 Block, sonst "Nein"
3504 Anzahl der Abwuerfe Anzahl Abwurf-Bloecke direkt gezaehlt

ILS 2.0 Automation und Pneumatik - Gesamtanlage (SivasNr 6269, Dispogruppe 20)

Eine Summenzeile pro Zeichnung, nur wenn mindestens ein ILS-Element (Kreisel/ Eckrad/Variofoerderer/Gefaellestrecke/BTMT) vorhanden ist.

Merkmalnr Bezeichnung (Merkmalstamm) Quelle (counters/process_blocks) Berechnung
4000 Automation - fest "Ja" (Zeile existiert nur bei has_ils)
4400 Anzahl der Kreisel anzahl_kreisel Anzahl aller Kreisel-Bloecke (vor Gruppierung)
4401 Anzahl der Kreisel mit PINBAND anzahl_kreisel_pinband
4402 Anzahl der Verbindungskreisel anzahl_verbindungskreisel aktuell nie befuellt (kein Verbindungskreisel-Typ erkannt)
4403 Anzahl der Weichen anzahl_weichen_ils aktuell nie befuellt (kein ILS-Weichen-Typ erkannt)
4404 Anzahl der Eckraeder anzahl_eckraeder
4407 Anzahl der Streckengruppen len(vario_list) Anzahl VF_N-Compound-Bloecke (TYP "Streckengruppe") - NICHT anzahl_variofoerderer (der zaehlt auch lose Strecke-Module mit)
4408 Anzahl der Motoren in Vario-Foerderer anzahl_motoren_vario Summe ANZAHL_VF ueber alle VF_N-Bloecke
4409 Anzahl der ETFs anzahl_etf aktuell nie befuellt
4410 Anzahl der Separatoren in der Anlage anzahl_separatoren Summe ueber Kreisel+VF_N+GF_N
4411 Anzahl der Scanner in der Anlage anzahl_scanner Summe ueber Kreisel+VF_N+GF_N
4413 Anzahl der Separatoren - Kreisel ohne PINBAND sep_kreisel_ohne_pin
4414 Anzahl der Separatoren - Kreisel mit PINBAND sep_kreisel_pin
4417 Laengen aller ETFS und Zusatzstuecke (Gefaellestrecken) laengen_etf aktuell immer 0.0, NICHT auf 2 Nachkommastellen gerundet
4418 Laengen aller Gefaellestrecken laengen_gefaellestrecken auf 2 Nachkommastellen gerundet (.2f)
4419 Laengen aller Kreisel laengen_kreisel auf 2 Nachkommastellen gerundet (.2f)
4420 Laengen aller Vario-Foerderer laengen_variofoerderer NICHT gerundet (roher str()-Wert)
4421 Zusatzmodul - Anzahl der BT-Beladung anzahl_btbeladung
4422 Zusatzmodul - Anzahl der Abwurfstation anzahl_abwurfstationen
4425 Anzahl der einzelnen Gefaellestrecken anzahl_gefaellestrecken Anzahl aller GF_N-Bloecke (vor Gruppierung)
4426 Anzahl der einzelnen Vario-Foerderer - fest "0" (Konzept "einzelner Variofoerderer" getrennt von "Streckengruppe" gibt es nicht mehr)
4100 Pneumatik - fest "Ja"

Nicht angefasst (ausserhalb dieser Umstellung)

  • ILS 2.0 Eckrad (build_eckrad_details): bleibt beim alten, beschreibenden Key-Format ("Geruest fuer Einzelmodul"/"Geruestoption fuer Einzelmodul") - war nicht Teil der angefragten 5 Teilearten.
  • Geruest-Baugruppen (build_geruest_details, GR_*-Bloecke): eigenes Format ueber ARTINR/BEZEICHNUNG/TEILEART/LAENGE in den festen CSV-Spalten (je Artikelnummer eine Zeile). Siehe eigener Abschnitt unten.

Geruest-Baugruppe (GR_*, je Artikelnummer eine Zeile, Dispogruppe 20)

Merkmalnr Bezeichnung (Merkmalstamm) Block-Attribut Berechnung
108 Farbe TEILEFARBE kommagetrennte Liste parallel zu ARTINR; je Zeile der Eintrag an der Position der Artikelnummer. Leerer Eintrag (Teil ohne "farbig": true in geruest.json) -> Merkmal fehlt. Laenge passt nicht zu ARTINR (Altbestand) -> Warnung, ohne Farbe. Nummer aus cfg/export.cfg [Sivas] merkmal_teilefarbe

Gleiche Artikelnummer mit gleicher Farbe innerhalb eines Blocks -> eine Zeile mit Anzahl > 1.

  • Omniflo Bogen/Weiche/Gerade: details bleibt leer ({}), keine Merkmalnummern-Zuordnung noetig.

Bekannte offene Punkte

  1. 4337/4339 vs. 4381/4383 (Streckengruppe VF_N): Aufteilung der Separatoren/Scanner auf Gefaelle- und Vario-Anteil ist ein Platzhalter (siehe oben) - folgt nach der Neuzuordnung von Separator/Scanner zum jeweiligen Streckenabschnitt im Zeichnungsmodell.
  2. Zeichnungsseitige Datenpflege (kein Code-Thema): GERUEST_EINZELMODUL muss am jeweiligen Block korrekt gesetzt sein (Dialog-Haekchen beim Einfuegen) - der Export uebernimmt das Attribut unveraendert 1:1.