Invoice and payment tracker summary
Skill KirKruglov/claude-skills-kit/skills/finance-and-billing/invoice-and-payment-tracker-summary
70+ curated agent skills for Claude Cowork and Claude.ai — ready-to-use tools for non-technical users: project management, productivity, and AI workflow automation
npx -y skills add KirKruglov/claude-skills-kit --skill invoice-and-payment-tracker-summaryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 14 stars14 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Build an invoice aging summary from a pasted invoice list: paid/overdue classification, aging buckets, per-client reconciliation, and needs-action list. No SaaS needed. Triggers: 'invoice aging summary', 'who owes me money', 'aging-сводка по счетам', 'кто из клиентов не заплатил'.
SKILL.md
9.3 KB, as published. Nobody here has run it
Invoice & Payment Tracker Summary
This skill assembles an invoice aging summary from a pasted list of invoices or payments. It classifies each invoice by payment status, calculates overdue aging, builds a per-client reconciliation cross-section, and generates a prioritised "needs action" list — with no accounting SaaS or integrations required.
Input:
- Pasted invoice or payment list (markdown table, CSV, plain text list, or free-form)
- Optional: payment terms (default: net 30), report date, currency label
Output:
- Single markdown document with three sections: Aging Summary / Per-Client Reconciliation / Needs Action
Language Detection
Detect the user's language from their message:
- If Russian (or contains Cyrillic): respond in Russian
- If English (or other Latin-script language): respond in English
- If ambiguous: respond in the language of the trigger phrase used
Instructions
Step 1: Validate Input
-
Check that the user has pasted a list of invoices or payments.
- If input is empty or contains only whitespace: stop and respond: "Вставь список счетов (номер, клиент, дата, сумма, статус). / Paste your invoice list (invoice #, client, date, amount, status)."
- If input looks like a bank statement (contains debit/credit/transaction columns): stop and respond: "Это банковская выгрузка, а не список счетов. Для анализа банковских транзакций используй скилл monthly-close-checklist. / This looks like a bank statement. For transaction analysis, use the monthly-close-checklist skill."
- If the user asks to write a reminder letter or dunning message: redirect: "Этот скилл составляет сводку, а не письма-напоминания. Для серии напоминаний используй accounts-receivable-followup-writer. / This skill builds a status summary, not reminder messages. For a reminder sequence, use accounts-receivable-followup-writer."
-
Identify the report date (use today's date if not provided).
Step 2: Parse Columns and Confirm Mapping
- Identify columns or fields in the input. Look for: Invoice #, Client Name, Invoice Date, Due Date, Amount, Paid Amount or Status.
- If column headers are clear and standard: proceed directly to Step 3.
- If headers are ambiguous, missing, or non-standard (e.g., "Контрагент", "Сумма к оплате", "Дата оплаты"):
- Present a mapping confirmation:
"Я вижу следующие поля: [col1] → Invoice #, [col2] → Client, [col3] → Amount. Верно? / I see these fields: [col1] → Invoice #, [col2] → Client, [col3] → Amount. Correct?"
- Wait for user confirmation before proceeding. Do not generate output until mapping is confirmed.
- Present a mapping confirmation:
Edge Case — EC5 (Mixed-language input): If input contains mixed EN and RU (e.g., Russian client names with English amounts), detect the dominant language of headers and use it to determine output language; preserve original values as-is.
Step 3: Classify Each Invoice
For each invoice, assign one of four statuses:
| Status | Condition |
|---|---|
| Paid | Paid amount equals total amount |
| Partially Paid | Paid amount > 0 but less than total amount |
| Overdue | Due date has passed AND balance > 0 (or paid amount = 0 and due date has passed) |
| Current | Due date is in the future AND not yet paid |
Edge Case — EC1 (No due date): If due date is absent, calculate as: Invoice Date + 30 days. Add a note: "Due date assumed: invoice date + net 30. Provide due dates for exact calculations."
Edge Case — EC2 (Partial payment): Show paid amount, remaining balance, and days since partial payment (calculated as: Report Date − date of last known payment, if available; otherwise omit) in the per-client reconciliation section. Add a "Days Since Payment" column to that client's table only if the input contains a payment date field; if not available, note "(payment date not provided)" next to the balance.
Step 4: Calculate Aging
- For each Overdue invoice, calculate Days Overdue = Report Date − Due Date (in calendar days).
- Assign to an aging bucket:
| Bucket | Days Overdue |
|---|---|
| 0–30 days | 1–30 |
| 31–60 days | 31–60 |
| 61–90 days | 61–90 |
| 90+ days | 91 and above |
- For Paid, Partially Paid, and Current invoices, leave Days Overdue and Bucket as "—".
Edge Case — EC3 (Multiple currencies): Process all rows. Group per-client totals by currency. Add note: "Cross-currency totals omitted — currencies cannot be aggregated without an exchange rate."
Edge Case — EC4 (Large list, 50+ invoices): Process all invoices. Add an executive summary card at the top of the output: total outstanding, bucket distribution (count and amount per bucket), top 3 overdue clients by balance.
Step 5: Generate Aging Summary Table
Build a table with all invoices, one row per invoice:
| Column | Source |
|---|---|
| Invoice # | From input |
| Client | From input |
| Invoice Date | From input |
| Due Date | From input or calculated (EC1) |
| Amount | From input |
| Paid | From input (0 if not provided) |
| Balance | Amount − Paid |
| Status | Assigned in Step 3 |
| Days Overdue | Calculated in Step 4 (or —) |
| Bucket | Assigned in Step 4 (or —) |
Sort the table: Overdue (90+ first) → Overdue (61–90) → Overdue (31–60) → Overdue (0–30) → Partially Paid → Current → Paid.
Step 6: Generate Per-Client Reconciliation
For each unique client in the input:
- Create a subsection:
### [Client Name] - List all invoices for that client in a table (Invoice #, Date, Amount, Paid, Balance, Status).
- EC2: If any invoice for this client is "Partially Paid" and the input includes a payment date field, add a "Days Since Payment" column (Report Date − payment date). If payment date is not in the input, add a note "(payment date not provided)" next to the Partially Paid balance row.
- Add a Total outstanding line at the bottom of each client section.
- If the client has no outstanding balance (all invoices Paid): include the subsection and note "(All invoices paid)".
Step 7: Generate Needs Action List
- Collect all Overdue and Partially Paid invoices.
- Sort by priority: highest days overdue first; within the same aging bucket, sort by largest balance first.
- Output as a numbered list:
- [Client] — [Balance] overdue [N] days (Bucket: [bucket])
- If no overdue invoices exist: note "✓ No overdue invoices."
Step 8: Assemble and Output
Combine the three sections into a single markdown document using the Output Format template below. Output language must match the user's input language: English uses English section headers; Russian uses Russian section headers (see Output Format).
Negative Cases
- Empty or whitespace input: Stop. Respond with bilingual prompt listing required fields (see Step 1).
- Bank statement detected: Stop. Redirect to monthly-close-checklist skill (see Step 1).
- Request to write reminder letters: Redirect to accounts-receivable-followup-writer skill (see Step 1).
Output Format
Single markdown document with three sections:
# Invoice & Payment Status Summary
**Report Date:** [date]
**Total Invoices:** [N] | **Total Outstanding:** [amount]
> [Executive summary card — only for 50+ invoices: bucket distribution + top 3 overdue clients]
> [Assumption note if due dates were calculated — only if EC1 applied]
---
## Aging Summary
| Invoice # | Client | Invoice Date | Due Date | Amount | Paid | Balance | Status | Days Overdue | Bucket |
|-----------|--------|--------------|----------|--------|------|---------|--------|--------------|--------|
| INV-001 | Acme Corp | 2026-04-01 | 2026-05-01 | $5,000 | $0 | $5,000 | Overdue | 52 | 31–60 days |
| INV-002 | Beta LLC | 2026-05-10 | 2026-06-10 | $2,000 | $2,000 | $0 | Paid | — | — |
---
## Per-Client Reconciliation
### Acme Corp
| Invoice # | Date | Amount | Paid | Balance | Status |
|-----------|------|--------|------|---------|--------|
| INV-001 | 2026-04-01 | $5,000 | $0 | $5,000 | Overdue 52d |
**Total outstanding: $5,000**
---
### Beta LLC
| Invoice # | Date | Amount | Paid | Balance | Status |
|-----------|------|--------|------|---------|--------|
| INV-002 | 2026-05-10 | $2,000 | $2,000 | $0 | Paid |
*(All invoices paid)*
---
## Needs Action
1. **Acme Corp — $5,000 overdue 52 days** (Bucket: 31–60 days)
Russian variant uses these section headers:
# Сводка по счетам и платежам## Таблица старения задолженности## Акт сверки по клиентам## Требует внимания
Output is copy-paste ready — no meta-commentary between sections. All notes (EC1 assumption, EC3 currency warning) appear in a blockquote at the top, not inline in tables.