Skip to content

[No QA] Docs updates for E/A#101356 document .ofx and .qfx personal card imports - #101377

Closed
MelvinBot wants to merge 1 commit into
mainfrom
claude-docsOfxQfxPersonalCardImport
Closed

MelvinBot wants to merge 1 commit into
mainfrom
claude-docsOfxQfxPersonalCardImport

Conversation

@MelvinBot

Copy link
Copy Markdown
Contributor

Explanation of Change

Help site follow-up to Read the picked file name from the URI when the native picker returns no metadata, which fixed .ofx/.qfx statement uploads failing with "Invalid file type" on iOS native.

That PR made the statement-upload path in Wallet > Import transactions work on native, but docs/articles/new-expensify/connect-credit-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md never documented that path at all. The article listed only .CSV, .TXT, .XLS, and .XLSX, and its only procedure ended in the column mapping step — so a member following it would not know statement files are accepted, and would be surprised when the mapping step is skipped.

The live UI on the upload screen reads: "Drag and drop your spreadsheet or bank statement here, or choose a file below. Supported formats: .csv, .txt, .xls, .xlsx, .ofx, and .qfx." This PR brings the article in line with that:

  • Adds .OFX and .QFX to the accepted file types in the FAQ.
  • Adds a ## How to import personal card transactions from a bank statement file section covering the statement path, which has no mapping step.
  • Fixes the existing procedure, which had a duplicated step 3 and broken numbering (1, 2, 3, 3, 5, 6), and updates it to the current UI: the Card display name field, the Next button, and the Choose file button.
  • Adds FAQ entries explaining why the mapping step is skipped for statements, and that a card already imported from a spreadsheet cannot take a statement file (per shouldAllowBankStatements={!hasImportedSpreadsheet} in ImportTransactionsSpreadsheetPage).
  • Broadens the title metadata, description, keywords, and internalScope to cover statement files.

No change is needed for Import-Company-Card-Transactions-From-a-Spreadsheet.md — statement uploads are enabled only on the Wallet personal card page, so .CSV/.TXT/.XLS/.XLSX remains correct there.

All UI labels in this article were verified against the live NewDot web UI: the Wallet tab, the Cards section, Import transactions, Card display name, Next, Choose file, and the supported-formats line.

Applied docs/HELPSITE_NAMING_CONVENTIONS.md, docs/HELP_AUTHORING_GUIDELINES.md, and docs/TEMPLATE.md: one # title plus # FAQ, only ## section headings, every heading task-based and feature-specific, bolded Sentence case UI labels, unified navigation sentence, relative cross-links, and a screenshot suggestion in the non-rendered <!-- SCREENSHOT: --> comment format.

Fixed Issues

$ #101356
PROPOSAL:

Tests

// TODO: The human co-author must fill out the tests you ran before marking this PR as "ready for review".
// Please describe what tests you performed that validate your changes worked.

  • Verify that no errors appear in the JS console

Offline tests

Not applicable — this PR changes help site markdown only.

QA Steps

// TODO: The human co-author must fill out the QA tests you ran before marking this PR as "ready for review".
// Please describe what QA needs to do to validate your changes and what areas they need to test for regressions.

  • 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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

@aimane-chnaif, please review the files changed and confirm they reflect the current behavior. Then post a new comment saying @MelvinBot mark this PR as ready for review.

Co-authored-by: Aimane Chnaif <aimane-chnaif@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team September 16, 2026 20:12
@MelvinBot MelvinBot added the HelpDot Apply this label if the issue relates to ExpensifyHelp label Sep 16, 2026
@github-actions github-actions Bot changed the title Docs updates for E/A#101356 document .ofx and .qfx personal card imports [No QA] Docs updates for E/A#101356 document .ofx and .qfx personal card imports Sep 16, 2026
@OSBotify

Copy link
Copy Markdown
Contributor

A preview of your ExpensifyHelp changes have been deployed to https://a70b3751.helpdot.pages.dev ⚡️

Updated articles:

@aimane-chnaif

aimane-chnaif commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Hold on #101265

@stephanieelliott

stephanieelliott commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

