ap_wage_item_time_type_stamp

Diese Funktion der venabo-Lohnengine ermittelt die Arbeitszeit eines Mitarbeiters innerhalb eines definierten Zeitintervalls – zum Beispiel 20-22 Uhr, 22-24 Uhr oder 00-06 Uhr. Das Ergebnis gibt venabo in Sekunden zurück.

Eigenschaft Wert
SystemLohnengine
KategorieZeitarten-Ermittlung
LevelZeitdauer
GruppeStempelzeiten / Arbeitszeitintervalle
RückgabetypINTEGER – Dauer in Sekunden

Zweck der Funktion

venabo liest die Stempelzeiten eines Mitarbeiters und berechnet, wie viele Sekunden davon in ein angegebenes Zeitintervall fallen. Die Funktion unterstützt folgende Szenarien:

  • Nacht- und Spätarbeit
  • Wochenendzeiten
  • Feiertagslogik (optional)
  • Sonntagseinbeziehung (optional)

💡 Tipp: Für Zeitintervalle, die Mitternacht überschreiten (z. B. 22:00-02:00), kombinieren Sie zwei Funktionsaufrufe per Addition – einen mit IS_NEXT_DAY = FALSE und einen mit IS_NEXT_DAY = TRUE.

Parameter

Parameter Typ Beschreibung
employeeIDMitarbeiter-ID
date_fromDATEStartdatum des Berechnungszeitraums
date_toDATEEnddatum des Berechnungszeitraums
WAGE_TYPE_BLOCK_ITEMSTRUCTStrukturparameter zur Steuerung der Berechnung
INCLUDE_SUNDAYSBOOLEAN (optional)TRUE = Sonntage einbeziehen, FALSE = Sonntage ausschließen

Relevante Felder im WAGE_TYPE_BLOCK_ITEM

Feld Wert / Typ Beschreibung
TIME_TYPE'STAMP'Kennzeichnet die Verwendung von Stempelzeiten
FROM_TIMETIME (optional)Beginn des Zeitintervalls, z. B. '20:00:00'
TO_TIMETIME (optional)Ende des Zeitintervalls, z. B. '22:00:00'
IS_NEXT_DAYBOOLEAN (optional)TRUE, wenn die Arbeit am Vortag begonnen hat und das Intervall nach Mitternacht liegt
OPERATOR'+'Addiert die ermittelte Zeit
WEEKDAY_FILTERINTEGER (optional)Filtert auf bestimmte Wochentage, z. B. 6 = Samstag, 7 = Sonntag
UNITWird von venabo nicht ausgewertet

Berechnungslogik

venabo führt die Berechnung in folgenden Schritten durch:

  1. Stempelzeiten des Mitarbeiters für den angegebenen Zeitraum lesen.
  2. Stempelzeiten nach FROM_TIME und TO_TIME filtern.
  3. IS_NEXT_DAY prüfen, um Nachtarbeit über Mitternacht korrekt zuzuordnen.
  4. Alle passenden Intervalle summieren.
  5. Sonntage einbeziehen oder ausschließen, sofern INCLUDE_SUNDAYS gesetzt ist.
  6. Ergebnis in Sekunden zurückgeben.

IS_NEXT_DAY im Detail

Dieses Feld ist entscheidend für die korrekte Erfassung von Nachtarbeit, die Mitternacht überschreitet:

Wert Verhalten
TRUEvenabo zählt die Zeit nur, wenn die Arbeit am Vortag vor 00:00 Uhr begonnen hat.
FALSEvenabo zählt die Zeit nur, wenn die Arbeit am selben Tag begonnen hat.

⚠️ Hinweis: Intervalle, die nach Mitternacht liegen, aber nicht am Vortag gestartet wurden, liefern den Wert 0. Stellen Sie sicher, dass Sie IS_NEXT_DAY korrekt setzen, um Nachtarbeit vollständig zu erfassen.

