Bezeichnung des Algorithmus | XEN_Letztrisiko |
Kurzbezeichnung | Ableitung des Letztrisikos |
Verbale Beschreibung/Beispiele | Die zugrunde liegenden Annahmen und rudimentärsten Mechanismen des Letztrisikoalgorithmus sind in Darstellung des Letztrisikos beschrieben. Eine Beschreibung des Ableitungs-Algorithmus in der Formalsprache des Datenmodells findet sich ebenfalls anbei, jedoch ist dieser verbalen Beschreibung über die Bestimmung des Letztrisikos prinzipiell Priorität einzuräumen. Grundsätzlich gibt es vier Mechanismen, durch die ein Risikotransfer stattfinden kann:
Wenn keiner dieser Mechanismen zur Anwendung kommt, dann werden die Letztrisiko-Attribute entsprechend der ursprünglichen Gegenpartei bestimmt. Somit entsprechen Land, Sektor und Wertart jenen des ursprünglichen Datensatzes:
Bei der Bestimmung der LR_Letztrisiko-Attribute ist wichtig, dass für LR01_Land_Code und LR02_Sektor_Code immer prioritär eine OeNB-Einheiten-Sicht verwendet wird. Dies ist auch bei der Bestimmung des Risikotransfers aufgrund einer Hauptanstalt-Zweiganstalt-Beziehung zu berücksichtigen. Initialisierung: betroffene Geschäftsfälle und WertartenDie Bestimmung des Letztrisikos betrifft beinahe alle Geschäftsfälle, dennoch sollte die Letztrisiko-Entität nicht mit allen Geschäftsfällen initialisiert werden. Weiters ist das Letztrisikos auf bestimmte Wertarten beschränkt. Die folgenden Wertarten sind für den Zweck des Letztrisikos relevant:
Folgende Meldekonzepte selektieren die Geschäfstfälle, die potenziell einen Risikotransfer erfahren: Kredit-Cube:
Wertpapier-Cube:
Einlagen und Sachkonten-Cube:
Bestimmung des Letztrisikos in Verbindung mit WertartenDie verschiedenen Wertarten erfahren ebenfalls einen Risikotransfer zur Einheit, der das Letztrisiko zugeordnet wird. Für den Zweck der Bestimmung des Letztrisikos wird der Ausstehende Nominalwert zusammen mit der Zinsabgrenzung als Einheit gesehen, jedoch erfährt der Ausstehende Nominalwert bei einem teilweisen Risikotransfer diesen prioritär vor der Zinsabgrenzung. Der verbleibende Risikotransfer wird aliquot auf die Zinsabgrenzung Soll aus Agio/Disagio und die sonstigen Zinsabgrenzungen Soll verteilt. Unwiderrufliche Kreditrahmen erfahren nur im Falle einer Überbesicherung über die Summe aus Ausstehender Nominalwert und Zinsabgrenzung einen Risikotransfer, sind also diesen gegenüber nachrangig zu behandeln. Beispiel 1: Einmalkredit Ausstehender Nominalwert 1000, mit Zinsabgrenzung-Soll sonstige (20) und Unwiderruflicher Rahmen (100) Beispiel 1a: Sicherheit mit Wert 1200: Vollständiger Risikotransfer der Sicherheit auf Ausstehender Nominalwert, Zinsabgrenzung und unwiderruflicher Rahmen. Das Letztrisiko für all diese Wertarten liegt bei der Sicherheit. Beispiel 1b: Sicherheit mit Wert 1020: Risikotransfer durch die Sicherheit der Wertarten Ausstehender Nominalwert und Zinsabgrenzung Soll sonstige (Kundensicht); das Letztrisiko für diese beiden Wertarten liegt bei der Sicherheit. Kein Risikotransfer des unwiderruflichen Rahmens, das Letztrisiko liegt weiterhin bei der ursprünglichen Einheit. Beispiel 1c: Sicherheit mit Wert 1010. Risikotransfer durch die Sicherheit der Wertart Ausstehender Nominalwert. Teilweiser Risikotransfer für die Wertart Zinsabgrenzung Soll - sonstige (Kundensicht) (Wert 10); das Letztrisiko für diese beiden Wertarten liegt bei der Sicherheit. Kein Risikotransfer für einen Teil der Zinsabgrenzung Soll - sonstige (Kundensicht) (Wert 10) und des kompletten unwiderruflichen Kreditrahmens, das Letztrisiko liegt weiterhin bei der ursprünglichen Einheit. Wertart Nominale Die Wertart Nominale wird bei der Bestimmung des Letztrisikos nur für die Meldekonzepte außerbilanzielle Geschäfte und Finanzderivate verwendet und sollte bei der Initialisierung bei Derivaten weiter auf begebene Kreditderivate eingeschränkt werden. Die Nominale-Wertart stellt den Garantie-Teil des Kreditderivats dar. Hinweis: Die Wertart Nominale für Kreditderivate ist beim Risikotransfer prioritär nach ihrem Underlying aufzulösen (Siehe Kreditderivate - Besondere Geschäftsfälle). Formen des RisikotransfersAufgrund verschiedener Mechanismen des Risikotransfers werden die Letztrisiko-Attribute eines Geschäftsfalle nicht der unmittelbaren Gegenpartei zugeordnet. Zwischen den verschiedenen Formen des Risikotransfers besteht, unter anderem auch aufgrund der Modellierung im Datenmodell, eine Hierarchie: So sind beispielsweise Sicherheiten immer prioritär zur Bestimmung des Letztrisikos zu verwenden, bzw. muss jede Einheit überprüft werden, ob es sich um eine unselbstständige Zweiganstalt handelt. Prinzipiell (als Ausnahme, aufgrund der Datenmodellierung, siehe Besondere Geschäftsfälle – Kreditderivate) wird zur Bestimmung die folgende Reihenfolge angewandt:
Ein jeder Geschäftsfall soll in dieser Reihenfolge solange aufgelöst und einer Einheit zugeordnet werden, bis keine weitere Auflösung mehr möglich ist. Dann erst ist die Einheit des Letztrisikos bestimmt und die Letztrisiko-Entität Attribute können auf Basis dieser Einheit bestimmt werden. Im Zuge der Auflösung kann es auch zu einer Aufteilung des ursprünglichen Datensatzes kommen. So wird beispielsweise bei einer Teilbesicherung, der besicherte Teil der mit der Einheit verbundenen Sicherheit und ein anderer Teil etwa der ursprünglichen Einheit zugeordnet. Oder im Falle eines Look-Throughs wird der ursprüngliche Datensatz vollständig in die durchgeschauten Datensätze zerlegt. Wesentlich ist jedoch, dass durch die Auflösung des Risikotransfers und die Verteilung in verschiedene Datensätze, die Summen der jeweiligen Wertarten nicht ändern können. So muss etwa die Summe aller Ausstehenden Nominalwerte vor Anwendung des Letztrisiko-Algorithmus immer der Summe der Ausstehenden Nominalwerte nach der Anwendung des Algorithmus sein. Der Letztrisiko-Algorithmus in der Formalsprache iteriert über jeden Geschäftsfall und zerlegt ihn in seine weiteren Bestandteile. Ist ausschließlich eine „tiefer“ liegende Einheit für das Letztrisiko relevant, und die ursprüngliche Einheit (z.B. durch eine vollständige Besicherung) irrelevant, wird der ursprüngliche Geschäftsfall aus der LR-Entität entfernt. Findet nur ein teilweiser Risikotransfer statt, wird der ursprüngliche Datensatz in der LR-Entität lediglich um den transferierten Betrag reduziert. Anschließend wird für jeden Risikotransfer ein neuer Datensatz in der LR-Entität angelegt (jeweils mit und für die ursprünglichen Wertarten). Somit ist garantiert, dass die Summe der Wertarten immer konstant bleibt. Für eine exemplarische Darstellung dieser Vorgehensweise siehe Algorithmus Beispiele. Im Folgenden werden die verschiedenen Formen des Risikotransfers im Detail beschrieben: SicherheitenSicherheiten sind prinzipiell prioritär gegenüber anderen Formen des Risikotransfers zu behandeln. Als Sicherheiten für die Bestimmung des Letztrisikos werden alle Sicherheiten gem. Zerlegungsansatz "CoRep (COR)" herangezogen; der anrechenbare Wert der Sicherheit entspricht dem anrechenbaren Wert gemäß CoRep. Wie oben beschrieben sind prioritär Ausstehender Nominalwert, Marktwert, Nominale und Zinsabgrenzung und anschließend erst der unwiderrufliche Kreditrahmen zu behandeln. Kreditrahmen werden also nur im Falle einer Überbesicherung (des ursprünglichen Geschäftsfalles) vom Risikotransfer erfasst. Der Wert der Sicherheiten, die über die Summe aus Ausstehender Nominalwert, Zinsabgrenzung und Unwiderruflichen Kreditrahmen hinausgeht (Überbesicherung) führt zu keinem Risikotransfer und ist zu ignorieren. Die Aufteilung auf die der Sicherheit zugeordneten Einheiten erfolgt immer aliquot pro Sicherheit (gemäß ihrem Sicherungswert) auf alle betroffenen Wertarten (siehe Beispiel 2). Für jeden besicherten Geschäftsfall wird in der formalen Beschreibung des Letztrisikoalgorithmus der Risikotransfer folgendermaßen vorgenommen: Reduziere den Wert des ursprünglichen Geschäftsfalls um den besicherten Betrag, bzw. lösche den Geschäftsfall aus der LR_Letztrisiko-Entität im Falle eine Voll-/Überbesicherung (die ursprüngliche Einheit ist in diesem Fall nicht mehr relevant). Im Falle einer Überbesicherung reduziere ggf. den unwiderruflichen Rahmen, um den überbesicherten Anteil. Ist der unwiderrufliche Rahmen in diesem Sinne vollständig besichert, dann lösche die Wertart des unbesicherten Rahmens (die ursprüngliche Einheit ist in diesem Fall auch für den unwiderruflichen Rahmen nicht mehr relevant). Anschließend: Füge für jede Sicherheit, die dem Geschäftsfall zugeordnet wird, für jede vom Risikotransfer betroffene Wertart einen neuen Datensatz hinzu. Wobei jeweils die Einheit der Sicherheit zur Bestimmung der LR_Letztrisiko-Attribute herangezogen wird. Bei Sicherheiten mit den Ausprägungen des ST03_Sicherheitenkategorie_Code "Wohnimmobilie (WI)", "Anrechnungsfähige Gewerbeimmobilien (GB)", ist der LR02_Sektor_Code mit der Ausprägung "Nicht Zuordenbar" (Erweiterte ESVG-Sektor Ausprägung: Code=9999) zu befüllen. Der Wert des neuen Datensatzes entspricht dem aliquoten Anteil der Sicherheit an allen vom Risikotransfer betroffenen Wertarten (siehe Beispiel weiter unten) Nach der Überprüfung auf eine vorliegende Hauptanstalt ist die Bestimmung des Letztrisikos also immer abgeschlossen. Beispiel 2a: Aliquote Aufteilung von Sicherheiten Einmalkredit: Ausstehender Nominalwert 1000, Zinsabgrenzung Soll - sonstige (Kundensicht) 50, Unwiderruflicher Kreditrahmen 100 Beispiel 2b: Aliquote Aufteilung von Sicherheiten Einmalkredit: Ausstehender Nominalwert 1000, Zinsabgrenzung Soll - sonstige (Kundensicht) 100, Unwiderruflicher Kreditrahmen 400 UnderlyingsDie Underlying Beziehung (GB01_Beziehungsart_Code = "Underlying) ist für die Zwecke des Risikotransfers primär für Credit Linked Notes und Kreditderivate relevant. Wesentlich dabei ist, dass bei Kreditderivaten nur das Nominale (jener Teil des Geschäftsfalles, der eine Garantie darstellt) nach ihrem Underlying aufgelöst wird. Die Wertart Marktwert von allen Derivaten wird nicht in diesem Sinne aufgelöst. Somit werden auch Derivate, die keine Kreditderivate darstellen, niemals nach ihrem Underlying aufgelöst. Wichtig: Bei Derivaten werden die Geschäftsfälle nur für die Garantie von begebene Kreditderivate nach ihrem Underlying aufgelöst. Um sicherzugehen, dass keine Sicherheiten, die sich auf den Ausstehender Nominalwert/Marktwert des Derivats beziehen, fälschlicherweise dem Nominale des Derivats zugschrieben werden, wurde in der formellen Beschreibung des Algorithmus diese Auflösung von Kreditderivaten prioritär, noch vor der Sicherheitenzerlegung, implementiert. Näheres dazu unten "Kreditderivate - Besondere Geschäftsfälle". Beispiel 3: Wertpapier mit Underlying (CLN) Look-ThroughBei der Auflösung eines Geschäftsfalles in seine Bestandteile wird der ursprüngliche Geschäftsfall durch die zugrunde liegenden Geschäftsfälle ersetzt. Die Bestimmung der LR_Letztrisiko-Attribute erfolgt für jede Einheit pro zerlegten Teil des ursprünglichen Geschäftsfalls. Da die Werte der zugrunde liegenden Geschäftsfälle für alle Wertarten in Summe immer den Wert des ursprünglichen Geschäftsfalles ergeben müssen (siehe Modellierung des Look-through), wird der Geschäftsfall immer vollständig zerlegt. Aufgrund der vollständigen Zerlegung wird im Algorithmus der ursprüngliche Datensatz der LR_Letztrisiko-Entität immer gelöscht (da immer eine vollständige Zerlegung stattfindet) und pro Wertart für jeden zugrunde liegenden Geschäftsfall ein neuer Datensatz erstellt. Der Wert bestimmt sich immer auf Basis der zerlegten Geschäftsfälle. Hauptanstalt-ZweiganstaltBei der Ermittlung des Letztrisikos werden Geschäftsfälle, die mit Zweigstellen getätigt wurden, betrachtet als wären sie mit der zugehörigen Hauptanstalt getätigt, bzw. von dieser garantiert worden. Zu diesem Zweck werden alle Einheiten (sowohl der originären als auch der aufgelösten Geschäftsfälle) darauf überprüft, ob sie in einer Hauptanstalt-Zweiganstalt-Beziehung stehen (AI_Zusammenfassungstyp_Code = "Hauptanstalt-Zweiganstalt Beziehung", bzw. EO41_Identnummer_Hauptanstalt). Liegt eine dahinter liegende Hauptanstalt vor, wird bei der Bestimmung der LR_Letztrisiko-Attribute die zugehörige Hauptanstalt anstatt der Zweiganstalten verwendet. Im formalen Letztrisiko-Algorithmus wird diese Form des Risikotransfers nicht separat abgehandelt, sondern wird bereits bei jeder Betrachtung oder Auflösung der Einheit berücksichtigt, indem die Einheit überprüft wird, sobald sie für einen Risikotransfer verantwortlich ist. Bei einer solchen Vorgehensweise ist es jedoch auch wesentlich, dass bei der Initialisierung der Geschäftsfälle auf diese Form des Risikotransfers Rücksicht genommen wird. Besondere Geschäftsfälle:Unwiderrufliche Kreditrahmen von Krediten Unwiderrufliche Kreditrahmen sind auf insofern besonders zu behandeln, als dass bei unwiderruflichen Kreditrahmen, wie oben beschrieben, der Risikotransfer von Sicherheiten nur anzuwenden ist, wenn der ursprüngliche Geschäftsfall und eine ggf. zugehörige Zinsabgrenzung bereits vollständig durch die Sicherheiten besichert sind. Der Wert von Sicherheiten, der über diesen Wert des ursprünglichen Geschäftsfalles (Ausstehender Nominalwert + Zinsabgrenzung) hinausgeht führt dann erst zu einem Risikotransfer des unwiderruflichen Rahmens. Analog führt der Risikotransfer bei Fazilitäten außerbilanzieller Geschäfte (Fazilitäten zur Bereitstellung von Garantien etc.) zuerst zum bereits ausgenutzten Teil (Wertart Nominale) und erst anschließend zum ungenutzten Teil der Fazilität. Derivate und Kreditderivate Kreditderivate müssen im LR-Algorithmus speziell behandelt werden, da sie Marktwerte, Garantien und Underlyings vereinigen. Andere Derivate hingegen werden nicht gegenüber ihren Underlyings aufgelöst. Folgendes ist bei Derivaten zu beachten:
Credit Linked Notes CLN sind im Sinne des Länderrisikos nicht speziell zu behandeln. Üblicherweise würde der Ausstehende Nominalwert der CLN aufgrund des Underlyings auf die Einheit des eingebetteten Kreditderivats übertragen. Ist die CLN besichert würde diese Sicherheit prioritär ggü. des Underlyings behandelt, etc. Jedoch sei erwähnt, dass CLN im Sinne des Letztrisikos nicht als Kreditderivate behandelt werden. Weiters sei erwähnt, dass bei der Modellierung vorgesehen ist, dass das Nominale des Underlyings einer CLN dem durch die CLN besicherten Werts im Falle eines Ausfallsereignis entspricht. Sollte nach dem Eintritt eines Kreditereignisses also weiterhin ein Teil des Kapitals einer CLN durch die Gegenpartei zurückzuzahlen sein, wäre dieser Teil nicht dem Kreditrisiko des Underlyings unterworfen und dementsprechend würde dieser Teil des Werts bei der ursprünglichen Einheit verbleiben. Siehe auch Modellierung des Look-through |
Kommt vor in/wird verwendet für |
//Konventionen zum Letztrisiko Algorithmus //Damit der Algorithmus möglich übersichtlich dargestellt werden kann, werden folgende Konventionen verwendet: //Vergleichoperatoren == wird abgekürzt durch ==, != wird abgekürzt durch != //Funktionen können auch Objekte übergeben werden, so kann hier manchen Funktionen das Objekt Einheit übergeben werden. (Dieses Attribut enthält dann alle Attribute des Objektes bzw. Entität und diese können mit Objekt.Attribut in den entsprechenden Algorithmen angesteuert werden. Wir einer Funktion ein Objekt übergeben, so wird das in der Beschreibung hervorgehoben. //Entitäten können auch durch ihre Kürzel angesteuert werden, so kann z.B. die Entität GF_Geschaeftsfall auch durch GF angesteuert werden. //Beginn Hauptfunktion //Dieser Algorithmus geht sukzessive die LR_Letztrisiko Entität durch und überprüft ob die Einträge (Geschäftsfälle) noch weiter im Sinne des Letztrisikos aufgelöst werden können. //Können die Einträge weiter aufgelöst werden, werden sie bei der nächsten Iteration abgehandelt. //Der Algorithmus ist beendet, sobald kein Geschäftsfall mehr weiter aufgelöst werden kann FUNKTION XEN_Letztrisiko(AI_Mandant, AI_Stichtag_Datum) INITIALISIERE_LR_Entitaet() //Start Iteration: Selektiere alle Geschäftsfälle der LR-Entität deren GF_ID nicht Null sind (diese Geschäftsfälle sind weiter auflösbar) LR_gf_aufzulösen = SELEKTIERE ALLE LR_LETZTRISIKO.LR00_GF_ID MIT LR00_GF_ID != NULL WIEDERHOLE SOLANGE LR_gf_aufzulösen NICHT LEER ITERIERE i VON 1 bis Anzahl(LR_gf_aufzulösen) gfk = SELEKTIERE GF00_Geschaeftsfallkategorie VON GF MIT AI_Geschaeftsfall_ID = LR_gf_aufzulösen(i) WENN(gfk == "Derivat") DANN nominale = SELEKTIERE Wert VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen(i) UND LR04_Wertart_Code == "Nominale" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert" protection_seller = SELEKTIERE GFA174_Sicherungsgeber_Kennzeichen VON GF_Geschaeftsfall MIT AI_Geschaeftsfall_ID == LR_gf_aufzulösen(i) WENN (protection_seller == WAHR UND ISTLEER(nominale) == FALSCH) //in diesem Fall handelt es sich um den Garantie-Teil eines Kreditderivats //das Nominale des Derivats wird auf das Underlying aufgelöst. Der Marktwert des Derivats ist davon nicht betroffen. //Anschließend kann diese Kombination aus Derivat/Nominale nicht weiter vorkommen. Sicherheiten, etc. werden also immer der richtigen Einheit zugeordnet (UL oder ursprünglichen GF). UPDATE_UNDERLYING_LR(LR_gf_aufzulösen(i), "Nominale") SETZE LR00_GF_ID = NULL FÜR ALLE LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen(i) UND LR04_Wertart_Code == "Nominale" SONST //es handelt sich um den MW eines Derivats UPDATE_SICHERHEITEN_LR(LR_gf_aufzulösen(i)) UPDATE_LOOKTHROUGH_LR(LR_gf_aufzulösen(i)) SETZE LR00_GF_ID = NULL FÜR ALLE LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen(i) UND LR04_Wertart_Code != "Nominale" ENDE SONST //jeder andere Geschäftsfall, der kein Derivat darstellt UPDATE_SICHERHEITEN_LR(LR_gf_aufzulösen(i)) UPDATE_UNDERLYING_LR(LR_gf_aufzulösen(i)) UPDATE_LOOKTHROUGH_LR(LR_gf_aufzulösen(i)) SETZE LR00_GF_ID = NULL FÜR ALLE LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen(i) ENDE ENDE ITERATION //Selektiere wieder alle Geschäftsfälle der LR-Entität deren GF_ID nicht Null sind (diese Geschäftsfälle sind weiter auflösbar) //Dies wird solange wiederholt bis kein Geschäftsfall mehr auflösbar ist LR_gf_aufzulösen = SELEKTIERE ALLE LR_LETZTRISIKO.LR00_GF_ID MIT LR00_GF_ID != NULL ENDE WIEDERHOLUNG //Die Entität LR_Letztrisiko enthält nun Datensätze die nicht weiter aufgelöst werden können. //Im nächsten Schritt muss diese Entitäte mittels der Geschäftsfall-IDs mit den Geschäftsfällen des SmartCubes gejoint werden. FUNKTIONSENDE //Ende Hauptfunktion //Hilffunktionen NEUER_LR_DATENSATZ(Datensatz) //Fügt einen Datensatz zur Letztrisiko-Entität hinzu. Dabei wird für jeden eigefügten Datensatz, eine eindeutig identifizierbare AI_Letztrisiko_ID angelegt. FUNKTIONSENDE AENDERE_DATENSATZS(AI_Letztrisiko_ID, Zu änderndes Feld1 = neuer Wert1, …, Zu änderndes Feld n = neuer Wert n) //Ändert einen bestehenden Datensatz in der LR_Letztrisiko. Dabei ist das zu ändernde Feld anzugeben sowie der neue Wert. FUNKTIONSENDE FUNKTION AENDERE_DATENSATZ_VIA_LR_GFID(LR_GF_ID, Wertart, Zu änderndes Feld 1 = neuer Wert 1, …, Zu änderndes Feld n = neuer Wert n) //Bezieht sich auf AENDERE_DATENSATZ, der zu ändernde Datensatz wird jedoch über LR00_GF_ID und Wertart identifiziert LR_id = SELEKTIERE AI_Letztrisiko_ID VON LR_LETZTRISIKO MIT LR00_GF_ID = LR_GF_ID UND LR04_Wertart_Code = Wertart AENDERE_DATENSATZ(LR_id, Zu änderndes Feld 1 = neuer Wert 1, …, Zu änderndes Feld n = neuer Wert n) FUNKTIONSENDE LOESCHE_DATENSATZ(AI_Letztrisiko_ID) //Entfernt den Datensatz mit AI_Letztrisiko_ID aus der Entität LR_Letztrisiko. FUNKTIONSENDE FUNKTION LOESCHE_DATENSATZ_VIA_LR_GFID(LR_GF_ID, Wertart) //Bezieht sich auf LOESCHE_DATENSATZ, der zu löschende Datensatz wird jedoch über LR00_GF_ID und Wertart identifiziert LR_id = SELEKTIERE AI_Letztrisiko_ID VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_GF_ID UND LR04_Wertart_Code == Wertart LOESCHE_DATENSATZ(LR_id) FUNKTIONSENDE FUNKTION INITIALISIERE_LR_Entitaet() //Initialisiert die Entität LR_Letztrisiko – Es werden alle relevanten Geschäftsfälle ausgewählt. Die Selektion findet über bestehende Meldekonzepte statt. Anschließend wird für jeden Geschäftsfall für jede relevante Wertart ein Datensatz in der LR-Entität angelegt. Dort SETZE LR_LETZTRISIKO = LEER SETZE LR_GESCHAEFTSFAELLE = SELEKTIERE Meldekonzepte (K01_BF01 UNION K01_BF03 UNION K01_BF04 UNION K01_BF05) MIT AI_Wertart_Code == "Ausstehender Nominalwert" ODER AI_Wertart_Code == "Unwiderruflicher Kreditrahmen" ODER AI_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" ODER AI_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)" //Kredite UNION SELEKTIERE Meldekonzepte (K01_BF06) MIT AI_Wertart_Code == "Buchwert" ODER AI_Wertart_Code == "Unwiderruflicher Kreditrahmen"// Anteilsrechte UNION SELEKTIERE Meldekonzepte W01_WP MIT (AI_Wertart_Code == "Ausstehender Nominalwert" ODER AI_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" ODER AI_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)") UND ((GFA171_Bilanzseite_IFRS_Code = "AKT") ODER (GFA109_Bilanzseite_local_GAAP_Code = "AKT") ODER (GF132_Bilanzposition_local_GAAP_Code ENTHAELT ("A1","A2","A3","A4","A5","A6","A7","A8") UND (WMA28_Wertpapierklassifikation_Code ENTHAELT ("Schuldverschreibungen", "Credit Linked Note", "Verbriefungstranchen")) //Schuldverschreibugnen (nur aktivseitig) UNION SELEKTIERE Meldekonzepte W01_WP MIT (AI_Wertart_Code == "Buchwert") UND ((GFA171_Bilanzseite_IFRS_Code = "AKT") ODER (GFA109_Bilanzseite_local_GAAP_Code = "AKT") ODER (GF132_Bilanzposition_local_GAAP_Code ENTHAELT ("A1","A2","A3","A4","A5","A6","A7","A8") UND (WMA28_Wertpapierklassifikation_Code ENTHAELT NICHT ("Schuldverschreibungen", "Credit Linked Note", "Verbriefungstranchen")) //verbriefte Anteilsrechte (nur aktivseitig) UNION SELEKTIERE Meldekonzepte (K02_AF07 UNION M02_AF07) MIT (AI_Wertart_Code == "Marktwert" ODER AI_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" ODER AI_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)") //Finanzderivate mit positivem oder negativem Marktwert UNION SELEKTIERE Meldekonzepte (K02AF07 UNION M02_AF07) MIT AI_Wertart_Code == "Nominale" UND ((GF.GF40_Short_Position_Kennzeichen == WAHR) UND ((GF.GF43_Underlying_Klasse_Code == "Credit Default" UND GF.GF42_Derivattyp_Code == "Swap") ODER (GF.GF43_Underlying_Klasse_Code == "Total Return" UND GF.GF42_Derivattyp_Code == "Swap"))) //Nominale für Kreditderivate UNION SELEKTIERE Meldekonzepte K03_AB01 MIT (AI_Wertart_Code == "Nominale" ODER AI_Wertart_Code == "Unwiderruflicher Kreditrahmen") //Ausserbilanzielle Geschaefte // Nach der Initialisierung wird eine Aktualisierung durchgeführt: Im Fall, dass es sich bei einer Einheit um eine Zweigstelle handelt, wird der entsprechende Datensatz (Einheitennummer, Land und Sektor des Letztrisikos) aktualisiert. //Für jeden selektierten Geschäftsfall wird für jede Wertart ein LR_Entität Datensatz angelegt ITERIERE i VON 1 bis Anzahl(LR_GESCHAEFTSFAELLE) LR_WERTARTEN = SELEKTIERE AI_Wertart_Code VON GFW_Geschaeftsfall_Wert VON LR_GESCHAEFTSFAELLE(i) ITERIERE j VON 1 bis Anzahl(LR_WERTARTEN) urspruengliche_einheit = AI_Einheitennummer_ID VON KR_Kundenrollen VON LR_GESCHAEFTSFAELLE(i) MIT (KR_Kundenrollen.AI_Rolle_Code == "Inhaber") ERSTELLE NEUEN LR_DATENSATZ UND SETZE: SETZE AI_LETZTRISIKO_ID = EINDEUTIGE_ID() SETZE LR00_GF_ID = AI_Geschaeftsfall_ID VON LR_GESCHAEFTSFAELLE(i) SETZE LR03_Einheitennummer_ID = UPDATE_HSZS(AI_Einheitennummer_ID VON KR_Kundenrollen VON LR_GESCHAEFTSFAELLE(i) MIT (KR_Kundenrollen.AI_Rolle_Code == "Inhaber")) SETZE LR01_Land_Code = ABLEITUNG_LETZTRISIKO_LAND(LR03_Einheitennummer_ID) //initialisiert das Sitzland SETZE LR02_Sektor_Code = ABLEITUNG_LETZTRISIKO_Sektor (LR03_Einheitennummer_ID) //initialisiere den Sektor SETZE LR04_Wertart_Code = LR_WERTARTEN(j) //Initialisier LR04_Wertart_Code mit den Selektierten Wertarten der Basis-Geschäftsfälle, es wird für jede vorhandenen AI_Wertart_Code ein eigener Datensatz mit eigener AI_Letztrisiko_ID angelegt WENN(LR03_Einheitennummer_ID ISTGLEICH urspruengliche_einheit) DANN SETZE LR06_Art_des_Risikotransfers_Code = "Kein Risikotransfer (KT)" SONST SETZE LR06_Art_des_Risikotransfers_Code = "Hauptanstalt-Zweiganstalt-Beziehung (HZ)" ENDE SETZE Wert = SELEKTIERE Wert VON GFW_Geschaeftsfall_Wert VON LR_GESCHAEFTSFAELLE(i) MIT AI_Wertart_Code == LR_WERTARTEN(j) ENDE ITERATION ENDE ITERATION //Alle nicht selektierten Geschäftsfälle/Geschäftsfall-Wertart Kombinationen haben kein LR-Land, LR-Sektor und grenzüberschreitende Forderung-Kennzeichen. All diese Attribute sind deswegen mit NR befüllt. FUNKTIONSENDE //Hilfsfunktion zur Bestimmung des Landes/Int-Code einer Einheit, der Algorithmus ist im Wesentlichen gleich mit XUB_Ableitung_Sitzland, bezieht sich jedoch auf die Übergebene Einheit, nicht den übergebenen Geschäftsfall FUNKTION ABLEITUNG_LETZTRISIKO_LAND(einheit_id) einheit = SELEKTIERE EM_Einheit_MS MIT AI_Einheitennummer_ID == einheit_id OeNB_ID = einheit.AI_OeNB_IdentNr WENN (ISTLEER(OeNB_ID) == FALSCH) DANN //betrachtete Einheit zum Geschäftsfall hat eine OeNB-Identnummer; Abfrage Internationale Organisationen Int_Org = EO_Einheit_OS.EO40_Internationale_Organisation_OS_Code VON EO_Einheit_OS MIT (EO_Einheit_OS.AI_OeNB_IdentNr == OeNB_ID) WENN (ISTLEER(Int_Org) == FALSCH) DANN //die betrachtete Einheit stellt eine Internationale Organisation dar, dh. wird der Code der Internationalen Organisation zurückgegeben RUECKGABE Int_Org ENDE WENN (IS TLEER(Int_Org) == WAHR) DANN //die betrachtete Einheit hat eine OeNB-Identnummer, stellt jedoch keine Internationale Organisation (lt. OeNB) dar, dh. wird das Sitzland lt. "OeNB-Sicht" zurückgegeben LETZTRISIKO_LAND = EO_Einheit_OS.EO02_Sitzland_OS_Code VON EO_Einheit_OS MIT (EO_Einheit_OS.AI_OeNB_IdentNr == OeNB_ID) RUECKGABE LETZTRISIKO_LAND ENDE SONST //betrachtete Einheit zum Geschäftsfall hat keine OeNB-Identnummer, dh. wird das Sitzland lt. "Melder-Sicht" zurückgegeben LETZTRISIKO_LAND = einheit.EM02_Sitzland_MS_Code RUECKGABE LETZTRISIKO_LAND ENDE FUNKTIONSENDE //Hilfsfunktion zur Bestimmung des Sektors, der Algorithmus ist im Wesentlichen gleich mit XUB_Ableitung_des_ESVG_Sektors, bezieht sich jedoch auf die Übergebene Einheit, nicht den übergebenene Geschäftsfall FUNKTION ABLEITUNG_LETZTRISIKO_Sektor (einheit_id) einheit = SELEKTIERE EM_Einheit_MS MIT AI_Einheitennummer_ID == einheit_id y = EO_Einheit_OS VON einheit // Also die entsprechende OeNB Identnummer zur EM_Einheit_MS WENN (ISTLEER(y) == WAHR) DANN //zur EM_Einheit_MS mit Kundenrolle Inhaber gibt es keine OeNB Identnummer RUECKGABE einheit.EM04_Sektor_ESVG_MS_Code SONST //es existiert eine OeNB Identnummer zur entsprechenden Einheit RUECKGABE y.EO04_Sektor_ESVG_OS_Code ENDE FUNKTIONSENDE FUNKTION FIND_ORIGINAL_ID(AI_Geschaeftsfall_ID) //Diese Funktion findet für einen bereits ausgelösten Geschäftsfall die originäre Geschäftsfall ID. //Hierbei kann es auch zu einer Kettenbildung kommen: Wird ein (Dummy-) Geschäftsfall betrachtet, der bereits ein Resultat einer mehrstufigen Auflösung ist, so ist immer die //Gescharftsfall_ID des "Kopfes" zurückgegeben - also die ID jenes (originären) Geschäftsfalles, welcher am Anfang der Auflösung steht. //Dies ist für mehrfach aufgelöste Geschäftsfälle notwendig, bei denen der ursprüngliche Kopf nicht verloren gehen darf. RUECKGABE AI_Geschaeftsfall_ID FUNKTIONSENDE FUNKTION ABLEITUNG_Land_zu_Waehrung(waehrung) //Diese Funktion liefert das Land zu einer Währung zurück. //So wird beispielsweise für USD -> US zurückgegeben. //Im Fall dass mehreren Ländern dieselbe Währung zugeordnet wurden, wird das Land indem die ausgebende Zentralbank beheimatet ist als Land zurückgegeben (Bsp: EUR -> DE) //Als Basis ist Mappingtabelle Land & Währung aus XEN_Ableitung_Internationaler_Forderungstyp_Code heranzuziehen Land = SELEKTIERE ISO-Ländercode von ISO_Land_Waehrung_Mapping MIT ISO-Währungscode = waehrung RUECKGABE LAND FUNKTIONSENDE FUNKTION UPDATE_HSZS_LR(einheit_id) //Der Algorithmus gibt zur entsprechenden (Input)-Einheit, die Einheit der entsprechenden Hauptanstalt zurück, soweit diese existiert. //Existiert keine Haupanstalt-Einheitennummer, so wird die (Input)-Einheit zurückgegeben. Die Bestimmung erfolgt soweit möglich nach OeNB-Sicht //Selektion der OeNB-Identnummer zur identifizierten Einheit OeNB_ID = SELEKTIERE AI_OeNB_IdentNr VON EM_Einheit_MS MIT (EM_Einheit_MS.AI_Einheitennummer_ID == einheit_id) WENN (ISTLEER(OeNB_ID)) DANN //zum Geschäftspartner exisitiert keine OeNB-Identnummer //Selektion jener Einheitenzusammenfassungen, welche die identifizierte Einheit enthalten Hauptanstalt = SELEKTIERE AI_Gruppen_Einheitennummer_ID VON EZ_Einheiten_Zusammenfassung_MS MIT (EZ_Einheiten_Zusammenfassung_MS.AI_Einheitennummer_ID == Einheit UND EZ_Einheiten_Zusammenfassung_MS.AI_Zusammenfassungstyp_Code == "Hauptanstalt-Zweiganstalt Beziehung") WENN (ISTLEER(Hauptanstalt)) DANN //zur identifizierten Einheit existiert keine Hauptanstalt, ergo muss es sich bei der betrachteten Einheit um eine Hauptanstalt handeln. RUECKGABE einheit_id SONST RUECKGABE Hauptanstalt ENDE SONST //zum Geschäftspartner existiert eine OeNB-Identnummer Hauptanstalt_OeNB_ID = SELEKTIERE EO41_Identnummer_Hauptanstalt VON EO_Einheit_OS MIT (EO_Einheit_OS.AI_OeNB_IdentNr == OeNB_ID) WENN (ISTLEER(Hauptanstalt_OeNB_ID)) DANN //zur identifizierten Einheit existiert keine Hauptanstalt, ergo muss es sich bei der betrachteten Einheit um eine Hauptanstalt handeln. RUECKGABE einheit_id SONST RUECKGABE Hauptanstalt_OeNB_ID ENDE ENDE FUNKTIONSENDE FUNKTION UPDATE_LOOKTHROUGH_LR(LR_gf_aufzulösen) //durch die die LR_gf_id werden Datensätze in der LR-Entität nicht eindeutig identifiziert, erst aufgrund der Wertart (oder alternativ LR_id) können diese eindeutig zugeordnet werden. //in der folgenden Funktion werden alle Wertarten iteriert und die Zerlegung bei allen Wertarten angewandt. LR_id_aufzulösen = SELEKTIERE ALLE AI_Letztrisiko_ID VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen //Schleife über alle Geschäftsfall-Wertart Kombinationen ITERIERE i VON 1 bis Anzahl(LR_id_aufzulösen) Wertart = SELEKTIERE LR04_Wertart_Code VON LR_LETZTRISIKO MIT AI_Letztrisiko_ID == LR_id_aufzulösen(i) transfer_wert = SELEKTIERE Wert VON LR_LETZTRISIKO MIT MIT AI_Letztrisiko_ID == LR_id_aufzulösen(i) summe_zerlegungen_wert = 0 //Bei der Zerlegung werden nur aktivseitige GF oder SK selektiert gf_zerlegungen = SELEKTIERE ALLE GB_Geschaeftsfall_Sachkonto_Beziehung.AI_Geschaeftsfall_ID2 MIT (GB_Geschaeftsfall_Sachkonto_Beziehung.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GB_Geschaeftsfall_Sachkonto_Beziehung.GB01_Beziehungsart_Code == "Zerlegung") UND (((GFA171_Bilanzseite_IFRS_Code VON GF MIT GF_ID = AI_Geschaeftsfall_ID2) = "AKT") ODER (GFA109_Bilanzseite_local_GAAP_Code VON GF MIT GF_ID = AI_Geschaeftsfall_ID2) = "AKT") ODER((GF132_Bilanzposition_local_GAAP_Code VON GF MIT GF_ID = AI_Geschaeftsfall_ID2) ENTHAELT ("A1","A2","A3","A4","A5","A6","A7","A8")) sk_zerlegungen = SELEKTIERE ALLE GB_Geschaeftsfall_Sachkonto_Beziehung.AI_Sachkonto_ID MIT (GB_Geschaeftsfall_Sachkonto_Beziehung.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GB_Geschaeftsfall_Sachkonto_Beziehung.GB01_Beziehungsart_Code == "Zerlegung") ODER ((SK12_Bilanzposition_local_GAAP_Code VON SK MIT SK_ID = AI_Sachkonto_ID) ENTHAELT ("A1","A2","A3","A4","A5","A6","A7","A8")) WENN( gf_zerlegungen != LEER ODER sk_zerlegungen != LEER) DANN ITERIERE j VON 1 bis Anzahl(gf_zerlegungen) summe_zerlegungen_wert = summe_zerlegungen_wert + Wert VON (GF MIT (AI_Geschaeftsfall_ID == gf_zerlegungen (j)) UND (AI_Wertart_Code == Wertart UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") ENDE ITERATION ITERIERE j VON 1 bis Anzahl(sk_zerlegungen) summe_zerlegungen_wert = summe_zerlegungen_wert + SELEKTIERE Wert VON (SK MIT (AI_Sachkonto_ID == sk_zerlegungen(j)) UND (AI_Wertart_Code == Wertart UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") ENDE ITERATION // Der Geschäftsfall mit der Identnummer LR_id_aufzulösen (i) kann in Anzahl(gf_zerlegungen) Geschäftsfälle zerlegt werden. Lösche den Geschäftsfall mit der ID LR_id_aufzulösen(i) aus LR_Letztrisiko und ersetzte den Datensatz durch Anzahl(gf_zerlegungen) Datensatz/Datensätze. Anschließend erfolgt dasselbe Prozedere für Sachkonten. ITERIERE j VON 1 bis Anzahl(gf_zerlegungen) //die Beziehung referenziert nicht auf Sachkonto, sondern auf einen Geschäftsfall wert_gf = Wert VON (GF MIT (AI_Geschaeftsfall_ID == gf_zerlegungen (j)) UND (AI_Wertart_Code == Wertart UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") lt_einheit = AI_Einheitennummer_ID VON KR_Kundenrollen VON (GF MIT AI_Geschaeftsfall_ID == gf_zerlegungen(j)) MIT (KR_Kundenrollen.AI_Rolle_Code == "Inhaber") lt_einheit = UPDATE_HSZS_LR(lt_einheit) //überprüft ob die Einheit eine Zweigstelle ist lt_sektor = ABLEITUNG_LETZTRISIKO_Sektor(lt_einheit) lt_land = ABLEITUNG_LETZTRISIKO_LAND(lt_einheit) NEUER_LR_DATENSATZ(AI_Geschaeftsfall_ID = FIND_ORIGINAL_ID(LR_gf_aufzulösen),LR00_GF_ID = lt_neue_id, LR01_Land_Code = lt_land, LR02_Sektor_Code = lt_sektor, LR03_Einheitennummer_ID = lt_einheit, LR04_Wertart_Code = Wertart, LR06_Art_des_Risikotransfers_Code = "Lookthrough (LT)", Wert = transfer_wert * (wert_gf/summe_zerlegungen_wert)) //Neuer Datensatz wird mit zerlegter AI_Geschaeftsfall_ID markiert, diese Datensätze könnten (eventuell) noch weiter aufgelöst werden. ENDE INTERATION //ITERATION FÜR SACHKONTEN ITERIERE j VON 1 bis Anzahl(sk_zerlegungen) wert_gf = Wert VON (SK MIT (AI_Sachkonto_ID == sk_zerlegungen (j)) UND (AI_Wertart_Code == Wertart UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") lt_neue_id = NULL sk_kategorie = SELEKTIERE SK00_Sachkontokategorie_Code von SK_Sachkonto mit AI_Sachkonto_ID = sk_zerlegungen(j) //je nach Sachkontenkategorie erfolgt die Bestimmung des des Landes/Sektors unterschiedlich WENN (sk_kategorie == "BR1" ODER sk_kategorie == "BR2" ODER sk_kategorie == "BR3") DANN lt_waehrung = SELEKTIERE SK03_Waehrung_Code von SK_Sachkonto mit AI_Sachkonto_ID = sk_zerlegungen(j) lt_land = ABLEITUNG_Land_zu_Waehrung(lt_waehrung) //bestimme das Land zur Waehrung lt_sektor = "1210" //Zentralbanken lt_einheit = NULL NEUER_LR_DATENSATZ(AI_Geschaeftsfall_ID = FIND_ORIGINAL_ID(LR_gf_aufzulösen),LR00_GF_ID = lt_neue_id, LR01_Land_Code = lt_land, LR02_Sektor_Code = lt_sektor, LR03_Einheitennummer_ID = lt_einheit, LR04_Wertart_Code = Wertart, LR06_Art_des_Risikotransfers_Code = "Lookthrough (LT)", Wert = transfer_wert * (wert_gf/summe_zerlegungen_wert)) ENDE ITERATION //Lösche alten Datensatz aus der LR_Letztrisiko Entität, da dieser vollständig zerlegt wurde LOESCHE_DATENSATZ(AI_Letztrisiko_ID = LR_id_aufzulösen(i), LR_Letztrisiko) ENDE //Ende Bedingung gibt es GF oder SK Zerlegungen? ENDE ITERATION //Iteration über zerlegbare GF-Wertart Kombinationen FUNKTIONSENDE FUNKTION UPDATE_UNDERLYING_LR(LR_gf_aufzulösen, Wertart) //Soweit der Geschäftsfall der über LR_gf_aufzulösen identifiziert wird, Underlying-Geschäftsfälle hat, werden die Nominalwerte der Underlying-Geschäftsfälle als Risikotransfer auf den ursprünglichen Geschäftsfall gesehen. //Übergeben wird der Funktion der ggf. aufzulösende Geschäftsfall und ggf. eine Wertart (kann auch leer sein) //Wird auf eine Wertart eingeschränkt, dann wird nur diese Wertart auf das Underlying aufgelöst, erfolgt keine Einschränkung auf eine Wertart, wird die zur Verfügung stehende Wertart automatisch erkannt. //Diese Unterscheidung zwischen automatischer/übergebener Wertart ist notwendig, um bei begebenen Kreditderivaten nicht auch den Marktwert nach dem Underlying aufzulösen, sondern lediglich den als Nominale dargestellten Garantieteil des Kreditderivats. In anderen Fällen (z.B. CLN) wird die Wertart automatisch übernommen. ul_zum_gf = SELEKTIERE ALLE GB.AI_Geschaeftsfall_ID2 MIT(GB.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GB.GB01_Beziehungsart_Code == "Underlying") WENN(ISTLEER(ul_zum_gf) == FALSCH) DANN //Der betrachtete Geschäftsfall hat Underlyings WENN (ISTLEER(Wertart) ) DANN //wurde eine Wertart übergeben? //es wurde keine Wertart übergeben, deswegen wird die Wertart des GF selektiert, Zinsabgrenzungen sind hierbei auszuschließen Wertart = SELEKTIERE LR04_Wertart_Code VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen UND LR04_Wertart_Code != "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" UND LR04_Wertart_Code != "Zinsabgrenzung Soll sonstige (Kundensicht)" LR_id_aufzulösen = SELEKTIERE AI_Letztrisiko_ID VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen UND LR04_Wertart_Code = Wertart SONST LR_id_aufzulösen = SELEKTIERE AI_Letztrisiko_ID VON LR_LETZTRISIKO MIT LR00_GF_ID == LR_gf_aufzulösen UND LR04_Wertart_Code == Wertart ENDE wert_gf = SELEKTIERE Wert VON LR_LETZTRISIKO MIT AI_Letztrisiko_ID == LR_id_aufzulösen //Wert des Geschäftsfalles transfer_zinsabgrenzung_a = 0 transfer_zinsabgrenzung_s = 0 zinsabgrenzung_a = 0 zinsabgrenzung_s = 0 WENN( Wertart == "Ausstehender Nominalwert") DANN //Gibt es eine Zinsabgrenzung aus Agio/Disagio die ebenfalls übertragen werden muss? zinsabgrenzung_a = SELEKTIERE Wert von LR_LETZTRISIKO MIT LR00_GF_ID = LR_gf_aufzulösen und LR04_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" WENN ( ISTLEER(zinsabgrenzung_a) ) DANN //Es gibt keine Zinsabgrenzung zinsabgrenzung_a = 0 SONST zinsabgrenzung_a_id = SELEKTIERE AI_Letztrisiko_ID von LR_LETZTRISIKO MIT LR00_GF_ID = LR_gf_aufzulösen und LR04_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" ENDE //Gibt es eine sonstige Zinsabgrenzung, die ebenfalls übertragen werden muss? zinsabgrenzung_s = SELEKTIERE Wert von LR_LETZTRISIKO MIT LR00_GF_ID = LR_gf_aufzulösen und LR04_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)" WENN ( ISTLEER(zinsabgrenzung_s) ) DANN //Es gibt keine Zinsabgrenzung zinsabgrenzung_s = 0 SONST zinsabgrenzung_s_id = SELEKTIERE AI_Letztrisiko_ID von LR_LETZTRISIKO MIT LR00_GF_ID = LR_gf_aufzulösen und LR04_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)" ENDE ENDE zinsabgrenzung = zinsabgrenzung_a + zinsabgrenzung_s summe_nominalwert_aller_underlyings = SUMME(Wert VON GFW_Geschaeftsfall_Wert VON ul_zum_gf MIT (AI_Wertart_Code == "Nominale"))//Summiere die Nomia aller Underlyings zum Geschäftsfall WENN (summe_nominalwert_aller_underlyings < (wert_gf + zinsabgrenzung) ) DANN //Im Falle, dass die Summe der Underlying Nominalwerte geringer sind als der Wert des GF (ONA+ZS) //bleibt der Ursprüngliche Datensatz erhalten, allerdings wird dessen relevanter Wert um Summe_Nominalwert_Underlyings reduziert WENN (zinsabgrenzung == 0 ODER (summe_nominalwert_aller_underlyings < wert_gf) ) DANN transfer_wert = summe_nominalwert_aller_underlyings AENDERE_DATENSATZ(AI_Letztrisiko_ID = LR_id_aufzulösen, Wert = (wert_gf - transfer_wert), LR00_GF_ID = NULL) //Achtung: Es werden nur jene Datensätze mit der Wertart = Nominale geändert, dies bedeutet, dass der MW desselben Derivates NICHT davon betroffen sind. //Im Falle einer Zinsabgrenzung wäre diese beim Risikotransfer zu ignorieren, da die Summe der Underlyings geringer ist als der Wert des ursprünglichen Geschäftsfalles (ohne ZS). Die LR00 der ZS, muss dennoch auf null gesetzt werden, damit sie nicht weiter aufgelöst wird WENN(zinsabgrenzung_a != 0) DANN AENDERE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_a_id, LR00_GF_ID = NULL) ENDE WENN(zinsabgrenzung_s != 0) DANN AENDERE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_s_id, LR00_GF_ID = NULL) ENDE SONST //der ursprüngliche Datensatz mit der Haupt-Wertart wird vollständig durch den Risikotransfer abgedeckt, jedoch ist die Zinsabgrenzung teilweise vom Risikotransfer betroffen. LOESCHE_DATENSATZ(AI_Letztrisiko_ID = LR_id_aufzulösen) transfer_wert = wert_gf transfer_zinsabgrenzung_a = (summe_nominalwert_aller_underlyings - wert_gf) * zinsabgrenzung_a / zinsabgrenzung transfer_zinsabgrenzung_s = (summe_nominalwert_aller_underlyings - wert_gf) * zinsabgrenzung_s / zinsabgrenzung // der Fall, dass die effektive zinsabgrenzung größer ist als die zinsabgrenzung wurde ausgeschlossen, da summe_nominalwert_aller_underlyings – wert_gf < zinsabgrenzung (siehe WENN oben) AENDERE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_a_id, Wert = (zinsabgrenzung_a - transfer_zinsabgrenzung_a), LR00_GF_ID = NULL) AENDERE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_s_id, Wert = (zinsabgrenzung_s - transfer_zinsabgrenzung_s), LR00_GF_ID = NULL) ENDE SONST //Der ursprüngliche Datensatz wird gelöscht, für jedes Underlying wird ein eigener Datensatz zum Nominalwert erzeugt LOESCHE_DATENSATZ(AI_Letztrisiko_ID = LR_id_aufzulösen) transfer_wert = wert_gf WENN(zinsabgrenzung_a != 0) DANN //Zinsabgrenzung aus Agio/Disagio ebenfalls löschen LOESCHE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_a_id) transfer_zinsabgrenzung_a = zinsabgrenzung_a ENDE WENN(zinsabgrenzung_s != 0) DANN //Zinsabgrenzung sonstige ebenfalls löschen LOESCHE_DATENSATZ(AI_Letztrisiko_ID = zinsabgrenzung_s_id) transfer_zinsabgrenzung_s = zinsabgrenzung_s ENDE ENDE ITERIERE i VON 1,Anzahl(ul_zum_gf)//Iteration über alle Underlyings ul_wert = Wert VON GFW MIT (AI_Geschaeftsfall_ID == ul_zum_gf(i)) UND (AI_Wertart_Code == "Nominale" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert")aliquoter_ul_wert = transfer_wert * ul_wert / summe_nominalwert_aller_underlyings) aliquote_zinsabgrenzung_a = transfer_zinsabgrenzung_a * (ul_wert / summe_nominalwert_aller_underlyings) aliquote_zinsabgrenzung_s = transfer_zinsabgrenzung_s * (ul_wert / summe_nominalwert_aller_underlyings) ul_einheit = AI_Einheitennummer_ID VON KR_Kundenrollen VON ul_zum_gf(i) MIT (KR_Kundenrollen.AI_Rolle_Code == "Inhaber") ul_einheit = UPDATE_HSZS_LR(ul_einheit)//überprüfe, ob die Einheit eine Zweigstelle ist ul_land = ABLEITUNG_LETZTRISIKO_LAND(lt_einheit) NEUER_LR_DATENSATZ(AI_Geschaeftsfall_ID = FIND_ORIGINAL_ID(ul_zum_gf(i)), LR00_GF_ID = ul_zum_gf(i), LR01_Land_Code = ul_land, LR02_Sektor_Code = ul_sektor, LR03_Einheitennummer_ID = ul_einheit, LR04_Wertart_Code = Wertart, LR06_Art_des_Risikotransfers_Code = "Underlying (UL)", Wert = aliquoter_ul_wert) WENN(aliquote_zinsabgrenzung_a != 0) DANN NEUER_LR_DATENSATZ(AI_Geschaeftsfall_ID = FIND_ORIGINAL_ID(ul_zum_gf(i)), LR00_GF_ID = ul_zum_gf(i), LR01_Land_Code = ul_land, LR02_Sektor_Code = ul_sektor, LR03_Einheitennummer_ID = ul_einheit, LR04_Wertart_Code = "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)", LR06_Art_des_Risikotransfers_Code = "Underlying (UL)", Wert = aliquote_zinsabgrenzung_a) ENDE WENN(aliquote_zinsabgrenzung_s != 0) DANN NEUER_LR_DATENSATZ(AI_Geschaeftsfall_ID = FIND_ORIGINAL_ID(ul_zum_gf(i)), LR00_GF_ID = ul_zum_gf(i), LR01_Land_Code = ul_land, LR02_Sektor_Code = ul_sektor, LR03_Einheitennummer_ID = ul_einheit, LR04_Wertart_Code = "Zinsabgrenzung Soll sonstige (Kundensicht)", LR06_Art_des_Risikotransfers_Code = "Underlying (UL)", Wert = aliquote_zinsabgrenzung_s) ENDE ENDE ITERATION ENDE //Underlying Bedingung FUNKTIONSENDE FUNKTION UPDATE_SICHERHEITEN_LR(LR_gf_aufzulösen) alle_sicherheitenzerlegungen = SELEKTIERE ALLE SZ VON GE VON GF MIT (GF.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (SZ.AI_Zerlegungsansatz_Code == "CoRep") //Im Fall, dass der Geschäftsfall nicht besichert ist, kann die Funktion abgebrochen werden. WENN(ISTLEER(alle_sicherheitenzerlegungen) == FALSCH) DANN //Der Geschäftsfall ist besichert //Wert des Geschäftsfalles hängt von der betrachteten Geschäftsfallkategorie ab wpklass = SELEKTIERE WMA28_Wertpapierklassifikation_Code VON WM VON GF MIT (GF.AI_geschaeftsfall_ID == LR_gf_aufzulösen) gfk = SELEKTIERE GF00_Geschaeftsfallkategorie_Code VON GF MIT (GF.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) wert_rahmen = Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Unwiderruflicher Kreditrahmen" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") wert_gf = SELEKTIERE Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Ausstehender Nominalwert") wertart_gf = "Ausstehender Nominalwert"//Annahme: Es wird grundsätzlich davon ausgegangen, dass der Ausstehende Nominalwert besichert ist. WENN (gfk == "Anteilsrechte nicht in Form von Wertpapieren" || wpklass ENTHAELT NICHT ("Schuldverschreibungen", "Credit Linked Note", "Verbriefungstranchen")) DANN // Ausnahme, in der nicht der Ausstehende Nominalwert als Wert des Geschäftsfalles herangezogen wird wert_gf = SELEKTIERE Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Buchwert" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") wertart_gf = "Buchwert" ENDE WENN (gfk == "Außerbilanzielle Geschaefte gem. Anhang I CRR (exkl. Kreditderivate, Kreditzusagen)") DANN // Ausnahme, in der nicht der Buchwert/Ausstehende Nominalwert als Wert des Geschäftsfalles herangezogen wird wert_gf = SELEKTIERE Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Nominale" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") wertart_gf = "Nominale" ENDE WENN (gfk == "Derivate") DANN //Wichtig: Aufgrund der Struktur der Schleife in der Hauptfunktion können in diesem Teil bei Derivaten nur entweder die Wertarten Nominale oder Marktwert auftreten, nicht jedoch beide gleichzeitig (das Nominale wäre in diesem Fall schon dem Underlying zugeordnet worden) wertart_gf = SELEKTIERE LR04_Wertart_Code VON LR_LETZTRISIKO MIT (LR00_GF_ID == LR_gf_aufzulösen) wert_gf = SELEKTIERE Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == wertart_gf UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") ENDE wert_besicherung = 0 ITERIERE j VON 1,Anzahl(alle_sicherheitenzerlegungen) wert_besicherung = wert_besicherung + Wert VON SZW_Sicherheiten_Zerlegungs_Wert MIT (SZW_Sicherheiten_Zerlegungs_Wert.AI_Exposure_ID == alle_sicherheitenzerlegungen(j).AI_Exposure_ID UND SZW_Sicherheiten_Zerlegungs_Wert.AI_Sicherheiten_ID == alle_sicherheitenzerlegungen(j).AI_Sicherheiten_ID UND SZW_Sicherheiten_Zerlegungs_Wert.AI_Wertart_Code == "anrechenbarer Wert der Sicherheit") ENDE ITERATION wert_zinsforderung_a = Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") wert_zinsforderung_s = Wert VON GFW MIT (GFW.AI_Geschaeftsfall_ID == LR_gf_aufzulösen) UND (GFW.AI_Wertart_Code == "Zinsabgrenzung Soll sonstige (Kundensicht)" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") WENN (wert_besicherung >= wert_gf) DANN //Vollbesichert: Wenn besicherter Betrag dem Wert des zugrundeliegenden Geschäftsfalles entspricht, lösche Datensatz aus LR_Letztrisiko, die Identifikation des Datensatzes erfolgt über seine AI_Letztrisiko_ID, welche diesen eindeutig identifiziert. LOESCHE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, wertart_gf) wert_gf_besichert = wert_gf //Teil des Geschäftsfalles, der besichert ist wert_uebersicherung = wert_besicherung - wert_gf //überbesicherung geht automatisch in die Zinsforderungen/rahmen SONST wert_gf_unbesichert = (wert_gf - wert_besicherung)//Jener Bruchteil des Wertes, welcher besichert ist //Reduziere den Geschäftsfall um den besicherten Betrag. Dieser Datensatz entspricht den unbesicherten Anteil. Dieser Datensatz ist nun nicht weiter auslösbar. AENDERE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, wertart_gf, Wert = wert_gf_unbesichert) wert_gf_besichert = wert_besicherung //wert, der für den geschäftsfall besichert ist wert_uebersicherung = 0 //ueberbesicherung ist 0 ENDE //Vollbesichert Bedingung wert_effektive_zinsforderung = 0 //Zinsforderung //Behandlung von Zinsforderungen – Diese sind noch vor dem Rahmen abzuhandeln WENN ((wert_zinsforderung_a + wert_zinsforderung_s) != 0 UND (NICHT(ISTLEER(wert_zinsforderung_a)) ODER NICHT(ISTLEER(wert_zinsforderung_s))) UND wert_uebersicherung > 0 ) //es gibt eine Zinsforderung und eine Überbesicherung, die es zu behandeln gillt WENN (wert_uebersicherung >= wert_zinsforderung_a + wert_zinsforderung_s) DANN //auch die Zinsforderungen ist vollstaendig besichert, diese erfährt einen vollständigen Risikotransfer LOESCHE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)") LOESCHE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Zinsabgrenzung Soll sonstige (Kundensicht)") wert_effektive_zinsforderung_a = wert_zinsforderung_a wert_effektive_zinsforderung_s = wert_zinsforderung_s wert_uebersicherung = wert_uebersicherung - wert_zinsforderung_a - wert_zinsforderung_s //korrigiere den Wert der Ueberbesicherung um den Wert der Zinsforderung SONST WENN(uebersicherung > 0) //Die Zinsforderung ist nur zum Teil besichert // Fall : wert_uebersicherung < rahmen_geschaeftsfall wert_nichtbes_zinsforderung_a = (wert_zinsforderung_a - wert_uebersicherung * wert_zinsforderung_a / (wert_zinsforderung_a + wert_zinsforderung_s)) wert_nichtbes_zinsforderung_s = (wert_zinsforderung_s - wert_uebersicherung * wert_zinsforderung_s / (wert_zinsforderung_a + wert_zinsforderung_s)) wert_effektive_zinsforderung_a = wert_uebersicherung * wert_zinsforderung_a / (wert_zinsforderung_a + wert_zinsforderung_s) //besicherte Zinsforderung wert_effektive_zinsforderung_s = wert_uebersicherung * wert_zinsforderung_s / (wert_zinsforderung_a + wert_zinsforderung_s) //besicherte Zinsforderung //Aendere Datensatz - reduziere den nichtbesicherten Rahmen um den besicherten Anteil AENDERE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)", Wert = wert_nichtbes_zinsforderung_a)//Reduziere den entsprechnden Zinsforderungs-Datensatz AENDERE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Zinsabgrenzung Soll sonstige (Kundensicht)", Wert = wert_nichtbes_zinsforderung_s)//Reduziere den entsprechnden Zinsforderungs-Datensatz wert_uebersicherung = 0// Die Ueberbesicherung ist mit der Zinsforderung aufgebraucht ENDE ENDE //Zinsforderung wurde abgehandelt wert_effektiver_rahmen = 0//Rahmen der einen LR erfährt //Unwiderruflicher Kreditrahmen: //Behandlung des unwiderruflichen Kreditrahmens WENN (wert_rahmen != 0 UND ISTLEER(wert_rahmen) == FALSCH UND wert_uebersicherung > 0) //es gibt einen Rahmen und eine Überbesicherung, die es zu behandeln gillt WENN (wert_uebersicherung >= wert_rahmen) DANN //auch der Rahmen ist vollstaendig besichert, dieser erfährt einen vollständigen Risikotransfer LOESCHE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Unwiderruflicher Kreditrahmen") wert_effektiver_rahmen = wert_rahmen SONST //Der Rahmen ist nur zum Teil besichert // Fall : wert_uebersicherung < rahmen_geschaeftsfall wert_nichtbes_rahmen = (wert_rahmen-wert_uebersicherung) wert_effektiver_rahmen = wert_uebersicherung//besicherter Rahmen //Aendere Datensatz - reduziere den nichtbesicherten Rahmen um den besicherten Anteil AENDERE_DATENSATZ_VIA_LR_GFID(LR_gf_aufzulösen, "Unwiderruflicher Kreditrahmen", Wert = wert_nichtbes_rahmen)//Reduziere den entsprechenden Datensatz ENDE ENDE //Ende Rahmen ITERIERE j VON 1,Anzahl(alle_sicherheitenzerlegungen) //Iteriere über alle alle_Sicherheitenzerlegungen sicherheit = ST VON alle_sicherheitenzerlegungen(j) //Anmerkung: Jeder konkreten Sicherheitenzerlegung ist genau eine Sicherheit zugeordnet sicherheiten_wert = Wert VON SZW_Sicherheiten_Zerlegungs_Wert MIT (SZW_Sicherheiten_Zerlegungs_Wert.AI_Exposure_ID == alle_sicherheitenzerlegungen(j).AI_Exposure_ID UND SZW_Sicherheiten_Zerlegungs_Wert.AI_Sicherheiten_ID == alle_sicherheitenzerlegungen(j).AI_Sicherheiten_ID UND SZW_Sicherheiten_Zerlegungs_Wert.AI_Wertart_Code == "anrechenbarer Wert der Sicherheit" UND AI_Wertmesseinheit_Code == "Euro-Gegenwert") wert_aliquote_sicherheit = wert_gf_besichert*(sicherheiten_wert/wert_besicherung) gewicht = sicherheiten_wert/wert_besicherung sicherheiten_einheit = AI_Einheitennummer_ID VON EM VON KR VON ST MIT (KR.AI_Rolle_Code == "Der Sicherheit zugeordnete Einheit")//Der Sicherheit zugeordnete Einheit sicherheiten_einheit = UPDATE_HSZS_LR(sicherheiten_einheit)//überprüfe ob die Einheit eine Zweigstelle ist, wenn ja überschreibe einheit s_land = ABLEITUNG_LETZTRISIKO_LAND(sicherheiten_einheit) sicherheiten_kategorie = ST03_Sicherheitenkategorie_Code VON Sicherheit //Für die Sicherheitenkategorien Wohnimmobilie, Anrechnungsfähige Gewerbeimmobilien, Sonstige Sachsicherheiten und sonstige Sachsicherheit, wird der Sektor auf „9999 – Nicht zuordenbar“ gesetzt sicherheiten_kategorie = ST03_Sicherheitenkategorie_Code VON sicherheit WENN( sicherheiten_kategorie == "Wohnimmobilie (WI)" ODER sicherheiten_kategorie == "Anrechnungsfähige Gewerbeimmobilien (GB)" ODER sicherheiten_kategorie == "Sonstige Gewerbeimmobilien (SI)" ODER sicherheiten_kategorie == "sonstige Sachsicherheit (SS)" DANN s_sektor = "Nicht Zuordenbar" //Erweiterte ESVG-Sektor Ausprägung: Code=9999 SONST //esvg sektor der einheit s_sektor = ABLEITUNG_LETZTRISIKO_Sektor(sicherheiten_einheit) ENDE //Besicherung von Zinsforderungen WENN (wert_effektive_zinsforderung_a > 0) DANN wert_aliquote_forderung_a = wert_effektive_zinsforderung_a*gewicht NEUER_LR_DATENSATZ(LR00_GF_ID = NULL, LR01_Land_Code = s_land, LR02_Sektor_Code = s_sektor, LR03_Einheitennummer_ID = sicherheiten_einheit, LR04_Wertart_Code = "Zinsabgrenzung Soll aus Agio/Disagio (Kundensicht)", LR06_Art_des_Risikotransfers_Code = sicherheiten_kategorie, Wert = wert_aliquote_forderung_a) WENN (wert_effektive_zinsforderung_s > 0) DANN wert_aliquote_forderung_s = wert_effektive_zinsforderung_s*gewicht NEUER_LR_DATENSATZ(LR00_GF_ID = NULL, LR01_Land_Code = s_land, LR02_Sektor_Code = s_sektor, LR03_Einheitennummer_ID = sicherheiten_einheit, LR04_Wertart_Code = "Zinsabgrenzung Soll sonstige (Kundensicht)", LR06_Art_des_Risikotransfers_Code = sicherheiten_kategorie, Wert = wert_aliquote_forderung_s) ENDE //Rahmenbesicherung WENN (wert_effektiver_rahmen > 0) DANN //der Geschaeftsfall ist über den Buchwert/Ausstehenden Nominalwert besichert hinaus, die Differenz dient zur Besicherung des unwiderruflichen Rahmens wert_aliquoter_rahmen = wert_effektiver_rahmen*gewicht NEUER_LR_DATENSATZ(LR00_GF_ID = NULL, LR01_Land_Code = s_land, LR02_Sektor_Code = s_sektor, LR03_Einheitennummer_ID = sicherheiten_einheit, LR04_Wertart_Code = "Unwiderruflicher Kreditrahmen", LR06_Art_des_Risikotransfers_Code = sicherheiten_kategorie, Wert = wert_aliquoter_rahmen) ENDE NEUER_LR_DATENSATZ(LR00_GF_ID = NULL, LR01_Land_Code = s_land, LR02_Sektor_Code = s_sektor, LR03_Einheitennummer_ID = sicherheiten_einheit, LR04_Wertart_Code = wertart_gf, LR06_Art_des_Risikotransfers_Code = sicherheiten_kategorie, Wert = wert_aliquote_sicherheit) ENDE ITERATION ENDE //Sicherheitenbedingung FUNKTIONSENDE