How the Ukraine щорічна відпустка calculator is verified

Inputs

InputFieldType
Days you work per weekdaysPerWeeknumber
Your ageagenumber
Days already takendaysTakennumber

The formula

Each derived value below is computed by the Valem engine from the expression shown, in this order. Nothing else runs — there is no hidden code path.

Derived valueFieldFormula (JSONata)
Calendar Days EntitledcalendarDaysEntitled($n(age) < $const.minorAgeThreshold ? $const.minorCalendarDays : $const.statutoryCalendarDays)
Days EntitleddaysEntitled$round(calendarDaysEntitled / $const.daysPerCalendarWeek * $n(daysPerWeek), 1)
Days RemainingdaysRemaining($r := daysEntitled - $n(daysTaken); $r < 0 ? 0 : $round($r, 1))

Rates and thresholds

The expressions above read these as $const. They are the figures the annual refresh replaces, so they live as data rather than being written into the formulas — which is what makes a year-on-year change a one-line diff instead of an edit to arithmetic.

ConstantValue
statutoryCalendarDays24
minorCalendarDays31
minorAgeThreshold18
daysPerCalendarWeek7

Test vectors (7)

Every case is executed against this model on each build, by the Java engine and independently by a JavaScript one. A mismatch of a single cent fails the build, so the page cannot ship advertising a figure the model no longer produces.

Case 1 — N1 24 calendar days on a five-day week is about 17 working days, not 24

given daysPerWeek5
given age35
given daysTaken0
expect calendarDaysEntitled24
expect daysEntitled17.1

Case 2 — N2 a six-day week gets more working days out of the same 24 calendar ones

given daysPerWeek6
given age35
given daysTaken0
expect daysEntitled20.6

Case 3 — N3 a three-day week

given daysPerWeek3
given age35
given daysTaken0
expect daysEntitled10.3

Case 4 — N4 under eighteen gets 31 calendar days, which is a week more

given daysPerWeek5
given age17
given daysTaken0
expect calendarDaysEntitled31
expect daysEntitled22.1

Case 5 — N5 the band ends AT eighteen, so an eighteen-year-old is on the ordinary figure

given daysPerWeek5
given age18
given daysTaken0
expect calendarDaysEntitled24
expect daysEntitled17.1

Case 6 — N6 days already taken come off the remainder

given daysPerWeek5
given age35
given daysTaken7
expect daysRemaining10.1

Case 7 — N7 taking more than the entitlement never goes negative

given daysPerWeek5
given age35
given daysTaken40
expect daysRemaining0

Sources

Check it yourself — and reuse it

The whole model as JSON — inputs, outputs, formulas, vectors and sources in one re-runnable document.

This model is published under CC BY 4.0: use it, adapt it, build on it, with attribution. The licence covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds are law, and nobody licenses those; the sources above are where they come from.

← Back to the Ukraine щорічна відпустка calculator

Built with Valem — a live, verifiable calculator you can fork and embed.