Skip to content

Commit 9b8f329

Browse files
authored
Merge branch 'main' into refactor/option-row-subtitle
2 parents abecba5 + 2c02bc0 commit 9b8f329

158 files changed

Lines changed: 4352 additions & 2157 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mobile-Expensify

__mocks__/react-native-vision-camera.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009036913
115-
versionName "9.3.69-13"
114+
versionCode 1009036918
115+
versionName "9.3.69-18"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"

assets/images/camera-flip.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

config/eslint/eslint.seatbelt.tsv

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,12 @@
472472
"../../src/pages/ReimbursementAccount/EnterSignerInfo/index.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
473473
"../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "react-hooks/refs" 3
474474
"../../src/pages/ReimbursementAccount/ReimbursementAccountPage.tsx" "react-hooks/set-state-in-effect" 4
475+
"../../src/pages/ReimbursementAccount/USD/BankInfo/BankInfo.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
476+
"../../src/pages/ReimbursementAccount/USD/BeneficialOwnerInfo/BeneficialOwnersStep.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
477+
"../../src/pages/ReimbursementAccount/USD/BusinessInfo/BusinessInfo.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
475478
"../../src/pages/ReimbursementAccount/USD/BusinessInfo/subSteps/IndustryCode/IndustryCodeSelector.tsx" "react-hooks/set-state-in-effect" 1
479+
"../../src/pages/ReimbursementAccount/USD/CompleteVerification/CompleteVerification.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
480+
"../../src/pages/ReimbursementAccount/USD/Requestor/PersonalInfo/PersonalInfo.tsx" "@typescript-eslint/no-deprecated/useSubStep" 1
476481
"../../src/pages/ReportDescriptionPage.tsx" "no-restricted-syntax" 1
477482
"../../src/pages/ReportDetailsPage.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
478483
"../../src/pages/ReportDetailsPage.tsx" "react-hooks/preserve-manual-memoization" 4
@@ -509,9 +514,9 @@
509514
"../../src/pages/inbox/report/PureReportActionItem.tsx" "react-hooks/refs" 2
510515
"../../src/pages/inbox/report/PureReportActionItem.tsx" "react-hooks/set-state-in-effect" 1
511516
"../../src/pages/inbox/report/ReactionList/HeaderReactionList.tsx" "no-restricted-syntax" 1
512-
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
513-
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "react-hooks/preserve-manual-memoization" 2
514-
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "react-hooks/refs" 8
517+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
518+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "react-hooks/preserve-manual-memoization" 2
519+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "react-hooks/refs" 8
515520
"../../src/pages/inbox/report/ReportActionCompose/SuggestionEmoji.tsx" "react-hooks/refs" 1
516521
"../../src/pages/inbox/report/ReportActionCompose/SuggestionMention.tsx" "react-hooks/refs" 3
517522
"../../src/pages/inbox/report/ReportActionItemMessage.tsx" "@typescript-eslint/no-deprecated/getReportName" 1
@@ -548,9 +553,8 @@
548553
"../../src/pages/iou/request/step/IOURequestStepDistanceGPS/GPSButtons/index.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 3
549554
"../../src/pages/iou/request/step/IOURequestStepDistanceMap.tsx" "react-hooks/set-state-in-effect" 1
550555
"../../src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
551-
"../../src/pages/iou/request/step/IOURequestStepDistanceOdometer.tsx" "react-hooks/set-state-in-effect" 1
552556
"../../src/pages/iou/request/step/IOURequestStepMerchant.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
553-
"../../src/pages/iou/request/step/IOURequestStepReport.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
557+
"../../src/pages/iou/request/step/IOURequestStepReport/hooks/useReportSelectionActions.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
554558
"../../src/pages/iou/request/step/IOURequestStepScan/ReceiptView/index.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
555559
"../../src/pages/iou/request/step/IOURequestStepScan/ReceiptView/index.tsx" "react-hooks/set-state-in-effect" 1
556560
"../../src/pages/iou/request/step/IOURequestStepScan/components/MobileWebCameraView.tsx" "react-hooks/immutability" 1
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
title: How Concierge Analyzes Spend
3+
description: Learn how Concierge may proactively analyze company spend to share highlights and help you stay informed.
4+
keywords: [New Expensify, Concierge, spend analysis, Concierge management report, insights, AI, expense trends, proactive insights, spend monitoring, spend analysis, flux analysis]
5+
internalScope: Audience is Workspace Admins and Members. Covers how Concierge performs spend analysis and what insights to expect. Does not cover how to use Insights or generate custom reports.
6+
---
7+
8+
# How Concierge Analyzes Spend
9+
10+
Concierge may proactively review workspace activity to identify notable spend patterns, highlight meaningful changes, and surface useful insights.
11+
12+
These analyses are powered by the same data and reporting engine used in **Insights**, but are surfaced automatically by Concierge instead of requiring you to run reports manually.
13+
14+
To explore and analyze spend on demand, [learn how to use Insights](/articles/new-expensify/insights/How-to-Use-Insights-in-Expensify).
15+
16+
---
17+
18+
## What kinds of spend analysis insights Concierge shares
19+
20+
You might see spend analysis messages that:
21+
22+
- Highlight changes in spending over time
23+
- Call out large or unusual purchases
24+
- Surface trends across categories, merchants, or members
25+
- Identify concentrated areas of spend
26+
- Ask questions to help clarify or validate patterns
27+
28+
These spend analysis insights are generated automatically using your workspace data. The format, frequency, and content of these messages may change over time as we continue improving how Concierge analyzes and presents information.
29+
30+
---
31+
32+
## Where Concierge shares spend analysis insights
33+
34+
When Concierge analyzes spend, it sends a message to the #admins room for that workspace. The message is visible to all members of that room.
35+
36+
Insights are shared periodically and may vary in timing, format, and level of detail.
37+
38+
[Learn how to find the #admins room for a workspace](/articles/new-expensify/chat/Expensify-Chat-Rooms-for-Admins).
39+
40+
---
41+
42+
## How Concierge spend analysis relates to Insights
43+
44+
Concierge and **Insights** use the same underlying data but serve different purposes:
45+
46+
- Concierge proactively delivers relevant insights based on notable patterns.
47+
- **Insights** allows you to analyze data and explore patterns on demand
48+
49+
If you need deeper customization, learn how to [use search operators to filter and analyze spend](/articles/new-expensify/reports-and-expenses/Use-Search-Operators-to-Filter-and-Analyze).
50+
51+
---
52+
53+
# FAQ
54+
55+
## How often will I receive Concierge spend analysis insights?
56+
57+
There’s no set schedule. Concierge may share insights from time to time based on what’s happening in your data.
58+
59+
## Can I control which Concierge spend analysis insights I receive?
60+
61+
Not at the moment. Concierge spend analyses are generated automatically.
62+
63+
## Can I customize Concierge spend analysis insights?
64+
65+
No. Concierge insights are automatically generated and cannot be customized. For custom analysis, use **Insights**.
66+
67+
## Why am I receiving Concierge messages about spending?
68+
69+
Concierge looks for meaningful changes or trends in your workspace—like shifts in spending, large transactions, or recurring patterns—and surfaces insights that may be helpful.

docs/articles/new-expensify/getting-started/Expensify-Home-Overview.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Expensify Home Overview
33
description: Learn what you’ll see on Home and how it helps you understand what needs attention, get oriented, and stay informed when you sign in.
4-
keywords: [New Expensify, Expensify Home, Home, Home tab, For you, Discover, Announcements, time-sensitive, urgent alerts, Expensify Card fraud, broken bank connection, assigned cards, Expensify Card limit, available limit, available balance, Spend over time, spending chart, insights, Getting started, onboarding checklist]
4+
keywords: [New Expensify, Expensify Home, Home, Home tab, For you, Discover, Announcements, time-sensitive, urgent alerts, Expensify Card fraud, broken bank connection, assigned cards, Expensify Card limit, available limit, available balance, Spend over time, spending chart, insights, Getting started, onboarding checklist, track and budget my expenses]
55
internalScope: Audience is all Expensify members. Covers what Home is and what appears on it, including the For you, Spend over time, Discover, Announcements, Time-sensitive, Getting started, and Assigned cards sections. Does not cover how to complete actions like submitting, approving, paying, exporting, or fixing expenses.
66

77
---
@@ -88,10 +88,12 @@ The **Getting started** section shows a checklist of key setup steps to help Wor
8888
This section appears only if:
8989

9090
- The workspace is on a free trial
91-
- The workspace owner selected **manage my team** during setup
91+
- The workspace owner selected **manage my team** or **track and budget my expenses** during setup
9292

9393
If these conditions aren’t met, the section won’t appear.
9494

95+
The checklist items vary based on the intent selected during onboarding. Users who chose **track and budget my expenses** see tasks for creating a workspace, customizing accounting categories, and inviting an accountant.
96+
9597
---
9698

9799
## How the Discover section works on Home
@@ -154,7 +156,7 @@ The **Discover** section only appears until you’ve watched the demo. Once you
154156

155157
## Why don’t I see the Getting started section?
156158

157-
The **Getting started** section only appears if you selected the **manage my team** intent during onboarding, you are within 60 days of your free trial start date, and you have an active paid workspace. If any of these conditions are not met, the section won’t be visible.
159+
The **Getting started** section only appears if you selected the **manage my team** or **track and budget my expenses** intent during onboarding, you are within 60 days of your free trial start date, and you have an active paid workspace. If any of these conditions are not met, the section won’t be visible.
158160

159161
## Why don’t I see the Assigned cards section?
160162

docs/articles/new-expensify/reports-and-expenses/Distance-Expenses.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Distance Expenses
33
description: Learn how to create a Distance expense using GPS tracking, map-based routes, manual entry, or odometer readings, and how the reimbursement rate is determined in New Expensify.
4-
keywords: [New Expensify, distance expense, mileage reimbursement, create expense, distance rate, workspace rate, map route, reimbursement rate, manual mileage, manual distance, global create, track distance, GPS, GPS tracking, start GPS, track route, track mileage, mileage tracking, calculate mileage reimbursement, mileage rate, odometer, odometer reading, odometer image, odometer mileage, odometer distance, start reading, end reading]
4+
keywords: [New Expensify, distance expense, mileage reimbursement, create expense, distance rate, workspace rate, map route, reimbursement rate, manual mileage, manual distance, global create, track distance, GPS, GPS tracking, start GPS, track route, track mileage, mileage tracking, calculate mileage reimbursement, mileage rate, odometer, odometer reading, odometer image, odometer mileage, odometer distance, start reading, end reading, save for later, in-progress odometer, incomplete odometer]
55
internalScope: Audience is all members. Covers creating Distance expenses using GPS tracking, map-based routes, manual entry, and odometer readings, plus how reimbursement rates are applied. Does not cover configuring Workspace distance rates in detail or broader report submission workflows.
66
---
77

@@ -74,14 +74,15 @@ To create an expense using your vehicle's odometer readings:
7474
4. Enter the **End reading** from your odometer after the trip.
7575
- The total distance is calculated automatically as you type.
7676
5. (Optional) Select the image icon next to each reading to attach a photo of your odometer.
77-
6. Select **Next**.
78-
7. On the confirmation screen, review and confirm:
77+
6. (Optional) To finish creating the expense later, select **Save for later** to keep the expense in progress on your device. After your trip, return to **➕ Create** > **Track distance** > **Odometer** to resume the saved expense and enter the end reading.
78+
7. Select **Next**.
79+
8. On the confirmation screen, review and confirm:
7980
- Distance
8081
- Amount
8182
- Rate
8283
- Date
8384
- (Optional) Add a description, category, or tag.
84-
8. Select **Create expense**.
85+
9. Select **Create expense**.
8586

8687
Once a Distance expense is created, it can be submitted on a report. To learn how to add expenses to a report, see [Create and Submit Reports](/articles/new-expensify/reports-and-expenses/Create-and-Submit-Reports).
8788

@@ -165,3 +166,11 @@ Yes. Manual readings are required, but you have the option to attach images of t
165166

166167
Yes. When you add two odometer images to a distance expense, they will be merged into a single image for easy viewing.
167168

169+
## Can I save an odometer expense for later?
170+
171+
Yes. Enter your start reading before the trip, then select **Save for later**. After the trip, return to **➕ Create** > **Track distance** > **Odometer** to resume the saved expense and enter the end reading.
172+
173+
## Can I have multiple incomplete odometer expenses at the same time?
174+
175+
Only one in-progress odometer expense can be saved to your device at a time.
176+

docs/articles/new-expensify/reports-and-expenses/Use-Search-Operators-to-Filter-and-Analyze.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ You can use the following operators to filter reports:
7979
- `title:` – report title
8080
- `total:` – total amount with relative comparisons
8181
- `withdrawn:` – ACH withdrawal date
82-
- `withdrawal-type:` – reimbursement or expensify-card
82+
- `withdrawal-type:` – reimbursement, expensify-card, or central-travel-invoicing
8383
- `action:` – blocking report action, e.g. `action:approve`
8484

8585
**Example query:**

docs/articles/new-expensify/workspaces/Add-Approvals.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Add Approvals
33
description: Require report approvals in your Expensify workspace, including setting approval thresholds and over-limit approvers.
4-
keywords: [New Expensify, approvals, report approvals, approving reports, approval workflow, workspace workflows, approver, final approver, approval chain, approval threshold, approval limit, over-limit approval, report amount limit, dollar limit approver, reassign approver, automatic approver reassignment, change approver workflow]
4+
keywords: [New Expensify, approvals, report approvals, approving reports, approval workflow, workspace workflows, approver, final approver, approval chain, approval threshold, approval limit, over-limit approval, report amount limit, dollar limit approver, reassign approver, automatic approver reassignment, change approver workflow, automatic approval, approval audit]
55
---
66

77
Each Expensify workspace can be configured to require additional approvals for reports before payments are authorized. When approvals are enabled, admins can set a default approval workflow for all members or create custom workflows for individual members.
@@ -81,6 +81,27 @@ You can update or remove approval workflows at any time as your team or process
8181

8282
---
8383

84+
## Enable Concierge to auto-approve compliant reports
85+
86+
Concierge can automatically approve reports that don't exceed a specific threshold and don't contain violations.
87+
88+
## Set the auto-approve threshold
89+
90+
1. On the **Workflows** page, click the **Auto-approve compliant reports** toggle.
91+
2. Click **Auto-approve reports with all expenses under**
92+
3. Enter the maximum amount a report can have before requiring manual approval.
93+
4. Click **Save**.
94+
95+
## Set a random audit percentage
96+
97+
Even with auto-approvals enabled, you can route a percentage of compliant reports for manual approval.
98+
99+
1. On the **Workflows** page, click **Random report audit**.
100+
2. Enter your desired percentage amount.
101+
3. Click **Save**.
102+
103+
**Note:** Custom auto-approval settings are only available on the Control plan. Collect plans will have a $100 auto-approval threshold and 0% random audit percentage.
104+
84105
# FAQ
85106

86107
## Can an employee have more than one approval workflow applied to them?

0 commit comments

Comments
 (0)