{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://electronics-architect.com/schema/design-v1.json",
  "title": "Electronics Architect design, schema version 1",
  "description": "The design file \"Save locally\" writes and the body POST /api/solve accepts. Units policy: every solver-read number is in its SI base unit (V, A, W, Ω, F, H, Hz, °C, °C/W) with no prefix, as a JSON number — 600 µA is 0.0006. Efficiency handles (effNoLoad/effPeak/effMaxLoad), PAE and state of charge are percent 0–100; efficiency on transformers, inverters, PFC, motors and charge pumps, power factor and coupling k are ratios 0–1. Generated from the component registry by solver/designSchema.js; the human-readable contract is docs/design-schema-v1.md.",
  "type": "object",
  "required": [
    "schemaVersion",
    "version",
    "sheets"
  ],
  "properties": {
    "schemaVersion": {
      "const": 1,
      "description": "The published contract version. Always 1 for this schema."
    },
    "version": {
      "const": "3.0",
      "description": "The canvas file-format version this contract freezes (the migration pipeline's version string)."
    },
    "timestamp": {
      "type": "string",
      "description": "ISO 8601 time the file was written. Informational."
    },
    "pageSettings": {
      "$ref": "#/$defs/pageSettings"
    },
    "showPageGuides": {
      "type": "boolean"
    },
    "routingStyle": {
      "enum": [
        "spline",
        "orthogonal"
      ],
      "description": "Wire rendering style."
    },
    "gridSettings": {
      "$ref": "#/$defs/gridSettings"
    },
    "watermark": {
      "oneOf": [
        {
          "type": "null"
        },
        {
          "$ref": "#/$defs/watermark"
        }
      ]
    },
    "sheets": {
      "type": "array",
      "minItems": 1,
      "maxItems": 20,
      "items": {
        "$ref": "#/$defs/sheet"
      },
      "description": "At most 20 sheets and 2000 nodes in total (the solve limits)."
    },
    "activeSheet": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "_nodeLock": {
      "$ref": "#/$defs/nodeLock"
    }
  },
  "additionalProperties": false,
  "$defs": {
    "sheet": {
      "type": "object",
      "required": [
        "id",
        "name",
        "nodes",
        "connections"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "name": {
          "type": "string"
        },
        "nodes": {
          "type": "array",
          "maxItems": 500,
          "items": {
            "$ref": "#/$defs/node"
          }
        },
        "connections": {
          "type": "array",
          "maxItems": 2000,
          "items": {
            "$ref": "#/$defs/connection"
          }
        },
        "viewBox": {
          "$ref": "#/$defs/viewBox"
        },
        "nameCounters": {
          "type": "object",
          "description": "Next reference-designator number per prefix (V, U, R, L…).",
          "additionalProperties": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "additionalProperties": false
    },
    "node": {
      "type": "object",
      "description": "One placed component. `x`/`y` are canvas coordinates in SVG user units (pixels at 1:1 zoom); they carry no physical meaning.",
      "required": [
        "id",
        "type",
        "x",
        "y",
        "properties"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "Unique within the design. Connections reference it."
        },
        "type": {
          "type": "string",
          "enum": [
            "Source",
            "Load",
            "MultiPortLoad",
            "LDO",
            "SMPS",
            "Resistor",
            "Fuse",
            "Inductor",
            "Battery",
            "BMS",
            "Diode",
            "Zener",
            "Ground",
            "OpAmp",
            "OffPage",
            "TextBox",
            "ACSource",
            "Capacitor",
            "Transformer",
            "Rectifier",
            "Inverter",
            "PFC",
            "ACLoad",
            "Motor",
            "ChargePump",
            "RFAmplifier",
            "Junction"
          ],
          "description": "Component type. The `properties` object is validated against the matching `$defs/properties/<type>`."
        },
        "name": {
          "type": "string",
          "description": "Reference designator shown on the canvas (V1, U2, L3…). Auto-assigned when absent."
        },
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        },
        "width": {
          "type": "number",
          "exclusiveMinimum": 0,
          "description": "Canvas size; the constructor default applies when absent."
        },
        "height": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "properties": {
          "type": "object",
          "description": "Electrical, thermal and instance attributes in SI base units. See `$defs/properties/<type>`."
        },
        "tolerances": {
          "type": "object",
          "description": "Monte Carlo tolerance per property key. Absent keys use the registry default; `{}` means none.",
          "additionalProperties": {
            "$ref": "#/$defs/tolerance"
          }
        },
        "annotations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/annotation"
          },
          "description": "TextBox callout arrows."
        },
        "portDirections": {
          "type": "object",
          "description": "Direction of each port by side name (`top`, `right`, `bottom`, `left`, or a type-specific port such as `L1`, `in0`, `DC+`). `null` = not yet wired.",
          "additionalProperties": {
            "enum": [
              "in",
              "out",
              null
            ]
          }
        },
        "customPorts": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/customPort"
          }
        },
        "selectedPart": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/selectedPart"
            }
          ]
        },
        "ivDataPoints": {
          "type": "array",
          "items": {},
          "description": "Raw I-V points behind a fitted diode model, kept for the chart overlay. Not a solver input."
        }
      },
      "additionalProperties": false,
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "Source"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Source"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Load"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Load"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "MultiPortLoad"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/MultiPortLoad"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "LDO"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/LDO"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "SMPS"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/SMPS"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Resistor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Resistor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Fuse"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Fuse"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Inductor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Inductor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Battery"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Battery"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "BMS"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/BMS"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Diode"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Diode"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Zener"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Zener"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Ground"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Ground"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "OpAmp"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/OpAmp"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "OffPage"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/OffPage"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "TextBox"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/TextBox"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "ACSource"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/ACSource"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Capacitor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Capacitor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Transformer"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Transformer"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Rectifier"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Rectifier"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Inverter"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Inverter"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "PFC"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/PFC"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "ACLoad"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/ACLoad"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Motor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Motor"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "ChargePump"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/ChargePump"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "RFAmplifier"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/RFAmplifier"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "Junction"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/$defs/properties/Junction"
              }
            }
          }
        }
      ]
    },
    "connection": {
      "type": "object",
      "description": "A wire between two ports. The optional fields are manual routing overrides.",
      "required": [
        "from",
        "to"
      ],
      "properties": {
        "from": {
          "$ref": "#/$defs/port"
        },
        "to": {
          "$ref": "#/$defs/port"
        },
        "midX": {
          "type": "number"
        },
        "midY1": {
          "type": "number"
        },
        "midY2": {
          "type": "number"
        },
        "cp1": {
          "$ref": "#/$defs/controlPoint"
        },
        "cp2": {
          "$ref": "#/$defs/controlPoint"
        },
        "manualRoute": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "port": {
      "type": "object",
      "required": [
        "nodeId",
        "side"
      ],
      "properties": {
        "nodeId": {
          "type": "string",
          "minLength": 1,
          "description": "A node `id` on the same sheet."
        },
        "side": {
          "type": "string",
          "minLength": 1,
          "description": "`top`, `right`, `bottom`, `left`, a custom port id, or a type-specific port name."
        }
      },
      "additionalProperties": false
    },
    "controlPoint": {
      "type": "object",
      "description": "A spline control-point handle, stored RELATIVE to the port it belongs to (canvas units).",
      "required": [
        "dx",
        "dy"
      ],
      "properties": {
        "dx": {
          "type": "number"
        },
        "dy": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "viewBox": {
      "type": "object",
      "required": [
        "x",
        "y",
        "w",
        "h"
      ],
      "properties": {
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        },
        "w": {
          "type": "number"
        },
        "h": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "tolerance": {
      "type": "object",
      "description": "Monte Carlo spread for one property. `pct` is percent of nominal; `abs` is in the property's own unit.",
      "required": [
        "mode",
        "value"
      ],
      "properties": {
        "mode": {
          "enum": [
            "pct",
            "abs"
          ]
        },
        "value": {
          "type": "number",
          "minimum": 0
        },
        "dist": {
          "enum": [
            "uniform",
            "gaussian",
            "bimodal"
          ],
          "description": "Sampling distribution; uniform when absent."
        }
      },
      "additionalProperties": false
    },
    "customPort": {
      "type": "object",
      "required": [
        "id",
        "edge",
        "direction"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "edge": {
          "enum": [
            "top",
            "right",
            "bottom",
            "left"
          ]
        },
        "direction": {
          "enum": [
            "in",
            "out"
          ]
        }
      },
      "additionalProperties": false
    },
    "annotation": {
      "type": "object",
      "required": [
        "id",
        "targetType"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "targetType": {
          "enum": [
            "node",
            "wire"
          ]
        },
        "targetId": {
          "type": [
            "string",
            "null"
          ]
        },
        "targetWireKey": {
          "type": [
            "string",
            "null"
          ]
        },
        "sourceAnchor": {
          "type": "object",
          "properties": {
            "px": {
              "type": "number"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "selectedPart": {
      "type": "object",
      "description": "The real part chosen for this node — a copy of the parts-database record at the time it was applied. Provenance only: the solver reads `properties`, never this object, and its keys and value types are the database's, not this contract's.",
      "properties": {
        "mpn": {
          "type": "string"
        },
        "manufacturer": {
          "type": "string"
        },
        "datasheetUrl": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "pageSettings": {
      "type": "object",
      "description": "Print layout. Presentation only.",
      "properties": {
        "pageSize": {
          "type": "string",
          "description": "`Letter`, `A4` or `A3` (older files carry `letter`)."
        },
        "orientation": {
          "enum": [
            "landscape",
            "portrait"
          ]
        },
        "margins": {
          "type": [
            "string",
            "number"
          ],
          "description": "The canvas default writes a CSS length (`0.5in`); the Document Settings dialog writes a number of canvas units (40)."
        }
      },
      "additionalProperties": false
    },
    "gridSettings": {
      "type": "object",
      "description": "Canvas grid. Presentation only; `pitch` is in SVG user units.",
      "properties": {
        "visible": {
          "type": "boolean"
        },
        "snap": {
          "type": "boolean"
        },
        "pitch": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "unit": {
          "enum": [
            "in",
            "mm",
            "mil"
          ],
          "description": "The unit the grid is LABELLED in; the pitch itself is canvas units."
        }
      },
      "additionalProperties": false
    },
    "watermark": {
      "type": "object",
      "properties": {
        "dataUrl": {
          "type": "string"
        },
        "opacity": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "enabled": {
          "type": "boolean"
        },
        "placement": {
          "type": "string"
        },
        "scale": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "nodeLock": {
      "type": "object",
      "description": "Written by a Pro save. Ties the file to the saving account; removed on load.",
      "properties": {
        "userId": {},
        "hash": {
          "type": "string"
        },
        "tier": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "properties": {
      "Source": {
        "type": "object",
        "description": "Properties of a `Source` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "voltage": {
            "type": "number",
            "default": 5,
            "description": "Nominal output voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.1 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.1,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "currentLimit": {
            "type": "number",
            "default": 10,
            "description": "Maximum output current limit (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "internalR": {
            "type": "number",
            "default": 0.01,
            "description": "Internal resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 1e-7 to 1000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 1e-7,
            "x-max": 1000000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 30,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          }
        },
        "additionalProperties": false
      },
      "Load": {
        "type": "object",
        "description": "Properties of a `Load` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "current": {
            "type": "number",
            "default": 1,
            "description": "Current consumption (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-9 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-9,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 10,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          }
        },
        "additionalProperties": false
      },
      "MultiPortLoad": {
        "type": "object",
        "description": "Properties of a `MultiPortLoad` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "numPorts": {
            "type": "integer",
            "default": 2,
            "description": "`numPorts` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "portSide": {
            "type": "string",
            "enum": [
              "left",
              "right",
              "top",
              "bottom"
            ],
            "default": "left",
            "description": "`portSide` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "current_0": {
            "type": "number",
            "default": 1,
            "description": "`current_0` Unit: A (amperes), no SI prefix, as a JSON number. Per-design instance state; never taken from a part.",
            "x-unit": "A",
            "x-class": "instance"
          },
          "current_1": {
            "type": "number",
            "default": 1,
            "description": "`current_1` Unit: A (amperes), no SI prefix, as a JSON number. Per-design instance state; never taken from a part.",
            "x-unit": "A",
            "x-class": "instance"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Absolute maximum input/supply voltage per rail (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "iMax": {
            "type": "number",
            "default": 0,
            "description": "Absolute maximum total supply current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 10,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          }
        },
        "additionalProperties": false,
        "patternProperties": {
          "^current_\\d+$": {
            "type": "number",
            "description": "Per-port current in amperes (instance state).",
            "x-unit": "A",
            "x-class": "instance"
          }
        }
      },
      "LDO": {
        "type": "object",
        "description": "Properties of a `LDO` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "vinMin": {
            "type": "number",
            "default": 1.4,
            "description": "Minimum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.3 to 150 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.3,
            "x-max": 150,
            "x-class": "electrical"
          },
          "outputVoltage": {
            "type": "number",
            "default": 3.3,
            "description": "Fixed or adjustable output voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.2 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.2,
            "x-max": 100,
            "x-class": "electrical"
          },
          "dropout": {
            "type": "number",
            "default": 0.3,
            "description": "Dropout voltage at max current (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.001 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.001,
            "x-max": 5,
            "x-class": "electrical"
          },
          "iq": {
            "type": "number",
            "default": 0.001,
            "description": "Quiescent current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-9 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-9,
            "x-max": 1,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 200,
            "x-class": "electrical"
          },
          "iMax": {
            "type": "number",
            "default": 1,
            "description": "Maximum output current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 50 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 50,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 500 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 500,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 40,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "topology": {
            "type": "string",
            "description": "Regulator topology (string: 'LDO')",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "SMPS": {
        "type": "object",
        "description": "Properties of a `SMPS` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "vinMin": {
            "type": "number",
            "default": 3,
            "description": "Minimum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.3 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.3,
            "x-max": 200,
            "x-class": "electrical"
          },
          "outputVoltage": {
            "type": "number",
            "default": 3.3,
            "description": "Output voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "iMax": {
            "type": "number",
            "default": 3,
            "description": "Maximum output current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.001 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.001,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "iq": {
            "type": "number",
            "default": 0.0004,
            "description": "Quiescent current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-9 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-9,
            "x-max": 1,
            "x-class": "electrical"
          },
          "effNoLoad": {
            "type": "number",
            "default": 75,
            "description": "`effNoLoad` Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 10 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 10,
            "x-max": 100,
            "x-class": "electrical"
          },
          "effPeak": {
            "type": "number",
            "default": 92,
            "description": "`effPeak` Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 10 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 10,
            "x-max": 100,
            "x-class": "electrical"
          },
          "effMaxLoad": {
            "type": "number",
            "default": 85,
            "description": "`effMaxLoad` Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 10 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 10,
            "x-max": 100,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 1500 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 1500,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 35,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "effTypical": {
            "type": "number",
            "description": "Typical efficiency (0.0–1.0) — maps to 3-handle model via applyPart() Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.2 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.2,
            "x-max": 1,
            "x-class": "electrical"
          },
          "topology": {
            "type": "string",
            "enum": [
              "",
              "Buck",
              "Boost",
              "Buck-Boost",
              "SEPIC",
              "Inverting",
              "Cuk",
              "Flyback",
              "Forward",
              "Bridge"
            ],
            "default": "",
            "description": "Converter topology (string: 'Buck', 'Boost', 'Buck-Boost', 'SEPIC', 'Inverting', 'Cuk', 'Flyback', 'Forward' or 'Bridge')",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Resistor": {
        "type": "object",
        "description": "Properties of a `Resistor` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "resistance": {
            "type": "number",
            "default": 100,
            "description": "Resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 1000000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 1000000000,
            "x-class": "electrical"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "powerRating": {
            "type": "number",
            "default": 0.25,
            "description": "Power rating (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0.01 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0.01,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "maxVoltage": {
            "type": "number",
            "default": 200,
            "description": "Maximum working voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 50,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "tolerance": {
            "type": "number",
            "description": "Tolerance (%) — metadata-only, not mapped to canvas Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 0.0001 to 50 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 0.0001,
            "x-max": 50,
            "x-class": "electrical"
          },
          "tempCoefficient": {
            "type": "string",
            "description": "Temperature coefficient (ppm/°C) — metadata-only, not mapped to canvas",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Fuse": {
        "type": "object",
        "description": "Properties of a `Fuse` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "resistance": {
            "type": "number",
            "default": 0.001,
            "description": "Internal resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.000001 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.000001,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "currentLimit": {
            "type": "number",
            "default": 5,
            "description": "Maximum current rating / trip current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 40,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "voltageRating": {
            "type": "number",
            "description": "Maximum voltage rating (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 20000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 20000,
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Inductor": {
        "type": "object",
        "description": "Properties of a `Inductor` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "dcr": {
            "type": "number",
            "default": 0.05,
            "description": "DC resistance (DCR) (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.000001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.000001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "inductance": {
            "type": "number",
            "default": 0.00001,
            "description": "Nominal inductance (H) Unit: H (henries), no SI prefix, as a JSON number. Plausible range 1e-10 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "H",
            "x-min": 1e-10,
            "x-max": 100,
            "x-class": "electrical"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "saturationCurrent": {
            "type": "number",
            "default": 1,
            "description": "Saturation current rating (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "rmsCurrentMax": {
            "type": "number",
            "default": 1.5,
            "description": "Maximum RMS current rating (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 35,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "tolerance": {
            "type": "number",
            "description": "Inductance tolerance (%) — metadata-only, not mapped to canvas Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 0.5 to 50 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 0.5,
            "x-max": 50,
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Battery": {
        "type": "object",
        "description": "Properties of a `Battery` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "chemistry": {
            "type": "string",
            "enum": [
              "Li-Ion",
              "LiFePO4",
              "Lead-Acid"
            ],
            "default": "Li-Ion",
            "description": "Cell chemistry (Li-Ion, LiFePO4, Lead-Acid)",
            "x-class": "electrical"
          },
          "seriesCells": {
            "type": "integer",
            "default": 1,
            "description": "Number of cells in series Plausible range 1 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 300,
            "x-class": "electrical"
          },
          "parallelCells": {
            "type": "integer",
            "default": 1,
            "description": "Number of cells in parallel Plausible range 1 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 200,
            "x-class": "electrical"
          },
          "cellCapacity": {
            "type": "number",
            "default": 3,
            "description": "Cell capacity (Ah) Unit: Ah (ampere-hours (battery cell capacity)), no SI prefix, as a JSON number. Plausible range 0.001 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ah",
            "x-min": 0.001,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "cellResistance": {
            "type": "number",
            "default": 0.026,
            "description": "Cell internal resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 10 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 10,
            "x-class": "electrical"
          },
          "soc": {
            "type": "number",
            "default": 80,
            "description": "`soc` Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 0 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Per-design instance state; never taken from a part.",
            "x-unit": "%",
            "x-min": 0,
            "x-max": 100,
            "x-class": "instance"
          },
          "maxDischargeCurrent": {
            "type": "number",
            "default": 15,
            "description": "Maximum continuous discharge current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "maxChargeCurrent": {
            "type": "number",
            "default": 4,
            "description": "Maximum continuous charge current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.001 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.001,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "thetaJA": {
            "type": "number",
            "default": 30,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 80,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "cellVoltageMin": {
            "type": "number",
            "description": "Minimum (cutoff) voltage per cell (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.5 to 4.5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.5,
            "x-max": 4.5,
            "x-class": "electrical"
          },
          "cellVoltageMax": {
            "type": "number",
            "description": "Maximum (full charge) voltage per cell (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.8 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.8,
            "x-max": 5,
            "x-class": "electrical"
          },
          "nominalVoltage": {
            "type": "number",
            "description": "Nominal (rated) battery voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.5 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.5,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "BMS": {
        "type": "object",
        "description": "Properties of a `BMS` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "seriesCells": {
            "type": "integer",
            "default": 1,
            "description": "Number of series cells supported Plausible range 1 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 300,
            "x-class": "electrical"
          },
          "rOn": {
            "type": "number",
            "default": 0.005,
            "description": "MOSFET on-resistance Rds(on) (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 1,
            "x-class": "electrical"
          },
          "iq": {
            "type": "number",
            "default": 0.00005,
            "description": "Quiescent current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-9 to 0.1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-9,
            "x-max": 0.1,
            "x-class": "electrical"
          },
          "ocpLimit": {
            "type": "number",
            "default": 25,
            "description": "Over-current protection (OCP) discharge limit (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.01 to 5000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.01,
            "x-max": 5000,
            "x-class": "electrical"
          },
          "ocpChargeLimit": {
            "type": "number",
            "default": 4,
            "description": "Over-current protection (OCP) charge limit (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.01 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.01,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "uvpLimit": {
            "type": "number",
            "default": 2.8,
            "description": "Under-voltage protection (UVP) limit per cell (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.5 to 4 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.5,
            "x-max": 4,
            "x-class": "electrical"
          },
          "ovpLimit": {
            "type": "number",
            "default": 4.25,
            "description": "Over-voltage protection (OVP) limit per cell (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 2 to 5.5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 2,
            "x-max": 5.5,
            "x-class": "electrical"
          },
          "otpLimit": {
            "type": "number",
            "default": 65,
            "description": "Over-temperature protection (OTP) limit (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 150 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 150,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum pack voltage the BMS can handle (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 30,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Diode": {
        "type": "object",
        "description": "Properties of a `Diode` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "vf": {
            "type": "number",
            "default": 0.7,
            "description": "Forward voltage drop (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.05 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.05,
            "x-max": 5,
            "x-class": "electrical"
          },
          "ivMode": {
            "type": "boolean",
            "default": false,
            "description": "Enable Shockley IV curve model (true/false)",
            "x-class": "electrical"
          },
          "Is": {
            "type": "number",
            "default": 1e-14,
            "description": "Saturation current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-18 to 0.000001 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-18,
            "x-max": 0.000001,
            "x-class": "electrical"
          },
          "n": {
            "type": "number",
            "default": 1,
            "description": "Ideality factor Plausible range 0.5 to 10 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.5,
            "x-max": 10,
            "x-class": "electrical"
          },
          "Rs": {
            "type": "number",
            "default": 0.01,
            "description": "Series resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.0001 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.0001,
            "x-max": 100,
            "x-class": "electrical"
          },
          "ifMax": {
            "type": "number",
            "default": 1,
            "description": "Maximum forward current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 5000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 5000,
            "x-class": "electrical"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "vrrm": {
            "type": "number",
            "default": 100,
            "description": "Maximum repetitive reverse voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 2.08,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0.001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0.001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 60,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 150,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "vfTempCoeff": {
            "type": "number",
            "default": -0.002,
            "description": "Forward voltage temperature coefficient (V/°C, typically negative) Unit: V/°C (volts per degree Celsius), no SI prefix, as a JSON number. Plausible range -0.01 to 0.001 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V/°C",
            "x-min": -0.01,
            "x-max": 0.001,
            "x-class": "electrical"
          },
          "trr": {
            "type": "number",
            "description": "Reverse recovery time (s) — metadata-only, not mapped to canvas Unit: s (seconds), no SI prefix, as a JSON number. Plausible range 1e-12 to 0.001 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "s",
            "x-min": 1e-12,
            "x-max": 0.001,
            "x-class": "electrical"
          },
          "ivModel": {
            "type": "object",
            "description": "`ivModel`",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Zener": {
        "type": "object",
        "description": "Properties of a `Zener` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "vf": {
            "type": "number",
            "default": 0.7,
            "description": "Forward voltage drop (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.05 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.05,
            "x-max": 5,
            "x-class": "electrical"
          },
          "vz": {
            "type": "number",
            "default": 5.1,
            "description": "Zener breakdown voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.5 to 400 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.5,
            "x-max": 400,
            "x-class": "electrical"
          },
          "ivMode": {
            "type": "boolean",
            "default": false,
            "description": "Enable Shockley + Dynamic Resistance model (true/false)",
            "x-class": "electrical"
          },
          "Is": {
            "type": "number",
            "default": 1e-14,
            "description": "Saturation current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-18 to 0.000001 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-18,
            "x-max": 0.000001,
            "x-class": "electrical"
          },
          "n": {
            "type": "number",
            "default": 1,
            "description": "Ideality factor Plausible range 0.5 to 10 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.5,
            "x-max": 10,
            "x-class": "electrical"
          },
          "Rs": {
            "type": "number",
            "default": 0.01,
            "description": "Forward series resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.0001 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.0001,
            "x-max": 100,
            "x-class": "electrical"
          },
          "Rz": {
            "type": "number",
            "default": 0.1,
            "description": "Dynamic Zener resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.001 to 5000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.001,
            "x-max": 5000,
            "x-class": "electrical"
          },
          "ifMax": {
            "type": "number",
            "default": 1,
            "description": "Maximum forward current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 5000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 5000,
            "x-class": "electrical"
          },
          "izMax": {
            "type": "number",
            "default": 1,
            "description": "Maximum Zener current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.00001 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.00001,
            "x-max": 100,
            "x-class": "electrical"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "vrrm": {
            "type": "number",
            "default": 100,
            "description": "Maximum repetitive reverse voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0.5,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0.001 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0.001,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 60,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 150,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "ivModel": {
            "type": "object",
            "description": "`ivModel`",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Ground": {
        "type": "object",
        "description": "Properties of a `Ground` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {},
        "additionalProperties": false
      },
      "OpAmp": {
        "type": "object",
        "description": "Properties of a `OpAmp` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "outputVoltage": {
            "type": "number",
            "default": 5,
            "description": "Operating output voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.1 to 500 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.1,
            "x-max": 500,
            "x-class": "electrical"
          },
          "iq": {
            "type": "number",
            "default": 0.002,
            "description": "Quiescent current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 1e-9 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 1e-9,
            "x-max": 1,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum supply voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 500 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 500,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 100,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 80,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 150,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "vinMin": {
            "type": "number",
            "description": "Minimum supply voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.1 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.1,
            "x-max": 200,
            "x-class": "electrical"
          },
          "bandwidth": {
            "type": "number",
            "description": "Bandwidth (Hz) — metadata-only, not mapped to canvas Unit: Hz (hertz), no SI prefix, as a JSON number. Plausible range 1 to 100000000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Hz",
            "x-min": 1,
            "x-max": 100000000000,
            "x-class": "electrical"
          },
          "supplyType": {
            "type": "string",
            "description": "Supply type (e.g. single, dual) — metadata-only, not mapped to canvas",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "OffPage": {
        "type": "object",
        "description": "Properties of a `OffPage` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "label": {
            "type": "string",
            "default": "To Page X",
            "description": "`label` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "direction": {
            "type": "string",
            "enum": [
              "in",
              "out"
            ],
            "default": "out",
            "description": "`direction` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "rotation": {
            "type": "number",
            "default": 0,
            "description": "`rotation` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          }
        },
        "additionalProperties": false
      },
      "TextBox": {
        "type": "object",
        "description": "Properties of a `TextBox` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "text": {
            "type": "string",
            "default": "Text",
            "description": "`text` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "fontSize": {
            "type": "number",
            "default": 12,
            "description": "`fontSize` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "fontColor": {
            "type": "string",
            "default": "",
            "description": "`fontColor` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "backgroundColor": {
            "type": "string",
            "default": "",
            "description": "`backgroundColor` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "borderColor": {
            "type": "string",
            "default": "",
            "description": "`borderColor` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "showBorder": {
            "type": "boolean",
            "default": true,
            "description": "`showBorder` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          }
        },
        "additionalProperties": false
      },
      "ACSource": {
        "type": "object",
        "description": "Properties of a `ACSource` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "voltage": {
            "type": "number",
            "default": 120,
            "description": "RMS voltage line-to-neutral (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 1000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 1000000,
            "x-class": "electrical"
          },
          "frequency": {
            "type": "number",
            "default": 60,
            "description": "AC frequency (Hz) Unit: Hz (hertz), no SI prefix, as a JSON number. Plausible range 1 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Hz",
            "x-min": 1,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "phase": {
            "type": "number",
            "default": 0,
            "description": "`phase` Unit: ° (degrees (phase angle)), no SI prefix, as a JSON number. Plausible range -360 to 360 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°",
            "x-min": -360,
            "x-max": 360,
            "x-class": "electrical"
          },
          "portEdge": {
            "type": "string",
            "enum": [
              "left",
              "right",
              "top",
              "bottom"
            ],
            "default": "right",
            "description": "`portEdge` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "thetaJA": {
            "type": "number",
            "default": 15,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 130,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          }
        },
        "additionalProperties": false
      },
      "Capacitor": {
        "type": "object",
        "description": "Properties of a `Capacitor` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "capacitance": {
            "type": "number",
            "default": 0.000001,
            "description": "Capacitance (F) Unit: F (farads), no SI prefix, as a JSON number. Plausible range 1e-13 to 2 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "F",
            "x-min": 1e-13,
            "x-max": 2,
            "x-class": "electrical"
          },
          "esr": {
            "type": "number",
            "default": 0.01,
            "description": "Equivalent series resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "connectionMode": {
            "type": "string",
            "enum": [
              "series",
              "shunt"
            ],
            "default": "series",
            "description": "`connectionMode` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "voltageRating": {
            "type": "number",
            "default": 50,
            "description": "Maximum voltage rating (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "rippleCurrentMax": {
            "type": "number",
            "default": 1,
            "description": "Maximum ripple current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.0001 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.0001,
            "x-max": 200,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 20,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 105,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "tolerance": {
            "type": "number",
            "description": "Capacitance tolerance (%) — metadata-only, not mapped to canvas Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 0.1 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 0.1,
            "x-max": 100,
            "x-class": "electrical"
          },
          "tempCoefficient": {
            "type": "string",
            "description": "Temperature coefficient (e.g. X7R, C0G) — metadata-only, not mapped to canvas",
            "x-class": "electrical"
          },
          "dielectric": {
            "type": "string",
            "description": "Dielectric type or temperature characteristic (e.g. X7R, C0G, Aluminum Electrolytic, Film) — metadata-only, not mapped to canvas",
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Transformer": {
        "type": "object",
        "description": "Properties of a `Transformer` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "simplified",
              "advanced"
            ],
            "default": "simplified",
            "description": "`mode` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "turnsRatio": {
            "type": "number",
            "default": 10,
            "description": "Turns ratio (Npri:Nsec) Plausible range 0.01 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.01,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "efficiency": {
            "type": "number",
            "default": 0.91,
            "description": "Power conversion efficiency (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.3 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.3,
            "x-max": 1,
            "x-class": "electrical"
          },
          "vaRating": {
            "type": "number",
            "default": 500,
            "description": "VA rating (VA) Unit: VA (volt-amperes), no SI prefix, as a JSON number. Plausible range 0.1 to 10000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "VA",
            "x-min": 0.1,
            "x-max": 10000000,
            "x-class": "electrical"
          },
          "designFrequency": {
            "type": "number",
            "default": 60,
            "description": "Rated / nameplate frequency (Hz) Unit: Hz (hertz), no SI prefix, as a JSON number. Plausible range 10 to 20000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Hz",
            "x-min": 10,
            "x-max": 20000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "windingType": {
            "type": "string",
            "enum": [
              "wye-wye",
              "delta-wye",
              "delta-delta"
            ],
            "default": "wye-wye",
            "description": "`windingType` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "L1": {
            "type": "number",
            "default": 0.1,
            "description": "`L1` Unit: H (henries), no SI prefix, as a JSON number. Plausible range 1e-9 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "H",
            "x-min": 1e-9,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "L2": {
            "type": "number",
            "default": 0.1,
            "description": "`L2` Unit: H (henries), no SI prefix, as a JSON number. Plausible range 1e-9 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "H",
            "x-min": 1e-9,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "k": {
            "type": "number",
            "default": 0.99,
            "description": "`k` Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.1 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.1,
            "x-max": 1,
            "x-class": "electrical"
          },
          "rPri": {
            "type": "number",
            "default": 0.1,
            "description": "Primary winding resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "rSec": {
            "type": "number",
            "default": 0.1,
            "description": "Secondary winding resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.00001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.00001,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "rCore": {
            "type": "number",
            "default": 1000,
            "description": "`rCore` Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 1 to 10000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 1,
            "x-max": 10000000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 1.3,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 130,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Rectifier": {
        "type": "object",
        "description": "Properties of a `Rectifier` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "rectifierType": {
            "type": "string",
            "enum": [
              "bridge",
              "half",
              "full"
            ],
            "default": "bridge",
            "description": "Rectifier configuration (bridge, half, full)",
            "x-class": "electrical"
          },
          "vDrop": {
            "type": "number",
            "default": 0.7,
            "description": "Diode forward voltage drop Vf (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.05 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.05,
            "x-max": 5,
            "x-class": "electrical"
          },
          "iMax": {
            "type": "number",
            "default": 10,
            "description": "Maximum output current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.01 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.01,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of input phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "vrrm": {
            "type": "number",
            "default": 400,
            "description": "Maximum repetitive reverse voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 5 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 5,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 5,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 150,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "trr": {
            "type": "number",
            "description": "Reverse recovery time (s) — metadata-only, not mapped to canvas Unit: s (seconds), no SI prefix, as a JSON number. Plausible range 1e-12 to 0.001 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "s",
            "x-min": 1e-12,
            "x-max": 0.001,
            "x-class": "electrical"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "Inverter": {
        "type": "object",
        "description": "Properties of a `Inverter` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "outputVoltage": {
            "type": "number",
            "default": 120,
            "description": "AC output RMS voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 10 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 10,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "outputFrequency": {
            "type": "number",
            "default": 60,
            "description": "AC output frequency (Hz) Unit: Hz (hertz), no SI prefix, as a JSON number. Plausible range 10 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Hz",
            "x-min": 10,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "efficiency": {
            "type": "number",
            "default": 0.92,
            "description": "Power conversion efficiency (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.3 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.3,
            "x-max": 1,
            "x-class": "electrical"
          },
          "vaRating": {
            "type": "number",
            "default": 1000,
            "description": "Maximum apparent power rating (VA) Unit: VA (volt-amperes), no SI prefix, as a JSON number. Plausible range 1 to 10000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "VA",
            "x-min": 1,
            "x-max": 10000000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of output phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum DC input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 1,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "PFC": {
        "type": "object",
        "description": "Properties of a `PFC` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "targetPF": {
            "type": "number",
            "default": 0.99,
            "description": "Target power factor (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.5 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.5,
            "x-max": 1,
            "x-class": "electrical"
          },
          "efficiency": {
            "type": "number",
            "default": 0.97,
            "description": "Efficiency of PFC stage (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.5 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.5,
            "x-max": 1,
            "x-class": "electrical"
          },
          "rOn": {
            "type": "number",
            "default": 0.01,
            "description": "MOSFET on-resistance Rds(on) (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.0001 to 10 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.0001,
            "x-max": 10,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 2000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 2000,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 5,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "ACLoad": {
        "type": "object",
        "description": "Properties of a `ACLoad` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "impedanceMode": {
            "type": "string",
            "enum": [
              "power",
              "rlc"
            ],
            "default": "power",
            "description": "Impedance representation mode (power, rlc)",
            "x-class": "electrical"
          },
          "realPower": {
            "type": "number",
            "default": 100,
            "description": "Active power consumption (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0.01 to 10000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0.01,
            "x-max": 10000000,
            "x-class": "electrical"
          },
          "powerFactor": {
            "type": "number",
            "default": 1,
            "description": "Power factor (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.01 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.01,
            "x-max": 1,
            "x-class": "electrical"
          },
          "nominalVoltage": {
            "type": "number",
            "default": 120,
            "description": "Nominal operating voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 1000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 1000000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 1,
            "description": "Number of phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "loadType": {
            "type": "string",
            "enum": [
              "resistive",
              "inductive",
              "capacitive"
            ],
            "default": "resistive",
            "description": "Load characteristics (resistive, inductive, capacitive)",
            "x-class": "electrical"
          },
          "perPhaseLoading": {
            "type": "boolean",
            "default": false,
            "description": "`perPhaseLoading` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "perPhasePower": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "default": [
              100,
              100,
              100
            ],
            "description": "`perPhasePower` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "perPhasePF": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "default": [
              1,
              1,
              1
            ],
            "description": "`perPhasePF` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "resistance": {
            "type": "number",
            "default": 100,
            "description": "Series resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0 to 1000000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0,
            "x-max": 1000000000,
            "x-class": "electrical"
          },
          "inductance": {
            "type": "number",
            "default": 0,
            "description": "Series inductance (H) Unit: H (henries), no SI prefix, as a JSON number. Plausible range 0 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "H",
            "x-min": 0,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "capacitance": {
            "type": "number",
            "default": 0,
            "description": "Series capacitance (F) Unit: F (farads), no SI prefix, as a JSON number. Plausible range 0 to 10 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "F",
            "x-min": 0,
            "x-max": 10,
            "x-class": "electrical"
          },
          "portEdge": {
            "type": "string",
            "enum": [
              "left",
              "right",
              "top",
              "bottom"
            ],
            "default": "left",
            "description": "`portEdge` Per-design instance state; never taken from a part.",
            "x-class": "instance"
          },
          "thetaJA": {
            "type": "number",
            "default": 0,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          }
        },
        "additionalProperties": false
      },
      "Motor": {
        "type": "object",
        "description": "Properties of a `Motor` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "ratedPower": {
            "type": "number",
            "default": 746,
            "description": "Rated output mechanical power (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0.1 to 10000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0.1,
            "x-max": 10000000,
            "x-class": "electrical"
          },
          "efficiency": {
            "type": "number",
            "default": 0.85,
            "description": "Motor electrical efficiency (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.1 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.1,
            "x-max": 1,
            "x-class": "electrical"
          },
          "powerFactor": {
            "type": "number",
            "default": 0.8,
            "description": "Motor power factor at rated load (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.05 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.05,
            "x-max": 1,
            "x-class": "electrical"
          },
          "nominalVoltage": {
            "type": "number",
            "default": 120,
            "description": "Nominal RMS operating voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 1,
            "x-max": 100000,
            "x-class": "electrical"
          },
          "phases": {
            "type": "integer",
            "default": 3,
            "description": "Number of phases (1 or 3) Plausible range 1 to 3 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 1,
            "x-max": 3,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 0.4,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 130,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "ChargePump": {
        "type": "object",
        "description": "Properties of a `ChargePump` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "inverting",
              "doubling",
              "tripling"
            ],
            "default": "doubling",
            "description": "Charge pump mode (inverting, doubling, tripling)",
            "x-class": "electrical"
          },
          "efficiency": {
            "type": "number",
            "default": 0.85,
            "description": "Power conversion efficiency (0.0–1.0) Dimensionless ratio, 0 to 1 (not a percentage). Plausible range 0.2 to 1 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0.2,
            "x-max": 1,
            "x-class": "electrical"
          },
          "rOut": {
            "type": "number",
            "default": 5,
            "description": "Output resistance (Ω) Unit: Ω (ohms), no SI prefix, as a JSON number. Plausible range 0.01 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "Ω",
            "x-min": 0.01,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "iMax": {
            "type": "number",
            "default": 0.3,
            "description": "Maximum output current (A) Unit: A (amperes), no SI prefix, as a JSON number. Plausible range 0.00001 to 5 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "A",
            "x-min": 0.00001,
            "x-max": 5,
            "x-class": "electrical"
          },
          "vinMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum input voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 100,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 50 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 50,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 70,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 125,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false
      },
      "RFAmplifier": {
        "type": "object",
        "description": "Properties of a `RFAmplifier` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {
          "rfPowerIn": {
            "type": "number",
            "default": 0.001,
            "description": "RF input power (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 1e-12 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 1e-12,
            "x-max": 1000,
            "x-class": "electrical"
          },
          "rfPowerOut": {
            "type": "number",
            "default": 1,
            "description": "RF output power (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 1e-9 to 1000000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 1e-9,
            "x-max": 1000000,
            "x-class": "electrical"
          },
          "pae": {
            "type": "number",
            "default": 35,
            "description": "Power Added Efficiency (%) Unit: % (percent, 0 to 100), no SI prefix, as a JSON number. Plausible range 0.1 to 100 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "%",
            "x-min": 0.1,
            "x-max": 100,
            "x-class": "electrical"
          },
          "biasVoltage": {
            "type": "number",
            "default": 3.3,
            "description": "DC bias operating voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0.1 to 200 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0.1,
            "x-max": 200,
            "x-class": "electrical"
          },
          "numBiasInputs": {
            "type": "integer",
            "default": 0,
            "description": "Number of auxiliary bias inputs Plausible range 0 to 8 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-min": 0,
            "x-max": 8,
            "x-class": "electrical"
          },
          "vMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum supply voltage (V) Unit: V (volts), no SI prefix, as a JSON number. Plausible range 0 to 500 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "V",
            "x-min": 0,
            "x-max": 500,
            "x-class": "electrical"
          },
          "pdMax": {
            "type": "number",
            "default": 0,
            "description": "Maximum power dissipation (W) Unit: W (watts), no SI prefix, as a JSON number. Plausible range 0 to 10000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "W",
            "x-min": 0,
            "x-max": 10000,
            "x-class": "electrical"
          },
          "thetaJA": {
            "type": "number",
            "default": 30,
            "description": "Thermal resistance junction-to-AMBIENT in still air (°C/W) — NOT junction-to-case Unit: °C/W (degrees Celsius per watt (thermal resistance, junction to ambient)), no SI prefix, as a JSON number. Plausible range 0.1 to 1000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C/W",
            "x-min": 0.1,
            "x-max": 1000,
            "x-class": "thermal"
          },
          "tMax": {
            "type": "number",
            "default": 150,
            "description": "Maximum operating junction temperature (°C) Unit: °C (degrees Celsius), no SI prefix, as a JSON number. Plausible range 40 to 300 — informational: the parts registry drops part data outside it; the solver does not reject a design for it.",
            "x-unit": "°C",
            "x-min": 40,
            "x-max": 300,
            "x-class": "thermal"
          },
          "package": {
            "type": "string",
            "description": "Package type string (e.g. SOT-23, SOIC-8) Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "boardArea_mm2": {
            "type": "number",
            "description": "`boardArea_mm2` Unit: mm² (square millimetres), no SI prefix, as a JSON number. Plausible range 0.1 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "mm²",
            "x-min": 0.1,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "weight_g": {
            "type": "number",
            "description": "`weight_g` Unit: g (grams), no SI prefix, as a JSON number. Plausible range 0.001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "g",
            "x-min": 0.001,
            "x-max": 100000,
            "x-class": "packaging"
          },
          "grade": {
            "type": "string",
            "enum": [
              "Commercial",
              "Industrial",
              "Automotive",
              "Military",
              "Space"
            ],
            "description": "\"Commercial\", \"Industrial\", \"Automotive\", \"Military\", or \"Space\" Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "packaging"
          },
          "priceQty1": {
            "type": "number",
            "description": "`priceQty1` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "priceQty1k": {
            "type": "number",
            "description": "`priceQty1k` Unit: USD (US dollars), no SI prefix, as a JSON number. Plausible range 0.0001 to 100000 — informational: the parts registry drops part data outside it; the solver does not reject a design for it. Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-unit": "USD",
            "x-min": 0.0001,
            "x-max": 100000,
            "x-class": "commercial"
          },
          "availability": {
            "type": "string",
            "description": "`availability` Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "distributorUrl": {
            "type": "string",
            "description": "Distributor URL if mentioned Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          },
          "notes": {
            "type": "string",
            "description": "Brief notes about the part Part-record data copied onto the node when a part is applied; not read by the solver.",
            "x-class": "commercial"
          }
        },
        "additionalProperties": false,
        "patternProperties": {
          "^biasLabel_\\d+$": {
            "type": "string",
            "description": "Per-port label (instance state).",
            "x-class": "instance"
          },
          "^biasCurrent_\\d+$": {
            "type": "number",
            "description": "Per-port current in amperes (instance state).",
            "x-unit": "A",
            "x-class": "instance"
          }
        }
      },
      "Junction": {
        "type": "object",
        "description": "Properties of a `Junction` node. Every key is optional — a missing key takes the registry default shown. Unknown keys are rejected.",
        "properties": {},
        "additionalProperties": false
      }
    }
  }
}
