The fixture struct published borrowed_capital and total_duration_in_months, but
monthly_repayment is not a function of those two. It is a function of the
capital the amortisation actually runs on and the number of amortising
instalments, and both differ from the published fields as soon as there is a
deferral.
On offre B the six months of total deferral capitalise 439 000 EUR into
444 405,27 EUR, amortised over 294 instalments rather than 300. Feeding the
formula with the fields the fixture exposed gave 1 958,39 EUR against the
table's 2 011,86 EUR. The two deferred fixtures were therefore unusable, and
misleading about it: a 53 EUR monthly gap reads like a rounding bug in the
implementation rather than a missing input.
The generator already computed both values and wrote them to the JSON output.
Only render_rust dropped them, so the Rust fixtures were strictly less
informative than the JSON they were generated alongside.
All four fixtures now reproduce their reference instalment to the cent when fed
amortised_capital and amortisation_in_months, including the two deferred offers
that could not be tested at all before.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>