Skip to content

[No QA] Add Certinia troubleshooting docs (Expensify Classic only)#84814

Merged
stephanieelliott merged 1 commit intomainfrom
helpsite-certinia-new-and-classic
Mar 11, 2026
Merged

[No QA] Add Certinia troubleshooting docs (Expensify Classic only)#84814
stephanieelliott merged 1 commit intomainfrom
helpsite-certinia-new-and-classic

Conversation

@stephanieelliott
Copy link
Contributor

@stephanieelliott stephanieelliott commented Mar 10, 2026

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

Breaking main PR into smaller batches: #83106

Creates .MD files for NetSuite integration error messages (New Expensify)


Explanation of Change

see above

Fixed Issues

https://github.com/Expensify/Expensify/issues/469226

Tests

  • Verify that no errors appear in the JS console

Offline tests

QA Steps

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))
  • If new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari

@melvin-bot
Copy link

melvin-bot bot commented Mar 10, 2026

Concierge reviewer checklist:

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

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

cc @sonialiap

@melvin-bot melvin-bot bot requested review from Gonals and sonialiap March 10, 2026 23:21
@melvin-bot
Copy link

melvin-bot bot commented Mar 10, 2026

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

@melvin-bot melvin-bot bot removed the request for review from a team March 10, 2026 23:21
@stephanieelliott
Copy link
Contributor Author

@MelvinBot why is the PR author checklist test failing? As this is an .md file under /docs, the PR author checklist should be skipped

@@ -0,0 +1,64 @@
---
title: CER047 Export Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy-paste error (Sync vs Export): This file is in the Sync-Errors/ directory, but the title says "CER047 Export Error in Certinia Integration." The title, description, heading, and body references should say "Sync Error" instead of "Export Error" to match its categorization. This same issue appears in the description (line 3), keywords (line 4), internalScope (line 5), the H1 heading (line 8), and the H2 section headings (lines 18, 30). Please update all occurrences of "Export Error" to "Sync Error" throughout this file.

Suggested change
title: CER047 Export Error in Certinia Integration
title: CER047 Sync Error in Certinia Integration

@@ -0,0 +1,66 @@
---
title: CER074 Export Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy-paste error (Sync vs Export): This file is in the Sync-Errors/ directory, but the title says "CER074 Export Error in Certinia Integration." The title, description, heading, and body references should say "Sync Error" instead of "Export Error" to match its categorization. This same issue appears in the description (line 3), keywords (line 4), internalScope (line 5), the H1 heading (line 8), and the H2 section headings (lines 18, 32). Please update all occurrences of "Export Error" to "Sync Error" throughout this file.

Suggested change
title: CER074 Export Error in Certinia Integration
title: CER074 Sync Error in Certinia Integration

@@ -0,0 +1,66 @@
---
title: CER937 Export Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy-paste error (Sync vs Export): This file is in the Sync-Errors/ directory, but the title says "CER937 Export Error in Certinia Integration." The title, description, heading, and body references should say "Sync Error" instead of "Export Error" to match its categorization. This same issue appears in the description (line 3), keywords (line 4), internalScope (line 5), the H1 heading (line 8), and the H2 section headings (lines 18, 30). Please update all occurrences of "Export Error" to "Sync Error" throughout this file.

Suggested change
title: CER937 Export Error in Certinia Integration
title: CER937 Sync Error in Certinia Integration

internalScope: Audience is Workspace Admins and Certinia Admins using the Certinia integration. Covers resolving the CER937 error caused by an outdated Certinia integration configuration. Does not cover other Certinia error codes.
---

# CER937 Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Content duplication concern: CER937 appears in three separate directories -- Authentication-and-Login-errors/, Export-Errors/, and Sync-Errors/ -- with nearly identical content (same title, same fix steps, same FAQ). This creates a maintenance burden and risks content drift over time. Consider one of these approaches:

  1. Single canonical article with a note that CER937 can appear during authentication, export, or sync operations.
  2. Hub-level cross-references that link to one canonical CER937 article from each category.

If there is a deliberate reason to keep three copies (e.g., different audiences land in different categories), each file should at minimum differentiate its content to explain why the error surfaces in that specific context (authentication vs. export vs. sync).

internalScope: Audience is Workspace Admins using the Certinia integration. Covers resolving the CER047 export error caused by missing Expense Ops Edit permissions. Does not cover other Certinia error codes.
---

# CER047 Export Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Content duplication concern: CER047 appears in both Export-Errors/ and Sync-Errors/ with nearly identical content. If the error genuinely appears in both contexts, each article should explain the context-specific scenario (e.g., "when this error occurs during a sync..." vs "when this error occurs during an export..."). Otherwise, consolidate into a single article and cross-reference from the other category.

internalScope: Audience is Workspace Admins using the Certinia integration. Covers resolving the CER074 export error caused by missing or incorrect Permission Controls. Does not cover other Certinia error codes.
---

# CER074 Export Error in Certinia Integration
Copy link
Contributor

Choose a reason for hiding this comment

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

Content duplication concern: CER074 appears in both Export-Errors/ and Sync-Errors/ with nearly identical content. If the error genuinely appears in both contexts, each article should explain the context-specific scenario. Otherwise, consolidate into a single article and cross-reference from the other category.

If you see the error:

CER937: Please update Expensify in Certinia.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>) or inline code block to visually distinguish it from surrounding prose. As plain text, it blends into the paragraph and is harder to scan. This applies to all 17 error articles in this PR.

Suggested change
> CER937: Please update Expensify in Certinia.

If you see the error:

CER047: "Ops Edit" permission is required to edit approved records.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>) or inline code block to visually distinguish it from surrounding prose.

Suggested change
> CER047: "Ops Edit" permission is required to edit approved records.

@MelvinBot
Copy link
Contributor

The checklist isn't being skipped because one of the files in this PR falls outside the paths-ignore pattern.

The workflow at .github/workflows/authorChecklist.yml skips when changes are limited to:

paths-ignore: ['docs/articles/**/*.md', 'docs/redirects.csv', 'docs/assets/images/**']

Your 17 .md files all match docs/articles/**/*.md — those are fine. But this PR also includes:

docs/expensify-classic/hubs/connections/certinia/Troubleshooting/Sync-Errors.html

That .html file is under docs/expensify-classic/, not docs/articles/, and it's not an .md file — so it doesn't match any of the ignore patterns. That's why the workflow triggers.

Once triggered, the check crashes with TypeError: Cannot read properties of undefined (reading 'split') because the PR description doesn't include the standard PR author checklist template that the script expects to parse.

To fix this, you have two options:

  1. Add the standard PR author checklist from the PR template to the PR description (the section between <!-- This is an auto-generated message --> markers), or
  2. Move/rename docs/expensify-classic/hubs/.../Sync-Errors.html into a path that matches the ignore pattern (if appropriate for your use case)

If you see the error:

CER061: Object validation failed. The credit terms for the selected account are not correctly defined.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>) to visually distinguish it from surrounding prose.

Suggested change
> CER061: Object validation failed. The credit terms for the selected account are not correctly defined.

If you see the error:

CER074: Insufficient permissions for Resource.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER074: Insufficient permissions for Resource.

If you see the error:

CER076: Employee not found in Certinia.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER076: Employee not found in Certinia.

If you see the error:

CER089: Assignment required for Project.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER089: Assignment required for Project.

If you see the error:

CER091: Invalid field name.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER091: Invalid field name.

If you see the error:

CER289: Duplicate value on record.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER289: Duplicate value on record.

If you see the error:

CER493: Necessary field unavailable in mapping.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER493: Necessary field unavailable in mapping.

If you see the error:

CER521: Assignment resource must match expense report resource.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER521: Assignment resource must match expense report resource.

If you see the error:

CER552: No project managers found in Certinia.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER552: No project managers found in Certinia.

If you see the error:

CER937: Please update Expensify in Certinia.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER937: Please update Expensify in Certinia.

If you see the error:

CER047: "Ops Edit" permission is required to edit approved records.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER047: "Ops Edit" permission is required to edit approved records.

