Regelstruktur
Deskription von Regeln
Jeder Regel von Absatz (1) nach (6) wird wichtiger und überschreibt die vorhergehende Regel. Explizit wird dies in der (verkürzt dargestellten) Abfolge: Bei Zentralstaaten ist Solvawert 100, wenn Rating vorhanden, dann der aus dem Rating abgeleitete Wert. Wenn aber EU-Mitgliedstaat dann 0, wenn Drittstaat und anerkannt dann auch 0 und wenn MEIP-Wert vorliegt, dann diesen verwenden.
In eine an VBA orientierten Programmierdesciption würde der Paragraph §4 Absatz (1) wie folgt aussehen. Es sei aber darauf hingewiesen, dass diese fachlich richtige Darstellung hinsichtlich Performance absolut ungeeignet ist, für große Mengen sinnvoll zu arbeiten. Siehe dazu auch „Technisches Konzept“.
Summary
Die Deskiption von Regeln ist einerseits durchaus aufwändig, weil eben Hierarchien der Regeln exakt durchdacht werden muß, ist aber an sich keine wirklich große Arbeit in der Erstellung. Eher schon aufwändig ist das Zusammentragen der exakten Definitionen von Staatenlisten usw. Aber auch das ist mit etwas Fleiß schnell und sicher leistbar. Spannender wird auf jedenfall die Datenhistorie und der Gesamtkontext von Verträgen.
´ Wir müssen zunächst die EU-Staaten definieren und erweiterbar halten. Diese Funktion liefert uns bei Aufruf alle EU-Staaten zum aktuellen Zeitpunkt. Bis jetzt haben wir keinen Bedarf bezüglich eines Stichtages die damals jeweiligen EU-Staaten zu ermitteln
function EU-Staat()
EU-Staat = { "Deutschland", "Österreich", "Italien" . . . . . .}
end function
´ Diese Funktion liefert uns die Menge an Staaten, die zwar offizielle Staaten sind, aber nach den Regeln nicht vergleichbar sind und damit nicht „anerkannt“ sind nach §4 (5), also nur Staaten für §4 Absatz (1) unseres » Beispiels
function sonstiges_Drittland()
sonstiges_Drittland = { "China", "Afghanistan"; "Iran" . . . . }
end function
´ Staatenmenge für die Regel nach Absatz (5) unseres Beispiels
function anerkannt_Drittland()
anerkannt_Drittland = { “Australien”, “USA” . . . . }
end function
´ Dies Funktion ermittelt die Nationalbank(en) zu einem im Aufruf übergebenen Staat bzw. übergebene Staatenliste
function Nationalbanken(Staatenauswahl)
Bankenmenge = {} ‘ Vorbelegung ist erstmal die leere Menge
for i = 1 to Mengenanzahl(Staatenauswahl)
case staatenauswahl (i) of
Österreich: Bankenmenge = Bankenmenge & { "ÖNB"}
Deutschland: Bankenmenge = Bankenmenge & { "Bundeszentralbank"}
Italien:. . . .
. . .
End case
next i
Nationalbanken = Bankenmenge
end function
´Jetzt benötigen wir die Währung zu einem Staat oder einer Nationalbank
function Nationalwährung(Emittent)
case Emittent of
Österreich, ÖNB: Nationalwährung = Eur
Deutschland, Bundeszentralbank: Nationalwährung = Eur
USA, FBA: Nationalwährung = USD
. . . .
End case
Nationalbanken = Bankenmenge
end function
´ Einfache Funktion, um eine Menge darauf zu testen, ob diese ein bestimmtes zu prüfendes Element enthält, also ob z.B. ein Staat in einer Staatenmenge enthalten ist, oder eine Nationalbank in einer Menge von Banken
function is_member_in(Member, Auswahl)
enthalten = false
for i = 1 to Mengenanzahl(Auswahl)
If Auswahl(i) = Member then enthalten = true
next i
Is_member_in = enthalten
end function
´jetzt lesen wir die Feeds von Ratingagenturen und geben zurück, ob es einen Ratingwert gibt, und welchen, oder ob keinen Wert in der Datenbank auffindbar ist
function Rating (Emittent)
lese_rating_feed_von_agentur() ´ verkürzte Darstellung
if rating_exists then
Rating = Agenturdaten
else
Rating = MISSING
end if
end function
´ Diese Funktion wandelt die Ratingwerte in Bonitätsstufen bzw. gleich in dessen Solvawerte um. Dazu ist von FMA natürlich eine weitere Information notwendig, bzw. sobald diese vorliegt in dieser Funktion abzulegen. Es ist auch völlig klar, dass diese Transformation zwischen Ratingwerten und Solvabilitätszahlen nicht statisch ist, sondern variabel und ggf. sogar abhängig von weiteren Einflussfaktoren sein kann.
function transfer_rate(Ratingwert)
case ratingwert of
AAA : transfer_Rate = 0
AA : transfer_Rate = 20
A : transfer_Rate = 40
. . . . .
end case
end sub
‘ Hier können einzelne Ausnahmen nach Absatz (5) konfiguriert werden. Wird keine geeignete Ausnahme gefunden wird ein Abschlußwert von 999 geliefert, der nie kleiner sein, als ein bisher gefundener Solvabilitätswert. Damit klappt dann die Abschlußprüfung in der Hauptroutine
function prüfe_Ausnahme5(Emittent,Währung)
if Emittent = Schweiz and Währung = CHF then prüfe_Ausnahme5 = 0
if Emittent = SchweizerRegierung and Währung = CHF then prüfe_Ausnahme5 = 0
if Emittent = …. and Währung = … then prüfe_Ausnahme5 = 20
prüfe_Ausnahme5 = 999
end function
´ Prüfe ob MEIP Bewertung existiert, und welcher existiert
function MEIP (Forderung)
lese_MEIP_feed
if exist then
MEIP = Agenturdaten
else
MEIP = MISSING
end function
' Im nächsten Schritt wandeln wir MEIP Werte in Solvabilitätszahlen um
function transfer_MEIP(Wert)
case Wert of
0: transfer_MEIP = 0
1: transfer_MEIP = 20
2: transfer_MEIP = 50
3: transfer_MEIP = 100
. . .
end case
end sub
´ Jetzt folgt die Hauptfunktion, die die zuvor definierten Funktionen nutzt und die Regeln abarbeitet
function Was_ist_solva_Wert (Emittent, Währung)
solvavalue = MISSING
if ( is_member_in(emittent,sonstiges_Drittland()) or
is_member_in(emittent,Nationalbank (sonstiges_Drittland())
) then
If Rating (Emittent) = Missing Then solva_value = 100 ´Regel (1)
Else solvavalue = transfer_rate(Rating(Emittent)) ´Regel (2)
if emittent = EU-Zentralbank then solvavalue =0 ´Regel (3)
if ( is_member_in(Emittent, EU-Staat()) or
is_member in(Emittent, Nationalbanken(EU-Staat())
) and Währung = Nationalwährung (Emittent)
then solvavalue = 0 ´Regel (4)
regel5wert = prüfe_Ausnahme5(Emittent,Währung)
if regel5wert < solvavalue then solvalue = regel5wert ´Regel (5)
if not(MEIP (Forderung) = MISSING) then ´Regel (6)
solvavalue = transfer_MEIP (MEIP(Forderung))
Was_ist_Solva_Wert = solvavalue
end function
´So könnte ein Aufruf im Hauptprogramm aussehen
public sub ()
Was_ist_Solva_Wert(Deutschland, USD)
Was_ist_Solva_Wert(EU-Zentralbank, Eur)
Was_ist_Solva_Wert(US_Nationalbank, Eur)
Was_ist_Solva_Wert(US_Nationalbank, USD)
end sub
zurück zu » Solvabilität Überblick
zurück zu » Fachliches Mapping
zurück zu » Mapping Beispiel
weiter zu » Historische Daten










