{
  "schemaVersion": 1,
  "slug": "study-time-planner-calculator",
  "category": "productivity",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "384180e1cf07b2df36e272caea2e62ad024d90a91ea4e34e1a33bd9049312f9a",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/study-time-planner-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "W = C × h × d; N = ⌈60W ÷ L⌉",
    "vars": [
      [
        "C",
        "Total credit hours"
      ],
      [
        "h",
        "Study hours per credit per week"
      ],
      [
        "d",
        "Difficulty multiplier"
      ],
      [
        "L",
        "Session length (min)"
      ],
      [
        "W",
        "Weekly study hours"
      ],
      [
        "N",
        "Sessions per week"
      ]
    ],
    "note": "Weekly hours = credits × entered hours per credit × a fixed difficulty multiplier; daily/subject hours divide by selected days/subjects. Sessions are rounded up from weekly hours ÷ preferred session length."
  },
  "externalEvidence": null,
  "contract": {
    "compute": "const D={light:0.8,standard:1,heavy:1.3,exam:1.5}; const weeklyHours=credits*hoursPerCredit*(D[difficulty]||1); const perSubject=weeklyHours/subjects; const dailyHours=weeklyHours/daysAvailable; const sessionsPerWeek=Math.ceil(weeklyHours/(sessionLength/60)); return {weeklyHours,perSubject,dailyHours,sessionsPerWeek};",
    "inputs": [
      {
        "name": "credits",
        "type": "number",
        "default": 15,
        "min": 1,
        "max": 60,
        "step": 1,
        "slider": true
      },
      {
        "name": "hoursPerCredit",
        "type": "number",
        "default": 2,
        "min": 0.5,
        "max": 6,
        "step": 0.5,
        "slider": true
      },
      {
        "name": "subjects",
        "type": "number",
        "default": 5,
        "min": 1,
        "max": 20,
        "step": 1,
        "slider": true
      },
      {
        "name": "difficulty",
        "type": "select",
        "default": "standard",
        "options": [
          {
            "value": "light"
          },
          {
            "value": "standard"
          },
          {
            "value": "heavy"
          },
          {
            "value": "exam"
          }
        ]
      },
      {
        "name": "daysAvailable",
        "type": "number",
        "default": 6,
        "min": 1,
        "max": 7,
        "step": 1
      },
      {
        "name": "sessionLength",
        "type": "number",
        "default": 50,
        "min": 15,
        "max": 180,
        "step": 5,
        "slider": true
      }
    ],
    "outputs": [
      {
        "name": "weeklyHours",
        "precision": 1,
        "unit": "h"
      },
      {
        "name": "perSubject",
        "precision": 1,
        "unit": "h"
      },
      {
        "name": "dailyHours",
        "precision": 1,
        "unit": "h"
      },
      {
        "name": "sessionsPerWeek",
        "precision": 0,
        "unit": ""
      }
    ],
    "interpret": null
  }
}
