Bezeichnung des AlgorithmusXEN_Belastung
KurzbezeichnungErmittlung der Entität Belastung
Verbale Beschreibung/Beispiele

Der Algorithus iteriert über alle Geschäftsfälle, Sachkonten und Sicherheiten des Mandanten, die als belastetes Objekt grundsätzlich infrage kommen (d.h. GKA07_Typ_des_belasteten_Objekts_Code, STA15_Erhaltene_Garantien_Sicherheiten_Code bzw. SKA15_Typ_des_belasteten_Objekts_Code UNGLEICH "Nicht relevant (NR)"). 

Für jedes dieser Objekte werden 1 bis n Datensätze auf BE_Belastung (und zugehörigen Werten auf BEW_Belastung_Wert) angelegt, die wiederspiegeln, ob und in welcher Höhe das Objekt belastet ist, inkl. der Information, ob das Objekt Teil eines Pools ist, und mit der Belastungsquelle (s. AI_Geschaeftsfall_ID2) sowie der Belastungsart (s. BE01_Art_der_Belastung_Code).

Auch nicht belastete Objekte werden als Datensatz auf BE_Belastung repräsentiert (mit BE01_Art_der_Belastung_Code "Keine Belastung"). 

Somit schafft dieser Algorithmus die Grundlage für die Allokation von Asset Encumbrance aus dem Basic-Cube. Weitere für Asset Encumbrance relevante Kategorien werden aufbauend auf diesen Algorithmus durchgeführt, u.A. die Berechnung von BEA02_Klassifikation_belastetes_Objekt_Code und BEA03_Restlaufzeit_Belastungsquelle_Code.


Erläuterungen zur Funktionsweise des Algorithmus:

Schritt 1: Geschäftsfälle exkl. einbehaltene/eigener gehaltene Covered bonds bzw. ABS: Es wird über alle Vermögenswerte, Geliehenen Geschäftsfälle und einbehaltene Wertpapiere, die als belastetes Objekt grundsätzlich infrage kommen, iteriert 

→ Innerhalb der Iteration wird die Subfunktion ERMITTLE_BELASTUNGEN aufgerufen, die zu einem fixen Geschäftsfall die Belastungsquelle(n) inkl. Belastungsart sowie die belasteten Werte errechnet.

→ Die Belastungsart BE01_Art_der_Belastung_Code wird dabei in einer separaten Subfunktion ART_DER_BELASTUNG errechnet.

→ Die errechneten Werte werden per Subfunktion NEUER_DATENSATZ auf BE_Belastung und BEW_Belastung_Wert geschrieben

Schritt 2: Sicherheiten : Es wird über alle entgegengenommenen Sicherheiten, die als belastetes Objekt grundsätzlich infrage kommen, iteriert

→ Innerhalb der Iteration Vorgehensweise analog Schritt 1

Schritt 3: Sachkonten (analog Schritt 1 & 2): Es wird über alle Sachkonten, die als belastetes Objekt grundsätzlich infrage kommen, iteriert 

→ Innerhalb der Iteration Vorgehensweise analog Schritt 1 & 2

Kommt vor in/wird verwendet fürBE_Belastung
Formale Beschreibung

FUNKTION XEN_Belastung (AI_Mandant MA, AI_Stichtag_Datum repDate, AI_Kons_ID konsId)

//Schritt 1: Iteration Geschäftsfälle 

//Selektiere alle Vermögenswerte, Geliehenen Geschäftsfälle und einbehaltene Wertpapiere, die als belastetes Objekt grundsätzlich infrage kommen. 

belastbare_gf = SELEKTIERE ALLE GK.AI_Geschaeftsfall_ID MIT (GK.GKA07_Typ_des_belasteten_Objekts_Code ENTHAELT (" Vermögenswert (VW) ", " Vermögenswert (nur Zinsabgrenzung) (VZ) ", " Geliehener Geschäftsfall (GG) ", " Einbehaltenes/eigenes gehaltenes Wertpapier exkl. Covered bond und ABS (EW) ", " Einbehaltener/eigener gehaltener Covered bond oder ABS (CA) ") UND GK.AI_Mandant ISTGLEICH MA )

ITERIERE gf VON (1, Max(belastbare_gf))

typ_gf = SELEKTIERE GK.GKA07_Typ_des_belasteten_Objekts_Code VON GK_Geschaeftsfall_Konsolidierungssicht MIT GK.AI_Geschaeftsfall_ID ISTGLEICH gf

