Zum Inhalt springen
Degelmann Solutions

Methodik

Der Nachweis, der sich selbst beschreibt

Warum ein Rechenlauf die verwendeten Tafelwerte mitführen muss – und was auch dann noch zu prüfen bleibt.

Moritz Degelmann, Aktuar DAV · 14. Oktober 2026

Kurzfassung

Nach einer Importkorrektur werden aus 149,02 Euro Nettobeitrag 122,55 Euro. Die archivierte Fassung erklärt den Unterschied. Der Trace zeigt zusätzlich, welche Werte tatsächlich an die Rechnung übergeben wurden – und hält diese Auswahl auch ohne Wiederholungslauf lesbar.

Ein Importfehler ist behoben, der neue Nettobeitrag stimmt. Offen bleibt, warum die vorige Rechnung einen anderen Betrag ausgewiesen hat. Ein Trace – das Ausführungsprotokoll der Rechnung – verbindet die damals verwendeten Eingaben mit den ausgeführten Modulen und dem Ergebnis. Damit lässt sich der alte Betrag prüfen, auch nachdem der Import korrigiert wurde. Zusammen mit dem zugeordneten Archiv bildet der Trace den Rechen-Nachweis: das Protokoll des konkreten Laufs und die Unterlagen, auf die es verweist.

Rechenbeispiel

Ein Zahlendreher, zwei Nettobeiträge

Betrachtet wird eine einjährige Todesfallabsicherung für eine 42-jährige Person. Die Versicherungssumme beträgt 100.000 Euro, die Todesfallleistung wird am Jahresende fällig. Bei 2 % Rechnungszins ist der zu Jahresbeginn zahlbare Nettobeitrag der erwartete Barwert dieser Leistung; Kosten und Sicherheitszuschläge bleiben unberücksichtigt:

P=S q421+iP = \frac{S\,q_{42}}{1+i}
Vor KorrekturNach Korrektur
ImportT-17T-18
q₄₂0,001520,00125
Nettobeitrag149,02 €122,55 €

Beim Import wurden zwei Ziffern vertauscht: Eingelesen wurde 0,00152 statt 0,00125. Der korrigierte Nettobeitrag liegt 26,47 Euro niedriger.

Gewählte Beispielannahmen, keine reale Tafel und kein konkreter Tarif. Korrigiert wird nur der Import; Versicherungssumme, Rechnungszins und Rechenvorschrift bleiben gleich. Kaufmännische Cent-Rundung erst beim Endbetrag.

In Den Rechenkern komponiert man endet die Prüfung bei den tatsächlich ausgeführten Modulen, Parametern und Referenzdaten. Ihre dauerhafte Aufbewahrung bleibt dort als weitere Aufgabe offen. Hier beginnt sie: Was muss vom konkreten Lauf erhalten bleiben, damit ein Dritter seine Grundlage später noch beurteilen kann?

Die DAV-Richtlinie zu den allgemeinen Grundsätzen aktuarieller Tätigkeiten behandelt Reproduzierbarkeit, Änderungskontrollen und den Vergleich von Modellergebnissen ausdrücklich [1]. Sie schreibt dafür kein Dateiformat vor. Der folgende Vorschlag übersetzt diese Prüfaufgaben in eine Architektur für deterministische Referenzrechner.

1 · Eine Datenkorrektur braucht eine neue Kennung

Im Beispiel ändert sich keine tarifliche Rechnungsgrundlage, sondern ihre Übernahme in den Rechner. T-17 bezeichnet den fehlerhaften Import, T-18 den korrigierten. Es gilt dieselbe Regel wie für Quellen in Ein Beleg ohne Stichtag ist kein Nachweis: Unter einer vergebenen Kennung darf kein anderer Inhalt erscheinen. Das W3C trennt bei veröffentlichten Daten entsprechend zwischen einer Kennung für die einzelne Fassung und einer Kennung für die Serie, die auf die jeweils neueste Fassung zeigen darf [2]. Auf einen Referenzrechner übertragen: „aktueller Import“ kann eine Auswahlhilfe sein, aber keine dauerhafte Grundlage eines Rechennachweises.

Die Datenhaltung muss das Überschreiben verhindern und alte Fassungen für die vorgesehene Aufbewahrungsdauer erhalten. Vor einer Rechnung werden alle Datenverweise auf konkrete Fassungen festgelegt; sie gelten für jeden folgenden Rechenschritt. Sonst könnte eine laufende Rechnung bei einer zwischenzeitlichen Korrektur beide Importe vermischen.

2 · Der Trace verbindet Eingaben, Modulaufrufe und Ergebnis

Der Einwand liegt nahe: Wenn T-17 unveränderlich archiviert ist und L-41 darauf verweist, wozu den Wert noch einmal speichern? Für die Nachrechnung des Beispiels reicht die Fassung zusammen mit Altersauswahl und Rechenvorschrift. Die Kennung allein belegt aber nicht, was das Rechenmodul tatsächlich erhielt. Dazwischen liegt die Auflösung: Altersbestimmung, Auswahl der Spalte und Zugriff auf die konkrete Datei. Bei einem fehlenden exakten Treffer kann eine Suchregel auf eine Dateifassung mit passendem Namenspräfix ausweichen; ein späteres Modul kann die Tafel erneut laden. Eine im Lauf benannte Fassung beweist noch nicht, dass jeder Zugriff dieselben Daten geliefert hat.

Ohne aufgelöste Werte

Nur Datenfassung im Lauf benannt

Archivierter Import T-17 Auswahl und Wert nicht festgehalten Altes Ergebnis · L-41 149,02 €

Mit aufgelösten Werten

Übergabe an das Rechenmodul erfasst

Archivierter Import T-17 Alter 42 · Spalte qx 0,00152 Altes Ergebnis · L-41 149,02 €
Beide Seiten benennen denselben archivierten Import. Rechts hält der Trace zusätzlich fest, welche Auswahl und welcher Wert an die Rechnung übergeben wurden.

Die Auflösung muss deshalb Fassung, Auswahlmerkmale und Wert gemeinsam liefern. Dieses Objekt geht unverändert an Rechenmodul und Trace. Das Rechenmodul bezieht seine Referenzdaten ausschließlich aus diesem Objekt; weitere benötigte Werte werden vor dem Aufruf aufgelöst. Damit steht im Nachweis, ob die Rechnung den Wert für Alter 42 oder 43 erhielt. Die archivierte Datei beantwortet, was dort stand; die protokollierte Übergabe beantwortet, was davon verwendet wurde. Selbstbeschreibend heißt hier: Wert, Bedeutung, Auswahl und Verwendung bleiben zusammen lesbar. Auch ohne lauffähige alte Umgebung kann ein Prüfer diese Auswahl gegen die Unterlagen halten. Das ersetzt keinen Wiederholungslauf.

Das Provenienzmodell PROV-DM des W3C unterscheidet Datenobjekte, Verarbeitung und Verwendung [3]. Darauf baut der folgende Vorschlag mit vier Abschnitten auf:

Aufbau des Trace

Trace L-41(Beispiel) 01Laufkopf Laufkennung · Zeitpunkt · Stichtag Anlass · Vorgängerlauf · Status Programmversion · Formatversion Protokolltiefe: Modulaufrufe 02Eingaben und Herkunft Vertragsdaten · aufgelöste Tarifparameter T-17 · Alter 42 · Spalte qx q₄₂ = 0,00152 Summe 100.000 € · Zins 2 % Präzision: 28 Stellen 2 Endstellen · ROUND_HALF_UP 03Modulaufrufe in Reihenfolge Aufgerufenes Modul · übergebene Eingabe Zurückgegebene Ausgabe 1 nettobeitrag Eingabe: Werte aus Abschnitt 02 Ausgabe: 149,02 € 04Ergebnis Nettobeitrag 149,02 € EUR · aus Aufruf 1
Vorgeschlagene Gliederung. Im Beispiel wird ein Modulaufruf erfasst; seine internen Rechenoperationen bleiben im Programmcode.

Der Trace entsteht am tatsächlichen Modulaufruf. Die Protokollierung erfasst, welches Modul aufgerufen wird, welche Eingaben es erhält und was es zurückgibt. Die Rechenlogik steht einmal im ausgeführten Code. Eine zusätzlich gepflegte Formelbeschreibung könnte davon abweichen.

Die Protokolltiefe folgt dem Modulschnitt. Die benannten Zwischenergebnisse erscheinen als Ausgabe eines Moduls und Eingabe des nächsten im Trace. Die vom deterministischen Kern verlangte Protokollierbarkeit setzt voraus, dass fachlich benötigte Zwischenwerte an solchen Grenzen zugänglich sind. Im kleinen Beispiel genügt ein Modul für den Nettobeitrag; seine internen Hilfsgrößen werden nicht zusätzlich aufgezeichnet.

Konventionen werden vor der Ausführung zu Eingaben aufgelöst. So wird die in Mehr Korrektheit ist ein Anti-Feature geforderte Sichtbarkeit konkret: Das Modul erhält die anzuwendende Rundung und verwendet genau diese. Im folgenden Ausschnitt sind Präzision, Rundungsmodus und Stellenzahl Eingaben; gerundet wird der Endbetrag. Die Daten- und Konventionsauflösung ist hier bereits abgeschlossen.