If you see the error:

CER074: Insufficient permissions for Resource.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Formatting violation: The error message text should be formatted as a blockquote (>).

Suggested change
> CER074: Insufficient permissions for Resource.

Disconnecting removes the active integration and clears imported options.

### How to disconnect Certinia

Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading hierarchy violation: ### heading should be ## per HelpDot standards.

Suggested change
## How to disconnect Certinia

- **Project Status** = Closed
- **Closed for Expense Entry** = Checked

### How to resolve project export limitations
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading hierarchy violation: ### heading should be ## per HelpDot standards.

Suggested change
### How to resolve project export limitations
## How to resolve project export limitations


Yes. Project settings in Certinia can prevent expenses from exporting.

### Expenses can be exported when:
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Heading hierarchy violation: ### headings like "Expenses can be exported when:" and "Expenses cannot be exported when:" (lines 96 and 102) should be ## per HelpDot standards. No heading level deeper than H2 should be used.


## Can I Retry the Export?

Yes. After enabling **Expense Ops Edit** and selecting **Sync Now**, retry the export. If the error persists, confirm the permission is applied to the exact user connected to the integration.
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / FAQ Title Case violation: FAQ questions throughout this file use Title Case ("Can I Retry the Export?", "Does CER047 Mean My Expense Was Deleted?", "Is CER047 Caused by Workspace Settings?"). Use sentence case instead for consistency: "Can I retry the export?", "Does CER047 mean my expense was deleted?", "Is CER047 caused by workspace settings?" This applies to all FAQ sections across all error articles in this PR.

Suggested change
Yes. After enabling **Expense Ops Edit** and selecting **Sync Now**, retry the export. If the error persists, confirm the permission is applied to the exact user connected to the integration.
## Can I retry the export?

- Required credit term fields are missing on the associated account.
- Credit term configuration does not meet Certinia validation requirements.
- The export is being blocked due to incomplete payment term settings.

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability violation: The phrase "Enter one or more in Days Offset" is unclear. It should specify what to enter -- e.g., "Enter a value of one or more in Days Offset" or "Set Days Offset to at least 1."


### How to verify company card export mapping

1. Go to the navigation tabs on the left.
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability / Navigation path concern: The navigation instructions here say "Go to the navigation tabs on the left" and then "Click Settings" followed by "Click Domains." This Expensify Classic navigation path appears multiple times in this file (lines 49-52, 64-66, 80-82). Consider using a consistent, concise format such as: "Go to Settings > Domains > Company Cards" to match the compact navigation path style used in the error articles (e.g., "Settings > Workspaces").

This means Certinia has detected that the Expensify integration configuration is outdated and must be updated before exports or syncs can proceed.

---

Copy link
Contributor

Choose a reason for hiding this comment

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

Readability violation: Horizontal rules (---) are used as section dividers between every section (lines 17, 34, 51, and before FAQ). This is excessive in a short article and creates visual clutter rather than improving scannability. Headings already provide sufficient visual separation. Consider removing all --- dividers, or reserving them only before the # FAQ section as a convention to separate the main content from FAQs. This pattern applies to all 16 error articles in this PR.

---
title: CER937 Error in Certinia Integration
description: Learn what the CER937 error means in Certinia and how to update the Expensify integration configuration to restore syncing.
keywords: CER937, Certinia export error, update Expensify in Certinia, Certinia connection issue, Expensify Certinia sync error, Workspace Admin
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Keywords concern: The keywords include "Certinia export error" but this file is in the Authentication-and-Login-errors/ directory. Consider replacing "Certinia export error" with "Certinia authentication error" or "Certinia login error" to match the categorization and improve search discoverability for authentication-related queries.

Suggested change
keywords: CER937, Certinia export error, update Expensify in Certinia, Certinia connection issue, Expensify Certinia sync error, Workspace Admin
keywords: CER937, Certinia authentication error, update Expensify in Certinia, Certinia connection issue, Expensify Certinia sync error, Workspace Admin