wpklass_gf = SELEKTIERE WM.WMA28_Wertpapierklassifikation_Code VON WM_Wertpapier_MS VON GF_Geschaeftsfall MIT GF.AI_Geschaeftsfall_ID ISTGLEICH gf

gfkategorie = SELEKTIERE GF.GF00_Geschaeftsfallkategorie_Code VON GF_Geschaeftsfall MIT GF.AI_Geschaeftsfall_ID ISTGLEICH gf

pool_gf = SELEKTIERE GK.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID VON GK_Geschaeftsfall_Konsolidierungssicht MIT GK.AI_Geschaeftsfall_ID ISTGLEICH gf

mandant2_gf = SELEKTIERE GK.AI_Mandant2 VON GK_Geschaeftsfall_Konsolidierungssicht MIT GK.AI_Geschaeftsfall_ID ISTGLEICH gf

WENN(NICHT(ISTLEER(pool_gf))) DANN

wid_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Widmungsanteil Pool (WID) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

SONST

wid_gf = 0

ENDE

WENN(NICHT(ISTLEER(mandant2_gf))) DANN

mandant_pool_gf = mandant2_gf

SONST

mandant_pool_gf = MA

ENDE

WENN(typ_gf UNGLEICH " Vermögenswert (nur Zinsabgrenzung) (VZ)" ) DANN

nbw_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Netto-Buchwert inkl. Zinsabgrenzungen (NBW) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

bz_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Beizulegender Zeitwert (BZ) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

WENN(gfkategorie ENTHAELT (" Wechselkredit (B) ", " Kreditkartenkredit (C) ", " Barvorlagen (E) ", " Operating Leasing (F) ", " Finance Leasing (G) ", " Revolvierender Kredit (exkl. Überziehungskredit) (V) ", " Überziehungskredit (W) ", " Einmalkredit (exkl. Kreditlinie) (X) ", " Kreditlinie (Y) ") ODER wpklass_gf ENTHAELT (" Verbriefungstranche (VBTR) ", " Schuldverschreibung (SCHV) ", " Credit Linked Note (CLN) ")) DANN

// Verwende ONA für Debt instruments (unabhängig davon, ob es sich um einen eigenen Vermögenswert oder einen geliehenen Geschäftsfall handelt)

nn_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Ausstehender Nominalwert (ONA) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

SONST WENN(typ_gf ISTGLEICH " Vermögenswert (VW) ") DANN

// Für sonstige Vermögenswerte dient der BW als Proxy

nn_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Buchwert (BW) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

SONST 

// Für sonstige geliehene Geschäftsfälle wird das Nominale verwendet

nn_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Nominale (NN) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

ENDE

SONST

//Für reine Zinsabgrenzungen sind kein sinnvoller Marktwert bzw. Nominale vorhanden; beide Wertarten werden auch nicht benötigt, da diese Geschäfte immer unter "Other assets" ausgewiesen werden

nbw_gf = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Zinsabgrenzung Soll bilanziell (ZSB) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH gf

bz_gf = 0

nn_gf = 0

ENDE

ERMITTLE_BELASTUNGEN( gf , NULL, NULL, pool_gf, mandant_pool_gf, nbw_gf , bz_gf , nn_gf , wid_gf )

ERMITTLE_BELASTUNGEN( gf , NULL, NULL, NULL, NULL, nbw_gf , bz_gf , nn_gf , 100 - wid_gf )

ITERATION ENDE

//Schritt 2: Iteration Sicherheiten 

//Selektiere alle entgegengenommenen Sicherheiten, die als belastetes Objekt grundsätzlich infrage kommen

belastbare_st = SELEKTIERE ALLE ST.AI_Sicherheiten_ID MIT (ST.STA15_Erhaltene_Garantien_Sicherheiten_Code ISTGLEICH (" Entgegengenommene Sicherheiten (T5) ") UND ST. AI_Mandant ISTGLEICH MA )

ITERIERE st VON (1, Max(belastbare_st))

pool_st = SELEKTIERE ST.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID VON ST_Sicherheiten_Stammdaten MIT ST.AI_Sicherheiten_ID ISTGLEICH st

mandant2_st = SELEKTIERE ST.AI_Mandant2 VON ST_Sicherheiten_Stammdaten MIT ST.AI_Sicherheiten_ID ISTGLEICH st

WENN(NICHT(ISTLEER(pool_st))) DANN

wid_st = SELEKTIERE STW.Wert VON STW_Sicherheiten_Stammdaten_Wert MIT STW.AI_Wertart_Code ISTGLEICH " Widmungsanteil Pool (WID) " UND STW.AI_Sicherheiten_ID ISTGLEICH st

SONST

wid_st = 0

ENDE

WENN(NICHT(ISTLEER(mandant2_st))) DANN

mandant_pool_st = mandant2_st

SONST

mandant_pool_st = MA

ENDE

bz_st = SELEKTIERE STW.Wert VON STW_Sicherheiten_Stammdaten_Wert MIT STW.AI_Wertart_Code ISTGLEICH " Beizulegender Zeitwert (BZ) " UND STW.AI_Sicherheiten_ID ISTGLEICH st

nn_st = SELEKTIERE STW.Wert VON STW_Sicherheiten_Stammdaten_Wert MIT STW.AI_Wertart_Code ISTGLEICH " Nominale (NN) " UND STW.AI_Sicherheiten_ID ISTGLEICH st

ERMITTLE_BELASTUNGEN(NULL, st, NULL, pool_st, mandant_pool_st, 0, bz_st , nn_st , wid_st)

ERMITTLE_BELASTUNGEN(NULL, st, NULL, NULL, NULL, 0, bz_st , nn_st, 100 - wid_st)

ITERATION ENDE

//Schritt 3: Iteration Sachkonten

//Selektiere alle Sachkonten, die als belastetes Objekt infrage kommen

belastbare_sk = SELEKTIERE ALLE SK.AI_Sachkonto_ID MIT (SK.SKA15_Typ_des_belasteten_Objekts_Code ENTHAELT (" Vermögenswert (VW)", " Geliehenes Sachkonto (GS) ") UND SK. AI_Mandant ISTGLEICH MA )

ITERIERE sk VON (1, Max(belastbare_sk))

pool_sk = SELEKTIERE SK.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID VON SK_Sachkonto MIT SK.AI_Sachkonto_ID ISTGLEICH sk

mandant2_sk = SELEKTIERE SK.AI_Mandant2 VON SK_Sachkonto MIT SK.AI_Sachkonto_ID ISTGLEICH sk

WENN(NICHT(ISTLEER(pool_sk))) DANN

wid_sk = SELEKTIERE SKW.Wert VON SKW_Sachkonten_Wert MIT SKW.AI_Wertart_Code ISTGLEICH " Widmungsanteil Pool (WID) " UND SKW.AI_Sachkonto_ID ISTGLEICH sk

SONST

wid_sk = 0

ENDE

WENN(NICHT(ISTLEER(mandant2_sk))) DANN

mandant_pool_sk = mandant2_sk

SONST

mandant_pool_sk = MA

ENDE

nbw_sk = SELEKTIERE SKW.Wert VON SKW_Sachkonten_Wert MIT SKW.AI_Wertart_Code ISTGLEICH " Netto-Buchwert inkl. Zinsabgrenzungen (NBW) " UND SKW.AI_Sachkonto_ID ISTGLEICH sk

bz_sk = SELEKTIERE SKW.Wert VON SKW_Sachkonten_Wert MIT STW.AI_Wertart_Code ISTGLEICH " Beizulegender Zeitwert (BZ) " UND SKW.AI_Sachkonto_ID ISTGLEICH sk

//Für Sachkonten ist kein NN vorhanden, daher dient BW als Proxy

nn_sk = SELEKTIERE SKW.Wert VON SKW_Sachkonten_Wert MIT STW.AI_Wertart_Code ISTGLEICH " Buchwert (BW) " UND SKW.AI_Sachkonto_ID ISTGLEICH sk

ERMITTLE_BELASTUNGEN(NULL, NULL, sk, pool_sk, mandant_pool_sk, nbw_sk , bz_sk, nn_sk, wid_sk)

ERMITTLE_BELASTUNGEN(NULL, NULL, sk, NULL, NULL, nbw_sk , bz_sk , nn_sk, 100 - wid_sk )

ITERATION ENDE

FUNKTIONSENDE


//Subfunktion zur Ermittlung der Belastungswerte und Belastungsquelle inkl. Belastungsart für einen fixen Geschäftsfall, Sachkonto, oder Sicherheit

FUNKTION ERMITTLE_BELASTUNGEN (AI_Geschaeftsfall_ID gf, AI_Sicherheiten_ID st, AI_Sachkonto_ID sk, AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID pool, AI_Mandant mandant_pool, Wert nbw, Wert bz, Wert nn, Wert wid)

// Check ob das Objekt einem Pool zugeordnet ist 

summe_bab = 0

WENN(ISTLEER(pool)) DANN

belastungsquellen = SELEKTIERE ALLE GB.AI_Geschaeftsfall_ID2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT ("Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) " UND (GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk))

