feat(planning): explain and trace planning decisions

This commit is contained in:
nessar committed 2026-08-31 00:02:45 +02:00
1 parent 609b3dece9
commit d7a13b0b1e
24 files changed
+6073 -342

No files matched your search

+98 -1
View File
@@ -104,7 +104,104 @@
"conflict": "The obligations cannot be satisfied together.",
"incomplete": "Calculation stopped before all quality stages completed.",
"error": "The planner encountered an unexpected error.",
"complete": "Plan calculated."
"complete": "Plan calculated.",
"whyPlacement": "Why this placement",
"placementNavigation": "Placement explanation navigation",
"placement": "Placement",
"placements": "placements",
"decision": "Decision",
"of": "of",
"first": "First placement",
"previous": "Previous placement",
"next": "Next placement",
"last": "Last placement",
"balance": "Entitlement",
"rules": "Rules",
"noRules": "No rule",
"supporting": "Supporting placement",
"yes": "Yes",
"no": "No",
"remaining": "Remaining entitlement after placement",
"timeOffPeriod": "Time-off period",
"firstDecisive": "First decisive objective",
"contributions": "Contributions",
"objectiveVector": "Full objective vector",
"finalMetrics": "Final plan metrics",
"unplacedAtRisk": "Unplaced at-risk leave",
"holidayWeekValue": "Public-holiday week value",
"shortSequenceDeficit": "Short work-sequence deficit",
"supportingPlacements": "Supporting placements",
"preferenceSatisfaction": "Preference satisfaction",
"removedRestoredComparison": "Placement removed and restored",
"fullComparison": "Full before-and-after objective vectors",
"comparisonHelp": "This compares the final plan without this placement with the final plan after restoring it.",
"counterfactual": "Date alternatives",
"hypothetical": "Hypothetical only: the optimized plan is unchanged. Select any date in the horizon to inspect it.",
"counterfactualLoading": "Analyzing every date in the horizon…",
"counterfactualReady": "Date alternatives are ready.",
"counterfactualError": "Date alternatives could not be calculated.",
"eligible": "Eligible",
"ineligible": "Ineligible",
"historical": "Original search status",
"reason": "Reason",
"explanationError": "The explanation could not be produced.",
"conflictDetails": "Why no plan can satisfy the obligations",
"conflictingRules": "Conflicting rules",
"bottleneck": "Bottleneck",
"incompleteDetails": "What completed before calculation stopped",
"incumbentExplanation": "This explains the best valid incumbent; later quality stages did not complete.",
"completedStages": "Completed stages",
"uncompletedStages": "Interrupted or unstarted stages",
"none": "None",
"currentPlacement": "Current explained placement",
"outsideHorizon": "Context date outside the planning horizon",
"traceTitle": "Advanced: original decision trace",
"traceLoading": "The plan is ready; its decision trace is still loading…",
"traceUnavailable": "No decision trace is available for this result.",
"phases": "Trace phases",
"firstPhase": "First phase",
"previousPhase": "Previous phase",
"nextPhase": "Next phase",
"lastPhase": "Last phase",
"decisions": "Atomic decisions",
"firstDecision": "First decision",
"previousDecision": "Previous decision",
"nextDecision": "Next decision",
"lastDecision": "Last decision",
"replay": "Decision state",
"before": "Before",
"after": "After",
"finalPlan": "Final plan",
"dates": "Dates",
"candidates": "Candidates",
"previousCandidates": "Previous candidate page",
"nextCandidates": "Next candidate page",
"page": "Page",
"compareAlternatives": "Compare this candidate across the horizon",
"tieBreak": "Tie-break",
"deltas": "State changes",
"activations": "earned activations",
"noDecisions": "This phase recorded no atomic decision.",
"traceStatuses": {
"chosen": "Chosen",
"evaluated-rejected": "Evaluated and rejected",
"pruned": "Pruned",
"not-examined": "Not examined",
"ineligible": "Ineligible"
},
"tracePhaseStatuses": {
"completed": "Completed",
"interrupted": "Interrupted",
"not-run": "Not run"
},
"traceChanges": {
"added": "Added by this decision",
"moved-from": "Moved from this date",
"moved-to": "Moved to this date",
"removed": "Removed by this decision",
"shared": "Shared by this decision",
"unchanged": "Unchanged by this decision"
}
},
"benchmark": {
"title": "Leave planner benchmark",