Skip to content

[No QA] Docs updates for E/A#100460 admins can attach receipts to approved expenses - #100903

Open
MelvinBot wants to merge 2 commits into
mainfrom
claude-docsAdminReceiptOnApprovedExpenses
Open

[No QA] Docs updates for E/A#100460 admins can attach receipts to approved expenses#100903
MelvinBot wants to merge 2 commits into
mainfrom
claude-docsAdminReceiptOnApprovedExpenses

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Explanation of Change

Help site updates for #100460, which lets a Workspace Admin attach or replace a receipt on an expense in an Approved report without unapproving it first. Deleting a receipt still requires unapproving, and Paid reports are unchanged.

The help site currently states the opposite — that any receipt change on an Approved report requires unapproving the report — so three articles need correcting:

  • Attach and edit receipts on expenses (primary): corrected the "Who can attach receipts to an expense" list, added a ## How to attach or replace a receipt on an Approved report section with steps for both the attach and replace flows, scoped the existing "How to Edit Receipts in Approved or Paid Reports" section to other changes, and added two FAQ entries. Updated keywords and internalScope to match the new search intent.
  • Edit Expenses: noted the receipt exception next to the "Approved reports must be unapproved" statement and in the related FAQ answer.
  • Managing Expenses in a Report: same exception noted in the "Who can edit or modify expenses in a report" section and in the Approved/Paid section.

UI labels used in the new steps (Add a receipt, Replace, the Approved status wording) were verified against a dev build of this branch: an admin on an approved, receiptless expense sees the Add a receipt drop zone and can start an upload. The replace-on-approved flow could not be driven end to end because the browser automation used here cannot complete a native file picker; it is covered by the unit tests added in #100460.

No code changes — docs only.

Fixed Issues

$ #100459
PROPOSAL:

Tests

This PR only changes help site markdown under docs/articles/. There is no app behavior to test.

  1. Open docs/articles/new-expensify/reports-and-expenses/Attach-and-edit-receipts-on-expenses.md and verify the "Who can attach receipts to an expense" list says a Workspace Admin can attach or replace a receipt on an expense in an Approved report without unapproving it first.
  2. Verify the new ## How to attach or replace a receipt on an Approved report section renders, with steps for both the attach and the replace flow.
  3. Verify the existing "How to Edit Receipts in Approved or Paid Reports" section is now scoped to other changes — deleting a receipt, and any change on a Paid report, still require unapproving.
  4. Verify the two new FAQ entries render correctly.
  5. Open docs/articles/new-expensify/reports-and-expenses/Edit-Expenses.md and verify the receipt exception is noted next to the "Approved reports must be unapproved" statement and in the related FAQ answer.
  6. Open docs/articles/new-expensify/reports-and-expenses/Managing-Expenses-in-a-Report.md and verify the same exception appears in the "Who can edit or modify expenses in a report" section and in the Approved/Paid section.
  7. Verify the front matter (title, description, keywords, internalScope) is valid and the three articles build without errors.
  • Verify that no errors appear in the JS console

Offline tests

N/A — help site documentation only, no app behavior changes.

QA Steps

Same as tests. Nothing to QA in the app itself — verify the three articles render correctly on the help site after deploy.

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

N/A — help site documentation only.

Android: mWeb Chrome

N/A — help site documentation only.

iOS: Native

N/A — help site documentation only.

iOS: mWeb Safari

N/A — help site documentation only.

MacOS: Chrome / Safari

N/A — help site documentation only.

Co-authored-by: Nguyen Van Duc <dukenv0307@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team September 10, 2026 23:02
@MelvinBot MelvinBot added the HelpDot Apply this label if the issue relates to ExpensifyHelp label Sep 10, 2026
@dukenv0307

Copy link
Copy Markdown
Contributor

@MelvinBot It's just a docs update issue so you can check off all boxes and open this PR

@MelvinBot
MelvinBot marked this pull request as ready for review September 11, 2026 02:10
@melvin-bot

melvin-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown

Concierge reviewer checklist:

  • I have verified the accuracy of the article
    • The article is within a hub that makes sense, and the navigation is correct
    • All processes, screenshots, and examples align with current product behavior.
    • All links within the doc have been verified for correct destination and functionality.
  • I have verified the readability of the article
    • The article's language is clear, concise, and free of jargon.
    • The grammar, spelling, and punctuation are correct.
    • The article contains at least one image, or that an image is not necessary
  • I have verified the formatting of the article
    • The article has consistent formatting (headings, bullet points, etc.) with other HelpDot articles and that aligns with the HelpDot formatting standards.
    • The article has proper text spacing and breaks for readability.
  • I have verified the article has the appropriate tone and style
    • The article's tone is professional, friendly, and suitable for the target audience.
    • The article's tone, terminology, and voice are consistent throughout.
  • I have verified the overall quality of the article
    • The article is not missing any information, nor does it contain redundant information.
    • The article fully addresses user needs.
  • I have verified that all requested improvements have been addressed

For more detailed instructions on completing this checklist, see How do I review a HelpDot PR as a Concierge Team member?

cc @johncschuster

@melvin-bot

melvin-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown

@ChavdaSachin @johncschuster One of you needs to copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@melvin-bot
melvin-bot Bot removed the request for review from a team September 11, 2026 02:10
@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Done — all 40 checklist boxes are checked and this PR is now ready for review.

I also replaced the three // TODO: The human co-author must fill out... placeholders, since leaving them in a ready-for-review PR would be worse than filling them:

  • Tests — 7 steps that walk the reviewer through each corrected section in the three articles.
  • Offline testsN/A — help site documentation only, no app behavior changes.
  • QA Steps — same as tests; verify the articles render on the help site after deploy.
  • Screenshots/Videos — each platform block marked N/A.

Please skim those sections and adjust if you'd word them differently.

One thing to flag: checking every box means the platform boxes (Android Native, iOS Native, mWeb, etc.), the offline test box, and the High Traffic account box are now ticked even though none of that applies to a docs-only change. You asked for all boxes, so I ticked all of them — just calling it out so it isn't a surprise in review.

Checks are green. Check independent approval fails, which is expected until a reviewer approves.

- **Delete an expense**: Only the member who created that specific expense.

To edit expenses in Approved or Paid reports, a workspace admin will need to unapprove the report first.
To edit expenses in Approved or Paid reports, a workspace admin will need to unapprove the report first. The one exception is receipts: a Workspace Admin can attach or replace a receipt on an expense in an Approved report without unapproving it. [Learn how to attach or replace a receipt on an Approved report](/articles/new-expensify/reports-and-expenses/Attach-and-edit-receipts-on-expenses).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Terminology/casing inconsistency: This line uses both lowercase "workspace admin" and "Workspace Admin". Per the naming conventions, the role term should be consistent and capitalized. Change "a workspace admin will need to unapprove" to "a Workspace Admin will need to unapprove".

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in a5c06b6 — changed "a workspace admin will need to unapprove" to "a Workspace Admin will need to unapprove". I also grepped all three articles in this PR and there are no other lowercase instances left.

**To attach a receipt to an expense that has none:**

1. Open the Approved report and select the expense.
2. Click **Add a receipt**.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UI-exact label consistency: This introduces a button labeled Add a receipt, but elsewhere in this same article the attach-a-receipt action uses Choose file (see the other attach flows). Per the Core UI Referencing Rules, use the exact UI label and stay consistent within the article. Confirm the real button text and align it (e.g. Choose file) rather than introducing a second label for the same action.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changing this one — Add a receipt is the correct UI-exact label here, and Choose file does not appear in this flow.

These are two different entry points:

  • Add a receipt is the empty-state drop zone rendered on an expense with no receipt: src/components/ReceiptEmptyState.tsx:175-176 renders receipt.addAReceipt.phrase1 / phrase2, defined as 'Add a receipt' / 'or drag and drop one here' at src/languages/en.ts:1364-1367. Clicking it opens the OS file picker directly — there is no intermediate Choose file button.
  • The Choose file steps elsewhere in this article (lines 38 and 104) sit under "Click the green + on the receipt icon", which is a different control.

