266 lines
13 KiB
JSON
266 lines
13 KiB
JSON
{
|
|
"list": {
|
|
"eyebrow": "Assure / Workbench",
|
|
"title": "Data quality",
|
|
"description": "Resolve evidence-backed exceptions before they disrupt operations.",
|
|
"runScan": "Run quality scan",
|
|
"confirmScanTitle": "Confirm quality scan",
|
|
"confirmScanBody": "Run the deterministic scan across all five rule types now?",
|
|
"scanning": "Scanning…",
|
|
"confirmScanYes": "Yes, run scan",
|
|
"cancel": "Cancel",
|
|
"scanComplete": "Scan complete: {{summary}}",
|
|
"scanNoNew": "no new issues found (existing open issues are not recreated).",
|
|
"scanFailed": "Could not run the quality scan.",
|
|
"statusLabel": "Status",
|
|
"statusAll": "All statuses",
|
|
"statusOpen": "Open",
|
|
"statusDeferred": "Deferred",
|
|
"statusResolved": "Resolved",
|
|
"statusRejected": "Rejected",
|
|
"ruleTypeLabel": "Rule type",
|
|
"ruleTypeAll": "All rule types",
|
|
"severityLabel": "Severity",
|
|
"severityAll": "All severity levels",
|
|
"assigneeLabel": "Assigned to",
|
|
"assigneeAll": "All team members",
|
|
"unassigned": "Unassigned",
|
|
"overdueOnly": "Overdue only",
|
|
"bulkTitle": "Update selected work",
|
|
"selected": "{{count}} selected",
|
|
"assignTo": "Assign to",
|
|
"dueAt": "Due date",
|
|
"invalidDueAt": "Choose a valid Europe/Brussels date and time.",
|
|
"bulkApply": "Update work queue",
|
|
"bulkSaving": "Updating…",
|
|
"bulkFailed": "The work queue could not be updated.",
|
|
"clearSelection": "Clear selection",
|
|
"selectIssue": "Select issue {{ref}}",
|
|
"selectVisible": "Select visible issues",
|
|
"deselectVisible": "Clear visible selection",
|
|
"openIssue": "Open issue {{ref}}",
|
|
"filtersToggle": "Filters · {{count}} active",
|
|
"activeFilters": "Active filters",
|
|
"demoScenariosOnly": "Demo scenarios only",
|
|
"loading": "Loading quality workbench…",
|
|
"queueClear": "Queue is clear",
|
|
"noIssuesMatch": "No issues match the current filters.",
|
|
"noDemoIssuesMatch": "No demo-scenario issues match",
|
|
"noDemoIssuesMatchDetail": "Uncheck 'Demo scenarios only' to see the full queue.",
|
|
"unavailable": "Data-quality issues are unavailable right now.",
|
|
"count": "{{count}} issues",
|
|
"evidenceBacked": "Evidence-backed detection",
|
|
"columns": {
|
|
"reference": "Reference",
|
|
"select": "Select",
|
|
"rule": "Rule",
|
|
"entity": "Entity",
|
|
"severity": "Severity",
|
|
"status": "Status",
|
|
"assignee": "Assignee",
|
|
"due": "Due date"
|
|
}
|
|
},
|
|
"ruleTypes": {
|
|
"possible_duplicate_customer": "Possible duplicate customer",
|
|
"missing_required_field": "Missing required field",
|
|
"odometer_regression": "Odometer regression",
|
|
"booking_overlap": "Booking overlap",
|
|
"vehicle_status_conflict": "Vehicle status conflict"
|
|
},
|
|
"severities": {
|
|
"high": "Critical",
|
|
"medium": "Warning",
|
|
"low": "Info"
|
|
},
|
|
"detail": {
|
|
"backLink": "Quality workbench",
|
|
"eyebrow": "Quality / {{rule}}",
|
|
"title": "Review persisted evidence and record an audited resolution.",
|
|
"notFound": "This issue could not be found.",
|
|
"loading": "Loading issue evidence…",
|
|
"managerOnly": "The quality workbench is visible to Operations Managers only.",
|
|
"managerOnlyDetail": "Data-quality evidence and resolutions are visible to Operations Managers only.",
|
|
"summary": {
|
|
"rule": "Rule",
|
|
"entity": "Entity",
|
|
"evidenceSummary": "Evidence summary"
|
|
},
|
|
"resolved": {
|
|
"title": "Issue {{ref}} resolved",
|
|
"body": "The change has been applied and is recorded in the audit trail.",
|
|
"viewAudit": "View audit trail",
|
|
"viewVehicle": "View vehicle",
|
|
"continueDemo": "Continue the demo"
|
|
},
|
|
"deferOrReject": {
|
|
"heading": "Defer or reject",
|
|
"description": "Defer to review later, or reject if this is not a real issue.",
|
|
"defer": "Defer",
|
|
"reject": "Reject",
|
|
"deferFailed": "Could not defer this issue.",
|
|
"rejectFailed": "Could not reject this issue."
|
|
},
|
|
"explainer": {
|
|
"whatIsWrong": "What's wrong",
|
|
"whyItMatters": "Why it matters",
|
|
"possible_duplicate_customer": {
|
|
"whatIsWrong": "Two customer profiles share identifying details (email, phone or a very similar name) strongly enough that they are likely the same person, registered twice.",
|
|
"whyItMatters": "Duplicate customers split booking history across two records, risk duplicate billing, and confuse support conversations."
|
|
},
|
|
"missing_required_field": {
|
|
"whatIsWrong": "This record is missing information that's required for normal operation (for example, a customer with neither an email nor a phone number on file).",
|
|
"whyItMatters": "Without this data, the business can't reach the customer, or can't reliably identify the vehicle for compliance and hand-off checks."
|
|
},
|
|
"odometer_regression": {
|
|
"whatIsWrong": "A submitted odometer reading is lower than the vehicle's last known (canonical) reading.",
|
|
"whyItMatters": "A falling odometer usually means a data-entry mistake or that readings were recorded against the wrong vehicle. Letting it through silently would corrupt maintenance scheduling and resale mileage history."
|
|
},
|
|
"booking_overlap": {
|
|
"whatIsWrong": "The same vehicle is committed to two bookings whose date ranges overlap.",
|
|
"whyItMatters": "Only one of these bookings can actually be honoured. Left unresolved, a customer would arrive to find their vehicle already out with someone else."
|
|
},
|
|
"vehicle_status_conflict": {
|
|
"whatIsWrong": "This vehicle's stored operational status doesn't match what its own booking and inspection history implies it should be.",
|
|
"whyItMatters": "An incorrect status can make an unavailable vehicle appear bookable, or keep an available vehicle hidden from the fleet."
|
|
}
|
|
},
|
|
"evidence": {
|
|
"duplicate.exact_email": "Identical email address",
|
|
"duplicate.exact_phone": "Identical phone number",
|
|
"duplicate.same_postal_code": "Same postal code",
|
|
"duplicateSimilarName": "Strongly similar name (score {{score}})",
|
|
"missingField": "Missing field: {{field}}",
|
|
"overlapReservedBookings": "Overlapping bookings: {{refs}}",
|
|
"odometerRegression": "Booking {{laterRef}} recorded {{laterKm}} km, below the {{earlierKm}} km recorded by earlier booking {{earlierRef}}.",
|
|
"upcomingBookingMissingInspection": "Booking {{bookingRef}} starts soon but the required operational inspection is still missing."
|
|
},
|
|
"duplicateCustomer": {
|
|
"heading": "Compare and merge",
|
|
"description": "Choose the canonical customer and review each conflicting field.",
|
|
"keepAsSurvivor": "Keep as survivor",
|
|
"differs": "Differs",
|
|
"match": "Match",
|
|
"summaryCounts": "{{matchCount}} matching fields · {{conflictCount}} conflicting fields",
|
|
"showMatchingFields": "Also show matching fields",
|
|
"hideMatchingFields": "Hide matching fields",
|
|
"previewTitle": "Preview of the merged record ({{ref}})",
|
|
"mergePreview": "{{loser}} will be safely archived and linked to {{survivor}}; its booking history moves with it.",
|
|
"mergeInto": "Merge into {{ref}}",
|
|
"confirmMergeTitle": "Confirm merge",
|
|
"confirmMergeBody": "Merge {{loser}} into {{survivor}}? This cannot be undone.",
|
|
"merging": "Merging…",
|
|
"confirmMergeYes": "Yes, merge",
|
|
"mergeFailed": "Could not merge these customers.",
|
|
"bothMissing": "Both customers in this comparison could not be loaded.",
|
|
"fieldColumn": "Field",
|
|
"fields": {
|
|
"first_name": "First name",
|
|
"last_name": "Last name",
|
|
"email": "Email",
|
|
"phone": "Phone",
|
|
"postal_code": "Postal code",
|
|
"city": "City"
|
|
}
|
|
},
|
|
"missingField": {
|
|
"heading": "Provide the missing fields",
|
|
"description": "Complete the record for {{ref}}. The issue resolves automatically once nothing required is missing.",
|
|
"atLeastOne": "At least one of email or phone is required.",
|
|
"saveAndRecheck": "Save and re-check",
|
|
"saving": "Saving…",
|
|
"saveFailed": "Could not save these fields.",
|
|
"fields": {
|
|
"first_name": "First name",
|
|
"last_name": "Last name",
|
|
"email": "Email",
|
|
"phone": "Phone",
|
|
"registration_number": "Registration number",
|
|
"make": "Make",
|
|
"model": "Model",
|
|
"location": "Location"
|
|
}
|
|
},
|
|
"odometerRegression": {
|
|
"heading": "Resolve the odometer regression",
|
|
"description": "The canonical odometer is never lowered automatically -- choose how to reconcile it.",
|
|
"canonicalOdometer": "Canonical odometer",
|
|
"decisionLegend": "Decision",
|
|
"retainCanonical": "Retain canonical reading",
|
|
"retainCanonicalDetail": "Treat the submitted reading as erroneous; nothing changes on the vehicle record.",
|
|
"correctReading": "Correct the reading",
|
|
"correctReadingDetail": "Update both the booking and the canonical odometer with the correct value.",
|
|
"noBookingAttached": "No related booking is attached to this issue, so only 'retain canonical' is available.",
|
|
"booking": "Booking",
|
|
"correctedOdometer": "Corrected odometer (km)",
|
|
"note": "Note",
|
|
"resolving": "Resolving…",
|
|
"resolveIssue": "Resolve issue",
|
|
"resolveFailed": "Could not resolve this issue."
|
|
},
|
|
"bookingOverlap": {
|
|
"heading": "Resolve the booking overlap",
|
|
"description": "Block one of the two overlapping commitments. The other keeps its current status.",
|
|
"columns": {
|
|
"booking": "Booking",
|
|
"window": "Window",
|
|
"status": "Status",
|
|
"blockThis": "Block this one"
|
|
},
|
|
"blockLabel": "Block {{ref}}",
|
|
"note": "Note",
|
|
"resolving": "Resolving…",
|
|
"blockButton": "Block {{ref}}",
|
|
"blockButtonFallback": "Block booking",
|
|
"resolveFailed": "Could not resolve this overlap."
|
|
},
|
|
"vehicleStatusConflict": {
|
|
"heading": "Resolve the status conflict",
|
|
"description": "One authoritative rule recommends a corrected operational status for this vehicle.",
|
|
"currentStatus": "Current status",
|
|
"reviewRecommendation": "Review recommendation",
|
|
"loadingRecommendation": "Loading recommendation…",
|
|
"recommendationFailed": "Could not load a recommendation.",
|
|
"recommendedStatus": "Recommended status",
|
|
"whyHeading": "Why",
|
|
"evidenceHeading": "Facts",
|
|
"consequenceHeading": "Consequence",
|
|
"consequence": {
|
|
"statusWillChange": "The vehicle status will change to {{status}}.",
|
|
"issueWillBeRechecked": "This quality issue will be re-checked.",
|
|
"changeWillBeAudited": "The change will be recorded in the audit trail.",
|
|
"bookingsNotDeleted": "The bookings themselves are not deleted."
|
|
},
|
|
"changeStatusTo": "Change status to {{status}}",
|
|
"applying": "Applying…",
|
|
"applied": "Applied {{status}} — {{reason}}",
|
|
"applyFailed": "Could not apply a recommended status.",
|
|
"staleRecommendation": "The situation has changed since this recommendation was shown. Review it again before applying.",
|
|
"reviewAgain": "Review recommendation again",
|
|
"manualReview": {
|
|
"heading": "Manual review required",
|
|
"body": "The facts for this vehicle contradict each other. An Operations Manager needs to review this in person rather than apply an automatic status change.",
|
|
"hint": "Use 'Defer' or 'Reject' below, or investigate the vehicle and the related bookings manually."
|
|
},
|
|
"noConflict": {
|
|
"heading": "No change needed",
|
|
"body": "This vehicle's current status already matches the facts."
|
|
},
|
|
"evidence": {
|
|
"activeBookings": "Active booking(s): {{refs}}",
|
|
"overlappingBookings": "Overlapping bookings: {{pairs}}",
|
|
"serviceThresholdReached": "Odometer reading ({{odometer}} km) has reached the service threshold ({{threshold}} km).",
|
|
"openOverlapIssue": "Open booking-overlap issue: {{ref}}"
|
|
},
|
|
"reasonCodes": {
|
|
"vehicle.active_rental": "This vehicle has an active rental but is not recorded as rented. The status is corrected to reflect the actual situation.",
|
|
"vehicle.service_threshold_reached": "This vehicle has reached its service threshold. It is set to maintenance so it is not deployed before servicing takes place.",
|
|
"vehicle.booking_conflict": "This vehicle has two overlapping bookings. Blocking it prevents it from being considered available again before the booking conflict is resolved.",
|
|
"vehicle.rental_ended": "The rental for this vehicle has ended and there is no active booking left. It is set back to available.",
|
|
"vehicle.manual_review_required": "The facts for this vehicle contradict each other (for example, an active booking while the vehicle is in maintenance, or a service threshold reached alongside an active rental). This requires a human review rather than an automatic status change.",
|
|
"vehicle.no_conflict": "This vehicle's current status already matches the facts. No change is needed."
|
|
}
|
|
}
|
|
}
|
|
}
|