Verhaltensbeispiele – Zeitintervalle

Zeitintervall 02:00-03:00 Uhr

IS_NEXT_DAY = TRUE – venabo zählt nur Zeit aus Arbeitsbeginn am Vortag:

Gearbeitete Zeit Ergebnis
22:00-04:0001:00
22:00-23:0000:00
01:00-03:0000:00

IS_NEXT_DAY = FALSE – venabo zählt nur Zeit aus Arbeitsbeginn am selben Tag:

Gearbeitete Zeit Ergebnis
22:00-04:0000:00
22:00-23:0000:00
01:00-03:0001:00

Zeitintervall 22:00-04:00 Uhr

IS_NEXT_DAY = FALSE:

Gearbeitete Zeit Ergebnis
22:00-04:0006:00
22:00-23:0001:00
01:00-03:0000:00

IS_NEXT_DAY = TRUE:

Gearbeitete Zeit Ergebnis
22:00-04:0000:00
22:00-23:0000:00
01:00-03:0000:00

Praxisbeispiel

Szenario: Ein Mitarbeiter arbeitet von Montag bis Samstag in der Spätschicht (20:00-22:00 Uhr) sowie in der Nachtschicht (22:00-06:00 Uhr). Sie möchten für jeden dieser Zeitbereiche die Zuschlagsstunden separat erfassen.

Beispiel 1 – Spätschicht 20:00-22:00 Uhr (Mo-Sa)