Technisches Detail: den Modulaufruf protokollieren
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP, localcontext
from uuid import uuid4

@dataclass(frozen=True)
class Eingabe:
    datenfassung: str
    alter: int
    qx: Decimal
    versicherungssumme: Decimal
    rechnungszins: Decimal
    praezision: int
    rundungsmodus: str
    endstellen: int

eingabe = Eingabe(
    "T-17", 42, Decimal("0.00152000"),
    Decimal("100000"), Decimal("0.02"),
    28, ROUND_HALF_UP, 2
)

def nettobeitrag(e):
    with localcontext() as kontext:
        kontext.prec = e.praezision
        kontext.rounding = e.rundungsmodus
        barwert = (e.versicherungssumme * e.qx
                   / (1 + e.rechnungszins))
        endstelle = Decimal(1).scaleb(-e.endstellen)
        return barwert.quantize(endstelle)

def mit_trace(modul, eingabe):
    ausgabe = modul(eingabe)
    return ausgabe, {
        "modul": modul.__qualname__,
        "eingabe": eingabe, "ausgabe": ausgabe,
    }

lauf_id = str(uuid4())
beitrag, aufruf = mit_trace(nettobeitrag, eingabe)

trace = {
    "lauf": lauf_id, "eingaben": eingabe,
    "aufrufe": (aufruf,), "ergebnis": beitrag,
}

uuid4() erzeugt beim Start eine neue zufällige Laufkennung, die im Trace erhalten bleibt. L-41 und L-42 sind im Essay kurze Beispielnamen für solche Kennungen.

mit_trace ruft die übergebene Funktion einmal auf und übernimmt ihren Namen, dasselbe Eingabeobjekt und den zurückgegebenen Wert. class bündelt hier unveränderliche Einzelwerte; frozen=True sperrt spätere Feldzuweisungen. Decimal rechnet mit der übergebenen Präzision, hier 28 signifikanten Stellen. ROUND_HALF_UP bezeichnet die kaufmännische Rundung; endstellen=2 legt die Cent-Ausgabe fest. Der Rundungszeitpunkt am Ende gehört zur Vorschrift dieses Moduls.

trace enthält danach einen Aufruf samt Endbetrag im Arbeitsspeicher. Der Funktionsname allein kennzeichnet noch keinen Programmstand; dessen eindeutige Zuordnung gehört zum Archiv in These 3. Weitere Laufmetadaten, Fehlerbehandlung und Archivierung sind hier ausgelassen.

Diese Tiefe kostet Speicher und Laufzeit. Für Einzelvertragsprüfungen und Testbestände sieht der Vorschlag eine vollständige Erfassung an den fachlich benannten Modulgrenzen vor. Im Bestandslauf ist der Umfang eine begründete Entscheidung nach Prüfzweck und Risiko; die DAV-Richtlinie setzt den Umfang der Modell-Governance entsprechend zum Modellrisiko ins Verhältnis [1]. Was nicht erfasst wurde, lässt sich später auch nicht als damalige Zwischenrechnung ausweisen. Die gewählte Tiefe gehört deshalb in den Laufkopf.

3 · Zum Trace gehört ein verlässlich aufbewahrtes Archiv

Der Trace zeigt, was verwendet wurde; das Archiv stellt die Grundlagen für die Wiederholung bereit; die Wiederholung prüft, ob sich damit die protokollierten Ergebnisse erneut erzeugen lassen. Das konkretisiert die Arbeitsteilung zwischen Nachweis und Wiederholung für den Rechenkern.

Der Trace enthält Werte und Verweise. Die referenzierten Dateien müssen zusätzlich erhalten bleiben: Datenfassungen, Rechenvorschriften, Feldbeschreibungen sowie für eine maschinelle Wiederholung die ausgeführten Programme, Bibliotheken und die relevante Laufzeitumgebung. Eine Versionsbezeichnung im Trace ersetzt diese Dateien nicht.

Ein Manifest – das Dateiverzeichnis des Archivpakets – verbindet Trace und Dateien über ihre Kennungen und Prüfsummen. Beim Lesen werden die Prüfsummen erneut berechnet und verglichen. Das Archivformat BagIt trennt entsprechend zwischen Vollständigkeit und geprüfter Inhaltsintegrität [4]. Einzubeziehen sind auch die Feldbeschreibungen: Eine nachträglich geänderte Einheit würde die Bedeutung eines unveränderten Zahlenwerts verändern.

