Files
aminovfariz 14da36e83a feat(helpdesk): add customer engagement analytics page [skip ci]
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>
2026-06-25 10:30:05 +02:00

607 lines
29 KiB
JSON
Raw Permalink 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.
{
"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."
}