@MelvinBot please complete the task again, but referencing the files under App/docs/articles. on the branch claude-fixCardConnectionIssuesDocs`. Specifically:

  1. Confirm if the changes made in the original PR impact the docs under https://github.com/Expensify/App/tree/claude-fixCardConnectionIssuesDocs/docs/articles
  2. If yes, update this PR to propose those changes

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Yes — one article on claude-fixCardConnectionIssuesDocs is affected, and it's the same article this PR already edits, just at a different path.

[No QA] [Docs] Fix card connection issues: reauthenticate vs. broken connection troubleshooting relocates it:

Path
main (what this PR edits) docs/articles/new-expensify/connect-credit-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md
claude-fixCardConnectionIssuesDocs .../connect-credit-cards/connect-and-manage-personal-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md

On that branch the article is still the pre-101356 text: it lists only .CSV, .TXT, .XLS, .XLSX, documents no statement-upload path, and still carries the duplicated step 3 and broken numbering (1, 2, 3, 3, 5, 6). So every gap this PR fixes exists there too.

The problem to fix: merge order

This PR edits a path that PR 99299 deletes. Either order loses work:

  • 99299 merges first → this PR becomes an edit/rename conflict.
  • This PR merges first → 99299 carries the old text forward to the new path and silently drops the .ofx/.qfx documentation.

Proposed change

Repoint this PR at the restructured branch: base claude-fixCardConnectionIssuesDocs, file moved to connect-and-manage-personal-cards/. The body this PR already wrote ports over as-is except for two deltas:

--- a/docs/articles/new-expensify/connect-credit-cards/connect-and-manage-personal-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md
+++ b/docs/articles/new-expensify/connect-credit-cards/connect-and-manage-personal-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md
@@ frontmatter @@
 internalScope: Audience is all members. Covers how to import, update, and delete personal card transactions from a spreadsheet or an .ofx/.qfx bank statement file. Does not cover company cards or Plaid connections.
+order: 3
 ---
@@ intro @@
-[Learn how to manage personal cards](/articles/new-expensify/connect-credit-cards/Manage-Personal-Cards).
+[Learn how to manage personal cards](/articles/new-expensify/connect-credit-cards/connect-and-manage-personal-cards/Manage-Personal-Cards).
  1. Restore order: 3. This PR dropped it. Harmless against main, but 99299's new folder orders articles by frontmatter order (Connect-Personal-Cards.md uses order: 1, and _meta.yml gives the folder order: 5), so without it the article sinks to the bottom of the new hub.
  2. Fix the Manage-Personal-Cards cross-link to the relocated path. The other two links in the article (Create-and-Submit-Reports, How-to-Delete-Expenses) are untouched by 99299.

No redirect work needed — 99299 already maps the old URL to the new one in docs/redirects.csv.

One question before I port it

This PR retitled the article to sentence case (Import personal card transactions from a spreadsheet). Every sibling article on 99299's branch uses Title Case. Keep sentence case, or match the siblings?

Nothing else on the branch needs changing

What I checked and why it's unaffected
Optional second fix, if you want it in scope

connect-and-manage-personal-cards/Manage-Personal-Cards.md says:

Update the card to pull in new transactions (if not CSV-imported)

That's now imprecise rather than wrong. A statement-imported card is created with bank: CONST.PERSONAL_CARDS.BANK_NAME.CSV (which resolves to 'upload') at ImportTransactions.ts:207, so isCSVImportedPersonalCard is true for it and the Update button is hidden too (PersonalCardDetailsPage.tsx:218). "(if not imported from a file)" would cover both. This predates PR 101356, so I left it out of the proposal above.


I haven't pushed any of this. I can only make code changes to a PR when directed by that PR's author, an assignee, or an existing co-author, and on this PR that's aimane-chnaif.

Two ways to unblock, whichever you prefer:

@stephanieelliott

Copy link
Copy Markdown
Contributor

@MelvinBot land this content directly on claude-fixCardConnectionIssuesDocs

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Done — landed on claude-fixCardConnectionIssuesDocs as 6fd9d2a.

The .ofx/.qfx content now lives on the restructured article at its new path, connect-and-manage-personal-cards/Import-Personal-Card-Transactions-From-a-Spreadsheet.md, so the merge-order hazard is gone. I left a note for reviewers on [No QA] [Docs] Fix card connection issues: reauthenticate vs. broken connection troubleshooting.

spellcheck and the ExpensifyHelp build both pass on the new commit. Check independent approval is red, but that needs a reviewer, not a commit.

Two judgment calls I made, since you didn't specify:

  1. Kept Title Case (Import Personal Card Transactions From a Spreadsheet) rather than the sentence case this PR used. Every sibling in the new connect-and-manage-personal-cards/ hub is Title Case, and keeping it means the commit is a pure content addition with no churn in the title: that feeds the help site nav. Say the word if you'd rather I flip it and the siblings together.
  2. Restored order: 3. This PR had dropped it; without it the article sinks to the bottom of the new hub.

This PR is now superseded — its only change is the same content at a path PR 99299 deletes, so leaving it open reinstates the conflict. I didn't close it, since aimane-chnaif is the assignee here and it's on hold. Either of you can close it, or reply and I will.

What landed
  • Adds .OFX and .QFX to the accepted file types in the FAQ.
  • Adds ## How to import personal card transactions from a bank statement file, which has no column mapping step.
  • Fixes the existing procedure, which had a duplicated step 3 and numbering that ran 1, 2, 3, 3, 5, 6.
  • Updates that procedure to the current UI: the Card display name field, the Next button, and the Choose file button.
  • Adds FAQ entries for why the mapping step is skipped for statements, and why a card already imported from a spreadsheet cannot take a statement file.
  • Broadens the description, keywords, and internalScope.

The optional Manage-Personal-Cards.md tweak I flagged earlier — "(if not CSV-imported)" is also true of statement-imported cards — is not in this commit. It predates PR 101356, so I left it out. Happy to add it if you want it swept up here.

@stephanieelliott

Copy link
Copy Markdown
Contributor

Will be handling this in: #99299

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.

4 participants