export const templates = { invoice: { name: "Invoice", description: "Professional invoice with line items, taxes, and payment details", fields: [ { name: "invoiceNumber", type: "string", required: true, description: "Invoice number" }, { name: "date", type: "string", required: true, description: "Invoice date (YYYY-MM-DD)" }, { name: "dueDate", type: "string", required: false, description: "Due date" }, { name: "from", type: "object", required: true, description: "Sender: {name, address?, email?, phone?, vatId?}" }, { name: "to", type: "object", required: true, description: "Recipient: {name, address?, email?, vatId?}" }, { name: "items", type: "array", required: true, description: "Line items: [{description, quantity, unitPrice, taxRate?}]" }, { name: "currency", type: "string", required: false, description: "Currency symbol (default: €)" }, { name: "notes", type: "string", required: false, description: "Additional notes" }, { name: "paymentDetails", type: "string", required: false, description: "Bank/payment info" }, ], render: renderInvoice, }, receipt: { name: "Receipt", description: "Simple receipt for payments received", fields: [ { name: "receiptNumber", type: "string", required: true, description: "Receipt number" }, { name: "date", type: "string", required: true, description: "Date" }, { name: "from", type: "object", required: true, description: "Business: {name, address?}" }, { name: "to", type: "object", required: false, description: "Customer: {name, email?}" }, { name: "items", type: "array", required: true, description: "Items: [{description, amount}]" }, { name: "currency", type: "string", required: false, description: "Currency symbol" }, { name: "paymentMethod", type: "string", required: false, description: "Payment method" }, ], render: renderReceipt, }, }; function esc(s) { return String(s || "") .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """); } function renderInvoice(d) { const cur = esc(d.currency || "€"); const items = d.items || []; let subtotal = 0; let totalTax = 0; const rows = items .map((item) => { const qty = Number(item.quantity) || 1; const price = Number(item.unitPrice) || 0; const taxRate = Number(item.taxRate) || 0; const lineTotal = qty * price; const lineTax = lineTotal * (taxRate / 100); subtotal += lineTotal; totalTax += lineTax; return `
${esc(from.name)}
${from.address ? `${esc(from.address).replace(/\n/g, "
")}
${esc(from.email)}
` : ""} ${from.vatId ? `VAT: ${esc(from.vatId)}
` : ""}${esc(to.name)}
${to.address ? `${esc(to.address).replace(/\n/g, "
")}
${esc(to.email)}
` : ""} ${to.vatId ? `VAT: ${esc(to.vatId)}
` : ""}| Description | Qty | Price | Tax | Total |
|---|
| TOTAL | ${cur}${total.toFixed(2)} |