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.

Reply via email to