Conversation
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
@Ollyws, as i checked This (issue #98783) is a backend issue, I compared the network response for the amount edit itself against the "originalMessage": {
"amount": 0,
"currency": "TJS",
"isNewDot": true,
"lastModified": "..."
}So this isn't a caching/Onyx timing issue — the backend never persisted the "previous" value for this edit. The client only shows the detailed message initially because of its own optimistic data, which gets replaced once the real data loads fresh, causing the flip to the generic "changed the expense" message. Needs: the backend should persist cc @arosiclair |
|
@Ollyws — just flagging that issue #98788 is out of scope of our issue and wasn't discussed in the issue or PR review, it's an edge case. Thanks! cc @arosiclair |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 11b5ddd12c
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Good for product.
For this issue, I think the data is fine. In product, I think the message text should just say "changed the amount to $0.00" with no "previously" part. And that should stay consistent with the optimistic data and also after the cache reset. Does that work? |
@arosiclair @Ollyws — implemented this. One thing to confirm: the existing message mechanism already supports a "no previously" phrasing, but it uses the verb "set" — so it renders as "set the amount to $0.00", not "changed the amount to $0.00". Getting the literal word "changed" would need a new translation string. Is "set the amount to $0.00" good to ship, or do you want "changed" specifically?
|
|
@x-dev90 we're only getting the
|
@Ollyws, thanks for checking. I confirmed this here, and it’s expected behavior. |
|
Hmm seems a little inconsistent to use |
So when there is no previous value, setting it to $0 shows "set the amount to $0.00" and setting it to $5 shows "changed the amount to $5.00"? I think we should show "set the amount" in both of those scenarios. |
@Ollyws, after checking this further, the nonzero case requires a backend change. For the first amount entered after a failed scan, the backend returns: {
"amount": 400,
"currency": "TJS",
"oldAmount": 0,
"oldCurrency": "TJS"
}Because A frontend-only fix would be unsafe because a legitimate The backend should omit Thanks! cc @arosiclair |
|
Okay I'll find someone who can update the API to do that. Asked here |
|
will take a look |
|
@x-dev90 BE is deployed to prod, please check again |
@Ollyws, addressed this as well. The first amount entry now consistently uses “set the amount” for both zero and nonzero values. Please take another look, thanks! |
|
@x-dev90 On split expense we have an issue where it won't split a $0 expense (expected?) but if we change to a valid value the error persists: Screen.Recording.2026-09-16.at.14.29.50.mov |
|
I'm assuming disallowing setting the amount to $0 is expected on P2P transactions as this is the current behaviour on staging, if anyone disagrees then let me know. |
|
I found one more edge case with a Scan expense: Steps to reproduce:
Expected: The amount shows @arosiclair, Could we hold off on merging while I investigate this further? I’ll share an update once I’ve confirmed the cause. Thanks for your time and review! |
|
Okay let me know when it's ready for review. Btw, we closed out this deploy blocker from the last PR recently: #98737. Let's also make sure that's not still an issue |



Explanation of Change
When a receipt fails to scan, the Amount field showed "$0.00" with no error instead of staying empty. This fixes it across the expense details page, confirmation list, report table, and chat preview — the amount now stays empty with a "missing amount" error until the user manually confirms a value (including 0). Also fixes bulk-editing a failed-scan expense's amount to 0, which previously silently failed to save.
Fixed Issues
$ #94494
PROPOSAL: #94494 (comment)
Tests
Flow 1: Workspace failed scan expense
Flow 2: Split expense failed scan
Flow 3: Report table inline amount edit
Flow 4: Report table inline edit no-op check
Flow 5: Self-DM (track expense) failed scan
Flow 6: Manual $0.00 expense in self-DM (regression check)
Flow 7: Bulk edit multiple to 0
Flow 8: System message stays consistent after confirming 0
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Flow:1
Screen_Recording_20260724_005653_New.Expensify.Dev.mp4
Flow:2
Screen_Recording_20260724_005952_New.Expensify.Dev.mp4
Android: mWeb Chrome
Flow:1
Screen_Recording_20260724_002037_Chrome.mp4
Flow:2
Screen_Recording_20260724_010057_Chrome.mp4
iOS: Native
Flow:1
Screen.Recording.2026-07-24.at.12.35.40.AM.mp4
Flow:2
Screen.Recording.2026-07-24.at.12.40.00.AM.mp4
iOS: mWeb Safari
Flow:1
Screen.Recording.2026-07-24.at.12.40.54.AM.mp4
Flow:2
Screen.Recording.2026-07-24.at.12.42.25.AM.mp4
MacOS: Chrome / Safari
Flow 1:
Flow.1.mp4
Flow 2:
Flow.2.mp4
Flow 3:
Flow.3.mov
Flow 4:
Flow.4.mov
Flow 5:
Flow.5.mov
Flow 6:
Flow.6.mov
Flow 7:
Flow.7.mov
Flow 8:
Screen.Recording.2026-08-25.at.10.55.32.AM.mov