{
  "capability_id": "electrical.ac_dc_rectifier",
  "tool_id": "ac-dc-rectifier",
  "engine": "ac-dc-rectifier",
  "calculation_version": "1.1.2",
  "generated_at": "2026-09-16T22:03:43.727Z",
  "engine_build": "2026-09-10",
  "test_count": 27,
  "passed": 27,
  "failed": 0,
  "tests_summary": {
    "golden": {
      "total": 3,
      "passed": 3
    },
    "boundary": {
      "total": 8,
      "passed": 8
    },
    "property": {
      "total": 16,
      "passed": 16
    }
  },
  "engine_tested": true,
  "expert_reviewed": false,
  "internally_reviewed": true,
  "review_kind": "internal",
  "source_checked": true,
  "reviewed_by": "CalculatorX electrical review",
  "reviewer_role": "electrical-engineer",
  "last_reviewed": "2026-08-18",
  "expert_review": {
    "status": "not_applicable",
    "reviewer": null,
    "note": "Internal domain review completed; not a named external expert review.",
    "kind": "internal"
  },
  "internal_review": {
    "status": "approved",
    "reviewer": {
      "name": "CalculatorX electrical review",
      "role": "electrical-engineer"
    },
    "reviewed_at": "2026-08-18",
    "scope": [
      "formula",
      "input semantics",
      "assumptions",
      "limitations",
      "sources",
      "tests"
    ],
    "kind": "internal"
  },
  "page": "https://www.calculatorx.com/calc/electric/ac-dc-rectifier",
  "api": "https://www.calculatorx.com/api/v1/calc/ac-dc-rectifier",
  "schema_input": "https://www.calculatorx.com/schemas/electrical.ac_dc_rectifier.input.json",
  "schema_output": "https://www.calculatorx.com/schemas/electrical.ac_dc_rectifier.output.json",
  "assumptions": [
    "Ideal diodes (zero forward drop; no reverse recovery)",
    "Rectified-waveform model: no reservoir capacitor; Vavg is the pulsed-sine average",
    "Capacitor-smoothed model: constant-current discharge; Vdc_est ≈ Vpeak − ΔV/2",
    "Continuous-conduction ripple approximation ΔV ≈ I/(f_ripple·C)",
    "If ΔV ≥ Vpeak, Vdc_est and Vmin are withheld; only raw_model_extrapolation keeps the arithmetic"
  ],
  "limitations": [
    "Ideal diodes (0 V drop); not SCR/thyristor or active PFC",
    "Vavg is the unfiltered rectified-sine average, not capacitor-smoothed DC bus voltage",
    "Capacitor model uses continuous-discharge ΔV≈I/(f_ripple·C); when ΔV≥Vpeak, Vdc_est and Vmin are withheld (model_validity.valid=false)"
  ],
  "boundary_conditions": [
    "Vac≤0 → VALUE_MUST_BE_POSITIVE",
    "I without C, or C without I → NEEDS_TWO_INPUTS",
    "C≤0 or f_line≤0 or I≤0 (when capacitor model) → VALUE_MUST_BE_POSITIVE",
    "ripple_Vpp ≥ Vpeak → RIPPLE_EXCEEDS_PEAK; Vdc_est and Vmin withheld (model_validity.valid=false)"
  ],
  "sources": [
    {
      "title": "Texas Instruments — A Design Review of a Full-Featured 350-W Offline Power Supply (TIDU186)",
      "section": "Figure 4 — ideal bridge / half-wave average and RMS",
      "url": "https://www.ti.com/lit/ug/tidu186/tidu186.pdf",
      "supports": "Vavg_full=2Vp/π; Vavg_half=Vp/π; Vrms_full=Vac; Vrms_half=Vac/√2",
      "kind": "reference"
    },
    {
      "title": "Analog Devices — Diode Applications, Rectifier Output Smoothing",
      "section": "Capacitor-input filter / reservoir capacitor",
      "url": "https://wiki.analog.com/university/courses/electronics/text/chapter-6",
      "supports": "ΔV≈I/(f_ripple·C); full-wave ripple frequency is 2·f_line",
      "kind": "reference"
    },
    {
      "title": "IEC 60050 — International Electrotechnical Vocabulary",
      "section": "Electronic power conversion (IEV 551-11-02)",
      "url": "https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=551-11-02",
      "supports": "Change of voltage/frequency characteristics (including zero frequency / DC) by electronic valve devices — terminology only, not the Vavg/ripple formulas",
      "kind": "standard",
      "accessed": "2026-09-05",
      "clause": "IEV 551-11-02"
    },
    {
      "title": "IEC 60050 — International Electrotechnical Vocabulary",
      "section": "Semiconductor diode (IEV 521-04-03)",
      "url": "https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=521-04-03",
      "supports": "Two-terminal semiconductor device with asymmetrical V–I characteristic (ideal-diode model on this page ignores forward drop)",
      "kind": "standard",
      "accessed": "2026-09-05",
      "clause": "IEV 521-04-03"
    }
  ],
  "methods": [],
  "fingerprint": "sha256:d76b8885f1e5c5a6fc2e79ba140b081e8ea7dd2d25e06c09c76b237629a80f1a",
  "tests": [
    {
      "id": "full-230",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "mode": "full",
        "Vac_rms": 230
      },
      "expect": {
        "circuit_model": "rectified_waveform",
        "Vpeak": 325.2691193458119,
        "Vavg": 207.0727527161344,
        "Vrms_out": 230,
        "f_ripple_Hz": 100
      },
      "expectWarning": null,
      "actual": {
        "mode": "full",
        "circuit_model": "rectified_waveform",
        "Vac_rms": 230,
        "Vpeak": 325.2691193458119,
        "Vavg": 207.0727527161344,
        "Vrms_out": 230,
        "f_line_Hz": 50,
        "f_ripple_Hz": 100,
        "ripple_Vpp": null,
        "Vdc_est": null,
        "Vmin": null,
        "Vmax": null,
        "model_validity": {
          "valid": true,
          "code": null
        },
        "raw_model_extrapolation": null
      },
      "tol": 0.05
    },
    {
      "id": "half-230",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "mode": "half",
        "Vac_rms": 230
      },
      "expect": {
        "circuit_model": "rectified_waveform",
        "Vavg": 103.5363763580672,
        "Vrms_out": 162.63455967290594,
        "f_ripple_Hz": 50
      },
      "expectWarning": null,
      "actual": {
        "mode": "half",
        "circuit_model": "rectified_waveform",
        "Vac_rms": 230,
        "Vpeak": 325.2691193458119,
        "Vavg": 103.5363763580672,
        "Vrms_out": 162.63455967290594,
        "f_line_Hz": 50,
        "f_ripple_Hz": 50,
        "ripple_Vpp": null,
        "Vdc_est": null,
        "Vmin": null,
        "Vmax": null,
        "model_validity": {
          "valid": true,
          "code": null
        },
        "raw_model_extrapolation": null
      },
      "tol": 0.05
    },
    {
      "id": "ripple",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": 1,
        "C_F": 0.002,
        "f_line_Hz": 50
      },
      "expect": {
        "circuit_model": "capacitor_smoothed",
        "ripple_Vpp": 5,
        "Vdc_est": 14.470562748477143,
        "Vmin": 11.970562748477143,
        "Vmax": 16.970562748477143
      },
      "expectWarning": null,
      "actual": {
        "mode": "full",
        "circuit_model": "capacitor_smoothed",
        "Vac_rms": 12,
        "Vpeak": 16.970562748477143,
        "Vavg": 10.803795793885275,
        "Vrms_out": 12,
        "f_line_Hz": 50,
        "f_ripple_Hz": 100,
        "ripple_Vpp": 5,
        "Vdc_est": 14.470562748477143,
        "Vmin": 11.970562748477143,
        "Vmax": 16.970562748477143,
        "model_validity": {
          "valid": true,
          "code": null
        },
        "raw_model_extrapolation": null
      },
      "tol": 1e-9
    },
    {
      "id": "bad-vac",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vac_rms": 0
      },
      "expectError": "VALUE_MUST_BE_POSITIVE",
      "code": "VALUE_MUST_BE_POSITIVE",
      "error": "Vac_rms must be greater than zero"
    },
    {
      "id": "boundary-neg-vac",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "Vac_rms": -1
      },
      "expectError": "VALUE_MUST_BE_POSITIVE",
      "code": "VALUE_MUST_BE_POSITIVE",
      "error": "Vac_rms must be greater than zero"
    },
    {
      "id": "boundary-i-without-c",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": 1
      },
      "expectError": "NEEDS_TWO_INPUTS",
      "code": "NEEDS_TWO_INPUTS",
      "error": "I_load_A and C_F must both be provided for the capacitor-smoothed model"
    },
    {
      "id": "boundary-c-without-i",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "C_F": 0.002
      },
      "expectError": "NEEDS_TWO_INPUTS",
      "code": "NEEDS_TWO_INPUTS",
      "error": "I_load_A and C_F must both be provided for the capacitor-smoothed model"
    },
    {
      "id": "boundary-bad-c",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": 1,
        "C_F": 0,
        "f_line_Hz": 50
      },
      "expectError": "VALUE_MUST_BE_POSITIVE",
      "code": "VALUE_MUST_BE_POSITIVE",
      "error": "C_F must be greater than zero"
    },
    {
      "id": "boundary-bad-f",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": 1,
        "C_F": 0.002,
        "f_line_Hz": 0
      },
      "expectError": "VALUE_MUST_BE_POSITIVE",
      "code": "VALUE_MUST_BE_POSITIVE",
      "error": "f_line_Hz must be greater than zero"
    },
    {
      "id": "boundary-neg-i",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": -1,
        "C_F": 0.002,
        "f_line_Hz": 50
      },
      "expectError": "VALUE_MUST_BE_POSITIVE",
      "code": "VALUE_MUST_BE_POSITIVE",
      "error": "I_load_A must be greater than zero"
    },
    {
      "id": "boundary-ripple-exceeds-peak",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "mode": "full",
        "Vac_rms": 12,
        "I_load_A": 1,
        "C_F": 0.000001,
        "f_line_Hz": 50
      },
      "expect": {
        "circuit_model": "capacitor_smoothed",
        "ripple_Vpp": 10000
      },
      "expectWarning": "RIPPLE_EXCEEDS_PEAK",
      "actual": {
        "mode": "full",
        "circuit_model": "capacitor_smoothed",
        "Vac_rms": 12,
        "Vpeak": 16.970562748477143,
        "Vavg": 10.803795793885275,
        "Vrms_out": 12,
        "f_line_Hz": 50,
        "f_ripple_Hz": 100,
        "ripple_Vpp": 10000,
        "Vdc_est": null,
        "Vmin": null,
        "Vmax": 16.970562748477143,
        "model_validity": {
          "valid": false,
          "code": "OUTSIDE_CONTINUOUS_DISCHARGE_APPROXIMATION"
        },
        "raw_model_extrapolation": {
          "Vdc_est": -4983.029437251523,
          "Vmin": -9983.029437251524
        },
        "warnings": [
          {
            "code": "RIPPLE_EXCEEDS_PEAK",
            "severity": "warning",
            "detail": "Estimated peak-to-peak ripple is ≥ Vpeak. The continuous-discharge approximation is outside its valid range; Vdc_est and Vmin are withheld because they are not engineering results.",
            "suggestion": "Increase C, reduce I_load, or use the unfiltered rectified-waveform model instead."
          }
        ]
      },
      "tol": 1e-9
    },
    {
      "id": "property-avg-full-twice-half",
      "ok": true,
      "kind": "property",
      "detail": "Vavg_full = 2 × Vavg_half",
      "expect": 207.0727527161344,
      "actual": 207.0727527161344
    },
    {
      "id": "property-vpeak-mode-independent",
      "ok": true,
      "kind": "property",
      "detail": "Vpeak = √2 × Vac",
      "expect": 325.2691193458119,
      "actual": 325.2691193458119
    },
    {
      "id": "property-full-vrms-equals-vac",
      "ok": true,
      "kind": "property",
      "detail": "full-wave Vrms_out = Vac",
      "expect": 230,
      "actual": 230
    },
    {
      "id": "property-half-vrms-vac-over-sqrt2",
      "ok": true,
      "kind": "property",
      "detail": "half-wave Vrms_out = Vac/√2",
      "expect": 162.6345596729059,
      "actual": 162.63455967290594
    },
    {
      "id": "property-full-friple-2fline",
      "ok": true,
      "kind": "property",
      "detail": "full-wave f_ripple = 2 × f_line",
      "expect": 100,
      "actual": 100
    },
    {
      "id": "property-half-friple-fline",
      "ok": true,
      "kind": "property",
      "detail": "half-wave f_ripple = f_line",
      "expect": 50,
      "actual": 50
    },
    {
      "id": "property-scale-vac",
      "ok": true,
      "kind": "property",
      "detail": "Vac × 2 → Vpeak / Vavg / Vrms × 2",
      "expect": 414.1455054322688,
      "actual": 414.1455054322688
    },
    {
      "id": "property-c-double-halves-ripple",
      "ok": true,
      "kind": "property",
      "detail": "C × 2 → ripple ÷ 2",
      "expect": 2.5,
      "actual": 2.5
    },
    {
      "id": "property-i-double-doubles-ripple",
      "ok": true,
      "kind": "property",
      "detail": "I × 2 → ripple × 2",
      "expect": 10,
      "actual": 10
    },
    {
      "id": "property-f-double-halves-ripple",
      "ok": true,
      "kind": "property",
      "detail": "f × 2 → ripple ÷ 2",
      "expect": 2.5,
      "actual": 2.5
    },
    {
      "id": "property-models-differ",
      "ok": true,
      "kind": "property",
      "detail": "Vdc_est ≠ unfiltered Vavg",
      "expect": 14.470562748477143,
      "actual": 10.803795793885275,
      "assertion": "not_equal",
      "operator": "!=",
      "left": 14.470562748477143,
      "right": 10.803795793885275
    },
    {
      "id": "property-vdc-midpoint",
      "ok": true,
      "kind": "property",
      "detail": "Vdc_est = (Vmax+Vmin)/2 = Vpeak − ΔV/2",
      "expect": 14.470562748477143,
      "actual": 14.470562748477143,
      "assertion": "equal",
      "operator": "≈"
    },
    {
      "id": "property-ripple-warning",
      "ok": true,
      "kind": "property",
      "detail": "tiny C → RIPPLE_EXCEEDS_PEAK",
      "expect": true,
      "actual": true
    },
    {
      "id": "property-invalid-estimate-gated",
      "ok": true,
      "kind": "property",
      "detail": "ΔV≥Vpeak → Vdc_est/Vmin null; raw extrapolation only",
      "expect": {
        "Vdc_est": null,
        "Vmin": null,
        "valid": false
      },
      "actual": {
        "Vdc_est": null,
        "Vmin": null,
        "valid": false
      },
      "assertion": "equal",
      "operator": "=="
    },
    {
      "id": "property-reject-vac-le0",
      "ok": true,
      "kind": "property",
      "detail": "Vac≤0 rejected",
      "expect": "VALUE_MUST_BE_POSITIVE",
      "actual": "VALUE_MUST_BE_POSITIVE"
    },
    {
      "id": "property-reject-partial-cap",
      "ok": true,
      "kind": "property",
      "detail": "I xor C → NEEDS_TWO_INPUTS",
      "expect": "NEEDS_TWO_INPUTS",
      "actual": "NEEDS_TWO_INPUTS"
    }
  ],
  "tier": "internally_reviewed",
  "verification": {
    "tests": {
      "passed": 27,
      "total": 27,
      "golden": 3,
      "boundary": 8,
      "property": 16
    },
    "contract_checks": {
      "passed": 4,
      "total": 4
    }
  },
  "evidence_core_generated_at": "2026-09-05T02:35:39.217Z",
  "rendered_at": "2026-09-16T22:03:43.727Z",
  "release_integrity": {
    "status": "verified",
    "scope": "workspace",
    "production_attestation_required": true,
    "calculation_version": "1.1.2",
    "artifacts": {
      "engine": "1.1.2",
      "page": "1.1.2",
      "capability": "1.1.2",
      "evidence": "1.1.2",
      "input_schema": "1.1.2",
      "output_schema": "1.1.2",
      "mcp_contract": "1.1.2"
    },
    "digests": {
      "input_schema_sha256": "cf5bdc0117b7efd2fa3ef4654762c36013049847ebd797a361b0b75d8b18db98",
      "output_schema_sha256": "282b736029074bb7ae43782ae5d06564f04ada7bb02d2f5efa7ea9e4d38c7d4d",
      "evidence_sha256": "a6e87716292525ee9425f0eef4423c29806f96683644fe6fa158a5f6ccf7699d",
      "evidence_core_sha256": "a6e87716292525ee9425f0eef4423c29806f96683644fe6fa158a5f6ccf7699d",
      "capability_sha256": "b7a6daed52cce4aca91d352eaededa922fde71d68427fc9e61715838b33d1d15",
      "engine_sha256": "c8d4ccdbfeaf61d7b024d4e1babb0c2ba3b324c1b37bd0cb456a526d8d2b1bd1",
      "mcp_contract_sha256": "863098b311a7b17dc4b229a6302b90b3545b175f716e5d84772c7be8e9716b86"
    },
    "contract_checks": {
      "total": 4,
      "passed": 4,
      "failed": 0,
      "items": [
        {
          "id": "release-artifacts-aligned",
          "status": "pass",
          "detail": "1.1.2"
        },
        {
          "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"
  }
}