@github-actions github-actions bot changed the title Add Certinia troubleshooting docs (Expensify Classic only) [No QA] Add Certinia troubleshooting docs (Expensify Classic only) Mar 10, 2026
@OSBotify
Copy link
Contributor

OSBotify commented Mar 10, 2026

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

Updated articles:

title: Certinia Integration FAQ and Export Troubleshooting
description: Learn why reports may not export to Certinia, how to manually export, fix company card export issues, manage project limitations, and disconnect the Certinia integration.
keywords: Certinia export not working, automatic export failed, manual export Certinia, company card wrong account export, preferred exporter domain admin, disconnect Certinia, Certinia project status export limitation, assignment status export, Workspace Admin
internalScope: Audience is Workspace Admins and Domain Admins using the Certinia integration. Covers common export failures, manual export restrictions, company card export mapping, project limitations, and disconnecting Certinia. Does not cover specific Certinia error codes.
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / YAML metadata concern: The frontmatter keywords field includes "Workspace Admin" as a keyword. While the internalScope field correctly references the audience, consider also adding navigation-path keywords like "Settings, Workspaces, Accounting, Domains" to improve AI retrieval for users searching by navigation context.


---

## Why the CER076 Export Error Happens in Certinia
Copy link
Contributor

Choose a reason for hiding this comment

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

Expensify Style Compliance concern: Line 18 says "Add the user's Expensify email address to the employee record." The word "user" should generally be "member" per Expensify terminology guidelines. However, since this refers to a Certinia record context rather than an Expensify role, this may be acceptable. Please confirm whether "member" is more appropriate here.

Suggested change
## Why the CER076 Export Error Happens in Certinia
4. Add the member's Expensify email address to the employee record.


The CER091 error typically indicates:

- A required field exists but is hidden under field-level security.
Copy link
Contributor

Choose a reason for hiding this comment

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

Readability violation: The sentence "Certinia requires required fields to be visible and accessible to the connected user profile during export" is redundant ("requires required"). Consider rephrasing:

Suggested change
- A required field exists but is hidden under field-level security.
Certinia needs all required fields to be visible and accessible to the connected user profile during export.

@github-actions
Copy link
Contributor

PR Description Inconsistency

The PR title says "Add Certinia troubleshooting docs (Expensify Classic only)" but the PR body says:

Creates .MD files for NetSuite integration error messages (New Expensify)

This appears to be a copy-paste error from a previous PR. The body should reference Certinia and Expensify Classic to match the actual content.


# Certinia FAQ

## Why is my report not automatically exporting to Certinia?
Copy link
Contributor

Choose a reason for hiding this comment

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

AI Readiness / Structure note: This file is structured differently from the individual error articles. The error articles use # FAQ as an H1 heading with ## subheadings for each question. This FAQ file uses ## directly for questions with ### for sub-steps. While the overall structure works as a standalone FAQ page, the ### sub-headings should still be promoted to ## per the heading hierarchy standard (see separate comments on those lines). Also consider whether this file should follow the same # FAQ convention used by the error articles for consistency across the Certinia Troubleshooting section.

@github-actions
Copy link
Contributor

HelpDot Documentation Review

Overall Assessment

This PR adds 17 new Markdown documentation files and 1 hub HTML file for Certinia integration error troubleshooting under Expensify Classic. The articles follow a consistent template structure (error description, cause, fix steps, FAQ) and cover a meaningful range of Certinia error codes. However, several critical issues -- primarily copy-paste errors in the Sync-Errors directory and near-identical content duplication across directories -- need to be addressed before merging.

Scores Summary

  • Readability: 7/10 - Articles are clearly written with logical flow, appropriate reading level, and well-structured numbered steps. Error messages displayed as plain text (rather than blockquotes or code blocks) slightly reduce scannability.
  • AI Readiness: 5/10 - YAML metadata is well-formed with proper internalScope fields. However, the Sync-Errors files have incorrect metadata (titles and descriptions say "Export Error" instead of "Sync Error"), which would actively mislead AI systems. Duplicate content across directories without differentiation also degrades AI retrieval quality.
  • Style Compliance: 6/10 - Articles mostly follow Expensify formatting conventions but have several issues: FAQ headings use Title Case instead of sentence case, the Certinia-FAQ uses H3 headings (###) where H2 (##) is the expected maximum, and the PR description incorrectly states "NetSuite" and "New Expensify" when the content is Certinia and Expensify Classic.

Key Findings

Critical Issues

  1. Copy-paste errors in Sync-Errors directory. All four files under Sync-Errors/ (CER047, CER074, CER937, and partially CER132) have titles, descriptions, H1 headings, H2 headings, and body text that say "Export Error" instead of "Sync Error". For example, Sync-Errors/CER047-Error.md has title: CER047 Export Error in Certinia Integration and heading # CER047 Export Error in Certinia Integration. Only CER132 correctly uses "Sync Error" throughout. This affects metadata accuracy, headings, and body text in three of four Sync-Errors files.

  2. Near-identical content duplication. CER937 appears in three directories (Authentication-and-Login-errors, Export-Errors, Sync-Errors) with virtually identical content. CER047 and CER074 each appear in two directories (Export-Errors and Sync-Errors) with nearly identical content. If these errors genuinely appear in different contexts, the articles should explain the context-specific behavior (e.g., what triggers CER937 during authentication vs. export vs. sync) rather than repeating the same generic text. This undermines the purpose of having separate articles and will confuse both users and AI retrieval systems.

  3. PR description mismatch. The PR body states "Creates .MD files for NetSuite integration error messages (New Expensify)" but the actual files are for Certinia integration under Expensify Classic. This should be corrected for audit trail clarity.

Moderate Issues

  1. Error message formatting. All 17 articles display the error message as plain text (e.g., CER047: "Ops Edit" permission is required...). These should use blockquote formatting (>) or code blocks to visually distinguish the error message from the surrounding explanation.

  2. FAQ heading case. FAQ questions across all articles use Title Case (e.g., "Can I Retry the Export?", "Does CER937 Mean My Data Is Lost?"). Sentence case is the expected convention (e.g., "Can I retry the export?").

  3. H3 headings in Certinia-FAQ.md. This file uses ### (H3) headings in 7 places (e.g., "### How to resolve automatic export failures", "### How to verify company card export mapping"). HelpDot articles should generally stay at H2 (##) maximum depth for heading hierarchy.

  4. Navigation path accuracy. The error articles reference Settings > Workspaces which is New Expensify navigation. Since these are Expensify Classic docs (filed under docs/articles/expensify-classic/), the navigation paths should match the Classic UI. By contrast, the Certinia-FAQ.md file uses the verbose Classic-style navigation ("Go to the navigation tabs on the left. Click Settings..."). These two navigation styles are inconsistent across the PR.

Minor Issues

  1. "Save your changes" phrasing. Multiple articles end fix steps with "Save your changes." -- consider whether "Confirm" or a specific button label is more accurate per Expensify/Certinia UI terminology.

  2. "the user's" vs. "the member's". In CER076-Export-Error.md, step 4 reads "Add the user's Expensify email address" -- per Expensify terminology guidelines, "member" is typically preferred over "user."

  3. Horizontal rules. All articles use --- horizontal rules between sections. While not incorrect, these are unusual in HelpDot articles and add visual clutter without improving navigation.

Positive Aspects

  • Consistent article structure across all files makes the collection easy to navigate.
  • Clear, actionable fix steps that correctly identify the resolution as a Certinia-side configuration change.
  • Well-formed YAML frontmatter with internalScope fields that follow the recommended pattern.
  • The Certinia-FAQ.md provides useful general troubleshooting context that complements the error-specific articles.
  • Hub page for Sync-Errors is correctly structured and fills a gap in the existing documentation hierarchy.

Recommendations

  1. [Must Fix] Update all Sync-Errors files (CER047, CER074, CER937) to replace "Export Error" with "Sync Error" in titles, descriptions, keywords, headings, and body text.
  2. [Must Fix] Differentiate duplicated articles (CER937, CER047, CER074) across directories. Each copy should explain the context-specific trigger and resolution for that error type (auth, export, or sync).
  3. [Must Fix] Correct the PR description from "NetSuite integration error messages (New Expensify)" to "Certinia integration error messages (Expensify Classic)".
  4. [Should Fix] Format error messages using blockquote (>) or code block syntax for visual distinction.
  5. [Should Fix] Convert FAQ headings from Title Case to sentence case.
  6. [Should Fix] Replace H3 headings in Certinia-FAQ.md with H2 headings or restructure to avoid deep nesting.
  7. [Should Fix] Audit navigation paths to ensure they match Expensify Classic UI, and standardize the navigation format across all articles.
  8. [Nice to Have] Replace "the user's" with "the member's" per Expensify terminology.
  9. [Nice to Have] Remove horizontal rules between sections for consistency with other HelpDot articles.

Files Reviewed

File Status
Authentication-and-Login-errors/CER937-Error.md Needs differentiation from Export/Sync copies
Certinia-FAQ.md H3 headings and navigation style need adjustment
Export-Errors/CER047-Error.md Minor formatting issues
Export-Errors/CER061-Export-Error.md Minor formatting issues
Export-Errors/CER074-Error.md Minor formatting issues
Export-Errors/CER076-Export-Error.md "the user's" should be "the member's"
Export-Errors/CER089-Export-Error.md Minor formatting issues
Export-Errors/CER091-Export-Error.md Minor formatting issues
Export-Errors/CER289-Export-Error.md Minor formatting issues
Export-Errors/CER493-Export-Error.md Minor formatting issues
Export-Errors/CER521-Export-Error.md Minor formatting issues
Export-Errors/CER552-Error.md Minor formatting issues
Export-Errors/CER937-Error.md Needs differentiation from Auth/Sync copies
Sync-Errors/CER047-Error.md Critical: Says "Export Error" instead of "Sync Error" throughout
Sync-Errors/CER074-Error.md Critical: Says "Export Error" instead of "Sync Error" throughout
Sync-Errors/CER132-Sync-Error.md Correctly labeled as Sync Error; minor formatting
Sync-Errors/CER937-Error.md Critical: Says "Export Error" instead of "Sync Error" throughout
Sync-Errors.html (hub page) OK -- correctly structured

Final Recommendation: Request Changes

The copy-paste errors in Sync-Errors files and near-identical content duplication are significant issues that would degrade both user experience and AI retrieval accuracy. These must be addressed before merging.


This review covers only the proposed changes in the PR diff, not pre-existing content. All file paths are relative to docs/articles/expensify-classic/connections/certinia/Troubleshooting/ unless otherwise noted.

@stephanieelliott stephanieelliott requested review from CortneyOfstad and removed request for Gonals and sonialiap March 11, 2026 00:12
@stephanieelliott stephanieelliott force-pushed the helpsite-certinia-new-and-classic branch from 0f91864 to 341abf2 Compare March 11, 2026 00:19
- Expensify Classic: Certinia articles (Auth, Export, Sync errors, FAQ).
- Expensify Classic: add Sync-Errors hub page for Certinia so Sync-Errors articles are reachable (Auth and Export hubs already on main).
Part of Integration Errors Revamp (splitting PR #83106).
@stephanieelliott stephanieelliott force-pushed the helpsite-certinia-new-and-classic branch from 341abf2 to b0ecbc8 Compare March 11, 2026 00:21
@stephanieelliott
Copy link
Contributor Author

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified there are no new alerts related to the canBeMissing param for useOnyx
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:
    • I verified that all the inputs inside a form are aligned with each other.
    • I added Design label and/or tagged @Expensify/design so the design team can review the changes.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this flow.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: HybridApp
Android: mWeb Chrome
iOS: HybridApp
iOS: mWeb Safari
MacOS: Chrome / Safari

@stephanieelliott stephanieelliott merged commit 76846f7 into main Mar 11, 2026
13 of 14 checks passed
@stephanieelliott stephanieelliott deleted the helpsite-certinia-new-and-classic branch March 11, 2026 00:46
@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/stephanieelliott in version: 9.3.36-0 🚀

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

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/luacmartins in version: 9.3.36-10 🚀

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants