Install
$ agentstack add skill-kirkruglov-claude-skills-kit-invoice-and-payment-tracker-summary ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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.
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:
> 1. [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.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: KirKruglov
- Source: KirKruglov/claude-skills-kit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.