Files
grok-botandCommandCodeBot b061210872
CI / ubuntu-latest · Clang · C++17 (push) Has been cancelled
Code Quality / cppcheck (push) Has been cancelled
docs: Projekt-Status nach Phase 5 (Session 4) aktualisiert
Aktualisiert ARCHITECTURE.md, REFACTORING.md, TESTPLAN.md, FORTSCHRITT.md,
README.md und improvements.md mit den Ergebnissen der Session 4:

- Phase 5 (Sicherheit & Stabilität): 6 Commits
  - Dangling-Pointer gFallMemObject → std::make_unique
  - Thread-sichere Singleton-Init via std::atomic
  - 13 strcpy → Tools::strncpy (8 Domain-Dateien + 2 Actions)
  - 2 static-Caches → thread_local
  - sRegelnAusfuehren → std::atomic<bool>
- Cleanup: 6 tote Perl-Tools + kvai.ini gelöscht (266 Zeilen)
- Tests: 12 neue Test Cases (Ist_Gueltiges_Datum, Ist_Gueltige_Uhrzeit)
- Build: 23/23 Tests grün

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
2026-06-13 08:15:13 +02:00

7.4 KiB
Raw Permalink Blame History

Regelwerk (RW) — Expertensystem zur Abrechnungspruefung

Regelwerk ist ein C++ Expertensystem zur automatisierten Pruefung von kassenaerztlichen Abrechnungsdaten (GOAE/EBM) im deutschen Gesundheitssystem. Es wird als DLL in das uebergeordnete KVAI-System (KV-Abrechnungs-Interface) eingebettet und fuehrt quartalsweise Regelpruefungen auf Arztabrechnungen durch.

  • Zeitraum: 2006–2010 (Autor: Martin Richardt, ms management systems GmbH)
  • Sprache: C++17 (Phasen 0–5 abgeschlossen)
  • Umfang: ca. 230 .cpp / 450 .hpp, 18.000+ Symbole, 300+ Ausfuehrungsfluesse
  • Kritikalitaet: Medizinische Abrechnungspruefung — Fehler haben finanzielle/regulatorische Folgen

Uebersicht

flowchart LR
    KVAI["KVAI <br/>(Host-System)"] -->|"XML-Auftrag (Abrechnungsdaten)"| RW["Regelwerk DLL<br/><code>rw_core</code>"]
    RW -->|"XML-Ergebnis (regulierte Daten)"| KVAI

    subgraph RW["Regelwerk"]
        Init["Konfiguration +<br/>LE-Daten + Stammdaten"]
        Load["PaketLader:<br/>DB → Entity-Graph"]
        Engine["RegelMaschine:<br/>2-Stufen-Pipeline"]
        Serial["Serialisierung:<br/>Entity-Graph → XML"]
        Init --> Load --> Engine --> Serial
    end

    style KVAI fill:#f0f0f0,stroke:#666,color:#333
    style RW fill:#1a1a2e,stroke:#e94560,color:#fff

Das Regelwerk erhaelt Abrechnungsdaten (Patientenfaelle, Kranken­scheine, Leistungen) als XML-Struktur, fuehrt regelbasierte Pruefungen durch und gibt die regulierten Daten (mit Loeschungen, Aenderungen, Beanstandungen) zurueck.


Architektur-Highlights

Konzept Beschreibung
2-Stufen-Pipeline Stufe 1: Zaehler aufbauen (BILDUNG). Stufe 2: Zaehler-abhaengige Regeln erneut ausfuehren (AUSWERTUNG)
87 Praedikate, 30+ Aktionen Funktor-basierte Regel-Bausteine, kombiniert zu UML-aehnlichen Mustern
50+ Methoden Komplexe Verfahrensanweisungen (UR1–UR601, SB20–SB414)
Arena-Allokator Per-Fall 1 MB Stack-Allokator, placement-new, string-interning
Intrusive Listen dlink/List<T> zur Entity-Verkettung ohne Heap-Allokation
XML-Schnittstelle Ein-/Ausgabe als XML-Streams via proprietäre Serialisierung

Projektstruktur

