{
  "slug": "vet-appointment-capacity",
  "title": "Veterinary Appointment Capacity Calculator",
  "heading": "Appointment Capacity Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/vet-appointment-capacity",
  "summary": "Maximum sustainable visit volume for your current schedule template.",
  "description": "Before adding a doctor or exam room, most practices haven't actually hit their real capacity ceiling — they've just filled the appointment types they default to booking. This calculator works from your appointment slot template (average length, number of doctors, hours per day, days per week) to compute theoretical maximum annual capacity, then compares it to actual visit volume to show remaining headroom and flags when you're within striking distance of needing more capacity rather than better scheduling.",
  "formula": "Max annual visits = doctors × (hours/day ÷ avg. visit hours) × days/week × weeks/year; headroom = max − actual.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=vet-appointment-capacity",
  "inputs": [
    {
      "id": "doctors",
      "label": "Doctors seeing appointments",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": null,
      "min": 0.1,
      "max": null
    },
    {
      "id": "hoursDay",
      "label": "Clinical hours per doctor per day",
      "kind": "number",
      "hint": null,
      "default": 8,
      "unit": null,
      "min": 1,
      "max": 16
    },
    {
      "id": "avgVisitMin",
      "label": "Average visit length",
      "kind": "number",
      "hint": null,
      "default": 20,
      "unit": "min",
      "min": 5,
      "max": null
    },
    {
      "id": "daysWeek",
      "label": "Days worked per week",
      "kind": "number",
      "hint": null,
      "default": 5,
      "unit": null,
      "min": 1,
      "max": 7
    },
    {
      "id": "weeksYear",
      "label": "Weeks worked per year",
      "kind": "number",
      "hint": null,
      "default": 48,
      "unit": null,
      "min": 1,
      "max": 52
    },
    {
      "id": "actualVisits",
      "label": "Actual annual visits",
      "kind": "number",
      "hint": null,
      "default": 6200,
      "unit": null,
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "maxAnnual",
      "label": "Max annual visit capacity",
      "format": "number",
      "hint": null,
      "primary": true
    },
    {
      "id": "utilizationPct",
      "label": "Current capacity utilization",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "headroom",
      "label": "Remaining annual visit capacity",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "slotsPerDay",
      "label": "Slots per doctor per day",
      "format": "decimal",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Doctors seeing appointments: 3",
      "Clinical hours per doctor per day: 8",
      "Average visit length: 20 min",
      "Days worked per week: 5",
      "Weeks worked per year: 48",
      "Actual annual visits: 6200"
    ],
    "outputs": [
      "Max annual visit capacity: 17,280",
      "Current capacity utilization: 35.9%",
      "Remaining annual visit capacity: 11,080",
      "Slots per doctor per day: 24"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter doctors seeing appointments.",
      "Enter clinical hours per doctor per day.",
      "Enter average visit length (min).",
      "Enter days worked per week.",
      "Enter weeks worked per year.",
      "Enter actual annual visits.",
      "Read your max annual visit capacity on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "doctors": 1.7999999999999998,
        "hoursDay": 4.8,
        "avgVisitMin": 12,
        "daysWeek": 3,
        "weeksYear": 29,
        "actualVisits": 3700
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "doctors": 3,
        "hoursDay": 8,
        "avgVisitMin": 20,
        "daysWeek": 5,
        "weeksYear": 48,
        "actualVisits": 6200
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "doctors": 4.800000000000001,
        "hoursDay": 12.8,
        "avgVisitMin": 32,
        "daysWeek": 7,
        "weeksYear": 52,
        "actualVisits": 9900
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "At what utilization should I consider hiring another doctor?",
      "a": "Most practices start actively recruiting once sustained utilization crosses 85-90%, since it takes several months to recruit, onboard, and ramp a new associate's schedule. Waiting until you're at 100% capacity means turning away clients during the entire hiring process."
    },
    {
      "q": "Does this account for double-booked or overlapping technician appointments?",
      "a": "No — it models straightforward one-doctor-per-slot scheduling. Practices that run tech appointments (vaccine boosters, nail trims, recheck weigh-ins) in parallel with doctor exams have effectively higher capacity than this baseline suggests."
    },
    {
      "q": "Why would utilization be under 70% but the front desk still feels overwhelmed?",
      "a": "That's usually a scheduling-template problem, not a true capacity problem — too many same-length slots regardless of visit type, clustering of complex cases at certain times, or an inefficient check-in process that makes the day feel full even when raw slot math shows room."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/exam-room-utilization",
    "https://www.revenuelab.fyi/toolbox/vet-revenue-per-dvm",
    "https://www.revenuelab.fyi/toolbox/dental-no-show-cost"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Veterinary Appointment Capacity Calculator (https://www.revenuelab.fyi/toolbox/vet-appointment-capacity)"
}