Inhaltsverzeichnis
4.2 wvds-amed-pims — PIMS-Extension
Stand: 2026-03-06
Übergeordnet: 4. VSIX-Module — Gesamtübersicht Verwandt: 3. PIMS-Architektur | 3.1 Prüfwesen | 3.2 Aufträge | 3.3 Sicherheitsgespräche | ← 4.1 CAFM-Extension
Zweck
Die Extension wvds-amed-pims ist die Benutzeroberfläche für die Prozessführung. Sie zeigt Prüfpläne, Arbeitsaufträge, Sicherheitsgespräche und Rohrleitungsprüfungen aus ENIVERSPIMS. Die vier Topics (PIMS-INSP, PIMS-EZA, PIMS-WORK, PIMS-PIPE) bilden die Prozesskette ab, die bisher über WIS/TimeTrain, vierzig AMED-Module und LD/ENIVERS ARBEIT verteilt war.
PIMS verwaltet keine Assets selbst — alle physischen Objekte (TP, Equipment, Rohre) liegen in ENIVERSCAFM. PIMS referenziert sie über asset.item.id via Cross-DB-Synonym.
Views
PIMS-INSP — Inspektionsplanung
| View | Form | Beschreibung |
|---|---|---|
| INSP-Planung | InspPlan.wfm | Prüfpläne verwalten: inspection.schedule mit zugeordneten Regeln (inspection.rule). Filter nach Disziplin, Intervall, Fälligkeit. Forecast-Ansicht: welche Prüfungen stehen in den nächsten 30/90/365 Tagen an? |
| INSP-Aufgaben | InspTasks.wfm | Offene Prüfaufgaben (inspection.task). Fällig heute, diese Woche, überfällig. Zuweisungs-Dialog für Prüfer. Status-Wechsel: offen → in Arbeit → erledigt. |
| INSP-Ergebnisse | InspResult.wfm | Prüfergebnis erfassen: Bestanden/Mangel, Messwerte (inspection.measurement), Bemerkungen, Foto-Upload. Bei Mangel: automatische Weiterleitung an fault.report (→ PIMS-WORK). |
Gateway-Endpunkte:
| Methode | Route | Beschreibung |
|---|---|---|
| GET | /api/v1/pims/insp/schedules?branch={id} | Prüfpläne pro Betriebsstätte |
| GET | /api/v1/pims/insp/schedules/{id}/rules | Regeln eines Prüfplans |
| GET | /api/v1/pims/insp/tasks?due={range} | Offene Aufgaben nach Fälligkeitszeitraum |
| GET | /api/v1/pims/insp/forecast?days={n} | Forecast: fällige Prüfungen in n Tagen |
| POST | /api/v1/pims/insp/tasks/{id}/result | Prüfergebnis erfassen |
| POST | /api/v1/pims/insp/tasks/{id}/assign | Aufgabe einem Prüfer zuweisen |
Pascal-Units:
| Unit | Verantwortung |
|---|---|
Pims.InspPlan.pas | Prüfplan-Verwaltung, Regel-Editor, Forecast-Chart |
Pims.InspTasks.pas | Aufgabenliste, Fälligkeits-Ampel, Zuweisungs-Dialog |
Pims.InspResult.pas | Ergebnis-Formular, Messwert-Eingabe, Mangel-Weiterleitung |
WP-Abhängigkeiten:
| WP | Inhalt (Backend) | Freigeschaltete UI-Funktion |
|---|---|---|
| PIMS-INSP 01 | inspection.* Schema Grundstruktur | Leere INSP-Views ladbar (Schema existiert) |
| PIMS-INSP 02 | RuleBase-Migration aus WIS | Regeln sichtbar in Prüfplan-View |
| PIMS-INSP 03 | TimeTrain + sp_GenerateTasks | Aufgaben sichtbar in INSP-Aufgaben |
| PIMS-INSP 04 | Nachtjob sp_JedeNacht | Automatisch generierte Aufgaben am nächsten Tag |
| PIMS-INSP 05 | Forecast-Funktionen | Forecast-Chart in INSP-Planung |
| PIMS-INSP 06 | WIS Synonym-Ablösung (63 Synonyme) | Kein WIS-Linked-Server mehr nötig (Backend-only) |
| PIMS-INSP 07 | PROOF/HIST-DB Ablösung | Historische Daten in INSP-Ergebnisse sichtbar |
PIMS-EZA — Sicherheit / EZA-Verwaltung
| View | Form | Beschreibung |
|---|---|---|
| EZA-Verwaltung | Eza.wfm | EZA-Stammdaten (safety.eza_master) verwalten: Instrument, Schutzziel, SIL-Bewertung, zugeordnete Prüfvorschriften (BGV A3, ATEX). Filter nach SIL-Stufe, Prüfstatus. |
| Sicherheitsgespräche | EzaTalk.wfm | Sicherheitsgespräch-Protokoll erfassen (safety.conversation): Aktoren, Sensoren, Begründungen, 4-dimensionale Risikobewertung, Unterschriften. |
Gateway-Endpunkte:
| Methode | Route | Beschreibung |
|---|---|---|
| GET | /api/v1/pims/eza?sil={level} | EZA-Instrumente nach SIL-Stufe |
| GET | /api/v1/pims/eza/{id} | EZA-Stammdaten inkl. Schutzziel, SIL |
| GET | /api/v1/pims/eza/{id}/conversations | Sicherheitsgespräche zu einem Instrument |
| POST | /api/v1/pims/eza/{id}/conversation | Neues Sicherheitsgespräch anlegen |
| GET | /api/v1/pims/eza/{id}/prerequisites | Prüfvorschriften (BGV A3, ATEX etc.) |
Pascal-Units:
| Unit | Verantwortung |
|---|---|
Pims.Eza.pas | EZA-Liste, SIL-Filter, Prüfvorschriften-Zuordnung |
Pims.EzaTalk.pas | Gesprächsprotokoll: Risikomatrix, Aktoren/Sensoren, Signatur |
WP-Abhängigkeiten:
| WP | Inhalt (Backend) | Freigeschaltete UI-Funktion |
|---|---|---|
| PIMS-EZA 01 | safety.* Schema Grundstruktur | Leere EZA-Views ladbar |
| PIMS-EZA 02 | AMED EZAMASTER Migration | EZA-Instrumente sichtbar in EZA-Verwaltung |
| PIMS-EZA 03 | Sicherheitsgespräche aus AMED | Gesprächs-Historie in EzaTalk |
| PIMS-EZA 04 | Prüfvorschriften BGV A3, ATEX | Vorschriften-Tab in EZA-Verwaltung |
| PIMS-EZA 05 | EZA-Lifecycle + PIMS-INSP Anbindung | Cross-Ref: Prüfaufgaben pro EZA-Instrument |
PIMS-WORK — Arbeitsaufträge / Instandhaltung
| View | Form | Beschreibung |
|---|---|---|
| Arbeitsaufträge | WorkOrders.wfm | Zentrale Auftragsliste (work.order): Typ-Filter (U=Überprüfung, R=Reparatur, W=Wartung, S=Sonstiges). Status-Tracking: offen → geplant → in Arbeit → abgeschlossen. Kosten-Übersicht (work.order_cost). |
| Schadensmeldungen | FaultReports.wfm | Schaden/Mangel melden (fault.report): Asset auswählen, Schadensart, Fotos, Priorität. Automatische Erzeugung eines work.order (Typ R). Rückverfolgung zur Prüfung (wenn aus INSP-Ergebnis erzeugt). |
Gateway-Endpunkte:
| Methode | Route | Beschreibung |
|---|---|---|
| GET | /api/v1/pims/work/orders?type={t}&status={s} | Aufträge mit Typ/Status-Filter |
| GET | /api/v1/pims/work/orders/{id} | Auftrags-Detail inkl. Kosten, Plan, verknüpfte Prüfung |
| POST | /api/v1/pims/work/orders | Neuen Auftrag anlegen |
| PATCH | /api/v1/pims/work/orders/{id}/status | Status-Wechsel |
| GET | /api/v1/pims/fault/reports?priority={p} | Schadensmeldungen nach Priorität |
| POST | /api/v1/pims/fault/reports | Neue Schadensmeldung (erzeugt automatisch work.order) |
Pascal-Units:
| Unit | Verantwortung |
|---|---|
Pims.WorkOrders.pas | Auftragsliste, Typ/Status-Filter, Kosten-Zusammenfassung |
Pims.FaultReports.pas | Schadensmeldungs-Formular, Verknüpfung mit Prüfergebnis |
WP-Abhängigkeiten:
| WP | Inhalt (Backend) | Freigeschaltete UI-Funktion |
|---|---|---|
| PIMS-WORK 01 | work.* Schema | Leere WORK-Views ladbar |
| PIMS-WORK 02 | AMED Reparaturen-Migration | Historische Reparaturen sichtbar |
| PIMS-WORK 03 | Schadenmeldungen + Schadensarten | Schadensmeldungs-Formular aktiv |
| PIMS-WORK 04 | Stillstandsplanung | Planungs-Tab in Auftrags-Detail |
| PIMS-WORK 05 | Archivierung + PIMS-INSP Anbindung | Cross-Ref: Auftrag → Prüfung, Archiv-Filter |
PIMS-PIPE — Rohrleitungen
| View | Form | Beschreibung |
|---|---|---|
| Rohr-Bestand | Piping.wfm | Rohrleitung-Übersicht: asset.item mit type_code=piping. Property-Grid mit JSON-Eigenschaften (ehemals 150 EAV-Spalten aus TecDB). Zugeordnete Prüfpläne (Cross-Ref PIMS-INSP). Dekommissionierungs-Status. |
Gateway-Endpunkte:
| Methode | Route | Beschreibung |
|---|---|---|
| GET | /api/v1/cafm/obj?type=piping | Rohrleitungsobjekte (via CAFM-API, type-Filter) |
| GET | /api/v1/cafm/obj/{id} | Rohrleitungs-Detail inkl. JSON-Properties |
| GET | /api/v1/pims/insp/schedules?item={id} | Prüfpläne für diese Rohrleitung (via INSP-API) |
Pascal-Unit:
| Unit | Verantwortung |
|---|---|
Pims.Piping.pas | Rohr-Bestand, Property-Grid, Prüfplan-Cross-Ref, Dekomm. |
Besonderheit: PIMS-PIPE nutzt keine eigenen Gateway-Endpunkte — die Asset-Daten kommen aus der CAFM-API (type=piping), die Prüfpläne aus der INSP-API. Die PIPE-View ist damit ein reiner Cross-Domain-Consumer, der beide APIs kombiniert.
WP-Abhängigkeiten:
| WP | Inhalt (Backend) | Freigeschaltete UI-Funktion |
|---|---|---|
| PIMS-PIPE 01 | TecDB Analyse (150 Spalten, EAV) | — (Analyse-Phase, keine UI) |
| PIMS-PIPE 02 | property_schema für piping | Property-Grid in Piping.wfm zeigt Felder |
| PIMS-PIPE 03 | EAV → JSON Migration | JSON-Properties sichtbar |
| PIMS-PIPE 04 | Trigger-Ablösung (trgRohrMaster) | — (Backend-Stabilität, keine UI) |
| PIMS-PIPE 05 | v_item_piping View + Validierung | Validierter Rohr-Bestand in der Liste |
| PIMS-PIPE 06 | Rohr-Prüfpläne in PIMS-INSP einbinden | Prüfplan-Tab in Piping.wfm |
| PIMS-PIPE 07 | TecDB Abnahme + Dekommissionierung | Dekomm.-Status und Abnahme-Historie |
TreeView-Struktur
Der TreeView amedPimsExplorer in der Activity-Bar-Sidebar:
amedPimsExplorer
├── Prüfwesen (INSP) → öffnet InspPlan.wfm
│ ├── Prüfpläne
│ │ └── [Prüfplan X] → öffnet InspPlan.wfm (Detail)
│ ├── Offene Aufgaben (12) → öffnet InspTasks.wfm
│ │ ├── Überfällig (3)
│ │ ├── Heute (4)
│ │ └── Diese Woche (5)
│ └── Forecast → öffnet InspPlan.wfm (Forecast-Tab)
├── Sicherheit (EZA) → öffnet Eza.wfm
│ ├── EZA-Instrumente
│ │ ├── SIL 1
│ │ ├── SIL 2
│ │ └── SIL 3
│ └── Sicherheitsgespräche → öffnet EzaTalk.wfm
├── Arbeitsaufträge (WORK) → öffnet WorkOrders.wfm
│ ├── Offen (23)
│ ├── In Arbeit (8)
│ └── Abgeschlossen (dieses Jahr)
└── Rohrleitungen (PIPE) → öffnet Piping.wfm
├── Aktiv
└── Dekommissioniert
Workflow-Kette in der UI
Die Views sind entlang des PIMS-Workflows verknüpft — ein Klick führt den Benutzer entlang der Prozesskette:
InspPlan.wfm InspTasks.wfm InspResult.wfm
[Prüfplan auswählen] ────► [Aufgabe öffnen] ────► [Ergebnis erfassen]
│
┌──────┴──────┐
│ │
[Bestanden] [Mangel]
│
▼
FaultReports.wfm
[Schadensmeldung]
│
▼
WorkOrders.wfm
[Reparaturauftrag]
│
[Sicherheitsgespräch nötig?]
│
▼
EzaTalk.wfm
[Gespräch protokollieren]
Verzeichnisstruktur
wvds-amed-pims/ ├── src-pas/ │ ├── extension.pas │ ├── Pims.Interop.pas │ ├── Pims.InspPlan.pas │ ├── Pims.InspTasks.pas │ ├── Pims.InspResult.pas │ ├── Pims.Eza.pas │ ├── Pims.EzaTalk.pas │ ├── Pims.WorkOrders.pas │ ├── Pims.FaultReports.pas │ ├── Pims.Piping.pas │ ├── services/ │ │ ├── Services.Lifecycle.pas │ │ └── Services.Gateway.pas │ └── tree/ │ └── Tree.Pims.pas ├── forms/ │ ├── InspPlan.wfm │ ├── InspTasks.wfm │ ├── InspResult.wfm │ ├── Eza.wfm │ ├── EzaTalk.wfm │ ├── WorkOrders.wfm │ ├── FaultReports.wfm │ └── Piping.wfm ├── media/ │ └── icons/ │ ├── activity-bar.svg │ └── pims.svg ├── dist/ ├── package.json ├── package.nls.json ├── package.nls.de.json ├── build.ps1 ├── CLAUDE.md └── .vscodeignore
package.json (Gerüst)
{ "name": "wvds-amed-pims", "displayName": "%extension.displayName%", "description": "%extension.description%", "version": "0.1.0", "publisher": "wvds", "engines": { "vscode": "^1.85.0" }, "categories": ["Other"], "activationEvents": ["onStartupFinished"], "main": "./dist/extension.js", "contributes": { "viewsContainers": { "activitybar": [ { "id": "amedPims", "title": "%viewsContainer.title%", "icon": "media/icons/activity-bar.svg" } ] }, "views": { "amedPims": [ { "id": "amedPimsExplorer", "name": "%views.explorer.name%" } ] }, "commands": [ { "command": "amed.pims.openInspPlan", "title": "%commands.openInspPlan.title%" }, { "command": "amed.pims.openInspTasks", "title": "%commands.openInspTasks.title%" }, { "command": "amed.pims.openEza", "title": "%commands.openEza.title%" }, { "command": "amed.pims.openWorkOrders", "title": "%commands.openWorkOrders.title%" }, { "command": "amed.pims.openFaultReports", "title": "%commands.openFaultReports.title%" }, { "command": "amed.pims.openPiping", "title": "%commands.openPiping.title%" }, { "command": "amed.pims.refreshExplorer", "title": "%commands.refresh.title%", "icon": "$(refresh)" } ] } }