{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.calculatorx.com/schemas/math.percent_change.agent.input.json",
  "title": "Percentage change — agent input",
  "oneOf": [
    {
      "title": "p",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "solve_for": {
          "const": "p"
        },
        "v1": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "v2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "p": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ],
          "x-unit": "%",
          "x-unit-id": "cx:percent",
          "x-quantity-kind": "ratio",
          "x-role": "scalar",
          "x-dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "x-uuce-unit": {
            "unit_id": "cx:percent",
            "revision": "1.0.0",
            "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
            "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
            "quantity_kind": "ratio",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        }
      },
      "required": [
        "solve_for",
        "v1",
        "v2"
      ]
    },
    {
      "title": "v1",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "solve_for": {
          "const": "v1"
        },
        "v1": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "v2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "p": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ],
          "x-unit": "%",
          "x-unit-id": "cx:percent",
          "x-quantity-kind": "ratio",
          "x-role": "scalar",
          "x-dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "x-uuce-unit": {
            "unit_id": "cx:percent",
            "revision": "1.0.0",
            "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
            "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
            "quantity_kind": "ratio",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        }
      },
      "required": [
        "solve_for",
        "v2",
        "p"
      ]
    },
    {
      "title": "v2",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "solve_for": {
          "const": "v2"
        },
        "v1": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "v2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ]
        },
        "p": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            }
          ],
          "x-unit": "%",
          "x-unit-id": "cx:percent",
          "x-quantity-kind": "ratio",
          "x-role": "scalar",
          "x-dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "x-uuce-unit": {
            "unit_id": "cx:percent",
            "revision": "1.0.0",
            "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
            "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
            "quantity_kind": "ratio",
            "dimension": [
              0,
              0,
              0,
              0,
              0,
              0,
              0
            ],
            "registry_version": "0.3.0-preview.3",
            "digest_contract": "calculatorx-unit-definition-digests-v2",
            "registry_status": "preview",
            "definition_lifecycle": "candidate",
            "role": "scalar"
          }
        }
      },
      "required": [
        "solve_for",
        "v1",
        "p"
      ]
    }
  ],
  "description": "Signed percent change (V₂ − V₁)/|V₁|×100% with reverse solve for V₁ or V₂.. Mode-discriminated agent contract. Named fields are canonical; a/b are legacy share-URL aliases. (calculation_version 1.2.0)",
  "x-unit-contract": {
    "protocol": "calculatorx-field-unit-contract-v1",
    "capability_id": "math.percent_change",
    "registry_version": "0.3.0-preview.3",
    "declaration_scope": "Field/branch declarations only; inactive fields are not asserted to exist. No conversion-engine migration or new numerical certification.",
    "path_format": "Paths relative to inputs or result_detail.value; dot separates properties, * denotes array items, $ denotes a scalar result.",
    "inputs": {
      "p": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "pInput": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "P": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "percent": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "pct": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      }
    },
    "outputs": {
      "p": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "percent_change": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "entered_percent_change": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "percent_of_initial": {
        "unit": "%",
        "reference": {
          "unit_id": "cx:percent",
          "revision": "1.0.0",
          "content_digest": "f73c887f011a6f997b183701a1b03417b3c89a863747910a54ae79c6a6b9f963",
          "dependency_digest": "58d9bc109880e0c8ea6d45264fbba933f64a17cf17586d2a8dbbf7cbea14566d",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "signed_factor": {
        "unit": "1",
        "reference": {
          "unit_id": "cx:one",
          "revision": "1.0.0",
          "content_digest": "98cc3ffc58d8733c483b60c4d7e238fe8ad43a6aadcced9496b74f33a01ef599",
          "dependency_digest": "b1c9aa4d586949ee881925298442091ba11dda29f57de0867e43da1cd59e06e5",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      },
      "multiplier": {
        "unit": "1",
        "reference": {
          "unit_id": "cx:one",
          "revision": "1.0.0",
          "content_digest": "98cc3ffc58d8733c483b60c4d7e238fe8ad43a6aadcced9496b74f33a01ef599",
          "dependency_digest": "b1c9aa4d586949ee881925298442091ba11dda29f57de0867e43da1cd59e06e5",
          "quantity_kind": "ratio",
          "dimension": [
            0,
            0,
            0,
            0,
            0,
            0,
            0
          ],
          "registry_version": "0.3.0-preview.3",
          "digest_contract": "calculatorx-unit-definition-digests-v2",
          "registry_status": "preview",
          "definition_lifecycle": "candidate",
          "role": "scalar"
        }
      }
    },
    "scalar_result_policy": "value/candidates/solutions are percentages only when solving p; solving v1/v2 returns amounts in their existing arbitrary unit."
  }
}
