Recued
Menu
← Back to recipes

Issue an invoice

by recued-core v6 66 views

Use “Issue an invoice” in Recued. Turn the entries you picked into an invoice: lines frozen at issue time, total computed once from minutes, and a balance that payments come off.

Complete workflow

Invoice Book 12 pinned recipes

Use Invoice Book in Recued for invoicing, receivables, getting paid, and freelance. It includes 18 built-in actions and 11 ready-to-run workflows. Actions that change data use Recued's approval controls.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Issue an invoice
This recipe

Use “Issue an invoice” in Recued. Turn the entries you picked into an invoice: lines frozen at issue time, total computed once from minutes, and a balance that payments come off.

pack:invoice-bookinvoicingreceivablesrecords
by recued-core pinned v6

Use “Record a payment” in Recued. Take a payment off an invoice's balance. Part payments are supported; overpayment is refused rather than absorbed, and the invoice settles when the balance reaches zero.

pack:invoice-bookinvoicingreceivablespayments
by recued-core pinned v6

Use “Who owes you” in Recued. Every open invoice with what is outstanding, which are overdue, and the oldest one still unpaid.

pack:invoice-bookinvoicingreceivablesoverdue
by recued-core pinned v4

Use “What each client owes” in Recued. One line per client: what is outstanding, across how many invoices, and how long the oldest has been due.

pack:invoice-bookinvoicingrecordsaggregate
by recued-core pinned v2

Use “Add something billable” in Recued. Anything you can charge for that is not logged time — a fixed fee, materials, a call-out. A negative amount is a credit.

pack:invoice-bookinvoicingbillablerecords
by recued-core pinned v4
Show all 12 recipes

Use “Delete a pending item” in Recued. Remove something from the pending list. If it came from logged hours, you choose whether those hours go back on the unbilled list or get deleted with it.

pack:invoice-bookinvoicingbillablerecords
by recued-core pinned v6

Use “Pull hours into pending items” in Recued. Turn unbilled time entries into pending billable items, priced at a rate you give.

pack:invoice-bookinvoicingbillablebridge
by recued-core pinned v6

Use “What could go on an invoice” in Recued. Everything billable and not yet invoiced — hours you pulled across and fees you typed in — each with its id, so you can choose.

pack:invoice-bookinvoicingbillablerecords
by recued-core pinned v3

Use “Carry a balance forward” in Recued. Close a part-paid invoice and issue a new one for exactly what is left, with the VAT carried in proportion. The new invoice takes no items.

pack:invoice-bookinvoicingreceivablesrecords
by recued-core pinned v6

Use “One invoice” in Recued. Open one invoice from the list that names it, and read everything recorded about that invoice on one page.

pack:invoice-bookinvoicedetailnavigation
by recued-core pinned v1

Use “One billable item” in Recued. Open one billable item from the list that names it, and read everything recorded about that billable item on one page.

pack:invoice-bookbillable-itemdetailnavigation
by recued-core pinned v1
View pack details, dependencies, and permissions →

Issuing

You pass the billable items you picked, a client, and your invoice reference. The items are read, frozen onto an invoice, and marked as invoiced so they cannot land on a second one.

⛔⛔ AN INVOICE IS A DOCUMENT, NOT A LIVE VIEW. The lines are copied onto the record at issue time and never recomputed. If an item is edited afterwards this invoice does not move, because you already sent it. Restating a number a client is holding is a discrepancy, not a correction.

⛔ AN ITEM ALREADY ON AN INVOICE IS REFUSED. Every picked item must still be pending; one that is not halts the whole run rather than quietly dropping out, because a silently shorter invoice is money you never bill and never notice.

⚠ The invoice carries the currency; items do not. An amount typed into a GBP invoice is GBP. If you are passing on something you bought in another currency, convert it when you record the item — the rate you used and the day you used it are your decision, and a pack that guessed one would be wrong in a way you could not see.

⛔ Items carry money, so nothing is priced here. A rate belongs where hours become items (pull-billable-hours) or where you typed the figure (add-billable-item). An invoice adds up decisions already made.

⛔⛔ VAT IS RECORDED, NEVER COMPUTED. You give the figure; the pack stores it and adds it to the net. It does not know a rate, a scheme, a registration status or a place of supply, and it will never derive one — a pack that got tax 95% right would be more dangerous than one that never claimed to.

⚠ Two ways to carry VAT, and you should pick one. Either give vat_amount here — the invoice then shows net, VAT and total separately, which is what a client expects to see — or put VAT in as an ordinary billable item and leave this at 0. Do both and you have charged it twice; the invoice will show a VAT line AND a VAT total, so it is visible rather than silent, but it is still wrong.

