0

Problem der zeitlichen Eingrenzung bei komplexen Zugriff auf Daten aus mehreren verknüpften Tabellen

Hallo NINOX-Gemeinde,

noch ein - allerdings recht komplexes - Problem. Ich habe eine Tabelle mit Deklarationen (dort werden u.a. Prämien erfasst), jeweils mit einem Dekl.Datum . 

Die Deklarationen sind wiederum (Tabelle) Verträgen zugeordnet. Die Verträge haben Beteiligungsverhältnisse, d.h. es können mehrere Versicherer beteiligt sein mit x% (Gesamt dann 100%). Diese sind in einer Unterablle Verteilerplan erfasst.

Jeder Versicherer zahlt Provisionen, die allerdings nach verschiedenen Sparten unterschiedlich sein können. Dies ist erfasst in einer Tabelle Courtage (Name VR, Sparte, Satz in %) als Untertabelle/Kompositon zur Tabelle Versicherer.

Zur Erfassung von Prämienumsätzen und Provisionen muss ich also aufeinanderbekommen:

Versicherer, deren Verträge mit jewiligem Zeichnungsanteil, der Gesamtprämie (aus Tabelle Deklaration) und Buchungsdatum, damit in einer Auswertungstabelle, das Ganze auf einen Zeitraum (z.B. 2018, 2107 usw.) eingegrenzt werden kann.

