Skip to content

Integrations Error Revamp: Create NetSuite integration troubleshooting docs#84201

Closed
stephanieelliott wants to merge 2 commits intomainfrom
pr-docs-netsuite
Closed

Integrations Error Revamp: Create NetSuite integration troubleshooting docs#84201
stephanieelliott wants to merge 2 commits intomainfrom
pr-docs-netsuite

Conversation

@stephanieelliott
Copy link
Contributor

Master project issue https://github.com/Expensify/Expensify/issues/469226

Breaking main PR into smaller batches: #83106

Creates .MD files for NetSuite integration error messages

@github-actions
Copy link
Contributor

github-actions bot commented Mar 4, 2026

HelpDot Documentation Review

Overall Assessment

This PR adds 174 new Markdown files (87 for Expensify Classic, 87 for New Expensify) documenting NetSuite integration error codes across five subcategories: Authentication-and-Login-errors, Connection-errors, Export-Errors, Sync-Errors, and a NetSuite-FAQ.md. The documentation is well-structured, follows a consistent template, and provides genuinely useful troubleshooting guidance for Workspace Admins. The scope and effort here are substantial. Below are areas of strength and areas that would benefit from revision.


Scores Summary

  • Readability: 8/10 - Strong overall. Articles follow a clear pattern: error quote, explanation, fix steps, FAQ. Language is direct and accessible. Minor issues with error messages not being visually distinguished from body text, and some articles are longer than needed due to repeated boilerplate.
  • AI Readiness: 7/10 - YAML metadata (title, description, keywords, internalScope) is consistently well-formed across all 174 files with proper audience scoping. However, there is a heading hierarchy violation (H1 used for FAQ sections mid-article) and significant content duplication across categories that may confuse AI retrieval. Error messages are not placed in code blocks or blockquotes, making them harder for AI to parse as distinct from instructional text.
  • Style Compliance: 7/10 - Consistent use of "Workspace," "member," and proper UI terms like "three-dot menu" and "Sync Now." Markdown formatting is clean. The main style concerns are: (1) excessive use of horizontal rules as separators, (2) error messages rendered as plain paragraphs rather than blockquotes or code blocks, and (3) some Expensify Classic files reference Expensify Classic UI patterns (Settings > Workspaces > ...) while others use New Expensify patterns (navigation tabs on the left), suggesting inconsistent product-awareness in the Classic docs.

Key Findings

Duplicate Files Across Categories (Critical)

Multiple error codes appear in more than one subcategory within the same product. For example, under Expensify Classic:

  • NS0109-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors
  • NS0123-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors
  • NS0565-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors
  • NS0593-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors
  • NS0739-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors
  • NS0942-Sync-Error.md appears in Authentication-and-Login-errors, Connection-errors, AND Sync-Errors

The same pattern repeats in New Expensify. While the content between duplicates is slightly adapted (Classic uses Settings-based nav, New Expensify uses tab-based nav with web/mobile instructions), having the same error code documented in three separate category folders creates maintenance risk and potential confusion. A single canonical location per error code per product is recommended, with redirects or cross-references if needed. This accounts for roughly 36+ files that may be duplicates.

Heading Hierarchy Violation (Important)

Every file starts with # NS0XXX ... Error in NetSuite Integration (H1), which is correct. However, mid-article, the FAQ section also uses # FAQ (H1). This breaks the heading hierarchy -- there should be only one H1 per document. The FAQ heading should be ## FAQ, and individual FAQ questions currently at ## should remain at ## or move to ###.

Example from every file:

# NS0029 Export Error in NetSuite Integration   <-- H1 (correct)
## Why the NS0029 Export Error Happens           <-- H2 (correct)
## How to Fix the NS0029 Export Error            <-- H2 (correct)
# FAQ                                            <-- H1 (should be ## FAQ)
## Does the NS0029 Export Error Affect...        <-- H2 (would become ### under ## FAQ)

Error Messages Not Formatted as Distinct Elements

Error messages are presented as plain paragraphs:

If you see the error:

NS0029: Unable to export this report due to an error.

For both readability and AI parsing, these should use blockquotes or code blocks:

If you see the error:

> NS0029: Unable to export this report due to an error.

Positive Aspects

  • Exceptionally consistent structure across all 174 files. The template is well-designed and every article follows the same pattern: error display, explanation, fix steps, FAQ.
  • YAML frontmatter is thorough and well-crafted. The internalScope field consistently follows the required format: "Audience is [role]. Covers [topic]. Does not cover [excluded]."
  • Keywords are comprehensive and include the error code, related terms, and "Workspace Admin."
  • Titles are descriptive and include the full error code and context (e.g., "NS0565 Sync Error in NetSuite Integration").
  • New Expensify files properly include both web and mobile instruction paths, which is excellent.
  • The "This is a [X] issue, not a [Y] issue" disambiguation line at the end of each "Why" section is very helpful for both users and AI.
  • FAQ sections address the most common follow-up questions users would have.

Minor Issues

  • Excessive horizontal rules (---): Nearly every section is separated by a horizontal rule. While not incorrect, this creates visual noise. Headings alone provide sufficient separation.
  • The NetSuite-FAQ.md file for Expensify Classic uses the older Settings > Workspaces > ... navigation pattern, while the individual error articles in the same Classic directory sometimes use "Go to the navigation tabs on the left and select Workspaces." These should be consistent within the Classic product. Classic articles should use Expensify Classic navigation patterns.
  • A few files like NS0521-Sync-Error.md appear under both Connection-errors and Export-Errors directories as well as Sync-Errors, compounding the duplication concern.

Recommendations

  1. [High Priority] Deduplicate files. Each error code should live in one canonical subcategory per product. Currently, roughly 36+ files are duplicated across Authentication-and-Login-errors, Connection-errors, and Sync-Errors. Choose the most appropriate single category for each error code and remove duplicates. If cross-referencing is needed, consider a simple "See also" link rather than full file duplication.

  2. [High Priority] Fix heading hierarchy. Change # FAQ to ## FAQ in all 174 files, and adjust FAQ question headings from ## to ### accordingly. This ensures one H1 per document and proper nesting.

  3. [Medium Priority] Format error messages distinctly. Wrap all error message text in blockquotes (>) or fenced code blocks so they are visually and semantically distinguished from instructional content. This aids both human scanning and AI retrieval.

  4. [Low Priority] Reduce horizontal rule usage. Consider removing --- separators between sections where headings already provide structure. Reserve horizontal rules for major document divisions (e.g., before the FAQ section).

  5. [Low Priority] Audit Classic vs. New Expensify navigation language. Ensure Expensify Classic articles consistently use Classic navigation patterns, and New Expensify articles use the tab-based navigation pattern. A few Classic files appear to use New Expensify navigation language.


Files Reviewed

  • Expensify Classic - Authentication-and-Login-errors/: 9 files (NS0029, NS0109, NS0123, NS0318, NS0510, NS0565, NS0593, NS0739, NS0942) -- Many duplicated in Connection-errors and Sync-Errors.
  • Expensify Classic - Connection-errors/: 7 files (NS0109, NS0123, NS0521, NS0565, NS0593, NS0739, NS0942) -- Most are duplicates of Auth files.
  • Expensify Classic - Export-Errors/: ~52 files (NS0005 through NS0994, plus NS0521) -- Largest category, well-varied error coverage.
  • Expensify Classic - Sync-Errors/: 19 files (NS0109 through NS0942) -- Some duplicated from Auth/Connection.
  • Expensify Classic - NetSuite-FAQ.md: 1 comprehensive FAQ file covering common cross-cutting questions.
  • New Expensify - Authentication-and-Login-errors/: 9 files -- Mirrors Classic with web/mobile instructions added.
  • New Expensify - Connection-errors/: 7 files -- Mirrors Classic with web/mobile instructions added.
  • New Expensify - Export-Errors/: ~52 files -- Mirrors Classic with web/mobile instructions added.
  • New Expensify - Sync-Errors/: 18 files -- Mirrors Classic with web/mobile instructions added.
  • New Expensify - NetSuite-FAQ.md: 1 file -- Mirrors Classic FAQ.

Total: 174 new files (~17,400 lines of additions)

Note: Due to the scale of this PR (174 files), inline comments were not posted. The patterns identified above apply uniformly across all files and are best addressed through bulk find-and-replace operations.

- Location
- Class
9. Uncheck both:
- **Show**
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: This # (H1) heading should be ## (H2). Only the article title at the top should use H1. All body section headings must use H2 or lower.

This same issue appears in multiple files across the PR -- there are at least 17 occurrences of # How to Fix... used as body section headings, plus # Additional Steps..., # General Fix..., and # Why the NS0885.... All of these should be changed to ##.

Affected files include NS0005, NS0056, NS0295, NS0510, NS0521, NS0581, NS0831, NS0885, NS0196 (both classic and new-expensify versions where applicable).

Suggested change
- **Show**
## How to Fix NS0005 for Vendor Bill Exports


---

# Why Is My Report Not Automatically Exporting to NetSuite?
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: FAQ questions should use ## (H2) subheadings, not # (H1). Only the page title ("# NetSuite FAQ" on line 8) should use H1. All 11 FAQ questions in this file use # and need to be changed to ##. Their sub-sections (currently ##) should become ###.

This is a structural issue that affects AI parsing and document hierarchy. The classic version of this FAQ file (expensify-classic/...NetSuite-FAQ.md) correctly uses ## for questions -- this new-expensify version should follow the same pattern.

Suggested change
# Why Is My Report Not Automatically Exporting to NetSuite?
## Why Is My Report Not Automatically Exporting to NetSuite?

| Classes | View |
| Currency | View |
| Custom Record Entries | View |
| Customers | View |
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: Avoid using #### (H4) headings. HelpDot articles should use # and ## only (with ### being acceptable for sub-steps). Using #### creates too-deep nesting that degrades AI readability and scannability. Consider restructuring this as a bold label or a ### heading instead.

This also applies to the #### Setup Permissions heading on line 95.

Suggested change
| Customers | View |
### List Permissions


If you see the error:

NS0029: Unable to export this report due to an error.
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability violation: Error messages should be formatted distinctly from surrounding prose to improve scannability. Consider using a blockquote (>) or code block so readers can quickly identify the exact error text. This pattern is used across all 97 files and would benefit from consistent formatting.

For example:

Suggested change
NS0029: Unable to export this report due to an error.
> NS0029: Unable to export this report due to an error.

This means there is a connection issue between Expensify and NetSuite preventing the report from exporting.

---

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Markdown formatting note: Horizontal rules (---) are used heavily throughout these files (1,252 instances across 97 files) as section dividers between every heading. In well-structured markdown, headings themselves serve as visual section breaks. The excessive use of --- adds visual clutter without improving navigation, especially for AI parsers and screen readers.

Consider removing the --- dividers between sections. They are only needed between the YAML frontmatter and content, or to indicate a major thematic shift (not between every heading).

2. Go to **Customization > Forms > Transaction Forms**.
3. Click **Edit** next to the vendor bill form marked as preferred.
4. Go to **Screen Fields > Main**.
5. Locate **Department**, **Location**, and **Class**.
Copy link
Contributor

Choose a reason for hiding this comment

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

Expensify style violation: In Expensify, use "Confirm" instead of "Save" at the end of flows. This line says Click **Save** but should say Click **Confirm**.

Note: When referencing NetSuite's own UI (e.g., saving a form inside NetSuite), "Save" is appropriate. But this applies to the Expensify-side instructions throughout the new-expensify files as well.

Suggested change
5. Locate **Department**, **Location**, and **Class**.
7. Click **Confirm**.


## Option One: Update the Expensify Connect Bundle

1. Log in to **NetSuite** as an Administrator.
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: This # (H1) should be ## (H2). Only the article title should use H1.

Suggested change
1. Log in to **NetSuite** as an Administrator.
## How to Fix the NS0510 Export Error


---

# Additional Steps for Non-OneWorld Users
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Additional Steps for Non-OneWorld Users should be ## Additional Steps for Non-OneWorld Users. Only the article title should use H1.

Suggested change
# Additional Steps for Non-OneWorld Users
## Additional Steps for Non-OneWorld Users


# Why the NS0885 Export Error Happens in NetSuite

The NS0885 error occurs when:
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Why the NS0885 Export Error Happens in NetSuite should be ##. Only the article title should use H1. This file has three H1 headings in the body (lines 22, 34, and 95) that all need to be changed to H2.

Suggested change
The NS0885 error occurs when:
## Why the NS0885 Export Error Happens in NetSuite


---

# Fix the NS0885 Export Error for Reimbursable Exports
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Fix the NS0885 Export Error for Reimbursable Exports should be ##. Only the article title should use H1. This file has two H1 body headings (this line and the non-reimbursable section) that need to change to H2.

Suggested change
# Fix the NS0885 Export Error for Reimbursable Exports
## Fix the NS0885 Export Error for Reimbursable Exports


---

# How to Fix the NS0521 Sync Error in OneWorld Accounts
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # How to Fix... should be ## How to Fix.... Only the article title should use H1. This applies to both OneWorld (this line) and Non-OneWorld (line 74) fix headings.

Suggested change
# How to Fix the NS0521 Sync Error in OneWorld Accounts
## How to Fix the NS0521 Sync Error in OneWorld Accounts


---

# Why Is My Report Exporting as Accounting Approved Instead of Paid in Full?
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability violation / Duplicate content: This question ("Why Is My Report Exporting as Accounting Approved Instead of Paid in Full?") is a duplicate of the question on line 89 ("Why Are Reports Exporting as 'Accounting Approved' Instead of 'Paid in Full'?"). The answer on line 193 even says "Follow the steps above under the Accounting Approved vs Paid in Full section," confirming this is redundant.

Remove this duplicate section entirely to avoid confusion and improve scannability.

---

# General Fix for Most NS0056 Errors

Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # General Fix for Most NS0056 Errors should be ##. Only the article title should use H1.

Additionally, the ### Step One: and ### Step Two: headings directly under this # create an inconsistent hierarchy (jumping from H1 to H3, skipping H2). If this heading becomes ##, then the steps should use ### which would then be correct.

Suggested change
## General Fix for Most NS0056 Errors


---

# Additional Fixes by Element
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Additional Fixes by Element should be ##.

Suggested change
# Additional Fixes by Element
## Additional Fixes by Element


---

# Additional Fixes by Element
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Additional Fixes by Element should be ##. Only the article title should use H1.

Suggested change
# Additional Fixes by Element
## Additional Fixes by Element


---

## Confirm the NetSuite Credentials
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading hierarchy issue: "Confirm the NetSuite Credentials", "Generate a New NetSuite Access Token", "Refresh the NetSuite Connection", and "Contact Concierge" are all sub-steps of "## How to Fix the NS0109 Sync Error" (line 38), but they use the same ## heading level. This creates a flat structure where AI parsers cannot determine these are child steps of the fix section.

These should be ### (H3) headings to maintain proper hierarchy under the ## How to Fix parent heading. This pattern appears in many of the new-expensify Sync-Error and Connection-Error files, which use flat ## for everything instead of proper ## > ### nesting.

Compare with the expensify-classic version of the same file, which correctly uses ### Step One:, ### Step Two:, ### Step Three: under ## How to Fix.

Suggested change
## Confirm the NetSuite Credentials
### Confirm the NetSuite Credentials


---

# Additional Steps for Expensify Card Journal Entries
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # Additional Steps for Expensify Card Journal Entries should be ##. Only the article title should use H1.

Suggested change
# Additional Steps for Expensify Card Journal Entries
## Additional Steps for Expensify Card Journal Entries


---

# How to Fix the NS0196 Sync Error
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # How to Fix the NS0196 Sync Error should be ##. Only the article title should use H1.

Suggested change
# How to Fix the NS0196 Sync Error
## How to Fix the NS0196 Sync Error


---

# How to Fix NS0295 for Vendor Bill Exports
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: Both # How to Fix NS0295 for Vendor Bill Exports (this line) and # How to Fix NS0295 for Journal Entry or Expense Report Exports (line 61) should be ##. Only the article title should use H1.

Suggested change
# How to Fix NS0295 for Vendor Bill Exports
## How to Fix NS0295 for Vendor Bill Exports

internalScope: Audience is Workspace Admins using the NetSuite integration. Covers fixing the NS0521 sync error caused by subsidiary permission configuration in OneWorld and Non-OneWorld accounts. Does not cover other NetSuite error codes.
---

# NS0521 Sync Error in NetSuite Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Naming inconsistency: This file is named NS0521-Sync-Error.md but is located in the Export-Errors/ folder. This is confusing and could cause misclassification. Consider either:

  • Moving this file to the Sync-Errors/ folder (where another NS0521-Sync-Error.md already exists), or
  • Renaming it to match the Export-Errors category if this is a distinct article about NS0521 in an export context

Additionally, this file has H1 body headings on lines 30 and 56 (# How to Fix NS0521 for OneWorld Accounts and # How to Fix NS0521 for Non-OneWorld Accounts) that should be ##.

internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0521 sync error caused by subsidiary permission configuration issues in OneWorld and Non-OneWorld NetSuite accounts. Does not cover token formatting or general login errors.
---

# NS0521 Sync Error in NetSuite Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Naming inconsistency: Same issue as the classic version -- this file is named NS0521-Sync-Error.md but located in the Export-Errors/ directory. A Sync-Error file should not live under Export-Errors. Consider moving it to Sync-Errors/ or renaming it if this covers a distinct export-related context.


---

# How to Fix NS0581 for Invoice Exports
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: Both # How to Fix NS0581 for Invoice Exports (this line) and # How to Fix NS0581 for Expense Report Exports (line 63) should be ##. Only the article title should use H1.

Suggested change
# How to Fix NS0581 for Invoice Exports
## How to Fix NS0581 for Invoice Exports


---

# How to Fix the NS0831 Export Error
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading level violation: # How to Fix the NS0831 Export Error should be ##. Only the article title should use H1.

Suggested change
# How to Fix the NS0831 Export Error
## How to Fix the NS0831 Export Error


---

## Confirm the Role Assigned to the NetSuite Access Token
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading hierarchy issue: This ## heading (and the following fix-step headings: "Assign the Expensify Integration Role", "Review Global Permissions", "Sync the Workspace") are sub-steps of ## How to Fix the NS0565 Sync Error on line 37. They should use ### to reflect the parent-child relationship.

This flat ## pattern for fix sub-steps is systemic across most new-expensify Sync-Error and Connection-Error files (NS0109, NS0123, NS0318, NS0384, NS0565, NS0739, NS0942, etc.). Compare with the expensify-classic versions, which correctly use ### Step One:, ### Step Two:, etc. under ## How to Fix.

Suggested change
## Confirm the Role Assigned to the NetSuite Access Token
### Confirm the Role Assigned to the NetSuite Access Token

…ooting/NetSuite-FAQ.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
6. Open the **Advanced** tab.
7. Locate the **Sync Reimbursed Reports** setting.
8. Select a valid **Accounts Payable** account from the dropdown.
9. Click **Save**.
Copy link
Contributor

Choose a reason for hiding this comment

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

Expensify style violation: Use "Confirm" instead of "Save" when the action completes a flow in Expensify. This instruction is part of the Expensify Workspace settings flow (selecting an A/P account), so the button label should be "Confirm."

This same issue applies to line 63 in this file. See also the broader note on the NS0109 Authentication file -- this pattern affects hundreds of instances across the PR.

Suggested change
9. Click **Save**.
9. Click **Confirm**.

3. Click **Company Cards**.
4. Click **Edit Export** for the affected card.
5. Confirm the correct NetSuite account is selected.
6. Click **Save**.
Copy link
Contributor

Choose a reason for hiding this comment

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

Expensify style violation: Use "Confirm" instead of "Save" when completing Expensify UI flows. This line is in an Expensify Domain settings context.

This also applies to lines 210 and 217 in this file (NetSuite OneWorld/Non-OneWorld payable account flows -- though those are in NetSuite's own UI where "Save" may be correct).

Suggested change
6. Click **Save**.
6. Click **Confirm**.

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.

1 participant