diff --git a/.github/scripts/createDocsRoutes.ts b/.github/scripts/createDocsRoutes.ts index 5d608c0f9008a..e3f6c452dc648 100644 --- a/.github/scripts/createDocsRoutes.ts +++ b/.github/scripts/createDocsRoutes.ts @@ -12,6 +12,7 @@ type Section = { href: string; title: string; articles?: Article[]; + sections?: Section[]; }; type Hub = { @@ -60,16 +61,14 @@ function toTitleCase(str: string): string { } /** - * @param filename - The name of the file (path used for href) + * @param filename - The name of the file * @param order - Optional order from front matter - * @param titleOverride - Optional display title (e.g. subfolder name: "Export-Errors" -> "Export Errors") */ -function getArticleObj(filename: string, order?: number, titleOverride?: string): Article { +function getArticleObj(filename: string, order?: number): Article { const href = filename.replace('.md', ''); - const title = titleOverride ? toTitleCase(titleOverride.replaceAll('-', ' ')) : toTitleCase(href.replaceAll('-', ' ')); return { href, - title, + title: toTitleCase(href.replaceAll('-', ' ')), order, }; } @@ -97,76 +96,87 @@ function pushOrCreateEntry(hubs: Hub[], hub: string, } function getOrderFromArticleFrontMatter(path: string): number | undefined { - const frontmatter = fs.readFileSync(path, 'utf8').split('---').at(1); - if (!frontmatter) { - return; + try { + const frontmatter = fs.readFileSync(path, 'utf8').split('---').at(1); + if (!frontmatter) { + return undefined; + } + const frontmatterObject = yaml.load(frontmatter) as Record; + return frontmatterObject.order as number | undefined; + } catch { + return undefined; } - const frontmatterObject = yaml.load(frontmatter) as Record; - return frontmatterObject.order as number | undefined; +} + +/** + * Build a section from a directory path, with optional parent path for nested href + */ +function buildSection(platformName: string, hub: string, sectionPath: string, parentHref: string): Section { + const sectionName = sectionPath.split('/').pop() ?? sectionPath; + const fullPath = `${docsDir}/articles/${platformName}/${hub}/${sectionPath}`; + const articles: Article[] = []; + const childSections: Section[] = []; + const href = parentHref ? `${parentHref}/${sectionName}` : sectionName; + + for (const entry of fs.readdirSync(fullPath)) { + const entryPath = `${fullPath}/${entry}`; + if (entry.endsWith('.md')) { + const order = getOrderFromArticleFrontMatter(entryPath); + articles.push(getArticleObj(entry, order)); + } else if (fs.statSync(entryPath).isDirectory()) { + childSections.push(buildSection(platformName, hub, `${sectionPath}/${entry}`, href)); + } + } + + const section: Section = { + href, + title: toTitleCase(sectionName.replaceAll('-', ' ')), + ...(articles.length > 0 && {articles}), + ...(childSections.length > 0 && {sections: childSections}), + }; + return section; +} + +/** + * Flatten sections for lookup by full path (e.g. netsuite/troubleshooting/connection-errors) + */ +function flattenSections(sections: Section[]): Section[] { + const result: Section[] = []; + for (const s of sections) { + result.push(s); + if (s.sections?.length) { + result.push(...flattenSections(s.sections)); + } + } + return result; } /** * Add articles and sections to hubs * @param hubs - The hubs inside docs/articles/ for a platform * @param platformName - Expensify Classic or New Expensify - * @param routeHubs - The hubs insude docs/data/_routes.yml for a platform + * @param routeHubs - The hubs inside docs/data/_routes.yml for a platform */ function createHubsWithArticles(hubs: string[], platformName: ValueOf, routeHubs: Hub[]) { for (const hub of hubs) { - // Iterate through each directory in articles - for (const fileOrFolder of fs.readdirSync(`${docsDir}/articles/${platformName}/${hub}`)) { - // If the directory content is a markdown file, then it is an article + const basePath = `${docsDir}/articles/${platformName}/${hub}`; + + for (const fileOrFolder of fs.readdirSync(basePath)) { if (fileOrFolder.endsWith('.md')) { const articleObj = getArticleObj(fileOrFolder); pushOrCreateEntry(routeHubs, hub, 'articles', articleObj); continue; } - // For readability, we will use the term section to refer to subfolders - const section = fileOrFolder; - const articles: Article[] = []; - - // Section can contain .md files directly and/or subfolders (and nested subfolders) that contain .md files - const sectionPath = `${docsDir}/articles/${platformName}/${hub}/${section}`; - for (const entry of fs.readdirSync(sectionPath)) { - const entryPath = `${sectionPath}/${entry}`; - if (entry.endsWith('.md') && fs.statSync(entryPath).isFile()) { - const order = getOrderFromArticleFrontMatter(entryPath); - articles.push(getArticleObj(entry, order)); - continue; - } - if (fs.statSync(entryPath).isDirectory()) { - // One level: section/SubFolder/file.md -> href "SubFolder/file", display title = "Troubleshoot SubFolder" - for (const file of fs.readdirSync(entryPath)) { - const filePath = `${entryPath}/${file}`; - if (file.endsWith('.md') && fs.statSync(filePath).isFile()) { - const order = getOrderFromArticleFrontMatter(filePath); - articles.push(getArticleObj(`${entry}/${file}`, order, `Troubleshoot ${entry}`)); - continue; - } - if (fs.statSync(filePath).isDirectory()) { - // Two levels: section/SubFolder/NestedFolder/file.md -> href "SubFolder/NestedFolder/file", display title = "Troubleshoot NestedFolder" (e.g. "Troubleshoot Export Errors") - for (const nestedFile of fs.readdirSync(filePath)) { - if (!nestedFile.endsWith('.md')) { - continue; - } - const nestedPath = `${filePath}/${nestedFile}`; - if (!fs.statSync(nestedPath).isFile()) { - continue; - } - const order = getOrderFromArticleFrontMatter(nestedPath); - articles.push(getArticleObj(`${entry}/${file}/${nestedFile}`, order, `Troubleshoot ${file}`)); - } - } - } - } - } + const sectionPath = fileOrFolder; + const section = buildSection(platformName, hub, sectionPath, ''); + pushOrCreateEntry(routeHubs, hub, 'sections', section); + } - pushOrCreateEntry(routeHubs, hub, 'sections', { - href: section, - title: toTitleCase(section.replaceAll('-', ' ')), - articles, - }); + // Add flat section list for nested section page lookup + const hubObj = routeHubs.find((obj) => obj.href === hub); + if (hubObj?.sections?.length) { + (hubObj as Hub & {flatSections?: Section[]}).flatSections = flattenSections(hubObj.sections); } } } diff --git a/Mobile-Expensify b/Mobile-Expensify index 5ba269df91a91..16295ce7472d4 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit 5ba269df91a917882ff8c8dee968d8a079918212 +Subproject commit 16295ce7472d4977479b3be13b6bd7ad47b92c59 diff --git a/docs/_includes/section.html b/docs/_includes/section.html index 915e0d4c45a73..e4abc79f6b739 100644 --- a/docs/_includes/section.html +++ b/docs/_includes/section.html @@ -1,120 +1,30 @@ -{% assign urlArray = page.url | replace: '/', ' ' | split: " " %} - -{% assign activePlatform = urlArray[0] %} +{% assign urlParts = page.url | split: '/' %} +{% assign activePlatform = urlParts[1] %} {% assign platform = site.data.routes.platforms | where: "href", activePlatform | first %} -{% assign activeHub = urlArray[2] %} +{% assign activeHub = urlParts[3] %} {% assign hub = platform.hubs | where: "href", activeHub | first %} -{% assign activeSection = urlArray[3] | remove: ".html" %} -{% assign section = hub.sections | where: "href", activeSection | first %} +{% assign hubPrefix = "/" | append: activePlatform | append: "/hubs/" | append: activeHub | append: "/" %} +{% assign activeSectionPath = page.url | replace: ".html", "" | replace: hubPrefix, "" %} + +{% assign section = hub.flatSections | where: "href", activeSectionPath | first %}

{{ section.title }}

- {% assign sortedArticles = section.articles | sort: 'order', 'last' | default: 999 %} - - {% comment %} Render direct articles (no nested path) {% endcomment %}
+ {% if section.sections %} + {% for subsection in section.sections %} + {% include section-card.html platform=activePlatform hub=hub.href section=subsection.href title=subsection.title %} + {% endfor %} + {% endif %} + {% assign sortedArticles = section.articles | default: empty %} {% for article in sortedArticles %} - {% unless article.href contains '/' %} - {% assign article_href = section.href | append: '/' | append: article.href %} - {% include article-card.html hub=hub.href href=article_href title=article.title platform=activePlatform %} - {% endunless %} + {% assign article_href = section.href | append: '/' | append: article.href %} + {% include article-card.html hub=hub.href href=article_href title=article.title platform=activePlatform %} {% endfor %}
- - {% comment %} Collect unique subfolder names from nested articles {% endcomment %} - {% assign subfolders = "" %} - {% for article in sortedArticles %} - {% if article.href contains '/' %} - {% assign parts = article.href | split: '/' %} - {% assign subfolder = parts[0] %} - {% assign alreadyAdded = false %} - {% if subfolders != "" %} - {% assign existingSubfolders = subfolders | split: '|' %} - {% for existing in existingSubfolders %} - {% if existing == subfolder %} - {% assign alreadyAdded = true %} - {% endif %} - {% endfor %} - {% endif %} - {% unless alreadyAdded %} - {% if subfolders == "" %} - {% assign subfolders = subfolder %} - {% else %} - {% assign subfolders = subfolders | append: '|' | append: subfolder %} - {% endif %} - {% endunless %} - {% endif %} - {% endfor %} - - {% comment %} Render nested articles grouped under subfolder headings {% endcomment %} - {% if subfolders != "" %} - {% assign subfolderArray = subfolders | split: '|' %} - {% for subfolder in subfolderArray %} -

{{ subfolder | replace: '-', ' ' }}

- - {% comment %} Render articles directly under this subfolder (2-segment paths like Troubleshooting/Overview) {% endcomment %} -
- {% for article in sortedArticles %} - {% if article.href contains '/' %} - {% assign parts = article.href | split: '/' %} - {% if parts[0] == subfolder and parts.size == 2 %} - {% assign article_href = section.href | append: '/' | append: article.href %} - {% include article-card.html hub=hub.href href=article_href title=article.title platform=activePlatform %} - {% endif %} - {% endif %} - {% endfor %} -
- - {% comment %} Collect unique sub-subfolders for 3-segment paths (e.g., Troubleshooting/Export-Errors/Overview) {% endcomment %} - {% assign subSubfolders = "" %} - {% for article in sortedArticles %} - {% if article.href contains '/' %} - {% assign parts = article.href | split: '/' %} - {% if parts[0] == subfolder and parts.size >= 3 %} - {% assign subSubfolder = parts[1] %} - {% assign ssAlreadyAdded = false %} - {% if subSubfolders != "" %} - {% assign ssExisting = subSubfolders | split: '|' %} - {% for existing in ssExisting %} - {% if existing == subSubfolder %} - {% assign ssAlreadyAdded = true %} - {% endif %} - {% endfor %} - {% endif %} - {% unless ssAlreadyAdded %} - {% if subSubfolders == "" %} - {% assign subSubfolders = subSubfolder %} - {% else %} - {% assign subSubfolders = subSubfolders | append: '|' | append: subSubfolder %} - {% endif %} - {% endunless %} - {% endif %} - {% endif %} - {% endfor %} - - {% comment %} Render sub-subfolder groups {% endcomment %} - {% if subSubfolders != "" %} - {% assign subSubfolderArray = subSubfolders | split: '|' %} - {% for subSubfolder in subSubfolderArray %} -

{{ subSubfolder | replace: '-', ' ' }}

-
- {% for article in sortedArticles %} - {% if article.href contains '/' %} - {% assign parts = article.href | split: '/' %} - {% if parts[0] == subfolder and parts[1] == subSubfolder %} - {% assign article_href = section.href | append: '/' | append: article.href %} - {% include article-card.html hub=hub.href href=article_href title=article.title platform=activePlatform %} - {% endif %} - {% endif %} - {% endfor %} -
- {% endfor %} - {% endif %} - {% endfor %} - {% endif %}
diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0029-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0029-Export-Error.md new file mode 100644 index 0000000000000..bcede173e8704 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0029-Export-Error.md @@ -0,0 +1,76 @@ +--- +title: NS0029 Export Error in NetSuite Integration +description: Learn what the NS0029 export error means when exporting reports to NetSuite and what to do to resolve the connection issue. +keywords: NS0029, NetSuite export error, unable to export report NetSuite, NetSuite connection issue, Expensify NetSuite integration, report export failed NetSuite, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0029 export error caused by NetSuite connection issues. Does not cover general NetSuite integration setup or configuration. +--- + +# NS0029 Export Error in NetSuite Integration + +If you see the error: + +NS0029 Export Error: Unable to export this report due to an error. + +This means there is a connection issue between the Workspace and NetSuite. + +The error appears when you attempt to export a report to NetSuite and the export fails. + +--- + +## Why the NS0029 Export Error Happens in NetSuite + +The NS0029 error typically indicates that Expensify is unable to successfully communicate with NetSuite at the time of export. + +Common causes include: + +- An expired or disconnected NetSuite integration. +- Authentication issues between Expensify and NetSuite. +- Permission changes in NetSuite. +- Temporary connectivity issues. +- A change to the NetSuite role or token used for the integration. + +Because this error is tied to the NetSuite connection, it cannot be resolved directly from the report itself. + +This is a connection or authentication issue, not a report data issue. + +--- + +## How to Fix the NS0029 Export Error + +Follow the steps below to resolve the issue. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the issue was temporary, the export may complete successfully. + +### Contact Concierge for Assistance + +If the error persists: + +1. Do not delete the report. +2. Reach out to **Concierge**. +3. Include: + - The report ID. + - Confirmation that you’re seeing the **NS0029 Export Error**. + - The approximate time the export was attempted. + +Concierge will review the NetSuite connection, check authentication and permission settings, and help restore the integration so you can export the report successfully. + +--- + +# FAQ + +## Can I Retry the Export After Seeing the NS0029 Export Error? + +Yes. If the issue was temporary, retrying the export may resolve it. If it continues to fail, the integration likely needs review. + +## Does the NS0029 Export Error Affect Other Reports? + +Yes. If the issue is related to your NetSuite connection or authentication, other report exports may also fail until the connection is fixed. + +## Should I Reconnect NetSuite Myself? + +Do not disconnect the NetSuite integration unless directed by Concierge. Reconnecting without guidance may require reconfiguration. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0109-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0109-Sync-Error.md new file mode 100644 index 0000000000000..5b4d3dba86582 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0109-Sync-Error.md @@ -0,0 +1,93 @@ +--- +title: NS0109 Sync Error in NetSuite Integration +description: Learn what the NS0109 sync error means and how to refresh or update your NetSuite admin credentials to restore syncing. +keywords: NS0109, NetSuite login failed, failed to login to NetSuite, NetSuite admin credentials, refresh NetSuite token, NetSuite sync error, Expensify NetSuite integration, NetSuite authentication error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0109 sync error caused by invalid or expired NetSuite admin credentials. Does not cover full NetSuite integration setup or advanced NetSuite configuration. +--- + +# NS0109 Sync Error in NetSuite Integration + +If you see the error: + +NS0109 Sync Error: Failed to login to NetSuite. Please verify your admin credentials. + +This means the Workspace is unable to authenticate with NetSuite. + +When authentication fails, reports and data cannot sync between Expensify and NetSuite. + +--- + +## Why the NS0109 Sync Error Happens in NetSuite + +The NS0109 error typically indicates an issue with the NetSuite credentials used for the integration. + +Common causes include: + +- The NetSuite admin password was changed. +- The access token was revoked or expired. +- The integration credentials were updated in NetSuite but not refreshed in the Workspace. +- The integration role permissions were modified in NetSuite. +- The NetSuite role associated with the token was disabled. + +When credentials are no longer valid, Expensify cannot log in to NetSuite and syncing fails. + +This is an authentication issue, not a report data issue. + +--- + +## How to Fix the NS0109 Sync Error + +Follow the steps below to verify and refresh your NetSuite credentials. + +### Verify the NetSuite Admin Credentials + +1. Confirm the correct NetSuite admin account is being used. +2. Verify the integration role is active and has the required permissions. +3. Confirm the account ID, role ID, consumer key, consumer secret, token ID, and token secret match what is configured in NetSuite. +4. Update any credentials that were recently changed. +5. Click **Save** in the Workspace if changes were made. + +### Generate a New NetSuite Access Token + +If the credentials appear correct but the error persists: + +1. Log in to NetSuite as an administrator. +2. Navigate to the Access Token configuration for the integration role. +3. Generate a new access token. +4. Copy the new token ID and token secret. +5. Update the credentials in the Workspace. +6. Click **Save**. +7. Click **Sync Now** under **Settings > Workspaces > Accounting**. + +### Retry the Sync + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Sync Now**. + +If the credentials are valid, syncing should resume successfully. + +### Contact Concierge if the Error Persists + +If you are unsure which credentials changed or continue to see the NS0109 error, reach out to **Concierge** and include: + +- The full error message. +- Confirmation that you are seeing **NS0109**. +- The approximate time the sync was attempted. + +--- + +# FAQ + +## Does the NS0109 Sync Error Affect All Exports? + +Yes. If Expensify cannot log in to NetSuite, all report exports and sync activity will fail until the credentials are corrected. + +## Do I Need a NetSuite Admin to Fix the NS0109 Sync Error? + +Yes. Only a NetSuite administrator, or someone with the correct integration role and permissions, can verify credentials or generate a new access token. + +## Should I Disconnect and Reconnect NetSuite? + +Do not disconnect the integration unless directed by Concierge, as reconnecting may require full reconfiguration. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0123-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0123-Sync-Error.md new file mode 100644 index 0000000000000..5d2cca4cdc357 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0123-Sync-Error.md @@ -0,0 +1,87 @@ +--- +title: NS0123 Sync Error in NetSuite Integration +description: Learn what the NS0123 sync error means and how to enable the Expensify integration in NetSuite to restore syncing. +keywords: NS0123, NetSuite integration not enabled, Expensify integration NetSuite, enable Expensify in NetSuite, NetSuite sync error, Setup Integrations Manage Integrations, Expensify NetSuite connection, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0123 sync error caused by the Expensify integration being disabled in NetSuite. Does not cover full NetSuite integration setup or credential troubleshooting. +--- + +# NS0123 Sync Error in NetSuite Integration + +If you see the error: + +NS0123 Sync Error: The Expensify integration is not enabled in NetSuite. Please enable it under Setup > Integrations > Manage Integrations in NetSuite. + +This means the Expensify integration is currently turned off in NetSuite. + +When the integration is not enabled, reports and data cannot sync between the Workspace and NetSuite. + +--- + +## Why the NS0123 Sync Error Happens in NetSuite + +The NS0123 error typically indicates that the **Expensify integration is disabled in NetSuite**. + +This may happen if: + +- The integration was never enabled. +- The integration was manually disabled in NetSuite. +- Changes were made to NetSuite integration settings. +- A NetSuite update affected integration permissions. + +Until the integration is enabled again, all syncing between the Workspace and NetSuite will fail. + +This is an integration status issue, not a credential or report data issue. + +--- + +## How to Enable the Expensify Integration in NetSuite + +Follow the steps below to re-enable the integration. + +### Enable the Expensify Integration in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Integrations > Manage Integrations**. +3. Locate the **Expensify Integration**. +4. Enable the integration. +5. Click **Save**. + +Confirm the integration is fully enabled before leaving the page. + +### Sync the Workspace in Expensify + +After enabling the integration in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Once the integration is enabled and synced, exports should resume normally. + +--- + +# FAQ + +## Does the NS0123 Sync Error Stop All Report Exports? + +Yes. If the Expensify integration is not enabled in NetSuite, all report syncing and exports to NetSuite will fail until the integration is turned back on. + +## Do I Need NetSuite Admin Access to Fix the NS0123 Sync Error? + +Yes. Only someone with the appropriate permissions in NetSuite can enable integrations under **Setup > Integrations > Manage Integrations**. + +## Do I Need to Reconnect the Integration? + +No. Re-enabling the integration in NetSuite and selecting **Sync Now** in the Workspace is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0318-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0318-Sync-Error.md new file mode 100644 index 0000000000000..d1cb77961457e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0318-Sync-Error.md @@ -0,0 +1,95 @@ +--- +title: NS0318 Sync Error in NetSuite Integration +description: Learn what the NS0318 sync error means and how to update the Expensify Connect bundle in NetSuite to resolve invoice export permission issues. +keywords: NS0318, NetSuite permissions error, could not import items NetSuite, Expensify Connect bundle, update NetSuite bundle, invoice export NetSuite, SuiteBundler, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0318 sync error caused by an outdated Expensify Connect bundle during invoice exports. Does not cover general NetSuite credential errors or full integration setup. +--- + +# NS0318 Sync Error in NetSuite Integration + +If you see the error: + +NS0318 Sync Error: Could not import items due to permissions error. Please update your NetSuite bundle version. + +This usually means the **Expensify Connect bundle** in NetSuite is out of date. + +This error most commonly appears when exporting an **invoice** from the Workspace to NetSuite. + +--- + +## Why the NS0318 Sync Error Happens in NetSuite + +The NS0318 error typically indicates: + +- The **Expensify Connect bundle** in NetSuite is not updated to the latest version. +- You are exporting an **invoice** from the Workspace. +- NetSuite permissions do not align with the current integration requirements. + +An outdated bundle can cause permission mismatches that prevent invoice items from importing correctly into NetSuite. + +This is a bundle version or permission alignment issue, not a general credential error. + +--- + +## How to Fix the NS0318 Sync Error + +Follow the steps below based on what you are exporting. + +### Confirm What You Are Exporting + +1. Open the report in the Workspace. +2. Confirm whether you are exporting: + - An **invoice**, or + - An **expense report**. + +If you are exporting an expense report: + +- Refresh the page. +- Go to **Settings > Workspaces > Accounting**. +- Click **Sync Now**. +- Confirm the Workspace synced successfully. + +If you are exporting an invoice, continue to the next step. + +### Update the Expensify Connect Bundle in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Update the bundle to the latest available version. +5. Confirm the update completes successfully. + +After updating the bundle: + +1. Return to the Workspace. +2. Retry exporting the invoice to NetSuite. + +### Reconfirm the NetSuite Connection (If Needed) + +If the Expensify Connect bundle is already on the latest version and the error continues: + +1. Review the NetSuite connection settings in the Workspace. +2. Confirm the correct account ID, role, and permissions are configured. +3. Click **Sync Now** under **Settings > Workspaces > Accounting**. + +If the issue persists, reach out to **Concierge** and include: + +- The full error message. +- Confirmation that you are seeing **NS0318**. +- The invoice ID. + +--- + +# FAQ + +## Does the NS0318 Sync Error Affect Expense Report Exports? + +No. This error primarily affects invoice exports. If you see it while exporting an expense report, refresh the page and confirm the sync completed. + +## Do I Need NetSuite Admin Access to Update the Expensify Connect Bundle? + +Yes. Updating bundles in NetSuite requires administrator-level permissions. + +## Do I Need to Reinstall the Bundle? + +No. In most cases, updating the existing Expensify Connect bundle to the latest version is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0510-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0510-Export-Error.md new file mode 100644 index 0000000000000..53c841992be80 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0510-Export-Error.md @@ -0,0 +1,123 @@ +--- +title: NS0510 Export Error in NetSuite Integration +description: Learn what the NS0510 export error means and how to update the Expensify Connect bundle and NetSuite role permissions to restore exports. +keywords: NS0510, NetSuite role access error, Expensify Connect bundle, NetSuite token permissions, Access Token Management, User Access Tokens, NetSuite export error, Multi-Currency NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0510 export error caused by bundle updates and NetSuite role token permissions. Does not cover general NetSuite login errors or full integration setup. +--- + +# NS0510 Export Error in NetSuite Integration + +If you see the error: + +NS0510 Export Error: Your NetSuite role doesn’t have access to this record. Please ensure the Expensify bundle is up to date and that your role has the required token permissions. + +This means there is a permissions issue in NetSuite. + +This is usually caused by: + +- An outdated **Expensify Connect bundle**, or +- Missing token permissions in the connected NetSuite role. + +--- + +## Why the NS0510 Export Error Happens in NetSuite + +The NS0510 error typically indicates: + +- The **Expensify Connect bundle** in NetSuite is not updated to the latest version. +- The NetSuite role used for the integration does not have the required token permissions. +- The integration role lacks access to specific records required for export. +- In some cases, role configuration conflicts with **Multi-Currency** settings. + +When the NetSuite role does not have proper access, NetSuite blocks the record during export. + +This is a role permission or bundle version issue, not a general login error. + +--- + +## How to Fix the NS0510 Export Error + +Follow the steps below to resolve the issue. + +--- + +## Update the Expensify Connect Bundle in NetSuite + +First, confirm the bundle is up to date. + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Update it to the latest available version. +5. Confirm the update completes successfully. + +After updating the bundle: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +## Update NetSuite Role Token Permissions + +If the error continues, verify the role permissions in NetSuite. + +1. Log in to NetSuite. +2. Go to **Manage Roles > Permissions > Setup**. +3. Confirm the following permissions are added to the integration role: + - **Access Token Management** + - **User Access Tokens** +4. Click **Save**. + +Note: These permissions can only be added if **Multi-Currency** is not enabled in NetSuite. + +After updating role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report once the sync completes. + +--- + +# FAQ + +## Does the NS0510 Export Error Affect All Exports? + +It can. If the connected NetSuite role lacks required permissions, any export that requires access to restricted records may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0510 Export Error? + +Yes. Updating bundles and modifying role permissions requires NetSuite administrator access. + +## Does Multi-Currency Affect This Error? + +In some cases, yes. Certain token permissions cannot be added when **Multi-Currency** is enabled, which may require additional configuration review. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0565-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0565-Sync-Error.md new file mode 100644 index 0000000000000..254e61a33fd3e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0565-Sync-Error.md @@ -0,0 +1,118 @@ +--- +title: NS0565 Sync Error in NetSuite Integration +description: Learn what the NS0565 sync error means and how to assign the correct Expensify Integration role to your NetSuite access token. +keywords: NS0565, NetSuite access token error, Expensify Integration role, NetSuite Account records permission, Access Token role, NetSuite sync error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0565 sync error caused by incorrect NetSuite access token role configuration. Does not cover bundle updates or general NetSuite credential setup. +--- + +# NS0565 Sync Error in NetSuite Integration + +If you see the error: + +NS0565 Sync Error: The role linked to your NetSuite access token doesn’t have permission to access Account records. Please confirm the token is assigned to the Expensify Integration role by viewing the "Access Token" in NetSuite. + +This means the wrong role is assigned to your NetSuite access token. + +When the access token is tied to a role without the required permissions, syncing between the Workspace and NetSuite will fail. + +--- + +## Why the NS0565 Sync Error Happens in NetSuite + +The NS0565 error typically indicates: + +- The NetSuite **Access Token** is assigned to the wrong role. +- The assigned role does not have permission to access **Account records**. +- Global permissions on the employee record are overriding the role permissions. + +The access token must be linked to the **Expensify Integration role**. If it is linked to another role without proper access, NetSuite blocks the sync. + +This is an access token role configuration issue, not a bundle or general credential setup issue. + +--- + +## How to Fix the NS0565 Sync Error + +Follow the steps below to confirm the correct role is assigned and properly configured. + +--- + +## Confirm the Role Assigned to the NetSuite Access Token + +1. Log in to NetSuite as an administrator. +2. Search for **Access Tokens**. +3. Locate the token used for the Expensify connection. +4. Click **View** next to the token. +5. Confirm that the **Expensify Integration role** is assigned to the token. + +If the Expensify Integration role is already assigned, continue to the next section. + +--- + +## Assign the Expensify Integration Role to the Employee Record + +If the Expensify Integration role is not assigned: + +1. Search for the NetSuite employee record used to create the access token. +2. Click **Edit**. +3. Select the **Access** tab. +4. Add the **Expensify Integration role** to the employee. +5. Click **Save**. + +After assigning the role, confirm the access token is linked to that role. + +--- + +## Review Global Permissions on the Employee Record + +Global permissions can override role permissions. + +1. Open the same employee record in NetSuite. +2. Review the **Global Permissions** section. + +Make sure: + +- Permissions for **Web Services** and **Access Tokens** are removed, or +- These permissions are set to **Full**. + +If these permissions are restricted, they can override the role permissions and cause the NS0565 sync error. + +--- + +## Retry the Sync in the Workspace + +After confirming the role and permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +If the access token is correctly configured, syncing should resume successfully. + +--- + +# FAQ + +## Does the NS0565 Sync Error Affect All Exports? + +Yes. If the access token role does not have permission to access Account records, syncing and exports to NetSuite will fail. + +## Do I Need NetSuite Admin Access to Fix the NS0565 Sync Error? + +Yes. You must have permission to manage roles, employee records, and access tokens in NetSuite. + +## Does This Require Reconnecting the Integration? + +No. Correcting the access token role and permissions and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0593-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0593-Sync-Error.md new file mode 100644 index 0000000000000..a74d7a3b35346 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0593-Sync-Error.md @@ -0,0 +1,81 @@ +--- +title: NS0593 Sync Error in NetSuite Integration +description: Learn what the NS0593 sync error means and how to resolve NetSuite concurrency limits when syncing from Expensify. +keywords: NS0593, NetSuite concurrency limit, too many open connections NetSuite, NetSuite sync error, Expensify NetSuite integration, NetSuite connection limit, retry sync, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0593 sync error caused by NetSuite concurrency limits. Does not cover credential issues or bundle configuration. +--- + +# NS0593 Sync Error in NetSuite Integration + +If you see the error: + +NS0593 Sync Error: There are too many open connections to the NetSuite company at this moment. Please try again in a few minutes. + +This means NetSuite has reached its connection limit. + +This error is temporary and related to NetSuite’s concurrency restrictions. + +--- + +## Why the NS0593 Sync Error Happens in NetSuite + +The NS0593 error typically indicates there are more than **five open connections** to your NetSuite company at the same time. + +NetSuite limits concurrency to five active connections to prevent system overload. + +Even though Expensify runs one job at a time, the limit can be reached if: + +- Multiple people are exporting reports simultaneously. +- Multiple Workspaces are syncing at the same time. +- Other third-party integrations are connected to NetSuite. +- Background integration jobs are still running. +- Scheduled scripts or workflows are active in NetSuite. + +When the connection limit is exceeded, NetSuite temporarily blocks additional sync attempts. + +This is a system concurrency limitation, not a credential or bundle configuration issue. + +--- + +## How to Fix the NS0593 Sync Error + +No configuration changes are required. + +### Wait and Retry the Sync + +1. Wait a few minutes to allow existing NetSuite connections to close. +2. Retry syncing the Workspace. + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +If the issue continues, confirm that no other large exports, scripts, or integrations are running in NetSuite at the same time. + +--- + +# FAQ + +## Does the NS0593 Sync Error Mean Something Is Broken? + +No. This is a temporary concurrency limit imposed by NetSuite and does not indicate a configuration issue. + +## How Long Should I Wait Before Retrying? + +Waiting a few minutes is usually sufficient. Once active connections close, syncing should resume normally. + +## Can This Error Affect Multiple Workspaces? + +Yes. If multiple Workspaces or integrations are syncing at the same time, they may trigger the NetSuite connection limit. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0739-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0739-Sync-Error.md new file mode 100644 index 0000000000000..3c31fdd7896b3 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0739-Sync-Error.md @@ -0,0 +1,105 @@ +--- +title: NS0739 Sync Error in NetSuite Integration +description: Learn what the NS0739 sync error means and how to correct NetSuite token permissions and formatting issues to restore syncing. +keywords: NS0739, NetSuite token error, unexpected error logging in with tokens, SOAP Web Services permission, Expensify Integration role, NetSuite Sandbox token format, NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0739 sync error caused by token permissions or formatting issues. Does not cover bundle updates or general NetSuite login credential errors. +--- + +# NS0739 Sync Error in NetSuite Integration + +If you see the error: + +NS0739 Sync Error: Unexpected error when logging in with tokens. + +This usually means the NetSuite tokens were created with incorrect permissions or are not formatted properly. + +When the token configuration does not meet NetSuite’s requirements, Expensify cannot authenticate and syncing fails. + +--- + +## Why the NS0739 Sync Error Happens in NetSuite + +The NS0739 error typically occurs when: + +- The generated access tokens do not have the correct permissions in NetSuite. +- The **SOAP Web Services** permission is not set correctly on the integration role. +- The token is formatted incorrectly, especially in a Sandbox environment. +- The account ID or role configuration does not match the token setup. + +If the token configuration does not align with NetSuite’s requirements, the login attempt will fail. + +This is a token permission or formatting issue, not a bundle update or general credential issue. + +--- + +## How to Fix the NS0739 Sync Error + +Follow the steps below to verify permissions and token formatting. + +--- + +## Confirm SOAP Web Services Permission on the Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Locate and click **Edit** for the **Expensify Integration role**. +4. Click the **Permissions** tab. +5. Scroll to the **Setup** section. +6. Confirm **SOAP Web Services** is set to **Full**. +7. Click **Save** if changes were made. + +After updating the permission: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Confirm Token Formatting in NetSuite Sandbox (If Applicable) + +If you are connected to a **NetSuite Sandbox** environment, confirm the account ID and token format are correct. + +Correct format example: + +- `12345678_SB1` + +Incorrect format example: + +- `12345678-sb1` + +Sandbox account IDs are case-sensitive and must use the correct capitalization and underscore format. + +After confirming the format: + +1. Update the account ID or token details in the Workspace if needed. +2. Click **Save**. +3. Click **Sync Now**. + +--- + +# FAQ + +## Does the NS0739 Sync Error Affect All Exports? + +Yes. If Expensify cannot authenticate using the NetSuite tokens, all syncing and exports will fail until the token issue is resolved. + +## Do I Need NetSuite Admin Access to Fix the NS0739 Sync Error? + +Yes. You must have permission to edit roles and manage token settings in NetSuite. + +## Do I Need to Reconnect the Integration? + +No. In most cases, correcting the role permissions or token formatting and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0942-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0942-Sync-Error.md new file mode 100644 index 0000000000000..acf9dae2d2ab4 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Authentication-and-Login-errors/NS0942-Sync-Error.md @@ -0,0 +1,114 @@ +--- +title: NS0942 Sync Error in NetSuite Integration +description: Learn what the NS0942 sync error means when switching to a NetSuite OneWorld account and how to disconnect and reconnect the NetSuite integration. +keywords: NS0942, NetSuite OneWorld error, Parent Company not found, NetSuite subsidiaries not importing, disconnect NetSuite, reconnect NetSuite integration, Expensify NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0942 sync error caused by moving from a non-OneWorld to a OneWorld NetSuite account. Does not cover bundle updates or token permission troubleshooting. +--- + +# NS0942 Sync Error in NetSuite Integration + +If you see the error: + +NS0942 Sync Error: 'Parent Company' not found for subsidiaries. Please disconnect and reconnect the NetSuite connection to import the subsidiaries. + +This means your NetSuite account type has changed. + +This error commonly appears when switching from a **non-OneWorld** NetSuite account to a **OneWorld** account after the connection has already been established in the Workspace. + +--- + +## Why the NS0942 Sync Error Happens in NetSuite + +The NS0942 error typically occurs when: + +- Your NetSuite account was previously non-OneWorld. +- You upgraded or migrated to a **OneWorld** account. +- The existing NetSuite connection was not reconfigured after the change. + +OneWorld accounts use subsidiaries and a parent company structure. The original connection does not properly import subsidiary data after this change. + +The integration must be reconnected to refresh the account structure. + +This is an account structure change issue, not a bundle or token permission issue. + +--- + +## How to Fix the NS0942 Sync Error + +You must disconnect and reconnect the NetSuite integration in each affected Workspace. + +--- + +## Save Your Current Configuration Before Disconnecting + +Before disconnecting: + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Configure**. +5. Take screenshots of: + - Imported categories. + - Imported tags. + - Mapping settings. + - Any custom configuration. + +Disconnecting removes imported data and settings. + +--- + +## Disconnect the NetSuite Connection + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Disconnect**. +6. Confirm the disconnection. +7. Refresh the page to confirm the connection has been removed. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Disconnect**. +6. Confirm the disconnection. +7. Refresh the app to confirm the connection is removed. + +--- + +## Reconnect to NetSuite + +After confirming the connection has been removed: + +1. Click **Connect to NetSuite**. +2. Complete the NetSuite connection flow. +3. Confirm subsidiaries and parent company data import successfully. + +Once reconnected, subsidiary and parent company data should sync correctly. + +--- + +## Repeat for Each Connected Workspace + +If multiple Workspaces are connected to NetSuite, repeat the disconnect and reconnect process in each one. + +--- + +# FAQ + +## Will Disconnecting Remove My Configuration? + +Yes. Disconnecting resets the NetSuite connection and removes imported settings. Save screenshots of your configuration before disconnecting. + +## Does the NS0942 Sync Error Fix Itself Automatically? + +No. The integration must be manually disconnected and reconnected after switching to a OneWorld account. + +## Does This Affect All Exports? + +Yes. Until the connection is refreshed, syncing and exports may fail due to missing subsidiary data. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0109-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0109-Sync-Error.md new file mode 100644 index 0000000000000..5b4d3dba86582 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0109-Sync-Error.md @@ -0,0 +1,93 @@ +--- +title: NS0109 Sync Error in NetSuite Integration +description: Learn what the NS0109 sync error means and how to refresh or update your NetSuite admin credentials to restore syncing. +keywords: NS0109, NetSuite login failed, failed to login to NetSuite, NetSuite admin credentials, refresh NetSuite token, NetSuite sync error, Expensify NetSuite integration, NetSuite authentication error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0109 sync error caused by invalid or expired NetSuite admin credentials. Does not cover full NetSuite integration setup or advanced NetSuite configuration. +--- + +# NS0109 Sync Error in NetSuite Integration + +If you see the error: + +NS0109 Sync Error: Failed to login to NetSuite. Please verify your admin credentials. + +This means the Workspace is unable to authenticate with NetSuite. + +When authentication fails, reports and data cannot sync between Expensify and NetSuite. + +--- + +## Why the NS0109 Sync Error Happens in NetSuite + +The NS0109 error typically indicates an issue with the NetSuite credentials used for the integration. + +Common causes include: + +- The NetSuite admin password was changed. +- The access token was revoked or expired. +- The integration credentials were updated in NetSuite but not refreshed in the Workspace. +- The integration role permissions were modified in NetSuite. +- The NetSuite role associated with the token was disabled. + +When credentials are no longer valid, Expensify cannot log in to NetSuite and syncing fails. + +This is an authentication issue, not a report data issue. + +--- + +## How to Fix the NS0109 Sync Error + +Follow the steps below to verify and refresh your NetSuite credentials. + +### Verify the NetSuite Admin Credentials + +1. Confirm the correct NetSuite admin account is being used. +2. Verify the integration role is active and has the required permissions. +3. Confirm the account ID, role ID, consumer key, consumer secret, token ID, and token secret match what is configured in NetSuite. +4. Update any credentials that were recently changed. +5. Click **Save** in the Workspace if changes were made. + +### Generate a New NetSuite Access Token + +If the credentials appear correct but the error persists: + +1. Log in to NetSuite as an administrator. +2. Navigate to the Access Token configuration for the integration role. +3. Generate a new access token. +4. Copy the new token ID and token secret. +5. Update the credentials in the Workspace. +6. Click **Save**. +7. Click **Sync Now** under **Settings > Workspaces > Accounting**. + +### Retry the Sync + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Sync Now**. + +If the credentials are valid, syncing should resume successfully. + +### Contact Concierge if the Error Persists + +If you are unsure which credentials changed or continue to see the NS0109 error, reach out to **Concierge** and include: + +- The full error message. +- Confirmation that you are seeing **NS0109**. +- The approximate time the sync was attempted. + +--- + +# FAQ + +## Does the NS0109 Sync Error Affect All Exports? + +Yes. If Expensify cannot log in to NetSuite, all report exports and sync activity will fail until the credentials are corrected. + +## Do I Need a NetSuite Admin to Fix the NS0109 Sync Error? + +Yes. Only a NetSuite administrator, or someone with the correct integration role and permissions, can verify credentials or generate a new access token. + +## Should I Disconnect and Reconnect NetSuite? + +Do not disconnect the integration unless directed by Concierge, as reconnecting may require full reconfiguration. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0123-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0123-Sync-Error.md new file mode 100644 index 0000000000000..5d2cca4cdc357 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0123-Sync-Error.md @@ -0,0 +1,87 @@ +--- +title: NS0123 Sync Error in NetSuite Integration +description: Learn what the NS0123 sync error means and how to enable the Expensify integration in NetSuite to restore syncing. +keywords: NS0123, NetSuite integration not enabled, Expensify integration NetSuite, enable Expensify in NetSuite, NetSuite sync error, Setup Integrations Manage Integrations, Expensify NetSuite connection, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0123 sync error caused by the Expensify integration being disabled in NetSuite. Does not cover full NetSuite integration setup or credential troubleshooting. +--- + +# NS0123 Sync Error in NetSuite Integration + +If you see the error: + +NS0123 Sync Error: The Expensify integration is not enabled in NetSuite. Please enable it under Setup > Integrations > Manage Integrations in NetSuite. + +This means the Expensify integration is currently turned off in NetSuite. + +When the integration is not enabled, reports and data cannot sync between the Workspace and NetSuite. + +--- + +## Why the NS0123 Sync Error Happens in NetSuite + +The NS0123 error typically indicates that the **Expensify integration is disabled in NetSuite**. + +This may happen if: + +- The integration was never enabled. +- The integration was manually disabled in NetSuite. +- Changes were made to NetSuite integration settings. +- A NetSuite update affected integration permissions. + +Until the integration is enabled again, all syncing between the Workspace and NetSuite will fail. + +This is an integration status issue, not a credential or report data issue. + +--- + +## How to Enable the Expensify Integration in NetSuite + +Follow the steps below to re-enable the integration. + +### Enable the Expensify Integration in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Integrations > Manage Integrations**. +3. Locate the **Expensify Integration**. +4. Enable the integration. +5. Click **Save**. + +Confirm the integration is fully enabled before leaving the page. + +### Sync the Workspace in Expensify + +After enabling the integration in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Once the integration is enabled and synced, exports should resume normally. + +--- + +# FAQ + +## Does the NS0123 Sync Error Stop All Report Exports? + +Yes. If the Expensify integration is not enabled in NetSuite, all report syncing and exports to NetSuite will fail until the integration is turned back on. + +## Do I Need NetSuite Admin Access to Fix the NS0123 Sync Error? + +Yes. Only someone with the appropriate permissions in NetSuite can enable integrations under **Setup > Integrations > Manage Integrations**. + +## Do I Need to Reconnect the Integration? + +No. Re-enabling the integration in NetSuite and selecting **Sync Now** in the Workspace is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0521-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0521-Sync-Error.md new file mode 100644 index 0000000000000..24197d4480cd1 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0521-Sync-Error.md @@ -0,0 +1,122 @@ +--- +title: NS0521 Sync Error in NetSuite Integration +description: Learn what the NS0521 sync error means and how to fix subsidiary permission issues in OneWorld and Non-OneWorld NetSuite accounts. +keywords: NS0521, NetSuite subsidiary permission error, OneWorld NetSuite permissions, Non-OneWorld NetSuite bundle, Expensify Integration role, Expensify Connect bundle, NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0521 sync error caused by subsidiary permission configuration in OneWorld and Non-OneWorld accounts. Does not cover token formatting or general login errors. +--- + +# NS0521 Sync Error in NetSuite Integration + +If you see the error: + +NS0521 Sync Error: Permission error querying NetSuite for 'Subsidiary'. + +This means the NetSuite integration does not have proper access to subsidiary records. + +This error is typically related to permission restrictions in **OneWorld** or **Non-OneWorld** NetSuite accounts. + +--- + +## Why the NS0521 Sync Error Happens in NetSuite + +The NS0521 error occurs because of permission restrictions tied to how subsidiaries are configured in NetSuite. + +The resolution depends on whether your account is: + +- A **OneWorld** account, or +- A **Non-OneWorld** account. + +If the integration role does not have access to subsidiary records, NetSuite blocks the sync. + +This is a subsidiary permission issue, not a token formatting or general login error. + +--- + +## Fix the NS0521 Sync Error for OneWorld Accounts + +In OneWorld accounts, the **Expensify Integration role** must have access to all required subsidiaries. + +### Update Subsidiary Access on the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Under subsidiary access, confirm that either: + - **All** is selected, or + - **Selected** is chosen and all required subsidiaries are highlighted. +6. Click **Save**. + +### Sync the Workspace + +After updating the role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the export or sync once complete. + +--- + +## Fix the NS0521 Sync Error for Non-OneWorld Accounts + +In Non-OneWorld accounts, this error is typically related to the **Expensify Connect bundle** configuration. + +### Reinstall the Expensify Connect Bundle + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Uninstall the bundle. +5. Delete the **Expensify Integration role**. +6. Reinstall the Expensify Connect bundle. +7. During installation, do not edit or modify the default role permissions. + +### Sync the Workspace + +After reinstalling: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +# FAQ + +## Does the NS0521 Sync Error Affect All Workspaces? + +It can. If the NetSuite role or bundle configuration is incorrect, all Workspaces connected to that NetSuite account may experience syncing issues. + +## Do I Need NetSuite Admin Access to Fix the NS0521 Sync Error? + +Yes. Updating roles, managing subsidiary access, and reinstalling bundles require NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. In most cases, correcting subsidiary access or reinstalling the bundle and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0565-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0565-Sync-Error.md new file mode 100644 index 0000000000000..71083aa92149e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0565-Sync-Error.md @@ -0,0 +1,117 @@ +--- +title: NS0565 Sync Error in NetSuite Integration +description: Learn what the NS0565 sync error means and how to assign the correct Expensify Integration role and permissions to your NetSuite access token. +keywords: NS0565, NetSuite access token error, Expensify Integration role, NetSuite Account records permission, Access Token Management, User Access Tokens, NetSuite sync error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0565 sync error caused by incorrect NetSuite access token role configuration and permissions. Does not cover bundle updates or general NetSuite login credential issues. +--- + +# NS0565 Sync Error in NetSuite Integration + +If you see the error: + +NS0565 Sync Error: The role linked to your NetSuite access token doesn’t have permission to access Account records. Please confirm the token is assigned to the Expensify Integration role by viewing the "Access Token" in NetSuite. + +This means the NetSuite access token is linked to a role that does not have permission to access **Account records**. + +When the access token is tied to a role without the required permissions, syncing and exports to NetSuite will fail. + +--- + +## Why the NS0565 Sync Error Happens in NetSuite + +The NS0565 error typically occurs when: + +- The **NetSuite Access Token** is assigned to the wrong role. +- The assigned role does not include permissions to access **Account records**. +- The **Expensify Integration role** is not assigned to the employee record used to create the token. +- Global permissions on the employee record override the role’s permissions. + +The access token must be linked to the **Expensify Integration role**. If it is assigned to another role without proper permissions, NetSuite blocks the sync. + +This is a role and permission configuration issue, not a bundle update or general login credential issue. + +--- + +## How to Fix the NS0565 Sync Error + +Follow the steps below to confirm the correct role and permissions are configured. + +--- + +## Confirm the Role Assigned to the NetSuite Access Token + +1. Log in to NetSuite as an administrator. +2. Search for **Access Tokens**. +3. Locate the token used for the Expensify connection. +4. Click **View** next to the listed token. +5. Confirm that the **Expensify Integration role** is assigned to the token. + +If the Expensify Integration role is already assigned, continue to the next section. + +--- + +## Assign the Expensify Integration Role to the Employee Record + +If the Expensify Integration role is not assigned: + +1. Search for the NetSuite employee record used to create the access token. +2. Click **Edit**. +3. Select the **Access** tab. +4. Add the **Expensify Integration role**. +5. Click **Save**. + +After updating the employee record, confirm the access token is linked to the correct role. + +--- + +## Review Global Permissions on the Employee Record + +Global permissions can override role permissions. + +1. Open the same employee record in NetSuite. +2. Locate the **Global Permissions** section. +3. Confirm that: + - Permissions for **Web Services** and **Access Tokens** are removed, or + - These permissions are set to **Full**. + +If these permissions are restricted, they can override the role permissions and cause the NS0565 sync error. + +--- + +## Retry the Sync in the Workspace + +After confirming the role and permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +If the access token and role permissions are configured correctly, syncing should resume successfully. + +--- + +# FAQ + +## Does the NS0565 Sync Error Affect All Exports? + +Yes. If the access token role does not have permission to access Account records, syncing and exports to NetSuite will fail. + +## Do I Need NetSuite Admin Access to Fix the NS0565 Sync Error? + +Yes. You must have permission to manage roles, employee records, and access tokens in NetSuite. + +## Do I Need to Reconnect the Integration? + +No. Correcting the role assignment and permissions and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0593-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0593-Sync-Error.md new file mode 100644 index 0000000000000..590c7604f4abd --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0593-Sync-Error.md @@ -0,0 +1,80 @@ +--- +title: NS0593 Sync Error in NetSuite Integration +description: Learn what the NS0593 sync error means and how to resolve NetSuite concurrency limits when syncing from Expensify. +keywords: NS0593, NetSuite concurrency limit, too many open connections NetSuite, NetSuite sync error, Expensify NetSuite integration, NetSuite connection limit, retry sync, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0593 sync error caused by NetSuite concurrency limits. Does not cover credential issues or bundle configuration. +--- + +# NS0593 Sync Error in NetSuite Integration + +If you see the error: + +NS0593 Sync Error: There are too many open connections to the NetSuite company at this moment. Please try again in a few minutes. + +This means NetSuite has reached its connection limit. + +This error is temporary and related to NetSuite’s concurrency restrictions. + +--- + +## Why the NS0593 Sync Error Happens in NetSuite + +The NS0593 error typically indicates there are more than **five open connections** to your NetSuite company at the same time. + +NetSuite limits concurrency to five active connections to prevent overloading accounts. + +Even though Expensify runs one job at a time, the limit can be reached if: + +- Multiple members are exporting reports at the same time. +- Multiple Workspaces are syncing simultaneously. +- Other third-party integrations are connected to NetSuite. +- Background scripts or scheduled jobs are running in NetSuite. + +When the connection limit is exceeded, NetSuite temporarily blocks additional sync attempts. + +This is a concurrency limitation, not a credential or bundle configuration issue. + +--- + +## How to Fix the NS0593 Sync Error + +No configuration changes are required. + +### Wait and Retry the Sync + +1. Wait a few minutes to allow existing NetSuite connections to close. +2. Retry syncing the Workspace. + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +If the issue continues, confirm that no other large exports, integrations, or background jobs are actively running in NetSuite at the same time. + +--- + +# FAQ + +## Does the NS0593 Sync Error Mean Something Is Broken? + +No. This is a temporary concurrency limit imposed by NetSuite and does not indicate a configuration issue. + +## How Long Should I Wait Before Retrying? + +Waiting a few minutes is typically enough. Once active connections close, syncing should resume normally. + +## Can This Affect Multiple Workspaces? + +Yes. If several Workspaces or integrations attempt to sync at the same time, they may trigger the NetSuite connection limit. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0739-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0739-Sync-Error.md new file mode 100644 index 0000000000000..0eabdedc94332 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0739-Sync-Error.md @@ -0,0 +1,105 @@ +--- +title: NS0739 Sync Error in NetSuite Integration +description: Learn what the NS0739 sync error means and how to fix NetSuite token permission and formatting issues to restore syncing. +keywords: NS0739, NetSuite token error, unexpected error logging in with tokens, SOAP Web Services permission, Expensify Integration role, NetSuite Sandbox token format, NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0739 sync error caused by NetSuite token permissions or formatting issues. Does not cover bundle updates or general NetSuite login credential errors. +--- + +# NS0739 Sync Error in NetSuite Integration + +If you see the error: + +NS0739 Sync Error: Unexpected error when logging in with tokens. + +This usually means the NetSuite tokens were created with incorrect permissions or are not formatted properly. + +When token configuration does not meet NetSuite’s requirements, Expensify cannot authenticate and syncing fails. + +--- + +## Why the NS0739 Sync Error Happens in NetSuite + +The NS0739 error typically occurs when: + +- The generated access tokens do not have the correct permissions. +- The **SOAP Web Services** permission is not set correctly on the integration role. +- The token is formatted incorrectly in NetSuite. +- A Sandbox account ID uses incorrect capitalization or formatting. + +If the token configuration does not align with NetSuite’s requirements, the login attempt will fail. + +This is a token permission or formatting issue, not a bundle update or general login credential issue. + +--- + +## How to Fix the NS0739 Sync Error + +Follow the steps below to verify permissions and token formatting. + +--- + +## Confirm SOAP Web Services Permission + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Locate and click **Edit** for the **Expensify Integration role**. +4. Click the **Permissions** tab. +5. Scroll to the **Setup** section. +6. Confirm **SOAP Web Services** is set to **Full**. +7. Click **Save** if changes were made. + +After updating permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Confirm Token Formatting for NetSuite Sandbox Accounts + +If you are connected to a **NetSuite Sandbox** environment, confirm the account ID and token formatting are correct. + +Correct format example: + +- `12345678_SB1` + +Incorrect format example: + +- `12345678-sb1` + +Sandbox account IDs are case-sensitive and must use the correct capitalization and underscore format. + +After confirming formatting: + +1. Update the account ID or token details in the Workspace if needed. +2. Click **Save**. +3. Click **Sync Now**. + +--- + +# FAQ + +## Does the NS0739 Sync Error Affect All Exports? + +Yes. If Expensify cannot authenticate using the NetSuite tokens, all syncing and exports will fail until the issue is resolved. + +## Do I Need NetSuite Admin Access to Fix the NS0739 Sync Error? + +Yes. You must have permission to edit roles and manage token settings in NetSuite. + +## Do I Need to Reconnect the Integration? + +No. In most cases, correcting the role permissions or token formatting and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0942-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0942-Sync-Error.md new file mode 100644 index 0000000000000..7cabebd341d4b --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Connection-errors/NS0942-Sync-Error.md @@ -0,0 +1,114 @@ +--- +title: NS0942 Sync Error in NetSuite Integration +description: Learn what the NS0942 sync error means when switching to a NetSuite OneWorld account and how to disconnect and reconnect the NetSuite integration. +keywords: NS0942, NetSuite OneWorld error, Parent Company not found, NetSuite subsidiaries not importing, disconnect NetSuite, reconnect NetSuite integration, Expensify NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0942 sync error caused by moving from a non-OneWorld to a OneWorld NetSuite account. Does not cover bundle updates or token permission troubleshooting. +--- + +# NS0942 Sync Error in NetSuite Integration + +If you see the error: + +NS0942 Sync Error: 'Parent Company' not found for subsidiaries. Please disconnect and reconnect the NetSuite connection to import the subsidiaries. + +This means your NetSuite account type has changed. + +This error commonly appears when switching from a **non-OneWorld** NetSuite account to a **OneWorld** account after the connection has already been established in the Workspace. + +--- + +## Why the NS0942 Sync Error Happens in NetSuite + +The NS0942 error typically occurs when: + +- Your NetSuite account was previously non-OneWorld. +- You upgraded or migrated to a **OneWorld** account. +- The existing NetSuite connection was not reconfigured after the change. + +OneWorld accounts use subsidiaries and a parent company structure. The original connection does not properly import subsidiary data after this change. + +The integration must be reconnected to refresh the account structure. + +This is an account structure change issue, not a bundle update or token permission issue. + +--- + +## How to Fix the NS0942 Sync Error + +You must disconnect and reconnect the NetSuite integration in each affected Workspace. + +--- + +## Save Your Current Configuration Before Disconnecting + +Before disconnecting: + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Configure**. +5. Take screenshots of: + - Imported categories. + - Imported tags. + - Mapping settings. + - Any custom configuration. + +Disconnecting removes imported data and settings. + +--- + +## Disconnect the NetSuite Connection + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Disconnect**. +6. Confirm the disconnection. +7. Refresh the page to confirm the connection has been removed. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Disconnect**. +6. Confirm the disconnection. +7. Refresh the app to confirm the connection is removed. + +--- + +## Reconnect to NetSuite + +After confirming the connection has been removed: + +1. Click **Connect to NetSuite**. +2. Complete the NetSuite connection flow. +3. Confirm subsidiaries and parent company data import successfully. + +Once reconnected, subsidiary and parent company data should sync correctly. + +--- + +## Repeat for Each Connected Workspace + +If multiple Workspaces are connected to NetSuite, repeat the disconnect and reconnect process in each one. + +--- + +# FAQ + +## Will Disconnecting Remove My Configuration? + +Yes. Disconnecting resets the NetSuite connection and removes imported settings. Save screenshots of your configuration before disconnecting. + +## Does the NS0942 Sync Error Fix Itself Automatically? + +No. The integration must be manually disconnected and reconnected after switching to a OneWorld account. + +## Does This Affect All Exports? + +Yes. Until the connection is refreshed, syncing and exports may fail due to missing subsidiary data. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0005-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0005-Export-Error.md new file mode 100644 index 0000000000000..cee3ab8563a10 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0005-Export-Error.md @@ -0,0 +1,130 @@ +--- +title: NS0005 Export Error in NetSuite Integration +description: Learn what the NS0005 export error means and how to configure required Department, Location, or Class fields in NetSuite for vendor bills, journal entries, or expense reports. +keywords: NS0005, NetSuite missing Department Location Class, vendor bill classification error NetSuite, journal entry export error NetSuite, expense report classification error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0005 export error caused by missing Department, Location, or Class values for different export types. Does not cover role permission or token issues. +--- + +# NS0005 Export Error in NetSuite Integration + +If you see the error: + +NS0005 Export Error: Please enter value(s) for 'department', 'location', or 'class' and attempt to export again. + +This means required classification fields are missing in NetSuite. + +This typically affects: + +- Vendor bill exports +- Journal entry exports +- Expense report exports + +The fix depends on the export type. + +--- + +## Why the NS0005 Export Error Happens in NetSuite + +The NS0005 error occurs when required classification fields such as: + +- **Department** +- **Location** +- **Class** + +are not populated on the transaction or employee record in NetSuite. + +Depending on your export type, these values must either: + +- Be removed as required fields on the transaction form, or +- Be set as default values on the employee record + +This is a NetSuite classification configuration issue, not a role permission or token issue. + +--- + +## Fix the NS0005 Export Error for Vendor Bills + +If you are exporting **vendor bills**, update the preferred vendor bill form in NetSuite. + +### Update the Vendor Bill Form in NetSuite + +1. Log in to NetSuite as an administrator. +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**. +6. Uncheck both **Show** and **Mandatory** for each field. +7. Click **Save**. + +### Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report after the sync completes. + +--- + +## Fix the NS0005 Export Error for Journal Entries or Expense Reports + +If you are exporting **journal entries** or **expense reports**, update the employee record in NetSuite. + +### Set Default Classification Values on the Employee Record + +1. Log in to NetSuite. +2. Go to **Lists > Employees**. +3. Locate and edit the employee profile associated with the report creator or submitter. +4. Set default values for: + - **Department** + - **Class** + - **Location** +5. Click **Save**. + +### Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report once the sync completes. + +--- + +# FAQ + +## Does the NS0005 Export Error Affect All Export Types? + +No. The resolution depends on whether you are exporting a vendor bill, journal entry, or expense report. + +## Do I Need NetSuite Admin Access to Fix the NS0005 Export Error? + +Yes. Updating transaction forms or employee records in NetSuite requires appropriate permissions. + +## Can I Make Department, Location, or Class Optional Instead? + +Yes. For vendor bill exports, you can remove the **Mandatory** requirement from the preferred transaction form in NetSuite. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0012-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0012-Export-Error.md new file mode 100644 index 0000000000000..195c22fb414ba --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0012-Export-Error.md @@ -0,0 +1,109 @@ +--- +title: NS0012 Export Error in NetSuite Integration +description: Learn what the NS0012 export error means and how to enable or sync currencies between the Workspace and NetSuite subsidiaries. +keywords: NS0012, NetSuite currency does not exist, currency not available in subsidiary NetSuite, enable Multiple Currencies NetSuite, OneWorld currency error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0012 export error caused by missing currencies in NetSuite subsidiaries. Does not cover role permissions or token authentication issues. +--- + +# NS0012 Export Error in NetSuite Integration + +If you see the error: + +NS0012 Export Error: Currency does not exist in NetSuite. + +This means the currency used on the report in the Workspace is not available in the connected NetSuite subsidiary. + +NetSuite must support the report currency for the export to succeed. + +--- + +## Why the NS0012 Export Error Happens in NetSuite + +The NS0012 error typically occurs when: + +- The report currency is not enabled in the selected NetSuite subsidiary. +- The currency is not available in your NetSuite instance. +- Multi-currency is not enabled in NetSuite. +- The subsidiary does not support the transaction currency. + +Exports will fail if NetSuite does not recognize the report currency. + +This is a currency configuration issue in NetSuite, not a role permission or token authentication issue. + +--- + +## How to Fix the NS0012 Export Error + +Follow the steps below to confirm and enable the required currency. + +### Confirm Available Currencies in NetSuite + +1. Log in to NetSuite as an administrator. +2. Navigate to the subsidiary associated with the export. +3. Review which currencies are enabled for that subsidiary. +4. Confirm the report currency is listed and active. + +If the required currency is not enabled: + +- Enable or add the currency in NetSuite. +- Click **Save**. + +### Sync the Workspace in Expensify + +After updating currencies in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report after the sync completes. + +--- + +## Additional Steps for Non-OneWorld NetSuite Accounts + +Non-OneWorld NetSuite instances support a limited number of currencies by default. + +If your required currency is not available: + +1. Log in to NetSuite. +2. Go to **Setup > Enable Features**. +3. Enable **Multiple Currencies**. +4. Save your changes. +5. Use the global search bar to add the required currency. +6. Save the currency configuration. + +After enabling the currency: + +1. Return to the Workspace. +2. Go to **Settings > Workspaces > Accounting**. +3. Click **Sync Now**. +4. Retry exporting the report. + +--- + +# FAQ + +## Does the NS0012 Export Error Affect All Subsidiaries? + +No. It affects the specific subsidiary tied to the export. Each subsidiary must have the required currency enabled. + +## Do I Need NetSuite Admin Access to Fix the NS0012 Export Error? + +Yes. Enabling features and adding currencies in NetSuite requires administrator-level permissions. + +## Do I Need to Reconnect the Integration? + +No. Enabling the currency and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0019-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0019-Export-Error.md new file mode 100644 index 0000000000000..f61a7c9481c61 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0019-Export-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0019 Export Error in NetSuite Integration +description: Learn what the NS0019 export error means and how to map company cards to a valid NetSuite account instead of Default Card. +keywords: NS0019, NetSuite payable account does not exist, Default Card export error, company card mapping NetSuite, journal entry export error, Expensify Domain Company Cards, Workspace Admin, Domain Admin +internalScope: Audience is Domain Admins and Workspace Admins using the NetSuite integration with company cards. Covers resolving the NS0019 export error caused by missing or invalid company card export mapping. Does not cover reimbursable report export issues. +--- + +# NS0019 Export Error in NetSuite Integration + +If you see the error: + +NS0019 Export Error: The payable account doesn’t exist in NetSuite. Please ensure the company card is mapped to a valid NetSuite account and not set to 'Default Card'. + +This means the company card used on the report is not mapped to a valid NetSuite account. + +This commonly occurs when exporting **company card transactions as journal entries** without selecting a specific NetSuite export account in Domain settings. + +--- + +## Why the NS0019 Export Error Happens in NetSuite + +The NS0019 error typically occurs when: + +- Company card transactions are exported as **Journal entries**. +- The card is set to **Default Card** instead of a specific NetSuite account. +- No valid payable account is configured for the card in Domain settings. + +When no valid payable account is selected, NetSuite cannot complete the export. + +This is a company card export mapping issue, not a reimbursable report export issue. + +--- + +## How to Fix the NS0019 Export Error + +Follow the steps below to confirm proper mapping. + +--- + +## Confirm the Expenses Are Company Card Transactions + +1. Open the report. +2. Confirm the expenses display the **Card + Lock icon**. + +The Card + Lock icon indicates the expense is tied to a company card and must be mapped to a valid NetSuite account. + +--- + +## Confirm the Export Type for Non-Reimbursable Expenses + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Export**. +5. Confirm the export type for **non-reimbursable expenses** is set to **Journal entries**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Export**. +5. Confirm non-reimbursable expenses are set to **Journal entries**. + +--- + +## Map the Company Card to a Valid NetSuite Account + +1. Go to **Settings > Domains**. +2. Select your Domain. +3. Click **Company Cards**. +4. Locate the card assigned to the report creator or submitter. +5. Click **Edit Export**. +6. In the dropdown, select the appropriate NetSuite account. +7. Click **Save**. + +Important: Do not leave the card set to **Default Card** when exporting as journal entries. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the card is mapped to a valid NetSuite account, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0019 Export Error Affect All Company Card Exports? + +It affects company card transactions exported as journal entries when the card is not mapped to a valid NetSuite account. + +## Do I Need Domain Admin Access to Fix the NS0019 Export Error? + +Yes. Updating company card export mappings requires Domain Admin permissions. + +## Does This Affect Reimbursable Reports? + +No. This error applies to company card transactions, not reimbursable report exports. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0021-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0021-Export-Error.md new file mode 100644 index 0000000000000..ccb6970f13bfe --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0021-Export-Error.md @@ -0,0 +1,86 @@ +--- +title: NS0021 Export Error in NetSuite Integration +description: Learn what the NS0021 export error means and how to correct invalid tax group mappings in NetSuite before exporting. +keywords: NS0021, NetSuite invalid tax code reference, GST mapping NetSuite, tax group mapping error, NCT-AU, TS-AU, NCF-AU, TFS-AU, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0021 export error caused by incorrect tax group mappings in NetSuite. Does not cover role permissions or currency configuration issues. +--- + +# NS0021 Export Error in NetSuite Integration + +If you see the error: + +NS0021 Export Error: Invalid tax code reference. + +This means there is an incorrect tax group mapping in NetSuite. + +The tax code selected in the Workspace must match the correct tax group configuration in NetSuite for the export to succeed. + +--- + +## Why the NS0021 Export Error Happens in NetSuite + +The NS0021 error typically occurs when tax groups in NetSuite are mapped incorrectly. + +This is commonly related to Australian GST tax codes and incorrect tax group assignments. + +If the wrong NetSuite tax group is mapped to a tax rate, NetSuite will reject the export. + +This is a tax group configuration issue, not a role permission or currency configuration issue. + +--- + +## How to Fix the NS0021 Export Error + +Review and correct your tax group mappings in NetSuite. + +### Confirm the Correct Tax Group Mappings + +In NetSuite, verify the following mappings: + +- **GST 10%** should map to **NCT-AU**, not **TS-AU**. +- **No GST 0%** should map to **NCF-AU**, not **TFS-AU**. + +Update the tax group mappings if needed and click **Save**. + +### Sync the Workspace in Expensify + +After correcting the tax mappings: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the tax groups are mapped correctly, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0021 Export Error Affect All Tax Codes? + +No. It affects only the tax codes that are incorrectly mapped in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0021 Export Error? + +Yes. Updating tax group mappings in NetSuite requires appropriate administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the tax group mapping and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0023-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0023-Export-Error.md new file mode 100644 index 0000000000000..e3d2b85fc9c15 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0023-Export-Error.md @@ -0,0 +1,89 @@ +--- +title: NS0023 Export Error in NetSuite Integration +description: Learn what the NS0023 export error means and how to match employee subsidiary and email settings between NetSuite and Expensify. +keywords: NS0023, NetSuite employee does not exist, employee subsidiary mismatch NetSuite, employee email mismatch NetSuite, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0023 export error caused by employee subsidiary or email mismatches. Does not cover role permission or token configuration issues. +--- + +# NS0023 Export Error in NetSuite Integration + +If you see the error: + +NS0023 Export Error: Employee does not exist in NetSuite. Please make sure employee’s subsidiary and email matches between NetSuite and Expensify. + +This means NetSuite cannot find a matching employee record for the report creator or submitter. + +Exports require the employee’s subsidiary and email address to match exactly between NetSuite and the Workspace. + +--- + +## Why the NS0023 Export Error Happens in NetSuite + +The NS0023 error typically occurs when: + +- The employee’s **subsidiary** in NetSuite does not match the subsidiary used in the Workspace. +- The employee’s **email address** does not match between NetSuite and the Workspace. +- The employee record does not exist in the selected NetSuite subsidiary. + +If either the subsidiary or email differs, NetSuite cannot match the employee during export. + +This is an employee record configuration issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0023 Export Error + +Follow the steps below to confirm and correct the employee record. + +### Confirm Employee Settings in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Locate the employee profile associated with the report creator or submitter. +4. Confirm the following: + - The **Subsidiary** matches the subsidiary configured in the Workspace. + - The **Email address** exactly matches the email used in the Workspace. +5. Click **Save** if changes were made. + +### Sync the Workspace in Expensify + +After confirming or updating the employee record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the employee’s subsidiary and email match exactly, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0023 Export Error Affect All Reports From This Employee? + +Yes. If the employee record does not match, all exports tied to that employee will fail until the mismatch is corrected. + +## Do I Need NetSuite Admin Access to Fix the NS0023 Export Error? + +Yes. Updating employee records in NetSuite requires appropriate permissions. + +## Does the Email Have to Match Exactly? + +Yes. The email address must match exactly, including spelling and formatting. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0024-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0024-Export-Error.md new file mode 100644 index 0000000000000..5c526f9c3c8b8 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0024-Export-Error.md @@ -0,0 +1,88 @@ +--- +title: NS0024 Export Error in NetSuite Integration +description: Learn what the NS0024 export error means and how to add the employee as a resource on the related customer or project in NetSuite before exporting. +keywords: NS0024, NetSuite invalid customer tag, invalid project tag NetSuite, employee not listed as resource NetSuite, customer project export error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0024 export error caused by missing employee resource assignments on customers or projects. Does not cover role permission or subsidiary mismatch issues. +--- + +# NS0024 Export Error in NetSuite Integration + +If you see the error: + +NS0024 Export Error: Invalid 'customer' or 'project' tag. Please make sure the employee is listed as a resource on the 'customer' or 'project' in NetSuite. + +This means the employee is not assigned as a resource to the selected customer or project in NetSuite. + +NetSuite requires the employee to be listed as a resource in order to associate transactions with that customer or project. + +--- + +## Why the NS0024 Export Error Happens in NetSuite + +The NS0024 error typically occurs when: + +- A **Customer** or **Project** is selected on the expense or report. +- The report creator or submitter is not listed as a **resource** on that customer or project in NetSuite. +- NetSuite validation fails because the employee is not authorized to post transactions to that record. + +If the employee is not assigned as a resource, NetSuite will reject the export. + +This is a customer or project resource configuration issue, not a role permission or subsidiary mismatch issue. + +--- + +## How to Fix the NS0024 Export Error + +Follow the steps below to add the employee as a resource and retry the export. + +### Add the Employee as a Resource in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Relationships > Customers/Projects**. +3. Locate and edit the relevant customer or project. +4. Navigate to the **Resources** section. +5. Add the employee associated with the report creator or submitter. +6. Click **Save**. + +### Sync the Workspace in Expensify + +After updating the customer or project: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the employee is properly assigned as a resource to the selected customer or project, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0024 Export Error Affect Only Project-Based Exports? + +Yes. This error appears when a customer or project is selected and the employee is not assigned as a resource in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0024 Export Error? + +Yes. Editing customers, projects, and resource assignments in NetSuite requires appropriate administrator permissions. + +## Can I Fix This by Changing the Customer or Project on the Report? + +Yes. If the selected customer or project is incorrect, you can update the expense to use one where the employee is already assigned as a resource. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0029-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0029-Export-Error.md new file mode 100644 index 0000000000000..19dc87ebdc5c1 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0029-Export-Error.md @@ -0,0 +1,76 @@ +--- +title: NS0029 Export Error in NetSuite Integration +description: Learn what the NS0029 export error means when exporting reports to NetSuite and what to do to resolve the connection issue. +keywords: NS0029, NetSuite export error, unable to export report NetSuite, NetSuite connection issue, Expensify NetSuite integration, report export failed NetSuite, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0029 export error caused by NetSuite connection issues. Does not cover general NetSuite integration setup or configuration. +--- + +# NS0029 Export Error in NetSuite Integration + +If you see the error: + +NS0029 Export Error: Unable to export this report due to an error. + +This means there is a connection issue between the Workspace and NetSuite. + +The error appears when you attempt to export a report to NetSuite and the export fails. + +--- + +## Why the NS0029 Export Error Happens in NetSuite + +The NS0029 error typically indicates that Expensify is unable to successfully communicate with NetSuite at the time of export. + +Common causes include: + +- An expired or disconnected NetSuite integration. +- Authentication issues between Expensify and NetSuite. +- Permission changes in NetSuite. +- Temporary connectivity issues. +- A change to the NetSuite role or access token used for the integration. + +Because this error is tied to the NetSuite connection, it cannot be resolved directly from the report itself. + +This is a connection or authentication issue, not a report data issue. + +--- + +## How to Fix the NS0029 Export Error + +Follow the steps below to resolve the issue. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the issue was temporary, the export may complete successfully. + +### Contact Concierge for Assistance + +If the error persists: + +1. Do not delete the report. +2. Reach out to **Concierge**. +3. Include: + - The report ID. + - Confirmation that you’re seeing the **NS0029 Export Error**. + - The approximate time the export was attempted. + +Concierge will review the NetSuite connection, check authentication and permission settings, and help restore the integration so you can export the report successfully. + +--- + +# FAQ + +## Can I Retry the Export After Seeing the NS0029 Export Error? + +Yes. If the issue was temporary, retrying the export may resolve it. If it continues to fail, the integration likely needs review. + +## Does the NS0029 Export Error Affect Other Reports? + +Yes. If the issue is related to your NetSuite connection or authentication, other report exports may also fail until the connection is fixed. + +## Should I Disconnect and Reconnect NetSuite? + +Do not disconnect the NetSuite integration unless directed by Concierge. Reconnecting without guidance may require reconfiguration. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0033-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0033-Export-Error.md new file mode 100644 index 0000000000000..33db4d2c8c68c --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0033-Export-Error.md @@ -0,0 +1,98 @@ +--- +title: NS0033 Export Error in NetSuite Integration +description: Learn what the NS0033 export error means and how to resolve invalid recipient issues in NetSuite before retrying the export. +keywords: NS0033, NetSuite invalid recipient error, one or more recipients not valid NetSuite, NetSuite email recipient error, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0033 export error returned directly from NetSuite regarding invalid recipients. Does not cover role permissions or configuration issues within the Workspace. +--- + +# NS0033 Export Error in NetSuite Integration + +If you see the error: + +NS0033 Export Error: One or more recipients are not valid. Please reach out to NetSuite support for additional guidance. + +This means NetSuite rejected the export because one or more recipients on the transaction are invalid. + +This error is generated directly by NetSuite. + +--- + +## Why the NS0033 Export Error Happens in NetSuite + +The NS0033 error typically occurs when NetSuite identifies one or more recipients associated with the transaction as invalid. + +This may be related to: + +- An invalid or inactive email address on a vendor or employee record. +- A recipient that has been deleted or deactivated. +- Incorrect email formatting in NetSuite. +- Email settings or communication preferences in NetSuite. + +Because the validation occurs within NetSuite, the Workspace cannot override or correct the issue directly. + +This is a NetSuite record or email configuration issue, not a role permission or Workspace configuration issue. + +--- + +## How to Fix the NS0033 Export Error + +Follow the steps below to resolve the issue. + +### Review Recipient Records in NetSuite + +1. Log in to NetSuite. +2. Open the transaction that failed to export, if it was partially created. +3. Review associated vendor, employee, or customer records. +4. Confirm that: + - Email addresses are valid and correctly formatted. + - The records are active. + - There are no blank or invalid recipient fields. + +Update and save any incorrect records. + +### Contact NetSuite Support if Needed + +If you cannot identify the invalid recipient: + +- Contact NetSuite support. +- Provide the full error message and transaction details. + +Because the error originates from NetSuite, it must be resolved within NetSuite. + +### Retry the Export in the Workspace + +After correcting the issue in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +# FAQ + +## Can the Workspace Fix the NS0033 Export Error Directly? + +No. This error is generated by NetSuite and must be resolved within NetSuite. + +## Does the NS0033 Export Error Affect All Exports? + +No. It affects only transactions that include the invalid recipient. Other exports may succeed if they do not reference the same record. + +## Do I Need NetSuite Admin Access to Fix This? + +You need sufficient permissions in NetSuite to edit vendor, employee, or customer records and correct email settings. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0034-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0034-Export-Error.md new file mode 100644 index 0000000000000..aa1b300beab5e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0034-Export-Error.md @@ -0,0 +1,90 @@ +--- +title: NS0034 Export Error in NetSuite Integration +description: Learn what the NS0034 export error means and how to delete duplicate records in NetSuite before reexporting from the Workspace. +keywords: NS0034, NetSuite record already exists, duplicate export NetSuite, report exported twice NetSuite, delete duplicate NetSuite record, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0034 export error caused by duplicate records from reexport attempts. Does not cover permission or mapping issues. +--- + +# NS0034 Export Error in NetSuite Integration + +If you see the error: + +NS0034 Export Error: This record already exists. Please search for the report ID in NetSuite, delete the entry, and reexport from Expensify. + +This means the report has already been exported to NetSuite. + +NetSuite prevents duplicate records from being created. + +--- + +## Why the NS0034 Export Error Happens in NetSuite + +The NS0034 error typically occurs when: + +- A report is exported successfully to NetSuite. +- An attempt is made to export the same report again. +- The original record still exists in NetSuite. + +Because the record already exists, NetSuite blocks the second export to prevent duplicates. + +This is a duplicate record issue, not a permission or mapping issue. + +--- + +## How to Fix the NS0034 Export Error + +Follow the steps below to remove the duplicate record and retry the export. + +### Search for the Report in NetSuite + +1. Log in to NetSuite. +2. Use the global search bar. +3. Search for the **Report ID** referenced in the error. +4. Locate the existing exported record. +5. Review the record to confirm it is a duplicate. +6. Delete the original export entry if you intend to replace it. + +Only delete the record if you need to reexport the report. + +### Sync the Workspace + +After deleting the record in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report in the Workspace. +2. Retry exporting to NetSuite. + +If the duplicate record has been removed, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0034 Export Error Mean the Original Export Failed? + +No. It usually means the original export succeeded and NetSuite is preventing a duplicate record. + +## Should I Always Delete the Existing Record in NetSuite? + +No. Only delete it if you need to reexport the report. If the original record is correct, no further action is required. + +## Can This Affect Other Reports? + +No. This error applies only to the specific report that was previously exported. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0037-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0037-Export-Error.md new file mode 100644 index 0000000000000..01e46d2fc6768 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0037-Export-Error.md @@ -0,0 +1,97 @@ +--- +title: NS0037 Export Error in NetSuite Integration +description: Learn what the NS0037 export error means and how to make the Receipt URL field visible in NetSuite to allow successful exports. +keywords: NS0037, NetSuite Receipt URL error, Receipt URL field not visible NetSuite, permission to set Receipt URL, NetSuite transaction form field visibility, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0037 export error caused by the Receipt URL field not being visible on the preferred NetSuite transaction form. Does not cover role permission or token configuration issues. +--- + +# NS0037 Export Error in NetSuite Integration + +If you see the error: + +NS0037 Export Error: You do not have permission to set value for element — 'Receipt URL'. Please make sure the receipt URL field is visible in NetSuite. + +This means the **Receipt URL** field is not visible on the preferred export form in NetSuite. + +The Workspace must be able to access and populate the Receipt URL field during export. + +--- + +## Why the NS0037 Export Error Happens in NetSuite + +The NS0037 error typically occurs when: + +- The **Receipt URL** field is hidden on the NetSuite transaction form used for exports. +- The preferred transaction form does not allow the field to be displayed. +- NetSuite blocks the integration from setting the field value because it is not visible. + +If the field is hidden, NetSuite prevents the integration from setting its value and the export fails. + +This is a transaction form configuration issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0037 Export Error + +Follow the steps below to make the Receipt URL field visible. + +--- + +## Make the Receipt URL Field Visible in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Locate the transaction form marked as **Preferred** for your export type. +4. Click **Edit**. +5. Navigate to the section that contains the **Receipt URL** field. +6. Ensure the field is marked as **Show**. +7. Click **Save**. + +Confirm the field is visible on the preferred form before proceeding. + +--- + +## Sync the Workspace in Expensify + +After updating the form: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the Receipt URL field is visible on the preferred form, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0037 Export Error Affect All Exports? + +It affects exports that attempt to populate the **Receipt URL** field on the selected NetSuite transaction form. + +## Do I Need NetSuite Admin Access to Fix the NS0037 Export Error? + +Yes. Updating transaction form field visibility in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Making the Receipt URL field visible and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0042-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0042-Export-Error.md new file mode 100644 index 0000000000000..028e35fdab2bd --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0042-Export-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0042 Export Error in NetSuite Integration +description: Learn what the NS0042 export error means and how to match vendor subsidiary and email settings between NetSuite and the Workspace. +keywords: NS0042, NetSuite vendor already exists, vendor subsidiary mismatch NetSuite, vendor email mismatch NetSuite, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0042 export error caused by vendor record subsidiary and email mismatches. Does not cover employee record mismatches or role permission issues. +--- + +# NS0042 Export Error in NetSuite Integration + +If you see the error: + +NS0042 Export Error: Vendor already exists in NetSuite. Please make sure vendor record subsidiary and email matches between NetSuite and Expensify. + +This means the Workspace attempted to create a new vendor record, but NetSuite already has a vendor with the same name. + +This typically happens when the existing vendor record cannot be matched due to a subsidiary or email mismatch. + +--- + +## Why the NS0042 Export Error Happens in NetSuite + +The NS0042 error typically occurs when: + +- The Workspace cannot locate an existing vendor record in NetSuite. +- The integration attempts to create a new vendor record. +- A vendor with the same name already exists in NetSuite. +- The vendor’s **email address** does not match between NetSuite and the Workspace. +- The vendor’s **subsidiary** does not match the subsidiary configured in the Workspace. + +If either the email or subsidiary differs, NetSuite cannot match the vendor and blocks the duplicate record. + +This is a vendor record configuration issue, not an employee record or role permission issue. + +--- + +## How to Fix the NS0042 Export Error + +Follow the steps below to correct the vendor record. + +### Confirm Vendor Settings in NetSuite + +1. Log in to NetSuite as an administrator. +2. Locate the vendor record associated with the report creator or submitter. +3. Confirm that: + - The **Email address** exactly matches the email used in the Workspace. + - The **Subsidiary** matches the subsidiary configured for the export. +4. Update any incorrect fields. +5. Click **Save**. + +### Sync the Workspace + +After confirming or updating the vendor record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the vendor’s email and subsidiary match correctly, the export should complete successfully. + +--- + +# FAQ + +## Why Is the Workspace Trying to Create a New Vendor? + +If the integration cannot find a vendor record that matches both the email and subsidiary, it attempts to create a new vendor during export. + +## Do I Need NetSuite Admin Access to Fix the NS0042 Export Error? + +Yes. Updating vendor records in NetSuite requires appropriate permissions. + +## Does the Email Have to Match Exactly? + +Yes. The vendor email must match exactly, including spelling and formatting, for NetSuite to recognize the existing record. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0045-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0045-Export-Error.md new file mode 100644 index 0000000000000..df3dd62954c37 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0045-Export-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0045 Export Error in NetSuite Integration +description: Learn what the NS0045 export error means and how to activate or correct expense category settings in NetSuite before exporting. +keywords: NS0045, NetSuite expense category not active, category not linked to account NetSuite, expense category export error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0045 export error caused by inactive or missing expense categories in NetSuite. Does not cover role permissions or token configuration issues. +--- + +# NS0045 Export Error in NetSuite Integration + +If you see the error: + +NS0045 Export Error: The expense category isn’t linked to an active NetSuite account. Verify the category in NetSuite, sync your connection in Expensify, and try exporting again. + +This means the expense category used on the report is not active or cannot be found in NetSuite. + +NetSuite must have an active expense category linked to a valid account for the export to succeed. + +--- + +## Why the NS0045 Export Error Happens in NetSuite + +The NS0045 error typically occurs when: + +- The expense category does not exist in NetSuite. +- The expense category exists but is inactive. +- The category is not linked to a valid NetSuite account. +- The category name in NetSuite does not match the category imported into the Workspace. + +If NetSuite cannot locate an active account tied to the category, it blocks the export. + +This is a category configuration issue in NetSuite, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0045 Export Error + +Follow the steps below to confirm the expense category is active and properly linked. + +### Confirm the Expense Category in NetSuite + +1. Log in to NetSuite as an administrator. +2. Locate the expense category used on the report. +3. Confirm the category: + - Is **Active**. + - Is properly named. + - Is linked to a valid NetSuite account. +4. Update any incorrect settings. +5. Click **Save**. + +### Sync the Workspace in Expensify + +After confirming or updating the expense category: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the expense category is active and properly linked to a NetSuite account, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0045 Export Error Affect Only One Category? + +Yes. This error is specific to the expense category used on the report. + +## Do I Need NetSuite Admin Access to Fix the NS0045 Export Error? + +Yes. Updating or activating expense categories in NetSuite requires appropriate administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the category and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0046-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0046-Export-Error.md new file mode 100644 index 0000000000000..9a1472c5d8421 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0046-Export-Error.md @@ -0,0 +1,108 @@ +--- +title: NS0046 Export Error in NetSuite Integration +description: Learn what the NS0046 export error means and how to apply valid NetSuite customer or project tags to billable expenses before exporting. +keywords: NS0046, NetSuite billable expense error, customer project required NetSuite, billable expense not coded NetSuite, invalid project NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0046 export error caused by missing or inactive customer or project tags on billable expenses. Does not cover role permission or subsidiary mismatch issues. +--- + +# NS0046 Export Error in NetSuite Integration + +If you see the error: + +NS0046 Export Error: Billable expenses not coded with a NetSuite 'customer' or billable 'project'. Please apply a 'customer' or 'project' to each billable expense and reattempt the export. + +This means one or more billable expenses are missing a valid NetSuite customer or project. + +NetSuite requires every billable expense to be associated with an active customer or project. + +--- + +## Why the NS0046 Export Error Happens in NetSuite + +The NS0046 error typically occurs when: + +- A billable expense does not have a **Customer** or **Project** tag applied. +- The selected customer or project is inactive or deleted in NetSuite. +- The tag applied in the Workspace was manually created and not imported from NetSuite. +- NetSuite validation fails because it cannot verify the selected record. + +If NetSuite cannot validate the customer or project, the export will fail. + +This is a billable coding issue, not a role permission or subsidiary mismatch issue. + +--- + +## How to Fix the NS0046 Export Error + +Follow the steps below to correct the billable coding. + +--- + +## Confirm All Billable Expenses Have a Customer or Project + +1. Open the report. +2. Review each expense marked as **Billable**. +3. Confirm a valid **Customer** or **Project** tag is applied to every billable expense. +4. Click **Save** if updates are made. + +Every billable expense must have a valid NetSuite customer or project. + +--- + +## Confirm the Customer or Project Is Active in NetSuite + +1. Log in to NetSuite. +2. Locate the customer or project used on the report. +3. Confirm the record: + - Exists. + - Is active. + - Is available for use. +4. Reactivate the record if needed, or select a valid one in the Workspace. + +--- + +## Remove Manually Created Tags if Necessary + +If the customer or project tag was manually created in the Workspace and not imported from NetSuite: + +1. Remove the manually created tag. +2. Ensure only NetSuite-imported customers or projects are used. +3. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +After syncing, open the report and retry exporting to NetSuite. + +--- + +# FAQ + +## Does the NS0046 Export Error Affect Non-Billable Expenses? + +No. This error applies only to expenses marked as billable. + +## Do I Need NetSuite Admin Access to Fix the NS0046 Export Error? + +You may need sufficient NetSuite permissions to confirm whether the customer or project is active. + +## Can I Fix This by Changing the Project or Customer on the Expense? + +Yes. Selecting a valid, active NetSuite customer or project will resolve the error if the previous one was invalid. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0055-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0055-Export-Error.md new file mode 100644 index 0000000000000..39860e17812c0 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0055-Export-Error.md @@ -0,0 +1,90 @@ +--- +title: NS0055 Export Error in NetSuite Integration +description: Learn what the NS0055 export error means and how to add the correct currency to the vendor’s Financial tab in NetSuite before exporting. +keywords: NS0055, NetSuite vendor currency error, vendor does not have access to currency NetSuite, add currency to vendor Financial tab NetSuite, transaction currency error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0055 export error caused by vendor currency access issues in NetSuite. Does not cover subsidiary or employee record mismatches. +--- + +# NS0055 Export Error in NetSuite Integration + +If you see the error: + +NS0055 Export Error: The vendor doesn’t have access to the transaction currency. Add the currency to the vendor’s 'Financial tab' in NetSuite. + +This means the vendor record in NetSuite does not support the currency used on the report. + +NetSuite requires vendors to have access to the transaction currency before the export can succeed. + +--- + +## Why the NS0055 Export Error Happens in NetSuite + +The NS0055 error typically occurs when: + +- The report currency differs from the vendor’s allowed currencies in NetSuite. +- The vendor record does not include that currency on the **Financial** tab. +- Multi-currency is enabled, but the vendor is restricted to a specific currency. + +If the vendor does not have the transaction currency assigned, NetSuite blocks the export. + +This is a vendor currency configuration issue, not a subsidiary or employee record mismatch. + +--- + +## How to Fix the NS0055 Export Error + +Follow the steps below to add the correct currency to the vendor record. + +### Add the Currency to the Vendor Record in NetSuite + +1. Log in to NetSuite as an administrator. +2. Locate the vendor record associated with the report creator or submitter. +3. Open the vendor profile. +4. Navigate to the **Financial** tab. +5. Add the corresponding transaction currency. +6. Click **Save**. + +Confirm the vendor now has access to the report currency. + +### Sync the Workspace in Expensify + +After updating the vendor record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the vendor has access to the correct currency, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0055 Export Error Affect Only Certain Currencies? + +Yes. The error appears only when the report currency is not enabled on the vendor record in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0055 Export Error? + +Yes. Updating vendor currency settings requires appropriate NetSuite permissions. + +## Do I Need to Reconnect the Integration? + +No. Adding the currency to the vendor and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0056-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0056-Export-Error.md new file mode 100644 index 0000000000000..0a79d8edcef67 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0056-Export-Error.md @@ -0,0 +1,185 @@ +--- +title: NS0056 Export Error in NetSuite Integration +description: Learn what the NS0056 export error means and how to update NetSuite form settings and role permissions to resolve element-specific permission errors. +keywords: NS0056, NetSuite element permission error, journal entry form error NetSuite, vendor bill form error NetSuite, approvalstatus permission NetSuite, entityid error NetSuite, expense foreign amount error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0056 export error caused by form field visibility and role permissions in NetSuite. Does not cover token authentication or bundle installation issues. +--- + +# NS0056 Export Error in NetSuite Integration + +If you see the error: + +NS0056 Export Error: You do not have permissions to set a value for element [X]. + +This means NetSuite is blocking the integration from setting a required field during export. + +Common elements include: + +- `class` +- `location` +- `memo` +- `amount` +- `isnonreimbursable` +- `department` +- `exchangerate` +- `entityID` +- `approvalstatus` +- `line.entity` +- `expense.foreignamount` +- `tranid` +- `nexus` + +This error is usually caused by form field visibility settings or missing role permissions in NetSuite. + +--- + +## Why the NS0056 Export Error Happens in NetSuite + +The NS0056 error typically occurs when: + +- A required field is hidden on the preferred NetSuite transaction form. +- The **Expensify Integration role** does not have permission to set a specific field. +- Approval routing or workflow settings restrict field updates. +- Auto-generated numbering prevents the integration from setting transaction IDs. + +NetSuite blocks the export when the integration attempts to set a value for a restricted field. + +--- + +## How to Fix the NS0056 Export Error + +Follow the steps below to confirm form settings and role permissions. + +--- + +## Confirm the Preferred Export Form Settings + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Click **Edit** next to the form marked as **Preferred** for your export type. + +Then: + +- For **Journal entries**, go to **Screen Fields > Lines**. +- For **Vendor bills**, go to **Screen Fields > Main**. + +4. Confirm the affected field is marked as **Show**. +5. Click **Save**. + +--- + +## Sync the Workspace + +After updating the form: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report after the sync completes. + +--- + +# Additional Fixes by Element + +## Element: `line.entity` + +1. Edit your **Journal Entry** form. +2. Under **Screen Fields > Main**, ensure the **Name** field is marked as **Show**. +3. Click **Save**. + +--- + +## Element: `entityid` + +1. Go to **Customization > Forms > Entry Forms**. +2. Edit the preferred **Vendor Bill** form. +3. Set **Vendor ID** to: + - Show + - Quick Add + - Mandatory + +Then search for **Auto-Generated Numbers** in NetSuite and: + +- Disable auto-generation, or +- Enable **Allow Override**. + +--- + +## Element: `approvalstatus` + +1. Go to **Customization > Forms > Entry Forms**. +2. Edit the preferred export form. +3. Confirm **Approval Status** is marked as **Show**. + +Optional: + +- Go to **Setup > Accounting > Accounting Preferences > Approval Routing** and review approval routing. +- Go to **Setup > Users/Roles > Manage Roles**. +- Select **Expensify Integration**. +- Under **Permissions > Transactions**, add **Approve Vendor Payments** with **Full** access. +- Review **Customization > Workflows** if the issue persists. + +--- + +## Element: `expense.foreignamount` + +1. Open each expense category in NetSuite. +2. Disable **Rate is Required**. +3. Click **Save**. + +Then return to the Workspace and click **Sync Now**, and retry the export. + +--- + +## Element: `tranid` + +1. Search for **Auto-Generated Numbers** in NetSuite. +2. Enable **Allow Override** for Invoices. +3. Click **Save**. + +--- + +## Element: `memo` + +This error may appear if the report has a negative reimbursable total. + +Only reports with a positive reimbursable amount can be exported. + +--- + +## Element: `nexus` + +1. Go to **Setup > Users/Roles > Manage Roles**. +2. Select **Expensify Integration**. +3. Click **Edit**. +4. Under **Permissions > Lists**, set **Tax Details Tab** to **Full**. +5. Click **Save**. + +--- + +# FAQ + +## Does the NS0056 Export Error Apply to All Export Types? + +It can affect journal entries, vendor bills, invoices, and expense reports depending on which field NetSuite is blocking. + +## Do I Need NetSuite Admin Access to Fix the NS0056 Export Error? + +Yes. Updating transaction forms and role permissions requires NetSuite administrator access. + +## Do I Need to Reconnect the Integration? + +No. Correcting the form visibility or role permissions and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0059-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0059-Export-Error.md new file mode 100644 index 0000000000000..900e4b7e91857 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0059-Export-Error.md @@ -0,0 +1,96 @@ +--- +title: NS0059 Export Error in NetSuite Integration +description: Learn what the NS0059 export error means and how to set a default corporate card account at the subsidiary level in NetSuite before exporting. +keywords: NS0059, NetSuite corporate card account error, default corporate card account NetSuite, subsidiary corporate card setting NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0059 export error caused by missing default corporate card account settings at the subsidiary level. Does not cover company card mapping in Domain settings. +--- + +# NS0059 Export Error in NetSuite Integration + +If you see the error: + +NS0059 Export Error: No credit card account is set for corporate card expenses. Please select a default corporate card account in NetSuite under 'Subsidiaries'. + +This means a default corporate card account has not been configured in NetSuite. + +NetSuite requires a default corporate card account at the subsidiary level to export corporate card expenses. + +--- + +## Why the NS0059 Export Error Happens in NetSuite + +The NS0059 error typically occurs when: + +- Corporate card expenses are being exported. +- No **Default Account for Corporate Card Expenses** is set for the subsidiary in NetSuite. +- NetSuite cannot determine which credit card account to use for the transaction. + +Without this setting, NetSuite blocks the export. + +This is a subsidiary-level configuration issue in NetSuite, not a company card mapping issue in Domain settings. + +--- + +## How to Fix the NS0059 Export Error + +Follow the steps below to configure the default corporate card account. + +--- + +## Set the Default Corporate Card Account in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Relationships > Subsidiaries** (or search for **Subsidiaries**). +3. Select the relevant subsidiary used for the export. +4. Locate the field labeled **Default Account for Corporate Card Expenses**. +5. Select the appropriate credit card account. +6. Click **Save**. + +Confirm the correct credit card account is selected before proceeding. + +--- + +## Sync the Workspace in Expensify + +After updating the subsidiary settings: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If a default corporate card account is configured at the subsidiary level, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0059 Export Error Affect Only Corporate Card Expenses? + +Yes. This error applies specifically to exports that include corporate card transactions. + +## Do I Need NetSuite Admin Access to Fix the NS0059 Export Error? + +Yes. Updating subsidiary account settings requires appropriate NetSuite administrator permissions. + +## Do I Need to Update Company Card Mapping in Domain Settings? + +No. This error is caused by a missing default corporate card account in NetSuite, not by company card mapping in Domain settings. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0061-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0061-Export-Error.md new file mode 100644 index 0000000000000..b7f1970d57a8a --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0061-Export-Error.md @@ -0,0 +1,108 @@ +--- +title: NS0061 Export Error in NetSuite Integration +description: Learn what the NS0061 export error means and how to enable tax import and apply tax codes when a NetSuite subsidiary requires tax tracking. +keywords: NS0061, NetSuite tax tracking required, enable tax import Workspace, apply tax codes expense report NetSuite, subsidiary requires tax NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0061 export error caused by required tax tracking in NetSuite subsidiaries. Does not cover tax group mapping errors. +--- + +# NS0061 Export Error in NetSuite Integration + +If you see the error: + +NS0061 Export Error: NetSuite subsidiary requires tax tracking. Please enable tax import within Expensify and apply tax codes to expenses. + +This means the subsidiary in NetSuite requires tax tracking, but tax is not enabled or applied in your Workspace. + +NetSuite will block exports if tax is required but not included on the transaction. + +--- + +## Why the NS0061 Export Error Happens in NetSuite + +The NS0061 error typically occurs when: + +- You are exporting to a NetSuite subsidiary that requires tax tracking. +- Tax is not enabled in **Settings > Workspaces > Accounting > Coding**. +- Expenses do not have tax codes applied. +- NetSuite validation fails because required tax data is missing. + +If tax is required by the subsidiary but not applied, NetSuite will reject the export. + +This is a required tax tracking issue in NetSuite, not a tax group mapping error. + +--- + +## How to Fix the NS0061 Export Error + +Follow the steps below to enable tax and apply tax codes. + +--- + +## Enable Tax Import in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Coding**. +5. Enable **Tax** to import from NetSuite. +6. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Coding**. +5. Enable **Tax**. +6. Tap **Save**. + +--- + +## Apply Tax Codes to All Expenses + +1. Open the report. +2. Review each expense. +3. Apply the appropriate **Tax rate** to every expense. +4. Click **Save**. + +Every expense must have a valid NetSuite tax code applied if the subsidiary requires tax tracking. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +After syncing, retry exporting the report. + +--- + +# FAQ + +## Does the NS0061 Export Error Affect All Reports? + +It affects reports exported to subsidiaries that require tax tracking when tax has not been enabled or applied. + +## Do I Need NetSuite Admin Access to Fix the NS0061 Export Error? + +No. You only need Workspace Admin access to enable tax import and apply tax codes. + +## Do I Need to Reconnect the Integration? + +No. Enabling tax and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0068-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0068-Export-Error.md new file mode 100644 index 0000000000000..ae03aac56e273 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0068-Export-Error.md @@ -0,0 +1,111 @@ +--- +title: NS0068 Export Error in NetSuite Integration +description: Learn what the NS0068 export error means and how to make the Created From field visible on NetSuite transaction forms before exporting. +keywords: NS0068, NetSuite Created From field error, permission to set Created From NetSuite, transaction form visibility NetSuite, Expensify Card journal entry error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0068 export error caused by the Created From field not being visible on NetSuite transaction forms. Does not cover role permission or token configuration issues. +--- + +# NS0068 Export Error in NetSuite Integration + +If you see the error: + +NS0068 Export Error: You do not have permission to set value for element — 'Created From'. + +This means the **Created From** field is not visible on the preferred export form in NetSuite. + +The Workspace must be able to access and populate the Created From field during export. + +--- + +## Why the NS0068 Export Error Happens in NetSuite + +The NS0068 error typically occurs when: + +- The **Created From** field is hidden on the NetSuite transaction form used for exports. +- The preferred transaction form does not allow the field to be displayed. +- NetSuite blocks the integration from setting the field value because it is not visible. + +If the field is hidden, NetSuite prevents the integration from setting its value and the export fails. + +This is a transaction form visibility issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0068 Export Error + +Follow the steps below to make the Created From field visible. + +--- + +## Make the Created From Field Visible in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Locate the transaction form marked as **Preferred** for your export type. +4. Click **Edit**. +5. Locate the **Created From** field. +6. Ensure the field is marked as **Show**. +7. Click **Save**. + +Confirm the field is visible on the preferred form before proceeding. + +--- + +## Sync the Workspace in Expensify + +After updating the form: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the Created From field is visible on the preferred form, the export should complete successfully. + +--- + +# Additional Steps for Expensify Card Journal Entries + +If you are exporting **Expensify Card transactions as journal entries**, confirm the Created From field is visible on the journal entry form. + +1. Go to **Customization > Forms > Transaction Forms**. +2. Click **Edit** next to the preferred journal entry form. +3. Go to **Screen Fields > Main**. +4. Confirm **Created From** is marked as **Show**. +5. Click **Save**. + +Then return to the Workspace and select **Sync Now** before retrying the export. + +--- + +# FAQ + +## Does the NS0068 Export Error Affect All Export Types? + +It affects exports using a transaction form where the Created From field is hidden. + +## Do I Need NetSuite Admin Access to Fix the NS0068 Export Error? + +Yes. Updating transaction form field visibility requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Making the Created From field visible and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0077-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0077-Export-Error.md new file mode 100644 index 0000000000000..ff2bea96f1311 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0077-Export-Error.md @@ -0,0 +1,94 @@ +--- +title: NS0077 Export Error in NetSuite Integration +description: Learn what the NS0077 export error means and how to sync your Workspace or contact Concierge to resolve employee creation permission issues in NetSuite. +keywords: NS0077, NetSuite could not create employee, employee record permission error NetSuite, Expensify NetSuite export error, sync Workspace NetSuite, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0077 export error caused by employee record creation permission issues or outdated sync status. Does not cover detailed role permission configuration steps. +--- + +# NS0077 Export Error in NetSuite Integration + +If you see the error: + +NS0077 Export Error: Could not create 'employee.' Your current role does not have permission to access this record in NetSuite. + +This means the integration attempted to create an employee record in NetSuite but was blocked by permissions. + +This typically happens when the connected NetSuite role does not have sufficient access or the Workspace has not recently synced. + +--- + +## Why the NS0077 Export Error Happens in NetSuite + +The NS0077 error typically occurs when: + +- An employee record needs to be created in NetSuite during export. +- The integration role does not have permission to create or access **Employee** records. +- The Workspace has not synced recently and employee data is outdated. +- The employee does not yet exist in NetSuite. + +If NetSuite blocks the employee record creation, the export will fail. + +This is an employee creation or role permission issue, not a token authentication issue. + +--- + +## How to Fix the NS0077 Export Error + +Follow the steps below to confirm sync status and retry the export. + +--- + +## Confirm the Workspace Has Synced Recently + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Confirm the last sync occurred within the past 24 hours. + +If it has not synced recently: + +1. Click the three-dot menu next to the NetSuite connection. +2. Click **Sync Now**. +3. Retry exporting the report. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. +6. Retry exporting the report. + +--- + +## Contact Concierge if the Error Persists + +If the Workspace has synced recently and the error continues: + +1. Do not delete the report. +2. Reach out to **Concierge**. +3. Include: + - The report ID. + - Confirmation that you’re seeing **NS0077**. + - The approximate time the export was attempted. + +Additional role permissions or configuration updates in NetSuite may be required. + +--- + +# FAQ + +## Does the NS0077 Export Error Affect All New Employees? + +It may affect exports for employees who do not already exist in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0077 Export Error? + +You may need NetSuite administrator assistance if additional role permissions are required. + +## Will Syncing Always Fix This Error? + +Syncing can resolve the issue if it is caused by outdated employee data. If the problem is related to role permissions, NetSuite configuration changes may be required. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0079-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0079-Export-Error.md new file mode 100644 index 0000000000000..e43d3fef41ee7 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0079-Export-Error.md @@ -0,0 +1,99 @@ +--- +title: NS0079 Export Error in NetSuite Integration +description: Learn what the NS0079 export error means and how to allow posting outside the period in NetSuite and enable Export to Next Open Period in the Workspace. +keywords: NS0079, NetSuite posting period error, transaction date outside posting period NetSuite, allow transaction date outside posting period NetSuite, Export to Next Open Period Workspace, closed accounting period NetSuite, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0079 export error caused by closed posting periods and export timing configuration. Does not cover approval workflow or role permission issues. +--- + +# NS0079 Export Error in NetSuite Integration + +If you see the error: + +NS0079 Export Error: The transaction date is outside the posting period. + +This means the expense report is attempting to export to a closed accounting period in NetSuite. + +NetSuite blocks transactions dated within closed posting periods. + +--- + +## Why the NS0079 Export Error Happens in NetSuite + +The NS0079 error typically occurs when: + +- The report or expense transaction date falls within a **closed posting period** in NetSuite. +- NetSuite is configured to prevent posting outside the active period. +- The transaction date cannot be posted to an open period. + +If the transaction date falls in a closed period, the export fails. + +This is a posting period configuration issue, not an approval workflow or role permission issue. + +--- + +## How to Fix the NS0079 Export Error + +Follow the steps below to allow the transaction to export to the next open period. + +--- + +## Update Accounting Preferences in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Accounting > Accounting Preferences**. +3. Locate **Allow Transaction Date Outside of the Posting Period**. +4. Set the preference to **Warn**. +5. Click **Save**. + +Setting this to **Warn** allows transactions to proceed with a warning instead of being blocked. + +--- + +## Enable Export to Next Open Period in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Enable **Export to Next Open Period**. +6. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Enable **Export to Next Open Period**. +6. Tap **Save**. + +--- + +## Sync the Workspace and Retry the Export + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. +6. Retry exporting the report. + +The report should now export to the next available open posting period. + +--- + +# FAQ + +## Does the NS0079 Export Error Affect All Reports? + +It affects reports dated within closed posting periods in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0079 Export Error? + +Yes. Updating accounting preferences in NetSuite requires administrator permissions. + +## Can I Change the Report Date Instead? + +Yes. If appropriate, you can update the report or expense date to fall within an open posting period instead of changing NetSuite preferences. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0085-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0085-Export-Error.md new file mode 100644 index 0000000000000..95e5b9f460703 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0085-Export-Error.md @@ -0,0 +1,97 @@ +--- +title: NS0085 Export Error in NetSuite Integration +description: Learn what the NS0085 export error means and how to make the Exchange Rate field visible in NetSuite to allow successful exports. +keywords: NS0085, NetSuite exchange rate permission error, Exchange Rate field not visible NetSuite, transaction form Exchange Rate NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0085 export error caused by the Exchange Rate field not being visible on NetSuite transaction forms. Does not cover currency enablement or subsidiary configuration issues. +--- + +# NS0085 Export Error in NetSuite Integration + +If you see the error: + +NS0085 Export Error: Expenses do not have appropriate permissions for setting an exchange rate in NetSuite. + +This means the **Exchange Rate** field is not visible on the preferred export form in NetSuite. + +The Workspace must be able to access and populate the Exchange Rate field during export. + +--- + +## Why the NS0085 Export Error Happens in NetSuite + +The NS0085 error typically occurs when: + +- The **Exchange Rate** field is hidden on the NetSuite transaction form used for exports. +- The preferred transaction form does not allow the field to be displayed. +- NetSuite blocks the integration from setting the exchange rate value. + +If the field is hidden, NetSuite prevents the integration from setting its value and the export fails. + +This is a transaction form visibility issue, not a currency enablement or subsidiary configuration issue. + +--- + +## How to Fix the NS0085 Export Error + +Follow the steps below to make the Exchange Rate field visible. + +--- + +## Make the Exchange Rate Field Visible in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Locate the transaction form marked as **Preferred** for your export type. +4. Click **Edit**. +5. Locate the **Exchange Rate** field. +6. Ensure the field is marked as **Show**. +7. Click **Save**. + +Confirm the Exchange Rate field is visible on the preferred form before proceeding. + +--- + +## Sync the Workspace in Expensify + +After updating the form: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the Exchange Rate field is visible on the preferred form, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0085 Export Error Affect Multi-Currency Reports Only? + +Yes. This error typically appears when exporting transactions that require an exchange rate. + +## Do I Need NetSuite Admin Access to Fix the NS0085 Export Error? + +Yes. Updating transaction form field visibility in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Making the Exchange Rate field visible and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0091-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0091-Export-Error.md new file mode 100644 index 0000000000000..00fbc3f86d324 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0091-Export-Error.md @@ -0,0 +1,87 @@ +--- +title: NS0091 Export Error in NetSuite Integration +description: Learn what the NS0091 export error means and how to enable tax import in the Workspace to restore NetSuite exports. +keywords: NS0091, default Tax ID not found, enable tax import Workspace, NetSuite Tax ID error, tax configuration Workspace, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0091 export error caused by missing default Tax ID configuration in the Workspace. Does not cover tax group mapping errors in NetSuite. +--- + +# NS0091 Export Error in NetSuite Integration + +If you see the error: + +NS0091 Export Error: Could not find default Tax ID in Expensify. Please enable tax for import within Expensify configurations. + +This means tax import is not enabled in your Workspace. + +Without tax enabled, the Workspace cannot reference a default **Tax ID** during export to NetSuite. + +--- + +## Why the NS0091 Export Error Happens in NetSuite + +The NS0091 error typically occurs when: + +- Tax import is disabled in **Settings > Workspaces > Accounting > Coding**. +- The export requires a default **Tax ID**. +- NetSuite expects tax data but no tax configuration exists in the Workspace. + +If tax is not enabled, the Workspace cannot apply or reference tax codes during export. + +This is a tax configuration issue in the Workspace, not a tax group mapping issue in NetSuite. + +--- + +## How to Fix the NS0091 Export Error + +Follow the steps below to enable tax import and retry the export. + +--- + +## Enable Tax Import in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Coding**. +5. Enable **Tax** to import from NetSuite. +6. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Coding**. +5. Enable **Tax**. +6. Tap **Save**. + +--- + +## Sync the Workspace and Retry the Export + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. +6. Retry exporting the report. + +If tax import is enabled, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0091 Export Error Affect All Reports? + +It affects reports that require a default Tax ID when tax import is not enabled. + +## Do I Need NetSuite Admin Access to Fix the NS0091 Export Error? + +No. You only need Workspace Admin access to enable tax import. + +## Do I Need to Reconnect the Integration? + +No. Enabling tax and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0116-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0116-Export-Error.md new file mode 100644 index 0000000000000..639751ab7a823 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0116-Export-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0116 Export Error in NetSuite Integration +description: Learn what the NS0116 export error means and how to use Internal IDs in NetSuite to correct invalid account mappings by subsidiary. +keywords: NS0116, NetSuite account not valid for subsidiary, Show Internal IDs NetSuite, invalid account subsidiary error, update export account Workspace, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0116 export error caused by invalid account mappings by subsidiary. Does not cover role permission or token configuration issues. +--- + +# NS0116 Export Error in NetSuite Integration + +If you see the error: + +NS0116 Export Error: The account [XXX] isn’t valid for subsidiary/entity [YYY]. In NetSuite, go to Home > Preferences, enable 'Show Internal IDs', and update the account in Expensify. + +This means the selected category or export account is not available for the specified subsidiary in NetSuite. + +NetSuite accounts must be associated with the correct subsidiary in order for exports to succeed. + +--- + +## Why the NS0116 Export Error Happens in NetSuite + +The NS0116 error typically occurs when: + +- The category or export account selected in the Workspace is not enabled for the subsidiary in NetSuite. +- The account exists but is restricted to a different subsidiary. +- The internal ID associated with the account does not match a valid subsidiary mapping. +- The account is inactive. + +If the account is not enabled for the selected subsidiary, NetSuite blocks the export. + +This is an account-to-subsidiary mapping issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0116 Export Error + +Follow the steps below to confirm the correct account mapping. + +--- + +## Enable Show Internal IDs in NetSuite + +1. Log in to NetSuite as an administrator. +2. Hover over the **Home** icon. +3. Select **Set Preferences**. +4. Enable **Show Internal IDs**. +5. Click **Save**. + +This allows you to view internal IDs for accounts and categories. + +--- + +## Verify the Account in NetSuite + +1. Locate the account or category referenced in the error using the internal ID. +2. Confirm the account: + - Exists. + - Is active. + - Is enabled for the correct subsidiary. +3. Update the subsidiary association if needed. +4. Click **Save**. + +If the account is not valid for the subsidiary, either: + +- Update the account to include the subsidiary, or +- Select a different valid account in the Workspace. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +# FAQ + +## Does the NS0116 Export Error Affect Only One Subsidiary? + +Yes. The error applies to the specific subsidiary where the account is not valid. + +## Do I Need NetSuite Admin Access to Fix the NS0116 Export Error? + +Yes. Updating account and subsidiary associations in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the account mapping and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0144-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0144-Export-Error.md new file mode 100644 index 0000000000000..2eb977272df58 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0144-Export-Error.md @@ -0,0 +1,90 @@ +--- +title: NS0144 Export Error in NetSuite Integration +description: Learn what the NS0144 export error means and how to resolve internal server errors when exporting to NetSuite. +keywords: NS0144, NetSuite internal server error, export to NetSuite failed, NetSuite connection issue, Expensify NetSuite integration error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0144 export error caused by internal server or connection issues between Expensify and NetSuite. Does not cover specific configuration or permission troubleshooting steps. +--- + +# NS0144 Export Error in NetSuite Integration + +If you see the error: + +NS0144 Export Error: Internal server error when attempting to export to NetSuite. + +This means NetSuite returned an internal server error during the export process. + +The error originates from NetSuite and indicates a connection or system issue at the time of export. + +--- + +## Why the NS0144 Export Error Happens in NetSuite + +The NS0144 error typically occurs when: + +- NetSuite experiences a temporary outage or performance issue. +- There is a temporary interruption in communication between the Workspace and NetSuite. +- NetSuite encounters an internal processing error. +- The integration request times out due to system load. + +Because this error is generated by NetSuite, it cannot be resolved directly from the report. + +This is a system or connection issue, not a configuration or permission issue within the Workspace. + +--- + +## How to Fix the NS0144 Export Error + +Follow the steps below to resolve the issue. + +### Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the issue was temporary, the export may complete successfully on retry. + +### Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +### Contact Concierge if the Error Persists + +If the error continues after retrying: + +- Reach out to **Concierge**. +- Include the report ID and confirm you are seeing **NS0144**. +- Share the approximate time the export was attempted. + +Concierge can review the integration logs and confirm whether the issue is related to a NetSuite outage or a deeper connection problem. + +--- + +# FAQ + +## Should I Retry the Export Before Contacting Concierge? + +Yes. If the issue was temporary, retrying the export may resolve it. + +## Does the NS0144 Export Error Affect All Exports? + +It can. If the issue is related to a NetSuite system error or connection disruption, multiple exports may fail until the issue is resolved. + +## Do I Need to Reconnect the Integration? + +No. This error is typically caused by a temporary server or connection issue, not a misconfiguration. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0159-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0159-Export-Error.md new file mode 100644 index 0000000000000..44a0782bb55c9 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0159-Export-Error.md @@ -0,0 +1,98 @@ +--- +title: NS0159 Export Error in NetSuite Integration +description: Learn what the NS0159 export error means and how to grant Full access to the Pay Bills permission in the Expensify Integration role in NetSuite. +keywords: NS0159, NetSuite Pay Bills permission error, insufficient Bills permissions NetSuite, Expensify Integration role Transactions permission, Pay Bills Full access NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0159 export error caused by insufficient Pay Bills transaction permissions in NetSuite. Does not cover vendor record or approval workflow configuration issues. +--- + +# NS0159 Export Error in NetSuite Integration + +If you see the error: + +NS0159 Export Error: Your NetSuite role doesn’t have sufficient Bills permissions. Update the Expensify Integration role to grant 'Pay Bills' full access. + +This means the integration role does not have the required **Pay Bills** transaction permission in NetSuite. + +Without **Full** access to Pay Bills, NetSuite will block exports related to bill payments. + +--- + +## Why the NS0159 Export Error Happens in NetSuite + +The NS0159 error typically occurs when: + +- The **Expensify Integration role** does not have **Pay Bills** permission set to **Full**. +- The permission is set to **View**, **Create**, or not enabled at all. +- NetSuite blocks the export because the role cannot create or update bill payments. + +If the Pay Bills permission is restricted, vendor bill-related exports may fail. + +This is a transaction permission issue in NetSuite, not a vendor record or approval workflow configuration issue. + +--- + +## How to Fix the NS0159 Export Error + +Follow the steps below to update the role permissions in NetSuite. + +--- + +## Update the Pay Bills Permission in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to **Permissions > Transactions**. +6. Locate **Pay Bills**. +7. Set the permission level to **Full**. +8. Click **Save**. + +Confirm the permission change is saved before proceeding. + +--- + +## Sync the Workspace in Expensify + +After updating the role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Retry the Export + +1. Open the report. +2. Retry exporting to NetSuite. + +If the **Pay Bills** permission is set to **Full**, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0159 Export Error Affect Vendor Bill Exports? + +Yes. If the **Pay Bills** permission is restricted, vendor bill-related exports may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0159 Export Error? + +Yes. Updating role permissions in NetSuite requires administrator-level access. + +## Do I Need to Reconnect the Integration? + +No. Updating the role permission and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0176-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0176-Export-Error.md new file mode 100644 index 0000000000000..d4d726b0879d8 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0176-Export-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0176 Export Error in NetSuite Integration +description: Learn what the NS0176 export error means and how to resolve cash advance or prepaid expense settings on employee records in NetSuite. +keywords: NS0176, NetSuite advance to apply error, cash advance NetSuite employee record, prepaid expense NetSuite employee, Advance to Apply amount NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0176 export error caused by cash advances or prepaid expense settings on employee records in NetSuite. Does not cover role permission or subsidiary configuration issues. +--- + +# NS0176 Export Error in NetSuite Integration + +If you see the error: + +NS0176 Export Error: Issue with ‘Advance to Apply’ amount. Please check the employee record for any cash advances or prepaid expenses in NetSuite. + +This means NetSuite detected an issue related to cash advances or prepaid expenses on the employee record associated with the report. + +These settings can interfere with report exports from the Workspace. + +--- + +## Why the NS0176 Export Error Happens in NetSuite + +The NS0176 error typically occurs when: + +- The employee’s record in NetSuite has **cash advances** enabled. +- The employee has an outstanding **Advance to Apply** balance. +- Prepaid expense functionality is active on the employee record. +- NetSuite attempts to automatically apply an advance during export. + +If an advance balance exists or the feature is enabled, NetSuite may block the transaction. + +This is an employee record configuration issue, not a role permission or subsidiary configuration issue. + +--- + +## How to Fix the NS0176 Export Error + +Follow the steps below to review and correct the employee record in NetSuite. + +--- + +## Review the Employee Record in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Locate the employee associated with the report creator or submitter. +4. Open the employee record. +5. Review for: + - Any **cash advance balances**. + - Any **Advance to Apply** amounts. + - Prepaid expense settings. + +--- + +## Disable or Clear Cash Advance Settings + +If cash advances or prepaid expenses are enabled or listed: + +1. Clear any outstanding **Advance to Apply** balance if appropriate. +2. Disable the cash advance or prepaid expense feature if it is not needed. +3. Click **Save**. + +Only clear balances if it aligns with your accounting policies. + +--- + +## Sync the Workspace and Retry the Export + +After updating the employee record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the employee’s advance settings are corrected, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0176 Export Error Affect Only Specific Employees? + +Yes. This error is tied to the employee record associated with the report being exported. + +## Do I Need NetSuite Admin Access to Fix the NS0176 Export Error? + +Yes. Updating employee records and disabling cash advance features requires appropriate NetSuite permissions. + +## Does This Error Affect All Reports? + +No. It only affects reports tied to employee records with active or outstanding cash advance settings. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0295-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0295-Export-Error.md new file mode 100644 index 0000000000000..a361f989aeacc --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0295-Export-Error.md @@ -0,0 +1,115 @@ +--- +title: NS0295 Export Error in NetSuite Integration +description: Learn what the NS0295 export error means and how to match employee or vendor email addresses between NetSuite and the Workspace. +keywords: NS0295, NetSuite employee not found by email, NetSuite vendor not found by email, email mismatch NetSuite Workspace, employee record email error NetSuite, vendor record email error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0295 export error caused by missing or mismatched employee or vendor email records. Does not cover subsidiary mismatches or role permission issues. +--- + +# NS0295 Export Error in NetSuite Integration + +If you see the error: + +NS0295 Export Error: NetSuite couldn’t find an employee or vendor record with the email [XXXX]. + +This means NetSuite cannot locate a matching employee or vendor record using the email address associated with the report creator or submitter. + +The email address must match exactly between NetSuite and the Workspace. + +--- + +## Why the NS0295 Export Error Happens in NetSuite + +The NS0295 error typically occurs when: + +- The report creator or submitter does not have an associated **Employee** or **Vendor** record in NetSuite. +- The email address on the NetSuite record does not exactly match the email used in the Workspace. +- There are differences in spelling, capitalization, or formatting. +- The email field is blank on the NetSuite record. + +If NetSuite cannot find a matching record by email, the export will fail. + +This is an email matching issue, not a subsidiary mismatch or role permission issue. + +--- + +## How to Fix the NS0295 Export Error for Vendor Bills + +If you are exporting **Vendor Bills**, update the vendor record in NetSuite. + +### Confirm the Vendor Email in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Vendors**. +3. Locate and edit the vendor record associated with the report creator or submitter. +4. Confirm the **Email** field exactly matches the email used in the Workspace. +5. Click **Save**. + +### Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +## How to Fix the NS0295 Export Error for Journal Entries or Expense Reports + +If you are exporting **Journal Entries** or **Expense Reports**, update the employee record in NetSuite. + +### Confirm the Employee Email in NetSuite + +1. Log in to NetSuite. +2. Go to **Lists > Employees**. +3. Locate and edit the employee record associated with the report creator or submitter. +4. Confirm the **Email** field exactly matches the email used in the Workspace. +5. Click **Save**. + +### Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +# FAQ + +## Does the NS0295 Export Error Affect Only One User? + +Yes. This error is specific to the employee or vendor record associated with the report. + +## Do I Need NetSuite Admin Access to Fix the NS0295 Export Error? + +Yes. Editing employee or vendor records in NetSuite requires appropriate permissions. + +## Does the Email Have to Match Exactly? + +Yes. The email must match exactly, including spelling and formatting, for NetSuite to recognize the record. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0320-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0320-Export-Error.md new file mode 100644 index 0000000000000..5a57fa9922296 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0320-Export-Error.md @@ -0,0 +1,124 @@ +--- +title: NS0320 Export Error in NetSuite Integration +description: Learn what the NS0320 export error means and how to adjust export date settings or enable Export to Next Open Period before retrying your NetSuite export. +keywords: NS0320, NetSuite closed accounting period, transaction falls in closed period NetSuite, Export to Next Open Period Workspace, export date selection NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0320 export error caused by closed accounting periods and export date configuration. Does not cover role permission or approval workflow issues. +--- + +# NS0320 Export Error in NetSuite Integration + +If you see the error: + +NS0320 Export Error: The transaction falls in a closed accounting period. Please change date selection for export or enable 'Export to Next Open Period' in the Expensify configurations. + +This means the export date falls within a closed accounting period in NetSuite. + +NetSuite blocks transactions that are dated within closed reporting periods. + +--- + +## Why the NS0320 Export Error Happens in NetSuite + +The NS0320 error typically occurs when: + +- The export date selected in the Workspace falls within a **closed accounting period** in NetSuite. +- NetSuite is configured to prevent posting in closed periods. +- The report date, submitted date, or expense date maps to a locked period. + +The export date depends on the configuration selected in the Workspace. + +This is a closed accounting period issue, not a role permission or approval workflow issue. + +--- + +## How to Fix the NS0320 Export Error + +You can resolve this by adjusting the export date or enabling export to the next open period. + +--- + +## Confirm the Selected Export Date in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Export**. +5. Review the selected export date option: + - **Submitted Date** + - **Exported Date** + - **Date of Last Expense** +6. Confirm the selected option results in a date that falls within an **open accounting period** in NetSuite. +7. Click **Save** if changes are made. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Export**. +5. Review and update the export date setting if needed. +6. Tap **Save**. + +After saving, retry exporting the report. + +--- + +## Enable Export to Next Open Period in the Workspace + +If adjusting the export date is not preferred: + +On web: + +1. Go to **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Enable **Export to Next Open Period**. +6. Click **Save**. + +On mobile: + +1. Tap **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Enable **Export to Next Open Period**. +6. Tap **Save**. + +Then: + +1. Go to **Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. +4. Retry exporting the report. + +The report will export to the next available open accounting period. + +--- + +## Alternative Option: Reopen the Accounting Period in NetSuite + +If appropriate based on your accounting policies: + +1. Log in to NetSuite as an administrator. +2. Reopen the closed accounting period. +3. Save the changes. +4. Retry exporting the report. + +--- + +# FAQ + +## Does the NS0320 Export Error Affect All Reports? + +It affects reports whose export date falls within a closed accounting period in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0320 Export Error? + +Only if you choose to reopen a closed accounting period in NetSuite. Otherwise, Workspace Admin access is sufficient to adjust export settings. + +## Is Export to Next Open Period the Recommended Fix? + +In most cases, enabling **Export to Next Open Period** is the simplest and safest solution. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0336-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0336-Export-Error.md new file mode 100644 index 0000000000000..0f3a1a594454d --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0336-Export-Error.md @@ -0,0 +1,105 @@ +--- +title: NS0336 Export Error in NetSuite Integration +description: Learn what the NS0336 export error means and how to resolve unexpected NetSuite errors caused by special characters in merchant names. +keywords: NS0336, NetSuite unexpected error, NetSuite Error ID, special characters merchant name NetSuite, export error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0336 export error caused by special characters in merchant names and escalation to NetSuite with an Error ID. Does not cover role permission or account configuration issues. +--- + +# NS0336 Export Error in NetSuite Integration + +If you see the error: + +NS0336 Export Error: NetSuite encountered an unexpected error, Error ID [XXXXXXXXX]. + +This means NetSuite returned a system-level error during export. + +This error is often related to formatting issues in the expense data. + +--- + +## Why the NS0336 Export Error Happens in NetSuite + +The NS0336 error typically occurs when NetSuite encounters unsupported or invalid characters during export. + +A common cause is special characters in the **merchant name** field. + +Characters that frequently cause issues include: + +- `*` +- `<` +- `>` +- Other uncommon symbols or formatting characters + +If NetSuite cannot process certain characters, it may return a generic unexpected error along with an **Error ID**. + +This is a data formatting issue, not a role permission or account configuration issue. + +--- + +## How to Fix the NS0336 Export Error + +Follow the steps below to clean up formatting and retry the export. + +--- + +## Review Merchant Names in the Report + +1. Open the report. +2. Review each expense. +3. Check the **Merchant** field for special characters such as: + - `*` + - `<` + - `>` + - Unusual symbols or formatting +4. Remove any unsupported characters. +5. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. +6. Retry exporting the report. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. +6. Retry exporting the report. + +--- + +## Contact NetSuite if the Error Persists + +If the error continues after removing special characters: + +1. Note the **Error ID** shown in the error message. +2. Contact NetSuite support. +3. Provide the Error ID and transaction details. + +The Error ID allows NetSuite support to investigate the issue on their side. + +--- + +# FAQ + +## Does the NS0336 Export Error Always Relate to Special Characters? + +Not always, but special characters in merchant names are a common cause. + +## Can the Workspace Resolve the NS0336 Export Error Directly? + +If the issue is due to data formatting, yes. If the error persists after cleaning the data, NetSuite must investigate using the provided Error ID. + +## Does This Error Affect All Exports? + +It affects only the specific transaction that triggers the unexpected NetSuite error. Other exports may succeed normally. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0377-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0377-Export-Error.md new file mode 100644 index 0000000000000..20ee07401cee6 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0377-Export-Error.md @@ -0,0 +1,92 @@ +--- +title: NS0377 Export Error in NetSuite Integration +description: Learn what the NS0377 export error means and how to update the Expensify Integration role permissions in NetSuite to restore expense report exports. +keywords: NS0377, NetSuite expense report permission error, insufficient expense report permissions NetSuite, Expensify Integration role Vendors Full permission, NetSuite role permissions error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0377 export error caused by insufficient Expense Report and Vendor permissions in NetSuite. Does not cover token authentication or subsidiary configuration issues. +--- + +# NS0377 Export Error in NetSuite Integration + +If you see the error: + +NS0377 Export Error: Your NetSuite role doesn’t have sufficient Expense Report permissions. Update the Expensify Integration role to grant the required access. + +This means the **Expensify Integration role** in NetSuite does not have the required permissions to export expense reports. + +Without the correct permissions, NetSuite will block the export. + +--- + +## Why the NS0377 Export Error Happens in NetSuite + +The NS0377 error typically occurs when: + +- The **Expensify Integration role** does not have sufficient permissions for expense report-related records. +- The role does not have **Full** access to required list or transaction permissions. +- The role lacks proper access to **Vendor** records. + +In most cases, this is related to insufficient **Vendor** permissions within the role configuration. + +This is a role permission issue in NetSuite, not a token authentication or subsidiary configuration issue. + +--- + +## How to Fix the NS0377 Export Error + +Follow the steps below to update the role permissions. + +--- + +## Update the Expensify Integration Role Permissions in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Locate and select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to the **Permissions** section. +6. Select the **Lists** tab. +7. Locate **Vendors**. +8. Set the permission level to **Full**. +9. Click **Save**. + +Confirm the permission is saved before proceeding. + +--- + +## Sync the Workspace and Retry the Export + +After updating the role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the expense report. + +--- + +# FAQ + +## Does the NS0377 Export Error Affect All Expense Report Exports? + +Yes. If the integration role lacks required permissions, all related expense report exports may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0377 Export Error? + +Yes. Updating role permissions in NetSuite requires administrator-level access. + +## Do I Need to Reconnect the Integration? + +No. Updating the role permission and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0416-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0416-Export-Error.md new file mode 100644 index 0000000000000..9ea376efeea1a --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0416-Export-Error.md @@ -0,0 +1,92 @@ +--- +title: NS0416 Export Error in NetSuite Integration +description: Learn what the NS0416 export error means and how to make the Email field visible on the preferred NetSuite transaction form to allow vendor creation. +keywords: NS0416, NetSuite error creating vendor, Email field not visible NetSuite, vendor creation error NetSuite, transaction form Email field NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0416 export error caused by the Email field not being visible on the preferred NetSuite transaction form. Does not cover vendor subsidiary or email mismatch issues. +--- + +# NS0416 Export Error in NetSuite Integration + +If you see the error: + +NS0416 Export Error: Error creating vendor. Please ensure that the 'Email' field is set to 'Show' on the preferred export type form in NetSuite. + +This means the **Email** field is hidden on the NetSuite form used for exports. + +The Workspace must be able to populate the **Email** field when creating or updating vendor records. + +--- + +## Why the NS0416 Export Error Happens in NetSuite + +The NS0416 error typically occurs when: + +- The preferred NetSuite transaction form hides the **Email** field. +- The integration attempts to create a new vendor record. +- NetSuite blocks the export because a required field is not visible. + +If the Email field is hidden, NetSuite prevents the integration from setting its value and vendor creation fails. + +This is a transaction form visibility issue, not a vendor subsidiary or email mismatch issue. + +--- + +## How to Fix the NS0416 Export Error + +Follow the steps below to make the Email field visible on the preferred form. + +--- + +## Make the Email Field Visible in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Locate the transaction form marked as **Preferred** for your export type. +4. Click **Edit**. +5. Locate the **Email** field. +6. Ensure the field is marked as **Show**. +7. Click **Save**. + +Confirm the Email field is visible before proceeding. + +--- + +## Sync the Workspace and Retry the Export + +After updating the form: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the Email field is visible on the preferred form, vendor creation should complete successfully. + +--- + +# FAQ + +## Does the NS0416 Export Error Only Affect New Vendors? + +Yes. This error typically appears when the integration attempts to create a new vendor record and cannot set the Email field. + +## Do I Need NetSuite Admin Access to Fix the NS0416 Export Error? + +Yes. Updating transaction form field visibility requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Making the Email field visible and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0445-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0445-Export-Error.md new file mode 100644 index 0000000000000..37a769f5bd4f8 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0445-Export-Error.md @@ -0,0 +1,111 @@ +--- +title: NS0445 Export Error in NetSuite Integration +description: Learn what the NS0445 export error means and how to grant Invoice transaction permissions to the Expensify Integration role in NetSuite. +keywords: NS0445, NetSuite missing Invoice permissions, Expensify Integration role Invoice access, Transactions Invoice Full permission NetSuite, NetSuite export error Invoice, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0445 export error caused by missing Invoice transaction permissions in NetSuite. Does not cover vendor record mismatches or posting period errors. +--- + +# NS0445 Export Error in NetSuite Integration + +If you see the error: + +NS0445 Export Error: Your NetSuite role is missing Invoice permissions. Update the Expensify Integration role to include Transactions > Invoice access in NetSuite. + +This means the **Expensify Integration role** does not have permission to create or manage **Invoices** in NetSuite. + +Without Invoice permissions, invoice exports will fail. + +--- + +## Why the NS0445 Export Error Happens in NetSuite + +The NS0445 error typically occurs when the Expensify Integration role does not have sufficient permissions for: + +- **Transactions > Invoice** + +If Invoice access is missing or limited, NetSuite blocks the export. + +This is a role permission issue in NetSuite, not a vendor record mismatch or posting period issue. + +--- + +## How to Fix the NS0445 Export Error + +Follow the steps below to grant the required Invoice permissions. + +--- + +## Grant Invoice Permissions to the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to **Permissions > Transactions**. +6. Locate **Invoice**. +7. Set the permission level to **Full**. +8. Click **Save**. + +Confirm the permission change is saved before proceeding. + +--- + +## Sync the Workspace and Retry the Export + +After updating the role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the invoice. + +--- + +## If Invoice Is Not Available in the Permissions List + +If **Invoice** does not appear under Transactions: + +1. Go to **Setup > Users/Roles > Manage Roles**. +2. Select **Expensify Integration**. +3. Click **Edit**. +4. Confirm the role has **Full** access for: + +Under **Transactions**: +- **Bills and Transactions** +- **Vendor Bill Approval** + +Under **Lists**: +- **Vendors** + +5. Click **Save**. + +Then return to the Workspace, select **Sync Now**, and retry the export. + +--- + +# FAQ + +## Does the NS0445 Export Error Affect Only Invoice Exports? + +Yes. This error specifically affects exports that require Invoice permissions. + +## Do I Need NetSuite Admin Access to Fix the NS0445 Export Error? + +Yes. Updating role permissions in NetSuite requires administrator-level access. + +## Do I Need to Reconnect the Integration? + +No. Updating the role permission and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0499-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0499-Export-Error.md new file mode 100644 index 0000000000000..4dfe77d3edb46 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0499-Export-Error.md @@ -0,0 +1,97 @@ +--- +title: NS0499 Export Error in NetSuite Integration +description: Learn what the NS0499 export error means and how to align expense category and employee subsidiary settings in NetSuite before exporting. +keywords: NS0499, NetSuite category not available, expense category subsidiary mismatch NetSuite, employee subsidiary mismatch NetSuite, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0499 export error caused by subsidiary mismatches between expense categories and employee records. Does not cover role permission or token configuration issues. +--- + +# NS0499 Export Error in NetSuite Integration + +If you see the error: + +NS0499 Export Error: NetSuite category [X] isn’t available to the report submitter. Verify that the expense category and the submitter’s employee record are on the same subsidiary in NetSuite. + +This means there is a subsidiary mismatch in NetSuite. + +The expense category and the employee record must belong to the same subsidiary for the export to succeed. + +--- + +## Why the NS0499 Export Error Happens in NetSuite + +The NS0499 error typically occurs when: + +- The expense category used in the Workspace is associated with one subsidiary in NetSuite. +- The employee record for the report creator or submitter is associated with a different subsidiary. +- NetSuite validation fails because the category is not available to that employee’s subsidiary. + +NetSuite prevents exports when the category and employee do not belong to the same subsidiary. + +This is a subsidiary alignment issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0499 Export Error + +Follow the steps below to align subsidiary settings. + +--- + +## Confirm the Employee’s Subsidiary in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Locate and open the employee record associated with the report creator or submitter. +4. Confirm the **Subsidiary** listed on the employee record. +5. Click **Save** if any updates are made. + +--- + +## Confirm the Expense Category’s Subsidiary in NetSuite + +1. Locate the expense category referenced in the error. +2. Confirm the category is associated with the same subsidiary as the employee. +3. If the category is not associated with the correct subsidiary: + - Add the category to the correct subsidiary, or + - Update the subsidiary configuration as needed. +4. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the employee and expense category are aligned to the same subsidiary, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0499 Export Error Affect Only One Employee? + +Yes. The error applies to the specific employee whose subsidiary does not match the expense category. + +## Do I Need NetSuite Admin Access to Fix the NS0499 Export Error? + +Yes. Updating employee or expense category subsidiary settings requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the subsidiary alignment and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0510-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0510-Export-Error.md new file mode 100644 index 0000000000000..42427c525c37a --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0510-Export-Error.md @@ -0,0 +1,126 @@ +--- +title: NS0510 Export Error in NetSuite Integration +description: Learn what the NS0510 export error means and how to update the Expensify Connect bundle and NetSuite role token permissions to restore exports. +keywords: NS0510, NetSuite role access error, Expensify Connect bundle update, NetSuite token permissions, Access Token Management NetSuite, User Access Tokens NetSuite, Multi-Currency NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0510 export error caused by outdated Expensify Connect bundle or missing NetSuite role token permissions. Does not cover general NetSuite login errors or full integration setup. +--- + +# NS0510 Export Error in NetSuite Integration + +If you see the error: + +NS0510 Export Error: Your NetSuite role doesn’t have access to this record. Please ensure the Expensify bundle is up to date and that your role has the required token permissions. + +This means there is a permissions issue in NetSuite. + +This is usually caused by: + +- An outdated **Expensify Connect bundle**, or +- Missing token-related permissions in the connected NetSuite role + +--- + +## Why the NS0510 Export Error Happens in NetSuite + +The NS0510 error typically occurs when: + +- The **Expensify Connect bundle** in NetSuite is not updated to the latest version. +- The NetSuite role used for the integration does not have required token permissions. +- The integration role lacks access to certain records needed during export. +- Multi-Currency settings restrict certain permissions. + +When the role does not have proper access, NetSuite blocks the record during export. + +This is a bundle or role permission issue, not a general NetSuite login issue. + +--- + +## How to Fix the NS0510 Export Error + +Follow the steps below to resolve the issue. + +--- + +## Update the Expensify Connect Bundle in NetSuite + +First, confirm the bundle is up to date. + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Click **Update** and install the latest version. +5. Confirm the update completes successfully. + +After updating the bundle: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +--- + +## Update NetSuite Role Token Permissions + +If the error continues, verify the role permissions in NetSuite. + +1. Log in to NetSuite. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select the role used for the Expensify integration. +4. Click **Edit**. +5. Navigate to **Permissions > Setup**. +6. Confirm the following permissions are added: + - **Access Token Management** + - **User Access Tokens** +7. Click **Save**. + +Note: In some environments, these permissions may be restricted if **Multi-Currency** is enabled. + +After updating permissions: + +On web: + +1. Go to **Workspaces** from the navigation tabs on the left. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap **Workspaces** from the navigation tabs on the bottom. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry exporting the report once the sync completes. + +--- + +# FAQ + +## Does the NS0510 Export Error Affect All Exports? + +It can. If the connected NetSuite role lacks required permissions, any export that requires access to restricted records may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0510 Export Error? + +Yes. Updating bundles and modifying role permissions requires NetSuite administrator access. + +## Do I Need to Reconnect the Integration? + +No. Updating the bundle and correcting role permissions is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0521-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0521-Sync-Error.md new file mode 100644 index 0000000000000..f7c76fdc66c30 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0521-Sync-Error.md @@ -0,0 +1,118 @@ +--- +title: NS0521 Sync Error in NetSuite Integration +description: Learn what the NS0521 sync error means and how to fix subsidiary permission issues in OneWorld and Non-OneWorld NetSuite accounts. +keywords: NS0521, NetSuite subsidiary permission error, OneWorld NetSuite permissions, Non-OneWorld NetSuite bundle issue, Expensify Integration role subsidiary access, Expensify Connect bundle, NetSuite sync error, Workspace Admin +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 + +If you see the error: + +NS0521 Sync Error: Permission error querying NetSuite for 'Subsidiary'. + +This means the NetSuite integration does not have proper access to subsidiary records. + +This error is typically related to permission restrictions in **OneWorld** or **Non-OneWorld** NetSuite accounts. + +--- + +## Why the NS0521 Sync Error Happens in NetSuite + +The NS0521 error typically occurs because of permission restrictions tied to how subsidiaries are configured in NetSuite. + +The resolution depends on whether your NetSuite account is: + +- A **OneWorld** account, or +- A **Non-OneWorld** account + +If the integration role or bundle does not properly support subsidiary access, NetSuite blocks the sync. + +This is a subsidiary access configuration issue, not a token formatting or general login issue. + +--- + +## Fix the NS0521 Sync Error in OneWorld Accounts + +In **OneWorld** accounts, the **Expensify Integration role** must have access to all required subsidiaries. + +### Update Subsidiary Access for the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Confirm that either: + - **All** is selected for subsidiaries, or + - **Selected** is chosen and all required subsidiaries are highlighted. +6. Click **Save**. + +### Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync or export once complete. + +--- + +## Fix the NS0521 Sync Error in Non-OneWorld Accounts + +In **Non-OneWorld** accounts, the issue is typically related to the **Expensify Connect bundle** configuration. + +### Reinstall the Expensify Connect Bundle + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Uninstall the bundle. +5. Delete the **Expensify Integration role**. +6. Reinstall the Expensify Connect bundle. +7. During installation, do not edit the default role permissions. + +### Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +# FAQ + +## Does the NS0521 Sync Error Affect All Workspaces? + +It can. If the NetSuite role or bundle configuration is incorrect, all Workspaces connected to that NetSuite account may experience syncing issues. + +## Do I Need NetSuite Admin Access to Fix the NS0521 Sync Error? + +Yes. Updating roles, managing subsidiary access, and reinstalling bundles require NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. In most cases, correcting subsidiary access or reinstalling the bundle and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0538-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0538-Export-Error.md new file mode 100644 index 0000000000000..9946503fe9a8c --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0538-Export-Error.md @@ -0,0 +1,93 @@ +--- +title: NS0538 Export Error in NetSuite Integration +description: Learn what the NS0538 export error means and how to update the Supervisor field on the employee record in NetSuite to restore exports. +keywords: NS0538, NetSuite next approver invalid, Supervisor field NetSuite error, invalid supervisor employee record NetSuite, Expensify NetSuite export error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0538 export error caused by an invalid Supervisor field on employee records. Does not cover broader approval workflow configuration beyond supervisor validation. +--- + +# NS0538 Export Error in NetSuite Integration + +If you see the error: + +NS0538 Export Error: The next approver is invalid. Please update the submitter’s 'Supervisor' field in NetSuite to a valid, active employee. + +This means the **Supervisor** listed on the employee record is invalid. + +NetSuite requires the Supervisor field to reference an active employee for approval workflows to function correctly. + +--- + +## Why the NS0538 Export Error Happens in NetSuite + +The NS0538 error typically occurs when: + +- The report creator or submitter’s employee record includes a **Supervisor** value. +- The Supervisor is inactive, deleted, or not a valid employee record in NetSuite. +- NetSuite cannot determine a valid next approver. + +If the Supervisor field references an inactive or invalid employee, NetSuite blocks the export. + +This is a Supervisor field configuration issue, not a general role permission issue. + +--- + +## How to Fix the NS0538 Export Error + +Follow the steps below to update the Supervisor field. + +--- + +## Confirm and Update the Supervisor on the Employee Record + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Locate and open the employee record for the report creator or submitter. +4. Review the **Supervisor** field. +5. Confirm the Supervisor listed is: + - A valid employee record. + - Active in NetSuite. +6. If the Supervisor is invalid or inactive: + - Select a valid, active employee as the new Supervisor. +7. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +After updating the employee record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the Supervisor field references a valid, active employee, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0538 Export Error Affect Only Approval-Based Exports? + +Yes. This error appears when NetSuite requires a valid next approver during export. + +## Do I Need NetSuite Admin Access to Fix the NS0538 Export Error? + +Yes. Updating employee Supervisor fields requires appropriate NetSuite administrator permissions. + +## Does This Error Affect All Reports for That Employee? + +Yes. Any export tied to that employee will fail until the Supervisor field is corrected. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0581-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0581-Export-Error.md new file mode 100644 index 0000000000000..b117ab4bc57c0 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0581-Export-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0581 Export Error in NetSuite Integration +description: Learn what the NS0581 export error means and how to create a Non-Inventory Sales Item in NetSuite or correct the report type before exporting. +keywords: NS0581, NetSuite invoice item not found, Non-Inventory Sales Item NetSuite, Expensify invoice export error, change report type to Expense report, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0581 export error related to invoice exports and report type configuration. Does not cover vendor bill or expense category mapping issues. +--- + +# NS0581 Export Error in NetSuite Integration + +If you see the error: + +NS0581 Export Error: NetSuite couldn’t find an invoice item. Please create a 'Non-Inventory Sales Item' for Expensify invoices and confirm this export is intended to be an invoice (not an expense report). + +This means NetSuite cannot locate a valid invoice item for the export. + +This usually happens when exporting an **Invoice** instead of an **Expense report**. + +--- + +## Why the NS0581 Export Error Happens in NetSuite + +The NS0581 error typically occurs when: + +- The export type is set to **Invoice**. +- A required **Non-Inventory Sales Item** does not exist in NetSuite. +- The report was mistakenly exported as an invoice instead of an expense report. + +NetSuite requires a valid Non-Inventory Sales Item for invoice exports. + +This is an invoice configuration issue, not a vendor bill or expense category mapping issue. + +--- + +## How to Fix the NS0581 Export Error for Invoice Exports + +If the export is intended to be an **Invoice**, follow these steps. + +--- + +## Create a Non-Inventory Sales Item in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Accounting > Items > New**. +3. Select **Non-Inventory Item for Sale**. +4. Complete the required fields. +5. Click **Save**. + +This item will be used for Expensify invoice exports. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the invoice. + +--- + +## How to Fix the NS0581 Export Error for Expense Reports + +If the export is meant to be an **Expense report**, update the report type. + +--- + +## Change the Report Type to Expense Report + +1. Open the report. +2. If the report is approved, click **Unapprove**. +3. Open the report details. +4. Locate the **Type** field. +5. Change the type to **Expense report**. +6. Resubmit and approve the report. +7. Retry exporting. + +--- + +# FAQ + +## How Do I Know if the Report Is Set as an Invoice? + +Check the **Type** field in the report details. If it is set to **Invoice**, NetSuite will require a Non-Inventory Sales Item. + +## Do I Need NetSuite Admin Access to Fix the NS0581 Export Error? + +Yes. Creating a Non-Inventory Sales Item in NetSuite requires administrator permissions. + +## Does This Error Affect Vendor Bills? + +No. This error specifically affects invoice exports. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0655-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0655-Export-Error.md new file mode 100644 index 0000000000000..7163a3ad203d0 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0655-Export-Error.md @@ -0,0 +1,92 @@ +--- +title: NS0655 Export Error in NetSuite Integration +description: Learn what the NS0655 export error means and how to assign an active default department on the employee record in NetSuite before exporting. +keywords: NS0655, NetSuite default department inactive, employee department inactive NetSuite, export error department inactive NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0655 export error caused by an inactive default department on an employee record. Does not cover expense category or subsidiary mismatches. +--- + +# NS0655 Export Error in NetSuite Integration + +If you see the error: + +NS0655 Export Error: NetSuite can’t save the report because the employee’s default department is inactive. Check the employee record in NetSuite and assign an active department. + +This means the default **Department** assigned to the employee is inactive in NetSuite. + +NetSuite cannot process exports if the employee’s default department is inactive. + +--- + +## Why the NS0655 Export Error Happens in NetSuite + +The NS0655 error typically occurs when: + +- The report creator or submitter’s employee record includes a default **Department**. +- That department has been marked as **Inactive** in NetSuite. +- NetSuite attempts to save the transaction using the inactive department. + +When NetSuite detects an inactive department on the employee record, it blocks the export. + +This is an employee department configuration issue, not an expense category or subsidiary mismatch. + +--- + +## How to Fix the NS0655 Export Error + +Follow the steps below to update the employee’s default department. + +--- + +## Update the Employee’s Default Department in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Locate and open the employee profile associated with the report creator or submitter. +4. Review the **Department** field. +5. Confirm the selected department is active. +6. If the department is inactive: + - Select a new, active department, or + - Reactivate the original department if appropriate. +7. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +After updating the employee record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the employee’s default department is active, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0655 Export Error Affect Only This Employee? + +Yes. This error is specific to the employee record tied to the report being exported. + +## Do I Need NetSuite Admin Access to Fix the NS0655 Export Error? + +Yes. Updating employee department settings requires NetSuite administrator permissions. + +## Can I Reactivate the Inactive Department Instead? + +Yes. If appropriate for your accounting structure, you can reactivate the department instead of assigning a new one. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0669-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0669-Export-Error.md new file mode 100644 index 0000000000000..28abd6df9e4d3 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0669-Export-Error.md @@ -0,0 +1,87 @@ +--- +title: NS0669 Export Error in NetSuite Integration +description: Learn what the NS0669 export error means and how to select a valid default vendor instead of NetSuite’s -Accountant- vendor before exporting. +keywords: NS0669, NetSuite default vendor -Accountant-, vendor ID -3 NetSuite, default vendor export error, update Default Vendor Workspace, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0669 export error caused by selecting the -Accountant- default vendor in NetSuite. Does not cover vendor email or subsidiary mismatches. +--- + +# NS0669 Export Error in NetSuite Integration + +If you see the error: + +NS0669 Export Error: NetSuite’s default vendor '-Accountant-' (ID -3) cannot be used for exports. Please choose or create a different vendor and retry. + +This means the default NetSuite vendor **-Accountant-** is selected as the export vendor in the Workspace. + +The **-Accountant-** vendor (Internal ID **-3**) is automatically created by NetSuite and cannot be used for exports. + +--- + +## Why the NS0669 Export Error Happens in NetSuite + +NetSuite provides a default vendor called **-Accountant-** in every NetSuite environment: + +- Internal ID: **-3** +- System-generated record +- Not intended for transaction exports + +If **-Accountant-** is selected as the **Default Vendor** in the Workspace, NetSuite will block the export. + +This is a default vendor configuration issue, not a vendor email or subsidiary mismatch. + +--- + +## How to Fix the NS0669 Export Error + +Follow the steps below to select a valid default vendor. + +--- + +## Select a Different Default Vendor in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Export**. +5. Locate the **Default Vendor** setting. +6. Select a valid vendor from the dropdown (not **-Accountant-**). +7. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Export**. +5. Update the **Default Vendor** field. +6. Tap **Save**. + +--- + +## Sync the Workspace and Retry the Export + +1. Go to **Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. +4. Open the report. +5. Retry exporting to NetSuite. + +If a valid vendor is selected, the export should complete successfully. + +--- + +# FAQ + +## Can I Use the -Accountant- Vendor for Any Exports? + +No. The **-Accountant-** vendor (Internal ID -3) is a NetSuite system default and cannot be used for exports from the Workspace. + +## Do I Need NetSuite Admin Access to Fix the NS0669 Export Error? + +No. You only need Workspace Admin access to update the **Default Vendor** setting. + +## Should I Create a New Vendor if None Are Available? + +Yes. If no valid vendor exists, create one in NetSuite and then select it as the **Default Vendor** in the Workspace. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0722-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0722-Export-Error.md new file mode 100644 index 0000000000000..62503e973e346 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0722-Export-Error.md @@ -0,0 +1,103 @@ +--- +title: NS0722 Export Error in NetSuite Integration +description: Learn what the NS0722 export error means and how to set a valid Default Payable Account for expense reports or corporate card expenses in NetSuite. +keywords: NS0722, NetSuite invalid payable account, Default Payable Account for Expense Reports NetSuite, Default Account for Corporate Card Expenses NetSuite, subsidiary payable account NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0722 export error caused by invalid or inactive default payable account settings at the subsidiary level. Does not cover vendor mapping or expense category configuration issues. +--- + +# NS0722 Export Error in NetSuite Integration + +If you see the error: + +NS0722 Export Error: The report was exported to an invalid payable account (ID [XXX]). Please set a valid 'Default Payable Account' for Expense Reports in NetSuite. + +This means the default payable account configured in NetSuite is invalid or inactive. + +NetSuite requires an active default payable account at the subsidiary level for certain export types. + +--- + +## Why the NS0722 Export Error Happens in NetSuite + +The NS0722 error typically occurs when: + +- The **Default Payable Account for Expense Reports** is inactive or invalid. +- The **Default Account for Corporate Card Expenses** is inactive or not selected. +- The account associated with the subsidiary has been deleted or restricted. +- The export is attempting to post to an account not enabled for the subsidiary. + +If the selected account is inactive or no account is set, NetSuite blocks the export. + +This is a subsidiary-level configuration issue, not a vendor mapping or expense category configuration issue. + +--- + +## How to Fix the NS0722 Export Error + +Follow the steps below to update the default payable account settings in NetSuite. + +--- + +## Review Subsidiary Preferences in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Company > Subsidiaries**. +3. Select the relevant subsidiary. +4. Click **Edit**. +5. Expand the **Preferences** section. + +Then confirm: + +- If exporting as an **Expense Report**, the account listed under **Default Payable Account for Expense Reports** is active. +- If exporting **Corporate Card transactions**, the account listed under **Default Account for Corporate Card Expenses** is active. + +If the account is inactive: + +- Select a new, active account. + +If no account is selected: + +- Choose an appropriate active account. +- Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +After updating the subsidiary settings: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the subsidiary has a valid, active default payable account, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0722 Export Error Affect All Export Types? + +It affects expense report and corporate card exports that rely on subsidiary-level default payable account settings. + +## Do I Need NetSuite Admin Access to Fix the NS0722 Export Error? + +Yes. Updating subsidiary preferences in NetSuite requires administrator-level permissions. + +## Do I Need to Reconnect the Integration? + +No. Updating the default payable account and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0728-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0728-Export-Error.md new file mode 100644 index 0000000000000..a8477eb9c9e08 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0728-Export-Error.md @@ -0,0 +1,112 @@ +--- +title: NS0728 Export Error in NetSuite Integration +description: Learn what the NS0728 export error means and how to ensure customers are associated with the correct subsidiary in NetSuite before exporting. +keywords: NS0728, NetSuite invalid customer reference key, customer not associated with subsidiary NetSuite, cross-subsidiary customer NetSuite, enable Intercompany Time and Expense NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0728 export error caused by customer and subsidiary mismatches in NetSuite. Does not cover employee subsidiary mismatches or vendor configuration issues. +--- + +# NS0728 Export Error in NetSuite Integration + +If you see the error: + +NS0728 Export Error: Invalid customer reference key [XXX] for subsidiary [YYY]. Please confirm customer is listed under subsidiary in NetSuite. + +This means the selected customer is not associated with the connected subsidiary in NetSuite. + +NetSuite requires customers to be linked to the correct subsidiary for exports to succeed. + +--- + +## Why the NS0728 Export Error Happens in NetSuite + +The NS0728 error typically occurs when: + +- A **Customer** selected in the Workspace is not associated with the subsidiary connected to the Workspace. +- The customer is inactive under that subsidiary. +- The customer exists in NetSuite but is assigned to a different subsidiary. +- Cross-subsidiary customer access is not enabled. + +Expensify does not support creating cross-subsidiary customers during export. The customer must already exist under the connected subsidiary in NetSuite. + +This is a customer-to-subsidiary configuration issue, not an employee subsidiary mismatch or vendor configuration issue. + +--- + +## How to Fix the NS0728 Export Error + +Follow the steps below to confirm the correct subsidiary configuration. + +--- + +## Enable Show Internal IDs in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Home > Set Preferences**. +3. Enable **Show Internal IDs**. +4. Click **Save**. + +This allows you to confirm the correct customer and subsidiary IDs referenced in the error. + +--- + +## Enable Intercompany Time and Expense (If Needed) + +If you use OneWorld and cross-subsidiary transactions: + +1. Go to **Setup > Company > Enable Features**. +2. Select the **Advanced Features** tab. +3. Enable **Intercompany Time and Expense**. +4. Click **Save**. + +--- + +## Confirm the Customer Is Associated With the Correct Subsidiary + +1. Locate the customer referenced in the error. +2. Open the customer record. +3. Confirm the customer: + - Is **Active**. + - Is associated with the subsidiary connected to the Workspace. +4. If the customer is not associated with the correct subsidiary: + - Add the correct subsidiary to the customer record. +5. Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the customer is active and associated with the correct subsidiary, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0728 Export Error Affect Cross-Subsidiary Customers? + +Yes. The customer must be active under the connected subsidiary. Cross-subsidiary customer creation during export is not supported. + +## Do I Need NetSuite Admin Access to Fix the NS0728 Export Error? + +Yes. Updating customer-subsidiary associations and enabling advanced features requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the customer-subsidiary association and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0748-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0748-Export-Error.md new file mode 100644 index 0000000000000..071db0d61405c --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0748-Export-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0748 Export Error in NetSuite Integration +description: Learn what the NS0748 export error means and how to disable the Require Rate setting on NetSuite expense categories before exporting. +keywords: NS0748, NetSuite expense category Require Rate error, Rate is Required NetSuite expense category, expense category rate required NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0748 export error caused by the Require Rate setting on NetSuite expense categories. Does not cover tax configuration or subsidiary mapping issues. +--- + +# NS0748 Export Error in NetSuite Integration + +If you see the error: + +NS0748 Export Error: The selected expense category requires a rate in NetSuite. Uncheck 'Require Rate' on the expense category in NetSuite to continue. + +This means the expense category in NetSuite is configured to require a rate. + +The Workspace does not send a rate value during export. If **Rate is Required** is enabled, NetSuite blocks the transaction. + +--- + +## Why the NS0748 Export Error Happens in NetSuite + +The NS0748 error typically occurs when: + +- The **Rate is Required** option is enabled on an expense category in NetSuite. +- NetSuite expects a rate value for that category. +- No rate is provided during export. + +If **Rate is Required** is checked, NetSuite requires a rate value for the expense category. Since the Workspace does not provide one, the export fails. + +This is an expense category configuration issue, not a tax configuration or subsidiary mapping issue. + +--- + +## How to Fix the NS0748 Export Error + +Follow the steps below to disable the Require Rate setting. + +--- + +## Disable Rate Is Required on the Expense Category in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Accounting > Expense Categories**. +3. Locate the expense category referenced in the error. +4. Click **Edit**. +5. Uncheck **Rate is Required**. +6. Click **Save**. + +Confirm the setting is saved before proceeding. + +--- + +## Sync the Workspace and Retry the Export + +After updating the expense category: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If **Rate is Required** is disabled, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0748 Export Error Affect Only One Category? + +Yes. The error applies to the specific expense category where **Rate is Required** is enabled. + +## Do I Need NetSuite Admin Access to Fix the NS0748 Export Error? + +Yes. Updating expense category settings in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Disabling **Rate is Required** and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0756-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0756-Export-Error.md new file mode 100644 index 0000000000000..78db520dba2d7 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0756-Export-Error.md @@ -0,0 +1,93 @@ +--- +title: NS0756 Export Error in NetSuite Integration +description: Learn what the NS0756 export error means and how to update the Expensify Integration role to allow access to all required subsidiaries in NetSuite. +keywords: NS0756, NetSuite transaction nexus invalid, nexus not valid for subsidiary NetSuite, Expensify Integration role subsidiary access, NetSuite role subsidiary permissions, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0756 export error caused by subsidiary access restrictions on the Expensify Integration role. Does not cover tax rate mapping or currency configuration issues. +--- + +# NS0756 Export Error in NetSuite Integration + +If you see the error: + +NS0756 Export Error: The transaction nexus isn’t valid for the selected subsidiary. Update the Expensify Integration role to allow access to all subsidiaries in NetSuite. + +This means the integration role does not have access to the subsidiary associated with the transaction nexus. + +NetSuite blocks transactions when the connected role is restricted from accessing the required subsidiary. + +--- + +## Why the NS0756 Export Error Happens in NetSuite + +The NS0756 error typically occurs when: + +- The transaction **Nexus** is tied to a specific subsidiary. +- The **Expensify Integration role** is restricted to certain subsidiaries. +- The integration role does not include the subsidiary required for the transaction. + +If the role cannot access the subsidiary associated with the nexus, NetSuite rejects the export. + +This is a subsidiary access permission issue, not a tax rate mapping or currency configuration issue. + +--- + +## How to Fix the NS0756 Export Error + +Follow the steps below to update subsidiary access for the integration role. + +--- + +## Update Subsidiary Access on the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. In the **Subsidiary Restrictions** section: + - Select **All** subsidiaries, or + - Select **Selected** and ensure all required subsidiaries are highlighted. +6. Click **Save**. + +This ensures the integration role can access all subsidiaries required for export. + +--- + +## Sync the Workspace and Retry the Export + +After updating subsidiary access: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the integration role has access to the required subsidiary, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0756 Export Error Affect Only One Subsidiary? + +Yes. It affects exports tied to subsidiaries the integration role cannot access. + +## Do I Need NetSuite Admin Access to Fix the NS0756 Export Error? + +Yes. Updating subsidiary access on roles requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Updating the role’s subsidiary access and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0770-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0770-Export-Error.md new file mode 100644 index 0000000000000..7d922a84d0f67 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0770-Export-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0770 Export Error in NetSuite Integration +description: Learn what the NS0770 export error means and how to reactivate or update project tags in NetSuite before exporting. +keywords: NS0770, NetSuite project not active, inactive project export error NetSuite, project can’t accept expenses NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0770 export error caused by inactive project records in NetSuite. Does not cover customer resource assignment or subsidiary mismatch issues. +--- + +# NS0770 Export Error in NetSuite Integration + +If you see the error: + +NS0770 Export Error: Project [X] is not active and can’t accept expenses. Please update the project tag. + +This means the selected project is inactive in NetSuite. + +NetSuite does not allow expenses to be exported to inactive or closed projects. + +--- + +## Why the NS0770 Export Error Happens in NetSuite + +The NS0770 error typically occurs when: + +- A **Project** selected in the Workspace is marked as **Inactive** in NetSuite. +- The project has been closed or archived. +- The project is no longer available for new transactions. + +If the project is not active, NetSuite blocks the export. + +This is a project status issue, not a customer resource assignment or subsidiary mismatch issue. + +--- + +## How to Fix the NS0770 Export Error + +Follow the steps below to correct the project configuration. + +--- + +## Confirm the Project Is Active in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Relationships > Projects**. +3. Locate the project referenced in the error. +4. Confirm the project is marked as **Active**. +5. If the project is inactive: + - Reactivate the project, or + - Select a different active project in the Workspace. +6. Click **Save** if changes are made. + +--- + +## Sync the Workspace and Retry the Export + +After confirming or updating the project: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the project is active, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0770 Export Error Affect Only Project-Tagged Expenses? + +Yes. This error appears only when exporting expenses associated with an inactive project. + +## Do I Need NetSuite Admin Access to Fix the NS0770 Export Error? + +Yes. Reactivating or editing project records in NetSuite requires administrator permissions. + +## Can I Fix This by Changing the Project on the Expense? + +Yes. Selecting a valid, active project will resolve the error if the original project is inactive. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0831-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0831-Export-Error.md new file mode 100644 index 0000000000000..3b7a439dc7584 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0831-Export-Error.md @@ -0,0 +1,117 @@ +--- +title: NS0831 Export Error in NetSuite Integration +description: Learn what the NS0831 export error means and how to fix invalid or missing Class and other classification settings between NetSuite and the Workspace. +keywords: NS0831, NetSuite invalid classification, Class not found NetSuite, missing classification export error, cross-subsidiary customers projects NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0831 export error caused by invalid or missing Class or other classification settings. Does not cover vendor or employee email mismatches. +--- + +# NS0831 Export Error in NetSuite Integration + +If you see the error: + +NS0831 Export Error: Invalid or missing classification. Verify it exists in NetSuite and the employee has access. + +This means the selected **Class** or other classification in the Workspace is not valid in NetSuite. + +NetSuite blocks exports when a Class or related classification is missing, inactive, or restricted. + +--- + +## Why the NS0831 Export Error Happens in NetSuite + +The NS0831 error typically occurs when: + +- The selected **Class** does not exist in NetSuite. +- The Class is inactive. +- The employee associated with the report does not have access to that Class. +- The Class is not available for the employee’s subsidiary. +- Classification settings were recently updated and have not yet synced. + +If NetSuite cannot validate the classification, the export fails. + +This is a classification configuration issue, not a vendor or employee email mismatch issue. + +--- + +## How to Fix the NS0831 Export Error + +Follow the options below based on your configuration. + +--- + +## Enable Cross-Subsidiary Customers or Projects in the Workspace + +If classifications span multiple subsidiaries: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Enable **Cross-Subsidiary Customers/Projects**. +6. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Enable **Cross-Subsidiary Customers/Projects**. +6. Tap **Save**. + +Retry exporting the report. + +--- + +## Update Time and Expense Preferences in NetSuite + +If project restrictions are limiting classification access: + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Accounting > Accounting Preferences**. +3. Select the **Time & Expenses** tab. +4. Uncheck **Show Projects Only for Time and Expenses**. +5. Click **Save**. + +Then in the Workspace: + +1. Go to **Settings > Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. +4. Retry exporting the report. + +--- + +## Confirm the Classification Exists and Is Active in NetSuite + +1. Log in to NetSuite. +2. Locate the Class or other classification referenced in the error. +3. Confirm it: + - Exists. + - Is active. + - Is available to the employee’s subsidiary. +4. Save any changes. + +Then: + +1. Go to **Workspaces > Accounting**. +2. Click **Sync Now**. +3. Retry exporting the report. + +--- + +# FAQ + +## Does the NS0831 Export Error Affect Only Class Fields? + +It most commonly relates to **Class**, but it can also apply to other classifications such as **Department** or **Location**. + +## Do I Need NetSuite Admin Access to Fix the NS0831 Export Error? + +Yes. Updating accounting preferences and classification settings in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the classification settings and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0864-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0864-Export-Error.md new file mode 100644 index 0000000000000..fb19a73ade3d1 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0864-Export-Error.md @@ -0,0 +1,98 @@ +--- +title: NS0864 Export Error in NetSuite Integration +description: Learn what the NS0864 export error means and how to update approval level settings in the Workspace before exporting to NetSuite. +keywords: NS0864, NetSuite report not fully approved, Supervisor and Accounting approval Workspace, Approved for Posting NetSuite, approval level export error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0864 export error caused by approval level mismatches between the Workspace and NetSuite. Does not cover supervisor field validation or role permission configuration issues. +--- + +# NS0864 Export Error in NetSuite Integration + +If you see the error: + +NS0864 Export Error: The report isn’t fully approved. Update the approval level in Expensify to require 'Supervisor and Accounting approval', then try to export again. + +This means the report does not meet the approval requirements configured in NetSuite. + +NetSuite requires transactions to reach the correct approval status before they can be exported. + +--- + +## Why the NS0864 Export Error Happens in NetSuite + +The NS0864 error typically occurs when: + +- The report has not reached the required approval status. +- The approval level selected in the Workspace does not match NetSuite’s required approval workflow. +- NetSuite expects the transaction to be **Approved for Posting** or fully approved before export. + +If the approval status is insufficient, NetSuite blocks the export. + +This is an approval level configuration issue, not a supervisor field validation or role permission issue. + +--- + +## How to Fix the NS0864 Export Error + +Follow the steps below to align approval levels and retry the export. + +--- + +## Update Approval Levels in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Update the approval level based on the export type: + + - For **Expense reports** — Select **Supervisor & Accounting Approved**. + - For **Vendor bills** — Select **Approved for Posting**. + - For **Journal entries** — Select **Approved for Posting**. + +6. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Update the approval level for the applicable export type. +6. Tap **Save**. + +--- + +## Confirm the Report Is Fully Approved + +1. Open the report. +2. Confirm all required approvals are complete. +3. Ensure the report status reflects the required approval level. + +--- + +## Sync the Workspace and Retry the Export + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. +4. Retry exporting the report. + +If the approval level matches NetSuite’s requirement and the report is fully approved, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0864 Export Error Affect All Export Types? + +It affects exports where the report does not meet the approval level required by NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0864 Export Error? + +No. You only need Workspace Admin access to update approval level settings. + +## Do I Need to Reconnect the Integration? + +No. Updating the approval level and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0885-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0885-Export-Error.md new file mode 100644 index 0000000000000..5c2b1f34b1780 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0885-Export-Error.md @@ -0,0 +1,165 @@ +--- +title: NS0885 Export Error in NetSuite Integration +description: Learn what the NS0885 export error means and how to update NetSuite form fields or Workspace coding settings to resolve missing required values. +keywords: NS0885, NetSuite missing required value, export error missing field NetSuite, transaction form required field NetSuite, Workspace NetSuite integration, missing classification NetSuite +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0885 export error caused by required field visibility or classification import settings. Does not cover token or subsidiary permission issues. +--- + +# NS0885 Export Error in NetSuite Integration + +If you see the error: + +NS0885 Export Error: Missing value(s) for [X]. + +This means a required field in NetSuite does not have a value during export. + +This typically happens when a field is set to **Show** or required in NetSuite, but no value is provided from the Workspace. + +The resolution depends on the export type and whether the report is reimbursable or non-reimbursable. + +--- + +## Why the NS0885 Export Error Happens in NetSuite + +The NS0885 error typically occurs when: + +- A field is marked as visible or required on the preferred NetSuite transaction form. +- The Workspace does not send a value for that field. +- A classification such as **Department**, **Location**, or **Class** is required but not populated. +- A field was recently added or changed in NetSuite and has not yet synced. + +NetSuite blocks the export if any required field is missing a value. + +This is a transaction form or classification configuration issue, not a token or subsidiary permission issue. + +--- + +# Fix the NS0885 Export Error for Reimbursable Exports + +## Update the Expense Report Form in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Click **Edit** next to the preferred **Expense Report** form. +4. Locate the field referenced in the error under: + - **Screen Fields > Main**, or + - **Screen Fields > Expenses**. +5. Uncheck **Show** for the field if it should not be required. +6. Click **Save**. + +### If the Error References Department, Location, or Class + +In the Workspace: + +1. Go to **Settings > Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Coding**. +5. Change the import option from **Tag** to **NetSuite Employee Default**. +6. Click **Save**. + +Retry exporting the report. + +--- + +## Update the Vendor Bill Form in NetSuite + +1. Go to **Customization > Forms > Transaction Forms**. +2. Click **Edit** next to the preferred **Vendor Bill** form. +3. If the report total is negative, edit the **Bill Credit** form instead. +4. Locate the field referenced in the error under: + - **Screen Fields > Main**, or + - **Screen Fields > Expenses**. +5. Uncheck **Show**. +6. Click **Save**. + +Then in the Workspace: + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. + +Retry exporting the report. + +--- + +## Update the Journal Entry Form in NetSuite + +1. Go to **Customization > Forms > Transaction Forms**. +2. Click **Edit** next to the preferred **Journal Entry** form. +3. Locate the field referenced in the error. +4. Uncheck **Show**. +5. Click **Save**. + +If the error references **Department**, **Location**, or **Class**: + +1. Go to **Settings > Workspaces > Accounting > Coding**. +2. Change the import option from **Tag** to **NetSuite Employee Default**. +3. Click **Save**. + +Retry exporting the report. + +--- + +# Fix the NS0885 Export Error for Non-Reimbursable Exports + +## Expense Report + +1. Log in to NetSuite. +2. Search for the report creator or submitter’s email address. +3. Confirm whether multiple records exist. +4. Update the field referenced in the error across all relevant records. +5. Click **Save**. + +Then in the Workspace: + +1. Go to **Workspaces > Accounting**. +2. Click **Sync Now**. +3. Retry exporting. + +--- + +## Vendor Bill + +1. Go to **Customization > Forms > Transaction Forms**. +2. Edit the preferred **Vendor Bill** form. +3. If the total is negative, edit the **Bill Credit** form. +4. Locate the required field. +5. Uncheck **Show**. +6. Click **Save**. + +Then sync and retry exporting. + +--- + +## Journal Entry + +1. Go to **Customization > Forms > Transaction Forms**. +2. Edit the preferred **Journal Entry** form. +3. Locate the required field. +4. Uncheck **Show**. +5. Click **Save**. + +If applicable: + +1. Go to **Settings > Workspaces > Accounting > Coding**. +2. Change the classification import from **Tag** to **NetSuite Employee Default**. +3. Click **Save**. + +Retry exporting the report. + +--- + +# FAQ + +## Does the NS0885 Export Error Apply to Multiple Export Types? + +Yes. This error can affect expense reports, vendor bills, and journal entries depending on which required field is missing. + +## Do I Need NetSuite Admin Access to Fix the NS0885 Export Error? + +Yes. Updating transaction form field visibility in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Updating the required field settings and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0919-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0919-Export-Error.md new file mode 100644 index 0000000000000..aaebb5a2fdae1 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0919-Export-Error.md @@ -0,0 +1,106 @@ +--- +title: NS0919 Export Error in NetSuite Integration +description: Learn what the NS0919 export error means and how to update the supervisor’s Expense Limit in NetSuite to allow report approval. +keywords: NS0919, NetSuite approver expense limit, insufficient expense limit NetSuite, supervisor Expense Limit blank NetSuite, approval limit NetSuite export error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0919 export error caused by supervisor Expense Limit settings in NetSuite. Does not cover approval level configuration in the Workspace. +--- + +# NS0919 Export Error in NetSuite Integration + +If you see the error: + +NS0919 Export Error: NetSuite couldn’t find an approver with a sufficient expense limit. Ensure the submitter’s supervisor has a blank 'Expense Limit' in their NetSuite employee record, then retry the export. + +This means the supervisor listed on the employee record does not have sufficient approval authority in NetSuite. + +NetSuite requires the approver to have an adequate expense limit to approve exported reports. + +--- + +## Why the NS0919 Export Error Happens in NetSuite + +The NS0919 error typically occurs when: + +- The report creator or submitter’s employee record lists a **Supervisor**. +- The Supervisor’s **Expense Limit** is set to a specific dollar amount. +- The report total exceeds the Supervisor’s Expense Limit. + +Important: + +- If the **Expense Limit** is set to **$0.00**, NetSuite treats this as a valid limit and will not allow approval of any reports. +- To allow approval of reports of any amount, the **Expense Limit must be blank**. + +This is an approval authority configuration issue in NetSuite, not an approval level configuration issue in the Workspace. + +--- + +## How to Fix the NS0919 Export Error + +Follow the steps below to update the supervisor’s Expense Limit. + +--- + +## Confirm the Supervisor on the Employee Record + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees**. +3. Click **Edit** next to the employee record associated with the report creator. +4. Confirm the name listed in the **Supervisor** field. +5. Click **Save** if any updates are made. + +--- + +## Update the Supervisor’s Expense Limit + +1. Go to **Lists > Employees**. +2. Click **Edit** next to the Supervisor’s employee record. +3. Scroll to the **Human Resources** section. +4. Locate the **Expense Limit** field. +5. Confirm the Expense Limit is **blank** (not $0.00). +6. If it is set to $0.00 or another amount: + - Clear the value so the field is empty. +7. Click **Save**. + +The Expense Limit must be blank to allow approval of reports of any amount. + +--- + +## Sync the Workspace and Retry the Export + +After updating the supervisor record: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the supervisor’s Expense Limit is blank, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0919 Export Error Affect Only Certain Reports? + +Yes. This error affects reports where the supervisor’s Expense Limit is lower than the report total. + +## Do I Need NetSuite Admin Access to Fix the NS0919 Export Error? + +Yes. Updating employee and supervisor records in NetSuite requires administrator permissions. + +## Can I Set the Expense Limit to a High Dollar Amount Instead? + +Yes. You can set a sufficiently high Expense Limit, but leaving the field blank allows unlimited approval authority. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0921-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0921-Export-Error.md new file mode 100644 index 0000000000000..20f0dab78578f --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0921-Export-Error.md @@ -0,0 +1,120 @@ +--- +title: NS0921 Export Error in NetSuite Integration +description: Learn what the NS0921 export error means and how to align subsidiaries across reports, users, accounts, tags, and categories in NetSuite. +keywords: NS0921, NetSuite invalid subsidiary reference, subsidiary mismatch NetSuite export, category subsidiary mismatch NetSuite, export account subsidiary error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0921 export error caused by subsidiary mismatches across report data and NetSuite configuration. Does not cover token authentication or approval workflow issues. +--- + +# NS0921 Export Error in NetSuite Integration + +If you see the error: + +NS0921 Export Error: Invalid subsidiary reference [X]. Please ensure the report, user, accounts, tags, and categories all use the subsidiary selected in the workspace. + +This means there is a subsidiary mismatch between the Workspace and one or more records in NetSuite. + +NetSuite requires all elements tied to the export to belong to the same subsidiary. + +--- + +## Why the NS0921 Export Error Happens in NetSuite + +The NS0921 error typically occurs when one or more of the following are associated with a different subsidiary than the one selected in the Workspace: + +- The report creator or submitter (Employee record) +- The Vendor record (for vendor bill exports) +- The expense category or account +- Tags such as **Department**, **Class**, **Location**, **Project**, or **Customer** +- The export account +- The default payable account + +If any of these records are tied to a different subsidiary, NetSuite rejects the export. + +This is a subsidiary alignment issue, not a token authentication or approval workflow issue. + +--- + +## How to Fix the NS0921 Export Error + +Follow the steps below to align subsidiary settings. + +--- + +## Confirm the Subsidiary Selected in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Confirm the **Subsidiary** selected for the NetSuite connection. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Confirm the selected subsidiary. + +Make note of the subsidiary listed. + +--- + +## Verify Subsidiary Alignment in NetSuite + +In NetSuite, confirm that all relevant records: + +- Are **Active**. +- Are assigned to the same subsidiary selected in the Workspace. + +Review the following: + +- The **Employee** record for the report creator or submitter. +- The **Vendor** record (if applicable). +- The **Expense category** used on the report. +- Any applied **Department, Class, Location, Project, or Customer** tags. +- The **Export account**. +- The **Default Payable Account** for the subsidiary. + +If any item is assigned to a different subsidiary: + +- Update the record so it matches the Workspace subsidiary. +- Click **Save**. + +--- + +## Sync the Workspace and Retry the Export + +After confirming all records are aligned: + +On web: + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. + +On mobile: + +1. Tap **Workspaces > Accounting**. +2. Tap the three-dot menu next to the NetSuite connection. +3. Tap **Sync Now**. + +Then retry exporting the report. + +If all records are aligned to the same subsidiary, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0921 Export Error Affect Only One Report? + +It affects any report that includes records tied to a different subsidiary than the one selected in the Workspace. + +## Do I Need NetSuite Admin Access to Fix the NS0921 Export Error? + +Yes. Updating subsidiary assignments for employees, vendors, categories, tags, or accounts requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the subsidiary alignment and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0988-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0988-Export-Error.md new file mode 100644 index 0000000000000..2ce24e4359914 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0988-Export-Error.md @@ -0,0 +1,103 @@ +--- +title: NS0988 Export Error in NetSuite Integration +description: Learn what the NS0988 export error means and how to restore or reactivate the CA-Zero tax group in NetSuite for mileage and per diem exports. +keywords: NS0988, CA-Zero tax group NetSuite, mileage tax export error NetSuite, per diem tax export error NetSuite, missing tax group NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0988 export error caused by a missing, renamed, or inactive CA-Zero tax group required for mileage and per diem exports. Does not cover general tax rate mapping issues. +--- + +# NS0988 Export Error in NetSuite Integration + +If you see the error: + +NS0988 Export Error: The 'CA-Zero' tax group is missing or renamed in NetSuite. This tax code is required for exporting mileage and per diem expenses. + +This means the required **CA-Zero** tax group is not available in NetSuite. + +The **CA-Zero** tax group is required when exporting mileage and per diem expenses where no tax is applied. + +--- + +## Why the NS0988 Export Error Happens in NetSuite + +The NS0988 error typically occurs when: + +- The **CA-Zero** tax group is missing in NetSuite. +- The tax group was renamed. +- The tax group is inactive. +- You are exporting **mileage** or **per diem** expenses that require a zero-tax group. + +NetSuite requires the specific **CA-Zero** tax group to process zero-tax transactions correctly. + +If it cannot find the tax group, the export fails. + +This is a required tax group configuration issue, not a general tax rate mapping issue. + +--- + +## How to Fix the NS0988 Export Error + +Follow the steps below to restore or reactivate the CA-Zero tax group. + +--- + +## Confirm the CA-Zero Tax Group in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Accounting > Tax Groups**. +3. Locate the tax group named **CA-Zero**. +4. Confirm that it: + - Exists. + - Is spelled exactly **CA-Zero**. + - Is marked as **Active**. + +If the tax group was renamed: + +- Rename it back to **CA-Zero**. + +If it is inactive: + +- Reactivate the tax group. + +Click **Save** after making any changes. + +--- + +## Sync the Workspace and Retry the Export + +After confirming the tax group: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If the **CA-Zero** tax group exists and is active, the export should complete successfully. + +--- + +# FAQ + +## Does the NS0988 Export Error Affect Only Mileage and Per Diem Expenses? + +Yes. The **CA-Zero** tax group is specifically required for exporting zero-tax mileage and per diem expenses. + +## Do I Need NetSuite Admin Access to Fix the NS0988 Export Error? + +Yes. Creating, renaming, or reactivating tax groups in NetSuite requires administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Restoring or reactivating the **CA-Zero** tax group and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0994-Export-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0994-Export-Error.md new file mode 100644 index 0000000000000..b4d645aa01523 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Export-Errors/NS0994-Export-Error.md @@ -0,0 +1,93 @@ +--- +title: NS0994 Export Error in NetSuite Integration +description: Learn what the NS0994 export error means and how to update company card export settings to use a valid vendor instead of Default. +keywords: NS0994, NetSuite enter value for entity, company card export vendor error, Default card vendor not accepted NetSuite, Domain Company Cards export error, Expensify NetSuite integration, Domain Admin +internalScope: Audience is Domain Admins and Workspace Admins using the NetSuite integration with company cards. Covers resolving the NS0994 export error caused by invalid default company card export vendor settings. Does not cover employee or vendor email mismatch issues. +--- + +# NS0994 Export Error in NetSuite Integration + +If you see the error: + +NS0994 Export Error: Enter value for 'entity'. Please confirm the associated vendor record includes the 'name' field. + +This means the vendor or export account selected for the company card is not valid in NetSuite. + +This commonly happens when the company card is set to **Default** instead of a specific vendor or card account. + +--- + +## Why the NS0994 Export Error Happens in NetSuite + +The NS0994 error typically occurs when: + +- The company card export setting is set to **Default**. +- No specific vendor (entity) is selected for company card exports. +- The selected vendor record is incomplete or missing required fields such as **Name**. +- NetSuite requires a valid vendor (entity) for the transaction. + +NetSuite cannot process company card transactions without a valid vendor reference. + +This is a company card export configuration issue, not an employee or vendor email mismatch issue. + +--- + +## How to Fix the NS0994 Export Error + +Follow the steps below to update the company card export settings. + +--- + +## Update Company Card Export Settings in Domain Settings + +1. Go to **Settings > Domains**. +2. Select your Domain. +3. Click **Company Cards**. +4. Locate the card associated with the report. +5. Click **Edit Export** to the right of the card. +6. In the dropdown, select a specific **NetSuite vendor** or **card account** instead of **Default**. +7. Click **Save**. + +Do not leave the company card export setting set to **Default**. + +--- + +## Sync the Workspace and Retry the Export + +After updating the company card export mapping: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the report. + +If a valid vendor or card account is selected, the export should complete successfully. + +--- + +# FAQ + +## Can I Leave the Company Card Export Set to Default? + +No. A specific vendor or card account must be selected for company card exports to work correctly. + +## Do I Need Domain Admin Access to Fix the NS0994 Export Error? + +Yes. Updating company card export settings requires Domain Admin permissions. + +## Does This Error Affect Only Company Card Transactions? + +Yes. This error applies specifically to company card exports that require a valid vendor (entity). diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/NetSuite-FAQ.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/NetSuite-FAQ.md new file mode 100644 index 0000000000000..129d2c16fd582 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/NetSuite-FAQ.md @@ -0,0 +1,212 @@ +--- +title: NetSuite FAQ +description: Learn how to resolve common NetSuite export issues, approval mismatches, permission errors, and connection problems in Expensify. +keywords: NetSuite export not working, report not exporting automatically, manually export report NetSuite, disconnect NetSuite, accounting approved vs paid in full, pending approval NetSuite, default payable account NetSuite, Expensify NetSuite troubleshooting +internalScope: Audience is Workspace Admins and Domain Admins using the NetSuite integration. Covers common NetSuite export issues, approval settings, and connection troubleshooting. Does not cover individual NetSuite error codes. +--- + +# NetSuite FAQ + +--- + +# Why Is My Report Not Automatically Exporting to NetSuite? + +An error is preventing the report from exporting automatically. + +You can find the error in several places: + +- The preferred exporter (set in Expensify configurations) will receive an email with error details. +- The error appears in the **report comments** section. +- Reports with errors will not automatically export until the issue is resolved. + +## How to Resolve Automatic Export Failures + +1. Open the report in Expensify. +2. Review the error message in the comments. +3. Make the required corrections. +4. A Workspace Admin can manually export the report once fixed. + +--- + +# Why Am I Unable to Manually Export a Report to NetSuite? + +Only reports in the following statuses can be exported: + +- **Approved** +- **Done** +- **Paid** + +If the report is in **Draft**, selecting Export may load an empty screen. + +## How to Resolve Manual Export Issues + +1. Submit the report if it is in **Draft**. +2. Have an approver approve it if it is **Outstanding**. +3. Once fully approved, a Workspace Admin can export it. + +--- + +# How Do I Disconnect the NetSuite Connection? + +On web: + +1. Go to the **navigation tabs on the left** and select **Workspaces**. +2. Select your Workspace. +3. Select **Accounting**. +4. Click the **three-dot icon** next to the NetSuite connection. +5. Click **Disconnect**. +6. Confirm the disconnection. + +Note: Disconnecting clears all imported options from Expensify. + +--- + +# Why Am I Seeing “You Do Not Have Permissions to Set a Value for Element…” Errors? + +This typically means a required field in NetSuite is hidden or restricted. + +## How to Fix Field Permission Errors + +1. In NetSuite, go to **Customization > Forms > Transaction Forms**. +2. Edit the preferred export form. +3. Locate the field mentioned in the error. +4. Ensure the field is marked as **Show**. +5. Save the form. +6. Sync the connection in Expensify and retry export. + +--- + +# What If I’ve Made All Changes and Still See the Error? + +If errors persist: + +- Confirm your **Expensify Connect bundle** is up to date in NetSuite. +- Review **Customization > Workflows** in NetSuite for blockers. +- Ask your NetSuite admin to confirm no custom scripts are interfering. + +--- + +# Why Are Reports Exporting as “Accounting Approved” Instead of “Paid in Full”? + +This typically happens due to: + +- Missing **Location**, **Class**, or **Department** on the Bill Payment form +- Incorrect Workspace configuration in Expensify + +## How to Fix Missing Classifications + +In NetSuite: + +1. Go to **Customization > Forms > Transaction Forms**. +2. Locate the preferred **Bill Payment** form. +3. Click **Edit** or **Customize**. +4. Under **Screen Fields > Main**, enable **Show** for: + - Department + - Class + - Location +5. Save. + +## How to Fix Workspace Settings + +In Expensify: + +1. Go to **Workspaces > [Workspace Name] > Accounting > Advanced**. +2. Confirm: + - **Sync Reimbursed Reports** is enabled with a payment account selected. + - **Journal Entry Approval Level** is set to **Approved for Posting**. + - The **A/P Approval Account** matches the account used for bill payments. + +To verify the A/P account: + +1. Open the bill or expense report. +2. Click **Make Payment**. +3. Confirm the account matches the setting in Expensify. + +--- + +# Why Are Reports Exporting as Pending Approval? + +If reports export as **Pending Approval**, adjust NetSuite approval settings. + +## For Journal Entries or Vendor Bills + +In NetSuite: + +1. Go to **Setup > Accounting > Accounting Preferences**. +2. Under the **General** tab, uncheck **Require Approvals** for journal entries. +3. Under the **Approval Routing** tab, disable approval for journal entries/vendor bills. + +Note: This affects all journal entries, not just Expensify reports. + +## For Expense Reports + +1. Go to **Setup > Company > Enable Features**. +2. Under the **Employee** tab, uncheck **Approval Routing**. + +Note: This also affects purchase orders. + +--- + +# “Invite Employees & Set Approval Workflow” Is Enabled — Why Aren’t NetSuite Approvers Updating? + +This setting does not overwrite manual changes to the approval table. + +If an employee was added before enabling this setting, their approver will not automatically update. + +## How to Fix Approver Sync Issues + +Option 1: + +1. Go to **Workspaces > [Workspace Name] > Members**. +2. Remove the employee. +3. Go to **Workspaces > [Workspace Name] > Accounting**. +4. Click the **three-dot icon**. +5. Click **Sync now**. +6. Re-import the employee and approver. + +Option 2: + +- Manually update the employee’s approver under **Workspaces > [Workspace Name] > Members**. + +--- + +# How to Change the Default Payable Account for Reimbursable Expenses in NetSuite + +## For OneWorld Accounts + +1. Go to **Setup > Company > Subsidiaries**. +2. Click **Edit** next to the subsidiary. +3. Under **Preferences**, update **Default Payable Account for Expense Reports**. +4. Click **Save**. + +## For Non-OneWorld Accounts + +1. Go to **Setup > Accounting > Accounting Preferences**. +2. Under the **Time & Expenses** tab, update **Default Payable Account for Expense Reports**. +3. Click **Save**. + +--- + +# Why Is My Report Exporting as Accounting Approved Instead of Paid in Full? + +This may happen due to: + +- Missing classifications on the Bill Payment form +- Incorrect Expensify Workspace configuration + +Follow the steps above under the **Accounting Approved vs Paid in Full** section to correct the issue. + +--- + +# Why Is My Report Not Exporting Automatically Even After Fixing Errors? + +After resolving errors: + +1. Go to **Workspaces > [Workspace Name] > Accounting**. +2. Click the **three-dot icon** next to the NetSuite connection. +3. Click **Sync now**. +4. Manually export the corrected report. + +Automatic exports resume only after all blocking errors are cleared. + +--- diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0109-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0109-Sync-Error.md new file mode 100644 index 0000000000000..1a5f585f70f7a --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0109-Sync-Error.md @@ -0,0 +1,116 @@ +--- +title: NS0109 Sync Error in NetSuite Integration +description: Learn what the NS0109 sync error means and how to refresh or update your NetSuite admin credentials to restore syncing. +keywords: NS0109, NetSuite login failed, failed to login to NetSuite, NetSuite admin credentials, refresh NetSuite token, NetSuite sync error, NetSuite authentication error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0109 sync error caused by invalid or outdated NetSuite credentials. Does not cover full NetSuite integration setup or advanced NetSuite configuration. +--- + +# NS0109 Sync Error in NetSuite Integration + +If you see the error: + +NS0109 Sync Error: Failed to login to NetSuite. Please verify your admin credentials. + +This means the Workspace is unable to authenticate with NetSuite. + +When authentication fails, reports and data cannot sync between the Workspace and NetSuite. + +--- + +## Why the NS0109 Sync Error Happens in NetSuite + +The NS0109 error typically occurs when: + +- The NetSuite admin password was changed. +- The NetSuite access token was revoked or expired. +- The integration credentials were updated in NetSuite but not refreshed in the Workspace. +- The integration role permissions were modified. +- The account ID, token ID, or token secret is incorrect. + +When credentials are no longer valid, the Workspace cannot log in to NetSuite, and syncing fails. + +This is an authentication issue, not a mapping or configuration issue. + +--- + +## How to Fix the NS0109 Sync Error + +Follow the steps below to verify and refresh your NetSuite credentials. + +--- + +## Confirm the NetSuite Credentials + +1. Log in to NetSuite directly using the admin account. +2. Confirm: + - The account is active. + - The integration role still exists. + - The credentials match what is configured in the Workspace. +3. If the password was recently changed, prepare to update the connection. + +--- + +## Generate a New NetSuite Access Token (If Needed) + +If you are using token-based authentication: + +1. Log in to NetSuite as an administrator. +2. Navigate to **Setup > Users/Roles > Access Tokens**. +3. Create a new access token for the integration role. +4. Copy the: + - Token ID + - Token Secret +5. Update the credentials in the Workspace connection settings. + +Make sure the token is tied to the correct integration role. + +--- + +## Refresh the NetSuite Connection in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Edit the NetSuite connection. +5. Enter the updated credentials. +6. Click **Save**. +7. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Update the NetSuite credentials. +5. Tap **Save**. +6. Tap **Sync Now**. + +--- + +## Contact Concierge if the Error Persists + +If authentication continues to fail: + +- Reach out to **Concierge**. +- Include the full NS0109 error message. +- Confirm whether credentials or tokens were recently changed. + +Concierge can review the connection logs and help restore the integration. + +--- + +# FAQ + +## Does the NS0109 Sync Error Affect All Exports? + +Yes. If the Workspace cannot log in to NetSuite, all exports and sync activity will fail until authentication is restored. + +## Do I Need a NetSuite Admin to Fix the NS0109 Sync Error? + +Yes. Only a NetSuite admin (or someone with the correct integration role and permissions) can verify credentials or generate a new access token. + +## Do I Need to Reinstall the Integration? + +No. In most cases, updating the credentials or access token is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0123-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0123-Sync-Error.md new file mode 100644 index 0000000000000..2eaa38f4a727d --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0123-Sync-Error.md @@ -0,0 +1,90 @@ +--- +title: NS0123 Sync Error in NetSuite Integration +description: Learn what the NS0123 sync error means and how to enable the Expensify integration in NetSuite to restore syncing. +keywords: NS0123, NetSuite integration not enabled, Expensify integration NetSuite, enable Expensify in NetSuite, NetSuite sync error, Setup Integrations Manage Integrations NetSuite, Expensify NetSuite connection, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0123 sync error caused by the Expensify integration being disabled in NetSuite. Does not cover full NetSuite integration setup or credential troubleshooting. +--- + +# NS0123 Sync Error in NetSuite Integration + +If you see the error: + +NS0123 Sync Error: The Expensify integration is not enabled in NetSuite. Please enable it under Setup > Integrations > Manage Integrations in NetSuite. + +This means the Expensify integration is currently turned off in NetSuite. + +When the integration is not enabled, the Workspace cannot sync reports or data to NetSuite. + +--- + +## Why the NS0123 Sync Error Happens in NetSuite + +The NS0123 error typically occurs when: + +- The **Expensify Integration** was never enabled in NetSuite. +- The integration was disabled manually. +- Changes were made to NetSuite integration settings. +- A bundle update or role change affected the integration status. + +Until the integration is enabled again, all syncing between the Workspace and NetSuite will fail. + +This is an integration status issue, not a credential or mapping issue. + +--- + +## How to Enable the Expensify Integration in NetSuite + +Follow the steps below to enable the integration and restore syncing. + +--- + +## Enable the Expensify Integration in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Integrations > Manage Integrations**. +3. Locate **Expensify Integration** in the list. +4. Confirm the integration is enabled. +5. If it is disabled, enable it. +6. Click **Save**. + +Make sure the integration is fully enabled before leaving the page. + +--- + +## Sync the Workspace + +After enabling the integration in NetSuite: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Once the integration is enabled and synced, exports should resume normally. + +--- + +# FAQ + +## Does the NS0123 Sync Error Stop All Report Exports? + +Yes. If the Expensify integration is not enabled in NetSuite, all syncing and exports to NetSuite will fail until the integration is turned back on. + +## Do I Need NetSuite Admin Access to Fix the NS0123 Sync Error? + +Yes. Only someone with administrator permissions in NetSuite can enable integrations under **Setup > Integrations > Manage Integrations**. + +## Do I Need to Reconnect the Integration? + +No. In most cases, enabling the integration and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0196-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0196-Sync-Error.md new file mode 100644 index 0000000000000..37785639eea28 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0196-Sync-Error.md @@ -0,0 +1,116 @@ +--- +title: NS0196 Sync Error in NetSuite Integration +description: Learn what the NS0196 sync error means and how to fix required field and payment configuration issues in NetSuite that prevent expense reports from being marked as paid. +keywords: NS0196, NetSuite mark expense report as paid error, could not mark expense reports as paid NetSuite, Bill Payment form NetSuite required fields, payment account configuration NetSuite, Expensify NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0196 sync error caused by required field visibility and payment configuration issues in NetSuite. Does not cover bundle updates or token configuration issues. +--- + +# NS0196 Sync Error in NetSuite Integration + +If you see the error: + +NS0196 Sync Error: Could not mark expense reports as paid. + +This means NetSuite is preventing the payment status from updating. + +This typically happens because required fields in NetSuite are not properly configured, or a required payment account setting is missing. + +--- + +## Why the NS0196 Sync Error Happens in NetSuite + +The NS0196 error typically occurs when: + +- A required field on the **Bill Payment** form is hidden or mandatory but not populated. +- The payment account configured in the Workspace is incorrect or inactive. +- A default classification (such as **Department**) on the employee record conflicts with the payment transaction. +- The preferred Bill Payment form is misconfigured. + +If NetSuite cannot complete the payment transaction, it blocks the sync. + +This is a required field or payment configuration issue, not a bundle or token issue. + +--- + +## How to Fix the NS0196 Sync Error + +Follow the options below to identify and resolve the issue. + +--- + +## Confirm Payment Account Settings in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Confirm the correct **Payment Account** is selected. +6. Click **Save** if changes are made. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Confirm the correct payment account is selected. +6. Tap **Save**. + +Then: + +1. Go to **Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. + +Retry marking the report as paid. + +--- + +## Confirm Required Fields on the Bill Payment Form in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Forms > Transaction Forms**. +3. Locate the **Bill Payment** form marked as **Preferred**. +4. Click **Edit**. +5. Review fields under: + - **Screen Fields > Main** + - **Screen Fields > Apply** +6. Ensure required fields are visible and properly configured. +7. Remove unnecessary required fields if appropriate. +8. Click **Save**. + +Then return to the Workspace and select **Sync Now**, and retry. + +--- + +## Review Default Settings on the Employee Record + +1. In NetSuite, go to **Lists > Employees**. +2. Open the employee record associated with the report. +3. Review any default **Department**, **Class**, or **Location** settings. +4. Remove default values if they are not required. +5. Click **Save**. + +Then in the Workspace: + +1. Go to **Workspaces > Accounting**. +2. Click **Sync Now**. +3. Retry the payment sync. + +--- + +# FAQ + +## Does the NS0196 Sync Error Affect All Payments? + +It can. If required fields or payment settings are misconfigured in NetSuite, any report being marked as paid may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0196 Sync Error? + +Yes. Updating transaction forms, employee records, and required fields requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. Correcting the payment account or required field configuration and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0228-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0228-Sync-Error.md new file mode 100644 index 0000000000000..0ed73d3eab9aa --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0228-Sync-Error.md @@ -0,0 +1,115 @@ +--- +title: NS0228 Sync Error in NetSuite Integration +description: Learn what the NS0228 sync error means and how to assign the Expensify Integration role to a NetSuite user to restore category syncing. +keywords: NS0228, NetSuite ExpenseCategory permission error, Expensify Integration role not assigned to user, NetSuite sync error ExpenseCategory, NetSuite role not added to user, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0228 sync error caused by the Expensify Integration role not being assigned to a NetSuite user. Does not cover token formatting or bundle update issues. +--- + +# NS0228 Sync Error in NetSuite Integration + +If you see the error: + +NS0228 Sync Error: Permission error querying NetSuite for 'ExpenseCategory'. Please ensure the Expensify Integration Role has been added to a user in NetSuite. + +This means the **Expensify Integration role** is not properly assigned to a NetSuite user. + +Without the role assigned to a user, the Workspace cannot access **ExpenseCategory** records during sync. + +--- + +## Why the NS0228 Sync Error Happens in NetSuite + +The NS0228 error typically occurs when: + +- The **Expensify Integration role** exists in NetSuite but is not assigned to any user. +- The access token is tied to a user that does not have the Expensify Integration role. +- The user-role-token combination used for the integration is invalid. + +In NetSuite: + +- Roles must be assigned to a user to function. +- Access tokens are tied to both a **User** and a **Role**. +- If the role is not attached to a user, NetSuite returns permission errors when querying ExpenseCategory data. + +This is a role assignment issue, not a token formatting or bundle update issue. + +--- + +## How to Fix the NS0228 Sync Error + +Follow the steps below to confirm the role is assigned correctly. + +--- + +## Assign the Expensify Integration Role to a NetSuite User + +1. Log in to NetSuite as an administrator. +2. Go to **Lists > Employees** (or search for the user used for the integration). +3. Open the employee record used for the NetSuite connection. +4. Click **Edit**. +5. Select the **Access** tab. +6. Confirm the **Expensify Integration** role is listed under Roles. +7. If it is not listed: + - Add the **Expensify Integration** role. +8. Click **Save**. + +The user does not need to be a NetSuite Admin, but must have the permissions included in the Expensify Integration role. + +--- + +## Confirm the Access Token Is Linked to the Correct User and Role + +Access tokens in NetSuite are tied to both: + +- A specific **User** +- A specific **Role** + +Important: + +- A connection cannot be created using tokens tied to one role and later switched to another role. +- If the role or user was changed after creating the token, you may need to generate a new access token and update the connection in the Workspace. + +If needed: + +1. Go to **Setup > Users/Roles > Access Tokens**. +2. Generate a new token for the correct user and **Expensify Integration** role. +3. Update the credentials in the Workspace. +4. Save the connection. + +--- + +## Sync the Workspace + +After confirming the role assignment: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +# FAQ + +## Does the NS0228 Sync Error Affect Category Imports? + +Yes. If the Workspace cannot query **ExpenseCategory** records, categories will not import or sync properly. + +## Do I Need NetSuite Admin Access to Fix the NS0228 Sync Error? + +Yes. You must have permission to manage users and assign roles in NetSuite to resolve this issue. + +## Do I Need to Reinstall the Bundle? + +No. In most cases, assigning the Expensify Integration role to a user and syncing is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0318-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0318-Sync-Error.md new file mode 100644 index 0000000000000..8324613c27075 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0318-Sync-Error.md @@ -0,0 +1,115 @@ +--- +title: NS0318 Sync Error in NetSuite Integration +description: Learn what the NS0318 sync error means and how to update the Expensify Connect bundle in NetSuite when invoice exports fail. +keywords: NS0318, NetSuite permissions error, could not import items NetSuite, Expensify Connect bundle update, invoice export NetSuite error, SuiteBundler NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0318 sync error caused by an outdated Expensify Connect bundle during invoice exports. Does not cover general NetSuite credential errors or full integration setup. +--- + +# NS0318 Sync Error in NetSuite Integration + +If you see the error: + +NS0318 Sync Error: Could not import items due to permissions error. Please update your NetSuite bundle version. + +This usually means the **Expensify Connect bundle** in NetSuite is out of date. + +This error most commonly appears when exporting an **Invoice** from the Workspace to NetSuite. + +--- + +## Why the NS0318 Sync Error Happens in NetSuite + +The NS0318 error typically occurs when: + +- The **Expensify Connect bundle** in NetSuite is not updated to the latest version. +- You are exporting an **Invoice** (not an expense report). +- Permission mismatches exist between the integration role and the installed bundle version. + +An outdated bundle can prevent items from importing correctly into NetSuite during invoice exports. + +This is a bundle version issue, not a general credential or login issue. + +--- + +## How to Fix the NS0318 Sync Error + +Follow the steps below to confirm your export type and update the bundle. + +--- + +## Confirm You Are Exporting an Invoice + +1. Open the report. +2. Check the **Type** field. +3. Confirm whether it is: + - **Invoice**, or + - **Expense report** + +If exporting an **Expense report**: + +- Refresh the page. +- Confirm the Workspace sync completed successfully. +- Retry the export. + +If exporting an **Invoice**, continue below. + +--- + +## Update the Expensify Connect Bundle in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Click **Update**. +5. Install the latest version. +6. Confirm the update completes successfully. + +--- + +## Sync the Workspace and Retry the Export + +After updating the bundle: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Then retry exporting the invoice. + +--- + +## Reconfirm the NetSuite Connection if the Error Persists + +If the bundle is already updated and the error continues: + +1. Review your NetSuite connection settings. +2. Confirm the integration role and permissions are correctly configured. +3. If needed, reconnect the NetSuite integration. + +--- + +# FAQ + +## Does the NS0318 Sync Error Affect Expense Report Exports? + +No. This error is primarily related to invoice exports. + +## Do I Need NetSuite Admin Access to Update the Expensify Connect Bundle? + +Yes. Updating bundles in NetSuite requires administrator-level permissions. + +## Do I Need to Reinstall the Integration? + +No. Updating the bundle and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0384-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0384-Sync-Error.md new file mode 100644 index 0000000000000..4cac26ef1b294 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0384-Sync-Error.md @@ -0,0 +1,136 @@ +--- +title: NS0384 Sync Error in NetSuite Integration +description: Learn what the NS0384 sync error means and how to update NetSuite role and token permissions for Classifications to restore syncing. +keywords: NS0384, NetSuite Classification permission error, Expensify Integration role permissions, NetSuite access token permissions, Class Department Location sync error NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0384 sync error caused by missing Classification and token permissions on the Expensify Integration role. Does not cover bundle reinstall steps or general login errors. +--- + +# NS0384 Sync Error in NetSuite Integration + +If you see the error: + +NS0384 Sync Error: Permission error encountered when querying NetSuite for 'Classification'. Please confirm the token is assigned to the Expensify Integration role by viewing the 'Access Token' in NetSuite. + +This means the NetSuite access token does not have the required permissions to query **Classifications**. + +Without proper Classification access, the Workspace cannot sync **Class**, **Department**, **Location**, or related data. + +--- + +## Why the NS0384 Sync Error Happens in NetSuite + +The NS0384 error typically occurs when: + +- The access token is not assigned to the **Expensify Integration** role. +- The Expensify Integration role does not have required **List** permissions. +- The role is missing required **Setup** permissions for token access. +- The token is tied to a different user or role than expected. + +Access tokens in NetSuite are tied to both a specific **User** and **Role**. If either is misconfigured, NetSuite blocks Classification queries. + +This is a role and token permission issue, not a bundle or general login issue. + +--- + +## How to Fix the NS0384 Sync Error + +Follow the steps below to confirm token assignment and role permissions. + +--- + +## Confirm the Access Token Is Assigned to the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Search for **Access Tokens**. +3. Click **View** next to the token used for the NetSuite connection. +4. Confirm: + - The **User** is correct. + - The **Role** is set to **Expensify Integration**. + +If the role is incorrect: + +- Generate a new token tied to the correct user and **Expensify Integration** role. +- Update the credentials in the Workspace connection settings. + +--- + +## Confirm Expensify Integration Role Permissions + +1. Go to **Setup > Users/Roles > Manage Roles**. +2. Select **Expensify Integration**. +3. Click **Edit**. +4. Review the **Permissions** section. + +### Required List Permissions + +Confirm the following are set correctly: + +| Permission | Level | +|-----------------------------|--------| +| Accounts | Full | +| Classes | View | +| Currency | View | +| Customers | View | +| Departments | Full | +| Employees | Full | +| Expense Categories | View | +| Items | View | +| Locations | View | +| Projects | View | +| Subsidiaries | View | +| Vendors | Full | + +### Required Setup Permissions + +Confirm the following are set correctly: + +| Permission | Level | +|---------------------------------|--------| +| Access Token Management | Full | +| Log in using Access Tokens | Full | +| User Access Tokens | Full | +| SOAP Web Services | Full | +| Custom Record Types | Full | +| Deleted Records | Full | + +Click **Save** after making any updates. + +--- + +## Sync the Workspace + +After confirming role and token settings: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync after confirming all permissions match the required settings. + +--- + +# FAQ + +## Does the NS0384 Sync Error Affect Category or Tag Imports? + +Yes. If Classification permissions are restricted, **Class**, **Department**, **Location**, and related data will fail to sync. + +## Do I Need NetSuite Admin Access to Fix the NS0384 Sync Error? + +Yes. You must have administrator permissions to manage roles and update List and Setup permissions in NetSuite. + +## Do I Need to Reinstall the Bundle? + +No. In most cases, correcting the token assignment and role permissions is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0394-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0394-Sync-Error.md new file mode 100644 index 0000000000000..0623c96af2890 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0394-Sync-Error.md @@ -0,0 +1,108 @@ +--- +title: NS0394 Sync Error in NetSuite Integration +description: Learn what the NS0394 sync error means and how to configure an Accounts Payable account in the Workspace to mark NetSuite expense reports as paid. +keywords: NS0394, NetSuite A/P approval account error, Accounts Payable account not set NetSuite, mark expense report as paid NetSuite, Sync Reimbursed Reports Workspace, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0394 sync error caused by missing Accounts Payable configuration in the Workspace. Does not cover token permissions or bundle configuration issues. +--- + +# NS0394 Sync Error in NetSuite Integration + +If you see the error: + +NS0394 Sync Error: Expensify couldn’t mark NetSuite Expense Report ID [XXXXX] as paid because the A/P approval account isn’t set. + +This means an **Accounts Payable (A/P) account** has not been configured in the Workspace. + +Without an A/P account selected, the Workspace cannot mark reimbursed expense reports as paid in NetSuite. + +--- + +## Why the NS0394 Sync Error Happens in NetSuite + +The NS0394 error typically occurs when: + +- No **Accounts Payable** account is selected under the NetSuite accounting settings in the Workspace. +- The **Sync Reimbursed Reports** setting is enabled but does not have an A/P account assigned. +- The selected A/P account was deleted or made inactive in NetSuite. + +The **Sync Reimbursed Reports** feature requires a valid Accounts Payable account to update payment status in NetSuite. + +This is a payment configuration issue, not a token or bundle issue. + +--- + +## How to Fix the NS0394 Sync Error + +Follow the steps below to configure an Accounts Payable account. + +--- + +## Select an Accounts Payable Account in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Locate **Sync Reimbursed Reports**. +6. Select an **Accounts Payable** account from the dropdown. +7. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Locate **Sync Reimbursed Reports**. +6. Select an **Accounts Payable** account. +7. Tap **Save**. + +--- + +## Create an Accounts Payable Account in NetSuite if None Are Available + +If no Accounts Payable accounts appear in the dropdown: + +1. Log in to NetSuite as an administrator. +2. Create a new account with type **Accounts Payable**. +3. Click **Save**. + +Then return to the Workspace: + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. + +After the sync completes: + +1. Go back to **Accounting > Advanced**. +2. Select the newly available **Accounts Payable** account. +3. Click **Save**. + +--- + +## Retry the Payment Sync + +1. Return to **Accounting**. +2. Click **Sync Now**. +3. Confirm the reimbursed report is marked as paid in NetSuite. + +If a valid A/P account is selected, the sync should complete successfully. + +--- + +# FAQ + +## Does the NS0394 Sync Error Affect All Reimbursed Reports? + +Yes. Until an Accounts Payable account is selected, the Workspace cannot mark reimbursed reports as paid in NetSuite. + +## Do I Need NetSuite Admin Access to Fix the NS0394 Sync Error? + +You may need administrator permissions in NetSuite to create a new Accounts Payable account if one does not already exist. + +## Do I Need to Reconnect the Integration? + +No. Selecting a valid Accounts Payable account and running **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0430-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0430-Sync-Error.md new file mode 100644 index 0000000000000..98360f6182017 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0430-Sync-Error.md @@ -0,0 +1,101 @@ +--- +title: NS0430 Sync Error in NetSuite Integration +description: Learn what the NS0430 sync error means and how to enable Projects (Jobs) in the Workspace to restore NetSuite syncing. +keywords: NS0430, NetSuite Job permission error, enable Projects Jobs Workspace, Jobs not enabled NetSuite sync, Projects Jobs toggle Workspace, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0430 sync error caused by Projects (Jobs) not being enabled in the Workspace. Does not cover token permissions or bundle configuration issues. +--- + +# NS0430 Sync Error in NetSuite Integration + +If you see the error: + +NS0430 Sync Error: Permission error querying NetSuite for 'Job'. Please ensure 'Projects'/'Jobs' have been enabled in Expensify configurations. + +This means **Projects (Jobs)** are not enabled in your Workspace settings. + +When Projects (Jobs) are not enabled, the Workspace cannot query Job data from NetSuite during sync. + +--- + +## Why the NS0430 Sync Error Happens in NetSuite + +The NS0430 error typically occurs when: + +- NetSuite is configured to use **Projects (Jobs)**. +- The Workspace is not configured to import or map Projects (Jobs). +- The integration attempts to query Job records but the feature is disabled in the Workspace. + +If Projects (Jobs) are not enabled, the sync will fail when querying Job records. + +This is a Workspace configuration issue, not a token permission or bundle configuration issue. + +--- + +## How to Fix the NS0430 Sync Error + +Follow the steps below to enable Projects (Jobs) in the Workspace. + +--- + +## Enable Projects (Jobs) in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Coding**. +5. Enable the toggle for **Projects (Jobs)**. +6. Choose the import type: + - **Tag (line-item level)**, or + - **Report field (header level)**. +7. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Coding**. +5. Enable **Projects (Jobs)**. +6. Select the import type: + - **Tag (line-item level)**, or + - **Report field (header level)**. +7. Tap **Save**. + +--- + +## Sync the Workspace and Retry + +After enabling Projects (Jobs): + +On web: + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. + +On mobile: + +1. Tap **Workspaces > Accounting**. +2. Tap the three-dot menu next to the NetSuite connection. +3. Tap **Sync Now**. + +Retry the sync or export after the process completes. + +--- + +# FAQ + +## What’s the Difference Between Tag and Report Field for Projects (Jobs)? + +- **Tag (line-item level)** allows different Projects (Jobs) to be applied to individual expenses within a report. +- **Report field (header level)** applies one Project (Job) to the entire report. + +## Do I Need NetSuite Admin Access to Fix the NS0430 Sync Error? + +No. You only need Workspace Admin access to enable Projects (Jobs) in the Workspace settings. + +## Do I Need to Reconnect the Integration? + +No. Enabling Projects (Jobs) and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0469-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0469-Sync-Error.md new file mode 100644 index 0000000000000..94eedb828cec3 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0469-Sync-Error.md @@ -0,0 +1,101 @@ +--- +title: NS0469 Sync Error in NetSuite Integration +description: Learn what the NS0469 sync error means and how to enable Multi-Currency and update role permissions in NetSuite to restore syncing. +keywords: NS0469, NetSuite currency sync error, enable Multi-Currency NetSuite OneWorld, Expensify Integration role Currency permission, NetSuite sync error Currency, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0469 sync error caused by Multi-Currency being disabled or missing Currency permissions in NetSuite OneWorld accounts. Does not cover token formatting or bundle update issues. +--- + +# NS0469 Sync Error in NetSuite Integration + +If you see the error: + +NS0469 Sync Error: Unable to query NetSuite for 'Currency'. Please enable 'Multi-Currency' in OneWorld account in NetSuite to resolve. + +This means the Workspace cannot access Currency records in NetSuite. + +In most cases, **Multi-Currency** is not enabled in your NetSuite OneWorld account, or the integration role does not have permission to view Currency records. + +--- + +## Why the NS0469 Sync Error Happens in NetSuite + +The NS0469 error typically occurs when: + +- You are using a **NetSuite OneWorld** account. +- The **Multi-Currency** feature is not enabled. +- The **Expensify Integration** role does not have permission to view Currency records. + +Currency access is required for the NetSuite integration to sync properly. + +Without Multi-Currency enabled or proper role permissions, NetSuite blocks Currency queries during sync. + +This is a feature and role permission issue, not a token formatting or bundle issue. + +--- + +## How to Fix the NS0469 Sync Error + +Follow the steps below to enable Multi-Currency and confirm role permissions. + +--- + +## Enable Multi-Currency in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Company > Enable Features**. +3. Open the **Company** tab. +4. Enable **Multi-Currency**. +5. Click **Save**. + +If Multi-Currency is already enabled, proceed to the next step. + +--- + +## Confirm Currency Permissions on the Expensify Integration Role + +1. Go to **Setup > Users/Roles > Manage Roles**. +2. Select **Expensify Integration**. +3. Click **Edit**. +4. Scroll to **Permissions > Lists**. +5. Confirm **Currency** is set to **View**. +6. Click **Save** if updates were made. + +--- + +## Sync the Workspace and Retry + +After enabling Multi-Currency and confirming role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync once the process completes. + +--- + +# FAQ + +## Does the NS0469 Sync Error Affect All Exports? + +Yes. If the Workspace cannot query Currency records, syncing and exports to NetSuite will fail. + +## Do I Need NetSuite Admin Access to Fix the NS0469 Sync Error? + +Yes. Enabling Multi-Currency and updating role permissions requires NetSuite administrator access. + +## Do I Need to Reconnect the Integration? + +No. Enabling Multi-Currency, confirming Currency permissions, and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0521-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0521-Sync-Error.md new file mode 100644 index 0000000000000..4555d87b59a84 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0521-Sync-Error.md @@ -0,0 +1,124 @@ +--- +title: NS0521 Sync Error in NetSuite Integration +description: Learn what the NS0521 sync error means and how to fix subsidiary permission issues in OneWorld and Non-OneWorld NetSuite accounts. +keywords: NS0521, NetSuite subsidiary permission error, OneWorld NetSuite subsidiary access, Non-OneWorld Expensify Connect bundle issue, Expensify Integration role subsidiary permissions, NetSuite sync error Subsidiary, Expensify NetSuite integration, Workspace Admin +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 + +If you see the error: + +NS0521 Sync Error: Permission error querying NetSuite for 'Subsidiary'. + +This means the NetSuite integration does not have proper access to **Subsidiary** records. + +NetSuite blocks the sync when the connected role cannot query subsidiary data. + +--- + +## Why the NS0521 Sync Error Happens in NetSuite + +The NS0521 error typically occurs due to subsidiary permission restrictions in NetSuite. + +The resolution depends on whether your NetSuite account is: + +- A **OneWorld** account, or +- A **Non-OneWorld** account + +If the integration role or bundle is misconfigured, NetSuite prevents the Workspace from accessing subsidiary data. + +This is a subsidiary permission configuration issue, not a token formatting or login issue. + +--- + +# How to Fix the NS0521 Sync Error in OneWorld Accounts + +In **OneWorld** accounts, the **Expensify Integration** role must have access to all required subsidiaries. + +## Update Subsidiary Access on the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. In the **Subsidiary Restrictions** section: + - Select **All**, or + - Select **Selected** and highlight all required subsidiaries. +6. Click **Save**. + +--- + +## Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync after the update. + +--- + +# How to Fix the NS0521 Sync Error in Non-OneWorld Accounts + +In **Non-OneWorld** accounts, this issue is typically caused by the **Expensify Connect bundle** configuration. + +## Reinstall the Expensify Connect Bundle + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > SuiteBundler > Search & Install Bundles > List**. +3. Locate the **Expensify Connect bundle**. +4. Uninstall the bundle. +5. Delete the **Expensify Integration** role. +6. Reinstall the Expensify Connect bundle. +7. During installation, do not modify the default role permissions. + +--- + +## Sync the Workspace + +After reinstalling: + +On web: + +1. Go to **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +# FAQ + +## Does the NS0521 Sync Error Affect All Workspaces? + +It can. If the NetSuite role or bundle configuration is incorrect, all Workspaces connected to that NetSuite account may experience syncing issues. + +## Do I Need NetSuite Admin Access to Fix the NS0521 Sync Error? + +Yes. Updating roles, managing subsidiary access, and reinstalling bundles require NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +No. In most cases, correcting subsidiary access or reinstalling the bundle and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0565-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0565-Sync-Error.md new file mode 100644 index 0000000000000..be2c9e1a0aed5 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0565-Sync-Error.md @@ -0,0 +1,119 @@ +--- +title: NS0565 Sync Error in NetSuite Integration +description: Learn what the NS0565 sync error means and how to assign the correct Expensify Integration role and permissions to your NetSuite access token. +keywords: NS0565, NetSuite access token role error, Expensify Integration role NetSuite, NetSuite Account records permission error, Access Token Management NetSuite, User Access Tokens NetSuite, NetSuite sync error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0565 sync error caused by incorrect NetSuite access token role assignment or missing Account record permissions. Does not cover bundle updates or general NetSuite login credential issues. +--- + +# NS0565 Sync Error in NetSuite Integration + +If you see the error: + +NS0565 Sync Error: The role linked to your NetSuite access token doesn’t have permission to access Account records. Please confirm the token is assigned to the Expensify Integration role by viewing the 'Access Token' in NetSuite. + +This means the NetSuite access token is tied to a role that does not have permission to access **Account** records. + +When the access token is linked to the wrong role or a role missing required permissions, syncing and exports will fail. + +--- + +## Why the NS0565 Sync Error Happens in NetSuite + +The NS0565 error typically occurs when: + +- The **NetSuite Access Token** is assigned to the wrong role. +- The token is not linked to the **Expensify Integration** role. +- The assigned role does not have permission to access **Account** records. +- Global permissions on the user override the role permissions. + +Access tokens in NetSuite are tied to both a specific **User** and **Role**. If the role does not include the required permissions, NetSuite blocks the sync. + +This is a token and role configuration issue, not a bundle update or general login issue. + +--- + +## How to Fix the NS0565 Sync Error + +Follow the steps below to confirm the correct role and permissions are configured. + +--- + +## Confirm the Role Assigned to the NetSuite Access Token + +1. Log in to NetSuite as an administrator. +2. Search for **Access Tokens**. +3. Locate the token used for the Workspace connection. +4. Click **View** next to the token. +5. Confirm the **Role** listed is **Expensify Integration**. + +If the token is tied to a different role: + +- Generate a new token using the correct **User** and **Expensify Integration** role. +- Update the credentials in the Workspace. + +--- + +## Assign the Expensify Integration Role to the User + +If the **Expensify Integration** role is not assigned to the user: + +1. Go to **Lists > Employees**. +2. Open the employee record used for the NetSuite connection. +3. Click **Edit**. +4. Select the **Access** tab. +5. Add the **Expensify Integration** role. +6. Click **Save**. + +--- + +## Review Global Permissions on the Employee Record + +After assigning the correct role: + +1. Open the employee record. +2. Review the **Global Permissions** section. +3. Confirm: + - **Web Services** permissions are either removed or set to **Full**. + - **Access Tokens** permissions are either removed or set to **Full**. + +Restricted global permissions can override role permissions and cause this error. + +--- + +## Sync the Workspace and Retry + +After confirming role and token configuration: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync once complete. + +--- + +# FAQ + +## Does the NS0565 Sync Error Affect All Exports? + +Yes. If the access token role does not have permission to access Account records, syncing and exports will fail. + +## Do I Need NetSuite Admin Access to Fix the NS0565 Sync Error? + +Yes. You must have administrator permissions to manage roles, users, and access tokens in NetSuite. + +## Do I Need to Reconnect the Integration? + +Only if the access token was created with the wrong role. In that case, generate a new token and update the connection. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0593-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0593-Sync-Error.md new file mode 100644 index 0000000000000..518d73cb95601 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0593-Sync-Error.md @@ -0,0 +1,95 @@ +--- +title: NS0593 Sync Error in NetSuite Integration +description: Learn what the NS0593 sync error means and how to resolve NetSuite concurrency limits when syncing from the Workspace. +keywords: NS0593, NetSuite concurrency limit error, too many open connections NetSuite, NetSuite sync error concurrency, NetSuite connection limit 5 connections, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0593 sync error caused by NetSuite concurrency limits. Does not cover credential issues or bundle configuration. +--- + +# NS0593 Sync Error in NetSuite Integration + +If you see the error: + +NS0593 Sync Error: There are too many open connections to the NetSuite company at this moment. Please try again in a few minutes. + +This means NetSuite has reached its maximum allowed number of simultaneous connections. + +This error is temporary and related to NetSuite’s concurrency restrictions. + +--- + +## Why the NS0593 Sync Error Happens in NetSuite + +The NS0593 error occurs when there are more than **five active connections** to your NetSuite account at the same time. + +NetSuite limits concurrency to five active sessions to prevent system overload. + +The limit can be reached if: + +- Multiple members are exporting reports at the same time. +- Multiple Workspaces are syncing simultaneously. +- Other third-party integrations are connected to NetSuite. +- Background integration jobs are still running. +- A previous sync did not close cleanly. + +When the connection limit is exceeded, NetSuite temporarily blocks new sync attempts. + +This is a NetSuite system limitation, not a configuration issue in the Workspace. + +--- + +## How to Fix the NS0593 Sync Error + +No configuration changes are required. + +Follow the steps below to resolve the error. + +--- + +## Wait and Retry the Sync + +1. Wait a few minutes to allow existing NetSuite connections to close. +2. Retry syncing the Workspace. + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +## Reduce Simultaneous Exports + +If the error continues: + +- Ask other members to pause exports temporarily. +- Avoid running multiple syncs at once. +- Confirm that no other integrations are actively syncing with NetSuite. + +Once active connections drop below the limit, syncing will resume normally. + +--- + +# FAQ + +## Does the NS0593 Sync Error Mean Something Is Broken? + +No. This is a temporary concurrency limit imposed by NetSuite and does not indicate a configuration issue. + +## How Long Should I Wait Before Retrying? + +Waiting a few minutes is typically sufficient. Once existing connections close, syncing should succeed. + +## Do I Need to Reconnect the Integration? + +No. Simply retry the sync after the connection count drops. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0634-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0634-Sync-Error.md new file mode 100644 index 0000000000000..63e2ed9dbcd3f --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0634-Sync-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0634 Sync Error in NetSuite Integration +description: Learn what the NS0634 sync error means and how to update the Expensify Integration role to allow access to Employee records in NetSuite. +keywords: NS0634, NetSuite Employee permission error, Expensify Integration role Employees permission, NetSuite sync error Employee, Employee record permission NetSuite, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0634 sync error caused by missing Employee record permissions on the Expensify Integration role. Does not cover token formatting or bundle update issues. +--- + +# NS0634 Sync Error in NetSuite Integration + +If you see the error: + +NS0634 Sync Error: Permission error querying NetSuite for 'Employee'. Please ensure the connected role has access to this record type in NetSuite. + +This means the NetSuite role used for the integration does not have access to **Employee** records. + +Without proper Employee permissions, the Workspace cannot sync employee data from NetSuite. + +--- + +## Why the NS0634 Sync Error Happens in NetSuite + +The NS0634 error typically occurs when: + +- The **Expensify Integration** role does not have sufficient permission to access **Employee** records. +- The **Employees** permission under Lists is set to **View**, restricted, or not enabled. +- The access token is tied to a role that lacks Employee permissions. + +If the role cannot access Employee records, NetSuite blocks the query during sync. + +This is a role permission issue, not a token formatting or bundle update issue. + +--- + +## How to Fix the NS0634 Sync Error + +Follow the steps below to update the role permissions in NetSuite. + +--- + +## Update Employee Permissions on the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to **Permissions > Lists**. +6. Locate **Employees**. +7. Set the permission level to **Full**. +8. Click **Save**. + +Confirm the change is saved before proceeding. + +--- + +## Sync the Workspace and Retry + +After updating the permission: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync after it completes. + +--- + +# FAQ + +## Does the NS0634 Sync Error Affect Employee Imports? + +Yes. If the role does not have permission to access Employee records, employee data will not sync properly. + +## Do I Need NetSuite Admin Access to Fix the NS0634 Sync Error? + +Yes. Updating role permissions in NetSuite requires administrator-level access. + +## Do I Need to Reconnect the Integration? + +No. Updating the role permission and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0739-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0739-Sync-Error.md new file mode 100644 index 0000000000000..04ddc0fb3f984 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0739-Sync-Error.md @@ -0,0 +1,120 @@ +--- +title: NS0739 Sync Error in NetSuite Integration +description: Learn what the NS0739 sync error means and how to correct NetSuite token permissions and formatting issues to restore syncing. +keywords: NS0739, NetSuite token login error, unexpected error logging in with tokens NetSuite, SOAP Web Services permission NetSuite, Expensify Integration role token permissions, NetSuite Sandbox token format, NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0739 sync error caused by incorrect token permissions or formatting. Does not cover bundle updates or general NetSuite login credential errors. +--- + +# NS0739 Sync Error in NetSuite Integration + +If you see the error: + +NS0739 Sync Error: Unexpected error when logging in with tokens. + +This means NetSuite rejected the authentication attempt using access tokens. + +This error is usually caused by incorrect token permissions or formatting issues. + +--- + +## Why the NS0739 Sync Error Happens in NetSuite + +The NS0739 error typically occurs when: + +- The access token was created with incorrect permissions. +- The **Expensify Integration** role does not have required permissions. +- The **SOAP Web Services** permission is not set to **Full**. +- The token is formatted incorrectly, especially in a **Sandbox** environment. +- The token is tied to the wrong user or role. + +If the token configuration does not meet NetSuite’s requirements, the login attempt fails. + +This is a token and role configuration issue, not a bundle update or general login credential issue. + +--- + +## How to Fix the NS0739 Sync Error + +Follow the steps below to verify role permissions and token formatting. + +--- + +## Confirm SOAP Web Services Permission + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to **Permissions > Setup**. +6. Confirm **SOAP Web Services** is set to **Full**. +7. Click **Save** if changes are made. + +After updating the permission, return to the Workspace and retry the sync. + +--- + +## Confirm the Token Is Assigned to the Correct User and Role + +1. Go to **Setup > Users/Roles > Access Tokens**. +2. Locate the token used for the Workspace connection. +3. Confirm: + - The **User** is correct. + - The **Role** is **Expensify Integration**. +4. If needed, generate a new token tied to the correct user and role. +5. Update the connection credentials in the Workspace. + +--- + +## Confirm Sandbox Token Formatting (Sandbox Only) + +If you are connected to a **NetSuite Sandbox** environment, confirm the account ID is formatted correctly. + +Correct format example: +- `12345678_SB1` + +Incorrect format example: +- `12345678-sb1` + +Important: + +- Sandbox account IDs are case-sensitive. +- Use an underscore (`_`) before the sandbox identifier. +- Do not use a dash (`-`). + +After correcting the format, update the connection and retry the sync. + +--- + +## Sync the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +--- + +# FAQ + +## Does the NS0739 Sync Error Affect All Exports? + +Yes. If the Workspace cannot authenticate using NetSuite tokens, all syncing and exports will fail. + +## Do I Need NetSuite Admin Access to Fix the NS0739 Sync Error? + +Yes. You must have administrator permissions to edit roles, manage access tokens, and update permissions in NetSuite. + +## Do I Need to Reinstall the Integration? + +No. In most cases, correcting token permissions or formatting and selecting **Sync Now** is sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0783-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0783-Sync-Error.md new file mode 100644 index 0000000000000..1f2eee1cc169e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0783-Sync-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0783 Sync Error in NetSuite Integration +description: Learn what the NS0783 sync error means and how to correct the ScriptID format for Custom Records in NetSuite before syncing. +keywords: NS0783, NetSuite ScriptID error, incorrect ScriptID format NetSuite, CustomRecord ScriptID NetSuite, custcol format NetSuite, NetSuite custom field ID, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0783 sync error caused by incorrect ScriptID format for Custom Records or Custom Fields. Does not cover role permissions or token configuration issues. +--- + +# NS0783 Sync Error in NetSuite Integration + +If you see the error: + +NS0783 Sync Error: Incorrect ScriptID format for CustomRecord. Example of correct format — 'custcol123'. + +This means the **ScriptID** for a Custom Record or Custom Field in NetSuite is not formatted correctly. + +The Workspace must use the exact ScriptID format defined in NetSuite to sync custom records successfully. + +--- + +## Why the NS0783 Sync Error Happens in NetSuite + +The NS0783 error typically occurs when: + +- The ScriptID entered in the Workspace does not match the exact NetSuite ScriptID. +- The ScriptID uses an incorrect prefix. +- The ScriptID includes extra characters or incorrect formatting. +- Capitalization does not match NetSuite exactly. + +NetSuite ScriptIDs follow a strict naming pattern. Common examples include: + +- `custcol123` +- `custbody_example` +- `custrecord_example` + +If the ScriptID does not match NetSuite exactly, the sync will fail. + +This is a ScriptID formatting issue, not a role permission or token configuration issue. + +--- + +## How to Fix the NS0783 Sync Error + +Follow the steps below to confirm and correct the ScriptID. + +--- + +## Locate the Correct ScriptID in NetSuite + +1. Log in to NetSuite as an administrator. +2. Go to **Customization > Lists, Records, & Fields > Record Types**. +3. Click the linked record name. +4. Locate the **ID** field on the record page. +5. Copy the exact ScriptID shown. + +For Custom Fields: + +1. Go to **Customization > Lists, Records, & Fields > Transaction Body Fields** (or the relevant field type). +2. Open the custom field. +3. Locate the **ID** field. +4. Copy the exact ScriptID. + +Make sure the ScriptID matches exactly, including capitalization and structure. + +--- + +## Update the ScriptID in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Update the Custom Record or Custom Field ScriptID with the exact value from NetSuite. +5. Click **Save**. +6. Click the three-dot menu next to the NetSuite connection. +7. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Update the Custom Record ScriptID field. +5. Tap **Save**. +6. Tap the three-dot menu next to the NetSuite connection. +7. Tap **Sync Now**. + +Retry the sync after updating the ScriptID. + +--- + +# FAQ + +## Are ScriptIDs Case-Sensitive? + +Yes. ScriptIDs must match NetSuite exactly, including capitalization and formatting. + +## Does the NS0783 Sync Error Affect Only Custom Records? + +It can affect both **Custom Records** and **Custom Fields** if their ScriptIDs are entered incorrectly. + +## Do I Need NetSuite Admin Access to Fix the NS0783 Sync Error? + +Yes. You need permission to view Custom Records and Custom Fields in NetSuite to confirm the correct ScriptID. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0844-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0844-Sync-Error.md new file mode 100644 index 0000000000000..424a8f990542e --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0844-Sync-Error.md @@ -0,0 +1,104 @@ +--- +title: NS0844 Sync Error in NetSuite Integration +description: Learn what the NS0844 sync error means and how to update NetSuite access token role permissions to allow Vendor record access. +keywords: NS0844, NetSuite Vendor permission error, Expensify Integration role Vendors Full permission, NetSuite access token role Vendor access, NetSuite sync error Vendor, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0844 sync error caused by missing Vendor record permissions on the Expensify Integration role. Does not cover bundle updates or multi-currency issues. +--- + +# NS0844 Sync Error in NetSuite Integration + +If you see the error: + +NS0844 Sync Error: Permission error querying NetSuite for 'Vendor'. Please ensure the connected role has access to this record type in NetSuite. + +This means the NetSuite role linked to your access token does not have proper permission to access **Vendor** records. + +Without Vendor access, the Workspace cannot sync or export data that references vendors. + +--- + +## Why the NS0844 Sync Error Happens in NetSuite + +The NS0844 error typically occurs when: + +- The wrong role is assigned to the NetSuite access token. +- The **Expensify Integration** role does not have sufficient Vendor permissions. +- The access token is tied to a user-role combination without **Vendors** access. + +NetSuite access tokens are tied to both a specific **User** and **Role**. If the assigned role does not include Vendor permissions, NetSuite blocks the query. + +This is a role and token configuration issue, not a bundle update or multi-currency issue. + +--- + +## How to Fix the NS0844 Sync Error + +Follow the steps below to confirm the correct role and permissions. + +--- + +## Confirm the Access Token Is Assigned to the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Search for **Access Tokens**. +3. Click **View** next to the token used for the Workspace connection. +4. Confirm the **Role** is set to **Expensify Integration**. + +If the token is tied to a different role: + +- Generate a new token using the correct user and **Expensify Integration** role. +- Update the connection credentials in the Workspace. + +--- + +## Update Vendor Permissions on the Expensify Integration Role + +1. Go to **Setup > Users/Roles > Manage Roles**. +2. Select **Expensify Integration**. +3. Click **Edit**. +4. Scroll to **Permissions > Lists**. +5. Locate **Vendors**. +6. Set **Vendors** to **Full**. +7. Click **Save**. + +Confirm the permission level is saved. + +--- + +## Sync the Workspace and Retry + +After updating the role permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync or export after it completes. + +--- + +# FAQ + +## Does the NS0844 Sync Error Affect Invoice Exports? + +Yes. If Vendor permissions are restricted, invoice exports and other vendor-related transactions may fail. + +## Do I Need NetSuite Admin Access to Fix the NS0844 Sync Error? + +Yes. Updating role permissions and managing access tokens requires NetSuite administrator permissions. + +## Do I Need to Reconnect the Integration? + +Only if the access token was created using the wrong role. Otherwise, updating the role permissions and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0898-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0898-Sync-Error.md new file mode 100644 index 0000000000000..02428e6ef189d --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0898-Sync-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0898 Sync Error in NetSuite Integration +description: Learn what the NS0898 sync error means and how to align approval level settings between the Workspace and NetSuite. +keywords: NS0898, NetSuite approval settings error, incorrect approval level NetSuite, adjust approval level Workspace Accounting Advanced, NetSuite approval mismatch export error, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0898 sync error caused by mismatched approval level configuration between the Workspace and NetSuite. Does not cover token permissions or bundle update issues. +--- + +# NS0898 Sync Error in NetSuite Integration + +If you see the error: + +NS0898 Sync Error: Incorrect approval settings. Please adjust approval level in either NetSuite or Expensify configurations. + +This means the approval settings in the Workspace do not match your approval configuration in NetSuite. + +When approval levels are misaligned, NetSuite will block the export or sync. + +--- + +## Why the NS0898 Sync Error Happens in NetSuite + +The NS0898 error typically occurs when: + +- The approval level selected in the Workspace does not match NetSuite’s approval workflow. +- NetSuite requires a transaction to be **Approved for Posting**, but the Workspace is set to a lower approval level. +- The export type (Expense report, Vendor bill, or Journal entry) is configured with an incompatible approval status. + +If NetSuite expects a different approval state than what the Workspace sends, the sync fails. + +This is an approval configuration mismatch, not a token or bundle issue. + +--- + +## How to Fix the NS0898 Sync Error + +You need to align the approval level in the Workspace with your NetSuite approval workflow. + +--- + +## Update Approval Levels in the Workspace + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click **Advanced**. +5. Locate the approval level settings for: + - **Expense reports** + - **Vendor bills** + - **Journal entries** +6. Adjust the approval level so it matches what NetSuite requires. +7. Click **Save**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap **Advanced**. +5. Update the approval level for the relevant export type. +6. Tap **Save**. + +--- + +## Sync the Workspace and Retry + +After updating the approval level: + +1. Go to **Workspaces > Accounting**. +2. Click the three-dot menu next to the NetSuite connection. +3. Click **Sync Now**. +4. Retry the export. + +If the approval levels are aligned, the sync should complete successfully. + +--- + +# FAQ + +## Should I Update Approval Settings in NetSuite or the Workspace? + +You can update either side, but both systems must match. Most commonly, the adjustment is made in the Workspace under **Accounting > Advanced**. + +## Does the NS0898 Sync Error Affect All Export Types? + +It can. Any export type with mismatched approval settings may fail until the configuration is aligned. + +## Do I Need NetSuite Admin Access to Fix the NS0898 Sync Error? + +Not usually. You typically only need Workspace Admin access to update approval level settings. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0938-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0938-Sync-Error.md new file mode 100644 index 0000000000000..74d4c784d1be0 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0938-Sync-Error.md @@ -0,0 +1,91 @@ +--- +title: NS0938 Sync Error in NetSuite Integration +description: Learn what the NS0938 sync error means and how to update the Expensify Integration role to allow access to Custom Records in NetSuite. +keywords: NS0938, NetSuite CustomRecord permission error, Expensify Integration role Custom Record access, NetSuite role permissions Custom Record, NetSuite sync error CustomRecord, Expensify NetSuite integration, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0938 sync error caused by missing Custom Record permissions on the Expensify Integration role. Does not cover ScriptID formatting or bundle reinstall steps. +--- + +# NS0938 Sync Error in NetSuite Integration + +If you see the error: + +NS0938 Sync Error: Permission error querying NetSuite for 'CustomRecord'. Please ensure the connected role has access to this record type in NetSuite. + +This means the NetSuite role used for the integration does not have permission to access **Custom Records**. + +Without Custom Record access, the Workspace cannot query or sync custom data from NetSuite. + +--- + +## Why the NS0938 Sync Error Happens in NetSuite + +The NS0938 error typically occurs when: + +- The **Expensify Integration** role does not include permissions for **Custom Records**. +- The role does not have access to specific Custom Record Types required by your configuration. +- The access token is tied to a role missing Custom Record permissions. + +If the role cannot access Custom Records, NetSuite blocks the query during sync. + +This is a role permission issue, not a ScriptID formatting or bundle reinstall issue. + +--- + +## How to Fix the NS0938 Sync Error + +Follow the steps below to confirm Custom Record permissions are enabled. + +--- + +## Confirm Custom Record Permissions on the Expensify Integration Role + +1. Log in to NetSuite as an administrator. +2. Go to **Setup > Users/Roles > Manage Roles**. +3. Select **Expensify Integration**. +4. Click **Edit**. +5. Scroll to **Permissions**. +6. Confirm that the required **Custom Record Types** are listed. +7. Ensure the permission level is set to **View** or **Full**, depending on your configuration. +8. Click **Save**. + +If your configuration relies on specific Custom Record Types, confirm each required record type is included. + +--- + +## Sync the Workspace and Retry + +After updating permissions: + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Sync Now**. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Sync Now**. + +Retry the sync after it completes. + +--- + +# FAQ + +## Does the NS0938 Sync Error Affect Custom Fields? + +Yes. If Custom Record permissions are missing, any related custom fields or custom record mappings may fail to sync. + +## Do I Need NetSuite Admin Access to Fix the NS0938 Sync Error? + +Yes. Updating role permissions for Custom Records requires NetSuite administrator access. + +## Do I Need to Reconnect the Integration? + +No. Updating the role permissions and selecting **Sync Now** is typically sufficient. diff --git a/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0942-Sync-Error.md b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0942-Sync-Error.md new file mode 100644 index 0000000000000..06ce0fe112653 --- /dev/null +++ b/docs/articles/new-expensify/connections/netsuite/Troubleshooting/Sync-Errors/NS0942-Sync-Error.md @@ -0,0 +1,108 @@ +--- +title: NS0942 Sync Error in NetSuite Integration +description: Learn what the NS0942 sync error means and how to disconnect and reconnect the NetSuite integration after switching to a OneWorld account. +keywords: NS0942, NetSuite OneWorld error, Parent Company not found NetSuite, subsidiaries not importing NetSuite, disconnect NetSuite integration, reconnect NetSuite OneWorld, Expensify NetSuite sync error, Workspace Admin +internalScope: Audience is Workspace Admins using the NetSuite integration. Covers resolving the NS0942 sync error caused by switching from a non-OneWorld to a OneWorld NetSuite account. Does not cover bundle updates or token permission troubleshooting. +--- + +# NS0942 Sync Error in NetSuite Integration + +If you see the error: + +NS0942 Sync Error: 'Parent Company' not found for subsidiaries. Please disconnect and reconnect the NetSuite connection to import the subsidiaries. + +This means your NetSuite account type has changed. + +This error commonly appears when switching from a **non-OneWorld** NetSuite account to a **OneWorld** account after the connection was already established. + +--- + +## Why the NS0942 Sync Error Happens in NetSuite + +The NS0942 error typically occurs when: + +- Your NetSuite account was originally **non-OneWorld**. +- You upgraded or migrated to a **OneWorld** account. +- The existing NetSuite connection in the Workspace was not reconfigured after the change. + +OneWorld accounts use a **parent company and subsidiary structure**. If the integration was set up before this structure existed, subsidiaries will not import correctly. + +The integration must be disconnected and reconnected to refresh the account structure. + +This is an account structure change issue, not a bundle or token permission issue. + +--- + +## How to Fix the NS0942 Sync Error + +You will need to disconnect and reconnect the NetSuite integration in each affected Workspace. + +--- + +## Save Your Current Configuration + +Before disconnecting, save your current configuration: + +- Imported categories +- Imported tags +- Export settings +- Mapping settings +- Any custom configuration + +Taking screenshots is recommended, as disconnecting resets imported data. + +--- + +## Disconnect the NetSuite Connection + +On web: + +1. Go to the navigation tabs on the left and select **Workspaces**. +2. Select your Workspace. +3. Click **Accounting**. +4. Click the three-dot menu next to the NetSuite connection. +5. Click **Disconnect**. +6. Confirm the disconnection. +7. Refresh the page to confirm the connection is removed. + +On mobile: + +1. Tap the navigation tabs on the bottom and select **Workspaces**. +2. Select your Workspace. +3. Tap **Accounting**. +4. Tap the three-dot menu next to the NetSuite connection. +5. Tap **Disconnect**. +6. Confirm the disconnection. +7. Refresh the app. + +--- + +## Reconnect to NetSuite + +1. Click **Connect to NetSuite**. +2. Complete the full connection flow. +3. Confirm subsidiaries import successfully. + +Once reconnected, the parent company and subsidiaries should import correctly. + +--- + +## Repeat for Each Workspace + +If multiple Workspaces are connected to the same NetSuite account, repeat the disconnect and reconnect process in each Workspace. + +--- + +# FAQ + +## Will Disconnecting Remove My Configuration? + +Yes. Disconnecting resets the NetSuite connection and clears imported settings. Save your configuration before disconnecting. + +## Does the NS0942 Sync Error Fix Itself Automatically? + +No. You must manually disconnect and reconnect the integration after switching to a OneWorld account. + +## Do I Need NetSuite Admin Access to Fix This? + +Yes. Reconnecting requires NetSuite credentials with the appropriate integration role permissions. diff --git a/docs/articles/new-expensify/getting-started/How-to-Access-Expensify-Training.md b/docs/articles/new-expensify/getting-started/How-to-Access-Expensify-Training.md index 2c51da11e0d5c..bbd161d1c8d2f 100644 --- a/docs/articles/new-expensify/getting-started/How-to-Access-Expensify-Training.md +++ b/docs/articles/new-expensify/getting-started/How-to-Access-Expensify-Training.md @@ -28,19 +28,19 @@ Select the date and time that works best for you. Admins are encouraged to atten **Mondays – 23:00 UTC** -(3pm Monday PST / 12pm Tuesday NZ / 10am SYD / 7am MNL) +(4pm Monday PDT / 12pm Tuesday NZ / 10am SYD / 7am MNL) 👉 **[Register here](https://events.zoom.us/ev/AsNhZCGJb8qpCLyZC3uo6s3WuVrcCvxJK25CxoiTwKoKaTJZUuP9~AnwAZJQZuLuVfZvrvX6QRPlgfkVBTBIYRm_MuWWV3HfCDPlrxANJU0sjCw)** **Tuesdays – 18:00 UTC** -(10am Tuesday PST / 1pm EST / 6pm GMT) +(11am Tuesday PDT / 2pm EDT / 6pm GMT) 👉 **[Register here](https://events.zoom.us/ev/Ag9wyeaHoM2MdgrEudeM2khDhyVlOVeoJ0em2duEOYrYoGBnu1GR~AjXo_keo4nLLLaBzstxCEOOxskKk4NqV4gurDM4MIZGA1R3dMLZUCgxoFw)** **Wednesdays – 14:00 UTC** -(9am Wednesday EST / 2pm GMT / 3pm CEST) +(10am Wednesday EDT / 2pm GMT / 3pm CET) 👉 **[Register here](https://events.zoom.us/ev/AhellaELKyULHHdDH1glXh7-1ELREHiDMq7lG-kvZHmgPU0Anwk0~Arf5hJl8n2CLr8mCBuQZlqWLBq_eJyKa3jXqRLM6E93zjTT7okWqXZA2Gw)** diff --git a/docs/expensify-classic/hubs/connections/certinia/Troubleshooting.html b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting.html b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Connection-errors.html b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting.html b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting.html b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting.html b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/xero/Troubleshooting.html b/docs/expensify-classic/hubs/connections/xero/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/xero/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Connection-errors.html b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Export-Errors.html b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Sync-Errors.html b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/expensify-classic/hubs/connections/xero/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/certinia/Troubleshooting.html b/docs/new-expensify/hubs/connections/certinia/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/certinia/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/certinia/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/netsuite/Troubleshooting.html b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Connection-errors.html b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/netsuite/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting.html b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-desktop/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting.html b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/quickbooks-online/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting.html b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/sage-intacct/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/xero/Troubleshooting.html b/docs/new-expensify/hubs/connections/xero/Troubleshooting.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/xero/Troubleshooting.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Authentication-and-Login-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/xero/Troubleshooting/Connection-errors.html b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Connection-errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Connection-errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/xero/Troubleshooting/Export-Errors.html b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Export-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Export-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/docs/new-expensify/hubs/connections/xero/Troubleshooting/Sync-Errors.html b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Sync-Errors.html new file mode 100644 index 0000000000000..86641ee60b7da --- /dev/null +++ b/docs/new-expensify/hubs/connections/xero/Troubleshooting/Sync-Errors.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{% include section.html %} diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 4277b854c7ff0..de2b333f87dab 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -1810,6 +1810,7 @@ const CONST = { SPAN_CONFIRMATION_RECEIPT_LOAD: 'ManualConfirmationReceiptLoad', SPAN_SUBMIT_EXPENSE: 'ManualCreateExpenseSubmit', SPAN_NAVIGATE_AFTER_EXPENSE_CREATE: 'ManualCreateExpenseNavigation', + SPAN_SUBMIT_TO_DESTINATION_VISIBLE: 'ManualSubmitToDestinationVisible', SPAN_EXPENSE_SERVER_RESPONSE: 'ManualCreateExpenseServerResponse', SPAN_SEND_MESSAGE: 'ManualSendMessage', SPAN_NOT_FOUND_PAGE: 'ManualNotFoundPage', @@ -1855,12 +1856,25 @@ const CONST = { ATTRIBUTE_SCENARIO: 'scenario', ATTRIBUTE_HAS_RECEIPT: 'has_receipt', ATTRIBUTE_IS_FROM_GLOBAL_CREATE: 'is_from_global_create', + /** Sentry span attribute: follow-up action taken after submit (e.g. dismiss_modal_and_open_report, navigate_to_search). */ + ATTRIBUTE_SUBMIT_FOLLOW_UP_ACTION: 'submit_follow_up_action', ATTRIBUTE_COMMAND: 'command', ATTRIBUTE_JSON_CODE: 'json_code', ATTRIBUTE_COLD_START: 'cold_start', ATTRIBUTE_TRIGGER: 'trigger', ATTRIBUTE_PLATFORM: 'platform', ATTRIBUTE_IS_MULTI_SCAN: 'is_multi_scan', + /** Follow-up action after expense submit (action-based; used as submit_follow_up_action in span). */ + SUBMIT_FOLLOW_UP_ACTION: { + DISMISS_MODAL_AND_OPEN_REPORT: 'dismiss_modal_and_open_report', + NAVIGATE_TO_SEARCH: 'navigate_to_search', + DISMISS_MODAL_ONLY: 'dismiss_modal_only', + }, + /** Trigger for useSubmitToDestinationVisible: end span on focus vs on layout. */ + SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER: { + FOCUS: 'focus', + LAYOUT: 'layout', + }, SUBMIT_EXPENSE_SCENARIO: { REQUEST_MONEY_MANUAL: 'request_money_manual', REQUEST_MONEY_SCAN: 'request_money_scan', @@ -1871,6 +1885,7 @@ const CONST = { SPLIT_GLOBAL: 'split_global', INVOICE: 'invoice', PER_DIEM: 'per_diem', + SEND_MONEY: 'send_money', }, // Event names EVENT_SKELETON_ATTRIBUTES_UPDATE: 'skeleton_attributes_updated', diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx index 669d75751c9ed..cda11b20799ef 100644 --- a/src/components/MoneyReportHeader.tsx +++ b/src/components/MoneyReportHeader.tsx @@ -146,7 +146,7 @@ import AnimatedSubmitButton from './AnimatedSubmitButton'; import BrokenConnectionDescription from './BrokenConnectionDescription'; import Button from './Button'; import ButtonWithDropdownMenu from './ButtonWithDropdownMenu'; -import type {DropdownOption} from './ButtonWithDropdownMenu/types'; +import type {ButtonWithDropdownMenuRef, DropdownOption} from './ButtonWithDropdownMenu/types'; import ConfirmModal from './ConfirmModal'; import DecisionModal from './DecisionModal'; import {useDelegateNoAccessActions, useDelegateNoAccessState} from './DelegateNoAccessModalProvider'; @@ -397,6 +397,8 @@ function MoneyReportHeader({ const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const [isDuplicateActive, temporarilyDisableDuplicateAction] = useThrottledButtonState(); + const dropdownMenuRef = useRef(null); + const [isHoldMenuVisible, setIsHoldMenuVisible] = useState(false); const [paymentType, setPaymentType] = useState(); const [requestType, setRequestType] = useState(); @@ -461,6 +463,19 @@ function MoneyReportHeader({ (isArchivedReport || isChatReportArchived || (activePolicyExpenseChat && (isDM(chatReport) || isSelfDM(chatReport)))) ); + const shouldDuplicateCloseModalOnSelect = + isDistanceExpenseUnsupportedForDuplicating || + isPerDiemRequestOnNonDefaultWorkspace || + hasCustomUnitOutOfPolicyViolation || + activePolicyExpenseChat?.iouReportID === moneyRequestReport?.reportID; + + useEffect(() => { + if (!isDuplicateActive || shouldDuplicateCloseModalOnSelect) { + return; + } + dropdownMenuRef.current?.setIsMenuVisible(false); + }, [isDuplicateActive, shouldDuplicateCloseModalOnSelect]); + const [duplicateDistanceErrorModalVisible, setDuplicateDistanceErrorModalVisible] = useState(false); const [rateErrorModalVisible, setRateErrorModalVisible] = useState(false); const [isDownloadErrorModalVisible, setIsDownloadErrorModalVisible] = useState(false); @@ -1573,11 +1588,7 @@ function MoneyReportHeader({ duplicateExpenseTransaction([transaction]); }, - shouldCloseModalOnSelect: - isDistanceExpenseUnsupportedForDuplicating || - isPerDiemRequestOnNonDefaultWorkspace || - hasCustomUnitOutOfPolicyViolation || - activePolicyExpenseChat?.iouReportID === moneyRequestReport?.reportID, + shouldCloseModalOnSelect: shouldDuplicateCloseModalOnSelect, }, [CONST.REPORT.SECONDARY_ACTIONS.DUPLICATE_REPORT]: { text: translate('common.duplicateReport'), @@ -1967,6 +1978,7 @@ function MoneyReportHeader({ onSuccessfulKYC={(type) => confirmPayment({paymentType: type})} primaryAction={primaryAction} applicableSecondaryActions={applicableSecondaryActions} + dropdownMenuRef={dropdownMenuRef} ref={kycWallRef} /> )} @@ -2011,6 +2023,7 @@ function MoneyReportHeader({ onSuccessfulKYC={(type) => confirmPayment({paymentType: type})} primaryAction={primaryAction} applicableSecondaryActions={applicableSecondaryActions} + dropdownMenuRef={dropdownMenuRef} ref={kycWallRef} /> )} diff --git a/src/components/MoneyReportHeaderKYCDropdown.tsx b/src/components/MoneyReportHeaderKYCDropdown.tsx index 18654bff5e9d6..4965dd064eef9 100644 --- a/src/components/MoneyReportHeaderKYCDropdown.tsx +++ b/src/components/MoneyReportHeaderKYCDropdown.tsx @@ -10,7 +10,7 @@ import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; import type {PaymentMethodType} from '@src/types/onyx/OriginalMessage'; import ButtonWithDropdownMenu from './ButtonWithDropdownMenu'; -import type {DropdownOption} from './ButtonWithDropdownMenu/types'; +import type {ButtonWithDropdownMenuRef, DropdownOption} from './ButtonWithDropdownMenu/types'; import KYCWall from './KYCWall'; import type {KYCWallProps} from './KYCWall/types'; @@ -20,6 +20,9 @@ type MoneyReportHeaderKYCDropdownProps = Omit>>; onPaymentSelect: (event: KYCFlowEvent, iouPaymentType: PaymentMethodType, triggerKYCFlow: TriggerKYCFlow) => void; + + /** Ref for the inner ButtonWithDropdownMenu */ + dropdownMenuRef?: React.Ref; }; function MoneyReportHeaderKYCDropdown({ @@ -29,6 +32,7 @@ function MoneyReportHeaderKYCDropdown({ applicableSecondaryActions, iouReport, onPaymentSelect, + dropdownMenuRef, ref, ...props }: MoneyReportHeaderKYCDropdownProps) { @@ -57,6 +61,7 @@ function MoneyReportHeaderKYCDropdown({ > {(triggerKYCFlow, buttonRef) => ( {}} onSubItemSelected={(item, index, event) => { diff --git a/src/components/MoneyRequestHeader.tsx b/src/components/MoneyRequestHeader.tsx index f28fe89e7eaa4..4cc8b1c729de5 100644 --- a/src/components/MoneyRequestHeader.tsx +++ b/src/components/MoneyRequestHeader.tsx @@ -3,7 +3,7 @@ import {shouldFailAllRequestsSelector} from '@selectors/Network'; import {hasSeenTourSelector} from '@selectors/Onboarding'; import {validTransactionDraftsSelector} from '@selectors/TransactionDraft'; import type {ReactNode} from 'react'; -import React, {useCallback, useMemo, useState} from 'react'; +import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; @@ -77,7 +77,7 @@ import type IconAsset from '@src/types/utils/IconAsset'; import BrokenConnectionDescription from './BrokenConnectionDescription'; import Button from './Button'; import ButtonWithDropdownMenu from './ButtonWithDropdownMenu'; -import type {DropdownOption} from './ButtonWithDropdownMenu/types'; +import type {ButtonWithDropdownMenuRef, DropdownOption} from './ButtonWithDropdownMenu/types'; import DecisionModal from './DecisionModal'; import {useDelegateNoAccessActions, useDelegateNoAccessState} from './DelegateNoAccessModalProvider'; import HeaderLoadingBar from './HeaderLoadingBar'; @@ -149,6 +149,8 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.HOLD | typeof CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.REJECT > | null>(null); const [isDuplicateActive, temporarilyDisableDuplicateAction] = useThrottledButtonState(); + const dropdownMenuRef = useRef(null); + const [dismissedRejectUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_REJECT_USE_EXPLANATION); const [dismissedHoldUseExplanation] = useOnyx(ONYXKEYS.NVP_DISMISSED_HOLD_USE_EXPLANATION); const personalDetails = usePersonalDetails(); @@ -208,6 +210,15 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre (isParentReportArchived || (activePolicyExpenseChat && (isSelfDM(parentReport) || isParentChatReportDM))) ); + const shouldDuplicateCloseModalOnSelect = isDistanceExpenseUnsupportedForDuplicating || hasCustomUnitOutOfPolicyViolation || isPerDiemRequestOnNonDefaultWorkspace; + + useEffect(() => { + if (!isDuplicateActive || shouldDuplicateCloseModalOnSelect) { + return; + } + dropdownMenuRef.current?.setIsMenuVisible(false); + }, [isDuplicateActive, shouldDuplicateCloseModalOnSelect]); + const {wideRHPRouteKeys} = useWideRHPState(); const [shouldFailAllRequests] = useOnyx(ONYXKEYS.NETWORK, {selector: shouldFailAllRequestsSelector}); const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE); @@ -549,7 +560,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre duplicateTransaction([transaction]); }, - shouldCloseModalOnSelect: isDistanceExpenseUnsupportedForDuplicating || hasCustomUnitOutOfPolicyViolation || isPerDiemRequestOnNonDefaultWorkspace, + shouldCloseModalOnSelect: shouldDuplicateCloseModalOnSelect, }, [CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.VIEW_DETAILS]: { value: CONST.REPORT.SECONDARY_ACTIONS.VIEW_DETAILS, @@ -660,6 +671,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre {!!primaryAction && primaryActionImplementation[primaryAction]} {!!applicableSecondaryActions.length && ( {}} shouldAlwaysShowDropdownMenu @@ -682,6 +694,7 @@ function MoneyRequestHeader({report, parentReportAction, policy, onBackButtonPre {!!primaryAction && {primaryActionImplementation[primaryAction]}} {!!applicableSecondaryActions.length && ( {}} shouldAlwaysShowDropdownMenu diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx index 7fca251e702cb..7e5f2c6a21be4 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportActionsList.tsx @@ -4,7 +4,7 @@ import {isUserValidatedSelector} from '@selectors/Account'; import {tierNameSelector} from '@selectors/UserWallet'; import isEmpty from 'lodash/isEmpty'; import React, {useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState} from 'react'; -import type {ListRenderItemInfo, NativeScrollEvent, NativeSyntheticEvent} from 'react-native'; +import type {LayoutChangeEvent, ListRenderItemInfo, NativeScrollEvent, NativeSyntheticEvent} from 'react-native'; import {DeviceEventEmitter, InteractionManager, View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import type {ValueOf} from 'type-fest'; @@ -121,6 +121,9 @@ type MoneyRequestReportListProps = { /** The type of action that's pending */ reportPendingAction?: PendingAction | null; + + /** Callback executed on layout */ + onLayout?: (event: LayoutChangeEvent) => void; }; function MoneyRequestReportActionsList({ @@ -134,6 +137,7 @@ function MoneyRequestReportActionsList({ hasPendingDeletionTransaction, showReportActionsLoadingState, reportPendingAction, + onLayout, }: MoneyRequestReportListProps) { const styles = useThemeStyles(); const {translate, getLocalDateFromDatetime} = useLocalize(); @@ -843,6 +847,7 @@ function MoneyRequestReportActionsList({ /> @@ -869,6 +874,7 @@ function MoneyRequestReportActionsList({ /> void; }; type TransactionWithOptionalHighlight = OnyxTypes.Transaction & { @@ -156,6 +159,7 @@ function MoneyRequestReportTransactionList({ scrollToNewTransaction, policy, hasComments, + onLayout, isLoadingInitialReportActions = false, }: MoneyRequestReportTransactionListProps) { useCopySelectionHelper(); @@ -522,7 +526,10 @@ function MoneyRequestReportTransactionList({ ); const transactionListContent = ( - + {shouldShowGroupedTransactions ? groupedTransactions.map((group) => { const selectionState = groupSelectionState.get(group.groupKey) ?? { @@ -641,6 +648,7 @@ function MoneyRequestReportTransactionList({ return ( <> @@ -677,6 +685,7 @@ function MoneyRequestReportTransactionList({ contentContainerStyle={{width: minTableWidth}} onScroll={handleHorizontalScroll} scrollEventThrottle={16} + onLayout={onLayout} > {tableHeaderContent} diff --git a/src/components/MoneyRequestReportView/MoneyRequestReportView.tsx b/src/components/MoneyRequestReportView/MoneyRequestReportView.tsx index 791cbbe073039..0963645e1e746 100644 --- a/src/components/MoneyRequestReportView/MoneyRequestReportView.tsx +++ b/src/components/MoneyRequestReportView/MoneyRequestReportView.tsx @@ -4,6 +4,7 @@ import React, {useCallback, useEffect, useMemo} from 'react'; // to interact with react-navigation components (e.g., CardContainer, interpolator), which also use Animated. // eslint-disable-next-line no-restricted-imports import {Animated, InteractionManager, ScrollView, View} from 'react-native'; +import type {LayoutChangeEvent} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import MoneyReportHeader from '@components/MoneyReportHeader'; import MoneyRequestHeader from '@components/MoneyRequestHeader'; @@ -56,6 +57,9 @@ type MoneyRequestReportViewProps = { /** The `backTo` route that should be used when clicking back button */ backToRoute: Route | undefined; + + /** Callback executed on layout */ + onLayout?: (event: LayoutChangeEvent) => void; }; function goBackFromSearchMoneyRequest() { @@ -85,9 +89,12 @@ function goBackFromSearchMoneyRequest() { Navigation.goBack(ROUTES.SEARCH_ROOT.getRoute({query: buildCannedSearchQuery()})); } -function InitialLoadingSkeleton({styles}: {styles: ThemeStyles}) { +function InitialLoadingSkeleton({styles, onLayout}: {styles: ThemeStyles; onLayout?: (event: LayoutChangeEvent) => void}) { return ( - + {}} /> @@ -96,7 +103,7 @@ function InitialLoadingSkeleton({styles}: {styles: ThemeStyles}) { ); } -function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayReportFooter, backToRoute}: MoneyRequestReportViewProps) { +function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayReportFooter, backToRoute, onLayout}: MoneyRequestReportViewProps) { const styles = useThemeStyles(); const {isOffline} = useNetwork(); @@ -282,6 +289,7 @@ function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayRe newTransactions={newTransactions} reportActions={reportActions} hasOlderActions={hasOlderActions} + onLayout={onLayout} hasNewerActions={hasNewerActions} showReportActionsLoadingState={isLoadingInitialReportActions && !reportMetadata?.hasOnceLoadedReportActions} reportPendingAction={reportPendingAction} @@ -294,6 +302,7 @@ function MoneyRequestReportView({report, policy, reportMetadata, shouldDisplayRe hasNewerActions={hasNewerActions} hasOlderActions={hasOlderActions} parentReportAction={parentReportAction} + onLayout={onLayout} transactionThreadReportID={transactionThreadReportID} /> )} diff --git a/src/components/MoneyRequestReportView/SearchMoneyRequestReportEmptyState.tsx b/src/components/MoneyRequestReportView/SearchMoneyRequestReportEmptyState.tsx index 77e9355a2339b..f62a0b44325b0 100644 --- a/src/components/MoneyRequestReportView/SearchMoneyRequestReportEmptyState.tsx +++ b/src/components/MoneyRequestReportView/SearchMoneyRequestReportEmptyState.tsx @@ -1,5 +1,6 @@ import React, {useEffect} from 'react'; import {View} from 'react-native'; +import type {LayoutChangeEvent} from 'react-native'; import EmptyStateComponent from '@components/EmptyStateComponent'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; @@ -18,7 +19,7 @@ import type * as OnyxTypes from '@src/types/onyx'; const minModalHeight = 380; -function SearchMoneyRequestReportEmptyState({report, policy}: {report: OnyxTypes.Report; policy?: OnyxTypes.Policy}) { +function SearchMoneyRequestReportEmptyState({report, policy, onLayout}: {report: OnyxTypes.Report; policy?: OnyxTypes.Policy; onLayout?: (event: LayoutChangeEvent) => void}) { const [userBillingGraceEndPeriodCollection] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_USER_BILLING_GRACE_PERIOD_END); const [ownerBillingGraceEndPeriod] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END); const [reportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report.reportID}`); @@ -81,7 +82,10 @@ function SearchMoneyRequestReportEmptyState({report, policy}: {report: OnyxTypes }, [report.reportID]); return ( - + (null); @@ -372,6 +374,12 @@ function NumberWithSymbolForm({ const formattedNumber = replaceAllDigits(currentNumber, toLocaleDigit); + // Calculate dynamic font size based on the total length of the amount display + const dynamicAmountStyle = useMemo(() => { + const totalLength = formattedNumber.length + (hideSymbol ? 0 : symbol.length) + (isNegative ? 1 : 0); + return StyleUtils.getAmountInputFontSize(totalLength); + }, [StyleUtils, formattedNumber.length, hideSymbol, symbol.length, isNegative]); + if (displayAsTextInput) { return ( void; }; -function ReportActionsSkeletonView({shouldAnimate = true, possibleVisibleContentItems = 0}: ReportActionsSkeletonViewProps) { +function ReportActionsSkeletonView({shouldAnimate = true, possibleVisibleContentItems = 0, onLayout}: ReportActionsSkeletonViewProps) { const contentItems = possibleVisibleContentItems || Math.ceil(Dimensions.get('screen').height / CONST.CHAT_SKELETON_VIEW.AVERAGE_ROW_HEIGHT); const skeletonViewLines: React.ReactNode[] = []; for (let index = 0; index < contentItems; index++) { @@ -45,7 +49,14 @@ function ReportActionsSkeletonView({shouldAnimate = true, possibleVisibleContent ); } } - return {skeletonViewLines}; + return ( + + {skeletonViewLines} + + ); } export default ReportActionsSkeletonView; diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 6660bc8608d80..87f1fe8f9ff3b 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -66,6 +66,7 @@ import { } from '@libs/SearchUIUtils'; import {cancelSpan, endSpanWithAttributes, getSpan, startSpan} from '@libs/telemetry/activeSpans'; import markNavigateAfterExpenseCreateEnd from '@libs/telemetry/markNavigateAfterExpenseCreateEnd'; +import {cancelSubmitFollowUpActionSpan, endSubmitFollowUpActionSpan, getPendingSubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction'; import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; import {getOriginalTransactionWithSplitInfo, hasValidModifiedAmount, isOnHold, isTransactionPendingDelete} from '@libs/TransactionUtils'; import Navigation, {navigationRef} from '@navigation/Navigation'; @@ -1242,6 +1243,10 @@ function Search({ hasHadFirstLayout.current = true; endSpanWithAttributes(CONST.TELEMETRY.SPAN_NAVIGATE_TO_REPORTS, {[CONST.TELEMETRY.ATTRIBUTE_IS_WARM]: true}); markNavigateAfterExpenseCreateEnd(); + const pending = getPendingSubmitFollowUpAction(); + if (pending && pending.followUpAction !== CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT) { + endSubmitFollowUpActionSpan(pending.followUpAction); + } // Reset the ref after the span is ended so future render-time cancelSpan calls are no longer guarded. spanExistedOnMount.current = false; handleSelectionListScroll(sortedData, searchListRef.current); @@ -1261,6 +1266,10 @@ function Search({ const cancelNavigationSpans = useCallback(() => { cancelSpan(CONST.TELEMETRY.SPAN_NAVIGATE_TO_REPORTS); cancelSpan(CONST.TELEMETRY.SPAN_NAVIGATE_AFTER_EXPENSE_CREATE); + // Only cancel submit follow-up action span when Search is the pending action (e.g. we're bailing to error/empty). Otherwise we'd cancel a span intended for dismiss_modal_only or another action. + if (getPendingSubmitFollowUpAction()?.followUpAction === CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.NAVIGATE_TO_SEARCH) { + cancelSubmitFollowUpActionSpan(); + } spanExistedOnMount.current = false; }, []); @@ -1281,6 +1290,10 @@ function Search({ if (!hasHadFirstLayout.current) { return; } + const pending = getPendingSubmitFollowUpAction(); + if (pending && pending.followUpAction !== CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT) { + endSubmitFollowUpActionSpan(pending.followUpAction); + } endSpanWithAttributes(CONST.TELEMETRY.SPAN_NAVIGATE_TO_REPORTS, { [CONST.TELEMETRY.ATTRIBUTE_IS_WARM]: !shouldShowLoadingState, }); @@ -1369,6 +1382,9 @@ function Search({ if (shouldShowChartView && isGroupedItemArray(sortedData)) { cancelSpan(CONST.TELEMETRY.SPAN_NAVIGATE_AFTER_EXPENSE_CREATE); + if (getPendingSubmitFollowUpAction()?.followUpAction === CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.NAVIGATE_TO_SEARCH) { + cancelSubmitFollowUpActionSpan(); + } let chartTitle = translate(`search.chartTitles.${validGroupBy}`); if (savedSearch) { if (savedSearch.name !== savedSearch.query) { diff --git a/src/hooks/useSubmitToDestinationVisible.ts b/src/hooks/useSubmitToDestinationVisible.ts new file mode 100644 index 0000000000000..ad75e9c9a9dbb --- /dev/null +++ b/src/hooks/useSubmitToDestinationVisible.ts @@ -0,0 +1,61 @@ +import {useFocusEffect} from '@react-navigation/native'; +import {useCallback, useRef} from 'react'; +import type {LayoutChangeEvent} from 'react-native'; +import type {ValueOf} from 'type-fest'; +import {endSubmitFollowUpActionSpan, getPendingSubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction'; +import type {SubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction'; +import CONST from '@src/CONST'; + +type Trigger = ValueOf; + +/** + * End the submit-to-destination-visible span when the destination becomes visible. + * - trigger FOCUS: ends the span when the screen gains focus (e.g. ReportScreen for dismiss-and-open-report / dismiss-modal-only). + * - trigger LAYOUT: returns a callback to attach to onLayout; ends the span when layout runs (e.g. SearchMoneyRequestReportPage). + * Resets the "already ended" guard on blur so the next visit can end the span again. + */ +function useSubmitToDestinationVisible( + followUpActions: readonly SubmitFollowUpAction[], + reportID: string | undefined, + trigger: typeof CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.FOCUS, +): void; +function useSubmitToDestinationVisible( + followUpActions: readonly SubmitFollowUpAction[], + reportID: string | undefined, + trigger: typeof CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.LAYOUT, +): (event?: LayoutChangeEvent) => void; +function useSubmitToDestinationVisible(followUpActions: readonly SubmitFollowUpAction[], reportID: string | undefined, trigger: Trigger): void | ((event?: LayoutChangeEvent) => void) { + const hasEndedRef = useRef(false); + + const tryEnd = useCallback(() => { + if (hasEndedRef.current) { + return; + } + const pending = getPendingSubmitFollowUpAction(); + if (!pending || !followUpActions.includes(pending.followUpAction)) { + return; + } + if (pending.reportID !== undefined && pending.reportID !== reportID) { + return; + } + hasEndedRef.current = true; + endSubmitFollowUpActionSpan(pending.followUpAction, reportID); + }, [followUpActions, reportID]); + + const reset = useCallback(() => { + hasEndedRef.current = false; + }, []); + + useFocusEffect( + useCallback(() => { + if (trigger === CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.FOCUS && reportID) { + tryEnd(); + } + return reset; + }, [trigger, reportID, tryEnd, reset]), + ); + + return trigger === CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.LAYOUT ? tryEnd : undefined; +} + +export default useSubmitToDestinationVisible; diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index a4259a7ded2b4..5b5436ea1d10e 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -737,13 +737,19 @@ const dismissModal = ({ref = navigationRef, callback}: {ref?: NavigationRef; cal * Dismisses the modal and opens the given report. * For detailed information about dismissing modals, * see the NAVIGATION.md documentation. + * @param options.onBeforeNavigate - Called before performing navigation with whether the report will be opened (true) or we only dismiss because already on that report (false). */ -const dismissModalWithReport = ({reportID, reportActionID, referrer, backTo}: ReportsSplitNavigatorParamList[typeof SCREENS.REPORT], ref = navigationRef) => { +const dismissModalWithReport = ( + {reportID, reportActionID, referrer, backTo}: ReportsSplitNavigatorParamList[typeof SCREENS.REPORT], + ref = navigationRef, + options?: {onBeforeNavigate?: (willOpenReport: boolean) => void}, +) => { isNavigationReady().then(() => { const topmostSuperWideRHPReportID = getTopmostSuperWideRHPReportID(); let areReportsIDsDefined = !!topmostSuperWideRHPReportID && !!reportID; if (topmostSuperWideRHPReportID === reportID && areReportsIDsDefined) { + options?.onBeforeNavigate?.(false); dismissToSuperWideRHP(); return; } @@ -752,9 +758,11 @@ const dismissModalWithReport = ({reportID, reportActionID, referrer, backTo}: Re areReportsIDsDefined = !!topmostReportID && !!reportID; const isReportsSplitTopmostFullScreen = ref.getRootState().routes.findLast((route) => isFullScreenName(route.name))?.name === NAVIGATORS.REPORTS_SPLIT_NAVIGATOR; if (topmostReportID === reportID && areReportsIDsDefined && isReportsSplitTopmostFullScreen) { + options?.onBeforeNavigate?.(false); dismissModal(); return; } + options?.onBeforeNavigate?.(true); const reportRoute = ROUTES.REPORT_WITH_ID.getRoute(reportID, reportActionID, referrer, backTo); if (getIsNarrowLayout()) { navigate(reportRoute, {forceReplace: true}); diff --git a/src/libs/actions/IOU/SendInvoice.ts b/src/libs/actions/IOU/SendInvoice.ts index 22708aabd0bb1..29a2c298297c3 100644 --- a/src/libs/actions/IOU/SendInvoice.ts +++ b/src/libs/actions/IOU/SendInvoice.ts @@ -19,6 +19,7 @@ import { getPersonalDetailsForAccountID, } from '@libs/ReportUtils'; import playSound, {SOUNDS} from '@libs/Sound'; +import {startSpan} from '@libs/telemetry/activeSpans'; import {buildOptimisticTransaction} from '@libs/TransactionUtils'; import {buildOptimisticPolicyRecentlyUsedTags} from '@userActions/Policy/Tag'; import {notifyNewAction} from '@userActions/Report'; @@ -799,6 +800,18 @@ function sendInvoice({ ...(invoiceChatReport?.reportID ? {receiverInvoiceRoomID: invoiceChatReport.reportID} : {receiverEmail: receiver.login ?? ''}), }; + startSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, { + name: 'submit-to-destination-visible', + op: CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, + attributes: { + [CONST.TELEMETRY.ATTRIBUTE_SCENARIO]: CONST.TELEMETRY.SUBMIT_EXPENSE_SCENARIO.INVOICE, + [CONST.TELEMETRY.ATTRIBUTE_HAS_RECEIPT]: !!receiptFile, + [CONST.TELEMETRY.ATTRIBUTE_IS_FROM_GLOBAL_CREATE]: isFromGlobalCreate, + [CONST.TELEMETRY.ATTRIBUTE_IOU_TYPE]: CONST.IOU.TYPE.INVOICE, + [CONST.TELEMETRY.ATTRIBUTE_IOU_REQUEST_TYPE]: 'invoice', + }, + }); + playSound(SOUNDS.DONE); API.write(WRITE_COMMANDS.SEND_INVOICE, parameters, onyxData); // eslint-disable-next-line @typescript-eslint/no-deprecated diff --git a/src/libs/actions/IOU/SendMoney.ts b/src/libs/actions/IOU/SendMoney.ts index 20aed8883544f..381ef30260d69 100644 --- a/src/libs/actions/IOU/SendMoney.ts +++ b/src/libs/actions/IOU/SendMoney.ts @@ -19,6 +19,7 @@ import { getParsedComment, } from '@libs/ReportUtils'; import playSound, {SOUNDS} from '@libs/Sound'; +import {startSpan} from '@libs/telemetry/activeSpans'; import {buildOptimisticTransaction} from '@libs/TransactionUtils'; import {notifyNewAction} from '@userActions/Report'; import CONST from '@src/CONST'; @@ -503,6 +504,17 @@ function sendMoneyElsewhere( merchant, receipt, }); + startSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, { + name: 'submit-to-destination-visible', + op: CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, + attributes: { + [CONST.TELEMETRY.ATTRIBUTE_SCENARIO]: CONST.TELEMETRY.SUBMIT_EXPENSE_SCENARIO.SEND_MONEY, + [CONST.TELEMETRY.ATTRIBUTE_HAS_RECEIPT]: !!receipt, + [CONST.TELEMETRY.ATTRIBUTE_IS_FROM_GLOBAL_CREATE]: isEmptyObject(report) || !report?.reportID, + [CONST.TELEMETRY.ATTRIBUTE_IOU_TYPE]: CONST.IOU.TYPE.PAY, + [CONST.TELEMETRY.ATTRIBUTE_IOU_REQUEST_TYPE]: 'pay', + }, + }); playSound(SOUNDS.DONE); API.write(WRITE_COMMANDS.SEND_MONEY_ELSEWHERE, params, {optimisticData, successData, failureData}); @@ -539,6 +551,17 @@ function sendMoneyWithWallet( merchant, receipt, }); + startSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, { + name: 'submit-to-destination-visible', + op: CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, + attributes: { + [CONST.TELEMETRY.ATTRIBUTE_SCENARIO]: CONST.TELEMETRY.SUBMIT_EXPENSE_SCENARIO.SEND_MONEY, + [CONST.TELEMETRY.ATTRIBUTE_HAS_RECEIPT]: !!receipt, + [CONST.TELEMETRY.ATTRIBUTE_IS_FROM_GLOBAL_CREATE]: isEmptyObject(report) || !report?.reportID, + [CONST.TELEMETRY.ATTRIBUTE_IOU_TYPE]: CONST.IOU.TYPE.PAY, + [CONST.TELEMETRY.ATTRIBUTE_IOU_REQUEST_TYPE]: 'pay', + }, + }); playSound(SOUNDS.DONE); API.write(WRITE_COMMANDS.SEND_MONEY_WITH_WALLET, params, {optimisticData, successData, failureData}); diff --git a/src/libs/actions/IOU/Split.ts b/src/libs/actions/IOU/Split.ts index b639147d84a98..735fc4faf33c9 100644 --- a/src/libs/actions/IOU/Split.ts +++ b/src/libs/actions/IOU/Split.ts @@ -42,6 +42,8 @@ import { updateReportPreview, } from '@libs/ReportUtils'; import playSound, {SOUNDS} from '@libs/Sound'; +import {getSpan} from '@libs/telemetry/activeSpans'; +import {setPendingSubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction'; import { buildOptimisticTransaction, getAmount, @@ -704,6 +706,7 @@ function startSplitBill({ API.write(WRITE_COMMANDS.START_SPLIT_BILL, parameters, {optimisticData, successData, failureData}); + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT, splitChatReport.reportID); Navigation.dismissModalWithReport({reportID: splitChatReport.reportID}); notifyNewAction(splitChatReport.reportID, undefined, true); @@ -1723,6 +1726,9 @@ function updateSplitTransactionsFromSplitExpensesFlow(params: UpdateSplitTransac return; } + if (getSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE)) { + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT, expenseReport?.reportID ?? String(CONST.DEFAULT_NUMBER_ID)); + } Navigation.dismissModalWithReport({reportID: expenseReport?.reportID ?? String(CONST.DEFAULT_NUMBER_ID)}); // After the modal is dismissed, remove the transaction thread report screen diff --git a/src/libs/actions/IOU/index.ts b/src/libs/actions/IOU/index.ts index 9faac2df78e8e..c449ca8168fb5 100644 --- a/src/libs/actions/IOU/index.ts +++ b/src/libs/actions/IOU/index.ts @@ -198,7 +198,8 @@ import {buildCannedSearchQuery, buildSearchQueryJSON, buildSearchQueryString, ge import {getSuggestedSearches} from '@libs/SearchUIUtils'; import playSound, {SOUNDS} from '@libs/Sound'; import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils'; -import {startSpan} from '@libs/telemetry/activeSpans'; +import {getSpan, startSpan} from '@libs/telemetry/activeSpans'; +import {endSubmitFollowUpActionSpan, setPendingSubmitFollowUpAction} from '@libs/telemetry/submitFollowUpAction'; import { allHavePendingRTERViolation, buildOptimisticTransaction, @@ -1088,12 +1089,26 @@ function getPolicyTagsData(policyID: string | undefined) { */ function dismissModalAndOpenReportInInboxTab(reportID?: string, isInvoice?: boolean) { const rootState = navigationRef.getRootState(); + const hasSubmitToDestinationVisibleSpan = !!getSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE); + if (!isInvoice && isReportOpenInRHP(rootState)) { const rhpKey = rootState.routes.at(-1)?.state?.key; if (rhpKey) { const hasMultipleTransactions = Object.values(allTransactions).filter((transaction) => transaction?.reportID === reportID).length > 0; + const isSuperWideRHP = isReportOpenInSuperWideRHP(rootState); + + // submit_follow_up_action: only set when the span was started. + if (hasSubmitToDestinationVisibleSpan) { + if (isSuperWideRHP) { + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY, reportID); + } else if (hasMultipleTransactions && reportID) { + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT, reportID); + } else { + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY, reportID); + } + } // When a report is opened in the super wide RHP, we need to dismiss to the first RHP to show the same report with new expense. - if (isReportOpenInSuperWideRHP(rootState)) { + if (isSuperWideRHP) { Navigation.dismissToPreviousRHP(); return; } @@ -1107,7 +1122,6 @@ function dismissModalAndOpenReportInInboxTab(reportID?: string, isInvoice?: bool } else { Navigation.dismissToPreviousRHP(); } - Navigation.setNavigationActionToMicrotaskQueue(() => { Navigation.navigate(ROUTES.SEARCH_MONEY_REQUEST_REPORT.getRoute({reportID}), {forceReplace: !isNarrowLayout}); }); @@ -1118,10 +1132,30 @@ function dismissModalAndOpenReportInInboxTab(reportID?: string, isInvoice?: bool } } if (isSearchTopmostFullScreenRoute() || !reportID) { + if (hasSubmitToDestinationVisibleSpan) { + setPendingSubmitFollowUpAction(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY); + } Navigation.dismissModal(); + if (hasSubmitToDestinationVisibleSpan) { + // eslint-disable-next-line @typescript-eslint/no-deprecated -- we need to wait for the modal to be dismissed before marking the span + InteractionManager.runAfterInteractions(() => { + endSubmitFollowUpActionSpan(CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY); + }); + } return; } - Navigation.dismissModalWithReport({reportID}); + if (hasSubmitToDestinationVisibleSpan) { + Navigation.dismissModalWithReport({reportID}, undefined, { + onBeforeNavigate: (willOpenReport) => { + setPendingSubmitFollowUpAction( + willOpenReport ? CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT : CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY, + reportID, + ); + }, + }); + } else { + Navigation.dismissModalWithReport({reportID}); + } } /** @@ -1165,6 +1199,17 @@ function handleNavigateAfterExpenseCreate({ return; } + // When already on Search ROOT with the same type (expense vs invoice), we navigate to the same screen (no-op or refresh); record as dismiss_modal_only. + // When on another Search sub-tab (e.g. Chats), or on Search with a different type (e.g. on Invoice, submitting expense), record as navigate_to_search. + const rootState = navigationRef.getRootState(); + const searchNavigatorRoute = rootState?.routes?.findLast((route) => route.name === NAVIGATORS.SEARCH_FULLSCREEN_NAVIGATOR); + const lastSearchRoute = searchNavigatorRoute?.state?.routes?.at(-1); + const alreadyOnSearchRoot = isSearchTopmostFullScreenRoute() && lastSearchRoute?.name === SCREENS.SEARCH.ROOT; + const currentSearchQueryJSON = alreadyOnSearchRoot ? getCurrentSearchQueryJSON() : undefined; + const isSameSearchType = currentSearchQueryJSON?.type === type; + setPendingSubmitFollowUpAction( + alreadyOnSearchRoot && isSameSearchType ? CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY : CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.NAVIGATE_TO_SEARCH, + ); startSpan(CONST.TELEMETRY.SPAN_NAVIGATE_AFTER_EXPENSE_CREATE, { name: 'navigate-after-expense-create', op: CONST.TELEMETRY.SPAN_NAVIGATE_AFTER_EXPENSE_CREATE, diff --git a/src/libs/telemetry/activeSpans.ts b/src/libs/telemetry/activeSpans.ts index ee5451cb60e78..59b5fce4a5a00 100644 --- a/src/libs/telemetry/activeSpans.ts +++ b/src/libs/telemetry/activeSpans.ts @@ -77,6 +77,19 @@ function cancelSpansByPrefix(prefix: string) { } } +/** + * Ends a span only if it's currently active. Unlike `endSpan`, this silently no-ops + * when the span doesn't exist, making it safe for render paths where the span + * may or may not have been started. + */ +function tryEndSpan(spanId: string): boolean { + if (!activeSpans.has(spanId)) { + return false; + } + endSpan(spanId); + return true; +} + function getSpan(spanId: string) { return activeSpans.get(spanId); } @@ -87,4 +100,4 @@ function endSpanWithAttributes(spanId: string, attributes: Record; + +type PendingSubmitFollowUpAction = { + followUpAction: SubmitFollowUpAction; + reportID?: string; +} | null; + +let pendingSubmitFollowUpAction: PendingSubmitFollowUpAction = null; + +/** + * True when the new call is a refinement of the same submit flow (same report, same or more specific action). + * In that case we update pending and span attributes instead of cancelling, so the second setPending call in the same flow does not drop the span. + */ +function isSameFlowUpdate(pending: NonNullable, followUpAction: SubmitFollowUpAction, reportID?: string): boolean { + if (pending.reportID !== reportID) { + return false; + } + if (pending.followUpAction === followUpAction) { + return true; + } + // Refinement: we first set DISMISS_MODAL_ONLY, then dismissModalWithReport's onBeforeNavigate refines it to DISMISS_MODAL_AND_OPEN_REPORT when the report will open. Same flow — update in place instead of cancelling. + return pending.followUpAction === CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY && followUpAction === CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT; +} + +/** + * Set the pending follow-up action before navigating (for submit-to-visible span). + * The screen that becomes visible should call endSubmitFollowUpActionSpan when visible. + * If there is already a pending action and the span is still running (e.g. second submit before first completes), we cancel the previous span so it is not left stuck or attributed to the wrong action. + * Exception: when the new call is a same-flow update (same report, same or refined action), we just update pending and span attributes without cancelling. + */ +function setPendingSubmitFollowUpAction(followUpAction: SubmitFollowUpAction, reportID?: string) { + const span = getSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE); + const pending = pendingSubmitFollowUpAction; + + if (pending !== null && span && isSameFlowUpdate(pending, followUpAction, reportID)) { + // Same flow: update in place instead of cancelling (e.g. dismissModalAndOpenReportInInboxTab sets pending, then onBeforeNavigate refines it). + pendingSubmitFollowUpAction = {followUpAction, reportID}; + span.setAttribute(CONST.TELEMETRY.ATTRIBUTE_SUBMIT_FOLLOW_UP_ACTION, followUpAction); + if (reportID !== undefined) { + span.setAttribute(CONST.TELEMETRY.ATTRIBUTE_REPORT_ID, reportID); + } + return; + } + + if (pending !== null && span) { + cancelSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE); + pendingSubmitFollowUpAction = null; + } + pendingSubmitFollowUpAction = {followUpAction, reportID}; + // Set the attribute on the span immediately so it is present when the transaction is serialized. + // When navigating away (e.g. to Search), the confirmation transaction can end and the SDK may cancel our span before the destination screen mounts to call endSubmitFollowUpActionSpan. + const spanAfter = getSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE); + if (spanAfter) { + spanAfter.setAttribute(CONST.TELEMETRY.ATTRIBUTE_SUBMIT_FOLLOW_UP_ACTION, followUpAction); + if (reportID !== undefined) { + spanAfter.setAttribute(CONST.TELEMETRY.ATTRIBUTE_REPORT_ID, reportID); + } + } +} + +/** + * Clear the pending follow-up action (e.g. when the span is ended or cancelled). + */ +function clearPendingSubmitFollowUpAction() { + pendingSubmitFollowUpAction = null; +} + +/** + * Read the current pending follow-up action (for screens to check if they should end the span). + * Not reactive; call from within a callback (e.g. useFocusEffect, onLayout). + */ +function getPendingSubmitFollowUpAction(): PendingSubmitFollowUpAction { + return pendingSubmitFollowUpAction; +} + +/** + * End the submit-to-visible span and clear the pending action. Call from each screen when its main content is visible (e.g. onLayout). + * Only ends the span if the passed followUpAction matches the current pending action (avoids races and wrong attribution). + */ +function endSubmitFollowUpActionSpan(followUpAction: SubmitFollowUpAction, reportID?: string) { + if (!getSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE)) { + return; + } + const pending = pendingSubmitFollowUpAction; + if (!pending || pending.followUpAction !== followUpAction) { + return; + } + if (pending.reportID !== undefined && pending.reportID !== reportID) { + return; + } + const attributes: Record = { + [CONST.TELEMETRY.ATTRIBUTE_SUBMIT_FOLLOW_UP_ACTION]: followUpAction, + }; + if (reportID !== undefined) { + attributes[CONST.TELEMETRY.ATTRIBUTE_REPORT_ID] = reportID; + } + endSpanWithAttributes(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, attributes); + clearPendingSubmitFollowUpAction(); +} + +/** + * Cancel the submit-to-visible span and clear the pending follow-up action. + */ +function cancelSubmitFollowUpActionSpan() { + cancelSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE); + clearPendingSubmitFollowUpAction(); +} + +export {endSubmitFollowUpActionSpan, setPendingSubmitFollowUpAction, getPendingSubmitFollowUpAction, cancelSubmitFollowUpActionSpan}; +export type {SubmitFollowUpAction}; diff --git a/src/pages/Search/SearchMoneyRequestReportPage.tsx b/src/pages/Search/SearchMoneyRequestReportPage.tsx index cd59a5f67edca..2426db655a680 100644 --- a/src/pages/Search/SearchMoneyRequestReportPage.tsx +++ b/src/pages/Search/SearchMoneyRequestReportPage.tsx @@ -20,6 +20,7 @@ import useParentReportAction from '@hooks/useParentReportAction'; import usePrevious from '@hooks/usePrevious'; import useReportIsArchived from '@hooks/useReportIsArchived'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; +import useSubmitToDestinationVisible from '@hooks/useSubmitToDestinationVisible'; import useThemeStyles from '@hooks/useThemeStyles'; import useTransactionsAndViolationsForReport from '@hooks/useTransactionsAndViolationsForReport'; import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID'; @@ -74,7 +75,15 @@ function SearchMoneyRequestReportPage({route}: SearchMoneyRequestPageProps) { const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportIDFromRoute}`); const [deleteTransactionNavigateBackUrl] = useOnyx(ONYXKEYS.NVP_DELETE_TRANSACTION_NAVIGATE_BACK_URL); + const parentReportAction = useParentReportAction(report); + + const handleSubmitToDestinationVisibleLayout = useSubmitToDestinationVisible( + [CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT, CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY], + reportIDFromRoute, + CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.LAYOUT, + ); + const [parentReportMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report?.parentReportID}`); const prevReport = usePrevious(report); const {email: currentUserEmail, accountID: currentUserAccountID} = useCurrentUserPersonalDetails(); @@ -423,6 +432,7 @@ function SearchMoneyRequestReportPage({route}: SearchMoneyRequestPageProps) { policy={policy} shouldDisplayReportFooter={isCurrentReportLoadedFromOnyx} key={report?.reportID} + onLayout={handleSubmitToDestinationVisibleLayout} backToRoute={route.params.backTo} /> diff --git a/src/pages/inbox/ReportScreen.tsx b/src/pages/inbox/ReportScreen.tsx index 2288c24963b1a..9c0bf29ff1b73 100644 --- a/src/pages/inbox/ReportScreen.tsx +++ b/src/pages/inbox/ReportScreen.tsx @@ -38,6 +38,7 @@ import useReportIsArchived from '@hooks/useReportIsArchived'; import useReportTransactionsCollection from '@hooks/useReportTransactionsCollection'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSidePanelActions from '@hooks/useSidePanelActions'; +import useSubmitToDestinationVisible from '@hooks/useSubmitToDestinationVisible'; import useThemeStyles from '@hooks/useThemeStyles'; import useViewportOffsetTop from '@hooks/useViewportOffsetTop'; import {hideEmojiPicker} from '@libs/actions/EmojiPickerAction'; @@ -985,6 +986,12 @@ function ReportScreen({route, navigation, isInSidePanel = false}: ReportScreenPr useShowWideRHPVersion(shouldShowWideRHP); + useSubmitToDestinationVisible( + [CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_AND_OPEN_REPORT, CONST.TELEMETRY.SUBMIT_FOLLOW_UP_ACTION.DISMISS_MODAL_ONLY], + reportIDFromRoute, + CONST.TELEMETRY.SUBMIT_TO_DESTINATION_VISIBLE_TRIGGER.FOCUS, + ); + // Define here because reportActions are recalculated before mount, allowing data to display faster than useEffect can trigger. // If we have cached reportActions, they will be shown immediately. // We aim to display a loader first, then fetch relevant reportActions, and finally show them. diff --git a/src/pages/inbox/report/ReportActionsView.tsx b/src/pages/inbox/report/ReportActionsView.tsx index ffc4a032c3314..ed4dc3f4060fe 100755 --- a/src/pages/inbox/report/ReportActionsView.tsx +++ b/src/pages/inbox/report/ReportActionsView.tsx @@ -1,6 +1,7 @@ import {useIsFocused, useRoute} from '@react-navigation/native'; import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import {InteractionManager} from 'react-native'; +import type {LayoutChangeEvent} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import ReportActionsSkeletonView from '@components/ReportActionsSkeletonView'; import useCopySelectionHelper from '@hooks/useCopySelectionHelper'; @@ -76,6 +77,9 @@ type ReportActionsViewProps = { /** Concierge status label */ conciergeStatusLabel?: string; + + /** Callback executed on layout */ + onLayout?: (event: LayoutChangeEvent) => void; }; let listOldID = Math.round(Math.random() * 100); @@ -92,6 +96,7 @@ function ReportActionsView({ isConciergeProcessing, conciergeReasoningHistory, conciergeStatusLabel, + onLayout, }: ReportActionsViewProps) { useCopySelectionHelper(); usePendingConciergeResponse(report.reportID); @@ -289,15 +294,19 @@ function ReportActionsView({ /** * Runs when the FlatList finishes laying out */ - const recordTimeToMeasureItemLayout = useCallback(() => { - if (didLayout.current) { - return; - } + const recordTimeToMeasureItemLayout = useCallback( + (event: LayoutChangeEvent) => { + onLayout?.(event); + if (didLayout.current) { + return; + } - didLayout.current = true; + didLayout.current = true; - markOpenReportEnd(report, {warm: true}); - }, [report]); + markOpenReportEnd(report, {warm: true}); + }, + [report, onLayout], + ); // Check if the first report action in the list is the one we're currently linked to const isTheFirstReportActionIsLinked = newestReportAction?.reportActionID === reportActionID; diff --git a/src/pages/inbox/report/comment/TextCommentFragment.tsx b/src/pages/inbox/report/comment/TextCommentFragment.tsx index 4286b49a12754..60ac5f2ef8090 100644 --- a/src/pages/inbox/report/comment/TextCommentFragment.tsx +++ b/src/pages/inbox/report/comment/TextCommentFragment.tsx @@ -14,7 +14,7 @@ import {canUseTouchScreen} from '@libs/DeviceCapabilities'; import {containsOnlyCustomEmoji as containsOnlyCustomEmojiUtil, containsOnlyEmojis as containsOnlyEmojisUtil, splitTextWithEmojis} from '@libs/EmojiUtils'; import Parser from '@libs/Parser'; import {getHtmlWithAttachmentID, getTextFromHtml} from '@libs/ReportActionsUtils'; -import {endSpan} from '@libs/telemetry/activeSpans'; +import {tryEndSpan} from '@libs/telemetry/activeSpans'; import variables from '@styles/variables'; import CONST from '@src/CONST'; import type {OriginalMessageSource} from '@src/types/onyx/OriginalMessage'; @@ -66,7 +66,7 @@ function TextCommentFragment({fragment, styleAsDeleted, reportActionID, styleAsM if (!reportActionID) { return; } - endSpan(`${CONST.TELEMETRY.SPAN_SEND_MESSAGE}_${reportActionID}`); + tryEndSpan(`${CONST.TELEMETRY.SPAN_SEND_MESSAGE}_${reportActionID}`); }, [reportActionID]); // If the only difference between fragment.text and fragment.html is
tags and emoji tag diff --git a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx index 8a38c4f40ed7e..4801f5eb98713 100644 --- a/src/pages/iou/request/step/IOURequestStepConfirmation.tsx +++ b/src/pages/iou/request/step/IOURequestStepConfirmation.tsx @@ -1054,19 +1054,28 @@ function IOURequestStepConfirmation({ hasReceiptFiles, }); + const submitSpanAttributes = { + [CONST.TELEMETRY.ATTRIBUTE_SCENARIO]: scenario, + [CONST.TELEMETRY.ATTRIBUTE_HAS_RECEIPT]: hasReceiptFiles, + [CONST.TELEMETRY.ATTRIBUTE_IS_FROM_GLOBAL_CREATE]: isFromGlobalCreate, + [CONST.TELEMETRY.ATTRIBUTE_IOU_TYPE]: iouType, + [CONST.TELEMETRY.ATTRIBUTE_IOU_REQUEST_TYPE]: requestType ?? 'unknown', + }; + startSpan(CONST.TELEMETRY.SPAN_SUBMIT_EXPENSE, { name: 'submit-expense', op: CONST.TELEMETRY.SPAN_SUBMIT_EXPENSE, - attributes: { - [CONST.TELEMETRY.ATTRIBUTE_SCENARIO]: scenario, - [CONST.TELEMETRY.ATTRIBUTE_HAS_RECEIPT]: hasReceiptFiles, - [CONST.TELEMETRY.ATTRIBUTE_IS_FROM_GLOBAL_CREATE]: isFromGlobalCreate, - [CONST.TELEMETRY.ATTRIBUTE_IOU_TYPE]: iouType, - [CONST.TELEMETRY.ATTRIBUTE_IOU_REQUEST_TYPE]: requestType ?? 'unknown', - }, + attributes: submitSpanAttributes, + }); + + startSpan(CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, { + name: 'submit-to-destination-visible', + op: CONST.TELEMETRY.SPAN_SUBMIT_TO_DESTINATION_VISIBLE, + attributes: submitSpanAttributes, }); // IMPORTANT: Every branch below must call markSubmitExpenseEnd() after dispatching the expense action. + // The submit follow-up action span above is ended by the target screen (ReportScreen, Search, etc.) or by runAfterInteractions for dismiss_modal_only. // This ensures the telemetry span started above is always closed, including inside async getCurrentPosition callbacks. // If missed, the impact is benign (an orphaned Sentry span), but it pollutes telemetry data. if (iouType !== CONST.IOU.TYPE.TRACK && isDistanceRequest && !isMovingTransactionFromTrackExpense && !isUnreported) { diff --git a/src/styles/utils/index.ts b/src/styles/utils/index.ts index 37ef7e9550ec5..fe89a12930344 100644 --- a/src/styles/utils/index.ts +++ b/src/styles/utils/index.ts @@ -1,4 +1,4 @@ -import {StyleSheet} from 'react-native'; +import {PixelRatio, Dimensions as RNDimensions, StyleSheet} from 'react-native'; // eslint-disable-next-line no-restricted-imports import type {AnimatableNumericValue, Animated, ColorValue, ImageStyle, PressableStateCallbackType, StyleProp, TextStyle, ViewStyle} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; @@ -1193,6 +1193,35 @@ function getAmountFontSizeAndLineHeight(isSmallScreenWidth: boolean, windowWidth }; } +/** + * Returns fitting fontSize value for the money request amount input + * to prevent large amounts from overflowing on small screens. + */ +function getAmountInputFontSize(amountLength: number): TextStyle { + // Display Zoom ("Larger Text") shrinks the logical window width (e.g. ~320pt vs ~390pt normal). + // Accessibility large-text increases PixelRatio.getFontScale() above 1. + // Both cases reduce available space, so we compute a combined scale factor and apply it to + // both the base font size and the minimum font size. + const {width: windowWidth} = RNDimensions.get('window'); + const referenceWidth = 390; + const displayZoomFactor = Math.min(1, windowWidth / referenceWidth); + const accessibilityFontScale = PixelRatio.getFontScale(); + const accessibilityFactor = accessibilityFontScale > 1 ? 1 / accessibilityFontScale : 1; + const scaleFactor = Math.min(displayZoomFactor, accessibilityFactor); + + const baseFontSize = Math.round(variables.iouAmountTextSizeLarge * scaleFactor); + const minFontSize = Math.max(14, Math.round(20 * scaleFactor)); + const maxLengthBeforeScaling = 10; + const reductionPerChar = 2; + + if (amountLength <= maxLengthBeforeScaling) { + return {fontSize: baseFontSize}; + } + + const reduction = Math.min((amountLength - maxLengthBeforeScaling) * reductionPerChar, baseFontSize - minFontSize); + return {fontSize: Math.max(baseFontSize - reduction, minFontSize)}; +} + /** * Get transparent color by setting alpha value 0 of the passed hex(#xxxxxx) color code */ @@ -1293,6 +1322,7 @@ const staticStyleUtils = { combineStyles, displayIfTrue, getAmountFontSizeAndLineHeight, + getAmountInputFontSize, getAutoCompleteSuggestionContainerStyle, getAvatarBorderRadius, getAvatarBorderStyle, diff --git a/src/styles/variables.ts b/src/styles/variables.ts index 25ec0bcbf81b0..89258f6d72582 100644 --- a/src/styles/variables.ts +++ b/src/styles/variables.ts @@ -94,6 +94,7 @@ export default { iconHeader: 48, iconSection: 68, iouAmountTextSize: 40, + iouAmountTextSizeLarge: 48, extraSmallMobileResponsiveWidthBreakpoint: 320, extraSmallMobileResponsiveHeightBreakpoint: 667, mobileResponsiveWidthBreakpoint: 800,