Kündigungsfristen berechnen

Wer Verträge oder sonstige Objekte in einer Datenbank speichert, möchte gegebenenfalls auch einmal die möglichen Kündigungstermine ermitteln. Und das ist gar nicht so einfach: Schon das Erfassen der relevanten Vertragsdaten hat es in sich, aber das Programmieren einer Funktion zum Ermitteln des nächstmöglichen Kündigungstermins ist eine echte Herausforderung.

Der Anlass für diesen Beitrag ist eigentlich die ebenfalls in dieser Ausgabe vorgestellte Vertragsverwaltung, aber das Ermitteln von Kündigungsterminen ist durchaus auch für andere Anwendungen interessant – und das nicht nur für Unternehmen, sondern auch oder gerade für Privatpersonen.

Oder haben Sie sich noch nie geärgert, wenn Sie wieder einmal den Kündigungstermin für die Mitgliedschaft im Fitness-Studio oder für das Abo der nicht mehr benötigten Fernsehzeitung verpasst haben

Vertragseigenschaften

Das Berechnen einer Kündigungsfrist erfordert zunächst das Vorhandensein folgender Eigenschaften:

  • Vertragsbeginn: Datum, ab dem der Vertrag gültig ist
  • Laufzeit: Laufzeit des Vertrags in Monaten
  • Mögliches Vertragsende: Zeitpunkt, zu dem mit einer gegebenenfalls vorhandenen Kündigungsfrist gekündigt wird: “Monatsbeginn”, “Monatsende”, “Quartalsbeginn”, “Quartalsende”, “Jahresbeginn”, “Jahresende”, “abhängig von Vertragsbeginn und Laufzeit”
  • Kündigungsfrist: Zeitraum, der zwischen Aussprechen der Kündigung und dem nächstmöglichen Vertragsende liegen muss
  • Laufzeitverlängerung: Zeitraum in Monaten, um den sich der Vertrag verlängert, wenn er nicht gekündigt wird

Verträge auf Eigenschaften abbilden

Mit diesen fünf Eigenschaften lassen sich alle herkömmlichen Varianten von Vertragslaufzeit/Kündigung beschreiben. Beim Vertragsbeginn gibt es keinen Spielraum: Der ist definitiv für jeden Vertrag vorhanden.

Die Laufzeit wird üblicherweise in Monaten angegeben. In manchen Fällen enthält der Vertrag auch ein konkretes Vertragsende. Beides lässt sich mit der Laufzeit und dem möglichen Vertragsende beschreiben: Ein Vertrag, der vom 15.1.2006 an genau ein Jahr laufen soll, endet am 15.1.2007; die Laufzeit beträgt entsprechend 12 Monate und das mögliche Vertragsende hängt vom Vertragsbeginn ab.

Autoversicherungen enden am 31.12. eines Jahres, also sähen die passenden Vertragseigenschaften so aus: Der Vertragsbeginn ist irrelevant, die Laufzeit auch, aber als mögliches Vertragsende geben Sie das Ende des Jahres an.

Die Versicherung verlängert sich jeweils um ein Jahr, wenn Sie nicht einen Monat vor Ablauf der Versicherung kündigen; dementsprechend lässt sich das auch mit den oben beschriebenen Eigenschaften darstellen: Die Kündidungsfrist beträgt 1 (ein Monat) und die Laufzeitverlängerung 12 (zwölf Monate beziehungsweise ein Jahr).

Wenn ein Vertrag nur ein Jahr vom Vertragsbeginn an laufen soll, beträgt der Wert der Laufzeit 12 (zwölf Monate) und das mögliche Vertragsende “abhängig von Vertragsbeginn und Laufzeit”. Die Kündigungsfrist und die Laufzeitverlängerung betragen beide 0 (0 Monate).

Ein Vertrag, der mit zwei Monaten Kündigungsfrist zum Ersten eines Monats gekündigt werden kann, kann so beschrieben werden: Laufzeit ein Monat, mögliches Vertragsende “Monatsbeginn”, Kündigungsfrist zwei Monate, Laufzeitverlängerung ein Monat.

