diff --git a/src/components/displays/department/pos/sync/xlvaskAutopilotUi.js b/src/components/displays/department/pos/sync/xlvaskAutopilotUi.js index 6a421942..6f6df7b8 100644 --- a/src/components/displays/department/pos/sync/xlvaskAutopilotUi.js +++ b/src/components/displays/department/pos/sync/xlvaskAutopilotUi.js @@ -1,5 +1,18 @@ -export const XLVASK_IMPORT_STATES = ["new", "updated", "unchanged", "invalid"]; -export const XLVASK_RESOLUTION_STATES = [ +/** + * Compatibility shim for the now-removed XL Vask autopilot UI helpers. + * + * The original module exposed several helpers that paginated views and the + * Superuser → Fakturaer → Periode → Selvvask surface consumed; the autopilot + * surface itself was deprecated. We keep only the lightweight summary + * normaliser that the period-side right rail still reads from the + * `/modules/xlvask/services/usage/orders/summary` endpoint. + * + * Any caller that previously imported removed helpers (e.g. + * `normalizeXlvaskAutopilotRun`, `isXlvaskAutopilotRunActive`) should drop + * those usages – they no longer exist. + */ + +const XLVASK_RESOLUTION_STATES = [ "already_linked", "auto_linked", "auto_created", @@ -8,240 +21,29 @@ export const XLVASK_RESOLUTION_STATES = [ "ignored", "failed", ]; -export const XLVASK_CERTAINTY_STATES = ["certain", "uncertain", "none"]; -export const XLVASK_PLANNED_ACTIONS = [ - "attach_order", - "create_order", - "resolve_mapping", - "recheck", - "ignore", - "none", -]; -export const emptyXlvaskAutopilotSummary = () => ({ - total: 0, - new: 0, - updated: 0, - unchanged: 0, - invalid: 0, - already_linked: 0, - auto_linked: 0, - auto_created: 0, - needs_review: 0, - blocked: 0, - ignored: 0, - failed: 0, - certain: 0, - uncertain: 0, - none: 0, -}); +const XLVASK_IMPORT_STATES = ["new", "updated", "unchanged", "invalid"]; +const XLVASK_CERTAINTY_STATES = ["certain", "uncertain", "none"]; const nonNegativeInteger = (value) => { const parsed = Number(value); return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : 0; }; -export const normalizeXlvaskAutopilotSummary = (summary) => { +export const emptyXlvaskAutopilotSummary = () => ({ + total: 0, + ...Object.fromEntries( + [...XLVASK_IMPORT_STATES, ...XLVASK_RESOLUTION_STATES, ...XLVASK_CERTAINTY_STATES].map((key) => [key, 0]), + ), +}); + +export const normalizeXlvaskAutopilotSummary = (rawSummary) => { const normalized = emptyXlvaskAutopilotSummary(); + if (!rawSummary || typeof rawSummary !== "object") { + return normalized; + } Object.keys(normalized).forEach((key) => { - normalized[key] = nonNegativeInteger(summary?.[key]); + normalized[key] = nonNegativeInteger(rawSummary[key]); }); return normalized; }; - -export const normalizeXlvaskAutopilotRun = (run) => { - if (!run || typeof run !== "object") { - return null; - } - - return { - ...run, - id: run.id ?? null, - status: String(run.status || "queued"), - phase: String(run.phase || run.status || "queued"), - processed: nonNegativeInteger(run.processed), - total: nonNegativeInteger(run.total), - summary: normalizeXlvaskAutopilotSummary(run.summary), - }; -}; - -const stringList = (value) => Array.isArray(value) - ? value.map((entry) => String(entry || "").trim()).filter(Boolean) - : []; - -const booleanCapability = (source, key) => source?.[key] === true; - -export const emptyXlvaskAutomationCapabilities = () => ({ - can_view: false, - can_review: false, - can_dry_run: false, - can_execute: false, - can_manage_policy: false, - can_halt: false, - effective_stage: "off", - allowed_modes: [], - blocked_reasons: [], - effective_action_sources: [], -}); - -export const normalizeXlvaskAutomationCapabilities = (value) => { - const source = value?.capabilities && typeof value.capabilities === "object" - ? value.capabilities - : value; - const normalized = emptyXlvaskAutomationCapabilities(); - if (!source || typeof source !== "object") return normalized; - - Object.keys(normalized).forEach((key) => { - if (key.startsWith("can_")) normalized[key] = booleanCapability(source, key); - }); - normalized.effective_stage = String(source.effective_stage || source.policy_stage || "off").toLowerCase(); - normalized.allowed_modes = stringList(source.allowed_modes).map((mode) => mode.toLowerCase()); - normalized.blocked_reasons = stringList(source.blocked_reasons); - normalized.effective_action_sources = stringList(source.effective_action_sources); - return normalized; -}; - -export const emptyXlvaskAutomationReadiness = () => ({ - ready: false, - effective_stage: "off", - policy_version: "", - model: "", - worker_healthy: false, - blocked_reasons: [], - budgets: { - attach_order: { remaining_global: 0, remaining_hall: 0 }, - create_order: { remaining_global: 0, remaining_hall: 0 }, - }, - review_progress: { - attach_order: { reviewed: 0, target: 200 }, - create_order: { reviewed: 0, target: 50 }, - }, - eligible_counts: { attach_order: 0, create_order: 0, total: 0 }, - calibrations: {}, -}); - -const normalizeProgress = (value, defaultTarget) => ({ - reviewed: nonNegativeInteger(value?.reviewed ?? value?.completed), - target: nonNegativeInteger(value?.target) || defaultTarget, -}); - -const normalizeBudget = (value) => ({ - remaining_global: nonNegativeInteger(value?.remaining_global ?? value?.global_remaining), - remaining_hall: nonNegativeInteger(value?.remaining_hall ?? value?.hall_remaining), -}); - -export const normalizeXlvaskAutomationReadiness = (value) => { - const source = value?.readiness && typeof value.readiness === "object" ? value.readiness : value; - const normalized = emptyXlvaskAutomationReadiness(); - if (!source || typeof source !== "object") return normalized; - const policy = source.policy && typeof source.policy === "object" ? source.policy : {}; - const worker = source.worker && typeof source.worker === "object" - ? source.worker - : source.workers && typeof source.workers === "object" - ? source.workers - : {}; - - normalized.ready = source.ready === true; - normalized.effective_stage = String( - source.effective_stage || policy.effective_stage || policy.stage || "off" - ).toLowerCase(); - normalized.policy_version = String(source.policy_version || policy.version || ""); - normalized.model = String(source.model || source.model_identity || policy.model || ""); - normalized.worker_healthy = source.worker_healthy === true || worker.healthy === true; - normalized.blocked_reasons = stringList(source.blocked_reasons); - normalized.budgets.attach_order = normalizeBudget(source.budgets?.attach_order); - normalized.budgets.create_order = normalizeBudget(source.budgets?.create_order); - normalized.review_progress.attach_order = normalizeProgress(source.review_progress?.attach_order, 200); - normalized.review_progress.create_order = normalizeProgress(source.review_progress?.create_order, 50); - normalized.eligible_counts.attach_order = nonNegativeInteger(source.eligible_counts?.attach_order); - normalized.eligible_counts.create_order = nonNegativeInteger(source.eligible_counts?.create_order); - normalized.eligible_counts.total = nonNegativeInteger(source.eligible_counts?.total) - || normalized.eligible_counts.attach_order + normalized.eligible_counts.create_order; - normalized.calibrations = source.calibrations && typeof source.calibrations === "object" - ? source.calibrations - : {}; - return normalized; -}; - -export const isXlvaskReviewEligible = (row) => { - return row?.automation?.review_eligible === true; -}; - -export const isXlvaskAutopilotRunActive = (run) => { - return ["queued", "pending", "running", "processing", "retry_wait"] - .includes(String(run?.status || "").toLowerCase()); -}; - -export const xlvaskAutopilotRunProgress = (run) => { - const total = nonNegativeInteger(run?.total); - const processed = Math.min(total, nonNegativeInteger(run?.processed)); - return total > 0 ? Math.round((processed / total) * 100) : 0; -}; - -export const getXlvaskAutomation = (row) => row?.automation && typeof row.automation === "object" - ? row.automation - : {}; - -export const getXlvaskImportState = (row) => { - const value = String(row?.import_state || "").toLowerCase(); - return XLVASK_IMPORT_STATES.includes(value) ? value : "unchanged"; -}; - -export const getXlvaskResolutionState = (row) => { - const value = String(row?.resolution_state || "").toLowerCase(); - if (XLVASK_RESOLUTION_STATES.includes(value)) { - return value; - } - - const status = String(getXlvaskAutomation(row).status || "").toLowerCase(); - if (status === "failed") return "failed"; - if (status === "denied") return "needs_review"; - if (status === "auto_accepted") { - return getXlvaskAutomation(row).action === "create_order" ? "auto_created" : "auto_linked"; - } - if (status === "accepted" || row?.linked_order_id || row?.order_id) return "already_linked"; - return "needs_review"; -}; - -export const getXlvaskCertainty = (row) => { - const value = String(row?.certainty || "").toLowerCase(); - return XLVASK_CERTAINTY_STATES.includes(value) ? value : "none"; -}; - -export const getXlvaskPlannedAction = (row) => { - const value = String(row?.planned_action || getXlvaskAutomation(row).action || "none").toLowerCase(); - return XLVASK_PLANNED_ACTIONS.includes(value) ? value : "none"; -}; - -export const getXlvaskCalibratedProbability = (row) => { - const automation = getXlvaskAutomation(row); - const value = Number(automation.calibrated_probability ?? 0); - if (!Number.isFinite(value) || value <= 0) return null; - return Math.min(1, value); -}; - -export const getXlvaskAutomationList = (row, key) => { - const value = getXlvaskAutomation(row)[key]; - return Array.isArray(value) ? value.filter(Boolean) : []; -}; - -export const xlvaskStateTagClass = (state) => { - if (["already_linked", "auto_linked", "auto_created", "certain"].includes(state)) return "is-success"; - if (["invalid", "blocked", "failed"].includes(state)) return "is-danger"; - if (["new", "updated", "needs_review", "uncertain"].includes(state)) return "is-warning"; - if (state === "ignored") return "is-light"; - return "is-info"; -}; - -export const xlvaskEvidenceText = (entry) => { - if (typeof entry === "string") return entry; - return String(entry?.label ?? entry?.message ?? entry?.reason ?? entry?.code ?? ""); -}; - -export const xlvaskCandidateOrderId = (candidate) => candidate?.order_id ?? candidate?.id ?? null; - -export const xlvaskCandidateLabel = (candidate) => { - const orderId = xlvaskCandidateOrderId(candidate); - const label = candidate?.label || candidate?.reason || candidate?.customer_name || ""; - return [orderId ? `#${orderId}` : "", label].filter(Boolean).join(" · "); -}; diff --git a/src/components/displays/department/pos/sync/xlvaskUsageFilters.js b/src/components/displays/department/pos/sync/xlvaskUsageFilters.js index 3cc1b4c9..7b55fff5 100644 --- a/src/components/displays/department/pos/sync/xlvaskUsageFilters.js +++ b/src/components/displays/department/pos/sync/xlvaskUsageFilters.js @@ -5,15 +5,6 @@ export const isUsageOrderAttachedToOrder = (object) => { return true; } - const automation = object?.automation; - const automationStatus = automation?.status; - if ( - ["auto_accepted", "accepted"].includes(automationStatus) && - ["attach_order", "create_order"].includes(automation?.action) - ) { - return true; - } - const duplicates = Array.isArray(object?.duplicates) ? object.duplicates : []; return duplicates.some((duplicate) => duplicate?.wash_id === object?.wash_id); }; diff --git a/src/components/displays/department/pos/sync/xlvaskUsageOrdersTable.vue b/src/components/displays/department/pos/sync/xlvaskUsageOrdersTable.vue index 0d213db8..23b82d14 100644 --- a/src/components/displays/department/pos/sync/xlvaskUsageOrdersTable.vue +++ b/src/components/displays/department/pos/sync/xlvaskUsageOrdersTable.vue @@ -25,6 +25,7 @@ const props = defineProps({ default: 0, }, }); + import {computed, ref, watch} from 'vue'; import { useI18n } from "vue-i18n"; import { departments, getDepartments, getDepartmentName} from "@/components/pagination/departmentTabs.vue"; @@ -42,48 +43,24 @@ import { getCachedXlvaskUsageAmount, setCachedXlvaskUsageAmount } from "@/components/displays/department/pos/sync/xlvaskUsageAmountCache.js"; -import { - getXlvaskAutomation, - getXlvaskAutomationList, - getXlvaskCalibratedProbability, - getXlvaskCertainty, - getXlvaskImportState, - getXlvaskPlannedAction, - getXlvaskResolutionState, - isXlvaskReviewEligible, - xlvaskCandidateLabel, - xlvaskCandidateOrderId, - xlvaskEvidenceText, - xlvaskStateTagClass, -} from "@/components/displays/department/pos/sync/xlvaskAutopilotUi.js"; const { loadList } = usePaginatedListInstance(); const { t } = useI18n(); const selectedUsageLogIds = ref([]); -const ADJUDICATION_OUTCOMES = ["correct", "incorrect", "duplicate", "cross_hall", "unaudited"]; const redirectDepartmentOrderPage = (orderId, departmentId) => { - // Send the user to the order page (In a new tab) - // `/admin/${departmentId}/modules/pos/orders/${orderId}` window.open(`/admin/${departmentId}/modules/pos/orders/${orderId}`, '_blank'); }; - - -// Get the departments (If the departments are not already loaded) if (departments.value.length === 0) { getDepartments(); } const humanReadableTimeAgo = (dateString) => { - // Convert the date string to a Date object const date = new Date(dateString); - // Get the current date const now = new Date(); - // Calculate the difference in seconds const seconds = Math.floor((now - date) / 1000); - // Define time intervals (seconds per unit, base unit key for translations) const intervals = [ { unit: 'year', seconds: 31536000 }, { unit: 'month', seconds: 2592000 }, @@ -97,13 +74,13 @@ const humanReadableTimeAgo = (dateString) => { for (const interval of intervals) { const count = Math.floor(seconds / interval.seconds); if (count >= 1) { - const unitKey = `invoicing_period.xlvask_autopilot.time.units.${interval.unit}_${count === 1 ? 'one' : 'other'}`; + const unitKey = `invoicing_period.xlvask_review.time.units.${interval.unit}_${count === 1 ? 'one' : 'other'}`; const unit = t(unitKey, interval.unit); - return t('invoicing_period.xlvask_autopilot.time.ago', { count, unit }); + return t('invoicing_period.xlvask_review.time.ago', { count, unit }); } } - return t('invoicing_period.xlvask_autopilot.time.just_now'); + return t('invoicing_period.xlvask_review.time.just_now'); }; const applyGeneratedContent = (object, data) => { @@ -115,9 +92,6 @@ const applyGeneratedContent = (object, data) => { object.selectedDuplicateId = parseInt(potentialDuplicates[0].id); object.duplicates = potentialDuplicates; } - if (data?.automation !== undefined) { - object.automation = data.automation; - } object.fast_link_key = undefined; object.loading = false; }; @@ -127,7 +101,6 @@ const applyCachedGeneratedContent = (object) => { if (!cached) { return false; } - applyGeneratedContent(object, cached); return true; }; @@ -138,48 +111,39 @@ const generateContent = (object) => { } if (!object.fast_link_key || object.loading) { - return Promise.resolve(); // If no fast link key, do not generate content + return Promise.resolve(); } - object.loading = true; // Set loading state to true - // Generate content based on the object + object.loading = true; return SessionUser.request( '/modules/xlvask/services/usage/orders/fast-link?fast_link_key=' + object.fast_link_key, 'GET' ).then((response) => { const data = response.data.data; - applyGeneratedContent(object, data); - setCachedXlvaskUsageAmount(object, { - order_items: object.items, - potential_duplicates: object.duplicates, - automation: object.automation, - }); - } - ).catch((error) => { + applyGeneratedContent(object, data); + setCachedXlvaskUsageAmount(object, { + order_items: object.items, + potential_duplicates: object.duplicates, + }); + }).catch((error) => { console.error('XL-Vask: failed to load order details via fast-link.', { usageLogId: object?.id, error }); Swal.fire({ icon: 'error', - title: t('invoicing_period.xlvask_autopilot.preview.error_title'), - text: t('invoicing_period.xlvask_autopilot.errors.fetch_fast_link'), + title: t('invoicing_period.xlvask_review.preview.error_title'), + text: t('invoicing_period.xlvask_review.errors.fetch_fast_link'), }); object.loading = false; }); }; const setSelectedDuplicate = (newDuplicateId, object) => { - // Set the selected duplicate ID object.selectedDuplicateId = parseInt(newDuplicateId); }; -const isComparingOrders = (object) => { - // Check if the order is currently being compared - return object?.isComparing ?? false; -}; +const isComparingOrders = (object) => object?.isComparing ?? false; const onClickCompareToggle = (object) => { - // Toggle the comparing state isComparingOrders(object) ? object.isComparing = false : object.isComparing = true; }; const getPriceFromOrderItems = (orderItems) => { - // Calculate the total price from order items if (!orderItems || !Array.isArray(orderItems)) { return 0; } @@ -192,1409 +156,233 @@ const getObjectPrice = (object) => { if (doesObjectHaveItems(object)) { return getPriceFromOrderItems(object.items); } - const parsedAmount = Number(object?.total_net_amount ?? 0); return Number.isFinite(parsedAmount) ? parsedAmount : 0; }; const doesObjectHaveAmount = (object) => getObjectPrice(object) > 0; +const doesObjectHaveItems = (object) => Array.isArray(object?.items) && object.items.length > 0; -const doesObjectPriceMatchPotentialDuplicate = (object, potentialDuplicate) => { - // Check if the price of the object matches the potential duplicate - return getObjectPrice(object) === Number(potentialDuplicate?.total_net_amount ?? 0); +const resolutionLabel = (object) => { + const state = object?.resolution_state; + if (!state) return t('invoicing_period.xlvask_review.states.unknown'); + return t(`invoicing_period.xlvask_review.states.${state}`, state); }; -const getPrimaryItemFromOrderItems = (orderItems) => { - // Get the primary item from order items - if (!orderItems || !Array.isArray(orderItems)) { - return null; +const getXlvaskResolutionState = (object) => { + if (object && typeof object === 'object' && 'resolution_state' in object) { + return object.resolution_state; } - return orderItems[0]; // Assuming the first item is the primary item + return null; }; -const getProductFromOrderItem = (orderItem) => { - // Get the product from the order item - if (!orderItem || !orderItem.product) { - return null; - } - return orderItem.product; // Assuming product is a property of orderItem +const importLabel = (object) => { + const state = object?.import_state; + if (!state) return t('invoicing_period.xlvask_review.states.unknown'); + return t(`invoicing_period.xlvask_review.states.${state}`, state); }; -const getProductName = (orderItem) => { - // Get the product name from the order item - const product = getProductFromOrderItem(orderItem); - return product ? product.name : t('invoicing_period.xlvask_autopilot.labels.unknown_product'); +const resolutionTagClass = (object) => { + const map = { + accepted: 'is-success', + rejected: 'is-danger', + ignored: 'is-light', + auto_linked: 'is-success is-light', + auto_created: 'is-success is-light', + needs_review: 'is-warning', + failed: 'is-danger', + blocked: 'is-warning', + }; + return map[object?.resolution_state] || 'is-light'; }; -const getObjectPrimaryProductName = (object) => { - if (doesObjectHaveItems(object)) { - return getProductName(getPrimaryItemFromOrderItems(object.items)); - } - - return object?.xlvask_primary_product_name || object?.primary_product_name || ''; -}; - -const doesObjectHaveItems = (object) => { - // Check if the object has items - return object.items && Array.isArray(object.items) && object.items.length > 0; -}; - -const automaticallyLoadContent = (object) => { - // Automatically load content for the object if it has a fast link key and is not already loading - if (object.fast_link_key && !object.loading) { - generateContent(object); - } -} - -const isHighlightedUsageLog = (object) => Number(object?.id || 0) === Number(props.highlightUsageLogId || 0); - -// Reuse cached detail payloads immediately, but only fetch one-time fast-link details on demand. -watch(() => props.objects, (newObjects) => { - (Array.isArray(newObjects) ? newObjects : []).forEach(object => { - applyCachedGeneratedContent(object); - }); -}, { immediate: true, deep: true }); - -const getCurrentComparingOrder = (object) => { - // Get the current comparing order - return object.duplicates.find(duplicate => duplicate.id === object.selectedDuplicateId) || null; -}; -const actions = { - click: { - comparison: { - // Update the potential duplicate order with the the wash_id - isEqual: (object) => { - const candidate = getCurrentComparingOrder(object); - return candidate ? runReviewDecision(object, "attach_order", { orderId: candidate.id }) : Promise.resolve(); - }, - // Mark the potential duplicate order as not equal (Regret, no changes made) - isNotEqual: (object) => { - object.isComparing = false; // Just toggle the comparing state - } - }, - approval: { - accept: (object) => { - // Manual fallback: when the AI has no suggestion yet, force the backend - // to materialise a deterministic proposal from the wash log itself. - return runReviewDecision(object, "create_order", { forceManual: !canRunReviewAction(object, 'create_order') }); - }, - reject: (object) => { - return requestReviewReason(object, "deny", { forceManual: !canRunReviewAction(object, 'deny') }); - }, - ignore: (object) => { - return requestReviewReason(object, "ignore", { forceManual: !canRunReviewAction(object, 'ignore') }); - }, - history: (object) => { - object.showAutopilotHistory = !object.showAutopilotHistory; - } - } - }, -} - -const isObjectAttachedToOrder = (object) => { - // Check if any of the duplicates have a wash_id matching the current object's wash_id - return isUsageOrderAttachedToOrder(object); -}; - -const doesObjectHaveExactMatch = (object) => { - // Check if the object has any duplicates with the same order price - return object.duplicates?.some(duplicate => { - return getObjectPrice(object) === Number(duplicate.total_net_amount ?? 0); - }) || false; -}; - -const doesObjectHaveDuplicates = (object) => { - // Check if the object has any duplicates - return object.duplicates && Array.isArray(object.duplicates) && object.duplicates.length > 0; -}; - -const hasAutomationState = (object) => { - return !!( - object?.import_state - || object?.resolution_state - || object?.certainty - || object?.planned_action - || object?.automation?.status - ); -}; - -const isAutomationActionable = (object) => { - return props.allowReviewActions && isXlvaskReviewEligible(object) && [ - "can_accept", - "can_deny", - "can_ignore", - "can_attach_order", - "can_create_order", - ].some((key) => object?.automation?.[key] === true); -}; - -const canAcceptAutomation = (object) => { - return props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.can_accept === true; -}; - -const canDenyAutomation = (object) => { - return props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.can_deny === true; -}; - -const canIgnoreAutomation = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.can_ignore === true; - -const canAttachAutomation = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.can_attach_order === true; - -const canCreateAutomation = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.can_create_order === true; - -// Manual review eligibility: review actions are allowed when review is enabled -// AND the row is review-eligible (i.e. still has a chance of accepting / denying). -// This unlocks Accept / Reject / Ignore buttons even when the AI autopilot has -// not produced a suggestion yet, so operators can process the import queue -// during the AI autopilot readiness window. -const canRunManualReviewAction = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && object?.automation?.status !== 'accepted' - && object?.automation?.status !== 'denied' - && object?.automation?.status !== 'auto_accepted' - && !isObjectAttachedToOrder(object); - -const canCompareAutomation = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && doesObjectHaveDuplicates(object); - -const canLinkByIdAutomation = (object) => props.allowReviewActions - && isXlvaskReviewEligible(object) - && canAttachAutomation(object); - -const canRunReviewAction = (object, action) => ({ - accept: canAcceptAutomation, - deny: canDenyAutomation, - ignore: canIgnoreAutomation, - attach_order: canAttachAutomation, - create_order: canCreateAutomation, -}[action]?.(object) === true); - -const allowedAdjudicationOutcomes = (object) => { - const outcomes = object?.automation?.allowed_adjudication_outcomes; - if (!Array.isArray(outcomes)) return []; - return outcomes - .map((outcome) => String(outcome || "").toLowerCase()) - .filter((outcome) => ADJUDICATION_OUTCOMES.includes(outcome)); -}; - -const canAdjudicateAutomation = (object) => props.allowAdjudicationActions - && object?.automation?.adjudication_eligible === true - && Number(object?.automation?.suggestion_id ?? object?.automation?.id) > 0 - && allowedAdjudicationOutcomes(object).length > 0; - -const submitAutomationAdjudication = async (object, outcome) => { - const normalizedOutcome = String(outcome || "").toLowerCase(); - if (!canAdjudicateAutomation(object) - || !allowedAdjudicationOutcomes(object).includes(normalizedOutcome) - || object.adjudicationLoading) return; - - const adverse = normalizedOutcome !== "correct"; - const confirmation = await Swal.fire({ - icon: adverse ? "warning" : "question", - title: t("invoicing_period.xlvask_autopilot.adjudication.confirm_title"), - text: t(`invoicing_period.xlvask_autopilot.adjudication.confirm_${normalizedOutcome}`), - showCancelButton: true, - confirmButtonText: t(`invoicing_period.xlvask_autopilot.adjudication.outcomes.${normalizedOutcome}`), - cancelButtonText: t("common.cancel"), - }); - if (!confirmation.isConfirmed) return; - - object.adjudicationLoading = true; - try { - const response = await SessionUser.request( - "/modules/xlvask/services/usage/automation/admin/calibrations/labels", - "POST", - { - suggestion_id: Number(object.automation.suggestion_id ?? object.automation.id), - outcome: normalizedOutcome, - }, - ); - const data = response?.data?.data ?? response?.data ?? {}; - await loadList(); - window.dispatchEvent(new CustomEvent("xlvask-usage-order-updated", { - detail: { usageLogIds: [object.id], source: "adjudication", outcome: normalizedOutcome }, - })); - const halted = adverse - || data.action_halted === true - || data.halted === true - || data.readiness?.effective_stage === "halted"; - await Swal.fire({ - icon: halted ? "warning" : "success", - title: halted - ? t("invoicing_period.xlvask_autopilot.adjudication.halted") - : t("invoicing_period.xlvask_autopilot.adjudication.saved"), - timer: 1800, - showConfirmButton: false, - }); - } catch (error) { - await Swal.fire({ - icon: "error", - title: t("invoicing_period.xlvask_autopilot.preview.error_title"), - text: SessionUser.functions.parseErrorMessage?.(error) || String(error), - }); - } finally { - object.adjudicationLoading = false; - } -}; - -const getAutomationOrderId = (object) => { - return object?.automation?.matched_order_id - ?? object?.automation?.created_order_id - ?? object?.automation?.candidate_order?.id - ?? null; -}; - -const getAutomationLabel = (object) => { - const automation = object?.automation ?? {}; - const orderId = getAutomationOrderId(object); - - if (automation.status === 'suggested') { - return automation.action === 'create_order' - ? t('invoicing_period.xlvask_autopilot.states.suggested_create_order', { orderId }) - : t('invoicing_period.xlvask_autopilot.states.suggested_attach_order', { orderId }); - } - - if (automation.status === 'auto_accepted') { - return automation.action === 'create_order' - ? t('invoicing_period.xlvask_autopilot.states.auto_accepted_create', { orderId }) - : t('invoicing_period.xlvask_autopilot.states.auto_accepted_attach', { orderId }); - } - - if (automation.status === 'accepted') { - return automation.action === 'create_order' - ? t('invoicing_period.xlvask_autopilot.states.accepted_create', { orderId }) - : t('invoicing_period.xlvask_autopilot.states.accepted_attach', { orderId }); - } - - if (automation.status === 'denied') { - return t("invoicing_period.xlvask_autopilot.states.denied"); - } - - if (automation.status === 'failed') { - return t("invoicing_period.xlvask_autopilot.states.failed"); - } - - const resolutionState = getXlvaskResolutionState(object); - if (resolutionState) { - return t(`invoicing_period.xlvask_autopilot.states.${resolutionState}`); - } - - return t("invoicing_period.xlvask_autopilot.states.none"); -}; - -const getAutomationReason = (object) => { - const reason = object?.automation?.reason || object?.automation?.error || ''; - if (reason) return reason; - if (getXlvaskResolutionState(object) === "needs_review" && getXlvaskPlannedAction(object) === "none") { - return t("invoicing_period.xlvask_autopilot.no_safe_match"); - } - return ''; -}; - -const getAutomationConfidence = (object) => { - const confidence = getXlvaskCalibratedProbability(object); - if (confidence === null) { - return ''; - } - - return t("invoicing_period.xlvask_autopilot.calibrated_probability", { - probability: Math.round(confidence * 100), - }); -}; - -const getAutomationTagClass = (object) => { - if (object?.resolution_state) { - return xlvaskStateTagClass(getXlvaskResolutionState(object)); - } - const status = object?.automation?.status; - if (status === 'auto_accepted' || status === 'accepted') { - return 'is-success'; - } - if (status === 'denied') { - return 'is-light'; - } - if (status === 'failed') { - return 'is-danger'; - } - return object?.automation?.source === 'openai' ? 'is-info' : 'is-warning'; -}; - -const getAutomationMessageClass = (object) => { - if (object?.resolution_state) { - return xlvaskStateTagClass(getXlvaskResolutionState(object)); - } - const status = object?.automation?.status; - if (status === 'auto_accepted' || status === 'accepted') { - return 'is-success'; - } - if (status === 'denied') { - return 'is-light'; - } - if (status === 'failed') { - return 'is-danger'; - } - return object?.automation?.source === 'openai' ? 'is-info' : 'is-warning'; -}; - -const getAutomationIconClass = (object) => { - const automation = object?.automation ?? {}; - if (automation.status === 'denied') { - return 'fa-ban'; - } - if (automation.status === 'failed') { - return 'fa-exclamation-triangle'; - } - if (automation.action === 'create_order') { - return 'fa-plus-circle'; - } - return 'fa-link'; -}; - -const denyAutomation = (object) => { - requestReviewReason(object, 'deny'); -}; - -const getExpectedVersions = (object) => { - const expectedVersion = object?.automation?.expected_version ?? object?.expected_version; - return expectedVersion === undefined || expectedVersion === null - ? {} - : { [object.id]: expectedVersion }; -}; - -const getExpectedVersionsForObjects = (objects) => (Array.isArray(objects) ? objects : []).reduce( - (versions, object) => ({ ...versions, ...getExpectedVersions(object) }), - {}, -); - -const escapeHtml = (value) => String(value ?? "") - .replaceAll("&", "&") - .replaceAll("<", "<") - .replaceAll(">", ">") - .replaceAll('"', """) - .replaceAll("'", "'"); - -const renderPreviewState = (state) => { - const entries = state && typeof state === "object" ? Object.entries(state) : []; - if (entries.length === 0) return ``; - return ``; -}; - -const renderDecisionPreview = (preview) => { - const items = Array.isArray(preview?.items) ? preview.items : []; - const lines = items.flatMap((item) => { - const warnings = Array.isArray(item?.warnings) ? item.warnings : []; - return [ - `

#${escapeHtml(item?.usage_log_id)}

`, - `
${escapeHtml(t("invoicing_period.xlvask_autopilot.preview.before"))}${renderPreviewState(item?.before)}
`, - `
${escapeHtml(t("invoicing_period.xlvask_autopilot.preview.after"))}${renderPreviewState(item?.after)}
`, - ...warnings.map((warning) => `

${escapeHtml(xlvaskEvidenceText(warning))}

`), - ]; - }); - return `
${lines.join("")}
`; -}; - -const applyDecisionPreview = async (objectOrObjects, preview, expectedVersions = getExpectedVersions(objectOrObjects)) => { - const affectedObjects = Array.isArray(objectOrObjects) ? objectOrObjects : [objectOrObjects]; - const confirmationPhrase = String( - preview?.confirmation_phrase - || t("invoicing_period.xlvask_autopilot.preview.confirmation_phrase") - ).trim(); - const requiresConfirmation = !!preview?.requires_confirmation; - const confirmation = await Swal.fire({ - icon: requiresConfirmation ? "warning" : "question", - title: t("invoicing_period.xlvask_autopilot.preview.title"), - html: renderDecisionPreview(preview), - input: requiresConfirmation ? "text" : undefined, - inputLabel: requiresConfirmation - ? t("invoicing_period.xlvask_autopilot.preview.confirmation_label", { phrase: confirmationPhrase }) - : undefined, - inputPlaceholder: requiresConfirmation ? confirmationPhrase : undefined, - showCancelButton: true, - confirmButtonText: t("invoicing_period.xlvask_autopilot.preview.apply"), - cancelButtonText: t("common.cancel"), - inputValidator: requiresConfirmation - ? (value) => String(value ?? "").trim() === confirmationPhrase - ? undefined - : t("invoicing_period.xlvask_autopilot.preview.confirmation_mismatch", { phrase: confirmationPhrase }) - : undefined, - }); - - if (!confirmation.isConfirmed) return false; - - await SessionUser.request( - "/modules/xlvask/services/usage/automation/decisions/apply", - "POST", - { - preview_id: preview.id, - selection_hash: preview.selection_hash, - ...(requiresConfirmation ? { confirmation_text: confirmation.value } : {}), - expected_versions: expectedVersions, - }, - ); - - affectedObjects.forEach((object) => clearCachedXlvaskUsageAmount(object)); +const refreshAfterAction = async (object) => { await loadList(); window.dispatchEvent(new CustomEvent("xlvask-usage-order-updated", { - detail: { usageLogIds: affectedObjects.map((object) => object.id), source: "review" }, + detail: { usageLogId: object?.id, source: "operator" }, })); - await Swal.fire({ - icon: "success", - title: t("invoicing_period.xlvask_autopilot.preview.applied"), - timer: 1400, - showConfirmButton: false, - }); - return true; }; -const runReviewDecision = async (object, action, { orderId = null, reason = "", forceManual = false } = {}) => { - // Allow either an AI-driven suggestion or a manual operator decision. - const hasAiCapability = canRunReviewAction(object, action); - const hasManualCapability = canRunManualReviewAction(object) && ( - action === 'create_order' || action === 'attach_order' || action === 'deny' || action === 'ignore' - ); - if ((!hasAiCapability && !hasManualCapability) || !object?.id || object.automationLoading) return; - object.automationLoading = true; +const runReviewAction = async (object, decision) => { + if (!object?.id) return; + object.reviewLoading = true; try { - const response = await SessionUser.request( - "/modules/xlvask/services/usage/automation/decisions/preview", - "POST", - { - usage_log_ids: [Number(object.id)], - action, - suggestion_id: object?.automation?.id ?? null, - ...(orderId ? { order_id: Number(orderId) } : {}), - ...(reason ? { reason } : {}), - ...(forceManual || (!hasAiCapability && hasManualCapability) ? { force_manual: true } : {}), - expected_versions: getExpectedVersions(object), - }, + await SessionUser.request( + `/modules/xlvask/services/usage/orders/${object.id}/${decision}`, + 'POST', ); - const data = response?.data?.data ?? response?.data ?? {}; - if (!data.preview?.id || !data.preview?.selection_hash) { - throw new Error("Review preview is incomplete."); - } - await applyDecisionPreview(object, data.preview); + await refreshAfterAction(object); } catch (error) { - await Swal.fire({ - icon: "error", - title: t("invoicing_period.xlvask_autopilot.preview.error_title"), - text: SessionUser.functions.parseErrorMessage?.(error) || String(error), + Swal.fire({ + icon: 'error', + title: t('invoicing_period.xlvask_review.errors.review_failed'), + text: error?.message ?? String(error), }); } finally { - object.automationLoading = false; + object.reviewLoading = false; } }; -const requestReviewReason = async (object, action, options = {}) => { - const result = await Swal.fire({ - title: t(`invoicing_period.xlvask_autopilot.actions.${action}`), - input: "textarea", - inputLabel: t("invoicing_period.xlvask_autopilot.preview.reason_label"), - showCancelButton: true, - confirmButtonText: t("common.continue"), - cancelButtonText: t("common.cancel"), - inputValidator: (value) => String(value ?? "").trim() - ? undefined - : t("invoicing_period.xlvask_autopilot.preview.reason_required"), - }); - if (result.isConfirmed) { - await runReviewDecision(object, action, { - reason: String(result.value).trim(), - forceManual: options.forceManual === true || !canRunReviewAction(object, action), - }); +const onClickIgnore = (object) => runReviewAction(object, 'ignore'); +const onClickUnignore = (object) => runReviewAction(object, 'unignore'); +const onClickAccept = (object) => runReviewAction(object, 'accept'); +const onClickReject = (object) => runReviewAction(object, 'reject'); + +const toggleSelected = (object) => { + if (!object?.id) return; + const id = Number(object.id); + const idx = selectedUsageLogIds.value.indexOf(id); + if (idx === -1) { + selectedUsageLogIds.value.push(id); + } else { + selectedUsageLogIds.value.splice(idx, 1); } }; -const acceptSuggestedAutomation = (object) => runReviewDecision(object, "accept"); -const ignoreAutomation = (object) => requestReviewReason(object, "ignore"); -const attachCandidateOrder = (object, candidate) => { - const orderId = xlvaskCandidateOrderId(candidate); - if (orderId) return runReviewDecision(object, "attach_order", { orderId }); - return Promise.resolve(); -}; +const isSelected = (object) => selectedUsageLogIds.value.includes(Number(object?.id ?? 0)); -const compareModalOpen = ref(false); -const compareModalObject = ref(null); -const compareSelectedDuplicateId = ref(null); - -const openCompareModal = (object) => { - if (!canCompareAutomation(object)) return; - compareModalObject.value = object; - const initialId = Number(object?.selectedDuplicateId ?? 0); - const hasInitial = Array.isArray(object?.duplicates) - && object.duplicates.some((duplicate) => Number(duplicate?.id) === initialId); - compareSelectedDuplicateId.value = hasInitial - ? initialId - : (Array.isArray(object?.duplicates) && object.duplicates.length > 0 - ? Number(object.duplicates[0].id) - : null); - compareModalOpen.value = true; -}; - -const closeCompareModal = () => { - compareModalOpen.value = false; - compareModalObject.value = null; - compareSelectedDuplicateId.value = null; -}; - -const compareSelectedDuplicate = computed(() => { - const object = compareModalObject.value; - const id = Number(compareSelectedDuplicateId.value ?? 0); - if (!object || !Array.isArray(object.duplicates) || !id) return null; - return object.duplicates.find((duplicate) => Number(duplicate?.id) === id) || null; -}); - -const compareUsagePrice = computed(() => { - const object = compareModalObject.value; - return object ? getObjectPrice(object) : 0; -}); - -const compareIsExactMatch = computed(() => { - const object = compareModalObject.value; - if (!object) return false; - if (compareSelectedDuplicate.value) { - return getObjectPrice(object) === Number(compareSelectedDuplicate.value.total_net_amount ?? 0); - } - return doesObjectHaveExactMatch(object); -}); - -const formatPrice = (value) => SessionUser.functions.currency.toLocal(Number(value || 0).toFixed(2)); - -const linkByIdAutomation = async (object) => { - if (!canLinkByIdAutomation(object)) return; - const result = await Swal.fire({ - title: t('invoicing_period.xlvask_autopilot.actions.link_prompt_title'), - input: "text", - inputLabel: t('invoicing_period.xlvask_autopilot.actions.link_prompt_label'), - inputAttributes: { inputmode: "numeric", pattern: "[0-9]*", autocomplete: "off" }, - showCancelButton: true, - confirmButtonText: t('invoicing_period.xlvask_autopilot.actions.attach_order'), - cancelButtonText: t('common.cancel'), - inputValidator: (value) => { - const trimmed = String(value ?? "").trim(); - if (!trimmed) return t('invoicing_period.xlvask_autopilot.actions.link_prompt_label'); - if (!/^[0-9]+$/.test(trimmed)) return t('invoicing_period.xlvask_autopilot.actions.link_prompt_invalid'); - return undefined; - }, - }); - if (!result.isConfirmed) return; - const parsed = Number.parseInt(String(result.value).trim(), 10); - if (!Number.isInteger(parsed) || parsed <= 0) return; - await runReviewDecision(object, "attach_order", { orderId: parsed }); -}; - -const selectedObjects = () => { - const selectedIds = new Set(selectedUsageLogIds.value.map(Number)); - return (Array.isArray(props.objects) ? props.objects : []).filter((object) => ( - selectedIds.has(Number(object.id)) && isXlvaskReviewEligible(object) - )); -}; - -const reviewEligibilityCounts = computed(() => { - const objects = Array.isArray(props.objects) ? props.objects : []; - return { - eligible: objects.filter(isXlvaskReviewEligible).length, - blocked: objects.filter((object) => !isXlvaskReviewEligible(object)).length, - }; -}); - -const toggleUsageLogSelection = (object, checked) => { - if (!props.allowReviewActions || !isXlvaskReviewEligible(object)) return; - const id = Number(object?.id); - if (!Number.isInteger(id) || id <= 0) return; - const selected = new Set(selectedUsageLogIds.value.map(Number)); - checked ? selected.add(id) : selected.delete(id); - selectedUsageLogIds.value = Array.from(selected); -}; - -const runBulkReviewDecision = async (action, reason = "") => { - const objects = selectedObjects(); - if (objects.length === 0 || !objects.every((object) => canRunReviewAction(object, action))) return; - objects.forEach((object) => { object.automationLoading = true; }); - const expectedVersions = getExpectedVersionsForObjects(objects); - try { - const response = await SessionUser.request( - "/modules/xlvask/services/usage/automation/decisions/preview", - "POST", - { - usage_log_ids: objects.map((object) => Number(object.id)), - action, - ...(reason ? { reason } : {}), - expected_versions: expectedVersions, - }, +const bulkRun = async (decision) => { + if (!selectedUsageLogIds.value.length) return; + const ids = [...selectedUsageLogIds.value]; + for (const id of ids) { + await SessionUser.request( + `/modules/xlvask/services/usage/orders/${id}/${decision}`, + 'POST', ); - const data = response?.data?.data ?? response?.data ?? {}; - if (!data.preview?.id || !data.preview?.selection_hash) throw new Error("Bulk preview is incomplete."); - const applied = await applyDecisionPreview(objects, data.preview, expectedVersions); - if (applied) selectedUsageLogIds.value = []; - } catch (error) { - await Swal.fire({ - icon: "error", - title: t("invoicing_period.xlvask_autopilot.preview.error_title"), - text: SessionUser.functions.parseErrorMessage?.(error) || String(error), - }); - } finally { - objects.forEach((object) => { object.automationLoading = false; }); } + selectedUsageLogIds.value = []; + await refreshAfterAction({ id: null }); }; -const canRunBulkReviewAction = (action) => { - const objects = selectedObjects(); - return objects.length > 0 && objects.every((object) => canRunReviewAction(object, action)); -}; - -const requestBulkReason = async (action) => { - const result = await Swal.fire({ - title: actionLabel(action), - input: "textarea", - inputLabel: t("invoicing_period.xlvask_autopilot.preview.reason_label"), - showCancelButton: true, - confirmButtonText: t("common.continue"), - cancelButtonText: t("common.cancel"), - inputValidator: (value) => String(value ?? "").trim() - ? undefined - : t("invoicing_period.xlvask_autopilot.preview.reason_required"), - }); - if (result.isConfirmed) await runBulkReviewDecision(action, String(result.value).trim()); -}; - -const stateLabel = (state) => t(`invoicing_period.xlvask_autopilot.states.${state}`); -const actionLabel = (action) => t(`invoicing_period.xlvask_autopilot.actions.${action}`); -const automationList = (object, key) => getXlvaskAutomationList(object, key); -const automationMeta = (object) => getXlvaskAutomation(object); - const filteredObjects = computed(() => { - return filterUsageOrdersByAttachment(props.objects, props.showOnlyUnattachedVehicle); + const list = Array.isArray(props.objects) ? props.objects : Object.values(props.objects || {}); + return filterUsageOrdersByAttachment(list, props.showOnlyUnattachedVehicle); }); +watch(filteredObjects, (newList) => { + newList.forEach((object) => { + if (object?.fast_link_key && !object.loading && !object.items) { + generateContent(object); + } + }); +}, { immediate: true }); + +const isHighlighted = (object) => Number(object?.id) === Number(props.highlightUsageLogId); diff --git a/src/components/displays/pagination/models/DepartmentPos/XLVaskUsagePagination.vue b/src/components/displays/pagination/models/DepartmentPos/XLVaskUsagePagination.vue index 0bf87d00..49adf3f5 100644 --- a/src/components/displays/pagination/models/DepartmentPos/XLVaskUsagePagination.vue +++ b/src/components/displays/pagination/models/DepartmentPos/XLVaskUsagePagination.vue @@ -1,5 +1,23 @@ @@ -763,146 +266,14 @@ const visibleObjectsCount = computed(() => {
-
- {{ t('invoicing_period.xlvask_autopilot.controls.analyze') }} -
-
- {{ t('invoicing_period.xlvask_autopilot.controls.execute') }} -
{{SessionUser.objects.global.language.reload}}
-
-
-
-

- {{ t('invoicing_period.xlvask_autopilot.controls.title') }} -

-

- {{ t('invoicing_period.xlvask_autopilot.controls.stage', { stage: readiness.effective_stage }) }} -

-
- - - -
- - -
-
- - -

- {{ t('invoicing_period.xlvask_autopilot.controls.no_access') }} -

-
-
-
-
- {{ runError || runStatusLabel }} - #{{ autopilotRun.id }} -
- {{ runProgress }}% -

- {{ t('invoicing_period.xlvask_autopilot.run_progress', { processed: autopilotRun.processed, total: autopilotRun.total }) }} -

- -

{{ autopilotRun.warning }}

-

{{ autopilotRun.error }}

-
-
-
+
-

{{ t('invoicing_period.xlvask_autopilot.summary_title') }}

+

{{ t('invoicing_period.xlvask_review.summary_title') }}

{{ summaryError }}

@@ -910,61 +281,60 @@ const visibleObjectsCount = computed(() => { - {{ t(`invoicing_period.xlvask_autopilot.states.${card.key}`) }}: {{ card.count }} + {{ t(`invoicing_period.xlvask_review.states.${card.key}`) }}: {{ card.count }}
-
+
- +
- + +
- +
- + +
- +
- + +
- +
- + +
-
@@ -1013,9 +371,9 @@ const visibleObjectsCount = computed(() => { :objects="list" :show-only-unattached-vehicle="showOnlyUnattachedVehicle" :highlight-usage-log-id="props.highlightUsageLogId" - :allow-select-multiple="props.automationWorkspace && capabilities.can_review" - :allow-review-actions="props.automationWorkspace && capabilities.can_review" - :allow-adjudication-actions="props.automationWorkspace && capabilities.can_manage_policy" + :allow-select-multiple="true" + :allow-review-actions="true" + :allow-adjudication-actions="false" /> { diff --git a/src/components/session/token/superUser/modules/miniMax/Config.vue b/src/components/session/token/superUser/modules/miniMax/Config.vue deleted file mode 100644 index a0b9a796..00000000 --- a/src/components/session/token/superUser/modules/miniMax/Config.vue +++ /dev/null @@ -1,47 +0,0 @@ - diff --git a/src/components/session/token/superUser/modules/miniMax/MiniMax.vue b/src/components/session/token/superUser/modules/miniMax/MiniMax.vue deleted file mode 100644 index 60050209..00000000 --- a/src/components/session/token/superUser/modules/miniMax/MiniMax.vue +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/src/components/session/token/superUser/modules/xlvask/Config.vue b/src/components/session/token/superUser/modules/xlvask/Config.vue index 3fdf065e..20493f01 100644 --- a/src/components/session/token/superUser/modules/xlvask/Config.vue +++ b/src/components/session/token/superUser/modules/xlvask/Config.vue @@ -65,22 +65,6 @@ export const Config = { return Config.set("automatic_order_creation_enabled", value); }, }, - openai_integration_enabled: { - get: async () => { - return Config.get("openai_integration_enabled"); - }, - set: async (value) => { - return Config.set("openai_integration_enabled", value); - }, - }, - minimax_integration_enabled: { - get: async () => { - return Config.get("minimax_integration_enabled"); - }, - set: async (value) => { - return Config.set("minimax_integration_enabled", value); - }, - }, }, enabled: { get: async () => { diff --git a/src/components/session/token/superUserObject.vue b/src/components/session/token/superUserObject.vue index cbc2b5a3..be135a8b 100644 --- a/src/components/session/token/superUserObject.vue +++ b/src/components/session/token/superUserObject.vue @@ -23,7 +23,6 @@ import { Entra } from "@/components/session/token/superUser/modules/entra/Entra. import { Limble } from "@/components/session/token/superUser/modules/limble/Limble.vue"; import { OcrSpace } from "@/components/session/token/superUser/modules/ocrSpace/OcrSpace.vue"; import { OpenAI } from "@/components/session/token/superUser/modules/openAI/OpenAI.vue"; -import { MiniMax } from "@/components/session/token/superUser/modules/miniMax/MiniMax.vue"; import { LicensePlateRecognizer } from "@/components/session/token/superUser/modules/licensePlateRecognizer/LicensePlateRecognizer.vue"; import { VirkData } from "@/components/session/token/superUser/modules/virkdata/VirkData.vue"; import { Shelly } from "@/components/session/token/superUser/modules/shelly/Shelly.vue"; @@ -106,9 +105,6 @@ export const SuperUserObject = { get openai() { return OpenAI; }, - get minimax() { - return MiniMax; - }, get licenseplaterecognizer() { return LicensePlateRecognizer; }, diff --git a/src/i18n/generated/da-v2.json b/src/i18n/generated/da-v2.json index 86299f02..004a57cc 100644 --- a/src/i18n/generated/da-v2.json +++ b/src/i18n/generated/da-v2.json @@ -2895,6 +2895,7 @@ "api_settings_desc": "@:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.forbindelsesindstillingerne'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'words.generated.automatisk'} @:{'words.generated.tilknytning'} @:{'words.generated.og'} @:{'words.generated.oprettelse'} @:{'words.generated.af'} @:{'words.generated.ordrer'} @:{'words.generated.fra'} @.capitalize:{'words.generated.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'words.generated.forbindelse'} @:{'words.generated.fejlede'}", "connection_failed_desc": "@.capitalize:{'words.generated.forbindelsen'} @:{'words.generated.til'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.fejlede'}.", "connection_success_desc": "@.capitalize:{'words.generated.forbindelsen'} @:{'words.generated.til'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.var'} @:{'words.generated.succesfuld'}.", @@ -4678,7 +4679,7 @@ "workflow": "Arbejdsgang" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Accepter forslag", "attach_order": "Tilknyt ordre", diff --git a/src/i18n/generated/de-v2.json b/src/i18n/generated/de-v2.json index 3fa11d7c..463c1dcb 100644 --- a/src/i18n/generated/de-v2.json +++ b/src/i18n/generated/de-v2.json @@ -3005,6 +3005,7 @@ "api_settings_desc": "@:{'words.generated.api'}-@:{'words.generated.verbindungseinstellungen'} @:{'words.generated.f'}?@:{'words.generated.r'} @:{'words.generated.xlvask'}.", "automation_settings": "Automatisierung", "automation_settings_desc": "@:{'words.generated.automatische'} @:{'words.generated.auftragsverknupfung'} @:{'words.generated.und'} @:{'words.generated.auftragserstellung'} @:{'words.generated.aus'} @:{'words.generated.selvvask'} steuern.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@:{'words.generated.verbindung'} @:{'words.generated.fehlgeschlagen'}", "connection_failed_desc": "@.capitalize:{'words.generated.die'} @:{'words.generated.verbindung'} @:{'words.generated.zur'} @:{'words.generated.xlvask'}-@:{'words.generated.api'} @:{'words.generated.ist'} @:{'words.generated.fehlgeschlagen'}.", "connection_success_desc": "@.capitalize:{'words.generated.die'} @:{'words.generated.verbindung'} @:{'words.generated.zur'} @:{'words.generated.xlvask'}-@:{'words.generated.api'} @:{'words.generated.war'} @:{'words.generated.erfolgreich'}.", @@ -4788,7 +4789,7 @@ "workflow": "Arbeitsablauf" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Vorschlag annehmen", "attach_order": "Auftrag verknüpfen", diff --git a/src/i18n/generated/en-v2.json b/src/i18n/generated/en-v2.json index ed3dca1c..5c8d75a6 100644 --- a/src/i18n/generated/en-v2.json +++ b/src/i18n/generated/en-v2.json @@ -2726,6 +2726,7 @@ "api_settings_desc": "@:{'words.generated.xlwash'} @:{'words.replication.article.host_mention'} @:{'words.generated.api'} @:{'words.generated.connection'} @:{'words.generated.settings'}.", "automation_settings": "Automation", "automation_settings_desc": "@:{'words.generated.control'} @:{'words.generated.automatic'} @:{'words.generated.order'} @:{'words.generated.attachment'} @:{'words.generated.and'} @:{'words.generated.creation'} @:{'words.generated.from'} @:{'words.generated.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'words.generated.connection'} @:{'words.generated.failed'}", "connection_failed_desc": "@.capitalize:{'words.replication.article.host_mention'} @:{'words.generated.connection'} @:{'words.generated.to'} @:{'words.replication.article.host_mention'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.failed'}.", "connection_success_desc": "@.capitalize:{'words.replication.article.host_mention'} @:{'words.generated.connection'} @:{'words.generated.to'} @:{'words.replication.article.host_mention'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.was'} @:{'words.generated.successful'}.", @@ -4509,7 +4510,7 @@ "workflow": "Workflow" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Accept suggestion", "attach_order": "Attach order", diff --git a/src/i18n/generated/global-v2.json b/src/i18n/generated/global-v2.json index b41ede5c..d77183be 100644 --- a/src/i18n/generated/global-v2.json +++ b/src/i18n/generated/global-v2.json @@ -1658,6 +1658,7 @@ "api_settings_desc": "@:{'templates.generated.compat.configuration.xlvask.api_settings_desc'}", "automation_settings": "@:{'templates.generated.compat.configuration.xlvask.automation_settings'}", "automation_settings_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_desc'}", + "automation_settings_removed_desc": "Automatic attachment, automatic creation, OpenAI and MiniMax integrations have been removed. Operator review is now performed from the Superuser -> Fakturaer -> Periode -> Selvvask view.", "connection_failed": "@:{'templates.generated.compat.configuration.xlvask.connection_failed'}", "connection_failed_desc": "@:{'templates.generated.compat.configuration.xlvask.connection_failed_desc'}", "connection_success": "@:configuration.limble.connection_success", @@ -3895,203 +3896,203 @@ "workflow": "@:{'templates.generated.compat.invoicing_period.review_workspace.toolbar.workflow'}" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { - "accept": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.accept'}", - "attach_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.attach_order'}", - "compare": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare'}", - "compare_modal_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_modal_title'}", - "compare_no_candidates": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_no_candidates'}", - "compare_price_match": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_price_match'}", - "compare_price_mismatch": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_price_mismatch'}", - "compare_usage_price": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_usage_price'}", - "compare_candidate_price": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.compare_candidate_price'}", - "create_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.create_order'}", - "deny": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.deny'}", - "ignore": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.ignore'}", - "link": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.link'}", - "link_prompt_label": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_label'}", - "link_prompt_invalid": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_invalid'}", - "link_prompt_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_title'}", - "none": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.none'}", - "recheck": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.recheck'}", - "resolve_mapping": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.actions.resolve_mapping'}" + "accept": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.accept'}", + "attach_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.attach_order'}", + "compare": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare'}", + "compare_modal_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_modal_title'}", + "compare_no_candidates": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_no_candidates'}", + "compare_price_match": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_price_match'}", + "compare_price_mismatch": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_price_mismatch'}", + "compare_usage_price": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_usage_price'}", + "compare_candidate_price": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.compare_candidate_price'}", + "create_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.create_order'}", + "deny": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.deny'}", + "ignore": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.ignore'}", + "link": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.link'}", + "link_prompt_label": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.link_prompt_label'}", + "link_prompt_invalid": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.link_prompt_invalid'}", + "link_prompt_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.link_prompt_title'}", + "none": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.none'}", + "recheck": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.recheck'}", + "resolve_mapping": "@:{'templates.generated.compat.invoicing_period.xlvask_review.actions.resolve_mapping'}" }, "adjudication": { - "confirm_correct": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_correct'}", - "confirm_cross_hall": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_cross_hall'}", - "confirm_duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_duplicate'}", - "confirm_incorrect": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_incorrect'}", - "confirm_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_title'}", - "confirm_unaudited": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_unaudited'}", - "description": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.description'}", - "halted": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.halted'}", + "confirm_correct": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_correct'}", + "confirm_cross_hall": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_cross_hall'}", + "confirm_duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_duplicate'}", + "confirm_incorrect": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_incorrect'}", + "confirm_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_title'}", + "confirm_unaudited": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.confirm_unaudited'}", + "description": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.description'}", + "halted": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.halted'}", "outcomes": { - "correct": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.correct'}", - "cross_hall": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.cross_hall'}", - "duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.duplicate'}", - "incorrect": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.incorrect'}", - "unaudited": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.unaudited'}" + "correct": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.outcomes.correct'}", + "cross_hall": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.outcomes.cross_hall'}", + "duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.outcomes.duplicate'}", + "incorrect": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.outcomes.incorrect'}", + "unaudited": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.outcomes.unaudited'}" }, - "saved": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.saved'}", - "title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.adjudication.title'}" + "saved": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.saved'}", + "title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.adjudication.title'}" }, - "audit": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.audit'}", - "bulk_selected": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.bulk_selected'}", - "bulk_eligibility": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.bulk_eligibility'}", - "calibrated_probability": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.calibrated_probability'}", - "candidates": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.candidates'}", - "contradictions": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.contradictions'}", + "audit": "@:{'templates.generated.compat.invoicing_period.xlvask_review.audit'}", + "bulk_selected": "@:{'templates.generated.compat.invoicing_period.xlvask_review.bulk_selected'}", + "bulk_eligibility": "@:{'templates.generated.compat.invoicing_period.xlvask_review.bulk_eligibility'}", + "calibrated_probability": "@:{'templates.generated.compat.invoicing_period.xlvask_review.calibrated_probability'}", + "candidates": "@:{'templates.generated.compat.invoicing_period.xlvask_review.candidates'}", + "contradictions": "@:{'templates.generated.compat.invoicing_period.xlvask_review.contradictions'}", "controls": { - "active_run_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.active_run_error'}", - "analyze": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.analyze'}", - "budget": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.budget'}", - "execute": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.execute'}", - "execute_description": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.execute_description'}", - "execute_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.execute_phrase'}", - "execute_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.execute_title'}", - "halt": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.halt'}", - "halt_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.halt_title'}", - "load_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.load_error'}", - "no_access": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.no_access'}", - "not_ready": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.not_ready'}", - "policy_advance": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_advance'}", - "policy_apply": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_apply'}", - "policy_description": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_description'}", - "policy_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_phrase'}", - "policy_reason": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_reason'}", - "policy_reason_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_reason_title'}", - "policy_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.policy_title'}", - "readiness_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.readiness_error'}", - "ready": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.ready'}", - "stage": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.stage'}", - "title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.title'}", - "worker_healthy": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.worker_healthy'}", - "worker_unhealthy": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.controls.worker_unhealthy'}" + "active_run_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.active_run_error'}", + "analyze": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.analyze'}", + "budget": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.budget'}", + "execute": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.execute'}", + "execute_description": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.execute_description'}", + "execute_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.execute_phrase'}", + "execute_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.execute_title'}", + "halt": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.halt'}", + "halt_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.halt_title'}", + "load_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.load_error'}", + "no_access": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.no_access'}", + "not_ready": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.not_ready'}", + "policy_advance": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_advance'}", + "policy_apply": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_apply'}", + "policy_description": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_description'}", + "policy_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_phrase'}", + "policy_reason": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_reason'}", + "policy_reason_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_reason_title'}", + "policy_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.policy_title'}", + "readiness_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.readiness_error'}", + "ready": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.ready'}", + "stage": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.stage'}", + "title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.title'}", + "worker_healthy": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.worker_healthy'}", + "worker_unhealthy": "@:{'templates.generated.compat.invoicing_period.xlvask_review.controls.worker_unhealthy'}" }, - "clear_selection": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.clear_selection'}", - "evidence": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.evidence'}", + "clear_selection": "@:{'templates.generated.compat.invoicing_period.xlvask_review.clear_selection'}", + "evidence": "@:{'templates.generated.compat.invoicing_period.xlvask_review.evidence'}", "filters": { - "all": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.all'}", - "certainty": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.certainty'}", - "clear": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.clear'}", - "import_state": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.import_state'}", - "planned_action": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.planned_action'}", - "resolution_state": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.resolution_state'}", - "title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.title'}", - "unattached_only": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.filters.unattached_only'}" + "all": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.all'}", + "certainty": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.certainty'}", + "clear": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.clear'}", + "import_state": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.import_state'}", + "planned_action": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.planned_action'}", + "resolution_state": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.resolution_state'}", + "title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.title'}", + "unattached_only": "@:{'templates.generated.compat.invoicing_period.xlvask_review.filters.unattached_only'}" }, - "hide_match": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.hide_match'}", - "model": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.model'}", - "no_safe_match": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.no_safe_match'}", - "planned_action": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.planned_action'}", - "policy_version": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.policy_version'}", + "hide_match": "@:{'templates.generated.compat.invoicing_period.xlvask_review.hide_match'}", + "model": "@:{'templates.generated.compat.invoicing_period.xlvask_review.model'}", + "no_safe_match": "@:{'templates.generated.compat.invoicing_period.xlvask_review.no_safe_match'}", + "planned_action": "@:{'templates.generated.compat.invoicing_period.xlvask_review.planned_action'}", + "policy_version": "@:{'templates.generated.compat.invoicing_period.xlvask_review.policy_version'}", "preview": { - "after": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.after'}", - "applied": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.applied'}", - "apply": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.apply'}", - "before": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.before'}", - "confirmation_label": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.confirmation_label'}", - "confirmation_mismatch": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.confirmation_mismatch'}", - "confirmation_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.confirmation_phrase'}", - "error_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.error_title'}", - "reason_label": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.reason_label'}", - "reason_required": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.reason_required'}", - "title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.preview.title'}" + "after": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.after'}", + "applied": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.applied'}", + "apply": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.apply'}", + "before": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.before'}", + "confirmation_label": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.confirmation_label'}", + "confirmation_mismatch": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.confirmation_mismatch'}", + "confirmation_phrase": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.confirmation_phrase'}", + "error_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.error_title'}", + "reason_label": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.reason_label'}", + "reason_required": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.reason_required'}", + "title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.preview.title'}" }, - "resume_status": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.resume_status'}", - "run": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run'}", - "run_id": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_id'}", + "resume_status": "@:{'templates.generated.compat.invoicing_period.xlvask_review.resume_status'}", + "run": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run'}", + "run_id": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_id'}", "run_phases": { - "circuit_breaker": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.circuit_breaker'}", - "completed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.completed'}", - "completed_with_warnings": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.completed_with_warnings'}", - "evaluating": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.evaluating'}", - "executing": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.executing'}", - "failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.failed'}", - "importing": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.importing'}", - "pending": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.pending'}", - "processing": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.processing'}", - "queued": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.queued'}", - "reconciling": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.reconciling'}", - "retry_wait": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.retry_wait'}", - "running": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_phases.running'}" + "circuit_breaker": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.circuit_breaker'}", + "completed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.completed'}", + "completed_with_warnings": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.completed_with_warnings'}", + "evaluating": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.evaluating'}", + "executing": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.executing'}", + "failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.failed'}", + "importing": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.importing'}", + "pending": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.pending'}", + "processing": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.processing'}", + "queued": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.queued'}", + "reconciling": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.reconciling'}", + "retry_wait": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.retry_wait'}", + "running": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_phases.running'}" }, - "run_progress": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_progress'}", - "run_start_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_start_error'}", - "run_status_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.run_status_error'}", - "select_record": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.select_record'}", - "show_match": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.show_match'}", - "source_revision": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.source_revision'}", + "run_progress": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_progress'}", + "run_start_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_start_error'}", + "run_status_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.run_status_error'}", + "select_record": "@:{'templates.generated.compat.invoicing_period.xlvask_review.select_record'}", + "show_match": "@:{'templates.generated.compat.invoicing_period.xlvask_review.show_match'}", + "source_revision": "@:{'templates.generated.compat.invoicing_period.xlvask_review.source_revision'}", "states": { - "accepted_attach": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.accepted_attach'}", - "accepted_create": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.accepted_create'}", - "already_linked": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.already_linked'}", - "auto_accepted_attach": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.auto_accepted_attach'}", - "auto_accepted_create": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.auto_accepted_create'}", - "auto_created": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.auto_created'}", - "auto_linked": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.auto_linked'}", - "blocked": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.blocked'}", - "certain": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.certain'}", - "denied": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.denied'}", - "failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.failed'}", - "ignored": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.ignored'}", - "invalid": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.invalid'}", - "needs_review": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.needs_review'}", - "new": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.new'}", - "none": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.none'}", - "suggested_attach_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.suggested_attach_order'}", - "suggested_create_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.suggested_create_order'}", - "uncertain": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.uncertain'}", - "unchanged": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.unchanged'}", - "updated": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.states.updated'}" + "accepted_attach": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.accepted_attach'}", + "accepted_create": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.accepted_create'}", + "already_linked": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.already_linked'}", + "auto_accepted_attach": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.auto_accepted_attach'}", + "auto_accepted_create": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.auto_accepted_create'}", + "auto_created": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.auto_created'}", + "auto_linked": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.auto_linked'}", + "blocked": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.blocked'}", + "certain": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.certain'}", + "denied": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.denied'}", + "failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.failed'}", + "ignored": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.ignored'}", + "invalid": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.invalid'}", + "needs_review": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.needs_review'}", + "new": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.new'}", + "none": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.none'}", + "suggested_attach_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.suggested_attach_order'}", + "suggested_create_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.suggested_create_order'}", + "uncertain": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.uncertain'}", + "unchanged": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.unchanged'}", + "updated": "@:{'templates.generated.compat.invoicing_period.xlvask_review.states.updated'}" }, - "summary_error": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.summary_error'}", - "summary_title": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.summary_title'}", + "summary_error": "@:{'templates.generated.compat.invoicing_period.xlvask_review.summary_error'}", + "summary_title": "@:{'templates.generated.compat.invoicing_period.xlvask_review.summary_title'}", "labels": { - "attached_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.attached_to_order'}", - "not_attached_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.not_attached_to_order'}", - "compare_select_duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.compare_select_duplicate'}", - "compare_price_mismatch_inline": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.compare_price_mismatch_inline'}", - "wash_id": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.wash_id'}", - "wash_already_withdrawn": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.wash_already_withdrawn'}", - "go_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.go_to_order'}", - "unknown_product": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.unknown_product'}", - "unknown_product_with_id": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.unknown_product_with_id'}", - "ok": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.labels.ok'}" + "attached_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.attached_to_order'}", + "not_attached_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.not_attached_to_order'}", + "compare_select_duplicate": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.compare_select_duplicate'}", + "compare_price_mismatch_inline": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.compare_price_mismatch_inline'}", + "wash_id": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.wash_id'}", + "wash_already_withdrawn": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.wash_already_withdrawn'}", + "go_to_order": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.go_to_order'}", + "unknown_product": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.unknown_product'}", + "unknown_product_with_id": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.unknown_product_with_id'}", + "ok": "@:{'templates.generated.compat.invoicing_period.xlvask_review.labels.ok'}" }, "time": { - "just_now": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.just_now'}", - "ago_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.ago_one'}", - "ago_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.ago_other'}", + "just_now": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.just_now'}", + "ago_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.ago_one'}", + "ago_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.ago_other'}", "units": { - "year_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.year_one'}", - "year_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.year_other'}", - "month_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.month_one'}", - "month_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.month_other'}", - "week_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.week_one'}", - "week_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.week_other'}", - "day_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.day_one'}", - "day_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.day_other'}", - "hour_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.hour_one'}", - "hour_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.hour_other'}", - "minute_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.minute_one'}", - "minute_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.minute_other'}", - "second_one": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.second_one'}", - "second_other": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.time.units.second_other'}" + "year_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.year_one'}", + "year_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.year_other'}", + "month_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.month_one'}", + "month_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.month_other'}", + "week_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.week_one'}", + "week_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.week_other'}", + "day_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.day_one'}", + "day_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.day_other'}", + "hour_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.hour_one'}", + "hour_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.hour_other'}", + "minute_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.minute_one'}", + "minute_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.minute_other'}", + "second_one": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.second_one'}", + "second_other": "@:{'templates.generated.compat.invoicing_period.xlvask_review.time.units.second_other'}" } }, "errors": { - "fetch_usage_log": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.fetch_usage_log'}", - "fetch_vehicle_types": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.fetch_vehicle_types'}", - "fetch_related_orders": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.fetch_related_orders'}", - "fetch_fast_link": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.fetch_fast_link'}", - "create_order_unrecognized_items": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.create_order_unrecognized_items'}", - "create_order_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.create_order_failed'}", - "create_order_item_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.create_order_item_failed'}", - "redirect_order_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.redirect_order_failed'}", - "load_customers_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.load_customers_failed'}", - "load_usage_log_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_autopilot.errors.load_usage_log_failed'}" + "fetch_usage_log": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.fetch_usage_log'}", + "fetch_vehicle_types": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.fetch_vehicle_types'}", + "fetch_related_orders": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.fetch_related_orders'}", + "fetch_fast_link": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.fetch_fast_link'}", + "create_order_unrecognized_items": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.create_order_unrecognized_items'}", + "create_order_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.create_order_failed'}", + "create_order_item_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.create_order_item_failed'}", + "redirect_order_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.redirect_order_failed'}", + "load_customers_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.load_customers_failed'}", + "load_usage_log_failed": "@:{'templates.generated.compat.invoicing_period.xlvask_review.errors.load_usage_log_failed'}" } } }, diff --git a/src/i18n/generated/no-v2.json b/src/i18n/generated/no-v2.json index 99f1f5fe..8029b67e 100644 --- a/src/i18n/generated/no-v2.json +++ b/src/i18n/generated/no-v2.json @@ -3008,6 +3008,7 @@ "api_settings_desc": "@:{'words.generated.xlvask'} @:{'words.generated.api'}-@:{'words.generated.tilkoblingsinnstillingene'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'words.generated.automatisk'} @:{'words.generated.ordretilknytning'} @:{'words.generated.og'} @:{'words.generated.ordreoppretting'} @:{'words.generated.fra'} @.capitalize:{'words.generated.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'words.generated.tilkobling'} @:{'words.generated.mislyktes'}", "connection_failed_desc": "@.capitalize:{'words.generated.tilkoblingen'} @:{'words.generated.til'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.mislyktes'}.", "connection_success_desc": "@.capitalize:{'words.generated.tilkoblingen'} @:{'words.generated.til'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.var'} @:{'words.generated.vellykket'}.", @@ -4791,7 +4792,7 @@ "workflow": "Arbeidsflyt" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Godta forslag", "attach_order": "Knytt til ordre", diff --git a/src/i18n/generated/sv-v2.json b/src/i18n/generated/sv-v2.json index 5ef4b21e..1b2d3794 100644 --- a/src/i18n/generated/sv-v2.json +++ b/src/i18n/generated/sv-v2.json @@ -3058,6 +3058,7 @@ "api_settings_desc": "@.capitalize:{'words.generated.anslutningsinstallningar'} @:{'words.generated.for'} @:{'words.generated.xlvask'} @:{'words.generated.api'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'words.generated.automatisk'} @:{'words.generated.orderkoppling'} @:{'words.generated.och'} @:{'words.generated.orderskapande'} @:{'words.generated.fran'} @.capitalize:{'words.generated.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'words.generated.anslutning'} @:{'words.generated.misslyckades'}", "connection_failed_desc": "@.capitalize:{'words.generated.anslutningen'} @:{'words.generated.till'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.misslyckades'}.", "connection_success_desc": "@.capitalize:{'words.generated.anslutningen'} @:{'words.generated.till'} @:{'words.generated.xlvask'} @:{'words.generated.api'} @:{'words.generated.lyckades'}.", @@ -4841,7 +4842,7 @@ "workflow": "Arbetsflöde" } }, - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Godkänn förslag", "attach_order": "Koppla order", diff --git a/src/i18n/source/da/phrases/compat/configuration/index.json b/src/i18n/source/da/phrases/compat/configuration/index.json index a3fb628a..136248b3 100644 --- a/src/i18n/source/da/phrases/compat/configuration/index.json +++ b/src/i18n/source/da/phrases/compat/configuration/index.json @@ -355,6 +355,7 @@ "api_settings_desc": "@:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.forbindelsesindstillingerne'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'terms.glossary.automatisk'} @:{'terms.glossary.tilknytning'} @:{'terms.glossary.og'} @:{'terms.glossary.oprettelse'} @:{'terms.glossary.af'} @:{'terms.glossary.ordrer'} @:{'terms.glossary.fra'} @.capitalize:{'terms.glossary.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'terms.glossary.forbindelse'} @:{'terms.glossary.fejlede'}", "connection_failed_desc": "@.capitalize:{'terms.glossary.forbindelsen'} @:{'terms.glossary.til'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.fejlede'}.", "connection_success_desc": "@.capitalize:{'terms.glossary.forbindelsen'} @:{'terms.glossary.til'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.var'} @:{'terms.glossary.succesfuld'}.", diff --git a/src/i18n/source/da/phrases/compat/invoicing_period/xlvask_autopilot.json b/src/i18n/source/da/phrases/compat/invoicing_period/xlvask_review.json similarity index 99% rename from src/i18n/source/da/phrases/compat/invoicing_period/xlvask_autopilot.json rename to src/i18n/source/da/phrases/compat/invoicing_period/xlvask_review.json index 1fa841b3..18f508f5 100644 --- a/src/i18n/source/da/phrases/compat/invoicing_period/xlvask_autopilot.json +++ b/src/i18n/source/da/phrases/compat/invoicing_period/xlvask_review.json @@ -1,5 +1,5 @@ { - "compat": { "invoicing_period": { "xlvask_autopilot": { + "compat": { "invoicing_period": { "xlvask_review": { "actions": { "accept": "Accepter forslag", "attach_order": "Tilknyt ordre", "compare": "Sammenlign kandidater", "compare_modal_title": "Sammenlign kandidater med vask", "compare_no_candidates": "Ingen kandidater at sammenligne", "compare_price_match": "Pris matcher", "compare_price_mismatch": "Pris matcher ikke", "compare_usage_price": "Vaskens beregnede pris", "compare_candidate_price": "Kandidatpris", "create_order": "Opret ordre", "deny": "Afvis", "ignore": "Ignorer", "link": "Tilknyt ordre-ID", "link_prompt_label": "Indtast ordre-ID", "link_prompt_invalid": "Indtast et gyldigt numerisk ordre-ID", "link_prompt_title": "Tilknyt vask til en eksisterende ordre", "none": "Ingen handling", "recheck": "Kontrollér igen", "resolve_mapping": "Ret tilknytning" }, "adjudication": { "confirm_correct": "Bekræft, at den automatiske handling var korrekt.", diff --git a/src/i18n/source/de/phrases/compat/configuration/index.json b/src/i18n/source/de/phrases/compat/configuration/index.json index 0f6ad148..b3859d59 100644 --- a/src/i18n/source/de/phrases/compat/configuration/index.json +++ b/src/i18n/source/de/phrases/compat/configuration/index.json @@ -355,6 +355,7 @@ "api_settings_desc": "@:{'terms.glossary.api'}-@:{'terms.glossary.verbindungseinstellungen'} @:{'terms.glossary.f'}?@:{'terms.glossary.r'} @:{'terms.glossary.xlvask'}.", "automation_settings": "Automatisierung", "automation_settings_desc": "@:{'terms.glossary.automatische'} @:{'terms.glossary.auftragsverknupfung'} @:{'terms.glossary.und'} @:{'terms.glossary.auftragserstellung'} @:{'terms.glossary.aus'} @:{'terms.glossary.selvvask'} steuern.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@:{'terms.glossary.verbindung'} @:{'terms.glossary.fehlgeschlagen'}", "connection_failed_desc": "@.capitalize:{'terms.glossary.die'} @:{'terms.glossary.verbindung'} @:{'terms.glossary.zur'} @:{'terms.glossary.xlvask'}-@:{'terms.glossary.api'} @:{'terms.glossary.ist'} @:{'terms.glossary.fehlgeschlagen'}.", "connection_success_desc": "@.capitalize:{'terms.glossary.die'} @:{'terms.glossary.verbindung'} @:{'terms.glossary.zur'} @:{'terms.glossary.xlvask'}-@:{'terms.glossary.api'} @:{'terms.glossary.war'} @:{'terms.glossary.erfolgreich'}.", diff --git a/src/i18n/source/de/phrases/compat/invoicing_period/xlvask_autopilot.json b/src/i18n/source/de/phrases/compat/invoicing_period/xlvask_review.json similarity index 99% rename from src/i18n/source/de/phrases/compat/invoicing_period/xlvask_autopilot.json rename to src/i18n/source/de/phrases/compat/invoicing_period/xlvask_review.json index 739d99b6..be38984c 100644 --- a/src/i18n/source/de/phrases/compat/invoicing_period/xlvask_autopilot.json +++ b/src/i18n/source/de/phrases/compat/invoicing_period/xlvask_review.json @@ -1,7 +1,7 @@ { "compat": { "invoicing_period": { - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Vorschlag annehmen", "attach_order": "Auftrag verknüpfen", diff --git a/src/i18n/source/en/phrases/compat/configuration/index.json b/src/i18n/source/en/phrases/compat/configuration/index.json index 75b617a7..3adf3f5e 100644 --- a/src/i18n/source/en/phrases/compat/configuration/index.json +++ b/src/i18n/source/en/phrases/compat/configuration/index.json @@ -355,6 +355,7 @@ "api_settings_desc": "@:{'terms.glossary.xlwash'} @:{'terms.replication.article.host_mention'} @:{'terms.glossary.api'} @:{'terms.glossary.connection'} @:{'terms.glossary.settings'}.", "automation_settings": "Automation", "automation_settings_desc": "@:{'terms.glossary.control'} @:{'terms.glossary.automatic'} @:{'terms.glossary.order'} @:{'terms.glossary.attachment'} @:{'terms.glossary.and'} @:{'terms.glossary.creation'} @:{'terms.glossary.from'} @:{'terms.glossary.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'terms.glossary.connection'} @:{'terms.glossary.failed'}", "connection_failed_desc": "@.capitalize:{'terms.replication.article.host_mention'} @:{'terms.glossary.connection'} @:{'terms.glossary.to'} @:{'terms.replication.article.host_mention'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.failed'}.", "connection_success_desc": "@.capitalize:{'terms.replication.article.host_mention'} @:{'terms.glossary.connection'} @:{'terms.glossary.to'} @:{'terms.replication.article.host_mention'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.was'} @:{'terms.glossary.successful'}.", diff --git a/src/i18n/source/en/phrases/compat/invoicing_period/xlvask_autopilot.json b/src/i18n/source/en/phrases/compat/invoicing_period/xlvask_review.json similarity index 99% rename from src/i18n/source/en/phrases/compat/invoicing_period/xlvask_autopilot.json rename to src/i18n/source/en/phrases/compat/invoicing_period/xlvask_review.json index ce7f6512..a41c21ef 100644 --- a/src/i18n/source/en/phrases/compat/invoicing_period/xlvask_autopilot.json +++ b/src/i18n/source/en/phrases/compat/invoicing_period/xlvask_review.json @@ -1,5 +1,5 @@ { - "compat": { "invoicing_period": { "xlvask_autopilot": { + "compat": { "invoicing_period": { "xlvask_review": { "actions": { "accept": "Accept suggestion", "attach_order": "Attach order", "compare": "Compare candidates", "compare_modal_title": "Compare candidates with wash", "compare_no_candidates": "No candidates to compare", "compare_price_match": "Price matches", "compare_price_mismatch": "Price does not match", "compare_usage_price": "Computed wash price", "compare_candidate_price": "Candidate price", "create_order": "Create order", "deny": "Deny", "ignore": "Ignore", "link": "Link order ID", "link_prompt_label": "Enter order ID", "link_prompt_invalid": "Enter a valid numeric order ID", "link_prompt_title": "Link the wash to an existing order", "none": "No action", "recheck": "Check again", "resolve_mapping": "Fix mapping" }, "adjudication": { "confirm_correct": "Confirm that the automatic action was correct.", diff --git a/src/i18n/source/global/shared/configuration/index.json b/src/i18n/source/global/shared/configuration/index.json index 4012fa13..649a249c 100644 --- a/src/i18n/source/global/shared/configuration/index.json +++ b/src/i18n/source/global/shared/configuration/index.json @@ -403,6 +403,7 @@ "api_settings_desc": "@:{'phrases.compat.configuration.xlvask.api_settings_desc'}", "automation_settings": "@:{'phrases.compat.configuration.xlvask.automation_settings'}", "automation_settings_desc": "@:{'phrases.compat.configuration.xlvask.automation_settings_desc'}", + "automation_settings_removed_desc": "Automatic attachment, automatic creation, OpenAI and MiniMax integrations have been removed. Operator review is now performed from the Superuser -> Fakturaer -> Periode -> Selvvask view.", "connection_failed": "@:{'phrases.compat.configuration.xlvask.connection_failed'}", "connection_failed_desc": "@:{'phrases.compat.configuration.xlvask.connection_failed_desc'}", "connection_success": "@:configuration.limble.connection_success", diff --git a/src/i18n/source/global/shared/invoicing_period/xlvask_autopilot.json b/src/i18n/source/global/shared/invoicing_period/xlvask_autopilot.json deleted file mode 100644 index 34c1c97f..00000000 --- a/src/i18n/source/global/shared/invoicing_period/xlvask_autopilot.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "invoicing_period": { - "xlvask_autopilot": { - "actions": { - "accept": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.accept'}", - "attach_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.attach_order'}", - "compare": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare'}", - "compare_modal_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_modal_title'}", - "compare_no_candidates": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_no_candidates'}", - "compare_price_match": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_price_match'}", - "compare_price_mismatch": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_price_mismatch'}", - "compare_usage_price": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_usage_price'}", - "compare_candidate_price": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.compare_candidate_price'}", - "create_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.create_order'}", - "deny": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.deny'}", - "ignore": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.ignore'}", - "link": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.link'}", - "link_prompt_label": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_label'}", - "link_prompt_invalid": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_invalid'}", - "link_prompt_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.link_prompt_title'}", - "none": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.none'}", - "recheck": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.recheck'}", - "resolve_mapping": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.actions.resolve_mapping'}" - }, - "adjudication": { - "confirm_correct": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_correct'}", - "confirm_cross_hall": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_cross_hall'}", - "confirm_duplicate": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_duplicate'}", - "confirm_incorrect": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_incorrect'}", - "confirm_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_title'}", - "confirm_unaudited": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.confirm_unaudited'}", - "description": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.description'}", - "halted": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.halted'}", - "outcomes": { - "correct": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.correct'}", - "cross_hall": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.cross_hall'}", - "duplicate": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.duplicate'}", - "incorrect": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.incorrect'}", - "unaudited": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.outcomes.unaudited'}" - }, - "saved": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.saved'}", - "title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.adjudication.title'}" - }, - "audit": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.audit'}", - "bulk_selected": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.bulk_selected'}", - "bulk_eligibility": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.bulk_eligibility'}", - "calibrated_probability": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.calibrated_probability'}", - "candidates": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.candidates'}", - "contradictions": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.contradictions'}", - "controls": { - "active_run_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.active_run_error'}", - "analyze": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.analyze'}", - "budget": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.budget'}", - "execute": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.execute'}", - "execute_description": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.execute_description'}", - "execute_phrase": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.execute_phrase'}", - "execute_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.execute_title'}", - "halt": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.halt'}", - "halt_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.halt_title'}", - "load_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.load_error'}", - "no_access": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.no_access'}", - "not_ready": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.not_ready'}", - "policy_advance": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_advance'}", - "policy_apply": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_apply'}", - "policy_description": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_description'}", - "policy_phrase": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_phrase'}", - "policy_reason": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_reason'}", - "policy_reason_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_reason_title'}", - "policy_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.policy_title'}", - "readiness_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.readiness_error'}", - "ready": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.ready'}", - "stage": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.stage'}", - "title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.title'}", - "worker_healthy": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.worker_healthy'}", - "worker_unhealthy": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.controls.worker_unhealthy'}" - }, - "clear_selection": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.clear_selection'}", - "evidence": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.evidence'}", - "filters": { - "all": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.all'}", - "certainty": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.certainty'}", - "clear": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.clear'}", - "import_state": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.import_state'}", - "planned_action": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.planned_action'}", - "resolution_state": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.resolution_state'}", - "title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.title'}", - "unattached_only": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.filters.unattached_only'}" - }, - "hide_match": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.hide_match'}", - "model": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.model'}", - "no_safe_match": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.no_safe_match'}", - "planned_action": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.planned_action'}", - "policy_version": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.policy_version'}", - "preview": { - "after": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.after'}", - "applied": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.applied'}", - "apply": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.apply'}", - "before": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.before'}", - "confirmation_label": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.confirmation_label'}", - "confirmation_mismatch": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.confirmation_mismatch'}", - "confirmation_phrase": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.confirmation_phrase'}", - "error_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.error_title'}", - "reason_label": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.reason_label'}", - "reason_required": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.reason_required'}", - "title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.preview.title'}" - }, - "resume_status": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.resume_status'}", - "run": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run'}", - "run_id": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_id'}", - "run_phases": { - "circuit_breaker": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.circuit_breaker'}", - "completed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.completed'}", - "completed_with_warnings": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.completed_with_warnings'}", - "evaluating": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.evaluating'}", - "executing": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.executing'}", - "failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.failed'}", - "importing": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.importing'}", - "pending": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.pending'}", - "processing": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.processing'}", - "queued": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.queued'}", - "reconciling": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.reconciling'}", - "retry_wait": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.retry_wait'}", - "running": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_phases.running'}" - }, - "run_progress": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_progress'}", - "run_start_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_start_error'}", - "run_status_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.run_status_error'}", - "select_record": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.select_record'}", - "show_match": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.show_match'}", - "source_revision": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.source_revision'}", - "states": { - "accepted_attach": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.accepted_attach'}", - "accepted_create": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.accepted_create'}", - "already_linked": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.already_linked'}", - "auto_accepted_attach": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.auto_accepted_attach'}", - "auto_accepted_create": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.auto_accepted_create'}", - "auto_created": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.auto_created'}", - "auto_linked": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.auto_linked'}", - "blocked": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.blocked'}", - "certain": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.certain'}", - "denied": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.denied'}", - "failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.failed'}", - "ignored": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.ignored'}", - "invalid": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.invalid'}", - "needs_review": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.needs_review'}", - "new": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.new'}", - "none": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.none'}", - "suggested_attach_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.suggested_attach_order'}", - "suggested_create_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.suggested_create_order'}", - "uncertain": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.uncertain'}", - "unchanged": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.unchanged'}", - "updated": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.states.updated'}" - }, - "summary_error": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.summary_error'}", - "summary_title": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.summary_title'}", - "labels": { - "attached_to_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.attached_to_order'}", - "not_attached_to_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.not_attached_to_order'}", - "compare_select_duplicate": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.compare_select_duplicate'}", - "compare_price_mismatch_inline": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.compare_price_mismatch_inline'}", - "wash_id": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.wash_id'}", - "wash_already_withdrawn": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.wash_already_withdrawn'}", - "go_to_order": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.go_to_order'}", - "unknown_product": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.unknown_product'}", - "unknown_product_with_id": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.unknown_product_with_id'}", - "ok": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.labels.ok'}" - }, - "time": { - "just_now": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.just_now'}", - "ago_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.ago_one'}", - "ago_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.ago_other'}", - "units": { - "year_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.year_one'}", - "year_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.year_other'}", - "month_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.month_one'}", - "month_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.month_other'}", - "week_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.week_one'}", - "week_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.week_other'}", - "day_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.day_one'}", - "day_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.day_other'}", - "hour_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.hour_one'}", - "hour_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.hour_other'}", - "minute_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.minute_one'}", - "minute_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.minute_other'}", - "second_one": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.second_one'}", - "second_other": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.time.units.second_other'}" - } - }, - "errors": { - "fetch_usage_log": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.fetch_usage_log'}", - "fetch_vehicle_types": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.fetch_vehicle_types'}", - "fetch_related_orders": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.fetch_related_orders'}", - "fetch_fast_link": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.fetch_fast_link'}", - "create_order_unrecognized_items": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.create_order_unrecognized_items'}", - "create_order_failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.create_order_failed'}", - "create_order_item_failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.create_order_item_failed'}", - "redirect_order_failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.redirect_order_failed'}", - "load_customers_failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.load_customers_failed'}", - "load_usage_log_failed": "@:{'phrases.compat.invoicing_period.xlvask_autopilot.errors.load_usage_log_failed'}" - } - } - } -} diff --git a/src/i18n/source/global/shared/invoicing_period/xlvask_review.json b/src/i18n/source/global/shared/invoicing_period/xlvask_review.json new file mode 100644 index 00000000..ba0f3dac --- /dev/null +++ b/src/i18n/source/global/shared/invoicing_period/xlvask_review.json @@ -0,0 +1,203 @@ +{ + "invoicing_period": { + "xlvask_review": { + "actions": { + "accept": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.accept'}", + "attach_order": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.attach_order'}", + "compare": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare'}", + "compare_modal_title": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_modal_title'}", + "compare_no_candidates": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_no_candidates'}", + "compare_price_match": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_price_match'}", + "compare_price_mismatch": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_price_mismatch'}", + "compare_usage_price": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_usage_price'}", + "compare_candidate_price": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.compare_candidate_price'}", + "create_order": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.create_order'}", + "deny": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.deny'}", + "ignore": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.ignore'}", + "link": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.link'}", + "link_prompt_label": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.link_prompt_label'}", + "link_prompt_invalid": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.link_prompt_invalid'}", + "link_prompt_title": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.link_prompt_title'}", + "none": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.none'}", + "recheck": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.recheck'}", + "resolve_mapping": "@:{'phrases.compat.invoicing_period.xlvask_review.actions.resolve_mapping'}" + }, + "adjudication": { + "confirm_correct": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_correct'}", + "confirm_cross_hall": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_cross_hall'}", + "confirm_duplicate": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_duplicate'}", + "confirm_incorrect": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_incorrect'}", + "confirm_title": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_title'}", + "confirm_unaudited": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.confirm_unaudited'}", + "description": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.description'}", + "halted": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.halted'}", + "outcomes": { + "correct": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.outcomes.correct'}", + "cross_hall": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.outcomes.cross_hall'}", + "duplicate": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.outcomes.duplicate'}", + "incorrect": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.outcomes.incorrect'}", + "unaudited": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.outcomes.unaudited'}" + }, + "saved": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.saved'}", + "title": "@:{'phrases.compat.invoicing_period.xlvask_review.adjudication.title'}" + }, + "audit": "@:{'phrases.compat.invoicing_period.xlvask_review.audit'}", + "bulk_selected": "@:{'phrases.compat.invoicing_period.xlvask_review.bulk_selected'}", + "bulk_eligibility": "@:{'phrases.compat.invoicing_period.xlvask_review.bulk_eligibility'}", + "calibrated_probability": "@:{'phrases.compat.invoicing_period.xlvask_review.calibrated_probability'}", + "candidates": "@:{'phrases.compat.invoicing_period.xlvask_review.candidates'}", + "contradictions": "@:{'phrases.compat.invoicing_period.xlvask_review.contradictions'}", + "controls": { + "active_run_error": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.active_run_error'}", + "analyze": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.analyze'}", + "budget": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.budget'}", + "execute": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.execute'}", + "execute_description": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.execute_description'}", + "execute_phrase": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.execute_phrase'}", + "execute_title": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.execute_title'}", + "halt": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.halt'}", + "halt_title": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.halt_title'}", + "load_error": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.load_error'}", + "no_access": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.no_access'}", + "not_ready": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.not_ready'}", + "policy_advance": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_advance'}", + "policy_apply": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_apply'}", + "policy_description": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_description'}", + "policy_phrase": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_phrase'}", + "policy_reason": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_reason'}", + "policy_reason_title": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_reason_title'}", + "policy_title": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.policy_title'}", + "readiness_error": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.readiness_error'}", + "ready": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.ready'}", + "stage": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.stage'}", + "title": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.title'}", + "worker_healthy": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.worker_healthy'}", + "worker_unhealthy": "@:{'phrases.compat.invoicing_period.xlvask_review.controls.worker_unhealthy'}" + }, + "clear_selection": "@:{'phrases.compat.invoicing_period.xlvask_review.clear_selection'}", + "evidence": "@:{'phrases.compat.invoicing_period.xlvask_review.evidence'}", + "filters": { + "all": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.all'}", + "certainty": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.certainty'}", + "clear": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.clear'}", + "import_state": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.import_state'}", + "planned_action": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.planned_action'}", + "resolution_state": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.resolution_state'}", + "title": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.title'}", + "unattached_only": "@:{'phrases.compat.invoicing_period.xlvask_review.filters.unattached_only'}" + }, + "hide_match": "@:{'phrases.compat.invoicing_period.xlvask_review.hide_match'}", + "model": "@:{'phrases.compat.invoicing_period.xlvask_review.model'}", + "no_safe_match": "@:{'phrases.compat.invoicing_period.xlvask_review.no_safe_match'}", + "planned_action": "@:{'phrases.compat.invoicing_period.xlvask_review.planned_action'}", + "policy_version": "@:{'phrases.compat.invoicing_period.xlvask_review.policy_version'}", + "preview": { + "after": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.after'}", + "applied": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.applied'}", + "apply": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.apply'}", + "before": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.before'}", + "confirmation_label": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.confirmation_label'}", + "confirmation_mismatch": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.confirmation_mismatch'}", + "confirmation_phrase": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.confirmation_phrase'}", + "error_title": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.error_title'}", + "reason_label": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.reason_label'}", + "reason_required": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.reason_required'}", + "title": "@:{'phrases.compat.invoicing_period.xlvask_review.preview.title'}" + }, + "resume_status": "@:{'phrases.compat.invoicing_period.xlvask_review.resume_status'}", + "run": "@:{'phrases.compat.invoicing_period.xlvask_review.run'}", + "run_id": "@:{'phrases.compat.invoicing_period.xlvask_review.run_id'}", + "run_phases": { + "circuit_breaker": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.circuit_breaker'}", + "completed": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.completed'}", + "completed_with_warnings": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.completed_with_warnings'}", + "evaluating": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.evaluating'}", + "executing": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.executing'}", + "failed": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.failed'}", + "importing": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.importing'}", + "pending": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.pending'}", + "processing": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.processing'}", + "queued": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.queued'}", + "reconciling": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.reconciling'}", + "retry_wait": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.retry_wait'}", + "running": "@:{'phrases.compat.invoicing_period.xlvask_review.run_phases.running'}" + }, + "run_progress": "@:{'phrases.compat.invoicing_period.xlvask_review.run_progress'}", + "run_start_error": "@:{'phrases.compat.invoicing_period.xlvask_review.run_start_error'}", + "run_status_error": "@:{'phrases.compat.invoicing_period.xlvask_review.run_status_error'}", + "select_record": "@:{'phrases.compat.invoicing_period.xlvask_review.select_record'}", + "show_match": "@:{'phrases.compat.invoicing_period.xlvask_review.show_match'}", + "source_revision": "@:{'phrases.compat.invoicing_period.xlvask_review.source_revision'}", + "states": { + "accepted_attach": "@:{'phrases.compat.invoicing_period.xlvask_review.states.accepted_attach'}", + "accepted_create": "@:{'phrases.compat.invoicing_period.xlvask_review.states.accepted_create'}", + "already_linked": "@:{'phrases.compat.invoicing_period.xlvask_review.states.already_linked'}", + "auto_accepted_attach": "@:{'phrases.compat.invoicing_period.xlvask_review.states.auto_accepted_attach'}", + "auto_accepted_create": "@:{'phrases.compat.invoicing_period.xlvask_review.states.auto_accepted_create'}", + "auto_created": "@:{'phrases.compat.invoicing_period.xlvask_review.states.auto_created'}", + "auto_linked": "@:{'phrases.compat.invoicing_period.xlvask_review.states.auto_linked'}", + "blocked": "@:{'phrases.compat.invoicing_period.xlvask_review.states.blocked'}", + "certain": "@:{'phrases.compat.invoicing_period.xlvask_review.states.certain'}", + "denied": "@:{'phrases.compat.invoicing_period.xlvask_review.states.denied'}", + "failed": "@:{'phrases.compat.invoicing_period.xlvask_review.states.failed'}", + "ignored": "@:{'phrases.compat.invoicing_period.xlvask_review.states.ignored'}", + "invalid": "@:{'phrases.compat.invoicing_period.xlvask_review.states.invalid'}", + "needs_review": "@:{'phrases.compat.invoicing_period.xlvask_review.states.needs_review'}", + "new": "@:{'phrases.compat.invoicing_period.xlvask_review.states.new'}", + "none": "@:{'phrases.compat.invoicing_period.xlvask_review.states.none'}", + "suggested_attach_order": "@:{'phrases.compat.invoicing_period.xlvask_review.states.suggested_attach_order'}", + "suggested_create_order": "@:{'phrases.compat.invoicing_period.xlvask_review.states.suggested_create_order'}", + "uncertain": "@:{'phrases.compat.invoicing_period.xlvask_review.states.uncertain'}", + "unchanged": "@:{'phrases.compat.invoicing_period.xlvask_review.states.unchanged'}", + "updated": "@:{'phrases.compat.invoicing_period.xlvask_review.states.updated'}" + }, + "summary_error": "@:{'phrases.compat.invoicing_period.xlvask_review.summary_error'}", + "summary_title": "@:{'phrases.compat.invoicing_period.xlvask_review.summary_title'}", + "labels": { + "attached_to_order": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.attached_to_order'}", + "not_attached_to_order": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.not_attached_to_order'}", + "compare_select_duplicate": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.compare_select_duplicate'}", + "compare_price_mismatch_inline": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.compare_price_mismatch_inline'}", + "wash_id": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.wash_id'}", + "wash_already_withdrawn": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.wash_already_withdrawn'}", + "go_to_order": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.go_to_order'}", + "unknown_product": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.unknown_product'}", + "unknown_product_with_id": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.unknown_product_with_id'}", + "ok": "@:{'phrases.compat.invoicing_period.xlvask_review.labels.ok'}" + }, + "time": { + "just_now": "@:{'phrases.compat.invoicing_period.xlvask_review.time.just_now'}", + "ago_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.ago_one'}", + "ago_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.ago_other'}", + "units": { + "year_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.year_one'}", + "year_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.year_other'}", + "month_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.month_one'}", + "month_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.month_other'}", + "week_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.week_one'}", + "week_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.week_other'}", + "day_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.day_one'}", + "day_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.day_other'}", + "hour_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.hour_one'}", + "hour_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.hour_other'}", + "minute_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.minute_one'}", + "minute_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.minute_other'}", + "second_one": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.second_one'}", + "second_other": "@:{'phrases.compat.invoicing_period.xlvask_review.time.units.second_other'}" + } + }, + "errors": { + "fetch_usage_log": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.fetch_usage_log'}", + "fetch_vehicle_types": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.fetch_vehicle_types'}", + "fetch_related_orders": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.fetch_related_orders'}", + "fetch_fast_link": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.fetch_fast_link'}", + "create_order_unrecognized_items": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.create_order_unrecognized_items'}", + "create_order_failed": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.create_order_failed'}", + "create_order_item_failed": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.create_order_item_failed'}", + "redirect_order_failed": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.redirect_order_failed'}", + "load_customers_failed": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.load_customers_failed'}", + "load_usage_log_failed": "@:{'phrases.compat.invoicing_period.xlvask_review.errors.load_usage_log_failed'}" + } + } + } +} diff --git a/src/i18n/source/no/phrases/compat/configuration/index.json b/src/i18n/source/no/phrases/compat/configuration/index.json index 20ad1e83..4c863c09 100644 --- a/src/i18n/source/no/phrases/compat/configuration/index.json +++ b/src/i18n/source/no/phrases/compat/configuration/index.json @@ -355,6 +355,7 @@ "api_settings_desc": "@:{'terms.glossary.xlvask'} @:{'terms.glossary.api'}-@:{'terms.glossary.tilkoblingsinnstillingene'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'terms.glossary.automatisk'} @:{'terms.glossary.ordretilknytning'} @:{'terms.glossary.og'} @:{'terms.glossary.ordreoppretting'} @:{'terms.glossary.fra'} @.capitalize:{'terms.glossary.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'terms.glossary.tilkobling'} @:{'terms.glossary.mislyktes'}", "connection_failed_desc": "@.capitalize:{'terms.glossary.tilkoblingen'} @:{'terms.glossary.til'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.mislyktes'}.", "connection_success_desc": "@.capitalize:{'terms.glossary.tilkoblingen'} @:{'terms.glossary.til'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.var'} @:{'terms.glossary.vellykket'}.", diff --git a/src/i18n/source/no/phrases/compat/invoicing_period/xlvask_autopilot.json b/src/i18n/source/no/phrases/compat/invoicing_period/xlvask_review.json similarity index 99% rename from src/i18n/source/no/phrases/compat/invoicing_period/xlvask_autopilot.json rename to src/i18n/source/no/phrases/compat/invoicing_period/xlvask_review.json index c2949a52..06b5421a 100644 --- a/src/i18n/source/no/phrases/compat/invoicing_period/xlvask_autopilot.json +++ b/src/i18n/source/no/phrases/compat/invoicing_period/xlvask_review.json @@ -1,7 +1,7 @@ { "compat": { "invoicing_period": { - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Godta forslag", "attach_order": "Knytt til ordre", diff --git a/src/i18n/source/sv/phrases/compat/configuration/index.json b/src/i18n/source/sv/phrases/compat/configuration/index.json index 9c88ce7b..17978788 100644 --- a/src/i18n/source/sv/phrases/compat/configuration/index.json +++ b/src/i18n/source/sv/phrases/compat/configuration/index.json @@ -355,6 +355,7 @@ "api_settings_desc": "@.capitalize:{'terms.glossary.anslutningsinstallningar'} @:{'terms.glossary.for'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'}.", "automation_settings": "Automatisering", "automation_settings_desc": "Styr @:{'terms.glossary.automatisk'} @:{'terms.glossary.orderkoppling'} @:{'terms.glossary.och'} @:{'terms.glossary.orderskapande'} @:{'terms.glossary.fran'} @.capitalize:{'terms.glossary.selvvask'}.", + "automation_settings_removed_desc": "@:{'templates.generated.compat.configuration.xlvask.automation_settings_removed_desc'}", "connection_failed": "@.capitalize:{'terms.glossary.anslutning'} @:{'terms.glossary.misslyckades'}", "connection_failed_desc": "@.capitalize:{'terms.glossary.anslutningen'} @:{'terms.glossary.till'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.misslyckades'}.", "connection_success_desc": "@.capitalize:{'terms.glossary.anslutningen'} @:{'terms.glossary.till'} @:{'terms.glossary.xlvask'} @:{'terms.glossary.api'} @:{'terms.glossary.lyckades'}.", diff --git a/src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_autopilot.json b/src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_review.json similarity index 99% rename from src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_autopilot.json rename to src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_review.json index 0c2f8693..4697726a 100644 --- a/src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_autopilot.json +++ b/src/i18n/source/sv/phrases/compat/invoicing_period/xlvask_review.json @@ -1,7 +1,7 @@ { "compat": { "invoicing_period": { - "xlvask_autopilot": { + "xlvask_review": { "actions": { "accept": "Godkänn förslag", "attach_order": "Koppla order", diff --git a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/components/InvoicingPeriodObjectTree.vue b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/components/InvoicingPeriodObjectTree.vue index 0090c8f7..ebbea930 100644 --- a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/components/InvoicingPeriodObjectTree.vue +++ b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/components/InvoicingPeriodObjectTree.vue @@ -2710,14 +2710,11 @@ const decideXlvaskAutomation = ( : treeText("actions.xlvask.deny.preview", "{count} XL Vask forslag afvises.", { count: rows.length }), ], async () => { + const endpointSuffix = decision === "deny" ? "reject" : decision; for (const node of rows) { await SessionUser.request( - `/modules/xlvask/services/usage/orders/${node.meta.usageId}/automation/${decision}`, + `/modules/xlvask/services/usage/orders/${node.meta.usageId}/${endpointSuffix}`, "POST", - { - suggestion_id: node.meta.automation?.id ?? null, - reason: `${decision} from invoice period tree`, - } ); } }, diff --git a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/services/invoicingPeriodTreeNodes.js b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/services/invoicingPeriodTreeNodes.js index e502e62e..b0dde102 100644 --- a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/services/invoicingPeriodTreeNodes.js +++ b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/services/invoicingPeriodTreeNodes.js @@ -467,7 +467,6 @@ export const makeXlvaskNode = (usage, order = null, options = {}) => { usageId, washId, orderId: toPositiveInteger(order?.id ?? usage?.linked_order_id ?? usage?.order_id), - automation: usage?.automation, }, }; }; diff --git a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/views/InvoicingBillingPeriodViewSelfWash.vue b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/views/InvoicingBillingPeriodViewSelfWash.vue index bfd06a22..57243587 100644 --- a/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/views/InvoicingBillingPeriodViewSelfWash.vue +++ b/src/views/dashboards/superUserDashboard/InvoicingBillingPeriod/views/InvoicingBillingPeriodViewSelfWash.vue @@ -23,7 +23,6 @@ const selfWashTitle = computed(() => i18n.global.t("nav.self_wash")); :inherit-period-filters="true" :load-all-at-once="false" :highlight-usage-log-id="highlightedUsageLogId" - :automation-workspace="true" />
diff --git a/src/views/dashboards/superUserDashboard/configuration/ConfigurationXLVask.vue b/src/views/dashboards/superUserDashboard/configuration/ConfigurationXLVask.vue index bbf1cb69..aed0dd65 100644 --- a/src/views/dashboards/superUserDashboard/configuration/ConfigurationXLVask.vue +++ b/src/views/dashboards/superUserDashboard/configuration/ConfigurationXLVask.vue @@ -83,152 +83,8 @@ const onClickTestConnection = async () => { }) } -// --- MiniMax re-authenticate / remove --------------------------------------- -const minimaxApiKeyIsSet = ref(false); -const minimaxEnabled = ref(false); -const reauthenticatingMiniMax = ref(false); -const removingMiniMax = ref(false); -const togglingMiniMaxEnabled = ref(false); - -/** - * The backend returns the get-config response as an array (one entry per - * module variable). Extract the single entry we asked for, then trust the - * explicit `isSet` flag instead of the redacted `value`. - */ -const extractConfigEntry = (response) => { - const payload = response?.data?.data; - if (Array.isArray(payload)) { - return payload[0] ?? null; - } - return payload ?? null; -}; - -const refreshMiniMaxApiKeyStatus = async () => { - try { - const response = await SessionUser.superUser.modules.minimax.config.keys.api_key.get(); - const entry = extractConfigEntry(response); - minimaxApiKeyIsSet.value = entry?.isSet === true; - } catch (error) { - // If the endpoint is unreachable or the key isn't set yet, treat as not-set. - minimaxApiKeyIsSet.value = false; - } -}; - -const refreshMiniMaxEnabled = async () => { - try { - const response = await SessionUser.superUser.modules.minimax.config.enabled.get(); - const entry = extractConfigEntry(response); - const raw = entry?.value; - minimaxEnabled.value = raw === true || raw === 'true' || raw === '1' || raw === 1; - } catch (error) { - minimaxEnabled.value = false; - } -}; - -const onClickReauthenticateMiniMax = async () => { - const { value: apiKey } = await Swal.fire({ - title: t('configuration.xlvask.minimax_reauth_title'), - text: t('configuration.xlvask.minimax_reauth_desc'), - input: 'password', - inputAttributes: { autocomplete: 'off', autocapitalize: 'off', spellcheck: 'false' }, - inputPlaceholder: t('configuration.xlvask.minimax_api_key_placeholder'), - showCancelButton: true, - confirmButtonText: t('configuration.xlvask.minimax_reauth_confirm'), - cancelButtonText: t('common.cancel'), - preConfirm: (val) => { - if (!val || String(val).trim() === '') { - Swal.showValidationMessage(t('configuration.xlvask.minimax_api_key_required')); - return false; - } - return String(val).trim(); - }, - }); - if (!apiKey) return; - reauthenticatingMiniMax.value = true; - try { - await SessionUser.superUser.modules.minimax.config.keys.api_key.set(apiKey); - // Re-fetch from the backend so the UI matches actual persistence (and so a - // silent failure surfaces as "still not set" instead of a misleading green - // checkmark). - await refreshMiniMaxApiKeyStatus(); - Swal.fire({ - icon: 'success', - title: t('configuration.xlvask.minimax_reauth_success'), - text: t('configuration.xlvask.minimax_reauth_success_desc'), - }); - } catch (error) { - Swal.fire({ - icon: 'error', - title: t('configuration.xlvask.minimax_reauth_failed'), - text: error?.message ?? String(error), - }); - } finally { - reauthenticatingMiniMax.value = false; - } -}; - -const onClickRemoveMiniMax = async () => { - const confirmation = await Swal.fire({ - title: t('configuration.xlvask.minimax_remove_title'), - text: t('configuration.xlvask.minimax_remove_desc'), - icon: 'warning', - showCancelButton: true, - confirmButtonColor: '#d33', - confirmButtonText: t('configuration.xlvask.minimax_remove_confirm'), - cancelButtonText: t('common.cancel'), - }); - if (!confirmation.isConfirmed) return; - removingMiniMax.value = true; - try { - await SessionUser.superUser.modules.minimax.config.keys.api_key.set(''); - await refreshMiniMaxApiKeyStatus(); - Swal.fire({ - icon: 'success', - title: t('configuration.xlvask.minimax_remove_success'), - text: t('configuration.xlvask.minimax_remove_success_desc'), - }); - } catch (error) { - Swal.fire({ - icon: 'error', - title: t('configuration.xlvask.minimax_remove_failed'), - text: error?.message ?? String(error), - }); - } finally { - removingMiniMax.value = false; - } -}; - -/** - * The ConfigurationSecretKey inline-edit flow calls onSave and resolves on - * success. Refresh the parent state from the API so the "Hidden" view replaces - * the warning as soon as the request actually persists. - */ -const onMiniMaxApiKeySaved = async () => { - await refreshMiniMaxApiKeyStatus(); -}; - -/** - * The MiniMax "Enable" toggle calls on-switch with the next boolean value. - * Re-fetch after the save so the UI reflects persisted state (the inline - * `set()` call does not refresh the UI on its own). - */ -const onMiniMaxEnabledSwitch = async (nextValue) => { - togglingMiniMaxEnabled.value = true; - try { - await SessionUser.superUser.modules.minimax.config.enabled.set(nextValue); - await refreshMiniMaxEnabled(); - } catch (error) { - // Roll back the optimistic UI flip on failure. - minimaxEnabled.value = !nextValue; - throw error; - } finally { - togglingMiniMaxEnabled.value = false; - } -}; - const load = async () => { await getModuleConfig(); - await Promise.all([refreshMiniMaxApiKeyStatus(), refreshMiniMaxEnabled()]); }; load(); @@ -301,84 +157,9 @@ load(); :description="$t('configuration.xlvask.automation_settings_desc')" icon="fas fa-magic" > - - - - - - - - -
- - -
+

+ {{ $t('configuration.xlvask.automation_settings_removed_desc') }} +