Skip to content

Commit a2e7246

Browse files
committed
Merge branch 'main' into @OlGierd03/migrate-AddUnreportedExpense
2 parents de8556f + 88b1ce4 commit a2e7246

396 files changed

Lines changed: 29785 additions & 27121 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.

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ USE_REDUX_DEVTOOLS=false
1414
CAPTURE_METRICS=false
1515
ONYX_METRICS=false
1616
USE_THIRD_PARTY_SCRIPTS=false
17+
IS_EXPENSIFY_EMPLOYEE=false
1718

1819
EXPENSIFY_ACCOUNT_ID_ACCOUNTING=-1
1920
EXPENSIFY_ACCOUNT_ID_ACCOUNTS_PAYABLE=-1

.github/actions/javascript/proposalPoliceComment/index.js

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12699,7 +12699,7 @@ class OpenAIUtils {
1269912699
/**
1270012700
* Prompt the Chat Completions API.
1270112701
*/
12702-
async promptChatCompletions({ userPrompt, systemPrompt = '', model = 'gpt-5' }) {
12702+
async promptChatCompletions({ userPrompt, systemPrompt = '', model = 'gpt-5.1' }) {
1270312703
const messages = [{ role: 'user', content: userPrompt }];
1270412704
if (systemPrompt) {
1270512705
messages.unshift({ role: 'system', content: systemPrompt });
@@ -20712,27 +20712,12 @@ const SessionsAPI = tslib_1.__importStar(__nccwpck_require__(13223));
2071220712
const sessions_1 = __nccwpck_require__(13223);
2071320713
const ThreadsAPI = tslib_1.__importStar(__nccwpck_require__(40997));
2071420714
const threads_1 = __nccwpck_require__(40997);
20715-
const headers_1 = __nccwpck_require__(63591);
20716-
const uploads_1 = __nccwpck_require__(67620);
2071720715
class ChatKit extends resource_1.APIResource {
2071820716
constructor() {
2071920717
super(...arguments);
2072020718
this.sessions = new SessionsAPI.Sessions(this._client);
2072120719
this.threads = new ThreadsAPI.Threads(this._client);
2072220720
}
20723-
/**
20724-
* Upload a ChatKit file
20725-
*
20726-
* @example
20727-
* ```ts
20728-
* const response = await client.beta.chatkit.uploadFile({
20729-
* file: fs.createReadStream('path/to/file'),
20730-
* });
20731-
* ```
20732-
*/
20733-
uploadFile(body, options) {
20734-
return this._client.post('/chatkit/files', (0, uploads_1.maybeMultipartFormRequestOptions)({ body, ...options, headers: (0, headers_1.buildHeaders)([{ 'OpenAI-Beta': 'chatkit_beta=v1' }, options?.headers]) }, this._client));
20735-
}
2073620721
}
2073720722
exports.ChatKit = ChatKit;
2073820723
ChatKit.Sessions = sessions_1.Sessions;
@@ -22128,20 +22113,19 @@ class Files extends resource_1.APIResource {
2212822113
* up to 512 MB, and the size of all files uploaded by one organization can be up
2212922114
* to 1 TB.
2213022115
*
22131-
* The Assistants API supports files up to 2 million tokens and of specific file
22132-
* types. See the
22133-
* [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for
22134-
* details.
22135-
*
22136-
* The Fine-tuning API only supports `.jsonl` files. The input also has certain
22137-
* required formats for fine-tuning
22138-
* [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or
22139-
* [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)
22140-
* models.
22141-
*
22142-
* The Batch API only supports `.jsonl` files up to 200 MB in size. The input also
22143-
* has a specific required
22144-
* [format](https://platform.openai.com/docs/api-reference/batch/request-input).
22116+
* - The Assistants API supports files up to 2 million tokens and of specific file
22117+
* types. See the
22118+
* [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools)
22119+
* for details.
22120+
* - The Fine-tuning API only supports `.jsonl` files. The input also has certain
22121+
* required formats for fine-tuning
22122+
* [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input)
22123+
* or
22124+
* [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)
22125+
* models.
22126+
* - The Batch API only supports `.jsonl` files up to 200 MB in size. The input
22127+
* also has a specific required
22128+
* [format](https://platform.openai.com/docs/api-reference/batch/request-input).
2214522129
*
2214622130
* Please [contact us](https://help.openai.com/) if you need to increase these
2214722131
* storage limits.
@@ -22966,6 +22950,33 @@ exports.InputItems = InputItems;
2296622950

2296722951
/***/ }),
2296822952

22953+
/***/ 37133:
22954+
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
22955+
22956+
"use strict";
22957+
22958+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22959+
Object.defineProperty(exports, "__esModule", ({ value: true }));
22960+
exports.InputTokens = void 0;
22961+
const resource_1 = __nccwpck_require__(19318);
22962+
class InputTokens extends resource_1.APIResource {
22963+
/**
22964+
* Get input token counts
22965+
*
22966+
* @example
22967+
* ```ts
22968+
* const response = await client.responses.inputTokens.count();
22969+
* ```
22970+
*/
22971+
count(body = {}, options) {
22972+
return this._client.post('/responses/input_tokens', { body, ...options });
22973+
}
22974+
}
22975+
exports.InputTokens = InputTokens;
22976+
//# sourceMappingURL=input-tokens.js.map
22977+
22978+
/***/ }),
22979+
2296922980
/***/ 96214:
2297022981
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
2297122982

@@ -22980,12 +22991,15 @@ const ResponseStream_1 = __nccwpck_require__(66784);
2298022991
const resource_1 = __nccwpck_require__(19318);
2298122992
const InputItemsAPI = tslib_1.__importStar(__nccwpck_require__(46867));
2298222993
const input_items_1 = __nccwpck_require__(46867);
22994+
const InputTokensAPI = tslib_1.__importStar(__nccwpck_require__(37133));
22995+
const input_tokens_1 = __nccwpck_require__(37133);
2298322996
const headers_1 = __nccwpck_require__(63591);
2298422997
const path_1 = __nccwpck_require__(10706);
2298522998
class Responses extends resource_1.APIResource {
2298622999
constructor() {
2298723000
super(...arguments);
2298823001
this.inputItems = new InputItemsAPI.InputItems(this._client);
23002+
this.inputTokens = new InputTokensAPI.InputTokens(this._client);
2298923003
}
2299023004
create(body, options) {
2299123005
return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {
@@ -23052,6 +23066,7 @@ class Responses extends resource_1.APIResource {
2305223066
}
2305323067
exports.Responses = Responses;
2305423068
Responses.InputItems = input_items_1.InputItems;
23069+
Responses.InputTokens = input_tokens_1.InputTokens;
2305523070
//# sourceMappingURL=responses.js.map
2305623071

2305723072
/***/ }),
@@ -23743,7 +23758,7 @@ tslib_1.__exportStar(__nccwpck_require__(11364), exports);
2374323758

2374423759
Object.defineProperty(exports, "__esModule", ({ value: true }));
2374523760
exports.VERSION = void 0;
23746-
exports.VERSION = '6.3.0'; // x-release-please-version
23761+
exports.VERSION = '6.9.1'; // x-release-please-version
2374723762
//# sourceMappingURL=version.js.map
2374823763

2374923764
/***/ }),

Mobile-Expensify

__mocks__/reportData/transactions.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const TRANSACTION_ID_R98765 = 'TRANSACTION_ID_R98765';
1111
const receiptR14932 = {
1212
state: CONST.IOU.RECEIPT_STATE.OPEN,
1313
source: 'mockData/eReceiptBGs/eReceiptBG_pink.png',
14+
filename: 'test.html',
1415
};
1516

1617
const transactionR14932: Transaction = {
@@ -22,15 +23,14 @@ const transactionR14932: Transaction = {
2223
status: CONST.TRANSACTION.STATUS.POSTED,
2324
receipt: receiptR14932,
2425
merchant: 'Acme',
25-
filename: 'test.html',
2626
created: '2025-02-14',
2727
inserted: '2025-02-14 08:12:19',
2828
billable: false,
2929
managedCard: false,
3030
reimbursable: true,
3131
hasEReceipt: true,
3232
cardID: 0,
33-
modifiedAmount: '',
33+
modifiedAmount: 0,
3434
originalAmount: 0,
3535
comment: {},
3636
bank: '',
@@ -59,14 +59,13 @@ const transactionR98765: Transaction = {
5959
hasEReceipt: true,
6060
managedCard: false,
6161
billable: false,
62-
modifiedAmount: '',
62+
modifiedAmount: 0,
6363
cardID: 0,
6464
originalAmount: 0,
6565
comment: {},
6666
bank: '',
6767
cardNumber: '',
6868
category: '',
69-
filename: '',
7069
modifiedCreated: '',
7170
modifiedCurrency: '',
7271
modifiedMerchant: '',

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009027202
118-
versionName "9.2.72-2"
117+
versionCode 1009027305
118+
versionName "9.2.73-5"
119119
// Supported language variants must be declared here to avoid from being removed during the compilation.
120120
// This also helps us to not include unnecessary language variants in the APK.
121121
resConfigs "en", "es"

assets/images/clock.svg

Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"asar",
5151
"ASPAC",
5252
"assetlinks",
53+
"accountid",
5354
"attributes.accountid",
5455
"attributes.reportid",
5556
"authorised",

docs/articles/new-expensify/getting-started/Navigating-New-Expensify.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ The **navigation tabs** (on the left on web, and at the bottom on mobile) are pr
1818
- **Reports**
1919
- **Workspaces**
2020
- **Account**
21-
- The **Global Create** button for quick access to actions like creating reports, expenses, invoices, and chats
21+
- The green **Camera/Receipt** button to easily create expenses
22+
- The grey **Global Create** button for additional actions like creating reports, tracking distance, sending invoices, and more.
2223

2324
---
2425

docs/articles/new-expensify/getting-started/Track-Personal-Expenses.md

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,36 +34,46 @@ Each workspace has its own rules and settings, even for personal expense trackin
3434

3535
You can add expenses using SmartScan or by creating them manually.
3636

37-
## SmartScan a Receipt
37+
## How to SmartScan a Receipt
3838

3939
SmartScan reads receipt details like merchant, date, total, and currency automatically.
4040

41-
**SmartScan on web:**
42-
1. Click the green **Create (+)** button.
43-
2. Select **Create expense**.
44-
3. Upload an image of your receipt.
45-
46-
**SmartScan on mobile:**
47-
1. Tap the green **Create (+)** button.
48-
2. Select **Create expense**.
49-
3. Upload or take a photo of your receipt:
50-
- **Upload**: Tap the gallery icon and select an image.
51-
- **Take a photo**: Ensure receipt details are visible and snap a photo.
52-
53-
**Note:** You can also email receipts to `receipts@expensify.com` from your linked email. SmartScan will extract the details and add the expense to your account. [Add a contact method](https://help.expensify.com/articles/new-expensify/settings/Change-or-add-email-address)
54-
55-
## Manually Enter an Expense
56-
57-
1. Click or tap the green **Create (+)** button.
58-
2. Select **Create expense**.
59-
3. Choose a method:
60-
- **Manual** – Enter details manually.
61-
- **Scan** – Upload a saved image.
62-
- **Create multiple** – Add expenses in bulk.
63-
- **Distance** – Enter mileage data.
64-
- **Per diem** – Add a daily allowance.
65-
4. Select your **workspace**.
66-
5. Click **Create expense**.
41+
**On mobile:**
42+
1. Tap the green camera button and take a photo of the receipt or upload from gallery.
43+
2. Enter the workspace or recipient’s email/phone number.
44+
3. Add details like description, category, tags, and tax.
45+
4. Tap **Create expense**.
46+
47+
**On desktop:**
48+
1. Click the green receipt button and drag and drop the receipt or click **Choose files** to upload.
49+
2. Enter the workspace or recipient’s email/phone number.
50+
3. Add details like description, category, tags, and tax.
51+
4. Click **Create expense**.
52+
53+
💡 **Note:**
54+
Other ways to SmartScan receipts include:
55+
- Forward your digital receipts to `receipts@expensify.com`.
56+
- Text a photo of your receipts to 47777 (US numbers only). Just make sure you [add your phone number to Expensify](https://new.expensify.com/settings/profile/contact-methods).
57+
58+
## How to Manually Enter an Expense
59+
60+
**On mobile:**
61+
1. Tap the green camera button.
62+
2. Select **Manual**.
63+
3. Enter the amount and currency, then tap **Next**.
64+
4. Choose a workspace or an individual.
65+
5. Add optional fields like category, tags, or description.
66+
6. Tap **Create expense**.
67+
68+
**On desktop:**
69+
1. Click the green add receipt button.
70+
2. Select **Manual**.
71+
3. Enter the amount and currency, then click **Next**.
72+
4. Choose a workspace or an individual.
73+
5. Add optional fields like category, tags, or description.
74+
6. Click **Create expense**.
75+
76+
Learn more about [creating expenses](https://help.expensify.com/articles/new-expensify/reports-and-expenses/Create-an-Expense)
6777

6878
View expenses in your Expense chat or the **Reports** page. [Export to CSV](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Search-and-Download-Expenses) for tax or accountant use.
6979

0 commit comments

Comments
 (0)