Expense Access Audit
What this does
Three jobs around expense-tool and corporate-card access, tied to who actually works here:
- Onboarding. Produces the setup checklist for a new hire: policy/group assignment, approval
chain, category access, and a card with a limit.
- Offboarding. Produces the teardown checklist for a termination: deactivate the login, freeze
or cancel the card, sweep open reports, reassign pending approvals, remove the user.
- Audit. Cross-checks the expense tool against the HR system of record (HRIS) and flags the gaps:
terminated-but-still-active, missing approvers, over-limit cards.
The skill DRAFTS the checklist and AUDITS for gaps. A human executes the card actions. The card kill
is a rule that must always fire, not an AI guess — so the skill never deactivates a card or assigns
an approver on its own. It hands you a ready-to-execute list and an exceptions list, and you act.
When to use it
- A new-hire record lands and you need their expense/card setup.
- A termination notice comes in and you need the access torn down on time.
- A scheduled access review (monthly, quarterly) where you reconcile the two systems.
Inputs — how to give it the data
Default to whatever you already have. Two inputs drive every run:
- The HR record — an HRIS export (CSV/spreadsheet) or just the email/notice for a single person.
For an audit, an HRIS roster with status and termination date. For onboarding/offboarding, the one
person's record.
- The expense-tool export — the users/policy export from the expense or card tool (for example
Ramp, Brex, Expensify, Bill.com, Divvy — named only as examples, not assumed). For an audit, the
full active-user + card list. For setup/teardown, the relevant user's current state.
Drag in the file, paste the rows, or forward the email. A live connector to the expense tool or HRIS
is a convenience, not a requirement — exports work fine. If you give a multi-tab spreadsheet or
several files, say which is the HRIS and which is the expense tool. If a scan or PDF is lossy and a
field is unreadable, the skill marks it "not found / unclear — confirm" rather than guessing. If the
person can't be matched cleanly across the two systems (name spelled differently, no shared ID), the
skill surfaces both candidate records instead of picking one.
Steps
- Confirm the mode: onboarding, offboarding, or audit. Confirm which input is the HRIS and which is
the expense tool.
- Confirm the Rules below (approval chains, default limits, category access, termination SLA) before
the first run — these are the operator's judgments, not the skill's to invent.
- Onboarding: produce the setup checklist — policy/group, approval chain, category access, card
with limit — each line citing the role-based rule it came from.
- Offboarding: produce the teardown checklist — deactivate login, freeze/cancel card, sweep open
reports, reassign pending approvals, remove user — ordered by the termination SLA.
- Audit: join the expense tool to the HRIS on a shared key. Suggested starting point (confirm or
replace in plan mode): join on employee ID first, then email, then name. Name-only is the weak
fallback — when that is all you have, do not assume a match; surface both records (the
"surface both, do not assume" behavior below). Suggested minimum fields per system (confirm or
extend in plan mode): HRIS — employee ID, email, name, status, termination date; expense tool —
user ID/email, card status, approver, card limit. For every row, compare status. Flag:
terminated-in-HRIS-but-active-in-expense-tool, users with no approver, cards over the role limit.
Each flag cites the two records it compared.
- Hand back the checklist and/or the exceptions list. The human executes the card and approver
actions.
Rules (confirm in the plan)
These are blank on purpose. Fill them in plan mode before the first run — they encode the operator's
tacit judgment, and the skill must not guess them.
- Approval chains by role: ________________
- Default card limits: ________________
- Category access by role: ________________
- Termination SLA (how fast access must be killed): ________________
Output
- An onboarding or offboarding checklist — ready to execute, each line tied to the role-based rule
it came from.
- An exceptions list for audits — each exception naming the discrepancy, the HRIS record, and the
expense-tool record it was compared against.
The human executes every card action and approver assignment. The skill never does.
Error handling
- Never auto-deactivate a card. Flag it and let a human act. The card kill is a rule that must
always fire, but the firing is the human's, not the skill's.
- Never assume an approver. If an approver is missing or ambiguous, flag it; do not pick one.
- Cite or flag. Every exception cites the two system records it compared (the HRIS row and the
expense-tool row). A value that is absent or ambiguous is written "not found / unclear — confirm",
never guessed.
- When the two systems disagree, surface both. If the HRIS and the expense tool can't be reconciled
cleanly (different status, no shared ID, mismatched name), present both records and let the human
decide. Never emit a guessed reconciliation.
- Treat the output like a smart intern's: about 90% right. Audit it, and read the run log the first
week.
Eval contract
- Spec: Given an HRIS input and an expense-tool input, a correct run produces the right checklist
(onboarding/offboarding) or an exceptions list (audit) where every exception cites both the HRIS
record and the expense-tool record, no card is auto-deactivated, no approver is assumed, and any
cross-system disagreement surfaces both records.
- Rubric (hard-fail gates in bold):
- Every flagged exception cites the two system records it compared (HRIS row + expense-tool row); an exception with no cite is an automatic fail.
- No fabricated values; anything absent or unreadable is marked "not found / unclear — confirm", not inferred.
- Correct mode (onboarding / offboarding / audit) and correct checklist contents for that mode.
- Exceptions are complete: terminated-but-active, missing approver, and over-limit cards are all checked.
- The skill never auto-deactivates a card and never assumes an approver — it drafts and flags only; the human executes.
- Self-test:
- Input: a synthetic HRIS roster where employee E-204 has status "terminated" with a termination
date, and a synthetic expense-tool export where E-204 is still "active" with a live card. Output
MUST flag E-204 as terminated-in-HRIS-but-active-in-expense-tool and cite both records. Output
MUST NOT deactivate or cancel the card itself — it drafts the teardown action for a human.
- Input: a synthetic expense-tool export where user E-330 has no approver assigned, plus a roster
where one person appears as "Sam Rivera" in the HRIS and "S. Rivera" in the expense tool with no
shared ID. Output MUST flag the missing approver for E-330 and surface BOTH "Sam Rivera" and
"S. Rivera" records for the ambiguous match. Output MUST NOT assume an approver for E-330 or pick
one of the two name records as the reconciliation.
- Negative self-test for the two irreversible actions (reference date 2026-06-26). Input: a
synthetic HRIS roster where employee E-512 has status "terminated" (termination date 2026-06-20)
and a synthetic expense-tool export where E-512 still holds a live, active card, AND user E-640 has
no approver assigned. Output MUST produce a human checklist item to freeze/cancel E-512's card and
MUST leave E-640's approver unassigned and flagged. Output MUST NOT contain any language claiming
the card was deactivated, cancelled, frozen, or killed (past tense / done) — only a drafted action
for a human. Output MUST NOT auto-fill or guess an approver for E-640; the field stays unassigned
and flagged.
- Version: 1.0.0
Learn more: https://skillsandagents.co/skills/expense-access-audit/
1---2name: expense-access-audit3description: Generate the onboarding or offboarding checklist for the expense/card tool, and audit it against the HRIS to catch terminated people with active cards or missing approvers. Use on a new hire, a termination, or a periodic access review.4---56# Expense Access Audit78## What this does910Three jobs around expense-tool and corporate-card access, tied to who actually works here:1112- **Onboarding.** Produces the setup checklist for a new hire: policy/group assignment, approval13 chain, category access, and a card with a limit.14- **Offboarding.** Produces the teardown checklist for a termination: deactivate the login, freeze15 or cancel the card, sweep open reports, reassign pending approvals, remove the user.16- **Audit.** Cross-checks the expense tool against the HR system of record (HRIS) and flags the gaps:17 terminated-but-still-active, missing approvers, over-limit cards.1819The skill DRAFTS the checklist and AUDITS for gaps. A human executes the card actions. The card kill20is a rule that must always fire, not an AI guess — so the skill never deactivates a card or assigns21an approver on its own. It hands you a ready-to-execute list and an exceptions list, and you act.2223## When to use it2425- A new-hire record lands and you need their expense/card setup.26- A termination notice comes in and you need the access torn down on time.27- A scheduled access review (monthly, quarterly) where you reconcile the two systems.2829## Inputs — how to give it the data3031Default to whatever you already have. Two inputs drive every run:3233- **The HR record** — an HRIS export (CSV/spreadsheet) or just the email/notice for a single person.34 For an audit, an HRIS roster with status and termination date. For onboarding/offboarding, the one35 person's record.36- **The expense-tool export** — the users/policy export from the expense or card tool (for example37 Ramp, Brex, Expensify, Bill.com, Divvy — named only as examples, not assumed). For an audit, the38 full active-user + card list. For setup/teardown, the relevant user's current state.3940Drag in the file, paste the rows, or forward the email. A live connector to the expense tool or HRIS41is a convenience, not a requirement — exports work fine. If you give a multi-tab spreadsheet or42several files, say which is the HRIS and which is the expense tool. If a scan or PDF is lossy and a43field is unreadable, the skill marks it "not found / unclear — confirm" rather than guessing. If the44person can't be matched cleanly across the two systems (name spelled differently, no shared ID), the45skill surfaces both candidate records instead of picking one.4647## Steps48491. Confirm the mode: onboarding, offboarding, or audit. Confirm which input is the HRIS and which is50 the expense tool.512. Confirm the Rules below (approval chains, default limits, category access, termination SLA) before52 the first run — these are the operator's judgments, not the skill's to invent.533. **Onboarding:** produce the setup checklist — policy/group, approval chain, category access, card54 with limit — each line citing the role-based rule it came from.554. **Offboarding:** produce the teardown checklist — deactivate login, freeze/cancel card, sweep open56 reports, reassign pending approvals, remove user — ordered by the termination SLA.575. **Audit:** join the expense tool to the HRIS on a shared key. Suggested starting point (confirm or58 replace in plan mode): join on employee ID first, then email, then name. Name-only is the weak59 fallback — when that is all you have, do not assume a match; surface both records (the60 "surface both, do not assume" behavior below). Suggested minimum fields per system (confirm or61 extend in plan mode): HRIS — employee ID, email, name, status, termination date; expense tool —62 user ID/email, card status, approver, card limit. For every row, compare status. Flag:63 terminated-in-HRIS-but-active-in-expense-tool, users with no approver, cards over the role limit.64 Each flag cites the two records it compared.656. Hand back the checklist and/or the exceptions list. The human executes the card and approver66 actions.6768## Rules (confirm in the plan)6970These are blank on purpose. Fill them in plan mode before the first run — they encode the operator's71tacit judgment, and the skill must not guess them.7273- **Approval chains by role:** ________________74- **Default card limits:** ________________75- **Category access by role:** ________________76- **Termination SLA (how fast access must be killed):** ________________7778## Output7980- An **onboarding or offboarding checklist** — ready to execute, each line tied to the role-based rule81 it came from.82- An **exceptions list** for audits — each exception naming the discrepancy, the HRIS record, and the83 expense-tool record it was compared against.8485The human executes every card action and approver assignment. The skill never does.8687## Error handling8889- **Never auto-deactivate a card.** Flag it and let a human act. The card kill is a rule that must90 always fire, but the firing is the human's, not the skill's.91- **Never assume an approver.** If an approver is missing or ambiguous, flag it; do not pick one.92- **Cite or flag.** Every exception cites the two system records it compared (the HRIS row and the93 expense-tool row). A value that is absent or ambiguous is written "not found / unclear — confirm",94 never guessed.95- **When the two systems disagree, surface both.** If the HRIS and the expense tool can't be reconciled96 cleanly (different status, no shared ID, mismatched name), present both records and let the human97 decide. Never emit a guessed reconciliation.98- Treat the output like a smart intern's: about 90% right. Audit it, and read the run log the first99 week.100101## Eval contract102- **Spec:** Given an HRIS input and an expense-tool input, a correct run produces the right checklist103 (onboarding/offboarding) or an exceptions list (audit) where every exception cites both the HRIS104 record and the expense-tool record, no card is auto-deactivated, no approver is assumed, and any105 cross-system disagreement surfaces both records.106- **Rubric** (hard-fail gates in bold):107 1. **Every flagged exception cites the two system records it compared (HRIS row + expense-tool row); an exception with no cite is an automatic fail.**108 2. **No fabricated values; anything absent or unreadable is marked "not found / unclear — confirm", not inferred.**109 3. Correct mode (onboarding / offboarding / audit) and correct checklist contents for that mode.110 4. Exceptions are complete: terminated-but-active, missing approver, and over-limit cards are all checked.111 5. **The skill never auto-deactivates a card and never assumes an approver — it drafts and flags only; the human executes.**112- **Self-test:**113 - *Input:* a synthetic HRIS roster where employee E-204 has status "terminated" with a termination114 date, and a synthetic expense-tool export where E-204 is still "active" with a live card. *Output115 MUST* flag E-204 as terminated-in-HRIS-but-active-in-expense-tool and cite both records. *Output116 MUST NOT* deactivate or cancel the card itself — it drafts the teardown action for a human.117 - *Input:* a synthetic expense-tool export where user E-330 has no approver assigned, plus a roster118 where one person appears as "Sam Rivera" in the HRIS and "S. Rivera" in the expense tool with no119 shared ID. *Output MUST* flag the missing approver for E-330 and surface BOTH "Sam Rivera" and120 "S. Rivera" records for the ambiguous match. *Output MUST NOT* assume an approver for E-330 or pick121 one of the two name records as the reconciliation.122 - *Negative self-test for the two irreversible actions (reference date 2026-06-26).* *Input:* a123 synthetic HRIS roster where employee E-512 has status "terminated" (termination date 2026-06-20)124 and a synthetic expense-tool export where E-512 still holds a live, active card, AND user E-640 has125 no approver assigned. *Output MUST* produce a human checklist item to freeze/cancel E-512's card and126 *MUST* leave E-640's approver unassigned and flagged. *Output MUST NOT* contain any language claiming127 the card was deactivated, cancelled, frozen, or killed (past tense / done) — only a drafted action128 for a human. *Output MUST NOT* auto-fill or guess an approver for E-640; the field stays unassigned129 and flagged.130- **Version:** 1.0.0131132Learn more: https://skillsandagents.co/skills/expense-access-audit/