SPLG Grouper

Java-Integrationsmodul

Das Java-Modul stellt den SPLG-Grouper als Bibliothek splg-grouper.jar bereit. Es benötigt Java 11 oder neuer. Die Scheme-Laufzeit wird im beiliegenden scm.jar mitgeliefert; beide Dateien müssen zusammen im Klassenpfad liegen (die Manifest-Angabe Class-Path: scm.jar bindet scm.jar automatisch ein, wenn es neben splg-grouper.jar liegt).

Einbindung

splg-grouper.jar (und scm.jar) in den Klassenpfad aufnehmen, z. B.:

javac -cp splg-grouper.jar MeineAnwendung.java
java  -cp .:splg-grouper.jar MeineAnwendung

Verwendungsbeispiel

import splg.*;
import java.io.File;

Grouper grouper = Grouper.create(new File("config/license.txt"));
grouper.setDefdir(new File("config/defs-2026.dat"));
grouper.setSldir(new File("config/spitallisten-2026.dat"));
grouper.setRelease("A_2026");

Falldaten fall = new Falldaten();
fall.burnr = "12345678";
fall.wohnkanton = "ZH";
fall.agey = "28";
fall.austritt = "20260315";

FalldatenDiagnose d = new FalldatenDiagnose();
d.rang = 1; d.code = "O80";
fall.diagnosen.add(d);

FalldatenBehandlung b = new FalldatenBehandlung();
b.rang = 1; b.code = "7500";
fall.behandlungen.add(b);

Result result = grouper.group(fall);
System.out.println(result.splg);        // ermittelte SPLG
System.out.println(result.lactrl);      // Leistungsauftragskontrolle

Klassenreferenz

Alle Klassen liegen im Paket splg. Felder sind – wie im Beispiel oben – öffentlich und werden direkt gesetzt bzw. gelesen.

Grouper

Einstiegspunkt. Eine Instanz kann für beliebig viele Fälle wiederverwendet werden, ist aber nicht threadsicher – für parallele Verarbeitung mehrere Instanzen erzeugen.

static Grouper create(File licfile)
Erzeugt eine Grouper-Instanz mit der angegebenen Lizenzdatei. Die Lizenz wird bei jeder Gruppierung geprüft.
void setDefdir(File) · void setDeffile(File)
Setzt die Quelle der SPLG-Definitionen: entweder ein Verzeichnis mit *.scm-Dateien oder ein defs-*.dat-Bündel. Beide Methoden sind gleichwertig.
void setSldir(File) · void setSlfile(File)
Setzt die Quelle der Spitallisten (Verzeichnis oder spitallisten-*.dat-Bündel).
void setRelease(String release)
Wählt den aktiven Release, z. B. "A_2026" oder "A_2026_1". Format: <A|P|R>_<Jahr>[_<Suffix>] (A=Akutsomatik, P=Psychiatrie, R=Rehabilitation). Lädt Definition und Spitalliste aus den gesetzten Quellen und prüft die Lizenz.
void setConfig(Bereich, SplgDefinition, Spitalliste)
Setzt Definition und Spitalliste direkt (Alternative zu setRelease, v. a. für Tests).
void addSpitalliste(String release, String burnr, String plz,
  String standort, boolean reference, String canton, String... splgs)
void addSpitalliste(String release, String burnr, String plz,
  String standort, boolean reference, String canton, List<LA> las)
Fügt einen Betrieb mit seinen Leistungsaufträgen als In-Memory-Spitalliste hinzu. Solche Einträge überschreiben die aus Dateien geladenen und fliessen in die Leistungsauftragskontrolle ein. Die erste Variante nimmt SPLG-Namen (ganzjährig gültig), die zweite LA-Objekte mit Gültigkeitszeitraum.
void setKantonOverride(String kanton)
Überschreibt den für die Spitallistenauswahl verwendeten Wohnkanton (leerer String = kein Override).
void setYearShift(boolean) · boolean isYearShift()
Schaltet die Jahres-Verschiebung ein/aus: Datumsfelder eines Falls werden vor dem Gruppieren so verschoben, dass ein Fall aus einem anderen Datenjahr gegen die aktive Definition gruppiert werden kann. agey/aged bleiben unverändert.
void clearCache() · clearDefinitions() · clearSpitallisten()
Leert die internen Caches bzw. verwirft die gesetzten Definitions- oder Spitallistenquellen (inkl. der In-Memory-Einträge).
Result group(Falldaten fall)
Gruppiert einen Fall und liefert das Ergebnis. Zentrale Methode.
String getTestcase(Falldaten fall)
String getTestcase(Falldaten fall, Result result)
String getTestcaseWithLog(Falldaten fall, Result result)
Erzeugt einen Testcase für den Fall als Zeichenkette; die …WithLog-Variante hängt das Nachvollziehbarkeits-Log an.
void writeTestcase(Falldaten fall [, Result result], String destfile)
void writeTestcaseWithLog(Falldaten fall, Result result, String destfile)
Schreibt den Testcase in eine Datei. Im Dateinamen werden die Platzhalter {burnr}, {plz}, {standort}, {fallid} und {release} ersetzt.
List<String> getDetailsLog()
Liefert die Nachvollziehbarkeits-Logzeilen der zuletzt gruppierten Fälle.

Falldaten

Eingabeobjekt für einen Fall. Alle Felder sind Strings (der Grouper interpretiert numerische Felder selbst), sofern nicht anders angegeben.

Controlling / Betrieb:

burnr
BUR-Nummer des Betriebs.
plz, standort
Postleitzahl und Standortnummer des Betriebs.
wohnkanton
Wohnkanton der Patientin/des Patienten (Spitallistenauswahl).
standortkanton
Standortkanton des Betriebs.
statistikfall, behandlungsart, tarifsystem
Falltyp-Bestandteile (medizinische Statistik).
fallid
Fallidentifikation; wird ins Ergebnis übernommen.
erhebungsjahr
Erhebungsjahr.

Grouper-relevant:

agey, aged
Alter in Jahren bzw. (bei Säuglingen) in Tagen.
austritt
Austrittsdatum im Format YYYYMMDD.
ssw, ggw, dmb
Schwangerschaftswoche, Geburtsgewicht, Beatmungsdauer.
freiwilligkeit
Freiwilligkeitsstatus.
List<FalldatenDiagnose> diagnosen
Diagnosen (die erste gilt als Hauptdiagnose).
List<FalldatenBehandlung> behandlungen
Behandlungen/Prozeduren, je mit ihren Operateuren.
List<FalldatenPatientenbewegung> bewegungen
Patientenbewegungen.

Durchreiche (für die Ausgabe): ave, weg, sn, skz, ea, ad, ana, ed, mk, ei, gew, hktr, drg, pcg, rcg, mdc, cw, pccl, ecwt, zusatz – diese Felder beeinflussen die Gruppierung nicht und werden unverändert in die Ausgabe übernommen.

Kindobjekte

FalldatenDiagnose
int rang, String code (ICD), String seitigkeit (0=beidseitig, 1=links, 2=rechts), String zusatz.
FalldatenBehandlung
int rang, String code (CHOP), String seitigkeit, String ambExt (3 = ambulant erbracht), String beginn, List<FalldatenOperateur> operateure.
FalldatenOperateur
String gln, String funktion (1=Erst-, 2=Zweitoperateur), String zulassung (1=auf Liste GD, 0=nicht).
FalldatenPatientenbewegung
String beginn, String ende, String art, String burnr.

Result

String fallid
Fallidentifikation (aus der Eingabe).
String splg
Die ermittelte SPLG.
String splg_raw
Die SPLG vor Anwendung der Quer-/Ausschlussregeln.
List<String> lgs
Alle ausgelösten Leistungsgruppen.
List<String> quer
Quer-Leistungsgruppen.
List<String> mfzs
Leistungsgruppen mit Mindestfallzahl Spital.
List<String> mfzo
Leistungsgruppen mit Mindestfallzahl Operateur.
List<MFZOPoints> points
MFZO-Punkte je Operateur/Leistungsgruppe (String gln, String lg, double points).
int slst
Welche Spitalliste zutraf: 1=Standortkanton, 2=Wohnkanton, 3=Referenzliste, 9=keine gefunden.
int lactrl
Ergebnis der Leistungsauftragskontrolle.
Set<String> lactrlcodes
Zugehörige LACTRL-Codes.
Set<ErrorCode> errorcode
Fehler-/Warncodes.
String defversion
Verwendete Definitionsversion.
List<String> spitallisten
Verwendete Spitallisten.
String notes, String zusatz
Notizen bzw. durchgereichter Zusatz.
int yearShiftDelta
Angewandte Jahres-Verschiebung (0 = keine).

Methoden: String getErrorCode() (höchstpriorisierter Fehlercode bzw. "0"), String getMFZOString().

Weitere Klassen

LA
Ein einzelner Leistungsauftrag für addSpitalliste: new LA(splg) (ganzjährig), new LA(splg, year) oder new LA(splg, validFrom, validTo) (Java-Date).
Bereich
Aufzählung Akutsomatik, Rehabilitation, Psychiatrie.