mirror of
https://github.com/actualbudget/actual.git
synced 2026-11-12 03:42:19 -06:00
[GH-ISSUE #1983] [Bug]: Wrong amount budgeted for category with multiple schedule goal templates #98182
Closed
opened 2026-05-29 09:09:22 -05:00 by GiteaMirror
·
16 comments
No Branch/Tag Specified
master
worktree-pr-description-rules
worktree-count-points-gh-bot
theme-number-contrast
theme-contrast-test
fix/automatic-bank-sync-mobile-app
jfdoming/api-key-shared-bank-sync
claude/lucid-turing-br8zwl
future-buffer
carryover-chain
copilot/fix-failing-github-actions-job
copilot/fix-failing-github-actions-job-compare
fix/hide-sab-warning-in-capacitor
release
tabedzki/feat/docker-non-root
ios-home-screen-widgets
mobile-budget-redesign
ai/fix-mobile-carryover-arrow-alignment
jfdoming/provider-identity-update
jfdoming/electron-signin-update
jfdoming/openid-flow-update
release-update/26.10.1
release-notes/26.10.1
matiss/dazzling-babbage-b9rjwi
react-query-rules
ai/add-loan-formula-autocomplete
claude/pr-8519-regression-testing-fhvrrh
speed-up-transaction-list-and-schedules
fix-slow-balance-recompute-on-transaction-edit
jfdoming/opfs-sahpool-mobile
jfdoming/opfs-sahpool
fix-8612-schedule-delete-menu
jfdoming/api-tokens-part-8
jfdoming/api-tokens-part-7
jfdoming/api-tokens-part-6
jfdoming/api-tokens-part-5
jfdoming/mobile-safe-area-header
jfdoming/api-tokens-part-4
jfdoming/mobile-splash-lifecycle
jfdoming/api-tokens-part-3
jfdoming/mobile-shared-array-buffer
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
persist-transaction-filters
claude/modernize-transactions-tanstack-orgrze
bank-sync-per-file-03-pluggy-loot-core
claude/auto-close-prs-no-profile-pic-mjqpsy
cross-version-sync-stage2
claude/react-table-library-research-afx83z
tolerate-newer-migrations
claude/verify-migration-guardrails-i82c8m
tabedzki/feat/replacing-month-picker-with-day-picker
delay-initial-sync-until-loaded
cross-version-sync-compat
jfdoming/mobile-app-updates
claude/budget-version-migration-compat-151jlr
claude/worker-error-serialization-9iqtl7
claude/issue-8401-regression-test-9nw9l3
jfdoming/mobile-app-foundation-part-1
jfdoming/mobile-app-scaffold
ai-fix-cleanup-def-8290
claude/relaxed-shannon-jusywa
claude/fervent-keller-s6f2fq
claude/determined-feynman-st1y9z
claude/wizardly-einstein-vi2wce
claude/sweet-albattani-7nseio
feat/bank-sync-per-budget-file
claude/affectionate-cannon-y0kc82
claude/dependabot-findings-m9pgmb
claude/mac-app-ios-publish-zjs1lz
claude/vigilant-tesla-aiiyos
claude/quirky-cerf-v5qck7
claude/animation-removal-alternative-2etfh1
claude/netlify-preview-comments-consolidate-9XPYa
osc/7391-error-boundaries-reports
claude/pensive-dijkstra-7DYui
claude/server-app-version-mismatch-HTCGv
claude/pr-8027-review-feedback-mELuO
claude/zealous-wozniak-e5pO0
claude/intelligent-heisenberg-BSHJq
claude/translation-download-refactor-jFRsO
claude/mobile-performance-ideas-G9PAO
claude/github-issue-7988-5A5ly
blacksmith-migration-ff70d2d
claude/great-mayer-KRvOk
claude/react-native-ios-compilation-fcJh5
claude/serene-goldberg-58xv0
claude/kind-euler-LVG3K
release-automation/edge-nightly
7710-bundle-migrations
claude/fix-docker-build-error-WMfed
claude/llm-compatible-release-notes-t20Nr
7710-tests-tdd
cursor/transaction-table-rewrite-f077
claude/plan-ci-secure-context-OtEe1
claude/fix-issue-7667-DPXi3
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
claude/api-consumer-verification-kfz1K
pr-7454
claude/fix-issue-7410-LLLQ4
revert-7281-generate-icons
react-query-useSchedules
copilot/sub-pr-6140
package-upgrades
v26.11.0
v26.10.0
v26.9.0
v26.8.1
v26.8.0
v26.7.0
v26.6.0
v26.5.2
v26.5.1
v26.5.0
v26.4.0
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
tech-support
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#98182
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @pyfisch on GitHub (Nov 27, 2023).
Original GitHub issue: https://github.com/actualbudget/actual/issues/1983
Verified issue does not already exist?
What happened?
I create 3 monthly schedules which total 327.11.

Then I add them as goal templates to the category "Bills":
Finally I apply the budget template for December and expect that 327.11 is budgeted. However triple that (981.33) is budgeted.
It appears that if X schedule goal templates are added to a category the budgeted amount for each schedule is added X times to the category.
Sample database to reproduce the bug: schedules-goals.zip
cc @shall0pass you've done a lot of work in this area
What error did you receive?
No response
Where are you hosting Actual?
Docker
What browsers are you seeing the problem on?
Firefox
Operating System
None
@Kidglove57 commented on GitHub (Nov 27, 2023):
I can confirm this bug from my own budget:
BUT
@shall0pass commented on GitHub (Nov 27, 2023):
I'll call that a WHOOPS on my behalf. Please check the linked PR #1984 to verify it's fixed. Sorry about that.
@Kidglove57 commented on GitHub (Dec 1, 2023):
@shall0pass This fix was working for me at the end of November but the new month has thrown up a problem (for me at least). This has come to light because my categories are now full (less any transactions on the 1st).
So in the example given above:
#template schedule Rent (say 1000)
#template schedule Electricity (say 100)
#template schedule Mobile (say 50)
So total budget for Dec 1150 less paid 1000 = 150 still available in December.
This is what is happening in January:
@shall0pass commented on GitHub (Dec 1, 2023):
Yeah. It's currently written in a way that if there are leftover funds in a category and the total balance is less than the total is needed for the month, it just tops it off. Anything over the minimum it'll be treated as a discrete month. This was done so that it's possible to add extra funds to the category in one month as savings for the next month. Schedules with multiple month frequencies for example are treated as sinking funds and if those are included in the same category as other monthly schedules everything becomes fuzzy if you want to add a little extra to meet your goal faster. The ability to have multi month or multi year schedules was the primary reason to include previous balances in the calculation. It would be much cleaner to just schedule the base payment regardless, but then there could be months where the goal isn't met unless manual intervention is taken (i.e. starting a 6 month schedule 2 months before the first payment is due). Of course, in that example, once you're past the first payment the monthly amount would be correct.
I have a POC using a method shared with me on Discord, maybe it's time to put it up as a WIP and you can try it and comment on it. It uses a method to calculate shortfalls based on annual needs rather than monthly needs. I still see some oddities, but the method is a little harder for me to sort out bugs.
No one has reported it yet, but there are quirks if you have two schedules that are on different cadences with vastly different amounts with the current method too.
@shall0pass commented on GitHub (Dec 1, 2023):
@Kidglove57 Here is the WIP method I mentioned above.
https://github.com/actualbudget/actual/pull/2001
@Kidglove57 commented on GitHub (Dec 1, 2023):
Thanks for explaining @shall0pass. I think what’s bothering me is that this is then out of line with how a single line template behaves. Say; “#template 100” which will fund 100 regardless of any brought forward amount.
I am using the multiple schedule template in a monthly subs category and in a household bills category. Where the scheduled payments are the same each month. The solution is of course for me to hold off funding the next month until the turn of the month. Not a big deal but I just found it confusing compared to my single line template. The multi line schedule template now seemed to behave more like an “up to” template.
I’ll certainly take a look at the other link you mentioned. Thanks for your hard work on this!
@youngcw commented on GitHub (Dec 1, 2023):
@Kidglove57 the Schedule template is best compared to the "by repeat" template.
@shall0pass Here is a crazy idea. What if the schedule template processing converted the schedule into a "by" template and then ran that instead of having custom processing? Do "by" templates handle what Paul is seeing better?
@Kidglove57 commented on GitHub (Dec 1, 2023):
Yes, I can see that now. It was just that I was only using the multiple line schedule template for fixed monthly bills where the “by repeat” is not relevant. Previously I had just kept a manual calculation and funded to that. Or am I mistaken?
I had not got around yet to trying it for multiple line annual schedules. That sounds like an experiment worth trying - for annual software subs for example. I can quite see that the two are very different use cases.
@shall0pass commented on GitHub (Dec 1, 2023):
@youngcw Converting the schedules to 'by repeat' could also be difficult. Some schedules can have multiple days per month per schedule.
@Kidglove57 Maybe an option is to use the 'full' keyword for monthly schedules. 'full' forces the whole schedule to be budgeting in the month of the schedule, so for monthly schedules it might be a more desired output. If that works better, it could be applied on all monthly schedules that don't need a '$/number of months' calculation.
@Kidglove57 commented on GitHub (Dec 1, 2023):
@shall0pass thanks for the tip, I’m out this evening but I will certainly try that tomorrow. So that would be multiple lines for my monthly bills in the format:
#template schedule full {SCHEDULE NAME} ?
@Kidglove57 commented on GitHub (Dec 1, 2023):
@shall0pass
#template schedule full {SCHEDULE NAME} ?
I found a few moments before I went out.
#template schedule full {SCHEDULE NAME}
Works perfectly for my multiple line monthly scheduled bills!
Thank you so much
@shall0pass commented on GitHub (Dec 1, 2023):
What are your thoughts on making that the default behavior for schedules with an 'every 1 month' cadence?
@youngcw commented on GitHub (Dec 1, 2023):
For exactly 1 month cadence that probably would make sense. Its not that different, but probably would match what people expect more often than not.
@Kidglove57 commented on GitHub (Dec 1, 2023):
I’m also fine with this so long as we can document it fully for the casual user. Thank you!
@shall0pass commented on GitHub (Dec 1, 2023):
I'll put something together so it can be tested. Unless someone beats me to it :)
@Kidglove57 commented on GitHub (Dec 2, 2023):
I gave this a try with my live budget. It worked on one category but gave some odd results on two others (over provisions). Whereas using the "full" prefix worked in all the situations that I have tried.