⚠ net is simply the sum of the lines. If you carried VAT as a line item then net includes it and is misnamed — the TOTAL is right either way, which is the number that matters to the person paying.

⚠ It does not send anything. No email, no payment provider, no reminder.

Credits, and the one thing an invoice cannot be

A negative billable item — a voucher, a discount — comes off the total like any other line. Nothing here treats it specially, and that is deliberate.

⛔ The total must be greater than zero. Not the lines — the document. Credits that cancel or exceed the charges make something this pack cannot express: an invoice that says we owe you. It would issue as open with nothing to collect, sit in your open list forever, and never settle, because record-payment reduces an outstanding balance and there is no negative one to reduce. Refusing at issue is the only point where that is still a typo rather than a stuck record.

How it works 55 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Process (55 steps)
■ invoice_ref trim
Trim whitespace from setting invoice ref
■ client_name trim
Trim whitespace from setting client name
■ contact_raw trim
Trim whitespace from setting client contact
■ client_contact lowercase
Convert contact raw to lowercase
■ currency_raw trim
Trim whitespace from setting currency
■ currency uppercase
Convert currency raw to uppercase
■ note trim
Trim whitespace from setting note
■ id_count count
Count items in setting item ids
■ inputs_valid all
Check if all conditions are true
⚠ inputs_guard guard
Stop if inputs valid equals
◆ existing recued-core.invoice-book.invoice.search
Search invoice on invoice book
■ existing_rows default
Apply default
■ existing_count count
Count items in existing rows
■ ref_taken compare
Check if existing count is greater than 0
⚠ ref_guard guard
Stop if ref taken equals
◆ picked recued-core.invoice-book.billable_item.get
Get billable item on invoice book
■ fetched map
Extract from each item
■ found_rows filter
Filter by condition
■ missing_rows filter
Filter by condition
■ found_count count
Count items in found rows
■ missing_count count
Count items in missing rows
■ all_found compare
Check if missing count equals 0
⚠ found_guard guard
Stop if all found equals
■ lines_raw map
Extract from each item
■ already_invoiced filter
Filter by condition
■ already_count count
Count items in already invoiced
■ all_pending compare
Check if already count equals 0
⚠ pending_guard guard
Stop if all pending equals
■ lines sort
Sort by date
■ line_count count
Count items in lines
■ net_unrounded sum
Sum values in
■ net_number round
Round net unrounded to 2 decimal places
■ vat_number round
Round setting vat amount to 2 decimal places
■ vat_not_negative compare
Check if vat number is at least 0
⚠ vat_guard guard
Stop if vat not negative equals
■ total_number math
Calculate: round(({{step.net_number}} + {{step.vat_number}}) * 100) / 100
■ total_positive compare
Check if total number is greater than 0
⚠ total_guard guard
Stop if total positive equals
■ net template
Generate text from a template
■ vat template
Generate text from a template
■ vat_note trim
Trim whitespace from setting vat note
■ total template
Generate text from a template
■ zero template
Generate text from a template
■ lines_json json_stringify
Apply json_stringify
■ now_iso date_add
Add 0 seconds to
■ issued_on date_format
Format as a date
■ due_iso date_add
Add setting payment terms days days to
■ due_on date_format
Format as a date
■ invoice_op default
Apply default
■ stamp_ops map
Extract from each item
■ ops flatten
Flatten nested lists in
◆ post recued-core.invoice-book.invoice.post
Post invoice on invoice book
■ stamped_count count
Count items in lines
■ table to_table
Format results as a data table
■ card to_summary
Format results as a summary card
▼
Output
summary card
table table
Settings 9 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

note setting =
currency setting = GBP
item ids setting =
vat note setting =
vat amount setting = 0
client name setting = [object Object]
invoice ref setting = [object Object]
client contact setting =
payment terms days setting = 30

Uses (3 operations)

Pack operation Search invoice on invoice book recued-core.invoice-book.invoice.search
Pack operation Get billable item on invoice book recued-core.invoice-book.billable_item.get
Pack operation Post invoice on invoice book recued-core.invoice-book.invoice.post

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

What it's allowed to do

Write Pack Invoice Book external change
Read: invoice.search · No approvalRead: billable_item.get · No approvalWrite: invoice.post · No approval

About

Tags

pack:invoice-bookinvoicingreceivablesrecordsv2

Details

55 steps 9 configurable settings recipe_id: issue-invoice