{ "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." } } } }