Files
MobilityOps/frontend/src/i18n/locales/en-GB/quality.json
T
NuklearRabbit 81e3fd63bd
MobilityOps acceptance / backend (push) Failing after 19s
MobilityOps acceptance / frontend (push) Successful in 25s
MobilityOps acceptance / e2e (push) Skipped
M54: harden operations and demo resilience
2026-08-24 03:31:03 +02:00

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