====== 2.3 CAFM — Legacy-Analyse ====== //Stand: 2026-03-05// Übergeordnet: [[de:int:wvdsshell:notes:02-cafm:start|CAFM-Architektur — Gesamtübersicht]] Verwandt: [[de:int:wvdsshell:notes:02-cafm:asset-model|2.2 Asset-Modell]] | [[de:int:wvdsshell:notes:02-cafm:migration|2.4 Migration]] ===== Überblick ===== Vier Quellsysteme fließen in die neue Architektur: ^ System ^ Fokus ^ Stärken ^ Schwächen ^ Ziel ^ | AMED | Mechanik | Vollständige Apparatehierarchie | Kein Elektriker-Modell; kein TP | ENIVERSCAFM | | TecDB | Rohre / EAV | Flexible Objekteigenschaften | Dynamisches SQL, kein Plan-Cache | ENIVERSPIMS | | WIS/PROOF | Prüfpläne | Bewährte TimeTrain-Engine | 63 Synonyme; externe PROOF/HIST-DB| ENIVERSPIMS | | LD/ENIVERS| Elektrik | EMR-Stellen, Kv-Nummern, BESTAND | Kein Mechanik-Modell | ENIVERSCAFM | ===== AMED — Mechanik-zentrisch ===== ==== Fokus und Stärken ==== AMED ist auf **Apparate** (Maschinen, Behälter, Aggregate) ausgerichtet. ''APPMASTER.erwAppNr'' ist der universelle Primärschlüssel für alle mechanischen Objekte. ==== Objektdomänen ==== ^ Tabelle ^ Zweck ^ Verknüpfung ^ Anzahl (ca.) ^ | ''APPMASTER'' | Basisobjekt: Mechanische Apparate | erwAppNr = PK | ~11.650 | | ''MOTORMASTER'' | Motoren (Untertyp von APPMASTER) | FK → APPMASTER | ~8.460 | | ''EZAMASTER'' | Elektrische Zonierung / SIL-Einstufung | FK → APPMASTER | variabel | | ''AVI_Equip'' | TÜV-/§29-überwachungspflichtige Anlagen | FK → APPMASTER | variabel | | ''tblLocationKV''| Elektrische Zonen (KV-Nummern, Motoren) | polymorphisch via IDObType | variabel | ==== Schwachstellen ==== * **Mechanik-zentrisch**: Elektriker-Sicht (EMR-Stellen, Schaltschrank-Abgänge) ist nur über ''tblLocationKV'' und ''EZAMASTER'' ansatzweise abgedeckt. * **Kein Technischer Platz**: APPMASTER beschreibt das physische Objekt, nicht den strukturellen Slot. Tausch eines Motors hinterlässt keine Slot-History. * **Kein TP-Konzept für Rohre**: Rohre und Leitungen liegen separat in TecDB. **Benutzerdokumentation (Ist-Stand):** [[de:int:amed:01-assets:start|AMED 1. Apparatefunktion]] | [[de:int:amed:02-motors:start|AMED 2. Motorfunktionalität]] ==== Inspektionstypen (tdfObjectTypes — 17 Typen) ==== ^ ID ^ Kürzel ^ Beschreibung ^ | 1 | PIV | Periodische Prüfung intern | | 2 | BZ | Betriebszustandsprüfung | | 3 | GP | Gesetzliche Prüfung | | 4 | EIE | Elektrische Inspektion | | 5 | BGV/A3 | Elektrische Prüfung BGV A3 | | 6 | KV | KV-Motoren-Prüfung | | 7 | EX | Explosionsgefährdete Bereiche | | 8 | BS | Brandschutz | | 9 | SS | Sicherheitsstufe | | 10 | FI | FI-Schutzschalter | | 11 | BL | Blitzschutz | | 12 | AK | Ankerprüfung | | 13 | DK | Druckprüfung | | 14 | PV | Prüfvorschrift intern | | 15 | SU | Sachkundigenprüfung | | 16 | SH | Sicherheit halbjährlich | | 17 | RM | Regelmäßige Messung | ===== TecDB — EAV-Problem ===== ==== Architektur ==== TecDB verwendet ein **bidirektionales EAV-Modell** (Entity-Attribute-Value): * ''tblRohrMaster'' = flache Tabelle mit ~150 Spalten (eine pro Rohreigenschaft) * ''tblObjektEigenschaft'' = EAV-Tabelle (Objekt → Eigenschaft → Wert) * Beide Tabellen werden via **bidirektionale Trigger** synchron gehalten ==== Das Performance-Problem ==== trgRohrMasterInsertUpdate (Insert/Update auf tblRohrMaster): → Dynamisches UNPIVOT aller 150 Spalten → MERGE tblObjektEigenschaft → sp_executesql pro Datenschreib-Operation → Kein Plan-Cache möglich trgObjektEigenschaftUpdate (Update auf tblObjektEigenschaft): → Lookup: idEigenschaft → Spaltenname → sp_executesql: UPDATE tblRohrMaster SET [dynamische Spalte] → Kein Plan-Cache möglich In Zeiten geringer Rechnerleistung war dieses Modell ein sinnvoller Kompromiss. Heute ist es ein **Engpass bei Massen-Updates** (z.B. Migration, Nachtjobs). ==== Exportproblem: procExportObjektAllePivot ==== Diese Stored Procedure erzeugt einen dynamischen PIVOT über alle Eigenschaften — der resultierende SQL-Text ändert sich je nach Anzahl der Eigenschaften. Kein Plan-Cache, keine stabile Ausführungszeit. ==== Migrationsziel ==== * ''tblRohrMaster'' → ''asset.item'' (type_code='piping', properties=JSON) * ''tblObjektEigenschaft'' → JSON-Felder in ''asset.item.properties'' * Trigger entfallen; Views via ''trg_regen_type_views'' ersetzen den PIVOT * Bidirektionale Synchronisation entfällt ersatzlos ===== WIS / PROOF — Prüfplanungs-Engine ===== ==== Architektur ==== WIS ist eine **Synonym-Datenbank**: 63 Synonyme zeigen auf AMED, HIST und AUDIT. PROOF ist eine externe Datenbank (nicht lokal verfügbar; Zugriff via Linked Server). ==== Stärken ==== Die WIS TimeTrain-Engine ist architektonisch solide und wird vollständig in ENIVERSPIMS übernommen: WIS-Funktionsfamilie (5-Phasen-Zyklus): RuleBase-Tabelle └─► tf_GetScheduledTasksForecast (Vorausplanung: welche Tasks wann fällig) └─► sp_TimeTrain_AppendMissingTasks (Materialisierung in TimeTrain) └─► sp_TimeTrainRun / sp_JedeNacht (Nachtjob) └─► tf_GetScheduledTasksListCurrent (aktuelle Aufgabenliste) └─► tf_GetScheduledTasksTreeCurrent (Baumansicht) └─► sp_TimeTrain2Hist (Archivierung → HIST-DB) ==== Nachtjob sp_JedeNacht (Ablauf) ==== 1. CUTOFDAY-Schleife: Fehlende Tage aufholen (Catch-up bei Ausfällen) 2. sp_Deactivate: Inaktive Anlagen aus TimeTrain ausblenden 3. sp_TransferRules: Regeländerungen propagieren 4. sp_Activate: Neue/reaktivierte Anlagen aktivieren 5. sp_TimeTrain_AppendMissingTasks: Neue Tasks generieren (Fenster bis +90 Tage) 6. sp_TimeTrain2Hist: Erledigte Tasks → HIST-DB archivieren 7. Überfällige Tasks markieren (InProcess=4) 8. dtShow-Korrektur für Tasks ohne EIE-Datum ==== tf_GetCommonExtended — Kerndaten-View-Funktion ==== Verbindet Common + Names + RuleBase + App + AVI_Equip zu einer flachen Zeile: * Beschreibung aus ''APPMASTER'' (AppNr + AppBenennung) oder ''AVI_Equip'' (RegNr + INT_NR) * Alle RuleBase-Codes (PIV, BZ, GP, EIE, AK, DK, PV, PO, MC, DAO, SU, SH, RM, MIN) * Basis für alle TimeTrain-Forecast-Berechnungen ==== Schwachstellen ==== * **Synonym-Abhängigkeiten**: 63 Synonyme auf 3+ Datenbanken; wartungsintensiv * **PROOF extern**: Kein direkter Zugriff aus WIS; Linked-Server-Abhängigkeit * **HIST extern**: ''sp_TimeTrain2Hist'' schreibt in HIST.dbo.TimeTrain_Hist — ebenfalls extern * **Kein TP-Konzept**: WIS kennt nur ''Common.IdSub'' (Geräte-ID aus AMED), keinen strukturellen TP ===== LD / ENIVERS — Elektriker-zentrisch ===== ==== Fokus und Stärken ==== LD (früher: dbTECC) ist auf **Betriebsmittel** aus Elektriker-Perspektive ausgerichtet. ''BESTAND.EMR_STELLE'' ist der natürliche Schlüssel für alle elektrischen Objekte. ==== Kerntabellen ==== ^ Tabelle ^ Zweck ^ | ''BESTAND'' | Betriebsmittel mit EMR_Stelle (Kennzeichnung) | | ''MOTORSTAMM'' | Motorenstammdaten (Elektriker-Felder) | | ''KV_NUMMER'' | Kraftverteiler-Nummern | | ''tblPerson'' | Benutzer (migriert → ENIVERSSIAM Phase 2)| | ''tblRolle'' | Rollen (migriert → ENIVERSSIAM Phase 2) | ==== Schwachstellen ==== * **Elektriker-zentrisch**: Mechanik-Sicht (Apparat, Behälter, Aggregate) fehlt vollständig. * **EMR_STELLE als natürlicher Schlüssel**: Umbenennungen erfordern Kaskaden-Updates. * **Kein TP-Konzept**: BESTAND beschreibt das Betriebsmittel, nicht den Einbauort. ==== Was ENIVERS hatte, was AMED nicht hatte ==== * Klare KV-Nummern und Schaltschrankzuordnung * EMR-Stelle als standardisiertes Kennzeichnungssystem * Vollständige Elektriker-Sicht auf Motoren und Antriebe ==== Was AMED hatte, was ENIVERS nicht hatte ==== * Apparate-Hierarchie (was gehört zu welcher Maschine) * Mechanische Inspektionstypen (Druckprüfung, Sachkundigenprüfung) * TÜV-Überwachung (AVI_Equip) * Vollständige mechanische Sicht auf Aggregate und Behälter **Benutzerdokumentation (Ist-Stand):** [[de:int:amed:start|AMED — Programmbeschreibung (Gesamtübersicht)]] ===== Fazit: "Beste beider Welten" ===== Die neue Architektur mit ''asset.item'' und ''asset.electrical_connection'' vereint: AMED (Mechanik-Sicht) LD/ENIVERS (Elektriker-Sicht) erwAppNr → asset.item.id EMR_STELLE → asset.item.item_number APPMASTER → type_code='device' BESTAND → type_code='electrical' MOTORMASTER → type_code='motor' KV_NUMMER → asset.electrical_connection.kv_number Beide Sichten auf dasselbe physische Objekt: asset.electrical_connection verknüpft device_id + motor_id + kv_code Der **Technische Platz** ist weder AMED-Apparat noch ENIVERS-Betriebsmittel — er ist der neutrale strukturelle Slot, dem Equipment aus beiden Welten zugewiesen werden kann.