Complete AI Training

Skill · Business

Petty cash management

Petty cash register: entry number, date and type, payee and purpose, cash in and out, running balance, cash limit flag, custodian, physical count and variance. Use for petty cash.

Agentic Awesome SkillsAdded Sep 30, 2026
Use it in my AI

How to use it

  1. Start your plan and connect your AI once
  2. Ask for the task in your own words, or say it directly:
Use the Petty cash management skill to help me with this.

Without a connection: copy the SKILL.md below into your AI's project instructions.

SKILL.md

Petty Cash Management

What it is: Imprest cash, every movement supported, and the physical count reconciled to the register.

Overview

Works out the smallest useful Petty Cash Management setup for the business in front of it, then builds it only when asked. The default output is a short recommendation, not a spreadsheet. Artifacts - CSV, SQL DDL, JSON Schema, Notion mapping - are produced on request, from one field list so they cannot drift apart.

Layer: Layer 4: Cash. Fits: Starter stage. Table code: n/a.

The control this table exists to enforce: petty cash is only controlled by two things - a fixed limit and a periodic count. The limit is on the float, not on each payment, and every payment carries a supporting document and a voucher. The reconciliation identity is fixed and is checked at every count:

Opening Cash + Receipts and Replenishment - Payments = Closing Cash

The physical count must equal closing cash. Any difference is recorded as a variance, an investigation and a status, not absorbed quietly.

The identity is computed on a Count entry row, not on a payment row: Cash In and Cash Out hold the period's replenishment and payments, Running Cash Balance is the closing balance per the register, and Physical Count is the money actually in the box.

When to Use This Skill

  • petty cash register
  • imprest cash book
  • small cash payments log
  • cash box count sheet
  • petty cash replenishment tracker

Also use it when the user says "imprest cash, every movement supported, and the physical count reconciled to the register", or describes the same process happening in a spreadsheet, a document or someone inboxes.

Do not use it for: payroll calculation, tax filing, or legal advice. This skill produces empty templates only - it never holds or processes real employee or customer data.

How It Works

Follow the shared execution contract. The module-specific rules below define only domain fields, decisions, calculations, and safety constraints.

Step 1 - Identify intent

Read the request and pick the intent before asking anything.

  • "set up" or "build" or "create" -> the user wants artifacts; go to Step 2.
  • "our process is ..." or "it is in a sheet" -> the user wants to move an existing process; capture it, then Step 2.
  • "is this right" or "review" or "audit" -> the user wants a check, not a build; answer from what they share.
  • "how do I ..." -> advice question; answer directly and offer the build only if it helps.

Ask only if this is the highest-value missing fact; otherwise proceed without an opener:

Q: Who holds your petty cash today, and is there a limit on it?

Step 2 - Ask only what is missing

Treat ambiguous replies as unanswered and ask which explicit option the user means. Record unknown values as Unknown; Unknown is not zero. A record must not be Done when a required check fails.

Skip anything the user already answered, in any earlier message. Ask the rest one at a time, and stop as soon as the remaining answers would not change the output.

  • Limit - Float amount agreed? / Reset by replenishment or topped up? / Can it go over?
  • Custodian - One named person? / Approver separate from holder? / Left on holiday?
  • Payments and counting - What gets paid from it? / Voucher raised each time? /
  • Supporting document? / How often counted? / Who counts - custodian or someone else? / Last difference?

  • Current process - Register today? / Envelope, box or ledger? / What goes missing?
  • Outcome - What do you need? / A register, a count sheet or both?

Never invent an answer. If the user does not know, record it as unknown and carry on.

Step 3 - Hold the internal context

Hold the answers in this shape. It stays internal - it is not shown to the user unless they ask, and it never carries a value the user did not give.

module: petty-cash-management
intent: null            # setup | advice | review | fix | build | convert | export
scale: null             # Starter | Growth | Scale, only if the answer changes it
areas:
  "Limit": null
  "Custodian": null
  "Payments and counting": null
  "Current process": null
  "Outcome": null
