{
  "arac": "net-bugunku-deger",
  "surum": "1.2.0",
  "kategori": "finans",
  "deterministik": true,
  "offline": true,
  "calistirma": {
    "ortamlar": ["Tarayıcı (sayfa yüklendikten sonra)", "Node.js 18+ vm bağlamı"],
    "global_sembol": "window.NPV.npvHesapla",
    "uyumluluk_sembolü": "window.npvHesapla",
    "script_id": "npv-core",
    "html_konumlari": {
      "kok": "net-bugunku-deger.html",
      "yayin": "arac/net-bugunku-deger/index.html"
    },
    "yukleme_kosulu": "Tarayıcı global'i yalnız HTML sayfasındaki #npv-core betiği çalıştıktan, pratikte sayfa yüklendikten sonra çağrılır.",
    "node_notu": "Node.js 18+ ortamında HTML metninden #npv-core içeriği çıkarılır ve window nesnesi sağlanan bir vm bağlamında çalıştırılır."
  },
  "girdiler": [
    {
      "ad": "nakitAkislari",
      "tip": "number[]",
      "birim": "para",
      "zorunlu": true,
      "aciklama": "t=0'dan başlayan dönem sonu net nakit akışları",
      "min_uzunluk": 2
    },
    {
      "ad": "iskontoOrani",
      "tip": "number",
      "birim": "yuzde",
      "zorunlu": true,
      "kisit": "r > -100"
    },
    {
      "ad": "oranTuru",
      "tip": "enum",
      "degerler": ["donemsel", "yillikEfektif"],
      "zorunlu": false,
      "varsayilan": "donemsel"
    },
    {
      "ad": "donemUzunlugu",
      "tip": "enum",
      "degerler": ["yillik", "ceyreklik", "aylik"],
      "zorunlu": false,
      "varsayilan": "yillik"
    },
    {
      "ad": "geriOdemeZamanlamasi",
      "tip": "enum",
      "degerler": ["donemSonu", "donemIciEsit"],
      "zorunlu": false,
      "varsayilan": "donemSonu",
      "aciklama": "Yalnız basit ve iskonto edilmiş geri ödemeyi etkiler. donemSonu ilk sıfır/pozitif kümülatif akışın tam dönem indeksini; donemIciEsit ayrıca eşit dönem içi yayılım varsayımıyla doğrusal kesri döndürür."
    },
    {
      "ad": "paraBirimi",
      "tip": "enum",
      "degerler": ["TRY", "USD", "EUR"],
      "zorunlu": false,
      "varsayilan": "TRY",
      "aciklama": "Yalnız gösterim içindir."
    },
    {
      "ad": "enflasyon",
      "tip": "number",
      "birim": "yuzde_donem",
      "zorunlu": false,
      "kisit": "i > -100"
    },
    {
      "ad": "yenidenYatirimOrani",
      "tip": "number",
      "birim": "yuzde_donem",
      "zorunlu": false,
      "kisit": "r_reinv > -100"
    },
    {
      "ad": "finansmanOrani",
      "tip": "number",
      "birim": "yuzde_donem",
      "zorunlu": false,
      "varsayilan": "hesaplanan dönemsel iskonto oranı",
      "kisit": "r_finans > -100"
    }
  ],
  "cikti_semasi": {
    "npv": {
      "tip": "number",
      "birim": "meta.paraBirimi",
      "olcek": "ham JavaScript Number"
    },
    "karar": {
      "tip": "KABUL|KAYITSIZ|RED"
    },
    "kararGerekcesi": {
      "tip": "string"
    },
    "irr": {
      "tip": "number|null",
      "birim": "yuzde",
      "olcek": "yüzde puan; 4 ondalığa yuvarlanmış",
      "aciklama": "Yalnız sıfır olmayan nakit akışlarında tam bir işaret değişimi ve desteklenen aralıkta güvenli bracket varsa tek IRR döner."
    },
    "irr_yuzde": {
      "tip": "number|null",
      "birim": "yuzde",
      "olcek": "yüzde puan; 4 ondalığa yuvarlanmış",
      "aciklama": "Yalnız sıfır olmayan nakit akışlarında tam bir işaret değişimi ve desteklenen aralıkta güvenli bracket varsa tek IRR döner."
    },
    "irrNedeni": {
      "tip": "string|null",
      "aciklama": "IRR null olduğunda kök yokluğunu (işaret değişimi yok), desteklenen aralık dışında olasılığını veya çoklu işaret değişiminde tek güvenilir IRR raporlanmamasını birbirinden ayırır."
    },
    "irrIsaretDegisimiSayisi": {
      "tip": "integer",
      "birim": "adet",
      "olcek": "tam sayı"
    },
    "irrIterasyonSayisi": {
      "tip": "integer",
      "birim": "iterasyon",
      "olcek": "tam sayı"
    },
    "geriOdemeSuresi": {
      "tip": "number|null",
      "birim": "donem",
      "olcek": "donemSonu modunda tam dönem; donemIciEsit modunda ondalık dönem"
    },
    "geriOdemeSuresi_donem": {
      "tip": "number|null",
      "birim": "donem",
      "olcek": "donemSonu modunda tam dönem; donemIciEsit modunda ondalık dönem"
    },
    "indirgenmisGeriOdemeSuresi": {
      "tip": "number|null",
      "birim": "donem",
      "olcek": "donemSonu modunda tam dönem; donemIciEsit modunda ondalık dönem"
    },
    "indirgenmisGeriOdemeSuresi_donem": {
      "tip": "number|null",
      "birim": "donem",
      "olcek": "donemSonu modunda tam dönem; donemIciEsit modunda ondalık dönem"
    },
    "karlilikEndeksi": {
      "tip": "number|null",
      "birim": "boyutsuz_oran",
      "olcek": "ondalık oran"
    },
    "mirr": {
      "tip": "number|null",
      "birim": "yuzde",
      "olcek": "yüzde puan; 4 ondalığa yuvarlanmış"
    },
    "mirr_yuzde": {
      "tip": "number|null",
      "birim": "yuzde",
      "olcek": "yüzde puan; 4 ondalığa yuvarlanmış"
    },
    "mirrNedeni": {
      "tip": "string|null"
    },
    "reelNpv": {
      "tip": "number|null",
      "birim": "meta.paraBirimi",
      "olcek": "ham JavaScript Number, t=0 satın alma gücü"
    },
    "reelIskontoOrani_yuzde": {
      "tip": "number|null",
      "birim": "yuzde",
      "olcek": "yüzde puan; ham JavaScript Number"
    },
    "donemselIskontoOrani_yuzde": {
      "tip": "number",
      "birim": "yuzde",
      "olcek": "yüzde puan; ham JavaScript Number"
    },
    "oranDonusumu": {
      "tip": "string"
    },
    "donemTablosu": {
      "tip": "object[]",
      "alanlar": {
        "t": {
          "tip": "integer",
          "birim": "donem",
          "olcek": "t=0'dan başlayan tam sayı indeks"
        },
        "nakitAkisi": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "ham JavaScript Number"
        },
        "iskontoFaktoru": {
          "tip": "number",
          "birim": "boyutsuz_oran",
          "olcek": "ondalık çarpan; ham JavaScript Number"
        },
        "bugunkuDeger": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "ham JavaScript Number"
        },
        "kumulatifBD": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "ham JavaScript Number"
        },
        "kumulatifNominal": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "ham JavaScript Number"
        }
      }
    },
    "duyarlilik": {
      "tip": "object[]",
      "alanlar": {
        "degisimYuzdePuani": {
          "tip": "number",
          "birim": "yuzde_puani",
          "olcek": "tam sayı senaryo farkı"
        },
        "iskontoOraniYuzde": {
          "tip": "number",
          "birim": "yuzde",
          "olcek": "yüzde puan; ham JavaScript Number"
        },
        "donemselOranYuzde": {
          "tip": "number",
          "birim": "yuzde",
          "olcek": "yüzde puan; ham JavaScript Number"
        },
        "npv": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "ham JavaScript Number"
        }
      }
    },
    "uyarilar": {
      "tip": "string[]"
    },
    "meta": {
      "tip": "object",
      "alanlar": {
        "surum": {
          "tip": "string"
        },
        "deterministik": {
          "tip": "boolean"
        },
        "donemSonuVarsayimi": {
          "tip": "boolean",
          "aciklama": "NPV ve dönem tablosu nakit akışlarını dönem sonunda kabul eder."
        },
        "geriOdemeZamanlamasi": {
          "tip": "donemSonu|donemIciEsit"
        },
        "paraBirimi": {
          "tip": "TRY|USD|EUR"
        },
        "kararEpsilonPara": {
          "tip": "number",
          "birim": "meta.paraBirimi",
          "olcek": "1e-9 mutlak para toleransı",
          "aciklama": "Yalnız NPV kararının KAYITSIZ sınıflandırması için kullanılır; IRR ve geri ödeme geçişinde kullanılmaz."
        },
        "irrPolitikasi": {
          "tip": "string",
          "aciklama": "Tek ve çoklu işaret değişimi davranışını açıklar."
        },
        "irrDesteklenenAralik_yuzde": {
          "tip": "number[2]",
          "birim": "yuzde",
          "olcek": "[alt, üst] yüzde puan; iki uç dahil"
        },
        "irrBagilArtikToleransi": {
          "tip": "number",
          "birim": "boyutsuz_oran",
          "olcek": "1e-12; |NPV| / Σ|CF_t/(1+r)^t|"
        },
        "irrOranAraligiToleransi": {
          "tip": "number",
          "birim": "ondalik_oran",
          "olcek": "1e-12 oran aralığı genişliği"
        }
      }
    }
  },
  "hata_semasi": {
    "tip": "{hata:{kod:string,mesaj:string}}",
    "kodlar": {
      "GECERSIZ_DIZI": "nakitAkislari bir dizi değildir veya enum/gösterim seçimi geçersizdir",
      "GECERSIZ_ORAN": "zorunlu ya da isteğe bağlı bir oran sonlu değildir, −100 sınırını ihlal eder veya sonlu hesap üretmez",
      "YETERSIZ_DONEM": "dizi t=0 dahil en az iki sonlu sayısal akış sağlamaz"
    },
    "exception_firlatir": false
  },
  "ornek_cagri": {
    "girdi": {
      "nakitAkislari": [-1000, 400, 400, 400],
      "iskontoOrani": 10
    },
    "cikti": {
      "npv": -5.259203606311189,
      "karar": "RED",
      "irr_yuzde": 9.7010,
      "geriOdemeSuresi_donem": 3,
      "indirgenmisGeriOdemeSuresi_donem": null
    },
    "kismi_cikti": true,
    "test": "T1",
    "fiilen_kosuldu": true
  },
  "formul_aciklamasi": "NPV = Σ CF_t/(1+r)^t, t=0..n ve t=0 faktörü 1'dir; NPV'nin dönem-sonu iskonto mantığı zamanlama seçiminden etkilenmez. Yıllık efektif oran aylık/çeyreklik döneme (1+r_yıllık)^(1/m)-1 ile çevrilir; r/m kullanılmaz. IRR, NPV(r)=0 denklemidir. Sıfır olmayan akışlarda tam bir işaret değişimi varsa −0.999999, r=0 ve 10 ankrajları değerlendirilir; kök desteklenen aralıktaysa zıt işaretli uçlar doğrudan bisection ile çözülür. Birden fazla işaret değişiminde sıfır veya birden çok gerçek kök olabileceği için irr_yuzde null döner ve MIRR önerilir. IRR artık kontrolü |NPV| ≤ 1e-12 × Σ|CF_t/(1+r)^t| bağıl ölçütüyle, ayrıca 1e-12 oran-aralığı toleransıyla yapılır; sabit ön tarama gridi yoktur. Geri ödeme donemSonu modunda gerçek kümülatif akışın ilk sıfır/pozitif olduğu tam dönem k'dir; yalnız donemIciEsit açıkça seçilirse (k−1)+|kümülatif_(k−1)|/CF_k doğrusal kesri kullanılır. Aynı seçim iskonto edilmiş akışlara uygulanır. PI = PV(pozitif gelecek akışlar)/|PV(negatif akışlar)|. MIRR'de üs n, t=0 ile son akış arasındaki dönem sayısıdır (dizi uzunluğu−1). Fisher: r_reel=(1+r_nominal)/(1+enflasyon)-1; reel NPV hem reel akış hem reel oranla hesaplanır.",
  "oran_donusumu": {
    "yontem": "efektif_kok",
    "formul": "r_donemsel=(1+r_yillik)^(1/m)-1",
    "m": {
      "aylik": 12,
      "ceyreklik": 4,
      "yillik": 1
    },
    "nominal_apr_bolmesi_kullanilir": false
  },
  "kaynaklar": [
    {
      "iddia": "NPV, t=0'ın tam değeri, NPV karar kuralı, IRR ve kârlılık endeksi",
      "url": "https://www.extension.iastate.edu/agdm/wholefarm/html/c5-240.html",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; HTTP 200 ve içerik doğrulandı"
    },
    {
      "iddia": "Basit ve iskonto edilmiş geri ödeme: dönem-sonu akışında tam dönem; akışın dönem içine eşit yayıldığı ayrıca varsayılırsa doğrusal kesir",
      "url": "https://www.accaglobal.com/gb/en/student/exam-support-resources/foundation-level-study-resources/ffm/ffm-technical-articles/discounted-payback.html",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; HTTP 200 ve içerik doğrulandı"
    },
    {
      "iddia": "MIRR finansman/yeniden yatırım yaklaşımı ve 1/(N−1) üssü; t=0..n için 1/n",
      "url": "https://docs.oasis-open.org/office/OpenDocument/v1.4/os/part4-formula/OpenDocument-v1.4-os-part4-formula.html#MIRR",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; OASIS OpenFormula 1.4 HTTP 200 ve içerik doğrulandı"
    },
    {
      "iddia": "Tam Fisher eşitliği: (1+nominal)=(1+reel)(1+enflasyon)",
      "url": "https://2012books.lardbucket.org/books/theory-and-applications-of-macroeconomics/s20-14-the-fisher-equation-nominal-an.html",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; HTTP 200 ve formül içeriği doğrulandı"
    },
    {
      "iddia": "Efektif yıllık bileşikleşme ve dönemsel kök dönüşümünün cebirsel dayanağı",
      "url": "https://openstax.org/books/principles-finance/pages/8-4-stated-versus-effective-rates",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→web arama→curl; HTTP 200 ve bileşikleşme eşitliği doğrulandı"
    },
    {
      "iddia": "Descartes işaret kuralı; işaret değişimi pozitif gerçek kök sayısına üst sınırdır",
      "url": "https://math.hmc.edu/funfacts/descartes-rule-of-signs/",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; HTTP 200 ve teorem metni doğrulandı"
    },
    {
      "iddia": "Bisection yönteminde zıt işaretli uçlar ve önceden belirlenen doğruluk",
      "url": "https://dlmf.nist.gov/3.8",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; NIST HTTP 200 ve yöntem metni doğrulandı"
    },
    {
      "iddia": "Resmî Türkçe terimler: Net Bugünkü Değer, İç Verim Oranı, İskonto Edilmiş Geri Ödeme Süresi, Kârlılık Endeksi",
      "url": "https://www.kgk.gov.tr/Portalv2Uploads/files/Duyurular/v2/S%C4%B1nav/24Kasim2019BDSSoruveCevaplar/BirinciOturumAKitapcigi.pdf",
      "dogrulandi": true,
      "dogrulama_yontemi": "AGY→GLM→curl; KGK PDF HTTP 200 ve basılı s.19 metni doğrulandı"
    },
    {
      "iddia": "[KAYNAK-DOĞRULANMADI] IRR bağıl artık/oran toleransları, 300 iterasyon, arama aralığı; NPV karar toleransı; ±1/±2/±5 duyarlılık senaryoları ve 600 dönem ekran eşiği",
      "url": "https://dlmf.nist.gov/3.8",
      "dogrulandi": false,
      "dogrulama_yontemi": "Bisection yöntemi doğrulandı; NIST sabit ön tarama çözünürlüğünü desteklemez. Sayısal eşikler ile duyarlılık adımları dış standart/karar eşiği değil, ürün ve gösterim tercihleridir."
    }
  ],
  "sinirlar": [
    "NPV ve dönem tablosunda nakit akışları dönem sonunda gerçekleşir; t=0 iskonto edilmez.",
    "Geri ödeme varsayılan donemSonu modunda tam dönemdir; doğrusal kesir yalnız donemIciEsit açıkça seçilip dönem içine eşit yayılım ayrıca varsayıldığında kullanılır.",
    "İşaret değişimi yoksa r > −%100 alanında gerçek IRR kökü yoktur; birden fazla işaret değişiminde tek güvenilir IRR raporlanmaz çünkü sıfır veya birden çok gerçek kök olabilir ve MIRR önerilir.",
    "Tam bir işaret değişiminde −0.999999, r=0 ve 10 ankrajları değerlendirilir; tek kök desteklenen −%99,9999..%1000 aralığındaysa doğrudan bracket ve bisection ile çözülür, değilse aralık dışında olabilir nedeni döner.",
    "IRR kök artığı nakit akışı ölçeğine bağlı bağıl toleransla sınanır; geri ödeme gerçek kümülatif işareti kullanır. 1e-9 para epsilonu yalnız NPV karar sınıflandırmasına aittir.",
    "±1/±2/±5 yüzde puan duyarlılık adımları dış standart veya karar eşiği değil, kullanıcıya gösterilen senaryo seçimidir.",
    "PI özellikle tek dönem sermaye kısıtı altında bölünebilir bağımsız projeleri sıralamada yardımcıdır; birbirini dışlayan eş ömürlü projelerde genel amaç en yüksek NPV/toplam değer, farklı ömürlerde eşdeğer yıllık değer yaklaşımıdır. NPV ana değer yaratma ölçütüdür.",
    "600'den fazla dönemde hesap tam yapılır, HTML tablosu ilk 250 ve son 25 satıra kırpılır.",
    "Tüm hesaplar JavaScript Number (IEEE-754 double) ile ve yuvarlanmamış ara değerlerle yapılır."
  ]
}
