{
  "metadata": {
    "calculator": "CalcWise Bonus Depreciation Calculator",
    "taxYear": 2026,
    "totalTestCount": 34,
    "generationDate": "2026-07-20",
    "description": "All test cases for the CalcWise Bonus Depreciation Calculator."
  },
  "testCases": [
    {
      "id": "RT-POST-100",
      "name": "Post-Jan-19-2025 acquisition and placement gets 100%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'Certain Qualified Property Acquired and Placed in Service After January 19, 2025'; Instructions for Form 4562 (2025), Line 14.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 10000,
        "rateRegime": "post-obbba",
        "bonusDeductionCents": 10000000,
        "remainingMacrsBasisCents": 0
      },
      "tolerance": 0
    },
    {
      "id": "RT-PRE2025-40",
      "name": "Pre-Jan-20-2025 acquisition placed in service in 2025 general rate is 40%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'Certain Qualified Property Acquired after September 27, 2017, and Before January 20, 2025'; Instructions for Form 4562 (2025), What's New for 2025.",
      "input": {
        "taxYear": 2025,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-12-15",
        "placedInServiceDate": "2025-02-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 4000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 4000000,
        "remainingMacrsBasisCents": 6000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-PRE2025-SPECIAL-60",
      "name": "Pre-Jan-20-2025 long-production-period property placed in service in 2025 uses 60%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'Long Production Period Property' under pre-Jan-20-2025 rules; Instructions for Form 4562 (2025), Line 14.",
      "input": {
        "taxYear": 2025,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-12-15",
        "placedInServiceDate": "2025-06-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "long-production-period",
        "specialClassConfirmed": true,
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 6000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 6000000,
        "remainingMacrsBasisCents": 4000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-PRE2026-20",
      "name": "Pre-Jan-20-2025 acquisition placed in service in 2026 uses corrected 20%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), pre-Jan-20-2025 category; Rev. Proc. 2026-15 (2026-13 I.R.B.) phase-down continuation through 2026.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-12-15",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 2000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 2000000,
        "remainingMacrsBasisCents": 8000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-PRE2026-SPECIAL-30",
      "name": "Pre-Jan-20-2025 certain aircraft placed in service in 2026 uses 30%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'Noncommercial Aircraft' under pre-Jan-20-2025 rules; Rev. Proc. 2026-15 (2026-13 I.R.B.).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-12-15",
        "placedInServiceDate": "2026-06-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "certain-aircraft",
        "specialClassConfirmed": true,
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 3000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 3000000,
        "remainingMacrsBasisCents": 7000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-ELECT-OUT-0",
      "name": "Election out forces 0% even when property otherwise qualifies",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'How Can You Elect Not To Claim an Allowance?'; Instructions for Form 4562 (2025), 'Election out'.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "elect-out"
      },
      "expected": {
        "applicableBonusRateBps": 0,
        "rateRegime": "elect-out",
        "bonusDeductionCents": 0,
        "remainingMacrsBasisCents": 10000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-INELIGIBLE-RECOVERY-OVER20",
      "name": "Recovery period over 20 years is ineligible for Section 168(k)",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'What Is Qualified Property?' recovery-period requirement (20 years or less).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 25,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "qualifiedPropertyStatus": "ineligible",
        "eligibilityReason": "ineligible-recovery-period-over-20",
        "applicableBonusRateBps": 0,
        "rateRegime": "ineligible"
      },
      "tolerance": 0
    },
    {
      "id": "RT-INELIGIBLE-ADS",
      "name": "ADS-required property is ineligible and gets 0%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), 'Excepted Property' (property required to be depreciated under ADS).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "adsRequired": true,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "qualifiedPropertyStatus": "ineligible",
        "eligibilityReason": "ineligible-ads-required",
        "applicableBonusRateBps": 0,
        "rateRegime": "ineligible"
      },
      "tolerance": 0
    },
    {
      "id": "RT-OUTSIDE-WINDOW-2017-09-27",
      "name": "Acquisition on 2017-09-27 is outside modeled bonus windows",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), pre-OBBBA window starts after September 27, 2017.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2017-09-27",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 0,
        "rateRegime": "outside-window",
        "bonusDeductionCents": 0,
        "remainingMacrsBasisCents": 10000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-PHASEDOWN-COMPLETE-2027",
      "name": "Pre-OBBBA acquisition placed in service in 2027 gets 0% after phase-down completes",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), pre-OBBBA phase-down schedule; Rev. Proc. 2026-15 background (0% in 2027 and later for pre-Jan-20-2025 acquisitions).",
      "input": {
        "taxYear": 2027,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-12-15",
        "placedInServiceDate": "2027-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 0,
        "rateRegime": "pre-obbba-phase-down-complete",
        "bonusDeductionCents": 0,
        "remainingMacrsBasisCents": 10000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-Y2023-80",
      "name": "Pre-OBBBA acquisition placed in service in 2023 uses 80%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), pre-OBBBA phase-down table; Rev. Proc. 2026-15 background summary of former Section 168(k)(6)(A).",
      "input": {
        "taxYear": 2023,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-01-15",
        "placedInServiceDate": "2023-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 8000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 8000000,
        "remainingMacrsBasisCents": 2000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-Y2024-60",
      "name": "Pre-OBBBA acquisition placed in service in 2024 uses 60%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), pre-OBBBA phase-down table; Rev. Proc. 2026-15 background summary of former Section 168(k)(6)(A).",
      "input": {
        "taxYear": 2024,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2024-01-15",
        "placedInServiceDate": "2024-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "applicableBonusRateBps": 6000,
        "rateRegime": "pre-obbba-phase-down",
        "bonusDeductionCents": 6000000,
        "remainingMacrsBasisCents": 4000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-TRANSITION-REDUCED-40",
      "name": "Post-boundary 2025 transition election uses 40% reduced rate",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), What's New for 2025 reduced-rate election; IRS IR-2026-06 (Notice 2026-11 summary).",
      "input": {
        "taxYear": 2025,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2025-02-01",
        "placedInServiceDate": "2025-02-15",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "transition-reduced"
      },
      "expected": {
        "applicableBonusRateBps": 4000,
        "rateRegime": "transition-reduced",
        "bonusDeductionCents": 4000000,
        "remainingMacrsBasisCents": 6000000
      },
      "tolerance": 0
    },
    {
      "id": "RT-TRANSITION-REDUCED-SPECIAL-60",
      "name": "Post-boundary 2025 transition election for certain aircraft uses 60%",
      "category": "rate-table",
      "source": "IRS Publication 946 (2025), What's New for 2025 reduced-rate election special classes; IRS IR-2026-06 (Notice 2026-11 summary).",
      "input": {
        "taxYear": 2025,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2025-02-01",
        "placedInServiceDate": "2025-02-15",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "certain-aircraft",
        "specialClassConfirmed": true,
        "bonusElection": "transition-reduced"
      },
      "expected": {
        "applicableBonusRateBps": 6000,
        "rateRegime": "transition-reduced",
        "bonusDeductionCents": 6000000,
        "remainingMacrsBasisCents": 4000000
      },
      "tolerance": 0
    },
    {
      "id": "OO-SECTION179-FIRST",
      "name": "Section 179 is applied before bonus and bonus uses remaining basis",
      "category": "order-of-operations",
      "source": "Instructions for Form 4562 (2025), Line 14 ordering; IRS Topic 704 (bonus after Section 179 and before regular MACRS).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 25000,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "bonusEligibleBasisCents": 7500000,
        "bonusDeductionCents": 7500000,
        "immediateDeductionBeforeMacrsCents": 10000000,
        "remainingMacrsBasisCents": 0
      },
      "tolerance": 0
    },
    {
      "id": "OO-BUSINESS-USE-AND-REDUCTIONS",
      "name": "Business-use basis, other reductions, and Section 179 cascade to bonus basis",
      "category": "order-of-operations",
      "source": "IRS Publication 946 (2025), 'Depreciable basis' and basis-reduction ordering; Instructions for Form 4562 (2025), Line 14.",
      "input": {
        "taxYear": 2026,
        "cost": 123456.78,
        "businessUsePct": 87.5,
        "otherBasisReductions": 2500.25,
        "section179Allowed": 15000.5,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 5,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "bonusEligibleBasisCents": 9052393,
        "bonusDeductionCents": 9052393,
        "immediateDeductionBeforeMacrsCents": 10552443,
        "remainingMacrsBasisCents": 0
      },
      "tolerance": 0
    },
    {
      "id": "OO-BUSINESS-USE-0-BOUNDARY",
      "name": "0% business use boundary yields zero basis and zero deduction",
      "category": "order-of-operations",
      "source": "IRS Publication 946 (2025), business-use basis rules (deduction limited to business/investment use).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 0,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "businessUseBasisCents": 0,
        "bonusEligibleBasisCents": 0,
        "bonusDeductionCents": 0,
        "remainingMacrsBasisCents": 0
      },
      "tolerance": 0
    },
    {
      "id": "OO-LISTED-50-BOUNDARY-INELIGIBLE",
      "name": "Listed property at exactly 50% business use is ineligible",
      "category": "order-of-operations",
      "source": "IRS Publication 946 (2025), listed-property qualified business-use threshold is more than 50%.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 50,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "vehicle-light",
        "recoveryPeriod": 5,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "qualifiedPropertyStatus": "ineligible",
        "eligibilityReason": "ineligible-listed-property-50-or-less",
        "applicableBonusRateBps": 0,
        "bonusDeductionCents": 0
      },
      "tolerance": 0
    },
    {
      "id": "OO-EMPTY-OPTIONALS-NORMALIZE",
      "name": "Empty optional reductions normalize to zero",
      "category": "order-of-operations",
      "source": "Instructions for Form 4562 (2025), Line 14 basis mechanics; omitted reductions imply no basis reduction.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "otherBasisReductionsCents": 0,
        "section179AllowedCents": 0,
        "bonusEligibleBasisCents": 10000000,
        "bonusDeductionCents": 10000000
      },
      "tolerance": 0
    },
    {
      "id": "VAL-VALID-BASE",
      "name": "Valid baseline input returns valid true and no errors",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), Line 14 required inputs mirrored by validation contract.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": true,
        "errors": {}
      },
      "tolerance": 0
    },
    {
      "id": "VAL-COST-ZERO",
      "name": "Zero cost returns cost error key and valid false",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), Line 14 requires depreciable basis greater than zero.",
      "input": {
        "taxYear": 2026,
        "cost": 0,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "cost"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-ACQ-AFTER-PIS",
      "name": "Acquisition date after placed-in-service date returns acquisitionDate error",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), placed-in-service chronology requirements.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-05-01",
        "placedInServiceDate": "2026-04-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "acquisitionDate"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-PIS-YEAR-MATCH",
      "name": "Placed-in-service year mismatch returns placedInServiceDate error key",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), depreciation year is tied to placed-in-service year.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2025-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "acquisitionDate",
          "placedInServiceDate"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-USED-CONFIRMATION",
      "name": "Used property without confirmation returns usedPropertyTestsConfirmed error",
      "category": "validation",
      "source": "IRS Publication 946 (2025), qualified property can include certain used property only when used-property tests are met.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "isUsedProperty": true,
        "usedPropertyTestsConfirmed": false,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "usedPropertyTestsConfirmed"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-TRANSITION-INVALID",
      "name": "Transition reduced election outside post-boundary 2025 returns bonusElection error",
      "category": "validation",
      "source": "IRS Publication 946 (2025), reduced-rate transition election guidance; IRS IR-2026-06 (Notice 2026-11 summary).",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-03-01",
        "placedInServiceDate": "2026-04-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "transition-reduced"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "bonusElection"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-OTHER-BASIS-NEGATIVE",
      "name": "Negative other basis reductions return otherBasisReductions error",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), Line 14 basis cannot be increased by negative reductions.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100,
        "otherBasisReductions": -1,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "otherBasisReductions"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-BUSINESS-USE-OVER-100",
      "name": "Business use above 100% returns businessUsePct error",
      "category": "validation",
      "source": "IRS Publication 946 (2025), business-use percentage is bounded to actual business use.",
      "input": {
        "taxYear": 2026,
        "cost": 100000,
        "businessUsePct": 100.01,
        "otherBasisReductions": 0,
        "section179Allowed": 0,
        "acquisitionDate": "2026-02-01",
        "placedInServiceDate": "2026-03-01",
        "propertyType": "macrs-personal",
        "recoveryPeriod": 7,
        "specialPropertyClass": "general",
        "bonusElection": "default"
      },
      "expected": {
        "valid": false,
        "errorKeys": [
          "businessUsePct"
        ]
      },
      "tolerance": 0
    },
    {
      "id": "VAL-SHARE-URL-ROUNDTRIP",
      "name": "Share URL encode/decode round-trip preserves representative input",
      "category": "validation",
      "source": "Instructions for Form 4562 (2025), Line 14 core inputs represented in URL state for reproducible planning scenarios.",
      "input": {
        "taxYear": 2026,
        "propertyType": "vehicle-light",
        "cost": 123456.78,
        "businessUsePct": 87.5,
        "acquisitionDate": "2024-12-31",
        "placedInServiceDate": "2026-01-10",
        "section179Allowed": 15000,
        "otherBasisReductions": 2500,
        "recoveryPeriod": 5,
        "system": "GDS",
        "method": "200DB",
        "convention": "HY",
        "bonusElection": "default",
        "specialPropertyClass": "general",
        "qipConfirmed": false,
        "adsRequired": false,
        "sameYearDisposal": false,
        "sameYearPersonalConversion": false,
        "isUsedProperty": true,
        "usedPropertyTestsConfirmed": true,
        "section168k9Excluded": false,
        "specialClassConfirmed": false,
        "stateNote": "CA decouples"
      },
      "expected": {
        "encoded": "ty=2026&pt=vehicle-light&c=123456.78&bu=87.5&acq=2024-12-31&pis=2026-01-10&s179=15000&obr=2500&rp=5&sys=GDS&m=200DB&cv=HY&be=default&sp=general&qip=0&ads=0&syd=0&syp=0&used=1&usedok=1&k9=0&spok=0&sn=CA+decouples",
        "decoded": {
          "taxYear": 2026,
          "propertyType": "vehicle-light",
          "cost": 123456.78,
          "businessUsePct": 87.5,
          "acquisitionDate": "2024-12-31",
          "placedInServiceDate": "2026-01-10",
          "section179Allowed": 15000,
          "otherBasisReductions": 2500,
          "recoveryPeriod": 5,
          "system": "GDS",
          "method": "200DB",
          "convention": "HY",
          "bonusElection": "default",
          "specialPropertyClass": "general",
          "qipConfirmed": false,
          "adsRequired": false,
          "sameYearDisposal": false,
          "sameYearPersonalConversion": false,
          "isUsedProperty": true,
          "usedPropertyTestsConfirmed": true,
          "section168k9Excluded": false,
          "specialClassConfirmed": false,
          "stateNote": "CA decouples"
        }
      },
      "tolerance": 0
    },
    {
      "id": "YS-DEFAULT-YEAR",
      "name": "Default tax year is 2026",
      "category": "year-specific",
      "source": "IRS Publication 946 (2025) with 2026 verified bonus figures; BONUS_TAX_YEARS default year policy.",
      "input": {},
      "expected": {
        "DEFAULT_BONUS_TAX_YEAR": 2026
      },
      "tolerance": 0
    },
    {
      "id": "YS-2023-RATES",
      "name": "2023 year-specific rate is 80%",
      "category": "year-specific",
      "source": "Rev. Proc. 2026-15 (2026-13 I.R.B.) background phase-down schedule; IRS Publication 946 (2025).",
      "input": {
        "taxYear": 2023
      },
      "expected": {
        "BONUS_TAX_YEARS.2023.preObbbaGeneralRateBps": 8000,
        "BONUS_TAX_YEARS.2023.verify": false
      },
      "tolerance": 0
    },
    {
      "id": "YS-2024-RATES",
      "name": "2024 year-specific rate is 60%",
      "category": "year-specific",
      "source": "Rev. Proc. 2026-15 (2026-13 I.R.B.) background phase-down schedule; IRS Publication 946 (2025).",
      "input": {
        "taxYear": 2024
      },
      "expected": {
        "BONUS_TAX_YEARS.2024.preObbbaGeneralRateBps": 6000,
        "BONUS_TAX_YEARS.2024.verify": false
      },
      "tolerance": 0
    },
    {
      "id": "YS-2025-RATES",
      "name": "2025 year-specific rates include 100% post-boundary and 40% pre-boundary",
      "category": "year-specific",
      "source": "IRS Publication 946 (2025), What's New for 2025 and Jan-19 boundary sections; Instructions for Form 4562 (2025), Line 14.",
      "input": {
        "taxYear": 2025
      },
      "expected": {
        "BONUS_TAX_YEARS.2025.postObbbaRateBps": 10000,
        "BONUS_TAX_YEARS.2025.preObbbaGeneralRateBps": 4000,
        "BONUS_TAX_YEARS.2025.preObbbaSpecialRateBps": 6000,
        "BONUS_TAX_YEARS.2025.verify": false
      },
      "tolerance": 0
    },
    {
      "id": "YS-2026-RATES",
      "name": "2026 year-specific rates include 100% post-boundary and corrected 20% pre-boundary",
      "category": "year-specific",
      "source": "IRS Publication 946 (2025), pre-Jan-20-2025 category; Rev. Proc. 2026-15 (2026-13 I.R.B.) corrected 2026 continuation.",
      "input": {
        "taxYear": 2026
      },
      "expected": {
        "BONUS_TAX_YEARS.2026.postObbbaRateBps": 10000,
        "BONUS_TAX_YEARS.2026.preObbbaGeneralRateBps": 2000,
        "BONUS_TAX_YEARS.2026.preObbbaSpecialRateBps": 3000,
        "BONUS_TAX_YEARS.2026.verify": false
      },
      "tolerance": 0
    },
    {
      "id": "YS-VERIFY-ALL-FALSE",
      "name": "All active years 2023-2026 are verified (verify false)",
      "category": "year-specific",
      "source": "IRS Publication 946 (2025), Instructions for Form 4562 (2025), and Rev. Proc. 2026-15 as reflected in BONUS_TAX_YEARS.",
      "input": {},
      "expected": {
        "BONUS_TAX_YEARS.2023.verify": false,
        "BONUS_TAX_YEARS.2024.verify": false,
        "BONUS_TAX_YEARS.2025.verify": false,
        "BONUS_TAX_YEARS.2026.verify": false
      },
      "tolerance": 0
    }
  ]
}
