[PR #7872] fix: show scheduled split transfers as upcoming on destination accounts #131565

Open
opened 2026-06-16 00:14:21 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/7872
Author: @m4cd4r4
Created: 5/17/2026
Status: 🔄 Open

Base: master ← Head: fix/scheduled-split-transfer-upcoming


📝 Commits (3)

  • f8a2e76 fix: show scheduled split transfers as upcoming on destination accounts
  • b5eb1b8 [autofix.ci] apply automated fixes
  • 578d490 refactor(schedules): type rule actions, add splitIndex 0 coverage

📊 Changes

3 files changed (+176 additions, -5 deletions)

View changed files

📝 packages/desktop-client/src/hooks/useAccountPreviewTransactions.ts (+19 -4)
📝 packages/loot-core/src/shared/schedules.test.ts (+151 -1)
➕ upcoming-release-notes/7872.md (+6 -0)

📄 Description

Summary

Fixes #7822 - scheduled split transactions with transfer children were not showing as upcoming transactions on the destination account.

Root cause

accountSchedulesFilter in useAccountPreviewTransactions.ts checks two things to decide whether a schedule is relevant to the viewed account:

  1. schedule._account === accountId - the schedule originates from this account
  2. schedule._payee is a transfer payee pointing to this account - direct non-split transfer

For split schedules, the transfer to account B lives in a child rule action (op: set, field: payee, options.splitIndex: N) inside schedule._actions. The parent _payee is the employer or counterparty, not a transfer payee. So the filter returned false for account B, and no upcoming transaction appeared.

Fix

Expand the filter to also inspect schedule._actions for set-payee actions that have a splitIndex option. If any of those payees is a transfer payee pointing to the viewed account, include the schedule.

Change is in useAccountPreviewTransactions.ts - 17 lines added to the filter callback.

Testing

Added two unit tests in packages/loot-core/src/shared/schedules.test.ts:

  • includes a split schedule when viewing the split-child transfer destination - asserts a schedule with a split-child transfer action is included when filtering for the destination account
  • excludes a split schedule when viewing an unrelated account - asserts the same schedule is excluded for an account not involved in any split action

yarn workspace @actual-app/core run vitest run src/shared/schedules.test.ts - 43/43 pass.

yarn workspace @actual-app/core typecheck - all files passed.

yarn workspace @actual-app/web typecheck - all files passed.

yarn lint:fix - 0 errors.

Notes

getSchedulesQuery in useSchedules.ts has a related filter that also misses split-child transfers - affects the Schedules page list view, not upcoming transactions. Left out of scope for this PR.

Drafted with AI assistance, reviewed and edited by me.


Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 33 13.97 MB → 13.98 MB (+252 B) +0.00%
loot-core 1 5.34 MB 0%
api 2 3.96 MB 0%
cli 1 7.97 MB 0%
crdt 1 11.12 kB 0%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
33 13.97 MB → 13.98 MB (+252 B) +0.00%
Changeset
File Δ Size
src/hooks/useAccountPreviewTransactions.ts 📈 +252 B (+6.56%) 3.75 kB → 4 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/bankSyncUtils.js 54.15 kB → 54.4 kB (+252 B) +0.45%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/index.js 2.01 MB 0%
static/js/BackgroundImage.js 121.09 kB 0%
static/js/FormulaEditor.js 962.55 kB 0%
static/js/ReportRouter.js 1.25 MB 0%
static/js/ScheduleEditForm.js 146.45 kB 0%
static/js/TransactionEdit.js 190.43 kB 0%
static/js/TransactionList.js 85.81 kB 0%
static/js/Value.js 4.97 MB 0%
static/js/ca.js 187.62 kB 0%
static/js/chart-theme.js 800.08 kB 0%
static/js/client.js 451.37 kB 0%
static/js/da.js 101.17 kB 0%
static/js/de.js 170.27 kB 0%
static/js/en-GB.js 10.01 kB 0%
static/js/en.js 195.88 kB 0%
static/js/es.js 178.71 kB 0%
static/js/extends.js 500.36 kB 0%
static/js/fr.js 178.61 kB 0%
static/js/indexeddb-main-thread-worker-e59fee74.js 13.46 kB 0%
static/js/it.js 165.02 kB 0%
static/js/narrow.js 364.2 kB 0%
static/js/nb-NO.js 148.08 kB 0%
static/js/nl.js 106.24 kB 0%
static/js/pt-BR.js 189.28 kB 0%
static/js/resize-observer.js 18.06 kB 0%
static/js/th.js 174.48 kB 0%
static/js/theme.js 31.67 kB 0%
static/js/uk.js 207.45 kB 0%
static/js/useFormatList.js 4.96 kB 0%
static/js/wide.js 453 B 0%
static/js/workbox-window.prod.es5.js 7.33 kB 0%
static/js/zh-Hans.js 117.65 kB 0%

loot-core

Total

Files count Total bundle size % Changed
1 5.34 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
kcab.worker.BDS7YpIF.js 5.34 MB 0%

api

Total

Files count Total bundle size % Changed
2 3.96 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 3.96 MB 0%
models.js 0 B 0%

cli

Total

Files count Total bundle size % Changed
1 7.97 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
cli.js 7.97 MB 0%

crdt

Total

Files count Total bundle size % Changed
1 11.12 kB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 11.12 kB 0%

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/7872 **Author:** [@m4cd4r4](https://github.com/m4cd4r4) **Created:** 5/17/2026 **Status:** 🔄 Open **Base:** `master` ← **Head:** `fix/scheduled-split-transfer-upcoming` --- ### 📝 Commits (3) - [`f8a2e76`](https://github.com/actualbudget/actual/commit/f8a2e76f6fe5bd061ff5c5fa1e1fc23ac0d545fd) fix: show scheduled split transfers as upcoming on destination accounts - [`b5eb1b8`](https://github.com/actualbudget/actual/commit/b5eb1b8a991d6007667c2506c609c200984dfbe8) [autofix.ci] apply automated fixes - [`578d490`](https://github.com/actualbudget/actual/commit/578d490a4fe492afe47b324291bc7f085be3ef5a) refactor(schedules): type rule actions, add splitIndex 0 coverage ### 📊 Changes **3 files changed** (+176 additions, -5 deletions) <details> <summary>View changed files</summary> 📝 `packages/desktop-client/src/hooks/useAccountPreviewTransactions.ts` (+19 -4) 📝 `packages/loot-core/src/shared/schedules.test.ts` (+151 -1) ➕ `upcoming-release-notes/7872.md` (+6 -0) </details> ### 📄 Description ## Summary Fixes #7822 - scheduled split transactions with transfer children were not showing as upcoming transactions on the destination account. ## Root cause `accountSchedulesFilter` in `useAccountPreviewTransactions.ts` checks two things to decide whether a schedule is relevant to the viewed account: 1. `schedule._account === accountId` - the schedule originates from this account 2. `schedule._payee` is a transfer payee pointing to this account - direct non-split transfer For split schedules, the transfer to account B lives in a child rule action (op: set, field: payee, options.splitIndex: N) inside `schedule._actions`. The parent `_payee` is the employer or counterparty, not a transfer payee. So the filter returned false for account B, and no upcoming transaction appeared. ## Fix Expand the filter to also inspect `schedule._actions` for set-payee actions that have a splitIndex option. If any of those payees is a transfer payee pointing to the viewed account, include the schedule. Change is in `useAccountPreviewTransactions.ts` - 17 lines added to the filter callback. ## Testing Added two unit tests in `packages/loot-core/src/shared/schedules.test.ts`: - includes a split schedule when viewing the split-child transfer destination - asserts a schedule with a split-child transfer action is included when filtering for the destination account - excludes a split schedule when viewing an unrelated account - asserts the same schedule is excluded for an account not involved in any split action `yarn workspace @actual-app/core run vitest run src/shared/schedules.test.ts` - 43/43 pass. `yarn workspace @actual-app/core typecheck` - all files passed. `yarn workspace @actual-app/web typecheck` - all files passed. `yarn lint:fix` - 0 errors. ## Notes `getSchedulesQuery` in `useSchedules.ts` has a related filter that also misses split-child transfers - affects the Schedules page list view, not upcoming transactions. Left out of scope for this PR. Drafted with AI assistance, reviewed and edited by me. <!--- actual-bot-sections ---> <hr /> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 33 | 13.97 MB → 13.98 MB (+252 B) | +0.00% loot-core | 1 | 5.34 MB | 0% api | 2 | 3.96 MB | 0% cli | 1 | 7.97 MB | 0% crdt | 1 | 11.12 kB | 0% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 33 | 13.97 MB → 13.98 MB (+252 B) | +0.00% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/hooks/useAccountPreviewTransactions.ts` | 📈 +252 B (+6.56%) | 3.75 kB → 4 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- static/js/bankSyncUtils.js | 54.15 kB → 54.4 kB (+252 B) | +0.45% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/index.js | 2.01 MB | 0% static/js/BackgroundImage.js | 121.09 kB | 0% static/js/FormulaEditor.js | 962.55 kB | 0% static/js/ReportRouter.js | 1.25 MB | 0% static/js/ScheduleEditForm.js | 146.45 kB | 0% static/js/TransactionEdit.js | 190.43 kB | 0% static/js/TransactionList.js | 85.81 kB | 0% static/js/Value.js | 4.97 MB | 0% static/js/ca.js | 187.62 kB | 0% static/js/chart-theme.js | 800.08 kB | 0% static/js/client.js | 451.37 kB | 0% static/js/da.js | 101.17 kB | 0% static/js/de.js | 170.27 kB | 0% static/js/en-GB.js | 10.01 kB | 0% static/js/en.js | 195.88 kB | 0% static/js/es.js | 178.71 kB | 0% static/js/extends.js | 500.36 kB | 0% static/js/fr.js | 178.61 kB | 0% static/js/indexeddb-main-thread-worker-e59fee74.js | 13.46 kB | 0% static/js/it.js | 165.02 kB | 0% static/js/narrow.js | 364.2 kB | 0% static/js/nb-NO.js | 148.08 kB | 0% static/js/nl.js | 106.24 kB | 0% static/js/pt-BR.js | 189.28 kB | 0% static/js/resize-observer.js | 18.06 kB | 0% static/js/th.js | 174.48 kB | 0% static/js/theme.js | 31.67 kB | 0% static/js/uk.js | 207.45 kB | 0% static/js/useFormatList.js | 4.96 kB | 0% static/js/wide.js | 453 B | 0% static/js/workbox-window.prod.es5.js | 7.33 kB | 0% static/js/zh-Hans.js | 117.65 kB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 5.34 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.BDS7YpIF.js | 5.34 MB | 0% </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 2 | 3.96 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 3.96 MB | 0% models.js | 0 B | 0% </div> </details> --- #### cli **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 7.97 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- cli.js | 7.97 MB | 0% </div> </details> --- #### crdt **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 11.12 kB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 11.12 kB | 0% </div> </details> </details> <!--- bundlestats-action-comment key:combined end ---> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-06-16 00:14:22 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#131565