validate_anlage, stabiler TRO-Schluessel, Verbindungen aus BricsCAD, Zeichnung aus der Anlagen-JSON

- validate_anlage.py (+ bin-Wrapper): Pruefung vor der SCL fuer beide Wege
  (Struktur, Zuordnungen, Aktualitaet der JSON, Korrekturen ohne Ziel);
  scl_skeleton ruft sie auf (Warnung, --strict bricht ab)
- DerivedTro.key: stabiler Schluessel (ID der ID-Datei); hw_overrides.ini,
  <csv>_jam_names.ini und tro_overrides.ini greifen ueber ID oder Schluessel,
  eine Umbenennung in TRO_EDIT laesst sie bestehen; JAM_AREA traegt KEY
- --read-tros liest die CONNECTION_ARROW-Bloecke mit -> [<csv>.edit_connections];
  tro_flow.apply_connection_edits wendet sie nach link_tros an
- tro_annotate --anlage zeichnet Marker/Verbindungen aus der Anlagen-JSON
- INI-Korrekturen auch mit BOM lesbar (utf-8-sig)
- Ablauf CSV/DXF+TIA -> Anlagen-JSON -> (BricsCAD) -> SCL in doc/Python_Scripts.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-27 14:32:10 +01:00
parent 6c8c235287
commit 1ac17b95e2
13 changed files with 1100 additions and 48 deletions
+17
View File
@@ -59,6 +59,7 @@ from pydantic import BaseModel, ValidationError
from e_planning import EPLAN_SCHEMA, EplanDocument
from hw_import import HardwareDocument
from validate_anlage import validate
from material_flow import env_dir
from model import ANLAGE_SCHEMA, SCHEMA, AnlageDocument, TroDocument
from scl_context import (
@@ -441,6 +442,20 @@ def main(argv: list[str] | None = None) -> int:
print(f"FEHLER: {json_file} enthaelt keine TROs.", file=sys.stderr)
return 1
# Pruefung vor der SCL (validate_anlage): Fehler brechen nur mit --strict
# ab, sonst stehen sie als Warnung im Bericht.
pruefung = validate(json_file, hw_file=_in_results(args.hw, results) if args.hw else None,
results=json_file.parent)
for befund in pruefung.befunde:
if befund.stufe == "FEHLER" or args.strict:
print(f"{'FEHLER' if args.strict else 'WARNUNG'}: {befund.bereich}: {befund.text}",
file=sys.stderr)
if args.strict and not pruefung.bereit():
print(f" (--strict) {pruefung.anzahl_fehler} Fehler in der Pruefung - keine "
f"SCL geschrieben (Details: bin/validate_anlage --json {json_file.name}).",
file=sys.stderr)
return 1
templates = None
if args.templates is not None:
ordner = Path(args.templates)
@@ -550,6 +565,8 @@ def main(argv: list[str] | None = None) -> int:
print(f"Gegenpruefung = {len(unbekannt)} unbekannte Namen ({hw_file.name})")
if jam_overrides:
print(f"Staubereiche = {len(jam_overrides)} Korrekturen aus {jam_file}")
print(f"Pruefung = {pruefung.anzahl_fehler} Fehler, {pruefung.anzahl_warnungen} "
f"Warnungen (validate_anlage)")
print(f"Offene Stellen = {offen} (Marker '{TODO}')")
print(f"SCL = {out_file}")
print("================================================================")