import { formatPrice } from "../lib/format"; import type { TaxBreakdownGroup } from "@einfach-produktiv/invoicing"; // The actual amount of VAT included in a total — not just a disclosure // that VAT is included (see cartTotals.ts's effectiveTaxRate() for the // "which %" shown next to each line item elsewhere). One line per rate // when a cart/order spans more than one; a single line otherwise. // // Same row shape as the Gesamtsumme total line right above this // (`flex w-full` + a `flex-1` spacer): a label on the left, flush with // "Gesamtsumme", and the rate/amount pushed flush right so they land // directly under the total's own € amount — not tucked in right next to // the label. The rate itself gets a fixed-width right-aligned column // (`w-8`, `tabular-nums`) so a single-digit rate ("7%") still lines up // under a two-digit one ("19%") across rows instead of shifting the // amount that follows it. Only the first row carries the "enthält // MwSt.:" label; further rates repeat just the rate/amount pair. export function VatBreakdown({ groups }: { groups: TaxBreakdownGroup[] }) { if (groups.length === 0) return null; return (
{groups.map((g, i) => (
{groups.length === 1 ? `enthält ${g.rate}% MwSt.` : i === 0 ? "enthält MwSt.:" : ""} {groups.length > 1 && ( {g.rate}% )} {formatPrice(g.tax)}
))}
); }