How the Türkiye yıllık ücretli i̇zin calculator is verified

Inputs

InputFieldType
Years of service with this employerserviceYearsnumber
Your ageagenumber
You work in underground work (yer altı işleri)worksUndergroundboolean
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)
Band DaysbandDays($s := $n(serviceYears); $s < $const.qualifyingYears ? 0 : ($s <= $const.bandYears5 ? $const.bandDaysTo5Years : ($s < $const.bandYears15 ? $const.bandDaysTo15Years : $const.bandDaysFrom15Years)))
Days EntitleddaysEntitled($s := $n(serviceYears); $s < $const.qualifyingYears ? 0 : ($base := bandDays + (worksUnderground = true ? $const.undergroundExtraDays : 0); $floored := ($n(age) <= $const.youngAgeThreshold or $n(age) >= $const.olderAgeThreshold) ? ($base > $const.ageFloorDays ? $base : $const.ageFloorDays) : $base; $floored))
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
qualifyingYears1
bandDaysTo5Years14
bandDaysTo15Years20
bandDaysFrom15Years26
bandYears55
bandYears1515
ageFloorDays20
youngAgeThreshold18
olderAgeThreshold50
undergroundExtraDays4

Test vectors (16)

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 under a year there is no statutory entitlement at all

given serviceYears0
given age35
given worksUndergroundno
given daysTaken0
expect bandDays0
expect daysEntitled0

Case 2 — N2 at one year the first band opens at 14

given serviceYears1
given age35
given worksUndergroundno
given daysTaken0
expect bandDays14
expect daysEntitled14

Case 3 — N3 five years is still band a, because the article includes five

given serviceYears5
given age35
given worksUndergroundno
given daysTaken0
expect daysEntitled14

Case 4 — N4 just over five years moves to 20

given serviceYears6
given age35
given worksUndergroundno
given daysTaken0
expect daysEntitled20

Case 5 — N5 fourteen years is still band b, because band c starts AT fifteen

given serviceYears14
given age35
given worksUndergroundno
given daysTaken0
expect daysEntitled20

Case 6 — N6 fifteen years reaches 26, and that is the top band

given serviceYears15
given age35
given worksUndergroundno
given daysTaken0
expect daysEntitled26

Case 7 — N7 a 17-year-old with two years' service gets the 20-day floor, not 14

given serviceYears2
given age17
given worksUndergroundno
given daysTaken0
expect bandDays14
expect daysEntitled20

Case 8 — N8 so does a 55-year-old with two years' service — the floor is two-sided

given serviceYears2
given age55
given worksUndergroundno
given daysTaken0
expect daysEntitled20

Case 9 — N9 the young threshold is inclusive at 18, so 18 still floors to 20

given serviceYears2
given age18
given worksUndergroundno
given daysTaken0
expect daysEntitled20

Case 10 — N10 nineteen is above the young threshold and below 50, so back to the band

given serviceYears2
given age19
given worksUndergroundno
given daysTaken0
expect daysEntitled14

Case 11 — N11 the older threshold is inclusive at 50

given serviceYears2
given age50
given worksUndergroundno
given daysTaken0
expect daysEntitled20

Case 12 — N12 underground work adds four days to a band

given serviceYears2
given age35
given worksUndergroundyes
given daysTaken0
expect daysEntitled18

Case 13 — N13 the floor applies to the total, so an underground 55-year-old on band a sees 20

given serviceYears2
given age55
given worksUndergroundyes
given daysTaken0
expect daysEntitled20

Case 14 — N14 underground work earns nothing before the qualifying year either

given serviceYears0
given age55
given worksUndergroundyes
given daysTaken0
expect daysEntitled0

Case 15 — N15 days already taken come off the remainder

given serviceYears6
given age35
given worksUndergroundno
given daysTaken8
expect daysRemaining12

Case 16 — N16 taking more than the entitlement never goes negative

given serviceYears2
given age35
given worksUndergroundno
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 Türkiye yıllık ücretli i̇zin calculator

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