{
  "schemaVersion": 1,
  "slug": "wedding-budget-planner-calculator",
  "category": "party",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "0fdb119f0388a53417796adef469dbf6162d3de677ae3043a28093a36fb603b6",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/wedding-budget-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": "C_i = B × w_i(style) ÷ 100",
    "vars": [
      [
        "B",
        "Total budget"
      ],
      [
        "style",
        "Style: budget / average / luxury"
      ],
      [
        "w_i",
        "Preset category percentage"
      ],
      [
        "C_i",
        "Allocated amount"
      ],
      [
        "G",
        "Guests"
      ]
    ],
    "note": "Each amount = budget × fixed profile share; profile shares sum to 100%. Cost per guest = budget ÷ guests. Profiles are illustrative and amounts are in USD."
  },
  "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": "0fdb119f0388a53417796adef469dbf6162d3de677ae3043a28093a36fb603b6",
    "basis": "C_i = B × w_i(style) ÷ 100",
    "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 w = style === 'budget' ? { venue: 22, catering: 30, photo: 10, attire: 7, flowers: 7, music: 4, stationery: 5, misc: 15 } : style === 'luxury' ? { venue: 27, catering: 30, photo: 12, attire: 9, flowers: 10, music: 6, stationery: 2, misc: 4 } : { venue: 25, catering: 30, photo: 11, attire: 8, flowers: 8, music: 5, stationery: 3, misc: 10 }; return { totalBudget, venue: totalBudget*w.venue/100, catering: totalBudget*w.catering/100, photography: totalBudget*w.photo/100, attire: totalBudget*w.attire/100, flowers: totalBudget*w.flowers/100, music: totalBudget*w.music/100, stationery: totalBudget*w.stationery/100, misc: totalBudget*w.misc/100, perGuest: guests > 0 ? totalBudget/guests : 0 };",
    "inputs": [
      {
        "name": "totalBudget",
        "type": "number",
        "default": 30000,
        "min": 100,
        "max": 10000000,
        "step": 100
      },
      {
        "name": "guests",
        "type": "number",
        "default": 100,
        "min": 1,
        "max": 3000,
        "step": 1,
        "slider": true
      },
      {
        "name": "style",
        "type": "select",
        "default": "average",
        "options": [
          {
            "value": "budget"
          },
          {
            "value": "average"
          },
          {
            "value": "luxury"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "totalBudget",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "perGuest",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "venue",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "catering",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "photography",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "attire",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "flowers",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "music",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "stationery",
        "precision": 2,
        "unit": "USD"
      },
      {
        "name": "misc",
        "precision": 2,
        "unit": "USD"
      }
    ],
    "interpret": null
  }
}
