Add itemized receipt requirement settings for workspace and category rules#73939
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
|
LGTM |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@dangrous I opened a darft PR here ... there are way more changes than I expected 😂 ... I will be testing it over the next few days hopefully i get it done this week |
|
still testing ... |
|
@dangrous After spending some time and some trial and error We are finally seeing the light; the first test passed 🎉 Screen.Recording.2025-11-16.at.21.25.16.movNow I am just waiting for the backend changes to hit prod to complete the checklist |
|
Awesome!! |
|
Great... waiting for the backend to be deployed to make the final integration |
|
All the BE code is now merged, just waiting on deploy! |
|
Great! Could you please let me know what the endpoints are and share any documentation available for them? |
|
Sure:
Basically it should be exactly the same as the existing Let me know how that works for you and if I need to make any updates! |
looking at those commands i see that they dont havve the |
|
@dangrous There is a backend issue where, the backend is still responding with here is the case with multiple expenses per report : Screen.Recording.2025-11-22.at.19.30.03.movand for single expenses Screen.Recording.2025-11-22.at.19.30.41.mov |
|
@dangrous thoughts on that last comment? |
|
Ah so sorry, missed this entirely! Will look momentarily |
|
hey @abzokhattab so sorry for the delay! I believe that is correct behavior, since the workspace settings are configured so you need a receipt over 3 euro, which all of those expenses are - and they don't currently have receipts. The best way to test would be to add a receipt that is NOT itemized, otherwise it's always going to trigger the "receipt required" violation first (and we only display one at a time there) |
While @abzokhattab is investigating, @heyjennahay you can also do the following in Old Dot:
|
|
Here are two examples. They're from the same supermarket and is a "short" receipt saying X items (stucks) + date + amount @dangrous has said they are being flagged as itemised so I don't think it's an issue with the logic |
|
Yeah @abzokhattab I think that's something we can play around with the prompt for, as long as it's the parsing and not the violation logic that's the issue we should be good for this, but please confirm. (Might as well handle the conflicts now too, I guess?) Any other feedback other than those issues @heyjennahay ? |
|
i tested both cases, and they are working for me Screen.Recording.2026-01-22.at.23.36.20.movScreen.Recording.2026-01-22.at.23.42.22.mov |
|
@dangrous also resolved the conflicts |
|
Nope everything looks good to me. Nice work guys! |
8f29b90
|
Let's do it! Thanks for the great work. We'll watch this over the next couple of days to see if there's any weirdness... |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/dangrous in version: 9.3.9-0 🚀
|
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.3.9-2 🚀
|


Explanation of Change
Adding a new rule: itemized receipt required
Fixed Issues
$ #73780
PROPOSAL:
Tests
Prerequisites
Test 1: Workspace Level - Set Itemized Receipt Threshold
Steps:
Validate:
Test 2: Category Level - Override Options
Steps:
Validate:
Test 3: Violation Triggers Correctly
Steps:
Validate:
Test 4: Category "Always Require" at Any Amount
Steps:
Validate:
Offline tests
Same as tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, 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.ScrollViewcomponent to make it scrollable when more elements are added to the page.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
Screen.Recording.2025-12-17.at.03.05.03.mov
Android: mWeb Chrome
Screen.Recording.2025-12-17.at.03.10.50.mov
iOS: Native
Screen.Recording.2025-12-17.at.03.04.11.mov
iOS: mWeb Safari
Screen.Recording.2025-12-17.at.02.41.35.mov
MacOS: Chrome / Safari
Screen.Recording.2025-12-17.at.01.50.50.mov
Screen.Recording.2025-12-17.at.02.10.40.mov