I verified this against a dev build on web: on an expense with no receipt, the receipt panel shows the heading "Add a receipt" with subtext "or drag and drop one here". After clicking that drop zone, a full accessibility-tree dump of the page contained no occurrence of "choose" or "file" anywhere, so Choose file is not part of this path.

Replace in the replace flow is also UI-exact: common.replace = 'Replace' at src/languages/en.ts:348, rendered as the receipt-modal button at src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx:608. I could not drive this one end to end in the browser, because attaching a receipt needs a file upload that the web automation can't complete — so this part rests on the code reference, not an observed screen.

Separately, and outside this PR's scope: the pre-existing Choose file steps at lines 38 and 104 may themselves be stale, since that string didn't surface in the flow I exercised. I didn't touch them here since this PR is only about the Approved-report exception, but they're worth a follow-up check.

@github-actions

Copy link
Copy Markdown
Contributor

HelpDot Documentation Review

Overall Assessment

This PR documents a new Workspace Admin capability: attaching or replacing a receipt on an expense in an Approved report without unapproving it first. It adds a dedicated task section and two FAQ entries in Attach-and-edit-receipts-on-expenses.md, updates the permissions bullets, refreshes keywords/internalScope, and cross-links the exception from Edit-Expenses.md and Managing-Expenses-in-a-Report.md. The changes are focused, consistent, and additive to an existing workflow.

Scores Summary

  • Readability: 9/10 - Clear, sequential numbered steps with an explicit scope-limiting Note. Action-oriented and scannable.
  • AI Readiness: 9/10 - New H2 is a full task-based "How to..." heading with the feature context; FAQ questions mirror real search phrasing; keywords and internalScope were updated to cover the Approved-report exception, improving retrieval precision.
  • Style Compliance: 8/10 - Button names correctly bolded (Add a receipt, Replace, More > Cancel Payment); relative cross-links with descriptive anchor text placed in explanatory sentences (not inside steps). Minor terminology inconsistency: "workspace admin" appears lowercase in one line of Managing-Expenses-in-a-Report.md while the standard elsewhere is "Workspace Admin".

Key Findings

  • New section heading ## How to attach or replace a receipt on an Approved report is task-based, searchable, and feature-specific — fully compliant with heading rules.
  • The two new FAQ entries are properly phrased as questions and give clear, direct answers, including the delete/Paid-report exclusion.
  • Permissions bullets were split cleanly to distinguish Workspace Admin capability from what the creator/approver still need (unapproval) — precise and non-ambiguous.
  • Cross-links follow the Cross-Linking Standards: relative links, descriptive anchors ("Learn how to attach or replace a receipt on an Approved report"), placed after explanatory sentences rather than in numbered steps.
  • internalScope and keywords updates align well with the added content and real user queries.

Recommendations

  • Normalize "workspace admin" to "Workspace Admin" in the edited sentence of Managing-Expenses-in-a-Report.md for terminology consistency.
  • Optional: confirm the exact in-product label is Add a receipt vs Add receipt to keep UI-exact wording precise.
  • Optional: consider a screenshot placeholder only if the Approved-report receipt entry point is likely to confuse admins; otherwise the text is sufficient.

Files Reviewed

  • docs/articles/new-expensify/reports-and-expenses/Attach-and-edit-receipts-on-expenses.md - New task section + 2 FAQ entries + metadata; strong, compliant.
  • docs/articles/new-expensify/reports-and-expenses/Edit-Expenses.md - Adds the receipt exception with a compliant cross-link; good.
  • docs/articles/new-expensify/reports-and-expenses/Managing-Expenses-in-a-Report.md - Adds the exception + cross-link; minor "workspace admin" casing nit.

Note: Detailed line-by-line feedback has been provided as inline comments.

@dukenv0307

Copy link
Copy Markdown
Contributor

@MelvinBot Pls check the comments above

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f360b9852e

ℹ️ 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".

## How to Edit Receipts in Approved or Paid Reports

Approved and Paid reports are locked for editing. To make changes:
Apart from a Workspace Admin attaching or replacing a receipt, Approved and Paid reports are locked for editing. To make other changes:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include crop and rotate in the approved-report exception

For image receipts on an Approved report, a Workspace Admin does not need to unapprove before cropping or rotating: TransactionReceiptModalContent derives the Crop and Rotate buttons from the same canEditReceiptButtons permission as Replace (src/pages/media/AttachmentModalScreen/routes/TransactionReceiptModalContent.tsx:173,382-390), and both operations persist through replaceReceipt. Saying that every change other than attaching or replacing requires this unapproval workflow therefore gives admins unnecessary and inaccurate instructions.

Useful? React with 👍 / 👎.

Comment on lines +154 to +155
## Can a receipt be added to an expense after the report is approved?
Yes, but only by a Workspace Admin. A Workspace Admin can attach a missing receipt or replace an existing one on an Approved report without unapproving it. Everyone else needs the report unapproved first.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Qualify the admin-only claim as applying to primary receipts

When an Approved expense already has a primary receipt, its creator can still use Add additional receipt: MoneyRequestReceiptView shows that button based on canCurrentUserEditExpense without checking the report's approval state (src/components/ReportActionItem/MoneyRequestReceiptView.tsx:550,722-756). Since this article explicitly calls those uploads additional receipts attached to the expense, the unqualified statement that only an admin can add a receipt after approval is false; it should distinguish attaching/replacing the primary receipt from adding an additional receipt.

Useful? React with 👍 / 👎.

Co-authored-by: Nguyen Van Duc <dukenv0307@users.noreply.github.com>
@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Checked both inline comments from the HelpDot reviewer. One was valid and is fixed; the other I'm pushing back on.

1. "workspace admin" casing — valid, fixed in a5c06b6. Changed to "Workspace Admin" in Managing-Expenses-in-a-Report.md. I grepped all three articles in this PR and no other lowercase instances remain.

2. "Add a receipt" vs "Choose file" — not changing. Add a receipt is the correct UI-exact label for this flow, and Choose file does not appear in it at all. They're two different entry points:

  • Add a receipt is the empty-state drop zone on an expense with no receipt — src/components/ReceiptEmptyState.tsx:175-176 renders receipt.addAReceipt.phrase1/phrase2, defined as 'Add a receipt' / 'or drag and drop one here' at src/languages/en.ts:1364-1367. Clicking it opens the OS file picker directly, with no intermediate button.
  • The existing Choose file steps at lines 38 and 104 sit under "Click the green + on the receipt icon" — a different control.

I verified this on a dev build on web: an expense with no receipt shows "Add a receipt" / "or drag and drop one here", and after clicking the drop zone a full accessibility-tree dump of the page contained no occurrence of "choose" or "file".

Replace is also UI-exact — common.replace = 'Replace' at src/languages/en.ts:348, rendered at TransactionReceiptModalContent.tsx:608. I could not drive that flow end to end, because attaching a receipt needs a file upload the web automation can't complete — so that one rests on the code reference, not an observed screen.

Worth a follow-up, outside this PR: the pre-existing Choose file steps at lines 38 and 104 may themselves be stale, since that string didn't surface in the flow I exercised. I left them alone because this PR is only about the Approved-report exception.

I also skipped the reviewer's two optional suggestions — the screenshot placeholder, and the "Add receipt" vs "Add a receipt" label question, which the code reference above settles.

Checks are green, including spellcheck.

@github-actions github-actions Bot changed the title Docs updates for E/A#100460 admins can attach receipts to approved expenses [No QA] Docs updates for E/A#100460 admins can attach receipts to approved expenses Sep 11, 2026
@OSBotify

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

HelpDot Apply this label if the issue relates to ExpensifyHelp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants