FAR Analyzer reference

How matching works

A plain-English tour of how the tool reads a packet, pairs receipts to line items, and decides what to flag. Written for reviewers, not engineers. When the tool encounters something it can't handle confidently, it labels the flag "needs review" rather than guessing — so you can decide.

How the tool reads receipts

Every packet PDF is split page-by-page. Each page is sent through a vision model that captures:

If a receipt actually spans several pages (a real multi-page hotel folio, or an emailed receipt printed with ads on page 2), the tool stitches those pages into one logical receipt before matching begins.

What the tool refuses to guess: if a field isn't visible — say, the vendor address got cut off — it's left blank rather than fabricated. The same goes for GSA rates: if the API can't return a rate for the city, the cap check is skipped with a clear yellow flag rather than invented.

How receipts are matched to line items

The Vantagepoint cover page lists every expense the employee submitted. Each row on that cover is a "line item." The tool tries to pair each line item with the receipt that proves it. Matching runs in passes:

Pass 0 — Lines where the submitter said no receipt exists

Some lines never have a receipt and that's expected. Mileage is calculated (rate × distance) rather than receipted. Sometimes a tip was given in cash, or an airline didn't issue a receipt for an in-flight snack. When the cover line says so explicitly — or it's a Mileage row — the tool sets those aside up front and labels them "No receipt expected." No match is attempted.

Pass 1 — Meals + Alcohol on the same receipt

When a single dinner shows up on the cover as two separate line items (one Meals, one Alcohol) for the same day, the tool tries to pair both to a single combined receipt where food and alcohol sum to the receipt's total. This is the common Vantagepoint pattern for splitting alcohol into the unallowable account.

Pass 2 — Direct one-to-one matching

For every remaining line item, the tool scores each unmatched receipt on amount closeness, date proximity, vendor agreement, and category fit. The highest-scoring match wins (above a threshold). The "view receipt" button on each row jumps to the matched page in the original packet for spot-checking.

Mileage documentation

Employees sometimes attach a Google Maps screenshot or printed directions for a Mileage line item. There's no dollar total on those pages, so the regular amount-based matcher would never pair them. A separate pass matches map/route documents to Mileage lines by date.

When a match looks shaky: the tool surfaces a "possible match" rather than silently picking the wrong receipt. The reviewer sees both candidates and can confirm or reject.

How the tool flags issues

Flags come in three severities: error (something is wrong and needs to change in Vantagepoint), warning (something probably needs adjustment but the reviewer should look), and info (a heads-up; no action required unless the amount looks off).

Alcohol — unallowable

Any line item coded as alcohol must be in an unallowable account (typically 8022.0). The tool flags lines where alcohol is coded to an allowable account. If a meal receipt contains alcohol but the cover doesn't split it out, the tool flags the meal line as "alcohol in meal" with the suggested split amount.

Cited under FAR 31.205-51.

Lodging — GSA per-night cap

FAR §31.205-46 caps lodging at the GSA per-diem rate per night, not averaged across the stay. The tool checks each night individually against the rate for that city. When the folio shows only a grand total without a per-night breakdown, it divides by the number of nights and flags the assumption so the reviewer can verify against the actual folio.

Cited under FAR 31.205-46(a).

Meals & incidentals — GSA M&IE cap per person

Meals are capped per person, not per receipt. The tool counts attendees from four sources — the cover's "Each Person:" list, the description ("lunch with Mary and Catherine"), receipt-printed headcounts ("Guests: 4"), and handwritten guest names on the back — and takes the largest credible count. A small nickname table catches cases where the diner who paid is already in the guest list (so the submitter isn't double-counted).

The flag fires when the per-person cost is more than 50% over the GSA cap for that city. Hover the "👥 N attendees" pill on any meal row to see exactly which signals the tool used to land on the count.

Cited under FAR 31.205-46(a). Rates from the live GSA Per Diem API at api.gsa.gov.

Travel-day M&IE — 75% rule

GSA's rule: the first and last day of a trip each get 75% of the full M&IE rate, not the full rate. A one-day trip uses 75% once (single bookend). The tool detects which line items fall on a trip bookend, applies the 75% cap, and flags overages against the modified cap. Even when a travel-day meal is under cap, an info note appears so the reviewer can confirm the day was correctly identified.

GSA Per Diem FAQ.

Missing receipts

Lines that should have a receipt but don't get a "no receipt found" flag. Parking and tolls are excepted — receipts often aren't issued at meters and tollbooths, so the tool surfaces an info note instead of an error for those categories.

Duplicate receipts

When the same physical receipt is uploaded twice in a packet, the tool detects the duplicate from the extracted data (same vendor, date, total, and line items). One line item keeps its match; the other is flagged with a note that the real receipt for the second charge may be missing.

Cover-page amount missing

If a cover line item is missing its amount, the tool still attempts a tentative match using vendor, date, and description. The line is flagged for the reviewer to confirm and enter the real number; its $0 amount doesn't contribute to the running totals.

Verify on GSA.gov: every GSA-related flag carries a "Verify on GSA.gov →" link next to the rate label. One click opens the official per-diem lookup for that city, state, and fiscal year — useful for spot-checking when a flag looks off.