belastungsquellen_sk = SELEKTIERE ALLE GB.AI_Sachkonto_ID2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT ("Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) " UND (GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk))

SONST

belastungsquellen = SELEKTIERE ALLE GB.AI_Geschaeftsfall_ID2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT ("Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) " UND GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool UND GB.AI_Mandant ISTGLEICH mandant_pool)

belastungsquellen_sk = SELEKTIERE ALLE GB.AI_Sachkonto_ID2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT ("Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) " UND GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool UND GB.AI_Mandant ISTGLEICH mandant_pool)

ENDE

//In der folgenden Variable wird ein eventuell vorhandender eigener gehaltener Covered bond / Verbriefung, die eine Belastungsquelle darstellt, gespeichert. Sofern mehrere eigene gehaltene Covered bonds / Verbriefungen als Belastungsquellen auftreten, so wird nur eine solche Belastungsquelle stellvertretend abgelegt.

belastungsquelle_eigener_gehaltener_bond = NULL

belastungsquelle_eigener_gehaltener_bond_mandant = NULL

//Iteration über alle Belastungen durch Geschäftsfälle des betrachteten Objekts

ITERIERE belastungsquelle VON (1, Max(belastungsquellen))

WENN(ISTLEER(pool)) DANN

ma_belastungsquelle = SELEKTIERE GB.AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT ((GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk) UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle)

bab = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT ((GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk) UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle)

SONST

ma_belastungsquelle = SELEKTIERE GB.AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool UND GB.AI_Mandant ISTGLEICH mandant_pool UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle)

bab = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool  UND GB.AI_Mandant ISTGLEICH mandant_pool UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle)

ENDE

WENN(ISTLEER(ma_belastungsquelle)) DANN

WENN(ISTLEER(pool)) DANN

ma_belastungsquelle = MA

SONST

ma_belastungsquelle = mandant_pool

ENDE

ENDE

summe_bab = summe_bab + bab 

belastbares_objekt_belastungsquelle = SELEKTIERE GK.GKA07_Typ_des_belasteten_Objekts_Code VON GK_Geschaeftsfall_Konsolidierungssicht MIT (GK.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GK.AI_Mandant ISTGLEICH ma_belastungsquelle)

pool_der_belastungsquelle = SELEKTIERE GK.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID VON GK_Geschaeftsfall_Konsolidierungssicht VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GF.AI_Mandant ISTGLEICH ma_belastungsquelle)

mandant2_der_belastungsquelle = SELEKTIERE GF.AI_Mandant2 VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GF.AI_Mandant ISTGLEICH ma_belastungsquelle)

WENN(NICHT(ISTLEER(mandant2_der_belastungsquelle))) DANN

mandant_pool_belastungsquelle = mandant2_der_belastungsquelle

SONST

mandant_pool_belastungsquelle = ma_belastungsquelle

ENDE

wid_der_belastungsquelle = SELEKTIERE GFW.Wert VON GFW_Geschaeftsfall_Wert MIT GFW.AI_Wertart_Code ISTGLEICH " Widmungsanteil Pool (WID) " UND GFW.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle

belastungsquellen_der_belastungsquelle = SELEKTIERE ALLE GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT (" Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) ") UND GB.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GB.AI_Mandant ISTGLEICH ma_belastungsquelle)

WENN(NICHT(ISTLEER(pool_der_belastungsquelle))) DANN

belastungsquellen_der_belastungsquelle_pool = SELEKTIERE ALLE GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.GB01_Beziehungsart_Code ENTHAELT (" Belastung (BE) ", " Pensionsgeschäft echt (PE) ", " Leihe (LE) ") UND GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool_der_belastungsquelle UND GB.AI_Mandant ISTGLEICH mandant_pool_belastungsquelle)

ENDE

WENN(NICHT(belastbares_objekt_belastungsquelle ISTGLEICH " Einbehaltener/eigener gehaltener Covered bond oder ABS (CA) ")) DANN

//Sofern es sich bei der Belastungsquelle um einen einbehaltenen/eigenen gehaltenen Covered bond oder ABS handelt, so müssen diese gesondert abgehandelt werden: Entweder der einbehaltene/eigenen gehaltene Covered bond oder ABS ist selbst nicht belastet, dann sind auch die enthaltenen Assets nicht belastet. Oder der einbehaltene/eigenen gehaltene Covered bond oder ABS ist selbst belastet, dann ist eine Durchschau durchzuführen (siehe Spezialfall unter "SONST").

belastungsart = ART_DER_BELASTUNG(gf, MA, belastungsquelle, ma_belastungsquelle )

