Bezeichnung des Algorithmus | XEN_Belastung |
Kurzbezeichnung | Ermittlung 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ür | BE_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 |