feat(sprint9): Phase 5 — Berichtszentrale, sidebar reorg, dashboard enhancement

- Sidebar: reorganized into 4 collapsible groups (Betrieb, Kommunikation, Verwaltung, Compliance)
- Berichtszentrale: new /reports-center page with report cards grouped by category (Finance, KCanG, DSGVO, Admin), format selector, date range pickers, Behörden-Export dialog with password protection
- Dashboard: added Outstanding Payments and Monthly Income KPI cards, Upcoming Events widget, Latest Announcements widget, conditional alert cards
- Pricing: fixed mobile overflow at 375px viewport on comparison table
- Frontend service: new compliance-reports.ts with React Query hooks for report generation, authority export, and download
- i18n: added reportsCenter.* and dashboard widget keys to de.json and en.json
This commit is contained in:
Patrick Plate
2026-06-15 13:45:48 +02:00
parent c3722ab726
commit 87511e0485
7 changed files with 1130 additions and 99 deletions
+104 -1
View File
@@ -66,7 +66,15 @@
"today": "Today",
"trend": "+{value}% vs last month",
"quotaUsed": "{value}% used",
"distributionCount": "{count} distributions, {grams}g"
"distributionCount": "{count} distributions, {grams}g",
"outstandingPayments": "Outstanding Payments",
"monthlyIncome": "Monthly Income",
"thisMonth": "This month",
"strainsAvailable": "strains available",
"upcomingEvents": "Upcoming Events",
"latestAnnouncements": "Latest Announcements",
"rsvps": "RSVPs",
"viewAll": "View all"
},
"members": {
"title": "Member Management",
@@ -1004,5 +1012,100 @@
"positions": "Positions",
"active": "Active",
"inactive": "Inactive"
},
"reportsCenter": {
"title": "Reports Center",
"subtitle": "Generate and manage all regulatory and internal reports in one place.",
"generate": "Generate",
"cancel": "Cancel",
"authorityExport": {
"title": "Authority Export",
"description": "Bundled export of all authority-relevant documents for a calendar year.",
"button": "Start Authority Export",
"dialogTitle": "Create Authority Export",
"dialogDescription": "Creates a password-protected archive with all compliance-relevant reports for the selected year.",
"warning": "This export contains sensitive data and will be logged in the audit trail. Only proceed with a legitimate request.",
"year": "Report Year",
"password": "Archive Password",
"passwordPlaceholder": "Enter secure password",
"confirm": "Create Export"
},
"categories": {
"finance": "Finance",
"kcang": "KCanG Compliance",
"dsgvo": "GDPR",
"admin": "Administration"
},
"reports": {
"EUER": {
"name": "Income Statement",
"description": "Simplified income statement for the selected period"
},
"KASSENBUCH_EXPORT": {
"name": "Cash Book Export",
"description": "Complete cash book as PDF or CSV"
},
"BEITRAGSBESCHEINIGUNG": {
"name": "Membership Fee Certificate",
"description": "Certificate of paid membership fees"
},
"JAHRESBERICHT_BEHOERDE": {
"name": "Annual Authority Report",
"description": "Legally required annual report to the responsible authority"
},
"AUSGABEPROTOKOLL": {
"name": "Distribution Log",
"description": "Log of all distributions in the period with amounts and recipients"
},
"VERNICHTUNGSPROTOKOLL": {
"name": "Destruction Protocol",
"description": "Documentation of proper cannabis destruction"
},
"TRANSPORTZERTIFIKAT": {
"name": "Transport Certificate",
"description": "Certificate for approved cannabis transport"
},
"BESTANDSFUEHRUNG": {
"name": "Inventory Report",
"description": "Current stock with all inflows and outflows"
},
"VERARBEITUNGSVERZEICHNIS": {
"name": "Processing Register",
"description": "Register of all processing activities per Art. 30 GDPR"
},
"TOM": {
"name": "TOM",
"description": "Technical and organizational measures per Art. 32 GDPR"
},
"DSFA": {
"name": "DPIA",
"description": "Data Protection Impact Assessment per Art. 35 GDPR"
},
"LOESCHKONZEPT": {
"name": "Deletion Policy",
"description": "Policy for timely data deletion"
},
"DATENPANNEN_MELDUNG": {
"name": "Data Breach Report",
"description": "Template for reporting a data protection violation"
},
"MITGLIEDERLISTE_REGISTER": {
"name": "Member Registry List",
"description": "Official member list for the association register"
},
"VORSTANDSAENDERUNG": {
"name": "Board Change Notification",
"description": "Notification of board change to the association register"
}
},
"history": {
"title": "Generated Reports",
"empty": "No reports generated yet. Select a report above to get started.",
"report": "Report",
"format": "Format",
"date": "Date",
"user": "Created by",
"size": "Size"
}
}
}