diff --git a/src/correctionInvoicePdf.tsx b/src/correctionInvoicePdf.tsx index dc8a06e..830de55 100644 --- a/src/correctionInvoicePdf.tsx +++ b/src/correctionInvoicePdf.tsx @@ -337,15 +337,10 @@ function CorrectionInvoiceDocument({ kind, order, seller }: { kind: CorrectionIn Gesamt -{formatPrice(grandTotal)} - {/* Netto — same reasoning as invoicePdf.tsx's own row: a - single well-defined figure (Gesamt minus every rate's own - tax, summed) regardless of how many rates are present. - Shown on every correction invoice (Storno and Gutschrift - alike), not just non-exempt ones. */} - - Netto - -{formatPrice(rateGroups.reduce((sum, g) => sum + g.net, 0))} - + {/* Kept directly under Gesamt (not after Netto) — same + ordering fix as invoicePdf.tsx: "enthält X% MwSt." + describes Gesamt, not Netto (which has the tax already + taken out), so it must not read as attached to Netto. */} {order.vatExempt ? ( Steuerfreie innergemeinschaftliche Lieferung (§4 Nr. 1b UStG) @@ -358,6 +353,15 @@ function CorrectionInvoiceDocument({ kind, order, seller }: { kind: CorrectionIn )) )} + {/* Netto — same reasoning as invoicePdf.tsx's own row: a + single well-defined figure (Gesamt minus every rate's own + tax, summed) regardless of how many rates are present. + Shown on every correction invoice (Storno and Gutschrift + alike), not just non-exempt ones. */} + + Netto + -{formatPrice(rateGroups.reduce((sum, g) => sum + g.net, 0))} + diff --git a/src/invoicePdf.tsx b/src/invoicePdf.tsx index 9a4cf9c..4903e8d 100644 --- a/src/invoicePdf.tsx +++ b/src/invoicePdf.tsx @@ -383,25 +383,17 @@ export function InvoiceDocument({ order, seller }: { order: InvoiceOrder; seller Gesamt {formatPrice(order.total)} - {/* Netto (Gesamt minus every rate's own tax, summed — a - single well-defined figure regardless of how many - distinct rates the order actually has) — businesses read - this off the invoice directly for their own input-tax - deduction instead of having to compute Gesamt minus MwSt - by hand. Shown on every invoice, not just B2B/non-exempt - ones — on a vatExempt order Netto and Gesamt happen to be - the same figure (0% tax), but the row stays for layout - consistency across every invoice this shop issues. */} - - Netto - {formatPrice(rateGroups.reduce((sum, g) => sum + g.net, 0))} - {/* Exempt orders already have every item at 0% (see this file's own InvoiceOrder.vatExempt comment) — "enthält 0% MwSt.: 0,00 €" would be a meaningless thing to print, so this replaces the whole per-rate breakdown with the - actual legal basis instead. */} + actual legal basis instead. Kept directly under Gesamt + (not after Netto) — "enthält X% MwSt." describes what's + contained in Gesamt; sandwiching Netto between the two + made it read as if Netto were what contained the tax, + which is backwards (Netto is the figure with tax + already taken out). */} {order.vatExempt ? ( Steuerfreie innergemeinschaftliche Lieferung (§4 Nr. 1b UStG) ) : ( @@ -413,6 +405,22 @@ export function InvoiceDocument({ order, seller }: { order: InvoiceOrder; seller )) )} + {/* Netto (Gesamt minus every rate's own tax, summed — a + single well-defined figure regardless of how many + distinct rates the order actually has) — businesses read + this off the invoice directly for their own input-tax + deduction instead of having to compute Gesamt minus MwSt + by hand. Shown on every invoice, not just B2B/non-exempt + ones — on a vatExempt order Netto and Gesamt happen to be + the same figure (0% tax), but the row stays for layout + consistency across every invoice this shop issues. Placed + last (after the MwSt annotation, not before it) — see + that annotation's own comment above for why the order + matters here. */} + + Netto + {formatPrice(rateGroups.reduce((sum, g) => sum + g.net, 0))} + {paid && (