{
  "$comment": "Machine-readable companion to https://valem.run/calculators/argentina/holiday-entitlement. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/argentina/holiday-entitlement",
  "dataUrl": "https://valem.run/calculators/argentina/holiday-entitlement.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Argentina vacaciones model by Valem (https://valem.run/calculators/argentina/holiday-entitlement), CC BY 4.0.",
    "note": "Covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds themselves are law and are not licensed by anyone; the cited sources are where they come from."
  },
  "verificationUrl": "https://valem.run/calculators/argentina/holiday-entitlement/verify",
  "country": "argentina",
  "countryName": "Argentina",
  "formula": "holiday-entitlement",
  "formulaName": "Vacaciones",
  "title": "Cálculo De Vacaciones 2026 — 14, 21, 28 O 35 Días Corridos",
  "answer": "Article 150 of the Ley de Contrato de Trabajo gives 14 días corridos up to five years of seniority, 21 over five and up to ten, 28 over ten and up to twenty, and 35 beyond twenty. They are consecutive calendar days, so 14 of them is about ten working days on a five-day week. Seniority is measured as it will stand on 31 December.",
  "lang": "en",
  "currency": "ARS",
  "taxYear": "2026",
  "verification": {
    "claim": "internal-consistency",
    "statement": "The Valem engine reproduces this model's stated formula through 13 self-test cases (below, and re-runnable against the spec). That asserts internal consistency, NOT that the formula matches current law — the cited sources are the evidence for that, and carry the date each was last checked.",
    "selfTestCases": 13,
    "ratesAreIllustrative": false,
    "sourcesCheckedOn": "2026-10-11"
  },
  "sources": [
    {
      "label": "Ley de Contrato de Trabajo 20.744, art. 150 — servicios.infoleg.gob.ar (14, 21, 28 and 35 días corridos by seniority, measured at 31 December)",
      "url": "https://servicios.infoleg.gob.ar/infolegInternet/anexos/25000-29999/25552/texact.htm",
      "checked": "2026-10-11"
    },
    {
      "label": "Ley de Contrato de Trabajo 20.744, art. 151 and art. 153 — servicios.infoleg.gob.ar (service on at least half the días hábiles; one day of rest per twenty worked below that)",
      "url": "https://servicios.infoleg.gob.ar/infolegInternet/anexos/25000-29999/25552/texact.htm",
      "checked": "2026-10-11"
    }
  ],
  "terminalOutput": "daysRemaining",
  "headlineOutput": "daysEntitled",
  "inputs": [
    {
      "name": "serviceYears",
      "type": "number",
      "label": "Years of seniority you will have at 31 December",
      "minimum": 0,
      "maximum": 60
    },
    {
      "name": "daysPerWeek",
      "type": "number",
      "label": "Days you work per week",
      "minimum": 1,
      "maximum": 7
    },
    {
      "name": "diasHabilesWorked",
      "type": "number",
      "label": "Días hábiles on which you rendered service",
      "minimum": 0,
      "maximum": 366
    },
    {
      "name": "diasHabilesInYear",
      "type": "number",
      "label": "Días hábiles in the year",
      "minimum": 1,
      "maximum": 366
    },
    {
      "name": "daysTaken",
      "type": "number",
      "label": "Days already taken",
      "minimum": 0
    }
  ],
  "outputs": [
    {
      "name": "bandDaysCorridos",
      "type": "number",
      "formula": "($s := $n(serviceYears); $s <= $const.bandYears5 ? $const.bandDaysTo5Years : ($s <= $const.bandYears10 ? $const.bandDaysTo10Years : ($s <= $const.bandYears20 ? $const.bandDaysTo20Years : $const.bandDaysOver20Years)))"
    },
    {
      "name": "daysCorridosEntitled",
      "type": "number",
      "formula": "($gate := $n(diasHabilesWorked) >= ($n(diasHabilesInYear) / $const.qualifyingHalfDivisor); $gate ? bandDaysCorridos : $floor($n(diasHabilesWorked) / $const.workDaysPerRestDay))"
    },
    {
      "name": "daysEntitled",
      "type": "number",
      "formula": "$round(daysCorridosEntitled / $const.daysPerCalendarWeek * $n(daysPerWeek), 1)"
    },
    {
      "name": "daysRemaining",
      "type": "number",
      "formula": "($r := daysEntitled - $n(daysTaken); $r < 0 ? 0 : $round($r, 1))"
    }
  ],
  "testCases": [
    {
      "description": "N1 band a is 14 días corridos, which is about ten working days on a five-day week",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 14,
        "daysCorridosEntitled": 14,
        "daysEntitled": 10
      }
    },
    {
      "description": "N2 five years is still band a, because the article says 'no exceda de cinco'",
      "given": {
        "serviceYears": 5,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 14
      }
    },
    {
      "description": "N3 just over five years reaches 21 corridos, about 15 working days",
      "given": {
        "serviceYears": 6,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 21,
        "daysEntitled": 15
      }
    },
    {
      "description": "N4 ten years is still band b",
      "given": {
        "serviceYears": 10,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 21
      }
    },
    {
      "description": "N5 eleven years reaches 28 corridos, about 20 working days",
      "given": {
        "serviceYears": 11,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 28,
        "daysEntitled": 20
      }
    },
    {
      "description": "N6 over twenty years is the top band, 35 corridos or about 25 working days",
      "given": {
        "serviceYears": 21,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 35,
        "daysEntitled": 25
      }
    },
    {
      "description": "N7 exactly twenty years is still band c",
      "given": {
        "serviceYears": 20,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "bandDaysCorridos": 28
      }
    },
    {
      "description": "N8 below art. 151's half-year gate, art. 153 gives one day per twenty worked",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 5,
        "diasHabilesWorked": 100,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "daysCorridosEntitled": 5,
        "daysEntitled": 3.6
      }
    },
    {
      "description": "N9 at exactly half the días hábiles the band applies again",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 5,
        "diasHabilesWorked": 125,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "daysCorridosEntitled": 14
      }
    },
    {
      "description": "N10 under twenty worked days art. 153 gives nothing",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 5,
        "diasHabilesWorked": 19,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "daysCorridosEntitled": 0,
        "daysEntitled": 0
      }
    },
    {
      "description": "N11 a six-day week gets more working days out of the same 14 corridos",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 6,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 0
      },
      "expect": {
        "daysEntitled": 12
      }
    },
    {
      "description": "N12 days already taken come off the remainder",
      "given": {
        "serviceYears": 11,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 8
      },
      "expect": {
        "daysRemaining": 12
      }
    },
    {
      "description": "N13 taking more than the entitlement never goes negative",
      "given": {
        "serviceYears": 3,
        "daysPerWeek": 5,
        "diasHabilesWorked": 250,
        "diasHabilesInYear": 250,
        "daysTaken": 40
      },
      "expect": {
        "daysRemaining": 0
      }
    }
  ],
  "spec": {
    "id": "holiday-entitlement-argentina",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "serviceYears": {
          "type": "number",
          "maximum": 60,
          "minimum": 0
        },
        "daysPerWeek": {
          "type": "number",
          "maximum": 7,
          "minimum": 1
        },
        "diasHabilesWorked": {
          "type": "number",
          "maximum": 366,
          "minimum": 0
        },
        "diasHabilesInYear": {
          "type": "number",
          "maximum": 366,
          "minimum": 1
        },
        "daysTaken": {
          "type": "number",
          "minimum": 0
        },
        "bandDaysCorridos": {
          "type": "number",
          "readOnly": true
        },
        "daysCorridosEntitled": {
          "type": "number",
          "readOnly": true
        },
        "daysEntitled": {
          "type": "number",
          "readOnly": true
        },
        "daysRemaining": {
          "type": "number",
          "readOnly": true
        }
      }
    },
    "constants": {
      "bandDaysTo5Years": 14,
      "bandDaysTo10Years": 21,
      "bandDaysTo20Years": 28,
      "bandDaysOver20Years": 35,
      "bandYears5": 5,
      "bandYears10": 10,
      "bandYears20": 20,
      "qualifyingHalfDivisor": 2,
      "workDaysPerRestDay": 20,
      "daysPerCalendarWeek": 7
    },
    "library": {
      "layers": [
        {
          "id": "statutory",
          "define": "(\n  /* Shared statutory helpers — the canonical copy (docs/sandbox/d8-statutory-families.md §5.4).\n     DO NOT EDIT A SPEC'S INLINED COPY. Edit this file and run `npm run sync:helpers`; a vitest\n     assertion and a Java assertion both require every inlined copy to be byte-identical to this one.\n\n     Why inlined rather than referenced: the `library` section's `ref` form — a library shared\n     between models — is still proposed, gated on the model-references design (see\n     ../../../../docs/design/library/jsonata-library.md). Inlining keeps each spec self-contained,\n     which is what lets `#e=` embedding, `#share=` import and MCP forking work with no resolver.\n\n     TWO TRAPS, both of which fail SILENTLY and both of which bit during the debt-payoff build:\n\n       1. A library function sees ONLY its arguments. It cannot read the consuming document — not\n          through a bare field name, not through `$`, not through `$$`. Everything these helpers\n          need is passed in. (`$const` is late-bound and so would resolve, but relying on it would\n          couple a shared helper to one spec's constant names.)\n       2. ONE null member wrecks a whole aggregate, and the two engines disagree about how. The JS\n          reference implementation THROWS (\"Argument 1 of function sum must be an array of\n          numbers\"); the Java port can instead yield null for the entire aggregate. Neither gives a\n          partial total, and the null-yielding form is the dangerous one because it is silent. So\n          callers coerce with `$n()` below before aggregating, which makes the behaviour identical\n          in both engines — measured, not assumed: see helpers.test.ts.\n\n       3. A PATH STEP DIRECTLY ON A CALL RESULT RETURNS NOTHING in the Java engine. This matters for\n          every caller of $amortize, which is the one helper here returning an object:\n\n              $amortize(p, r, n, 0).months            -> empty in Java, 360 in JS.  WRONG\n              ($a := $amortize(p, r, n, 0); $a.months) -> 360 in both.               RIGHT\n\n          Bind the result to a variable, then step into it. The JS reference accepts both forms, so\n          this is invisible until the page is served by the real engine, and it fails as a blank\n          field rather than an error. Measured with a probe, not inferred — the field simply does\n          not appear. */\n\n  /* Number coercion with an explicit zero default. The guard against trap 2. */\n  $n := function($v) { $v = null or $not($exists($v)) ? 0 : $number($v) };\n\n  /* ISO date -> its year / month / day parts. String slicing rather than $fromMillis formatting:\n     these are statutory dates (\"2026-04-06\"), and a timezone-sensitive round-trip through millis\n     can shift the day, which silently moves a service anniversary across a band boundary. */\n  $isoY := function($d) { $number($substring($d, 0, 4)) };\n  $isoM := function($d) { $number($substring($d, 5, 2)) };\n  $isoD := function($d) { $number($substring($d, 8, 2)) };\n\n  /* Whole years of completed service between two ISO dates. Counts an anniversary as reached only\n     when the month-and-day has arrived, which is what \"completed years of service\" means in every\n     severance statute — not a 365.25-day division, whose drift crosses a 5-year band boundary in\n     the wrong direction roughly one year in four. */\n  $yearsBetween := function($from, $to) { (\n    $y := $isoY($to) - $isoY($from);\n    $beforeAnniversary := $isoM($to) < $isoM($from)\n      or ($isoM($to) = $isoM($from) and $isoD($to) < $isoD($from));\n    $beforeAnniversary ? $y - 1 : $y\n  ) };\n\n  /* Whole completed months between two ISO dates, same convention. */\n  $monthsBetween := function($from, $to) { (\n    $m := ($isoY($to) - $isoY($from)) * 12 + ($isoM($to) - $isoM($from));\n    $isoD($to) < $isoD($from) ? $m - 1 : $m\n  ) };\n\n  /* Inclusive count of days between two ISO dates — both endpoints counted, because a leave year\n     runs from its first day to its last and an employee present on both is present for both.\n     Pro-rata accrual is then $proRataDays(a, b) / $proRataDays(yearStart, yearEnd). */\n  $proRataDays := function($from, $to) {\n    ($toMillis($to) - $toMillis($from)) / 86400000 + 1\n  };\n\n  /* Progressive charge across bands. `$bands` is ordered lowest-first, each {\"upTo\": n, \"rate\": r};\n     the final band's `upTo` is omitted or null to mean \"no ceiling\". Each band's rate applies ONLY\n     to the slice of the amount inside it — the single most common error in a hand-written bracket\n     walk is applying the top rate to the whole amount. Returns 0 for a non-positive amount. */\n  $bandedCharge := function($amount, $bands) { (\n    $a := $n($amount);\n    $a <= 0 ? 0 : $reduce($bands, function($acc, $band) { (\n      $ceiling := $exists($band.upTo) and $band.upTo != null ? $band.upTo : $a;\n      $top := $ceiling < $a ? $ceiling : $a;\n      $slice := $top - $acc.floor;\n      {\n        \"floor\": $top > $acc.floor ? $top : $acc.floor,\n        \"charge\": $acc.charge + ($slice > 0 ? $slice * $n($band.rate) : 0)\n      }\n    ) }, {\"floor\": 0, \"charge\": 0}).charge\n  ) };\n\n  /* Clamp into [floor, cap]. Either bound may be omitted (null) to leave that side open — a benefit\n     with a cap and no floor is as common as one with both. */\n  $clampFloorCap := function($value, $floor, $cap) { (\n    $v := $n($value);\n    $withFloor := $exists($floor) and $floor != null and $v < $floor ? $floor : $v;\n    $exists($cap) and $cap != null and $withFloor > $cap ? $cap : $withFloor\n  ) };\n\n  /* Level annuity payment for a principal over `$months` at `$annualRatePct` nominal, compounded\n     monthly. Falls back to straight-line division at a zero rate, where the standard formula\n     divides by zero. */\n  $annuityPayment := function($principal, $annualRatePct, $months) { (\n    $p := $n($principal);\n    $m := $n($months);\n    $i := $n($annualRatePct) / 1200;\n    $m <= 0 ? 0 : ($i = 0 ? $p / $m : $p * $i * $power(1 + $i, $m) / ($power(1 + $i, $m) - 1))\n  ) };\n\n  /* Amortisation schedule: one row per month until the balance clears or `$months` is reached.\n     Returns {\"payment\", \"months\", \"totalInterest\", \"schedule\": [{month, interest, principal,\n     balance}]}. `$extra` is an optional monthly overpayment.\n\n     A real month-by-month fold rather than a closed form, because an overpayment changes every\n     later row — the same reason debt-payoff simulates. Bounded by `$months`, so it always\n     terminates. */\n  $amortize := function($principal, $annualRatePct, $months, $extra) { (\n    $i := $n($annualRatePct) / 1200;\n    $pay := $annuityPayment($principal, $annualRatePct, $months) + $n($extra);\n    $r := $reduce([1..$n($months)], function($acc, $month) {\n      $acc.balance <= 0 ? $acc : (\n        /* The running balance is kept UNROUNDED and only the emitted row is rounded. Rounding the\n           balance each month instead accumulates drift: at 200,000 over 360 months it left 2.83\n           still owing in the final row, which would break the \"final balance is zero\" invariant\n           (§7.3) and look to a reader like the schedule does not pay the loan off. Lenders compute\n           on the exact balance and adjust the last payment, which is what this does. */\n        $interest := $acc.balance * $i;\n        $due := $acc.balance + $interest < $pay ? $acc.balance + $interest : $pay;\n        $principalPart := $due - $interest;\n        $balance := $acc.balance - $principalPart;\n        {\n          \"balance\": $balance,\n          \"totalInterest\": $acc.totalInterest + $interest,\n          \"schedule\": $append($acc.schedule, [{\n            \"month\": $month,\n            \"interest\": $round($interest, 2),\n            \"principal\": $round($principalPart, 2),\n            \"balance\": $round($balance, 2)\n          }])\n        }\n      )\n    }, {\"balance\": $n($principal), \"totalInterest\": 0, \"schedule\": []});\n    {\n      \"payment\": $round($pay, 2),\n      \"months\": $count($r.schedule),\n      \"totalInterest\": $round($r.totalInterest, 2),\n      \"schedule\": [$r.schedule]\n    }\n  ) };\n\n  [\"n\", \"isoY\", \"isoM\", \"isoD\", \"yearsBetween\", \"monthsBetween\", \"proRataDays\",\n   \"bandedCharge\", \"clampFloorCap\", \"annuityPayment\", \"amortize\"]\n)\n"
        }
      ]
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'serviceYears': 3, 'daysPerWeek': 5, 'diasHabilesWorked': 250, 'diasHabilesInYear': 250, 'daysTaken': 0 }"
      }
    ],
    "derivations": [
      {
        "path": "$.bandDaysCorridos",
        "expr": "($s := $n(serviceYears); $s <= $const.bandYears5 ? $const.bandDaysTo5Years : ($s <= $const.bandYears10 ? $const.bandDaysTo10Years : ($s <= $const.bandYears20 ? $const.bandDaysTo20Years : $const.bandDaysOver20Years)))"
      },
      {
        "path": "$.daysCorridosEntitled",
        "expr": "($gate := $n(diasHabilesWorked) >= ($n(diasHabilesInYear) / $const.qualifyingHalfDivisor); $gate ? bandDaysCorridos : $floor($n(diasHabilesWorked) / $const.workDaysPerRestDay))"
      },
      {
        "path": "$.daysEntitled",
        "expr": "$round(daysCorridosEntitled / $const.daysPerCalendarWeek * $n(daysPerWeek), 1)"
      },
      {
        "path": "$.daysRemaining",
        "expr": "($r := daysEntitled - $n(daysTaken); $r < 0 ? 0 : $round($r, 1))"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "Vacaciones",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "Art. 150 LCT: “De catorce (14) días corridos cuando la antigüedad en el empleo no exceda de cinco (5) años.” The word that decides what this is worth is CORRIDOS — consecutive calendar days, weekends inside. Türkiye publishes fourteen too, and its fourteen are net of rest days and public holidays, so they are fourteen days of actual leave. These are about ten."
            },
            {
              "id": "inputs",
              "type": "fieldSet",
              "label": "Sus datos",
              "components": [
                {
                  "id": "serviceYears",
                  "type": "numericField",
                  "label": "Years of seniority you will have at 31 December",
                  "bind": "$.serviceYears",
                  "helperText": "Art. 150 measures seniority “al 31 de diciembre del año”, so passing a band in November applies to the whole year."
                },
                {
                  "id": "daysPerWeek",
                  "type": "numericField",
                  "label": "Days you work per week",
                  "bind": "$.daysPerWeek",
                  "helperText": "Converts días corridos into your own working days."
                },
                {
                  "id": "diasHabilesWorked",
                  "type": "numericField",
                  "label": "Días hábiles on which you rendered service",
                  "bind": "$.diasHabilesWorked",
                  "helperText": "Art. 151 needs at least half the year's días hábiles — counting public holidays you would normally have worked."
                },
                {
                  "id": "diasHabilesInYear",
                  "type": "numericField",
                  "label": "Días hábiles in the year",
                  "bind": "$.diasHabilesInYear",
                  "helperText": "The gate is a proportion of the year, so it moves with the calendar."
                },
                {
                  "id": "daysTaken",
                  "type": "numericField",
                  "label": "Days already taken",
                  "bind": "$.daysTaken"
                }
              ]
            },
            {
              "id": "sep",
              "type": "separatorLine"
            },
            {
              "id": "entitledTile",
              "type": "statTile",
              "label": "Working days entitled",
              "value": "$.daysEntitled"
            },
            {
              "id": "remainingTile",
              "type": "statTile",
              "label": "Working days remaining",
              "value": "$.daysRemaining"
            },
            {
              "id": "breakdown",
              "type": "keyValueList",
              "label": "How that is worked out",
              "items": [
                {
                  "label": "Band under art. 150 (días corridos)",
                  "value": "$.bandDaysCorridos"
                },
                {
                  "label": "Días corridos actually granted",
                  "value": "$.daysCorridosEntitled"
                }
              ]
            },
            {
              "id": "assumptions",
              "type": "staticText",
              "text": "Art. 151 also requires the leave to begin on a Monday — or the next working day if that Monday is a holiday — and sets a separate rule for workers who work on otherwise non-working days. Those govern when the leave starts, not how long it is, and are not computed here. Seven days to a calendar week is arithmetic rather than law and is declared as such below; art. 150 sets no rounding rule for the conversion, so this rounds to a tenth of a day. Art. 153's fallback is expressed in the same días corridos as art. 150. Art. 152's vacation pay, art. 154's scheduling window and the additional licencias of Capítulo II are not modelled, and convenios colectivos commonly improve on all of it."
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Fuentes",
              "layers": 1,
              "exempt": [
                "daysPerCalendarWeek"
              ],
              "items": [
                {
                  "label": "Ley de Contrato de Trabajo 20.744, art. 150 — servicios.infoleg.gob.ar (14, 21, 28 and 35 días corridos by seniority, measured at 31 December)",
                  "url": "https://servicios.infoleg.gob.ar/infolegInternet/anexos/25000-29999/25552/texact.htm",
                  "date": "2026-10-11",
                  "covers": [
                    "bandDaysTo5Years",
                    "bandDaysTo10Years",
                    "bandDaysTo20Years",
                    "bandDaysOver20Years",
                    "bandYears5",
                    "bandYears10",
                    "bandYears20"
                  ]
                },
                {
                  "label": "Ley de Contrato de Trabajo 20.744, art. 151 and art. 153 — servicios.infoleg.gob.ar (service on at least half the días hábiles; one day of rest per twenty worked below that)",
                  "url": "https://servicios.infoleg.gob.ar/infolegInternet/anexos/25000-29999/25552/texact.htm",
                  "date": "2026-10-11",
                  "covers": [
                    "qualifyingHalfDivisor",
                    "workDaysPerRestDay"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "N1 band a is 14 días corridos, which is about ten working days on a five-day week",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 14,
          "$.daysCorridosEntitled": 14,
          "$.daysEntitled": 10
        }
      },
      {
        "description": "N2 five years is still band a, because the article says 'no exceda de cinco'",
        "given": {
          "$.serviceYears": 5,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 14
        }
      },
      {
        "description": "N3 just over five years reaches 21 corridos, about 15 working days",
        "given": {
          "$.serviceYears": 6,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 21,
          "$.daysEntitled": 15
        }
      },
      {
        "description": "N4 ten years is still band b",
        "given": {
          "$.serviceYears": 10,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 21
        }
      },
      {
        "description": "N5 eleven years reaches 28 corridos, about 20 working days",
        "given": {
          "$.serviceYears": 11,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 28,
          "$.daysEntitled": 20
        }
      },
      {
        "description": "N6 over twenty years is the top band, 35 corridos or about 25 working days",
        "given": {
          "$.serviceYears": 21,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 35,
          "$.daysEntitled": 25
        }
      },
      {
        "description": "N7 exactly twenty years is still band c",
        "given": {
          "$.serviceYears": 20,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.bandDaysCorridos": 28
        }
      },
      {
        "description": "N8 below art. 151's half-year gate, art. 153 gives one day per twenty worked",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 100,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.daysCorridosEntitled": 5,
          "$.daysEntitled": 3.6
        }
      },
      {
        "description": "N9 at exactly half the días hábiles the band applies again",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 125,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.daysCorridosEntitled": 14
        }
      },
      {
        "description": "N10 under twenty worked days art. 153 gives nothing",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 19,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.daysCorridosEntitled": 0,
          "$.daysEntitled": 0
        }
      },
      {
        "description": "N11 a six-day week gets more working days out of the same 14 corridos",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 6,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 0
        },
        "expect": {
          "$.daysEntitled": 12
        }
      },
      {
        "description": "N12 days already taken come off the remainder",
        "given": {
          "$.serviceYears": 11,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 8
        },
        "expect": {
          "$.daysRemaining": 12
        }
      },
      {
        "description": "N13 taking more than the entitlement never goes negative",
        "given": {
          "$.serviceYears": 3,
          "$.daysPerWeek": 5,
          "$.diasHabilesWorked": 250,
          "$.diasHabilesInYear": 250,
          "$.daysTaken": 40
        },
        "expect": {
          "$.daysRemaining": 0
        }
      }
    ]
  }
}