requested_outputs: []   # csv | sql | json | notion | xlsx - requested formats only
confirmed_facts: []     # only what the user actually said
open_questions: []      # the unanswered ones, in the order worth asking

Step 4 - Recommend the smallest workflow

Build an already requested artifact without asking again. For advice-only requests, give a short recommendation and offer the relevant artifact.

Recommended approach: One imprest register with a named custodian, a fixed float, a running balance on every entry, a supporting document type on every payment, and a count line that closes the register against the physical money.

Why this one: A petty cash float leaks slowly and is only ever caught by counting it. The register without the count is a diary; the count without the register is an argument.

Workflow: Payment made against a document → Voucher raised and approved → Running balance updated → Replenishment raised separately → Physical count → Variance recorded and investigated

Step 5 - Build only on request

Once the user asks for it, derive the fields from the confirmed context and emit the requested artifacts. For machine-readable text, keep prose outside the data; for files, provide a usable link. Report material validation failures or limitations separately.

A selected Notion output is rendered by notion-manual-import, so route the Notion step there. When the user selects Notion, hand that step to @notion-manual-import: it holds the CSV, the property mapping, the import steps and the verification checklist, and it renders the Field Reference below instead of defining a table of its own. Do not restate the mapping here and do not improvise the import steps. Manual CSV and mapping outputs need no connection. For requested workspace changes, follow the shared contract: verify actual tool access and the target before writing. A user saying "connected" is not tool evidence. Never ask for a Notion password or token.

