diff --git a/.well-known/assetlinks.json b/.well-known/assetlinks.json index a28004b45b08..803946f438d6 100644 --- a/.well-known/assetlinks.json +++ b/.well-known/assetlinks.json @@ -5,4 +5,12 @@ "package_name": "com.expensify.chat", "sha256_cert_fingerprints": ["2E:65:6F:1C:34:F5:7E:BF:FC:C0:2D:A3:14:0E:83:FE:61:51:F2:9B:5D:59:58:61:C4:4D:A9:99:0C:CA:F4:8E"] } -}] \ No newline at end of file + }, + { + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "org.me.mobiexpensifyg", + "sha256_cert_fingerprints": ["87:03:DC:2B:20:99:CB:F7:AF:39:0C:8F:F2:E4:78:F2:61:E9:D1:7E:F4:AF:E5:02:D9:72:F2:4D:1F:29:FF:65"] + } +}] diff --git a/README.md b/README.md index 730e745e368a..6b75fbed1b2c 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ * [Expensify Code of Conduct](CODE_OF_CONDUCT.md) * [Contributor License Agreement](contributingGuides/CLA.md) * [React StrictMode](contributingGuides/STRICT_MODE.md) +* [Left Hand Navigation(LHN)](contributingGuides/LEFT_HAND_NAVIGATION.md) ---- diff --git a/__mocks__/@react-native-firebase/analytics.ts b/__mocks__/@react-native-firebase/analytics.ts new file mode 100644 index 000000000000..1cc35724c726 --- /dev/null +++ b/__mocks__/@react-native-firebase/analytics.ts @@ -0,0 +1,5 @@ +export default function analytics() { + return { + logEvent: jest.fn(), + }; +} diff --git a/android/app/build.gradle b/android/app/build.gradle index dc48f3137f27..1731473b8e39 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -110,8 +110,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1009005801 - versionName "9.0.58-1" + versionCode 1009006203 + versionName "9.0.62-3" // Supported language variants must be declared here to avoid from being removed during the compilation. // This also helps us to not include unnecessary language variants in the APK. resConfigs "en", "es" diff --git a/assets/images/attachment-not-found.svg b/assets/images/attachment-not-found.svg new file mode 100644 index 000000000000..25da973ce9cb --- /dev/null +++ b/assets/images/attachment-not-found.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-amex-large.svg b/assets/images/companyCards/large/card-amex-large.svg new file mode 100644 index 000000000000..06f0f57e16d2 --- /dev/null +++ b/assets/images/companyCards/large/card-amex-large.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-bofa-large.svg b/assets/images/companyCards/large/card-bofa-large.svg new file mode 100644 index 000000000000..a842bc93d80b --- /dev/null +++ b/assets/images/companyCards/large/card-bofa-large.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-brex-large.svg b/assets/images/companyCards/large/card-brex-large.svg new file mode 100644 index 000000000000..e1a48c3dbe39 --- /dev/null +++ b/assets/images/companyCards/large/card-brex-large.svg @@ -0,0 +1,23 @@ + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-capital_one-large.svg b/assets/images/companyCards/large/card-capital_one-large.svg new file mode 100644 index 000000000000..b71e209a4c11 --- /dev/null +++ b/assets/images/companyCards/large/card-capital_one-large.svg @@ -0,0 +1,23 @@ + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-chase-large.svg b/assets/images/companyCards/large/card-chase-large.svg new file mode 100644 index 000000000000..2b0904ae225d --- /dev/null +++ b/assets/images/companyCards/large/card-chase-large.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-citi-large.svg b/assets/images/companyCards/large/card-citi-large.svg new file mode 100644 index 000000000000..14e3ecd36850 --- /dev/null +++ b/assets/images/companyCards/large/card-citi-large.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-expensify-large.svg b/assets/images/companyCards/large/card-expensify-large.svg new file mode 100644 index 000000000000..2cef4a59ca20 --- /dev/null +++ b/assets/images/companyCards/large/card-expensify-large.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-generic-large.svg b/assets/images/companyCards/large/card-generic-large.svg new file mode 100644 index 000000000000..542d34fada88 --- /dev/null +++ b/assets/images/companyCards/large/card-generic-large.svg @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-mastercard-large.svg b/assets/images/companyCards/large/card-mastercard-large.svg new file mode 100644 index 000000000000..efc27960ef73 --- /dev/null +++ b/assets/images/companyCards/large/card-mastercard-large.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-stripe-large.svg b/assets/images/companyCards/large/card-stripe-large.svg new file mode 100644 index 000000000000..cd084457f5b7 --- /dev/null +++ b/assets/images/companyCards/large/card-stripe-large.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-visa-large.svg b/assets/images/companyCards/large/card-visa-large.svg new file mode 100644 index 000000000000..0f000c5652df --- /dev/null +++ b/assets/images/companyCards/large/card-visa-large.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/companyCards/large/card-wellsfargo-large.svg b/assets/images/companyCards/large/card-wellsfargo-large.svg new file mode 100644 index 000000000000..ef9eb84a890d --- /dev/null +++ b/assets/images/companyCards/large/card-wellsfargo-large.svg @@ -0,0 +1,23 @@ + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/simple-illustrations/simple-illustration__perdiem.svg b/assets/images/simple-illustrations/simple-illustration__perdiem.svg new file mode 100644 index 000000000000..ea5a865a2694 --- /dev/null +++ b/assets/images/simple-illustrations/simple-illustration__perdiem.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/webpack/webpack.common.ts b/config/webpack/webpack.common.ts index ab5c304fcd1e..8aa8f5aa566c 100644 --- a/config/webpack/webpack.common.ts +++ b/config/webpack/webpack.common.ts @@ -84,7 +84,7 @@ const getCommonConfiguration = ({file = '.env', platform = 'web'}: Environment): isWeb: platform === 'web', isProduction: file === '.env.production', isStaging: file === '.env.staging', - useThirdPartyScripts: process.env.USE_THIRD_PARTY_SCRIPTS === 'true' || (platform === 'web' && file === '.env.production'), + useThirdPartyScripts: process.env.USE_THIRD_PARTY_SCRIPTS === 'true' || (platform === 'web' && ['.env.production', '.env.staging'].includes(file)), }), new PreloadWebpackPlugin({ rel: 'preload', diff --git a/contributingGuides/BUGZERO_CHECKLIST.md b/contributingGuides/BUGZERO_CHECKLIST.md index 00075620641c..96fb1c29432e 100644 --- a/contributingGuides/BUGZERO_CHECKLIST.md +++ b/contributingGuides/BUGZERO_CHECKLIST.md @@ -15,7 +15,8 @@ Source of bug: Where bug was reported: - [ ] 2a. Reported on production - [ ] 2b. Reported on staging (deploy blocker) - - [ ] 2c. Reported on a PR + - [ ] 2c. Reported on both staging and production + - [ ] 2d. Reported on a PR - [ ] 2z. Other: Who reported the bug: @@ -39,7 +40,7 @@ Who reported the bug:
Regression Test Proposal Template - + - [ ] **[BugZero Assignee]** Create a GH issue for creating/updating the regression test once above steps have been agreed upon. diff --git a/contributingGuides/CONTRIBUTING.md b/contributingGuides/CONTRIBUTING.md index be71cd4e115a..0a9417820190 100644 --- a/contributingGuides/CONTRIBUTING.md +++ b/contributingGuides/CONTRIBUTING.md @@ -11,6 +11,7 @@ You can create as many accounts as needed in order to test your changes directly 1. When testing chat functionality in the app please do this between accounts you or your fellow contributors own - **do not test chatting with Concierge**, as this diverts to our customer support team. Thank you. 2. A member of our customer onboarding team gets auto-assigned to every new policy created by a non-paying account to help them set up. Please **do not interact with these teams, ask for calls, or support on your issues.** If you do need to test functionality inside the defaultRooms (#admins & #announce) for any issues you’re working on, please let them know that you are a contributor and don’t need assistance. They will proceed to ignore the chat. +3. Please **do not post in any Expensify owned public room for testing** (e.g #exfy-roadmap, #new-expensify-feedback). These rooms include real customers and investors. You can create your own public rooms, or [use this test public room](https://staging.new.expensify.com/r/2091104345528462) on either staging or production. Thanks! #### Generating Multiple Test Accounts You can generate multiple test accounts by using a `+` postfix, for example if your email is test@test.com, you can create multiple New Expensify accounts connected to the same email address by using test+123@test.com, test+456@test.com, etc. diff --git a/contributingGuides/LEFT_HAND_NAVIGATION.md b/contributingGuides/LEFT_HAND_NAVIGATION.md new file mode 100644 index 000000000000..344b0c4f8ecf --- /dev/null +++ b/contributingGuides/LEFT_HAND_NAVIGATION.md @@ -0,0 +1,44 @@ +## OVERVIEW + +The Left Hand Navigation (LHN) is designed to show different types of reports based on their status, user settings, and specific conditions. Each report type has unique visual indicators and sorting rules to help users quickly identify and prioritize their tasks. + +### Types of report displayed in the LHN + +The following outlines the expected behavior regarding which reports are displayed in the LHN: + +- The report currently being viewed by the user is highlighted as the active report in the LHN, making it easy for users to locate their focus point within the navigation. +If a report has unresolved issues, like an unapproved expense or outstanding violations, it will display a red dot next to it, indicating urgent action is required. These reports are displayed at the top of the LHN list (under pinned chats) and sorted alphabetically by report name for easy access. +- Reports that need user action, such as responding to a message that mentions them, completing an assigned task, or addressing an expense, will display a green dot next to them. Additionally, if a system or concierge message indicates a trial period has expired and a payment method is missing, it will prompt the user with a similar green dot. This visual indicator helps users quickly identify where their attention is required. +- If a user has started drafting a comment in a report, a pencil icon as indicator appears next to it in the LHN, letting users know there is an incomplete draft. These reports are sorted alphabetically by report name. +- Pinned reports are always displayed at the top of the LHN list and are sorted alphabetically by name, giving quick access to reports the user wants to keep top-of-mind. +- When the user has focus mode enabled, unread chat messages will display in bold in the LHN. This also applies to reports where notifications are hidden. Unread chats in focus mode are sorted alphabetically by report name to help users locate them more easily. +- Archived reports are displayed in the LHN when the user is in default mode. These reports are shown with an indication that they are archived and are sorted by the date of the last visible action, with the most recent appearing first. +- Self-DM messages will now be displayed in LHN. This allows users who want to track their own notes or messages in the LHN to do so without needing to look elsewhere. + +### Types of report excluded from the LHN + +Certain reports are excluded from the LHN to avoid clutter and to focus on relevant content for the user: + +- Reports that are explicitly marked as hidden. +- Reports with no participants are not displayed, as they lack meaningful content. +- If the user does not have permission to access a report (due to policy restrictions), it will not be shown. +- Transaction threads that contain only one transaction are excluded. +- If a report is an empty chat, unless it's a report user is actively looking at. +- For users with domain-based email addresses, reports are hidden if the includeDomainEmail setting is disabled. +- Reports with a parent message pending deletion. +- When focus mode is enabled and there are no unread messages. + +### Sorting priorities for displayed report groups + +1. Pinned, RBR and attention-required (GBR) reports: + - Always sorted alphabetically by report name. +2. Error reports: + - Sorted alphabetically by report name. +3. Draft reports: + - Sorted alphabetically by report name. +4. Non-Archived reports: + - In default mode, these are sorted by the lastVisibleActionCreated date, so the most recently updated reports appear first. + - In focus mode, these reports are sorted alphabetically by name for quicker navigation. +5. Archived eports: + - In default mode, these are sorted by lastVisibleActionCreated, with recent reports displayed first. + - In focus mode, archived reports are sorted alphabetically by name. diff --git a/contributingGuides/PERFORMANCE_METRICS.md b/contributingGuides/PERFORMANCE_METRICS.md index 6c40e346a3ce..ecebbaae4e0e 100644 --- a/contributingGuides/PERFORMANCE_METRICS.md +++ b/contributingGuides/PERFORMANCE_METRICS.md @@ -14,21 +14,16 @@ Project is using Firebase for tracking these metrics. However, not all of them a | `js_loaded` | ✅ | The time it takes for the JavaScript bundle to load.

**Platforms:** Android, iOS | **Android:** Starts in the `onCreate` method.

**iOS:** Starts in the AppDelegate's `didFinishLaunchingWithOptions` method. | Stops at the first render of the app via native module on the JS side. | | `_app_in_foreground` | ✅ | The time when the app is running in the foreground and available to the user.

**Platforms:** Android, iOS | **Android:** Starts when the first activity to reach the foreground has its `onResume()` method called.

**iOS:** Starts when the application receives the `UIApplicationDidBecomeActiveNotification` notification. | **Android:** Stops when the last activity to leave the foreground has its `onStop()` method called.

**iOS:** Stops when it receives the `UIApplicationWillResignActiveNotification` notification. | | `_app_in_background` | ✅ | Time when the app is running in the background.

**Platforms:** Android, iOS | **Android:** Starts when the last activity to leave the foreground has its `onStop()` method called.

**iOS:** Starts when the application receives the `UIApplicationWillResignActiveNotification` notification. | **Android:** Stops when the first activity to reach the foreground has its `onResume()` method called.

**iOS:** Stops when it receives the `UIApplicationDidBecomeActiveNotification` notification. | -| `homepage_initial_render` | ✅ | Time taken for the initial render of the app for a logged in user.

**Platforms:** All | Starts with the first render of the `AuthScreens` component. | Stops once the `AuthScreens` component is mounted. | -| `sidebar_loaded` | ❌ | Time taken for the Sidebar to load.

**Platforms:** All | Starts when the Sidebar is mounted. | Stops when the Splash Screen is hidden. | +| `sidebar_loaded` | ❌ | Time taken for the Sidebar to load.

**Platforms:** All | Starts when the Sidebar is mounted. | Stops when the LHN finishes laying out. | | `calc_most_recent_last_modified_action` | ✅ | Time taken to find the most recently modified report action or report.

**Platforms:** All | Starts when the app reconnects to the network | Ends when the app reconnects to the network and the most recent report action or report is found. | -| `search_render` | ✅ | Time taken to render the Chat Finder page.

**Platforms:** All | Starts when the Chat Finder icon in LHN is pressed. | Stops when the list of available options is rendered for the first time. | -| `load_search_options` | ✅ | Time taken to generate the list of options used in Chat Finder.

**Platforms:** All | Starts when the `getSearchOptions` function is called. | Stops when the list of available options is generated. | -| `search_filter_options` | ✅ | Time taken to filter search options in Chat Finder by given search value.

**Platforms:** All | Starts when user types something in the Chat Finder search input. | Stops when the list of filtered options is generated. | +| `open_search` | ✅ | Time taken to open up the Search Router.

**Platforms:** All | Starts when the Search Router icon in LHN is pressed. | Stops when the list of available options finishes laying out. | +| `load_search_options` | ✅ | Time taken to generate the list of options used in the Search Router.

**Platforms:** All | Starts when the `getSearchOptions` function is called. | Stops when the list of available options is generated. | +| `search_filter_options` | ✅ | Time taken to filter search options in the Search Router by the given search value.

**Platforms:** All | Starts when user types something in the Search Router search input. | Stops when the list of filtered options is generated. | | `trie_initialization` | ✅ | Time taken to build the emoji trie.

**Platforms:** All | Starts when emoji trie begins to build. | Stops when emoji trie building is complete. | -| `open_report` | ❌ | Time taken to open a report.

**Platforms:** All | Starts when the row in the `LHNOptionsList` is pressed. | Stops when the `ReportActionsList` finishes laying out. | -| `switch_report` | ✅ | Time taken to open report.

**Platforms:** All | Starts when the chat in the LHN is pressed. | Stops when the `ReportActionsList` finishes laying out. | +| `open_report` | ✅ | Time taken to open a report.

**Platforms:** All | Starts when the row in the `LHNOptionsList` is pressed. | Stops when the `ReportActionsList` finishes laying out. | | `open_report_from_preview` | ✅ | Time taken to open a report from preview.

(previously `switch_report_from_preview`)

**Platforms:** All | Starts when the user presses the Report Preview. | Stops when the `ReportActionsList` finishes laying out. | -| `switch_report_from_preview` | ❌ | **[REMOVED]** Time taken to open a report from preview. | Starts when the user presses the Report Preview. | Stops when the `ReportActionsList` finishes laying out. | -| `chat_render` | ✅ | Time taken to render the Report screen.

**Platforms:** All | Starts when the `ReportScreen` is being rendered for the first time. | Stops once the `ReportScreen` component is mounted. | -| `report_initial_render` | ❌ | Time taken to render the Report screen.

**Platforms:** All | Starts when the first item is rendered in the `LHNOptionsList`. | Stops when the `ReportActionsList` finishes laying out. | | `open_report_thread` | ✅ | Time taken to open a thread in a report.

**Platforms:** All | Starts when user presses Report Action Item. | Stops when the `ReportActionsList` finishes laying out. | -| `message_sent` | ❌ | Time taken to send a message.

**Platforms:** All | Starts when the new message is sent. | Stops when the message is being rendered in the chat. | +| `send_message` | ✅ | Time taken to send a message.

**Platforms:** All | Starts when the new message is sent. | Stops when the message is being rendered in the chat. | ## Documentation Maintenance @@ -46,4 +41,4 @@ To ensure this documentation remains accurate and useful, please adhere to the f ## Additional Resources - [Firebase Documentation](https://firebase.google.com/docs) -- [Firebase Performance Monitoring](https://firebase.google.com/docs/perf-mon) \ No newline at end of file +- [Firebase Performance Monitoring](https://firebase.google.com/docs/perf-mon) diff --git a/desktop/main.ts b/desktop/main.ts index 1221b05a8388..04aa3e1b478e 100644 --- a/desktop/main.ts +++ b/desktop/main.ts @@ -1,5 +1,5 @@ import {app, BrowserWindow, clipboard, dialog, ipcMain, Menu, shell} from 'electron'; -import type {BrowserView, MenuItem, MenuItemConstructorOptions, WebContents, WebviewTag} from 'electron'; +import type {BaseWindow, BrowserView, MenuItem, MenuItemConstructorOptions, WebContents, WebviewTag} from 'electron'; import contextMenu from 'electron-context-menu'; import log from 'electron-log'; import type {ElectronLog} from 'electron-log'; @@ -47,6 +47,8 @@ function pasteAsPlainText(browserWindow: BrowserWindow | BrowserView | WebviewTa const text = clipboard.readText(); if ('webContents' in browserWindow) { + // https://github.com/sindresorhus/electron-context-menu is passing in deprecated `BrowserView` to this function + // eslint-disable-next-line deprecation/deprecation browserWindow.webContents.insertText(text); } } @@ -107,7 +109,7 @@ process.argv.forEach((arg) => { return; } - expectedUpdateVersion = arg.substr(`${EXPECTED_UPDATE_VERSION_FLAG}=`.length); + expectedUpdateVersion = arg.slice(`${EXPECTED_UPDATE_VERSION_FLAG}=`.length); }); // Add the listeners and variables required to ensure that auto-updating @@ -132,7 +134,7 @@ const quitAndInstallWithUpdate = () => { }; /** Menu Item callback to trigger an update check */ -const manuallyCheckForUpdates = (menuItem?: MenuItem, browserWindow?: BrowserWindow) => { +const manuallyCheckForUpdates = (menuItem?: MenuItem, browserWindow?: BaseWindow) => { if (menuItem) { // Disable item until the check (and download) is complete // eslint-disable-next-line no-param-reassign -- menu item flags like enabled or visible can be dynamically toggled by mutating the object @@ -427,7 +429,7 @@ const mainWindow = (): Promise => { id: 'back', accelerator: process.platform === 'darwin' ? 'Cmd+[' : 'Shift+[', click: () => { - browserWindow.webContents.goBack(); + browserWindow.webContents.navigationHistory.goBack(); }, }, { @@ -435,14 +437,14 @@ const mainWindow = (): Promise => { visible: false, accelerator: process.platform === 'darwin' ? 'Cmd+Left' : 'Shift+Left', click: () => { - browserWindow.webContents.goBack(); + browserWindow.webContents.navigationHistory.goBack(); }, }, { id: 'forward', accelerator: process.platform === 'darwin' ? 'Cmd+]' : 'Shift+]', click: () => { - browserWindow.webContents.goForward(); + browserWindow.webContents.navigationHistory.goForward(); }, }, { @@ -450,7 +452,7 @@ const mainWindow = (): Promise => { visible: false, accelerator: process.platform === 'darwin' ? 'Cmd+Right' : 'Shift+Right', click: () => { - browserWindow.webContents.goForward(); + browserWindow.webContents.navigationHistory.goForward(); }, }, ], @@ -507,7 +509,7 @@ const mainWindow = (): Promise => { const denial = {action: 'deny'} as const; // Make sure local urls stay in electron perimeter - if (url.substr(0, 'file://'.length).toLowerCase() === 'file://') { + if (url.slice(0, 'file://'.length).toLowerCase() === 'file://') { return denial; } @@ -539,19 +541,19 @@ const mainWindow = (): Promise => { // Initiating a browser-back or browser-forward with mouse buttons should navigate history. browserWindow.on('app-command', (e, cmd) => { if (cmd === 'browser-backward') { - browserWindow.webContents.goBack(); + browserWindow.webContents.navigationHistory.goBack(); } if (cmd === 'browser-forward') { - browserWindow.webContents.goForward(); + browserWindow.webContents.navigationHistory.goForward(); } }); browserWindow.on('swipe', (e, direction) => { if (direction === 'left') { - browserWindow.webContents.goBack(); + browserWindow.webContents.navigationHistory.goBack(); } if (direction === 'right') { - browserWindow.webContents.goForward(); + browserWindow.webContents.navigationHistory.goForward(); } }); diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 926fb1e24d22..a8bbd48c1818 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -27,6 +27,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -35,6 +36,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -54,6 +56,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -75,6 +78,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -90,6 +94,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -100,7 +105,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/debug": { "version": "4.3.7", @@ -123,6 +129,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-2.5.2.tgz", "integrity": "sha512-1cEQR6fA9ktFsRBc+eXPwvrOgAPytUD7rUV4iBAA5zTrLAPKokJ23xeMjcK2fjrDPrlFRBxcLz0KP+GUhMrSCQ==", + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "electron-dl": "^3.1.0", @@ -133,14 +140,18 @@ } }, "node_modules/electron-dl": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", - "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.5.2.tgz", + "integrity": "sha512-i104cl+u8yJ0lhpRAtUWfeGuWuL1PL6TBiw2gLf0MMIBjfgE485Ags2mcySx4uWU9P9uj/vsD3jd7X+w1lzZxw==", + "license": "MIT", "dependencies": { "ext-name": "^5.0.0", "pupa": "^2.0.1", "unused-filename": "^2.1.0" }, + "engines": { + "node": ">=12" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -148,7 +159,8 @@ "node_modules/electron-is-dev": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz", - "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==" + "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==", + "license": "MIT" }, "node_modules/electron-log": { "version": "4.4.8", @@ -174,12 +186,14 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -188,6 +202,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "license": "MIT", "dependencies": { "mime-db": "^1.28.0" }, @@ -199,6 +214,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "license": "MIT", "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -229,6 +245,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -236,7 +253,8 @@ "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -300,7 +318,8 @@ "node_modules/modify-filename": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", + "integrity": "sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -320,6 +339,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -328,6 +348,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "license": "MIT", "dependencies": { "escape-goat": "^2.0.0" }, @@ -357,6 +378,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -369,7 +391,8 @@ "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -380,7 +403,8 @@ "node_modules/sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "license": "MIT", "dependencies": { "sort-keys": "^1.0.0" }, @@ -392,6 +416,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -405,6 +430,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -429,6 +455,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-2.1.0.tgz", "integrity": "sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==", + "license": "MIT", "dependencies": { "modify-filename": "^1.1.0", "path-exists": "^4.0.0" @@ -518,9 +545,9 @@ } }, "electron-dl": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.3.0.tgz", - "integrity": "sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.5.2.tgz", + "integrity": "sha512-i104cl+u8yJ0lhpRAtUWfeGuWuL1PL6TBiw2gLf0MMIBjfgE485Ags2mcySx4uWU9P9uj/vsD3jd7X+w1lzZxw==", "requires": { "ext-name": "^5.0.0", "pupa": "^2.0.1", @@ -602,7 +629,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" }, "js-yaml": { "version": "4.1.0", @@ -652,7 +679,7 @@ "modify-filename": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=" + "integrity": "sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==" }, "ms": { "version": "2.1.3", @@ -700,7 +727,7 @@ "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "requires": { "is-plain-obj": "^1.0.0" } @@ -708,7 +735,7 @@ "sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "requires": { "sort-keys": "^1.0.0" } diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 4c492ae1e251..9932c5f85699 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,70 +1,85 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + bigdecimal (3.1.8) colorator (1.1.0) - concurrent-ruby (1.1.10) + concurrent-ruby (1.3.4) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.15.5) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86_64-darwin) forwardable-extended (2.6.0) + google-protobuf (4.28.3-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.3-x86_64-darwin) + bigdecimal + rake (>= 13) http_parser.rb (0.8.0) - i18n (0.9.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) - jekyll (3.9.3) + jekyll (4.3.4) addressable (~> 2.4) colorator (~> 1.0) em-websocket (~> 0.5) - i18n (>= 0.7, < 2) - jekyll-sass-converter (~> 1.0) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) - mercenary (~> 0.3.3) + mercenary (>= 0.3.6, < 0.5) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) - jekyll-feed (0.15.1) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-feed (0.17.0) jekyll (>= 3.7, < 5.0) jekyll-redirect-from (0.16.0) jekyll (>= 3.3, < 5.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) jekyll-seo-tag (2.8.0) jekyll (>= 3.8, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (2.3.2) + kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.4) - listen (3.7.1) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) + mercenary (0.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.7) - rb-fsevent (0.11.1) - rb-inotify (0.10.1) + public_suffix (6.0.1) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) + rexml (3.3.9) + rouge (4.4.0) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - webrick (1.7.0) + sass-embedded (1.80.6-arm64-darwin) + google-protobuf (~> 4.28) + sass-embedded (1.80.6-x86_64-darwin) + google-protobuf (~> 4.28) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.6.0) + webrick (1.9.0) PLATFORMS arm64-darwin-22 arm64-darwin-23 + arm64-darwin-24 x86_64-darwin-20 x86_64-darwin-21 diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index 798fb2cf7e96..c7b55b28cfd5 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -50,10 +50,10 @@

Resources

ExpensifyHelp
  • - Community + Terms of Service
  • - Privacy + Privacy
  • diff --git a/docs/_sass/_main.scss b/docs/_sass/_main.scss index 82446fe08b3a..bc2b9e8499fa 100644 --- a/docs/_sass/_main.scss +++ b/docs/_sass/_main.scss @@ -149,7 +149,7 @@ button, input, select, textarea { - line-height: 1.4; + line-height: 1.33; font-weight: 400; font-family: 'Expensify Neue', 'Helvetica Neue', 'Helvetica', Arial, sans-serif; font-size: 16px; @@ -374,6 +374,18 @@ button { } } + li { + padding-bottom: 4px; + } + + ol { + li { + ul { + padding-bottom: 0; + } + } + } + table { margin-bottom: 20px; border-radius: 8px; @@ -417,6 +429,12 @@ button { flex-wrap: wrap; } + h1, + h2, + h3 { + line-height: 1.2; + } + h1, summary { font-size: 1.5em; diff --git a/docs/articles/expensify-classic/bank-accounts-and-payments/bank-accounts/Enable-Global-Reimbursements.md b/docs/articles/expensify-classic/bank-accounts-and-payments/bank-accounts/Enable-Global-Reimbursements.md index 37d8d8bbe42b..02ee7b7ce04a 100644 --- a/docs/articles/expensify-classic/bank-accounts-and-payments/bank-accounts/Enable-Global-Reimbursements.md +++ b/docs/articles/expensify-classic/bank-accounts-and-payments/bank-accounts/Enable-Global-Reimbursements.md @@ -16,8 +16,6 @@ Before you can complete this process, you must first connect a **verified** U.S. Once your verified U.S. bank account has been added and verified, you can request that global reimbursements be enabled on your account. -Click the support icon in your Expensify account to inform your Setup Specialist, Account Manager, or Concierge that you’d like to enable global reimbursements. They will ask you to confirm the currencies of the bank accounts and determine if your account meets the criteria for global reimbursements. - ## Step 2: Re-verify the bank account 1. Hover over **Settings**, then click **Workspaces**. @@ -28,12 +26,6 @@ Click the support icon in your Expensify account to inform your Setup Specialist 6. Ensure that the reimbursement method is set to **Direct** and that the right bank account is selected. 7. Click the **Payments** tab on the left. 8. Click **Enable Global Reimbursement** next to the bank account. - -{% include info.html %} -This button may not appear for up to 60 minutes after the Expensify team confirms global reimbursements for your account. -{% include end-info.html %} - -{:start="9"} 9. Complete the International Reimbursement DocuSign form. Once the form is complete, it is automatically sent to our Compliance Team for review. Our Support Team will contact you with more details if additional information is required, which may include: @@ -43,11 +35,7 @@ Once the form is complete, it is automatically sent to our Compliance Team for r # For AUD, CAD, GBP, and EUR accounts -## Step 1: Request global reimbursements - -Click the support icon in your Expensify account to inform your Setup Specialist, Account Manager, or Concierge that you’d like to enable global reimbursements. They will ask you to confirm the currencies of the bank accounts and determine if your account meets the criteria for global reimbursements. - -## Step 2: Add the bank account +## Step 1: Add the bank account 1. Hover over **Settings**, then click **Workspaces**. 2. Select the workspace. @@ -55,12 +43,6 @@ Click the support icon in your Expensify account to inform your Setup Specialist 4. Ensure that the selected workspace currency matches your reimbursement bank account currency. 5. Click the **Reimbursements** tab on the left. 6. Set the reimbursement method to **Direct**. - -{% include info.html %} -This button may not appear for up to 60 minutes after the Expensify team confirms global reimbursements for your account. -{% include end-info.html %} - -{:start="7"} 7. Click **Add Business Bank Account**. 8. If necessary, click **Switch Country** to select the correct country if not automatically selected. 9. Enter the bank account details, then click **Save & Continue**. diff --git a/docs/articles/expensify-classic/connections/quickbooks-online/Configure-Quickbooks-Online.md b/docs/articles/expensify-classic/connections/quickbooks-online/Configure-Quickbooks-Online.md index 3fd1df0c0a1c..a6e19f8fd549 100644 --- a/docs/articles/expensify-classic/connections/quickbooks-online/Configure-Quickbooks-Online.md +++ b/docs/articles/expensify-classic/connections/quickbooks-online/Configure-Quickbooks-Online.md @@ -40,6 +40,7 @@ The following steps help you determine how data will be exported from Expensify - Journal Entries - This is a single itemized journal entry for each Expensify report. - _Non-reimbursable expenses_: Non-reimbursable expenses export to QuickBooks Online as: - Credit Card expenses - Each expense will be exported as a bank transaction with its transaction date. + - Note: The Expensify Card transactions will always export as Credit Card charges, even if the non-reimbursable setting is configured differently (such as a Vendor Bill.) - Debit Card Expenses - Each expense will be exported as a bank transaction with its transaction date. - Vendor Bills - A single detailed vendor bill is generated for each Expensify report. - If the accounting period is closed, the vendor bill will be posted on the first day of the next open period. If you choose to export non-reimbursable expenses as Vendor Bills, you can assign a default vendor to the bill. diff --git a/docs/articles/expensify-classic/connections/quickbooks-online/Quickbooks-Online-Troubleshooting.md b/docs/articles/expensify-classic/connections/quickbooks-online/Quickbooks-Online-Troubleshooting.md index 6a43141f1ab9..a397e34accb0 100644 --- a/docs/articles/expensify-classic/connections/quickbooks-online/Quickbooks-Online-Troubleshooting.md +++ b/docs/articles/expensify-classic/connections/quickbooks-online/Quickbooks-Online-Troubleshooting.md @@ -18,7 +18,7 @@ This error occurs when the account applied as a category to the expense in Expen 5. Click on the pencil icon on the right to check if you have "In multiple accounts" selected: 6. If "In multiple accounts" is selected, go to Chart of Accounts and click Edit for the account in question. 7. Check the billable option and select an income account within your chart of accounts -8. Sync your QuickBooks Online connection in Settings > Workspaces > [workspace name] > Connections. +8. Sync your QuickBooks Online connection in Settings > Workspaces > Workspace Name > Connections. 9. Open the report and click the Export to button and then the QuickBooks Online option. # ExpensiError QBO046: Feature Not Included in Subscription @@ -44,11 +44,11 @@ QuickBooks Online requires all expenses exported from Expensify to use a categor ## How to fix it -1. Sync your QuickBooks Online connection in Expensify from Settings > Workspaces > [workspace name] > Connections, and click the **Sync Now** button. +1. Sync your QuickBooks Online connection in Expensify from Settings > Workspaces > Workspace Name > Connections, and click the **Sync Now** button. 2. Review the expenses on the report. If any appear with a red _Category no longer valid_ violation, recategorize the expense until all expenses are violation-free. 3. Click the **Export t**o button and then the **QuickBooks Online** option. - If you receive the same error, continue. -4. Note the categories used on the expenses and check the Settings > Workspaces > [workspace name] > Categories page to confirm the exact categories used on the report are enabled and connected to QuickBooks Online (you'll see a green QB icon next to all connected categories). +4. Note the categories used on the expenses and check the Settings > Workspaces > Workspace Name > Categories page to confirm the exact categories used on the report are enabled and connected to QuickBooks Online (you'll see a green QB icon next to all connected categories). 5. Confirm the categories used on the expenses in the report match exactly the accounts in your QuickBooks Online chart of accounts. 6. If you make any changes in QuickBooks Online or in Expensify, always sync the connection and then try to export again. @@ -67,13 +67,13 @@ There are two different ways you can resolve this error. 1. Log into QuickBooks Online. 2. Access the Employee Records for your submitters. 3. Edit the name to differentiate them from the name they have on their account in Expensify. -4. Sync your QuickBooks Online connection in Settings > Workspaces > [workspace name] > Connections. +4. Sync your QuickBooks Online connection in Settings > Workspaces > Workspace Name > Connections. 5. Open the report and click the Export to button and then the QuickBooks Online option. **Option 2**: 1. Log into QuickBooks Online. 2. Manually create all of your Vendor Records, making sure that the email matches the email address associated with the user in Expensify. - - In this case, we recommend disabling _Automatically Create Entities_ under Settings > Workspaces > [workspace name] > Connections > Configure > Advanced, so that you will receive the correct error messages when a vendor record doesn't exist. + - In this case, we recommend disabling _Automatically Create Entities_ under Settings > Workspaces > Workspace Name > Connections > Configure > Advanced, so that you will receive the correct error messages when a vendor record doesn't exist. # ExpensiError QBO097: When You Use Accounts Payable, You Must Choose a Vendor in the Name Field @@ -84,8 +84,8 @@ This error occurs when you are exporting reimbursable expenses as Journal Entrie ## How to fix it There are three different ways you can resolve this error. -- Select a different type of export for reimbursable expenses under Settings > Workspaces > [worksapce name] > Connections > Configure > Export tab. -- Enable _Automatically Create Entities_ under Settings > Workspaces > [workspace name] > Connections > Configure > Advanced to create vendor records automatically. +- Select a different type of export for reimbursable expenses under Settings > Workspaces > Worksapce Name > Connections > Configure > Export tab. +- Enable _Automatically Create Entities_ under Settings > Workspaces > Workspace Name > Connections > Configure > Advanced to create vendor records automatically. - Manually create vendor records in QuickBooks Online for each employee. # ExpensiError QBO099: Items marked as billable must have sales information checked @@ -102,7 +102,7 @@ This error occurs when an Item category on an expense does not have sales inform 4. Check the option for **Sales**. 5. Select an income account. 6. Save your changes. -7. Sync your QuickBooks Online connection in Settings > Workspaces > [workspace name] > Connections. +7. Sync your QuickBooks Online connection in Settings > Workspaces > Workspace Name > Connections. 8. Open the report and click the **Export to** button and then the **QuickBooks Online** option. @@ -116,7 +116,7 @@ _Note: This error message can also show up as, "QuickBooks Reconnect error: OAut ## How to fix it -1. Navigate to Settings > Workspaces > Groups > [workspace name] > Connections. +1. Navigate to Settings > Workspaces > Groups > Workspace Name > Connections. 2. Click the **Sync Now** button. 3. In the pop-up window, click **Reconnect** and enter your current QuickBooks Online credentials. @@ -133,7 +133,7 @@ This error occurs when settings in QuickBooks Online are enabled to warn of dupl 1. Log into QuickBooks Online. 2. Navigate to Settings > Advanced. 3. Under the Other Preferences section, make sure "Warn if duplicate bill number is used" is set to "Off" -4. Sync your QuickBooks Online connection in Settings > Workspaces > [workspace name] > Connections. +4. Sync your QuickBooks Online connection in Settings > Workspaces > Workspace Name > Connections. 5. Open the report and click the **Export to** button and then the **QuickBooks Online** option. # Export error: QuickBooks Online: The transaction needs to be in the same currency as the A/R and A/P accounts @@ -152,12 +152,12 @@ You can find the correct Vendor record by exporting your QuickBooks Online vendo If you have multiple Vendors with different currencies with the same email, Expensify is likely trying to export to the wrong one. 1. Try removing the email address from the vendor in QuickBooks Online that you aren't trying to export to. -2. Sync your QuickBooks Online connection in Settings > Workspaces > [workspace name] > Connections. +2. Sync your QuickBooks Online connection in Settings > Workspaces > Workspace Name > Connections. 3. Open the report and click the **Export to** button and then the **QuickBooks Online** option. If this still fails, you'll need to confirm that the A/P account selected in Expensify is set to the correct currency for the export. -1. Navigate to Settings > Workspaces > [workspace name] > Connections. +1. Navigate to Settings > Workspaces > Workspace Name > Connections. 2. Under the Exports tab check that both A/P accounts are the correct currency. # Why are company card expenses exported to the wrong account in QuickBooks Online? @@ -174,9 +174,9 @@ It’s important to note that expenses imported from a card linked at the indivi The user exporting the report must be a domain admin. You can check the history and comment section at the bottom of the report to see who exported the report. -If your reports are being exported automatically by Concierge, the user listed as the Preferred Exporter under Settings > Workspaces > [workspace name] > Connections > click **Configure** must also be a domain admin. +If your reports are being exported automatically by Concierge, the user listed as the Preferred Exporter under Settings > Workspaces > Workspace Name > Connections > click **Configure** must also be a domain admin. -If the report exporter is not a domain admin, all company card expenses will export to the bank account set in Settings > Workspaces > [workspace name] > Connections > click **Configure** for non-reimbursable expenses. +If the report exporter is not a domain admin, all company card expenses will export to the bank account set in Settings > Workspaces > Workspace Name > Connections > click **Configure** for non-reimbursable expenses. **Has the company card been mapped under the correct workspace?** diff --git a/docs/articles/expensify-classic/expenses/Navigate-the-Expenses-Page.md b/docs/articles/expensify-classic/expenses/Navigate-the-Expenses-Page.md new file mode 100644 index 000000000000..410c598b2ca5 --- /dev/null +++ b/docs/articles/expensify-classic/expenses/Navigate-the-Expenses-Page.md @@ -0,0 +1,64 @@ +--- +title: Navigate the Expenses Page +description: How to use the Expenses page to filter, report, code, and export expenses +--- + +The Expenses page allows you to see all of your personal expenses. If you are an admin, you can also view all expenses submitted by people in your Workspace. You can use this page to filter, report, code, and export expenses. + +## Filter Expenses + +Expenses can be filtered in several ways to give you spending visibility, help you find expenses to submit, and customize your .csv export. + +1. Click the **Expenses** tab. +2. Adjust any of the following filters at the top of the page to match your specific needs: + - **Date Range:** Find expenses within a specific time frame. + - **Merchant Name:** Search for expenses from a particular merchant. Partial search terms work as well. + - **Workspace:** Locate specific Group/Individual Workspace expenses. + - **Categories:** Group expenses by category or identify those without a category. + - **Tags:** Filter expenses with specific tags. + - **Submitters:** Filter expenses by submitter (employee or vendor). + - **Personal Expenses:** Find all expenses yet to be included in a report. A Workspace admin can see these expenses once they are on a Processing, Approved, or Reimbursed report. + - **Open:** Display expenses on reports that have not yet been submitted. + - **Processing, Approved, Reimbursed:** See expenses on reports that are in the processing, approved, or reimbursed stages. + - **Closed:** View expenses on closed reports (not submitted for approval). + +*Note: You might notice that not all expense filters are always visible. They adapt based on the data you're currently filtering and persist from the last time you logged in. For instance, you won't see the Deleted filter if there are no **Deleted** expenses to filter out. Additionally, if you are not seeing what you expected, you may have too many filters applied. Click **Reset** at the top to clear your filters.* + +# Add an expense to a report + +The submitter (and their copilot) can add expenses to a report from the Expenses page. *Note: When expenses aren’t on a report, they are **personal expenses**. You’ll want to make sure you haven’t filtered out **personal expenses**, or you won’t be able to see them.* + +1. Find and select the expense(s) you want to add to the report by selecting the checkbox to the left. Or you can click **Select All**. +2. Click **Add to Report** in the upper right corner. Then choose an existing report or create a new one. + +# Code expenses + +To code expenses from the Expenses page, + +1. Look for the **Tag**, **Category**, and **Description** columns on the **Expenses** page. +2. Click the relevant field for a specific expense and add or update the **Category**, **Tag**, or **Description**. + +*Note: You can also open up individual expenses by clicking on them to see a detailed look.* + +# Export expenses to a CSV file + +To export multiple expenses, + +1. Select the expenses you want to export by selecting the checkbox to the left of each expense. +2. Click **Export To** in the upper right corner of the page and choose the default CSV format or create your own custom CSV template. + +{% include faq-begin.md %} + +**As a Workspace admin, what submitter expenses can you see?** + +A Workspace admin can see Processing, Approved, and Reimbursed expenses as long as they were submitted on the workspace that you are an admin. + +If employees submit expense reports on a Workspace where you are not an admin, you will not have visibility into those expenses. Additionally, if an expense is left unreported, a Workspace admin will not be able to see that expense until it’s been added to a report. + +A Workspace admin can edit the tags and categories on an expense, but if they want to edit the amount, date, or merchant name, the expense will need to be in a Processing state or rejected back to the submitter for changes. For more information about company card expense reconciliation, check out [this article](https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Reconciliation). + +**Can I edit multiple expenses at once?** + +Yes! Select the expenses you want to edit and click **Edit Multiple**. + +{% include faq-end.md %} diff --git a/docs/articles/expensify-classic/expenses/The-Expenses-Page.md b/docs/articles/expensify-classic/expenses/The-Expenses-Page.md deleted file mode 100644 index 57a7f7de298c..000000000000 --- a/docs/articles/expensify-classic/expenses/The-Expenses-Page.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: The Expenses Page -description: Details on Expenses Page filters ---- -# Overview - -The Expenses page allows you to see all of your personal expenses. If you are an admin, you can view all submitter’s expenses on the Expensify page. The Expenses page can be filtered in several ways to give you spending visibility, find expenses to submit and export to a spreadsheet (CSV). - -## Expense filters -Here are the available filters you can use on the Expenses Page: - -- **Date Range:** Find expenses within a specific time frame. -- **Merchant Name:** Search for expenses from a particular merchant. (Partial search terms also work if you need clarification on the exact name match.) -- **Workspace:** Locate specific Group/Individual Workspace expenses. -- **Categories:** Group expenses by category or identify those without a category. -- **Tags:** Filter expenses with specific tags. -- **Submitters:** Narrow expenses by submitter (employee or vendor). -- **Personal Expenses:** Find all expenses yet to be included in a report. A Workspace admin can see these expenses once they are on a Processing, Approved, or Reimbursed report. -- **Open:** Display expenses on reports that still need to be submitted (not submitted). -- **Processing, Approved, Reimbursed:** See expenses on reports at various stages – processing, approved, or reimbursed. -- **Closed:** View expenses on closed reports (not submitted for approval). - -Here's how to make the most of these filters: - -1. Log into your web account -2. Go to the **Expenses** page -3. At the top of the page, click on **Show Filters** -4. Adjust the filters to match your specific needs - -Note, you might notice that not all expense filters are always visible. They adapt based on the data you're currently filtering and persist from the last time you logged in. For instance, you won't see the deleted filter if there are no **Deleted** expenses to filter out. - -If you are not seeing what you expected, you may have too many filters applied. Click **Reset** at the top to clear your filters. - - -# How to add an expense to a report from the Expenses Page -The submitter (and their copilot) can add expenses to a report from the Expenses page. - -Note, when expenses aren’t on a report, they are **personal expenses**. So you’ll want to make sure you haven’t filtered out **personal expenses** expenses, or you won’t be able to see them. - -1. Find the expense you want to add. (Hint: Use the filters to sort expenses by the desired date range if it is not a recent expense.) -2. Then, select the expense you want to add to a report. You can click Select All to select multiple expenses. -3. Click **Add to Report** in the upper right corner, and choose either an existing report or create a new one. - -# How to code expenses from the Expenses Page -To code expenses from the Expenses page, do the following: - -1. Look for the **Tag**, **Category**, and **Description** columns on the **Expenses** page. -2. Click on the relevant field for a specific expense and add or update the **Category**, **Tag**, or **Description**. - -Note, you can also open up individual expenses by clicking on them to see a detailed look, but coding the expenses from the Expense list is even faster and more convenient! - -# How to export expenses to a CSV file or spreadsheet -If you want to export multiple expenses, run through the below steps: -Select the expenses you want to export by checking the box to the left of each expense. -Then, click **Export To** in the upper right corner of the page, and choose our default CSV format or create your own custom CSV template. - - -{% include faq-begin.md %} - -## Can I use the filters and analytics features on the mobile app? -The various features on the Expenses Page are only available while logged into your web account. - -## As a Workspace admin, what submitter expenses can you see? -A Workspace admin can see Processing, Approved, and Reimbursed expenses as long as they were submitted on the workspace that you are an admin. - -If employees submit expense reports on a workspace where you are not an admin, you will not have visibility into those expenses. Additionally, if an expense is left unreported, a workspace admin will not be able to see that expense until it’s been added to a report. - -A Workspace admin can edit the tags and categories on an expense, but if they want to edit the amount, date, or merchant name, the expense will need to be in a Processing state or rejected back to the submitter for changes. -We have more about company card expense reconciliation in this [support article](https://help.expensify.com/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Reconciliation). - -## Can I edit multiple expenses at once? -Yes! Select the expenses you want to edit and click **Edit Multiple**. - -{% include faq-end.md %} diff --git a/docs/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription.md b/docs/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription.md index 1e631a53b0b3..b245a26d10a0 100644 --- a/docs/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription.md +++ b/docs/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription.md @@ -50,7 +50,7 @@ If Auto Renew is disabled then the last bill at the annual rate will be issued o # How to downgrade to a free account from an Individual Plan ## Web 1. Log in to your account through a web browser. -1. Go to **Settings > Policies > Individual > Subscription**. +1. Go to **Settings > Workspaces > Individual > Subscription**. 1. Click "Cancel Subscription" to end your Monthly Subscription. Note: Your subscription is a pre-purchase for 30 days of unlimited SmartScanning. This means that when you cancel, you do not get a refund and instead get to use the remainder of the month of unlimited SmartScanning you purchased. diff --git a/docs/articles/expensify-classic/expensify-card/Request-the-Card.md b/docs/articles/expensify-classic/expensify-card/Request-the-Card.md index 1f412665fc2f..1272cbd1f117 100644 --- a/docs/articles/expensify-classic/expensify-card/Request-the-Card.md +++ b/docs/articles/expensify-classic/expensify-card/Request-the-Card.md @@ -2,6 +2,11 @@ title: Request the Card description: Details on requesting the Expensify Card as an employee --- +_Note: The Expensify Card is currently only available to companies that have:_ +_- A US Bank Account_ +_- US documentation_ +_- A private email domain i.e. we cannot provision Expensify cards for users with gmail.com, hotmail.com, yahoo.com etc_ + To start using the Expensify Card, do the following: 1. **Enable Expensify Cards:** An admin must first enable the cards. Then, an admin can assign you a card by setting a limit, which allows access to the card. 2. **Request the Card:** diff --git a/docs/articles/expensify-classic/settings/Set-Notifications.md b/docs/articles/expensify-classic/settings/Set-Notifications.md index 0e18d6f22cf5..da55dafb833c 100644 --- a/docs/articles/expensify-classic/settings/Set-Notifications.md +++ b/docs/articles/expensify-classic/settings/Set-Notifications.md @@ -4,72 +4,66 @@ description: This article is about how to troubleshoot notifications from Expens --- # Overview -Sometimes, members may have trouble receiving important email notifications from Expensify, such as Expensify Magic Code emails, account validation emails, secondary login validations, integration emails, or report action notifications (rejections, approvals, etc.). - -# Here's how to troubleshoot missing Expensify notifications: - -1. **No error message, but the email is never received** -The email might be delayed; give it 30-60 minutes to arrive in your inbox. -Check **Email Preferences** on the web via **Settings > Your Account > Preferences**In the **Contact Preferences** section. Ensure that the relevant boxes are checked for the email type you're missing. Check your email spam and trash folders, as Expensify messages might end up there inadvertently. -Check to make sure you haven't unintentionally blocked Expensify emails and whitelist [expensify.com](https://community.expensify.com/home/leaving?allowTrusted=1&target=http%3A%2F%2Fexpensify.com%2F), mg.expensify.com, and [amazonSES.com](https://community.expensify.com/home/leaving?allowTrusted=1&target=http%3A%2F%2Famazonses.com%2F) with your email provider. - -2. **A "We're having trouble emailing you" banner at the top of your screen** -Verify that your email address in your account settings is correct and is a real deliverable email address. -Re-send Verification Email: Look for an option to re-send a verification email, usually provided when this banner appears. - -![ExpensifyHelp_EmailError]({{site.url}}/assets/images/ExpensifyHelp_EmailError.png){:width="100%"} - -# Deep Dive +Sometimes members may have trouble receiving important email notifications from Expensify, such as Expensify Magic Code emails, account validation emails, secondary login validations, integration emails, or report action notifications (rejections, approvals, etc.). + +# Troubleshooting missing Expensify notifications + +## Issue: The email or notification is never received, and no message, banner, or additional context is provided +Emails can sometimes be delayed and could take up to 30-60 minutes to arrive in your inbox. If you're expecting a notification that still hasn't arrived after waiting: + - Check your **Email Preferences** on the web via **Settings > Account > Preferences**. In the **Contact Preferences** section, ensure that the relevant boxes are checked for the email type you're missing. + - Check your email spam and trash folders, as Expensify messages might end up there inadvertently. + - Check to make sure you haven't unintentionally blocked Expensify emails. Allowlist the domain expensify.com with your email provider. + +## Issue: A banner that says “We’re having trouble emailing you” shows the top of your screen. +Confirm the email address on your Expensify account is a deliverable email address, and then click the link in the banner that says "here". If successful, you will see a confirmation that your email was unblocked. + + ![ExpensifyHelp_EmailError]({{site.url}}/assets/images/ExpensifyHelp_EmailError.png){:width="100%"} + + **If unsuccessful, you will see another error:** + - If the new error or SMTP message includes a URL, navigate to that URL for further instructions. + - If the new error or SMTP message includes "mimecast.com", consult with your company's IT team. + - If the new error or SMTP message includes "blacklist", it means your company has configured their email servers to use a third-party email reputation or blocklisting service. Consult with your company's IT team. + +![ExpensifyHelp_SMTPError]({{site.url}}/assets/images/ExpensifyHelp_SMTPError.png){:width="100%"} -**For Private Domains**: +# Further troubleshooting for public domains -If your organization uses a private domain, consult your IT department or IT person to ensure that the following domains are whitelisted to receive our emails: expensify.com, mg.expensify.com, and amazonSES.com. These domains are the sources of various notification emails, so make sure they aren't being blocked. +If you are still not receiving Expensify notifications and have an email address on a public domain such as gmail.com or yahoo.com, you may need to add Expensify's domain expensify.com to your email's allowlist by taking the following steps: -**For Public Domains (e.g., Gmail, Yahoo, Hotmail)**: + - Search for messages from expensify.com in your spam folder, open them, and click “Not Spam” at the top of each message. + - Configure an email filter that identifies Expensify's email domain expensify.com and directs all incoming messages to your inbox, to avoid messages going to spam. + - Add specific known Expensify email addresses such as concierge@expensify.com to your email contacts list. -To whitelist our emails on public email services: +# Further troubleshooting for private domains -1. Check your Spam Folder: Search for messages from expensify.com in your Spam folder, open them, and click "Not Spam" at the top of the message. -2. Create a Filter: Set up a filter that identifies the entire expensify.com domain and directs all incoming messages to your inbox, preventing them from going to Spam. -3. Add Specific Contacts: While optional, adding specific email addresses from Expensify as contacts can further prevent emails from going to Spam. +If your organization uses a private domain, Expensify emails may be blocked at the server level. This can sometimes happen unexpectedly due to broader changes in email provider's handling or filtering of incoming messages. Consult your internal IT team to assist with the following: -Please note that even if you receive emails from our Concierge support communication, ensure that both expensify.com and mg.expensify.com are whitelisted as they use different servers. + - Ensure that the domain expensify.com is allowlisted on domain email servers. This domains is the sources of various notification emails, so it's important it is allowlisted. + - Confirm there is no server-level email blocking and that spam filters are not blocking Expensify emails. Even if you have received messages from our Concierge support in the past, ensure that expensify.com is allowlisted. -**Email Server Blocking**: -Your email server may be blocking our emails due to spam filters or other services. Check with your IT department to investigate and resolve any server-level email blocking issues. +## Companies using Outlook -**Mimecast**: -If your company uses Mimecast, a service that can affect email deliverability, check with your IT department. If Mimecast is in use, reach out to us at concierge@expensify.com through a new email, as this should ensure delivery to your inbox. Mimecast should eventually recognize the Expensify domain, preventing future filtering. +- Add Expensify to your personal Safe Senders list by following these steps: [Outlook email client](https://support.microsoft.com/en-us/office/add-recipients-of-my-email-messages-to-the-safe-senders-list-be1baea0-beab-4a30-b968-9004332336ce) / [Outlook.com](https://support.microsoft.com/en-us/office/safe-senders-in-outlook-com-470d4ee6-e3b6-402b-8cd9-a6f00eda7339) +- **Company IT administrators:** Add Expensify to your domain's Safe Sender list by following the steps here: [Create safe sender lists in EOP](https://learn.microsoft.com/en-us/defender-office-365/create-safe-sender-lists-in-office-365) +- **Company IT administrators:** Add expensify.com to the domain's explicit allowlist. You may need to contact Outlook support for specific instructions, as each company's setup varies. +- **Company administrators:** Contact Outlook support to see if there are additional steps to take based on your domain's email configuration. -**For Outlook Users**: -For Outlook users specifically: +## Companies using Google Workspaces: -1. Click the gear icon in Outlook and select "View all Outlook settings." -2. Choose "Mail" from the settings menu. -3. Under the "Junk email" submenu, click "Add" under "Safe senders and domains." -4. Enter the email address you want to whitelist. -5. Click "Save." +- **Company IT administrators:** Adjust your domain's email allowlist and safe senders lists to include expensify.com by following these steps: [Allowlists, denylists, and approved senders](https://support.google.com/a/answer/60752) -When you click the "Settings" link in the banner in Expensify, you'll be directed to your account settings page, where you may encounter a few different scenarios: +{% include faq-begin.md %} -- "Temporarily Suspended Emails": If the message mentions "temporarily suspended emails to," follow the steps provided in the yellow box. This situation typically occurs when we can't find a valid inbox to send our emails to. Possible reasons include: - - A misspelled email address during account creation. - - Use of a distribution list email (acting as an "alias" email) without a linked inbox. - - An auto-responder that has been responding to our emails for an extended period. -- To resolve this issue, confirm that the email address is indeed associated with an active inbox. Then, click the link that says "here," and your email should be unblocked shortly. -- SMTP Error (Gray Box): In some cases, you might encounter a gray box with an SMTP error message. This error can vary, but it typically looks something like this: +## How can I be sure that emails from Expensify are legitimate and not spam? -![ExpensifyHelp_SMTPError]({{site.url}}/assets/images/ExpensifyHelp_SMTPError.png){:width="100%"} +Expensify's emails are SPF and DKIM-signed, meaning they are cryptographically signed and encrypted to prevent spoofing. -**These look a bit cryptic, yes, but hang in there!** +## Why do legitimate emails from Expensify sometimes end up marked as spam? -The error messages you see are the raw message text received from your email provider's server to Amazon. These messages can vary in text, but the best course of action is to follow the link provided (by copying and pasting) in the text for the next steps. +The problem typically arises when our domain or one of our sending IP addresses gets erroneously flagged by a 3rd party domain or IP reputation services. Many IT departments use lists published by such services to filter email for the entire company. -**Scenario 1**: If the message in the gray box includes "mimecast.com": It means that our emails are being blocked by the server. In this case, you should contact your IT person or team to address the issue. +## What is the best way to ensure emails are not accidentally marked as Spam? -**Scenario 2**: If the message in the gray box mentions "blacklist at org/.com/.net," or resembles the screenshot provided, it indicates that your IT team has configured your email to use a third-party email reputation or blacklisting service. Here's what you need to know: -- All our emails are SPF and DKIM-signed, meaning they are cryptographically signed as coming from us and are not spam. -- The problem arises because we send mail from a cloud-based service. This means that the sender's IP serves multiple vendors, including Expensify. If one of those vendors is marked as spam, it can block all messages from that IP, even if they're from different vendors (including us). -- The better approach is for the server to flag spam via DKIM and SPF (rather than solely relying on the sender's IP address), as our messages are correctly signed and encrypted to prevent spoofing. +For server-level spam detection, the safest approach to allowlisting email from Expensify is to verify DKIM and SPF, rather than solely relying on the third-party reputation of the sending IP address. -To resolve these issues, consider discussing them with your IT team, as they can help implement the necessary changes to ensure you receive our emails without interruption. +{% include faq-end.md %} diff --git a/docs/articles/new-expensify/billing-and-subscriptions/Plan-types-and-pricing.md b/docs/articles/new-expensify/billing-and-subscriptions/Plan-types-and-pricing.md new file mode 100644 index 000000000000..bc39e33bab4a --- /dev/null +++ b/docs/articles/new-expensify/billing-and-subscriptions/Plan-types-and-pricing.md @@ -0,0 +1,48 @@ +--- +title: Expensify plan types and pricing +description: An overview of plan types and pricing +--- +
    + +Expensify offers plans and flexible pricing to cater to different business sizes and needs, whether you’re self-employed, part of a large organization, or anything in between. + +# Choosing the Right Plan + +Expensify offers two pricing plans: + + +| | Collect Plan | Control Plan | +|--------------------|---------------------------|---------------------------------------------------------| +| **Ideal for:** | Sole proprietors and small teams or businesses with 1-10 employees | Larger companies with 10-1000 employees and more complex expense management needs | +| **Pricing starts at:** | $5 USD per user/month on an annual subscription (Non-USD prices available in FAQ) | $9 USD per user/month on an annual subscription (Non-USD prices available in FAQ) | +| | ✔ Unlimited SmartScans and distance tracking | ✔ All Collect Plan features | +| | ✔ Expensify Cards with Smart Limits and cash back | ✔ Third-party card feeds and reconciliation | +| | ✔ Expense approvals | ✔ Integration with NetSuite, Sage Intacct, and QuickBooks Desktop | +| | ✔ Unlimited ACH reimbursement | ✔ Gusto, Zenefits, Certinia, and Workday sync | +| | ✔ Integration with QuickBooks Online and Xero | ✔ Multiple expense approvers | +| | | ✔ SAML/SSO for added security | +| | | ✔ Admin-enforced controls | + +Expensify Card usage on both plans generates 1% cash back with every swipe on US purchases --- no minimums necessary --- and 2% back if you spend $250k+/month across cards. + +# FAQ + +## How much does Expensify cost? + +The cost depends on your plan and subscription type. Expensify offers a 50% discount for annual subscriptions and up to another 50% discount for using Expensify Cards. Try out our [savings calculator](https://use.expensify.com/savings-calculator) for an easy estimate based on your numbers. + +## Does Expensify bill in non-USD currencies? + +Yes! Customers can pay for Expensify in AUD, GBP, or NZD in addition to USD. +- The Collect plan begins at A$14, £8, or NZ$16 per user/month on an annual subscription +- The Control plan begins at A$30, £14, or NZ$32 per user/month on an annual subscription + +## Is Expensify free for individuals? + +Yes! Individuals can use Expensify for free to track expenses. + +## How do I get more info about pricing? + +For customized information or help choosing the right plan, reach out to Expensify Concierge or email concierge@expensify.com. + +
    diff --git a/docs/articles/new-expensify/chat/assign-a-task.md b/docs/articles/new-expensify/chat/assign-a-task.md new file mode 100644 index 000000000000..a553caf39366 --- /dev/null +++ b/docs/articles/new-expensify/chat/assign-a-task.md @@ -0,0 +1,25 @@ +--- +title: Assign a Task +description: Assign a task to a specific user within a chat +--- + +Tasks are a useful feature in New Expensify which allows the tracking and assignment of a task to a specific user (known as an Assignee) within a 1:1 or group chat. + +# How to create a Task + +1. Click on a chat +2. Click on the + button +3. Click on “Assign a Task” +4. Add a title (mandatory) and a description (optional) +5. You’ll then have the option to add an assignee to the Task. If you wish to utilise the task for tracking purposes, you can keep this unassigned. + +_Note: The Task will always be shared in the chat it was created in._ + +# To edit a Task + +Both the Task creator and the Assignee will have the option to: + +- Leave a comment in the task’s thread +- Reassign the Task to someone else by clicking on the task, then the sideways arrow next to the “Assignee” field, and selecting a new Assignee or typing their email. +- Edit any of the task’s details (i.e. title and description) by clicking on the task, and then the sideways arrow next to each field. +- Mark the Task as complete by either clicking on the checkbox or clicking on the Task, then clicking on the green “Mark as Complete” button. diff --git a/docs/articles/new-expensify/connections/netsuite/Configure-Netsuite.md b/docs/articles/new-expensify/connections/netsuite/Configure-Netsuite.md index ca0dbfe9ae54..26db42df9e5b 100644 --- a/docs/articles/new-expensify/connections/netsuite/Configure-Netsuite.md +++ b/docs/articles/new-expensify/connections/netsuite/Configure-Netsuite.md @@ -1,252 +1,162 @@ --- -title: Configure Netsuite +title: Configure NetSuite description: Configure the Import, Export, and Advanced settings for Expensify's integration with NetSuite order: 2 --- -# Configure NetSuite integration -## Step 1: Configure import settings +# Best Practices Using NetSuite + +Using Expensify with NetSuite brings a seamless, efficient approach to managing expenses. With automatic syncing, expense reports flow directly into NetSuite, reducing manual entry and errors while giving real-time visibility into spending. This integration speeds up approvals, simplifies reimbursements, and provides clear insights for smarter budgeting and compliance. Together, Expensify and NetSuite make expense management faster, more accurate, and stress-free. + +# Accessing the NetSuite Configuration Settings + +NetSuite is connected at the workspace level, and each workspace can have a unique configuration that dictates how the connection functions. To access the connection settings: + +1. Click your profile image or icon in the bottom left menu. +2. Scroll down and click **Workspaces** in the left menu. +3. Select the workspace you want to access settings for. +4. Click **Accounting** in the left menu. + +# Step 1: Configure Import Settings + +The following steps help you determine how data will be imported from NetSuite to Expensify. + +1. From the Accounting tab of your workspace settings, click on **Import**. +2. In the right-hand menu, review each of the following import settings: + - _Categories_: Your NetSuite Expense Categories are automatically imported into Expensify as categories. This is enabled by default and cannot be disabled. + - _Department, Classes, and Locations_: The NetSuite connection allows you to import each independently and utilize tags, report fields, or employee defaults as the coding method. + - Tags are applied at the expense level and apply to single expense. + - Report Fields are applied at the report header level and apply to all expenses on the report. + - The employee default is applied when the expense is exported to NetSuite and comes from the default on the submitter’s employee record in NetSuite. + - _Customers and Projects_: The NetSuite connections allows you to import customers and projects into Expensify as Tags or Report Fields. + -_Cross-subsidiary customers/projects_: Enable to import Customers and Projects across all NetSuite subsidiaries to a single Expensify workspace. This setting requires you to enable “Intercompany Time and Expense” in NetSuite. To enable that feature in NetSuite, go to **Setup > Company > Setup Tasks: Enable Features > Advanced Features**. + -_Tax_: Enable to import NetSuite Tax Groups and configure further on the Taxes tab of your workspace settings menu. + -_Custom Segments and Records_: Enable to import segments and records are tags or report fields. + - If configuring Custom Records as Report Fields, use the Field ID on the Transactions tab (under **Custom Segments > Transactions**). + - If configuring Custom Records as Tags, use the Field ID on the Transaction Columns tab (under **Custom Segments > Transaction Columns**). + - Don’t use the “Filtered by” feature available for Custom Segments. Expensify can’t make these dependent on other fields. If you do have a filter selected, we suggest switching that filter in NetSuite to “Subsidiary” and enabling all subsidiaries to ensure you don’t receive any errors upon exporting reports. + -_Custom Lists_: Enable to import lists as tags or reports fields. +3. Sync the connection by closing the right-hand menu and clicking the three-dot icon > Sync Now option. Once the sync completes, you should see the values for any enabled tags or report fields in the corresponding Tag or Report Field tabs in the workspace settings menu. + +{% include info.html %} +When you’re done configuring the settings, or anytime you make changes in the future, sync the NetSuite connection. This will ensure changes are saved and updated across both systems. +{% include end-info.html %} + +# Step 2: Configure Export Settings + +The following steps help you determine how data will be exported from Expensify to NetSuite. + +1. From the Accounting tab of your workspace settings, click on **Export**. +2. In the right-hand menu, review each of the following export settings: + - _Preferred exporter_: Any workspace admin can export reports to NetSuite. For automatic export, Concierge will export on behalf of the preferred exporter. The preferred exporter will also be notified of any expense reports that fail to export to NetSuite due to an error. + - _Export date_: You can choose which date to use for the records created in NetSuite. There are three date options: + - _Date of last expense_: This will use the date of the most recent expense on the report. + - _Submitted date_: The date the employee submitted the report. + - _Exported date_: The date you export the report to NetSuite. + - _Export out-of-pocket expenses as_: + - _Expense Reports_: Out-of-pocket expenses will be exported as expense reports, which will be posted to the payables account designated in NetSuite. + - _Vendor Bills_: Out-of-pocket expenses will be exported to NetSuite as vendor bills. Each report will be posted as payable to the vendor associated with the employee who submitted the report. You can also set an approval level in NetSuite for vendor bills. + - _Journal Entries_: Out-of-pocket expenses will be exported to NetSuite as journal entries. All the transactions will be posted to the payable account specified in the workspace. You can also set an approval level in NetSuite for the journal entries. + - By default, journal entry forms do not contain a customer column, so it is not possible to export customers or projects with this export option. Also, the credit line and header-level classifications are pulled from the employee record. + - _Export company card expenses as_: + - _Expense Reports_:To export company card expenses as expense reports, you will need to configure your default corporate cards in NetSuite. + - _Vendor Bills_: Company card expenses will be posted as a vendor bill payable to the default vendor specified in your workspace Accounting settings. You can also set an approval level in NetSuite for the bills. + - _Journal Entries_: Company Card expenses will be posted to the Journal Entries posting account selected in your workspace Accounting settings. + - Important Notes: + - Expensify Card expenses will always export as Journal Entries, even if you have Expense Reports or Vendor Bills configured for non-reimbursable expenses on the Export tab + - Journal entry forms do not contain a customer column, so it is not possible to export customers or projects with this export option + - The credit line and header level classifications are pulled from the employee record + - _Export invoices to_: Select the Accounts Receivable account where you want your Invoice reports to export. In NetSuite, the invoices are linked to the customer, corresponding to the email address where the invoice was sent. + - _Invoice item_: Choose whether Expensify creates an "Expensify invoice line item" for you upon export (if one doesn’t exist already) or select an existing invoice item. + - _Export foreign currency amount_: Enabling this feature allows you to send the original amount of the expense rather than the converted total when exporting to NetSuite. This option is only available when exporting out-of-pocket expenses as Expense Reports. + - _Export to next open period_: When this feature is enabled and you try exporting an expense report to a closed NetSuite period, we will automatically export to the next open period instead of returning an error. +3. Sync the connection by closing the right-hand menu and clicking the three-dot icon > Sync Now option. + +# Step 3: Configure Advanced Settings + +The following steps help you determine the advanced settings for your NetSuite connection. + +1. From the Accounting tab of your workspace settings, click on **Advanced**. +2. In the right-hand menu, review each of the following advanced settings: + - _Auto-sync_: When enabled, the connection will sync daily to ensure that the data shared between the two systems is up-to-date. We strongly recommend keeping auto-sync enabled. The following will occur when auto-sync is enabled: + - When an expense report reaches its final state in Expensify, it will be automatically exported to NetSuite. The final state will either be reimbursement (if you reimburse members through Expensify) or final approval (if you reimburse members outside of Expensify). + - If Sync Reimbursed Reports is enabled, then we will sync the reimbursement status of reports between Expensify and NetSuite. + - _Sync reimbursed reports_: Any time a report is paid using Expensify ACH, the corresponding bill payment will be created in the NetSuite. + - _Reimbursments account_: Select the account that matches the default account for Bill Payments in your NetSuite account. + - _Collections account_: When exporting invoices, once marked as Paid, the payment is marked against the account selected. + - _Invite employees and set approvals_: Enabling this feature will invite all employees from the connected NetSuite subsidiary to your Expensify workspace. Once imported, Expensify will send them an email letting them know they’ve been added to a workspace. + - In addition to inviting employees, this feature enables a custom set of approval workflow options, which you can manage in Expensify Classic. (Click Switch to Expensify Classic from the Settings menu.) + - _Auto create employees/vendors_: With this feature enabled, Expensify will automatically create a new employee or vendor in NetSuite (if one doesn’t already exist) using the name and email of the report submitter. + - _Enable newly imported categories_: Toggle to enable this feature and anytime a new Expense Category is created in NetSuite, it will be imported into Expensify as an enabled category. Otherwise, it will import disabled and employees will be unable to see it as an option to code to an expense. + - _Setting approval levels_: You can set the NetSuite approval level for each different export type; Expense report, Vendor bill, and Journal entry. + - Note: If you have Approval Routing selected in your accounting preference, this will override the selections in Expensify. If you do not wish to use Approval Routing in NetSuite, go to **Setup > Accounting > Accounting Preferences > Approval Routing** and ensure Vendor Bills and Journal Entries are not selected. + - _Custom form ID_: By default, Expensify creates entries using the preferred transaction form set in NetSuite. Enabling this setting allows you to designate a specific transaction form. + - _Out-of-pocket expense_: + - _Company card expense_: +3. Sync the connection by closing the right-hand menu and clicking the three-dot icon > Sync Now option. + +{% include faq-begin.md %} + +## I added tags in NetSuite (departments, classes, or locations) how do I get them into my workspace? + +New departments, classes, and locations must be added in NetSuite first before they can be added as options to code to expenses in Expensify. After adding them in NetSuite, sync your connection to import the new options. + +Once imported, you can turn specific tags on or off under **Settings > Workspaces > [Workspace Name] > Tags**. You can turn specific report fields on or off under **Settings > Workspaces > [Workspace Name] > Report Fields**. + +## Is it possible to automate inviting my employees and their approver from NetSuite into Expensify? + +Yes, you can automatically import your employees and set their approval workflow with your connection between NetSuite and Expensify. -The following section will help you determine how data will be imported from NetSuite into Expensify. To change your import settings, navigate to the Accounting settings for your workspace, then click **Import** under the NetSuite connection. - -### Expense Categories -Your NetSuite Expense Categories are automatically imported into Expensify as categories. This cannot be amended, and any new categories you'd like to add must be added as Expense Categories in NetSuite. - -Once imported, you can turn specific Categories on or off under **Settings > Workspaces > [Workspace Name] > Categories**. - -### Departments, Classes, and Locations -The NetSuite integration allows you to import departments, classes, and locations from NetSuite into Expensify as Tags, Report Fields, or using the NetSuite Employee Default. - -- **NetSuite Employee Default:** If default Department, Class, and Locations have been configured on NetSuite employee records, then you can choose to have the NetSuite employee default applied upon export from Expensify to NetSuite. With this selection, employees will not make a selection in Expensify. -- **Tags:** Employees can select the department, class, or location on each individual expense. If the employee's NetSuite employee record has a default value, then each expense will be defaulted to that tag upon creation, with the option for the employee to select a different value on each expense. -- **Report Fields:** Employees can select one department/class/location for each expense report. - - -New departments, classes, and locations must be added in NetSuite. Once imported, you can turn specific tags on or off under **Settings > Workspaces > [Workspace Name] > Tags**. You can turn specific report fields on or off under **Settings > Workspaces > [Workspace Name] > Report Fields**. - -### Customers and Projects -The NetSuite integration allows you to import customers and projects into Expensify as Tags or Report Fields. - -- **Tags:** Employees can select the customer or project on each individual expense. -- **Report Fields:** Employees can select one department/class/location for each expense report. - -New customers and projects must be added in NetSuite. Once imported, you can turn specific tags on or off under **Settings > Workspaces > [Workspace Name] > Tags**. You can turn specific report fields on or off under **Settings > Workspaces > [Workspace Name] > Report Fields**. - -When importing customers or projects, you can also choose to enable **Cross-subsidiary customers/projects**. This setting allows you to import Customers and Projects across all NetSuite subsidiaries to a single Expensify workspace. This setting requires you to enable “Intercompany Time and Expense” in NetSuite. To enable that feature in NetSuite, go to **Setup > Company > Setup Tasks: Enable Features > Advanced Features**. - -### Tax -The NetSuite integration allows users to apply a tax rate and amount to each expense for non-US NetSuite subsidiaries. To do this, import Tax Groups from NetSuite: - -1. In NetSuite, head to **Setup > Accounting > Tax Groups** -2. Once imported, go to the NetSuite connection configuration page in Expensify (under **Settings > Workspaces > [Workspace Name] > Accounting > NetSuite > Import**) -3. Enable Tax -4. Go back to the Accounting screen, click the three dots next to NetSuite, and click **Sync now** -5. All Tax Groups for the connected NetSuite subsidiary will be imported to Expensify as taxes. -6. After syncing, go to **Settings > Workspace > [Workspace Name] > Tax** to see the tax groups imported from NetSuite - -### Custom Segments -You can import one or more Custom Segments from NetSuite for selection in Expensify. To add a Custom Segment to your Expensify workspace: - -1. Go to **Settings > Workspaces > [Workspace Name] > Accounting** -2. Click **Import** under NetSuite -3. Click **Custom segments/records** -4. Click **Add custom segment/record** - -From there, you'll walk through a simple setup wizard. You can find detailed instructions below for each setup step. - -1. In Step 1, you'll select whether you'd like to import a custom segment or a custom record. For a Custom Segment, continue. We have separate instructions for [Custom Records](link) and [Custom Lists](link). -2. **Segment Name** - a. Log into NetSuite as an administrator - b. Go to **Customization > Lists, Records, & Fields > Custom Segments** - c. You’ll see the Segment Name on the Custom Segments page -3. Internal ID - a. Ensure you have internal IDs enabled in NetSuite under **Home > Set Preferences** - b. Navigate back to the **Custom Segments** page - c. Click the **Custom Record Type** link - d. You’ll see the Internal ID on the Custom Record Type page -4. **Script ID/Field ID** - a. If configuring Custom Segments as Report Fields, use the Field ID on the Transactions tab (under **Custom Segments > Transactions**). If no Field ID is shown, use the unified ID (just called “ID” right below the “Label”). - b. If configuring Custom Segments as Tags, use the Field ID on the Transaction Columns tab (under **Custom Segments > Transaction Columns**). If no Field ID is shown, use the unified ID (just called “ID” right below the “Label”). - c. Note that as of 2019.1, any new custom segments that you create automatically use the unified ID, and the "Use as Field ID" box is not visible. If you are editing a custom segment definition that was created before 2019.1, the "Use as Field ID" box is available. To use a unified ID for the entire custom segment definition, check the "Use as Field ID" box. When the box is checked, no field ID fields or columns are shown on the Application & Sourcing subtabs because one ID is used for all fields. -5. Select whether you'd like to import the custom segment as Tags or Report Fields -6. Finally, confirm that all the details look correct - -**Note:** Don’t use the “Filtered by” feature available for Custom Segments. Expensify can’t make these dependent on other fields. If you do have a filter selected, we suggest switching that filter in NetSuite to “Subsidiary” and enabling all subsidiaries to ensure you don’t receive any errors upon exporting reports. +Enabling this feature will invite all employees from the connected NetSuite subsidiary to your Expensify workspace. Once imported, Expensify will send them an email letting them know they’ve been added to a workspace. -### Custom Records -You can import one or more Custom Records from NetSuite for selection in Expensify. To add a Custom Record to your Expensify workspace: +In addition to inviting employees, this feature enables a custom set of approval workflow options, which you can manage in Expensify Classic. (Click Switch to Expensify Classic from the Settings menu.) Your options for approval include: -1. Go to **Settings > Workspaces > [Workspace Name] > Accounting** -2. Click **Import** under NetSuite -3. Click **Custom segments/records** -4. Click **Add custom segment/record** +- **Basic Approval:** A single level of approval, where all users submit directly to a Final Approver. The Final Approver defaults to the workspace owner but can be edited on the people page. +- **Manager Approval (default):** Two levels of approval route reports first to an employee’s NetSuite expense approver or supervisor, and second to a workspace-wide Final Approver. By NetSuite convention, Expensify will map to the supervisor if no expense approver exists. The Final Approver defaults to the workspace owner but can be edited on the people page. +- **Configure Manually:** Employees will be imported, but all levels of approval must be manually configured on the workspace’s People settings page. If you enable this setting, it’s recommended you review the newly imported employees and managers on the **Settings > Workspaces > Group > [Workspace Name] > People** page. -From there, you'll walk through a simple setup wizard. You can find detailed instructions below for each setup step. -1. In Step 1, you'll select whether you'd like to import a custom segment or a custom record. For a Custom Record, continue. We have separate instructions for [Custom Segments](link) and [Custom Lists](link). -2. **Segment Name** - a. Log into NetSuite as an administrator - b. Go to **Customization > Lists, Records, & Fields > Custom Segments** - c. You’ll see the Custom Record Name on the Custom Segments page -3. **Internal ID** - a. Make sure you have Internal IDs enabled in NetSuite under **Home > Set Preferences** - b. Navigate back to the **Custom Segment** page - c. Click the **Custom Record Type** hyperlink - d. You’ll see the Internal ID on the Custom Record Type page -4. **Transaction Column ID** - a. If configuring Custom Records as Report Fields, use the Field ID on the Transactions tab (under **Custom Segments > Transactions**). - b. If configuring Custom Records as Tags, use the Field ID on the Transaction Columns tab (under **Custom Segments > Transaction Columns**). -5. Select whether you'd like to import the custom record as Tags or Report Fields -6. Finally, confirm that all the details look correct +## I notice that company card expenses export to NetSuite right away when I approve a report, but reimbursable expenses don’t, why is that? -### Custom Lists -You can import one or more Custom Lists from NetSuite for selection in Expensify. To add a Custom List to your Expensify workspace: +When Auto Sync is enabled and you reimburse employees through Expensify, we help to automatically send finalized expenses to NetSuite. The timing of the export depends on the type of expense it is. + - **If you reimburse members through Expensify:** Reimbursing an expense report will trigger auto-export to NetSuite. When the expense report is exported to NetSuite, a corresponding bill payment will also be created in NetSuite. + - **If you reimburse members outside of Expensify:** Expense reports will be exported to NetSuite at the time of final approval. After you mark the report as paid in NetSuite, the reimbursed status will be synced back to Expensify the next time the integration syncs. -1. Go to **Settings > Workspaces > [Workspace Name] > Accounting** -2. Click **Import** under NetSuite -3. Click **Custom list** -4. Click **Add custom list** +## How do I configure my default corporate cards in NetSuite? -From there, you'll walk through a simple setup wizard. You can find detailed instructions below for each setup step. +To export company card expenses as expense reports, you must configure your default corporate cards in NetSuite. -1. In Step 1, you'll select which Custom List you'd like to import from a pre-populated list -2. **Transaction Line Field ID** - a. Log into NetSuite as an admin - b. Search **“Transaction Line Fields”** in the global search - c. Click into the desired Custom List - d. You'll find the transaction Line Field ID along the left-hand side of the page -3. Select whether you'd like to import the custom list as Tags or Report Fields -4. Finally, confirm that all the details look correct - -From there, you should see the values for the Custom Lists under the Tag or Report Field settings in Expensify. -## Step 2: Configure export settings -There are numerous options for exporting data from Expensify to NetSuite. To access these settings, head to **Settings > Workspaces > [Workspace name] > Accounting** and click **Export** under NetSuite. - -### Preferred Exporter -Any workspace admin can export reports to NetSuite. For auto-export, Concierge will export on behalf of the preferred exporter. The preferred exporter will also be notified of any expense reports that fail to export to NetSuite due to an error. - -### Date -You can choose which date to use for the records created in NetSuite. There are three date options: - -1. **Date of last expense:** This will use the date of the previous expense on the report -2. **Submitted date:** The date the employee submitted the report -3. **Exported date:** The date you export the report to NetSuite - -### Export out-of-pocket expenses as -**Expense Reports** -Out-of-pocket expenses will be exported to NetSuite as expense reports, which will be posted to the payables account designated in NetSuite. - -**Vendor Bills** -Out-of-pocket expenses will be exported to NetSuite as vendor bills. Each report will be posted as payable to the vendor associated with the employee who submitted the report. You can also set an approval level in NetSuite for vendor bills. - -**Journal Entries** -Out-of-pocket expenses will be exported to NetSuite as journal entries. All the transactions will be posted to the payable account specified in the workspace. You can also set an approval level in NetSuite for the journal entries. - -Note: By default, journal entry forms do not contain a customer column, so it is not possible to export customers or projects with this export option. Also, The credit line and header level classifications are pulled from the employee record. - -### Export company card expenses as -**Expense Reports** -To export company card expenses as expense reports, you will need to configure your default corporate cards in NetSuite. To do this, you must select the correct card on the NetSuite employee records (for individual accounts) or the subsidiary record (If you use a non-One World account, the default is found in your accounting preferences). +To do this, you must select the correct card on the NetSuite employee records (for individual accounts) or the subsidiary record (If you use a non-One World account, the default is found in your accounting preferences). To update your expense report transaction form in NetSuite: -1. Go to **Customization > Forms > Transaction Forms** -2. Click **Edit** next to the preferred expense report form -3. Go to the **Screen Fields > Main** tab -4. Check “Show” for "Account for Corporate Card Expenses" -5. Go to the **Screen Fields > Expenses** tab -6. Check “Show” for "Corporate Card" +1. Go to **Customization > Forms > Transaction Forms.** +2. Click **Edit** next to the preferred expense report form. +3. Go to the **Screen Fields > Main** tab. +4. Check “Show” for "Account for Corporate Card Expenses." +5. Go to the **Screen Fields > Expenses** tab. +6. Check “Show” for "Corporate Card." You can also select the default account on your employee record to use individual corporate cards for each employee. Make sure you add this field to your employee entity form in NetSuite. If you have multiple cards assigned to a single employee, you cannot export to each account. You can only have a single default per employee record. -**Vendor Bills** -Company card expenses will be posted as a vendor bill payable to the default vendor specified in your workspace Accounting settings. You can also set an approval level in NetSuite for the bills. - - -**Journal Entries** -Company Card expenses will be posted to the Journal Entries posting account selected in your workspace Accounting settings. - -Important Notes: - -- Expensify Card expenses will always export as Journal Entries, even if you have Expense Reports or Vendor Bills configured for non-reimbursable expenses on the Export tab -- Journal entry forms do not contain a customer column, so it is not possible to export customers or projects with this export option -- The credit line and header level classifications are pulled from the employee record - -### Export invoices to -Select the Accounts Receivable account where you want your Invoice reports to export. In NetSuite, the invoices are linked to the customer, corresponding to the email address where the invoice was sent. - -### Export foreign currency amount -Enabling this feature allows you to send the original amount of the expense rather than the converted total when exporting to NetSuite. This option is only available when exporting out-of-pocket expenses as Expense Reports. - -### Export to next open period -When this feature is enabled and you try exporting an expense report to a closed NetSuite period, we will automatically export to the next open period instead of returning an error. - - -## Step 3: Configure advanced settings -To access the advanced settings of the NetSuite integration, head to **Settings > Workspaces > [Workspace name] > Accounting** and click **Advanced** under NetSuite. +## My custom segments created before 2019.1 weren’t created with a unified ID, what change can I make to import them into Expensify?” + Note that as of 2019.1, any new custom segments that you create automatically use the unified ID, and the "Use as Field ID" box is not visible. If you are editing a custom segment definition that was created before 2019.1, the "Use as Field ID" box is available. To use a unified ID for the entire custom segment definition, check the "Use as Field ID" box. When the box is checked, no field ID fields or columns are shown on the Application & Sourcing subtabs because one ID is used for all fields. -Let’s review the different advanced settings and how they interact with the integration. +## How does Auto-sync work with reimbursed reports? -### Auto-sync -We strongly recommend enabling auto-sync to ensure that the information in NetSuite and Expensify is always in sync. The following will occur when auto-sync is enabled: - -**Daily sync from NetSuite to Expensify:** Once a day, Expensify will sync any changes from NetSuite into Expensify. This includes any new, updated, or removed departments/classes/locations/projects/etc. - -**Auto-export:** When an expense report reaches its final state in Expensify, it will be automatically exported to NetSuite. The final state will either be reimbursement (if you reimburse members through Expensify) or final approval (if you reimburse members outside of Expensify). - -**Reimbursement-sync:** If Sync Reimbursed Reports (more details below) is enabled, then we will sync the reimbursement status of reports between Expensify and NetSuite. - -### Sync reimbursed reports -When Sync reimbursed reports is enabled, the reimbursement status will be synced between Expensify and NetSuite. - -**If you reimburse members through Expensify:** Reimbursing an expense report will trigger auto-export to NetSuite. When the expense report is exported to NetSuite, a corresponding bill payment will also be created in NetSuite. - -**If you reimburse members outside of Expensify:** Expense reports will be exported to NetSuite at time of final approval. After you mark the report as paid in NetSuite, the reimbursed status will be synced back to Expensify the next time the integration syncs. - -To ensure this feature works properly for expense reports, make sure that the reimbursement account you choose within the settings matches the default account for Bill Payments in NetSuite. When exporting invoices, once marked as Paid, the payment is marked against the account selected after enabling the Collection Account setting. - -### Invite employees and set approvals -Enabling this feature will invite all employees from the connected NetSuite subsidiary to your Expensify workspace. Once imported, Expensify will send them an email letting them know they’ve been added to a workspace. - -In addition to inviting employees, this feature enables a custom set of approval workflow options, which you can manage in Expensify Classic: - -- **Basic Approval:** A single level of approval, where all users submit directly to a Final Approver. The Final Approver defaults to the workspace owner but can be edited on the people page. -- **Manager Approval (default):** Two levels of approval route reports first to an employee’s NetSuite expense approver or supervisor, and second to a workspace-wide Final Approver. By NetSuite convention, Expensify will map to the supervisor if no expense approver exists. The Final Approver defaults to the workspace owner but can be edited on the people page. -- **Configure Manually:** Employees will be imported, but all levels of approval must be manually configured on the workspace’s People settings page. If you enable this setting, it’s recommended you review the newly imported employees and managers on the **Settings > Workspaces > Group > [Workspace Name] > People** page. - -### Auto-create employees/vendors -With this feature enabled, Expensify will automatically create a new employee or vendor in NetSuite (if one doesn’t already exist) using the name and email of the report submitter. - -### Enable newly imported categories -With this feature enabled, anytime a new Expense Category is created in NetSuite, it will be imported into Expensify as an enabled category. If the feature is disabled, then new Expense Categories will be imported into Expensify as disabled. - -### Setting approval levels -You can set the NetSuite approval level for each different export type: - -- **Expense report approval level:** Choose from "NetSuite default preference," “Only supervisor approved,” “Only accounting approved,” or “Supervisor and accounting approved.” -- **Vendor bill approval level and Journal entry approval level:** Choose from "NetSuite default preference," “Pending approval,” or “Approved for posting.” - -If you have Approval Routing selected in your accounting preference, this will override the selections in Expensify. If you do not wish to use Approval Routing in NetSuite, go to **Setup > Accounting > Accounting Preferences > Approval Routing** and ensure Vendor Bills and Journal Entries are not selected. - -### Custom form ID -By default, Expensify will create entries using the preferred transaction form set in NetSuite. Alternatively, you have the option to designate a specific transaction form to be used. - - - -## FAQ - -### How does Auto-sync work with reimbursed reports? If a report is reimbursed via ACH or marked as reimbursed in Expensify and then exported to NetSuite, the report is automatically marked as paid in NetSuite. -If a report is exported to NetSuite, then marked as paid in NetSuite, the report will automatically be marked as reimbursed in Expensify during the next sync. +If a report is exported to NetSuite, and then marked as paid in NetSuite, the report will automatically be marked as reimbursed in Expensify during the next sync. + +## Will enabling auto-sync affect existing approved and reimbursed reports? -### Will enabling auto-sync affect existing approved and reimbursed reports? -Auto-sync will only export newly approved reports to NetSuite. Any reports that were approved or reimbursed before enabling auto-sync will need to be manually exported in order to sync them to NetSuite. +Auto-sync will only export newly approved reports to NetSuite. Reports that were approved or reimbursed before enabling auto-sync will need to be manually exported to sync them to NetSuite. +## When using multi-currency features in NetSuite, can expenses be exported with any currency? -### When using multi-currency features in NetSuite, can expenses be exported with any currency? When using multi-currency features with NetSuite, remember these points: **Employee/Vendor currency:** The currency set for a NetSuite vendor or employee record must match the subsidiary currency for whichever subsidiary you export that user's reports to. A currency mismatch will cause export errors. **Bank Account Currency:** When synchronizing bill payments, your bank account’s currency must match the subsidiary’s currency. Failure to do so will result in an “Invalid Account” error. +{% include faq-end.md %} diff --git a/docs/articles/new-expensify/connections/netsuite/Connect-to-NetSuite.md b/docs/articles/new-expensify/connections/netsuite/Connect-to-NetSuite.md index 19009c016862..990217523743 100644 --- a/docs/articles/new-expensify/connections/netsuite/Connect-to-NetSuite.md +++ b/docs/articles/new-expensify/connections/netsuite/Connect-to-NetSuite.md @@ -4,124 +4,161 @@ description: Integrate NetSuite with Expensify order: 1 --- -# Connect to NetSuite - -## Overview -Expensify’s integration with NetSuite allows you to sync data between the two systems. Before you start connecting Expensify with NetSuite, there are a few things to note: - -- You must use NetSuite administrator credentials to initiate the connection -- A Control Plan in Expensify is required to integrate with NetSuite -- Employees don’t need NetSuite access or a NetSuite license to submit expense reports and sync them to NetSuite -- Each NetSuite subsidiary must be connected to a separate Expensify workspace -- The workspace currency in Expensify must match the NetSuite subsidiary's default currency - -## Step 1: Install the Expensify Bundle in NetSuite -1. While logged into NetSuite as an administrator, go to **Customization > SuiteBundler > Search & Install Bundles**, then search for “Expensify” -2. Click on the Expensify Connect bundle (Bundle ID 283395) -3. Click **Install** -4. If you already have the Expensify Connect bundle installed, head to **Customization > SuiteBundler > Search & Install Bundles > List**, and update it to the latest version -5. Select "Show on Existing Custom Forms" for all available fields - -## Step 2: Enable Token-Based Authentication -1. In NetSuite, go to **Setup > Company > Enable Features > SuiteCloud > Manage Authentication** -2. Make sure “Token Based Authentication” is enabled -3. Click **Save** - - -## Step 3: Add Expensify Integration Role to a User -1. In NetSuite, head to **Lists > Employees**, and find the user who you would like to add the Expensify Integration role to. The user you select must at least have access to the permissions included in the Expensify Integration Role, and Admin access works too, but Admin access is not required. -2. Click **Edit > Access**, then find the Expensify Integration role in the dropdown and add it to the user -3. Click **Save** - -Remember that Tokens are linked to a User and a Role, not solely to a User. It’s important to note that you cannot establish a connection with tokens using one role and then switch to another role afterward. Once you’ve initiated a connection with tokens, you must continue using the same token/user/role combination for all subsequent sync or export actions. - -## Step 4: Create Access Tokens -1. In NetSuite, enter “page: tokens” in the Global Search -2. Click **New Access Token** -3. Select Expensify as the application (this must be the original Expensify integration from the bundle) -4. Select the role Expensify Integration -5. Click **Save** -6. Copy and paste the token and token ID to a saved location on your computer (this is the only time you will see these details) - -## Step 5: Confirm Expense Reports are enabled in NetSuite +{% include info.html %} +To use the NetSuite connection, you must have a NetSuite account and an Expensify Control plan. +{% include end-info.html %} + +Expensify’s integration with NetSuite supports syncing data between the two systems. Before you start connecting Expensify with NetSuite, there are a few things to note: + +- You must use NetSuite administrator credentials to initiate the connection. +- A Control Plan in Expensify is required to integrate with NetSuite. +- Employees don’t need NetSuite access or a NetSuite license to submit expense reports and sync them to NetSuite. +- Each NetSuite subsidiary must be connected to a separate Expensify workspace. +- The workspace currency in Expensify must match the NetSuite subsidiary's default currency. + +# Step 1: Install the Expensify Bundle in NetSuite + +While logged into NetSuite as an administrator, go to **Customization > SuiteBundler > Search & Install Bundles**, then search for “Expensify”. +Click on the Expensify Connect bundle (Bundle ID 283395). +Click **Install**. +If you already have the Expensify Connect bundle installed, head to **Customization > SuiteBundler > Search & Install Bundles > List**, and update it to the latest version. +Select "Show on Existing Custom Forms" for all available fields. + +# Step 2: Enable Token-Based Authentication + +In NetSuite, go to **Setup > Company > Enable Features > SuiteCloud > Manage Authentication**. +Make sure “Token Based Authentication” is enabled. +Click **Save**. + +# Step 3: Add Expensify Integration Role to a User + +In NetSuite, head to **Lists > Employees**, and find the user to who you would like to add the Expensify Integration role. The user you select must at least have access to the permissions included in the Expensify Integration Role, and Admin access works too, but Admin access is not required. +Click **Edit > Access**, then find the Expensify Integration role in the dropdown and add it to the user. +Click **Save**. + + +{% include info.html %} +Remember that Tokens are linked to a **User** and a **Role**, not solely to a User. It’s important to note that you cannot establish a connection with tokens using one role and then switch to another role afterward. Once you’ve initiated a connection with tokens, you must continue using the same token/user/role combination for all subsequent sync or export actions. +{% include end-info.html %} + +# Step 4: Create Access Tokens + + +In NetSuite, enter “page: tokens” in the Global Search. +Click **New Access Token**. +Select Expensify as the application (this must be the original Expensify integration from the bundle). +Select the role Expensify Integration. +Click **Save**. +Copy and paste the token and token ID to a saved location on your computer (this is the only time you will see these details.) + + +# Step 5: Confirm Expense Reports are enabled in NetSuite + +{% include info.html %} Expense Reports must be enabled in order to use Expensify’s integration with NetSuite. +{% include end-info.html %} + -1. In NetSuite, go to **Setup > Company > Enable Features > Employees** -2. Confirm the checkbox next to "Expense Reports" is checked -3. If not, click the checkbox and then click **Save** to enable Expense Reports +In NetSuite, go to **Setup > Company > Enable Features > Employees**. +Confirm the checkbox next to "Expense Reports" is checked. +If not, click the checkbox and then click **Save** to enable Expense Reports. -## Step 6: Confirm Expense Categories are set up in NetSuite + +# Step 6: Confirm Expense Categories are set up in NetSuite + +{% include info.html %} Once Expense Reports are enabled, Expense Categories can be set up in NetSuite. Expense Categories are synced to Expensify as Categories. Each Expense Category is an alias mapped to a General Ledger account so that employees can more easily categorize expenses. +{% include end-info.html %} + + +In NetSuite, go to **Setup > Accounting > Expense Categories** (a list of Expense Categories should show.) +If no Expense Categories are visible, click **New** to create new ones. + +# Step 7: Confirm Journal Entry Transaction Forms are Configured Properly -1. In NetSuite, go to **Setup > Accounting > Expense Categories** (a list of Expense Categories should show) -2. If no Expense Categories are visible, click **New** to create new ones - -## Step 7: Confirm Journal Entry Transaction Forms are Configured Properly -1. In NetSuite, go to **Customization > Forms > Transaction Forms** -2. Click **Customize** or **Edit** next to the Standard Journal Entry form -3. Click **Screen Fields > Main**. Please verify the “Created From” label has “Show” checked and the "Display Type" is set to "Normal" -4. Click the sub-header **Lines** and verify that the “Show” column for “Receipt URL” is checked -5. Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the journal type have this same configuration - -## Step 8: Confirm Expense Report Transaction Forms are Configured Properly -1. In NetSuite, go to **Customization > Forms > Transaction Forms** -2. Click **Customize** or **Edit** next to the Standard Expense Report form, then click **Screen Fields > Main** -3. Verify the “Created From” label has “Show” checked and the "Display Type" is set to "Normal" -4. Click the second sub-header, **Expenses**, and verify that the "Show" column for "Receipt URL" is checked -5. Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the expense report type have this same configuration - -## Step 9: Confirm Vendor Bill Transactions Forms are Configured Properly -1. In NetSuite, go to **Customization > Forms > Transaction Forms** -2. Click **Customize** or **Edit** next to your preferred Vendor Bill form -3. Click **Screen Fields > Main** and verify that the “Created From” label has “Show” checked and that Departments, Classes, and Locations have the “Show” label unchecked -4. Under the **Expenses** sub-header (make sure to click the “Expenses” sub-header at the very bottom and not “Expenses & Items”), ensure “Show” is checked for Receipt URL, Department, Location, and Class -5. Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the vendor bill type have this same configuration - -## Step 10: Confirm Vendor Credit Transactions Forms are Configured Properly -1. In NetSuite, go to **Customization > Forms > Transaction Forms** -2. Click **Customize** or **Edit** next to your preferred Vendor Credit form, then click **Screen Fields > Main** and verify that the “Created From” label has “Show” checked and that Departments, Classes, and Locations have the “Show” label unchecked -3. Under the **Expenses** sub-header (make sure to click the “Expenses” sub-header at the very bottom and not “Expenses & Items”), ensure “Show” is checked for Receipt URL, Department, Location, and Class -4. Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the vendor credit type have this same configuration - -## Step 11: Set up Tax Groups (only applicable if tracking taxes) -Expensify imports NetSuite Tax Groups (not Tax Codes), which you can find in NetSuite under **Setup > Accounting > Tax Groups**. +In NetSuite, go to **Customization > Forms > Transaction Forms.** +Click **Customize** or **Edit** next to the Standard Journal Entry form. +Click **Screen Fields > Main**. Please verify the “Created From” label has “Show” checked and the "Display Type" is set to "Normal." +Click the sub-header **Lines** and verify that the “Show” column for “Receipt URL” is checked. +Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the journal type have this same configuration. + +# Step 8: Confirm Expense Report Transaction Forms are Configured Properly + + +In NetSuite, go to **Customization > Forms > Transaction Forms.** +Click **Customize** or **Edit** next to the Standard Expense Report form, then click **Screen Fields > Main.** +Verify the “Created From” label has “Show” checked and the "Display Type" is set to "Normal." +Click the second sub-header, **Expenses**, and verify that the "Show" column for "Receipt URL" is checked. +Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the expense report type have this same configuration. + + +# Step 9: Confirm Vendor Bill Transactions Forms are Configured Properly + + +In NetSuite, go to **Customization > Forms > Transaction Forms.** +Click **Customize** or **Edit** next to your preferred Vendor Bill form. +Click **Screen Fields > Main** and verify that the “Created From” label has “Show” checked and that Departments, Classes, and Locations have the “Show” label unchecked. +Under the **Expenses** sub-header (make sure to click the “Expenses” sub-header at the very bottom and not “Expenses & Items”), ensure “Show” is checked for Receipt URL, Department, Location, and Class. +Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the vendor bill type have this same configuration. + + +# Step 10: Confirm Vendor Credit Transactions Forms are Configured Properly + + +In NetSuite, go to **Customization > Forms > Transaction Forms**. +Click **Customize** or **Edit** next to your preferred Vendor Credit form, then click **Screen Fields > Main** and verify that the “Created From” label has “Show” checked and that Departments, Classes, and Locations have the “Show” label unchecked. +Under the **Expenses** sub-header (make sure to click the “Expenses” sub-header at the very bottom and not “Expenses & Items”), ensure “Show” is checked for Receipt URL, Department, Location, and Class. +Go to **Customization > Forms > Transaction Forms** and ensure that all other transaction forms with the vendor credit type have this same configuration. + + +# Step 11: Set up Tax Groups (only applicable if tracking taxes) + +{% include info.html %} +**Things to note about tax.** +Expensify imports NetSuite Tax Groups (not Tax Codes). To ensure Tax Groups can be applied to expenses go to **Setup > Accounting > Set Up Taxes** and set the _Tax Code Lists Include_ preference to “Tax Groups And Tax Codes” or “Tax Groups Only.” If this field does not display, it’s not needed for that specific country. Tax Groups are an alias for Tax Codes in NetSuite and can contain one or more Tax Codes (Please note: for UK and Ireland subsidiaries, please ensure your Tax Groups do not have more than one Tax Code). We recommend naming Tax Groups so your employees can easily understand them, as the name and rate will be displayed in Expensify. +{% include end-info.html %} + +Go to **Setup > Accounting > Tax Groups**. +Click **New**. +Select the country for your Tax Group. +Enter the Tax Name (this is what employees will see in Expensify.) +Select the subsidiary for this Tax Group. +Select the Tax Code from the table you wish to include in this Tax Group. +Click **Add**. +Click **Save**. +Create one NetSuite Tax Group for each tax rate you want to show in Expensify. + +# Step 12: Connect Expensify to NetSuite + +Click your profile image or icon in the bottom left menu. +Scroll down and click **Workspaces** in the left menu. +Select the workspace you want to connect to NetSuite. +Click **More features** in the left menu. +Click **More features** in the left menu. +Scroll down to the Integrate section and enable the Accounting toggle. +Click **Accounting** in the left menu. +Click **Connect** next to NetSuite. +Click **Next** until you reach setup step 5 (If you followed the instructions above, then the first four setup steps will already be complete.) +On setup step 5, enter your NetSuite Account ID, Token ID, and Token Secret (the NetSuite Account ID can be found in NetSuite by going to **Setup > Integration > Web Services Preferences**.) +Click **Confirm** to complete the setup. -To set up Tax Groups in NetSuite: - -1. Go to **Setup > Accounting > Tax Groups** -2. Click **New** -3. Select the country for your Tax Group -4. Enter the Tax Name (this is what employees will see in Expensify) -5. Select the subsidiary for this Tax Group -6. Select the Tax Code from the table you wish to include in this Tax Group -7. Click **Add** -8. Click **Save** -9. Create one NetSuite Tax Group for each tax rate you want to show in Expensify - -Ensure Tax Groups can be applied to expenses by going to **Setup > Accounting > Set Up Taxes** and setting the Tax Code Lists Include preference to “Tax Groups And Tax Codes” or “Tax Groups Only.” If this field does not display, it’s not needed for that specific country. - -## Step 12: Connect Expensify to NetSuite -1. Log into Expensify as a workspace admin -2. Click your profile image or icon in the bottom left menu -3. Scroll down and click **Workspaces** in the left menu -4. Select the workspace you want to connect to NetSuite -5. Click **More features** in the left menu -6. Scroll down to the Integrate section and enable Accounting -7. Click **Accounting** in the left menu -8. Click **Set up** next to NetSuite -9. Click **Next** until you reach setup step 5 (If you followed the instructions above, then the first four setup steps will be complete) -10. On setup step 5, enter your NetSuite Account ID, Token ID, and Token Secret (the NetSuite Account ID can be found in NetSuite by going to **Setup > Integration > Web Services Preferences**) -11. Click **Confirm** to complete the setup + +![The New Expensify workspace setting is open and the More Features tab is selected and visible. The toggle to enable Accounting is highlighted with an orange call out and is currently in the grey disabled position.]({{site.url}}/assets/images/ExpensifyHelp-Xero-1.png) + +![The New Expensify workspace settings > More features tab is open with the toggle to enable Accounting enabled and green. The Accounting tab is now visible in the left-hand menu and is highlighted with an orange call out.]({{site.url}}/assets/images/ExpensifyHelp-Xero-2.png){:width="100%"} After completing the setup, the NetSuite connection will sync. It can take 1-2 minutes to sync with NetSuite. -Once connected, all reports exported from Expensify will be generated in NetSuite using SOAP Web Services (the term NetSuite employs when records are created through the integration). +Once connected, all newly approved and paid reports exported from Expensify will be generated in NetSuite using SOAP Web Services (the term NetSuite employs when records are created through the integration). + +{% include faq-begin.md %} + +## If I have a lot of customer and vendor data in NetSuite, how can I help ensure that importing them all is seamless? + +For importing your customers and vendors, make sure your page size is set to 1000 in NetSuite. -## FAQ -### What type of Expensify plan is required to connect to NetSuite? -You need a Control workspace to integrate with NetSuite. If you have a Collect workspace, you will need to upgrade to Control. +Go to **Setup > Integration > Web Services Preferences** and search **Page Size** to determine your page size. -### Page size -Make sure your page size is set to 1000 in NetSuite for importing your customers and vendors. Go to **Setup > Integration > Web Services Preferences** and search **Page Size** to determine your page size. +{% include faq-end.md %} diff --git a/docs/articles/new-expensify/expenses-&-payments/Adding-Attendees.md b/docs/articles/new-expensify/expenses-&-payments/Adding-Attendees.md new file mode 100644 index 000000000000..7d2e59694063 --- /dev/null +++ b/docs/articles/new-expensify/expenses-&-payments/Adding-Attendees.md @@ -0,0 +1,31 @@ +--- +title: Adding Attendees +description: How to add attendees to your expenses +--- + + +# Overview + +Expensify allows you to add attendees when you want to associate specific individuals with an expense. + +# How to add attendees to an expense + +1. Click on the Attendees caret at the bottom of the Request page to expand attendee options. +2. Select the attendees you wish to add from Recents, Contacts, or use the search bar to find specific individuals. +3. If you’re adding external contacts, manually enter their information, and they’ll be saved under Contacts for future requests. +4. Click on each attendee to add them. Selected attendees will display a check mark. + +# How to resolve category limit errors by adding attendees + +Sometimes, an expense will exceed the category limit set by an Expensify admin, because the amount exceeded the category limit for that expense category. To resolve this error, you can add attendees to the expense. + +1. Click the Attendees caret and add attendees to help resolve category limit violations by evenly distributing the total amount across all attendees. +2. Once attendees are added, a dot separator will appear between the Request attendees field title and the amount per person, making the allocation easy to review for approvers. + +{% include faq-begin.md %} + +## Does Expensify create an audit trail for the addition of attendees to expenses? + +Yes, every time an attendee is added or removed from the request, a system message will automatically record the change on the expense report containing the expense. + +System messages for attendee changes cannot be edited, ensuring an accurate history of updates to the request. diff --git a/docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md b/docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md deleted file mode 100644 index 26634d9a33df..000000000000 --- a/docs/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Approve and Pay Expenses -description: Approve, hold, or pay expenses submitted to you ---- -
    - -As a workspace admin, you can set an approval workflow for the expenses submitted to you. Expenses can be, - -- Instantly submitted without needing approval. -- Submitted at a desired frequency (daily, weekly, monthly) and follow an approval workflow. - -**Setting approval workflow and submission frequencies** - -Approval workflow settings and submission frequencies can be set in the Workflow settings of your workspace. - -# Manually approve expense - -When someone sends an expense or a group of expenses to you for approval, you’ll receive the expense in Expensify Chat for the related workspace. Chats with new updates appear with a green dot to the right of the chat message. Concierge also sends you an email notification for the new expense. - -{% include info.html %} -If an expense is sent to you by a friend, you will not need to approve the expense. Instead, you can immediately pay the expense when you are ready. -{% include end-info.html %} - -# Approve expenses - -To approve an expense, - -1. Open the Expensify Chat thread for the expense. -2. Click the expense or group of expenses. -3. Review the expense details to ensure they are correct. Look at each receipt, the amount, the description, and any additional details. -4. Determine the next steps. - - **Approve**: When you’re satisfied with the expense, click **Approve**. - - **Handle holds**: If any of the expenses are on hold, you can choose to either approve only the expenses that are not on hold or approve the full amount, including any held expenses. - - **Request changes**: You can add a comment to the expense’s chat thread in your Expensify Chat inbox to request changes to the expense details. - -{% include info.html %} -If the transaction is pending (a common occurrence with recent company card expenses or SmartScan expenses), you’ll need to wait until the transaction posts before approving it. -{% include end-info.html %} - -![The approve button in an expense]({{site.url}}/assets/images/ExpensifyHelp_ApproveExpense_1.png){:width="100%"} - -![The approve button when you click into the expense]({{site.url}}/assets/images/ExpensifyHelp_ApproveExpense_2.png){:width="100%"} - -You’re now ready to pay the expense. - -# Hold an expense - -If you need to delay a payment or if you need more information on the expense before it can be approved, you can hold the expense. - -To hold an expense, - -1. Open the Expensify Chat thread for the expense. -2. Click the expense or group of expenses. -3. Click the three dot menu at the top right of the expense and select **Hold**. -4. Enter a reason for the delay. -5. Review the Hold Overview page and click **Got It**. - -When you’re ready, you can choose to: -- **Remove the hold**: Complete the steps above and select **Unhold**. -- **Approve the expense**: Complete the steps above for “Approve expenses.” -Once the expense has been approved, you can now pay the expense. - -{% include info.html %} -Held expenses will not be available for payment until they have been approved. -{% include end-info.html %} - -# Unapprove an expense - -Some details of approved expenses and reports cannot be edited. If you need to edit an expense that has been approved, admins and the last approver have the option to unapprove reports. - -1. Click the workspace logo in the top left corner. -2. Select the workspace associated with the expense report. -3. Find the approved report by searching for the submitter. -4. Click the dropdown arrow at the top of the report to view the report actions. -5. Click **Unapprove**. - -The unapproved report will return to an editable state, and the submitter will receive an email and chat notification that the expense has been unapproved. - -{% include info.html %} -Reports that have been paid cannot be unapproved. If the approved expense has already been exported to an accounting package, you’ll see a warning that unapproving an expense can cause data discrepancies and Expensify Card reconciliation issues. Ideally, you’ll want to delete the data that has already been exported to the accounting package before approving the expense again. -{% include end-info.html %} - -# Pay expenses - -Once you’ve approved an expense—or if the expense does not require approval—you’ll be able to pay it. - -{% include info.html %} -To pay expenses within Expensify, you’ll need to [set up your Expensify Wallet](https://help.expensify.com/articles/new-expensify/expenses-&-payments/Set-up-your-wallet). -{% include end-info.html %} - -To pay an expense, - -1. Open the Expensify Chat thread for the expense. -2. Click the expense or group of expenses. -3. Select a payment option. - - Click **Pay** to pay the full expense within Expensify. If the expenses contain one that has been held, the pay amount will only include the expenses that have not been held. Then you’ll select your payment method. - - Click **Pay Elsewhere** to indicate that a payment has been sent using a method outside of Expensify, such as cash or a check. This will label the expense as Paid. - -# FAQ - -**Why was an expense automatically approved?** - -We refer to this as **Instant Submit**. If a workspace doesn’t have Delayed Submission enabled, an expense report will automatically be submitted. - -**Why is an employee expense showing as ‘pending?’** - -An Expensify Card expense will show as pending if the merchant hasn’t posted it. This is usually the case with hotel holds, or card rental holds. A hold will normally last no more than 7-10 business days unless it’s a hotel hold, which can last 31 days. - -
    diff --git a/docs/articles/new-expensify/expenses-&-payments/Approve-expenses.md b/docs/articles/new-expensify/expenses-&-payments/Approve-expenses.md new file mode 100644 index 000000000000..77587cc124f0 --- /dev/null +++ b/docs/articles/new-expensify/expenses-&-payments/Approve-expenses.md @@ -0,0 +1,139 @@ +--- +title: Approve Expenses +description: Approve, hold, and unapprove submitted expenses +--- +
    + +Expenses can be created through manual entry, tracking distance, or scanning a receipt. They can be submitted to an individual or a workspace. + +This help article has more details about creating and submitting an expense to an individual or a workspace. + +# Receiving an expense from an Individual + +When an expense is submitted to an individual, it doesn’t need approval. It only needs to be paid. + +This help article has the steps to pay the expense. + +# Receiving a workspace expense + +When an expense is submitted to a workspace with an “approval workflow”, it must be approved before it can be paid. + +As a workspace admin, you can set an [approval workflow](https://help.expensify.com/articles/new-expensify/workspaces/Add-approvals) in the workspace settings. For each expense report, you’ll have the option to: + +- **Approve:** Click Approve if you’re satisfied with the expense details. +- **Hold the expense:** If you need to delay a payment or provide more information before approval, you can hold an expense. +- **Unapprove the expense:** You can return the expense to the submitter for revisions. + +# Approve workspace expenses + +{% include selector.html values="desktop, mobile" %} + +{% include option.html value="desktop or WebApp" %} +1. When an expense is submitted, you will receive an email and in-app notification with the details of the expense. +2. Click the expense in the email to be directed to New Expensify, where you can review it. +3. Click on the expense to view the receipt, amount, description, and additional details the submitter provides. +4. Click **Approve**. +5. When you are ready to pay the expense, follow the steps in this help article. +{% include end-option.html %} + +{% include option.html value="mobile" %} +1. When an expense is submitted, you will receive a text message and in-app notification with its details. +2. Tap on the expense in the text or notification to be directed to New Expensify, where you can review it. +3. Tap on the expense to view the receipt, amount, description, and any additional details the submitter provides. +4. Tap **Approve**. +{% include end-option.html %} + +{% include end-selector.html %} + +{% include info.html %} +If the transaction is pending (a common occurrence with recent company cards or SmartScan expenses), you’ll need to wait until the transaction posts before approving it. +{% include end-info.html %} + + +# Hold a workspace expense + +{% include selector.html values="desktop, mobile" %} + +{% include option.html value="desktop" %} +1. Locate the expense on the **Search** page. +2. Click **View**. +3. Click the drop-down arrow at the top of the expense. +4. Click the **Hold** button. +5. Enter a reason for the delay. The reason for the hold will be added to the expense report. + +

     

    + +When you’re ready to remove the hold, + +1. Locate the expense on the Search page. +2. Click **View**. +3. Click the drop-down arrow at the top of the expense. +4. Select **UnHold**. +5. Complete the steps above to “Approve expenses.” Once the expense has been approved, you can pay it. +{% include end-option.html %} + +{% include option.html value="mobile" %} +1. Locate the expense on the **Search** page. +2. Tap **View**. +3. Tap the drop-down arrow at the top of the expense. +4. Select the **Hold** button. +5. Enter a reason for the delay. The reason for the hold will be added to the expense report. + +

     

    + +When you’re ready to remove the hold, + +1. Tap **Search** and select the expense. +2. Tap the drop-down arrow at the top of the expense. +3. Select **UnHold**. +4. Complete the steps above to “Approve expenses.” Once the expense has been approved, you can pay it. +{% include end-option.html %} + +{% include end-selector.html %} + +{% include info.html %} +Held expenses will not be available for payment until they have been approved. +{% include end-info.html %} + +# Unapprove a workspace expense + +{% include selector.html values="desktop, mobile" %} + +{% include option.html value="desktop" %} +1. Locate the expense on the **Search** page. +2. Click **View**. +3. Click the drop-down arrow at the top of the report +4. Click **Unapprove**. +5. The submitter will receive an email and in-app notification that the expense has been unapproved. +6. An unapproved expense can be deleted by clicking the drop-down arrow at the top of the expense. +{% include end-option.html %} + +{% include option.html value="mobile" %} +1. Locate the expense on the **Search** page. +2. Tap **View**. +3. Tap the drop-down arrow at the top of the expense. +4. Tap **Unapprove**. +5. The submitter will receive a text and in-app notification that the expense has been unapproved. +6. An unapproved expense can be deleted by clicking the drop-down arrow at the top of the expense. +{% include end-option.html %} + +{% include end-selector.html %} + +Reports that have been paid cannot be unapproved. + +If the approved expense has already been exported to an accounting package, you’ll see a warning that unapproving an expense can cause data discrepancies and Expensify Card reconciliation issues. Ideally, you’ll want to delete the data already exported to the accounting package before approving the expense again. + +{% include faq-begin.md %} + +**Why is an employee expense showing as ‘pending?’** + +An Expensify Card expense will show as pending if the merchant hasn’t posted it. This is usually the case with hotel holds, or card rental holds. A hold will normally last no more than 7-10 business days unless it’s a hotel hold, which can last 31 days. + +**What are expense reports?** + +In Expensify, expense reports group expenses in a batch to be paid or reconciled. When a draft report is open, all new expenses are added to it. + +Once a report is submitted, you can track the status from the **Search** section. Click the **View** button for a specific expense or expense report. The status is displayed at the top of the expense or report. +{% include faq-end.md %} + +
    diff --git a/docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md b/docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md index cf6a13f9d5ac..38f1e0fdd466 100644 --- a/docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md +++ b/docs/articles/new-expensify/expenses-&-payments/Create-an-expense.md @@ -1,68 +1,83 @@ --- title: Create an expense -description: Request payment from an employer or a friend +description: How to create an expense as an individual or workspace member redirect_from: articles/request-money/Request-and-Split-Bills/ ---
    -You can create an expense to request payment from an employer’s workspace or from a friend using any of the following options: -- **SmartScan**: Take a picture of a receipt to capture the expense details automatically. -- **Add manually**: Manually enter the expense details. -- **Create a distance expense**: Capture mileage expenses by entering the addresses you traveled to. Expensify automatically calculates the distance, the rate per mile, and the total cost. +Expenses can be created through SmartScanning a receipt, emailing a receipt, tracking distance, and manually creating an expense. + +They can be submitted to an individual or a workspace. Before we outline the steps to create an expense, let’s go over the reasons to send an expense to an individual or a workspace. + +# Sending an expense to an Individual + +If you use Expensify for personal use, submitting to an individual is likely best. + +Once the expense is created, you will see the option to send it to an email or phone number. Alternatively, add an expense to a chat, which will go straight to the person you are chatting with. + +When an expense is submitted to an individual’s email or phone number, the payor will receive an email or text notification with the amount that needs to be paid. They can click on the amount in the email or text to pay the expense. + +# Submit an expense to a workspace or employer + +If you are an employee or a workspace member, you should submit the expense to the workspace instead of an individual. A workspace is designed to code expenses to the company's requirements. + +When an expense is submitted to a workspace, your approver will receive an email or text notification prompting them to approve and pay it. + +# How to Create an Expense # SmartScan a receipt {% include selector.html values="desktop, mobile" %} -{% include option.html value="desktop" %} -1. Click the + icon in the bottom left menu and select **Submit Expense**. +{% include option.html value="desktop or WebApp" %} +1. Click the **Global Create** button and select **Submit Expense**. 2. Click **Scan**. -3. Drag and drop the receipt into Expensify, or click **Choose File** to select it from your saved files. *Note: The SmartScan process will auto-populate the merchant, date, and amount.* -4. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -5. Add a description, category, tags, or tax as desired, or as required by your workspace. +3. You can drag and drop the receipt into Expensify or click **Choose File** to select it from your saved files. _The SmartScan process will auto-populate the merchant, date, and amount._ +4. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +5. Add a description, category, tags, or tax as desired or as required by your workspace. 6. (Optional) Enable the expense as billable if it should be billed to a client. -7. Click **Submit Expense**. +7. Click **Submit expense**. {% include end-option.html %} {% include option.html value="mobile" %} -1. Tap the + icon at the bottom of the screen and select **Submit Expense**. +1. ​​Tap the **Global Create** button and select **Submit Expense**. 2. Tap **Scan**. -3. Tap the green button to take a photo of a receipt, or tap the Image icon to the left of it to upload a receipt from your phone. *Note: The SmartScan process will auto-populate the merchant, date, and amount.* -4. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -5. Add a description, category, tags, or tax as desired, or as required by your workspace. +3. Tap the green button to take a photo of a receipt, or tap the Image icon to upload a receipt from your phone. _The SmartScan process will auto-populate the merchant, date, and amount._ +4. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +5. Add a description, category, tags, or tax as desired or as required by your workspace. 6. (Optional) Enable the expense as billable if it should be billed to a client. -7. Tap **Submit**. +7. Tap **Submit expense**. {% include end-option.html %} {% include end-selector.html %} {% include info.html %} -You can also forward receipts to receipts@expensify.com using an email address that is your primary or secondary email address. SmartScan will automatically pull all of the details from the receipt and add it to your expenses. +You can also forward receipts to receipts@expensify.com using your primary or secondary email address. SmartScan will automatically extract all the details from the receipt and add them to your expenses. {% include end-info.html %} # Manually add an expense {% include selector.html values="desktop, mobile" %} -{% include option.html value="desktop" %} -1. Click the + icon in the bottom left menu and select **Submit Expense**. +{% include option.html value="desktop or WebApp" %} +1. Click the **Global Create** button and select **Submit Expense**. 2. Click **Manual**. -3. Enter the amount on the receipt and click **Next**. *Note: Click the currency symbol to select a different currency.* -4. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -5. (Optional) Add a description. -6. Add a merchant. -7. Click **Show more** to add additional fields (like a category) as desired, or as required by your workspace. +3. Enter the currency and amount. +4. Click **Next**. +5. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +6. Add a description, category, tags, or tax as desired or as required by your workspace. Click **Show More** to see all coding options. +7. (Optional) Enable the expense as billable if it should be billed to a client. 8. Click **Submit**. {% include end-option.html %} {% include option.html value="mobile" %} -1. Tap the + icon at the bottom of the screen and select **Submit Expense**. +1. Tap the **Global Create** button and select **Submit Expense**. 2. Tap **Manual**. -3. Enter the amount on the receipt and tap **Next**. *Note: Click the currency symbol to select a different currency.* -4. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -5. (Optional) Add a description. -6. Add a merchant. -7. Tap **Show more** to add additional fields (like a category) as desired, or as required by your workspace. +3. Enter the currency and amount. +4. Tap **Next**. +5. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +6. Add a description, category, tags, or tax as desired or as required by your workspace. Tap **Show More** to see all coding options. +7. (Optional) Enable the expense as billable if it should be billed to a client. 8. Tap **Submit**. {% include end-option.html %} @@ -72,54 +87,65 @@ You can also forward receipts to receipts@expensify.com using an email address t {% include selector.html values="desktop, mobile" %} -{% include option.html value="desktop" %} -1. Click the + icon in the bottom left menu and select **Submit Expense**. +{% include option.html value="desktop or WebApp" %} +1. Click the **Global Create** button and select **Submit Expense**. 2. Click **Distance**. 3. Click **Start** and enter the starting location of your trip. -4. Click **Stop** and enter the ending location of your trip. -5. (Optional) Click **Add stop** to add additional stops, if applicable. +4. Click **Stop** and enter the ending location of your trip. +5. (Optional) Click **Add Stop** to add additional stops, if applicable. Drag and drop on the parallel lines (=) to reorder the stops if needed. 6. Tap **Next**. -7. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -8. (Optional) Add a description. -9. Click **Submit**. +7. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +8. Add a description, category, tags, or tax as desired or as required by your workspace. Click **Show More** to see all coding options. +9. (Optional) Enable the expense as billable if it should be billed to a client. +10. Click **Submit**. {% include end-option.html %} {% include option.html value="mobile" %} -1. Tap the + icon at the bottom of the screen and select **Submit Expense**. +1. Tap the **Global Create** button and select **Submit Expense**. 2. Tap **Distance**. 3. Tap **Start** and enter the starting location of your trip. -4. Tap **Stop** and enter the ending location of your trip. -5. (Optional) Tap **Add stop** to add additional stops, if applicable. -6. Tap **Next**. -7. Use the search field to find the desired workspace or an individual’s name, email, or phone number. -8.(Optional) Add a description. -9. Tap **Submit**. +4. Tap **Stop** and enter the ending location of your trip. +5. (Optional) Tap **Add Stop** to add additional stops, if applicable. Drag and drop on the parallel lines (=) to reorder the stops if needed. +6. Tap Next. +7. Enter the desired workspace or an individual’s email or phone number to receive the expense report. +8. Add a description, category, tags, or tax as desired or as required by your workspace. Tap **Show More** to see all coding options. +9. (Optional) Enable the expense as billable if it should be billed to a client. +10. Click **Submit**. {% include end-option.html %} {% include end-selector.html %} -# Next Steps +# Next Steps for expenses sent to an Individual -The next steps for the expense depend on whether it was submitted to a workspace or to an individual: -- **Expenses submitted to a workspace** are automatically added to a report and checked for any violations or inconsistencies. A chat thread for the expense is also added to your chat inbox. When you open the chat, the top banner will show the expense status and any next steps. By default, reports are automatically submitted for approval every Sunday. However, if it is ready for early submission, you can manually submit a report for approval. Once a report is submitted, your approver will be prompted to review your expense report. If changes are required, you will receive a notification to resolve any violations and resubmit. You will also be notified once your approver approves or denies your expenses. -- **Expenses submitted to a friend** are sent right to that individual via email or text. You can chat with them about the expense in Expensify Chat, and you can receive payments through your Expensify Wallet or outside of Expensify. +- Expenses submitted to an individual are instantly sent. +- The payer will receive an email or text prompting them to review and pay the expense. +- You can chat with the paying individual in Expensify. +- Make sure to [connect your personal bank account](https://help.expensify.com/articles/new-expensify/expenses-&-payments/Connect-a-Personal-Bank-Account) to receive payment. -{% include faq-begin.md %} -**Can I divide a payment between multiple people?** +# Next Steps for expense sent to a workspace -Yes, you can split an expense to share the cost between multiple people. +- Expenses submitted to a workspace are automatically added to a report and checked for violations or inconsistencies. +- You can view the details and status of the expense on the **Search** tab. +- Workspace settings determine the frequency of report submission. However, if the report is ready for early submission, you can manually submit a report for approval. +- Once a report is submitted, your approver will get an email or text to review and pay the expense. +- If changes are required, you will receive a notification to fix the expense and resubmit. +- You will also be notified once your approver approves or denies your expenses. +- Make sure to [connect your personal bank account](https://help.expensify.com/articles/new-expensify/expenses-&-payments/Connect-a-Personal-Bank-Account) to receive payment. -**Can I pay someone in another currency?** +{% include faq-begin.md %} +**Can I divide a payment between multiple people?** -While you can record your expenses in different currencies, Expensify wallets are only available for members who can add a U.S. personal bank account. +Yes, you can [split an expense](https://help.expensify.com/articles/new-expensify/expenses-&-payments/Split-an-expense) in a group chat. **Can I change an expense once I’ve submitted it?** -Yes, you can edit an expense until it is paid. When an expense is submitted to a workspace, you, your approvers, and admins can edit the details on an expense except for the amount and date. +Yes, you can edit an expense until it is paid. When an expense is submitted, the details can be edited except for the amount and date. **What are expense reports?** -In Expensify, expenses are submitted on an expense report. When a draft report is open, all new expenses are added to the draft report. Once a report is submitted, it shows what stage of the approval process the expenses are in and any required next steps. +In Expensify, expense reports group expenses in a batch to be paid or reconciled. When a draft report is open, all new expenses are added to it. + +Once a report is submitted, you can track the status from the **Search** section. Click the **View** button for a specific expense or expense report. The status is displayed at the top of the expense or report. {% include faq-end.md %}
    diff --git a/docs/articles/new-expensify/expensify-card/Add-Expensify-Card-to-Apple-or-Google-Pay.md b/docs/articles/new-expensify/expensify-card/Add-Expensify-Card-to-Apple-or-Google-Pay.md index 844a688e0011..3c147e33517b 100644 --- a/docs/articles/new-expensify/expensify-card/Add-Expensify-Card-to-Apple-or-Google-Pay.md +++ b/docs/articles/new-expensify/expensify-card/Add-Expensify-Card-to-Apple-or-Google-Pay.md @@ -9,7 +9,7 @@ You can use your Expensify Card for contactless in-person payments by adding it {% include selector.html values="mobile" %} {% include option.html value="mobile" %} -**Apple Pay** +### Apple Pay 1. Open the Apple Pay app. 2. Tap the + button. @@ -17,7 +17,7 @@ You can use your Expensify Card for contactless in-person payments by adding it 4. Tap **Continue**. 5. Follow the steps provided to add your virtual card. -**Google Pay** +### Google Pay 1. Open the Google Pay app. 2. Tap **Add to Wallet**. diff --git a/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md b/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md index 8fffec75e744..782e939e991e 100644 --- a/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md +++ b/docs/articles/new-expensify/expensify-card/Upgrade-to-the-new-Expensify-Card-from-Visa.md @@ -12,7 +12,7 @@ When you upgrade the Expensify Cards to the new program, you'll have access to e - Unique naming for each virtual card for simplified expense categorization {% include info.html %} -The Expensify Card upgrade must be completed by November 1, 2024. +The Expensify Card upgrade must be completed by December 1, 2024. {% include end-info.html %} # Upgrade your company’s Expensify Card program diff --git a/docs/redirects.csv b/docs/redirects.csv index bb6729245f83..4a08a683d08e 100644 --- a/docs/redirects.csv +++ b/docs/redirects.csv @@ -591,9 +591,11 @@ https://help.expensify.com/articles/expensify-classic/articles/expensify-classic https://help.expensify.com/articles/expensify-classic/bank-accounts-and-payments/payments/Pay-Bills,https://help.expensify.com/articles/expensify-classic/bank-accounts-and-payments/payments/Create-and-Pay-Bills https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/add-a-payment-card-and-view-your-subscription,https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/Add-a-payment-card-and-view-your-subscription https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/Billing-page-coming-soon,https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/Billing-page +https://help.expensify.com/articles/expensify-classic/expenses/The-Expenses-Page,https://help.expensify.com/articles/expensify-classic/expenses/Navigate-the-Expenses-Page https://help.expensify.com/articles/expensify-classic/expenses/Add-expenses-in-bulk,https://help.expensify.com/articles/expensify-classic/expenses/Add-an-expense https://help.expensify.com/articles/expensify-classic/expenses/Track-group-expenses,https://help.expensify.com/articles/expensify-classic/expenses/Add-an-expense https://help.expensify.com/articles/expensify-classic/expenses/Track-mileage-expenses,https://help.expensify.com/articles/expensify-classic/expenses/Add-an-expense https://help.expensify.com/articles/expensify-classic/expenses/Track-per-diem-expenses,https://help.expensify.com/articles/expensify-classic/expenses/Add-an-expense https://community.expensify.com/discussion/5116/faq-where-can-i-use-the-expensify-card,https://help.expensify.com/articles/new-expensify/expensify-card/Use-your-Expensify-Card#where-can-i-use-my-expensify-card https://help.expensify.com/articles/other/Expensify-Lounge,https://help.expensify.com/Hidden/Expensify-Lounge +https://help.expensify.com/articles/new-expensify/expenses-&-payments/Approve-and-pay-expenses,https://help.expensify.com/articles/new-expensify/expenses-&-payments/Approve-expenses \ No newline at end of file diff --git a/help/README.md b/help/README.md index 5145954923de..d62513f07f53 100644 --- a/help/README.md +++ b/help/README.md @@ -16,14 +16,18 @@ If you are a developer comfortable working on the command line, you can edit the * `rbenv install 3.3.4` 5. Set the your default ruby version using * `rbenv global 3.3.4` -6. Install Jekyll and bundler gem +6. check to ensure that your global ruby version is `3.3.4` + * `ruby -v` +7. Install Jekyll and bundler gem * `cd help` * `gem install jekyll bundler` -7. Create a branch for your changes -8. Make your changes -9. Locally build and test your changes: +8. Install node dependencies with npm + * `npm install` +9. Create a branch for your changes +10. Make your changes +11. Locally build and test your changes (they build to the /help/_site/ directory): * `bundle exec jekyll build` -10. Push your changes +12. Push your changes ### The easy way: edit on Github If you don't want to set up your own local dev environment, feel free to just edit the help materials directly from Github: diff --git a/help/_layouts/default.html b/help/_layouts/default.html index 8a4605807355..c3981f17296f 100644 --- a/help/_layouts/default.html +++ b/help/_layouts/default.html @@ -76,6 +76,10 @@ box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1); } + .toc-link::before { + display: none; + } + .toc-sidebar ul { list-style: none; padding-left: 0; @@ -214,7 +218,7 @@ .footer-column { flex: 1; max-width: 300px; /* Set a max-width for each column */ - padding: 0 20px; /* Add padding for some space between the columns */ + padding: 0 20px; /* Add padding for some space between the columns */ } @@ -273,8 +277,8 @@

    Resources

  • Press Kit
  • Support
  • ExpensifyHelp
  • -
  • Community
  • -
  • Privacy
  • +
  • Terms of Service
  • +
  • Privacy
  • Expensify App
  • @@ -325,7 +329,7 @@

    Get Started

    - + <% } %> - +