Ga naar inhoud
  • 0

Uurberekening


Rony Rabijns

Vraag

Het probleem :

Werkuren worden berekend volgens onderstaande regels :

 

Tussen 06u en 22u geldt het basistarief;

Tussen 22u en 06u geldt het nachttarief (= basistarief + 100 %);

Er worden minstens 8 uren aangerekend;

Zaterdagen = basistarief + 50%;

Zondagen en feestdagen = basistarief + 100%;

Het negende tot en met het tiende opeenvolgende uur = basistarief + 50%;

Na het tiende werkuur geldt basistarief + 100%;

Bij iedere werkdag die begonnen wordt voor het verstrijken van 10u rust met de vorige werkdag, worden de uren in de rustperiode gerekend aan basistarief + 100 %;

 

Alle verhogingen zijn cumulatief, maar worden afgeblokt op basistarief + 200%.

 

De vraag :

Al deze voorwaarden graag in één berekening.

 

Voorbeeld 1 :

vrijdag van 07u tot 23u:

(07u - 15u) : 8u basistarief

(15u - 17u) : 2u basistarief + (basistarief * 50%)

(17u - 22u) : 5u basistarief + (basistarief * 100%)

(22u - 23u) : 1u basistarief + (basistarief * 100%) + (basistarief * 100%)

 

Voorbeeld 2 :

zaterdag van 07u tot 23u:

(07u - 15u) : 8u basistarief + (basistarief * 50%)

(15u - 17u) : 2u basistarief + (basistarief * 50%) + (basistarief * 50%)

(17u - 22u) : 5u basistarief + (basistarief * 50%) + (basistarief * 100%)

(22u - 23u) : 1u basistarief + (basistarief * 50%) + (basistarief * 100%) + (basistarief * 100%)

 

In voorbeeld 2 moet de periode 22u-23u gelimiteerd worden tot 200% ipv 250%.

 

Voorbeeld 3 :

zaterdag van 18u tot 06u:

(18u - 22u) : 4u basistarief + (basistarief * 50%)

(22u - 02u) : 4u basistarief + (basistarief * 50%) + (basistarief * 100%)

(02u - 06u) : 5u basistarief + (basistarief * 50%) + (basistarief * 100%) + (basistarief * 100%)

 

In voorbeeld 3 moet de periode 02u-06u gelimiteerd worden tot 200% ipv 250%.

 

De beloning :

De eer van de oplossing en de kick van het oplossen :-)

Link naar reactie

12 antwoorden op deze vraag

Aanbevolen berichten

  • 0

Even een vraag ter verheldering.

 

Bij iedere werkdag die begonnen wordt voor het verstrijken van 10u rust met de vorige werkdag, worden de uren in de rustperiode gerekend aan basistarief + 100 %;

 

Voorbeeld 1 :

vrijdag van 07u tot 23u:

(22u - 23u) : 1u basistarief + (basistarief * 100%) + (basistarief * 100%)

 

Voorbeeld 2 :

zaterdag van 07u tot 23u:

(07u - 15u) : 8u basistarief + (basistarief * 50%)

 

Moet op basis van de voorwaarde voor de rustperiode van 10 uur geen extra toeslag op zaterdag 07u-09u van 100% worden toegepast?

Vrijdag eindigen om 23u en zaterdag beginnen om 07u geeft maar 8 uur rust. Toch?

 

rmw

Link naar reactie
  • 0
Moet op basis van de voorwaarde voor de rustperiode van 10 uur geen extra toeslag op zaterdag 07u-09u van 100% worden toegepast?

Vrijdag eindigen om 23u en zaterdag beginnen om 07u geeft maar 8 uur rust. Toch?

 

De voorbeelden staan los van elkaar. Ze zijn geen opeenvolgende werkdagen of zoiets. Ze dienen enkel om de voorwaarden en berekeningen te demonstreren.

 

Wat als er wordt gestart op een feestdag en doorgewerkt op een gewone dag?

Worden alle uren op basis van het start moment belast of is het elk uur voor zich?

 

Alle uren worden bekeken vanaf de startdag

 

 

En: het komt niet voor dat er meer dan 24 uur gewerkt wordt?

Gelukkig niet. Het zijn ook maar mensen. Je mag er van uit gaan dat het maximum 16u is.

 

Ben net een half uur begonnen maar ja moet naar huis.

 

Post hier alvast mijn aanpak.

 

Het is een verdienstelijke aanpak waarvoor dank. Maar het moet in een berekening zitten ... ! Niet gescript.

aangepast door Gast
Link naar reactie
  • 0
Wat als er wordt gestart op een feestdag en doorgewerkt op een gewone dag?

Worden alle uren op basis van het start moment belast of is het elk uur voor zich?

 

Alle uren worden bekeken vanaf de startdag

 

Nog niet helemaal helder.

 

Stel dat ik op een feestdag begin met werken om 20u en eindig om 03u de volgende dag. Zijn er dan 4 uur met de feestdag toeslag of 7?

Ik zou zeggen 4.....

 

rmw

Link naar reactie
  • 0