Entry Number,Entry Date,Entry Type,Payee,Purpose,Cash Out,Cash In,Running Cash Balance,Cash Limit,Within Limit,Custodian,Supporting Document,Document Reference,Voucher Number,Approved By,Physical Count Date,Physical Count,Count Variance,Variance Status,Investigation Notes,Ledger Account,Entry Verified,Notes,Petty Cash ID
PC-2026-0188,2026-08-31,Count,Several payees,Courier and postage paid from the float during August,7250.00,7000.00,2250.00,10000.00,Yes,Rohit Menon,Bill/Invoice,BILL-4471,VCH-2026-1044,Ananya Rao,2026-08-31,2100.00,150.00,Short,Count 150.00 short of the register; a courier bill of that amount may have been entered but not paid. Under investigation with the approver.,Petty Cash,In progress,Count sheet CNT-2026-08-31 signed by custodian and approver; replenishment drawn from bank on 01 Aug.,
CREATE TABLE petty_cash_management (
  entry_number VARCHAR(255),
  entry_date DATE NOT NULL,
  entry_type VARCHAR(100) NOT NULL,
  payee VARCHAR(255),
  purpose VARCHAR(255),
  cash_out NUMERIC(14,2) NOT NULL,
  cash_in NUMERIC(14,2) NOT NULL,
  running_cash_balance NUMERIC(14,2) NOT NULL,
  cash_limit NUMERIC(14,2) NOT NULL,
  within_limit VARCHAR(100) NOT NULL,
  custodian VARCHAR(255),
  supporting_document VARCHAR(100) NOT NULL,
  document_reference VARCHAR(255),
  voucher_number VARCHAR(255),
  approved_by VARCHAR(255),
  physical_count_date DATE,
  physical_count NUMERIC(14,2),
  count_variance NUMERIC(14,2),
  variance_status VARCHAR(100) NOT NULL,
  investigation_notes TEXT,
  ledger_account VARCHAR(255),
  entry_verified VARCHAR(100) NOT NULL,
  notes TEXT,
  petty_cash_id SERIAL PRIMARY KEY,
  created_at TIMESTAMP DEFAULT NOW(),
  updated_at TIMESTAMP DEFAULT NOW()
);
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Petty Cash Management",
  "type": "object",
  "additionalProperties": false,
  "properties": {
      "Entry Number": { "type": "string" },
      "Entry Date": { "type": "string", "format": "date" },
      "Entry Type": { "type": "string" },
      "Payee": { "type": "string" },
      "Purpose": { "type": "string" },
      "Cash Out": { "type": "number" },
      "Cash In": { "type": "number" },
      "Running Cash Balance": { "type": "number" },
      "Cash Limit": { "type": "number" },
      "Within Limit": { "type": "string" },
      "Custodian": { "type": "string" },
      "Supporting Document": { "type": "string" },
      "Document Reference": { "type": "string" },
      "Voucher Number": { "type": "string" },
      "Approved By": { "type": "string" },
      "Physical Count Date": { "type": "string", "format": "date" },
      "Physical Count": { "type": "number" },
      "Count Variance": { "type": "number" },
      "Variance Status": { "type": "string" },
      "Investigation Notes": { "type": "string" },
      "Ledger Account": { "type": "string" },
      "Entry Verified": { "type": "string" },
      "Notes": { "type": "string" },
      "Petty Cash ID": { "type": "integer" }
  },
  "required": [
      "Entry Date",
      "Entry Type",
      "Cash Out",
      "Cash In",
      "Running Cash Balance",
      "Cash Limit",
      "Within Limit",
      "Supporting Document",
      "Variance Status",
      "Entry Verified"
  ]
}
| CSV column | Notion property | Set after import |
|---|---|---|
| Entry Number | Title | Use as the database title |
| Entry Date | Date | Convert to Date |
| Entry Type | Select (add options after import) | Convert to Select, add options: "Payment", "Replenishment", "Receipt", "Count" |
| Payee | Text | Leave as Text |
| Purpose | Text | Leave as Text |
| Cash Out | Number (format: currency) | Convert to Number, set format to Currency |
| Cash In | Number (format: currency) | Convert to Number, set format to Currency |
| Running Cash Balance | Number (format: currency) | Convert to Number, set format to Currency |
| Cash Limit | Number (format: currency) | Convert to Number, set format to Currency |
| Within Limit | Select (add options after import) | Convert to Select, add options: "Yes", "No" |
| Custodian | Text | Leave as Text |
| Supporting Document | Select (add options after import) | Convert to Select, add options: "Bill/Invoice", "Receipt Note", "Wage Sheet", "Rent Record", "Payment Voucher", "Other" |
| Document Reference | Text | Leave as Text |
| Voucher Number | Text | Leave as Text |
| Approved By | Text | Leave as Text |
| Physical Count Date | Date | Convert to Date |
| Physical Count | Number (format: currency) | Convert to Number, set format to Currency |
| Count Variance | Number (format: currency) | Convert to Number, set format to Currency |
| Variance Status | Select (add options after import) | Convert to Select, add options: "Not counted", "Matched", "Short", "Over", "Under Investigation" |
| Investigation Notes | Text | Leave as Text |
| Ledger Account | Text | Leave as Text |
| Entry Verified | Select (add options after import) | Convert to Select, add options: "Not started", "In progress", "Blocked", "Done", "Cancelled" |
| Notes | Text | Leave as Text |
| Petty Cash ID | Text (preserve source ID) | Keep imported IDs as Text; optionally add a separate Unique ID property |

The rows above are documentation examples only. Emit empty templates unless the user explicitly requests examples. Money stays currency, dates stay date, and anything pointing at another table stays relation.

Field Reference

