Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9.1 KiB
Kickoff-Prompt — B1: Assessment und Readiness für zwei Frameworks
Du baust die Bewertungs- und Readiness-Schicht für ISO 27001 neben TISAX. Alles andere steht bereits: Der Dokumentensatz trägt beide Normen, mapping-iso.json liefert 120 ISO-Anforderungen, die Framework-Dimension im Datenmodell ist gebaut (AP1–AP5), ein ISO-Mandant hat SoA, Kennzahlen, Managementbewertung und Korrekturmaßnahmen.
Was fehlt: maturity.ts, scope-filter.ts, assessment-level.ts und readiness.ts kennen kein Framework und rechnen durchgängig VDA ISA — AL2/AL3, Prüfziele, Reifegrad 0–3, MUSS/SOLL. Der belegte Bruch: src/server/soa-context.ts:151 und src/server/export-context.ts:49 lesen controlAssessment; keine einzige Stelle liest soaEntry. Das SoA-Modul ist von der Auswertung abgekoppelt.
Pflichtlektüre vor der ersten Zeile Code: docs/FEINDESIGN-framework-assessment.md — vollständig, insbesondere §1 (Leitentscheidung) und §7a (Priorisierung). Hintergrund: docs/FRAMEWORK-MAPPING-ISO27001.md, docs/UEBERGABE-framework-iso27001.md.
Repo & Branch
- origin:
git.certvia.de/msolarczek/certvia; zweiter Remotelocal-gitea. - Basis ist
feature/iso27001-framework-mapping, nichtdev. - Arbeite auf
feature/framework-assessment, PR gegen den Basis-Branch.
Kundenlage — sie bestimmt, was jetzt gebaut wird
Die Mehrzahl der Mandanten führt TISAX, ein Mandant ISO, keiner beide.
Daraus folgt: Das Regressionsrisiko dominiert dieses Paket. Der gefährlichste Teil ist nicht die ISO-Logik — die ist schlank — sondern die verhaltensgleiche Extraktion der bestehenden TISAX-Logik. Sie betrifft jeden Bestandsmandanten. Schritt 1 ist deshalb keine Kür.
Zurückgestellt (betrifft ausschließlich den Doppel-Mandanten, den es heute nicht gibt):
- Vorbelegung über
ISO_TO_ISA(Übernahmevorschlag zwischen den Frameworks) - Reiter-UI in
/soaund/audit-readiness— bei einem aktiven Framework wird direkt angezeigt
Nicht zurückstellen: die Strategie-Schnittstelle und den Framework-Parameter in buildAssessment. Beides kostet jetzt fast nichts und ist später teuer, weil sonst sieben Aufrufstellen erneut angefasst werden. Die Architektur bleibt zweigleisig, die Oberfläche zeigt vorerst ein Gleis.
Die eine Leitentscheidung
Die Belegbasis liegt unterhalb der Framework-Strategie. Ob R08 freigegeben ist, ist eine Tatsache über die Organisation, keine Frage der Norm. ControlEvidence (src/lib/maturity.ts:54) wird geteilt; nur Scope, Zielwert, Bewertung und Vokabular sind framework-eigen.
Schicht 3 Sichten /soa · /audit-readiness · Exporte → je Framework (Reiter später)
Schicht 2 Strategie Scope · Zielwert · Bewertung → je Framework
Schicht 1 Belegbasis loadEvidenceResolver → ControlEvidence → GETEILT
Schicht 0 Fachdaten PolicyDocument · Evidence · Asset … → GETEILT
Review-Kriterium, hart: loadEvidenceResolver darf FrameworkKey nicht kennen. Sobald die Belegauflösung anfängt, das Framework zu fragen, ist der Schnitt gerissen und wir bekommen zwei Bewertungen derselben Realität, die auseinanderlaufen.
Nicht anfassen
seed/isms-vorlagenpaket-v2/**und-en/**— generiert. Änderungen nur über_iso_crosswalk.json/_iso_sections.json/_iso_texts_en.json+python3 _generate_iso.py [--lang en].- Die VDA-ISA-Fachlogik inhaltlich —
suggestMaturity,targetMaturity,openPoints,activeRequirementswerden verschoben, nicht verändert. readiness.tsundgap-consolidation.ts— numerisch standard-agnostisch, werden von beiden Strategien gefüttert.
Arbeitsschritte
1 — Snapshot der heutigen TISAX-Ausgabe (zuerst, vor jeder Änderung)
buildControlRows für den Demo-Mandanten festhalten: Reifegradvorschlag, Zielwert, Belegstatus und offene Punkte je Control, als JSON im Repo. Ablage als scripts/test-framework-assessment.ts in der Hausform der übrigen test-*.ts.
DoD: Test läuft grün gegen den unveränderten Stand und ist als Merge-Gate gesetzt.
2 — ControlSpec einführen
C5ControlSpec (src/lib/maturity.ts:16) auf ein neutrales ControlSpec reduzieren (control, title, policy[], verfahren[], needsAsset, needsRisk); C5ControlSpec erweitert es um target. loadEvidenceResolver (src/server/soa-context.ts:50) nimmt künftig ControlSpec.
DoD: Snapshot unverändert grün, tsc sauber.
3 — ISO-Specs generieren
_generate_iso.py erzeugt zusätzlich src/lib/control-specs-iso.ts — analog zu control-titles-iso.ts und iso-isa-crosswalk.ts. Quelle ist mapping-iso.json (policy und verfahren stehen dort je Anforderung); needsAsset/needsRisk über ISO_TO_ISA vom ISA-Spec erben, für die 33 ISO-eigenen Abschnitte explizit setzen — sinnvoll nur bei A.5.9 (needsAsset) sowie 6.1.2/6.1.3/8.2/8.3 (needsRisk).
DoD: Generator idempotent, _verify_iso.py DE und EN grün, keine handgepflegte Zweitliste.
4 — FrameworkStrategy + TisaxStrategy (reine Extraktion)
Interface nach §3 des Feindesigns. TisaxStrategy verdrahtet die vorhandenen Funktionen um: loadScopeInput + controlsInScope → controlsInScope, suggestMaturity + targetMaturity → evaluate, openPoints → gaps, computeReadiness → summarise.
DoD: Snapshot bitgenau grün. Jede Abweichung ist eine Regression, kein „ist besser geworden".
5 — IsoStrategy
| Aspekt | Regel |
|---|---|
| Scope | SoaEntry.applicable = true; Klauseln 4–10 immer im Scope |
| Zielwert | implementationStatus = "umgesetzt", keine Stufung |
| Vorschlag | Richtlinie und Verfahren validiert + geforderte Verknüpfungen → umgesetzt; teilweise → teilweise; sonst geplant |
| Bestätigung | SoaEntry.implementationStatus; der Vorschlag überschreibt ihn nie |
| Lücken | fehlende Begründung, fehlender Nachweis, Status ≠ „umgesetzt" bei anwendbarem Control |
DoD: ISO-Mandant bekommt eine Bewertung über alle anwendbaren Controls; leere SoA meldet „Anwendbarkeit noch nicht erklärt" statt 0 %.
6 — buildAssessment(db, tenantId, framework)
Ersetzt buildControlRows (src/server/soa-context.ts:146) und delegiert an die Strategie. Sieben Dateien rufen es direkt; insgesamt hängen 13 an der Assessment-Logik.
DoD: Alle Aufrufstellen umgestellt, Snapshot grün, tsc/lint/build grün.
7 — ISO-Readiness-Bänder und Beschriftung
REIFEGRAD_BANDS (src/lib/readiness.ts:16) ist TISAX-Sprache („Assessment-reif", „AL-Ziel"). ISO bekommt eigene Bänder auf Basis des Umsetzungsgrads: < 50 % Aufbau · 50–79 % In Umsetzung · 80–99 % Zertifizierungsnah · 100 % Zertifizierungsreif.
DoD: In der ISO-Sicht erscheint kein AL-, Prüfziel- oder Reifegradbegriff. Ein ISO-Bericht argumentiert mit „umgesetzt, hier ist der Beleg", nicht mit „Reifegrad 2,4".
8 — ISO-Exporte
SoA-Export und Annex-A-Gap-Report. Der VDA-ISA-Export bleibt TISAX-only und unverändert. DoD: Der ISO-Mandant kann die Eingaben für seine Managementbewertung aus dem Tool ziehen.
Zusatznutzen, bitte mitnehmen: Die 33 ISO-Anforderungen ohne ISA-Gegenstück als eigene Liste ausweisbar machen. Das ist genau die Delta-Arbeit, die ISO gegenüber TISAX zusätzlich verlangt — die erste Frage jedes TISAX-Kunden, der über ISO nachdenkt.
Validierungs-Gate vor jedem PR
npx tsc --noEmit && npm run lint && npm run build
npx tsx scripts/test-framework-assessment.ts # Snapshot TISAX → 0 Abweichungen
npx tsx scripts/test-framework-dryrun.ts # Paket + Import → alle Prüfungen bestanden
cd seed/isms-vorlagenpaket-v2
python3 _generate_iso.py && python3 _generate_iso.py --lang en # beide idempotent
python3 _verify.py && python3 _verify_iso.py && python3 _verify_iso.py --lang en
python3 _render_diff.py HEAD # TISAX-Renderdiff → 0 Abweichungen
Weitere Konventionen: Migrationsflow Prisma 7 mit manuell angehängtem RLS-DO-Block (docs/HANDOVER-DEV.md:100); neue mandantengebundene Modelle in TENANT_MODELS (src/server/db.ts:81) und RLS-Policy in der Migration; jede neue Datei unter src/server/actions/ in scripts/check-module-guards.ts eintragen, sonst schlägt der Build fehl.
Definition of Done (gesamt)
| Prüfung | Erwartung |
|---|---|
| Snapshot TISAX | 0 Abweichungen zur Ausgabe vor dem Umbau |
| Bestandsmandant (TISAX) | Verhalten und Beschriftung unverändert |
| ISO-Mandant | Readiness und SoA rechnen; kein TISAX-Vokabular in der Oberfläche |
| Architektur | Strategie-Schnittstelle und Framework-Parameter vorhanden, auch wenn die UI nur ein Gleis zeigt |
| Belegbasis | loadEvidenceResolver kennt FrameworkKey nicht |
| Kennzahlen | je Framework eine eigene, keine gemischte Gesamtzahl |
| Gate | alle Prüfungen oben grün |
Aufwand
4–6 PT im vorgezogenen Umfang. Schritte 1–4 hängen aneinander und sind Pflicht; 5–8 sind danach teilbar. Schwerpunkt liegt auf Schritt 4, nicht auf der ISO-Logik.
Nicht dein Scope
Vorbelegung zwischen den Frameworks und die Reiter-UI (siehe Kundenlage). Ebenso Paket- und Freigabearbeit: REVIEW_CYCLE-Split an 32 Bestandsstellen, ISB-Freigabe der 19 ISO-Abschnittstexte, Review des Crosswalks.