Denkbar wäre aber auch folgende Schreibweise: Der Vertrag ist nicht befristet (Laufzeit 0 Monate), mögliches Vertragsende ist der “Monatsbeginn”, die Kündigungsfrist beträgt zwei Monate und die Laufzeitverlängerung ebenfalls 0 Monate.

Kündigungsfristen

Bezüglich der Kündigungsfristen ist Folgendes zu beachten:

Verträge mit einer angegebenen Laufzeit und einer Laufzeitverlängerung von 0 Monaten haben keinen Kündigungszeitpunkt, da sie nicht gekündigt werden können.

Verträge mit unbefristeter Laufzeit (Laufzeit ist 0) und einer Laufzeitverlängerung von 0 Monaten können jeweils mit der angegebenen Kündigungsfrist zum angegebenen Kündigungszeitpunkt gekündigt werden (etwa zwei Monate zum Jahresende).

Verträge mit unbefristeter Laufzeit, aber einer Laufzeitverlängerung von x Monaten können jeweils mit der angegebenen Kündigungsfrist zu einem Vielfachen von x Monaten nach Vertragsbeginn gekündigt werden (Beispiel: Laufzeitverlängerung beträgt zwei Monate, Kündigung kann alle zwei Monate unter Berücksichtigung der angegebenen Kündigungsfrist gekündigt werden).

Funktion zum Berechnen des nächsten Kündigungszeitpunktes

Nun wäre dies kein Fachmagazin für Datenbankentwicklung, wenn wir diese Informationen nicht in einer Tabelle abbilden und eine Funktion vorstellen würden, die für alle Fälle den nächstmöglichen Kündigungszeitpunkt ermittelt.

Was das Datenmodell angeht, finden Sie alle notwendigen Informationen im Beitrag zur Musterlösung Vertragsverwaltung [1]. Der vorliegende Beitrag kümmert sich ausschließlich um die Berechnung des Kündigungszeitpunktes – und das in Form einer passenden VBA-Funktion.

Die nachfolgend beschriebene Funktion verlangt nach den weiter oben erläuterten Parametern mit folgenden Bezeichnungen:

  • dateAktuellesDatum: Erwartet das für die Berechnung des nächsten Kündigungszeitpunkts maßgebliche Datum.
  • dateVertragsstart: Startdatum des Vertrags
  • intLaufzeit: Laufzeit in Monaten
  • lngKuendigungszeitpunkt: Art des Kündigungszeitpunktes. Erwartet einen der Werte der Enumeration eKuendigungszeitpunkt (s. Listing 1).
  • intKuendigungsfrist: Kündigungsfrist in Monaten
  • intLaufzeitverlaengerung: Verlängerung der Laufzeit nach nicht erfolgter Kündigung in Monaten

Listing 1: Diese Enumeration enthält die unterschiedlichen Kündigungszeitpunkte.

Public Enum eKuendigungszeitpunkt
     eKuendigungszeitpunkt_Startdatum = 1
     eKuendigungszeitpunkt_Monatsende = 2
     eKuendigungszeitpunkt_Quartalsende = 3
     eKuendigungszeitpunkt_Jahresende = 4
     eKuendigungszeitpunkt_Monatsbeginn = 5
     eKuendigungszeitpunkt_Quartalsbeginn = 6
     eKuendigungszeitpunkt_Jahresbeginn = 7
End Enum

Die Ermittlung des nächsten Kündigungszeitpunkts ist entsprechend der Vielfalt der möglichen Konfigurationen der Vertragslaufzeiten und Kündigungsfristen relativ kompliziert. Genau genommen ist es noch nicht einmal die Berechnung, die die größten Probleme beim Erstellen einer solchen Funktion macht, sondern das Ermitteln der möglichen Fälle und der unterschiedlichen Abläufe der Funktion.

Als große Hilfe für solche Fälle erweist es sich immer wieder, automatisiert zu testen. Nicht immer muss man dabei direkt zu einem Unit-Testing-Framework greifen – im Falle einer einzigen Funktion kann man die Tests auch einfach in eine Routine schreiben und die Ergebnisse im Direktfenster ausgeben. In diesem Fall sieht das etwa wie in Listing 2 aus.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar