grok-botandClaude Opus 4.8 43da908f57
CI / ubuntu-latest · Clang · C++17 (pull_request) Failing after 8m52s
Code Quality / cppcheck (pull_request) Has been cancelled
feat: CI-Compiler auf Clang 18 umgestellt (GCC→Clang)
- CI: g++-13 → clang++-18 mit explizitem CMAKE_CXX_COMPILER
- Devbox: gcc@13 → clang@18, CC/CXX auf clang/clang++
- Ziel: gleicher Compiler (Clang) auf macOS und Ubuntu
- CMakeLists.txt Clang-Sektion bereits plattformneutral (AppleClang + LLVM Clang)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 07:38:00 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-10 09:38:21 +02:00
2026-05-24 10:42:16 +02:00

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 (Build-Toolchain), C++98/03 (Original-Codebasis)
  • Umfang: ca. 170 .cpp / 190 .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/         # Aktionen (Beanstanden, Streichen, Ersetzen)
│   ├── 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/               # Statisch gelinkte ZLIB
│   └── aktsource/          # ⚠️ Generierte Stammdaten (~100MB, niemals lesen!)
├── rw-interface/           # XML-Schema (RW-Auftrag.xsd, RW-Ergebnis.xsd)
├── tests/                  # 12 Unit-Tests + 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 (Build), C++98/03 (Codebasis)
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 1.2.3 (statisch)
Test-Framework CTest (kein GoogleTest/Catch2)

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
AGENTS.md Verhaltensregeln fuer Coding Agents

License

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

S
Description
No description provided
Readme
29 MiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 99.9%