Skip to content

Commit

Permalink
Merge branch 'main' into vit-updateHybridAppBuild
Browse files Browse the repository at this point in the history
* main: (110 commits)
  Point redirect at correct URL
  Update Mobile-Expensify to 9.0.89-6
  Update version to 9.0.89-6
  Create Expensify-Card-Perks.md
  Update redirects.csv
  add translations and such for ts
  Update redirects.csv
  Add functions description
  Remove all calls and code related with OptInToPushNotifications & OptOutOfPushNotifications
  Revert PR 54071 and fix merge conflict
  Add SCAN_TEST_TOOLTIP to DismissedProductTraining type
  Align dot indicator
  Use REIMBURSEMENT_ACCOUNT_ROUTE_NAMES.NEW in places
  resolve comments
  Code improvements
  fix: you've been switched to focus mode modal after open an expense on the Reports page
  Update redirects.csv
  Update Reconcile-Company-Card-Expenses.md
  Update redirects.csv
  Update paths
  ...

# Conflicts:
#	Mobile-Expensify
  • Loading branch information
Julesssss committed Jan 27, 2025
2 parents d562a5b + c4c860b commit 6285eda
Show file tree
Hide file tree
Showing 109 changed files with 1,627 additions and 951 deletions.
6 changes: 0 additions & 6 deletions .eslintrc.changed.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ module.exports = {
],
},
overrides: [
{
files: ['src/pages/workspace/WorkspaceInitialPage.tsx', 'src/pages/home/report/PureReportActionItem.tsx', 'src/libs/SidebarUtils.ts'],
rules: {
'rulesdir/no-default-id-values': 'off',
},
},
{
files: ['**/libs/**/*.{ts,tsx}'],
rules: {
Expand Down
141 changes: 141 additions & 0 deletions .github/workflows/verifyHybridApp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
name: Verify HybridApp build

on:
workflow_call:
pull_request:
types: [opened, synchronize]
branches-ignore: [staging, production]
paths:
- '**.kt'
- '**.java'
- '**.swift'
- '**.mm'
- '**.h'
- '**.cpp'
- 'package.json'
- 'patches/**'
- 'android/build.gradle'
- 'android/AndroidManifest.xml'
- 'ios/Podfile.lock'
- 'ios/project.pbxproj'

concurrency:
group: ${{ github.ref == 'refs/heads/main' && format('{0}-{1}', github.ref, github.sha) || github.ref }}-verify-main
cancel-in-progress: true

jobs:
verify_android:
name: Verify Android HybridApp builds on main
runs-on: ubuntu-latest-xl
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
ref: ${{ github.event.pull_request.head.sha }}
token: ${{ secrets.OS_BOTIFY_TOKEN }}
# fetch-depth: 0 is required in order to fetch the correct submodule branch
fetch-depth: 0

- name: Update submodule to match main
run: |
git submodule update --init --remote
git fetch
git checkout main
- name: Configure MapBox SDK
run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }}

- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Build Android Debug
working-directory: Mobile-Expensify/Android
run: |
if ! ./gradlew assembleDebug
then
echo "❌ Android HybridApp failed to build: Please reach out to Contributor+ and/or Expensify engineers for help in #expensify-open-source to resolve."
exit 1
fi
verify_ios:
name: Verify iOS HybridApp builds on main
runs-on: macos-15-xlarge
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
ref: ${{ github.event.pull_request.head.sha }}
token: ${{ secrets.OS_BOTIFY_TOKEN }}
# fetch-depth: 0 is required in order to fetch the correct submodule branch
fetch-depth: 0

- name: Update submodule to match main
run: |
git submodule update --init --remote
git fetch
git checkout main
- name: Configure MapBox SDK
run: ./scripts/setup-mapbox-sdk.sh ${{ secrets.MAPBOX_SDK_DOWNLOAD_TOKEN }}

- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Setup Ruby
uses: ruby/[email protected]
with:
bundler-cache: true

- name: Install New Expensify Gems
run: bundle install

- name: Cache Pod dependencies
uses: actions/cache@v4
id: pods-cache
with:
path: Mobile-Expensify/iOS/Pods
key: ${{ runner.os }}-pods-cache-${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock', 'firebase.json') }}

- name: Compare Podfile.lock and Manifest.lock
id: compare-podfile-and-manifest
run: echo "IS_PODFILE_SAME_AS_MANIFEST=${{ hashFiles('Mobile-Expensify/iOS/Podfile.lock') == hashFiles('Mobile-Expensify/iOS/Manifest.lock') }}" >> "$GITHUB_OUTPUT"

- name: Install cocoapods
uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847
if: steps.pods-cache.outputs.cache-hit != 'true' || steps.compare-podfile-and-manifest.outputs.IS_PODFILE_SAME_AS_MANIFEST != 'true' || steps.setup-node.outputs.cache-hit != 'true'
with:
timeout_minutes: 10
max_attempts: 5
command: npm run pod-install

- name: Build iOS HybridApp
run: |
# Let us know if the builds fails
set -o pipefail
# Do not start metro
export RCT_NO_LAUNCH_PACKAGER=1
# Build iOS using xcodebuild
if ! xcodebuild \
-workspace Mobile-Expensify/iOS/Expensify.xcworkspace \
-scheme Expensify \
-configuration Debug \
-sdk iphonesimulator \
-arch x86_64 \
CODE_SIGN_IDENTITY="" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
build | xcpretty
then
echo "❌ iOS HybridApp failed to build: Please reach out to Contributor+ and/or Expensify engineers for help in #expensify-open-source to resolve."
exit 1
fi
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009008905
versionName "9.0.89-5"
versionCode 1009008906
versionName "9.0.89-6"
// 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"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,74 +1,92 @@
---
title: Reconcile Company Card Expenses
description: How to reconcile company card transactions
description: Learn how to reconcile company card expenses in Expensify, including troubleshooting discrepancies, managing approvals, and preparing accruals
---

If your company imports corporate card transactions into Expensify, you can reconcile them by using the Reconciliation dashboard.
This guide explains how to reconcile corporate card transactions imported into Expensify using the reconciliation dashboard feature.

1. Hover over **Settings** and click **Domains**.
# Steps to Reconcile Transactions

## Access the Reconciliation Dashboard
1. Hover over **Settings** and click **Domains**.
2. Select the desired domain.
3. Click the **Reconciliation** tab near the top of the page.
4. Enter the statement dates and click **Run**.

# Confirm statement total

To confirm the total of transactions imported into Expensify against a credit card statement:
1. Review the **Imported Total**, which shows the sum of all expenses imported into Expensify for that statement period. This should match the total on your credit card statement.
2. If there is a discrepancy, refresh the feed to import missing expenses. Click **Update all cards** for commercial card feeds, or update individual cards by clicking the blue cog icon and choosing **Update** for other feed types.
3. After updating, click **Run** to update the transaction totals.

# Confirm card totals

If there is a discrepancy between the totals on the credit card statement and the Reconciliation dashboard, then review each card’s total to find the source of the missing transactions.

1. Sort the cards by clicking the heading for **Card Name/Number**, **Assignee** or **Total** and compare each card's total to the statement to determine which card(s) don't match the statement total.
2. Click on the **Total** amount for a card to view the imported expenses and identify any that are missing from the statement. Confirm that all cards have been assigned to cardholders, as this could be another reason that the Imported Total doesn't match the statement.
3. If there is still a discrepancy after updating and re-calculating the totals, contact [email protected] and provide the details of the expenses that are showing on your statement but are missing in Expensify. To investigate, we’ll need the cardholder email, expense date, and amount. Keep in mind sorting by column heading also makes locating expenses easier.

# Identify outstanding unapproved expenses

Use the **Unapproved total** and **Approved Total** to identify expenses that have not yet been approved and/or exported.
4. Enter the statement dates and click **Run**.

# View expenses
## Confirm Statement Total
To verify the total transactions imported into Expensify match your credit card statement:

- Click the **Unapproved Total** heading to sort cards by those with outstanding expenses.
- Click the **Unapproved** amount for a card to view the expenses which are in the Unreported, Open, Processing, or Deleted states.
1. Review the **Imported Total**, which shows the sum of all imported expenses for the selected statement period.
- This total should match the amount on your credit card statement.
2. If there’s a discrepancy:
- Refresh the feed to import missing expenses:
- Click **Update All Cards** for commercial card feeds.
- For other feeds, click the blue cog icon next to individual cards and select **Update**.
- After updating, click **Run** to recalculate the totals.

*Note: You must be both a Domain Admin and a Workspace Admin to access expenses.*
## Confirm Card Totals
If the totals on the credit card statement and the Reconciliation dashboard still don’t match, follow these steps:

# Add unreported and/or deleted expenses to a report
1. Sort the cards by clicking the column heading for **Card Name/Number**, **Assignee**, or **Total**.
2. Compare each card’s total to the credit card statement to find discrepancies.
3. Click the **Total** amount for a card to view its imported expenses. Check for:
- Missing transactions.
- Unassigned cards (all cards must be assigned to cardholders).
4. If discrepancies persist, contact **[email protected]** with details of the missing expenses:
- Cardholder email
- Expense date
- Expense amount

1. Change the filters so that only Unreported and/or Deleted expenses are showing.
2. Select all expenses, then click **Add to a Report,** then **Auto Report**.
3. If there is an open report in the cardholder's account, the expense(s) will be added to it. If not, a new report will be created with the expenses.
## Identify Outstanding, Unapproved Expenses
Use the **Unapproved Total** and **Approved Total** columns to locate expenses that haven’t been approved or exported:

# Process reports
1. Click the **Unapproved Total** heading to sort cards by those with outstanding expenses.
2. Click the **Unapproved** amount for a card to view expenses in the Unreported, Open, Processing, or Deleted states.

- Workspace admins have the ability to code (categorize or tag an expense or add a receipt or comment to it) unsubmitted expenses, submit Open reports, and approve Processing reports. Any changes made by an admin are tracked under Report History and Comments at the bottom of each report.
- You can remind members to submit and approve reports via the Report History and Comments. An email notification will be sent to all members who have taken action on the report.
**Note: You must be both a Domain Admin and Workspace Admin to access expenses.**

# Prepare accrual
## Add Unreported or Deleted Expenses to a Report
1. Filter the expenses to display only Unreported or Deleted expenses.
2. Select all relevant expenses and click **Add to a Report** > **Auto Report**.
3. If an open report exists in the cardholder’s account, the expenses will be added to it. Otherwise, a new report will be created.

If there are still unapproved expenses when you want to close your books for the month, then you can use the feed’s Imported, Approved, and Unapproved totals to create an accrual entry.
- Match the Imported Total to the Statement amount.
- Match the Approved Total to the Company Card Liability account in your accounting system.
- The Unapproved Total becomes the Accrual amount (if the two amounts above are correct).

{% include faq-begin.md %}

**Who can view and access the Reconciliation tab?**

Only Domain admins have access to the Reconciliation tool.

**Who can view and process company card transactions?**

- Domain admins can view all company card transactions using the Reconciliation tool, even if they are unreported.
- Workspace admins can only view reported expenses on a workspace. So if a workspace admin does not have access to the domain, they will be unable to see any transaction that hasn’t been placed on a report.
---
# Process and Edit Reports

**What do I do if company card expenses are missing?**
Workspace Admins can do the following via the Reconciliation Dashboard:
- Code (categorize or tag expenses, add receipts or comments) expenses.
- Submit Open reports.
- Approve Processing reports.
- All changes made by admins are tracked in the **Report History and Comments** section at the bottom of each report.
- You can remind members to submit or approve reports via Report History, which sends email notifications to users.

If a cardholder reports expenses as missing, we first recommend using the Reconciliation tool to try and locate the expense. Select the date range the expense falls under, and once the report is available, select the specific card to view the data. If the expense is not listed, you will want to click **Update** next to the card under the Card List tab. This will pull in any missing expenses.
---
# Prepare Accrual

If after updating, the expense still hasn’t appeared, you should reach out to Concierge with the missing expense specifics (merchant, date, amount and last four digits of the card number). Please note, only posted transactions will import.
To close your books for the month with unapproved expenses:
1. Match the **Imported Total** to the statement amount.
2. Match the **Approved Total** to the Company Card Liability account in your accounting system.
3. Use the **Unapproved Total** as the accrual amount if the above totals are correct.

{% include faq-end.md %}
---
# FAQ

## Who can access the Reconciliation tab?
Only Domain Admins can access the Reconciliation tool.

## Who can view and process company card transactions?
- **Domain Admins** can view all company card transactions, including unreported ones, via the Reconciliation tool.
- **Workspace Admins** can only view reported expenses in a workspace. If they lack domain access, they cannot see transactions that haven’t been added to a report.

## What do I do if company card expenses are missing?
1. Use the Reconciliation tool to locate the missing expense:
- Select the date range for the expense.
- View the specific card to check the data.
2. If the expense isn’t listed, click **Update** next to the card under the Card List tab to pull in missing transactions.
3. If the expense still doesn’t appear, contact Concierge with these details:
- Merchant name
- Date
- Amount
- Last four digits of the card number

**Note: Only posted transactions will be imported.**
Loading

0 comments on commit 6285eda

Please sign in to comment.