Eine passende Prüfsumme garantiert keine vertrauenswürdige Herkunft. Wer Datei und Prüfsumme gemeinsam austauschen kann, kann die Prüfung unterlaufen. Auch RFC 8493 nennt diese Grenze [4]. Dafür braucht es geschützte Aufbewahrung und, je nach Anforderung, eine überprüfbare Signatur. Ob die archivierte Umgebung einen maschinellen Wiederholungslauf ermöglicht, muss wiederum durch einen solchen Lauf geprüft werden.

Der Rechen-Nachweis ersetzt schließlich keine fachliche Prüfung. Auch eine falsch ausgewählte Sterbewahrscheinlichkeit kann lückenlos dokumentiert sein; ihre Zulässigkeit entscheidet die Tarifvorschrift.

4 · Die Korrektur ergänzt die Geschichte

Zum korrigierten Import gehören Anlass, Vorgängerfassung und fachliche Freigabe. Wird eine Neuberechnung freigegeben, entsteht L-42 mit T-18, verbunden mit dem früheren Lauf L-41. Dessen Trace bleibt erhalten. Auch eine Wiederholung mit gleichen Eingaben erhält eine eigene Laufkennung. Die Ergebnisdifferenz im Beispiel lässt sich der Importkorrektur zuordnen, weil die übrigen Eingaben und Programme gleich bleiben.

War der alte Nettobeitrag ein Sollwert im Abgleich, betrifft die Korrektur auch die damit beurteilten Ergebnisse. Abweichungen, die mit L-41 erklärt oder akzeptiert wurden, müssen auf ihrer korrigierten Grundlage erneut geprüft werden. Der alte Befund bleibt dokumentiert; er wird durch eine neue Bewertung ergänzt.

Für die Auswirkungsanalyse lassen sich zunächst alle Läufe suchen, die T-17 verwendet haben. Das ist ein Suchraum, noch keine Liste geänderter Ergebnisse: Ein Lauf kann andere Zeilen der Tafel nutzen, ein korrigierter Wert nur mittelbar eingehen oder eine Änderung durch Rundung verschwinden. Die fachliche Bewertung bleibt eine eigene Prüfaufgabe; die DAV-Richtlinie behandelt entsprechend Änderungskontrolle und den Umgang mit unterschiedlichen Modellergebnissen [1].

Die Gegenprobe für diese Architektur ist konkret: Nach der Importkorrektur wird der Zugriff auf die aktuellen Importdateien gesperrt. Lässt sich der alte Lauf aus seinem Archiv weiterhin prüfen? Scheitert das Überschreiben von T-17? Protokolliert erst der gesonderte Korrekturlauf die neuen Werte? Das sind technische Prüfungen; die Richtigkeit der Korrektur braucht eine unabhängige fachliche Erwartung.

In unserer Arbeit an Referenzrechnern ist das der Maßstab: Die Korrektur verbessert die nächste Rechnung. Der Nachweis erklärt weiterhin, warum die vorige anders ausfiel.

Quellen

  1. [1] Deutsche Aktuarvereinigung (2024): Berufsständische Verhaltensnormen – Allgemeine Grundsätze betreffend alle aktuariellen Tätigkeiten. Richtlinie, 02.10.2024. Status und Anwendungsbereich: Präambel, S. 2; risikoadäquate Modell-Governance und Reproduzierbarkeit: Ziff. 2.10–2.10.2, S. 12–13; Änderungskontrolle und Verwendung von Ergebnissen: Ziff. 2.10.5–2.10.6, S. 13–14. Abgerufen am 13.10.2026.
  2. [2] W3C (2017): Data on the Web Best Practices. Recommendation vom 31.01.2017. Versionshistorie: Best Practice 8, Abschn. 8.6; getrennte Kennungen für einzelne Fassungen und eine fortgeschriebene Serie: Best Practice 11, Abschn. 8.7, insbesondere „Possible Approach to Implementation“. Abgerufen am 13.10.2026.
  3. [3] W3C (2013): PROV-DM: The PROV Data Model. Recommendation vom 30.04.2013. Unterscheidung zwischen Datenobjekt, Verarbeitung, Erzeugung und Verwendung: Abschn. 5.1.1–5.1.4; Revision als Beziehung zwischen überarbeiteter und vorausgehender Fassung: Abschn. 5.2.2. Abgerufen am 13.10.2026.
  4. [4] Kunze, J. et al. (2018): The BagIt File Packaging Format (V1.0). RFC 8493, Oktober 2018, Kategorie Informational. Dateiverzeichnis mit Prüfsummen: Abschn. 2.1.3; Vollständigkeit und Integritätsprüfung: Abschn. 3; Grenzen gegenüber gezielten Manipulationen: Abschn. 5.4. Abgerufen am 13.10.2026.

Diesen Essay weitergeben: