agentsclimarketplace

Invoice aging collection

Skill skillim-hub/skills/invoice-aging-collection

Production-grade AI agent skills & MCP servers for the Israeli market — סקילים

Install
npx -y skills add skillim-hub/skills --skill invoice-aging-collection

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 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

Track unpaid Israeli invoices, calculate aging, prepare Hebrew WhatsApp and email collection reminders, and choose escalation steps for small businesses, freelancers, and consumers. Use when a user needs invoice aging, collection alerts, Hebrew demand wording, payment-deadline logic, or evidence preparation for Israeli collection workflows. Do not use for issuing tax invoices, legal representation, or automated debt collection without human review.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

15.9 KB, ~4.1k tokens by cl100k_base, as published. Nobody here has run it

Invoice Aging & Collection Reminders

Purpose

Use this skill to manage overdue invoices in Israel, classify unpaid balances by aging bucket, generate Hebrew collection reminders for WhatsApp and email, and decide when to escalate to formal demand letters, small-claims preparation, or enforcement planning.

Treat the skill as an operational assistant, not as a substitute for licensed accounting or legal advice. Confirm current statutory rates, claim thresholds, filing fees, tax-invoice rules, and holiday calendars before production use. The 2026 validation pass confirmed Israel's standard VAT rate as 18%, the small-claims ceiling as ₪39,900, and the fixed-amount enforcement-file ceiling as ₪75,000; still recheck before filing or issuing tax-sensitive documents.

Core outcomes

  • Calculate a due date from an explicit contract term or Israeli payment-practice defaults.
  • Measure invoice age from the due date, not from the issue date.
  • Group unpaid invoices by client, age, amount, and escalation stage.
  • Generate professional Hebrew WhatsApp and email reminders with localized currency and dates.
  • Avoid reminders on Friday, Saturday, and configured Israeli holidays.
  • Preserve an evidence trail: invoice, contract, delivery confirmation, reminders, replies, postal receipts, and payment records.
  • Identify anti-patterns that can harm collection: aggressive language, invented interest rates, missing details, unverified recipients, and repeated spam-like messages.

Required inputs

FieldRequiredExampleNotes
invoice_idYesINV-2026-018Match the invoice exactly.
client_idYesclient-aviStable key for grouping.
client_nameYesאבי כהן בע"מUse the legal or business name.
issue_dateYes12/02/2026Prefer DD/MM/YYYY for Israeli users.
amountYes4500.00Store numeric amount, format as ₪ only in output.
currencyYesILSDefault to ILS; reject unsupported currencies unless explicitly enabled.
due_datePreferred31/03/2026Use explicit contract terms when available.
payment_terms_daysOptional45Use only when an explicit due date is missing.
submitted_dateOptional13/02/2026Relevant for some statutory payment calculations.
paid_dateOptional20/04/2026Marks invoice paid.
partial_paymentsOptional[{date, amount}]Subtract from outstanding balance.
emailChannel[email protected]Required for email reminders.
whatsappChannel+972501234567Required for WhatsApp reminders.
mailing_addressEscalationרחוב...Needed for registered mail and claim preparation.

Tax and filing boundary rules

This skill tracks collection status; it does not issue tax invoices, calculate VAT, request Israel Invoice allocation numbers, or file court/enforcement documents. Apply these guardrails before using reminders beside official documents:

  1. Treat invoice amounts as the amount already issued by the bookkeeping system.
  2. Do not add VAT, interest, linkage, collection costs, or legal fees unless the source document and reviewer approve them.
  3. For Israeli tax invoices, verify whether the bookkeeping system must request an Israel Invoice allocation number before relying on the invoice for input-VAT purposes.
  4. For claim preparation, verify the current small-claims ceiling, court filing fee, and enforcement-file fee on the live government page on the filing date.
  5. Keep the reminder ledger separate from the official accounting ledger unless an accountant approves the integration.

Due-date decision rules

  1. Use a signed agreement, purchase order, or written payment term when it exists and is enforceable.
  2. Use the invoice due date when the invoice reflects the agreed term and was delivered to the client.
  3. Use a statutory/default calculation only when no agreed term is available.
  4. Use the due date as the aging baseline.
  5. Never measure escalation from the invoice issue date when a later due date exists.
  6. Never invent late-payment interest. State that statutory late-payment interest may apply and verify the current rate.
flowchart TD
    A[Start with an unpaid invoice] --> B{Written payment term exists?}
    B -->|Yes| C[Use agreed due date]
    B -->|No| D{Invoice has a clear due date?}
    D -->|Yes| E[Use invoice due date if delivered]
    D -->|No| F{Debtor type known?}
    F -->|Private business| G[Use private-business default calculation]
    F -->|Government or municipality| H[Use public-sector statutory calculation]
    F -->|Construction or engineering| I[Use longer statutory cap rules]
    F -->|Unknown| J[Flag for manual review]
    C --> K[Calculate age from due date]
    E --> K
    G --> K
    H --> K
    I --> K
    J --> L[Do not send automated reminder]

