{
  "capability_id": "electrical.voltage_divider",
  "tool_id": "voltage-divider",
  "engine": "voltage-divider",
  "calculation_version": "1.5.1",
  "generated_at": "2026-09-16T22:03:43.701Z",
  "engine_build": "2026-09-10",
  "test_count": 28,
  "passed": 28,
  "failed": 0,
  "tests_summary": {
    "golden": {
      "total": 9,
      "passed": 9
    },
    "boundary": {
      "total": 8,
      "passed": 8
    },
    "property": {
      "total": 11,
      "passed": 11
    }
  },
  "engine_tested": true,
  "expert_reviewed": false,
  "internally_reviewed": false,
  "review_kind": null,
  "source_checked": true,
  "reviewed_by": null,
  "reviewer_role": null,
  "last_reviewed": null,
  "expert_review": {
    "status": "optional_not_performed",
    "reviewer": null,
    "scope": [
      "formula",
      "input semantics",
      "assumptions",
      "limitations",
      "sources",
      "tests"
    ],
    "note": "Domain expert review is optional under CVP (CVP-EXP-01). Absence does not block CVP Verified. See Review policy for supplemental domain assurance."
  },
  "internal_review": {
    "status": "not_applicable",
    "reviewer": null
  },
  "page": "https://www.calculatorx.com/calc/electric/voltage-divider",
  "api": "https://www.calculatorx.com/api/v1/calc/voltage-divider",
  "schema_input": "https://www.calculatorx.com/schemas/electrical.voltage_divider.input.json",
  "schema_output": "https://www.calculatorx.com/schemas/electrical.voltage_divider.output.json",
  "assumptions": [
    "No load on Vout",
    "DC / resistive",
    "R1 from Vin to tap; R2 from tap to ground"
  ],
  "limitations": [
    "Unloaded two-resistor divider only",
    "Canonical input is exactly three of Vin, R1, R2, Vout",
    "Fewer than three inputs → NEEDS_THREE_INPUTS",
    "All four inputs → TOO_MANY_INPUTS (not a consistency check)",
    "Solving R1/R2 requires Vin > Vout > 0 (INVALID_DIVIDER_VOLTAGES otherwise)",
    "R1+R2=0 when solving Vout → RESISTANCE_MUST_BE_POSITIVE",
    "Not for loaded dividers, AC reactive dividers, or RF"
  ],
  "boundary_conditions": [
    "Fewer than three of Vin,R1,R2,Vout → NEEDS_THREE_INPUTS",
    "All four of Vin,R1,R2,Vout → TOO_MANY_INPUTS",
    "Negative inputs → VALUE_MUST_BE_NON_NEGATIVE",
    "Non-finite inputs → INVALID_NUMBER",
    "Solving R1/R2 when not (Vin > Vout > 0) → INVALID_DIVIDER_VOLTAGES",
    "R1+R2=0 when solving Vout, or R2=0 when solving Vin → RESISTANCE_MUST_BE_POSITIVE",
    "Vin=0 with R1,R2>0 → Vout=0, I=0 (valid)"
  ],
  "sources": [
    {
      "title": "IEC 60050 — International Electrotechnical Vocabulary",
      "section": "Resistance (IEV 131-12-04)",
      "url": "https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=131-12-04",
      "supports": "R = u/I on each series resistor; unloaded divider uses this ohmic identity",
      "kind": "standard",
      "accessed": "2026-09-05",
      "clause": "IEV 131-12-04"
    },
    {
      "title": "IEC 60050 — International Electrotechnical Vocabulary",
      "section": "Kirchhoff law for meshes (IEV 131-15-10)",
      "url": "https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=131-15-10",
      "supports": "Along a closed path the algebraic sum of voltages is zero; Vin = VR1 + VR2 so Vout = Vin × R2 / (R1 + R2)",
      "kind": "standard",
      "accessed": "2026-09-05",
      "clause": "IEV 131-15-10"
    },
    {
      "title": "NIST Guide to the SI (SP 811)",
      "section": "Volt, ohm, and ampere in circuit analysis",
      "url": "https://www.nist.gov/pml/special-publication-811",
      "supports": "SI units for voltage, resistance, and series current",
      "kind": "reference"
    },
    {
      "title": "BIPM SI Brochure (9th edition, version 4.01)",
      "section": "SI base and derived units for volt, ohm, ampere, and watt",
      "url": "https://www.bipm.org/en/publications/si-brochure",
      "supports": "Unit relationships for V, Ω, A, W used in divider power",
      "kind": "reference",
      "accessed": "2026-09-05",
      "published": "2026-06",
      "doi": "https://doi.org/10.59161/AUEZ1291"
    }
  ],
  "methods": [],
  "fingerprint": "sha256:f4fcadc380dd4f9b07e5f6ff751870f905df0f27b5e5af9cd532c9b76c157897",
  "tests": [
    {
      "id": "5V-1k-2k",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "R2": 2000
      },
      "expect": {
        "Vout": 3.333333,
        "I": 0.001666667,
        "P1": 0.002777778,
        "P2": 0.005555556,
        "Ptotal": 0.008333333,
        "ratio": 0.666667,
        "Rth": 666.667
      },
      "expectWarning": null,
      "actual": {
        "Vin": 5,
        "R1": 1000,
        "R2": 2000,
        "Vout": 3.3333333333333335,
        "I": 0.0016666666666666668,
        "P1": 0.0027777777777777783,
        "P2": 0.005555555555555557,
        "Ptotal": 0.008333333333333335,
        "ratio": 0.6666666666666666,
        "Rth": 666.6666666666666
      },
      "tol": 0.001
    },
    {
      "id": "9V-10k-10k",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 9,
        "R1": 10000,
        "R2": 10000
      },
      "expect": {
        "Vout": 4.5
      },
      "expectWarning": null,
      "actual": {
        "Vin": 9,
        "R1": 10000,
        "R2": 10000,
        "Vout": 4.5,
        "I": 0.00045,
        "P1": 0.002025,
        "P2": 0.002025,
        "Ptotal": 0.00405,
        "ratio": 0.5,
        "Rth": 5000
      },
      "tol": 0.001
    },
    {
      "id": "solve-R2",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "Vout": 3.3
      },
      "expect": {
        "R2": 1941.176
      },
      "expectWarning": null,
      "actual": {
        "Vin": 5,
        "R1": 1000,
        "R2": 1941.1764705882351,
        "Vout": 3.3,
        "I": 0.0017000000000000001,
        "P1": 0.00289,
        "P2": 0.00561,
        "Ptotal": 0.0085,
        "ratio": 0.66,
        "Rth": 660
      },
      "tol": 0.1
    },
    {
      "id": "solve-R1",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 5,
        "R2": 2000,
        "Vout": 3.333333
      },
      "expect": {
        "R1": 1000
      },
      "expectWarning": null,
      "actual": {
        "Vin": 5,
        "R1": 1000.0003000000299,
        "R2": 2000,
        "Vout": 3.333333,
        "I": 0.0016666665000000002,
        "P1": 0.0027777780555555,
        "P2": 0.005555554444444501,
        "Ptotal": 0.008333332500000002,
        "ratio": 0.6666666000000001,
        "Rth": 666.6668000000001
      },
      "tol": 0.5
    },
    {
      "id": "equal-12V",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 12,
        "R1": 4000,
        "R2": 4000
      },
      "expect": {
        "Vout": 6
      },
      "expectWarning": null,
      "actual": {
        "Vin": 12,
        "R1": 4000,
        "R2": 4000,
        "Vout": 6,
        "I": 0.0015,
        "P1": 0.009000000000000001,
        "P2": 0.009000000000000001,
        "Ptotal": 0.018000000000000002,
        "ratio": 0.5,
        "Rth": 2000
      },
      "tol": 0.001
    },
    {
      "id": "linear-2x-Vin",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 10,
        "R1": 1000,
        "R2": 2000
      },
      "expect": {
        "Vout": 6.666667
      },
      "expectWarning": null,
      "actual": {
        "Vin": 10,
        "R1": 1000,
        "R2": 2000,
        "Vout": 6.666666666666667,
        "I": 0.0033333333333333335,
        "P1": 0.011111111111111113,
        "P2": 0.022222222222222227,
        "Ptotal": 0.03333333333333334,
        "ratio": 0.6666666666666666,
        "Rth": 666.6666666666666
      },
      "tol": 0.001
    },
    {
      "id": "roundtrip-R2",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "Vout": 3.333333
      },
      "expect": {
        "R2": 2000
      },
      "expectWarning": null,
      "actual": {
        "Vin": 5,
        "R1": 1000,
        "R2": 1999.9994000001202,
        "Vout": 3.333333,
        "I": 0.001666667,
        "P1": 0.0027777788888889996,
        "P2": 0.005555556111110999,
        "Ptotal": 0.008333334999999999,
        "ratio": 0.6666666,
        "Rth": 666.6666
      },
      "tol": 0.5
    },
    {
      "id": "solve-Vin",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "R1": 1000,
        "R2": 2000,
        "Vout": 3.333333
      },
      "expect": {
        "Vin": 5
      },
      "expectWarning": null,
      "actual": {
        "Vin": 4.9999994999999995,
        "R1": 1000,
        "R2": 2000,
        "Vout": 3.333333,
        "I": 0.0016666664999999998,
        "P1": 0.0027777772222222492,
        "P2": 0.0055555544444444984,
        "Ptotal": 0.008333331666666747,
        "ratio": 0.6666666666666666,
        "Rth": 666.6666666666666
      },
      "tol": 0.01
    },
    {
      "id": "soft-zero-Vin",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "Vin": 0,
        "R1": 1000,
        "R2": 2000
      },
      "expect": {
        "Vout": 0,
        "I": 0
      },
      "expectWarning": null,
      "actual": {
        "Vin": 0,
        "R1": 1000,
        "R2": 2000,
        "Vout": 0,
        "I": 0,
        "P1": 0,
        "P2": 0,
        "Ptotal": 0,
        "ratio": 0.6666666666666666,
        "Rth": 666.6666666666666
      },
      "tol": 1e-12
    },
    {
      "id": "error-Vout-ge-Vin",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "Vout": 6
      },
      "expectError": "INVALID_DIVIDER_VOLTAGES",
      "code": "INVALID_DIVIDER_VOLTAGES",
      "error": "Need Vin > Vout > 0 to solve for R2"
    },
    {
      "id": "error-zero-rsum",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": 0,
        "R2": 0
      },
      "expectError": "RESISTANCE_MUST_BE_POSITIVE",
      "code": "RESISTANCE_MUST_BE_POSITIVE",
      "error": "R1 + R2 must be greater than zero"
    },
    {
      "id": "error-neg-R1",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": -1000,
        "R2": 2000
      },
      "expectError": "VALUE_MUST_BE_NON_NEGATIVE",
      "code": "VALUE_MUST_BE_NON_NEGATIVE",
      "error": "R1 must be greater than or equal to 0"
    },
    {
      "id": "error-two-inputs",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": 1000
      },
      "expectError": "NEEDS_THREE_INPUTS",
      "code": "NEEDS_THREE_INPUTS",
      "error": "voltageDivider needs exactly three of Vin,R1,R2,Vout"
    },
    {
      "id": "error-empty",
      "ok": true,
      "kind": "boundary",
      "inputs": {},
      "expectError": "NEEDS_THREE_INPUTS",
      "code": "NEEDS_THREE_INPUTS",
      "error": "voltageDivider needs exactly three of Vin,R1,R2,Vout"
    },
    {
      "id": "error-four-inputs",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "R2": 2000,
        "Vout": 3.3
      },
      "expectError": "TOO_MANY_INPUTS",
      "code": "TOO_MANY_INPUTS",
      "error": "voltageDivider accepts exactly three of Vin,R1,R2,Vout — four values are not a solve"
    },
    {
      "id": "boundary-two-inputs",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 12,
        "R1": 1000
      },
      "expectError": "NEEDS_THREE_INPUTS",
      "code": "NEEDS_THREE_INPUTS",
      "error": "voltageDivider needs exactly three of Vin,R1,R2,Vout"
    },
    {
      "id": "boundary-vout-zero-solve-r2",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vin": 5,
        "R1": 1000,
        "Vout": 0
      },
      "expectError": "INVALID_DIVIDER_VOLTAGES",
      "code": "INVALID_DIVIDER_VOLTAGES",
      "error": "Need Vin > Vout > 0 to solve for R2"
    },
    {
      "id": "property-equal-divider",
      "ok": true,
      "kind": "property",
      "detail": "Equal R → Vout=Vin/2",
      "expect": 6,
      "actual": 6
    },
    {
      "id": "property-equal-current",
      "ok": true,
      "kind": "property",
      "detail": "I = Vin/(R1+R2)",
      "expect": 0.006,
      "actual": 0.006
    },
    {
      "id": "property-1-to-3",
      "ok": true,
      "kind": "property",
      "detail": "R2/(R1+R2)·Vin",
      "expect": 3,
      "actual": 3
    },
    {
      "id": "property-linear-vin",
      "ok": true,
      "kind": "property",
      "detail": "Vout ∝ Vin",
      "expect": 12,
      "actual": 12
    },
    {
      "id": "property-solve-R2",
      "ok": true,
      "kind": "property",
      "detail": "Vin,R1,Vout → R2",
      "expect": 2000,
      "actual": 2000.0000000000002
    },
    {
      "id": "property-solve-R1",
      "ok": true,
      "kind": "property",
      "detail": "Vin,R2,Vout → R1",
      "expect": 1000,
      "actual": 999.9999999999999
    },
    {
      "id": "property-solve-Vin",
      "ok": true,
      "kind": "property",
      "detail": "R1,R2,Vout → Vin",
      "expect": 5,
      "actual": 5
    },
    {
      "id": "property-roundtrip-R2-grid",
      "ok": true,
      "kind": "property",
      "detail": "R2 round-trip 27/27",
      "expect": 27,
      "actual": 27
    },
    {
      "id": "property-scale-resistors",
      "ok": true,
      "kind": "property",
      "detail": "kR1,kR2 → Vout same, I/k, P/k, k·Rth",
      "expect": 3.3333333333333335,
      "actual": 3.3333333333333335
    },
    {
      "id": "property-power-identity",
      "ok": true,
      "kind": "property",
      "detail": "P1+P2=Ptotal=Vin·I",
      "expect": 0.008333333333333333,
      "actual": 0.008333333333333335
    },
    {
      "id": "property-rth-parallel",
      "ok": true,
      "kind": "property",
      "detail": "Rth=R1∥R2 and ratio=R2/(R1+R2)",
      "expect": 666.6666666666666,
      "actual": 666.6666666666666
    }
  ],
  "tier": "engine_tested",
  "verification": {
    "tests": {
      "passed": 28,
      "total": 28,
      "golden": 9,
      "boundary": 8,
      "property": 11
    },
    "contract_checks": {
      "passed": 4,
      "total": 4
    }
  },
  "evidence_core_generated_at": "2026-09-10T22:48:17.762Z",
  "rendered_at": "2026-09-16T22:03:43.701Z",
  "release_integrity": {
    "status": "verified",
    "scope": "workspace",
    "production_attestation_required": true,
    "calculation_version": "1.5.1",
    "artifacts": {
      "engine": "1.5.1",
      "page": "1.5.1",
      "capability": "1.5.1",
      "evidence": "1.5.1",
      "input_schema": "1.5.1",
      "output_schema": "1.5.1",
      "mcp_contract": "1.5.1"
    },
    "digests": {
      "input_schema_sha256": "0663ccfc519ce176d1634215338c442f4b6b6f5e1961f0e49f06188d6ac947fa",
      "output_schema_sha256": "e6d562f2f93ce1cf437a532b25eec76c06c605f1eb72d36d7d7000957ba515df",
      "evidence_sha256": "1a2a3e6f8431430b30a5710bcd46f162fcf8a28955617ab85da0fed9bc4e0d64",
      "evidence_core_sha256": "1a2a3e6f8431430b30a5710bcd46f162fcf8a28955617ab85da0fed9bc4e0d64",
      "capability_sha256": "8c4a88663ecf7018d2bb34a806df8de0f4b59ad6a995db30f929b2feb641f7b4",
      "engine_sha256": "c8d4ccdbfeaf61d7b024d4e1babb0c2ba3b324c1b37bd0cb456a526d8d2b1bd1",
      "mcp_contract_sha256": "863098b311a7b17dc4b229a6302b90b3545b175f716e5d84772c7be8e9716b86"
    },
    "contract_checks": {
      "total": 4,
      "passed": 4,
      "failed": 0,
      "items": [
        {
          "id": "release-artifacts-aligned",
          "status": "pass",
          "detail": "1.5.1"
        },
        {
          "id": "schema-valid-input-executes",
          "status": "pass"
        },
        {
          "id": "engine-success-output-validates-schema",
          "status": "pass"
        },
        {
          "id": "schema-rejects-incomplete-input",
          "status": "pass"
        }
      ]
    },
    "report": "https://www.calculatorx.com/.well-known/calculatorx-release-integrity.json"
  }
}
