Skip to content

Invoicing

Invoicing writes your invoices and quotes inside schakl., out of the work that is already recorded: approved hours, subscription periods and domain renewals. You never retype your month into a separate billing package, and what has been billed once cannot land on a second invoice.

The invoice list with the tiles that filter it: outstanding, overdue, drafts and paid this year.

The main menu carries Facturatie (Invoicing) with Facturen (Invoices, which has tabs for Facturen and Offertes / Quotes) and Nog te factureren (To invoice). What you configure once lives at Instellingen → Facturatie (Settings → Invoicing), in the sections Bedrijfsgegevens (company details), Btw-tarieven (VAT rates), Producten en diensten, Sjablonen (templates), Nummering, Bestaande facturen overnemen (bringing existing invoices in), Standaardwaarden (defaults), Openbare factuurlink (public invoice link), Automatisch factureren, Betalingsherinneringen (payment reminders) and Boekhouding (accounting). Every client page also carries a Facturatie panel with that client’s most recent invoices and quotes.

Invoicing is a licensed module. Once a licence expires it goes read-only: viewing, printing and exporting keep working, creating and editing do not.

  1. Bedrijfsgegevens: name, address, VAT number, chamber-of-commerce number, IBAN and the rest. This prints on every document and feeds the UBL export. While Naam (name) is empty, schakl refuses to issue an invoice at all.

  2. Btw-tarieven: set your Belastingland (tax country); while the list is empty schakl seeds suggestions from it (for NL 21%, 9%, 0%, exempt and reverse charge). Per rate you set the percentage, the category, a label per language, an optional ledger code and whether it is the default. Vrijgesteld (exempt) and Verlegd (reverse charge) charge nothing whatever percentage is entered.

  3. Nummering: Factuurnummerformaat (default {year}-{seq:4}) and Offertenummerformaat (default Q{year}-{seq:4}), using the tokens {year}, {yy}, {seq} and {seq:N} for zero-padding. The next number and “Nummering elk jaar opnieuw beginnen” (restart numbering yearly) live here too.

  4. Standaardwaarden: payment term (14 days), quote validity (30 days), a default VAT rate, a default template, a default hourly rate and “Prijzen inclusief btw” (tax-inclusive prices, off). Optionally fill Producten en diensten with standing lines you drop onto a document in one click. The same list is what a subscription, recurring or one-off, names as the product it sells; see Subscriptions.

Nieuwe factuur (New invoice) asks for the client, contact, invoice date, due date, reference, currency, document language and template. Below that sits the line editor, in four sections that mirror the bands the printed document uses: Uren (hours), Abonnementen (subscriptions), Domeinen (domains) and Diensten en producten (services & products).

The first three are picked, not typed: each has a button with a count beside it (“Uren kiezen”, “Periodes kiezen”, “Verlengingen kiezen”). The picker shows what this client still has outstanding, and the line arrives priced and dated and remembers what it bills. Periods already on another document are still listed, labelled al gefactureerd (already invoiced): answering by omission is exactly how a duplicate happens. Only Diensten en producten has a free unit field. VAT is calculated and rounded once per rate group across the whole document rather than per line.

The document heads every kind of line under its own band, even when only one kind is on it: the heading says what is being paid for. A period prints as 01-01-2025 - 01-01-2026, whether you picked it yourself or the nightly run drafted it. Three more things come along by themselves:

  • The name on the invoice. A client has the name everyone knows it by and, where it differs, a Naam op de factuur (name on the invoice, on the client under Factuurgegevens / billing details), such as the B.V. or the holding company. Invoices, quotes and the UBL export use that second name; everywhere else keeps the ordinary one. Empty means: the same name.
  • Your own fields on paper. A custom field on an invoice, quote or subscription set to Op het document tonen (show on the document) is printed: an invoice’s or quote’s own under the document details, a subscription’s on every invoice line that subscription raises (“Hosting Pro · Website: client.nl”). See Custom fields.
  • A subscription’s notes. When the standard subscription (or the subscription itself) is set to “Op elke factuur afdrukken” (print on every invoice), its notes print under the lines, with variables such as {{company_name}} and {{amount}} already filled in. Pick the period by hand and the editor adds the note once under the Notes field.
  1. Definitief maken (Issue) allocates the number, freezes the client’s address block and sets the due date. From here the amounts are fixed.
  2. Versturen (Send) opens a dialog with Aan (to), Bericht (optional message) and a “Per e-mail versturen” toggle. Untick it and the document is only marked as sent.
  3. Betaling registreren (Register payment) asks for the payment date, amount, method (bank transfer, cash, card or other) and a note. Partial payments are fine: outstanding is total minus paid minus credited.

An issued invoice: the amount is fixed, the payments sit below it, and you correct with a credit note.

The ⋯ menu also holds Herinnering sturen (send reminder), Crediteren (create credit note), Factuur annuleren (cancel), Verwijderen (delete), PDF downloaden, Afdrukken / PDF (print) and UBL downloaden. Vervallen (overdue) is derived rather than set: open, past its due date, and something still outstanding.

Quotes use the same editor, VAT and templates, minus the pickers (a quote bills no hours and claims no period yet), on their own route: Definitief maken, Versturen, then Accepteren or Afwijzen, and finally Omzetten naar factuur (convert to invoice), where the lines carry over at the prices and VAT the quote was accepted at. An open quote expires by itself on its “Geldig tot” (valid until) date. Delete the resulting invoice while it is still a draft and the quote returns to accepted.

A quote is the same document with a different lifecycle; converting carries the prices it was accepted at.

You do not edit an issued invoice, you credit it. Crediteren hands you a draft credit note with the same lines at negative amounts; to take back only part of it, edit that draft before issuing. A credit note covering the original in full releases the hours, subscription months and domain years it billed, so you can invoice them again; a partial credit releases nothing, because nothing on the line says which part of the work it concerned. If the invoice was already paid, an amount is left over that goes back to the client, and the button there reads Terugbetaling registreren (register refund).

Factuur annuleren (cancel invoice) first asks what should happen to the invoice:

  • Tegenboeken met een creditfactuur (reverse with a credit note), for an invoice the client has received. schakl. creates and issues a credit note with the same lines at negative amounts in one go; the invoice stays on record as credited, the billed work comes free again, and you land on the credit note, ready to send. When the invoice was sent, this choice is already selected.
  • Alleen annuleren (cancel only), for an invoice nobody received. The status becomes Geannuleerd (cancelled), nothing is reversed, and the number stays in the sequence.

A cancellation exists only in schakl.; your client’s books and your own accounting package follow a credit note. That is why it is the suggested route.

Deleting an issued invoice is possible too, but only with an extra step: the dialog lists what will happen, and the red button only works once you tick “Ik begrijp dat nummer … definitief verdwijnt” (I understand that number … disappears for good). The number leaves the sequence, and a gap in your invoice numbering is something you must be able to explain to the tax authority. Payments, a credit note, a booking in the accounting package or an open online payment block the delete; afterwards only the activity log still records that the number existed.

An open invoice carries an Online betalingen (online payments) card. As staff you press Betaallink to create a payment page for the outstanding amount and pass it on with Betaalpagina openen or Link kopiëren; the client sees Nu betalen (pay now) in the same place. The state follows along (waiting, processing, authorised, paid, failed, expired, cancelled) and as soon as the provider confirms, the payment is booked onto the invoice by itself.

Every issued invoice has its own public link: a web address on which whoever holds it can view, download and pay exactly that one invoice, without an account. The QR code on the document and the link in the invoice mail and the reminder point there; a client with a portal login can also pay from the portal. None of them ever points at the provider’s own checkout: that expires within a quarter of an hour while the invoice does not, and two valid ways into one debt produce double payments. The button in the mail appears only when a provider is connected and the invoice is still collectable; with no provider connected, exactly the mail that went out before goes out now.

The link is on by default and switched off under Instellingen → Facturatie → Openbare factuurlink. That works retroactively: links already printed or mailed stop working as well. In the template you can take the address itself off the paper and keep only the QR code. A payer returning from a successful payment gets a thank-you page with the amount; a failed, expired or cancelled attempt is named as such.

You connect your own account at Instellingen → Mollie: Account toevoegen, then a name, an optional supplier, and your API key from the Mollie dashboard. Live or test is derived from the key itself, and Betaalmethoden lists what Mollie itself reports back. A test payment runs the whole loop exactly like a real one: the invoice is marked paid and the payment row carries “(test)” in its note, so you can see it came from the test key. See also Mollie.

Under Instellingen → Facturatie you decide how far schakl takes a recurring invoice on its own once a subscription period or domain renewal ends: Uit (off), Concept klaarzetten (prepare a draft, the default), Klaarzetten en definitief maken (prepare and issue) or Klaarzetten, definitief maken en mailen (prepare, issue and e-mail). Each level contains the previous one, and a single subscription or domain may deviate through “Instelling van de organisatie volgen” (follow the organisation setting) in its own form.

For reminders, switch on “Automatische herinneringen versturen” and fill in “Dagen na vervaldatum” (days after the due date, comma separated, 7, 14, 30 by default). A daily check mails at most once per step; per invoice you can set “Herinneringen pauzeren” (pause reminders), and “Herinnering sturen” pushes one by hand. An e-mail transport has to be configured. The three mails your client reads (invoice, quote, reminder) are rewritable per language under Instellingen → E-mail.

Instellingen → Facturatie → Sjablonen → Sjabloon bewerken opens an editor with a live preview beside it. Ontwerp (design) picks Klassiek, Briefpapier (letterhead) or Eigen HTML, plus accent colour and logo. Indeling (layout) switches blocks on or off and reorders them, from logo and sender to lines, VAT breakdown, QR code and footer, each field with its own label; mandatory blocks such as the number, the date and the VAT breakdown may be moved but never switched off. Teksten holds the intro, payment instructions and footer per language, and Code the HTML (Jinja) and CSS of a custom template, which runs sandboxed with no network access. The preview on your screen is exactly the page that prints as PDF.

