# Changelog – vetLINK Image

Autor: N. König | Eigentümer: Vettech GmbH  
Lizenz: Proprietär – Nutzung nur für lizenzierte Kunden

---

## v26.10.1 – 2026-10-12

**Robuster bei nicht erreichbaren Netzwerkordnern**

- Ist der GDT- oder Bild-Ordner nicht erreichbar (Server aus, Netzlaufwerk getrennt,
  Verbindung bricht während der Suche ab), erscheint jetzt immer die Meldung
  „GDT-Ordner nicht erreichbar" bzw. „Bild-Ordner nicht erreichbar". Bisher konnte Windows
  in diesem Fall einen Fehler melden, der das Programm mit einem Fehlerfenster abbrechen ließ.
- **Wartezeit begrenzt:** Die Erreichbarkeitsprüfung wartet höchstens 10 Sekunden, statt
  bei ausgeschaltetem Server unbestimmt lange zu hängen.
- Sicherheitsnetz: Ein unerwarteter Fehler wird vollständig ins Log geschrieben, der
  Benutzer bekommt eine verständliche Meldung statt eines rohen Fehlerfensters.
- Ist der Ordner der Logdatei nicht erreichbar, wird das Log neben der EXE geschrieben.
- Setup und Tester verwenden dieselbe abgesicherte Prüfung (neue gemeinsame Datei `vetPfad.py`).
- Neue Programm-Icons für alle drei EXEs.

---

## v26.08.1 – 2026-08-07

**PACS-Anbindung (V2) fertiggestellt** – Bilder können jetzt statt lokal auch direkt aus
einem PACS-Server (Orthanc) angezeigt werden, über das separate Programm `vetPACSviewer.exe`.
Kundenseitige Einrichtung siehe [`PACS-Installationsanleitung.md`](PACS-Installationsanleitung.md).

### V2 – PACS-Kern

- **V2-Branch (PACS-Modus):** `DICOMWEB_MODE`/`PACS_VIEWER_EXE` zu `DEFAULT_CONFIG` ergänzt. Bei
  `DICOMWEB_MODE=1` ruft `vetLINK_Image.exe` pro gefundener SopUID
  `vetPACSviewer.exe --sopuid <uid> --title "<Tiername> (Nr. <PATID>)"` auf, statt lokal Bilder zu suchen.
  Fehlende/leere Keys → Default `DICOMWEB_MODE=0` (V1-Verhalten, abwärtskompatibel). Gegenstück:
  `--sopuid`-Modus in `vetPACSviewer.py` (separates Repo `vetPACS/Programme/viewer`).
- **Setup-GUI-Tab „PACS"** in `vetLINK_Image_setup.py`: Checkbox zum Aktivieren des PACS-Modus,
  Viewer-EXE-Pfad mit Datei-Browse.
- **Offline-Fallback:** `pacs_server_reachable()` prüft per TCP-Connect (gegen die Server-Adresse aus
  `%APPDATA%\vetPACSviewer\config.json`) die PACS-Erreichbarkeit, bevor `vetPACSviewer.exe` gestartet
  wird. Nicht erreichbar oder `vetPACSviewer.exe` fehlt → automatischer Rückfall auf die lokale
  V1-Bildanzeige, Log-Warnung statt Absturz/Hänger.
- **Serienauswahl-Dialog:** bei mehreren SopUIDs zu einem Tier zeigt `choose_sop_uids()` einen
  Auswahl-Dialog (Mehrfachauswahl, alle standardmäßig markiert) statt automatisch mehrere
  `vetPACSviewer.exe`-Fenster zu öffnen.
- **Tester (`vetLINK_Image_tester.exe`):** PACS-Modus-Simulation über einen Mock-Viewer – setzt
  `vetLINK.conf` für den Testlauf temporär auf `DICOMWEB_MODE=1`, protokolliert die Aufruf-Argumente
  und stellt die Original-Konfiguration danach garantiert (byte-genau) wieder her. Damit lässt sich der
  V2-Pfad ohne echten PACS-Server verifizieren.
- **Volle Kette E2E getestet** (2026-08-07, gegen echten Demo-Server 192.168.1.23): `vetLINK_Image.py 886`
  aufgerufen → korrekt `vetPACSviewer.exe --sopuid <uid> --title "Corli (Nr. 886)"` gestartet → Fenster
  mit richtiger Studie bestätigt.

### V1 – Fixes

- Setup-GUI: Validierung der Pfade beim Speichern (GDT_FOLDER, IMG_FOLDER) mit Sicherheitsabfrage bei
  fehlenden Ordnern statt hartem Blockieren.
- Verhalten bei mehreren SopUIDs (in einer GDT-Datei oder über mehrere GDT-Dateien mit derselben PATID)
  dokumentiert und getestet.
- Tester: Auto-Scroll-Bug im Log behoben (Tkinter-Zugriff aus Hintergrund-Thread jetzt korrekt über
  `self.after()` marshalled).
- `wmic`-Fallback für die Hardware-Lizenzprüfung: schlägt `wmic` fehl (ab Windows 11 22H2 deprecated),
  greift automatisch PowerShell/CIM mit identischem Ergebnis – stabiler Lizenz-Hash unabhängig davon,
  ob `wmic` auf dem Kunden-PC noch vorhanden ist.
- Migration Bestandskunden: `vetLINK_migrate.bat` + `vetLINK_migrate_conf.ps1` automatisieren Backup,
  Neuinstallation und Konfig-Transfer beim APP_ID-Wechsel `vetGDTopen-v1` → `vetLINKImage-v1`.
- Gemeinsame `vetLizenz.py` (Hardware-Hash) statt dreifach dupliziertem Code in
  `vetLINK_Image.py`/`vetLINK_Image_setup.py`.

### Sonstiges

- Neue Datei [`PACS-Installationsanleitung.md`](PACS-Installationsanleitung.md): kundenorientierte
  Schritt-für-Schritt-Anleitung zur PACS-Einrichtung.
- Auto-Update-Vorbereitung: `version.json` nach dem Vettech-Standardmuster
  (`VETTECH-AUTO-UPDATE.md`) ergänzt; CI baut, hasht und veröffentlicht es auf GitLab Pages.

---

## v1.0.0 – 2026-06-08

**Umbenennung / Rebranding von vetGDTopen auf vetLINK Image**

- Programm umbenannt: `vetGDTopen.exe` → `vetLINK_Image.exe`
- Setup umbenannt: `vetGDTopen_setup.exe` → `vetLINK_Image_setup.exe`
- Tester umbenannt: `vetGDTopen_tester.exe` → `vetLINK_Image_tester.exe`
- `APP_ID` geändert: `vetGDTopen-v1` → `vetLINKImage-v1`
- Konfigurationsdatei: `vetConnect.conf` → `vetLINK.conf`
- Log-Datei: `bridge.log` → `vetLINK.log`
- Standardpfade in `vetLINK.conf` auf `C:\vettech\vetLINK\` aktualisiert
- Aufnahme in GitLab-Monorepo `vetking/vetlink`

> **Hinweis für Bestandskunden:** APP_ID-Wechsel erfordert neue Lizenz.  
> Siehe CLAUDE.md → Abschnitt „Migration Bestandskunden".

---

## v3.0 – 2026-05-xx (als vetGDTopen)

- Timeout-Verhalten im Tester überarbeitet: wartet bis zu 20 Sekunden in 1s-Schritten, liest Log danach trotzdem
- Log-Fallback verbessert: leerer oder verzeichnis-artiger `LOG_FILE`-Eintrag → Fallback auf `vetLINK.log` neben der EXE
- Bildsuche rekursiv via `rglob` (auch Unterordner wie `IMG\2026\05\`)

---

## v2.0 – (als vetGDTopen)

- Setup-GUI (tkinter) mit Tab „Konfiguration" und Tab „Lizenz"
- Hardware-gebundenes Lizenzsystem eingeführt (SHA-256, identisch mit vetLizenz.py)
- Lizenzanforderungs-Workflow im Setup integriert

---

## v1.0 – (als vetGDTopen)

- Initiales Release
- Lokale Bildanzeige via `os.startfile()` (JPG / PNG / DCM)
- GDT-Ordner rekursiv nach PATID durchsuchen, SopUID auslesen
- Tester zum Simulieren des Vetera-Aufrufs