nbw_belastet = nbw * bab / 100 * wid /100

bz_belastet = bz * bab / 100 * wid / 100

nn_belastet = nn * bab / 100 * wid / 100

NEUER_DATENSATZ(gf, st, sk, pool, MA, belastungsquelle, NULL, mandant_belastungsquelle, belastungsart, nbw_belastet, bz_belastet, nn_belastet, bab * wid/100)

SONST

belastungsquelle_eigener_gehaltener_bond = belastungsquelle

belastungsquelle_eigener_gehaltener_bond_mandant = ma_belastungsquelle

WENN(NICHT(ISTLEER(belastungsquellen_der_belastungsquelle)) ODER NICHT(ISTLEER(belastungsquellen_der_belastungsquelle_pool))) DANN

//Abhandlung Spezialfall: Die Belastungsquelle ist ein einbehaltener Covered bond oder Asset-backed security. Sofern dieses einbehaltene WP selbst belastet ist, werden die Eigenschaften der ursprünglichen verknüpften Belastungsquelle durch die Eigenschaften der Belastungsquelle des einbehaltenen Wertpapiers überschrieben. In diesem Fall erfolgt eine Durchschau auf die "letzte" Belastungsquelle ("Lookthrough"). Falls das einbehaltene WP nicht belastet ist, so sind auch die darin enthaltenen Assets nicht belastet ("not yet pledged").

//Ermittle, wie hoch die Belastungsquelle in Summe selbst belastet ist

summe_bab_der_belastungsquelle = 0

ITERIERE belastungsquelle_der_belastungsquelle VON (1, Max(belastungsquellen_der_belastungsquelle))

bab2 = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GB.AI_Mandant ISTGLEICH ma_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle_der_belastungsquelle)

summe_bab_der_belastungsquelle = summe_bab_der_belastungsquelle + bab2

ITERATION ENDE

ITERIERE belastungsquelle_der_belastungsquelle_pool VON (1, Max(belastungsquellen_der_belastungsquelle_pool))

bab2_pool = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool_der_belastungsquelle  UND GB.AI_Mandant ISTGLEICH mandant_pool_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle_der_belastungsquelle_pool)

summe_bab_der_belastungsquelle = summe_bab_der_belastungsquelle + bab2_pool

ITERATION ENDE

// "Durchschau" 

WENN(summe_bab_der_belastungsquelle > 0)

ITERIERE belastungsquelle_der_belastungsquelle VON (1, Max(belastungsquellen_der_belastungsquelle))

bab2 = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GB.AI_Mandant ISTGLEICH ma_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle_der_belastungsquelle)

ma_belastungsquelle_der_belastungsquelle = SELEKTIERE GB. AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_ID ISTGLEICH belastungsquelle UND GB.AI_Mandant ISTGLEICH ma_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle_der_belastungsquelle)

belastungsart2 = ART_DER_BELASTUNG(belastungsquelle, ma_belastungsquelle , belastungsquelle_der_belastungsquelle, ma_belastungsquelle_der_belastungsquelle )

nbw_belastet = nbw * bab / 100 * wid / 100 * bab2/summe_bab_der_belastungsquelle * (100 - wid_der_belastungsquelle)/100

bz_belastet = bz * bab / 100 * wid / 100 * bab2/summe_bab_der_belastungsquelle * (100 - wid_der_belastungsquelle)/100

nn_belastet = nn * bab / 100 * wid / 100*  bab2/summe_bab_der_belastungsquelle * (100 - wid_der_belastungsquelle)/100

bab_belastet = bab * bab2/summe_bab_der_belastungsquelle * (100 - wid_der_belastungsquelle)/100 * wid/100

NEUER_DATENSATZ(gf, st, sk, pool, MA, belastungsquelle, NULL, mandant_belastungsquelle, belastungsart2, nbw_belastet, bz_belastet, nn_belastet, bab_belastet)

ITERATION ENDE

ITERIERE belastungsquelle_der_belastungsquelle_pool VON (1, Max(belastungsquellen_der_belastungsquelle_pool))

bab2_pool = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool_der_belastungsquelle  UND GB.AI_Mandant ISTGLEICH mandant_pool_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquelle_der_belastungsquelle_pool)

ma_belastungsquelle_der_belastungsquelle_pool = SELEKTIERE GB.AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool_der_belastungsquelle  UND GB.AI_Mandant ISTGLEICH mandant_pool_belastungsquelle UND GB.AI_Geschaeftsfall_ID2 ISTGLEICH belastungsquellen_der_belastungsquelle_pool)

belastungsart2_pool = ART_DER_BELASTUNG(belastungsquelle, ma_belastungsquelle , belastungsquelle_der_belastungsquelle_pool , ma_belastungsquelle_der_belastungsquelle_pool )

nbw_belastet_pool = nbw * bab / 100 * wid / 100 * bab2_pool /summe_bab_der_belastungsquelle * wid_der_belastungsquelle/100

bz_belastet_pool = bz * bab / 100 * wid / 100 * bab2_pool /summe_bab_der_belastungsquelle * wid_der_belastungsquelle/100

nn_belastet_pool = nn * bab / 100 * wid / 100 * bab2_pool /summe_bab_der_belastungsquelle * wid_der_belastungsquelle/100

bab_belastet_pool = bab * wid/100 * bab2_pool /summe_bab_der_belastungsquelle * wid_der_belastungsquelle/100

NEUER_DATENSATZ(gf, st, sk, pool, MA, belastungsquelle, NULL, mandant_belastungsquelle, belastungsart2_pool , nbw_belastet_pool , bz_belastet_pool , nn_belastet_pool , bab_belastet_pool)

ITERATION ENDE

ENDE

ENDE

ENDE

ITERATION ENDE

//Iteration über alle Belastungen durch Sachkonten des betrachteten Objekts

ITERIERE belastungsquelle_sk VON (1, Max(belastungsquellen_sk))

WENN(ISTLEER(pool)) DANN

ma_belastungsquelle_sk = SELEKTIERE GB.AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT ((GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk) UND GB.AI_Sachkonto_ID2 ISTGLEICH belastungsquelle_sk)

bab_sk = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT ((GB.AI_Geschaeftsfall_ID ISTGLEICH gf ODER GB.AI_Sicherheiten_ID ISTGLEICH st ODER GB.AI_Sachkonto_ID ISTGLEICH sk) UND GB.AI_Sachkonto_ID2 ISTGLEICH belastungsquelle_sk)

SONST

ma_belastungsquelle_sk = SELEKTIERE GB.AI_Mandant2 VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool UND GB.AI_Sachkonto_ID2 ISTGLEICH belastungsquelle_sk)

bab_sk = SELEKTIERE GBW.Wert VON GBW_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung_Wert MIT GBW.AI_Wertart_Code ISTGLEICH " belasteter Anteil (BAB) " VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID ISTGLEICH pool  UND GB.AI_Sachkonto_ID2 ISTGLEICH belastungsquelle_sk)

ENDE

WENN(ISTLEER(ma_belastungsquelle_sk)) DANN

ma_belastungsquelle_sk = MA

ENDE

summe_bab = summe_bab + bab_sk

nbw_belastet = nbw * bab_sk / 100 * wid / 100

bz_belastet = bz * bab_sk / 100 * wid / 100

nn_belastet = nn * bab_sk / 100 * wid / 100

NEUER_DATENSATZ(gf, st, sk, pool, MA, NULL, belastungsquelle_sk, mandant_belastungsquelle, "Andere Belastungsquellen - Sonstige (AS)", nbw_belastet, bz_belastet, nn_belastet, bab_sk * wid/100)

ITERATION ENDE

//Generiere Datensatz für den nicht belasteten Anteil des Objekts

bab_nicht_belastet = 100 - summe_bab

NEUER_DATENSATZ(gf, st, sk, pool, MA, belastungsquelle_eigener_gehaltener_bond, NULL, belastungsquelle_eigener_gehaltener_bond_mandant, "Keine Belastung (KB)", bab_nicht_belastet / 100 * wid / 100 * nbw , bab_nicht_belastet / 100 * wid / 100 * bz, bab_nicht_belastet /100 * wid / 100 * nn, bab_nicht_belastet * wid/100)

FUNKTIONSENDE



// Subfunktion zur Erstellung neuer Datensätze auf BE_Belastung und BEW_Belastung_wert

FUNKTION NEUER_DATENSATZ (AI_Geschaeftsfall_ID gfId_belastet, AI_Sicherheiten_ID stId_belastet, AI_Sachkonto_ID skId_belastet, AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID pool_belastet, AI_Mandant mandant_belastet, AI_Geschaeftsfall_ID gfId_belastungsquelle, AI_Sachkonto_ID skId_belastungsquelle, AI_Mandant mandant_belastungsquelle, BE01_Art_der_Belastung_Code belastungsart, Wert nbw,  Wert bz, Wert nn, Wert bab)

id = EINDEUTIGE_ID()

