[Bug]: Template by schedule incorrectly calculating budgeting amount #1616

Closed
opened 2026-02-28 19:48:49 -06:00 by GiteaMirror · 3 comments
Owner

Originally created by @sammichaels on GitHub (Nov 25, 2024).

Verified issue does not already exist?

  • I have searched and found no existing issue
  • I will be providing steps how to reproduce the bug (in most cases this will also mean uploading a demo budget file)

What happened?

When using a schedule with two transactions per month and a template by schedule, the next month is incorrectly calculated.

Steps to reproduce (calculated on 11/24/24 and 11/25/24):

  1. Create schedule with transactions of $100 on the 15th and 30th of every month. Verified upcoming dates listed 11/30, 12/15, 12/30.
  2. Add a template by schedule "#template schedule X".
  3. Apply for November. Correctly added $100 to category for 11/30.
  4. Apply for December. Incorrectly added $100 to category. Expected $200 for the transactions on 12/15 and 12/30.
  5. Apply for January. Correctly added $200 to category for 1/15 and 1/30.

I've attached an example budget I created to reproduce the issue.

Where are you hosting Actual?

Docker

What browsers are you seeing the problem on?

Safari

Operating System

Mac OSX

Originally created by @sammichaels on GitHub (Nov 25, 2024). ### Verified issue does not already exist? - [X] I have searched and found no existing issue - [X] I will be providing steps how to reproduce the bug (in most cases this will also mean uploading a demo budget file) ### What happened? When using a schedule with two transactions per month and a template by schedule, the next month is incorrectly calculated. Steps to reproduce (calculated on 11/24/24 and 11/25/24): 1. Create schedule with transactions of $100 on the 15th and 30th of every month. Verified upcoming dates listed 11/30, 12/15, 12/30. 2. Add a template by schedule "#template schedule X". 3. Apply for November. Correctly added $100 to category for 11/30. 4. Apply for December. **Incorrectly added $100 to category.** Expected $200 for the transactions on 12/15 and 12/30. 5. Apply for January. Correctly added $200 to category for 1/15 and 1/30. I've attached [an example budget](https://github.com/user-attachments/files/17907283/2024-11-25-My.Finances.zip) I created to reproduce the issue. ### Where are you hosting Actual? Docker ### What browsers are you seeing the problem on? Safari ### Operating System Mac OSX
GiteaMirror added the buggoal templates labels 2026-02-28 19:48:49 -06:00
Author
Owner

@sammichaels commented on GitHub (Nov 26, 2024):

The behavior appears to be in goalsSchedule.ts:

c25e3d4163/packages/loot-core/src/server/budget/goalsSchedule.ts (L227-L242)

If the balance is less than the amount needed to schedule (if statement on line 227 is evaluating to false), it is incorrectly subtracting last_month_balance from the amount in totalPayMonthOf (setting to_Budget on line 236). I think the issue is that it's not reserving the amount needed for upcoming transactions in previous months that have not yet happened.

In my example above, $100 is added in November, but that transaction has not yet occurred. When December is calculated, it's not taking into consideration the 11/30 upcoming transaction and instead subtracting that balance ($200 total needed for 12/15 and 12/30, $100 already there, so only fund $100). The expected behavior would be $200 total needed for 12/15 and 12/30, $100 already there, $100 needed in upcoming transactions from previous months on 11/30, so fund $200.

@sammichaels commented on GitHub (Nov 26, 2024): The behavior appears to be in goalsSchedule.ts: https://github.com/actualbudget/actual/blob/c25e3d416327367db56828dbc3114dab31092397/packages/loot-core/src/server/budget/goalsSchedule.ts#L227-L242 If the balance is less than the amount needed to schedule (`if` statement on line 227 is evaluating to false), it is incorrectly subtracting `last_month_balance` from the amount in `totalPayMonthOf` (setting `to_Budget` on line 236). I think the issue is that it's not reserving the amount needed for upcoming transactions in previous months that have not yet happened. In my example above, $100 is added in November, but that transaction has not yet occurred. When December is calculated, it's not taking into consideration the 11/30 upcoming transaction and instead subtracting that balance ($200 total needed for 12/15 and 12/30, $100 already there, so only fund $100). The expected behavior would be $200 total needed for 12/15 and 12/30, $100 already there, $100 needed in upcoming transactions from previous months on 11/30, so fund $200.
Author
Owner

