Skip to content

[No QA] Add NetSuite SuiteTax setup guidance - #104401

Merged
stephanieelliott merged 2 commits into
mainfrom
twisterdotcom-netsuite-suitetax-docs
Oct 19, 2026
Merged

stephanieelliott merged 2 commits into
mainfrom
twisterdotcom-netsuite-suitetax-docs

Conversation

@twisterdotcom

@twisterdotcom twisterdotcom commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Explanation of Change

A customer SuiteTax setup review showed that the existing NetSuite help did not document two permissions required by the role used for the Expensify connection. This PR updates the existing NetSuite articles rather than adding a separate SuiteTax guide.

The changes:

  • Update Connect-To-NetSuite.md to:
    • Set Tax Details Tab to Full for the connection role.
    • Add the connection role to SuiteTax Engine Roles with Full access.
    • Separate SuiteTax setup, which imports individual Tax Codes, from legacy tax setup, which imports Tax Groups.
  • Update Configure-Netsuite.md so the Tax import setting distinguishes SuiteTax Tax Codes from legacy Tax Groups.
  • Update the existing NS0056 export-error article to clarify that Tax Details Tab remains required when Export Foreign Currency Amount is disabled.

The customer review also surfaced custom records, approval routing, transaction-form fields, and vendor-bill form defaults. Those findings are not included because they are customer-specific or general NetSuite troubleshooting, not baseline SuiteTax setup requirements.

Fixed Issues

N/A — internal documentation update based on a customer setup review and a review of the NetSuite integration code.

PROPOSAL: N/A

Tests

  1. Run git diff --check and confirm it passes.
  2. Run npm run lint-changed and confirm it reports no lintable files changed.
  3. Review the three changed Markdown files and confirm the SuiteTax and legacy-tax instructions remain separate.
  4. Confirm the SuiteTax role requirements appear in the existing connection steps and the NS0056 clarification appears in the existing export-error article.
  5. Confirm editor diagnostics and the GitHub help-site build and spellcheck report no errors.
  • git diff --check passed.
  • npm run lint-changed passed with no lintable files changed.
  • Editor diagnostics reported no warnings or errors in the three changed files.
  • GitHub's help-site build and spellcheck passed.
  • Verify that no errors appear in the JS console (N/A — documentation-only change)

Local npm run spell-changed could not run because node_modules/.bin/cspell is not installed. A system aspell review found only expected product names, UI labels, and identifiers, and GitHub's spellcheck passed.

Offline tests

N/A — documentation-only change; no application or offline behavior changes.

QA Steps

No QA

  • Verify that no errors appear in the JS console (N/A — no application changes)

PR Author Checklist

Unchecked application/platform items are not applicable to this documentation-only change.

  • I linked the correct issue in the ### Fixed Issues section above (N/A — no tracking issue)
  • 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 verified any copy / text that was added to the app 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 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 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.
  • If the PR adds or modifies the UI:
    • I asked an AI agent to review the changes for accessibility issues and addressed its findings.
    • I tested with a screen reader (VoiceOver on macOS) and verified all new/changed elements are reachable with a logical focus order.
    • I verified all new/changed elements have meaningful accessible names and roles.
    • I verified state changes are announced (e.g. checked/unchecked, expanded/collapsed, selected).
  • 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 — documentation-only change.

Android: mWeb Chrome

N/A — documentation-only change.

iOS: Native

N/A — documentation-only change.

iOS: mWeb Safari

N/A — documentation-only change.

MacOS: Chrome / Safari

N/A — documentation-only change.

@OSBotify

This comment has been minimized.

@twisterdotcom
twisterdotcom force-pushed the twisterdotcom-netsuite-suitetax-docs branch from 6531b44 to 681be6b Compare October 19, 2026 21:26
@twisterdotcom

Copy link
Copy Markdown
Contributor Author

Scope update after reviewing the NetSuite integration code: this draft now changes only three files. I removed the standalone SuiteTax article and all customer-specific custom-record, approval-routing, form-field, and vendor-form guidance. The existing preview-bot comment reflects the superseded push; the current diff contains only the two SuiteTax role requirements, the Tax Code/Tax Group clarification, and the NS0056 foreign-currency note.

@twisterdotcom
twisterdotcom force-pushed the twisterdotcom-netsuite-suitetax-docs branch from 681be6b to 67d8cef Compare October 19, 2026 21:29
@OSBotify

This comment has been minimized.

@OSBotify

This comment has been minimized.

@twisterdotcom
twisterdotcom marked this pull request as ready for review October 19, 2026 22:01
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-19T22:05:04.819692Z 67d8cef Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Expensify supports Tax Groups, not individual Tax Codes, except when you use SuiteTax. Under **Setup > Accounting > Set Up Taxes**, set **Tax Code Lists Include** to **Tax Groups And Tax Codes** or **Tax Groups Only**. In the UK and Ireland, make sure each Tax Group contains only one Tax Code.
SuiteTax accounts import individual Tax Codes. Legacy tax accounts import Tax Groups.

### SuiteTax accounts

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.

Heading-level violation: Only # and ## headings are allowed (HELP_AUTHORING_GUIDELINES.md Section 4 and Pre-Publish Checklist — "no ### or deeper"). ### SuiteTax accounts is also a noun-only heading, not task-based. Convert to a ## task-based heading such as ## How to configure taxes for SuiteTax accounts in NetSuite, or restructure as bold sub-labels within the existing ## How to configure taxes in NetSuite section.

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.

Fixed in e42f698. I changed ### SuiteTax accounts to a bold sub-label inside the existing ## How to configure taxes in NetSuite section. I kept one ## section so it still matches step 10 (OAuth) and step 11 (token-based) in the setup lists.


Do not complete the Tax Group steps below.

### Legacy tax accounts

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.

Heading-level violation: ### headings are not allowed (only # and ## per HELP_AUTHORING_GUIDELINES.md Section 4). ### Legacy tax accounts is also noun-only rather than task-based. Convert to a ## task-based heading (e.g. ## How to configure taxes for legacy tax accounts in NetSuite) or use bold sub-labels under the existing ## section.

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.

Fixed in e42f698. ### Legacy tax accounts is now a bold sub-label under the existing ## section.

1. Go to **Setup > Users/Roles > Manage Roles**.
2. Edit the role used for the Expensify connection.
3. Under **Permissions > Lists**, set **Tax Details Tab** to **Full**.
4. Click **Save**.

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 interaction verb violation: Use select, not "click" (HELPSITE_NAMING_CONVENTIONS.md — Actions). Change to Select **Save**.

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.

Fixed in e42f698. Changed to Select **Save**.

5. Go to **Setup > SuiteTax Engine > SuiteTax Engine Roles**.
6. Add the role used for the Expensify connection.
7. Set the access level to **Full**.
8. Click **Save**.

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 interaction verb violation: Use select, not "click" (HELPSITE_NAMING_CONVENTIONS.md — Actions). Change to Select **Save**.

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.

Fixed in e42f698. Changed to Select **Save**.

7. Set the access level to **Full**.
8. Click **Save**.

Do not complete the Tax Group steps below.

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.

Cross-reference clarity: "the Tax Group steps below" is a vague directional reference. Governance discourages vague navigation phrasing (HELPSITE_NAMING_CONVENTIONS.md — Prohibited Language). Point to the specific section by name, e.g. "Do not complete the Legacy tax accounts steps."

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.

Fixed in e42f698. It now reads: "Do not complete the Legacy tax accounts steps."

@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: 67d8cef38e

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

Comment on lines +149 to +151
5. Go to **Setup > SuiteTax Engine > SuiteTax Engine Roles**.
6. Add the role used for the Expensify connection.
7. Set the access level to **Full**.

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 Use the actual SuiteTax role-permission workflow

When a SuiteTax administrator follows these steps, NetSuite does not provide the described SuiteTax Engine Roles page or one aggregate access-level field, so the connection role can remain unconfigured. Oracle's documented workflow is Setup > SuiteTax Engine > Manage SuiteTax Engine Roles, followed by Assign SuiteTax Engine Permissions to Role, where a level must be selected for each required permission on the SuiteTax Engine Permissions subtab; update these steps to identify the permissions that Expensify requires at Full access. See Oracle's SuiteTax Engine Permissions documentation.

Useful? React with 👍 / 👎.

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.

Fixed in e42f698. I confirmed the workflow against Oracle's SuiteTax Engine Permissions page. The steps now say:

  1. Go to Setup > SuiteTax Engine > Manage SuiteTax Engine Roles.
  2. Select Assign SuiteTax Engine Permissions to Role.
  3. In the Role field, choose the connection role.
  4. On the SuiteTax Engine Permissions subtab, set each permission to Full.

I kept "each permission to Full" to match the original guidance. I couldn't confirm the minimum set Expensify needs from the App repo. If only some permissions are required, for example Tax Schedules, please name them and I'll narrow the step.

@github-actions

Copy link
Copy Markdown
Contributor

HelpDot Documentation Review

Overall Assessment

