Recued
Menu
← Back to recipes

Issue an invoice

by recued-core v2 7 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 10 pinned recipes

Use Invoice Book in Recued for invoicing, receivables, getting paid, and freelance. It includes 17 built-in actions and 9 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 v2

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 v2

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 v2

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 v2
Show all 10 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 v2

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 v2

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 v2

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 v2
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 ?
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 ?
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 ?
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
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

About

Tags

pack:invoice-bookinvoicingreceivablesrecordsv2

Details

55 steps 9 configurable settings recipe_id: issue-invoice