{
  "tool_id": "art-324-tvm-npv",
  "note": "golden_hash is empty until first golden-parity.test.mjs --update. Vector 1: periods mode, textbook 4-year annuity-style project cash flows discounted at 10%. Vectors 2-4: same dated cash flows under the three declared day-count conventions (30/360, ACT/360, ACT/365) — the CC-G convention matrix.",
  "vectors": [
    {
      "name": "npv_periods_textbook",
      "description": "Textbook project: -$1,000 initial outlay, $400/yr for 4 years, discounted at 10%.",
      "policy_parameters": {
        "mode": "periods",
        "cash_flows": [
          {
            "amount": -1000,
            "t": 0
          },
          {
            "amount": 400,
            "t": 1
          },
          {
            "amount": 400,
            "t": 2
          },
          {
            "amount": 400,
            "t": 3
          }
        ],
        "discount_rate_pct": 10
      },
      "output_payload": {
        "npv": -5.26,
        "discount_rate_pct": 10,
        "num_cash_flows": 4,
        "total_undiscounted": 200,
        "mode": "periods",
        "day_count_convention": "n/a (periods mode — t supplied directly)",
        "regulatory_basis": "Standard discounted cash flow NPV, textbook definition (Brealey/Myers Ch.2)",
        "note": "NPV = sum(CF_t / (1+r)^t). Periods mode: t is a caller-supplied period offset in the rate's own unit. Dates mode: t derived via declared day_count_convention (30/360, ACT/360, ACT/365, ACT/ACT-simplified) from valuation_date. Deterministic pow via Taylor-series exp/ln, no engine transcendentals."
      },
      "golden_hash": "4e2f534a04aaa9815eaf094048f78abcaea1a44bd76729d85e6ab2c56ec25444"
    },
    {
      "name": "npv_dates_act365",
      "description": "Dated cash flows under ACT/365: -$1,000 at valuation, $600 at +6mo, $600 at +1yr, discounted at 8%.",
      "policy_parameters": {
        "mode": "dates",
        "valuation_date": "2024-01-01",
        "day_count_convention": "ACT/365",
        "cash_flows": [
          {
            "amount": -1000,
            "date": "2024-01-01"
          },
          {
            "amount": 600,
            "date": "2024-07-01"
          },
          {
            "amount": 600,
            "date": "2025-01-01"
          }
        ],
        "discount_rate_pct": 8
      },
      "output_payload": {
        "npv": 132.85,
        "discount_rate_pct": 8,
        "num_cash_flows": 3,
        "total_undiscounted": 200,
        "mode": "dates",
        "day_count_convention": "ACT/365",
        "regulatory_basis": "Standard discounted cash flow NPV, textbook definition (Brealey/Myers Ch.2)",
        "note": "NPV = sum(CF_t / (1+r)^t). Periods mode: t is a caller-supplied period offset in the rate's own unit. Dates mode: t derived via declared day_count_convention (30/360, ACT/360, ACT/365, ACT/ACT-simplified) from valuation_date. Deterministic pow via Taylor-series exp/ln, no engine transcendentals."
      },
      "golden_hash": "19cc2c8f0866a434f832df8a7153a8c629a200906275cae6ad2a8b72a99fa8b1"
    },
    {
      "name": "npv_dates_30_360",
      "description": "Same dated cash flows as npv_dates_act365, under the 30/360 convention.",
      "policy_parameters": {
        "mode": "dates",
        "valuation_date": "2024-01-01",
        "day_count_convention": "30/360",
        "cash_flows": [
          {
            "amount": -1000,
            "date": "2024-01-01"
          },
          {
            "amount": 600,
            "date": "2024-07-01"
          },
          {
            "amount": 600,
            "date": "2025-01-01"
          }
        ],
        "discount_rate_pct": 8
      },
      "output_payload": {
        "npv": 132.91,
        "discount_rate_pct": 8,
        "num_cash_flows": 3,
        "total_undiscounted": 200,
        "mode": "dates",
        "day_count_convention": "30/360",
        "regulatory_basis": "Standard discounted cash flow NPV, textbook definition (Brealey/Myers Ch.2)",
        "note": "NPV = sum(CF_t / (1+r)^t). Periods mode: t is a caller-supplied period offset in the rate's own unit. Dates mode: t derived via declared day_count_convention (30/360, ACT/360, ACT/365, ACT/ACT-simplified) from valuation_date. Deterministic pow via Taylor-series exp/ln, no engine transcendentals."
      },
      "golden_hash": "9b87f6e9050a7698c93edee2990c90682cf87dc9f0f50c9948fbd307c82113ae"
    },
    {
      "name": "npv_dates_act360",
      "description": "Same dated cash flows as npv_dates_act365, under the ACT/360 convention.",
      "policy_parameters": {
        "mode": "dates",
        "valuation_date": "2024-01-01",
        "day_count_convention": "ACT/360",
        "cash_flows": [
          {
            "amount": -1000,
            "date": "2024-01-01"
          },
          {
            "amount": 600,
            "date": "2024-07-01"
          },
          {
            "amount": 600,
            "date": "2025-01-01"
          }
        ],
        "discount_rate_pct": 8
      },
      "output_payload": {
        "npv": 131.95,
        "discount_rate_pct": 8,
        "num_cash_flows": 3,
        "total_undiscounted": 200,
        "mode": "dates",
        "day_count_convention": "ACT/360",
        "regulatory_basis": "Standard discounted cash flow NPV, textbook definition (Brealey/Myers Ch.2)",
        "note": "NPV = sum(CF_t / (1+r)^t). Periods mode: t is a caller-supplied period offset in the rate's own unit. Dates mode: t derived via declared day_count_convention (30/360, ACT/360, ACT/365, ACT/ACT-simplified) from valuation_date. Deterministic pow via Taylor-series exp/ln, no engine transcendentals."
      },
      "golden_hash": "e96f082ee5772e4ec55a8fc8f013ae0f366fa4f71b60a3698f24751c5b52c347"
    }
  ]
}
