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 && (