Invoicing — proforma, final, PDF, UBL

Updated on 2026-04-22

Invoicing — proforma, final, PDF, UBL

BedFlow automatically generates proforma invoices for every booking. After departure that is converted into a final invoice that can be pushed to Yuki (accounting) and optionally via Peppol (for B2B).

Proforma invoice

  • Generated as soon as a booking is created (via BookingService or widget or admin form)
  • Contains: booking ref, guest, period, nights × price, extras, tourist tax, total
  • financial_state = unpaid / partial / paid depending on payment status
  • PDF generated automatically and stored in storage/app/invoices/

Final invoice

After check-out the proforma is converted into a final invoice. This can be:

  • Manual via admin ("Finalise invoice")
  • Automatic via FinalizeWellnessInvoices daily at 23:30

The final invoice gets a sequential number from the invoice series and is kept immutable (only adding payments remains possible).

PDF + UBL

  • PDF: visual — stored as pdf_path on the Invoice record
  • UBL (Universal Business Language XML): for Peppol and e-invoicing. Generated by GenerateAllInvoicesUbl every hour for new invoices, stored as ubl_path

Download both via the download button on the invoice detail page.

Yuki push

Every 2 hours PushInvoices runs → new final invoices are sent to your Yuki administration.

  • B2C invoices → simply submitted
  • B2B invoices (with VAT number) → also sent via Peppol (if yuki_peppol_enabled = true setting)

Invoices that already have a yuki_journal_at timestamp are skipped.

Negative invoices (credit notes)

BedFlow supports credit notes (e.g. on cancellation with partial refund). The matching payout is automatically set to the debtor's IBAN — a missing IBAN blocks the payout until an admin fills it in.

Payment reconciliation

CODA exports from your Belfius account are matched against outstanding invoices via structured_communication / payment_reference by ReconcilePayments (every 2 hours). It supports split payments across multiple invoices.