SELECT ap_wage_item_time_type_stamp(
  %employee%, %date%, %date%,
  (SELECT (1,1,'STAMP',NULL,'20:00:00','22:00:00',FALSE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
) AS Zeit_20_22;

Beispiel 2 – Nachtarbeit 22:00-24:00 Uhr

SELECT ap_wage_item_time_type_stamp(
  %employee%, %date%, %date%,
  (SELECT (1,1,'STAMP',NULL,'22:00:00','00:00:00',FALSE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
) AS Zeit_22_24;

Beispiel 3 – Nachtarbeit 00:00-06:00 Uhr (Arbeit am Vortag begonnen)

SELECT ap_wage_item_time_type_stamp(
  %employee%, %date%, %date%,
  (SELECT (1,1,'STAMP',NULL,'00:00:00','06:00:00',TRUE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
) AS Zeit_00_06;

Beispiel 4 – Nachtarbeit 00:00-06:00 Uhr (Arbeit am selben Tag begonnen)

SELECT ap_wage_item_time_type_stamp(
  %employee%, %date%, %date%,
  (SELECT (1,1,'STAMP',NULL,'00:00:00','06:00:00',FALSE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
) AS Zeit_00_06;

Beispiel 5 – Arbeitszeiten 01:00-03:00 Uhr, Mo-Sa, ohne Sonntage

Hier kombiniert venabo zwei Aufrufe: einen für Arbeit, die am selben Tag begann, und einen für Arbeit vom Vortag. Sonntage (DOW = 0) werden per WHERE-Klausel ausgeschlossen.

SELECT
  (
    SELECT ap_wage_item_time_type_stamp(
      %employee%, CAST('%date%' AS date), CAST('%date%' AS date),
      (SELECT (1,1,'STAMP',NULL,'01:00:00','03:00:00',FALSE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
    )
    WHERE EXTRACT(DOW FROM CAST('%date%' AS date)) != 0
  )
  +
  (
    SELECT ap_wage_item_time_type_stamp(
      %employee%, CAST('%date%' AS date), CAST('%date%' AS date),
      (SELECT (1,1,'STAMP',NULL,'01:00:00','03:00:00',TRUE,NULL,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
    )
    WHERE EXTRACT(DOW FROM CAST('%date%' AS date)) != 0
  ) AS Zeit_01_03;

Beispiel 6 – Sonntags-Kombination: alle Zeiten am Sonntag inkl. Nachtarbeit vom Samstag

Dieser Aufruf erfasst alle Arbeitszeiten am Sonntag sowie Nachtarbeit, die am Samstag begann und in den Sonntag reicht (via IS_NEXT_DAY = TRUE, WEEKDAY_FILTER = 6).

SELECT
  (
    (SELECT ap_wage_item_time_type_stamp(
      %employee%,
      CAST('%date%' AS date),
      CAST('%date%' AS date),
      (SELECT (1,1,'STAMP',NULL,'00:00:00','23:59:00',FALSE,7,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
    )) +
    (SELECT ap_wage_item_time_type_stamp(
      %employee%,
      CAST('%date%' AS date),
      CAST('%date%' AS date),
      (SELECT (1,1,'STAMP',NULL,'23:58:00','23:59:00',FALSE,7,'DAY',NULL,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
    )) +
    (SELECT ap_wage_item_time_type_stamp(
      %employee%,
      CAST('%date%' AS date),
      CAST('%date%' AS date),
      (SELECT (1,1,'STAMP',NULL,'00:00:00','23:59:00',TRUE,6,'DAY',TRUE,NULL,NULL,NULL,'+',NULL,NULL,NULL,NULL,NULL,NULL,NULL,FALSE,NULL,NULL)::WAGE_TYPE_BLOCK_ITEM)
    ))
  ) AS Sonntag_Kombiniert;

Anwendungsbereiche

Die Funktion eignet sich für alle Szenarien, bei denen zeitabhängige Lohnzuschläge berechnet werden:

  • Nachtzuschläge
  • Spätarbeitszuschläge
  • Sonntagszuschläge (optional einbeziehbar)
  • Abgrenzung verschiedener Zeitintervalle in der Lohnabrechnung

Häufige Fragen

Warum liefert die Funktion den Wert 0, obwohl der Mitarbeiter gearbeitet hat?

Das liegt häufig an einer falsch gesetzten IS_NEXT_DAY-Einstellung. Prüfen Sie, ob die Arbeit am selben Tag oder am Vortag begonnen hat, und passen Sie den Parameter entsprechend an. Für Intervalle nach Mitternacht benötigen Sie in der Regel zwei kombinierte Aufrufe.

In welcher Einheit gibt venabo das Ergebnis zurück?

venabo gibt das Ergebnis immer in Sekunden zurück. Eine automatische Umrechnung in Minuten oder Stunden findet nicht statt – das übernehmen Sie in Ihrer weiteren Verarbeitung.

Wie erfasse ich Nachtarbeit, die Mitternacht überschreitet?

Verwenden Sie zwei Funktionsaufrufe und addieren Sie deren Ergebnisse: einen mit IS_NEXT_DAY = FALSE für den Anteil vor Mitternacht und einen mit IS_NEXT_DAY = TRUE für den Anteil nach Mitternacht. Beispiel 5 zeigt dieses Muster konkret.

Kann ich die Funktion auch für Feiertagszuschläge nutzen?

Ja. Die Funktion unterstützt optional eine Feiertagslogik. Steuern Sie das Verhalten über den WAGE_TYPE_BLOCK_ITEM-Strukturparameter. Für komplexe Feiertagsszenarien kombinieren Sie die Funktion mit einem entsprechenden Wochentagsfilter.

Zusammenfassung

Aspekt Details
RückgabeImmer in Sekunden (INTEGER)
IS_NEXT_DAYSteuert, ob Vortag- oder Tagarbeit gezählt wird – essenziell für Nachtschichten
MitternachtsintervalleZwei Aufrufe kombinieren (FALSE + TRUE) für vollständige Abdeckung
SonntageÜber INCLUDE_SUNDAYS oder WEEKDAY_FILTER = 7 steuerbar
Typische EinsatzbereicheNacht-, Spät- und Sonntagszuschläge in der Lohnabrechnung
UNIT-FeldWird von venabo nicht ausgewertet