Ich erfasse alles über eine Ansicht zur Tabelle Verteilerplan (hat im Wesentlichen die Felder: Verteilerplannummer, Auswahl (Aktiv oder alt), gültig ab, gültig bis, Führung (Auswahlfeld Ja/Nein),  und Anteil% (dieser ist wichtig, um später eine Gesamtprämie entsprechend der beteiligten Versicherer auf ihre Anteile zu verteilen).

Dies klappt soweit auch ganz gut. Ich summiere die Prämien in einer Ansicht zur Tabelle Verteilerpan mittels Funktion:

round((sum(Vertrag.Deklaration.'Gesamt netto') * 'Anteil%' / 100, 1) …

… den prozentualen Anteil aus dem Tabellenfeld (Tabelle Verteilerplan) Anteil% …

Provisionssatz mit first(Versicherer.Courtage.Satz) (Anm.: klappt hier mit Befehl first, da jedem Versicherer zu je einer bestimmten Sparte [in der Tabelle Courtage, Felder Nr, Versicherer, Sparte, Satz%] jeweils nur ein Provisionssatz zugeordnet ist.) …

…  und schließlich die Höhe der Provision mit: round((sum(Vertrag.Deklaration.'Gesamt netto')) * 'Anteil%' / 100 * first(Versicherer.Courtage.Satz) / 100, 1).

Soweit klappt es. Allerdings werden so alle Prämien und Provisionen, d.h. ohne zeitliche Begrenzung über alle Jahre summiert. Nun ist es allerdings erforderlich, die Prämien und Provisionen zeitlich eingrenzen zu können.

Mit einem Funktionszugriff in der Ansicht auf die Tabelle Deklaration und dort auf das Feld Dekl.Datum - dies wäre aber wichtig, um nur Prämien die an ein bestimmtes Datum gekoppelt sind zu erassen -  klappt es nicht, da über diesen Weg nur die Möglichkeit (Sum, Durchschnitt, größer, kleinster, erster, letzter, oder Aufzählung aller) möglich ist. 

Ich kann dann eben nicht auf einen bestimmten Zeitraum (z.B. 1.1.-31.12.2018 oder 2018) begrenzen.

Hat jemand eine Idee?
--------------------------------

Es wirken zusammen die Tabellen und Verknüpfungen:

Kunde (dort werden die Kunden erfasst) verknüpft mit Tabellen: [1:N  Vertrag],

Vertrag (dort wird verwaltet u.a. Vertragsart/Sparte, Laufzeit von bis u.a.) verknüpft mit Tabellen  [ N:1 Sparte, 1:N Deklaration, N:1 Kunden, 1:N Verteilerplan].

Versicherer (dort werden die jeweiligen Versicherer verwaltet) verknüpft mti den Tabellen [1:N Verteilerplan - darüber erfolgt die Verknüpfung zu Verträgen (Tabelle Vertrag) mit jeweiligen %tualen Anteil]

Deklaration (hierin erfasst werden einzelne Prämienpositionen zu einem Vertrag mit Betrag, Laufzeit von,bis u.a.) verknüpft mit Tablle [N:1 Vertrag]. Aus dieser Tabelle werden die saldierten Prämienbeträge „abgeholt“

Courtage (Felder 1:N Versicherer, 1:N Sparte, Satz%) verküft mti den Tabellen [als Untertabelle/Komposition zu Versicherer und N:1 Sparte] - hieraus wird je Versicherer und Sparte der Prov.Satz „abgeholt“ und  schließlich

Verteilerrplan (hier insb. mit dem Feld Prozent = Anteil in Höhe %) verküpft mit den Tabellen [N:1 Vertrag - dort wird u.a. geregelt, zu welcher Sparte der Vertrag gehört - und N:1 Versicherer - wegen der Höhe der Prov. abhängig von Sparte und Anteil aus Verteilerplan].

Oder gibt es einen komplett andereren Ansatz (z.B. eine eigenständige Tabelle, die mit den anderen Tabellen (insb. Vertag, Deklaration, Courtagen) zu verknüpfen wäre, um daraus die einzelen Positionen abzuholen? Wie wären dann jedoch Felder zu generieren, da ja aus der Tabelle Deklaration die Prämien und Buchungsdaten abzuholen wären (kein Problem), aus Versicherer bzw. Verteilerplan der oder (dies macht es ja schwierig, bei mehreren) die Versicherer, dessen/derenAnteil in %. Hier beginnt das Problem, da ja für eine einzelne Prämienbuchung entweder nur 1 Versicherer mit 1 Provsionssatz oder aber zwei oder mehr Versicherer mit gfs. unterschiedlichen Provisionssätzen (abhängnig von der Sparte) zum Zuge kommen können. Mit anderen Worten, einer Prämie lässt sich nicht statisch ein Versicherer (dies wäre einfach) zuordnen, sondern es können auch zwei oder mehr sein.

Daher hatte ich de Weg über eine Ansicht zur Tabelle Vertilerplan gewählt. Hier besteht nur das geschildeerte Problem der zeitlichen Eingrenzung. Ich hoffe, ich habe meine Heruasforderung verständlch geschildert?

5 Antworten

null
    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Manfred,

    ohne Datenmodell schwierig zu verstehen. Generell kann man die Anzal der Datensätze so begrenzen:

    round((sum(Vertrag.Deklaration[year('Dekl.Datum')=2018].'Gesamt netto')) * 'Anteil%' / 100 * first(Versicherer.Courtage.Satz) / 100, 1)

    Leo

    • MReinert
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

     

    die Formel habe ich sowiet verstanden; die Vorgabe [year('Dekl.Datum')=2018 ist ja allerdings statisch. Kann man die feste Vorgabe (hier 2018) auch durch einen mittels eines Feldes in der Tabelle "Verteilerliste" erhobenen Wertes (2018, 2019 etc) ersetzen, und wenn ja, wie am besten?

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Manfred,

    wenn Formel sich in der Tabelle Verteilerliste befindet und dort das Feld z.B. "Jahr" gibt, dann wäre so etwas möglich;

    ---

    let myYear:=Jahr;

    round((sum(Vertrag.Deklaration[year('Dekl.Datum')=myYear].'Gesamt netto')) * 'Anteil%' / 100 * first(Versicherer.Courtage.Satz) / 100, 1)

    ---

    Leo

    • MReinert
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Vielen Dank Leo, super.

    • MReinert
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    hierzu noch einen erläuternden Nachsatz. Dein Formelvorschlag "let myYear := 'Vers.Jahr';
    (sum(Vertrag.Transport_Deklaration[year(Datum) = myYear].Netto_gesamt) + sum(Vertrag.Deklaration[year(Datum) = myYear].'Gesamt netto')) * 'Anteil%' / 100" funktioniert, allerdings mit einer kleinen Einschränkung.

    Ich habe in der Tabelle Verteilerplan ein Feld <Vers.Jahr> eingebaut. Dieses dient für Deine Formel als Filter, um die Prämien für eben nur ein bestimmtes Jahr herauszufiltern. Die Tabelle Verteilerplan enthält nun viele Datensätze (pro Vertrag mindestens ein Verteilerplan, ggfs. aber auch mehrere, mit unterschiedlichen Versicherern und evtl. einer unterschiedlichen Anzahl an Versicherern). Um nun die Courtagen eines Jahres herauszufiltern, reicht es nicht aus, in nur einem Feld für das Feld <Vers.Jahr> z.B. 2018 einzutragen, sondern es müssen ja alle Datensästze der Tabelle im Feld <Vers.Jahr> mit 2018 vorbelegt werden. Dazu muss man dann halt über Massendatenänderung in allen Sätzen das Feld <Vers.Jahr> mit dem festen Wert 2018 oder 2017 usw. vorbelegen. Dann klappt es zuverlässig.

    Eine bessere Lösung, als die Courtagen über die Tabelle Verteilerplan zu erfassen, fällt mir nicht ein. Du hast recht mit Deiner Vermutung, dass die Struktur der gesamten Anwendung sehr komplex ist. Sie besteht aus zahlreichen Tabellen, die vielfach miteinander verknüpft sind. Zur allg Info. 

    Es gibt viele Kunden in einer Tabelle "Kunden"; jeder Kunde kann ein oder mehrer Verträge haben (Tabelle Vertrag). Jeder Vertrag ist einer bestimmten Sparten (viele Sparten), z.B. Kfz, Sach, Haftpflciht usw. zugeordnet. Zu jedem Vertrag gibt es darüber hinaus eine oder mehrere (über die Jahre = viele Deklarationen); jede Deklaration erfst einen bestimmten Zeitraum innerhalb eine Vers.Jahres und kann eine bis mehrere (viele) Einzelprämienpositionen umfassen. Bis dahin bereitet es keine Problem Prämienumsätze zu erfassen. 

    Schwieriger wird es eben mit der Provision (Courtage). Da jeder Vertrag einem (bei 100%) oder mehreren Versicherern (mit x% Anteil) zugeordnet ist und jeder Versicherer zu einer bestimmten Sparte (es gibt viele Sparten) unterschiedlich hohe Provisionssätze zahlt und pro Vertrag mindestens ein Verteilerplan zugeordnet ist (es können aber auch mehere sein, wobei es auch vorkommen kann, dass innerhalb eines Jahres eine Beteiligung wechselt), wird die ERsassusng der Courtagen eben schwieriger.

    Die gemeinesame Zuordnung einer 100%-tigen Prämie ist ein Vertrag, mit einer bestimtmen Sparte für einen bestimmten Zeitraum, wobei der Zeitraum in ein Versicherungsjahr fällt (kurzfiristige Prämie) oder mit diesem identsich ist. Es gibt also zahlreichen Parameter- Die Erfasssung mit obiger Formel über die Tabelle Verteilerplan klappt und mit der beschriebenen Zuordnung auf ein bestimmtes Jahr (Massendatenänderung aller angezeigten Sätze), lassen sich die Provisionsumsätze für eine bestimmtes Jahr erfassen (zugeordnet auf Verträge, Versicherer, Sparten etc). Ich bin damit zufrieden, da mit kein besserer Weg einfällt. 

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 5Antworten
  • 2374Ansichten