@IsThisThingStillOn commented on GitHub (Aug 5, 2025):

I've noticed two things:
#1 If your scheduled amount is greater than the current balance of the category, it will budget like "up to". If your scheduled amount is less thant the current balance, it will budget the whole amount.

Edge case:
Balance: 20
Schedule: 19.99
Apply: 39.99 category balance

Balance: 20
Schedule: 20.01
Apply: 20.01 category balance


#2 If you use multiple schedules in one category that have different ending dates (i.e. different months), it will work almost as expected. But once you reach the month where items are due, it seems to regress towards half of the remaining money left to budget, towards the end.

Schedules:
4 schedules due in September with different lengths and amounts for a total of $158.99
1 schedule due in October, runs for 3 months with the amount of $42.99
1 schedule due in October, runs for 5 months with the amount of $37

With a category balance of $67.25 in July, I ran the template for August and it calculated: $69.45
If you'd done it manually you'd expected it to be: $71.30

That's just a little bit under but totally fine, since schedules don't have a start date and it needs to make an estimate.

Now come September (4 items are due). You still need to fund all six schedules, so it should be the same amount as in August. But it undershoots heavily and budgets: $56.11. After deducting the September purchases it will budget $27.67 in October. Remove the October purchase and for November it needs to budget $18.50 (while we actually could already have saved up $7.40 for each of the 4 months prior).

A change to smooth out the budgeted amount better:
a) Sum up the amount of all schedules
b) Deduct the current category balance
c) Sum up the remaining months of all schedules
d) Divide the remaining amount by the months and multiply by the items

With above example these would be the budgeted amounts:
Aug: $68.69
Sep: $68.69
Oct: $22.90
Nov: $11.45

@IsThisThingStillOn commented on GitHub (Aug 5, 2025): I've noticed two things: #1 If your scheduled amount is greater than the current balance of the category, it will budget like "up to". If your scheduled amount is less thant the current balance, it will budget the whole amount. Edge case: Balance: 20 Schedule: 19.99 Apply: 39.99 category balance Balance: 20 Schedule: 20.01 Apply: 20.01 category balance --- #2 If you use multiple schedules in one category that have different ending dates (i.e. different months), it will work almost as expected. But once you reach the month where items are due, it seems to regress towards half of the remaining money left to budget, towards the end. Schedules: 4 schedules due in September with different lengths and amounts for a total of $158.99 1 schedule due in October, runs for 3 months with the amount of $42.99 1 schedule due in October, runs for 5 months with the amount of $37 With a category balance of $67.25 in July, I ran the template for August and it calculated: $69.45 If you'd done it manually you'd expected it to be: $71.30 That's just a little bit under but totally fine, since schedules don't have a start date and it needs to make an estimate. Now come September (4 items are due). You still need to fund all six schedules, so it should be the same amount as in August. But it undershoots heavily and budgets: $56.11. After deducting the September purchases it will budget $27.67 in October. Remove the October purchase and for November it needs to budget $18.50 (while we actually could already have saved up $7.40 for each of the 4 months prior). A change to smooth out the budgeted amount better: a) Sum up the amount of all schedules b) Deduct the current category balance c) Sum up the remaining months of all schedules d) Divide the remaining amount by the months and multiply by the items With above example these would be the budgeted amounts: Aug: $68.69 Sep: $68.69 Oct: $22.90 Nov: $11.45
Author
Owner

@youngcw commented on GitHub (Nov 28, 2025):

I think this PR fixes the problem. Can you test it?
https://deploy-preview-6268.demo.actualbudget.org/

@youngcw commented on GitHub (Nov 28, 2025): I think this PR fixes the problem. Can you test it? https://deploy-preview-6268.demo.actualbudget.org/
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#1616