Fundament des VDA-ISA-2027-Richtlinienmoduls (Spec §1–9):
- Datenmodell: PolicyDocument, PolicyRequirement, PolicyVariable (Variablen +
Feature-Flags), PolicyBaselineParam, PolicyEvidence — inkl. RLS + Tenant-Guard
- Seed-Importer (import-policies.ts): liest die echten .md-Dateien (15 Richtlinien
L00/R01–R14 + 11 Verfahren), mapping.json (120 Anforderungen/46 Controls),
variables.schema.json (53 Variablen/Flags), Technische-Sicherheits-Baseline
(31 BL-Parameter) und Nachweisregister; idempotent pro Mandant
- 6 im Vorlagenpaket beschädigte Variablen-Tokens (VA-08/09/10/12/13) repariert
(dokumentiert im README des Übergabepakets)
- Rendering-Engine (policy-render.ts, Handlebars + marked): verschachtelte
{{#if FLAG}}, {{VARIABLE}}, {{LINK:…}}-Deeplinks, Hidden-Anker + BL-Referenzen
im Lesemodus entfernt (Wert bleibt), zentral verwaltete Abschnitte unterdrückt,
wiederholtes „Umsetzung bei <Org>" reduziert (§7a); lenienter Fallback +
Residue-Check über alle Flag-Kombinationen (analog _verify.py)
- UI: Bibliothek mit Typ-Chips/KPIs, Lesemodus-Popup (einklappbare Info-Tabelle,
Control-Chips, Richtlinie↔Verfahren-Verlinkung), Coverage-Matrix
(Control → Richtlinie → MUSS/SOLL → Verfahren → Anforderungs-IDs)
- Nav-Punkt „Richtlinien" aktiviert; de/en-Übersetzungen
Verifiziert: Import 28 Dokumente/120 Anforderungen; Rendering rückstandsfrei
über alle Flag-Kombinationen; Bibliothek, Lesemodus (R08 nested flags), Coverage
im Browser.
Später (Phase 2+): Bearbeiten/Freigabe-Workflow mit Versionierung, verwaltete
Tabellen (Krypto-/Risiko-/Klassifizierungsregister), Anwender-Handbuch,
DOCX/PDF-Export, Word-Upload, KI-Wizard, zentrale Baseline-/Variablen-Einstellseite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
22 lines
750 B
Python
22 lines
750 B
Python
# -*- coding: utf-8 -*-
|
|
import json, re, os
|
|
BASE=os.path.dirname(__file__)
|
|
mp=os.path.join(BASE,"mapping.json")
|
|
d=json.load(open(mp,encoding="utf-8"))
|
|
|
|
def clean(s):
|
|
# entferne Handlebars-Conditional-Wrapper, behalte Innentext
|
|
s=re.sub(r"\{\{#if \w+\}\}","",s)
|
|
s=re.sub(r"\{\{/if\}\}","",s)
|
|
s=re.sub(r"\s+"," ",s).strip()
|
|
s=s.replace(" .",".").replace(" ,",",")
|
|
return s
|
|
|
|
for a in d["anforderungen"]:
|
|
a["requirement"]=clean(a["requirement"])
|
|
a["implementation"]=clean(a["implementation"])
|
|
if a["policy"]=="L00":
|
|
a["impl_anchor"]=a["req_anchor"] # Leitlinie: kombiniert
|
|
json.dump(d,open(mp,"w",encoding="utf-8"),ensure_ascii=False,indent=1)
|
|
print("mapping bereinigt:",len(d["anforderungen"]),"Eintraege")
|