Zeitscheibe - Stammdaten
- 1 Allgemein
- 2 Notation
- 2.1 Struktur
- 2.2 Konfiguration
- 2.3 Wochentage
- 2.4 DateRange
- 2.5 TupleType
- 2.6 Tags
- 2.7 Regel abhängig von Objekt und Auftragsdaten
- 2.7.1 Syntax filterTerm
- 2.7.2 Syntax filterRegEx
- 2.7.2.1 Beispiel
- 3 Demo-Beispiel mit Kommentar
Allgemein
Die Zeitscheibe definiert, welche Lohnart in welcher Periode und mit welchen Bedingungen angewendet werden soll.
Die Konfiguration wird in der Systemkonfiguration zusammengestellt.
Hierfür werden alle Bedingungen vom Detail zur Allgemeinheit konfiguriert jeweils für
Arbeit - work (Auftragsbuchung)
Fahrzeiten - drive / codrive (Fahrer und Beifahrer)
aktive - aktive (nicht zugeordnete Tätigkeiten)
Vorgehen:
Sonderzeiten (Urlaub, Krankenstand,…)
Sonn- und Feiertagsarbeit - mit und ohne Bereitschaft
Samstag - mit und ohne Bereitschaft
Wochendienste (Vier- und Fünftagewoche)
Notation
Struktur
Basisdaten:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeSliceModel>
<ruleSet>
<fromTime>22:00</fromTime> <!-- VON -->
<endTime>06:00</endTime> <!-- BIS -->
<addOn>true</addOn> <!-- OPTIONAL -->
<hourlyBased>false</hourlyBased> <!-- OPTONAL -->
<dayOfWeek>*</dayOfWeek> <!-- TAGE -->
<dateRange>09.09.-10.09.</dateRange> <!-- GÜLTIGKEIT ZEITRAUM -->
<tupleType>work_drive_codrive</tupleType> <!-- ART -->
<standbytime>Rufbereitschaft</standbytime> <!-- OPTIONAL -->
<maxWorkday>false</maxWorkday> <!-- VON -->
<minWorkday>false</minWorkday> <!-- VON -->
<factor>50.00</factor> <!-- OPTIONAL -->
<hourlyBased>false</hourlyBased> <!-- OPTIONAL -->
<matchingWT>*LOHNART*</matchingWT> <!-- LOHNART -->
</ruleSet>
</timeSliceModel>
Konfiguration
Um alle Sonderzeiten pauschal auch ohne Abschluss für die Berechnung heranzuziehen:
<acceptAllUnconfirmedSonderzeit>true</acceptAllUnconfirmedSonderzeit> Sonst explizite Angabe in der Zeitscheibe:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeSliceModel>
<unconfirmedSonderzeit>Präsenzdienst</unconfirmedSonderzeit>
<unconfirmedSonderzeit>Schulung</unconfirmedSonderzeit>
<unconfirmedSonderzeit>Umzug</unconfirmedSonderzeit>
<unconfirmedSonderzeit>Urlaub</unconfirmedSonderzeit>
...
<ruleSet> ...Wochentage
Für den <dayOfWeek> -Tag sind folgende Werte zulässig:
Deutsch | Englisch | Beschreibung |
|---|---|---|
|
| Regel zieht für jeden Tag |
|
| Nur Montage |
|
| Nur Dienstage |
|
| Nur Mittwoche |
|
| Nur Donnerstage |
|
| Nur Freitage |
|
| Montag bis inkl. Donnerstag |
|
| Montag bis inkl. Freitag |
|
| Montag bis inkl. Samstag |
|
| Samstag |
|
| Sonn- und Feiertage |
|
| Nur Sonntage wenn kein Feiertag |
|
| Jeder Feiertag |
|
| Regel zieht für den 24.12. sowie 31.12. |
|
| Regel zieht für Feiertage an einem Samstag |
|
| Regel zieht für Feiertage an einem Sonntag |
|
| Regel für bestimmte Tage / Zeitraum zb. zwischen 24.12. und 06.01 |
Die Bezeichner können beliebig deutsch oder englisch verwendet werden; die Groß-Kleinschreibung spielt keine Rolle.
DateRange
Zeitscheiben-Regeln können zusätzlich auf bestimmte Einzeltage oder Zeiträume eingeschränkt werden:
Format | Beispiel | Beschreibung |
|---|---|---|
|
| gültig für einen definierten Kalendertag; optional mit Einschränkung auf Kalenderjahr |
|
| gültige für eine Liste (Komma-getrennt) von Kalendertagen; optional (je Eintrag): Kalenderjahr |
|
| Zeitraum von-bis Optional Kalenderjahr |
Zu beachten: ungültige Kalendertage (bspw. 30.02.) führen dazu, dass die Regel als nicht zutreffend ignoriert wird - so als ob das Datum/der Datumsbereich nicht zutrifft.
TupleType
Unter dem Begriff TupleType <tupleType> ist die Art der Tätigkeit zu verstehen die mit der Regel adressiert werden soll.
Zur Auswahl stehen:
TupleType | Beschreibung |
|---|---|
| Arbeit an einem Termin |
| Arbeitszeit (d.h. zwischen Tagesbeginn-Buchung und Tagesende-Buchung) die nicht auf einem Termin gearbeitet wird (work) |
| Fahrzeit, entweder als Fahrer (kleines Lenkrad-Symbol das an einen Fußball erinnert) bzw. Beifahrer |
| Wenn die Fahrt- und Arbeitszeiten gleich geregelt sind, können diese in einer Regel zusammengefasst werden. Aktivzeiten gehören einzeln geregelt! |
| Zeit auf einer Sonderzeit; die Sonderzeit ist in dem Fall in einem Tag anzugeben. Bsp.:
|
| Gebuchte Bereitschaften werden von dieser Regel erfasst. Optional kann die Regel auf eine bestimmte Art von Bereitschaft eingeschränkt werden. Bsp.:
|
| Gebuchte Pausen können damit auf Lohnbuchungen umgelegt werden; bspw. um bei Pausen zw. Lohn- und Faktur zu unterscheiden |
Tags
Mit den “Tags” <<onlyWithTag>> kann die Art der Tätigkeit noch weiter untergliedert werden.
Zur Auswahl stehen:
Tag | Beschreibung |
|---|---|
|
|
|
|
| Berücksichtigt Fahrzeiten, nur dann wenn diese an die Aktivzeit angrenzen |
| Berücksichtigt Fahrzeiten, die nicht an die Aktivzeit grenzen |
|
|
|
|
|
|
|
|
| Berücksichtigt Fahrzeiten, nur dann wenn diese an die Aktivzeit angrenzen |
| Berücksichtigt Fahrzeiten, die nicht an die Aktivzeit grenzen |
|
|
|
|
| kann in Kombination mit dem TupeType Work verwendet werden, um in der Regel Arbeiten an einem Auftrag welche in der Firma verrichtet werden eigens zu behandeln. |
| nicht verrechenbar |
| für Fahrzeiten auf Sonderzeiten - aktive Fahrzeit |
| für Fahrzeiten auf Sonderzeiten - passive Fahrzeit |
Regel abhängig von Objekt und Auftragsdaten
Mitunter ist es notwendig unterschiedliche Lohnarten oder Zeit-Regeln für verschiedene Auftrags/Objekt/Kunden zu hinterlegen.
So könnten Großkunden andere Faktur-Lohnarten zugeordnet haben oder abhängig von der erforderlichen Qualifikation bei einem Auftrag andere Regeln angewendet werden.
Dazu ist es möglich bei jeder Regel <ruleSet> ein Filter-Kriterium anzugeben. Bitte beachten: es zieht wie immer die erste Regel; d.h. Regeln mit zusätzlichen Einschränkungen immer über die generellen Regeln legen.
Syntax filterTerm
filterTerm | Beispiel |
|
|---|
filterTerm | Beispiel |
|
|---|---|---|
|
| wie bei allen Attributen in der Zeitscheibe werden auch hier Mitarbeiter-OptionParameter vorab durch die Werte des jw. MA ersetzt |
|
| auf alle Attribute (PLZ, Bezeichnung, Nummer, …) kann mit dieser einfachen Punkt-Syntax zugegriffen werden. Ausgenommen ist der Verrechnungskunde/Billing-Customer; dieser wir aktuell nicht unterstützt. |
|
(Achtung: Groß-Kleinschreibung beachten!) | wie bei den internen Attributen (siehe oben) ist es auch möglich auf OptionParameter der jw. Entitäten (Aufgabe/Objekt/Kunde) zuzugreifen. |
Syntax filterRegEx
Der filterRegEx Parameter erlaubt ein Regular-Expression-Muster. Am besten auf https://regex101.com/ austesten.
Im filterTerm kann auf Attribute und OptionParameter von task, project und customer Zugegriffen werden. Für OptionParameter des Mitarbeiters ist die einfache Syntax {OptionParameter-Name} wie auch sonst überall in der Zeitscheibe gültig.
(Achtung: Groß-Kleinschreibung beachten!)
Beispiel
<ruleSet filterRegEx="Wohnung" filterTerm="{project.optionparameterKategorie}">
<fromTime>00:00</fromTime>
<endTime>00:00</endTime>
<dayOfWeek>montag-freitag</dayOfWeek>
<tupleType>work</tupleType>
<maxWorkday>false</maxWorkday>
<minWorkday>false</minWorkday>
<matchingWT>012</matchingWT>
</ruleSet>
<ruleSet filterRegEx="1" filterTerm="{VorarbeiterZulage}">
<!-- beachte hier: bei dem OptionParameter wurde
als Wert 0 und 1 hinterlegt (nicht ja/nein) -->
<fromTime>00:00</fromTime>
<endTime>24:00</endTime>
<dayOfWeek>*</dayOfWeek>
<tupleType>work_drive_codrive</tupleType>
<maxWorkday>false</maxWorkday>
<minWorkday>false</minWorkday>
<addOn>true</addOn>
<hourlyBased>true</hourlyBased>
<factor>1</factor>
<matchingWT>lev_002</matchingWT>
</ruleSet>
<ruleSet>
<fromTime>00:00</fromTime>
<endTime>00:00</endTime>
<dayOfWeek>montag-freitag</dayOfWeek>
<tupleType>work</tupleType>
<maxWorkday>false</maxWorkday>
<minWorkday>false</minWorkday>
<matchingWT>001</matchingWT>
</ruleSet>
Demo-Beispiel mit Kommentar
<timeSliceModel>
<!-- Wenn Sonderzeiten auch berechnet werden sollen, obwohl diese nicht abgeschlossen
sind (Haken), so sind diese oben im TimeSliceModel anzugeben mittels der Option
"unconfirmedSonderzeit" -->
<unconfirmedSonderzeit>Urlaub</unconfirmedSonderzeit>
<unconfirmedSonderzeit>Krankenstand</unconfirmedSonderzeit>
<!-- Mit der Option "<acceptAllUnconfirmedSonderzeit>" kann eingestellt werden, dass
alle Sonderzeiten nicht abgeschlossen werden müssen.-->
<acceptAllUnconfirmedSonderzeit>true</acceptAllUnconfirmedSonderzeit>
<useDayBordersForTagTuples>true</useDayBordersForTagTuples> <!-- FIRST_ACTION_IS_DRIVE, LAST_ACTION_IS_DRIVE,
... Markierungen werden für jeden Tagesbeginn (bsp. Bereitschaftseinsatz am Abend) erneut gesetzt -->
<!-- wegzeit -->
<DistanceAddOn>
<pourAddOnLast>true</pourAddOnLast>
<zipCodeMapping>ZipCodesMappingAngestellte</zipCodeMapping>
<addOnAlsoIfArrivalDriveBooked>true</addOnAlsoIfArrivalDriveBooked> <!--default=false / wegzeiten auch wenn eine Fahrt zum ersten Einsatz gebucht wurde -->
<addOnAlsoIfDepartureDriveBooked>true</addOnAlsoIfDepartureDriveBooked> <!--default=false / wegzeiten auch wenn eine Fahrt nach dem letzten Einsatz gebucht wurde -->
</DistanceAddOn>
<ruleSet>
<fromTime>00:00</fromTime>
<endTime>24:00</endTime>
<dayOfWeek>sonntag</dayOfWeek>
<tupleType>wegzeit</tupleType>
<maxWorkday>false</maxWorkday>
<minWorkday>false</minWorkday>
<matchingWT>WzAng100</matchingWT>
</ruleSet>
<!-- ende wegzeiten bsp. -->
<ruleSet>
<fromTime>00:00</fromTime>
<endTime>24:00</endTime>
<dayOfWeek>*</dayOfWeek>
<tupleType>active</tupleType>
<maxWorkday>false</maxWorkday>
<minWorkday>false</minWorkday>
<matchingWT>001</matchingWT>
<suppressTaskAssignment>false</suppressTaskAssignment> <!-- default: false, erlaubt Buchungen die
auf dieser Regel basieren explizit nicht an eine Aufgabe zu binden; so werden ggf. Lohn-relevante aber
nicht Faktur-relevante Buchungen erzeugt -->
<!-- hourlyBased=true ist der default; false liefert anstatt der Anzahl der
Stunden die der Regel entsprechen den Wert 1 (oder "factor"), unabhängig von der Dauer
Zudem werden Lohnbuchungen die aus hourlyBased=false Regeln enstehen auch ohne
zugehörige Töpfe angelegt; gibt es passende Töpfe durchlaufen sie die Topflogik
-->
<hourlyBased>true</hourlyBased>
<!-- optional kann bei hourlyBased = false noch folgendes definiert werden -->
<factor>79.03</factor> <!-- ohne "factor" wird 1 angenommen; anderenfalls der factor-wert -->
<!-- wird nonHourlyAddOn mit true übergeben (default=false), dann zieht diese Regel zusätzlich;
weitere Regeln darunter werden ebefalls durchlaufen; könnte Bsp. für einen Zuschlag
für Tätigkeiten mit einer bestimmten Aufgabenart dienen -->
<nonHourlyAddOn>true</nonHourlyAddOn>
<!-- mit "onlyWithTag" kann die Regel auf Buchungen mit bestimmter Markierung
eingeschränkt werden -->
<!-- mögliche Markierungen sind: AUTODAY_CLOSE, NOT_BILLABLE, BILLABLE,
HOMEOFFICE, HOME_DRIVE, FIRST_DRIVE, FIRST_TE_DRIVE,
LAST_DRIVE, LAST_TE_DRIVE, FIRST_TE_WORK, LAST_TE_WORK, IN_COMPANY,SONDERZEIT_DRIVE,SONDERZEIT_CO_DRIVE -->
<onlyWithTag>HOMEOFFICE</onlyWithTag>
<tasktype>Montage</tasktype> <!-- Einschränkung der Regel auf einen oder
mehrere (Komma getrennt) Aufgabenarten -->
<removeTaskentry>true</removeTaskentry> <!-- default=false; wird hier true
übergeben, dann wird Lohnbuchung jedenfalls ohne Auftragszuordnung erzeugt -->
</ruleSet>
<ruleSet>
<fromTime>07:00</fromTime>
<fromTimeOH>06:00</fromTimeOH> <!-- wenn auf mindestens einem Termin an dem Tag die
Option "Überstunden erlaubt" aktiviert wurde, dann gelten die erweiterten Zeiten (OH = Überstunden/OverHours) -->
<endTime>16:00</endTime>
<endTimeOH>20:00</endTimeOH>
<dayOfWeek>sunday</dayOfWeek>
<tupleType>work</tupleType> <!-- work | drive | co_drive | active | standbytime | break -->
<standbytime>Rufbereitschaft</standbytime> <!-- wenn der Typ standbytime gewählt
wurde kann hier auf die jew. Bereitschaftszeit eingeschränkt werden; ohne
Einschränkungen gilt die Regel für alle Bereitschaftszeiten (ohne Arbeitszeit) -->
<hourlyBased>false</hourlyBased> <!-- damit wird ein Pauschalwert von 1.00 ausgewiesen; unabhängig von der
Stundenanzahl -->
<addOn>false</addOn> <!-- addOn = true bedeutet dass diese Regel zusätzliche Werte zu etwaigen anderen Regeln
auslöst; also weitere Regeln durchlaufen werden; addOn Regeln müssen üblicherweise über
nicht-addOn Regeln stehen -->
<maxWorkday>false</maxWorkday> <!-- alternativ zu "true" kann hier auch ein Stundenwert angegeben werden; ist der Wert größer
als die Sollarbeitszeit lt. AZM, dann zieht das AZM; anderenfalls der Wert als
Obergrenze -->
<minWorkday>false</minWorkday> <!-- alterantiv zu "true" kann auch hier ein Stundenwert angegeben werden; es zieht
jw. der größere Wert; bei einem Konflikt mit maxWorkday, hat maxWorkday den
Vorrang -->
<matchingWT>001</matchingWT>
<tasktype>Montage,Installation</tasktype> <!-- Einschränkung der Regel auf einen oder mehrere (Komma getrennt)
Aufgabenarten -->
</ruleSet>
</timeSliceModel>