agentleFS
norman-financenorman-finance/norman-mcp-server/skills/categorize-transactions/SKILL.md

categorize-transactions

Skill65 starsChanged 12 days agoMITView on GitHub

Review and categorize uncategorized bank transactions, match them with invoices, and verify bookkeeping entries. Use when the user wants to review transactions, categorize expenses, do bookkeeping, or reconcile their bank account.

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 1 is distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Call get_company_details and check isSme, country and usesCompanyChart:

    line 18
  2. Very specific:

    Fetch uncategorized transactions: Call search_transactions to find transactions that need attention.

    line 30
  3. Very specific:

    Freelance: Use categorize_transaction with the transaction details — it returns the AI-suggested freelance category.

    line 39
  4. Distinctive:

    Invoice matching: When a transaction looks like an incoming payment:

    line 44
  5. Very specific:

    Call list_invoices to find matching unpaid invoices (by amount or client)

    line 45
  6. Very specific:

    Use link_transaction to connect the payment to the invoice

    line 46
  7. Very specific:

    Use upload_bulk_attachments for multiple receipts

    line 50
  8. Very specific:

    Use link_attachment_transaction to connect receipts to transactions

    line 51
  9. Very specific:

    Verification: After categorizing, use change_transaction_verification to mark transactions as verified.

    line 53

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Help the user categorize and organize their bank transactions.

First: determine account type and country

Call get_company_details and check isSme, country and usesCompanyChart:

  • Freelance (isSme: false, usesCompanyChart: false): Use categorize_transaction — AI detects the freelance category automatically.
  • JDG (isSme: false, country: PL, usesCompanyChart: true): a Polish sole trader books on its own PL_KPIR chart, never on the freelance categories. Its tax book is the KPiR, or on the ryczałt the revenue register; the account decides the KPiR column. Use list_company_categories and assign the account with update_transaction (company_category_id).
  • GmbH / UG (isSme: true, country: DE): Use list_company_categories to find DATEV categories by code. If the right category isn't provisioned, use search_skr_by_code or suggest_skr_category to search the full SKR catalog, then create_company_category to add it.
  • Sp. z o.o. (isSme: true, country: PL): full books on the PL_FULL chart of accounts (Zakładowy Plan Kont), not a KPiR. Use list_company_categories with chart_template: "PL_FULL" and assign the account with update_transaction. The SKR tools are German and not available for it; if no PL_FULL account fits, ask the user which account to use.

Transfers between own accounts

With automatic categorization on, a bank import books a German company's payment to or from another of its connected accounts by IBAN: on Internal transfer for a freelancer or trader, on Transfers between own accounts for a GmbH or UG. These rows carry no VAT and do not change profit. Leave them there unless the user says the payment is something else.

Workflow

  1. Fetch uncategorized transactions: Call search_transactions to find transactions that need attention. Look for unverified or uncategorized entries.
  2. Smart categorization: For each transaction, suggest a category based on:
    • The transaction description / reference text
    • The counterparty name
    • The amount and pattern (recurring = likely subscription)
    • Similar past transactions
  3. Assign the category:
    • Freelance: Use categorize_transaction with the transaction details — it returns the AI-suggested freelance category.
    • SME, or a JDG on its PL_KPIR chart: Use update_transaction with company_category_id to assign the account. For a GmbH/UG, if the needed category isn't in list_company_categories, search the full SKR03/SKR04 catalog with search_skr_by_code (by number) or suggest_skr_category (by description, uses AI). Then create_company_category to add it.
  4. Same counterparty: When the user corrects the category of one booking, call find_same_counterparty_transactions with that booking before you save its new category. Offer to change the suggested bookings too, and say how many finalized ones stay as they are. Change the ones the user agrees to with update_transaction. If the new category asks for details (trip dates, VAT period, business share, asset lifetime), change only the one booking.
  5. Invoice matching: When a transaction looks like an incoming payment:
    • Call list_invoices to find matching unpaid invoices (by amount or client)
    • Use link_transaction to connect the payment to the invoice
  6. Document attachment: Remind the user to attach receipts for expenses:
    • An uploaded receipt or invoice books itself as an unpaid booking. Never create a second transaction for it. Use find_booking_payments to find its payment, and record_booking_payment if it was paid another way.
    • Use upload_bulk_attachments for multiple receipts
    • Use link_attachment_transaction to connect receipts to transactions
  7. Verification: After categorizing, use change_transaction_verification to mark transactions as verified.

Present transactions in batches of 10-15 for manageable review. Show: Date, Amount, Description, Suggested Category.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.