Source: https://guthlabs.ai/docs/instruments/npv-calculator/

instrument / verified-clean

# NPV Calculator

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/npv-calculator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/npv-calculator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/npv-calculator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/npv-calculator/qualification/>)

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Finance, Economics & Business (educational only — never individualized investment, tax, or legal advice)

**Tranche**: tranche-4

**Evidence ID**: t4-152

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The mathematical formula is correct under the stated timing and unit assumptions, but the instrument needs an explicit initial_outlay input and documented period indexing, rate representation, and rate/cash-flow time-unit matching before release. The honest label should also disclose these timing and compounding assumptions in addition to stating that flows and rates are treated as certain.

### Formula and scope findings

- The formula is standard only if CF_t represents the cash flow at the end of period t, with t starting at 1, and initial_outlay is a separate time-zero amount. The specification does not define this timing convention.

- initial_outlay appears in the formula but is missing from the listed inputs; it must be an explicit input.

- The specification does not state whether the discount rate is entered as a decimal or percentage, nor that its compounding period must match the cash-flow periods.

### Unit assumptions

- The discount rate is entered as a decimal per cash-flow period, such as 0.10 for 10% per year or 0.01 for 1% per month.

- Cash flows are equally spaced and indexed t=1,2,...; initial_outlay occurs at t=0 and is entered as a positive amount that is subtracted.

- The discount rate's time unit and compounding convention match the cash-flow periods; annual rates must not be applied directly to monthly cash flows without conversion.

- Positive cash flows are inflows and negative cash flows are outflows.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

The input discount_rate=-1 produces zero denominators and therefore undefined NPV and discounted cash flows. The specification does not state input validation, so a plain implementation could incorrectly emit Infinity, NaN, or another non-numeric result. The specification also has no actual piecewise formula branch and leaves the sign convention for initial_outlay potentially ambiguous.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "discount_rate": 0.1,
    "cash_flows": [
      110,
      121
    ],
    "initial_outlay": 200,
    "period_unit": "year"
  },
  "expected_outputs": {
    "npv": 0,
    "discounted_cf_table": [
      {
        "period": 1,
        "cash_flow": 110,
        "discounted_cash_flow": 100
      },
      {
        "period": 2,
        "cash_flow": 121,
        "discounted_cash_flow": 100
      }
    ]
  },
  "working": "Rate = 0.10. Period 1: 110/(1+0.10)^1 = 110/1.10 = 100. Period 2: 121/(1+0.10)^2 = 121/1.21 = 100. Sum of discounted cash flows = 100 + 100 = 200. NPV = 200 - 200 initial outlay = 0."
}
````

## Related workflows

[Investor's Valuation Benchproject math](<https://guthlabs.ai/docs/instrument-workflows/valuation-bench/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_CLEAN`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