ERSTELLE NEUEN BE_Belastung UND SETZE:

SETZE AI_Belastung_ID = id

SETZE AI_Geschaeftsfall_ID = gfId_belastet

SETZE AI_Sicherheiten_ID = stId_belastet

SETZE AI_Sachkonto_ID = skId_belastet

SETZE AI_Geschaeftsfall_Sicherheiten_Sachkonten_Pool_ID = pool_belastet

SETZE AI_Mandant = mandant_belastet

SETZE AI_Geschaeftsfall_ID2 = gfId_belastungsquelle

SETZE AI_Sachkonto_ID2 = skId_belastungsquelle

SETZE AI_Mandant2 = mandant_belastungsquelle

SETZE BE01_Art_der_Belastung_Code = belastungsart

WENN(nbw != 0) DANN

ERSTELLE NEUEN BEW_Belastung_Wert UND SETZE:

SETZE AI_Belastung_ID = id

SETZE AI_Wertart_Code = "Netto-Buchwert inkl. Zinsabgrenzungen (NBW)"

SETZE Wert = nbw

ENDE

WENN(bz != 0) DANN

ERSTELLE NEUEN BEW_Belastung_Wert UND SETZE:

SETZE AI_Belastung_ID = id

SETZE AI_Wertart_Code = "Beizulegender Zeitwert (BZ)"

SETZE Wert = bz

ENDE

WENN(nn != 0) DANN

ERSTELLE NEUEN BEW_Belastung_Wert UND SETZE:

SETZE AI_Belastung_ID = id

SETZE AI_Wertart_Code = "Nominale (NN)"

SETZE Wert = nn

ENDE

WENN(bab != 0) DANN

ERSTELLE NEUEN BEW_Belastung_Wert UND SETZE:

SETZE AI_Belastung_ID = id

SETZE AI_Wertart_Code = "Belasteter Anteil des Buchwerts (BAB)"

SETZE Wert = bab

ENDE

FUNKTIONSENDE


// Subfunktion zur Ermittlung der Art der Belastung

FUNKTION ART_DER_BELASTUNG(AI_Geschaeftsfall_ID gfId_belastet, AI_Mandant mandant_belastet, AI_Geschaeftsfall_ID gfId_belastungsquelle, AI_Mandant mandant_belastungsquelle)

WENN(NICHT(ISTLEER(mandant_belastungsquelle))) DANN

mandant2  = mandant_belastungsquelle

SONST

mandant2 = mandant_belastet

ENDE

//Selektiere relevante Eigenschaften der Belastungsquelle

geschaeftsfallkategorie = SELEKTIERE GF.GF00_Geschaeftsfallkategorie_Code VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2 )

