{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.calculatorx.com/schemas/math.exponential_growth.agent.input.json",
  "title": "Exponential growth / decay — agent input",
  "type": "object",
  "properties": {
    "x0": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "x0Input": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "ratePct": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ],
      "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"
      }
    },
    "rateInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ],
      "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"
      }
    },
    "r": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ],
      "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"
      }
    },
    "rate": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ],
      "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"
      }
    },
    "t": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "tInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "xt": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "xtInput": {
      "oneOf": [
        {
          "type": "number"
        },
        {
          "type": "string",
          "maxLength": 512,
          "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
        },
        {
          "type": "null"
        },
        {
          "const": ""
        }
      ]
    },
    "model": {
      "enum": [
        "periodic",
        "continuous",
        "exp",
        "e^kt"
      ]
    }
  },
  "minProperties": 3,
  "anyOf": [
    {
      "allOf": [
        {
          "anyOf": [
            {
              "required": [
                "ratePct"
              ]
            },
            {
              "required": [
                "rateInput"
              ]
            },
            {
              "required": [
                "r"
              ]
            },
            {
              "required": [
                "rate"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "t"
              ]
            },
            {
              "required": [
                "tInput"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "xt"
              ]
            },
            {
              "required": [
                "xtInput"
              ]
            }
          ]
        }
      ]
    },
    {
      "allOf": [
        {
          "anyOf": [
            {
              "required": [
                "x0"
              ]
            },
            {
              "required": [
                "x0Input"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "t"
              ]
            },
            {
              "required": [
                "tInput"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "xt"
              ]
            },
            {
              "required": [
                "xtInput"
              ]
            }
          ]
        }
      ]
    },
    {
      "allOf": [
        {
          "anyOf": [
            {
              "required": [
                "x0"
              ]
            },
            {
              "required": [
                "x0Input"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "ratePct"
              ]
            },
            {
              "required": [
                "rateInput"
              ]
            },
            {
              "required": [
                "r"
              ]
            },
            {
              "required": [
                "rate"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "xt"
              ]
            },
            {
              "required": [
                "xtInput"
              ]
            }
          ]
        }
      ]
    },
    {
      "allOf": [
        {
          "anyOf": [
            {
              "required": [
                "x0"
              ]
            },
            {
              "required": [
                "x0Input"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "ratePct"
              ]
            },
            {
              "required": [
                "rateInput"
              ]
            },
            {
              "required": [
                "r"
              ]
            },
            {
              "required": [
                "rate"
              ]
            }
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "t"
              ]
            },
            {
              "required": [
                "tInput"
              ]
            }
          ]
        }
      ]
    }
  ],
  "oneOf": [
    {
      "title": "verify",
      "required": [
        "x0",
        "ratePct",
        "t",
        "xt"
      ],
      "properties": {
        "xt": {
          "oneOf": [
            {
              "type": "number"
            },
            {
              "type": "string",
              "maxLength": 512,
              "pattern": "^\\s*[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?\\s*$"
            },
            {
              "type": "null"
            },
            {
              "const": ""
            }
          ]
        }
      }
    },
    {
      "not": {
        "required": [
          "x0",
          "ratePct",
          "t",
          "xt"
        ]
      }
    }
  ],
  "additionalProperties": false,
  "description": "Periodic x₀(1+r/100)^t or continuous x₀e^(kt) growth and decay. Any three of x₀, r/k, t, x(t) solve the fourth; all four verify displayed-precision consistency.. Mode-discriminated agent contract. Named fields are canonical; a/b are legacy share-URL aliases. (calculation_version 1.1.0)",
  "x-unit-contract": {
    "protocol": "calculatorx-field-unit-contract-v1",
    "capability_id": "math.exponential_growth",
    "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": {
      "ratePct": {
        "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"
        }
      },
      "rateInput": {
        "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"
        }
      },
      "rate": {
        "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"
        }
      },
      "r": {
        "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": {
      "relative_error_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"
        }
      }
    },
    "scalar_result_policy": "Rate-solving result is percent per selected period; time-solving result is a number of matching periods; amount-solving results inherit the amount unit. No unconditional scalar-result unit.",
    "period_policy": "t/tInput is measured in periods matching the supplied rate; do not bind it to SI seconds or calendar years."
  }
}
