import { useState, useEffect } from "react"; import { Link, useParams } from "react-router"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { formatCurrency } from "@/lib/tax"; import { ChevronLeft, TrendingUp, BarChart3 } from "lucide-react"; const MONTHS = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]; interface TaxGroup { netAmount: number; taxAmount: number; } interface MonthData { month: number; invoiceCount: number; netTotal: number; taxTotal: number; grossTotal: number; taxGroups: Record; } interface QuarterData { quarter: number; invoiceCount: number; netTotal: number; taxTotal: number; grossTotal: number; taxGroups: Record; } interface ReportData { year: number; monthly: MonthData[]; quarterly: QuarterData[]; yearTotal: { invoiceCount: number; netTotal: number; taxTotal: number; grossTotal: number; }; } export default function ReportsPage() { const { id: companyId } = useParams<{ id: string }>(); const [year, setYear] = useState(new Date().getFullYear()); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { setLoading(true); fetch(`/api/reports?companyId=${companyId}&year=${year}`) .then((r) => r.json()) .then((d) => { setData(d); setLoading(false); }); }, [companyId, year]); const years = Array.from({ length: 5 }, (_, i) => new Date().getFullYear() - i); return (
Zurück zum Mandanten

Steuerberichte

Auswertungen für Steuererklärung und USt-Voranmeldung

{loading ? (
Lade Auswertung...
) : data && (

Rechnungen

{data.yearTotal.invoiceCount}

Umsatz (netto)

{formatCurrency(data.yearTotal.netTotal)}

USt. gesamt

{formatCurrency(data.yearTotal.taxTotal)}

Umsatz (brutto)

{formatCurrency(data.yearTotal.grossTotal)}

USt-Voranmeldung (quartalsweise)
{data.quarterly.map((q) => ( ))}
Quartal Rechnungen Netto USt. 19% USt. 7% USt. gesamt Brutto
Q{q.quarter} {year} {q.invoiceCount} {formatCurrency(q.netTotal)} {q.taxGroups["19"] ? formatCurrency(q.taxGroups["19"].taxAmount) : "—"} {q.taxGroups["7"] ? formatCurrency(q.taxGroups["7"].taxAmount) : "—"} {formatCurrency(q.taxTotal)} {formatCurrency(q.grossTotal)}
Gesamt {year} {data.yearTotal.invoiceCount} {formatCurrency(data.yearTotal.netTotal)} {formatCurrency(data.quarterly.reduce((s, q) => s + (q.taxGroups["19"]?.taxAmount ?? 0), 0))} {formatCurrency(data.quarterly.reduce((s, q) => s + (q.taxGroups["7"]?.taxAmount ?? 0), 0))} {formatCurrency(data.yearTotal.taxTotal)} {formatCurrency(data.yearTotal.grossTotal)}
Monatliche Übersicht
{data.monthly.map((m) => ( ))}
Monat Rechnungen Netto USt. Brutto
{MONTHS[m.month - 1]} {year} {m.invoiceCount || "—"} {m.netTotal > 0 ? formatCurrency(m.netTotal) : "—"} {m.taxTotal > 0 ? formatCurrency(m.taxTotal) : "—"} {m.grossTotal > 0 ? formatCurrency(m.grossTotal) : "—"}
)}
); }