{
  "schemaVersion": 1,
  "slug": "meeting-cost-calculator",
  "category": "productivity",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "f7d26d9ed48c965b3d80d1f7e801a5e13f6f2b6f8f5496f5eaa9ba36f1b86d04",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/meeting-cost-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": "C = S ÷ 2080 × o × a ÷ 60 × t",
    "vars": [
      [
        "C",
        "meeting cost"
      ],
      [
        "S",
        "average annual salary"
      ],
      [
        "o",
        "overhead factor"
      ],
      [
        "a",
        "attendees"
      ],
      [
        "t",
        "duration, minutes"
      ]
    ],
    "note": "Hourly salary estimate = annual salary ÷ 2080 × overhead factor. Annual recurrence uses fixed planning counts: daily 250, weekly 48, biweekly 24, monthly 12, quarterly 4, once 1. Currency is user-selected and must be consistent."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-12",
    "sources": [
      {
        "name": "CFPB — Budget worksheet and expense inputs",
        "url": "https://www.consumerfinance.gov/consumer-tools/educator-tools/your-money-your-goals/toolkit/"
      }
    ],
    "referenceRole": "input",
    "implementationHash": "f7d26d9ed48c965b3d80d1f7e801a5e13f6f2b6f8f5496f5eaa9ba36f1b86d04",
    "basis": "C = S ÷ 2080 × o × a ÷ 60 × t",
    "limitations": "Use the cited guidance and your own measurements, bills or product specifications to choose inputs. Sample defaults are not current local data."
  },
  "contract": {
    "compute": "const hourlyCost = avgSalary/2080*overheadFactor; const costPerMinute = hourlyCost*attendees/60; const meetingCost = costPerMinute*minutes; const O = { once:1, daily:250, weekly:48, biweekly:24, monthly:12, quarterly:4 }; const occurrencesPerYear = O[recurrence] || 1; return { costPerMinute, meetingCost, annualCost: meetingCost*occurrencesPerYear, occurrencesPerYear, perPersonCost: meetingCost/attendees\n};",
    "inputs": [
      {
        "name": "attendees",
        "type": "number",
        "default": 8,
        "min": 1,
        "max": 500,
        "step": 1,
        "slider": true
      },
      {
        "name": "minutes",
        "type": "number",
        "default": 60,
        "min": 1,
        "max": 1440,
        "step": 5,
        "slider": true
      },
      {
        "name": "avgSalary",
        "type": "number",
        "default": 85000,
        "min": 0,
        "max": 2000000,
        "step": 1000
      },
      {
        "name": "overheadFactor",
        "type": "number",
        "default": 1.3,
        "min": 1,
        "max": 3,
        "step": 0.05,
        "slider": true
      },
      {
        "name": "recurrence",
        "type": "select",
        "default": "weekly",
        "options": [
          {
            "value": "once"
          },
          {
            "value": "daily"
          },
          {
            "value": "weekly"
          },
          {
            "value": "biweekly"
          },
          {
            "value": "monthly"
          },
          {
            "value": "quarterly"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "costPerMinute",
        "precision": 2,
        "unit": ""
      },
      {
        "name": "meetingCost",
        "precision": 2,
        "unit": ""
      },
      {
        "name": "annualCost",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "occurrencesPerYear",
        "precision": 0,
        "unit": ""
      },
      {
        "name": "perPersonCost",
        "precision": 2,
        "unit": ""
      }
    ],
    "interpret": null
  }
}
