# FinancePy cash-settled swaption annuity: N−1 instead of N

Independent GERO audit by Xamit Kadirbekov · 14 September 2026.

A one-payment swap has a positive cash annuity at 4%; the tested FinancePy 1.1.2 release returns zero when valued on or before its effective date. Its payment list already excludes the start date, but the cash-annuity method skips another entry.

[Full report](REPORT_EN.md) · [GERO article and short video](https://www.gero.uz/research/articles/financepy-cash-settled-annuity.html) · [Frozen evidence archive](gero-financepy-cash-annuity-evidence-2026-09-14.zip) · [Candidate correction](candidate.patch).

- Pinned upstream: `2b9227fea9d832c4033421d6cd53a54316414fca`; also reproduced in the FinancePy 1.1.2 PyPI wheel.
- Independent annuity grid: **240 failures out of 360 → 0**.
- Full configured unit suite: **972 pass**, including 14 new regressions. Restoring original production code makes all 14 regressions fail.
- Real public Black cash-settled swaption API, synthetic notional 1,000,000: one-payment example **0 → 3,712.944454**; five-year example **15,759.084387 → 17,342.956375** after the local correction.
- **Seven small residuals remain** against the strict, independent Black oracle; maximum 0.04389523 per 1,000,000 notional. An additional diagnostic using the existing Black kernel isolates the repaired annuity (162/162 pass). The report retains the initial failed comparison.

No measured client losses, live trading exposure or upstream acceptance is claimed. No direct duplicate was identified in the documented bounded public search.

## Reproduce

For the minimal released-package example, use an isolated Python 3.12 environment, install `financepy==1.1.2`, then run `python minimal_repro.py`.

For the full audit, extract the ZIP to a new directory and follow its README. The archive includes the pinned source package and unit tests, requirements, baseline/candidate/mutation outputs, test XML, hashes and a verifier. Running `verify_evidence.py` checks retained records; it is not a fresh numerical execution. The source checkout inside the archive omits notebooks and Git history.

Archive SHA-256: `32d15e39b54cbf07a88c3ceb744c97e34f4acb9bea5dd05a2376775a79e9d7c6`.

## Rights and preparation

Upstream source, candidate patch, tests, report and audit scripts: GPL-3.0-or-later, with original notices retained. Original GERO graphics. Synthetic narration through [edge-tts](https://github.com/rany2/edge-tts), the same tool used for the Ingenium film. No affiliation with FinancePy or OpenGamma. AI-assisted analysis, production and publication.

## Publication and maintainer correspondence

- [Zenodo archival record, DOI 10.5281/zenodo.22740980](https://zenodo.org/records/22740980)
- [Hugging Face report, evidence and video](https://huggingface.co/datasets/XamitK/gero-research-evidence-2026-09/blob/main/financepy-cash-settled-annuity.md)
- [LinkedIn native video post](https://www.linkedin.com/feed/update/urn:li:ugcPost:7505114181160046592/)
- [Maintainer correspondence: FinancePy issue 262](https://github.com/domokane/FinancePy/issues/262). Submitted for review; no acceptance claimed.