bilanzseite =  SELEKTIERE GK.GKA01_Bilanzseite_Code VON GK_Geschaeftsfall_Konsolidierungssicht MIT GK.AI_Kons_ID ISTGLEICH kons_id VON  GF_Geschaeftsfall MIT (GF. AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

sektor = SELEKTIERE EM.EMA49_Sektor_fuer_Meldezwecke_Code VON KR_Kundenrollen MIT AI_Rolle_Code ISTGLEICH " Inhaber (IH) " VON GF_Geschaeftsfall MIT (GF. AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

otcKZ = SELEKTIERE GF.GF39_OTC_Kennzeichen VON GF_Geschaeftsfall MIT (GF. AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

wpklassFinrep = SELEKTIERE WM.WM15_Wertpapierklassifikation_gem_FinRep_Code VON WM_Wertpapier_MS VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

wpklass = SELEKTIERE WM.WMA28_Wertpapierklassifikation_Code VON WM_Wertpapier_MS VON GF_Geschaeftsfall MIT (GF. AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

short = SELEKTIERE GF.GF40_Short_Position_Kennzeichen VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH gfId_belastungsquelle UND GF.AI_Mandant ISTGLEICH mandant2  )

geschaeftsfallkategorie_belastetes_objekt = SELEKTIERE GF.GF00_Geschaeftsfallkategorie_Code VON GF_Geschaeftsfall MIT (GF.AI_Geschaeftsfall_ID ISTGLEICH gfId_belastet UND GF.AI_Mandant ISTGLEICH mandant_belastet)

// Es ist möglich, dass eine Belastungsquelle mit mehreren belasteten Objekten verknüpft ist. Um sicherzustellen, dass nur eine Beziehungsart zurückgegeben wird, wird hier nur der MAX-Wert aller Beziehungen ausgewählt. Das ist zulässig, da die Belastungsquelle immer über die gleiche Beziehungsart mit den belasteten Objekten verknüpft sein muss.

beziehungsart = MAX(SELEKTIERE GB.GB01_Beziehungsart_Code VON GB_Geschaeftsfall_Sachkonto_Sicherheiten_Beziehung MIT (GB.AI_Geschaeftsfall_ID2 ISTGLEICH gfId_belastungsquelle UND GB.AI_Mandant2 ISTGLEICH mandant_belastungsquelle))

// In Sonderfällen (sofern es keine Verbindlichkeit zum belasteten GF gibt) ist der Geschäftsfall mit sich selbst verbunden. Dann wird immer "Andere Belastungsquellen" zurückgegeben. Auch durch Sachkonten belastete GF werden unter "Andere Belastungsquellen" ausgewiesen.

 WENN(gfId_belastet ISTGLEICH gfId_belastungsquelle UND mandant_belastet ISTGLEICH mandant2) DANN

rValue = " Andere Belastungsquellen - Sonstige (AS) "

 SONST WENN(bilanzseite ISTGLEICH " Passiv in der Bilanz (PAS) " UND sektor ISTGLEICH " Zentralbank (1210) ") DANN

 WENN(beziehungsart ISTGLEICH " Pensionsgeschäft echt (PE) ") DANN

 rValue = " Zentralbanken-Refinanzierung - Rückkaufsvereinbarungen (ZR) "

SONST

 rValue = " Zentralbanken-Refinanzierung - sonstige Einlagen außer Rückkaufsvereinbarungen (ZE) "

 ENDE

 SONST WENN(geschaeftsfallkategorie ISTGLEICH " Derivate (Q) ") DANN

WENN(otcKZ ISTGLEICH WAHR) DANN

rValue = " Außerbörslich gehandelte Derivate (AD) "

SONST

rValue = " Börsengehandelte Derivate (BD) "

ENDE

 SONST WENN(geschaeftsfallkategorie ISTGLEICH " Einlagen (L) ") DANN

WENN(beziehungsart ISTGLEICH " Pensionsgeschäft echt (PE) ") DANN

rValue = " Einlagen - Rückkaufsvereinbarungen, außer mit Zentralbanken (ER) "

SONST

rValue = " Einlagen, außer Rückkaufsvereinbarungen (EA) "

ENDE

SONST WENN(wpklassFinrep = " Gedeckte Schuldverschreibung gem. OGAW-Richtlinie (GO) " UND bilanzseite ISTGLEICH " Passiv in der Bilanz (PAS) UND short ISTGLEICH FALSCH) DANN

rValue = " Begebene Schuldverschreibungen - gedeckte Schuldverschreibungen (GS) "

SONST WENN(wpklassFinrep = " Forderungsgedecktes Wertpapier (FW) UND bilanzseite ISTGLEICH " Passiv in der Bilanz (PAS) UND short ISTGLEICH FALSCH) DANN

rValue = " Begebene Schuldverschreibungen - forderungsunterlegte Wertpapiere (FW)"

SONST WENN(wpklass ENTHAELT (" Schuldverschreibung (SCHV) ", " Credit Linked Note (CLN) ") UND bilanzseite ISTGLEICH " Passiv in der Bilanz (PAS) UND short ISTGLEICH FALSCH) DANN

rValue = " Begebene Schuldverschreibungen, außer gedeckten Schuldverschreibungen und ABS (SA) "

//Die Restmenge fällt unter "Andere Belastungsquellen".

  SONST WENN(geschaeftsfallkategorie ISTGLEICH " Empfangene Kreditzusagen (M) ") DANN

 rValue = " Andere Belastungsquellen - empfangene Darlehenszusagen (AR) "

// Die Kategorie "Andere Belastungsquellen - entgegengenommene Finanzgarantien (AF)" wird hier nicht zurückgegeben - mangels bekannter Anwendungsfälle wird dieser Typus nicht modelliert.

  SONST WENN(geschaeftsfallkategorie ISTGLEICH " Leihegabe (AA) ") DANN

WENN(geschaeftsfallkategorie_belastetes_objekt ENTHAELT (" Wertpapiere (H) ", " Investmentsfonds (I) ", " Verbriefung (J) ") DANN

rValue = " Andere Belastungsquellen - Wertpapierleihe mit unbaren Sicherheiten (AW) "

SONST

rValue = " Andere Belastungsquellen - Sonstige (AS) "

ENDE

SONST

 rValue = " Andere Belastungsquellen - Sonstige (AS) "

ENDE

ENDE

//Rückgabe

RUECKGABE rValue

FUNKTIONSENDE



  • No labels