#FieldTypeSQLJSON SchemaNotionCSV example
1Entry NumbertextVARCHAR(255)stringTextPC-2026-0188
2Entry DatedateDATEstring, format: dateDate2026-08-31
3Entry TypeselectVARCHAR(100)stringSelect (add options after import)Count
4PayeetextVARCHAR(255)stringTextSeveral payees
5PurposetextVARCHAR(255)stringTextCourier and postage paid from the float during August
6Cash OutcurrencyNUMERIC(14,2)numberNumber (format: currency)7250.00
7Cash IncurrencyNUMERIC(14,2)numberNumber (format: currency)7000.00
8Running Cash BalancecurrencyNUMERIC(14,2)numberNumber (format: currency)2250.00
9Cash LimitcurrencyNUMERIC(14,2)numberNumber (format: currency)10000.00
10Within LimitselectVARCHAR(100)stringSelect (add options after import)Yes
11CustodiantextVARCHAR(255)stringTextRohit Menon
12Supporting DocumentselectVARCHAR(100)stringSelect (add options after import)Bill/Invoice
13Document ReferencetextVARCHAR(255)stringTextBILL-4471
14Voucher NumbertextVARCHAR(255)stringTextVCH-2026-1044
15Approved BytextVARCHAR(255)stringTextAnanya Rao
16Physical Count DatedateDATEstring, format: dateDate2026-08-31
17Physical CountcurrencyNUMERIC(14,2)numberNumber (format: currency)2100.00
18Count VariancecurrencyNUMERIC(14,2)numberNumber (format: currency)150.00
19Variance StatusselectVARCHAR(100)stringSelect (add options after import)Short
20Investigation Noteslong_textTEXTstringTextCount 150.00 short of the register; a courier bill of that amount may have been entered but not paid. Under investigation with the approver.
21Ledger AccounttextVARCHAR(255)stringTextPetty Cash
22Entry VerifiedselectVARCHAR(100)stringSelect (add options after import)In progress
23Noteslong_textTEXTstringTextCount sheet CNT-2026-08-31 signed by custodian and approver; replenishment drawn from bank on 01 Aug.
24Petty Cash IDidSERIAL PRIMARY KEYintegerText (preserve source ID)(blank)

Select Options

Entry Type

Payment | Replenishment | Receipt | Count

Within Limit

Yes | No

Supporting Document

Bill/Invoice | Receipt Note | Wage Sheet | Rent Record | Payment Voucher | Other

Variance Status

Not counted | Matched | Short | Over | Under Investigation

Entry Verified

Not started | In progress | Blocked | Done | Cancelled

Relations

Link fields: none

Custodian, Payee and Document Reference are free text. The petty cash register is deliberately standalone; it is the cash side of day-book and the evidence side of expense-accounting, and both of those reference it rather than the other way round.

Examples

Prompt

Petty cash keeps running out before the month ends and we never know by how much.

Context first - one question per message, nothing already answered:

Q: Who holds it, and is there a limit?
A: Our admin. There is a limit, I think, but nobody checks it.
Q: How often is it counted?
A: At month end, by me.
Q: Voucher each time?
A: For most of it. Some are just small.

Recommended next step - offered, not built:

One imprest register with a named custodian, a fixed float, a running balance on every entry, a supporting document type on every payment, and a count line that closes the register against the physical money.
Workflow: Payment made against a document → Voucher raised and approved → Running balance updated → Replenishment raised separately → Physical count → Variance recorded and investigated
Want the CSV, SQL, JSON Schema and Notion mapping for this?

Best Practices

  • Build when requested; recommend and offer a build for advice-only requests.
  • One question per message. A batched intake reads as a form and gets guessed at.
  • Reconcile on the fixed identity: opening cash + receipts and replenishment - payments =
  • closing cash. Compute it at every count, not at year end.

  • Keep the running balance under the limit. A float that is topped up only when it is empty
  • is a float that is out of control; Within Limit = No means raise the replenishment.

  • The limit is on the float. Within Limit is a warning to replenish, not a reason to
  • stop recording the payment.

  • Record replenishments as their own entry type. A replenishment mixed into a payment
  • hides the expense.

  • Never adjust the register to match the money. Record the variance, set the status, and
  • write the investigation down in Investigation Notes.

  • Count the cash with someone other than the custodian where you can. It costs nothing and
  • it changes the conversation.

  • Keep display names identical across CSV and JSON; document normalized SQL identifiers.
  • Use relation for anything that points at another table, text only for free text.
  • Money fields are currency, never text. Dates are date, never free text.
  • If the user requests an example row, keep it obviously fake so nobody imports it as real data.