Alle uren worden bekeken vanaf de startdag

Nog niet helemaal helder.

Stel dat ik op een feestdag begin met werken om 20u en eindig om 03u de volgende dag. Zijn er dan 4 uur met de feestdag toeslag of 7?

Ik zou zeggen 4.....

 

Zij rekenen dan 7u feestdag.

(addertje : ze rekenen 8u owv een minimum blok van 8u !!!)

Verder is het alsvolgt in jouw voorbeeld :

 

20u-22u : 2u aan + 100% (owv de feestdag)

22u-03u : 5u aan + 100% + 100% (owv de feestdag + nacht)

+ nog 1u extra aan (+ 100%+100%) want ze rekenen altijd minstens 8u.

 

opgelet : je mag de +200% niet overschrijden ! ;-)

Link naar reactie
  • 0

Heb je een tabel met feestdagen data ?

Ik ken de context van de berekening niet, het is lastig om zo een passende oplossing te maken. Je zou mijn vorige aanpak ook op calculatie basis kunnen maken. Ik denk dat het handig is om ieder uur apart te analyseren. Dus in plaats van uren vertalen naar records kun je recursieve custom functie maken die de uren return delimited naar een veld vertaald vervolgens zou je nog een custom functie kunnen maken die die de waarde 1 voor 1 stript en analyseerd welk percentage verhoging van toepassing is ? Zou je dat als oplossing willen ?

Link naar reactie
  • 0
Heb je een tabel met feestdagen data ?

Om de boel dynamisch te houden, heb ik geopteerd om een flag te gebruiken die je zelf aanvinkt als het een feestdag is.

 

Ik denk dat het handig is om ieder uur apart te analyseren ... recursieve custom functie maken ... nog een custom functie ... die de waarde 1 voor 1 stript ... Zou je dat als oplossing willen ?

 

Ja, zo moet het volgens mij ook. En nu ga ik zwijgen ... ;-)

Link naar reactie
  • 0
(addertje : ze rekenen 8u owv een minimum blok van 8u !!!)

Verder is het alsvolgt in jouw voorbeeld :

 

20u-22u : 2u aan + 100% (owv de feestdag)

22u-03u : 5u aan + 100% + 100% (owv de feestdag + nacht)

+ nog 1u extra aan (+ 100%+100%) want ze rekenen altijd minstens 8u.

 

Blijft nog 1 vraag: hoe worden extra uren berekend als er geen 8 uur wordt volgemaakt?

Wordt in bovenstaand voorbeeld gewoon gedaan of er tot 04u is gewerkt?

Gezien jouw berekening wel, toch?

 

rmw

Link naar reactie
  • 0

Uitgaande van een 'ja' als antwoord op de vorige post zou het als volgt moeten kunnen.

 

Custom function: Kosten ( DatumStart ; UurStart ; DatumVorig ; UurVorig ; IsFeest ; Tarief ; Aantal)

Let (
[
xTeLangToeslag = Case ( Aantal > 10 ; 1 ; Aantal > 8 ; ,5 ; 0 ) ;
xNachtToeslag = If ( UurStart + Aantal > 22 ; 1 ; 0 ) ;
xRustHulp = If ( UurStart < UurVorig ; ( DatumStart - DatumVorig ) = 1 ; ( DatumStart - DatumVorig ) = 0 ) ;
xRustToeslag = If ( xRustHulp ; If ( UurStart + Aantal - UurVorig + If ( UurStart < UurVorig ; 24 ; 0 ) < 11 ; 1 ; 0 ) ; 0 ) ;
xZaterdagToeslag = If ( DayOfWeek ( DatumStart + If ( UurStart + Aantal > 24 ; 1 ; 0 ) ) = 7 ; ,5 ; 0 ) ;
xZondagToeslag = If ( DayOfWeek ( DatumStart + If ( UurStart + Aantal > 24 ; 1 ; 0 ) ) = 1 ; 1 ; 0 ) ;
xFeestToeslag = IsFeest ;
xToeslag = Min ( 2 ; xTeLangToeslag + xNachtToeslag + xRustToeslag + xZaterdagToeslag + xZondagToeslag + xFeestToeslag ) + 1 ; 
xBedrag = Tarief * xToeslag
] ; 

xBedrag + 
If ( Aantal > 1 ; Kosten ( DatumStart ; UurStart ; DatumVorig ; UurVorig ; IsFeest ; Tarief ; Aantal - 1) ; 0 )

)

 

Veld Bedrag (calculation, result number)

Let (
[
xAantal = Max ( uur stop - uur start + If ( uur stop < uur start ; 24 ; 0 ) ; 8 )
] ; 

Kosten ( datum start ; uur start ; datum vorig ; uur vorig ; IsValid ( FeestStart::datum ) ; tarief ; xAantal )

)

 

De waarden die in deze berekening worden gebruikt zijn afkomstig uit velden of berekeningen in de database. Ik ben hierbij wel uitgegaan van een tabel met feestdagen. Je kan ook gewoon een vlaggetje meegeven.

 

Zie ook bijgaand bestand.

 

rmw

Uren.zip

Link naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...