Thanks for creating and sharing this Tim! I spent some time trying to get
it to work for me. The initial create command worked well on my ledger. I
culled through it and arrived at a minimum set of 13 to play with. They all
pass CLI beanschedule validate, but the schedule plugin fails in a couple
of spots:
1. The docs indicate that multiple postings with amount:null are valid
(schedules/rent.yaml example). This made sense to me for double-entry
bookkeeping when there are two postings. The code doesn't support it though
("At most one posting can have a null amount (the balancing posting).":
https://github.com/slimslickner/beanschedule/blob/c160278ee3ffab5c5af32db98a90750d54be4382/beanschedule/plugins/schedules.py#L543
As a side note, the subsequent check on line 552 isn't going to catch
postings with more than one null amount since that will be caught by the
previous check.
2. I set up two amortized accounts with postings for payment, principal,
escrow and interest, but I get an error: "For amortization schedules,
postings with 'amount: null' must have an explicit 'role' field. Valid
roles: 'payment', 'interest', 'principal', 'escrow'. See POSTING_ROLES.md
for details." Another side note here - I could not find POSTING_RULES.md.
:-)
On Saturday, February 7, 2026 at 10:04:10 AM UTC-7 [email protected]
wrote:
> Hi all -
>
> I wanted to share a scheduled transaction repo I've been vibe coding as I
> learned Beancount over the past few months. It's still a work in progress
> but I've been using it consistently.
>
> beanschedule <https://github.com/slimslickner/beanschedule> provides two
> primary features: a plugin for forecasting scheduled transactions and a
> hook for augmenting imported transactions.
>
> Every schedule is defined as a yaml file with match logic, recurrence
> rules, and expected postings. Currently, the only "dynamic" posting is loan
> amortization which would include accounts like Interest and Principal; the
> basic match is just a cost range.
>
> Beangulp Import Hook
> If you use the import hook, then imported transactions will be matched
> with metadata and postings applied. Missing schedules are logged as part of
> the beangulp logging.
>
> Schedules Plugin
> If you use the plugin, then forward looking transactions are added to the
> ledger in the same style as the `beanlabs.plugins.forecast.py`
> transactions with a `#` flag. I currently have this commented out most of
> the time because past forecasted transactions (e.g. the transaction hasn't
> posted yet) will mess with balance assertions, but it can be helpful to see
> cash flow (obviously, doesn't capture non-scheduled transactions).
>
> CLI
> Beanschedule provides a CLI, `beanschedule`, with a few commands for
> viewing loan amortization, detecting existing recurring transactions,
> summarizing configured schedules, and a few more commands (see the docs and
> code).
>
> Roadmap
> The roadmap is mostly administrative, specifically improving the
> formatting and making the repo more Ruff-compliant.
>
> ---
>
> This is my first "real" open repo so I'd love to get any feedback! I'd
> love feedback on the repo, documentation, or feature requests! I know there
> are some *similar* implementations and some of the stuff that's been
> built here may not be super beancount-esque, so I'd love to hear about how
> I can improve the style. To be clear, this is *heavily vibe coded*, I
> don't want to claim credit for most of the code, but wanted to share with
> the community in case something like this is helpful for someone else.
>
> It's very much a set-and-forget library, once schedules are onboarded,
> it's a pretty easy maintenance process.
>
> ---
>
> Thanks all!
> Tim
>
--
You received this message because you are subscribed to the Google Groups
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/beancount/e0b71356-20e0-4296-a06f-13c515404325n%40googlegroups.com.