Limitations

  • Empty template only. It does not hold, disburse or approve cash, and it does not connect
  • to a till or a bank.

  • The count is periodic by design, not optional. A register with no count is a diary, and
  • the day the count is skipped is the day a shortage becomes invisible.

  • The count fields stay empty until the count happens; Variance Status is what carries the
  • state in the meantime. Do not fill a count in advance to make the row look complete.

  • A variance is a record, not a conclusion. Only a human can decide whether it is a
  • counting error, a timing difference or a loss.

  • Where the tax rules do not allow a particular internal document, an internal document is
  • not acceptable evidence. Check the local position.

  • Notion relations do not apply here - there are no relations to set up.
  • Select options are a starting set. Rename them to match how the business talks.
  • No automation, reminders or sync. Those need the integration layer.
  • Legal, tax and HR review is still required before this drives real decisions.

Security & Safety Notes

  • Never fill in real custodian names, salary figures or cash amounts. Placeholders only.
  • Label example rows as synthetic.
  • Petty cash is the highest-risk line in a small business for skimming. Do not paste real
  • count sheets, custodian details or incident notes into a chat.

  • A shortage is a matter for a human conversation, not a spreadsheet correction. Never
  • suggest adjusting the register to make a variance disappear.

  • Local reads, generation commands, and validation are part of a requested artifact build.
  • External writes, messages, provisioning, and publication require authorization for that action and target; existing explicit authorization does not need to be repeated.

  • If sensitive data is supplied, avoid repeating unnecessary identifiers. Use only what
  • the requested review needs; keep generated templates empty. Do not claim deletion from the conversation or service storage.

  • Privacy, legal and disciplinary cases need a qualified human reviewer before anything
  • is acted on.

Common Pitfalls

  • Problem: a static mapping is described as a completed workspace build.
  • Solution: deliver manual mappings without a connection; claim a live change only after the authorized tool operation succeeds.

  • Problem: asked all six questions in one message.
  • Solution: ask one, wait, and drop any the first answer already covered.

  • Problem: the custodian counts their own cash and signs it off.
  • Solution: a second person at the count. The limit and the count are the only two controls this float has.

  • Problem: a shortage is fixed by editing the running balance.
  • Solution: record the variance, set Short or Under Investigation, and document it.

  • Problem: replenishments are entered as payments.
  • Solution: use Replenishment as the entry type so the expense stays visible.

  • Problem: a payment is recorded with no supporting document type.
  • Solution: Supporting Document is required - the options exist because these documents are acceptable where the tax rules allow, and only there.

  • Problem: the count is compared against a payment row instead of a count row.
  • Solution: put the period's totals on a Count row and compare the register there, or the two sides of the identity are measured on different rows.

  • Problem: all four artifacts drift apart.
  • Solution: derive all four from the field list in this file, never by hand.

  • Problem: Notion import shows every column as Text.
  • Solution: that is expected. Apply the property mapping table once, after import.

Related Skills

  • @accounting-audit-system-builder - routes to this skill and the other 15 modules.
  • @day-book - the daily cash book the float is counted into.
  • ](https://github.com/sickn33/agentic-awesome-skills/blob/main/skills/payment-accounting/SKILL.md) - the replenishment, when it is made from bank.
  • @expense-accounting - where the expenses paid from the float are classified.
  • @source-document-filing - where the supporting documents behind each entry are held.
  • @salary-wage-accounting - wage sheets are one of the acceptable petty cash documents.
  • @receipt-accounting - cash received into the float, if the business does that.
  • @monthly-closing-statements - where the counted balance is proved at period end.
  • @audit-preparation - count sheets and custodian sign-off are audit-trail items.
  • @inventory-stock-reconciliation - the same count-and-investigate discipline applied to stock.
  • @party-ledger-reconciliation - proves payee balances where the float paid a supplier.

Reusable Prompt

I want to set up petty cash management for my company - a fixed imprest float, a named
custodian, a supporting document on every payment, and a physical count reconciled to the
register.
Ask me one short question at a time, and only about what I have not already told you.
Then recommend the smallest setup that fits, and wait for me to ask before you build it.
When I ask, output CSV, SQL DDL, JSON Schema and a Notion property mapping. Data only.