Factura nu e un ecran obișnuit — e un document fiscal cu valoare legală, păstrat 6 ani. Designul trebuie să spună "oficial" fără să țipe. Header inverted (ink bg) cu Serie SDI · Nr 000042 mono. Părțile codate fiscal cu IDNO. Breakdown TVA per rată. Suma în litere în română (cerut de SFS). Stamp "Document imutabil" microtype.
Plățile sunt în sub-colecție mutabilă. Documentul în sine nu se schimbă niciodată. Când cumulul plăților atinge totalul, comanda trece în settled automat.
issueInvoice({orderId, series, paymentTermDays}) · tranzacție: read counter + snapshot + scrie invoices/{id} + increment counter + advance order la invoiced + queue renderInvoicePdf ·
Plată → recordPayment({invoiceId, amountMinor, method, paidAt, reference?}) · scrie în invoicePayments sub-colecție · dacă ≥ total, advance order la settled ·
PDF → renderInvoicePdf({invoiceId}) · server-side pdfkit, scrie invoiceRenders/{invoiceId} (mutabil, separat).
Din comandă livrată: serie (chips) + zile de scadență (slider). Preview block arată ce va fi scris în doc — counter atomic asigură numărul unic.
Header ink inverted cu serie+număr mono. Părți, linii, TVA per rată, total mare. Suma în litere română. Stamp imutabil. CTA Vezi PDF + Înregistrează plată.
Status devine "achitată parțial". Progress bar + payment history (lista invoicePayments). CTA "Înregistrează altă plată". Docul în sine rămâne imutabil.
Retailerul vede aceeași factură imutabilă. Status verde "achitată". Fără CTA Înregistrează plată (drept distribuitor). Doar Vezi PDF + Comandă din nou.