Aging buckets and escalation stages

Age from due dateBucketDefault actionChannelHuman review
< 0Not dueNo reminderNoneNo
0-29CurrentMonitorNoneNo
30-4430 dayFriendly reminderWhatsAppRecommended
45-5945 dayFollow-up reminderWhatsAppRecommended
60-7460 dayFormal payment requestEmailRequired
75-8975 dayWarning before escalationEmail + WhatsApp summaryRequired
90+90+Final demand / claim preparationEmail + registered mailRequired

Escalation decision tree

flowchart TD
    A[Invoice unpaid after due date] --> B{Outstanding balance > 0?}
    B -->|No| Z[Close invoice and archive evidence]
    B -->|Yes| C{Dispute raised?}
    C -->|Yes| D[Pause escalation and classify dispute]
    D --> E{Dispute is valid?}
    E -->|Yes| F[Correct invoice, issue credit, or negotiate]
    E -->|No| G[Send factual response and continue schedule]
    C -->|No| H{Age bucket}
    H -->|30-44| I[Friendly WhatsApp]
    H -->|45-59| J[Second WhatsApp with bank details]
    H -->|60-74| K[Formal email with invoice copy]
    H -->|75-89| L[Warning email with 14-day deadline]
    H -->|90+| M{Amount and evidence adequate?}
    M -->|Yes| N[Prepare demand letter and claim file]
    M -->|No| O[Collect missing evidence before action]

Reminder generation rules

Use Hebrew, direct but respectful wording. Include only verified details.

Always include:

  • Client name.
  • Invoice number.
  • Invoice date.
  • Outstanding amount after partial payments.
  • Due date.
  • Payment instructions when relevant.
  • A clear request for a status update or payment.
  • A record ID for internal tracking.

Never include:

  • Threats, humiliation, or public-shaming language.
  • Unverified interest rates.
  • Legal claims that have not been reviewed.
  • Personal data irrelevant to the debt.
  • Multiple reminders on the same day for the same invoice unless the client requested a duplicate.

Hebrew WhatsApp templates

Friendly reminder, 30 days overdue

היי {client_name},
רציתי לוודא שקיבלת את חשבונית {invoice_id} מתאריך {issue_date} על סך {amount}.
מועד התשלום היה {due_date}, ונשארה יתרה פתוחה של {outstanding_amount}.
אשמח לעדכון לגבי מועד התשלום.
תודה,
{business_name}

Follow-up reminder, 45 days overdue

שלום {client_name},
תזכורת נוספת לגבי חשבונית {invoice_id} שטרם שולמה.
יתרה לתשלום: {outstanding_amount}
מועד פירעון: {due_date}

פרטי תשלום:
{payment_instructions}

נא לעדכן עד {response_deadline}.
בברכה,
{business_name}

Hebrew email templates

Formal payment request, 60 days overdue

Subject:

דרישת תשלום עבור חשבונית {invoice_id}

Body:

לכבוד {client_name},

הנדון: דרישת תשלום עבור חשבונית {invoice_id}

על פי הרישומים, חשבונית {invoice_id} מתאריך {issue_date} על סך {amount}
טרם שולמה במלואה. מועד הפירעון היה {due_date}, והיתרה הפתוחה היא {outstanding_amount}.

נא להסדיר את התשלום בתוך 7 ימים או להעביר אסמכתה לתשלום שבוצע.

פרטי תשלום:
{payment_instructions}

אם קיימת מחלוקת עניינית לגבי החשבונית, נא לפרט אותה בכתב כדי שניתן יהיה לבדוק את הנושא.

בברכה,
{business_name}

Warning before escalation, 75 days overdue

Subject:

התראה לפני המשך טיפול בגביית חשבונית {invoice_id}

Body:

לכבוד {client_name},

למרות פניות קודמות, חשבונית {invoice_id} מתאריך {issue_date} נותרה פתוחה.
יתרת החוב: {outstanding_amount}
מועד הפירעון: {due_date}

נא להסדיר את התשלום בתוך 14 ימים, עד {response_deadline}.
בהיעדר תשלום או הסדר כתוב, ייבחנו צעדים נוספים לגביית החוב, לרבות הכנת מכתב דרישה והגשת תביעה מתאימה.

פרטי תשלום:
{payment_instructions}

בברכה,
{business_name}

Handling common edge cases

Partial payment received

Subtract verified payments from the principal. Send reminders only for the remaining balance. Mention the payment received without creating blame.

Example:

תודה על התשלום החלקי שהתקבל. לפי הרישומים נותרה יתרה של {outstanding_amount} עבור חשבונית {invoice_id}.

Client disputes the invoice

Pause automatic escalation. Classify the dispute:

Dispute typeAction
Service not deliveredCollect delivery proof before sending another demand.
Amount mismatchReconcile contract, quote, delivery notes, and invoice.
Wrong legal entityReissue or correct documents after accounting review.
Cash-flow delay onlyOffer a dated payment arrangement in writing.
No specific disputeContinue escalation with a factual record.

Client promises payment

