[PR #7164] [CLOSED] [WIP] Add Feature: Reimbursable Expense tracking #32905

Closed
opened 2026-04-18 08:52:25 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/7164
Author: @jhjessup
Created: 3/9/2026
Status: Closed

Base: masterHead: master


📝 Commits (10+)

  • e94cb33 [AI] Add reimbursement tracking for transactions
  • 1a21485 [AI] Fix migration timestamp, add reimbursable visibility toggle, and release note
  • 41d55a9 Merge pull request #1 from jhjessup/claude/review-contribution-guidelines-wcJQj
  • 635a0be Merge pull request #2 from jhjessup/claude/add-reimbursement-tracking-4naB8
  • b10c611 [AI] Wire ReimbursableCell into TransactionsTable with keyboard navigation
  • b08ec68 Merge branch 'master' into claude/wire-reimbursable-cell-7TtOs
  • 908f43e Merge pull request #3 from jhjessup/claude/wire-reimbursable-cell-7TtOs
  • add663e Rename 7154.md to 7164.md
  • b5f9122 [AI] Fix duplicate ReimbursableCell declaration in TransactionsTable
  • c03dd27 Merge pull request #4 from jhjessup/claude/fix-duplicate-cell-declaration-cVwYD

📊 Changes

99 files changed (+674 additions, -88 deletions)

View changed files

📝 .github/workflows/build.yml (+1 -0)
📝 .github/workflows/docker-edge.yml (+0 -9)
📝 .github/workflows/docker-release.yml (+10 -11)
📝 .github/workflows/electron-master.yml (+2 -1)
📝 .github/workflows/netlify-release.yml (+1 -0)
📝 .github/workflows/publish-flathub.yml (+1 -0)
📝 .github/workflows/publish-npm-packages.yml (+2 -0)
📝 .github/workflows/size-compare.yml (+4 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-4-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-5-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-6-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png (+0 -0)

...and 79 more files

📄 Description

Description

Add reimbursable/reimbursed fields to transactions, enabling users to mark expenses as reimbursable, track reimbursement status, and link reimbursement transactions to original expenses.

Changes:

  • Database migration adding reimbursable, reimbursed, and reimbursed_by columns
  • AQL schema, TypeScript types, and DB types updated
  • Inline reimbursable icon toggle in desktop transaction list
  • Reimbursable toggle in mobile transaction edit form
  • Filter support for reimbursable and reimbursed fields
  • CSV export includes reimbursable/reimbursed status
  • Rules engine supports reimbursable/reimbursed conditions
  • Updated test snapshots

First pass (Implementation):
https://claude.ai/code/session_017pbmHKUDPsAP4G6x4SMjha

Second pass (Review):
https://claude.ai/code/session_01JREZqUeebhQANxaXdnmzNy

Resolves https://github.com/actualbudget/actual/issues/7158

Testing

All automated test frameworks passed in IDE

Checklist

  • Release notes added (see link above)
  • No obvious regressions in affected areas
  • Self-review has been performed - I understand what each change in the code does and why it is needed

Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 27 14.91 MB → 14.92 MB (+7.4 kB) +0.05%
loot-core 1 5.83 MB → 5.83 MB (+614 B) +0.01%
api 1 4.44 MB → 4.44 MB (+558 B) +0.01%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
27 14.91 MB → 14.92 MB (+7.4 kB) +0.05%
Changeset
File Δ Size
src/components/transactions/ReimbursableCell.tsx 🆕 +2.9 kB 0 B → 2.9 kB
home/runner/work/actual/actual/packages/loot-core/src/shared/rules.ts 📈 +198 B (+2.37%) 8.15 kB → 8.34 kB
src/components/accounts/Account.tsx 📈 +1.03 kB (+2.03%) 50.67 kB → 51.7 kB
src/components/mobile/transactions/TransactionEdit.tsx 📈 +1.3 kB (+1.97%) 65.99 kB → 67.29 kB
src/components/accounts/Header.tsx 📈 +585 B (+1.93%) 29.54 kB → 30.11 kB
src/components/transactions/TransactionsTable.tsx 📈 +1.18 kB (+1.37%) 86.2 kB → 87.37 kB
home/runner/work/actual/actual/packages/loot-core/src/shared/transactions.ts 📈 +84 B (+0.91%) 9.01 kB → 9.09 kB
src/components/transactions/TransactionList.tsx 📈 +100 B (+0.60%) 16.34 kB → 16.44 kB
src/components/filters/FiltersMenu.tsx 📈 +30 B (+0.16%) 18.29 kB → 18.32 kB
src/components/reports/reports/Calendar.tsx 📈 +25 B (+0.08%) 29.45 kB → 29.47 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/index.js 9.56 MB → 9.57 MB (+5.78 kB) +0.06%
static/js/wide.js 164.15 kB → 165.75 kB (+1.6 kB) +0.97%
static/js/ReportRouter.js 1.16 MB → 1.16 MB (+25 B) +0.00%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/indexeddb-main-thread-worker-e59fee74.js 12.94 kB 0%
static/js/workbox-window.prod.es5.js 5.64 kB 0%
static/js/ca.js 187.93 kB 0%
static/js/da.js 106.2 kB 0%
static/js/de.js 179.89 kB 0%
static/js/en-GB.js 7.18 kB 0%
static/js/en.js 170.86 kB 0%
static/js/es.js 174.37 kB 0%
static/js/fr.js 179.41 kB 0%
static/js/it.js 170.98 kB 0%
static/js/nb-NO.js 156.8 kB 0%
static/js/nl.js 113.06 kB 0%
static/js/pl.js 89.65 kB 0%
static/js/pt-BR.js 182.89 kB 0%
static/js/th.js 181.58 kB 0%
static/js/uk.js 215.35 kB 0%
static/js/resize-observer.js 18.37 kB 0%
static/js/BackgroundImage.js 120.54 kB 0%
static/js/narrow.js 638.11 kB 0%
static/js/TransactionList.js 106.48 kB 0%
static/js/AppliedFilters.js 9.71 kB 0%
static/js/usePayeeRuleCounts.js 11.57 kB 0%
static/js/useTransactionBatchActions.js 13.23 kB 0%
static/js/FormulaEditor.js 1.04 MB 0%

loot-core

Total

Files count Total bundle size % Changed
1 5.83 MB → 5.83 MB (+614 B) +0.01%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/server/transactions/export/export-to-csv.ts 📈 +304 B (+9.27%) 3.2 kB → 3.5 kB
home/runner/work/actual/actual/packages/loot-core/src/shared/rules.ts 📈 +80 B (+3.09%) 2.53 kB → 2.6 kB
home/runner/work/actual/actual/packages/loot-core/src/shared/transactions.ts 📈 +88 B (+1.21%) 7.12 kB → 7.21 kB
home/runner/work/actual/actual/packages/loot-core/src/server/aql/schema/index.ts 📈 +142 B (+1.17%) 11.87 kB → 12.01 kB
View detailed bundle breakdown

Added

Asset File Size % Changed
kcab.worker.D7gE_FU7.js 0 B → 5.83 MB (+5.83 MB) -

Removed

Asset File Size % Changed
kcab.worker.BJdSX9Vk.js 5.83 MB → 0 B (-5.83 MB) -100%

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged
No assets were unchanged


api

Total

Files count Total bundle size % Changed
1 4.44 MB → 4.44 MB (+558 B) +0.01%
Changeset
File Δ Size
src/server/transactions/export/export-to-csv.ts 📈 +272 B (+9.25%) 2.87 kB → 3.14 kB
src/shared/rules.ts 📈 +72 B (+3.26%) 2.16 kB → 2.23 kB
src/shared/transactions.ts 📈 +84 B (+1.31%) 6.28 kB → 6.36 kB
src/server/aql/schema/index.ts 📈 +130 B (+1.19%) 10.68 kB → 10.8 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
bundle.api.js 4.44 MB → 4.44 MB (+558 B) +0.01%

Smaller
No assets were smaller

Unchanged
No assets were unchanged


🔄 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/7164 **Author:** [@jhjessup](https://github.com/jhjessup) **Created:** 3/9/2026 **Status:** ❌ Closed **Base:** `master` ← **Head:** `master` --- ### 📝 Commits (10+) - [`e94cb33`](https://github.com/actualbudget/actual/commit/e94cb337a9e26a78d1f8ba32424eced0ea221fae) [AI] Add reimbursement tracking for transactions - [`1a21485`](https://github.com/actualbudget/actual/commit/1a21485790c0ebf752d3fbe72f4eb41f45a2e226) [AI] Fix migration timestamp, add reimbursable visibility toggle, and release note - [`41d55a9`](https://github.com/actualbudget/actual/commit/41d55a904e4980c8f8f1225d95e6b0e1a3cc62e7) Merge pull request #1 from jhjessup/claude/review-contribution-guidelines-wcJQj - [`635a0be`](https://github.com/actualbudget/actual/commit/635a0be2393acb47c44873b0ac57a8efad546dcf) Merge pull request #2 from jhjessup/claude/add-reimbursement-tracking-4naB8 - [`b10c611`](https://github.com/actualbudget/actual/commit/b10c61161f05348b2d740c13225652b886f83271) [AI] Wire ReimbursableCell into TransactionsTable with keyboard navigation - [`b08ec68`](https://github.com/actualbudget/actual/commit/b08ec687cd68096735937f2b468372ef7477ad81) Merge branch 'master' into claude/wire-reimbursable-cell-7TtOs - [`908f43e`](https://github.com/actualbudget/actual/commit/908f43ee9099bf4ce00b9ef3900783419b561ad8) Merge pull request #3 from jhjessup/claude/wire-reimbursable-cell-7TtOs - [`add663e`](https://github.com/actualbudget/actual/commit/add663e1790dc582fffaa8b4376700372ed45da4) Rename 7154.md to 7164.md - [`b5f9122`](https://github.com/actualbudget/actual/commit/b5f91220ac1b4780353d990a305754834ed79094) [AI] Fix duplicate ReimbursableCell declaration in TransactionsTable - [`c03dd27`](https://github.com/actualbudget/actual/commit/c03dd27a1e417d1e5fd079fb7ce440098f44c61f) Merge pull request #4 from jhjessup/claude/fix-duplicate-cell-declaration-cVwYD ### 📊 Changes **99 files changed** (+674 additions, -88 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/build.yml` (+1 -0) 📝 `.github/workflows/docker-edge.yml` (+0 -9) 📝 `.github/workflows/docker-release.yml` (+10 -11) 📝 `.github/workflows/electron-master.yml` (+2 -1) 📝 `.github/workflows/netlify-release.yml` (+1 -0) 📝 `.github/workflows/publish-flathub.yml` (+1 -0) 📝 `.github/workflows/publish-npm-packages.yml` (+2 -0) 📝 `.github/workflows/size-compare.yml` (+4 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-4-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-5-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-6-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png` (+0 -0) _...and 79 more files_ </details> ### 📄 Description ## Description Add reimbursable/reimbursed fields to transactions, enabling users to mark expenses as reimbursable, track reimbursement status, and link reimbursement transactions to original expenses. Changes: - Database migration adding reimbursable, reimbursed, and reimbursed_by columns - AQL schema, TypeScript types, and DB types updated - Inline reimbursable icon toggle in desktop transaction list - Reimbursable toggle in mobile transaction edit form - Filter support for reimbursable and reimbursed fields - CSV export includes reimbursable/reimbursed status - Rules engine supports reimbursable/reimbursed conditions - Updated test snapshots First pass (Implementation): https://claude.ai/code/session_017pbmHKUDPsAP4G6x4SMjha Second pass (Review): https://claude.ai/code/session_01JREZqUeebhQANxaXdnmzNy ## Related issue(s) Resolves https://github.com/actualbudget/actual/issues/7158 ## Testing All automated test frameworks passed in IDE ## Checklist - [x] Release notes added (see link above) - [x] No obvious regressions in affected areas - [x] Self-review has been performed - I understand what each change in the code does and why it is needed <!--- actual-bot-sections ---> <hr /> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 27 | 14.91 MB → 14.92 MB (+7.4 kB) | +0.05% loot-core | 1 | 5.83 MB → 5.83 MB (+614 B) | +0.01% api | 1 | 4.44 MB → 4.44 MB (+558 B) | +0.01% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 27 | 14.91 MB → 14.92 MB (+7.4 kB) | +0.05% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/components/transactions/ReimbursableCell.tsx` | 🆕 +2.9 kB | 0 B → 2.9 kB `home/runner/work/actual/actual/packages/loot-core/src/shared/rules.ts` | 📈 +198 B (+2.37%) | 8.15 kB → 8.34 kB `src/components/accounts/Account.tsx` | 📈 +1.03 kB (+2.03%) | 50.67 kB → 51.7 kB `src/components/mobile/transactions/TransactionEdit.tsx` | 📈 +1.3 kB (+1.97%) | 65.99 kB → 67.29 kB `src/components/accounts/Header.tsx` | 📈 +585 B (+1.93%) | 29.54 kB → 30.11 kB `src/components/transactions/TransactionsTable.tsx` | 📈 +1.18 kB (+1.37%) | 86.2 kB → 87.37 kB `home/runner/work/actual/actual/packages/loot-core/src/shared/transactions.ts` | 📈 +84 B (+0.91%) | 9.01 kB → 9.09 kB `src/components/transactions/TransactionList.tsx` | 📈 +100 B (+0.60%) | 16.34 kB → 16.44 kB `src/components/filters/FiltersMenu.tsx` | 📈 +30 B (+0.16%) | 18.29 kB → 18.32 kB `src/components/reports/reports/Calendar.tsx` | 📈 +25 B (+0.08%) | 29.45 kB → 29.47 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/index.js | 9.56 MB → 9.57 MB (+5.78 kB) | +0.06% static/js/wide.js | 164.15 kB → 165.75 kB (+1.6 kB) | +0.97% static/js/ReportRouter.js | 1.16 MB → 1.16 MB (+25 B) | +0.00% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/indexeddb-main-thread-worker-e59fee74.js | 12.94 kB | 0% static/js/workbox-window.prod.es5.js | 5.64 kB | 0% static/js/ca.js | 187.93 kB | 0% static/js/da.js | 106.2 kB | 0% static/js/de.js | 179.89 kB | 0% static/js/en-GB.js | 7.18 kB | 0% static/js/en.js | 170.86 kB | 0% static/js/es.js | 174.37 kB | 0% static/js/fr.js | 179.41 kB | 0% static/js/it.js | 170.98 kB | 0% static/js/nb-NO.js | 156.8 kB | 0% static/js/nl.js | 113.06 kB | 0% static/js/pl.js | 89.65 kB | 0% static/js/pt-BR.js | 182.89 kB | 0% static/js/th.js | 181.58 kB | 0% static/js/uk.js | 215.35 kB | 0% static/js/resize-observer.js | 18.37 kB | 0% static/js/BackgroundImage.js | 120.54 kB | 0% static/js/narrow.js | 638.11 kB | 0% static/js/TransactionList.js | 106.48 kB | 0% static/js/AppliedFilters.js | 9.71 kB | 0% static/js/usePayeeRuleCounts.js | 11.57 kB | 0% static/js/useTransactionBatchActions.js | 13.23 kB | 0% static/js/FormulaEditor.js | 1.04 MB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 5.83 MB → 5.83 MB (+614 B) | +0.01% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/server/transactions/export/export-to-csv.ts` | 📈 +304 B (+9.27%) | 3.2 kB → 3.5 kB `home/runner/work/actual/actual/packages/loot-core/src/shared/rules.ts` | 📈 +80 B (+3.09%) | 2.53 kB → 2.6 kB `home/runner/work/actual/actual/packages/loot-core/src/shared/transactions.ts` | 📈 +88 B (+1.21%) | 7.12 kB → 7.21 kB `home/runner/work/actual/actual/packages/loot-core/src/server/aql/schema/index.ts` | 📈 +142 B (+1.17%) | 11.87 kB → 12.01 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.D7gE_FU7.js | 0 B → 5.83 MB (+5.83 MB) | - **Removed** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.BJdSX9Vk.js | 5.83 MB → 0 B (-5.83 MB) | -100% **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** No assets were unchanged </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 4.44 MB → 4.44 MB (+558 B) | +0.01% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/server/transactions/export/export-to-csv.ts` | 📈 +272 B (+9.25%) | 2.87 kB → 3.14 kB `src/shared/rules.ts` | 📈 +72 B (+3.26%) | 2.16 kB → 2.23 kB `src/shared/transactions.ts` | 📈 +84 B (+1.31%) | 6.28 kB → 6.36 kB `src/server/aql/schema/index.ts` | 📈 +130 B (+1.19%) | 10.68 kB → 10.8 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 ----- | --------- | --------- bundle.api.js | 4.44 MB → 4.44 MB (+558 B) | +0.01% **Smaller** No assets were smaller **Unchanged** No assets were unchanged </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-04-18 08:52:25 -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#32905