New "Customer analytics" page under Monitoring: surfaces who is actively in contact vs. who has gone quiet, so the team can reach out before a customer slips away. - KPI tiles: total / active / no-contact / never-in-contact - "Customers without recent contact" — longest silence first - "Top customers by communication" — most ticket activity in the period - Configurable no-contact threshold (helpdesk settings, default 60 days) CustomerEngagementService aggregates the global ticket snapshot per customer (same single-pull model as RiskRadarService — no N+1 to BC). Last contact is the most recent ticket activity; silence beyond the threshold flags the customer. Revenue ranking deferred (BC OData exposes no per-customer ledger). All within modules/helpdesk/. Tests + PHPStan green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
607 lines
29 KiB
JSON
607 lines
29 KiB
JSON
{
|
||
"Helpdesk": "Helpdesk",
|
||
"Helpdesk settings": "Helpdesk settings",
|
||
"Customers": "Customers",
|
||
"Debtor search": "Debtor search",
|
||
"Search debtors": "Search debtors",
|
||
"Search by name or debtor number...": "Search by name or debtor number...",
|
||
"Search": "Search",
|
||
"Please provide a customer number": "Please provide a customer number",
|
||
"Minimum 2 characters": "Minimum 2 characters",
|
||
"Please enter at least 2 characters.": "Please enter at least 2 characters.",
|
||
"No debtors found": "No debtors found",
|
||
"Try a different search term.": "Try a different search term.",
|
||
"Could not connect to Business Central.": "Could not connect to Business Central.",
|
||
"BC connection is not configured.": "BC connection is not configured.",
|
||
"BC connection is not configured. Please configure the connection in the settings.": "BC connection is not configured. Please configure the connection in the settings.",
|
||
"BC connection is not configured": "BC connection is not configured",
|
||
"Open settings": "Open settings",
|
||
"Debtor No.": "Debtor No.",
|
||
"Name": "Name",
|
||
"City": "City",
|
||
"Phone": "Phone",
|
||
"E-Mail": "E-Mail",
|
||
"Master data": "Master data",
|
||
"Contacts": "Contacts",
|
||
"Tickets": "Tickets",
|
||
"Debtor details": "Debtor details",
|
||
"Search name": "Search name",
|
||
"Address": "Address",
|
||
"Postal code": "Postal code",
|
||
"Salesperson": "Salesperson",
|
||
"No contacts found": "No contacts found",
|
||
"No contacts are linked to this debtor in Business Central.": "No contacts are linked to this debtor in Business Central.",
|
||
"No.": "No.",
|
||
"Type": "Type",
|
||
"Job title": "Job title",
|
||
"No tickets found": "No tickets found",
|
||
"No tickets are linked to this debtor in Business Central.": "No tickets are linked to this debtor in Business Central.",
|
||
"Ticket No.": "Ticket No.",
|
||
"Dashboard": "Dashboard",
|
||
"Description": "Description",
|
||
"Status": "Status",
|
||
"Category": "Category",
|
||
"Contact": "Contact",
|
||
"Support": "Support",
|
||
"Sales": "Sales",
|
||
"Controlling": "Controlling",
|
||
"Ticket": "Ticket",
|
||
"Debtor": "Debtor",
|
||
"Debtor not found": "Debtor not found",
|
||
"Ticket not found": "Ticket not found",
|
||
"Back to search": "Back to search",
|
||
"Back": "Back",
|
||
"Settings": "Settings",
|
||
"Connection": "Connection",
|
||
"Save": "Save",
|
||
"Settings saved": "Settings saved",
|
||
"Configuration incomplete": "Configuration incomplete",
|
||
"OData Base URL": "OData Base URL",
|
||
"Base URL without Company path segment": "Base URL without Company path segment",
|
||
"Company name": "Company name",
|
||
"BC company name (URL-encoded automatically)": "BC company name (URL-encoded automatically)",
|
||
"Authentication": "Authentication",
|
||
"Auth mode": "Auth mode",
|
||
"Basic Auth": "Basic Auth",
|
||
"OAuth2 (client credentials)": "OAuth2 (client credentials)",
|
||
"Username": "Username",
|
||
"Password": "Password",
|
||
"Leave empty to keep current password": "Leave empty to keep current password",
|
||
"Saved": "Saved",
|
||
"Azure Tenant ID": "Azure Tenant ID",
|
||
"Client ID": "Client ID",
|
||
"Client Secret": "Client Secret",
|
||
"Token endpoint URL": "Token endpoint URL",
|
||
"Connection test": "Connection test",
|
||
"Test connection": "Test connection",
|
||
"Connection successful": "Connection successful",
|
||
"Connection failed": "Connection failed",
|
||
"Testing...": "Testing...",
|
||
"Form expired, please try again": "Form expired, please try again",
|
||
"OData Base URL must use HTTPS": "OData Base URL must use HTTPS",
|
||
"Address & contact": "Address & contact",
|
||
"Company": "Company",
|
||
"Company details": "Company details",
|
||
"Contact & dates": "Contact & dates",
|
||
"Could not load contacts.": "Could not load contacts.",
|
||
"Could not load tickets.": "Could not load tickets.",
|
||
"Last activity": "Last activity",
|
||
"Ticket details": "Ticket details",
|
||
"Overview": "Overview",
|
||
"Open tickets": "Open tickets",
|
||
"All tickets": "All tickets",
|
||
"All contacts": "All contacts",
|
||
"Recent activity": "Recent activity",
|
||
"Support info & master data": "Support info & master data",
|
||
"Support type": "Support type",
|
||
"Location": "Location",
|
||
"No open tickets": "No open tickets",
|
||
"No recent activity found.": "No recent activity found.",
|
||
"Total tickets": "Total tickets",
|
||
"Total contracts": "Total contracts",
|
||
"Critical (>48h)": "Critical (>48h)",
|
||
"Oldest open": "Oldest open",
|
||
"Ticket list": "Ticket list",
|
||
"Next actions": "Next actions",
|
||
"System recommendations": "System recommendations",
|
||
"Action": "Action",
|
||
"Age (h)": "Age (h)",
|
||
"No support actions required right now.": "No support actions are required right now.",
|
||
"No system recommendations right now.": "No system recommendations right now.",
|
||
"Contracts & products": "Contracts & products",
|
||
"No contracts found for this customer.": "No contracts found for this customer.",
|
||
"Contract No.": "Contract No.",
|
||
"Product type": "Product type",
|
||
"Next invoicing": "Next invoicing",
|
||
"Amount": "Amount",
|
||
"Active contracts": "Active contracts",
|
||
"Could not load contracts.": "Could not load contracts.",
|
||
"Escalations": "Escalations",
|
||
"Escalations are not available yet.": "Escalations are not available yet.",
|
||
"Escalated tickets": "Escalated tickets",
|
||
"No escalated tickets right now.": "No escalated tickets right now.",
|
||
"Could not load escalated tickets.": "Could not load escalated tickets.",
|
||
"Escalation code": "Escalation code",
|
||
"SLA target": "SLA target",
|
||
"Overdue by": "Overdue by",
|
||
"day": "day",
|
||
"days": "days",
|
||
"Ticket volume": "Ticket volume",
|
||
"Close rate": "Close rate",
|
||
"Avg. resolution": "Avg. resolution",
|
||
"Open backlog": "Open tickets",
|
||
"kpi_tooltip_close_rate": "Closed ÷ created tickets in period. Above 1× = open ticket queue is shrinking.",
|
||
"kpi_tooltip_resolution": "Median processing time of all tickets closed in the selected period.",
|
||
"kpi_tooltip_backlog": "Current snapshot of all open tickets – independent of the selected period. Shows the pending queue.",
|
||
"Backlog shrinking": "Queue shrinking",
|
||
"Backlog growing": "Queue growing",
|
||
"unassigned": "unassigned",
|
||
"Ticket trend": "Ticket trend",
|
||
"Support efficiency": "Support efficiency",
|
||
"Contract metrics": "Contract metrics",
|
||
"Risk assessment": "Risk assessment",
|
||
"vs. prev. period": "vs. prev. period",
|
||
"Low": "Low",
|
||
"Medium": "Medium",
|
||
"High": "High",
|
||
"All checks passed": "All checks passed",
|
||
"of": "of",
|
||
"checks flagged": "checks flagged",
|
||
"Limit": "Limit",
|
||
"No controlling data available.": "No controlling data available.",
|
||
"Resolution time": "Resolution time",
|
||
"Oldest open ticket": "Oldest open ticket",
|
||
"Unassigned": "Unassigned",
|
||
"risk_desc_ticket_volume": "Change vs. previous period",
|
||
"risk_desc_resolution_time": "Median time to close",
|
||
"risk_desc_open_aging": "Since last activity",
|
||
"risk_desc_unassigned": "Share of open tickets without assignee",
|
||
"Ticket volume increase": "Ticket volume increase",
|
||
"High avg. resolution time": "High avg. resolution time",
|
||
"Open ticket aging": "Open ticket aging",
|
||
"Unassigned ticket ratio": "Unassigned ticket ratio",
|
||
"Could not load controlling dashboard.": "Could not load controlling dashboard.",
|
||
"Avg. open age": "Avg. open age",
|
||
"Without assignee": "Without assignee",
|
||
"30 days": "30 days",
|
||
"90 days": "90 days",
|
||
"6 months": "6 months",
|
||
"1 year": "1 year",
|
||
"Escalation rate": "Escalation rate",
|
||
"Threshold (%)": "Threshold (%)",
|
||
"Threshold (hours)": "Threshold (hours)",
|
||
"Controlling risk configuration was invalid. Defaults were applied.": "Controlling risk configuration was invalid. Defaults were applied.",
|
||
"Open ticket without activity for": "Open ticket without activity for",
|
||
"hours": "hours",
|
||
"Open ticket without assigned support user": "Open ticket without assigned support user",
|
||
"Follow up oldest open ticket": "Follow up oldest open ticket",
|
||
"System recommendation configuration was invalid. Defaults were applied.": "System recommendation configuration was invalid. Defaults were applied.",
|
||
"Maximum recommendations": "Maximum recommendations",
|
||
"Rule templates": "Rule templates",
|
||
"Enabled": "Enabled",
|
||
"Priority": "Priority",
|
||
"Thresholds": "Thresholds",
|
||
"Escalation overdue": "Escalation overdue",
|
||
"High-risk aging": "High-risk aging",
|
||
"Unassigned open": "Unassigned open",
|
||
"Stale open": "Stale open",
|
||
"Customer backlog": "Open tickets for customer",
|
||
"Minimum overdue (minutes)": "Minimum overdue (minutes)",
|
||
"High-risk codes (comma separated)": "High-risk codes (comma separated)",
|
||
"Minimum age (hours)": "Minimum age (hours)",
|
||
"Minimum open tickets": "Minimum open tickets",
|
||
"Escalation SLA exceeded by {overdue_hours}h ({escalation_code}).": "SLA exceeded by {overdue_hours}h ({escalation_code}) — escalate immediately or inform customer.",
|
||
"High-risk ticket ({escalation_code}) is open for {age_hours}h.": "Critical ticket ({escalation_code}) open for {age_hours}h — review priority and ensure progress.",
|
||
"Ticket is unassigned for {age_hours}h.": "Unassigned for {age_hours}h — assign to a team member urgently.",
|
||
"No activity for {age_hours}h.": "No activity for {age_hours}h — check if customer is waiting for a response.",
|
||
"Customer backlog: {open_tickets} open tickets.": "{open_tickets} open tickets — address oldest tickets first to reduce the queue.",
|
||
"Created": "Created",
|
||
"Loading...": "Loading...",
|
||
"Refresh data": "Refresh data",
|
||
"Mobile": "Mobile",
|
||
"Activity": "Activity",
|
||
"Activity timeline": "Activity timeline",
|
||
"Message": "Message",
|
||
"Status change": "Status change",
|
||
"No activity found.": "No activity found.",
|
||
"Could not load activity log.": "Could not load activity log.",
|
||
"Communication history": "Communication history",
|
||
"No communication found.": "No communication found.",
|
||
"Could not load communication history.": "Could not load communication history.",
|
||
"Live communication unavailable, showing activity fallback.": "Live communication unavailable, showing activity fallback.",
|
||
"Ticket communication": "Ticket communication",
|
||
"Last 5 tickets": "Last 5 tickets",
|
||
"Last 10 tickets": "Last 10 tickets",
|
||
"Some ticket communications could not be loaded completely.": "Some ticket communications could not be loaded completely.",
|
||
"Unknown user": "Unknown user",
|
||
"Unknown time": "Unknown time",
|
||
"Source": "Source",
|
||
"SOAP": "SOAP",
|
||
"Activity fallback": "Activity fallback",
|
||
"sent a message": "sent a message",
|
||
"changed status": "changed status",
|
||
"Forwarded": "forwarded the ticket",
|
||
"attached a file": "attached a file",
|
||
"logged an activity": "logged an activity",
|
||
"on": "on",
|
||
"Process": "Process",
|
||
"All": "All",
|
||
"Open": "Open",
|
||
"In Progress": "In Progress",
|
||
"Closed": "Closed",
|
||
"Monthly volume": "Monthly volume",
|
||
"Support hours": "Support hours",
|
||
"Contract overview": "Contract overview",
|
||
"No contract details available.": "No contract details available.",
|
||
"Could not load sales dashboard.": "Could not load sales dashboard.",
|
||
"Quantity": "Quantity",
|
||
"Unit price": "Unit price",
|
||
"Line amount": "Line amount",
|
||
"Line state": "Line state",
|
||
"Starting date": "Starting date",
|
||
"Invoicing period": "Invoicing period",
|
||
"positions": "positions",
|
||
"per month": "per month",
|
||
"Last invoicing": "Last invoicing",
|
||
"Analysis": "Analysis",
|
||
"New (30d)": "New (30d)",
|
||
"Resolved (30d)": "Resolved (30d)",
|
||
"Avg. age open": "Avg. age open",
|
||
"vs. prev. 30d": "vs. prev. 30d",
|
||
"net (30d)": "net (30d)",
|
||
"critical": "critical",
|
||
"Avg. contract value": "Avg. contract value",
|
||
"of {total} total": "of {total} total",
|
||
"in {days} days": "in {days} days",
|
||
"largest": "largest",
|
||
"Attention needed": "Attention needed",
|
||
"Recommendations": "Recommendations",
|
||
"Contract summary": "Contract summary",
|
||
"Contract trend": "Contract trend",
|
||
"New contracts": "New contracts",
|
||
"Ended contracts": "Ended contracts",
|
||
"active": "active",
|
||
"ended": "ended",
|
||
"Age": "Age",
|
||
"Period": "Period",
|
||
"Last 30 days": "Last 30 days",
|
||
"Last 90 days": "Last 90 days",
|
||
"Last 180 days": "Last 180 days",
|
||
"Last 365 days": "Last 365 days",
|
||
"Automation": "Automation",
|
||
"Risk monitoring": "Risk monitoring",
|
||
"rule_help_escalation_overdue": "Recommends action when SLA escalation deadlines are exceeded.",
|
||
"rule_help_high_risk_aging": "Detects critical tickets with specific escalation codes that have been open too long.",
|
||
"rule_help_unassigned_open": "Flags open tickets that are not assigned to any support agent.",
|
||
"rule_help_stale_open": "Marks open tickets without recent activity for follow-up.",
|
||
"rule_help_customer_backlog": "Warns when a customer has too many open tickets at once.",
|
||
"rule_help_ticket_volume": "Triggers when ticket volume rises significantly compared to the previous period.",
|
||
"rule_help_avg_resolution": "Warns when average resolution time exceeds the threshold.",
|
||
"rule_help_open_aging": "Detects open tickets that have been without activity for too long.",
|
||
"rule_help_unassigned_ratio": "Warns when too many open tickets lack an assigned agent.",
|
||
"Automation configuration was invalid. Defaults were applied.": "Automation configuration was invalid. Defaults were applied.",
|
||
"Advanced options": "Advanced options",
|
||
"Min. overdue": "Min. overdue",
|
||
"Min. age": "Min. age",
|
||
"Min. open": "Min. open",
|
||
"Team": "Team",
|
||
"Team dashboard": "Team dashboard",
|
||
"Team workload": "Team workload",
|
||
"Support agent": "Support agent",
|
||
"Critical (>48h open)": "Critical (>48h open)",
|
||
"Avg. age (h)": "Avg. age (h)",
|
||
"Resolved in period": "Resolved in period",
|
||
"Not assigned": "Not assigned",
|
||
"Could not load team dashboard.": "Could not load team dashboard.",
|
||
"No team data available.": "No team data available.",
|
||
"Top customers": "Top customers",
|
||
"Top categories": "Top categories",
|
||
"Current": "Current",
|
||
"Performance": "Performance",
|
||
"Historical": "Historical",
|
||
"Queue": "Queue",
|
||
"trend_tooltip_up": "More tickets received than resolved in the period — backlog is growing.",
|
||
"trend_tooltip_down": "More tickets resolved than received in the period — backlog is shrinking.",
|
||
"Download file": "Download file",
|
||
"Trend based on last {days} days": "Trend based on last {days} days",
|
||
"Trend": "Trend",
|
||
"Risk radar": "Risk radar",
|
||
"Risk score": "Risk score",
|
||
"Risk traffic light logic": "Traffic light logic",
|
||
"High risk (55-100)": "High risk (55-100)",
|
||
"Medium risk (25-54)": "Medium risk (25-54)",
|
||
"Low risk (0-24)": "Low risk (0-24)",
|
||
"Score = weighted sum: Open pressure (35), Trend (30), SLA overdue (25), Inactivity (10).": "Score = weighted sum: Open pressure (35), Trend (30), SLA overdue (25), Inactivity (10).",
|
||
"High risk": "High risk",
|
||
"Medium risk": "Medium risk",
|
||
"Low risk": "Low risk",
|
||
"SLA overdue": "SLA overdue",
|
||
"Net flow": "Net flow",
|
||
"Open pressure": "Open pressure",
|
||
"Inactivity": "Inactivity",
|
||
"No risk data available.": "No risk data available.",
|
||
"Could not load risk radar.": "Could not load risk radar.",
|
||
"Data may be incomplete. Not all tickets could be loaded.": "Data may be incomplete. Not all tickets could be loaded.",
|
||
"Why at risk": "Why at risk",
|
||
"open": "open",
|
||
"overdue": "overdue",
|
||
"net": "net",
|
||
"Search customers...": "Search customers...",
|
||
"more than resolved": "more than resolved",
|
||
"SLA breaches": "SLA breaches",
|
||
"Oldest ticket": "Oldest ticket",
|
||
"General connection": "General connection",
|
||
"Tenant connection": "Tenant connection",
|
||
"Configuration source": "Configuration source",
|
||
"Use tenant-specific configuration": "Use tenant-specific configuration",
|
||
"When enabled, this tenant uses its own BC connection instead of the global configuration.": "When enabled, this tenant uses its own BC connection instead of the global configuration.",
|
||
"This tenant inherits the global configuration. Enable the toggle above to use tenant-specific settings.": "This tenant inherits the global configuration. Enable the toggle above to use tenant-specific settings.",
|
||
"Tenant settings saved": "Tenant settings saved",
|
||
"Token endpoint must use HTTPS": "Token endpoint must use HTTPS",
|
||
"The current tenant uses its own configuration. Changes here only affect tenants without a tenant-specific connection.": "The current tenant uses its own configuration. Changes here only affect tenants without a tenant-specific connection.",
|
||
"Failed to save tenant settings": "Failed to save tenant settings",
|
||
"Meetings": "Meetings",
|
||
"Released": "Released",
|
||
"Pending": "Pending",
|
||
"Upcoming meetings": "Upcoming meetings",
|
||
"Past meetings": "Past meetings",
|
||
"No meetings found for this customer.": "No meetings found for this customer.",
|
||
"Could not load meetings.": "Could not load meetings.",
|
||
"Domains": "Domains",
|
||
"Search domains...": "Search domains...",
|
||
"Customer No.": "Customer No.",
|
||
"Customer Name": "Customer Name",
|
||
"Administration": "Administration",
|
||
"No domains found": "No domains found",
|
||
"Could not load domains.": "Could not load domains.",
|
||
"Lookup": "Lookup",
|
||
"Monitoring": "Monitoring",
|
||
"Contract type": "Contract type",
|
||
"Customer": "Customer",
|
||
"Software products": "Software products",
|
||
"Software product": "Software product",
|
||
"Search software products...": "Search software products...",
|
||
"BC description": "BC description",
|
||
"Product name": "Product name",
|
||
"Code": "Code",
|
||
"Active": "Active",
|
||
"Inactive": "Inactive",
|
||
"Last synced": "Last synced",
|
||
"Modified": "Modified",
|
||
"Edit software product": "Edit software product",
|
||
"Back to list": "Back to list",
|
||
"Save & close": "Save & close",
|
||
"Software product updated": "Software product updated",
|
||
"Software product not found": "Software product not found",
|
||
"Product details": "Product details",
|
||
"Enter product name...": "Enter product name...",
|
||
"Name must not exceed 255 characters": "Name must not exceed 255 characters",
|
||
"Failed to save": "Failed to save",
|
||
"Handover protocol": "Handover protocol",
|
||
"Handover protocol schema": "Handover protocol schema",
|
||
"Define the fields that make up the handover protocol for this product.": "Define the fields that make up the handover protocol for this product.",
|
||
"Add field": "Add field",
|
||
"Remove field": "Remove field",
|
||
"Duplicate field": "Duplicate field",
|
||
"Move up": "Move up",
|
||
"Move down": "Move down",
|
||
"Field key": "Field key",
|
||
"Field label": "Field label",
|
||
"Field type": "Field type",
|
||
"Required": "Required",
|
||
"Options": "Options",
|
||
"Add option": "Add option",
|
||
"Remove option": "Remove option",
|
||
"Option value": "Option value",
|
||
"Option label": "Option label",
|
||
"No fields defined yet. Click \"Add field\" to get started.": "No fields defined yet. Click \"Add field\" to get started.",
|
||
"Heading": "Heading",
|
||
"Paragraph": "Paragraph",
|
||
"Text": "Text",
|
||
"Textarea": "Textarea",
|
||
"Number": "Number",
|
||
"Date": "Date",
|
||
"Checkbox": "Checkbox",
|
||
"Select": "Select",
|
||
"User selection": "User selection",
|
||
"Text content": "Text content",
|
||
"Maximum %d fields allowed": "Maximum %d fields allowed",
|
||
"Field %d: unknown type \"%s\"": "Field %d: unknown type \"%s\"",
|
||
"Field %d: label is required": "Field %d: label is required",
|
||
"Field %d: generates duplicate key \"%s\" — use a more distinct label": "Field %d: generates duplicate key \"%s\" — use a more distinct label",
|
||
"Field %d: select must have at least one option": "Field %d: select must have at least one option",
|
||
"Field %d, option %d: label is required": "Field %d, option %d: label is required",
|
||
"Preview": "Preview",
|
||
"Add fields to see a live preview.": "Add fields to see a live preview.",
|
||
"Field": "Field",
|
||
"Operations": "Operations",
|
||
"Handovers": "Handovers",
|
||
"Handover": "Handover",
|
||
"New handover": "New handover",
|
||
"Handover created": "Handover created",
|
||
"Handover updated": "Handover updated",
|
||
"Handover not found": "Handover not found",
|
||
"Draft": "Draft",
|
||
"In progress": "In progress",
|
||
"Completed": "Completed",
|
||
"Archived": "Archived",
|
||
"Customer & product": "Customer & product",
|
||
"Protocol": "Protocol",
|
||
"Select customer and product": "Select customer and product",
|
||
"Choose the customer and software product for this handover protocol.": "Choose the customer and software product for this handover protocol.",
|
||
"Search by name or number...": "Search by name or number...",
|
||
"No customers found": "No customers found",
|
||
"Search failed": "Search failed",
|
||
"Fill handover protocol": "Fill handover protocol",
|
||
"Create handover": "Create handover",
|
||
"Continue": "Continue",
|
||
"Cancel": "Cancel",
|
||
"Please select a customer": "Please select a customer",
|
||
"Please select a software product": "Please select a software product",
|
||
"Software product has no handover protocol schema": "Software product has no handover protocol schema",
|
||
"No software products with handover protocol schemas found.": "No software products with handover protocol schemas found.",
|
||
"Please complete step 1 first": "Please complete step 1 first",
|
||
"Debitor number is required": "Debitor number is required",
|
||
"Software product is required": "Software product is required",
|
||
"Failed to create handover": "Failed to create handover",
|
||
"You do not have permission to edit this handover": "You do not have permission to edit this handover",
|
||
"You do not have permission to set this status": "You do not have permission to set this status",
|
||
"Invalid status": "Invalid status",
|
||
"Unknown field: %s": "Unknown field: %s",
|
||
"%s is required": "%s is required",
|
||
"Failed to update status": "Failed to update status",
|
||
"No protocol fields defined.": "No protocol fields defined.",
|
||
"Please select...": "Please select...",
|
||
"Change status": "Change status",
|
||
"Debitor No.": "Debitor No.",
|
||
"Progress": "Progress",
|
||
"Created by": "Created by",
|
||
"Search handovers...": "Search handovers...",
|
||
"ID": "ID",
|
||
"History": "History",
|
||
"Viewing version %d": "Viewing version %d",
|
||
"compared with version %d": "compared with version %d",
|
||
"Back to current": "Back to current",
|
||
"Restore this version": "Restore this version",
|
||
"Restore this version?": "Restore this version?",
|
||
"Version restored": "Version restored",
|
||
"Failed to restore": "Failed to restore",
|
||
"Only managers can restore revisions": "Only managers can restore revisions",
|
||
"Revision not found": "Revision not found",
|
||
"Fields changed": "Fields changed",
|
||
"Status changed": "Status changed",
|
||
"Fields and status changed": "Fields and status changed",
|
||
"Restored": "Restored",
|
||
"was: %s": "was: %s",
|
||
"Yes": "Yes",
|
||
"No": "No",
|
||
"Changed": "Changed",
|
||
"Compare with current": "Compare with current",
|
||
"Domain": "Domain",
|
||
"Select a customer first...": "Select a customer first...",
|
||
"Loading domains...": "Loading domains...",
|
||
"No domains found for this customer": "No domains found for this customer",
|
||
"No domains found for this customer. Enter domain name manually:": "No domains found for this customer. Enter domain name manually:",
|
||
"Domain name (e.g. example.de)": "Domain name (e.g. example.de)",
|
||
"URL (optional, e.g. https://example.de)": "URL (optional, e.g. https://example.de)",
|
||
"Failed to load domains": "Failed to load domains",
|
||
"Please select a domain": "Please select a domain",
|
||
"Delete": "Delete",
|
||
"Select all": "Select all",
|
||
"Delete selected handovers?": "Delete selected handovers?",
|
||
"%d handover(s) deleted": "%d handover(s) deleted",
|
||
"Failed to delete handovers": "Failed to delete handovers",
|
||
"Only managers can delete handovers": "Only managers can delete handovers",
|
||
"No handovers selected": "No handovers selected",
|
||
"Domain not found": "Domain not found",
|
||
"Domain detail": "Domain detail",
|
||
"Back to domains": "Back to domains",
|
||
"Open domain": "Open domain",
|
||
"Open debitor": "Open debitor",
|
||
"Customer information": "Customer information",
|
||
"Contract information": "Contract information",
|
||
"Related domains": "Related domains",
|
||
"No handovers for this domain yet": "No handovers for this domain yet",
|
||
"No contract information available": "No contract information available",
|
||
"Network error — please try again": "Network error — please try again",
|
||
"Contract state": "Contract state",
|
||
"Total": "Total",
|
||
"URL": "URL",
|
||
"State": "State",
|
||
"Product": "Product",
|
||
"Updates": "Updates",
|
||
"Ticket status": "Ticket status",
|
||
"Assignment": "Assignment",
|
||
"Resolved": "Resolved",
|
||
"Assign update": "Assign update",
|
||
"Assign": "Assign",
|
||
"Assigned": "Assigned",
|
||
"Update": "Update",
|
||
"Hotfix": "Hotfix",
|
||
"Gitea link": "Gitea link",
|
||
"e.g. https://gitea.example.com/org/repo/src/branch/main/updates/2026-02": "e.g. https://gitea.example.com/org/repo/src/branch/main/updates/2026-02",
|
||
"Notes": "Notes",
|
||
"No update tickets found": "No update tickets found",
|
||
"Failed to load update tickets": "Failed to load update tickets",
|
||
"Update assigned successfully": "Update assigned successfully",
|
||
"Failed to assign update": "Failed to assign update",
|
||
"Select domain...": "Select domain...",
|
||
"No updates for this domain yet": "No updates for this domain yet",
|
||
"Search updates...": "Search updates...",
|
||
"Open in Gitea": "Open in Gitea",
|
||
"Invalid category": "Invalid category",
|
||
"Ticket number is required": "Ticket number is required",
|
||
"View software updates list": "View software updates list",
|
||
"Assign and manage software updates": "Assign and manage software updates",
|
||
"Security level": "Security level",
|
||
"Normal": "Normal",
|
||
"Critical": "Critical",
|
||
"Save failed": "Save failed",
|
||
"Invalid CSRF token": "Invalid CSRF token",
|
||
"No tenant context": "No tenant context",
|
||
"Missing domain number": "Missing domain number",
|
||
"Invalid security level": "Invalid security level",
|
||
"Failed to save security level": "Failed to save security level",
|
||
"Under review": "Under review",
|
||
"Assigned to": "Assigned to",
|
||
"Assigned at": "Assigned at",
|
||
"Not assigned yet": "Not assigned yet",
|
||
"Change assignment": "Change assignment",
|
||
"Assign handover": "Assign handover",
|
||
"Assign to": "Assign to",
|
||
"— Select employee —": "— Select employee —",
|
||
"Due date (optional)": "Due date (optional)",
|
||
"Due date": "Due date",
|
||
"Currently assigned to": "Currently assigned to",
|
||
"Resend notification": "Resend notification",
|
||
"Notification resent": "Notification resent",
|
||
"Failed to resend notification": "Failed to resend notification",
|
||
"Handover assigned": "Handover assigned",
|
||
"Failed to assign handover": "Failed to assign handover",
|
||
"Only managers can assign handovers": "Only managers can assign handovers",
|
||
"Only managers can resend notifications": "Only managers can resend notifications",
|
||
"Handover has no assignee": "Handover has no assignee",
|
||
"Please select an employee": "Please select an employee",
|
||
"Submit for review": "Submit for review",
|
||
"Submit this handover for review?": "Submit this handover for review?",
|
||
"Handover submitted for review": "Handover submitted for review",
|
||
"Failed to submit for review": "Failed to submit for review",
|
||
"You are not assigned to this handover": "You are not assigned to this handover",
|
||
"Handover cannot be submitted for review in its current status": "Handover cannot be submitted for review in its current status",
|
||
"Done": "Done",
|
||
"Assigned to (column)": "Assigned to",
|
||
"How do you want to proceed?": "How do you want to proceed?",
|
||
"Create myself": "Create myself",
|
||
"I will fill in the handover protocol myself.": "I will fill in the handover protocol myself.",
|
||
"Assign to employee": "Assign to employee",
|
||
"An employee will receive an invitation to fill in the protocol.": "An employee will receive an invitation to fill in the protocol.",
|
||
"Please select an option": "Please select an option",
|
||
"Select customer, product and employee": "Select customer, product and employee",
|
||
"Create and assign": "Create and assign",
|
||
"Handover created and assigned": "Handover created and assigned",
|
||
"No active employees found.": "No active employees found.",
|
||
"Please select an employee to assign": "Please select an employee to assign",
|
||
"Delete handover": "Delete handover",
|
||
"Delete this handover?": "Delete this handover?",
|
||
"Handover deleted": "Handover deleted",
|
||
"Customer analytics": "Customer analytics",
|
||
"No-contact threshold": "No-contact threshold",
|
||
"Could not load customer analytics.": "Could not load customer analytics.",
|
||
"No customer data available.": "No customer data available.",
|
||
"No contact": "No contact",
|
||
"Never in contact": "Never in contact",
|
||
"days ago": "days ago",
|
||
"never": "never",
|
||
"Tickets in period": "Tickets in period",
|
||
"Last contact": "Last contact",
|
||
"Customers without recent contact": "Customers without recent contact",
|
||
"Longest silence first — consider reaching out.": "Longest silence first — consider reaching out.",
|
||
"Top customers by communication": "Top customers by communication",
|
||
"Most ticket activity in the selected period.": "Most ticket activity in the selected period.",
|
||
"Every customer has been in contact recently.": "Every customer has been in contact recently.",
|
||
"No communication recorded in the selected period.": "No communication recorded in the selected period.",
|
||
"Customer engagement": "Customer engagement",
|
||
"No-contact threshold (days)": "No-contact threshold (days)",
|
||
"Customers without any communication for longer than this are flagged in the customer analytics view.": "Customers without any communication for longer than this are flagged in the customer analytics view."
|
||
}
|