Topflogik

  1. Prozess der Buchung und Zuweisung zu Töpfen:

    1. Zerschneiden der Buchungen:
      Die Buchungen eines Tages werden in einzelne Abschnitte unterteilt, wobei der Beginn und das Ende der Buchung zusammengeführt werden.

    2. Abgleich mit den Regeln für den Tag:
      Diese Abschnitte werden dann mit den festgelegten Regeln für den Tag abgeglichen. Beispiele:

      • Samstag: Über 50 Jahre (Ü50)

      • Vor 06:00 Uhr: Ü50

      • Zwischen 07:00 und 15:12 Uhr: Fahrzeitlohnart

    3. Zuweisung zu den Töpfen:
      Die Buchungen werden in verschiedene Töpfe abgelegt, wobei jeder Topf mehrere Lohnarten beinhalten kann. Zum Beispiel kann der Topf für die Normalarbeitszeit (NAZ) auch Urlaubsbuchungen und Fahrten beinhalten.


Was ist ein "Topf"?

Ein "Topf" ist ein Behälter, der:

  • Ein bestimmtes Zeitintervall abdeckt (z.B. Tages-, Wochen-, Monats- oder Jahrestöpfe).

  • Eine oder mehrere Lohnarten aufnehmen kann.

  • Ein Faktor zur Berechnung von Zuschlägen oder Abschlägen beinhaltet. Beispiel:

    • Ü50-Topf: Faktor = 150

    • ZA15-Topf: Faktor = 115

Optional hat der Topf:

  • Eine maximale Füllmenge: z.B.

    • Normalarbeitszeit-Tag: 7,7 Stunden

    • Normalarbeitszeit-Woche: 38,5 Stunden

    • MAZ-Tag: 1,3 Stunden

    • MAZ-Woche: 1,5 Stunden maximal

  • Eine minimale Füllmenge: z.B.

    • Normalarbeitszeit-Woche: mindestens 38,5 Stunden


Füllung der Töpfe:

  • Maximale Grenze überschritten:
    Wenn ein Topf seine maximale Füllmenge erreicht hat, wird der überschüssige Wert in den nächsten Topf übertragen.

  • Mindestfüllmenge nicht erreicht:
    Wenn ein Topf am Ende seines Zeitraums nicht die Mindestfüllmenge erreicht, wird dieser folgendermaßen aufgefüllt:

    1. Der Algorithmus prüft die Töpfe rechts vom aktuellen Topf. Er geht weiter, bis ein Topf mit einem höheren Faktor gefunden wird. Beispiel:

      • Von NAZ geht es weiter zu MAZ, dann zu ZA0, und so weiter.

    2. Sobald ein Topf mit einem höheren Faktor gefunden wurde, wird der benötigte Betrag aus diesem Topf entnommen – z.B. aus ZA0.

    3. Falls nach dieser Entnahme noch immer etwas fehlt, wird der nächste Topf mit dem gleichen oder einem höheren Faktor überprüft – z.B. von ZA0 zu MAZ.

    4. Wenn auch nach dieser Entnahme noch etwas fehlt, beginnt der Prozess erneut mit dem nächsthöheren Faktor.


Beispiel für die Reihenfolge der Töpfe:

  • Fahrzeit außerhalb Normalarbeitszeit (FZ außerhalb NAZ)

  • Normalarbeitszeit (NAZ)

  • Mehrarbeitszeit (MAZ)

  • Zuschlagsarten (ZA0)

  • Zuschlagsarten (ZA15)

  • Zuschlagsarten (ZA20)

  • Überstunden über 50 Jahre (Ü50)

  • Überstunden über 100% (Ü100)

 

