# Claim Expense

> Guides a client through creating and submitting one Expense Claim on the Numix platform — collecting the required fields, attaching receipt/invoice files, and submitting via create_expense_claim. Use this skill whenever a client wants to file an expense claim, get reimbursed for a purchase, submit a receipt for reimbursement, or asks "how do I get paid back for this" — even if they don't use the exact words "reimbursement" or "expense claim."

- Skill: `numix-solutions/claim-expense` (Agent Skill)
- Install (CLI): `npx skillmds@latest add numix-solutions/claim-expense`
- Raw SKILL.md: https://api.skillmd.com/api/skills/numix-solutions/claim-expense/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Finance & Business
- Author: Numix-Solutions (https://skillmd.com/u/numix-solutions)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/numix-solutions/claim-expense

---


# Expense Claim

This skill helps a client create one Expense Claim on the Numix platform: collecting the required details, attaching supporting files, and submitting via `create_expense_claim`.

## Important considerations

- **One claim at a time.** To start a new claim, the current one must be finished (submitted) first — this skill does not track or resume claims across sessions. If the client wants to submit a second expense, that's a fresh run of this whole process.
- **Multiple expenses per claim only happen via automatic (receipt) mode.** In automatic mode, one claim can bundle several receipts, and `total_amount` is the sum of all of them. In manual mode, a claim is always a single expense — the client provides one type, one date, one amount, one description. Don't offer to add a second manual line item to the same claim.
- **File size limit**. AI agents have a limit on the size of files that can be uploaded via it - 2 Megabytes. If client has file larger than that, he should use the Numix Web UI to attach files to the created claims. Link is the following: https://claims.numix.app/claims

## Step 0. Welcome
Welcome the client and display a summary of user's information. Explain that client will be submitting an expense claim on behalf of this user. Call `get_user_info` and `get_company_info` to get the user's information and display it to the client. If the user is not found, inform the client and end the process.

## Step 1. Prerequisites
Before starting the process, ask client to add 'numix-reimb.s3.amazonaws.com' to the list of allowed domains. Please provide client step by step instruction how to do it. Since the versions of Claude Desktop may differ, please adapt instructions to the version client has

Do not proceed to the next step until client confirms that domain is added to the list of allowed domains. If client has any questions, please answer them before proceeding

## Step 2: Explain the process, then ask manual vs. automatic

Before collecting anything, tell the client how this works. Adapt the wording naturally, but cover:

- This creates one Expense Claim.
- They can build it two ways:
  - **Manual** — they tell you the details themselves; any files they attach are just attached as proof, not analyzed.
  - **Automatic** — they attach receipt files and you extract the details from them.
- A claim isn't complete without: **expense_type** (Travel, Supplies, or Other), **expense_date** (YYYY-MM-DD), **description**, **total_amount**, and the attached file(s).

Then ask which path they want before doing anything else.

## Step 3a: Manual entry

Collect these one at a time in normal conversation (no special UI — just ask):

- **Expense Type** — Travel, Supplies, or Other
- **Expense Date** — the date of the expense
- **Expense Amount** — the total to be reimbursed
- **Expense Description** — brief, max 512 characters

Then ask the client to attach their receipt/invoice file(s). Files here are attached as-is — do not analyze or extract data from them in manual mode. For each file, follow the upload procedure in "Uploading a file" below. After each upload, ask if they want to attach another file; repeat until they say no.

## Step 3b: Automatic entry (from receipts)

Ask the client to attach the receipt file(s) first. For each file:

1. Upload it using the procedure in "Uploading a file" below.
2. Analyze the file's contents and extract: Type (Category), Date, Amount, Description.
3. If any field can't be extracted from a given receipt, ask the client to fill in just that field for that receipt — don't block on the others.

Once all receipts are processed, aggregate into a single claim:

- **Expense Type**: if the extracted type isn't one of Travel / Supplies / Other, set it to Other.
- **Expense Date**: if receipts share one date, use it. If they differ, use the latest date. If some receipts have no date, use the latest date among the ones that do.
- **Expense Amount**: sum of all extracted amounts.
- **Description**: summarize what the receipts cover.

Show the client the aggregated summary and ask if they want to proceed. If they disagree, ask what they'd like to change, apply it, and show the summary again before moving on.

## Uploading a file

1. Call `generate_reimbursement_link` with the filename to get a presigned POST URL (and required form fields).
2. Upload the file in a single bash command that both checks size and uploads:
   - If the file exceeds 2 MB, skip the upload and instead tell the client to use
     the Numix Web UI (https://claims.numix.app/claims) to attach it.
   - Otherwise, upload with:
     `curl -s -S -o /dev/null -w "%{http_code}" -F "...fields..." -F "file=@<path>" <presigned_url>`
   - Do not print curl's verbose/progress output. Only report the HTTP status code.
3. If the status code indicates success (2xx), add the filename to the claim's
   `attached_files` list. Do not re-fetch or verify the upload separately — a 2xx
   response is sufficient confirmation.

If uploading multiple files, do it in a single bash command/loop that uploads all
files and prints one status line per file, rather than issuing separate upload
instructions per file.

## Step 4: Review and confirm

Show the client the full claim — type, date, amount, description, and attached file names — and ask them to confirm. If they want changes, let them edit any field (or re-attach files) before resubmitting for review. Don't submit until they explicitly confirm.

## Step 5: Submit

Call `create_expense_claim` with the confirmed details. Include:

- `expense_type`, `expense_date`, `description`, `total_amount`
- `attached_files`: list of all file names attached to the claim

Once submitted, confirm the outcome to the client, then call `list_user_expense_claims` and show them their current claims list.

If the client wants to submit another expense, start the whole process over from Step 1 — don't try to carry over any state from the claim you just submitted