This PR adds NetSuite SuiteTax setup guidance across three existing NetSuite articles. It separates SuiteTax tax setup (individual Tax Codes) from legacy tax setup (Tax Groups), documents two previously missing role permissions required for the Expensify connection, and clarifies a permission requirement in the NS0056 export-error article. The proposed changes are accurate, well-scoped, and improve the completeness of the NetSuite documentation. Scores below reflect only the added/modified lines.

Scores Summary

  • Readability: 8/10 - Added steps are sequential, clear, and action-oriented. The split into SuiteTax vs. legacy tax paths is easy to follow, and the explicit "Do not complete the Tax Group steps below" is a helpful disambiguator.
  • AI Readiness: 6/10 - The renamed "How to configure taxes in NetSuite" heading is task-based and uses the feature name. However, the two new subsections are introduced as H3 "SuiteTax accounts" and "Legacy tax accounts", which breaks two rules: only H1/H2 headings are permitted (no H3), and headings must be task-based (these are noun-only).
  • Style Compliance: 7/10 - UI terminology for the NetSuite-side (third-party) steps is exact and bolded, consistent with the article convention for external UI. The new steps use "Go to", "Click", and "Set ... to" to describe NetSuite UI, and the surrounding pre-existing article already uses this style, so the added lines stay consistent. The governance select/choose rule targets Expensify UI; these are third-party steps.

Key Findings

  • Heading hierarchy violation: the two new H3 subsections ("SuiteTax accounts", "Legacy tax accounts") should be H2 and rewritten as task-based phrases (for example, "How to configure SuiteTax accounts in NetSuite" and "How to configure legacy tax accounts in NetSuite").
  • Positive: the renamed heading "How to configure taxes in NetSuite" is a correct task-based improvement over the old "set up tax groups" wording, and the corresponding numbered references in both the OAuth and token-based step lists were updated consistently.
  • Positive: the Configure-Netsuite.md Tax import line and the NS0056 clarification are accurate, concise, and additive with no scope creep.
  • Positive: step sequences use exact, bolded NetSuite labels and navigation paths, matching the surrounding article style.

Recommendations

  • Priority: promote the two new H3 headings to H2 and make them task-based to satisfy the heading-hierarchy and task-based rules (Authoring Guidelines Sections 2 and 9).
  • Optional: the two SuiteTax permission procedures (role Tax Details Tab and SuiteTax Engine Roles) already read clearly as one continuous numbered list, so no change is required.

Files Reviewed

  • Connect-To-NetSuite.md - Heading rename and new SuiteTax/legacy sections; strong content, but H3 subsections violate the H1/H2-only and task-based heading rules.
  • Configure-Netsuite.md - One-line Tax import clarification; accurate and compliant.
  • NS0056-Export-Error.md - Single clarifying sentence; accurate and compliant.

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

@twisterdotcom

Copy link
Copy Markdown
Contributor Author

@MelvinBot please address the comments here.

@MelvinBot

Copy link
Copy Markdown
Contributor

I addressed all 6 review comments in e42f698 and replied in each thread. All edits are in Connect-To-NetSuite.md:

  • Headings: The ### subsections are now bold sub-labels under the existing ## section. This keeps the section matched to step 10 (OAuth) and step 11 (token-based).
  • Verbs: The new steps now say "Select Save" instead of "Click Save".
  • Cross-reference: The note now points to the Legacy tax accounts steps by name.
  • SuiteTax Engine path (Codex): The steps now follow Oracle's documented workflow: Manage SuiteTax Engine Roles > Assign SuiteTax Engine Permissions to Role, then set each permission on the SuiteTax Engine Permissions subtab to Full.

git diff --check passed. I couldn't run spellcheck locally, so CI will check it. If Expensify needs only some SuiteTax Engine permissions, tell me which ones and I'll narrow the step.

@OSBotify

Copy link
Copy Markdown
Contributor

@stephanieelliott
stephanieelliott merged commit 5a0d90c into main Oct 19, 2026
21 of 22 checks passed
@stephanieelliott
stephanieelliott deleted the twisterdotcom-netsuite-suitetax-docs branch October 19, 2026 23:37
@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to staging by https://github.com/stephanieelliott in version: 9.5.15-1 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

@OSBotify

Copy link
Copy Markdown
Contributor

🚀 Deployed to production by https://github.com/grgia in version: 9.5.15-3 🚀

platform result
🕸 web 🕸 success ✅
🤖 android 🤖 success ✅
🍎 iOS 🍎 success ✅

Bundle Size Analysis (Sentry):

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants