====== 3.1 ENIVERSPIMS — Prüfwesen ======
//Stand: 2026-03-05//
Übergeordnet: [[de:int:wvdsshell:notes:03-pims:start|PIMS-Architektur — Gesamtübersicht]]
Verwandt: [[de:int:wvdsshell:notes:03-pims:work-orders|3.2 Arbeitsaufträge]] | [[de:int:wvdsshell:notes:03-pims:legacy-analysis|3.4 Legacy-Analyse]]
===== Konzept =====
Das Prüfwesen besteht aus drei Schichten:
- **Prüfdefinition** — Was ist zu prüfen, wie oft, von wem? (''inspection.rule'' + ''inspection.prerequisite'')
- **Prüfplanung** — Der geplante Termin als ''work.order'' (Typ ''U'' — Überprüfung)
- **Prüfergebnis** — Das Protokoll nach der Durchführung (''inspection.result'' + ''inspection.measurement'')
Prüftypen werden **nicht** hart kodiert — sie leben in ''inspection.discipline_type'' (erweiterbare Tabelle).
===== inspection.discipline_type — Prüftypen =====
Ersetzt das fehlende ''rule_type''-Konzept aus WIS (WIS hat keinen Prüftyp — er ergibt sich implizit
aus dem Quellsystem + GP + BZ). In ENIVERSPIMS führen wir ihn explizit ein.
CREATE TABLE inspection.discipline_type (
id INT NOT NULL IDENTITY PRIMARY KEY,
code VARCHAR(30) NOT NULL, -- 'EMR_WIS', 'BGV_A3', 'BLITZSCHUTZ', ...
label NVARCHAR(100) NOT NULL,
description NVARCHAR(MAX) NULL,
gp_code VARCHAR(10) NULL, -- WIS GP-Code falls zutreffend
sort_order SMALLINT NOT NULL DEFAULT 0,
is_active BIT NOT NULL DEFAULT 1,
CONSTRAINT UQ_discipline_type_code UNIQUE (code)
)
==== Seed-Daten (aus AMED-Quellcode-Analyse: 39 EZA-Module + WIS) ====
^ code ^ label ^ GP-Code ^ Quelle ^
| ''EMR_WIS'' | EMR-Prüfung (WIS/TimeTrain) | A | WIS (APPMASTER, GP=A) |
| ''MECH_WIS'' | Mechanische Prüfung (WIS) | A | WIS (APPMASTER, MECH) |
| ''BETRIEB_WIS'' | Betriebliche Prüfung (WIS) | BETRIEB | WIS (Betriebspersonal) |
| ''BGV_A3'' | BGV A3 — Elektrische Prüfung | — | AMED Amed.Win.MsrEzA.BGV |
| ''BLITZSCHUTZ'' | Blitzschutzanlage | — | AMED Amed.Win.MsrEzA.Blitzsch|
| ''KV_PRUEF'' | Kraftverteiler-Prüfung | — | AMED Amed.Win.MsrEzA.KVPruf |
| ''FI_SCHUTZ'' | FI-Schutzschalter-Prüfung | — | AMED Amed.Win.MsrEzA.FIListe|
| ''BELEUCHTUNG'' | Beleuchtungsanlage | — | AMED Amed.Win.MsrEzA.Beleuch|
| ''SICHER_BELEUCH''| Sicherheitsbeleuchtung | — | AMED Amed.Win.MsrEzA.SicherBeleuch |
| ''EX_SCHUTZ'' | Ex-Schutz-Prüfung | — | AMED Amed.Win.MsrEzA.ExNachNum |
| ''STARKSTROM'' | Starkstromanlage | — | AMED Amed.Win.MsrEzA.Starkstr|
| ''HSHZ'' | HSHZ-Anlage | — | AMED Amed.Win.MsrEzA.HSHZListe|
| ''ROHR'' | Rohrprüfung (TecDB) | — | AMED Amed.Win.Rohre |
| ''SONSTIGE'' | Sonstige Prüfung | — | Erweiterungspunkt |
===== inspection.rule — Prüfregeln =====
Direkt abgeleitet aus dem **WIS-Parametersystem** (RuleKey / Rules / RuleBase).
Jeder Rule-Datensatz beschreibt die Prüfkonfiguration eines Items.
CREATE TABLE inspection.rule (
id INT NOT NULL IDENTITY PRIMARY KEY,
item_id INT NOT NULL, -- FK → ENIVERSCAFM.asset.item
discipline_type_id INT NOT NULL, -- FK → inspection.discipline_type
-- WIS-Parameter (aus RuleKey-Dimensionen)
iv_code VARCHAR(10) NULL, -- PIV: Prüfintervall (1T, 1W, 1M, 1J, 5J, ...)
bz_code VARCHAR(5) NULL, -- BZ: Prüfzustand (L=Laufend, R=Ruhe, X=Außer, P=Pause)
gp_code VARCHAR(10) NULL, -- GP: Ausführungsgruppe (EMR WIS, MECH WIS, BETRIEB, ...)
eie_code VARCHAR(10) NULL, -- EIE: Einblendintervall vor Fälligkeit
pv_code VARCHAR(20) NULL, -- PV: Prüfverantwortlicher
po_code VARCHAR(20) NULL, -- PO: Prüforganisator
bv_ref NVARCHAR(100) NULL, -- BV: Bezug/Vorschrift (BetrSichV, DGUV V3, ...)
regulatory_src NVARCHAR(200) NULL, -- Volltext Vorschriftenquelle
-- Aktivierung
is_active BIT NOT NULL DEFAULT 1,
valid_from DATE NULL,
valid_until DATE NULL, -- NULL = unbefristet
-- Migration
legacy_rulebase_id INT NULL, -- WIS RuleBase-PK
legacy_common_id INT NULL, -- WIS Common-PK
-- Audit
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
updated_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
)
==== WIS-Parameter-Referenz ====
^ Code ^ Bedeutung ^ Beispielwerte (aus WIS.Rules) ^
| PIV | Prüfintervall | 1T, 3T, 1W, 2W, 1M, 3M, 6M, 1J, 2J, 3J, 5J, 10J (37 Werte) |
| BZ | Prüfzustand | L (Laufend), R (Ruhe), X (Außerbetrieb), P (Pause) |
| GP | Ausführungsgruppe | EMR WIS, MECH WIS, BETRIEB, ext. Sachverst., ÜS |
| EIE | Einblend-Voranzeige | 1T, 1W, 2W, 1M (wie früh wird Aufgabe sichtbar) |
| PV | Prüfverantwortlicher | Personalkürzel / Rolle |
| PO | Prüforganisator | Personalkürzel / Rolle |
| BV | Bezug / Vorschrift | 180+ Rechtsreferenzen (BetrSichV, DGUV V3, ...) |
| DK | Deaktivierungsdatum | Datum, ab dem Regel nicht mehr gilt |
===== inspection.prerequisite — Prüfvoraussetzungen =====
Speichert, welche Unterlagen/Zeichnungen für ein Item vorhanden sind.
Abgeleitet aus **AMED EZAPrufVor** (1.376 Einträge, FK=IDEZA → EZAMASTER).
CREATE TABLE inspection.prerequisite (
id INT NOT NULL IDENTITY PRIMARY KEY,
item_id INT NOT NULL, -- FK → ENIVERSCAFM.asset.item
-- Vorhandene Unterlagen (bit + Nummer)
has_stellenblatt BIT NOT NULL DEFAULT 0,
nr_stellenblatt NVARCHAR(50) NULL,
has_stellenplan BIT NOT NULL DEFAULT 0,
nr_stellenplan NVARCHAR(50) NULL,
has_stromlaufplan BIT NOT NULL DEFAULT 0,
nr_stromlaufplan NVARCHAR(50) NULL,
has_fliessbild BIT NOT NULL DEFAULT 0, -- R&I-Ausschnitt
has_funktionsplan BIT NOT NULL DEFAULT 0,
nr_funktionsplan NVARCHAR(50) NULL,
has_behaelterzeichnung BIT NOT NULL DEFAULT 0,
nr_behaelterzeichnung NVARCHAR(50) NULL,
-- Freitext-Hinweise
pruef_cycle_comment NVARCHAR(125) NULL, -- Hinweis zum Prüfzyklus
look_at_comment NVARCHAR(100) NULL, -- Was ist zu beachten
pruefungshinweis NVARCHAR(MAX) NULL, -- Volltext Prüfanweisung
datum_pruefvorschrift DATE NULL,
-- Migration
legacy_id INT NULL, -- EZAPrufVor.IDEZA
-- Audit
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
updated_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
created_by INT NULL,
updated_by INT NULL
)
===== inspection.result — Prüfprotokoll =====
Wird nach Durchführung einer Prüfung (''work.order'' Typ ''U'') erstellt.
CREATE TABLE inspection.result (
id INT NOT NULL IDENTITY PRIMARY KEY,
work_order_id INT NOT NULL, -- FK → work.order (der abgeschlossene Auftrag)
item_id INT NOT NULL, -- FK → ENIVERSCAFM.asset.item (denormalisiert)
discipline_type_id INT NOT NULL, -- FK → inspection.discipline_type
-- Durchführung
inspected_by INT NULL, -- FK → ENIVERSSIAM.auth.user
inspected_at DATETIME2 NOT NULL,
-- Ergebnis
result_code VARCHAR(20) NOT NULL, -- 'pass','fail','conditional','not_applicable'
notes NVARCHAR(MAX) NULL,
-- Dokumentreferenz
doc_reference NVARCHAR(500) NULL, -- externe Dokumentennummer
-- Folge-Auftrag bei Mangel
fault_report_id INT NULL, -- FK → fault.report (wenn Mangel)
-- Audit
created_at DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME()
)
===== inspection.measurement — Messwerte =====
Für Prüfungen mit numerischen Messwerten (AMED EZALebMess, EZAMessHist).
CREATE TABLE inspection.measurement (
id INT NOT NULL IDENTITY PRIMARY KEY,
result_id INT NOT NULL, -- FK → inspection.result
item_id INT NOT NULL, -- FK → ENIVERSCAFM.asset.item
measured_at DATETIME2 NOT NULL,
measured_by INT NULL,
parameter_code VARCHAR(50) NOT NULL, -- z.B. 'ISOLATIONSWIDERSTAND', 'TEMPERATUR'
value_numeric DECIMAL(15,4) NULL,
value_text NVARCHAR(200) NULL,
unit NVARCHAR(20) NULL,
standort_code VARCHAR(20) NULL, -- EZALebStanOrt (Messstandort)
notes NVARCHAR(500) NULL,
-- Migration
legacy_id INT NULL, -- EZALebMess.ID oder EZAMessHist.ID
legacy_source VARCHAR(20) NULL -- 'AMED_LEBMess' | 'AMED_MESSHist'
)
===== Rohre als Asset-Typ =====
Rohre werden als ''asset.item'' mit ''type_code = 'piping''' geführt (ENIVERSCAFM).
Die Rohrprüfung ist ''discipline_type.code = 'ROHR''' in ENIVERSPIMS.
ENIVERSCAFM: ENIVERSPIMS:
asset.item (type_code='piping') → inspection.rule (discipline_type='ROHR')
asset.property_schema → inspection.result
Baustein 'druckmedium' inspection.measurement
(medium, druck_bar, dn, ...) (Wanddicke, Betriebsdruck, ...)
Das ''druckmedium''-Baustein in ''asset.property_schema'' übernimmt die
TecDB-Felder (Medium, Druck, Temperatur, Nennweite) als COMPOSITE-Eigenschaft.