{
  "spec": "quick-html/v0",
  "id": "invoice",
  "version": "0.2.0",
  "name": "Invoice",
  "description": "Clean, minimal A4 invoice: seller and buyer blocks, line items with quantities and unit prices, VAT and totals, payment details. Suited to freelancers, studios and small businesses in any currency.",
  "useWhen": [
    "invoice",
    "bill a client",
    "factuur",
    "rechnung",
    "facture",
    "billing",
    "payment request"
  ],
  "format": "printable",
  "theme": "business-finance",
  "audience": [
    "freelance",
    "small-business",
    "finance"
  ],
  "tags": [
    "billing",
    "freelance",
    "small-business",
    "vat"
  ],
  "language": "en",
  "page": {
    "size": "A4",
    "orientation": "portrait"
  },
  "modules": [
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Invoice 2026-0142 — Studio Noord",
      "notes": "Browser tab title; used as the download filename."
    },
    {
      "name": "seller-name",
      "type": "text",
      "required": true,
      "example": "Studio Noord"
    },
    {
      "name": "seller-details",
      "type": "html",
      "required": true,
      "example": "<p>Prinsengracht 412, 1016 JC Amsterdam</p><p>KvK 87614203 · VAT NL864392017B01</p>",
      "notes": "2–4 short <p> lines: address, contact, registration/VAT numbers."
    },
    {
      "name": "invoice-number",
      "type": "text",
      "required": true,
      "example": "2026-0142"
    },
    {
      "name": "invoice-date",
      "type": "date",
      "required": true,
      "example": "13 Aug 2026"
    },
    {
      "name": "due-date",
      "type": "date",
      "required": true,
      "example": "27 Aug 2026"
    },
    {
      "name": "buyer-name",
      "type": "text",
      "required": true,
      "example": "Van Dijk Interieur B.V."
    },
    {
      "name": "buyer-details",
      "type": "html",
      "required": true,
      "example": "<p>t.a.v. Sanne van Dijk</p><p>Oudegracht 155, 3511 AL Utrecht</p>",
      "notes": "1–3 short <p> lines."
    },
    {
      "name": "subtotal",
      "type": "text",
      "required": true,
      "example": "€ 5.960,00"
    },
    {
      "name": "vat-label",
      "type": "text",
      "required": true,
      "example": "VAT 21%",
      "notes": "Label including the rate actually applied."
    },
    {
      "name": "vat-amount",
      "type": "text",
      "required": true,
      "example": "€ 1.251,60"
    },
    {
      "name": "total",
      "type": "text",
      "required": true,
      "example": "€ 7.211,60"
    },
    {
      "name": "payment-details",
      "type": "html",
      "required": true,
      "example": "<p>Please pay within 14 days to NL91 INGB 0004 3382 71</p>",
      "notes": "IBAN/account, payment term, reference."
    },
    {
      "name": "invoice-notes",
      "type": "html",
      "required": false,
      "example": "<p>Thank you for working with us.</p>",
      "notes": "Inside the notes optional block."
    },
    {
      "name": "footer-line",
      "type": "text",
      "required": false,
      "example": "Studio Noord · Amsterdam · studionoord.nl"
    }
  ],
  "repeats": [
    {
      "name": "item",
      "description": "One row per invoice line item.",
      "min": 1,
      "max": 30,
      "slots": [
        {
          "name": "item-description",
          "type": "text",
          "required": true,
          "example": "Brand identity — logo, colour system, typography",
          "notes": "Keep under ~90 characters."
        },
        {
          "name": "item-qty",
          "type": "text",
          "required": true,
          "example": "24",
          "notes": "Number, optionally with a unit the buyer understands (e.g. '24' or '24 hrs')."
        },
        {
          "name": "item-unit-price",
          "type": "text",
          "required": true,
          "example": "€ 95,00"
        },
        {
          "name": "item-amount",
          "type": "text",
          "required": true,
          "example": "€ 2.280,00"
        }
      ]
    }
  ],
  "optionals": [
    {
      "name": "notes",
      "description": "Free-form notes block next to payment details (delivery terms, thanks)."
    }
  ],
  "changelog": [
    {
      "version": "0.2.0",
      "date": "2026-08-14",
      "notes": "Taxonomy: category split into format + theme; tags normalised (see docs/TAXONOMY.md)."
    },
    {
      "version": "0.1.0",
      "date": "2026-08-13",
      "notes": "Initial release: A4 invoice with line-item repeat, VAT and totals."
    }
  ],
  "agentInstructions": "One 'item' row per line item (remove the data-example rows — they are preview content only). COMPUTE ALL NUMBERS YOURSELF and double-check the arithmetic: item-amount = qty × unit price; subtotal = sum of item amounts; vat-amount = subtotal × the VAT rate; total = subtotal + vat-amount. Use the VAT rate the user states; if none is stated, ask or use the rate that applies in the user's country and say so in your reply. Format all money values exactly like the placeholders — same currency symbol, thousands separator and decimals throughout (adapt the format to the user's currency/locale, e.g. '€ 1.234,56' or '$1,234.56'), and never mix formats. Update vat-label to the applied rate ('VAT 21%', 'BTW 21%', 'Sales tax 8.875%'). Dates like '13 Aug 2026'; due-date = invoice-date + the user's payment term (default 14 days). Repeat the invoice number inside payment-details if a payment reference is mentioned. Keep the notes optional block only when there is something real to say; otherwise remove it. If the user's business details (IBAN, VAT no., address) are unknown, leave clearly recognizable placeholders like [YOUR IBAN] and tell the user to fill them via the built-in Edit button.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
