Files
cannamanage/cannamanage-frontend/messages/en.json
T
Patrick Plate 3211ade5be feat(sprint8): Phase 2 — Treasury frontend + PDF receipts
Backend:
- ReceiptPdfService: Generates Quittung PDF per payment (OpenPDF, A4)
- FinancialReportService: Annual financial report PDF (Jahresabschluss)
- FinanceController: Added receipt download, annual report, CSV export endpoints
- Portal receipt download with member ownership verification

Frontend:
- src/services/finance.ts: Complete React Query service (types, hooks, mutations)
- /finance: Dashboard with KPI cards, recent transactions, outstanding members
- /finance/payments: Payment list with filtering, void, receipt download
- /finance/kassenbuch: Kassenbuch ledger with date range, CSV export
- /finance/fee-schedules: Fee schedule CRUD with interval management
- /finance/reports: Annual report PDF download
- /portal/finance: Member self-service balance + payment history + receipts

Navigation & i18n:
- Added Finanzen (Wallet icon) to admin sidebar
- Portal finance page for member payments
- Comprehensive de.json + en.json finance keys (~100 translations)
2026-06-15 08:24:43 +02:00

954 lines
37 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"appName": "CannaManage",
"loading": "Loading...",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"create": "Create",
"search": "Search",
"filter": "Filter",
"export": "Export",
"back": "Back",
"next": "Next",
"confirm": "Confirm",
"yes": "Yes",
"no": "No",
"noData": "No data available"
},
"nav": {
"dashboard": "Dashboard",
"members": "Members",
"stock": "Stock",
"distributions": "Distributions",
"compliance": "Compliance",
"reports": "Reports",
"settings": "Settings",
"staff": "Staff",
"portal": "Member Portal"
},
"auth": {
"login": "Sign In",
"logout": "Sign Out",
"email": "Email address",
"password": "Password",
"forgotPassword": "Forgot password?",
"resetPassword": "Reset Password",
"loginButton": "Sign In",
"loggingIn": "Signing in...",
"loginSubtitle": "Sign in to your cannabis club",
"invalidCredentials": "Invalid email address or password.",
"networkError": "Connection error. Please try again.",
"sessionExpired": "Your session has expired. Please sign in again.",
"emailInvalid": "Please enter a valid email address.",
"passwordRequired": "Please enter your password.",
"passwordTooShort": "Password must be at least 8 characters.",
"footerText": "Secure management for your cannabis cultivation club"
},
"dashboard": {
"title": "Dashboard",
"activeMembers": "Active Members",
"distributionsToday": "Distributions Today",
"stockLevel": "Stock Level",
"monthlyQuota": "Monthly Quota",
"quickActions": "Quick Actions",
"newDistribution": "New Distribution",
"addMember": "Add Member",
"recentDistributions": "Recent Distributions",
"stockByStrain": "Stock by Strain",
"date": "Date",
"member": "Member",
"strain": "Strain",
"amount": "Amount (g)",
"staff": "Staff",
"grams": "g",
"today": "Today",
"trend": "+{value}% vs last month",
"quotaUsed": "{value}% used",
"distributionCount": "{count} distributions, {grams}g"
},
"members": {
"title": "Member Management",
"addMember": "Add Member",
"name": "Name",
"email": "Email",
"status": "Status",
"memberSince": "Member Since",
"quota": "Quota",
"actions": "Actions",
"edit": "Edit",
"active": "Active",
"suspended": "Suspended",
"expelled": "Expelled",
"back": "Back to List",
"save": "Save",
"create": "Create Member",
"firstName": "First Name",
"lastName": "Last Name",
"dateOfBirth": "Date of Birth",
"phone": "Phone",
"memberNumber": "Member Number",
"joinedAt": "Joined At",
"notes": "Notes",
"notesPlaceholder": "Optional notes about the member...",
"under21Warning": "Under 21 — reduced quota (30g/month)",
"ageError": "Members must be at least 18 years old.",
"saved": "Changes saved.",
"created": "Member created successfully.",
"search": "Search name or email...",
"perPage": "Per page",
"showing": "{from}{to} of {total}",
"previous": "Previous",
"next": "Next",
"noResults": "No members found.",
"notFound": "Member not found.",
"personalInfo": "Personal Information",
"membershipInfo": "Membership"
},
"stock": {
"title": "Stock & Batches",
"newBatch": "New Batch",
"stockOverview": "Stock Overview",
"batchId": "Batch ID",
"strain": "Strain",
"thc": "THC %",
"cbd": "CBD %",
"status": "Status",
"available": "Available",
"availableGrams": "Available (g)",
"receivedAt": "Received",
"actions": "Actions",
"statusAvailable": "Available",
"statusRecalled": "Recalled",
"statusDepleted": "Depleted",
"recall": "Recall",
"recallConfirm": "Really recall this batch? All open distributions with this batch will be blocked.",
"recallTitle": "Recall Batch",
"recallSuccess": "Batch recalled.",
"totalBatches": "Total Batches",
"availableStock": "Available Stock",
"recalledBatches": "Recalled Batches",
"strainCount": "Strains",
"filterAll": "All",
"filterAvailable": "Available only",
"filterRecalled": "Recalled only",
"addBatch": "Add Batch",
"strainName": "Strain Name",
"amount": "Amount (g)",
"supplier": "Supplier / Origin",
"harvestDate": "Harvest Date",
"notes": "Notes",
"notesPlaceholder": "Optional notes about the batch...",
"created": "Batch created successfully.",
"grams": "g",
"confirmRecall": "Confirm Recall",
"lowStock": "Low"
},
"distributions": {
"title": "Distributions",
"newDistribution": "New Distribution",
"todaySummary": "Today: {count} distributions, {grams}g distributed",
"dateTime": "Date/Time",
"member": "Member",
"strain": "Strain",
"amount": "Amount (g)",
"staff": "Staff",
"status": "Status",
"completed": "Completed",
"locked": "Locked (immutable)",
"filterToday": "Today",
"filterWeek": "This Week",
"filterMonth": "This Month",
"searchMember": "Search member...",
"step1": "Select Member",
"step2": "Check Quota",
"step3": "Strain & Amount",
"step4": "Confirmation",
"selectMember": "Search member (name or number)...",
"memberBlocked": "Member is blocked — distribution not possible.",
"under21Info": "Reduced quota: 30g/month (under 21)",
"dailyRemaining": "Daily remaining",
"monthlyRemaining": "Monthly remaining",
"selectBatch": "Select batch",
"available": "available",
"amountLabel": "Amount in grams",
"exceedsDaily": "Exceeds daily limit ({limit}g).",
"exceedsMonthly": "Exceeds monthly limit ({limit}g).",
"exceedsBatch": "Insufficient stock in this batch.",
"confirm": "Confirm Distribution",
"summary": "Summary",
"success": "Distribution recorded successfully.",
"grams": "g",
"date": "Date",
"monthlyQuota": "Monthly Quota",
"remaining": "Remaining"
},
"reports": {
"title": "Reports",
"monthly": "Monthly Report",
"monthlyDesc": "Overview of all distributions in the selected month, including member quotas and stock changes.",
"memberList": "Member List",
"memberListDesc": "Complete member list with status, quota utilization and contact details.",
"recall": "Recall Report",
"recallDesc": "All batches with recall status and affected distributions for regulatory reporting.",
"downloadPdf": "Download as PDF",
"downloadCsv": "Download as CSV",
"preview": "Show Preview",
"generating": "Generating report...",
"downloaded": "{name} downloaded.",
"selectMonth": "Select month",
"selectStatus": "Filter by status",
"allStatuses": "All",
"activeOnly": "Active",
"suspendedOnly": "Suspended",
"dateFrom": "From",
"dateTo": "To",
"previewTitle": "Report Preview",
"totalDistributions": "Total Distributions",
"totalGrams": "Total Grams",
"uniqueMembers": "Unique Members",
"averagePerMember": "Avg per Member",
"topStrains": "Top Strains",
"affectedDistributions": "Affected Distributions",
"affectedMembers": "Affected Members",
"recalledBatches": "Recalled Batches",
"close": "Close",
"complianceNote": "This report is suitable for submission to the responsible authority.",
"complianceBadge": "§19 KCanG compliant",
"auditTrail": "All reports are generated with timestamps. The underlying distribution data is immutable (audit trail).",
"memberNumber": "No.",
"name": "Name",
"status": "Status",
"joinedAt": "Joined",
"usage": "Usage",
"strain": "Strain",
"grams": "Grams",
"percent": "Share",
"batchId": "Batch ID",
"recalledAt": "Recalled on",
"reason": "Reason",
"distributed": "Distributed",
"original": "Original"
},
"portal": {
"title": "My Area",
"login": "Member Login",
"loginSubtitle": "Sign in to the member portal",
"email": "Email address",
"password": "Password",
"loginButton": "Sign In",
"loggingIn": "Signing in...",
"invalidCredentials": "Invalid email address or password.",
"networkError": "Connection error. Please try again.",
"welcome": "Welcome back, {name}!",
"dashboard": "Overview",
"infoBoard": "Announcements",
"events": "Events",
"forum": "Forum",
"quota": "My Quota",
"history": "Distribution History",
"profile": "Profile",
"settings": "Settings",
"logout": "Sign Out",
"dailyQuota": "Daily Quota",
"monthlyQuota": "Monthly Quota",
"remaining": "remaining",
"used": "used",
"of": "of",
"lastDistribution": "Last Distribution",
"noDistributions": "No distributions this month yet.",
"memberSince": "Member since",
"memberNumber": "Member number",
"nextAvailable": "Next available",
"nextAvailableTomorrow": "Tomorrow at 00:00",
"changePassword": "Change Password",
"currentPassword": "Current Password",
"newPassword": "New Password",
"confirmPassword": "Confirm Password",
"passwordChanged": "Password changed successfully.",
"passwordMismatch": "Passwords do not match.",
"club": "My Club",
"quotaWarning": "Warning: You have already used {percent}% of your monthly quota.",
"under21Notice": "For members under 21: Reduced quota of 30g/month (§19 Abs. 3 KCanG).",
"grams": "g",
"date": "Date",
"strain": "Strain",
"amount": "Amount",
"recordedBy": "Recorded by",
"noHistory": "No distributions recorded yet.",
"personalInfo": "Personal Information",
"language": "Language",
"theme": "Theme",
"themeLight": "Light",
"themeDark": "Dark",
"themeSystem": "System",
"german": "German",
"english": "English",
"quickInfo": "Quick Info",
"todayAvailable": "Available today",
"monthAvailable": "Available this month",
"limitReached": "Limit reached",
"pagination": "{from}{to} of {total}",
"previous": "Previous",
"next": "Next",
"allMonths": "All months",
"footerText": "Cannabis cultivation club — Secure member management",
"adminLogin": "Go to Admin Login"
},
"staff": {
"title": "Staff",
"invite": "Invite New Member",
"name": "Name",
"email": "Email",
"role": "Role",
"permissions": "Permissions",
"status": "Status",
"actions": "Actions",
"active": "Active",
"revoked": "Revoked",
"invited": "Invited",
"editPermissions": "Edit Permissions",
"revokeAccess": "Revoke Access",
"revokeConfirm": "Really revoke access for {name}? The staff member will no longer be able to sign in.",
"revokeSuccess": "Access revoked.",
"inviteTitle": "Invite Staff Member",
"inviteDesc": "Invite a new team member via email and assign permissions.",
"inviteEmail": "Email address",
"inviteRole": "Role template",
"roleAusgabe": "Distribution",
"roleLager": "Stock",
"roleVorstand": "Board",
"roleCustom": "Custom",
"inviteSend": "Send Invitation",
"inviteSuccess": "Invitation sent to {email}.",
"permRecordDistribution": "Record Distribution",
"permViewMemberList": "View Member List",
"permViewMemberQuota": "View Quota",
"permAddMember": "Add Members",
"permViewStock": "View Stock",
"permRecordStockIn": "Record Stock In",
"permViewComplianceReport": "View Reports",
"permManageGrowCalendar": "Manage Grow Calendar",
"savePermissions": "Save",
"permissionsSaved": "Permissions updated.",
"cancel": "Cancel",
"noStaff": "No staff members yet."
},
"api": {
"loading": "Loading...",
"error": "Failed to load data.",
"retry": "Try again",
"offline": "No connection to server — data may be outdated.",
"networkError": "Network error. Please check your connection.",
"unauthorized": "Session expired. Please sign in again.",
"forbidden": "You do not have permission for this action.",
"notFound": "Resource not found.",
"quotaExceeded": "Quota exceeded.",
"serverError": "Server error. Please try again later."
},
"consent": {
"title": "Privacy Consent",
"dataProcessing": "Data Processing",
"dataProcessingDesc": "I consent to the processing of my personal data (name, email, date of birth, distribution history) for the purpose of club management. Legal basis: Art. 6(1)(a) GDPR.",
"marketing": "Marketing Notifications",
"marketingDesc": "I would like to receive information about new features and offers.",
"accept": "I agree",
"reject": "Decline and delete account",
"required": "Required",
"revoke": "Revoke consent",
"revokeWarning": "Without consent for data processing, the service cannot be used.",
"granted": "Granted on",
"revoked": "Revoked"
},
"dsgvo": {
"title": "Privacy",
"export": "Export my data",
"exportDesc": "Download all data stored about you as a JSON file (Art. 15 GDPR).",
"exportButton": "Download data",
"exporting": "Compiling data...",
"exported": "Data export downloaded.",
"delete": "Delete account and data",
"deleteDesc": "All personal data will be irreversibly deleted or anonymized (Art. 17 GDPR). Distribution data will be retained in anonymized form (legal retention requirement).",
"deleteButton": "Permanently delete account",
"deleteConfirm": "Are you sure? This action cannot be undone.",
"deleteSuccess": "Your account has been deleted. You will now be logged out."
},
"billing": {
"title": "Plan & Billing",
"currentPlan": "Current Plan",
"trial": "Free Trial",
"starter": "Starter",
"pro": "Pro",
"enterprise": "Enterprise",
"trialEnds": "Trial ends on {date}",
"trialExpired": "Your trial has expired. Choose a plan to continue.",
"trialDaysLeft": "{days} days remaining",
"memberLimit": "Member limit",
"membersUsed": "{used} / {limit} members",
"price": "{price}/month",
"nextBilling": "Next billing date",
"upgrade": "Upgrade plan",
"manageBilling": "Manage payment details",
"invoices": "Invoices",
"noInvoices": "No invoices yet.",
"starterDesc": "For small clubs up to 30 members",
"proDesc": "For growing clubs up to 100 members",
"enterpriseDesc": "For large clubs — unlimited members",
"starterPrice": "€19",
"proPrice": "€49",
"enterprisePrice": "On request",
"selectPlan": "Select plan",
"active": "Active",
"pastDue": "Past due",
"canceled": "Canceled"
},
"audit": {
"title": "Audit Log",
"subtitle": "Immutable log of all operations (10-year retention)",
"timestamp": "Timestamp",
"type": "Type",
"description": "Description",
"actor": "Actor",
"entity": "Entity",
"filterType": "Filter by event type",
"filterDateFrom": "From",
"filterDateTo": "To",
"filterActor": "Search actor",
"exportPdf": "Export as PDF",
"exporting": "Generating PDF...",
"exported": "Audit log exported.",
"allTypes": "All types",
"immutable": "Immutable",
"timezone": "Europe/Berlin",
"retentionNote": "Retention period: 10 years (KCanG-compliant)",
"types": {
"DISTRIBUTION_RECORDED": "Distribution recorded",
"DISTRIBUTION_VOIDED": "Distribution voided",
"MEMBER_CREATED": "Member created",
"MEMBER_UPDATED": "Member updated",
"MEMBER_SUSPENDED": "Member suspended",
"MEMBER_EXPELLED": "Member expelled",
"BATCH_CREATED": "Batch created",
"BATCH_RECALLED": "Batch recalled",
"LOGIN_SUCCESS": "Login",
"LOGIN_FAILED": "Failed login",
"LOGOUT": "Logout",
"PASSWORD_CHANGED": "Password changed",
"STAFF_INVITED": "Staff invited",
"STAFF_PERMISSIONS_CHANGED": "Permissions changed",
"STAFF_REVOKED": "Access revoked",
"CONSENT_GRANTED": "Consent granted",
"CONSENT_REVOKED": "Consent revoked",
"DATA_EXPORTED": "Data exported",
"DATA_DELETED": "Data deleted",
"SUBSCRIPTION_STARTED": "Subscription started",
"SUBSCRIPTION_CANCELED": "Subscription canceled",
"PAYMENT_RECEIVED": "Payment received",
"PAYMENT_FAILED": "Payment failed"
}
},
"grow": {
"title": "Grow Calendar",
"newGrow": "Start New Grow",
"name": "Grow Name",
"strain": "Strain",
"stage": "Stage",
"startedAt": "Started",
"expectedHarvest": "Expected Harvest",
"daysInStage": "Days in stage",
"stages": {
"SEEDLING": "Seedling",
"VEGETATIVE": "Vegetative",
"FLOWERING": "Flowering",
"HARVEST": "Harvest",
"DRYING": "Drying",
"CURING": "Curing",
"COMPLETE": "Complete"
},
"advanceStage": "Next Stage",
"completeHarvest": "Complete Harvest",
"harvestGrams": "Harvest (g)",
"linkBatch": "Link to Batch",
"sensors": "Sensor Data",
"addReading": "Add Reading",
"temperature": "Temperature",
"humidity": "Humidity",
"co2": "CO₂",
"ph": "pH",
"ec": "EC",
"photos": "Photos",
"addPhoto": "Add Photo",
"caption": "Caption",
"feeding": "Feeding",
"addFeeding": "Add Feeding",
"nutrient": "Nutrient",
"amountMl": "Amount (ml)",
"waterLiters": "Water (L)",
"phAfter": "pH after",
"ecAfter": "EC after",
"timeline": "Timeline",
"noGrows": "No grow entries yet.",
"created": "Grow started.",
"stageAdvanced": "Stage advanced to {stage}.",
"harvestComplete": "Harvest completed — {grams}g linked to batch."
},
"notifications": {
"title": "Notifications",
"markAllRead": "Mark all as read",
"noNotifications": "No notifications",
"unread": "{count} unread",
"types": {
"QUOTA_WARNING": "Quota Warning",
"BATCH_RECALLED": "Batch Recalled",
"DISTRIBUTION_RECORDED": "Distribution Recorded",
"SUBSCRIPTION_EXPIRING": "Subscription Expiring",
"ADMIN_MESSAGE": "Club Message",
"INFO_BOARD_POST": "New Announcement",
"FORUM_REPLY": "Forum Reply",
"FORUM_MENTION": "Forum Mention"
},
"compose": {
"title": "Compose Notification",
"titleField": "Title",
"messageField": "Message",
"linkField": "Link (optional)",
"targetAll": "All Members",
"targetSelected": "Selected Members",
"selectMembers": "Select members",
"send": "Send",
"sending": "Sending...",
"sent": "Notification sent to {count} members",
"history": "History",
"sentAt": "Sent at",
"recipients": "Recipients",
"readCount": "Read"
},
"preferences": {
"title": "Notification Settings",
"inApp": "In-App (always active)",
"email": "Email",
"webPush": "Browser Push Notifications",
"mobilePush": "Mobile Push Notifications",
"enabled": "Enabled",
"disabled": "Disabled"
},
"push": {
"promptTitle": "Enable Push Notifications?",
"promptBody": "Get notified about distributions, events, and club news directly on your device.",
"accept": "Enable",
"decline": "Not now",
"granted": "Push notifications enabled",
"denied": "Push notifications denied"
},
"devices": {
"title": "Registered Devices",
"noDevices": "No devices registered",
"remove": "Remove",
"web": "Web Browser",
"ios": "iPhone/iPad",
"android": "Android Device"
}
},
"pwa": {
"install": "Install as App",
"installDesc": "Add CannaManage to your home screen for faster access.",
"offline": "No Internet Connection",
"offlineDesc": "The app has limited functionality in offline mode.",
"retry": "Reconnect"
},
"marketing": {
"pricing": {
"title": "Simple, Transparent Pricing",
"subtitle": "Start for free and grow with your club. No hidden costs, cancel anytime.",
"trialBadge": "3 months free trial",
"popular": "Popular",
"perMonth": "month",
"contactUs": "On request",
"startTrial": "Start free",
"contactSales": "Contact us",
"comparisonTitle": "Feature Comparison",
"feature": "Feature",
"faqTitle": "Frequently Asked Questions",
"ctaTitle": "Ready for digital club management?",
"ctaSubtitle": "Start now with a 3-month free trial. No credit card required.",
"ctaButton": "Start free now",
"plans": {
"starter": {
"name": "Starter",
"description": "For small cannabis clubs with up to 30 members.",
"memberNote": "Up to {limit} members"
},
"pro": {
"name": "Pro",
"description": "For growing clubs with advanced requirements.",
"memberNote": "Up to {limit} members"
},
"enterprise": {
"name": "Enterprise",
"description": "For large clubs and associations with custom requirements.",
"memberNote": "Unlimited members"
}
},
"features": {
"memberManagement": "Member management",
"distributionTracking": "Distribution tracking with THC monitoring",
"complianceReports": "Compliance reports (PDF & CSV)",
"quotaMonitoring": "Quota monitoring (25g/day, 50g/month)",
"memberPortal": "Member portal (self-service)",
"emailSupport": "Email support",
"allStarter": "Everything in Starter",
"growCalendar": "Grow calendar with sensor data",
"staffManagement": "Staff management & roles",
"advancedReports": "Advanced reports & statistics",
"pdfExport": "PDF document export",
"apiAccess": "API access",
"prioritySupport": "Priority support",
"allPro": "Everything in Pro",
"unlimitedMembers": "Unlimited members",
"multiClub": "Multi-club management",
"customIntegrations": "Custom integrations",
"sla": "SLA guarantee (99.9% uptime)",
"dedicatedSupport": "Dedicated account manager",
"onboarding": "Personal onboarding"
},
"comparison": {
"compMembers": {
"label": "Members",
"starter": "Up to 30",
"pro": "Up to 100",
"enterprise": "Unlimited"
},
"compDistributions": {
"label": "Distribution tracking",
"starter": "✓",
"pro": "✓",
"enterprise": "✓"
},
"compReports": {
"label": "Reports (PDF/CSV)",
"starter": "Standard",
"pro": "Advanced",
"enterprise": "Custom"
},
"compGrow": {
"label": "Grow calendar",
"starter": "—",
"pro": "✓",
"enterprise": "✓"
},
"compStaff": {
"label": "Staff management",
"starter": "—",
"pro": "✓",
"enterprise": "✓"
},
"compApi": {
"label": "API access",
"starter": "—",
"pro": "✓",
"enterprise": "✓"
},
"compMultiClub": {
"label": "Multi-club",
"starter": "—",
"pro": "—",
"enterprise": "✓"
},
"compSupport": {
"label": "Support",
"starter": "Email",
"pro": "Priority",
"enterprise": "Dedicated"
}
},
"faq": {
"trial": {
"question": "How does the free trial work?",
"answer": "You can test CannaManage free for 3 months with no commitment. All features of your chosen plan are available immediately. After the trial, you decide whether to continue."
},
"payment": {
"question": "Which payment methods are accepted?",
"answer": "We accept SEPA direct debit, credit card (Visa, Mastercard) and PayPal. Billing is monthly through our payment partner Stripe."
},
"cancel": {
"question": "Can I cancel anytime?",
"answer": "Yes, you can cancel your subscription at any time at the end of the current billing period. There is no minimum contract period."
},
"data": {
"question": "What happens to my data after cancellation?",
"answer": "After cancellation, you have 30 days to export your data. After that, all personal data is deleted in accordance with GDPR. Data subject to retention requirements remains stored in compliance with the law."
},
"migration": {
"question": "Can I switch plans later?",
"answer": "Yes, you can switch between Starter and Pro at any time. Upgrades take effect immediately, downgrades at the next billing period."
}
}
},
"impressum": {
"title": "Legal Notice",
"section1Title": "Information according to § 5 TMG",
"section1Content": "[Company name / Full name]\n[Street Number]\n[Zip City]\n[Country]",
"contactTitle": "Contact",
"contactContent": "Phone: [Phone number]\nEmail: [Email address]\nWebsite: cannamanage.plate-software.de",
"vatTitle": "VAT ID",
"vatContent": "VAT identification number according to § 27 a of the German VAT Act: [VAT-ID]",
"responsibleTitle": "Responsible for content according to § 55 Abs. 2 RStV",
"responsibleContent": "[Full name]\n[Street Number]\n[Zip City]",
"disputeTitle": "EU Dispute Resolution",
"disputeContent": "The European Commission provides a platform for online dispute resolution (OS): https://ec.europa.eu/consumers/odr/. We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board."
},
"datenschutz": {
"title": "Privacy Policy",
"lastUpdated": "Last updated: [Insert date]",
"s1Title": "1. Controller",
"s1Content": "[Company name / Full name]\n[Address]\nEmail: [Email address]\nPhone: [Phone number]",
"s2Title": "2. Collection and Storage of Personal Data",
"s2Content": "When using CannaManage, we collect the following personal data: name, email address, member number, distribution history, and technical data such as IP address and browser information. This data is required for contract fulfillment and platform operation.",
"s3Title": "3. Purpose of Data Processing",
"s3Content": "Your data is processed to provide the club management software, to comply with legal documentation obligations under KCanG (§ 26 CanG), for quota monitoring and compliance assurance, and for communication within the contractual relationship.",
"s4Title": "4. Legal Basis",
"s4Content": "Processing is based on Art. 6(1)(b) GDPR (contract fulfillment), Art. 6(1)(c) GDPR (legal obligation), and Art. 6(1)(a) GDPR (consent) for optional features such as the member portal.",
"s5Title": "5. Disclosure to Third Parties",
"s5Content": "Personal data is only disclosed to third parties where necessary for contract fulfillment (e.g., payment processing via Stripe) or where there is a legal obligation. No transfer to third countries takes place.",
"s6Title": "6. Data Processing Agreement",
"s6Content": "For payment processing, we use Stripe (Stripe Technology Europe, Ltd., Dublin, Ireland). A data processing agreement (DPA) exists with Stripe in accordance with Art. 28 GDPR. Stripe processes payment data exclusively within the EU/EEA.",
"s7Title": "7. Storage Duration",
"s7Content": "Personal data is deleted as soon as the purpose of processing no longer applies and no legal retention obligations exist. Commercial retention periods (6-10 years) remain unaffected. After cancellation, data is deleted within 30 days unless a retention obligation exists.",
"s8Title": "8. Data Subject Rights",
"s8Content": "You have the right to access (Art. 15 GDPR), rectification (Art. 16 GDPR), erasure (Art. 17 GDPR), restriction of processing (Art. 18 GDPR), data portability (Art. 20 GDPR), and objection (Art. 21 GDPR). To exercise your rights, contact the email address above.",
"s9Title": "9. Data Security",
"s9Content": "We employ technical and organizational measures to protect your data: TLS encryption, role-based access control, regular backups, audit logging of all data access, and regular security reviews.",
"s10Title": "10. Hosting",
"s10Content": "The platform is hosted on servers of IONOS SE (Montabaur, Germany). All data is stored exclusively in German data centers. A data processing agreement with IONOS is in place."
},
"agb": {
"title": "Terms of Service",
"lastUpdated": "Last updated: [Insert date]",
"s1Title": "§ 1 Scope",
"s1Content": "These Terms of Service apply to the use of the software CannaManage (hereinafter 'Service'), provided by [Company name] (hereinafter 'Provider'). By registering, the user accepts these terms.",
"s2Title": "§ 2 Subject of Contract",
"s2Content": "The provider makes available to the user a web-based software for managing cannabis cultivation associations as Software-as-a-Service (SaaS). The scope of features depends on the chosen plan (Starter, Pro, or Enterprise).",
"s3Title": "§ 3 Registration and User Account",
"s3Content": "Registration requires truthful information. The user is responsible for the security of their access credentials. The provider must be notified immediately in case of suspected misuse. One administrator account is set up per cultivation association.",
"s4Title": "§ 4 Prices and Payment",
"s4Content": "Prices are according to the current price list. All prices include statutory VAT. Billing is monthly in advance. Payments are processed through the payment service provider Stripe (SEPA direct debit, credit card, or PayPal).",
"s5Title": "§ 5 Free Trial",
"s5Content": "New customers receive a free trial period of 3 months. During the trial, all features of the chosen plan are available. After the trial period, the subscription converts to a paid subscription unless cancelled beforehand.",
"s6Title": "§ 6 Cancellation",
"s6Content": "The subscription can be cancelled at any time at the end of the current billing period. Cancellation is done via account settings or by email to the provider. After cancellation, access remains until the end of the paid period.",
"s7Title": "§ 7 Availability",
"s7Content": "The provider strives for 99.5% annual average availability (for Enterprise plan with SLA). Scheduled maintenance is announced at least 48 hours in advance. Force majeure and scheduled maintenance are excluded from the availability guarantee.",
"s8Title": "§ 8 Liability",
"s8Content": "The provider is fully liable for intent and gross negligence. In cases of slight negligence, the provider is only liable for breach of essential contractual obligations (cardinal obligations), limited to foreseeable, contract-typical damage. Liability for data loss is limited to the typical restoration effort that would have arisen with regular data backup.",
"s9Title": "§ 9 Data Protection",
"s9Content": "The provider processes personal data in accordance with the privacy policy and GDPR provisions. Where the provider processes data on behalf of the user, a separate data processing agreement is concluded.",
"s10Title": "§ 10 Final Provisions",
"s10Content": "The law of the Federal Republic of Germany applies. The place of jurisdiction is, to the extent legally permissible, the registered office of the provider. Should individual provisions of these terms be invalid, the validity of the remaining provisions remains unaffected. Changes to these terms will be communicated to the user in good time."
}
},
"infoBoard": {
"title": "Info Board",
"description": "News and announcements for all members",
"createPost": "Create Post",
"postTitle": "Title",
"postTitlePlaceholder": "Post title...",
"postContent": "Content",
"postContentPlaceholder": "Write your post...",
"category": "Category",
"categories": {
"GENERAL": "General",
"EVENT": "Event",
"RULE": "Rule",
"MAINTENANCE": "Maintenance"
},
"pinPost": "Pin",
"archive": "Archive",
"delete": "Delete",
"publish": "Publish",
"creating": "Creating...",
"cancel": "Cancel",
"allCategories": "All Categories",
"showArchived": "Archived",
"archived": "Archived",
"loading": "Loading posts...",
"noPosts": "No posts yet. Create the first one!",
"confirmDelete": "Are you sure you want to delete this post?",
"unreadCount": "{count} unread"
},
"events": {
"title": "Calendar",
"description": "Club events and appointments",
"portalTitle": "Events",
"portalDescription": "Upcoming events from your club",
"createEvent": "Create Event",
"upcomingEvents": "Upcoming Events",
"noUpcomingEvents": "No upcoming events",
"noEventsOnDay": "No events on this day",
"cancel": "Cancel",
"full": "Fully booked",
"form": {
"title": "Title",
"type": "Type",
"start": "Start",
"end": "End",
"location": "Location",
"description": "Description",
"maxAttendees": "Max Attendees",
"recurring": "Recurring",
"recurrenceRule": "Recurrence",
"recurrenceEnd": "End Date"
},
"rsvp": {
"accept": "Accept",
"decline": "Decline",
"maybe": "Maybe"
},
"types": {
"MEETING": "Member Meeting",
"HARVEST_FESTIVAL": "Harvest Festival",
"BOARD_MEETING": "Board Meeting",
"WORKSHOP": "Workshop",
"OTHER": "Other"
}
},
"forum": {
"title": "Forum",
"description": "Club-internal discussion forum",
"newTopic": "New Topic",
"topicTitlePlaceholder": "Topic title...",
"topicContentPlaceholder": "Describe your topic...",
"creating": "Creating...",
"create": "Create",
"cancel": "Cancel",
"loading": "Loading...",
"noTopics": "No topics yet. Create the first one!",
"replies": "Replies",
"lastReply": "Last reply",
"openReports": "open reports",
"pin": "Pin",
"unpin": "Unpin",
"lock": "Lock",
"unlock": "Unlock",
"delete": "Delete",
"deleteReason": "Reason for deletion (optional):",
"replyPlaceholder": "Write a reply...",
"sending": "Sending...",
"reply": "Reply",
"edited": "edited",
"topicLocked": "This topic is locked. New replies are not possible.",
"reportReason": "Reason for report:",
"backToTopics": "Back to overview"
},
"finance": {
"title": "Club Finances",
"subtitle": "Overview of income, expenses, and member contributions",
"totalBalance": "Total Balance",
"incomeThisMonth": "Income (Month)",
"expensesThisMonth": "Expenses (Month)",
"outstandingMembers": "Outstanding Fees",
"outstandingTitle": "Outstanding Members",
"monthsOverdue": "months overdue",
"noOutstanding": "No outstanding fees",
"recentTransactions": "Recent Transactions",
"noTransactions": "No transactions available",
"recordPayment": "Record Payment",
"recordExpense": "Record Expense",
"payments": "Payments",
"kassenbuch": "Cash Book",
"feeSchedules": "Fee Schedules",
"reports": "Reports",
"exportCsv": "Export CSV",
"from": "From",
"to": "To",
"date": "Date",
"type": "Type",
"description": "Description",
"income": "Income",
"expense": "Expense",
"balance": "Balance",
"incomeLabel": "Income",
"expenseLabel": "Expense",
"loading": "Loading...",
"previous": "Previous",
"next": "Next",
"member": "Member",
"amount": "Amount",
"period": "Period",
"paymentMethod": "Payment Method",
"actions": "Actions",
"filterByStatus": "Filter by status",
"allStatuses": "All",
"noPayments": "No payments available",
"voidReason": "Reason for voiding:",
"memberIdPlaceholder": "Enter member ID",
"periodFrom": "Period from",
"periodTo": "Period to",
"reference": "Reference",
"referencePlaceholder": "e.g. transfer reference",
"expenseReferencePlaceholder": "e.g. invoice number",
"saving": "Saving...",
"category": "Category",
"descriptionPlaceholder": "e.g. Electricity bill June",
"bankTransfer": "Bank Transfer",
"cash": "Cash",
"sepa": "SEPA Direct Debit",
"card": "Card Payment",
"createFeeSchedule": "Create Fee Schedule",
"scheduleName": "Name",
"scheduleNamePlaceholder": "e.g. Standard Monthly Fee",
"intervalLabel": "Interval",
"scheduleDescPlaceholder": "Optional description",
"default": "Default",
"deactivate": "Deactivate",
"noFeeSchedules": "No fee schedules available",
"annualReport": "Annual Report",
"annualReportDescription": "Complete financial report with income, expenses, and member contributions.",
"auditorReport": "Auditor Report",
"auditorReportDescription": "Report for the auditor with all transaction details.",
"downloadPdf": "Download PDF",
"comingSoon": "Coming soon",
"status": {
"label": "Status",
"paid": "Paid",
"pending": "Pending",
"overdue": "Overdue",
"voided": "Voided"
},
"method": {
"BANK_TRANSFER": "Bank Transfer",
"CASH": "Cash",
"SEPA": "SEPA Direct Debit",
"CARD": "Card Payment"
},
"interval": {
"MONTHLY": "Monthly",
"QUARTERLY": "Quarterly",
"YEARLY": "Yearly",
"ONE_TIME": "One-time"
},
"categories": {
"rent": "Rent",
"utilities": "Utilities",
"equipment": "Equipment",
"seeds": "Seeds",
"supplies": "Supplies",
"insurance": "Insurance",
"legal": "Legal",
"other": "Other"
},
"portal": {
"title": "My Payments",
"currentBalance": "Current Balance",
"allPaid": "All fees paid",
"paymentDue": "Payment due",
"noFeeAssigned": "No fee schedule assigned",
"feeSchedule": "Fee Schedule",
"noFee": "None",
"lastPayment": "Last payment",
"paymentHistory": "Payment History",
"noPayments": "No payments yet"
}
}
}