• Engineering

Going Open Source

17. Mai, 2022

In der Krankenkasse haben wir täglich mit Daten unserer Versicherten zu tun. Diese Daten werden mittels einer zentralen ID, der Krankenversichertennummer (KVNR), zusammen gehalten. Die Krankenversichertennummer begleitet Versicherte ein Leben lang. Sie ist zufällig und enthält keinerlei personenbezogene Information.

Weil die KVNR so wichtig ist, haben wir bei vbu.tech eine Open Source Java Bibliothek geschaffen, die diese ID kapselt. Die Bibliothek übernimmt dabei zwei zentrale Aufgaben:

  1. Validieren der KVNR

  2. Bereitstellen von KVNRs für die Qualitätssicherung

Punkt 1 ist trivial. Validiert wird die KVNR mittels der Struktur, führender Buchstabe, gefolgt von 9 Ziffern und einer Prüfsummenberechnung nach dem Luhn-Algorithmus. Hintergründe zum Luhn-Algorithmus  beschreibt die Wikipedia.

Punkt 2 ist eine Erweiterung des vbu.tech Platform Teams. Wir stellen damit die Möglichkeit bereit nicht valide KVNRs für die Qualitätssicherung zu verwenden. Hintergrund: die Ausgabestellen der KVNR geben keine solche Qualitätssicherung KVNRs heraus. Wenn wir valide KVNRs einsetzen besteht dementsprechend immer die Gefahr, dass wir vergebene Krankenversichertennummern verwenden. Um dies zu vermeiden, können wir eigenen Krankenversichertennummern verwenden, die nicht valide sind. Im vbu.tech Platform Team nehmen wir hierfür beispielsweise die KVNRs zwischen Q000000000 und Q000000099.

Beispiel

// Create a non-valid KVNR
final var insureeNumber = new Krankenversichertennummer("Q000000000");

System.out.format("Is test number: %b%n", insureeNumber.isTestNumber());

In dem Beispiel wird eine nicht valide KVNR verwendet, um einen Krankenversichertennummer Instanz zu erzeugen. Da diese KVNR zu unserem definierten Testnummernsatz gehört, wirft der erzeugende Konstruktor keine Exception (ChecksumException). Dafür liefert die Methode  isTestNumber() ein true als Wert zurück.

Da unser Q-Nummernbereich nicht von allen Verwendern genutzt werden kann, haben wir einen Service Provider Mechanismus geschaffen, mit dem jeder Anwender seinen Testnummernbereich selbst definiert werden kann. Um einen solch eigenen Bereich zu schaffen muss das Interface TestKrankenversichertennummerValueProvider implementiert werden und in module-info.java mittels provides bereitgestellt werden.

Beispiel

package my.own.project;

import tech.vbu.kvnr.spi.TestKrankenversichertennummerValueProvider;
import java.util.Set;
import static java.util.Set.of;

public class SimpleTestValueProvider extends TestKrankenversichertennummerValueProvider {
    public Set<String> values() {
        return of("z000000000");
    }
}

In diesem Beispiel wir eine einzige künstliche KVNR für Testzwecke erzeugt.

Damit diese in euren eigenen Projekten verwendet werden kann, müsst ihr sie dem Java Modulsystem in der module-info.java Datei bekannt geben:

module my.own.project {
    requires tech.vbu.krankenversichertennummer;
    provides tech.vbu.kvnr.spi.TestKrankenversichertennummerValueProvider with my.own.project.SimpleTestValueProvider;
}

Weitere Information

Die vbu.tech Krankenversichertennummer Bibliothek ist ohne weitere Abhängigkeiten implementiert. Sie ist sehr klein gehalten und kommt bei uns als eine Art Shared Kernel zum Einsatz. Das heisst, wir garantieren innerhalb des Versionsschemas volle Abwärtskompatibilität (siehe README.adoc der Version 1.0).

In euren eigenen Projekten könnt ihr die Bibliothek mittels Maven oder Gradle Dependency ab Java 11 einbauen.

Da wir vom Paradigma Public Money, Public Code überzeugt sind, haben wir die Bibliothek unter der liberalen GNU Lesser General Public License Version 3 oder höher bereit gestellt.

Link: https://gitlab.com/b3891/vbu-krankenversichertennummer-jvm

Sascha Kohlmann
Senior Backend Developer