Mögliche Parameter für die “fillingPatterns”

  • Boolean skip
    Wenn dieser Parameter auf "true" gesetzt ist (z.B. auf der Ebene einer Woche), wird der entsprechende Topf nicht benötigt. Alle Stunden werden direkt in den darunterliegenden Topf weitergeleitet.

  • String balance
    Mit diesem Parameter kann täglich oder wöchentlich überprüft werden, ob der Topf ein Defizit hat. Falls der Topf im Minus ist, wird geprüft, ob er Stunden aus anderen Töpfen entnehmen kann, um das Defizit auszugleichen.

  • Boolean blockWithdraw
    Wenn ein anderer Topf Stunden benötigt (z.B. durch einen Mindestwert oder weil der Topf im Minus ist und der "balance"-Parameter aktiviert wurde), werden Stunden aus benachbarten Töpfen entnommen. Ein Topf mit "blockWithdraw = true" wird dabei jedoch ignoriert.
    Ausnahme: Wenn bei dem Topf, dem Stunden fehlen, eine "withdrawOrder" angegeben wurde, können auch Stunden aus einem Topf mit "blockWithdraw" entnommen werden, falls welche verfügbar sind.

  • Boolean blockSpillover
    Dieser Parameter verhindert, dass überschüssige Stunden (Spillover) in andere Töpfe übertragen werden. Wenn auf "true" gesetzt, werden keine Stunden aus diesem Topf in benachbarte Töpfe übertragen.

  • Boolean leftWithdraw
    Wenn ein Topf aufgefüllt werden muss, werden zuerst Stunden aus dem benachbarten Topf links davon entnommen. Wenn dort nicht genug Stunden vorhanden sind, werden die verbleibenden Stunden in der üblichen Reihenfolge aus anderen Töpfen entnommen.

  • Lohnarten-Liste: withdrawOrder
    Diese Liste definiert die Reihenfolge der Töpfe, aus denen fehlende Stunden entnommen werden können. Wenn der Fehlbetrag nicht aus den angegebenen Töpfen gedeckt werden kann, wird der Prozess mit der Standard-Reihenfolge fortgesetzt. Beispiel:
    <withdrawOrder>120,130,400</withdrawOrder>
    Wird in der "withdrawOrder" ein Topf angegeben, bei dem "blockWithdraw = true" gesetzt ist, wird dies zugunsten der "withdrawOrder" ignoriert.

  • Lohnarten-Liste: withdrawOrderLimited
    Diese Liste legt die Reihenfolge der Töpfe fest, aus denen fehlende Stunden entnommen werden können. Wenn der Fehlbetrag nicht aus den angegebenen Töpfen gedeckt werden kann, wird der Vorgang abgebrochen. Beispiel:
    <withdrawOrderLimited>120,130,400</withdrawOrderLimited>

  • Boolean forcePrimaryWagetype
    Wenn dieser Parameter aktiviert ist, wird immer der primäre Lohnart-Typ verwendet, selbst wenn andere Lohnarten verfügbar sind.

  • BigDecimal minValueOffset
    Ein Wert, der verwendet wird, um den minimalen Wert eines Töpfs anzupassen.

  • BigDecimal maxValueOffset
    Ein Wert, der verwendet wird, um den maximalen Wert eines Töpfs anzupassen.

  • BigDecimal minValueAzmFactor
    Ein Faktor, der verwendet wird, um den minimalen Wert eines Töpfs basierend auf der Mehrarbeitszeit (Azm) anzupassen.

  • BigDecimal maxValueAzmFactor
    Ein Faktor, der verwendet wird, um den maximalen Wert eines Töpfs basierend auf der Mehrarbeitszeit (Azm) anzupassen.

  • BigDecimal maxValuePPeriodOffset
    Ein Wert, der verwendet wird, um den maximalen Wert eines Töpfs in Bezug auf einen bestimmten Zeitraum (PPeriod) anzupassen.

  • BigDecimal maxValuePPeriodAzmFactor
    Ein Faktor, der verwendet wird, um den maximalen Wert eines Töpfs basierend auf einem Zeitraum (PPeriod) und der Mehrarbeitszeit (Azm) anzupassen.

Mögliche Parameter auf “potMatrix” Ebene

Folgende Parameter können über dem <model> -Tag angegeben werden. Die Reihenfolge spielt keine Rolle.
  • enable75Rule

    • ab der 3. täglichen Überstunde (auch Mehrstunde) werden 75% (vor 19 Uhr) / 100% (nach 19 Uhr) Zulagen ausgelöst

    • dabei werden die Stunden, die an diesem Tag angesammelt wurden und einen Faktor <=150 haben aufsummiert; davon wir die Sollarbeitszeit abgezogen; die ersten beiden Stunden die übrig bleiben werden nicht verändert;

    • alles >2h wird auf 75% bzw. 100% umgebucht

    • die alten Buchungen bleiben bestehen um den Vorgang nachvollziehen zu können

    • Erforderlich:

      • zumindest ein Topf mit Ü75 (wird anhand des Faktors = 175 identifiziert) sowie

      • ein Topf mit Ü100 (Faktor = 200).

    • Beispiel:

    •  

  • adjustEndTimes

    • Wird dieser Parameter angegeben:

    • <adjustEndTimes>true</adjustEndTimes>

    • dann werden die BIS -Zeiten der einzelnen Lohnbuchungen dem Buchungswert angepasst;

    • Bsp.:

      • es wurde eine Arbeit von 13 bis 17 Uhr gebucht

      • ab 16 Uhr ist der Normalarbeitszeittopf (NAZ) gefüllt und läuft in den Mehrarbeitszeittopf (MAZ) über

      • Ohne adjustEndTimes wird einen Lohnbuchung mit

        • 13 bis 17 Uhr im Wert von 3h auf NAZ und eine

        • 16 bis 17 Uhr im Wert von 1h auf MAZ geschrieben; es wird also immer für die NAZ die gesamte Zeitspanne angedruckt; das kann für einzelne Anwendungen und Auswertungen erforderlich sein.

      • Mit adjustEndTimes werden die Zeiten ohne Überlappungen erzeugt

        • 13 bis 16 NAZ

        • 16 bis 17 MAZ

    • Wichtig: um auch die Aktiv-Zeiten entsprechend anzupassen ist zusätzlich die Mandanteneinstellung WAGEBOOKINGS_SPLIT_ADJUST_ACTIVE_TIMES auf true zu setzten

  • manualBookingsSentToPotMatrix

    • Standard = false (=NEIN)

    • Der Parameter bestimmt, ob manuelle Lohnbuchungen (bspw. vom Monteur am Mobile-App oder im Büro über die Korrektur-Maske eingetragen) für Überstunden (Topf-Logik) und Zulagenberechnung herangezogen werden sollen.

    • Ist dieser Parameter auf “true” gestellt:

      • erlaubt es z.B. manuelle Zusatzstunden für Entfzl. und die ZA Berechnung zu berücksichtigen

      • muss vorweg für alle potentiell manuell gebuchten Stunden geprüft werden ob sich auch tatsächlich für Zulagen und Überstunden herangezogen werden sollen!