Facturatie → Nog te factureren shows everything still open: four tiles (Uren, Abonnementen, Domeinen, Totaal nog te factureren) that always count the whole picture, over a list you filter by Soort (kind) and group. Hours group by day, week, month, year, client, project or employee; the recurring half by client, month or kind. Group by client and each group carries a Factuur maken (create invoice) link.

A subscription or domain whose invoice date has passed is listed here too: that is exactly what the nightly run bills at its next pass, and a backlog of several periods is caught up in one run rather than one period a night. A domain renewal without a price (the extension has no rate yet and the domain no price of its own) does not drop out: it is listed with the label geen prijs (no price) at zero, with a line above saying how many renewals are waiting on a price.

To invoice does the same for the whole agency, grouped by day, week, month, client, project or employee.

Every issued invoice downloads as UBL 2.1 for Exact Online, SnelStart, Moneybird or e-Boekhouden. If you work in SnelStart it can also run live: that integration puts clients and invoices into your administration itself and brings back what has been paid (see SnelStart). A client with a portal login sees Mijn facturen (my invoices): only the issued invoices of their own companies, with the same PDF you send. Drafts do not exist for them, and quotes stay internal.

Coming from Moneybird, SnelStart, e-Boekhouden or a spreadsheet, you bring your old invoices along, so a client’s history and the outstanding balance are right from day one. It happens in one place: Instellingen → Facturatie → Bestaande facturen overnemen (bringing existing invoices in), in three steps.

  1. Import the spreadsheet. One row per invoice: number, client, invoice date and totals, plus the payment state if you have it. It is the ordinary import wizard: you map the columns and the file is checked before anything is written. The totals are the fact, so they are taken as stated and never recomputed; subtotal plus VAT must still equal the total to the cent. An amount paid needs a date and becomes an ordinary payment row. An imported invoice sends no notifications, and only gets reminders when the file says so per row.

  2. Attach the original PDFs. A zip of the PDFs your clients received at the time, each named after the invoice number (2024-0012.pdf). Each file is attached to the imported invoice with that number; separators, spaces and case do not count. The report names what matched and what did not, and an invoice that already holds an original is skipped. A single PDF can also go on the invoice itself, in the Origineel (original) card.

  3. Move the numbering on. Under Nummering, set the next invoice number past the highest number you brought in, so the first new invoice does not collide.

An imported invoice sits among the others on the invoice list, marked with where it came from. With an original attached, the invoice page shows that PDF, and the public link and the download serve exactly those bytes; the Origineel card names the file and its fingerprint (SHA-256). Without one, schakl. shows a document built from the imported totals. The same import keeps working later: a paid amount can only go up in a new file, so “these forty are paid” is one file.

Nearly everything below defaults to the Beheerder (Administrator) role only. An Eigenaar (Owner) always holds everything, and a Medewerker (Member) holds none of it until you grant it under Instellingen → Rollen (Settings → Roles). Two permissions are the exception: invoicing.invoice.read and invoicing.payment.link also default to the Klant (Client) role, but only in their narrow form, so only for that client’s own invoices.

PermissionWhat it opens
invoicing.invoice.readView invoices. It has two depths: the narrow one reaches documents only, the broad one also your company and bank details, the price list, the templates and the To-invoice backlog.
invoicing.invoice.writeCreate and edit invoices
invoicing.invoice.sendSend invoices and payment reminders
invoicing.invoice.deleteDelete draft invoices, and an issued invoice after the extra confirmation
invoicing.quote.read / .write / .send / .deleteThe same for quotes
invoicing.payment.writeRegister payments
invoicing.payment.linkStart an online payment
invoicing.settings.manageManage invoicing settings
invoicing.template.authorWrite custom invoice templates

The Klant (Client) role deliberately holds only that narrow read and the ability to start a payment on its own invoice. Connecting a Mollie account is a separate permission: mollie.settings.manage.

  • Issued is issued. Amounts can no longer change; you correct with a credit note. The process around it stays editable: reference, notes, due date, template, document language, exchange rate and pausing reminders.
  • Cancel an issued invoice with a credit note by preference. Cancelling and deleting both refuse while payments are registered against it or a credit note stands opposite it; deleting also asks for an explicit confirmation naming the number.
  • A time entry sits on one invoice, ever. Delete or cancel an invoice and exactly those entries come free again; a second document claiming the same subscription period or domain year is refused.
  • Documents do not follow your settings. A line freezes its VAT rate, an issued document the client’s address block. Renaming a rate or moving a client never rewrites what a client already received.
  • Formatting follows the document, not the reader, and another currency is fine: the document is entirely in its own currency, and the exchange rate exists only so the summary tiles can be added up.
  • The QR code is off by default and encodes the invoice’s public link, never the provider’s checkout.
  • Invoices travel by spreadsheet: the invoice list has Exporteren (export, with your current filters), and importing happens only through Bestaande facturen overnemen in the settings. Quotes do not travel as a spreadsheet.