mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-09 11:42:54 -05:00
[Bug]: Wrong amount budgeted for category with multiple schedule goal templates #768
Closed
opened 2026-02-28 19:18:23 -06:00 by GiteaMirror
·
16 comments
No Branch/Tag Specified
master
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
matiss/7155
claude/fix-simplefin-batch-sync-O8LcD
ai/custom-theme-dual-prefs
matiss/fix-6804
add-claude-github-actions-1772738270730
claude/analyze-internal-errors-4k6O2
react-query-rules
react-query-useSchedules
matiss/separate-lint-format
dependabot/npm_and_yarn/ajv-6.14.0
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
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
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 project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#768
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.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @pyfisch on GitHub (Nov 27, 2023).
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.