# Invoice aging calculator

- Human page: https://happytails.ai/en/business-tools/invoice-aging-calculator/
- Markdown: https://happytails.ai/en/business-tools/invoice-aging-calculator.md
- Structured JSON: https://happytails.ai/agents/en/business-tools/invoice-aging-calculator/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `invoice-aging-calculator` |
| Category | business-tools |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Choose Single scenario to enter values in the fields. Choose Multiple records (JSON) to paste an advanced asset or record list. Guided numeric fields accept local decimal digits and separators without grouping; advanced JSON keeps strict ASCII syntax. Provide a JSON array with unique id, dueDate, total and paid, plus optional customer. Choose an as-of date. Unpaid balances are grouped as not overdue, 1 to 30, 31 to 60, 61 to 90 or at least 91 days overdue. Due today is not overdue. Paid invoices remain in the report but not unpaid bucket totals. Supply payments known as of that date. Negative balances, credit notes and duplicate identifiers are rejected. Use JSON up to 1000000 characters, 50000 values and 64 nesting levels. Period, invoice and production lists allow up to 2000 records; annual schedules allow 1 to 1000 years. Amounts use plain ASCII decimals up to 1000000000000 and zero to six selected decimal places. Quoted decimal strings preserve exact input. JSON and CSV preserve the full report and source, with exports bounded to 40 million characters and 500000 CSV records. Analysis runs locally with a 10-second timeout. No data is uploaded. Preview tables show the first 200 rows; copy returns the summary.

### Inputs and settings

