{
  "document_type": "narch_local_calculation_contract",
  "contract_id": "urn:narch:cok-urunlu-ortak-maliyet:1.0.0",
  "schema_dialect": "documented_contract_not_a_standard_json_schema",
  "title": "Ortak Maliyet Dağıtımı — Çok Ürünlü Sipariş",
  "slug": "cok-urunlu-ortak-maliyet",
  "language": "tr-TR",
  "contract_version": "1.0.0",
  "algorithm_version": "largest-remainder-ascii-v1.0.0",
  "snapshot_date": "2026-07-27",
  "purpose": "Tek siparişte kullanıcıca girilen ortak maliyetleri, her maliyet için kullanıcının açıkça seçip teyit ettiği anahtarla ürün satırlarına toplamı kuruşu kuruşuna koruyarak dağıtmak.",
  "legal_character": "Yönetimsel maliyet dağıtım çalışma kâğıdıdır. Vergi indirimi, stok maliyeti, dönem gideri, KDV matrahı veya muhasebe hesabı kararı vermez.",
  "runtime": {
    "kind": "browser_inline_javascript",
    "file": "index.html",
    "script_id": "hesap-motoru",
    "entrypoint": "window.NarchTool",
    "interface": {
      "validate": "function(input) -> validation_response",
      "calculate": "function(input) -> success_or_error_response",
      "metadata": "object"
    },
    "http_api": false,
    "offline": true,
    "file_protocol_supported": true,
    "network_required": false,
    "deterministic": true,
    "dom_independent_engine": true,
    "system_clock_used": false,
    "date_source": "input.hesaplama_tarihi"
  },
  "money_policy": {
    "currency": "TRY",
    "unit": "kurus",
    "input_type": "safe_integer",
    "output_type": "safe_integer",
    "minimum_money_input": 0,
    "maximum_integer": 9007199254740991,
    "binary_floating_point_money": false,
    "quota_representation": "BigInt rational numerator/denominator; JSON output uses base-10 strings",
    "quota_reduction": false,
    "rounding_method": "floor_then_largest_remainder",
    "tie_breaker": "fraction_remainder_desc_then_ascii_satir_id_asc",
    "per_cost_invariant": "sum(maliyet.sonuc.satirlar[*].dagitilan_kurus) == maliyet.tutar_kurus",
    "overall_invariant": "toplam_dagitilan_kurus + dagitilmayan_kurus == toplam_ortak_maliyet_kurus"
  },
  "sources": [
    {
      "source_id": "KGK_TMS2",
      "title": "Türkiye Muhasebe Standardı 2 — Stoklar",
      "official_visible_title": "Türkiye Muhasebe Standardı 2 — Stoklar",
      "publisher": "Kamu Gözetimi, Muhasebe ve Denetim Standartları Kurumu",
      "role": "official_normative_approach_source",
      "source_url": "https://www.kgk.gov.tr/Portalv2Uploads/files/Duyurular/v2/TMS_TFRS_Setleri/2026/Kirmizi_Kitap/TMS/TMS%202.pdf",
      "erisim_tarihi": "2026-07-27",
      "dayanak": "Md.14: aynı üretim sürecinde ayrı belirlenemeyen dönüştürme maliyetlerinin ürünler arasında mantıklı ve tutarlı biçimde dağıtılması; nispi satış değeri örnek yöntemdir.",
      "normatif": true,
      "verified": true,
      "scope_limit": "E-ticaret kargosu, reklamı, kuponu veya hizmet giderinin stok maliyeti olduğunu ya da belirli bir anahtarın zorunlu olduğunu söylemez."
    },
    {
      "source_id": "KGK_TFRS_SET",
      "title": "TFRS 2026 Seti (Kırmızı Kitap)",
      "official_visible_title": "TFRS 2026 Seti (Kırmızı Kitap)",
      "publisher": "Kamu Gözetimi, Muhasebe ve Denetim Standartları Kurumu",
      "role": "official_provenance_index",
      "url_slug_note": "URL slug'ı 2025 ifadesini taşır; erişim tarihinde görünür içerik 2026 setidir.",
      "source_url": "https://www.kgk.gov.tr/DynamicContentDetail/12043/TFRS-2025-Seti-K%C4%B1rm%C4%B1z%C4%B1-Kitap",
      "erisim_tarihi": "2026-07-27",
      "dayanak": "KGK resmî set dizininde Türkiye Muhasebe Standartları altında TMS 2 Stoklar kaydının yayımlandığını gösteren provenans kaynağıdır.",
      "normatif": true,
      "verified": true,
      "scope_limit": "Dizin ayrıca bir dağıtım anahtarı veya kuruş yuvarlama yöntemi belirlemez."
    }
  ],
  "normative_data_policy": {
    "required_fields": [
      "source_id",
      "source_url",
      "erisim_tarihi",
      "dayanak",
      "normatif",
      "verified"
    ],
    "fail_closed_rule": "Teyitsiz bir normatif üretim değeri kullanılamaz; değer null, kaynak işareti PLACEHOLDER ve sonuç KUNYE_EKSIK olmalıdır.",
    "unverified_normative_sentinel": {
      "active": false,
      "value": null,
      "source_id": "PLACEHOLDER",
      "status_code": "KUNYE_EKSIK"
    },
    "active_placeholder_records": [],
    "active_normative_numeric_values": [],
    "note": "Motor mevzuattan oran, eşik veya tutar almaz. Doğrulanmış iki kaynak yalnız yaklaşım ve provenans sınırını açıklar."
  },
  "product_decisions": [
    {
      "decision_id": "URUN-ANAHTAR-ESIT-SATIR",
      "normatif": false,
      "description": "esit_satir anahtarında her satırın ağırlığı 1'dir."
    },
    {
      "decision_id": "URUN-ANAHTAR-ADET",
      "normatif": false,
      "description": "adet anahtarı satırdaki pozitif adet değerini kullanır."
    },
    {
      "decision_id": "URUN-ANAHTAR-NET-SATIS",
      "normatif": false,
      "description": "net_satis anahtarı siparişteki net_satis_kurus değerini kullanır. TMS 2'de nispi satış değerinin örneklenmesi bu e-ticaret anahtarını zorunlu kılmaz."
    },
    {
      "decision_id": "URUN-ANAHTAR-GRAM",
      "normatif": false,
      "description": "agirlik_gram anahtarında satır ağırlığı birim gram × adet olarak hesaplanır."
    },
    {
      "decision_id": "URUN-ANAHTAR-DESI",
      "normatif": false,
      "description": "desi anahtarında satır ağırlığı 0,001 desi alt birimi × adet olarak hesaplanır."
    },
    {
      "decision_id": "URUN-ANAHTAR-KULLANICI",
      "normatif": false,
      "description": "kullanici_agirligi anahtarında kullanıcının pozitif integer değeri, adetle çarpılmadan kullanılır."
    },
    {
      "decision_id": "URUN-EN-BUYUK-KALAN",
      "normatif": false,
      "description": "Exact kotanın tabanı verilir; artan kuruşlar kesir kalanı büyükten küçüğe dağıtılır."
    },
    {
      "decision_id": "URUN-ASCII-BAG-KIRICI",
      "normatif": false,
      "description": "Eşit kesir kalanında satir_id ASCII artan sıra bağ-kırıcıdır; localeCompare kullanılmaz."
    },
    {
      "decision_id": "URUN-FAIL-CLOSED-ANAHTAR-TEYIDI",
      "normatif": false,
      "description": "anahtar_teyidi true değilse ilgili maliyet dağıtılmaz; diğer maliyetler hesaplanabilir."
    },
    {
      "decision_id": "URUN-KAPASITE-SINIRLARI",
      "normatif": false,
      "description": "Satır 2..200, maliyet 1..100, kimlik 1..64 ve ad 1..120 karakter sınırları ürün güvenliği ve kullanılabilirlik kararıdır."
    },
    {
      "decision_id": "URUN-MUHASEBE-SINIFI",
      "normatif": false,
      "description": "muhasebe_sinifi kullanıcı bildirimidir; matematiği değiştirmez, yazılım teyidi veya muhasebe hükmü değildir."
    }
  ],
  "input_fields": [
    {
      "name": "hesaplama_tarihi",
      "path": "/hesaplama_tarihi",
      "type": "string",
      "unit": "ISO-8601 calendar date",
      "format": "YYYY-MM-DD",
      "range": "0001-01-01..9999-12-31; gerçek takvim tarihi",
      "enum": null,
      "required": true,
      "conditions": "Sistem saatinden üretilmez; datetime veya kanonik olmayan metin kabul edilmez."
    },
    {
      "name": "siparis_id",
      "path": "/siparis_id",
      "type": "string",
      "unit": "ASCII identifier",
      "format": "^[A-Za-z0-9._-]+$",
      "range": "1..64 karakter",
      "enum": null,
      "required": true,
      "conditions": "Kırpılmaz veya otomatik düzeltilmez."
    },
    {
      "name": "para_birimi",
      "path": "/para_birimi",
      "type": "string",
      "unit": "ISO 4217 code",
      "format": null,
      "range": null,
      "enum": [
        "TRY"
      ],
      "required": true,
      "conditions": "TRY dışı değer fail-closed yapısal hatadır."
    },
    {
      "name": "satirlar",
      "path": "/satirlar",
      "type": "array",
      "unit": "sipariş satırı",
      "format": null,
      "range": "2..200 kayıt",
      "enum": null,
      "required": true,
      "conditions": "satir_id dizi genelinde benzersizdir.",
      "items": [
        {
          "name": "satir_id",
          "type": "string",
          "unit": "ASCII identifier",
          "format": "^[A-Za-z0-9._-]+$",
          "range": "1..64 karakter",
          "enum": null,
          "required": true,
          "conditions": "Dizi genelinde benzersiz; kalan eşitliğinde bağ-kırıcı."
        },
        {
          "name": "ad",
          "type": "string",
          "unit": "düz metin",
          "format": "kontrol karakteri içermez",
          "range": "trim sonrası 1..120 karakter",
          "enum": null,
          "required": true,
          "conditions": "Hesap aritmetiğine girmez; arayüz textContent ile gösterir."
        },
        {
          "name": "adet",
          "type": "safe_integer",
          "unit": "adet",
          "format": null,
          "range": "1..9007199254740991",
          "enum": null,
          "required": true,
          "conditions": "agirlik_gram ve desi anahtarlarında çarpandır."
        },
        {
          "name": "net_satis_kurus",
          "type": "safe_integer",
          "unit": "kurus",
          "format": null,
          "range": "0..9007199254740991; satır toplamı aynı sınırı aşamaz",
          "enum": null,
          "required": true,
          "conditions": "net_satis anahtarında doğrudan ağırlık; anahtar toplamı sıfır olamaz."
        },
        {
          "name": "agirlik_gram",
          "type": "safe_integer|null",
          "unit": "gram per unit",
          "format": null,
          "range": "null veya 1..9007199254740991",
          "enum": null,
          "required": "conditional",
          "conditions": "En az bir maliyet agirlik_gram anahtarını teyit ettiğinde her satır için zorunlu; ağırlık = agirlik_gram × adet."
        },
        {
          "name": "desi_binde",
          "type": "safe_integer|null",
          "unit": "0.001 desi per unit",
          "format": null,
          "range": "null veya 1..9007199254740991",
          "enum": null,
          "required": "conditional",
          "conditions": "En az bir maliyet desi anahtarını teyit ettiğinde her satır için zorunlu; ağırlık = desi_binde × adet."
        },
        {
          "name": "kullanici_agirligi",
          "type": "safe_integer|null",
          "unit": "user-defined weight unit",
          "format": null,
          "range": "null veya 1..9007199254740991",
          "enum": null,
          "required": "conditional",
          "conditions": "En az bir maliyet kullanici_agirligi anahtarını teyit ettiğinde her satır için zorunlu; adetle çarpılmaz."
        }
      ]
    },
    {
      "name": "ortak_maliyetler",
      "path": "/ortak_maliyetler",
      "type": "array",
      "unit": "ortak maliyet kaydı",
      "format": null,
      "range": "1..100 kayıt",
      "enum": null,
      "required": true,
      "conditions": "maliyet_id dizi genelinde benzersiz; tutar toplamı safe integer sınırını aşamaz.",
      "items": [
        {
          "name": "maliyet_id",
          "type": "string",
          "unit": "ASCII identifier",
          "format": "^[A-Za-z0-9._-]+$",
          "range": "1..64 karakter",
          "enum": null,
          "required": true,
          "conditions": "Dizi genelinde benzersiz."
        },
        {
          "name": "ad",
          "type": "string",
          "unit": "düz metin",
          "format": "kontrol karakteri içermez",
          "range": "trim sonrası 1..120 karakter",
          "enum": null,
          "required": true,
          "conditions": "Hesap aritmetiğine girmez."
        },
        {
          "name": "tutar_kurus",
          "type": "safe_integer",
          "unit": "kurus",
          "format": null,
          "range": "1..9007199254740991; maliyet toplamı aynı sınırı aşamaz",
          "enum": null,
          "required": true,
          "conditions": "Her maliyet ayrı dağıtılır."
        },
        {
          "name": "dagitim_anahtari",
          "type": "string",
          "unit": "distribution key",
          "format": null,
          "range": null,
          "enum": [
            "esit_satir",
            "adet",
            "net_satis",
            "agirlik_gram",
            "desi",
            "kullanici_agirligi"
          ],
          "required": true,
          "conditions": "Motor en uygun anahtarı seçmez veya fallback uygulamaz."
        },
        {
          "name": "anahtar_teyidi",
          "type": "boolean",
          "unit": "explicit user confirmation",
          "format": null,
          "range": null,
          "enum": [
            false,
            true
          ],
          "required": true,
          "conditions": "Yalnız true dağıtıma izin verir; false ilgili maliyeti ANAHTAR_TEYIDI_GEREKLI ile kapatır."
        },
        {
          "name": "muhasebe_sinifi",
          "type": "string",
          "unit": "user-declared accounting class",
          "format": null,
          "range": null,
          "enum": [
            "yonetimsel_analiz",
            "stok_maliyeti_musavir_teyitli",
            "donem_gideri_musavir_teyitli",
            "bilinmiyor"
          ],
          "required": true,
          "conditions": "Aritmetiği değiştirmez. bilinmiyor, MUHASEBE_SINIFI_TEYIT_EDILMEDI uyarısı üretir."
        }
      ]
    }
  ],
  "additional_field_policy": {
    "allowed": false,
    "status_code": "BILINMEYEN_ALAN",
    "reason": "Yazım hatalarının sessizce yutulmasını önlemek için kök, satır ve maliyet nesnelerinde kapalı alan kümesi kullanılır.",
    "normatif": false
  },
  "required_field_matrix": [
    {
      "dagitim_anahtari": "esit_satir",
      "required_line_fields": [],
      "weight_formula": "1",
      "zero_total_possible_with_valid_structure": false,
      "normatif": false
    },
    {
      "dagitim_anahtari": "adet",
      "required_line_fields": [
        "adet"
      ],
      "weight_formula": "adet",
      "zero_total_possible_with_valid_structure": false,
      "normatif": false
    },
    {
      "dagitim_anahtari": "net_satis",
      "required_line_fields": [
        "net_satis_kurus"
      ],
      "weight_formula": "net_satis_kurus",
      "zero_total_possible_with_valid_structure": true,
      "normatif": false
    },
    {
      "dagitim_anahtari": "agirlik_gram",
      "required_line_fields": [
        "agirlik_gram",
        "adet"
      ],
      "weight_formula": "BigInt(agirlik_gram) * BigInt(adet)",
      "zero_total_possible_with_valid_structure": false,
      "normatif": false
    },
    {
      "dagitim_anahtari": "desi",
      "required_line_fields": [
        "desi_binde",
        "adet"
      ],
      "weight_formula": "BigInt(desi_binde) * BigInt(adet)",
      "zero_total_possible_with_valid_structure": false,
      "normatif": false
    },
    {
      "dagitim_anahtari": "kullanici_agirligi",
      "required_line_fields": [
        "kullanici_agirligi"
      ],
      "weight_formula": "kullanici_agirligi",
      "zero_total_possible_with_valid_structure": false,
      "normatif": false
    }
  ],
  "algorithm": {
    "scope": "Her ortak maliyet bağımsız işlenir.",
    "steps": [
      "Seçilen ve teyit edilen anahtardan her satırın BigInt ağırlığını üret.",
      "Gerekli alan eksikse, toplam ağırlık sıfırsa veya güvenli toplam sınırı aşılırsa yalnız ilgili maliyetin sonucunu null bırak.",
      "Exact kota payını BigInt(tutar_kurus) * BigInt(satir_agirligi), paydasını BigInt(toplam_agirlik) olarak tut.",
      "Her satıra pay / payda BigInt taban bölümünü ver.",
      "Kalan kuruş sayısını tutar_kurus - tabanlar_toplami olarak bul.",
      "Kesir kalanını pay % payda ile sırala; büyük kalan önce, eşitlikte doğrudan ASCII satir_id artan sıra.",
      "İlk kalan_kurus_sayisi satıra birer kuruş ekle.",
      "Her maliyet invariantını ve ardından genel mutabakatı doğrula."
    ],
    "canonical_output_order": "Maliyet içi satırlar ve genel satır toplamları ASCII satir_id artan sıradadır.",
    "input_mutation": false,
    "silent_fallback": false,
    "normatif": false
  },
  "issue_schema": {
    "type": "object",
    "required": [
      "code",
      "field",
      "message"
    ],
    "properties": {
      "code": {
        "type": "string",
        "enum": [
          "GIRDI_NESNESI_GEREKLI",
          "BILINMEYEN_ALAN",
          "GECERSIZ_TARIH",
          "GECERSIZ_KIMLIK",
          "DESTEKLENMEYEN_PARA_BIRIMI",
          "SATIR_DIZISI_GEREKLI",
          "SATIR_SAYISI_GECERSIZ",
          "SATIR_NESNESI_GEREKLI",
          "YINELENEN_SATIR_ID",
          "GECERSIZ_DUZ_METIN",
          "GECERSIZ_POZITIF_INTEGER",
          "GECERSIZ_PARA_ALANI",
          "MALIYET_DIZISI_GEREKLI",
          "MALIYET_SAYISI_GECERSIZ",
          "MALIYET_NESNESI_GEREKLI",
          "YINELENEN_MALIYET_ID",
          "GECERSIZ_DAGITIM_ANAHTARI",
          "GECERSIZ_BOOLEAN",
          "GECERSIZ_MUHASEBE_SINIFI",
          "ANAHTAR_TEYIDI_GEREKLI",
          "DAGITIM_ANAHTARI_GECERSIZ",
          "HESAP_SINIRI_ASILDI",
          "HESAPLAMA_INVARIANTI_IHLALI",
          "MUHASEBE_SINIFI_TEYIT_EDILMEDI"
        ],
        "nullable": false,
        "conditions": "Her issue kaydında kararlı kod olarak bulunur."
      },
      "field": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her issue kaydında $, kök alan veya indexed nested alan yolu olarak bulunur."
      },
      "message": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her issue kaydında insan tarafından okunabilir açıklama olarak bulunur."
      },
      "maliyet_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Sorun belirli maliyete aitse bulunur; aksi durumda alan yoktur."
      },
      "satir_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Sorun belirli satıra aitse bulunur; aksi durumda alan yoktur."
      },
      "reason_code": {
        "type": "string",
        "enum": [
          "AGIRLIK_SINIRI",
          "GEREKLI_ALAN_EKSIK",
          "TEYIT_FALSE",
          "TOPLAM_AGIRLIK_SIFIR",
          "TOPLAM_AGIRLIK_SINIRI"
        ],
        "nullable": false,
        "conditions": "Kararlı issue kodunun makinece ayrıştırılan alt nedeni varsa bulunur; aksi durumda alan yoktur."
      }
    }
  },
  "weight_schema": {
    "type": "object",
    "required": [
      "satir_id",
      "agirlik"
    ],
    "properties": {
      "satir_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Başarılı maliyet sonucundaki her ağırlık kaydında bulunur."
      },
      "agirlik": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Seçilen anahtardan türetilen sıfır veya pozitif exact ağırlıktır."
      }
    }
  },
  "exact_quota_schema": {
    "type": "object",
    "required": [
      "pay",
      "payda",
      "ifade"
    ],
    "properties": {
      "pay": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında C × w_i exact çarpımıdır."
      },
      "payda": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında pozitif toplam ağırlık Σw değeridir."
      },
      "ifade": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında pay/payda kurus gösterimidir."
      }
    }
  },
  "fraction_remainder_schema": {
    "type": "object",
    "required": [
      "pay",
      "payda",
      "ifade"
    ],
    "properties": {
      "pay": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında (C × w_i) mod Σw değeridir."
      },
      "payda": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında pozitif toplam ağırlık Σw değeridir."
      },
      "ifade": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında pay/payda gösterimidir."
      }
    }
  },
  "quota_line_schema": {
    "type": "object",
    "required": [
      "satir_id",
      "agirlik",
      "exact_kota",
      "taban_kurus",
      "kesir_kalani",
      "kalan_sirasi",
      "kalan_kurus_aldi",
      "dagitilan_kurus"
    ],
    "properties": {
      "satir_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı maliyetin her kota satırında bulunur."
      },
      "agirlik": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Seçilen anahtardan türetilen sıfır veya pozitif exact ağırlıktır."
      },
      "exact_kota": {
        "type": "object",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında exact rasyonel kota izi bulunur.",
        "$ref": "#/exact_quota_schema"
      },
      "taban_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında exact kotanın aşağı yuvarlanan tabanıdır."
      },
      "kesir_kalani": {
        "type": "object",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında kalan sırasını belirleyen exact kesirdir.",
        "$ref": "#/fraction_remainder_schema"
      },
      "kalan_sirasi": {
        "type": "safe_integer",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında kesir azalan, ASCII satir_id artan sırasıdır."
      },
      "kalan_kurus_aldi": {
        "type": "boolean",
        "enum": [
          true,
          false
        ],
        "nullable": false,
        "conditions": "Satır en-büyük-kalan turunda bir ek kuruş aldıysa true olur."
      },
      "dagitilan_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarılı kota satırında taban_kurus değerine varsa bir ek kuruş eklenmiş nihai paydır."
      }
    }
  },
  "cost_invariant_schema": {
    "type": "object",
    "required": [
      "code",
      "beklenen_kurus",
      "gerceklesen_kurus",
      "saglandi"
    ],
    "properties": {
      "code": {
        "type": "string",
        "const": "MALIYET_TOPLAMI_KORUNDU",
        "nullable": false,
        "conditions": "Her başarılı maliyet sonucunda sabit invariant kimliğidir."
      },
      "beklenen_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Başarılı maliyette girilen tutar_kurus değeridir."
      },
      "gerceklesen_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Başarılı maliyette kota satırlarının dağıtılan toplamıdır."
      },
      "saglandi": {
        "type": "boolean",
        "const": true,
        "nullable": false,
        "conditions": "Yalnız toplam korunduğunda başarılı maliyet sonucu yayımlandığı için true olur."
      }
    }
  },
  "allocation_result_schema": {
    "type": "object",
    "required": [
      "agirliklar",
      "toplam_agirlik",
      "tabanlar_toplami_kurus",
      "yuvarlama_kalani_kurus",
      "satirlar",
      "invariant"
    ],
    "properties": {
      "agirliklar": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise tüm satırların exact ağırlık izini taşır.",
        "items": {
          "$ref": "#/weight_schema"
        }
      },
      "toplam_agirlik": {
        "type": "base10_bigint_string",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise pozitif Σw değeridir."
      },
      "tabanlar_toplami_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise tüm kota tabanlarının toplamıdır."
      },
      "yuvarlama_kalani_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise tutardan taban toplamı çıkarılarak bulunan ek kuruş sayısıdır."
      },
      "satirlar": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise ASCII satir_id sırasında kota kayıtlarını taşır.",
        "items": {
          "$ref": "#/quota_line_schema"
        }
      },
      "invariant": {
        "type": "object",
        "enum": null,
        "nullable": false,
        "conditions": "Maliyet status_code DAGITILDI ise maliyet toplamı kanıtını taşır.",
        "$ref": "#/cost_invariant_schema"
      }
    }
  },
  "cost_result_schema": {
    "type": "object",
    "required": [
      "maliyet_id",
      "ad",
      "tutar_kurus",
      "dagitim_anahtari",
      "anahtar_teyidi",
      "muhasebe_sinifi",
      "status_code",
      "sonuc",
      "errors",
      "dagitilan_kurus",
      "dagitilmayan_kurus"
    ],
    "properties": {
      "maliyet_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her maliyet sonucunda girdi kimliği olarak bulunur."
      },
      "ad": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her maliyet sonucunda girdi etiketi olarak bulunur."
      },
      "tutar_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her maliyet sonucunda pozitif girdi tutarı olarak bulunur."
      },
      "dagitim_anahtari": {
        "type": "string",
        "enum": [
          "esit_satir",
          "adet",
          "net_satis",
          "agirlik_gram",
          "desi",
          "kullanici_agirligi"
        ],
        "nullable": false,
        "conditions": "Her maliyet sonucunda kullanıcıca seçilen doğrulanmış anahtardır."
      },
      "anahtar_teyidi": {
        "type": "boolean",
        "enum": [
          true,
          false
        ],
        "nullable": false,
        "conditions": "Her maliyet sonucunda girdi teyidi aynen taşınır; false ise maliyet dağıtılmaz."
      },
      "muhasebe_sinifi": {
        "type": "string",
        "enum": [
          "yonetimsel_analiz",
          "stok_maliyeti_musavir_teyitli",
          "donem_gideri_musavir_teyitli",
          "bilinmiyor"
        ],
        "nullable": false,
        "conditions": "Her maliyet sonucunda kullanıcı bildirimi olarak bulunur; matematiği değiştirmez."
      },
      "status_code": {
        "type": "string",
        "enum": [
          "DAGITILDI",
          "ANAHTAR_TEYIDI_GEREKLI",
          "DAGITIM_ANAHTARI_GECERSIZ",
          "HESAP_SINIRI_ASILDI"
        ],
        "nullable": false,
        "conditions": "Her maliyet sonucunda dağıtım veya fail-closed nedenini bildirir."
      },
      "sonuc": {
        "type": [
          "object",
          "null"
        ],
        "enum": null,
        "nullable": true,
        "conditions": "status_code DAGITILDI ise allocation_result_schema nesnesidir; diğer maliyet durumlarında null olur.",
        "$ref": "#/allocation_result_schema"
      },
      "errors": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "status_code DAGITILDI ise boş; maliyet fail-closed kaldıysa en az bir issue taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "dagitilan_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "status_code DAGITILDI ise tutar_kurus, aksi durumda 0 olur."
      },
      "dagitilmayan_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "status_code DAGITILDI ise 0, aksi durumda tutar_kurus olur."
      }
    }
  },
  "summary_line_schema": {
    "type": "object",
    "required": [
      "satir_id",
      "ad",
      "toplam_yuklenen_ortak_maliyet_kurus"
    ],
    "properties": {
      "satir_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her genel satır özetinde bulunur ve ASCII sırayı belirler."
      },
      "ad": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her genel satır özetinde girdi etiketi olarak bulunur."
      },
      "toplam_yuklenen_ortak_maliyet_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her genel satır özetinde dağıtılan tüm maliyetlerden yüklenen toplamdır."
      }
    }
  },
  "general_invariant_schema": {
    "type": "object",
    "required": [
      "code",
      "ifade",
      "beklenen_kurus",
      "gerceklesen_kurus",
      "maliyet_toplamlari_kurus",
      "satir_toplamlari_kurus",
      "satir_toplamlari_saglandi",
      "saglandi"
    ],
    "properties": {
      "code": {
        "type": "string",
        "const": "GENEL_TOPLAM_MUTABAKATI",
        "nullable": false,
        "conditions": "Her başarı yanıtında sabit genel invariant kimliğidir."
      },
      "ifade": {
        "type": "string",
        "const": "toplam_dagitilan_kurus + dagitilmayan_kurus = toplam_ortak_maliyet_kurus",
        "nullable": false,
        "conditions": "Her başarı yanıtında denetlenen genel para eşitliğidir."
      },
      "beklenen_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında toplam_ortak_maliyet_kurus değeridir."
      },
      "gerceklesen_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında dağıtılan ve dağıtılmayan kuruşların toplamıdır."
      },
      "maliyet_toplamlari_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında maliyet sonuçlarından bağımsız toplanan dağıtılmış tutardır."
      },
      "satir_toplamlari_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında satır özetlerinden bağımsız toplanan dağıtılmış tutardır."
      },
      "satir_toplamlari_saglandi": {
        "type": "boolean",
        "const": true,
        "nullable": false,
        "conditions": "Yalnız satır ve maliyet toplamları eşitse başarı yanıtı yayımlandığı için true olur."
      },
      "saglandi": {
        "type": "boolean",
        "const": true,
        "nullable": false,
        "conditions": "Yalnız bütün genel eşitlikler sağlanırsa başarı yanıtı yayımlandığı için true olur."
      }
    }
  },
  "validation_response_schema": {
    "type": "object",
    "required": [
      "valid",
      "fully_distributable",
      "status_code",
      "errors",
      "distribution_issues",
      "warnings"
    ],
    "properties": {
      "valid": {
        "type": "boolean",
        "enum": [
          true,
          false
        ],
        "nullable": false,
        "conditions": "Her validate yanıtında yapısal/global geçerliliği bildirir."
      },
      "fully_distributable": {
        "type": "boolean",
        "enum": [
          true,
          false
        ],
        "nullable": false,
        "conditions": "Her validate yanıtında bütün maliyetlerin dağıtıma hazır olup olmadığını bildirir."
      },
      "status_code": {
        "type": "string",
        "enum": [
          "GIRDI_GECERSIZ",
          "DAGITIM_HAZIR_DEGIL",
          "DAGITIMA_HAZIR"
        ],
        "nullable": false,
        "conditions": "Her validate yanıtında geçerlilik ve dağıtılabilirlik birleşik durumudur."
      },
      "errors": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her validate yanıtında yapısal/global issue kayıtlarını taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "distribution_issues": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her validate yanıtında maliyet-yerel fail-closed issue kayıtlarını taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "warnings": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her validate yanıtında aritmetiği durdurmayan issue kayıtlarını taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      }
    }
  },
  "success_schema": {
    "type": "object",
    "required": [
      "ok",
      "contract_version",
      "algorithm_version",
      "hesaplama_tarihi",
      "siparis_id",
      "para_birimi",
      "scenario_type",
      "status_code",
      "maliyetler",
      "satirlar",
      "toplam_ortak_maliyet_kurus",
      "toplam_dagitilan_kurus",
      "dagitilmayan_kurus",
      "invariant",
      "errors",
      "warnings",
      "source_ids"
    ],
    "properties": {
      "ok": {
        "type": "boolean",
        "const": true,
        "nullable": false,
        "conditions": "Her başarı yanıtında true olur."
      },
      "contract_version": {
        "type": "string",
        "const": "1.0.0",
        "nullable": false,
        "conditions": "Her başarı yanıtında sözleşme sürümünü sabitler."
      },
      "algorithm_version": {
        "type": "string",
        "const": "largest-remainder-ascii-v1.0.0",
        "nullable": false,
        "conditions": "Her başarı yanıtında hesap algoritması sürümünü sabitler."
      },
      "hesaplama_tarihi": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında doğrulanmış input.hesaplama_tarihi aynen taşınır."
      },
      "siparis_id": {
        "type": "string",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında doğrulanmış input.siparis_id aynen taşınır."
      },
      "para_birimi": {
        "type": "string",
        "const": "TRY",
        "nullable": false,
        "conditions": "Her başarı yanıtında desteklenen tek para birimidir."
      },
      "scenario_type": {
        "type": "string",
        "const": "yonetimsel_senaryo",
        "nullable": false,
        "conditions": "Her başarı yanıtında sonucun muhasebe hükmü değil yönetimsel senaryo olduğunu bildirir."
      },
      "status_code": {
        "type": "string",
        "enum": [
          "TAM_DAGITIM",
          "KISMI_DAGITIM",
          "DAGITIM_YAPILAMADI"
        ],
        "nullable": false,
        "conditions": "Her başarı yanıtında maliyetlerin dağıtılma bileşimini bildirir."
      },
      "maliyetler": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında girdi sırasındaki tüm maliyet sonuçlarını taşır.",
        "items": {
          "$ref": "#/cost_result_schema"
        }
      },
      "satirlar": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında ASCII satir_id sırasında genel satır toplamlarını taşır.",
        "items": {
          "$ref": "#/summary_line_schema"
        }
      },
      "toplam_ortak_maliyet_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında bütün girdi maliyetlerinin toplamıdır."
      },
      "toplam_dagitilan_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında başarıyla dağıtılan maliyetlerin toplamıdır."
      },
      "dagitilmayan_kurus": {
        "type": "safe_integer",
        "unit": "kurus",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında fail-closed kalan maliyetlerin toplamıdır."
      },
      "invariant": {
        "type": "object",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında genel para ve iki bağımsız toplama yolunun mutabakatını taşır.",
        "$ref": "#/general_invariant_schema"
      },
      "errors": {
        "type": "array",
        "const": [],
        "nullable": false,
        "conditions": "Başarı yanıtında global errors dizisi daima boştur.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "warnings": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her başarı yanıtında aritmetiği durdurmayan issue kayıtlarını taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "source_ids": {
        "type": "array",
        "const": [
          "KGK_TMS2",
          "KGK_TFRS_SET"
        ],
        "nullable": false,
        "conditions": "Her başarı yanıtında kullanılan sürümlü kaynak kimliği kümesidir."
      }
    }
  },
  "error_schema": {
    "type": "object",
    "required": [
      "ok",
      "contract_version",
      "algorithm_version",
      "status_code",
      "scenario_type",
      "result",
      "errors",
      "distribution_issues",
      "warnings",
      "source_ids"
    ],
    "properties": {
      "ok": {
        "type": "boolean",
        "const": false,
        "nullable": false,
        "conditions": "Her global/yapısal hata yanıtında false olur."
      },
      "contract_version": {
        "type": "string",
        "const": "1.0.0",
        "nullable": false,
        "conditions": "Her hata yanıtında sözleşme sürümünü sabitler."
      },
      "algorithm_version": {
        "type": "string",
        "const": "largest-remainder-ascii-v1.0.0",
        "nullable": false,
        "conditions": "Her hata yanıtında hesap algoritması sürümünü sabitler."
      },
      "status_code": {
        "type": "string",
        "enum": [
          "GIRDI_GECERSIZ",
          "HESAPLAMA_INVARIANTI_IHLALI"
        ],
        "nullable": false,
        "conditions": "Her hata yanıtında yapısal/global hata sınıfını bildirir."
      },
      "scenario_type": {
        "type": "string",
        "const": "yonetimsel_senaryo",
        "nullable": false,
        "conditions": "Her hata yanıtında çağrının yönetimsel senaryo niteliğini korur."
      },
      "result": {
        "type": "null",
        "const": null,
        "nullable": true,
        "conditions": "Global/yapısal hata veya invariant ihlalinde normal sonuç yayımlanmaz."
      },
      "errors": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her hata yanıtında en az bir global/yapısal issue kaydı bulunur.",
        "minItems": 1,
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "distribution_issues": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her hata yanıtında validate aşamasında saptanan maliyet-yerel issue kayıtlarını taşır; invariant ihlalinde boştur.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "warnings": {
        "type": "array",
        "enum": null,
        "nullable": false,
        "conditions": "Her hata yanıtında saptanabilen aritmetik-dışı issue kayıtlarını taşır.",
        "items": {
          "$ref": "#/issue_schema"
        }
      },
      "source_ids": {
        "type": "array",
        "const": [
          "KGK_TMS2",
          "KGK_TFRS_SET"
        ],
        "nullable": false,
        "conditions": "Her hata yanıtında kullanılan sürümlü kaynak kimliği kümesidir."
      }
    }
  },
  "status_codes": {
    "DAGITIMA_HAZIR": "validate: bütün maliyetler dağıtıma hazır.",
    "DAGITIM_HAZIR_DEGIL": "validate: yapı geçerli, en az bir maliyet fail-closed kalacak.",
    "GIRDI_GECERSIZ": "Yapısal/global girdi hatası; calculate.result null.",
    "TAM_DAGITIM": "Bütün maliyetler dağıtıldı.",
    "KISMI_DAGITIM": "En az bir maliyet dağıtıldı ve en az biri dağıtılamadı.",
    "DAGITIM_YAPILAMADI": "Yapı geçerli olmasına rağmen hiçbir maliyet dağıtılamadı.",
    "DAGITILDI": "Maliyet bazında başarılı dağıtım.",
    "DAGITIM_ANAHTARI_GECERSIZ": "Maliyet bazında gerekli alan eksik veya toplam ağırlık sıfır.",
    "ANAHTAR_TEYIDI_GEREKLI": "Maliyet bazında açık teyit false.",
    "HESAP_SINIRI_ASILDI": "Yapısal toplam veya maliyet bazında türetilmiş ağırlık safe integer sınırını aştı.",
    "HESAPLAMA_INVARIANTI_IHLALI": "Maliyet dağıtımı veya genel satır/maliyet mutabakatı korunmadı; üst result null ve hesap fail-closed.",
    "KUNYE_EKSIK": "Yalnız teyitsiz normatif üretim verisi bulunursa kullanılacak fail-closed durum; aktif üretim kaydı yok."
  },
  "error_codes": [
    "GIRDI_NESNESI_GEREKLI",
    "BILINMEYEN_ALAN",
    "GECERSIZ_TARIH",
    "GECERSIZ_KIMLIK",
    "DESTEKLENMEYEN_PARA_BIRIMI",
    "SATIR_DIZISI_GEREKLI",
    "SATIR_SAYISI_GECERSIZ",
    "SATIR_NESNESI_GEREKLI",
    "YINELENEN_SATIR_ID",
    "GECERSIZ_DUZ_METIN",
    "GECERSIZ_POZITIF_INTEGER",
    "GECERSIZ_PARA_ALANI",
    "MALIYET_DIZISI_GEREKLI",
    "MALIYET_SAYISI_GECERSIZ",
    "MALIYET_NESNESI_GEREKLI",
    "YINELENEN_MALIYET_ID",
    "GECERSIZ_DAGITIM_ANAHTARI",
    "GECERSIZ_BOOLEAN",
    "GECERSIZ_MUHASEBE_SINIFI",
    "ANAHTAR_TEYIDI_GEREKLI",
    "DAGITIM_ANAHTARI_GECERSIZ",
    "HESAP_SINIRI_ASILDI",
    "HESAPLAMA_INVARIANTI_IHLALI"
  ],
  "warning_codes": [
    "MUHASEBE_SINIFI_TEYIT_EDILMEDI"
  ],
  "example_call": {
    "hesaplama_tarihi": "2026-07-26",
    "siparis_id": "ORNEK-1",
    "para_birimi": "TRY",
    "satirlar": [
      {
        "satir_id": "A",
        "ad": "Ürün A",
        "adet": 1,
        "net_satis_kurus": 0,
        "agirlik_gram": null,
        "desi_binde": null,
        "kullanici_agirligi": null
      },
      {
        "satir_id": "B",
        "ad": "Ürün B",
        "adet": 1,
        "net_satis_kurus": 0,
        "agirlik_gram": null,
        "desi_binde": null,
        "kullanici_agirligi": null
      },
      {
        "satir_id": "C",
        "ad": "Ürün C",
        "adet": 1,
        "net_satis_kurus": 0,
        "agirlik_gram": null,
        "desi_binde": null,
        "kullanici_agirligi": null
      }
    ],
    "ortak_maliyetler": [
      {
        "maliyet_id": "KARGO",
        "ad": "Kargo",
        "tutar_kurus": 100,
        "dagitim_anahtari": "esit_satir",
        "anahtar_teyidi": true,
        "muhasebe_sinifi": "yonetimsel_analiz"
      }
    ]
  },
  "example_responses": {
    "esit_dagitim": {
      "ok": true,
      "contract_version": "1.0.0",
      "algorithm_version": "largest-remainder-ascii-v1.0.0",
      "hesaplama_tarihi": "2026-07-26",
      "siparis_id": "ORNEK-1",
      "para_birimi": "TRY",
      "scenario_type": "yonetimsel_senaryo",
      "status_code": "TAM_DAGITIM",
      "maliyetler": [
        {
          "maliyet_id": "KARGO",
          "ad": "Kargo",
          "tutar_kurus": 100,
          "dagitim_anahtari": "esit_satir",
          "anahtar_teyidi": true,
          "muhasebe_sinifi": "yonetimsel_analiz",
          "status_code": "DAGITILDI",
          "sonuc": {
            "agirliklar": [
              {
                "satir_id": "A",
                "agirlik": "1"
              },
              {
                "satir_id": "B",
                "agirlik": "1"
              },
              {
                "satir_id": "C",
                "agirlik": "1"
              }
            ],
            "toplam_agirlik": "3",
            "tabanlar_toplami_kurus": 99,
            "yuvarlama_kalani_kurus": 1,
            "satirlar": [
              {
                "satir_id": "A",
                "agirlik": "1",
                "exact_kota": {
                  "pay": "100",
                  "payda": "3",
                  "ifade": "100/3 kurus"
                },
                "taban_kurus": 33,
                "kesir_kalani": {
                  "pay": "1",
                  "payda": "3",
                  "ifade": "1/3"
                },
                "kalan_sirasi": 1,
                "kalan_kurus_aldi": true,
                "dagitilan_kurus": 34
              },
              {
                "satir_id": "B",
                "agirlik": "1",
                "exact_kota": {
                  "pay": "100",
                  "payda": "3",
                  "ifade": "100/3 kurus"
                },
                "taban_kurus": 33,
                "kesir_kalani": {
                  "pay": "1",
                  "payda": "3",
                  "ifade": "1/3"
                },
                "kalan_sirasi": 2,
                "kalan_kurus_aldi": false,
                "dagitilan_kurus": 33
              },
              {
                "satir_id": "C",
                "agirlik": "1",
                "exact_kota": {
                  "pay": "100",
                  "payda": "3",
                  "ifade": "100/3 kurus"
                },
                "taban_kurus": 33,
                "kesir_kalani": {
                  "pay": "1",
                  "payda": "3",
                  "ifade": "1/3"
                },
                "kalan_sirasi": 3,
                "kalan_kurus_aldi": false,
                "dagitilan_kurus": 33
              }
            ],
            "invariant": {
              "code": "MALIYET_TOPLAMI_KORUNDU",
              "beklenen_kurus": 100,
              "gerceklesen_kurus": 100,
              "saglandi": true
            }
          },
          "errors": [],
          "dagitilan_kurus": 100,
          "dagitilmayan_kurus": 0
        }
      ],
      "satirlar": [
        {
          "satir_id": "A",
          "ad": "Ürün A",
          "toplam_yuklenen_ortak_maliyet_kurus": 34
        },
        {
          "satir_id": "B",
          "ad": "Ürün B",
          "toplam_yuklenen_ortak_maliyet_kurus": 33
        },
        {
          "satir_id": "C",
          "ad": "Ürün C",
          "toplam_yuklenen_ortak_maliyet_kurus": 33
        }
      ],
      "toplam_ortak_maliyet_kurus": 100,
      "toplam_dagitilan_kurus": 100,
      "dagitilmayan_kurus": 0,
      "invariant": {
        "code": "GENEL_TOPLAM_MUTABAKATI",
        "ifade": "toplam_dagitilan_kurus + dagitilmayan_kurus = toplam_ortak_maliyet_kurus",
        "beklenen_kurus": 100,
        "gerceklesen_kurus": 100,
        "maliyet_toplamlari_kurus": 100,
        "satir_toplamlari_kurus": 100,
        "satir_toplamlari_saglandi": true,
        "saglandi": true
      },
      "errors": [],
      "warnings": [],
      "source_ids": [
        "KGK_TMS2",
        "KGK_TFRS_SET"
      ]
    },
    "net_satis_agirlikli": {
      "request": {
        "hesaplama_tarihi": "2026-07-26",
        "siparis_id": "ORNEK-2",
        "para_birimi": "TRY",
        "satirlar": [
          {
            "satir_id": "A",
            "ad": "Ürün A",
            "adet": 1,
            "net_satis_kurus": 100,
            "agirlik_gram": null,
            "desi_binde": null,
            "kullanici_agirligi": null
          },
          {
            "satir_id": "B",
            "ad": "Ürün B",
            "adet": 1,
            "net_satis_kurus": 300,
            "agirlik_gram": null,
            "desi_binde": null,
            "kullanici_agirligi": null
          }
        ],
        "ortak_maliyetler": [
          {
            "maliyet_id": "REKLAM",
            "ad": "Reklam",
            "tutar_kurus": 400,
            "dagitim_anahtari": "net_satis",
            "anahtar_teyidi": true,
            "muhasebe_sinifi": "yonetimsel_analiz"
          }
        ]
      },
      "response": {
        "ok": true,
        "contract_version": "1.0.0",
        "algorithm_version": "largest-remainder-ascii-v1.0.0",
        "hesaplama_tarihi": "2026-07-26",
        "siparis_id": "ORNEK-2",
        "para_birimi": "TRY",
        "scenario_type": "yonetimsel_senaryo",
        "status_code": "TAM_DAGITIM",
        "maliyetler": [
          {
            "maliyet_id": "REKLAM",
            "ad": "Reklam",
            "tutar_kurus": 400,
            "dagitim_anahtari": "net_satis",
            "anahtar_teyidi": true,
            "muhasebe_sinifi": "yonetimsel_analiz",
            "status_code": "DAGITILDI",
            "sonuc": {
              "agirliklar": [
                {
                  "satir_id": "A",
                  "agirlik": "100"
                },
                {
                  "satir_id": "B",
                  "agirlik": "300"
                }
              ],
              "toplam_agirlik": "400",
              "tabanlar_toplami_kurus": 400,
              "yuvarlama_kalani_kurus": 0,
              "satirlar": [
                {
                  "satir_id": "A",
                  "agirlik": "100",
                  "exact_kota": {
                    "pay": "40000",
                    "payda": "400",
                    "ifade": "40000/400 kurus"
                  },
                  "taban_kurus": 100,
                  "kesir_kalani": {
                    "pay": "0",
                    "payda": "400",
                    "ifade": "0/400"
                  },
                  "kalan_sirasi": 1,
                  "kalan_kurus_aldi": false,
                  "dagitilan_kurus": 100
                },
                {
                  "satir_id": "B",
                  "agirlik": "300",
                  "exact_kota": {
                    "pay": "120000",
                    "payda": "400",
                    "ifade": "120000/400 kurus"
                  },
                  "taban_kurus": 300,
                  "kesir_kalani": {
                    "pay": "0",
                    "payda": "400",
                    "ifade": "0/400"
                  },
                  "kalan_sirasi": 2,
                  "kalan_kurus_aldi": false,
                  "dagitilan_kurus": 300
                }
              ],
              "invariant": {
                "code": "MALIYET_TOPLAMI_KORUNDU",
                "beklenen_kurus": 400,
                "gerceklesen_kurus": 400,
                "saglandi": true
              }
            },
            "errors": [],
            "dagitilan_kurus": 400,
            "dagitilmayan_kurus": 0
          }
        ],
        "satirlar": [
          {
            "satir_id": "A",
            "ad": "Ürün A",
            "toplam_yuklenen_ortak_maliyet_kurus": 100
          },
          {
            "satir_id": "B",
            "ad": "Ürün B",
            "toplam_yuklenen_ortak_maliyet_kurus": 300
          }
        ],
        "toplam_ortak_maliyet_kurus": 400,
        "toplam_dagitilan_kurus": 400,
        "dagitilmayan_kurus": 0,
        "invariant": {
          "code": "GENEL_TOPLAM_MUTABAKATI",
          "ifade": "toplam_dagitilan_kurus + dagitilmayan_kurus = toplam_ortak_maliyet_kurus",
          "beklenen_kurus": 400,
          "gerceklesen_kurus": 400,
          "maliyet_toplamlari_kurus": 400,
          "satir_toplamlari_kurus": 400,
          "satir_toplamlari_saglandi": true,
          "saglandi": true
        },
        "errors": [],
        "warnings": [],
        "source_ids": [
          "KGK_TMS2",
          "KGK_TFRS_SET"
        ]
      }
    }
  }
}
