MosoFin · expense report processing, in plain words

Who is chasing the receipts, and did we pay for this twice?

Staff spend their own money, or the company card, and want the company to repay them. This skill checks each claim line against your policy, puts it in the right account, and calculates what the company owes each employee. It also asks one question a person rarely can: has the company already paid for this?

The 20-second version

You give it the expense reports, your policy, your mileage rate and your tax rules. It reads your chart of accounts, your employee list and the transactions already in your books. It checks every line against your policy and against those transactions. It codes each line to a real account, shows the history behind the code, and calculates the net amount per employee. Every result is a proposal for a manager. It approves, pays and posts nothing.

What a run finds

One September report: Priya Nair's trip to Denver

Northbrook Trading processes its September expense reports, exported from Expensify. Its policy, version 3 dated 1 January, says: receipts above $25, meals $60 a head, mileage $0.45 a mile. Those three figures are Northbrook's own rules. They are not tax rates, and the skill never supplies one from memory. Priya Nair from Sales flew to Denver from 2 to 4 September. Her report has six lines.

LineWhatPaid byAmountWhat the skill foundResultAccount
P1Airfare, United, 2 SepCorporate card412.00Matched to its card charge in your books, as expectedNot reimbursableTravel, Airfare 6410
P2Hotel, 2 nights × $189.00Corporate card378.00Matched to its card charge, as expectedNot reimbursableTravel, Lodging 6420
P3"Flight to Denver", 2 SepOut of pocket412.00Same merchant, same amount and same date as P1Reject: double reimbursementRemoved
P4Client dinner, 3 people, receiptOut of pocket210.00$70.00 a head against the $60 cap. Allowed 3 × 60 = 180.00Policy violation: the skill disallows the $30.00 over the cap. Its severity for a policy violation is RejectMeals 6450
P5Taxi, no receiptOut of pocket38.00Above the $25 receipt rule. Receipt status "per the report"Review: waits for the receiptWaits for the review
P6Mileage, 120 miles × $0.45Own car54.00Rate from the policy, with its dateApproved, as a proposalTravel, Local Transport 6430
Out of pocketP3 + P4 + P5 + P6714.00Rejected 412.00. Disallowed 30.00. Pending 38.00Approved now 234.00
Example figures for a made-up company, in dollars. Priya claimed 412.00 + 210.00 + 38.00 + 54.00 = $714.00 out of pocket. The skill rejects $412.00 and disallows $30.00. It approves $234.00 now: 180.00 + 54.00. $38.00 waits for the receipt. If the receipt arrives, Priya receives 234.00 + 38.00 = $272.00. The $60 cap, the $25 receipt rule and the $0.45 rate are Northbrook's own policy, not tax rates. The account numbers come from Northbrook's chart of accounts.

The run covers six employees. This page shows three of them. Across those three, the money splits like this:

Claimed out of pocket$1,280.40714.00 + 285.60 + 280.80, across Priya, Marcus and Lena
Approved now$560.40234.00 + 86.40 + 240.00, as a proposal for a manager
Review or held$237.2038.00 + 64.20 + 135.00, waiting for a receipt, a decision or a mileage log
Rejected or disallowed$482.80412.00 + 30.00 + 40.80. The three parts re-add: 560.40 + 237.20 + 482.80 = 1,280.40
The mistake it catches

The flight the company card already paid

Priya's airfare sits on her report twice. Line P1 is the United charge on the corporate card. Line P3 is an out-of-pocket claim for $412.00 with the description "Flight to Denver". A person who reads the report alone sees two lines with different payment methods. The skill reads the card transactions already in your books. It matches each out-of-pocket claim against them on merchant, amount and date. The match window is 3 days each way, to allow for posting lag. P3 matches P1 on all three, with 0 days between them. The skill runs this match on out-of-pocket lines only. For a company-paid line such as P1, a match to its card charge is the expected link. The skill uses that link to check the coding.

What the skill does

Every out-of-pocket claim against the card charges in your books
P1: United, corporate card, 2 Sep$412.00
P3: "Flight to Denver", out of pocket, 2 Sep$412.00
Match on merchant, amount and date0 days
An out-of-pocket claim that matches a posted card charge is a Reject, not a Review. The money has already left the company. The skill names the matched transaction. It also checks earlier months for the same pattern from the same claimant.

The common shortcut

Approve the report as a whole
Priya's out-of-pocket total, approved$714.00
Repaid to Priya$714.00
Paid for the flighttwice
$412.00 leaves the company a second time. One person reviews the card statement and another reviews the expense reports, in different weeks. Neither sees both lines.

