Files
arch-repo/src/lib/artefact.ts
u80864958 6884eee8c0
All checks were successful
Release / publish (push) Successful in 1m27s
feat: dependencies
2025-10-21 11:33:27 +02:00

776 lines
27 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { v4 as uuidv4 } from 'uuid';
import { parse } from 'node-html-parser';
export enum Status {
Fehlt = 'Fehlt',
InBearbeitung = 'In Bearbeitung',
Erledigt = 'Erledigt',
Geprueft = 'Geprüft'
}
// Optional: recreate the array from the enum
export const statusValues: { value: string; name: string }[] = Object.values(Status).map(
(value) => ({
value,
name: value
})
);
export interface Artefact {
uuid: string;
tags: string[];
views: string[];
title: string;
description: string;
content: string; // link to document
status: Status;
dependencies: string[];
}
function parseArtefactsFromTable(html: string): Artefact[] {
const root = parse(html);
const rows = root.querySelectorAll('tbody tr');
// Skip header row
const dataRows = rows.slice(1);
let artefacts: Artefact[] = dataRows.map((row) => {
const cells = row.querySelectorAll('td').map((td) => td.text.trim());
return {
uuid: uuidv4(),
title: cells[0], // "Was"
tags: [
...cells[5]
.split(',')
.filter((p) => p.trim().length > 0)
.map((t) => 'LAYER:' + t.trim()),
...cells[6]
.split(',')
.filter((p) => p.trim().length > 0)
.map((t) => 'TYP:' + t.trim()),
...cells[7]
.split(',')
.filter((p) => p.trim().length > 0)
.map((t) => 'HERMES:' + t.trim()),
...cells[8]
.split(',')
.filter((p) => p.trim().length > 0)
.map((t) => t.trim())
], // "Typische Formate"
description: cells[2], // "Sinn und Zweck"
views: cells[4] !== '' ? cells[4].split(',').map((view) => view.trim()) : ['Undefined'], // "Typische Referenzen"
content: '', // no direct link provided in table
dependencies: [],
status: Status.Fehlt // default value
};
});
dataRows.forEach((row) => {
const rows = row.querySelectorAll('td').map((td) => td.text.trim());
const usedIn = rows[9].trim().split(',');
const uuid = artefacts.find(({ title }) => title === rows[0].trim())?.uuid;
if (!uuid) return;
if (usedIn.length === 0) {
return;
}
usedIn.forEach((name) => {
const i = artefacts.findIndex((a) => a.title === name);
if (i < 0) return;
artefacts[i].dependencies.push(uuid);
});
});
return artefacts;
}
export let artefacts: Artefact[] = parseArtefactsFromTable(`
<table class="wrapped relative-table tf-macro tablesorter" data-tf-ready="true" style="width: 102.175%;">
<colgroup>
<col style="width: 16.0077%;"/>
<col style="width: 6.61504%;"/>
<col style="width: 14.3996%;"/>
<col style="width: 14.3265%;"/>
<col style="width: 6.32266%;"/>
<col style="width: 6.68813%;"/>
<col style="width: 7.60181%;"/>
<col style="width: 7.60181%;"/>
<col style="width: 5.22624%;"/>
<col style="width: 15.1276%;"/>
</colgroup>
<tbody class="">
<tr class="tablesorter-header">
<th class="tablesorter-header" data-column="0" scope="col">
<p data-is-tablecell-container="true">
<strong>Artefakt</strong>
</p>
</th>
<th class="tablesorter-header" data-column="1" scope="col">
<p data-is-tablecell-container="true">
<strong>Typische Formate</strong>
</p>
</th>
<th class="tablesorter-header" data-column="2" scope="col">
<p data-is-tablecell-container="true">
<strong>Sinn und Zweck</strong>
</p>
</th>
<th class="tablesorter-header" data-column="3" scope="col">Typische Referenzen</th>
<th class="tablesorter-header" data-column="4" scope="col">Rolle</th>
<th class="tablesorter-header" data-column="5" scope="col">Layer</th>
<th class="tablesorter-header" data-column="6" scope="col">Typisierung</th>
<th class="tablesorter-header" data-column="7" scope="col">Hermes</th>
<th class="tablesorter-header" data-column="8" scope="col">Custom Label</th>
<th class="tablesorter-header" data-column="9" scope="col">
<p>Artefakt wird verwendet in</p>
<p>(Artefakt kann Textbaustein sein)</p>
</th>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">Integration Service Desk</p>
</td>
<td>
<p data-is-tablecell-container="true">DOCX / SOP / ITSM-Ticket</p>
</td>
<td>
<p data-is-tablecell-container="true">Befähigen des 1-Level Supports. Beschreibt, wie der Service Desk in den Betrieb integriert wird (Schnittstellen, Prozesse, Eskalationswege)</p>
</td>
<td>
<p data-is-tablecell-container="true">ITIL Service Operation / HERMES Einführung &amp; Betrieb</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb, Manger</p>
</td>
<td>
<p data-is-tablecell-container="true">Application</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb</p>
</td>
<td>
<p data-is-tablecell-container="true">Einführung</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">P042 - Informationssicherheits- und Datenschutzkonzept (ISDS)</p>
</td>
<td>
<p data-is-tablecell-container="true">DOCX / PDF</p>
</td>
<td>Zentrales Konzept zur Umsetzung der Informationssicherheit und des Datenschutzes im Projekt bzw. System</td>
<td>
<p data-is-tablecell-container="true">ISB Vorlage P042 / IKT-Minimalstandard / DSG/DSV</p>
<p data-is-tablecell-container="true">
<a href="https://intranet.ncsc.admin.ch/ncscintra/de/home/vorgaben-hilfsmittel/sicherheitsverfahren/erhoehter-schutz.html" title="https://intranet.ncsc.admin.ch/ncscintra/de/home/vorgaben-hilfsmittel/sicherheitsverfahren/erhoehter-schutz.html">Erhöhter Schutz</a>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Security, Entwickler, Manger</p>
</td>
<td>
<p data-is-tablecell-container="true">Business</p>
</td>
<td>
<p data-is-tablecell-container="true">Sicherheit</p>
</td>
<td>
<p data-is-tablecell-container="true">Konzept</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">BCM-Plan (Business Continuity Management)</p>
</td>
<td>DOCX / PDF / XLSX</td>
<td>Beschreibt Massnahmen zur Aufrechterhaltung der kritischen Geschäftsprozesse bei Störungen</td>
<td>
<p data-is-tablecell-container="true">ISB BCM-Leitfaden / ISO 22301</p>
<p data-is-tablecell-container="true">
<a href="https://confluence.bit.admin.ch/display/SUR/Dokumente" title="https://confluence.bit.admin.ch/display/SUR/Dokumente">Dokumente - Tribe SR-SUR - Confluence</a>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb, Entwickler</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Sicherheit, Architektur</p>
</td>
<td>
<p data-is-tablecell-container="true">Konzept</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">BHB</p>
</td>
<td>DOCX / PDF / Confluence</td>
<td>
<p data-is-tablecell-container="true">Betriebshandbücher</p>
</td>
<td>
<p data-is-tablecell-container="true">
<a href="https://confluence.bit.admin.ch/display/BB/BHB+Tracking">BHB Tracking - BIT Betriebsdokumentation - Confluence</a>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb, Entwickler</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb, Architektur</p>
</td>
<td>
<p data-is-tablecell-container="true">Realisierung</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr>
<td>
<p data-is-tablecell-container="true">AKP-Architekturkonformitätsprüfung</p>
</td>
<td>
<p data-is-tablecell-container="true">XLSX / DOCX / Formular</p>
</td>
<td>Bewertet, ob ein System die Architekturleitlinien der Organisation erfüllt</td>
<td>ISB / TOGAF / Bundesarchitekturhandbuch</td>
<td>
<p>Architekt, Entwickler</p>
</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Patrick</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>
<p data-is-tablecell-container="true">AKP-Checkliste</p>
</td>
<td>
<p data-is-tablecell-container="true">XLSX, Power Platform</p>
</td>
<td>Enthält Prüfpunkte und Bewertungskriterien für Architekturkonformität</td>
<td>ISB / EIAM / interne Richtlinien</td>
<td>Architekt, Entwickler</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Realisierung</td>
<td>Patrick</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>
<p data-is-tablecell-container="true">SKP Sicherheitskonformitätsprüfung</p>
</td>
<td>
<p data-is-tablecell-container="true">XLSX / DOCX / Formular</p>
</td>
<td>Prüft, ob Sicherheitsmassnahmen und ISB-Vorgaben eingehalten werden</td>
<td>ISB / IKT-Minimalstandard</td>
<td>Security</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Initialisierung</td>
<td>Patrick</td>
<td>
<br/>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">SKP-Checkliste</p>
</td>
<td>
<p data-is-tablecell-container="true">XLSX, Power Platform</p>
</td>
<td>Prüfliste mit Bewertungspunkten zur Sicherheitskonformität</td>
<td>ISB-Vorlage / interne Prüfrichtlinie</td>
<td>Security, Entwickler</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Realisierung</td>
<td>Patrick</td>
<td>
<br/>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">Recovery-Plan</p>
</td>
<td>
<p data-is-tablecell-container="true">DOCX / PDF</p>
</td>
<td>
<p data-is-tablecell-container="true">Beschreibt Verfahren zur Wiederherstellung von IT-Systemen und Daten nach Ausfällen</p>
</td>
<td>
<p data-is-tablecell-container="true">ISB Recovery-Vorgaben / ISO 27031</p>
<p data-is-tablecell-container="true">
<a href="https://portal.collab.admin.ch/sites/vorgabenportal/Freigegebene%20Dokumente/Forms/Alle%20Dokumente%202.aspx?id=/sites/vorgabenportal/Freigegebene%20Dokumente/Template%20Recoveryplan">Sicherheitsvorgaben BIT - Template Recoveryplan - Alle Dokumente 2</a>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Betrieb, Entwickler</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Sicherheit, Betrieb</p>
</td>
<td>
<p data-is-tablecell-container="true">Konzept</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr class="">
<td>
<p data-is-tablecell-container="true">Si001 - Hi01: Massnahmenumsetzung zum IT-Grundschutz in der BV</p>
</td>
<td>
<p data-is-tablecell-container="true">XLSX / DOCX</p>
</td>
<td>Dokumentiert die Umsetzung der ISB-Sicherheitsmassnahmen gemäss IT-Grundschutzprofil</td>
<td>
<p data-is-tablecell-container="true">ISB Si001 / IKT-Minimalstandard / BAFU Template</p>
<p data-is-tablecell-container="true">
<a href="https://intranet.ncsc.admin.ch/ncscintra/de/home/vorgaben-hilfsmittel/sicherheitsverfahren/grundschutz.html" title="https://intranet.ncsc.admin.ch/ncscintra/de/home/vorgaben-hilfsmittel/sicherheitsverfahren/grundschutz.html">Grundschutz</a>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Security, Entwickler</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
<td>
<p data-is-tablecell-container="true">Sicherheit</p>
</td>
<td>
<p data-is-tablecell-container="true">Initialisierung</p>
</td>
<td>
<p data-is-tablecell-container="true">Patrick</p>
</td>
<td>
<p data-is-tablecell-container="true">
<br/>
</p>
</td>
</tr>
<tr class="">
<td>Architekturvision</td>
<td>DOCX / Confluence</td>
<td>Vermittelt Zielbild, Nutzen und Leitplanken für das Vorhaben</td>
<td>SAFe Portfolio Vision / HERMES Projektauftrag</td>
<td>Architekt, Entwickler</td>
<td>
<br/>
</td>
<td>Management</td>
<td>Konzept</td>
<td>Daniel</td>
<td>Architekturkonzept, AKP-Architekturkonformitätsprüfung</td>
</tr>
<tr>
<td>Systemkontext (Diagramm)</td>
<td>ArchiMate / PPT / DOCX</td>
<td>Zeigt externe Systeme, Schnittstellen und Abhängigkeiten</td>
<td>TOGAF Context View</td>
<td>Architekt, Entwickler, Betrieb</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Daniel</td>
<td>Architekturkonzept, Architektur-Review / Freigabeprotokoll</td>
</tr>
<tr>
<td>Stakeholderanalyse</td>
<td>DOCX / XLSX / Confluence</td>
<td>Identifiziert relevante Akteure, Rollen und Interessen</td>
<td>HERMES Stakeholderliste</td>
<td>Manager</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Initialisierung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Architekturkonzept</td>
<td>DOCX / Confluence / PDF</td>
<td>Beschreibt Architekturentscheidungen, Aufbau und Integrationsprinzipien</td>
<td>TOGAF Architecture Definition Doc / HERMES</td>
<td>Architekt, Manager</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Bausteinsicht (Diagramm)</td>
<td>ArchiMate / <a href="http://Draw.io">Draw.io</a>
</td>
<td>Zeigt Systemkomponenten und deren Beziehungen</td>
<td>TOGAF Application Layer</td>
<td>
<p>Architekt, Entwickler, Betrieb</p>
</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Laufzeitsicht (Diagramm)</td>
<td>UML / <a href="http://Draw.io">Draw.io</a> / PPT</td>
<td>Beschreibt Interaktionen und dynamisches Verhalten</td>
<td>SAFe Solution Intent</td>
<td>Architekt, Entwickler</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Einführung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Verteilungssicht (Diagramm)</td>
<td>ArchiMate / UML / PPT</td>
<td>Zeigt Deployments, Infrastruktur und Umgebungen</td>
<td>TOGAF Technology Layer</td>
<td>Architekt, Entwickler, Betrieb</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Einführung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Architekturentscheidungen (ADR)</td>
<td>Markdown / YAML / Confluence</td>
<td>Dokumentiert wesentliche Architekturentscheidungen mit Begründungen</td>
<td>SAFe Decision Record</td>
<td>Architekt, Entwickler, Manager</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Datenmodell</td>
<td>ArchiMate / ER-Diagramm / Excel</td>
<td>Beschreibt zentrale Datenobjekte und Relationen</td>
<td>TOGAF Data Architecture</td>
<td>Entwickler</td>
<td>
<br/>
</td>
<td>Daten</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Schutzbedarfsanalyse (SchuBAN)</td>
<td>DOCX / XLSX / ISB-Template</td>
<td>Schutzbedarfsanalyse: Definiert Schutzziele und Schutzbedarf gemäss ISB-Vorgaben</td>
<td>IKT-Minimalstandard / ISB Leitfaden SchuBAN</td>
<td>Entwickler, Security, Manager</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Datenschutzkonzept</td>
<td>DOCX / Confluence / PDF</td>
<td>Beschreibt Umsetzung von DSG/DSV-Anforderungen</td>
<td>DSG/DSV / ISB Datenschutzleitfaden</td>
<td>Entwickler, Security, Manger</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Sicherheitskonzept</td>
<td>DOCX / PDF</td>
<td>Beschreibt Sicherheitsmassnahmen auf technischer &amp; organisatorischer Ebene</td>
<td>IKT-Minimalstandard Kap. 24</td>
<td>Entwickler, Security, Manager</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Risikomanagement / Risikoanalyse</td>
<td>XLSX / DOCX</td>
<td>Erfasst Bedrohungen, Eintrittswahrscheinlichkeiten und Massnahmen</td>
<td>HERMES Risikoanalyse / ISB Vorgaben</td>
<td>Entwickler, Security</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Initialisierung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Zugriffs- &amp; Berechtigungskonzept</td>
<td>DOCX / XLSX</td>
<td>Definiert Rollen, Rechte und Zugriffsebenen</td>
<td>IKT-Minimalstandard / IAM-Vorgaben <a href="http://admin.ch">admin.ch</a>
</td>
<td>Entwickler, Security</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>IKT-Minimalstandard-Nachweis</td>
<td>XLSX / DOCX</td>
<td>Belegt die Einhaltung der Minimalstandard-Kontrollen</td>
<td>ISB IKT-Minimalstandard / Auditvorgabe</td>
<td>Security, Entwickler</td>
<td>
<br/>
</td>
<td>Sicherheit</td>
<td>Einführung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Traceability-Matrix</td>
<td>XLSX / ReqIF / Jira</td>
<td>Verknüpft Anforderungen mit Architektur- und Sicherheitsmassnahmen</td>
<td>IREB / SAFe Solution Intent</td>
<td>Architekt, Entwickler</td>
<td>
<br/>
</td>
<td>Governance</td>
<td>Realisierung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Versionierungsübersicht</td>
<td>CSV / Git / Confluence</td>
<td>Hält aktuelle und historische Versionen der Artefakte fest</td>
<td>Repository-Governance / SAFe Configuration Mgmt</td>
<td>Entwickler</td>
<td>
<br/>
</td>
<td>Governance</td>
<td>Realisierung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Architektur-Review / Freigabeprotokoll</td>
<td>PDF / DOCX / Confluence</td>
<td>Dokumentiert Review-Resultate und formelle Freigabe</td>
<td>EA-Governance / HERMES Controlling</td>
<td>Entwickler, Architekt, Security, Manger</td>
<td>
<br/>
</td>
<td>Governance</td>
<td>Einführung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Qualitätsanforderungen</td>
<td>DOCX / Confluence</td>
<td>Definiert nicht-funktionale Anforderungen (z. B. Performance, Skalierbarkeit)</td>
<td>ISO 25010</td>
<td>Manger</td>
<td>
<br/>
</td>
<td>Architektur</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Monitoring- &amp; Betriebsarchitektur</td>
<td>DOCX / PPT / Confluence</td>
<td>Beschreibt Überwachung, Logging, Service KPIs</td>
<td>ITSM / TOGAF Ops Architecture</td>
<td>Architekt, Entwickler, Manager, Security</td>
<td>
<br/>
</td>
<td>Betrieb</td>
<td>Konzept</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
<tr>
<td>Glossar</td>
<td>DOCX / Confluence</td>
<td>Vereinheitlicht Begriffe für alle Artefakte</td>
<td>TOGAF Architecture Glossary</td>
<td>Architekt, Entwickler, Security</td>
<td>
<br/>
</td>
<td>
<p>Governance, Sicherheit, Architektur, Daten</p>
</td>
<td>Einführung</td>
<td>Daniel</td>
<td>
<br/>
</td>
</tr>
</tbody>
</table>
`);
export const views: string[] = [
...Array.from(new Set(artefacts.flatMap((a) => a.views))),
'Projekt'
];