{
  "category": "Financial functions",
  "display_name": "PPMT",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.PPMT",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20131",
        "20527",
        "?"
      ],
      "larger_numeric": 0,
      "last_bit": 8,
      "matched": 25,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 33,
      "unread": 0,
      "worst_ulp": 3
    },
    "detail": "Of 237 recorded answers (33 in the answer bank and 204 workbook cells), 59 do not match: 18 differ by more than 16 ULP, 41 differ by at most 16 ULP.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "differs",
    "state_label": "Known larger differences",
    "summary": "Known larger differences on 59 of 237 recorded answers",
    "workbook_corpus": {
      "cells": 204,
      "larger_numeric": 18,
      "last_bit": 33,
      "matched": 153,
      "worst_ulp": 10
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/financial.rs#L194-L197"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/financial::tv_out",
        "catalogue/financial::timing",
        "ported/excel_numeric::backend::sqrt",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::asuint64",
        "ported/excel_numeric::asdouble",
        "ported/excel_numeric::top12",
        "ported/excel_numeric::top16",
        "ported/excel_numeric::c2",
        "ported/excel_numeric::c3",
        "ported/excel_numeric::c4",
        "ported/excel_numeric::c5",
        "ported/excel_numeric::specialcase",
        "ported/excel_numeric::excel_expm1_spilled",
        "ported/excel_numeric::expm1_internal_graph",
        "ported/excel_numeric::exp_portable",
        "ported/excel_numeric::excel_pow_positive",
        "ported/excel_numeric::excel_pow_chain",
        "ported/excel_numeric::excel_x87_add",
        "ported/excel_numeric::excel_x87_sub",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric::excel_x87_div",
        "ported/excel_numeric::excel_x87_recip",
        "ported/excel_numeric::log_general_hi_lo",
        "ported/excel_numeric::excel_expm1",
        "ported/excel_numeric::excel_log1p",
        "ported/excel_numeric::excel_log1p_atanh",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::add",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div",
        "ported/excel_numeric/x87::recip",
        "ported/excel_numeric/x87_chains::pow2_positive",
        "ported/excel_numeric/x87_chains::pow2",
        "ported/excel_numeric/x87_chains::exp_ext",
        "ported/excel_numeric/x87_chains::exp_with",
        "ported/excel_numeric/x87_chains::excel_exp",
        "ported/excel_numeric/x87_chains::log_with",
        "ported/excel_numeric/x87_chains::excel_log",
        "ported/financial_time_value_family::PaymentTiming::factor",
        "ported/financial_time_value_family::validate_finite",
        "ported/financial_time_value_family::growth",
        "ported/financial_time_value_family::annuity_term",
        "ported/financial_time_value_family::balance_equation",
        "ported/financial_time_value_family::pmt",
        "ported/financial_time_value_family::values_bracket_root",
        "ported/financial_time_value_family::bisect_rate_bracket",
        "ported/financial_time_value_family::search_rate_bracket_from_zero",
        "ported/financial_time_value_family::rate",
        "ported/financial_time_value_family::polish_root",
        "ported/financial_time_value_family::rate_root",
        "ported/financial_time_value_family::end_payment_quotient",
        "ported/financial_time_value_family::end_payment_parts",
        "ported/financial_time_value_family::ipmt",
        "ported/financial_time_value_family::ppmt",
        "ported/power_fn::exact_integer_magnitude",
        "ported/power_fn::accept_negative_base_odd_root",
        "ported/power_fn::binexp_positive",
        "ported/power_fn::power_kernel"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/financial.rs#L194-L197",
      "state": "differs",
      "suite": null,
      "summary": "Known larger differences on 59 of 237 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.PPMT.json",
  "name": "PPMT",
  "notes": [
    {
      "basis": "fv 0, type 0: IPMT 95 of 95 and PPMT 74 of 74 recorded rows, plus 64 of 64 fresh PPMT(r,1,1,pv) and PPMT(r,1,2,pv) readings. Nonzero fv, type 0: PPMT 25 of 27, IPMT 18 of 27. Over every recorded row in the evidence repository IPMT matches 48 of 57 and PPMT 26 of 33. Replaying the formulas in exact rational arithmetic, with exp and ln correctly rounded, gives all 12 PPMT and all 12 IPMT answers of the loan below.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "section UPDATE",
          "note": "research write-up",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "6c6cbd31c960fe1ac07d5cce9cb33ca9d7d86cf5",
          "locator": "end_payment_parts",
          "note": "the formulas in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/financial_time_value_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "6c6cbd31c960fe1ac07d5cce9cb33ca9d7d86cf5",
          "locator": "ipmt_and_ppmt_use_the_quotient_of_pmt",
          "note": "eight catalogue readings; failed before the change",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.IPMT",
        "FUNC.PPMT"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-IPMT-001",
      "open": [
        "Nonzero fv: PMT's open numerator of q carries through.",
        "type 1: PMT's open factor K carries through."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=IPMT(0.05/12,12,360,200000)",
          "correct": {
            "bits": "0xc089b0b1b69cc35e",
            "display": "-822.0867740866777",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc089b0b1b69cc35f",
            "display": "-822.0867740866778",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 750, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=PPMT(0.05/12,12,360,200000)",
          "correct": {
            "bits": "0xc06f71ce9e3ca452",
            "display": "-251.5564719376003",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc06f71ce9e3ca456",
            "display": "-251.5564719376004",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 749, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, take L and q from PMT (FN-PMT-001; with nonzero fv, q = RN(N/em) with an fv numerator that is open). For period k of nper with end-of-period payments, m = nper-k+1, t = -(m*L), em_m is the expm1 of t by the route in FN-PMT-001, and u = exp(t) stored. Then IPMT = -RN(RN(RN(q*em_m) - RN(fv*u))*rate) and PPMT = RN(RN(RN(q - fv)*u)*rate). Interest takes the Kahan expm1, and principal takes the exponential it starts from: 1+em_m fits 36 of 74 principal rows where u fits all 74. So neither answer is the payment less the other (FN-PPMT-001).",
      "status": "measured",
      "title": "IPMT and PPMT reuse PMT's quotient, one through expm1 and the other through exp"
    },
    {
      "basis": "Twelve recorded periods of one loan, read from the catalogue capture, compared with exact values and with Excel's own PMT and IPMT by binary64 subtraction, recomputed for this note.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up; finding F4 gives 4 and 8 of 12 periods, and the capture gives the 2 and 7 stated here",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
          "locator": null,
          "note": "recorded answers of the 30-year loan block",
          "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.PMT",
        "FUNC.PPMT"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-PPMT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=PPMT(0.05/12,1,360,200000)",
          "correct": {
            "bits": "0xc06e09eace05071f",
            "display": "-240.30991269094463",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc06e09eace050723",
            "display": "-240.30991269094474",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 727, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "On the 30-year loan PPMT(0.05/12,k,360,200000), for k from 1 to 12 every PPMT answer is 3 to 5 units above the correctly rounded principal payment, while PMT is 1 unit away. Excel's own answers do not satisfy the identity: in binary64, PMT - IPMT equals PPMT in 2 of the 12 periods and PMT - PPMT equals IPMT in 7. So reproducing PPMT from PMT and IPMT misses the last bits. FN-IPMT-001 gives the route Excel takes instead.",
      "status": "measured",
      "title": "PPMT is not PMT minus IPMT, and sits further from the exact value than PMT"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[IPMT](FUNC.IPMT.md) returns interest and [PMT](FUNC.PMT.md) the entire payment. [CUMPRINC](FUNC.CUMPRINC.md) totals principal over an interval, with a separately recorded route; [ISPMT](FUNC.ISPMT.md) belongs to a level-principal schedule.\n\n\n\n\n",
    "how-to-implement": "\nFor the measured **zero-fv, end-timing** route, reuse L, total-period em_n and the stored q from the [IPMT recipe](FUNC.IPMT.md#how-to-implement). Let R denote its stored arithmetic operation.\n\n1. Obtain PMT and perform the IPMT guard path, including period validation. Exactly zero rate uses the linear principal result.\n2. For the eligible nonzero-rate helper, form the binary64 remaining count `m=(nper-per)+1` and argument `t=-(m*L)`, with each named operation stored.\n3. Obtain the stored public exponential `u=EXP(t)`. Do not replace it by `1+em_m`: the note’s 74 principal controls distinguish those values.\n4. At fv=0 return `R(R(q*u)*r)`. With a nonzero fv, the current candidate is `R(R(R(q-fv)*u)*r)`, but q’s nonzero-fv numerator retains the limitation described on IPMT.\n\nFor the second-period example, the reconstruction has q `-2777.7777777777774`, u `0.8` and principal `-555.5555555555555`. Its PMT is `-694.4444444444443` and interest `-138.88888888888886`; ordinary binary64 subtraction of those two produces `-555.5555555555554` instead. These are worked reconstruction values, not a new Excel run.\n\nThe source retains 138 of 138 zero-fv principal controls and 25 of 27 nonzero-fv controls for its end route. Beginning timing and helper-declined cases use a separate backward-discount candidate, rather than simply subtracting interest. Its current form discounts `payment-carried_future_interest` over the periods remaining, with a beginning-timing adjustment to that carried interest.\n\nThe logarithm’s exceptions, nonzero-fv numerator, beginning-timing body and other recorded residuals remain open. Reusing PMT’s newer balance fold without separately validating these period helpers would transfer a result outside its established scope. The separately pinned calculator can predate the cited source changes.\n\n\n",
    "quirks": "\nUse a periodic rate and a matching period count. Positive principal and negative repayments describe a loan. Per must lie between one and nper; the current helper checks it through IPMT after obtaining PMT.\n\nPPMT’s current first operation is a PMT call. It can therefore return a PMT domain error where IPMT’s beginning-first-period guard returns zero. At a valid beginning first period the whole payment is principal.\n\nThe mathematical identity `PPMT=PMT-IPMT` does not reproduce all recorded Excel bits. FN-PPMT-001 retains twelve loan periods where only two such binary64 subtractions equal the recorded principal. Summing principal over a schedule and reproducing CUMPRINC are separate numerical tasks.\n\n\n",
    "sources": "\n- [Microsoft: PPMT function](https://support.microsoft.com/en-us/excel/functions/ppmt-function), opened 6 November 2026; syntax, documented argument rules and errors.\n- [R31 financial implementation](https://github.com/DnaCalc/DnaCalc/blob/481f4ab85d3bf5a95b6daf959bb75ccb2f8b40f8/crates/calc-func/src/ported/financial_time_value_family.rs); `end_payment_quotient`, `end_payment_parts`, `ipmt` and `ppmt`, including distinct guard and fallback paths.\n- [Recorded stage controls](https://github.com/DnaCalc/DnaCalc/blob/481f4ab85d3bf5a95b6daf959bb75ccb2f8b40f8/crates/calc-func/tests/f3_financial.rs); payment-part and beginning-period controls. The notes below retain captured examples and their environments.\n\n",
    "try-it": "\n`=PPMT(0.25,2,2,1000)` is about `-555.5555556`, the final principal repayment on a two-period loan. The first principal repayment is about `-444.4444444`, so the mathematical pair repays the original thousand.\n\n`=PPMT(0,2,4,1000)` returns `-250`; at zero rate all four equal payments are principal.\n\n\n",
    "version-differences": "The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 19929 | Windows, bitness not recorded, CPU not recorded | 396 |\n| 20131 | Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics | 7 |\n\nThe record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.PPMT.json).",
    "what-it-does": "\n`PPMT(rate,per,nper,pv,[fv],[type])` returns the principal part of one payment in a fixed-rate, equal-payment annuity. Period per starts at one and precedes nper in the argument list. Omitted fv and type are zero; type one pays at the beginning.\n\n\n"
  },
  "signature": {
    "display": "PPMT(rate, per, nper, pv, [fv], [type])",
    "parameters": [
      {
        "description": null,
        "name": "rate",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "per",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "nper",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "pv",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "fv",
        "optional": true,
        "repeats": false
      },
      {
        "description": null,
        "name": "type",
        "optional": true,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 6,
        "min": 4
      },
      "category": "Financial functions",
      "classification": {
        "arg_preparation_profile": "RefsVisibleInAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Principal part of one payment on a loan or investment",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the payment on the principal for an investment for a given period",
        "microsoft_url": "https://support.microsoft.com/en-us/office/ppmt-function-c370d9e3-7749-4ca4-beea-b06c6ac95e1b"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "PPMT"
        },
        {
          "locale": "bg-BG",
          "name": "PPMT"
        },
        {
          "locale": "cs-CZ",
          "name": "PLATBA.ZÁKLAD"
        },
        {
          "locale": "da-DK",
          "name": "H.YDELSE"
        },
        {
          "locale": "de-DE",
          "name": "KAPZ"
        },
        {
          "locale": "el-GR",
          "name": "PPMT"
        },
        {
          "locale": "en-AU",
          "name": "PPMT"
        },
        {
          "locale": "en-GB",
          "name": "PPMT"
        },
        {
          "locale": "en-US",
          "name": "PPMT"
        },
        {
          "locale": "es-ES",
          "name": "PAGOPRIN"
        },
        {
          "locale": "et-EE",
          "name": "PPMT"
        },
        {
          "locale": "fi-FI",
          "name": "PPMT"
        },
        {
          "locale": "fr-FR",
          "name": "PRINCPER"
        },
        {
          "locale": "he-IL",
          "name": "PPMT"
        },
        {
          "locale": "hr-HR",
          "name": "PPMT"
        },
        {
          "locale": "hu-HU",
          "name": "PRÉSZLET"
        },
        {
          "locale": "id-ID",
          "name": "PPMT"
        },
        {
          "locale": "it-IT",
          "name": "P.RATA"
        },
        {
          "locale": "ja-JP",
          "name": "PPMT"
        },
        {
          "locale": "ko-KR",
          "name": "PPMT"
        },
        {
          "locale": "lt-LT",
          "name": "PPMT"
        },
        {
          "locale": "lv-LV",
          "name": "PPMT"
        },
        {
          "locale": "nb-NO",
          "name": "AMORT"
        },
        {
          "locale": "nl-NL",
          "name": "PBET"
        },
        {
          "locale": "pl-PL",
          "name": "PPMT"
        },
        {
          "locale": "pt-BR",
          "name": "PPGTO"
        },
        {
          "locale": "pt-PT",
          "name": "PPGTO"
        },
        {
          "locale": "ro-RO",
          "name": "PPMT"
        },
        {
          "locale": "ru-RU",
          "name": "ОСПЛТ"
        },
        {
          "locale": "sk-SK",
          "name": "PPMT"
        },
        {
          "locale": "sl-SI",
          "name": "PPMT"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "PPMT"
        },
        {
          "locale": "sv-SE",
          "name": "AMORT"
        },
        {
          "locale": "th-TH",
          "name": "PPMT"
        },
        {
          "locale": "tr-TR",
          "name": "ANA_PARA_ÖDEMESİ"
        },
        {
          "locale": "uk-UA",
          "name": "PPMT"
        },
        {
          "locale": "vi-VN",
          "name": "PPMT"
        },
        {
          "locale": "zh-CN",
          "name": "PPMT"
        },
        {
          "locale": "zh-HK",
          "name": "PPMT"
        },
        {
          "locale": "zh-TW",
          "name": "PPMT"
        }
      ],
      "signature": {
        "display": "PPMT(rate, per, nper, pv, [fv], [type])",
        "parameters": [
          {
            "description": null,
            "name": "rate",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "per",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "nper",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "pv",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "fv",
            "optional": true,
            "repeats": false
          },
          {
            "description": null,
            "name": "type",
            "optional": true,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "PPMT",
      "version_marker": null,
      "xlcall": {
        "code": "168",
        "symbol": "xlfPpmt"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/ppmt-function-c370d9e3-7749-4ca4-beea-b06c6ac95e1b"
  },
  "try_it": {
    "formula": "=PPMT(0.25,2,2,1000)"
  },
  "url": "https://handbook.dnacalc.com/functions/PPMT.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "=PPMT(0.05/12,12,360,200000) returned -251.5564719376004 (0xc06f71ce9e3ca456). =PPMT(0.05/12,1,360,200000) returned -240.30991269094474 (0xc06e09eace050723). Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0.20527.20088",
      "observations": [
        {
          "call": "=PPMT(0.05/12,12,360,200000)",
          "excel": {
            "bits": "0xc06f71ce9e3ca456",
            "display": "-251.5564719376004",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        },
        {
          "call": "=PPMT(0.05/12,1,360,200000)",
          "excel": {
            "bits": "0xc06e09eace050723",
            "display": "-240.30991269094474",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        }
      ],
      "platform": "Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-IPMT-001.json",
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-PPMT-001.json"
      ]
    },
    {
      "behaviour": "396 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 19929",
      "platform": "Windows, bitness not recorded, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.PPMT.json"
      ]
    },
    {
      "behaviour": "7 captured inputs are indexed for this environment. Capture dates: 2026-07-23 to 2026-07-23. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20131",
      "platform": "Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.PPMT.json"
      ]
    }
  ]
}