regelwerk/
├── CMakeLists.txt          # Build-System (CMake 3.16+, Ninja)
├── sources.cmake           # Source-Dateiliste (ausgelagert)
├── devbox.json             # Reproduzierbare Dev-Umgebung
├── AGENTS.md               # Agent-Verhaltensregeln (Coding Guidelines)
├── docs/                   # Dokumentation
│   ├── ARCHITECTURE.md     # Architektur-Detail
│   ├── DOMAIN.md           # Domänen-Glossar
│   ├── REFACTORING.md      # Refactoring-Fortschritt
│   ├── SB414_*.md          # Fachbeschreibung SB414
│   └── sb414_flow.md       # SB414 Ausfuehrungsfluss
├── src/
│   ├── core/               # RegelMaschine, Config, Init, exportierte API (rw_dll.cpp)
│   ├── domain/             # Entity-Klassen (Paket, Patientenfall, Leistung, …)
│   ├── datatypes/          # Container: Menge, Map, List, IntMenge (Flyweight)
│   ├── db/                 # Datenbank-Anbindung (MSDBConnection, DummyDB)
│   ├── interface/          # IRWLeistung, IRWSchein (Interface-Abstraktion)
│   ├── methods/            # 50+ Methoden (ab, ak, eb, fl, gs, ha, ma, sb, …)
│   ├── ur_meth/            # 25+ Ur-Methoden (komplexe Verfahren)
│   ├── sb_meth/            # 6 SB-Methoden (Sonderbedingungen)
│   ├── rw_predicates/      # 87 Praedikate (Bedingungen)
│   ├── rw_actions/         # 59 Aktionen (eine pro File, Beanstanden, Streichen, Ersetzen)
│   ├── json/               # JSON-Parser + C++-Deserialisierung
│   ├── le/                 # Leistungserbringer-Subsystem (LANR, BSNR, Arztgruppen)
│   ├── goae/               # GOAE-Katalog-Subsystem (Farben, GOP-Vergleich, …)
│   ├── statistik/          # Statistik und Logging
│   ├── taetigkeitort/      # Taetigkeit-Ort-Berechnung
│   ├── xml/                # XML-Serialisierung (rw_smallxml)
│   ├── rest/               # Host-Wrapper, Konstanten, Makros, Templates
│   ├── util/               # Tools: Datumsberechnung, Speicher, Kompression (Zlib-Wrapper), …
│   └── aktsource/          # ⚠️ Generierte Stammdaten (~100MB, niemals lesen!)
├── rw-interface/           # XML-Schema (RW-Auftrag.xsd, RW-Ergebnis.xsd)
├── tests/                  # 23 Unit-Tests (CTest + Catch2) + SB414-Testdaten
├── Testpakete/              # 46 XML-Testdatensaetze (DbExport)
├── refactorings/           # Refactoring-Ideen und Fortschritt
└── config/                 # kvai.ini

Build

# Konfiguration
cmake -B build -G Ninja -DBUILD_TESTS=ON

# Build
cmake --build build -j$(sysctl -n hw.logicalcpu)

# Tests ausfuehren
ctest --test-dir build                  # alle Tests
ctest --test-dir build -R datecalc      # einzelner Test
./build/datecalc_test                   # direktes Binary

Optionen

Option Standard Beschreibung
BUILD_TESTS OFF Unit-Tests bauen
BUILD_HOSTRW OFF HostRW-Executable bauen (benoetigt Oracle/Sybase)

Hinweis: rw_core ist eine statische Bibliothek. Fuer den Produktivbetrieb wird sie als DLL in das KVAI-Host-System eingebunden. Die Test-Executables linken gegen rw_core und nutzen DummyDBConnection (No-Op-DB).


Tech-Stack

Bereich Technologie
Sprache C++17 (Phasen 0–4 abgeschlossen)
Build CMake 3.16+, Ninja
Container Eigenbau (Menge, Map, List, IntMenge)
DB Oracle/Sybase (Produktion) → MSDBConnection-Interface → DummyDBConnection (Test)
XML Eigenbau-Serialisierung (rw_smallxml), kein Xerces/libxml
Kompression ZLIB (System, via find_package)
Test-Framework CTest + Catch2 v2.13.10

Key Concepts

Entity-Hierarchie

Paket → Patientenfall → Behandlungsfall (BHF)
       → Patientenfall → Behandlungsfall (BHF)
  ...
         Behandlungsfall → Krankenschein → Tag → Leistung
                          → BHD (BehandlungZeitraumDatum)
                          → KHF (Krankheitsfall)

Zustandsautomat

  • Paket: R00 → RVF → RWF → RNF → R01 (Vorbereitung → Regelung → Abschluss)
  • Schein: AII (OK), RW0 (Fehler), RFS (Stop, hoechste Prioritaet)
  • Leistung: Status 0/2/3/4/5 + Flags (unsichtbar, plausibel, hinweis, loeschend_wirksam)

2-Stufen-Regelprozess

1. BILDUNG:  RegelMaschine::regelFaelle()       — Zaehler deklarieren+inkrementieren
2. AUSWERTUNG: RegelMaschine::zaehlerAbhaengigeFaelleRegeln() — mit fertigen Zaehlerstaenden

Dokumentation

Dokument Inhalt
ARCHITECTURE.md Architektur, Entity-Hierarchie, Zustandsautomat, Speichermodell, Regel-Pipeline
DOMAIN.md Domänen-Glossar (GOP, BHF, LUG, KHF, LANR, …)
REFACTORING.md Refactoring-Fortschritt und naechste Schritte
improvements.md Verbesserungsvorschläge + Status (Session 4)
AGENTS.md Verhaltensregeln fuer Coding Agents

License

Proprietaer. Copyright 2006–2010 Martin Richardt, ms management systems GmbH.