-
-
Notifications
You must be signed in to change notification settings - Fork 18
Time Data
Mit der Payroll Engine werden die lohnrelevanten Mutationen gespreichert (non-evaluated) und nicht deren Auswirkung (evaluated). Zum Vergleich:
- Evaluierte Mutation: der Mitarbeiter hat im Monat Mai 3 Tage Sonderzulage
- Nicht-Evaluierte Mutation: der Mitarbeiter hat im 4. bis 6. Mai eine Sonderzulage
Die folgende Illustration zeigt die Auswirkung für den Anwender in der Dateneingabe:

Durch die Eingabe ab wann und bei wie lange der Wert gelten soll, bieten sich neue Möglichkeit in der Betrachtung und Verwaltung von Falldaten:
- Die Dauer der Mutation lässt sich befristen (Enddatum)
- Eine Mutation kann für die Zukunft terminiert werden (Startdatum)
- Eine Mutation kann in der Vergangehit starten (Startdatum, automatisch Rückrechnung)
- Jede Mutation kann rückwirkend storniert werden (Undo)
- Mehrfachmutationen mit zeitüberlagernde Datumsbereichen werden automatisch berechnet
- Die Auswertungszeitpunkt der Falldaten ist wählbar (was galt damals, wie sehen die Falldaten am Jahresende aus)
- Jede Mutation kann mittels Forecast simmuliert werden
| Type | Description | Period Start | Period End | Period Values | Example |
|---|---|---|---|---|---|
| Timeless | Value without time commitment | - | - | 1 | Pension obligation |
| Moment | Value which is assigned to a point in time | x | - | 1..n 3) | Bonus |
| Period | Value assigned to a period | x | (x) 1) 2) | n 4) | Working hours |
| Scaled Period | Value distributed to the calendar period | x | (x) 1) 2) | n 4) | Monthly wage |
1) A period without end date indicates an endless/open period
2) Eine zwingend geschlossene Periode wird mittels Scripting (Validierung) oder Case Actions (SetFieldEndRequired, SetEndRequired) erreicht.
3) Wahlweise die Summe oder der letzte aller Periodenwerte
4) Unlimited overlap support
Der Payrollkalender interpretiert die Zeitdaten nach zwei Zeiteinheiten:
-
Lohnzyklus in welchem die Löhne erfolgen, üblicherweise das Kalenderjahr (
CycleTimeUnit) -
Lohnperiod in der Zeitraum der Lohnzahlung wie z.B. der Kalendermonat (
PeriodTimeUnit)
Der Lohnzyklus ist immer ein Vielfaches der Lohnperiode
Die folgende Übersicht zeigt die möglichen Kombinationen beider Zeiteinheiten mit der Anzahl der Lohnzahlungen während eines Zyklus:
| Pay Period | Week Cycle | Bi-Week Cycle | Semi-Month Cycle | Lunar-Month Cycle | Month Cycle | Bi-Month Cycle | Quarter Cycle | Semi-Year Cycle | Year Cycle |
|---|---|---|---|---|---|---|---|---|---|
| Week | 1 | 2 | - | 4 | - | - | 13 | 26 | 52 |
| Bi-Week | - | 1 | - | 2 | - | - | - | 13 | 26 |
| Semi-Month 3) | - | - | 1 | - | 2 | 4 | 6 | 12 | 24 |
| Lunar-Month | - | - | - | 1 | - | - | - | - | 13 |
| Month 1) | - | - | - | - | 1 | 2 | 3 | 6 | 12 4) |
| Bi-Month 2) | - | - | - | - | - | 1 | - | 3 | 6 |
| Quarter 2) | - | - | - | - | - | - | 1 | 2 | 4 |
| Semi-Year 2) | - | - | - | - | - | - | - | 1 | 2 |
| Year 2) | - | - | - | - | - | - | - | - | 1 |
1) Übersteuerung der effektiven Anzahl der Tage im Kalendermonat mit einem Durchschnittswert
2) Fiskale Jahre mit dem Jahresstart an einem beliebigen Kalendermonat
3) Monatsaufteilung: [1 ... 15] + [16 ... Tage im Monat]
4) Default calendar
Für die Interpretation der Zeitdaten wird dem Kalender
- Zeitwert ist zyklisch (z.B. Jahreslohn) oder periodisch (z.B. Monatslohn)
- Werte auf Kalendertage oder Arbeitstage aufteilen (z.B. Montag bis Freitag)
Beispiel zweier Kalender:
"calendars": [
{
"name": "YearlySalary",
"cycleTimeUnit": "Year",
"periodTimeUnit": "CalendarMonth",
"valueType": "Cycle"
},
{
"name": "MonthlySalary",
"cycleTimeUnit": "Year",
"periodTimeUnit": "CalendarMonth",
"valueType": "Period"
}
],Der Kalender wird von folgenden Objekten bestimmt und kann auf verschiedenen Ebenen übersteuert werden. Es bestehen folgende Kalendernutzer in der Auswertungspriorität:
- Wage Type
- Empoloyee
- Division
- Tenant
- System-Default
Das folgende Beispiel zeigt ein Szenario, wo sich die Mutationen vom Monatslohn und Risikobonus überlagern:

Die Berechnung der Zeitwerte unter Berücksichtigung von Überlappungen ist mit den vier Basisoperatoren möglich:
- Addition
- Subtraktion
- Multiplikation
- Division
Mit dem folgenden Lohnarten-Script wird das obige Beispiel korrekt berechnet:
01 var values = GetCaseValues("Salary", "RiskBonus");
02 decimal baseSalary = values["Salary"];
03 return baseSalary + (values["Salary"] * values["RiskBonus"]);In der Zeile #01 werden die zu berechnenden Werte abgefragt, in diesem Fall Salary und RiskBonus. Für komplexere Szenarien ist die Parameterlsite entsprechend zu erweitern. Zeile #02 berechnet den Basis-Monatslohn, zu welchem in der Zeile #03 der Risikobonus addiert wird. Zu beachten ist der Mutliplikations-Operator welcher die Werte in Teilperioden aufteilt und die Werte pro Teilperiode multipliziert. Das Ergbnis ist die Summe aller Teilperioden-Produktwerte.
Die Umwandlung in Zeile
02indecimalist notwendig um den Wert in Zeile03als Zahlenwert zu erhalten.
🤝 Thank you for supporting this project with a donation.
⚡ This is a pre-relase version of the initial development, please read the restrictions.
- Payroll Engine