The claims module exists to solve a specific monthly problem: somebody in finance chasing people for receipts, then re-typing figures into a spreadsheet.
Filing
An employee picks a category, enters the amount and date, describes the expense and attaches a receipt. Additional attachments can be added beyond the first, for the cases where one expense has several documents.
With OCR enabled, uploading the receipt pre-fills the amount, supplier, date, tax amount and tax code. The claimant reviews and corrects rather than transcribing, which removes most transposition errors. Without OCR the same fields are typed by hand and nothing else changes.
Caps are checked at submission
If the category maps to a benefit plan — medical, health checkup, flexible benefits — the form shows the remaining balance for the current period as soon as the category is picked. Submitting sets the reimbursable amount to the lesser of the claim and what is left, and the form warns that the excess will not be paid out.
The alternative design, resolving it at approval, means someone spends their own money, files, waits three days and only then learns they were over. Resolving it early puts the information in front of the person who can still act on it.
Partial reimbursement
Approvers can set a reimbursable amount lower than the claimed amount, with a comment. This covers the common case where a claim is legitimate but only partly reimbursable — a dinner with a personal guest, a taxi that included a detour — without rejecting the whole thing and forcing a resubmission.
Where receipts are stored
In object storage, not in the database. The database holds the URL. Files are served through an authenticated route that checks the caller's session and company before streaming anything, so a receipt URL is not a public URL — pasting one into a signed-out browser gets you nothing.
The monthly export
The report view filters by period, status, category and employee. Two things come out of it:
- A tabular export of the filtered claims — the figures, in category order.
- A bulk receipt download: every receipt for that filtered set, zipped, with filenames encoding the claimant and date. This is the artefact your bookkeeper or auditor actually asks for, and assembling it by hand is the tedious part of month-end.
Configuring categories
Category values are defined in the codebase rather than through the admin interface. Changing them means editing the category list and adding a migration — deliberately more friction than a settings screen, because a category is a stable accounting concept and renaming one after a year of history is a data-migration problem, not a preference.