No free-text input is required. Use the file inputs and/or settings below.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `entryMode` | Input method | select | "single" | Allowed: single, bulk |
| `id` | Invoice identifier | text | "INV-001" |  |
| `customer` | Customer | text | "" |  |
| `dueDate` | Due date | date | "2026-01-01" |  |
| `total` | Invoice total | text | "100.00" |  |
| `paid` | Paid to date | text | "25.00" |  |
| `bulkJSON` | Bulk JSON | textarea | "[\n  {\n    \"id\": \"INV-001\",\n    \"customer\": \"\",\n    \"dueDate\": \"2026-01-01\",\n    \"total\": \"100.00\",\n    \"paid\": \"25.00\"\n  }\n]" |  |
| `precision` | Decimal places | select | "2" | Allowed: 0, 1, 2, 3, 4, 5, 6 |
| `currency` | Currency label | text | "USD" |  |
| `asOf` | As-of date | date | "2026-01-31" |  |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Choose Single scenario to enter values in the fields. Choose Multiple records (JSON) to paste an advanced asset or record list. Guided numeric fields accept local decimal digits and separators without grouping; advanced JSON keeps strict ASCII syntax. Provide a JSON array with unique id, dueDate, total and paid, plus optional customer. Choose an as-of date. Unpaid balances are grouped as not overdue, 1 to 30, 31 to 60, 61 to 90 or at least 91 days overdue. Due today is not overdue. Paid invoices remain in the report but not unpaid bucket totals. Supply payments known as of that date. Negative balances, credit notes and duplicate identifiers are rejected. Use JSON up to 1000000 characters, 50000 values and 64 nesting levels. Period, invoice and production lists allow up to 2000 records; annual schedules allow 1 to 1000 years. Amounts use plain ASCII decimals up to 1000000000000 and zero to six selected decimal places. Quoted decimal strings preserve exact input. JSON and CSV preserve the full report and source, with exports bounded to 40 million characters and 500000 CSV records. Analysis runs locally with a 10-second timeout. No data is uploaded. Preview tables show the first 200 rows; copy returns the summary.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "invoice-aging-calculator",
  "category": "business-tools",
  "built": true,
  "requirements": "Choose Single scenario to enter values in the fields. Choose Multiple records (JSON) to paste an advanced asset or record list. Guided numeric fields accept local decimal digits and separators without grouping; advanced JSON keeps strict ASCII syntax. Provide a JSON array with unique id, dueDate, total and paid, plus optional customer. Choose an as-of date. Unpaid balances are grouped as not overdue, 1 to 30, 31 to 60, 61 to 90 or at least 91 days overdue. Due today is not overdue. Paid invoices remain in the report but not unpaid bucket totals. Supply payments known as of that date. Negative balances, credit notes and duplicate identifiers are rejected. Use JSON up to 1000000 characters, 50000 values and 64 nesting levels. Period, invoice and production lists allow up to 2000 records; annual schedules allow 1 to 1000 years. Amounts use plain ASCII decimals up to 1000000000000 and zero to six selected decimal places. Quoted decimal strings preserve exact input. JSON and CSV preserve the full report and source, with exports bounded to 40 million characters and 500000 CSV records. Analysis runs locally with a 10-second timeout. No data is uploaded. Preview tables show the first 200 rows; copy returns the summary.",
  "implementation": {
    "fields": [
      {
        "key": "entryMode",
        "label": "Input method",
        "value": "single",
        "type": "select",
        "values": [
          "single",
          "bulk"
        ],
        "labels": {
          "single": "Single scenario",
          "bulk": "Multiple records (JSON)"
        }
      },
      {
        "key": "id",
        "label": "Invoice identifier",
        "value": "INV-001",
        "type": "text",
        "maxLength": 120,
        "showWhen": {
          "entryMode": [
            "single"
          ]
        }
      },
      {
        "key": "customer",
        "label": "Customer",
        "value": "",
        "type": "text",
        "maxLength": 120,
        "showWhen": {
          "entryMode": [
            "single"
          ]
        }
      },
      {
        "key": "dueDate",
        "label": "Due date",
        "value": "2026-01-01",
        "type": "date",
        "maxLength": 120,
        "showWhen": {
          "entryMode": [
            "single"
          ]
        }
      },
      {
        "key": "total",
        "label": "Invoice total",
        "value": "100.00",
        "type": "text",
        "maxLength": 24,
        "inputMode": "decimal",
        "showWhen": {
          "entryMode": [
            "single"
          ]
        }
      },
      {
        "key": "paid",
        "label": "Paid to date",
        "value": "25.00",
        "type": "text",
        "maxLength": 24,
        "inputMode": "decimal",
        "showWhen": {
          "entryMode": [
            "single"
          ]
        }
      },
      {
        "key": "bulkJSON",
        "label": "Bulk JSON",
        "value": "[\n  {\n    \"id\": \"INV-001\",\n    \"customer\": \"\",\n    \"dueDate\": \"2026-01-01\",\n    \"total\": \"100.00\",\n    \"paid\": \"25.00\"\n  }\n]",
        "type": "textarea",
        "maxLength": 1000000,
        "showWhen": {
          "entryMode": [
            "bulk"
          ]
        }
      },
      {
        "key": "precision",
        "label": "Decimal places",
        "value": "2",
        "type": "select",
        "values": [
          "0",
          "1",
          "2",
          "3",
          "4",
          "5",
          "6"
        ]
      },
      {
        "key": "currency",
        "label": "Currency label",
        "value": "USD",
        "type": "text",
        "maxLength": 3
      },
      {
        "key": "asOf",
        "label": "As-of date",
        "value": "2026-01-31",
        "type": "date"
      }
    ],
    "input": false,
    "presentation": "metrics",
    "inputMaxLength": 1000000,
    "inputErrorCode": "FINANCE_SCHEDULES_INPUT",
    "note": "Choose Single scenario to enter values in the fields. Choose Multiple records (JSON) to paste an advanced asset or record list. Guided numeric fields accept local decimal digits and separators without grouping; advanced JSON keeps strict ASCII syntax. Provide a JSON array with unique id, dueDate, total and paid, plus optional customer. Choose an as-of date. Unpaid balances are grouped as not overdue, 1 to 30, 31 to 60, 61 to 90 or at least 91 days overdue. Due today is not overdue. Paid invoices remain in the report but not unpaid bucket totals. Supply payments known as of that date. Negative balances, credit notes and duplicate identifiers are rejected. Use JSON up to 1000000 characters, 50000 values and 64 nesting levels. Period, invoice and production lists allow up to 2000 records; annual schedules allow 1 to 1000 years. Amounts use plain ASCII decimals up to 1000000000000 and zero to six selected decimal places. Quoted decimal strings preserve exact input. JSON and CSV preserve the full report and source, with exports bounded to 40 million characters and 500000 CSV records. Analysis runs locally with a 10-second timeout. No data is uploaded. Preview tables show the first 200 rows; copy returns the summary.",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 1000000,
      "inputMode": "text",
      "label": "Your text",
      "placeholder": "Type or paste your input…",
      "help": "Up to 1,000,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Group unpaid invoice balances by overdue days as of a date you choose.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Invoice aging calculator

1. Choose Single scenario for guided fields, or Multiple records (JSON) for advanced inputs.
2. Choose the currency label and decimal places, then set the as-of date.
3. Review the report and download complete JSON or CSV.

## Useful next steps

- [Accounts receivable turnover calculator](https://happytails.ai/en/business-tools/accounts-receivable-turnover-calculator/) ([Markdown](https://happytails.ai/en/business-tools/accounts-receivable-turnover-calculator.md))

- [Cash conversion cycle calculator](https://happytails.ai/en/business-tools/cash-conversion-cycle-calculator/) ([Markdown](https://happytails.ai/en/business-tools/cash-conversion-cycle-calculator.md))

- [Working capital calculator](https://happytails.ai/en/business-tools/working-capital-calculator/) ([Markdown](https://happytails.ai/en/business-tools/working-capital-calculator.md))

## Enter values directly

Choose Single scenario to enter values in the fields. Choose Multiple records (JSON) to paste an advanced asset or record list. Guided numeric fields accept local decimal digits and separators without grouping; advanced JSON keeps strict ASCII syntax.

### Use the right inputs

Provide a JSON array with unique id, dueDate, total and paid, plus optional customer. Choose an as-of date. Unpaid balances are grouped as not overdue, 1 to 30, 31 to 60, 61 to 90 or at least 91 days overdue. Due today is not overdue. Paid invoices remain in the report but not unpaid bucket totals. Supply payments known as of that date. Negative balances, credit notes and duplicate identifiers are rejected.

### Keep the full record

Use JSON up to 1000000 characters, 50000 values and 64 nesting levels. Period, invoice and production lists allow up to 2000 records; annual schedules allow 1 to 1000 years. Amounts use plain ASCII decimals up to 1000000000000 and zero to six selected decimal places. Quoted decimal strings preserve exact input. JSON and CSV preserve the full report and source, with exports bounded to 40 million characters and 500000 CSV records. Analysis runs locally with a 10-second timeout. No data is uploaded. Preview tables show the first 200 rows; copy returns the summary. Reports preserve machine keys, source JSON and original content. CSV uses RFC 6901 JSON Pointer field paths and protects spreadsheet formula prefixes; import identifier columns as text.