The skill treats a near match as a Review, not a Reject. A tip added after the card authorisation makes the card amount and the claimed amount differ a little. If the merchant name differs between the card feed and the claim, the skill matches on amount and date alone, and says so. It also compares each claim with the reimbursements to the same employee for expense dates in the last 90 days. A claim sent again on a later report is the most common duplicate.

Expense schemes13%Share of the cases in a fraud study that were expense reimbursement schemes: claims for fictitious or inflated business expenses4
Median loss$50,000The median loss in those schemes, against $145,000 across all cases in the same study4
Who decidesA personThe skill proposes, a manager approves, and someone else pays. Splitting those roles between people helps prevent fraud, waste and abuse5

Most duplicate claims are honest errors. The skill does not know which kind it found. It reports the match with the matched transaction, and a person decides. Where a small company cannot split the roles, the standard control is extra review of the key steps5.

What else it catches

Two more reports, and the checks on your books

A merchant coded two ways

Marcus Bell: Amazon, Netflix and 300 miles with no log

Marcus works in Operations and did not travel. He claims $86.40 at Amazon for office supplies, with a receipt. The skill proposes Office Supplies 6210 and shows its support: Northbrook coded this merchant there 14 times out of 16, and twice to Software 6250. It flags the inconsistent history instead of picking the most recent code.

A $15.99 Netflix charge sits on his corporate card on 1 September. Your books show it every month since March. The skill codes it as Due from Employee 1350: Marcus owes the company $15.99. The skill takes that $15.99 off his repayment only if your policy allows it. It asks, and never assumes. A $64.20 grocery charge on Saturday 13 September, in his home city, gets a Review as possible personal spending. A manager checks its business purpose. His 300 miles have no start, end or purpose logged. That is insufficient documentation, so 300 × $0.45 = $135.00 waits for the log. Marcus claimed 86.40 + 64.20 + 135.00 = $285.60. The skill approves $86.40 now.

One charge, three things inside

Lena Okafor: a Berlin conference and a dinner in euros

Lena's $1,500.00 conference package on the corporate card covers registration, meals and lodging in one charge, with no itemised receipt. The skill asks you how to allocate it. It does not pick an allocation.

Her team dinner for 4 people cost EUR 240.00 out of pocket. You chose the central bank close as the exchange rate source, 1.17, so the dinner is $280.80. That is $70.20 a head against the $60 cap. Allowed 4 × 60 = $240.00. The $40.80 over the cap is a policy violation, and the skill disallows it. Its severity for a policy violation is Reject. Lena claimed $280.80 and the skill approves $240.00.

The checks on your books

A claimant with no record, and two balances that do not agree

The batch has a claim from J. Ortiz. The employee list has no such record, because J. Ortiz left on 31 August. The skill flags the claim before it codes anything.

Then it tests two accounts. Corporate Card Clearing is the waiting room where card charges and claims meet, and it should return to zero. It holds a residual of $1,264.00. Its oldest item is a card charge from 11 July for $118.00 with no claim, 108 days old on 27 October. That age makes it a break, not timing. Employee Reimbursement Payable stands at $2,155.00. The skill tests it by employee against the approved reports not yet paid, which total $1,850.00. It lists each difference by employee. It cannot explain $305.00: a claim paid twice, or one never paid.

The numbers it never supplies

The mileage rate, the receipt rule and the meal cap come from you

Northbrook pays $0.45 a mile. That is its own choice. In the US, the IRS business rate for 2026 was 72.5 cents a mile from 1 January to 30 June. From 1 July it was 76 cents a mile1. A company may pay its own rate. The IRS figure is the tax-free ceiling under an accountable plan1. Two rates in one year is why the skill asks for your rate and its effective date, every run. Give it the tax-free rate too. If your rate is above that rate, the skill flags the excess as possible taxable pay, for payroll to check. It never supplies the tax-free rate. Northbrook's $0.45 is below both IRS rates1.

Northbrook requires a receipt above $25. The IRS does not require documentary evidence for an expense under $75, other than lodging2. Your rule is stricter, and the skill applies your rule. Without your policy, it reports policy validation as not performed, never as passed. The duplicate check needs no policy, so it still runs.

An accountable plan needs three things: a business connection, substantiation, and the return of any excess3. The IRS treats the timing as reasonable when an employee accounts for expenses within 60 days and returns any excess within 120 days. Amounts not substantiated or not returned in time are wages3. The skill applies the rules you give it. It does not apply a tax rule you did not state.

Business meals are in general 50% deductible. An employee repaid under an accountable plan is not subject to that limit on those meals, so the limit sits with the employer2. Northbrook told the skill "US rules, meals 50% deductible". So the skill can split the meal coding into a deductible and a non-deductible part, if the chart of accounts has both. Without that answer, it does not split, and says so.