Record the promised date. Suspend reminders until the next business day after the promised date. Resume escalation if no payment or proof arrives.

Incorrect recipient

Stop sending immediately. Correct contact details. Document the correction. Do not send invoice data to unverified recipients.

Consumer debtor

Use more restrained wording. Avoid repeated WhatsApp nudges. Preserve privacy. Consider a formal written notice sooner than informal messaging when the relationship is sensitive.

Public-sector debtor

Confirm statutory deadlines and invoice submission evidence. Escalate through the contract manager or procurement contact before external legal steps.

Several invoices for one client

Aggregate totals in internal reporting, but identify each invoice separately in messages. Do not hide invoice-level detail behind a single total.

Production workflow

sequenceDiagram
    participant User as Business user
    participant Data as Invoice ledger
    participant Engine as Aging engine
    participant Review as Human review
    participant Channel as WhatsApp/Email
    participant Evidence as Evidence file

    User->>Data: Import open invoices
    Data->>Engine: Normalize dates and amounts
    Engine->>Engine: Calculate due dates, ages, buckets
    Engine->>Review: Present reminders requiring approval
    Review->>Channel: Send approved message only
    Channel->>Evidence: Store timestamp, content, recipient, result
    Evidence->>Engine: Update next action date

Quality gates before sending

  • Verify the invoice is unpaid.
  • Verify the amount and partial payments.
  • Verify the recipient and channel.
  • Verify the date is not Friday, Saturday, or configured holiday.
  • Verify the message stage matches the current age.
  • Verify a human approved formal, warning, and final notices.
  • Attach invoice copies only to the correct recipient.
  • Save a copy of each message and delivery result.

Troubleshooting quick table

SymptomLikely causeFix
Invoice appears 60+ days overdue too earlyAging measured from issue dateRecalculate from due date.
Reminder sent on holidayHoliday calendar missingAdd the holiday to blocked_dates.
WhatsApp message rejectedNumber not in E.164 format or template not approvedNormalize to +972... and use approved templates.
Email bouncedIncorrect address or SPF/DKIM issueCorrect address and verify domain authentication.
Client claims no invoice receivedNo delivery evidenceResend invoice and restart from confirmed receipt when appropriate.
Legal warning sounds too aggressiveTemplate edited manuallyReplace with factual wording and remove threats.

Anti-patterns

  • Sending every overdue client the same final warning without checking disputes.
  • Saying "legal action starts tomorrow" when no actual decision exists.
  • Quoting Bank of Israel policy interest as if it were statutory late-payment interest.
  • Mixing court-awarded interest with pre-lawsuit late-payment interest.
  • Sending invoice attachments over WhatsApp to unverified phone numbers.
  • Scheduling reminders during Shabbat or holidays.
  • Treating a promise to pay as payment.
  • Ignoring small partial payments and demanding the original full amount.
  • Deleting reminder history after payment.
  • Using sarcasm, shame, or public pressure.

Production checklist

  • Use a single source of truth for invoice status.
  • Store dates as ISO internally and display DD/MM/YYYY to Israeli users.
  • Store amounts as decimals, not floats.
  • Require human approval for formal and legal-stage messages.
  • Keep per-message evidence: content, recipient, channel, timestamp, result.
  • Keep proof of invoice delivery.
  • Keep proof of goods or services delivered.
  • Maintain a configured list of Israeli holidays.
  • Add rate limiting for WhatsApp and email.
  • Add a stop flag for disputed invoices.
  • Recheck current Israeli filing thresholds and fees before legal escalation.
  • Review data-retention and privacy requirements before storing personal data.
  • Back up the collection ledger.
  • Test all CLI commands with sample data.
  • Run the pytest suite before release.

Minimal JSON ledger

{
  "business": {
    "name": "סטודיו דוגמה",
    "payment_instructions": "בנק 12, סניף 345, חשבון 67890"
  },
  "clients": [
    {
      "client_id": "c-100",
      "name": "לקוח לדוגמה בע\"מ",
      "email": "[email protected]",
      "whatsapp": "+972501234567",
      "mailing_address": "רחוב הדוגמה 1, תל אביב"
    }
  ],
  "invoices": [
    {
      "invoice_id": "INV-100",
      "client_id": "c-100",
      "issue_date": "01/01/2026",
      "due_date": "31/01/2026",
      "amount": "2500.00",
      "currency": "ILS",
      "status": "open",
      "partial_payments": []
    }
  ],
  "blocked_dates": ["23/04/2026"]
}

CLI quick start

python scripts/invoice-aging-collection-cli.py sample-data --out sample-ledger.json
python scripts/invoice-aging-collection-cli.py age sample-ledger.json --as-of 15/04/2026
python scripts/invoice-aging-collection-cli.py reminders sample-ledger.json --as-of 15/04/2026 --channel whatsapp
python scripts/invoice-aging-collection-cli.py render sample-ledger.json --invoice-id INV-100 --stage friendly_whatsapp

See references/workflow-guide.md, references/troubleshooting.md, and references/test-scenarios.md for detailed operational guidance.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.