packages feed

hledger-interest-2.0.0: CHANGELOG.md

# Revision history for hledger-interest

## 2.0.0 (2026-11-11)

### Incompatible changes

- The built-in `--bgb288`, `--ing-diba`, and `--db24` modes have been
  removed. hledger-interest no longer contains bank-specific or statutory
  rate tables; supply the rates with `--schedule` or `--schedule-file`
  together with an explicit day-count flag. Unlike the former modes,
  schedules earn no interest before their first entry and keep the last
  rate indefinitely. The historical tables survive as regression tests,
  which also show how to reproduce the former modes' output.
- The interest account is matched literally by its full name. Punctuation
  is no longer interpreted as a regular expression, subaccounts are no
  longer included, and an account without matching transactions is an
  error.
- Rate selection is independent of posting frequency. Every rate option,
  including `--constant`, now posts interest at year ends by default;
  `--constant` and `--annual` are equivalent.
- Interest is no longer computed backwards: balance changes are processed
  in effective-date order, and overlapping periods are rejected instead of
  being counted twice.

### Changes that affect computed interest

- `--30-360`, `--30E-360`, and `--30E-360isda` miscounted periods that
  start on a day adjusted by the convention: a year of monthly payments on
  the 30th accrued 365, 367, or 358 days instead of 360. Periods are now
  counted from the last accounted day, so consecutive periods add up to
  the convention's count over the whole span. `--act` is unaffected
  ([#29](https://github.com/peti/hledger-interest/issues/29)).
- Posting-level dates are honored. A posting's own date, or its secondary
  date, determines when it changes the balance, taking precedence over the
  transaction's dates
  ([#31](https://github.com/peti/hledger-interest/issues/31)).
- Secondary transaction dates are respected when ordering transactions.
- Transaction costs (`@` and `@@`) no longer leak into the principal,
  the descriptions, or the generated postings.
- `--act` splits calculations at calendar-year boundaries in every posting
  mode, so each year uses its correct 365/366-day denominator. These
  internal splits do not compound interest unless it is actually posted.
- No rate is looked up while the balance is zero, e.g. before the first
  loan.

### New features

- `--until=YYYY-MM-DD` computes and posts interest through an inclusive
  cutoff date and ignores later transactions, adapting Bas van Dijk's
  contribution in [#19](https://github.com/peti/hledger-interest/pull/19).
  `--today` is now an alias for `--until=today`; the last cutoff option
  wins.
- `--schedule-file=PATH` reads dated annualized rates from a text file.
  Rates may be given as fractions or percentages, and the file accepts
  hledger date and comment syntax. Syntax errors report the file, line,
  and column.
- `--schedule` specifies annualized rates and their effective dates;
  `--annual-schedule` remains as an alias.
- `--post-on-rate-changes` posts interest at transactions and rate-period
  ends, but not at year ends. `--post-on-transactions` takes precedence
  when both flags are given.

### Other changes

- Invalid rate arguments and a missing account argument are reported
  before the journal is read, and computation errors are shown without
  exception noise.
- The `--verbose` and `--quiet` help texts describe the output accurately:
  verbose mode prints the matching input transactions, not the entire
  journal.
- The README documents the rounding and precision policy: interest accrues
  unrounded, and only its display is rounded.
- A new `calculations` test suite checks interest amounts and posting
  dates against hand-derived values, and the golden-file `regression`
  suite covers all day-count conventions with all posting modes.
- Require hledger-lib >= 1.32.

## 1.7.0 (2026-11-11)

### Changes that affect computed interest

Several bugs have been fixed that made hledger-interest compute wrong
amounts. Re-running it on existing journals may produce different
results in the following cases:

- `--bgb288` applied 5.37% to every date after 2011-06-30, because a
  stray entry in the table of base rates shadowed all later rates. The
  table has been fixed, checked against the rates published by the
  Deutsche Bundesbank, and extended up to 2026-12-31. Dates after the
  end of the table now fail with an explicit message requesting a
  rate-table update.
- `--annual-schedule` used the rate in effect at the start of a period
  until the next transaction or year end, ignoring any rate changes in
  between, and a new rate took effect only on the day after its start
  date. Rates now take effect exactly on their start date
  ([#20](https://github.com/peti/hledger-interest/issues/20),
  [#23](https://github.com/peti/hledger-interest/pull/23)). Dates
  before the first entry of the schedule earn no interest instead of
  crashing.
- A transaction on the first day of a rate period, e.g. on January 1st
  with `--annual`, earned one day of interest too many
  ([#21](https://github.com/peti/hledger-interest/issues/21)).
- `--30E-360isda` counted the days of a period that starts on the 31st
  of a month wrongly, e.g. 30 instead of 15 days from 2023-01-31 to
  2023-02-15 ([#28](https://github.com/peti/hledger-interest/issues/28)).
- Interest on balances without decimal places is now shown with at
  least two decimal places instead of being rounded to whole units.

### New features

- The new `--post-on-transactions` flag posts interest only on transaction
  dates (and on the final day with `--today`). Year and rate boundaries
  can still split the calculation, but do not themselves trigger posting
  or compounding
  ([#16](https://github.com/peti/hledger-interest/issues/16),
  [#26](https://github.com/peti/hledger-interest/issues/26)).
- Without `--file`, hledger-interest now reads `$LEDGER_FILE` or
  `~/.hledger.journal` like hledger does, instead of silently reading
  nothing ([#24](https://github.com/peti/hledger-interest/issues/24)).
  Errors while reading the journal, such as a missing file, are
  reported without the "Uncaught exception" noise.

### Other changes

- Descriptions of interest on multi-currency balances no longer contain
  line breaks ([#11](https://github.com/peti/hledger-interest/issues/11),
  [#13](https://github.com/peti/hledger-interest/pull/13)).
- The README explains how interest is computed with each day counting
  convention, and that `--act` corresponds to Actual/Actual ISDA
  ([#25](https://github.com/peti/hledger-interest/issues/25)).
- Support hledger-lib up to version 1.52.x and GHC 9.6 to 9.14.
- Drop the obsolete dependency on Cabal and the `Setup.hs` file.

## 1.6.7 and earlier

See the [git history](https://github.com/peti/hledger-interest/commits/master).