{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "ad": "NotOrtalama",
  "surum": "2.0.0-cila1",
  "aciklama": "Kredi ağırlıklı GNO, tarihsel DNO/AGNO, ham 100'lük ortalama, açık tekrar kimliği, kurum eşikleri, hedef simülasyonu ve YÖK PDF anahtar dönüşümü için kapalı agent sözleşmesi.",
  "sozlesmeler": {
    "girdi": {
      "type": "object",
      "x-birim": "hesap-istegi",
      "x-zorunlu": true,
      "default": {},
      "additionalProperties": false,
      "required": [],
      "properties": {
        "dersler": {
          "type": "array",
          "x-birim": "ders-satiri",
          "x-zorunlu": false,
          "default": [],
          "description": "GNO hesabı satırları; saf dönüşüm çağrısında kullanılmaz.",
          "items": {
            "type": "object",
            "x-birim": "ders-satiri",
            "x-zorunlu": false,
            "default": {
              "ad": "",
              "dersKodu": null,
              "tekrarGrubu": null,
              "kredi": null,
              "yerelKredi": null,
              "akts": null,
              "not": "",
              "notTuru": null,
              "donem": "",
              "durum": "normal"
            },
            "additionalProperties": false,
            "required": [
              "not"
            ],
            "properties": {
              "ad": {
                "type": "string",
                "x-birim": "ders-adi",
                "x-zorunlu": false,
                "default": "",
                "description": "Görünen ders adı; tek başına tekrar kanıtı değildir."
              },
              "dersKodu": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "kurum-ders-kodu",
                "x-zorunlu": false,
                "default": null,
                "description": "Aynı açık ders kodu tekrar bağı kurabilir."
              },
              "tekrarGrubu": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "esdegerlik-grubu",
                "x-zorunlu": false,
                "default": null,
                "description": "Farklı kodlu eşdeğer dersleri aynı açık tekrar grubuna bağlar; dersKodundan önceliklidir."
              },
              "kredi": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "secilen-kredi",
                "x-zorunlu": false,
                "default": null,
                "minimum": 0,
                "description": "Normal derste sıfırdan büyük; S/U gibi ortalama dışı kredisiz derste sıfır olabilir."
              },
              "yerelKredi": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "yerel-kredi",
                "x-zorunlu": false,
                "default": null,
                "minimum": 0
              },
              "akts": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "AKTS",
                "x-zorunlu": false,
                "default": null,
                "minimum": 0
              },
              "not": {
                "type": [
                  "string",
                  "number"
                ],
                "x-birim": "not-degeri",
                "x-zorunlu": true,
                "default": "",
                "description": "Harf, 0–4 katsayı veya 0–100 puan."
              },
              "notTuru": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "not-olcegi",
                "x-zorunlu": false,
                "default": null,
                "enum": [
                  "harf",
                  "dortluk",
                  "yuzluk",
                  null
                ]
              },
              "donem": {
                "type": "string",
                "x-birim": "akademik-donem",
                "x-zorunlu": false,
                "default": ""
              },
              "durum": {
                "type": "string",
                "x-birim": "ders-durumu",
                "x-zorunlu": false,
                "default": "normal",
                "enum": [
                  "normal",
                  "muaf",
                  "ortalama-disi",
                  "tekrar-eski"
                ]
              }
            }
          }
        },
        "topluGiris": {
          "type": [
            "string",
            "null"
          ],
          "x-birim": "CSV-TSV-metni",
          "x-zorunlu": false,
          "default": null
        },
        "kredTuru": {
          "type": "string",
          "x-birim": "kredi-sistemi",
          "x-zorunlu": false,
          "default": "yerel",
          "enum": [
            "yerel",
            "AKTS"
          ],
          "description": "Saf dönüşüm çağrısında kullanılmaz."
        },
        "notTuru": {
          "type": "string",
          "x-birim": "not-olcegi",
          "x-zorunlu": false,
          "default": "harf",
          "enum": [
            "harf",
            "dortluk",
            "yuzluk"
          ],
          "description": "Saf dönüşüm çağrısında kullanılmaz."
        },
        "harfTablosu": {
          "type": "string",
          "x-birim": "harf-katsayi-tablosu",
          "x-zorunlu": false,
          "default": "varsayilan-4lu",
          "enum": [
            "varsayilan-4lu",
            "harf-artili",
            "ozel"
          ]
        },
        "ozelHarfTablosu": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "harf-katsayi-eslemesi",
          "x-zorunlu": false,
          "default": null,
          "propertyNames": {
            "pattern": "^[^\\s].*$"
          },
          "additionalProperties": {
            "type": "number",
            "x-birim": "4luk-katsayi",
            "x-zorunlu": false,
            "default": 0,
            "minimum": 0,
            "maximum": 4
          },
          "description": "Yalnız harfTablosu=ozel iken kullanılır."
        },
        "notSinifiPolitikasi": {
          "type": "string",
          "x-birim": "kurum-not-sinifi",
          "x-zorunlu": false,
          "default": "ieu-madde-21",
          "enum": [
            "ieu-madde-21",
            "odtu-madde-24"
          ]
        },
        "yuzlukKatsayiTablosu": {
          "type": [
            "string",
            "null"
          ],
          "x-birim": "kurum-yuzluk-harf-katsayi-esigi",
          "x-zorunlu": false,
          "default": null,
          "enum": [
            "ieu-madde-21",
            "ozel",
            null
          ],
          "description": "Yüzlük derslerden 4'lük GNO isteniyorsa kaynaklı eşik tablosu seçilmelidir; YÖK tablosu burada kullanılmaz."
        },
        "ozelYuzlukKatsayiTablosu": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "kurum-esik-tablosu",
          "x-zorunlu": false,
          "default": null,
          "additionalProperties": false,
          "required": [
            "ad",
            "kaynakUrl",
            "esikler"
          ],
          "properties": {
            "ad": {
              "type": "string",
              "x-birim": "tablo-adi",
              "x-zorunlu": true,
              "default": ""
            },
            "kaynakUrl": {
              "type": "string",
              "x-birim": "URL",
              "x-zorunlu": true,
              "default": ""
            },
            "esikler": {
              "type": "array",
              "x-birim": "puan-araligi",
              "x-zorunlu": true,
              "default": [],
              "items": {
                "type": "object",
                "x-birim": "esik-satiri",
                "x-zorunlu": true,
                "default": {
                  "min": 0,
                  "max": 0,
                  "harf": null,
                  "katsayi": 0
                },
                "additionalProperties": false,
                "required": [
                  "min",
                  "max",
                  "katsayi"
                ],
                "properties": {
                  "min": {
                    "type": "number",
                    "x-birim": "100luk-puan",
                    "x-zorunlu": true,
                    "default": 0,
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "x-birim": "100luk-puan",
                    "x-zorunlu": true,
                    "default": 0,
                    "minimum": 0,
                    "maximum": 100
                  },
                  "harf": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "x-birim": "harf-notu",
                    "x-zorunlu": false,
                    "default": null
                  },
                  "katsayi": {
                    "type": "number",
                    "x-birim": "4luk-katsayi",
                    "x-zorunlu": true,
                    "default": 0,
                    "minimum": 0,
                    "maximum": 4
                  }
                }
              }
            }
          }
        },
        "tekrarPolitikasi": {
          "type": "string",
          "x-birim": "tekrar-politikasi",
          "x-zorunlu": false,
          "default": "son-not",
          "enum": [
            "son-not",
            "en-yuksek",
            "hepsi-ortalamada"
          ]
        },
        "yuvarlama": {
          "type": "object",
          "x-birim": "gosterim-kurali",
          "x-zorunlu": false,
          "default": {
            "basamak": 2,
            "kural": "yariyi-yukari"
          },
          "additionalProperties": false,
          "required": [],
          "properties": {
            "basamak": {
              "type": "integer",
              "x-birim": "ondalik-basamak",
              "x-zorunlu": false,
              "default": 2,
              "minimum": 0,
              "maximum": 10
            },
            "kural": {
              "type": "string",
              "x-birim": "yuvarlama-yontemi",
              "x-zorunlu": false,
              "default": "yariyi-yukari",
              "enum": [
                "yariyi-yukari",
                "kes"
              ]
            }
          }
        },
        "donusum": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "YOK-tablo-istegi",
          "x-zorunlu": false,
          "default": null,
          "additionalProperties": false,
          "required": [
            "deger"
          ],
          "properties": {
            "deger": {
              "type": "number",
              "x-birim": "kaynak-olcek-degeri",
              "x-zorunlu": true,
              "default": 0,
              "minimum": 0,
              "maximum": 100
            },
            "yon": {
              "type": "string",
              "x-birim": "donusum-yonu",
              "x-zorunlu": false,
              "default": "4-100",
              "enum": [
                "4-100",
                "100-4"
              ]
            },
            "yontem": {
              "type": "string",
              "x-birim": "donusum-yontemi",
              "x-zorunlu": false,
              "default": "resmi-tam-anahtar",
              "enum": [
                "resmi-tam-anahtar",
                "matematiksel-tahmin"
              ]
            }
          }
        },
        "hedef": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "hedef-GNO-istegi",
          "x-zorunlu": false,
          "default": null,
          "additionalProperties": false,
          "required": [
            "kalanKredi",
            "hedefGno"
          ],
          "properties": {
            "kalanKredi": {
              "type": "number",
              "x-birim": "secilen-kredi",
              "x-zorunlu": true,
              "default": 0,
              "exclusiveMinimum": 0
            },
            "hedefGno": {
              "type": "number",
              "x-birim": "4luk-katsayi",
              "x-zorunlu": true,
              "default": 0,
              "minimum": 0,
              "maximum": 4
            }
          }
        }
      }
    },
    "cikti": {
      "type": "object",
      "x-birim": "hesap-sonucu",
      "x-zorunlu": true,
      "default": {},
      "additionalProperties": false,
      "required": [
        "hesapDurumu",
        "gno",
        "gnoHam",
        "donemler",
        "agno",
        "agnoSerisi",
        "yuzlukOrtalama",
        "toplamKredi",
        "ortalamayaKatilanKredi",
        "muafKredi",
        "ortalamaDisiKredi",
        "ortalamaDisiDersler",
        "donusum",
        "hedefSimulasyonu",
        "dersler",
        "hatalar",
        "gecersizSatirSayisi",
        "uyari",
        "uyarilar",
        "notlar",
        "hata"
      ],
      "properties": {
        "hesapDurumu": {
          "type": "string",
          "x-birim": "sonuc-durumu",
          "x-zorunlu": true,
          "default": "basarili",
          "enum": [
            "basarili",
            "eksik",
            "karsilastirilamaz",
            "hata"
          ]
        },
        "gno": {
          "type": [
            "number",
            "null"
          ],
          "x-birim": "4luk-katsayi",
          "x-zorunlu": true,
          "default": null,
          "minimum": 0,
          "maximum": 4
        },
        "gnoHam": {
          "type": [
            "number",
            "null"
          ],
          "x-birim": "4luk-katsayi-ham",
          "x-zorunlu": true,
          "default": null,
          "minimum": 0,
          "maximum": 4
        },
        "donemler": {
          "type": "array",
          "x-birim": "donem-sonucu",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "object",
            "x-birim": "DNO-AGNO-noktasi",
            "x-zorunlu": true,
            "default": {
              "donem": "",
              "dno": 0,
              "dnoHam": 0,
              "kredi": 0,
              "ders": 0,
              "agno": null,
              "agnoHam": null,
              "kumulatifKredi": 0
            },
            "additionalProperties": false,
            "required": [
              "donem",
              "dno",
              "dnoHam",
              "kredi",
              "ders",
              "agno",
              "agnoHam",
              "kumulatifKredi"
            ],
            "properties": {
              "donem": {
                "type": "string",
                "x-birim": "akademik-donem",
                "x-zorunlu": true,
                "default": ""
              },
              "dno": {
                "type": "number",
                "x-birim": "4luk-katsayi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0,
                "maximum": 4
              },
              "dnoHam": {
                "type": "number",
                "x-birim": "4luk-katsayi-ham",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0,
                "maximum": 4
              },
              "kredi": {
                "type": "number",
                "x-birim": "donem-kredisi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0
              },
              "ders": {
                "type": "integer",
                "x-birim": "ders-adedi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0
              },
              "agno": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "4luk-katsayi",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 4
              },
              "agnoHam": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "4luk-katsayi-ham",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 4
              },
              "kumulatifKredi": {
                "type": "number",
                "x-birim": "secili-kumulatif-kredi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0
              }
            }
          }
        },
        "agno": {
          "type": [
            "number",
            "null"
          ],
          "x-birim": "4luk-katsayi",
          "x-zorunlu": true,
          "default": null,
          "minimum": 0,
          "maximum": 4
        },
        "agnoSerisi": {
          "type": "array",
          "x-birim": "tarihsel-AGNO-noktasi",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "object",
            "x-birim": "AGNO-noktasi",
            "x-zorunlu": true,
            "default": {
              "donem": "",
              "agno": null,
              "agnoHam": null,
              "kredi": 0
            },
            "additionalProperties": false,
            "required": [
              "donem",
              "agno",
              "agnoHam",
              "kredi"
            ],
            "properties": {
              "donem": {
                "type": "string",
                "x-birim": "akademik-donem",
                "x-zorunlu": true,
                "default": ""
              },
              "agno": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "4luk-katsayi",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 4
              },
              "agnoHam": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "4luk-katsayi-ham",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 4
              },
              "kredi": {
                "type": "number",
                "x-birim": "secili-kumulatif-kredi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0
              }
            }
          }
        },
        "yuzlukOrtalama": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "100luk-ortalama-sonucu",
          "x-zorunlu": true,
          "default": null,
          "additionalProperties": false,
          "required": [
            "deger",
            "degerHam",
            "birim",
            "kredi"
          ],
          "properties": {
            "deger": {
              "type": "number",
              "x-birim": "100luk-puan",
              "x-zorunlu": true,
              "default": 0,
              "minimum": 0,
              "maximum": 100
            },
            "degerHam": {
              "type": "number",
              "x-birim": "100luk-puan-ham",
              "x-zorunlu": true,
              "default": 0,
              "minimum": 0,
              "maximum": 100
            },
            "birim": {
              "type": "string",
              "x-birim": "birim-etiketi",
              "x-zorunlu": true,
              "default": "100luk-puan",
              "enum": [
                "100luk-puan"
              ]
            },
            "kredi": {
              "type": "number",
              "x-birim": "yuzluk-ortalama-kredisi",
              "x-zorunlu": true,
              "default": 0,
              "minimum": 0
            }
          }
        },
        "toplamKredi": {
          "type": "number",
          "x-birim": "secilen-kredi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "ortalamayaKatilanKredi": {
          "type": "number",
          "x-birim": "GNO-payda-kredisi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "muafKredi": {
          "type": "number",
          "x-birim": "muaf-kredi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "ortalamaDisiKredi": {
          "type": "number",
          "x-birim": "muaf-olmayan-ortalama-disi-kredi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "ortalamaDisiDersler": {
          "type": "integer",
          "x-birim": "ders-adedi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "donusum": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "YOK-donusum-sonucu",
          "x-zorunlu": true,
          "default": null,
          "additionalProperties": false,
          "required": [
            "durum",
            "dortluk",
            "yuzluk",
            "yon",
            "yontem",
            "kaynak",
            "uyari",
            "enterpolasyon",
            "tahmin",
            "resmiYokKarsiligi",
            "hata"
          ],
          "properties": {
            "durum": {
              "type": "string",
              "x-birim": "donusum-durumu",
              "x-zorunlu": true,
              "default": "basarili",
              "enum": [
                "basarili",
                "yontem-gerekli",
                "hata"
              ]
            },
            "dortluk": {
              "type": [
                "number",
                "null"
              ],
              "x-birim": "4luk-not",
              "x-zorunlu": true,
              "default": null,
              "minimum": 0,
              "maximum": 4
            },
            "yuzluk": {
              "type": [
                "number",
                "null"
              ],
              "x-birim": "100luk-not",
              "x-zorunlu": true,
              "default": null,
              "minimum": 0,
              "maximum": 100
            },
            "yon": {
              "type": "string",
              "x-birim": "donusum-yonu",
              "x-zorunlu": true,
              "default": "4-100",
              "enum": [
                "4-100",
                "100-4"
              ]
            },
            "yontem": {
              "type": "string",
              "x-birim": "donusum-yontemi",
              "x-zorunlu": true,
              "default": "resmi-tam-anahtar",
              "enum": [
                "resmi-tam-anahtar",
                "matematiksel-tahmin"
              ]
            },
            "kaynak": {
              "type": "string",
              "x-birim": "URL-veya-veri-yolu",
              "x-zorunlu": true,
              "default": "veri/donusum-tablosu.json"
            },
            "uyari": {
              "type": [
                "string",
                "null"
              ],
              "x-birim": "uyari-metni",
              "x-zorunlu": true,
              "default": null
            },
            "enterpolasyon": {
              "type": "boolean",
              "x-birim": "mantiksal",
              "x-zorunlu": true,
              "default": false
            },
            "tahmin": {
              "type": "boolean",
              "x-birim": "mantiksal",
              "x-zorunlu": true,
              "default": false
            },
            "resmiYokKarsiligi": {
              "type": "boolean",
              "x-birim": "mantiksal",
              "x-zorunlu": true,
              "default": false
            },
            "hata": {
              "type": [
                "object",
                "null"
              ],
              "x-birim": "donusum-hatasi",
              "x-zorunlu": true,
              "default": null,
              "additionalProperties": false,
              "required": [
                "kod",
                "mesaj"
              ],
              "properties": {
                "kod": {
                  "type": "string",
                  "x-birim": "hata-kodu",
                  "x-zorunlu": true,
                  "default": "YONTEM_GEREKLI",
                  "enum": [
                    "PUAN_ARALIK_DISI",
                    "YONTEM_GEREKLI",
                    "YOK_TABLO_KAPSAMI_DISI"
                  ]
                },
                "mesaj": {
                  "type": "string",
                  "x-birim": "hata-mesaji",
                  "x-zorunlu": true,
                  "default": ""
                },
                "satir": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "x-birim": "bir-tabanli-satir",
                  "x-zorunlu": false,
                  "default": null,
                  "minimum": 1
                }
              }
            }
          }
        },
        "hedefSimulasyonu": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "hedef-GNO-sonucu",
          "x-zorunlu": true,
          "default": null,
          "additionalProperties": false,
          "required": [
            "mumkun",
            "gerekenKatsayi",
            "gerekenKatsayiHam",
            "mesaj"
          ],
          "properties": {
            "mumkun": {
              "type": "boolean",
              "x-birim": "mantiksal",
              "x-zorunlu": true,
              "default": false
            },
            "gerekenKatsayi": {
              "type": [
                "number",
                "null"
              ],
              "x-birim": "4luk-katsayi",
              "x-zorunlu": true,
              "default": null
            },
            "gerekenKatsayiHam": {
              "type": [
                "number",
                "null"
              ],
              "x-birim": "4luk-katsayi-ham",
              "x-zorunlu": true,
              "default": null
            },
            "mesaj": {
              "type": "string",
              "x-birim": "sonuc-mesaji",
              "x-zorunlu": true,
              "default": ""
            }
          }
        },
        "dersler": {
          "type": "array",
          "x-birim": "sonuc-dersi",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "object",
            "x-birim": "sonuc-dersi",
            "x-zorunlu": true,
            "default": {
              "satir": 1,
              "ad": "",
              "dersKodu": null,
              "tekrarGrubu": null,
              "tekrarKimligi": null,
              "donem": "",
              "kredi": 0,
              "krediBirimi": "yerel",
              "not": "",
              "notTuru": "harf",
              "katsayi": null,
              "yuzlukPuan": null,
              "kurumHarfi": null,
              "durum": "normal",
              "katilir": false,
              "dnoKatilir": false,
              "neden": null
            },
            "additionalProperties": false,
            "required": [
              "satir",
              "ad",
              "dersKodu",
              "tekrarGrubu",
              "tekrarKimligi",
              "donem",
              "kredi",
              "krediBirimi",
              "not",
              "notTuru",
              "katsayi",
              "yuzlukPuan",
              "kurumHarfi",
              "durum",
              "katilir",
              "dnoKatilir",
              "neden"
            ],
            "properties": {
              "satir": {
                "type": "integer",
                "x-birim": "bir-tabanli-satir",
                "x-zorunlu": true,
                "default": 1,
                "minimum": 1
              },
              "ad": {
                "type": "string",
                "x-birim": "ders-adi",
                "x-zorunlu": true,
                "default": ""
              },
              "dersKodu": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "kurum-ders-kodu",
                "x-zorunlu": true,
                "default": null
              },
              "tekrarGrubu": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "esdegerlik-grubu",
                "x-zorunlu": true,
                "default": null
              },
              "tekrarKimligi": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "yapilandirilmis-tekrar-kimligi",
                "x-zorunlu": true,
                "default": null
              },
              "donem": {
                "type": "string",
                "x-birim": "akademik-donem",
                "x-zorunlu": true,
                "default": ""
              },
              "kredi": {
                "type": "number",
                "x-birim": "secilen-kredi",
                "x-zorunlu": true,
                "default": 0,
                "minimum": 0
              },
              "krediBirimi": {
                "type": "string",
                "x-birim": "kredi-sistemi",
                "x-zorunlu": true,
                "default": "yerel",
                "enum": [
                  "yerel",
                  "AKTS"
                ]
              },
              "not": {
                "type": [
                  "string",
                  "number"
                ],
                "x-birim": "not-degeri",
                "x-zorunlu": true,
                "default": ""
              },
              "notTuru": {
                "type": "string",
                "x-birim": "not-olcegi",
                "x-zorunlu": true,
                "default": "harf",
                "enum": [
                  "harf",
                  "dortluk",
                  "yuzluk"
                ]
              },
              "katsayi": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "4luk-katsayi",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 4
              },
              "yuzlukPuan": {
                "type": [
                  "number",
                  "null"
                ],
                "x-birim": "100luk-puan",
                "x-zorunlu": true,
                "default": null,
                "minimum": 0,
                "maximum": 100
              },
              "kurumHarfi": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "harf-notu",
                "x-zorunlu": true,
                "default": null
              },
              "durum": {
                "type": "string",
                "x-birim": "sonuc-ders-durumu",
                "x-zorunlu": true,
                "default": "normal",
                "enum": [
                  "normal",
                  "muaf",
                  "ortalama-disi",
                  "tekrar-eski",
                  "islenemedi"
                ]
              },
              "katilir": {
                "type": "boolean",
                "x-birim": "nihai-GNO-katilimi",
                "x-zorunlu": true,
                "default": false
              },
              "dnoKatilir": {
                "type": "boolean",
                "x-birim": "DNO-katilimi",
                "x-zorunlu": true,
                "default": false
              },
              "neden": {
                "type": [
                  "string",
                  "null"
                ],
                "x-birim": "dislama-nedeni",
                "x-zorunlu": true,
                "default": null,
                "enum": [
                  "muaf",
                  "ortalama-disi",
                  "tekrar-eski",
                  "kullanici-tekrar-eski",
                  "islenemedi",
                  null
                ]
              }
            }
          }
        },
        "hatalar": {
          "type": "array",
          "x-birim": "satir-hatasi",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "object",
            "x-birim": "hata-nesnesi",
            "x-zorunlu": true,
            "default": {
              "kod": "HESAP_EKSIK",
              "mesaj": "",
              "satir": null
            },
            "additionalProperties": false,
            "required": [
              "kod",
              "mesaj"
            ],
            "properties": {
              "kod": {
                "type": "string",
                "x-birim": "hata-kodu",
                "x-zorunlu": true,
                "default": "HESAP_EKSIK",
                "enum": [
                  "KREDI_SIFIR_VEYA_NEGATIF",
                  "BILINMEYEN_HARF",
                  "PUAN_ARALIK_DISI",
                  "YONTEM_GEREKLI"
                ]
              },
              "mesaj": {
                "type": "string",
                "x-birim": "hata-mesaji",
                "x-zorunlu": true,
                "default": ""
              },
              "satir": {
                "type": [
                  "integer",
                  "null"
                ],
                "x-birim": "bir-tabanli-satir",
                "x-zorunlu": false,
                "default": null,
                "minimum": 1
              }
            }
          }
        },
        "gecersizSatirSayisi": {
          "type": "integer",
          "x-birim": "satir-adedi",
          "x-zorunlu": true,
          "default": 0,
          "minimum": 0
        },
        "uyari": {
          "type": [
            "string",
            "null"
          ],
          "x-birim": "uyari-metni",
          "x-zorunlu": true,
          "default": null
        },
        "uyarilar": {
          "type": "array",
          "x-birim": "yapilandirilmis-uyari",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "object",
            "x-birim": "uyari-nesnesi",
            "x-zorunlu": true,
            "default": {
              "kod": "HESAP_EKSIK",
              "mesaj": "",
              "satir": null
            },
            "additionalProperties": false,
            "required": [
              "kod",
              "mesaj"
            ],
            "properties": {
              "kod": {
                "type": "string",
                "x-birim": "uyari-kodu",
                "x-zorunlu": true,
                "default": "HESAP_EKSIK",
                "enum": [
                  "HESAP_EKSIK",
                  "YONTEM_GEREKLI"
                ]
              },
              "mesaj": {
                "type": "string",
                "x-birim": "uyari-mesaji",
                "x-zorunlu": true,
                "default": ""
              },
              "satir": {
                "type": [
                  "integer",
                  "null"
                ],
                "x-birim": "bir-tabanli-satir",
                "x-zorunlu": false,
                "default": null,
                "minimum": 1
              }
            }
          }
        },
        "notlar": {
          "type": "array",
          "x-birim": "politika-notu",
          "x-zorunlu": true,
          "default": [],
          "items": {
            "type": "string",
            "x-birim": "aciklama-metni",
            "x-zorunlu": true,
            "default": ""
          }
        },
        "hata": {
          "type": [
            "object",
            "null"
          ],
          "x-birim": "ana-hata",
          "x-zorunlu": true,
          "default": null,
          "additionalProperties": false,
          "required": [
            "kod",
            "mesaj"
          ],
          "properties": {
            "kod": {
              "type": "string",
              "x-birim": "hata-kodu",
              "x-zorunlu": true,
              "default": "HESAP_EKSIK",
              "enum": [
                "KREDI_SIFIR_VEYA_NEGATIF",
                "BILINMEYEN_HARF",
                "TOPLAM_KREDI_SIFIR",
                "PUAN_ARALIK_DISI",
                "BOS_LISTE",
                "HESAP_EKSIK",
                "YONTEM_GEREKLI",
                "YOK_TABLO_KAPSAMI_DISI"
              ]
            },
            "mesaj": {
              "type": "string",
              "x-birim": "hata-mesaji",
              "x-zorunlu": true,
              "default": ""
            },
            "satir": {
              "type": [
                "integer",
                "null"
              ],
              "x-birim": "bir-tabanli-satir",
              "x-zorunlu": false,
              "default": null,
              "minimum": 1
            }
          }
        }
      }
    }
  },
  "politikalar": {
    "tekrar": "Ders adı kimlik değildir. Tekrar seçimi yalnız ortak dersKodu, ortak tekrarGrubu veya açık durum=tekrar-eski işaretiyle uygulanır.",
    "tarihce": "DNO ilgili dönemin bütün ortalamaya katılan denemelerini kullanır. Her AGNO noktası yalnız o tarihe kadar bilinen denemelerde tekrar politikasını uygular. Nihai GNO bütün bilinen denemelerde seçili politikayı uygular.",
    "yuzlukDers": "Ham yüzlük ortalama Σ(kredi×puan)/Σkredi ile 100luk-puan biriminde hesaplanır. 4'lük GNO için kaynaklı kurum eşiği gerekir; YÖK tablosu bireysel ders notuna ters uygulanmaz.",
    "kismiHesap": "İşlenemeyen ortalamaya katılan satır varsa gno ve agno null kalır; şişmiş kısmi değer ana sonuç olarak sunulmaz.",
    "yok": "Resmî mod yalnız PDF'deki 301 tam çifti kullanır. matematiksel-tahmin opt-in'dir ve resmî YÖK karşılığı değildir."
  },
  "kaynakKatmani": [
    {
      "iddia": "YÖK PDF'si yalnız 301 adet 4'lük→100'lük tablo çiftini destekler; enterpolasyon, ekstrapolasyon veya bireysel yüzlük ders notunu ters katsayıya çevirme yöntemi tanımlamaz.",
      "kaynakUrl": "https://personel.yok.gov.tr/documentFiles/17532690942.4luk%20sistemin%20100%20luk%20sistemde%20ki%20karsiligi.pdf",
      "erisim": "2026-07-28",
      "kararTarihi": "[KAYNAK-DOĞRULANMADI]"
    },
    {
      "iddia": "İEÜ Madde 21 kurumun yüzlük-harf-katsayı eşiklerini ve S/U/EX sınıflarını; Madde 23 DNO ile GNO hesabını ve tekrar edilen derste en son not yaklaşımını tanımlar. Bu kurumsal örnek ulusal kural değildir.",
      "kaynakUrl": "https://oim.ieu.edu.tr/tr/bylaws/type/read/id/72",
      "erisim": "2026-07-28"
    },
    {
      "iddia": "ODTÜ Madde 24 S/U/EX sınıflarını, Madde 27 yarıyıl ve genel not ortalaması ayrımını tanımlar. Bu kurumsal örnek ulusal kural değildir.",
      "kaynakUrl": "https://ncc.metu.edu.tr/tr/oim/lisans-yonetmeligi",
      "erisim": "2026-07-28"
    }
  ],
  "ornekler": [
    {
      "id": "tam-yok-anahtar-donusumu",
      "beklentiTuru": "tam",
      "girdi": {
        "donusum": {
          "deger": 3.15,
          "yon": "4-100"
        }
      },
      "beklenenTamCikti": {
        "hesapDurumu": "basarili",
        "gno": null,
        "gnoHam": null,
        "donemler": [],
        "agno": null,
        "agnoSerisi": [],
        "yuzlukOrtalama": null,
        "toplamKredi": 0,
        "ortalamayaKatilanKredi": 0,
        "muafKredi": 0,
        "ortalamaDisiKredi": 0,
        "ortalamaDisiDersler": 0,
        "donusum": {
          "durum": "basarili",
          "dortluk": 3.15,
          "yuzluk": 80.16,
          "yon": "4-100",
          "yontem": "resmi-tam-anahtar",
          "kaynak": "https://personel.yok.gov.tr/documentFiles/17532690942.4luk%20sistemin%20100%20luk%20sistemde%20ki%20karsiligi.pdf",
          "uyari": null,
          "enterpolasyon": false,
          "tahmin": false,
          "resmiYokKarsiligi": true,
          "hata": null
        },
        "hedefSimulasyonu": null,
        "dersler": [],
        "hatalar": [],
        "gecersizSatirSayisi": 0,
        "uyari": null,
        "uyarilar": [],
        "notlar": [
          "Yalnız dönüşüm çalıştırıldı; GNO hesabı yapılmadı."
        ],
        "hata": null
      }
    },
    {
      "id": "ayni-ad-bagimsiz-ders",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Seminer",
            "kredi": 3,
            "not": "AA",
            "durum": "normal"
          },
          {
            "ad": "Seminer",
            "kredi": 3,
            "not": "FF",
            "durum": "normal"
          }
        ],
        "notTuru": "harf",
        "harfTablosu": "varsayilan-4lu",
        "notSinifiPolitikasi": "ieu-madde-21"
      },
      "beklenenAltKume": {
        "hesapDurumu": "basarili",
        "gno": 2,
        "ortalamayaKatilanKredi": 6,
        "hata": null
      }
    },
    {
      "id": "tarihsel-DNO-AGNO",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Matematik",
            "dersKodu": "MAT101",
            "kredi": 3,
            "not": "FF",
            "donem": "2024-Güz"
          },
          {
            "ad": "Fizik",
            "dersKodu": "FIZ101",
            "kredi": 3,
            "not": "BB",
            "donem": "2024-Güz"
          },
          {
            "ad": "Matematik",
            "dersKodu": "MAT101",
            "kredi": 3,
            "not": "AA",
            "donem": "2025-Bahar"
          }
        ],
        "notTuru": "harf",
        "harfTablosu": "varsayilan-4lu",
        "tekrarPolitikasi": "son-not"
      },
      "beklenenAltKume": {
        "gno": 3.5,
        "donemler": [
          {
            "donem": "2024-Güz",
            "dno": 1.5,
            "agno": 1.5
          },
          {
            "donem": "2025-Bahar",
            "dno": 4,
            "agno": 3.5
          }
        ]
      }
    },
    {
      "id": "yuzluk-20-80-ham",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Düşük",
            "kredi": 3,
            "not": 20
          },
          {
            "ad": "Yüksek",
            "kredi": 3,
            "not": 80
          }
        ],
        "notTuru": "yuzluk"
      },
      "beklenenAltKume": {
        "hesapDurumu": "karsilastirilamaz",
        "gno": null,
        "yuzlukOrtalama": {
          "deger": 50,
          "degerHam": 50,
          "birim": "100luk-puan",
          "kredi": 6
        },
        "hata": {
          "kod": "YONTEM_GEREKLI"
        }
      }
    },
    {
      "id": "yuzluk-20-80-ieu",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Düşük",
            "kredi": 3,
            "not": 20
          },
          {
            "ad": "Yüksek",
            "kredi": 3,
            "not": 80
          }
        ],
        "notTuru": "yuzluk",
        "yuzlukKatsayiTablosu": "ieu-madde-21"
      },
      "beklenenAltKume": {
        "hesapDurumu": "basarili",
        "gno": 1.5,
        "yuzlukOrtalama": {
          "deger": 50,
          "birim": "100luk-puan"
        },
        "hata": null
      }
    },
    {
      "id": "sifir-kredili-S-U",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Staj",
            "kredi": 0,
            "not": "S"
          },
          {
            "ad": "Seminer",
            "kredi": 0,
            "not": "U"
          },
          {
            "ad": "Kredili",
            "kredi": 3,
            "not": "AA"
          }
        ],
        "notTuru": "harf",
        "harfTablosu": "varsayilan-4lu",
        "notSinifiPolitikasi": "ieu-madde-21"
      },
      "beklenenAltKume": {
        "gno": 4,
        "ortalamaDisiDersler": 2,
        "ortalamaDisiKredi": 0,
        "hata": null
      }
    },
    {
      "id": "uc-ondalikli-yok-girdisi",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "donusum": {
          "deger": 3.155,
          "yon": "4-100"
        }
      },
      "beklenenAltKume": {
        "hesapDurumu": "karsilastirilamaz",
        "donusum": {
          "durum": "yontem-gerekli",
          "yontem": "resmi-tam-anahtar",
          "yuzluk": null,
          "enterpolasyon": false,
          "hata": {
            "kod": "YONTEM_GEREKLI"
          }
        },
        "hata": {
          "kod": "YONTEM_GEREKLI"
        }
      }
    },
    {
      "id": "kismi-hesap-blokaji",
      "beklentiTuru": "alt-kume",
      "girdi": {
        "dersler": [
          {
            "ad": "Geçerli",
            "kredi": 3,
            "not": "AA"
          },
          {
            "ad": "Bilinmeyen",
            "kredi": 3,
            "not": "ZZ"
          }
        ],
        "notTuru": "harf",
        "harfTablosu": "varsayilan-4lu"
      },
      "beklenenAltKume": {
        "hesapDurumu": "eksik",
        "gno": null,
        "agno": null,
        "gecersizSatirSayisi": 1,
        "hata": {
          "kod": "HESAP_EKSIK"
        }
      }
    }
  ],
  "derinLink": {
    "bicim": "./?dersler=<kredi:not,...>&tablo=<harf-tablosu>",
    "sinir": "Kompakt biçim dersKodu ve tekrarGrubu taşımaz; bu nedenle kendi başına tekrar bağı kurmaz."
  },
  "gizlilik": {
    "runtimeAgCagrisi": false,
    "notVerisiSaklanir": false,
    "notVerisiGonderilir": false
  },
  "lisans": "MIT"
}
