Bezeichnung des AlgorithmusXEN_Laufzeitenberechnung
KurzbezeichnungLaufzeitenberechnung
Verbale Beschreibung/Beispiele

Dieser Algorithmus ermittelt für zwei Zeitpunkte (Datum 1 und Datum 2) die Laufzeit zwischen diesen zwei Zeitpunkten in Tagen, Monaten und Jahren (d_diff, m_diff, j_diff; Tage-Differenz, Monate-Differenz, Jahre-Differenz).

Allgemein gilt:

  • Datum 1 ist das ältere Datum (z.B. Geschäftsbeginn)
  • Datum 2 ist das jüngere Datum (z.B.: Geschäftsende)
  • Es werden alle Tage eines Monats gezählt (auch Feiertage und Wochenenden). Achtung: Die Ausprägung 1T der Codeliste Laufzeiten_CL nimmt hier eine Sonderstellung ein. Geschäfte, welche z.B. am Freitag abgeschlossen werden und am darauffolgenden Montag beendet werden, fallen über die Laufzeitenzuordnung auch unter die Kategorie 1T (siehe Algorithmus XEN_Laufzeitenzuordnung), auch wenn der Algorithmus XEN_Laufzeitenberechnung selbst nicht "1 T" ausgibt.

  • Weiters ist sind folgende Punkte zu beachten: 
    • Angefangene neue Monate zählen wie ein Monat (beispielsweise: 1.1.2008 bis 5.1.2009 => 13 Monate
    • Schalttage werden nicht extra gezählt (beispielsweise: 28.2.2003 bis 29.2.2004 = 12 Monate, 29.2.2004 bis 28.2.2005 = 12 Monate)
    • entsprechen die Zeitpunkte (Input-Daten) Monatsultimi, werden nur die Monate gezählt (beispielsweise: 28.2.2010 bis 31.8.2010 = 6 Monate)
    • sind die Tage der Zeitpunkte (Input-Daten) gleich, so werden nur die Monate gezählt (beispielsweise: 1.1.2013 bis 1.7.2013  6 Monate)

Der Algorithmus geht in folgenden Schritten vor:

  1. Handelt es sich bei den beiden Datumsangaben (Datum1 und Datum2) um Monatsultimi, so ist die Tages-Differenz auf null zu setzen (dh. d_diff = 0); Beispiele: 31.1.jjjj und 30.4.jjjj, 30.4.jjjj und 31.7.jjjj
  2. Sind die beiden Datumsangaben (Datum1 und Datum2) im Tag gleich, so wird die Tages-Differenz ebenso auf null gesetzt (dh. d_diff = 0); Beispiele:  3.1.jjjj und 3.2.jjjj, 28.2.jjjj und 28.4.jjjj
  3. Handelt es sich
    1.  bei Datum1 um ein Monatsultimo und ist d2 > d1 und wird der Fall durch Punkt 1. und 2. noch nicht erfasst, so liegt Datum1 im Februar und die Tages-Differenz wird ebenso auf null gesetzt (dh. d_diff = 0); Bespiele: (28.2.2010 bis 30.8.2010) = 6 Monate 
    2. bei Datum2 um ein Monatsultimo und ist d1 > d2 und wird der Fall durch Punkt 1. und 2. noch nicht erfasst, so liegt Datum2 im Februar und die Tages-Differenz wird ebenso auf null gesetzt (dh. d_diff = 0); Beispiele: (30.01.2021 bis 28.02.2021) = 1 Monat
  4. in allen anderen Fällen wird folgendermaßen vorgegangen:
    1. Ermittlung Tagesdifferenz: Bestimme die Differenz der Tag (dh. d_diff = Tag[Datum2] - Tag[Datum1])
      1. ist das Ergebnis dieser Berechnung positiv, so wird das Ergebnis in der Variable d_diff abgelegt
      2. ist das Ergebnis dieser Berechnung negativ, so wird zum Ergebnis (d_diff) die Anzahl der Tage des Monats des ersten Datums (Ultimo[Datum1]) hinzugezählt und es findet ein Übertrag auf die Monatsberechnung statt (dh. Monat[Datum2] wird um eins verringert)
        1. beispielsweise: Datum1 = 15.3.2012, Datum2 = 14.3.2012, dh. Tag[Datum2] - Tag[Datum1] = 14-15 = (-1) ist negativ 
          1. Addition von Ultimo[Datum1] = 31 zum Ergebnis: Tag[Datum2] - Tag[Datum1] + Ultimo[Datum1] = 14-15+31 = 30
          2. Übertrag auf die Monatsberechnung: das Monat des zweiten Datums (Datum2) wird um eins verringert, dh. Monat[Datum2] = 3-1 = 2
    2. Ermittlung der Monatsdifferenz: Bestimme die Differenz der Monate (dh.  m_diff = Monat[Datum2] - Monat[Datum1])
      1. ist das Ergebnis dieser Berechnung positiv, so wird das Ergebnis in der Variable m_diff abgelegt 
      2. ist das Ergebnis dieser Berechnung negativ, so wird zum Ergebnis (m_diff) die Anzahl der Monate eines Jahres (also 12) hinzugezählt und es findet ein Übertrag auf die Jahresberechnung statt (dh. Jahr[Datum2] wird um eins verringert)
        1. beispielsweise Datum1 = 15.3.2012, Datum2 = 15.2.2013, dh. Monat[Datum2] - Monat[Datum1] = 2-3 = (-1) ist negativ
          1. Addition von 12 zum Ergebnis: Monat[Datum2] - Monat[Datum1] + 12 = 2-3+12 = 11
          2. Übertrag auf die Jahresberechnung: das Jahr des zweiten Datums (Datum2) wird um eins verringert, dh. Jahr[Datum2] = 2013-1 = 2012
    3. Ermittlung der Jahresdifferenz: Bestimmung der Differenz der Jahre (dh. y_diff = Jahr[Monat2] - Jahr[Monat1])

Anmerkung: Wie oben erwähnt sind Feiertage nicht relevant, d.h. 15.7. bis 15.8. : 1 Monat.

Kommt vor in/wird verwendet fürGFA83_Ursprungslaufzeit_Code, GFA84_vertragliche_Restlaufzeit_Code, GFA86_Zinsanpassungsrestlaufzeit_Code, GFA87_Anfaengliche_Zinsbindungsfrist_Code
Formale Beschreibung

FUNKTION XEN_Laufzeitenberechnung (Datum1, Datum2)

// Bei diesen Algorithmus wird davon ausgegangen, dass Datum2 größer als Datum1 ist.

//ULTIMO(Datum) ist wahr, wenn sich der Tag des jeweiligen Datum am Monatsultimo befindet Bsp.: 31.12.2013, 28.2.2013,etc.

//GETULTIMO(Datum) gibt vom jeweiligen Datum den Monatsultimo in Tagen zurück. Beispiel: GETULTIMO(10.1.2014) =  31 (Der Jänner hat 31 Tage, am 31 tag ist der Monatsultimo), GETULTIMO(9.2.2008) =  29 (Der Februar 2008 war ein Schaltjahr daher gibt die Funktion den Wert 29 zurück.)

//Die Funktionen  get_day(), get_month() und get_year() geben jeweils den Tag, den Monat und die Jahres Zahl als ganzzahligen Wert zurück

d1 = get_day (Datum1);
d2 = get_day (Datum2);
m1 = get_month (Datum1);
m2 = get_month (Datum2);
y1 = get_year (Datum1);
y2 = get_year (Datum2),

WENN((ULTIMO(Datum1) ISTGLEICH WAHR UND ULTIMO(Datum2) ISTGLEICH WAHR) ODER (d1 ISTGLEICH d2) ODER (ULTIMO(Datum1) ISTGLEICH WAHR UND d2 > d1) ODER (ULTIMO(Datum2) ISTGLEICH WAHR UND d1 > d2)) DANN

//(1), (2) 

d_diff = 0;

SONST

//(3.a)

WENN (d1 > d2) DANN

//(3.a.ii)

d_diff = get_ultimo(Datum1) - d1 + d2;

WENN (m2 ISTUNGLEICH 1) DANN

m2 = m2 - 1;

SONST

m2 = 12;

y2 = y2 - 1;

ENDE

SONST

//(3.a.i)

d_diff = d2 - d1;

ENDE

ENDE

//(3.b)

WENN (m2 >= m1) DANN

//(3.b.i)

m_diff = m2 - m1;

SONST

//(3.b.ii)

m_diff = m2 - m1 + 12;

y2 = y2 - 1;

ENDE

//(3.c)

y_diff = y2 - y1;

RUECKGABE (d_diff, m_diff, y_diff)

FUNKTIONSENDE



  • No labels