{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://hesapla.narch.tech/arac/zam-hesaplama/zam-hesaplama-input.schema.json",
  "title": "Zam hesaplama girdisi",
  "description": "zamHesapla için agent girdisi. Tutar ve oran metinleri çekirdekte desteklense de bu makine sözleşmesi JSON number ister.",
  "oneOf": [
    { "$ref": "#/$defs/zamliBulInput" },
    { "$ref": "#/$defs/oranBulInput" },
    { "$ref": "#/$defs/zamsizBulInput" },
    { "$ref": "#/$defs/ardisikListeInput" },
    { "$ref": "#/$defs/esitOranInput" },
    { "$ref": "#/$defs/reelInput" }
  ],
  "$defs": {
    "money": {
      "type": "number",
      "minimum": 0,
      "maximum": 90071992547409.91,
      "multipleOf": 0.01,
      "unit": "TL veya birimsiz"
    },
    "rate": {
      "type": "number",
      "minimum": -100,
      "unit": "%"
    },
    "rounding": {
      "type": "string",
      "enum": ["kurus", "tam_tl"],
      "description": "Yalnız sunum tercihi; hesap her zaman tam kuruş yürür."
    },
    "zamliBulInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "eski_tutar", "oran", "yuvarlama"],
      "properties": {
        "mod": { "const": "zamli_bul" },
        "eski_tutar": { "$ref": "#/$defs/money" },
        "oran": { "$ref": "#/$defs/rate" },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    },
    "oranBulInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "eski_tutar", "yeni_tutar", "yuvarlama"],
      "properties": {
        "mod": { "const": "oran_bul" },
        "eski_tutar": {
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 90071992547409.91,
          "multipleOf": 0.01,
          "unit": "TL veya birimsiz"
        },
        "yeni_tutar": { "$ref": "#/$defs/money" },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    },
    "zamsizBulInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "yeni_tutar", "oran", "yuvarlama"],
      "properties": {
        "mod": { "const": "zamsiz_bul" },
        "yeni_tutar": { "$ref": "#/$defs/money" },
        "oran": {
          "type": "number",
          "exclusiveMinimum": -100,
          "unit": "%"
        },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    },
    "ardisikListeInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "ardisik_islem", "eski_tutar", "oranlar", "yuvarlama"],
      "properties": {
        "mod": { "const": "ardisik" },
        "ardisik_islem": { "const": "liste" },
        "eski_tutar": { "$ref": "#/$defs/money" },
        "oranlar": {
          "type": "array",
          "minItems": 1,
          "items": { "$ref": "#/$defs/rate" },
          "unit": "%"
        },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    },
    "esitOranInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "ardisik_islem", "hedef_toplam_oran", "donem_sayisi", "yuvarlama"],
      "properties": {
        "mod": { "const": "ardisik" },
        "ardisik_islem": { "const": "esit_oran_bul" },
        "hedef_toplam_oran": { "$ref": "#/$defs/rate" },
        "donem_sayisi": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "unit": "adet"
        },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    },
    "reelInput": {
      "type": "object",
      "additionalProperties": false,
      "required": ["mod", "eski_tutar", "oran", "enflasyon", "yuvarlama"],
      "properties": {
        "mod": { "const": "reel" },
        "eski_tutar": { "$ref": "#/$defs/money" },
        "oran": { "$ref": "#/$defs/rate" },
        "enflasyon": {
          "type": "number",
          "exclusiveMinimum": -100,
          "unit": "%"
        },
        "yuvarlama": { "$ref": "#/$defs/rounding" }
      }
    }
  }
}
