Jump to content
  • 0

Uurberekening


Rony Rabijns

Question

Posted

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 :-)

12 answers to this question

Recommended Posts

  • 0
Posted

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

  • 0
Posted

O, en nog iets.

 

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?

 

 

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

 

rmw

  • 0
Posted (edited)
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.

Edited by Guest
  • 0
Posted

Ikzelf had al een oplossing klaar voor de start van dit topic, maar krijg één voorwaarde niet volledig juist in alle omstandigheden verwerkt.

Daarom dat ik jullie hersenspinsels wil aanwenden om mijn laatste puzzelstukje goed te leggen ...

Om jullie overpeinzingen niet te vertroebelen, post ik mijn zienswijze (nog) niet.

  • 0
Posted
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

  • 0
Posted
Ikzelf had al een oplossing klaar voor de start van dit topic...

 

We hadden niet anders verwacht... :lol: ...maar desalniettemin bedankt voor de uitdaging :!:

 

rmw

  • 0
Posted
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 ! ;-)

  • 0
Posted

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 ?

  • 0
Posted
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 ... ;-)

  • 0
Posted
(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

  • 0
Posted

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...