How a run starts

It asks its questions in one message, before it reads anything

  1. Use MosoFin for this run, or upload the data yourself?
    MosoFin is the connection to your books and the other platforms you link. With it, the skill reads your chart of accounts, employees, posted transactions and balances from there. Without it, you upload the files and the checks are the same. The skill asks this only if your account has a MosoFin connection.
  2. Which expense reports: which employees and which period?
    Required. The claims are the whole input. Each tool has its own quirks: split lines, scan confidence, prepaid cards. The skill must tell company-paid lines from out-of-pocket ones.
  3. Your travel and expense policy: receipt rules, caps per person and per night, travel class, gifts, alcohol and pre-approval.
    Required for the policy checks. Without it, the skill runs the coding, the arithmetic, the personal-expense flags and the duplicate check. It then says that policy validation was not performed.
  4. The receipts.
    Recommended. Receipt images are not in your books. Without the receipts, the skill reports receipt status "per the report" only.
  5. The mileage rate and the per-diem table in force, with their effective dates.
    Required if anyone claims mileage or per-diems. They change every year, and the skill never supplies one from memory. Without them, it flags every such line as missing its rate.
  6. Your tax jurisdiction and its rules: input tax recovery, and the deductible share of meals and entertainment.
    Recommended. The tax codes in your books are readable. The rules behind them are not. Without the rules, the skill does not split deductible from non-deductible, and says so.
  7. For foreign claims, which exchange rate source: the central bank close, your accounting system's rate, or a report-date rate?
    Required if any claim is in another currency. Your functional currency is readable. The rate source is a choice, and the skill never assumes one.
  8. How do you book company card charges: to a clearing account, or to expense from the bank feed?
    Required if any line is company-paid. The answer decides if a card-paid line needs a new entry or only a change of account. The skill never assumes it.
  9. Has each report been approved, and by whom?
    Recommended. An approval status column is enough. Without it, the skill reports approval as "not evidenced".

Then it reads your answers back and waits for your yes:

"Processing September expense reports for six Northbrook Trading employees, exported from Expensify. Checked against the chart of accounts, posted transactions and card activity read from your Mosofin connection. Policy v3, dated 1 January: receipts above $25, meals $60 a head, mileage $0.45 a mile effective 1 January. US rules, meals 50% deductible. Card charges booked to Corporate Card Clearing. Each report approved by the employee's manager. Shall I go ahead?"
What you need

Connect once, or upload your files and your policy

Connected with MosoFin

Say yes, then give it the rules no ledger holds

  • It reads your chart of accounts, so coding is to real accounts
  • It reads your employee list, with departments
  • It reads the transactions already posted, the corporate card activity and each claimant's reimbursements for the last 90 days, for the duplicate check
  • It reads the clearing and reimbursement payable balances, and how you coded each merchant before
  • If a connected expense tool such as Concur or Expensify is live, it reads the reports there
  • You still give it the policy, the rates, the tax rules and the exchange rate source, every time. They are never in the books
Uploading instead

Bring the reports, the accounts and the posted transactions

  • Expense reports with every line: date, category, merchant, purpose, amount, currency, payment method, receipt flag. Export from the expense tool, CSV or XLSX, required
  • Chart of accounts, CSV or XLSX, recommended. Without it, every account is a placeholder
  • Transactions already posted for the period, and the corporate card activity, CSV or XLSX, recommended. Without them, the duplicate check runs inside the reports only
  • Ledger detail for Corporate Card Clearing and Employee Reimbursement Payable, CSV or XLSX, recommended, for the clearing test and the payable test
  • Approved reports not yet paid, and each employee's recent reimbursements, CSV or XLSX, recommended, for the payable test and the check across reports
  • Receipts, PDF or images, and the employee list, CSV or XLSX, recommended
  • Policy, rates, per-diems, tax rules and exchange rate source, typed in the chat, or the policy document
What you get back

Six sheets: the lines, the exceptions, and what your books say

The summaryEmployees, period, totals claimed, approved and rejected, and the reimbursement amount. The approval status, the policy violations, and each assumption it made, for you to accept or correct. It says whether you supplied a policy at all.
Line detailEvery line with its account, tax code, policy check and receipt status. Two more columns show if the line is already posted, with the matched transaction, and the coding support from your history. A company-paid line shows its matched card charge.
ExceptionsEach issue with a severity, Reject, Review or Approve with note, and a recommended action.
Posting inputsThe sums by account, the reimbursable amount and the card-paid amount, handed to the journal entry skill as a proposal. If your card charges sit in a clearing account, the card-paid lines clear it. If they go to expense from the bank feed, those lines get no new entry, only a change of account where needed. It posts nothing.
Ledger checksDuplicate matches against posted transactions, and the clearing residual with its oldest item. The payable, tested by employee against approved reports not yet paid. Claimants with no employee record.
CoverageFor each task, which tool read the data, as at when, and any gap. With no policy, every policy row reads "not performed". The duplicate check still shows as run.

It asks whether you want the sheets as an Excel file before it makes one. If you say no, you get the same sheets as tables in the chat. After you see the results, it offers to save your policy, your rates with their dates and your account map for the next run. It saves nothing about the claims.

What it never does
  • Never reads your books without asking. A connected account is not permission.
  • Never reads anything before you answer the intake questions and say yes to the read-back.
  • Never approves, rejects, pays or posts anything. Every decision is a proposal for a manager.
  • Never supplies a mileage rate, a per-diem, a receipt threshold, a gift cap or a deductibility rule from memory. Without your policy, it reports policy validation as not performed, never as passed.
  • Never invents an account number. Coding is to your chart of accounts. If it cannot read that, it labels every account as a placeholder and says so.
  • Never reports a receipt as verified. It cannot see receipt images, so receipt status is "per the report". It never saves employee names, claims, amounts, card numbers or itineraries.
Words you'll hear

Eight terms, in plain English

Out of pocket
The employee paid with their own money and wants the company to repay them.
Corporate card
The company already paid. The company owes the employee nothing. This distinction drives the whole calculation.
Double reimbursement
An out-of-pocket claim for a charge the company card already paid. The skill rejects it and names the matched transaction.
Clearing account
A waiting room where the two halves of a transaction meet. Accountants call it Corporate Card Clearing. It should return to zero. A residual means activity with no match.
Due from Employee
Money the employee owes the company, usually a personal charge on a company card. An old balance here is money nobody chased.
Per diem
A set daily allowance instead of repaying actual costs. The table comes from you, with its effective date.
Accountable plan
The US arrangement under which repaid expenses are not wages. It needs a business connection, substantiation and the return of any excess3.
Deductible
Whether the tax authority lets the business subtract the cost from its taxable profit. Meals and entertainment are commonly restricted. The rule comes from you.
Sources

Where the facts on this page come from

The sources are three IRS pages on mileage, expenses and employer rules, a fraud study and a US control standard. We found each one on 27 October 2026 in search results. We did not open the pages, so follow each link for today's wording. What the skill does comes from the skill's own files.

  1. IRS: Standard mileage ratesThe business rate for 2026 was 72.5 cents a mile from 1 January to 30 June (Notice 2026-10). It was 76 cents a mile from 1 July to 31 December (Announcement 2026-11, citing fuel prices). Two rates in one year. A company may pay its own rate. The IRS figure is the tax-free ceiling for an accountable plan in the US.
  2. IRS: Publication 463 (2025), Travel, Gift, and Car ExpensesDocumentary evidence, a receipt, is not required for an expense other than lodging that is less than $75. Business meals are in general only 50% deductible. An employee reimbursed under an accountable plan is not subject to the 50% limit on those meals. The limit then sits with the employer.
  3. IRS: Publication 15 (2026), Employer's Tax GuideAn accountable plan needs three things: a business connection, substantiation, and return of any excess. The IRS treats the timing as reasonable if three limits are met. An advance comes within 30 days of the expense. The employee accounts for expenses within 60 days. The employee returns any excess within 120 days. Amounts not substantiated or returned in time are wages.
  4. ACFE: Occupational Fraud 2024: A Report to the NationsExpense reimbursement schemes, claims for fictitious or inflated business expenses, were about 13% of the cases studied. Their median loss was $50,000, against a median of $145,000 across all cases.
  5. GAO: Standards for Internal Control in the Federal Government (Green Book), GAO-25-107721Separating authority, custody and accounting among different people helps prevent fraud, waste and abuse. Where a small entity cannot separate them, extra review of key processes is the compensating control.

No outside authority backs the six stages, the 3-day match window, the 90-day look-back, the three severities or the six sheets. They are the skill's own rules. The $0.45 mileage rate, the $25 receipt rule and the $60 meal cap in the example are Northbrook's own policy, made up for this page. They are not tax rates. All five sources are US sources.

About this skill

This page explains expense-report-processor, from the MosoFin finance skills library, MosoFin/mosofin-finance-skills on GitHub. Read the skill on GitHub → This page describes the skill in its card format. The card format is on main of MosoFin/mosofin-finance-skills. PR #1 merged it on 26 October 2026, with changes from a bookkeeping audit on 27 October 2026. Want the worked examples? Learn it step by step →