export default { app: { name: 'Hotel OMS', theme: 'Theme', language: 'Language', navigationAria: 'Reservation navigation', healthUp: 'Backend connected', healthDown: 'Backend offline', healthChecking: 'Checking', }, auth: { loginTitle: 'Sign in', loginSubtitle: 'Use your system account to enter the TH Hotel reservation workspace.', username: 'Username', password: 'Password', loginSubmit: 'Sign in', loggingIn: 'Signing in', loginFailed: 'The username or password is incorrect.', logout: 'Sign out', currentUser: 'Current user', currentHotel: 'Current hotel', unauthorizedTitle: 'No access', unauthorizedMessage: 'Your account does not have permission to access this page or action.', backHome: 'Back to available page', }, nav: { orders: 'Order list', taskQueue: 'Reservation items', manualInvoice: 'Manual invoice', roomingList: 'Rooming list', sourceMessages: 'Source messages', systemStatus: 'System status', orderDetail: 'Order overview', taskDetail: 'Reservation item handling', sourceMessageConversation: 'Email conversation', sourceNotificationDetail: 'Source notification detail', debugEml: 'Debug EML', systemSettings: 'System settings', systemUsers: 'Users', systemRoles: 'Roles', systemMenus: 'Menus', systemHotels: 'Hotels', systemReservationCatalogs: 'Reservation catalogs', systemAudits: 'Admin audits', }, common: { loading: 'Loading', noData: 'No data', endpointPending: 'Endpoint pending', endpointMissing: 'Endpoint field pending', all: 'All', unknownStatus: 'Unknown status', unknownTaskType: 'Unknown task type', unknownTaskSubtype: 'Unknown task subtype', unknownReadonlyReason: 'Not processable yet', unknownActorType: 'Unknown actor', unknownAuditAction: 'Unknown action', unknownOperation: 'Unknown operation', previousPage: 'Previous', nextPage: 'Next', pageStatus: 'Page {current} / {total}', pageSize: 'Page size', refresh: 'Refresh', saving: 'Saving', cancel: 'Cancel', }, notFound: { title: 'Page unavailable', message: 'The frontend page for this menu or link is not available yet.', backHome: 'Back to available page', }, systemAdmin: { title: 'System settings', subtitle: 'Maintain users, roles, permissions, menus, and hotel records', navigationAria: 'System settings navigation', common: { keyword: 'Keyword', viewDetail: 'View detail', selectRow: 'Select a row to view detail', create: 'Create', save: 'Save', edit: 'Edit', yes: 'Yes', no: 'No', }, status: { ACTIVE: 'Active', DISABLED: 'Disabled', }, users: { title: 'User filters', tableTitle: 'Users', detailTitle: 'User detail', createTitle: 'Create user', totalSuffix: 'users', keywordPlaceholder: 'Username / display name / email', userStatus: 'User status', username: 'Username', initialPassword: 'Initial password', displayName: 'Display name', email: 'Email', phone: 'Phone', roles: 'Roles', hotels: 'Authorized hotels', defaultHotel: 'Default hotel', saveRoles: 'Save roles', saveHotels: 'Save hotels', resetPassword: 'Reset password', temporaryPassword: 'Temporary password:', created: 'User created', columns: { user: 'User', status: 'Status', roles: 'Roles', defaultHotel: 'Default hotel', }, }, roles: { title: 'Role filters', tableTitle: 'Roles', detailTitle: 'Role detail', createTitle: 'Create custom role', totalSuffix: 'roles', keywordPlaceholder: 'Role code / role name', roleStatus: 'Role status', roleCode: 'Role code', roleName: 'Role name', builtinReadonly: 'Built-in roles are maintained by the system bootstrap matrix and cannot be edited here.', savePermissions: 'Save permissions', columns: { role: 'Role', status: 'Status', builtin: 'Built-in', permissions: 'Permissions', users: 'Users', }, }, menus: { title: 'Menu filters', managementTitle: 'Menu management', managementHint: 'Maintain sidebar menu hierarchy, order, visibility, and permission entry points.', createTitle: 'Create menu', editTitle: 'Edit menu', tableTitle: 'Menus', totalSuffix: 'menus', keywordPlaceholder: 'Menu code / name / route', menuStatus: 'Menu status', visibleOnly: 'Visible only', treeWarningTitle: 'Menu tree has configuration warnings', treeWarningHint: 'The backend returned the menu tree, but these items need administrator review.', treeTitle: 'Menu tree', treeDirty: 'Tree changes are not saved', treeDirtyActionBlocked: 'Save the menu tree before continuing.', treeWarningSaveBlocked: 'Resolve the menu tree warnings and confirm parent relationships before saving the tree.', saveTreeOrder: 'Save tree', menuCode: 'Menu code', menuName: 'Menu name', parentMenu: 'Parent menu', rootMenu: 'Root menu', componentKey: 'Component key', iconKey: 'Icon key', unknownRoute: 'Unknown route', unknownRouteHint: 'This route is not recognized by the frontend and may open an unavailable page.', permissionLoadFailed: 'Permission list failed to load. Permission selection and menu config saving are temporarily unavailable.', moveUp: 'Move up', moveDown: 'Move down', columns: { menu: 'Menu', route: 'Route', permission: 'Permission', visible: 'Visible', status: 'Status', sort: 'Sort', knownRoute: 'Known route', }, }, hotels: { title: 'Hotel filters', createTitle: 'Create hotel', editTitle: 'Edit hotel', tableTitle: 'Hotels', totalSuffix: 'hotels', keywordPlaceholder: 'Hotel ID / hotel name', hotelStatus: 'Hotel status', hotelId: 'Hotel ID', hotelName: 'Hotel name', saveStatus: 'Save status', singleActiveRule: 'Single-hotel mode allows only one ACTIVE hotel. Newly created hotels are disabled by default.', columns: { hotel: 'Hotel', status: 'Status', timeZone: 'Time zone', authorizedUsers: 'Authorized users', sort: 'Sort', }, }, catalogs: { title: 'Reservation V4 catalog management', subtitle: 'Maintain Account, Room Type, and Rate Code catalogs for V4 task card lookup and backend confirmation validation.', typeNavigation: 'Reservation V4 catalog type', filters: 'Catalog filters', hotel: 'Hotel', defaultHotel: 'Current default hotel', keywordPlaceholder: 'Code / name', catalogStatus: 'Catalog status', createTitle: 'Create {type}', createHint: 'V1 catalogs are maintained by system admins and become active after saving.', createAction: 'Create catalog', createSucceeded: 'Catalog created', statusUpdated: 'Catalog status updated', disabledLookupNotice: 'Disabled catalog items no longer appear in ordinary V4 task card lookup; confirmed historical cards are not rolled back.', defaultActiveHint: 'New items are active by default. Account V1 uses fixed Market=LEISURE and Source=TRAVEL_AGENT.', hotelRequired: 'Select a hotel first.', tableTitle: '{type} data', totalSuffix: 'catalog items', accountCode: 'Account Code', accountName: 'Account name', marketCode: 'Market Code', sourceCode: 'Source Code', externalAccountId: 'External Account ID', code: 'Code', displayName: 'Display name', externalId: 'External catalog ID', sortOrder: 'Sort order', catalogVersion: 'Catalog version', metadataJson: 'Metadata JSON', enableAction: 'Enable', disableAction: 'Disable', types: { accounts: 'Account', roomTypes: 'Room Type', rateCodes: 'Rate Code', }, columns: { catalog: 'Catalog', status: 'Status', marketSource: 'Market / Source', source: 'Source / version', sort: 'Sort', }, }, audits: { title: 'Audit filters', tableTitle: 'Admin audit data', totalSuffix: 'audit records', targetType: 'Target type', targetId: 'Target ID', action: 'Action', columns: { action: 'Action', target: 'Target', actor: 'Actor', occurredAt: 'Occurred at', }, }, }, workbench: { title: 'Order workbench', subtitle: 'Review, filter, and handle Reservation order tasks', filters: 'Filters', dateRange: 'Date range', businessKey: 'Business key / temporary code', orderStatus: 'Order status', taskStatus: 'Task status', taskCardType: 'Task card type', reset: 'Reset', tableTitle: 'Orders / tasks', columns: { businessKey: 'Business key', orderStatus: 'Order status', currentTask: 'Current task', taskStatus: 'Task status', updatedAt: 'Last updated', operation: 'Action', }, view: 'View', totalPrefix: 'Total', totalSuffix: 'task leads', }, orderList: { title: 'Order list', subtitle: 'Review Reservation work by order', keyword: 'Group Code / Confirmation No.', keywordPlaceholder: 'Group code / confirmation no.', groupCode: 'Group code', groupCodePlaceholder: 'Enter group code', confirmationNumber: 'Confirmation no.', confirmationNumberPlaceholder: 'Enter confirmation no.', tableTitle: 'Order data', totalSuffix: 'orders', viewDetail: 'View detail', continueTask: 'Continue task', noOpenTask: 'No open task', endpointPending: 'The order list endpoint is pending backend implementation. No fixture data is shown.', columns: { order: 'Order', status: 'Status', openTasks: 'Open work', createdAt: 'Created at', }, }, manualInvoice: { title: 'Manual invoice', createTitle: 'Create Invoice', subtitle: 'Generate a Proforma Invoice PDF by entering fields manually without an order or task.', sourceBadge: 'Manual generation', independentHint: 'This V1 page is not linked to an order or task. The backend records generation and audit data.', documentSection: 'Document', recipientSection: 'Recipient', bookingSection: 'Booking', chargesSection: 'Charges', previewSection: 'Amount preview', resultSection: 'Generation result', invoiceDate: 'Invoice date', bookingDate: 'Booking date', dueDate: 'Due date', companySeed: 'Select company', contactSeed: 'Select attention', selectCompany: 'Select company', selectContact: 'Select attention', company: 'Company', attention: 'Attention', address: 'Address', companyInputPlaceholder: 'Enter company', attentionInputPlaceholder: 'Enter attention', addressInputPlaceholder: 'Enter full billing address', telephone: 'Tel', email: 'Email', groupName: 'Group name', arrivalDate: 'Arrival date', departureDate: 'Departure date', roomRateNote: 'Room rate note', roomRateNotePlaceholder: 'e.g. including BF', datePlaceholder: 'yyyy-mm-dd', extraBedRate: 'Extra bed rate', description: 'Description', roomType: 'Room type', quantity: 'Quantity', rate: 'Rate', nights: 'Nights', amount: 'Amount', subtotal: 'Sub-total', vat: 'VAT 7%', total: 'Total', addCharge: 'Add row', removeCharge: 'Remove', chargeLineLabel: 'Row {index}', removeChargeLineAria: 'Remove row {index}', maxChargesReached: 'V1 supports up to 10 charge lines.', previewDisclaimer: 'The frontend only previews amounts. Backend totals are authoritative.', manualOverrideHint: 'Selecting company and attention fills contact details; every text field remains editable.', generate: 'Confirm and generate PDF', generating: 'Generating', openPdf: 'Open PDF', downloadPdf: 'Download PDF', downloadingPdf: 'Downloading', downloadFallback: 'The browser could not download the PDF directly, so the PDF page was opened instead.', technicalDetails: 'Technical details', generationId: 'Generation ID', generationStatus: 'Status', pdfUrl: 'PDF URL', hotelId: 'Hotel ID', templateCode: 'Template', createdAt: 'Created at', noPdfUrl: 'The backend did not return a PDF URL.', backendTotals: 'Backend totals', validationTitle: 'Please fix the form', fieldErrors: { required: 'Required', invalidEmail: 'Invalid email', dateOrder: 'Invalid date order', invalidNumber: 'Invalid number', positiveNumber: 'Must be greater than 0', nonNegativeNumber: 'Cannot be less than 0', }, statuses: { SUCCEEDED: 'Generated', GENERATED: 'Generated', FAILED: 'Failed', PROCESSING: 'Generating', }, errors: { FRONTEND_VALIDATION: 'Form validation failed. Check required fields and charge lines.', RESERVATION_INVOICE_VALIDATION_FAILED: 'Invoice field validation failed. Please check the form.', RESERVATION_INVOICE_CONTEXT_MISMATCH: 'The order or task context does not match.', DOCUMENT_CONVERSION_FAILED: 'PDF generation failed. Please retry or contact an administrator.', DOCUMENT_CONVERSION_TIMEOUT: 'PDF generation timed out. Please retry later.', AUTH_401: 'Your session has expired. Please sign in again.', AUTH_403: 'Your account does not have manual invoice permission.', UNKNOWN: 'Generation failed. Please retry later.', requiredFields: 'Complete dates, recipient, booking details, and at least one valid charge line.', invalidEmail: 'Email format is invalid.', dueDateBeforeBookingDate: 'Due date cannot be earlier than booking date.', departureBeforeArrival: 'Departure date must be later than arrival date.', invalidNumber: 'Invalid number. Check amount, quantity, or nights fields.', extraBedNegative: 'Extra bed rate cannot be less than 0.', chargePositive: 'Quantity and nights must be greater than 0.', chargeRateNonNegative: 'Rate cannot be less than 0.', }, }, roomingList: { eyebrow: 'Reservation tool', title: 'Generate Rooming List Excel', subtitle: 'Upload the travel group list, enter people per room, room type, payment type and nationality. Arrival and departure are derived from the source travel dates.', currentHotel: 'Current hotel', sourceSection: 'Source list and required fields', targetSection: 'Target Excel defaults', sourceFile: 'Source Excel file', sourceFileHint: 'Supports .xls / .xlsx. The frontend does not read or log guest list content.', noFile: 'Choose a .xls / .xlsx file', peoplePerRoom: 'People per room', arrival: 'Arrival', departure: 'Departure', roomType: 'Room type', roomTypePlaceholder: 'e.g. DLX / TWN', titleColumn: 'Title', rateCode: 'Rate Code', adults: 'Adults', children: 'Children', paymentType: 'Payment Type', paymentTypeBtqr: 'BTQR', paymentTypeCa: 'CA', vip: 'VIP', nationality: 'Nationality', nationalityPlaceholder: 'Select nationality', nationalityKr: 'KR', nationalityChn: 'CHN', email: 'Email', idType: 'ID Type', idNumber: 'ID Number', generate: 'Generate and download Excel', generating: 'Generating', validationTitle: 'Please fix the form', resultSuccess: 'Generation result', resultDownloaded: 'Excel has been generated and the browser download was triggered.', downloadedFile: 'Downloaded file', fieldErrors: { fileRequired: 'Choose a source Excel file.', fileType: 'Only .xls / .xlsx files are supported.', positiveInteger: 'People per room must be greater than 0.', nonNegativeInteger: 'Must be 0 or a positive integer.', arrivalRequired: 'Enter arrival date.', departureRequired: 'Enter departure date.', dateFormat: 'Date format must be yyyy-MM-dd.', departureAfterArrival: 'Departure must be later than arrival.', roomTypeRequired: 'Enter room type.', paymentTypeRequired: 'Select payment type.', paymentTypeAllowed: 'Only BTQR or CA are currently allowed.', nationalityRequired: 'Select nationality.', nationalityAllowed: 'Only KR or CHN are currently allowed.', invalidEmail: 'Invalid email.', }, errors: { FRONTEND_VALIDATION: 'Form validation failed. Check required fields.', ROOMING_LIST_VALIDATION_FAILED: 'Rooming List field validation failed. Please check the form.', ROOMING_LIST_SOURCE_FILE_INVALID: 'The source list is invalid. Check the Excel headers and file format.', FRONTEND_PERMISSION_DENIED: 'Your account does not have Rooming List generation permission.', HOTEL_ACCESS_DENIED: 'Your account cannot access the selected hotel.', AUTH_TOKEN_REQUIRED: 'Please sign in before generating a Rooming List.', AUTH_SESSION_INVALID: 'Your session has expired. Please sign in again.', UNKNOWN: 'Rooming List generation failed. Please retry later.', }, }, order: { summary: 'Order summary', taskQueue: 'Reservation items for this order', v4TaskTimeline: 'Processing records', v4TaskTimelineEmpty: 'No processing records.', v4TaskTimelineHint: 'Shows source-email processing records and item status summaries only. Complete actions in the reservation item page.', v4OverviewTitle: 'Order information overview', v4OverviewSubtitle: 'Derived from confirmed items only, not from unconfirmed suggestions.', v4OverviewEmpty: 'No confirmed order information yet.', accountCode: 'Account Code', accountName: 'Account Name', marketCode: 'Market Code', sourceCode: 'Source Code', departureDate: 'Departure date', rateCode: 'Rate Code', roomItems: 'Confirmed room items', latestConfirmedAt: 'Latest confirmed at', traceCardStatus: 'Follow-up item status', roomingListCardStatus: 'Rooming list item status', paymentCardStatus: 'Payment voucher status', nextV4ActionTitle: 'Next action', nextV4ActionSubtitle: 'The order overview only links to the handling page; it does not confirm, review, or edit items.', nextV4ActionType: 'Next step', nextV4ActionStatus: 'Handling status', nextV4CardId: 'Item ID', openOrderTaskCount: 'Open items', enterV4Task: 'Open handling page', nextActionConfirm: 'Confirm item', nextActionReview: 'Needs review', nextActionNone: 'No pending item', nextStep: 'Reservation item', nextStepConfirm: 'An item needs confirmation', nextStepReview: 'An item needs review', nextV4ActionEmpty: 'No next reservation item.', relatedSourceMessages: 'Related source emails', relatedSourceMessagesHint: 'Shows headers and conversation summary only. Open the conversation page for full email content.', relatedSourceMessagesEmpty: 'No related source emails.', externalConversationId: 'External conversation ID', latestActivityAt: 'Latest activity', v4CardsEmpty: 'No item status summaries.', cardStatusSummary: 'Item status summary', cardId: 'Item ID', reviewStatus: 'Review status', confirmedBy: 'Confirmed by', confirmedAt: 'Confirmed at', sourceEventIndex: 'Source email event {index}', processingRecord: 'Source email processing record', sourceMessage: 'Source message', businessKeySource: 'Business key source', updatedAt: 'Last updated', guestName: 'Guest', arrivalDate: 'Arrival date', roomType: 'Room type', amount: 'Amount', openTask: 'Handle task', groupCode: 'Group Code', confirmationNumber: 'Confirmation No.', temporaryOrderNo: 'Temporary order no.', blockCode: 'Block Code', createdAt: 'Created at', conversationMessageCount: 'Conversation messages', sourceSummaryPending: 'Source email summary fields for the order task timeline are pending backend support. Open a task for available source details.', }, taskList: { title: 'Pending reservation items', subtitle: 'Review reservation items that need confirmation, review, or acknowledgement', keyword: 'Order / email keyword', keywordPlaceholder: 'Order no. / email keyword', taskType: 'Task type', taskSubtype: 'Task subtype', tableTitle: 'Reservation items', totalSuffix: 'items', noSourceSubject: 'No source subject', sourceReceivedAt: 'Source time', businessStatus: 'Item status', filterPending: 'Pending', filterReview: 'Needs review', filterCompleted: 'Completed', filterSourceNotification: 'Source notification', noOpenItems: 'No reservation items need handling', noPendingItems: 'No reservation items are pending confirmation', noReviewItems: 'No reservation items need review', noCompletedItems: 'No completed reservation items', noSourceNotifications: 'No source notifications', itemType: 'Work item type', itemTypeOrderTask: 'Reservation item', itemTypeSourceNotification: 'Source notification', orderTaskStatus: 'Order task status', cardStatus: 'Card status', orderUnresolved: 'Order ownership pending', sourceNotificationNoOrder: 'No linked order', sourceNotificationNoOrderHint: 'This email is not linked to an order. Review the email content.', cardCountsTotal: '{total} items', cardCountsPending: 'Pending {count}', cardCountsReview: 'Review {count}', cardCountsConfirmed: 'Confirmed {count}', viewNotification: 'View notification', canProcess: 'Processable', cannotProcess: 'Not processable', queueParticipation: 'Queue participation', queueAll: 'All queue states', queueIncluded: 'In queue', queueExcluded: 'Not in queue', viewTask: 'Handle item', viewOrder: 'View order', viewConversation: 'View email conversation', sourceOnlyOrderLabel: 'Source message only', hiddenTechnicalOrder: 'No visible order', columns: { item: 'Item type', task: 'Task', order: 'Order', card: 'Item', status: 'Status', source: 'Source email', cards: 'Item progress', queue: 'Queue', }, }, taskV4: { title: 'Reservation item handling', subtitle: 'Handle the current reservation item from the source email.', orderTaskSummary: 'Item summary', handlingDesk: 'Handling overview', handlingDeskHint: 'Check the order clue and source, then confirm each item.', sourceEmail: 'Source email', sourceSender: 'Sender', sourceReceivedAt: 'Received at', cardProgress: 'Card progress', totalCards: 'Total', pendingCards: 'Pending', reviewCards: 'Review', readonlyCards: 'View only', confirmedCards: 'Confirmed', orderTaskId: 'Item ID', orderReference: 'Order reference', targetBookingType: 'Booking type', targetLocator: 'Order clue', targetResolutionStatus: 'Order ownership', cardCounts: 'Item counts', sourceMessageCard: 'Source email', basicInformationCard: 'Reservation basics', roomInformationCard: 'Room and dates', paymentCard: 'Payment voucher', businessCards: 'Reservation items', adapterContractErrors: 'Adapter contract diagnostics', noAdapterContractErrors: 'No adapter contract errors.', noBusinessCards: 'No reservation items to handle.', displayPayload: 'Display summary', rawCardPayload: 'Safe card summary', readonlyReason: 'Read-only reason', blockedReason: 'Blocked reason', bookingTypeGroup: 'Group booking', bookingTypeFit: 'FIT booking', bookingTypeUnknown: 'Booking type pending', targetResolved: 'Confirmed', targetUnresolved: 'Pending confirmation', targetPending: 'Pending confirmation', confirmCard: 'Confirm card', confirmingCard: 'Confirming', resolveReview: 'Submit review', resolvingReview: 'Submitting', reviewReason: 'Review note', reviewReasonPlaceholder: 'Optional note for the manual decision', confirmedOrderId: 'Confirmed order ID', confirmedOrderIdPlaceholder: 'Enter when order ownership is unresolved', confirmedOrderRequired: 'Order ownership is unresolved. Enter the confirmed order ID first.', cardConfirmed: 'Card confirmed and detail refreshed.', reviewResolved: 'Review submitted and detail refreshed.', validationFailed: 'Fix current-card field errors first.', fieldValidation: { required: '{field} is required', positiveInteger: '{field} must be an integer greater than 0', }, fieldLabels: { basicInformation: { accountCode: 'Account Code', marketCode: 'Market Code', sourceCode: 'Source Code', }, }, roomInformation: { noDisplayModel: 'Room and date information is temporarily unavailable. Refresh later or contact an administrator.', eventType: { NEW_BOOKING: 'New booking', UPDATE_BOOKING: 'Booking update', CANCEL_BOOKING: 'Booking cancellation', unknown: 'Reservation item', }, emptyValues: 'No fields to display.', changeSummary: 'Change summary', currentValues: 'Current values', proposedValues: 'Proposed values', finalValues: 'Final values', groupBlockName: 'Group block name', fitName: 'FIT name', arrivalDate: 'Arrival date', departureDate: 'Departure date', nights: 'Nights', rateCode: 'Rate Code', breakfastIncluded: 'Breakfast included', groupBookingStatus: 'Group booking status', blockId: 'Block ID', confirmationNumber: 'Confirmation no.', roomItems: 'Room items', roomTypeCode: 'Room type code', roomCount: 'Room count', yes: 'Yes', no: 'No', }, paymentAttachments: { title: 'Payment voucher attachments', loading: 'Loading attachment preview access...', loadFailed: 'Attachment preview is unavailable right now. Check source email permission and retry.', empty: 'No payment voucher attachments.', openPreview: 'Open image preview', closePreview: 'Close preview', download: 'Download', previewUnavailable: 'Preview unavailable', downloadUnavailable: 'Download unavailable', noMatchedMedia: 'No matching attachment was found in the current email.', missingSourceMessage: 'Source email is missing, so preview and download are unavailable.', unavailableReason: 'Unavailable reason: {reason}', fileMeta: '{type} ยท {size}', }, roomingList: { title: 'Rooming list item', targetOrder: 'Target order', unboundOrder: 'No visible order is bound yet', description: 'The current source message contains a Rooming List item that needs manual handling.', confirmHint: 'This first version only confirms that the item has been handled manually. Guest details and attachment content are not displayed or processed here.', }, trace: { title: 'Follow-up item', itemLabel: 'Item {index}', generalTitle: 'General note', extraBedTitle: 'Extra bed note', action: 'Fixed action', textLabel: 'Follow-up note', department: 'Department', targetRoomType: 'Target room type', extraBedRoomCount: 'Extra bed room count', }, lookup: { loading: 'Loading options', empty: 'No options are available. Contact an administrator to maintain the choices.', stale: 'This catalog is a stale snapshot. You can still select from it; backend validation remains final.', warning: 'Catalog note: {warning}', error: 'Options are temporarily unavailable. Refresh and retry.', accountDerived: 'Selecting this account fills Market: {market} / Source: {source}.', currentNotInCatalog: 'Original value "{value}" is not in the current options. Select again.', }, sourceMessage: { subject: 'Subject', sender: 'Sender', receivedAt: 'Received at', conversationCount: 'Conversation messages', attachments: 'Attachments', excerpt: 'Email excerpt', body: 'Current email body', bodyCollapsed: 'The email body is folded. Expand to read the current trigger email.', bodyLoading: 'Loading current email body...', bodyLoadFailed: 'Current email body cannot be loaded right now. Open the email conversation to view it.', noBody: 'No current email body.', showFullBody: 'Show full body', collapseBody: 'Collapse body', noExcerpt: 'No email excerpt', noAttachments: 'No attachments', }, field: { required: 'Required', readonly: 'Read only', empty: 'Empty', hidden: 'Sensitive content hidden', selectPlaceholder: 'Select', datePlaceholder: 'yyyy-mm-dd', }, error: { loadFailed: 'Failed to load the reservation item handling page.', actionFailed: 'Action failed. Check backend response details.', }, }, sourceNotification: { title: 'Source notification detail', subtitle: 'S10/S99 read-only source message notification. It does not enter order or task-card handling.', summary: 'Notification summary', notificationId: 'Notification ID', routeCode: 'Route code', status: 'Notification status', sourceMessage: 'Source email', ackReason: 'Handling note', ackReasonPlaceholder: 'Optional note for acknowledging or handling this notification', ack: 'Acknowledge', acking: 'Acknowledging', acked: 'Acknowledged and detail refreshed.', noBusinessEntry: 'This notification has no linked order, business card, field editing, review, or OPERA action.', error: { loadFailed: 'Failed to load source notification detail.', ackFailed: 'Failed to acknowledge. Check backend response details.', }, }, task: { title: 'Task card', fieldContract: 'Field contract', evidence: 'Evidence', saveDraft: 'Save draft', confirm: 'Confirm task', blocked: 'Blocked', readOnly: 'Read only', operaOperations: 'OPERA simulation', audits: 'Audit timeline', noOperations: 'OPERA simulation operations are created after confirmation.', noAudits: 'No audit records yet.', execute: 'Execute', retry: 'Retry', simulateFailure: 'Simulate failure', fieldNotes: 'Field notes', emptyValue: 'Empty', attachments: 'Attachments', fieldAreaFallback: 'Basic information', savedLocally: 'Draft saved', confirmedLocally: 'Task confirmed', validationFailed: 'Fix field errors first', validation: { required: '{field} is required', enum: '{field} must use one of the allowed options', date: '{field} must use YYYY-MM-DD', number: '{field} must be a number', }, viewOrder: 'View order', viewConversation: 'View email conversation', parentGroup: 'Parent Group', sourceMessageId: 'Source message ID', sourceSubject: 'Source subject', sourceSender: 'Sender', sourceReceivedAt: 'Received at', sourceSummaryPending: 'Source email summary fields are pending backend support', sourceEmailPreview: 'Source email preview', sourceEmailExcerpt: 'Email excerpt', sourceEmailAttachments: 'Attachments', sourceEmailNoExcerpt: 'No email excerpt', sourceEmailNoAttachments: 'No attachments', sourceEmailFullConversation: 'View full email conversation', sourceOnlyResult: 'Source message entry result', sourceOnlyReadonly: 'This task only shows the source message entry result. It does not enter order handling, field editing, or OPERA operations.', sourceOnlyNoOpera: 'This task type does not involve OPERA operations.', routeInfo: 'Route and processing', resultType: 'Result type', aiTaskType: 'AI task type', systemTaskType: 'System task type', taskCardType: 'Task card type', taskSubtype: 'Task subtype', routeCode: 'Route code', systemProcessCategory: 'System process category', reviewStatus: 'Review status', entryResultCode: 'Entry result code', entryResultMeaning: 'Result meaning', entryResultDescription: 'Result description', entryResultSourceMessageId: 'Result source message ID', rawAnswer: 'SuperAgent raw answer', agentAssessment: 'AI raw fields', sourceNotification: 'Source message notification', manualReviewData: 'Manual review data', manualReviewEvidence: 'Manual review evidence', manualReviewEvidenceFallback: 'Confirm the Parent Group identity from the source email and candidates.', manualReviewMissingFields: 'Missing fields', manualReviewBlockingPoints: 'Blocking points', manualReviewConflictingPoints: 'Conflicting points', manualReviewSuggestedActions: 'Suggested actions', manualReviewEvidenceToCheck: 'Evidence to check', parentIdentityCandidates: 'Parent Group candidates', parentIdentityCandidate: 'Candidate', noParentIdentityCandidates: 'No Parent Group candidates yet. Backend should expose context_used.parent_identity_candidates.', adapterContractErrors: 'Adapter contract errors', unhandledIntents: 'Unhandled intents', noSourceOnlyResult: 'No source message entry result is available.', manualResolution: { title: 'Manual review resolution', description: 'Fill missing fields on the original task card. The backend validates and unblocks the task after submission.', pendingStatus: 'Pending review', resolvedTitle: 'Review resolved', reasonCode: 'Reason code', reviewInstruction: 'Review instruction', confirmedOrderId: 'Confirmed order ID', fieldValuePlaceholder: 'Enter the confirmed value', noSupportedMissingFields: 'The current missing fields are not supported for frontend resolution yet. Confirm field mapping with backend.', unopenedFieldsTitle: 'Fields not opened for editing', fieldBackendUnopened: 'The backend has not opened this field for editing.', fieldRequired: 'Fill the missing field values and confirmed order ID', reason: 'Resolution note', reasonPlaceholder: 'Optional note for the manual decision', submit: 'Submit review result', succeeded: 'Manual review resolved. Task status has been refreshed.', }, manualConversion: { title: 'Manual conversion', description: 'Convert a Fallback / manual review task into a processable reservation task.', targetTaskType: 'Target task type', targetOrder: 'Target order', targetOrderHelp: 'Update or cancel tasks must select a non-deleted order.', targetOrderKeyword: 'Target order search', targetOrderKeywordPlaceholder: 'Group code, confirmation no., or order keyword', searchTargetOrders: 'Search orders', noTargetOrderCandidates: 'Enter a keyword and search for target orders', orderDeletedDisabled: 'Deleted orders cannot be selected', newBookingHint: 'New booking conversion does not require a target order; the backend will reassign by task context.', reason: 'Reason', reasonPlaceholder: 'Optional note for the manual decision', submit: 'Convert task', targetOrderRequired: 'Select a target order', succeeded: 'Manual conversion completed: {taskType}, target order {orderId}', orderId: 'Order ID', }, }, conversation: { title: 'Email conversation detail', subtitle: 'Review all messages in the source email conversation', endpointPending: 'The email conversation detail endpoint is pending backend implementation. No fixture data is shown.', subject: 'Conversation subject', messageCount: 'Messages', channel: 'Channel', firstReceivedAt: 'First received', lastReceivedAt: 'Last received', emptyBody: 'Empty message body', attachments: 'Attachments / inline images', unnamedAttachment: 'Unnamed attachment', relatedOrders: 'Related orders', relatedTasks: 'Related tasks', }, debugEml: { title: 'Debug EML upload', subtitle: 'Upload one .eml email and review SourceMessage and SuperAgent debug results', uploadConfig: 'Upload configuration', hotelId: 'Hotel ID', debugUploadKey: 'Debug upload key', runLabel: 'Run label', emlFile: '.eml file', submit: 'Submit debug run', submitting: 'Waiting for SuperAgent', executionStatus: 'Execution status', status: 'Status', debugRunId: 'Debug run ID', backendStatus: 'Backend status', backendMessage: 'Backend message', waitingSuperAgent: 'Parsing the email and waiting for SuperAgent', systemStages: 'System stages', superAgentTrace: 'SuperAgent Trace', traceToolName: 'Tool', traceInputSummary: 'Input summary', traceOutputSummary: 'Output summary', traceStatus: 'Status', traceTime: 'Time', sourceTrace: 'SourceMessage trace', sourceMessageId: 'SourceMessage ID', sourceProvider: 'Source provider', externalMessageId: 'External message ID', externalConversationId: 'External conversation ID', mailPreview: 'Email preview', noSafeHtml: 'No safe HTML body is available', uploadedMedia: 'Uploaded media', unnamedMedia: 'Unnamed media', rawHtml: 'Raw processed HTML', superAgentResult: 'SuperAgent result', superAgentSessionId: 'SuperAgent session ID', superAgentRunId: 'SuperAgent run ID', parsedJson: 'Parsed JSON', rawAnswer: 'Raw answer', warnings: 'Warnings', bookingExcelExtractions: 'Booking Excel attachment extraction', debugPayload: 'Debug payload', statuses: { idle: 'Idle', uploading: 'Running', succeeded: 'Succeeded', failed: 'Failed', }, errors: { REQUEST_FIELD_REQUIRED: 'Required fields are missing. Check hotel ID, file, or request parameters', EML_FILE_REQUIRED: 'Choose an .eml email file', EML_FILE_TOO_LARGE: 'The email file exceeds the backend limit', INVALID_FILE_TYPE: 'Only .eml email files are supported', DEBUG_UPLOAD_KEY_INVALID: 'The debug upload key is missing or invalid', EML_PARSE_FAILED: 'The email file could not be parsed', OSS_UPLOAD_FAILED: 'OSS upload failed. Contact backend support', SUPERAGENT_OPEN_API_FAILED: 'SuperAgent call failed. SourceMessage may already be captured', DEBUG_EML_RUN_FAILED: 'Debug EML run failed internally', UNKNOWN: 'Debug EML upload failed', }, }, status: { TEMPORARY: 'Temporary', ACTIVE: 'Active', ENDED: 'Ended', LOGIC_DELETED: 'Deleted', PENDING_CONFIRM: 'Pending confirmation', READY: 'Ready', EXECUTING: 'Executing', FAILED: 'Failed', COMPLETED: 'Completed', PENDING: 'Pending', SUCCEEDED: 'Succeeded', BLOCKED: 'Blocked', SKIPPED: 'Skipped', OPEN: 'Open', READONLY: 'Read only', REVIEW_REQUIRED: 'Review required', CONFIRMED: 'Confirmed', ACK_REQUIRED: 'Pending acknowledgement', ACKED: 'Acknowledged', }, cardType: { NEW_BOOKING: 'New booking', UPDATE_BOOKING: 'Update booking', CANCEL_BOOKING: 'Cancel booking', CANCEL_ALLOTMENT: 'Cancel Parent Group allotment', VOUCHER: 'Voucher', ROOMING_LIST: 'Rooming list', AMEND_GROUP_CODE: 'Amend group code', TRACE_NOTE: 'Trace / notes', TA_RECORD: 'TA record', MESSAGE_NOTIFICATION: 'Message notification', INFORMATIONAL_MESSAGE: 'Message notification (legacy)', SOURCE_MESSAGE_REVIEW_NOTIFICATION: 'Source message notification', SOURCE_MESSAGE_ONLY: 'Source message only', SOURCE_MESSAGE_DISPLAY: 'Source message display card', SOURCE_MESSAGE_NOTIFICATION: 'Source message notification card', BASIC_INFORMATION: 'Basic Information card', ROOM_INFORMATION: 'Room Information card', TRACE_RESERVATION_NOTES: 'Trace notes card', PAYMENT: 'Payment card', MANUAL_REVIEW: 'Manual review', FALLBACK_REVIEW: 'Manual review', }, taskSubtype: { NEW_BOOKING: 'New booking', UPDATE_BOOKING: 'Update booking', CANCEL_BOOKING: 'Cancel booking', RATE_CHANGE: 'Rate change', UPDATE_STAY_DATES: 'Update stay dates', UPDATE_ROOM_TYPE: 'Update room type', UPDATE_FIX_CHARGE: 'Update fixed charge', CANCEL_ALLOTMENT_CONTROL_BLOCK: 'Cancel Parent Group control block', NEW_GROUP_BLOCK: 'New group block', NEW_FIT_RESERVATION: 'New FIT reservation', MANUAL_REVIEW: 'Manual review', S10: 'Pure informational email (S10)', S99: 'Business material package unavailable (S99)', S000: 'Pure informational email', S999: 'Business material package unavailable', }, resultType: { NORMAL_TASK: 'Normal task', MANUAL_REVIEW: 'Manual review', SOURCE_MESSAGE_REVIEW_NOTIFICATION: 'Source message notification', ADAPTER_CONTRACT_ERROR: 'Adapter contract error', UNHANDLED_CURRENT_INTENT: 'Unhandled intent', }, systemProcessCategory: { BUSINESS_TASK: 'Business task', SOURCE_MESSAGE_NOTIFICATION: 'Source message notification', ADAPTER_CONTRACT_ERROR: 'Adapter contract error', UNHANDLED_CURRENT_INTENT: 'Unhandled intent', }, readonlyReason: { PROCESSABLE: 'Processable', PREVIOUS_TASK_NOT_FINISHED: 'Previous task is not finished', TASK_FINISHED: 'Task finished', TASK_READ_ONLY: 'Task is read only', ORDER_CLOSED: 'Order closed', QUEUE_EXCLUDED: 'Not in queue', BLOCKED: 'Blocked', MANUAL_REVIEW_REQUIRED: 'Manual review required', }, actorType: { USER: 'User', SYSTEM: 'System', AI: 'AI', AGENT: 'Agent', BACKEND: 'Backend service', }, auditAction: { TASK_CREATED: 'Task created', TASK_LOADED: 'Task loaded', TASK_CONFIRMED: 'Task confirmed', TASK_CONFIRM: 'Task confirmed', DRAFT_SAVED: 'Draft saved', TASK_UPDATED: 'Task updated', OPERA_EXECUTED: 'OPERA executed', OPERA_RETRIED: 'OPERA retried', MANUAL_REVIEW_CREATED: 'Manual review created', MANUAL_REVIEW_CONVERT: 'Manual conversion', MANUAL_REVIEW_RESOLVED: 'Manual review resolved', }, operaOperation: { CREATE_RESERVATION: 'Create reservation', UPDATE_RESERVATION: 'Update reservation', CANCEL_RESERVATION: 'Cancel reservation', UPDATE_ROOMING_LIST: 'Update rooming list', ADD_TRACE_NOTE: 'Add trace note', }, }