* feat(invoices): registrera utan att bokföra + explicit Bokför-steg
Companies where one person registers supplier invoices / sends customer
invoices while ekonomi does the actual bookkeeping had no way to split
the two: under faktureringsmetoden every registration/send booked the
journal entry inline.
- New company setting defer_invoice_booking (default off, accrual only):
registering a supplier invoice or sending/marking-sent a customer
invoice creates NO journal entry.
- New explicit booking routes POST /api/supplier-invoices/[id]/book and
POST /api/invoices/[id]/book: create the registration/revenue entry
afterwards, CAS-guarded against concurrent booking (a lost race
cancels the just-posted voucher with a gap explanation), including
periodisering schedules.
- Detail pages show "Ej bokförd ännu" + a Bokför button for unbooked
accrual invoices; the settings toggle lives under Bokföringsmetod.
- mark-paid needs no changes: both payment flows already route on the
journal-entry link, so an invoice still unbooked when paid gets the
full cash-style entry.
- The mark-sent fail-closed rollback now keys on the same gate so
deferred sends are not rolled back as booking failures.
Fixes#967
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(invoices): harden deferred booking after review
CodeRabbit round on #1040:
- CAS link guards also require a still-bookable status (and uncredited,
customer side) so a concurrent mark-paid/credit cannot end up with a
double-posting registration/revenue entry.
- Settings reads fail closed instead of defaulting to accrual rules.
- Detail pages surface the ACCRUAL_SCHEDULE_FAILED warning instead of
showing plain success, and the customer page no longer stringifies
structured errors into "[object Object]".
- The settings form normalizes defer_invoice_booking to false under
kontantmetoden so a stale flag cannot re-activate on method switch.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>