<?php

/**
 * 本文件属于 DBErp 进销存系统。
 *
 * 版权所有 © 2026 北京珑大钜商科技有限公司。保留所有权利。
 *
 * 未经官方授权，不得删除、篡改或隐藏本文件中的版权声明、产品标识与来源信息。
 * 商业授权、官方更新与技术支持服务，请以珑大官方支持中心记录为准。
 *
 * @link https://support.loongdom.cn
 * @see  https://www.dberp.com.cn
 */

return [
    'auth' => [
        'login_identifier_label' => 'Account / Email',
        'login_failed' => 'The account, email, or password is incorrect.',
    ],

    'maintenance_page' => [
        'title' => 'Maintenance',
        'badge' => 'Scheduled maintenance',
        'headline' => 'System upgrade in progress',
        'lead' => 'We are applying a version update and running checks. This is expected and does not mean the system is broken. Access will resume automatically when finished.',
        'tips' => [
            'This usually takes only a few minutes, depending on package size and server performance.',
            'If an update is running in the admin panel, do not close that page—the remaining steps continue in the background.',
            'If you are not an administrator, please try again later or contact your system admin.',
        ],
        'footnote' => 'This page refreshes automatically. If it stays here for a long time, ask an administrator to verify the update status.',
    ],

    'ui' => [
        'save_keyboard_hint' => 'Press Ctrl+S (Mac: Command+S) to save.',
        'read_only_document_subheading' => 'Read-only view. The master record cannot be edited.',
        'master_data_delete_blocked_title' => 'Cannot Delete',
        'record_delete_failed_title' => 'Delete Failed',
        'record_delete_returned_false_body' => 'The system did not perform the deletion. Try again later or contact an administrator.',
        'organization_list_department_intro' => 'Maintain department hierarchy for employees, positions, and business documents.',
        'organization_list_position_intro' => 'Maintain positions and their departments for employees and business documents.',
        'organization_list_employee_intro' => 'Maintain employee master data for roles such as salesperson and handler.',
        'organization_list_salesperson_intro' => 'Maintain sales identities used for customer ownership, orders, and reports.',
        'inventory_exception_list_intro' => 'Handle batches, stocktakes, replenishment, and alerts from the workbench first, then complete remaining tasks here.',
        'inventory_exception_edit_intro' => 'After the upstream issue is handled, enter notes here and mark it as resolved, ignored, or reopened.',
        'transfer_order_stock_posted_subheading' => 'Inventory was posted when this transfer was confirmed effective.',
    ],

    'dictionary_type_control' => [
        'create_forbidden' => 'Business dictionary types are system preset and cannot be created.',
        'code_immutable' => 'Business dictionary type codes cannot be modified.',
        'code_field_hint' => 'The type code is a system business identifier. It is preset by the system or maintained automatically during upgrades and cannot be modified.',
        'delete_forbidden' => 'Business dictionary types cannot be deleted.',
        'bulk_delete_forbidden' => 'Business dictionary types cannot be deleted in bulk.',
    ],

    'dictionary_item_control' => [
        'system_fixed_create_forbidden' => 'System-fixed dictionary items cannot be created.',
        'system_fixed_code_immutable' => 'System-fixed dictionary item codes cannot be modified.',
        'system_fixed_delete_forbidden' => 'System-fixed dictionary items cannot be deleted.',
        'preset_delete_forbidden' => 'System preset dictionary items cannot be deleted. Disable them instead.',
        'unknown_type_delete_forbidden' => 'The dictionary type cannot be identified, so this item cannot be deleted.',
        'item_in_use_disable_instead' => 'This dictionary item is referenced by business data and cannot be deleted.',
        'prefer_disable_over_delete' => 'Disable the dictionary item first to prevent it from being selected in new documents.',
        'delete_confirm' => 'Delete this dictionary item? This only applies to items you created yourself and that are not referenced by any business data.',
        'item_code_immutable_after_create' => 'Dictionary item codes cannot be modified after creation. To change one, create a correct item and disable the old one.',
        'section_intro_system_fixed' => 'This is a system-fixed dictionary type. You may only adjust display information such as name, enabled status, sort order, and description. Items cannot be created or deleted, and codes cannot be changed.',
        'section_intro_business_maintainable' => 'This is a business-maintainable dictionary type. You may create dictionary items, but codes cannot be changed after creation. Items you created that are not referenced may be deleted; system preset or referenced items should be disabled.',
    ],

    'number_sequence_control' => [
        'create_forbidden' => 'Numbering rules are system preset and cannot be created.',
        'code_immutable' => 'Rule codes cannot be modified.',
        'code_field_hint' => 'The rule code is a system identifier. It is preset or automatically maintained during upgrades and cannot be changed after saving.',
        'bulk_delete_forbidden' => 'Numbering rules cannot be deleted in bulk.',
        'system_delete_forbidden' => 'System preset numbering rules cannot be deleted.',
        'is_enabled_hint' => 'After disabling this rule, business number generation that depends on it will be unavailable. Make sure there are no in-progress processes, or that an alternative has been connected, before disabling it.',
        'next_value_adjust_caution' => 'Changing the current serial number affects the continuity of future numbers. Reconcile with the business team and proceed carefully to avoid duplicates or gaps.',
    ],

    'nav' => [
        'workbench' => 'Workbench',
        'workbench_dashboard' => 'Business Workbench',
        'common_functions' => 'Common shortcuts',
        'basic_data' => 'Master Data',
        'organization_data' => 'Organization Data',
        'product' => 'Product Center',
        'warehouse' => 'Warehouse Inventory',
        'purchase' => 'Purchase Management',
        'sales' => 'Sales Management',
        'settlement' => 'AR/AP Settlement',
        'report_analysis' => 'Reports & Analytics',
        'business_query' => 'Business Queries',
        'integration' => 'Integration Center',
        'system' => 'System Settings',
        'plugin' => 'Plugin Permissions',
        'data_management' => 'Data Management',
    ],

    'shortcuts' => [
        'groups' => [
            'master_data' => 'Master data',
            'inventory' => 'Inventory',
            'purchase' => 'Purchasing',
            'sales' => 'Sales',
            'settlement' => 'Settlement & queries',
            'pinnable_resource' => '',
            'pinnable_page' => '',
            'plugin_nav' => '',
        ],
        'plugin_nav' => [
            'label' => '',
        ],
        'nav_discovered' => [
            'label' => '',
        ],
        'erp' => [
            'products' => [
                'label' => 'Product Profile',
                'description' => 'Maintain product profiles, specifications, and pricing.',
            ],
            'customers' => [
                'label' => 'Customer management',
                'description' => 'Maintain customer profiles, categories, and relationship basics.',
            ],
            'suppliers' => [
                'label' => 'Supplier management',
                'description' => 'Maintain supplier profiles, categories, and purchasing relationship basics.',
            ],
            'inventory_balances' => [
                'label' => 'Inventory balances',
                'description' => 'View on-hand and available quantities by warehouse and SKU.',
            ],
            'inventory_transactions' => [
                'label' => 'Inventory ledger',
                'description' => 'Review stock movements and trace originating business documents.',
            ],
            'purchase_orders' => [
                'label' => 'Purchase orders',
                'description' => 'Handle requisition conversion, in-transit receipts, and purchase execution.',
            ],
            'purchase_receipts' => [
                'label' => 'Goods receipt (purchase inbound)',
                'description' => 'Process inbound receiving, inspection, and put-away.',
            ],
            'sales_orders' => [
                'label' => 'Sales orders',
                'description' => 'Handle quote conversion, reservations, and order fulfillment progress.',
            ],
            'sales_outbounds' => [
                'label' => 'Sales outbound',
                'description' => 'Pick, ship, confirm outbound, and coordinate logistics.',
            ],
            'customer_settlement_query' => [
                'label' => 'Customer settlement inquiry',
                'description' => 'View customer settlement entries, point-in-time balances, and drill down to sources.',
            ],
            'supplier_settlement_query' => [
                'label' => 'Supplier settlement inquiry',
                'description' => 'View supplier settlement entries, point-in-time balances, and drill down to sources.',
            ],
        ],
        'preferences' => [
            'user_menu_label' => 'Common shortcuts',
            'nav_label' => 'Common shortcuts',
            'page_title' => 'Common shortcuts',
            'intro' => 'Pin entries from the candidate list below to the sidebar “Common shortcuts” group and reorder them. If you have no pins, no business items appear under “Common shortcuts”. Pins without permission stay hidden until access is restored.',
            'mode_unpinned' => 'You have not pinned anything yet, so no business items appear under “Common shortcuts”.',
            'mode_has_pins' => 'You have pinned the entries below; the sidebar only shows pinned items you are allowed to access.',
            'mode_custom' => 'Using a personal pin list: the sidebar only shows pinned items (items without permission stay hidden but remain saved).',
            'section_pinned' => 'Pinned',
            'section_available' => 'Available to pin (grouped like the sidebar)',
            'col_name' => 'Name',
            'col_actions' => 'Actions',
            'pin' => 'Pin to common shortcuts',
            'unpin' => 'Unpin',
            'move_up' => 'Move up',
            'move_down' => 'Move down',
            'clear_all' => 'Clear common shortcuts',
            'clear_confirm_heading' => 'Clear common shortcuts?',
            'clear_confirm_body' => 'This will remove all pins and ordering for your account. No business items will appear under “Common shortcuts” until you pin again.',
            'clear_done' => 'Common shortcuts cleared',
            'pinned' => 'Pinned to common shortcuts',
            'unpinned' => 'Unpinned',
            'pin_failed' => 'Could not pin',
            'invalid_key' => 'This shortcut is invalid or has been removed',
            'no_permission_to_pin' => 'You do not have access to pin this entry',
            'table_not_ready' => 'The database table is not ready yet; run migrations or try again later',
            'unknown_shortcut_generic' => 'Unavailable shortcut',
            'no_permission_hint' => 'Hidden in the sidebar (no access)',
            'pinned_empty_hint' => 'Nothing pinned yet. Add entries from the candidate list below.',
            'available_empty' => 'Nothing is available to pin right now (everything may already be pinned, or you have no accessible candidates).',
        ],
    ],

    'global_search' => [
        'detail_code' => 'Code',
        'detail_spec' => 'Specification',
        'detail_barcode' => 'Barcode',
        'detail_contact' => 'Contact',
        'detail_phone' => 'Phone / mobile',
        'detail_document_code' => 'Document no.',
        'detail_counterparty' => 'Counterparty',
    ],

    'labels' => [
        'system_information' => 'System Information',
        'system_basic_settings' => 'Basic Information & Display',
        'business_parameters' => 'Business Control Parameters',
        'data_initialization_import' => 'Data Initialization Import',
        'number_rules' => 'Numbering Rules',
        'dictionary' => 'Business Dictionary',
        'audit' => 'Operation Audit',
        'plugins' => 'Plugins & Extensions',
        'support' => 'Official Support',
        'site_onboarding_center' => 'System Access Center',
        'host_system_authorization_center' => 'System Authorization Center',
        'host_system_update_center' => 'System Update Center',
        'product_master_data' => 'Products & Master Data',
        'unspecified_product_spec' => 'Unspecified Spec',
        'document_line_spec_not_recorded' => 'Spec Not Recorded',
        'master_not_set' => 'Not Set',
        'master_disabled_suffix' => 'Disabled',
        'master_not_salesperson_suffix' => 'Not salesperson',
    ],

    'site_onboarding' => [
        'page_title' => 'System Access Center',
        'page_intro' => 'Enter your access code to register, then review status below.',
        'page_intro_after_bound' => 'View registration details, or rebind or confirm online when needed.',
        'sections' => [
            'instance_identity' => 'Site identity',
            'local_readiness' => 'This installation',
            'binding_status' => 'Registration',
            'maintenance' => 'Maintenance',
            'access' => 'Access',
            'access_intro' => 'Enter the access code and confirm to validate with Support Center.',
            'rebind' => 'Rebind',
            'rebind_intro' => 'Already bound. Enter a new access code to rebind.',
            'access_code_at_portal_prefix' => 'Get your access code from',
            'access_code_at_portal_suffix' => '.',
            'access_portal_not_configured' => 'Support Center URL is not configured. Ask an administrator.',
        ],
        'rows' => [
            'site_identity' => 'Site identity',
            'official_access' => 'Official access',
            'next_step' => 'Next step',
            'local_readiness' => 'Readiness',
            'local_readiness_guidance' => 'Notes',
            'package_readiness' => 'Package readiness',
            'product' => 'Software',
            'instance_id' => 'Site identifier',
            'host_version' => 'Version',
            'binding_status' => 'Status',
            'official_site_no' => 'Official site number',
            'last_status_fetched_at' => 'Last sync',
            'last_attempt_summary' => 'Last action',
        ],
        'links' => [
            'open_support_center' => 'Support Center',
        ],
        'fields' => [
            'access_code' => 'Access code',
            'access_code_placeholder' => 'Paste access code',
        ],
        'actions' => [
            'confirm_access' => 'Confirm',
            'refresh_status' => 'Refresh',
            'report_presence' => 'Confirm online',
            'show_rebind' => 'Rebind',
            'copy_site_identifier' => 'Copy site identifier',
        ],
        'instance_identity' => [
            'site_identity_generated' => 'Generated',
            'official_access_complete' => 'Complete',
            'official_access_pending' => 'Not complete',
            'next_step_enter_access_code' => 'Enter your official access code to finish binding',
            'next_step_after_bound' => 'Use Refresh status to check registration progress, or Confirm online to notify Support Center that this site is online.',
        ],
        'package_readiness' => [
            'ready' => 'This installation includes official Support Center connectivity. Enter your official access code to complete binding.',
            'not_ready' => 'This installation package does not include official access credentials. Contact your vendor for an official release package or ask technical support for assistance.',
        ],
        'local_readiness' => [
            'ready' => 'Ready',
            'pending' => 'Access pending',
            'not_connected' => 'Official access off',
            'guidance' => [
                'ready' => 'This installation can reach Support Center. Enter your access code to register.',
                'pending' => 'Official site access is not complete yet. Enter your access code or contact your service provider to finish binding.',
                'not_connected' => 'Support Center connectivity is not enabled. Contact your service provider or system administrator.',
            ],
        ],
        'status_labels' => [
            'bound' => 'Active',
            'binding_active' => 'Active',
            'pending' => 'In progress',
            'failed' => 'Failed',
            'expired' => 'Code expired',
            'pending_manual_review' => 'Manual review',
            'callback_failed' => 'Validation callback failed',
            'await_access_confirm' => 'Awaiting access confirm',
            'already_bound' => 'Already bound',
            'domain_mismatch' => 'Domain mismatch',
            'instance_mismatch' => 'Instance mismatch',
            'no_active_site_binding' => 'Not registered',
            'unknown' => 'Unknown',
        ],
        'last_attempt' => [
            'success' => 'Succeeded at :time',
            'failed' => 'Failed at :time',
            'failed_with_message' => 'Failed at :time: :message',
        ],
        'errors' => [
            'access_code_required' => 'Enter an access code',
        ],
        'notifications' => [
            'confirm_success_title' => 'Submitted',
            'confirm_success_body' => 'Tap Refresh to see the latest result.',
            'confirm_failed_title' => 'Access failed',
            'refresh_success_title' => 'Updated',
            'refresh_success_body' => 'Synced registration from Support Center.',
            'refresh_failed_title' => 'Refresh failed',
            'presence_success_title' => 'Confirmed',
            'presence_success_body' => 'Support Center received this site\'s online status.',
            'presence_skipped_title' => 'Could not confirm',
            'presence_skipped_body' => 'Ensure an official site number exists and the network is available, then try again.',
            'operation_denied_title' => 'Not allowed',
            'operation_denied_body' => 'Your account cannot perform site access actions.',
            'copy_site_identifier_success' => 'Site identifier copied to clipboard',
            'copy_site_identifier_failed' => 'Could not copy automatically. Select the site identifier and copy it manually.',
        ],
    ],

    'system_authorization' => [
        'page_title' => 'System Authorization Center',
        'page_intro' => 'Review official authorization details, service status, and entitlements. Use “Sync official authorization” when you need the latest snapshot.',
        'page_intro_after_stable' => 'View authorization, service, and entitlements. Sync official authorization when you need the latest snapshot.',
        'sections' => [
            'binding_hint' => 'Binding Notice',
            'authorization' => 'Authorization',
            'service' => 'Service',
            'entitlements' => 'Entitlements Summary',
            'sync' => 'Sync Status',
            'actions' => 'Actions',
        ],
        'binding_section' => [
            'description' => 'Some official capabilities may be unavailable until system access is completed. Finish binding before syncing authorization.',
        ],
        'rows' => [
            'site_binding_hint' => 'Summary',
            'authorization_status' => 'Authorization status',
            'official_site_no' => 'Official site number',
            'license_no' => 'License number',
            'bound_domains' => 'Bound domains',
            'service_status' => 'Service status',
            'expires_at' => 'Service expires at',
            'remaining_service_days' => 'Remaining service days',
            'entitlement_summary' => 'Entitlement summary',
            'last_sync_status' => 'Latest sync result',
            'last_synced_at' => 'Latest sync time',
            'last_sync_message' => 'Sync notes',
        ],
        'actions' => [
            'sync' => 'Sync official authorization',
            'open_site_onboarding' => 'Open System Access Center',
            'open_system_information' => 'Back to System Information',
            'system_information_no_access' => 'You do not have access to System Information. Ask an administrator to grant “View system settings”.',
            'site_onboarding_no_access' => 'You do not have access to System Access Center. Ask an administrator to grant “View system access”.',
        ],
        'hints' => [
            'complete_site_access_first' => 'Official site binding is not completed yet. Finish onboarding in System Access Center, then sync authorization.',
        ],
        'status' => [
            'authorized' => 'Officially authorized',
            'unauthorized' => 'Not officially authorized',
        ],
        'service_status' => [
            'active' => 'Service active',
            'expired' => 'Service expired',
            'suspended' => 'Service suspended',
            'unknown' => 'Unknown service status',
        ],
        'sync_status' => [
            'success' => 'Sync succeeded',
            'failed' => 'Sync failed',
            'never' => 'Not synced yet',
        ],
        'remaining_days' => [
            'remaining' => ':days days remaining',
            'today' => 'Expires today',
            'expired' => 'Expired :days days ago',
        ],
        'entitlements' => [
            'can_check_system_update' => 'Can check commercial add-on / plugin updates',
            'can_execute_system_update' => 'Can install commercial add-ons, plugins, or commercial-only updates',
            'can_install_plugin' => 'Can install official plugins',
            'can_update_plugin' => 'Can update official plugins',
            'can_install_theme' => 'Theme install entitlement',
            'can_update_theme' => 'Theme update entitlement',
            'unknown' => 'Unknown entitlement',
        ],
        'entitlement_line' => [
            'enabled' => 'Enabled: :label',
            'disabled' => 'Not enabled: :label',
        ],
        'entitlements_display' => [
            'none' => 'No entitlement rows are available in the current snapshot. Sync again or confirm your authorization.',
            'status_enabled' => 'Enabled',
            'status_disabled' => 'Not enabled',
        ],
        'service_display' => [
            'expires_unknown' => 'No official record yet or not synced',
            'remaining_unknown' => 'No official record yet or not synced',
        ],
        'sync_display' => [
            'last_failed_hint' => 'The last sync did not succeed. Try again later, or confirm system access and connectivity first.',
        ],
        'notifications' => [
            'sync_success_title' => 'Official authorization synced',
            'sync_success_body' => 'The latest authorization snapshot was saved locally.',
            'sync_failed_title' => 'Official authorization sync failed',
            'sync_failed_body_generic' => 'Official authorization sync failed. Try again later or check system access status.',
            'sync_denied_title' => 'Sync not allowed',
            'sync_denied_body' => 'Your account does not have permission to sync official authorization. Contact an administrator.',
        ],
    ],

    'plugin_center' => [
        'page_intro' => 'Browse the official plugin catalog and manage locally installed official plugins.',
        'sections' => [
            'installed' => 'Installed plugins',
            'catalog' => 'Available plugins',
            'activity' => 'Activity & troubleshooting',
        ],
        'tabs' => [
            'label' => 'Plugin center views',
        ],
        'notifications' => [
            'operation_denied_title' => 'Permission denied',
            'operation_denied_body' => 'Your account cannot perform this plugin action.',
        ],
        'prerequisite_alert' => [
            'title' => 'A commercial license is required to install or update official plugins',
            'entitlements_incomplete' => 'Your license does not include all official plugin entitlements. Sync authorization and try again.',
            'actions' => [
                'open_site_onboarding' => 'Open System Access Center',
                'open_authorization_center' => 'Open System Authorization Center',
            ],
        ],
        'entitlements' => [
            'status_granted' => 'Enabled',
            'status_not_granted' => 'Not enabled',
            'requires_site_binding' => 'Complete system access and sync official authorization to view plugin entitlements.',
            'requires_commercial_authorization' => 'Commercial authorization is required before plugin install and update entitlements can be shown.',
            'none_synced' => 'The current authorization snapshot does not include plugin entitlements. Sync again in System Authorization Center.',
        ],
        'remote' => [
            'product_code_mismatch' => 'Official plugin product line validation failed. Contact technical support.',
            'product_line_invalid' => 'Official plugin service is not enabled for this product line.',
            'package_fetch_denied' => 'Support Center denied fetching this plugin package for this site.',
            'download_token_denied' => 'Support Center denied the plugin download request.',
            'update_not_entitled' => 'This site is not entitled to obtain this plugin. Sync authorization and retry.',
            'claim_denied' => 'Support Center denied install eligibility for this plugin.',
            'plugin_not_available' => 'This official plugin is not available for this site right now.',
        ],
        'entitlement' => [
            'allowed_install' => 'Official plugin installation is allowed.',
            'allowed_update' => 'Official plugin updates are allowed.',
            'site_access_not_completed' => 'System access is not complete. Finish binding in System Access Center first.',
            'authorization_not_granted' => 'Commercial authorization is required to install or update official plugins.',
            'service_expired' => 'Official commercial service has expired.',
            'service_not_active' => 'Official commercial service is not active.',
            'install_entitlement_denied' => 'Your license does not include install-official-plugins entitlement.',
            'update_entitlement_denied' => 'Your license does not include update-official-plugins entitlement.',
        ],
        'installed' => [
            'empty' => 'No official plugins are installed on this site yet.',
            'version_unknown' => 'Not recorded',
            'installed_at_unknown' => 'Not recorded',
            'columns' => [
                'name' => 'Plugin name',
                'identifier' => 'Plugin ID',
                'version' => 'Version',
                'status' => 'Status',
                'update_status' => 'Update status',
                'feature_entries' => 'Features',
                'usage_guidance' => 'Usage',
                'installed_at' => 'Installed at',
                'actions' => 'Actions',
            ],
            'no_feature_entries' => 'After enabling, open plugin settings or use the links below for business features.',
        ],
        'usage_guidance' => [
            'disabled_hint' => 'This plugin is disabled. Business entry points are hidden.',
            'permission_denied' => 'You do not have permission to use this plugin. Contact an administrator.',
            'view_details' => 'Guide',
            'more_items' => ':count more items',
            'feature_entries_count' => ':count entries',
            'quick_links_heading' => 'Quick links',
            'feature_entries_heading' => 'Feature entries',
            'labels' => [
                'main_entry' => 'Main entry',
                'import_entry' => 'Import entry',
                'export_entry' => 'Export entry',
                'host_locations' => 'Common locations',
                'settings_purpose' => 'Settings',
                'permission_status' => 'Permission',
            ],
            'permission_status' => [
                'available' => 'Available',
                'no_access' => 'No access',
                'disabled' => 'Disabled',
            ],
            'dberp_barcode_label' => [
                'description' => 'Preview and print barcode labels for products and SKUs using host barcode data.',
                'main_entry' => 'Warehouse → Label printing',
                'host_locations' => [
                    'Product pages',
                    'SKU sections',
                    'Purchase receipts',
                    'Other stock-in documents',
                ],
                'settings_purpose' => 'Default label size, barcode type, and print display options',
            ],
            'dberp_advanced_import_export' => [
                'description' => 'Full xlsx export for nine master data types beyond host data initialization import and report CSV export.',
                'main_entry' => 'System → Master data Excel export',
                'export_entry' => 'Master data list pages (products, customers, suppliers, warehouses, etc.)',
                'host_locations' => [
                    'Master data Excel export workbench',
                    'Excel export on master data list pages',
                ],
                'settings_purpose' => 'Default export format, export limits, and audit settings',
            ],
            'dberp_invoice_assistant' => [
                'description' => 'Sales invoicing ledger, attachment archiving, red reversal records, and uninvoiced sales queries.',
                'main_entry' => 'Sales → Invoice Management',
                'host_locations' => [
                    'Sales order edit page',
                    'Customer edit page',
                    'Invoice records',
                    'Uninvoiced sales query',
                ],
                'settings_purpose' => 'Default invoice type, attachment size, attachment formats, etc.',
            ],
            'dberp_notification_channel' => [
                'description' => 'External notifications for inventory alerts, purchase receipts, shipments, settlements, invoices, and system events.',
                'main_entry' => 'System → Notifications',
                'host_locations' => [
                    'Notification workbench',
                    'Channels and rules (coming later)',
                ],
                'settings_purpose' => 'Default channel, retry policy, and send log switch',
            ],
            'dberp_light_approval' => [
                'description' => 'Lightweight submit, approve, reject, withdraw, and audit trail for core ERP documents.',
                'main_entry' => 'Workbench → Approval Center',
                'host_locations' => [
                    'Approval Center workbench',
                    'System → Approval Settings',
                ],
                'settings_purpose' => 'Reminders, timeout days, withdraw policy, and auto-continue after approval',
            ],
        ],
        'catalog' => [
            'empty' => 'No official plugins to display.',
            'fetch_failed_title' => 'Unable to load the official plugin catalog',
            'fetch_failed' => 'The official plugin catalog is temporarily unavailable. Other sections on this page still work.',
            'requires_commercial_license' => 'Commercial authorization is required for this plugin.',
            'version_prefix' => 'Version ',
            'detail_heading' => 'Capabilities, status, and installation requirements',
            'display_description' => 'Overview',
            'no_description' => 'No description is available for this plugin.',
            'install_requirements' => 'Current installation requirements',
            'after_install_heading' => 'After installation',
            'after_install_description' => 'The plugin remains disabled after installation. Review its features and permissions before enabling it.',
            'columns' => [
                'name' => 'Plugin name',
                'version' => 'Latest version',
                'status' => 'Status',
                'description' => 'Description',
                'actions' => 'Actions',
            ],
            'state' => [
                'installable' => 'Installable',
                'license_required' => 'License required',
                'incompatible_version' => 'Incompatible version',
                'installed' => 'Installed',
                'update_available' => 'Update available',
                'unavailable' => 'Unavailable',
            ],
            'remote_availability' => [
                'available' => 'Published',
                'license_required' => 'License required',
                'commercial_required' => 'License required',
                'unavailable' => 'Not offered',
                'deprecated' => 'Deprecated',
                'maintenance' => 'Maintenance',
                'disabled' => 'Disabled',
                'unknown' => 'Unknown',
            ],
            'reason' => [
                'not_entitled' => 'This site is not entitled to this plugin.',
                'license_required' => 'Commercial license required.',
                'incompatible_version' => 'Incompatible with this DBErp version.',
                'region_restricted' => 'Not available in this region.',
                'maintenance' => 'Temporarily under maintenance.',
            ],
        ],
        'activity' => [
            'description' => 'Install, enable, disable, update, and failure details for quick troubleshooting.',
            'retention_notice' => 'Records are retained for :days days by default; older records are pruned automatically.',
            'failure_hint' => 'Switched to Activity & troubleshooting so you can review the failed step and details.',
            'empty' => 'No plugin activity to display yet.',
            'message_copied' => 'Message copied',
            'prune' => [
                'action' => 'Prune expired records',
                'heading' => 'Prune expired plugin activity',
                'description' => 'This will permanently delete :count record(s) older than :days days. Records within the retention period are not affected.',
                'nothing_tooltip' => 'There are no records older than :days days',
                'completed_title' => 'Expired records pruned',
                'completed_body' => 'Deleted :count plugin activity record(s) older than :days days.',
            ],
            'messages' => [
                'catalog_fetch_completed' => 'Fetched :count official plugin(s) from the catalog.',
            ],
            'columns' => [
                'time' => 'Time',
                'plugin' => 'Plugin',
                'operation' => 'Operation',
                'result' => 'Result',
                'message' => 'Message',
            ],
            'operations' => [
                'catalog_fetch' => 'Fetch catalog',
                'claim_check' => 'Install eligibility',
                'download_token' => 'Download authorization',
                'package_download' => 'Download plugin',
                'package_verification' => 'Security verification',
                'extraction' => 'Prepare files',
                'manifest_validation' => 'Plugin info validation',
                'registration' => 'Register plugin',
                'installation' => 'Install plugin',
                'enable' => 'Enable plugin',
                'disable' => 'Disable plugin',
                'settings_access' => 'Open settings',
                'update_check' => 'Check for updates',
                'update' => 'Update plugin',
                'update_extraction' => 'Update extraction',
                'update_manifest_validation' => 'Update info validation',
                'update_replacement' => 'Update replacement',
                'update_restore' => 'Restore previous version',
                'update_migration' => 'Update data migration',
            ],
            'results' => [
                'started' => 'In progress',
                'completed' => 'Succeeded',
                'failed' => 'Failed',
            ],
        ],
        'actions' => [
            'enable' => 'Enable',
            'disable' => 'Disable',
            'settings' => 'Settings',
            'update' => 'Update',
            'install' => 'Install',
            'refresh' => 'Check for updates',
            'more' => 'More actions',
            'browse_catalog' => 'Browse available plugins',
            'retry' => 'Try again',
            'details' => 'Plugin details',
            'coming_soon' => 'This action will be available in a later release',
        ],
        'details' => [
            'action_label' => 'Details & guide',
            'description' => 'Review plugin status, usage entries, and configuration summary in one place.',
            'navigation_label' => 'Plugin detail views',
            'last_error' => 'Most recent error',
            'empty_guidance' => 'No additional usage guidance is available for this plugin.',
            'tabs' => [
                'overview' => 'Overview',
                'guidance' => 'Usage guide',
                'settings' => 'Settings summary',
            ],
        ],
        'install' => [
            'in_progress' => 'Installing…',
            'success_title' => 'Plugin installed',
            'success_body' => 'The plugin was installed and remains disabled until you enable it manually.',
            'success' => 'Installation completed',
            'failed_title' => 'Installation failed',
            'failed' => 'Plugin installation failed. Try again or contact support.',
            'permission_denied' => 'You do not have permission to install official plugins.',
            'update_permission_denied' => 'You do not have permission to update official plugins.',
            'invalid_plugin' => 'Invalid plugin information.',
            'version_required' => 'A version is required to install.',
            'claim_denied' => 'Support Center denied install eligibility for this plugin.',
            'verification_failed' => 'Security verification failed.',
            'package_missing' => 'Downloaded plugin file was not found.',
            'manifest_invalid' => 'Plugin information is incomplete or invalid.',
            'alias_mismatch' => 'Plugin identifier does not match the official catalog.',
            'package_validation_failed' => 'Official plugin release package validation failed. Installation was aborted.',
            'release_errors' => [
                'release_package_structure_invalid' => 'The official plugin package structure is incomplete. Installation was aborted.',
                'manifest_product_invalid' => 'The plugin product line is not valid for DBErp. Installation was aborted.',
                'release_manifest_product_invalid' => 'The release manifest product line is not valid for DBErp. Installation was aborted.',
                'release_manifest_version_mismatch' => 'The release manifest version does not match plugin metadata. Installation was aborted.',
                'release_checksums_mismatch' => 'Official plugin package checksum validation failed. Installation was aborted.',
                'release_signature_required' => 'A signed official plugin package is required in this environment. Installation was aborted.',
                'release_signature_mismatch' => 'Official plugin package signature verification failed. Installation was aborted.',
            ],
        ],
        'package' => [
            'download_failed' => 'Official plugin download failed.',
            'verification_failed' => 'Plugin security verification failed.',
            'verification_file_missing' => 'Downloaded plugin file is missing.',
            'verification_checksum_missing' => 'Checksum metadata is missing.',
            'verification_compute_failed' => 'Failed to compute checksum.',
            'verification_checksum_mismatch' => 'Checksum mismatch.',
            'verification_size_mismatch' => 'File size does not match official record.',
            'signature_missing' => 'Signature metadata is missing.',
            'signature_mismatch' => 'Signature verification failed.',
            'signature_verify_failed' => 'Signature verification error.',
        ],
        'status' => [
            'enabled' => 'Enabled',
            'disabled' => 'Disabled',
            'installed' => 'Installed',
            'failed' => 'Error',
            'unknown' => 'Unknown status',
        ],
        'confirm' => [
            'install_heading' => 'Install plugin',
            'enable_heading' => 'Enable plugin',
            'disable_heading' => 'Disable plugin',
            'update_heading' => 'Update plugin',
            'install' => 'Install plugin “:name” version :version? It will remain disabled after installation.',
            'enable' => 'Enable plugin “:name”? Its features will become available in the system.',
            'disable' => 'Disable plugin “:name”? Plugin data is kept; only business entries are hidden.',
            'update' => 'Update plugin “:name” to version :version? Do not close this page during the update.',
        ],
        'lifecycle' => [
            'enable_success' => 'Plugin enabled',
            'enable_success_title' => 'Plugin enabled',
            'enable_success_body' => 'The plugin is enabled and its entries are available.',
            'enable_failed' => 'Failed to enable the plugin. Try again or contact support.',
            'enable_failed_title' => 'Enable failed',
            'disable_success' => 'Plugin disabled',
            'disable_success_title' => 'Plugin disabled',
            'disable_success_body' => 'The plugin is disabled. Data is kept on this server.',
            'disable_failed' => 'Failed to disable the plugin. Try again.',
            'disable_failed_title' => 'Disable failed',
            'operation_failed' => 'Operation failed. Try again.',
            'permission_denied' => 'You do not have permission for this action.',
            'task_in_progress' => 'An install or update is in progress for this plugin.',
            'invalid_plugin' => 'Invalid plugin information.',
        ],
        'settings' => [
            'help' => 'Open the plugin settings page for version info and feature links.',
            'unavailable_title' => 'Settings unavailable',
            'unavailable' => 'Plugin settings are not available. Ensure the plugin is enabled or contact support.',
            'no_settings_title' => 'No settings',
            'no_settings' => 'No settings available for this plugin.',
            'route_missing' => 'Settings entry is unavailable. Please contact support.',
            'plugin_disabled_title' => 'Plugin disabled',
            'plugin_disabled' => 'This plugin is disabled. Enable it in the plugin center before opening settings.',
            'panel_heading' => 'Plugin settings summary',
            'panel_generic_intro' => 'Summary of current plugin settings. Open the full settings page to edit and save.',
            'open_full_settings' => 'Open full settings',
            'open_full_settings_hint' => 'Includes all options, save actions, and diagnostics.',
        ],
        'update' => [
            'state' => [
                'up_to_date' => 'Up to date',
                'update_available' => 'Update available',
                'check_unavailable' => 'Check unavailable',
                'license_required' => 'License required',
                'license_expired' => 'License expired',
            ],
            'guidance' => [
                'check_unavailable' => 'Cannot reach official services to check updates.',
                'license_required' => 'Commercial authorization is required to check or update this plugin.',
                'license_expired' => 'Commercial service expired. Installed versions keep working; renew to update.',
            ],
            'latest_version_label' => 'Latest :version',
            'in_progress' => 'Updating…',
            'success' => 'Update completed',
            'success_title' => 'Update completed',
            'success_body' => 'The plugin was updated successfully.',
            'failed' => 'Update failed. Try again or contact support.',
            'failed_title' => 'Update failed',
            'failed_preserved' => 'Update failed; the previous version was kept.',
            'permission_denied' => 'You do not have permission to update official plugins.',
            'check_unavailable' => 'Update check unavailable',
            'invalid_plugin' => 'Invalid plugin information.',
            'not_installed' => 'Plugin is not installed.',
            'no_update_available' => 'No update is available.',
            'verification_failed' => 'Security verification failed; update aborted.',
            'package_missing' => 'Downloaded package not found; update aborted.',
            'restore_completed' => 'Restored the pre-update version.',
            'restore_failed' => 'Failed to restore the previous version. Contact support.',
            'migration_failed' => 'Post-update data migration may be incomplete. Contact support.',
        ],
    ],

    'system_update' => [
        'entitlement' => [
            'allowed_check' => 'Main program update check is allowed (site binding completed).',
            'allowed_execute' => 'Online DBErp main program upgrade is allowed (site binding only; commercial license not required).',
            'allowed_commercial_execute' => 'Commercial add-ons, plugins, or commercial-only updates are allowed.',
            'site_access_not_completed' => 'Site binding is not completed; main program check and upgrade are unavailable. Finish onboarding in System Access Center first.',
            'authorization_not_granted' => 'Commercial authorization is not granted; commercial add-ons, plugins, or commercial-only updates are unavailable (free main program online upgrade is not blocked by this).',
            'service_expired' => 'Commercial service has expired; commercial add-ons, plugins, or commercial-only updates are unavailable.',
            'check_entitlement_denied' => 'Commercial authorization does not include checking commercial add-on / plugin updates.',
            'execute_entitlement_denied' => 'Commercial authorization does not include installing commercial add-ons, plugins, or commercial-only updates.',
            'service_not_active' => 'Commercial service is not active; commercial add-ons, plugins, or commercial-only updates are unavailable.',
            'unknown' => 'The required official entitlement is not available.',
        ],
        'remote' => [
            'package_fetch_denied' => 'The official support center has not allowed this site to fetch the update package yet (the main-program channel may be disabled on the remote side). Confirm site binding and support center configuration; this is separate from commercial authorization for plugins/add-ons.',
            'download_token_denied' => 'The official support center rejected the download-token request. Confirm the main-program update channel is enabled for this site; free main program upgrades do not require commercial authorization, but the remote service must still allow the download.',
            'update_not_entitled' => 'The official support center reports this site is not entitled to fetch this package. Enable the main-program update channel on the support center; plugins and commercial add-ons require separate commercial authorization.',
        ],
        'package' => [
            'check_snapshot_not_ready' => 'Run a successful official update check before downloading the package.',
            'no_update_available' => 'There is no downloadable official update package.',
            'package_id_missing' => 'The update check snapshot is missing an official package identifier.',
            'download_failed' => 'Official update package download failed. Please retry later or contact support.',
            'verification_file_missing' => 'The downloaded update package file was not found.',
            'verification_checksum_missing' => 'The official package checksum is missing; verification cannot continue.',
            'verification_compute_failed' => 'Failed to compute the package checksum on this server.',
            'verification_checksum_mismatch' => 'The package checksum does not match. The update flow has been stopped.',
            'signature_missing' => 'The official package is missing signature metadata; verification cannot continue.',
            'signature_mismatch' => 'The official package signature does not match. The update flow has been stopped.',
            'signature_verify_failed' => 'Official package signature verification failed on this server.',
        ],
        'check' => [
            'package_type_not_full' => 'Only full upgrade packages are supported. The official response returned type “:type”.',
            'min_upgradable_version_unmet' => 'Current version (:current, internal :current_update) is below the minimum upgradable version (:minimum).',
        ],
        'precheck' => [
            'log' => [
                'started' => 'Checking disk space and writable directories.',
                'completed' => 'Disk space and writable directory checks passed.',
            ],
            'disk_space_unavailable' => 'Unable to read free disk space on this server.',
            'insufficient_disk_space' => 'Insufficient disk space. At least about :required_mb MB free space is required.',
            'directory_not_writable' => 'Directory is not writable: :path',
            'file_not_writable' => 'File is not writable: :path',
            'fresh_php_process_unavailable' => 'A fresh PHP CLI process could not be started. The update stopped safely before replacing any application files. Verify proc_open and DBERP_PHP_CLI_BINARY.',
            'runtime_cache_reset_unavailable' => 'PHP OPcache is enabled, but this web process cannot reset it (:reason). The update stopped safely before replacing files. Check opcache.restrict_api and disabled functions.',
        ],
        'report' => [
            'sanitized_message_placeholder' => 'Update failed (technical details hidden; see local update logs or contact support).',
            'success_summary' => 'System update completed.',
            'failure_summary_fallback' => 'System update did not complete; see local update records.',
        ],
        'manifest' => [
            'no_verified_package' => 'No verified update package was found for manifest parsing.',
            'package_not_verified' => 'The update package has not passed package-level verification.',
            'package_file_missing' => 'The local update package file was not found.',
            'manifest_missing' => 'manifest.json is missing from the update package.',
            'invalid_json' => 'manifest.json is invalid.',
            'zip_open_failed' => 'Unable to open the update package ZIP file.',
            'archive_open_failed' => 'Unable to open the update package archive (zip / tar.gz).',
            'unsupported_archive_format' => 'Unsupported update package format: :format.',
            'required_field_missing' => 'manifest is missing required field: :field.',
            'files_invalid' => 'manifest.files is invalid.',
            'checksums_invalid' => 'manifest.checksums is invalid.',
            'checksums_incomplete' => 'manifest.checksums is missing the SHA-256 for an update target: :path.',
            'backup_required_missing' => 'manifest.backup_required is required.',
            'backup_required_invalid' => 'manifest.backup_required must be boolean.',
            'product_code_mismatch' => 'manifest product_code is not dberp.',
            'from_update_version_invalid' => 'manifest.from_update_version must be an integer (actual :actual).',
            'to_update_version_not_greater' => 'manifest.to_update_version must be greater than the current system (current :current, target :target).',
            'package_type_unsupported' => 'manifest.package_type is unsupported.',
            'package_type_not_full' => 'manifest.package_type must be full; got “:type”.',
            'release_channel_mismatch' => 'manifest.release_channel does not match the package snapshot.',
            'php_requirement_unmet' => 'Current PHP version does not satisfy manifest requirement (:required).',
            'laravel_requirement_unmet' => 'Current Laravel version does not satisfy manifest requirement (:required).',
            'filament_requirement_unmet' => 'Current Filament version does not satisfy manifest requirement (:required).',
            'livewire_requirement_unmet' => 'Current Livewire version does not satisfy manifest requirement (:required).',
            'commands_invalid' => 'manifest.commands is invalid.',
            'path_list_invalid' => 'manifest.:context contains invalid paths.',
            'unsafe_path' => 'manifest contains unsafe path (:context): :path.',
            'protected_path' => 'manifest contains protected path (:context): :path.',
        ],
        'execution' => [
            'no_verified_package' => 'No verified package with a parsed manifest was found; cannot create an execution task.',
            'package_not_verified' => 'The update package has not passed whole-package verification; cannot create an execution task.',
            'manifest_not_parsed' => 'The package manifest has not been parsed successfully; cannot create an execution task.',
            'product_code_mismatch' => 'The manifest product is not dberp; cannot create an execution task.',
            'from_update_version_invalid' => 'manifest.from_update_version must be an integer (actual :actual).',
            'to_update_version_not_greater' => 'manifest.to_update_version must be greater than the current system (current :current, target :target).',
            'active_execution_exists' => 'A system update task is already in progress (:execution_no). Please wait until it finishes.',
            'invalid_transition' => 'Transition from :from to :to is not allowed.',
            'log' => [
                'created' => 'System update execution task created; awaiting subsequent steps.',
                'state_changed' => 'Execution state changed from :from to :to (step: :step).',
                'step_advanced' => 'Execution advanced to step :step.',
                'manual_recovery_resumed' => 'Manual remediation confirmed; update execution resumed.',
                'cancelled' => 'System update execution task cancelled.',
            ],
        ],
        'staging' => [
            'package_not_ready' => 'The update package is not ready; cannot extract to staging.',
            'package_file_missing' => 'Local update package file was not found; cannot extract.',
            'zip_open_failed' => 'Unable to open the update package ZIP file.',
            'archive_open_failed' => 'Unable to open the update package archive (zip / tar.gz).',
            'unsupported_archive_format' => 'Unsupported update package format: :format.',
            'unsafe_archive_entry' => 'The update package contains an unsafe archive entry; extraction aborted.',
            'protected_update_target' => 'Manifest contains a protected update target (:context): :path.',
            'verification_failed' => 'Staging verification failed: :reason.',
            'log' => [
                'extract_started' => 'Extracting update package into staging.',
                'extract_batch_completed' => 'Extracted :count file(s) in this batch (progress :processed / :total).',
                'extract_completed' => 'Update package extracted to staging (:count entries).',
                'verify_started' => 'Verifying staging contents and manifest paths.',
                'verify_completed' => 'Staging verification passed.',
                'precheck_started' => 'Starting pre-update checks.',
                'precheck_completed' => 'Pre-update checks completed.',
                'running_started' => 'Entered update execution phase (staging/backup).',
            ],
        ],
        'backup' => [
            'failed' => 'Pre-update backup failed: :reason.',
            'log' => [
                'started' => 'Creating pre-update file backup.',
                'batch_completed' => 'Backed up :count file(s) in this batch (progress :processed / :total).',
                'completed' => 'Pre-update file backup completed.',
                'prepare' => 'Preparing pre-update backup.',
            ],
        ],
        'file_execution' => [
            'prerequisites_not_met' => 'File update prerequisites are not met: :reason.',
            'staging_missing' => 'Staging directory is missing; file replacement cannot proceed.',
            'backup_not_completed' => 'Pre-update file backup is not completed; file replacement cannot proceed.',
            'staged_source_missing' => 'Staged file is missing: :path.',
            'checksum_mismatch' => 'File checksum mismatch; replacement aborted: :path.',
            'checksum_invalid' => 'A valid file checksum is missing; replacement aborted: :path.',
            'copy_failed' => 'File copy failed: :path.',
            'delete_not_backed_up' => 'File to delete was not included in pre-update backup; aborted: :path.',
            'delete_failed' => 'File deletion failed: :path.',
            'vendor_file_invalid' => 'Invalid vendor file path (must be under vendor/): :path.',
            'vendor_copy_failed' => 'Vendor file copy failed: :path.',
            'log' => [
                'apply_files' => 'Applying staged file changes.',
                'apply_vendor' => 'Processing vendor update strategy.',
                'replace_started' => 'Replacing project files from staging.',
                'replace_completed' => 'Project file replacement completed (:count files).',
                'file_replaced' => 'Replaced file: :path.',
                'delete_started' => 'Deleting obsolete files declared in manifest.',
                'delete_completed' => 'Obsolete file deletion completed (:count files).',
                'vendor_started' => 'Starting vendor update (strategy: :strategy).',
                'vendor_completed' => 'Vendor update handling completed (strategy: :strategy).',
                'vendor_skipped' => 'Vendor update skipped (strategy: none).',
                'vendor_composer_deferred' => 'This update requires Composer to refresh vendor dependencies, but composer install could not run in this environment. Run composer install --no-dev --optimize-autoloader from the server terminal.',
                'vendor_composer_completed' => 'Composer vendor dependencies were installed successfully.',
                'vendor_bundle_applied' => 'Vendor directory was replaced from archive (:path).',
                'vendor_file_replaced' => 'Replaced vendor file: :path.',
            ],
        ],
        'post_apply' => [
            'runtime_reset_failed' => 'The PHP runtime cache reset failed (:reason); migrations were blocked.',
            'runtime_readiness_failed' => 'The new runtime readiness check failed (:reason); migrations were blocked.',
            'health_check_failed' => 'The pre-completion health check failed (:reason); the site will remain in maintenance mode.',
            'command_not_allowed' => 'Artisan command is not allowed: :command.',
            'command_unavailable' => 'Artisan command execution is unavailable: :command.',
            'php_cli_unavailable' => 'No usable PHP CLI path is available in this web environment, so the subprocess for :command cannot start. Set DBERP_PHP_CLI_BINARY in .env to a PHP CLI binary (not php-fpm), or run the update from a server terminal.',
            'command_failed' => 'Artisan command failed: :command (exit code :exit_code).',
            'migration_failed' => 'Database migration failed; the update was aborted.',
            'cache_clear_failed' => 'Cache clearing failed (:command); the update was aborted.',
            'version_write_failed' => 'Version write failed: :reason.',
            'manifest_version_missing' => 'Target version information is missing from manifest.',
            'log' => [
                'runtime_reset_completed' => 'PHP runtime caches were reset.',
                'runtime_reset_deferred' => 'The current web process could not reset PHP runtime caches (:reason); post-update work and readiness checks continue in fresh PHP subprocesses.',
                'bootstrap_cache_clear_started' => 'Clearing Laravel file-based bootstrap caches.',
                'bootstrap_cache_cleared' => 'Laravel file-based bootstrap caches were cleared.',
                'runtime_readiness_completed' => 'The new runtime readiness check passed.',
                'health_check_completed' => 'The pre-completion health check passed.',
                'finalize_migrations' => 'Starting database migrations.',
                'finalize_cache' => 'Starting cache clearing.',
                'finalize_version' => 'Starting version write.',
                'completed' => 'System update execution completed.',
                'migration_started' => 'Running php artisan migrate --force --no-interaction.',
                'migration_completed' => 'Database migrations completed.',
                'migration_batch_completed' => 'Migration batch finished (:count file(s)); :pending remaining.',
                'migration_failed' => 'Database migration failed.',
                'cache_clear_started' => 'Clearing Laravel caches.',
                'cache_clear_completed' => 'Laravel cache clearing completed.',
                'cache_command_completed' => 'Cache command completed: :command.',
                'version_write_started' => 'Writing DBErp version values.',
                'version_write_completed' => 'DBErp version values written.',
            ],
        ],
        'workspace_cleanup' => [
            'log' => [
                'completed' => 'Update workspace cleanup finished (:reason).',
                'failed' => 'Update workspace cleanup failed (terminal update status is unchanged).',
            ],
        ],
        'recovery' => [
            'rollback_not_allowed' => 'Rollback is not allowed for the current status (:status).',
            'backup_unavailable' => 'No usable file backup was found; rollback cannot proceed.',
            'file_restore_failed' => 'File rollback failed: :reason.',
            'env_restore_failed' => 'Environment version restore failed: :reason.',
            'runtime_reset_failed' => 'Files were restored, but the PHP runtime cache could not be reset. Maintenance mode remains active; reload PHP-FPM before continuing recovery.',
            'maintenance_command_failed' => 'Maintenance mode command failed: :command (exit code :exit_code).',
            'php_cli_unavailable' => 'No usable PHP CLI path is available in this web environment, so the maintenance command :command cannot run. Set DBERP_PHP_CLI_BINARY in .env to a PHP CLI binary (not php-fpm), or run php artisan :command from the project root.',
            'maintenance_up_failed_detail' => 'Failed to leave maintenance mode (exit code :exit_code). If the site still shows as under maintenance, ensure the web process can delete storage/framework/down, or run php artisan up from the project root.',
            'maintenance_up_file_fallback_detail' => 'Tried to restore site access by removing maintenance files. If the site is still unavailable, run php artisan up from the project root.',
            'database_manual_recovery_required' => 'Database migrations may have partially run and cannot be rolled back automatically. Follow official documentation for manual database recovery.',
            'log' => [
                'maintenance_down_started' => 'Entering maintenance mode.',
                'maintenance_down_completed' => 'Maintenance mode enabled.',
                'maintenance_down_failed' => 'Failed to enter maintenance mode.',
                'maintenance_up_started' => 'Leaving maintenance mode.',
                'maintenance_up_completed' => 'Maintenance mode disabled.',
                'maintenance_up_failed' => 'Failed to leave maintenance mode.',
                'rollback_started' => 'Starting update rollback.',
                'rollback_completed' => 'Update rollback completed.',
                'file_restore_started' => 'Restoring files from backup.',
                'file_restore_completed' => 'File restore completed (:count files).',
                'env_restore_started' => 'Restoring DBErp version values.',
                'env_restore_completed' => 'DBErp version values restored.',
            ],
        ],
    ],

    'system_update_center' => [
        'page_title' => 'System Update Center',
        'page_intro' => 'After site binding, upgrade the free DBErp main program to the latest compatible official full package in one step (no commercial license required). Commercial plugins, add-ons, and commercial-only update packages still require commercial authorization. Run during off-peak hours and back up first.',
        'hub' => [
            'toggle_summary' => 'Expand or collapse environment and update method details',
            'browser_ok_hint' => 'Environment checks passed. During off-peak hours, use “Check for updates” then “Update now” in the page header. If the update is interrupted, times out, or fails, expand “Command-line update (fallback)” below to resume or rerun from your server terminal.',
            'browser_risky_hint' => 'Only warnings were reported; you can still use “Check for updates” and “Update now” in the page header during off-peak hours. If the update is interrupted, times out, or fails, expand “Command-line update (fallback)” below.',
            'diagnostics_toggle' => 'View environment diagnostics',
            'diagnostics_intro' => 'Items that need attention are listed below; other checks passed.',
            'pass_summary' => ':count more check(s) passed',
            'all_passed' => 'All :count environment checks passed',
            'learn_more_terminal' => 'Learn more (SSH / panel terminal / container)',
        ],
        'sections' => [
            'overview' => 'Version & Update Info',
            'update_environment' => 'Update Environment & Method',
            'environment_diagnostics' => 'Update Environment Diagnostics',
            'recommended_method' => 'Recommended Update Method',
            'terminal_update' => 'Command-line Update',
            'failure_recovery' => 'Failure Recovery Guidance',
            'cli_update' => 'Command-line Update',
            'update_in_progress' => 'Update In Progress',
            'latest_result' => 'Latest Update Result',
            'entitlement' => 'Authorization & Entitlements',
            'recovery' => 'Update Recovery',
            'actions' => 'Update Actions',
            'workflow' => 'Recommended Workflow',
            'current_version' => 'Current Version',
            'official_status' => 'Official Update Status',
            'package' => 'Package Status',
            'execution' => 'Execution Status',
            'execution_logs' => 'Execution Logs',
        ],
        'rows' => [
            'current_version' => 'Current Version',
            'latest_result' => 'Latest Result',
            'latest_result_detail' => 'Details',
            'update_risk_level' => 'Update Risk',
            'update_risk_summary' => 'Risk Summary',
            'guidance' => 'Guidance',
            'maintenance_notice' => 'Maintenance Notice',
            'unavailable_reason' => 'Unavailable',
            'environment_blocking_reason' => 'Environment not ready',
            'cli_run_command' => 'Recommended terminal command',
            'in_progress_notice' => 'Update In Progress',
            'recovery_hint' => 'Recovery Note',
            'progress' => 'Progress',
            'execution_process_log' => 'Update Progress Log',
            'workflow' => 'Workflow',
            'sync_limitation' => 'Execution Mode',
            'product_name' => 'Product Name',
            'display_version' => 'Display Version',
            'update_version' => 'Update Version',
            'edition' => 'Release Stage',
            'site_no' => 'Official site number',
            'license_no' => 'License No.',
            'last_checked_at' => 'Last Checked At',
            'check_result' => 'Check Result',
            'latest_version' => 'Latest Version',
            'latest_update_version' => 'Latest Update No.',
            'release_channel' => 'Release Channel',
            'update_available' => 'Update Available',
            'release_notes' => 'Release Notes',
            'last_check_message' => 'Check Failure Reason',
            'authorized' => 'Authorized',
            'service_status' => 'Service Status',
            'expires_at' => 'Service Expires At',
            'can_check' => 'Can Check Main Program Updates',
            'can_execute' => 'Can Upgrade Main Program Online',
            'entitlement_reason' => 'Entitlement Note',
            'entitlement_summary' => 'Entitlement Summary',
            'package_id' => 'Package ID',
            'package_version' => 'Package Version',
            'package_size' => 'Package Size',
            'checksum_status' => 'Checksum Status',
            'manifest_status' => 'Update manifest parsing status',
            'local_package_status' => 'Local Package Status',
            'downloaded_at' => 'Downloaded At',
            'execution_no' => 'Execution No.',
            'execution_status' => 'Status',
            'execution_step' => 'Current Step',
            'execution_progress' => 'Progress',
            'execution_started_at' => 'Started At',
            'execution_finished_at' => 'Finished At',
            'execution_error' => 'Failure Reason',
            'rollback_status' => 'Rollback Status',
            'execution_logs' => 'Recent Logs',
        ],
        'actions' => [
            'update_now' => 'Update Now',
            'refresh_status' => 'Refresh Official Version',
            'check_update' => 'Check for Updates',
            'check' => 'Check for Updates',
            'download' => 'Download Package',
            'parse' => 'Parse Package',
            'create_execution' => 'Create Update Task',
            'start' => 'Start Update',
            'rollback' => 'Run Rollback',
            'open_authorization' => 'Open Authorization Center',
            'open_system_information' => 'Open System Information',
        ],
        'confirm' => [
            'update_now_heading' => 'Confirm Update Now',
            'update_now_body' => 'The system will check with the official service, download the latest full upgrade package, and install it. Maintenance mode may be enabled briefly.',
            'download_heading' => 'Confirm Download',
            'download_body' => 'The update package will be downloaded from the official support center and verified for integrity.',
            'create_execution_heading' => 'Confirm Create Task',
            'create_execution_body' => 'A local update task will be created. System files will not be modified yet.',
            'start_heading' => 'Confirm Start Update',
            'start_body' => 'The system may enter maintenance mode and files will be backed up before changes.',
            'rollback_heading' => 'Confirm Rollback',
            'rollback_body' => 'Files and version keys will be restored from backup. Database changes are not rolled back automatically.',
        ],
        'guidance' => [
            'main_program_available' => 'Site binding is complete; online DBErp main program upgrade is available (free edition does not require commercial authorization).',
            'commercial_updates_available' => 'Commercial add-ons, plugins, or commercial-only updates are enabled.',
            'commercial_updates_unavailable' => 'Commercial plugins, add-ons, or commercial-only updates require commercial authorization; free main program upgrade is not limited by this.',
        ],
        'recommended_method' => [
            'panel_label' => 'Recommended update method',
            'labels' => [
                'browser_available' => 'Browser update available',
                'browser_risky' => 'Browser update available (with warnings)',
                'browser_blocked_use_terminal' => 'Use terminal update',
            ],
            'summaries' => [
                'browser_available' => 'Environment diagnostics passed. You can try “Update Now” in System Update Center.',
                'browser_risky' => 'Warnings were reported, but browser update is still allowed. Large packages or long steps may time out; prefer off-peak hours.',
                'browser_blocked_use_terminal' => 'This environment is not suitable for running a system update directly in the browser.',
            ],
            'details' => [
                'browser_available' => 'Prefer “Update Now” in the page header during off-peak hours. Use the command-line fallback only if the browser update does not complete smoothly.',
                'browser_risky' => 'Review the environment diagnostics warnings first. Prefer “Update Now” during off-peak hours; use the command-line fallback if needed.',
                'browser_blocked_use_terminal' => 'Open a server terminal, panel terminal, or SSH session, change into the DBErp project directory, then run the command below. For Docker, run it inside the application container.',
            ],
        ],
        'terminal' => [
            'intro_blocked' => 'This environment is not suitable for running a system update directly in the browser. Use the command below in a server terminal, panel terminal, or SSH session to complete a full update (check → download → install; no execution number required).',
            'intro_risky' => 'Only warnings were reported, so browser update is still suitable. Prefer “Update Now” in the page header; use the command-line method below only if the update fails, times out, or the page is closed.',
            'intro_optional' => 'This environment is suitable for browser update. Prefer “Update Now” in the page header; use the command-line method below only if the update fails, times out, or the page is closed.',
            'optional_heading' => 'Command-line update',
            'optional_heading_fallback' => 'Command-line update (fallback)',
            'progress_cli_heading' => 'Command-line resume (optional)',
            'guidance_lines' => [
                'Open a server terminal or panel terminal, change into the DBErp project directory, then run the command below.',
                'If you connect with SSH, you can run the same command in the SSH session.',
                'If you deploy with Docker, run the command inside the corresponding container.',
                'Some hosting panels or shared hosts disable process functions, which can make browser updates unreliable.',
            ],
            'cd_label' => 'Change to project directory',
            'run_label' => 'Run update command',
            'combined_label' => 'Copy all (recommended)',
            'copy_hint' => 'Copy the full block into a server terminal and run it from the project root (the directory that contains artisan).',
            'copy_hint_windows' => 'Run the two lines in order: first change directory, then paste the second line into PowerShell (it already includes the & call operator). Use php.exe, not php-cgi.exe.',
            'php_detected_hint' => 'The CLI path was filled from the current PHP environment. If it differs from the site PHP binary, replace it with the PHP executable used by the site.',
            'php_cgi_to_cli_hint' => 'The web environment reported php-cgi; the command was switched to php.exe in the same directory (Artisan requires CLI).',
            'php_default_hint' => 'No usable PHP CLI path was detected, so the command starts with php. Ensure the terminal php matches the site PHP major version.',
            'advanced_commands_label' => 'Step-by-step commands (optional)',
        ],
        'recovery_guidance' => [
            'terminal_note' => 'After fixing the environment, resume if the task is still in progress. If it failed or you need a fresh upgrade, use the full update command below (no execution number) or “Update Now” in the page header.',
            'topics' => [
                'proc_open_disabled' => [
                    'title' => 'Process functions disabled',
                    'steps' => [
                        'The web PHP build may disable proc_open and related functions, so maintenance mode or subprocess steps cannot run reliably in the browser.',
                        'In the hosting panel or provider PHP settings, remove proc_open, proc_close, proc_get_status, and proc_terminate from disable_functions (use the exact names in your config), save, then restart PHP-FPM.',
                        'If the shared-host policy cannot be changed, run the command-line update below from a server or panel terminal.',
                        'Afterwards, reopen “Update Environment Diagnostics” and confirm the process-function checks pass.',
                    ],
                ],
                'project_not_writable' => [
                    'title' => 'Project directory not writable',
                    'steps' => [
                        'The update must write application files into the project directory; the current web user may lack write permission.',
                        'Ensure the site code owner matches the PHP-FPM user (often www or nginx). Prefer directory mode 755 and file mode 644; do not use chmod -R 777.',
                        'If files were uploaded as root or another user, chown the project directory to the PHP runtime user over SSH, then retry.',
                        'After fixing permissions, resume from the terminal with the command below, or create a new task and run again.',
                    ],
                ],
                'env_not_writable' => [
                    'title' => '.env not writable',
                    'steps' => [
                        'After the update finishes, version values must be written to .env, but .env is not writable by the web PHP user.',
                        'Adjust .env ownership or permissions so the PHP-FPM user can write it, without exposing secrets to the public web.',
                        'Re-run environment diagnostics and confirm “.env writable” passes before updating again.',
                    ],
                ],
                'bootstrap_cache_not_writable' => [
                    'title' => 'bootstrap/cache not writable',
                    'steps' => [
                        'Laravel needs to write config and route caches under bootstrap/cache; if that directory is not writable, cache clearing after update can fail.',
                        'Ensure bootstrap/cache is writable by the PHP runtime user (directory 755 or 775; do not use 777).',
                        'After fixing permissions, run php artisan optimize:clear with the site PHP binary, then retry the update.',
                    ],
                ],
                'vendor_not_writable' => [
                    'title' => 'vendor directory not writable',
                    'steps' => [
                        'Full update packages may replace vendor files, but vendor is not writable by the web PHP user.',
                        'Change vendor ownership to the PHP-FPM user, or deploy dependencies with the site PHP from a terminal before updating.',
                        'After fixing permissions, resume from the command line below instead of extracting for a long time in the browser.',
                    ],
                ],
                'zip_archive_unavailable' => [
                    'title' => 'ZIP extraction unavailable',
                    'steps' => [
                        'zip / ZipArchive was not detected, so official ZIP update packages cannot be extracted.',
                        'Install and enable the zip extension for the current PHP version, then restart PHP-FPM or the web service.',
                        'Some panels (for example BaoTa, 1Panel, DBPanel) can install zip under PHP extensions; on shared hosting, ask the provider to enable it.',
                        'Re-run environment diagnostics and confirm “ZIP extraction capability” passes.',
                    ],
                ],
                'package_extraction' => [
                    'title' => 'Package extraction failed',
                    'steps' => [
                        'Extraction into staging failed. Common causes include low disk space, a damaged package, or open_basedir restrictions.',
                        'Ensure storage and the update workspace have enough free space, and that PHP open_basedir includes the project root and /tmp.',
                        'Re-download and verify the package in System Update Center, then retry with the terminal command below.',
                        'If it keeps failing, keep the execution number and contact support. After a successful update the system reclaims old backups and keeps only the latest successful one. Do not manually delete this failed task’s backups directory.',
                    ],
                ],
                'maintenance_mode' => [
                    'title' => 'Maintenance mode not cleared',
                    'steps' => [
                        'The update may have entered maintenance mode but did not leave it successfully, so the site shows a maintenance page.',
                        'Check whether storage/framework/down exists. If the update stopped, run php artisan up from the project root with the site PHP binary.',
                        'If up fails, check storage/logs and fix permission or PHP CLI path issues as indicated.',
                        'After the site is reachable again, decide whether to create a new update task or resume from the terminal based on the failed step.',
                    ],
                ],
                'migration_failure' => [
                    'title' => 'Database migration failed',
                    'steps' => [
                        'Application files may already be partly updated, but migrations did not finish. The system does not roll back the database automatically.',
                        'Review the migration error in the execution log, back up the database, then follow official documentation for manual recovery.',
                        'Do not click “Update Now” repeatedly without a backup. If needed, restore application files with “Restore previous version files” first.',
                        'After the database issue is fixed, resume the same task from a terminal or contact support to verify schema state.',
                    ],
                ],
                'package_integrity' => [
                    'title' => 'Package integrity or signature check failed',
                    'steps' => [
                        'The downloaded package failed integrity or signature verification. This can be caused by network interruption, a damaged cache file, or a proxy altering the download.',
                        'In System Update Center, check for updates again, re-download the package, and create a task only after verification passes.',
                        'If you use a CDN or reverse proxy, ensure large download responses are not cached incorrectly.',
                        'If it keeps failing, record the task number and check time, then contact official support.',
                    ],
                ],
                'backup_or_rollback' => [
                    'title' => 'Backup or rollback failure',
                    'steps' => [
                        'A problem occurred during pre-update backup or rollback. Do not continue overwriting files.',
                        'In System Update Center, review “Rollback status” and execution logs, and try “Restore previous version files” first.',
                        'Database changes are not undone automatically. If migrations already ran, follow the migration-failure guidance.',
                        'If rollback still fails, keep the task backups directory under storage/app/dberp/updates and contact support.',
                    ],
                ],
                'unknown_failure' => [
                    'title' => 'Update failed — follow these steps',
                    'steps' => [
                        'Review “Latest Update Result” and execution logs on this page, and note the task number and failure time.',
                        'Open “Update Environment Diagnostics” and fix blocking items and warnings for directory permissions, PHP extensions, and process functions.',
                        'During off-peak hours, check the official version again; create a new task if needed, and run the command below from a server terminal.',
                        'If the site is unreachable, leave maintenance mode first (php artisan up), then continue with permissions and environment checks.',
                        'If the issue remains, export the execution logs and contact support. After a successful update the system reclaims old backups and keeps only the latest successful one. Do not manually delete this failed task’s backups.',
                    ],
                ],
                'unknown_failure_with_environment' => [
                    'steps' => [
                        'Environment diagnostics found: :environment_reason',
                        'Fix the issues using the suggestions in “Update Environment Diagnostics” first.',
                        'Afterwards, resume or recreate the task from a server or panel terminal with the command below.',
                        'Browser one-click update cannot complete reliably in the current environment.',
                    ],
                ],
            ],
        ],
        'cli' => [
            'panel_intro_blocked' => 'This environment is not suitable for running a system update directly in the browser. Open a server or panel terminal, change into the DBErp project directory, then run the command below.',
            'panel_intro_risky' => 'Warnings were reported; a browser update may fail due to timeout or low memory. Prefer running the command below from a terminal during off-peak hours.',
            'panel_execution_hint' => 'Resume the current in-progress task:',
            'panel_full_run_hint' => 'Full update (check → download → install). Copy into a server terminal:',
            'panel_full_run_after_failure_hint' => 'The previous task has finished. Use the command below to run a full update again:',
            'panel_blocked_no_execution_hint' => 'This environment is not suitable for browser update. Fix the environment diagnostics first, then run a full update from a terminal with the command below.',
            'panel_risky_no_execution_hint' => 'You can use “Update Now” in the page header, or run a full update from a terminal with the command below (no execution number required).',
            'panel_browser_primary_hint' => 'If “Update Now” in the page header fails or is interrupted, use the command below:',
            'panel_terminal_failure_hint' => 'This task has ended and cannot be resumed with the same number. Follow the recovery guidance above, then run the full update command below, or check for updates again and click “Update Now”.',
            'panel_copy_hint' => 'Run from the site project root (the directory that contains artisan).',
            'output' => [
                'full_started' => 'Starting the full system update flow (check official version → download → install)…',
                'started' => 'Starting system update task: :execution_no',
                'migration_progress' => 'Migration progress: completed :completed / :total, remaining :pending',
                'batch_progress' => 'Current step progress: completed :processed / :total (:percent%)',
            ],
            'success' => [
                'completed' => 'System update task :execution_no completed successfully.',
            ],
            'errors' => [
                'execution_not_found' => 'Update task “:execution_no” was not found. Create a task in System Update Center or verify the number.',
                'already_completed' => 'Update task :execution_no is already completed; no need to run it again.',
                'not_retryable' => 'Update task :execution_no is in status “:status” and will not be retried automatically from the command line.',
                'another_execution_active' => 'Another update task is already in progress (:execution_no). Wait for it to finish or resolve it before retrying.',
                'manual_intervention' => 'Update task :execution_no needs manual intervention: :reason',
                'entitlement_denied' => 'This site is not entitled to run a system update: :reason',
                'step_failed' => 'An update step failed and the task was aborted.',
                'unexpected_terminal_status' => 'The update flow ended, but the task status is “:status”. Check details in System Update Center.',
                'unexpected_failure' => 'An unexpected error occurred during the system update. Check storage/logs or contact support.',
            ],
            'suggestions' => [
                'not_retryable' => 'To upgrade again, check the official version in System Update Center and create a new update task.',
                'another_execution_active' => 'Review the in-progress task in System Update Center. Do not run multiple update tasks at the same time.',
                'manual_intervention' => 'Use “Restore previous version files” in System Update Center or contact support as prompted. Database changes are not rolled back automatically.',
                'generic_failure' => 'Review execution records and server logs in System Update Center, fix the environment, then create a new task and run it from a terminal.',
                'check_execution_logs' => 'Open System Update Center, review the failed step details, adjust directory permissions or PHP settings as suggested, then retry.',
            ],
        ],
        'environment_diagnostics' => [
            'panel_intro' => 'Before running a one-click update in the browser, confirm that the current web runtime has the required write permissions and PHP capabilities. Some hosting panels or shared hosts disable process functions, or run PHP-FPM as a user that does not own the site files.',
            'summary_label' => 'Diagnostic summary',
            'blocking_count_label' => 'Blocking items',
            'warning_count_label' => 'Warnings',
            'suggestion_label' => 'Suggested action',
            'status' => [
                'pass' => 'Pass',
                'warn' => 'Warning',
                'fail' => 'Failed',
            ],
            'level' => [
                'info' => 'Info',
                'warning' => 'Warning',
                'blocking' => 'Blocking',
            ],
            'summary' => [
                'ready' => 'The environment meets the basic requirements for browser one-click update. You can try updating (still prefer off-peak hours and a backup).',
                'warning' => ':count warning(s) found. They do not block starting the update, but large packages or long steps may fail due to timeout or low memory. Review the notes below.',
                'blocking' => ':count blocking issue(s) found. Browser one-click update cannot complete reliably. Adjust the server environment using the suggestions below first.',
            ],
            'items' => [
                'process_function' => 'Process control function :function',
                'zip_archive' => 'ZIP extraction (ZipArchive)',
                'phar_tar_gz' => 'tar.gz extraction (Phar)',
                'writable_base_path' => 'Project root writable',
                'writable_update_workspace' => 'Update workspace writable',
                'writable_update_packages' => 'Update package download directory writable',
                'writable_update_staging' => 'Update staging directory writable',
                'writable_update_backups' => 'Update backup directory writable',
                'writable_bootstrap_cache' => 'bootstrap/cache writable',
                'writable_env' => '.env writable',
                'writable_project_files' => 'Application files directory writable (app/)',
                'writable_vendor' => 'vendor directory writable',
                'open_basedir' => 'open_basedir restriction',
                'php_runtime_user' => 'Current PHP runtime user',
                'max_execution_time' => 'max_execution_time',
                'memory_limit' => 'memory_limit',
                'php_binary' => 'PHP CLI path',
                'diagnostic_runtime' => 'Update environment diagnostics',
            ],
            'messages' => [
                'process_function_ok' => 'Function :function is available for maintenance-mode and cache-clear subprocesses.',
                'process_function_fail' => 'Function :function is unavailable (it may be disabled by disable_functions).',
                'zip_archive_ok' => 'zip / ZipArchive is available; official ZIP update packages can be extracted.',
                'zip_archive_fail' => 'zip extension or ZipArchive was not detected; update packages cannot be extracted.',
                'phar_ok' => 'Phar extension is available; tar.gz update packages can be extracted.',
                'phar_warn' => 'Phar extension is unavailable; tar.gz official packages cannot be extracted (ZIP packages are unaffected).',
                'directory_writable' => 'Directory is writable: :path',
                'directory_not_writable' => 'Directory is not writable: :path',
                'env_writable' => '.env is writable; the version can be written after update.',
                'env_not_writable' => '.env is not writable; the version cannot be written after update.',
                'project_files_writable' => 'app/ is writable; application files can be replaced.',
                'project_files_not_writable' => 'app/ is not writable; application files cannot be replaced (check whether the owner matches the PHP-FPM user, such as www).',
                'vendor_writable' => 'vendor/ is writable; package vendor files can be applied.',
                'vendor_not_writable' => 'vendor/ is not writable; dependency files cannot be replaced.',
                'open_basedir_not_set' => 'open_basedir is not configured.',
                'open_basedir_ok' => 'open_basedir does not block the project or storage paths.',
                'open_basedir_blocked' => 'open_basedir may block these paths: :paths',
                'php_runtime_user' => 'The current web request runs as user “:user”.',
                'runtime_user_unknown' => 'Unknown',
                'max_execution_time_unlimited' => 'max_execution_time is 0 (unlimited for a single request).',
                'max_execution_time_ok' => 'max_execution_time is :seconds seconds.',
                'max_execution_time_low' => 'max_execution_time is only :seconds seconds; extracting or replacing large packages may time out.',
                'memory_limit_ok' => 'memory_limit is :limit.',
                'memory_limit_low' => 'memory_limit is :limit; extracting large packages may run out of memory.',
                'unlimited' => 'Unlimited',
                'php_binary_ok' => 'Usable PHP CLI confirmed: :path',
                'php_binary_inferred_ok' => 'PHP CLI was auto-detected from the current web PHP install directory: :path',
                'php_binary_unknown' => 'No usable PHP CLI path was detected in this web environment. Browser update defaults to in-process mode and usually still works.',
                'php_binary_missing' => 'Configured PHP CLI path does not exist: :path',
                'php_binary_not_executable' => 'Configured PHP CLI path exists but is not executable: :path',
                'php_binary_non_cli_runtime' => 'Current runtime is :sapi. The web process is bound to PHP-FPM (:path), which cannot be used as CLI.',
                'php_binary_unverifiable' => 'A PHP CLI path is configured, but the web process cannot verify it due to open_basedir: :path. This does not necessarily mean the file is missing.',
                'php_binary_inferred_unverifiable' => 'PHP CLI was inferred from the PHP-FPM install path: :path (the web process cannot verify it; manual configuration is usually unnecessary).',
                'diagnostic_runtime_warn' => 'Some environment diagnostic items could not finish. This does not prevent opening Update Center; review completed items below or use a server terminal update.',
            ],
            'suggestions' => [
                'process_function_fail' => 'In the hosting panel or provider PHP settings, remove proc_open, proc_close, proc_get_status, and proc_terminate from the disabled functions list, save, then restart PHP-FPM. Some panels (for example BaoTa or 1Panel) expose this under “PHP → Disabled functions”.',
                'zip_archive_fail' => 'Install and enable the zip extension for the current PHP version, then restart PHP-FPM. Some panels (for example BaoTa, 1Panel, or DBPanel) can install zip under PHP extension management.',
                'phar_warn' => 'Enable the phar extension if you need tar.gz update packages; ignore this when using ZIP packages only.',
                'directory_not_writable' => 'Change the site directory owner to the PHP-FPM user (often www). Prefer directory mode 755 and file mode 644; do not use 777. Run chown from an SSH terminal as shown in your panel.',
                'env_not_writable' => 'Make .env writable by the PHP-FPM user, or adjust ownership/permissions and retry.',
                'project_files_not_writable' => 'Application files must be writable by the PHP-FPM user. If code was uploaded as root or another user, chown the directories to the site runtime user from SSH.',
                'vendor_not_writable' => 'The vendor directory must be writable by the PHP-FPM user; full update packages usually replace vendor files.',
                'open_basedir_blocked' => 'In the site PHP settings, include the project root and /tmp in open_basedir, or relax the restriction per your host documentation.',
                'php_runtime_user' => 'Confirm that user can write to the project root, storage, and .env. Ownership mismatches with uploaded code are the most common cause.',
                'max_execution_time_low' => 'Increase max_execution_time in PHP settings, or run a command-line update from a server terminal / SSH during off-peak hours.',
                'memory_limit_low' => 'Increase memory_limit in PHP settings (256M or higher is recommended).',
                'php_binary_unknown' => 'Browser one-click update defaults to in-process maintenance mode; most panel environments do not need a CLI setting. If subprocess-mode updates fail, set DBERP_PHP_CLI_BINARY in .env.',
                'php_binary_unusable' => 'Confirm that DBERP_PHP_CLI_BINARY (or the PHP executable in a CLI environment) points to an executable PHP CLI that matches the site PHP major version.',
                'php_binary_configure_cli' => 'Automatic CLI inference from the PHP-FPM path did not succeed. Optionally set DBERP_PHP_CLI_BINARY in .env (for example /www/server/php/85/bin/php), or run the update from a server terminal.',
                'php_binary_unverifiable' => 'You do not need to relax open_basedir just for verification. Confirm the path is a real PHP CLI on the server, or use a terminal update.',
                'php_binary_inferred_unverifiable' => 'This is a normal notice on many panel hosts and can usually be ignored. Browser update does not depend on a CLI subprocess by default. Set DBERP_PHP_CLI_BINARY only if an update fails and logs indicate CLI is unavailable.',
                'diagnostic_runtime_warn' => 'Refresh the page and retry. If the issue persists, run a command-line update from a server terminal / SSH.',
            ],
        ],
        'workflow' => [
            'one_click_hint' => 'Click “Update Now” to check, download, and install the official main-program full package automatically.',
            'required_update_hint' => 'This release is marked as required and its reminder cannot be dismissed. Back up the system and install it promptly. Production files are never changed without operator confirmation.',
            'maintenance_notice' => 'The site may be briefly unavailable during the update and will recover when finished.',
            'recovery_hint' => 'If the application misbehaves after an update, you can restore program files from backup here. Database changes are not reverted automatically.',
            'update_in_progress_notice' => 'An update is running. Do not close the page or click “Update Now” again.',
            'preparing_update' => 'Preparing the update, please wait…',
            'hint' => 'Recommended: Check → Download → Verify → Create task → Start update → Review results.',
            'sync_limitation' => 'Phase 1 runs synchronously in the web request and may hit PHP timeouts.',
        ],
        'risk' => [
            'level_low' => 'Low',
            'level_medium' => 'Medium',
            'level_high' => 'High',
            'level_unknown' => 'Pending official assessment',
        ],
        'status' => [
            'unknown' => 'Unknown',
            'pending' => 'Pending',
            'prechecking' => 'Prechecking',
            'ready' => 'Ready',
            'running' => 'Running',
            'completed' => 'Completed',
            'failed' => 'Failed',
            'cancelled' => 'Cancelled',
            'rollback_required' => 'Rollback Required',
            'manual_recovery_required' => 'Manual Recovery or Resume Required',
            'rolling_back' => 'Rolling Back',
            'rolled_back' => 'Rolled Back',
            'rollback_failed' => 'Rollback Failed',
        ],
        'step' => [
            'unknown' => 'Unknown Step',
            'created' => 'Task Created',
            'precheck' => 'Precheck',
            'backup' => 'Backup',
            'maintenance_down' => 'Enter Maintenance',
            'extract_staging' => 'Extract Staging',
            'verify_staging' => 'Verify Staging',
            'replace_files' => 'Replace Files',
            'replace_vendor' => 'Vendor Update',
            'run_migrations' => 'Run Migrations',
            'clear_cache' => 'Clear Cache',
            'write_version' => 'Write Version',
            'maintenance_up' => 'Leave Maintenance',
            'completed' => 'Completed',
            'failed' => 'Failed',
            'rollback' => 'Rollback',
        ],
        'log_status' => [
            'unknown' => 'Unknown',
            'started' => 'Started',
            'completed' => 'Completed',
            'failed' => 'Failed',
            'skipped' => 'Skipped',
            'transition' => 'Transition',
        ],
        'check_status' => [
            'never' => 'Never Checked',
            'success' => 'Success',
            'failed' => 'Failed',
        ],
        'package' => [
            'download_status' => [
                'not_downloaded' => 'Not Downloaded',
                'unknown' => 'Unknown',
                'token_issued' => 'Token Issued',
                'downloading' => 'Downloading',
                'downloaded' => 'Downloaded',
                'verified' => 'Verified',
                'verification_failed' => 'Verification Failed',
                'failed' => 'Failed',
            ],
            'checksum' => [
                'verified' => 'Verified',
                'not_verified' => 'Not Verified',
            ],
            'manifest' => [
                'not_parsed' => 'Not Parsed',
                'unknown' => 'Unknown',
                'valid' => 'Valid',
                'invalid' => 'Invalid',
                'unsupported' => 'Unsupported',
                'parse_failed' => 'Parse Failed',
            ],
        ],
        'entitlement' => [
            'allowed' => 'Allowed',
            'denied' => 'Denied',
        ],
        'values' => [
            'never_checked' => 'Never checked',
            'update_available_yes' => 'Update available',
            'update_available_required' => 'Required update',
            'update_available_no' => 'Up to date',
            'unknown_latest' => 'Run “Check for Updates” first',
            'channel_stable' => 'Stable',
            'channel_rc' => 'Preview (RC)',
            'channel_unknown' => 'Unspecified',
            'result_never' => 'No online update run yet',
            'result_success' => 'Last update succeeded',
            'result_failed' => 'Last update failed',
            'result_needs_recovery' => 'Recovery required',
            'result_manual_recovery' => 'Manual repair and confirmation required',
            'result_recovering' => 'Recovering',
            'result_recovered' => 'Files restored from backup',
            'result_recovery_failed' => 'Recovery failed',
            'result_in_progress' => 'Update in progress',
            'result_pending' => 'Waiting to start',
            'result_unknown' => 'Unknown',
            'result_finished_at' => 'Finished at: :time',
            'no_execution_logs' => 'No detailed log yet',
        ],
        'errors' => [
            'invalid_start_status' => 'Execution status (:status) cannot be started. Create a new task.',
            'no_update_available' => 'Already on the latest version.',
            'package_not_ready' => 'The official package failed validation.',
            'environment_not_ready' => 'The server environment does not meet the requirements for browser one-click update. Open “Update Environment Diagnostics” and resolve blocking items first.',
            'update_already_running' => 'An update is already in progress.',
            'step_session_not_found' => 'Update progress expired. Refresh the page and try again.',
            'browser_update_interrupted' => 'The update was interrupted or failed. The system tried to leave maintenance mode. Refresh this page for the failure reason and recovery guidance. If the whole site still shows maintenance mode, run php artisan up on the server.',
        ],
        'step_phases' => [
            'bootstrap_check' => 'Checking with official service',
            'bootstrap_download' => 'Downloading official package',
            'bootstrap_parse' => 'Parsing update manifest',
            'bootstrap_create_execution' => 'Creating update task',
            'maintenance_down' => 'Enabling maintenance mode',
            'precheck' => 'Running pre-update checks',
            'extract_staging' => 'Extracting update package',
            'backup' => 'Backing up application files',
            'replace_files' => 'Replacing application files',
            'replace_vendor' => 'Applying vendor files',
            'reset_runtime' => 'Resetting the PHP runtime cache',
            'clear_bootstrap_cache' => 'Clearing bootstrap caches',
            'runtime_readiness' => 'Validating the new runtime',
            'migrate_batch' => 'Running database migrations',
            'clear_cache' => 'Clearing application cache',
            'post_update_health_check' => 'Running the update health check',
            'write_version' => 'Writing version metadata',
            'commit_vendor_backup' => 'Committing the dependency switch',
            'complete' => 'Finishing update',
        ],
        'notifications' => [
            'permission_denied_title' => 'Permission Denied',
            'permission_denied_body' => 'Your account cannot perform this update action.',
            'entitlement_denied_title' => 'Official Update Unavailable',
            'check_success_title' => 'Check Completed',
            'check_success_body_up_to_date' => 'No update is available. Your system is already on the latest official version.',
            'check_success_body_has_update' => 'A newer official version is available. See “Version & Update” below.',
            'update_now_success_title' => 'Update Completed',
            'update_now_success_body' => 'The system was upgraded to the latest compatible official version.',
            'update_now_failed_title' => 'Update Not Completed',
            'update_now_failed_body' => 'The update could not be completed. See Latest Update Result below or contact support.',
            'update_in_progress_title' => 'Update In Progress',
            'update_in_progress_body' => 'Please wait for the current update to finish.',
            'check_failed_title' => 'Check Failed',
            'download_success_title' => 'Download Completed',
            'download_success_body' => 'The package was downloaded and checksum-verified.',
            'download_failed_title' => 'Download Failed',
            'parse_success_title' => 'Parse Completed',
            'parse_success_body' => 'Manifest was parsed and validated.',
            'parse_failed_title' => 'Parse Failed',
            'create_execution_success_title' => 'Task Created',
            'create_execution_success_body' => 'Update task :execution_no was created.',
            'create_execution_failed_title' => 'Create Task Failed',
            'no_pending_execution_title' => 'No Pending Task',
            'no_pending_execution_body' => 'Create an update task first.',
            'execution_success_title' => 'Update Completed',
            'execution_success_body' => 'System update completed successfully.',
            'execution_failed_title' => 'Update Not Completed',
            'execution_failed_body' => 'System update did not complete successfully.',
            'rollback_unavailable_title' => 'Rollback Unavailable',
            'rollback_unavailable_body' => 'No execution is in rollback-required state.',
            'rollback_success_title' => 'Rollback Completed',
            'rollback_success_body' => 'Files and version keys were restored from backup.',
            'rollback_failed_title' => 'Rollback Failed',
        ],
    ],

    'system_update_notice' => [
        'title' => 'New version available: :product :version',
        'fallback_summary' => 'A new system update is available. Open System Update Center to review release notes before proceeding.',
        'banner' => [
            'title' => 'New version available: :product :version',
            'description' => 'Review the release notes before proceeding.',
            'description_required' => 'This release is marked as required. Its reminder cannot be dismissed; back up the system and install it promptly.',
            'description_onboarding_required' => 'An update is available. Complete system access before performing an online upgrade.',
            'description_connectivity_required' => 'An update is available. Online checks and upgrades are temporarily unavailable; verify system access and network connectivity.',
        ],
        'panel' => [
            'title' => 'System update reminder',
            'summary_label' => 'Release notes summary',
            'latest_version_label' => 'Latest version',
            'last_checked_label' => 'Last checked',
        ],
        'level' => [
            'normal' => 'Normal',
            'required' => 'Required',
        ],
        'actions' => [
            'view_update' => 'View update',
            'view_release_notes' => 'View release notes',
            'open_site_onboarding' => 'Open system access center',
            'mark_read' => 'Mark as read',
            'dismiss' => 'Dismiss this version',
        ],
        'messages' => [
            'marked_read' => 'Marked as read',
            'dismissed' => 'This version reminder was dismissed',
        ],
        'hints' => [
            'local_snapshot' => 'Update details reflect the most recent check. Use Check for updates to refresh status.',
        ],
        'confirm' => [
            'dismiss_heading' => 'Dismiss this version',
            'dismiss' => 'You will not see this reminder for this version again. Download and install are unaffected. Continue?',
        ],
        'navigation' => [
            'badge' => 'New',
        ],
        'auto_check' => [
            'disabled' => 'Automatic update checks are disabled',
            'skipped' => 'Automatic update check was not triggered',
            'queued' => 'Update check queued in the background',
            'failed_silently' => 'Automatic update check did not complete (your session is unaffected)',
        ],
    ],

    'system_information' => [
        'page_title' => 'System Information',
        'intro' => 'Use this page to confirm the current DBErp version, software copyright, support center service status, and runtime state.',
        'official_service_intro' => 'Official services provide product support, issue feedback, version updates, and license services.',
        'sections' => [
            'product' => 'Product Information',
            'license' => 'Software Copyright & Commercial Use',
            'authorization_overview' => 'Support Center Service',
            'official_service' => 'Official Service',
            'update' => 'Update Information',
        ],
        'license' => [
            'section_intro' => 'Product copyright and commercial use license from installation configuration. Separate from the support center service snapshot below.',
        ],
        'actions' => [
            'open_official_service_center' => 'Official Service Center',
            'purchase_copyright_license' => 'Purchase on official site',
        ],
        'rows' => [
            'product_name' => 'Product Name',
            'current_version' => 'Current Version',
            'release_date' => 'Release Date',
            'product_status' => 'Product Status',
            'usage_version' => 'Usage Edition',
            'commercial_authorization' => 'Copyright commercial license',
            'license_holder' => 'Copyright license holder',
            'license_valid_until' => 'Copyright license valid until',
            'copyright_notice' => 'Copyright Information',
            'license_explanation' => 'Description',
            'official_support' => 'Official Support',
            'service_status' => 'Service Status',
            'service_identifier' => 'Service Identifier',
            'official_support_entry' => 'Official Support Entry',
            'update_current_version' => 'Current Version',
            'update_status' => 'Update Status',
            'update_center_link' => 'System Update Center',
            'version_notes' => 'Release Notes',
            'update_guidance' => 'Get Updates',
        ],
        'authorization_overview' => [
            'section_intro' => 'Summary of support center registration and service snapshot (no bound domains, entitlements, or sync logs). Sync or view full details in System Authorization Center.',
            'site_bound_yes' => 'Official site binding is active',
            'site_bound_no' => 'Official site binding is not completed',
            'service_expiry_not_available' => 'No official record yet or not synced',
            'remaining_service_not_available' => 'No official record yet or not synced',
            'open_admin_page' => 'Open “:page”',
            'authorization_center_no_access_hint' => 'Your account cannot open System Authorization Center. Ask an administrator to grant access if you need full official authorization details.',
            'update_center_no_access_hint' => 'Your account cannot open System Update Center. Ask an administrator to grant access if you need to check or run official updates.',
            'rows' => [
                'authorization_status' => 'Registration authorization status',
                'license_edition' => 'Public edition label',
                'site_binding' => 'Official site binding',
                'site_connection' => 'Support connectivity readiness',
                'official_service_status' => 'Service runtime status',
                'service_expires_at' => 'Service expiry time',
                'remaining_service_days' => 'Remaining service days',
                'authorization_center_link' => 'System Authorization Center',
                'update_center_link' => 'System Update Center',
            ],
        ],
        'values' => [
            'product_status_pending_install' => 'Installation initialization pending',
            'product_status_running' => 'Running normally',
            'product_status_non_production' => 'Running in a non-production environment',
            'usage_version_free_commercial' => 'Free Edition',
            'usage_version_commercial_licensed' => 'Commercial Edition',
            'commercial_authorization_unlicensed' => 'Not purchased',
            'commercial_authorization_licensed' => 'Purchased',
            'copyright_notice_restricted' => 'System copyright notice must be retained',
            'copyright_notice_licensed' => 'Copyright commercial license purchased; notice may be modified or removed per agreement',
            'license_explanation_free_commercial' => 'The Free Edition may be used for commercial operations. To remove or modify footer/system copyright notices, purchase a copyright commercial license.',
            'official_support_included' => 'Official product support service included',
            'support_center_connected' => 'Connected to Loongdom Support Center',
            'support_center_enabled_local' => 'Enabled locally; remote connection is not configured',
            'support_center_not_connected' => 'Not connected to the remote support center',
            'update_status_current_install' => 'The current installed version is ready',
            'update_status_not_checked' => 'Official update check has not been run',
            'update_status_check_failed' => 'Last check failed; open System Update Center to retry',
            'update_status_update_available' => 'A new version is available; open System Update Center',
            'update_status_up_to_date' => 'Up to date based on the last successful check',
            'update_guidance_official_channel' => 'To obtain the latest version, please confirm through official channels.',
            'update_guidance_open_center' => 'Open System Update Center to check and run official updates.',
            'version_notes_via_official' => 'View release notes through official channels.',
            'official_support_entry_default' => 'Contact Loongdom through official channels.',
        ],
    ],
    'audit' => [
        'filter_action_keyword' => 'Action Keyword',
        'filter_category' => 'Log Type',
        'filter_category_all' => 'All Types',
        'filter_correlation_id' => 'Request Batch ID',
        'correlation_id' => 'Request Batch',
        'correlation_id_short' => 'Batch',
        'correlation_id_copied' => 'Batch ID copied',
        'batch_group_label' => 'Request Batch',
        'batch_no_correlation' => 'No Batch',
        'batch_no_correlation_hint' => 'Legacy record or log written outside an HTTP request context.',
        'batch_correlation_hint' => 'Batch ID: :id',
        'batch_record_count' => '{1} :count record|[2,*] :count records',
        'categories' => [
            'business' => 'Business Action',
            'field_change' => 'Field Change',
            'security' => 'Security Block',
            'system' => 'System Operation',
        ],
        'filter_created_from' => 'Start Date',
        'filter_created_until' => 'End Date',
        'purge_expired_action' => 'Purge Expired Logs',
        'purge_expired_modal_heading' => 'Purge Expired Audit Logs',
        'purge_expired_modal_description' => 'This will permanently delete records whose Created At time is more than :days days before the current time, following the scheduled task rule. This action cannot be undone.',
        'purge_completed_title' => 'Cleanup Complete',
        'purge_completed_body' => 'Deleted :count records; records from the most recent :days days were retained.',
        'purge_nothing_title' => 'No Cleanup Needed',
        'purge_nothing_body' => 'There are no audit records older than :days days.',
        'trail_created' => 'Created',
        'trail_updated' => 'Updated',
        'trail_deleted' => 'Deleted',
        'operator_system' => 'System',
        'unknown_action' => 'Other Operation',
        'auditable_summary' => 'Related Object',
        'meta_heading' => 'Record Information',
        'auditable_type_none' => '(Type not specified)',
        'nested_value_omitted' => '(Details omitted)',
        'snapshot_keys' => [
            'login_identifier' => 'Login Identifier',
            'login_account' => 'Login Account',
            'reason' => 'Reason',
            'report_name' => 'Report Name',
            'report_key' => 'Report Code',
            'filter_summary' => 'Filter Summary',
            'deleted_count' => 'Deleted Count',
            'older_than_days' => 'Retention Days',
            'cutoff_at' => 'Cutoff Time',
            'reason' => 'Reason',
            'reasons' => 'Reason Details',
            'result' => 'Result',
            'permissions' => 'Permissions',
            'roles' => 'Role',
            'remark' => 'Remarks',
            'customer_category_id' => 'Customer Category',
            'supplier_category_id' => 'Supplier Category',
            'old_values' => 'Before Change',
            'new_values' => 'After Change',
            'remaining' => 'Remaining Quantity',
            'ship_quantity' => 'Outbound Quantity',
            'sales_order_item_id' => 'Sales Line Item',
        ],
        'resource_fallback' => [
            'inventory_warning' => 'Inventory Warning',
        ],
        'entity' => [
            'User' => 'Admin Account',
            'DberpAdminRole' => 'Role',
            'DberpSystemProfile' => 'System Parameters',
            'DberpSalesOrder' => 'Sales Order',
            'DberpSalesOutboundOrder' => 'Sales Outbound Order',
            'DberpSalesReturnOrder' => 'Sales Return Order',
            'DberpSalesQuote' => 'Quote',
            'DberpPurchaseOrder' => 'Purchase Order',
            'DberpPurchaseReceiptOrder' => 'Purchase Arrival Order',
            'DberpPurchaseReturnOrder' => 'Purchase Return Order',
            'DberpPurchaseRequest' => 'Purchase Request',
            'DberpPurchaseException' => 'Purchase Exception',
            'DberpCustomer' => 'Customer Profile',
            'DberpCustomerCategory' => 'Customer Category',
            'DberpSupplier' => 'Supplier Profile',
            'DberpSupplierCategory' => 'Supplier Category',
            'DberpProduct' => 'Product Profile',
            'DberpReceiptOrder' => 'Receipt Order',
            'DberpPaymentOrder' => 'Payment Order',
            'DberpSettlementWriteOff' => 'Write-off Document',
            'DberpSettlementStatement' => 'Statement',
            'DberpSettlementAdjustment' => 'Settlement Adjustment',
            'DberpWarehouse' => 'Warehouse Profile',
            'DberpEmployee' => 'Employee',
            'DberpInventoryTransaction' => 'Inventory Transaction',
            'DberpInventoryBalance' => 'Inventory Balance',
            'DberpInventoryBatch' => 'Inventory Batch',
            'DberpInventorySerialNumber' => 'Serial Number',
            'DberpInventoryRule' => 'Inventory Rule',
            'DberpInventoryReplenishmentSuggestion' => 'Replenishment Suggestion',
            'DberpStocktakeOrder' => 'Stocktake Order',
            'DberpStocktakeDifference' => 'Stocktake Difference',
            'DberpTransferOrder' => 'Transfer Order',
            'DberpOtherStockInOrder' => 'Other Stock-in Order',
            'DberpOtherStockOutOrder' => 'Other Stock-out Order',
            'DberpInventoryException' => 'Inventory Exception',
            'DberpRegion' => 'Region',
            'DberpDictionaryType' => 'Dictionary Type',
            'DberpDictionaryItem' => 'Dictionary Item',
            'DberpNumberSequence' => 'Numbering Rules',
            'DberpCustomerPriceRule' => 'Customer Price Rule',
            'DberpUserPermissionGrant' => 'Permission Grant',
            'DberpProductBrand' => 'Product Brand',
            'DberpProductCategory' => 'Product Category',
            'DberpUnit' => 'Unit of Measure',
            'DberpProductSku' => 'Product Spec Combination',
            'DberpReceivableRecord' => 'Receivable Record',
            'DberpPayableRecord' => 'Payable Record',
            'DberpDepartment' => 'Department',
            'DberpPosition' => 'Position',
            'DberpSalesperson' => 'Salesperson',
            'DberpPurchaseRequestItem' => 'Purchase Request Item',
            'DberpPurchaseOrderItem' => 'Purchase Order Item',
            'DberpSalesOrderItem' => 'Sales Order Item',
            'DberpSalesOutboundOrderItem' => 'Sales Outbound Item',
            'DberpSalesReturnOrderItem' => 'Sales Return Item',
            'DberpPurchaseReceiptOrderItem' => 'Purchase Arrival Item',
            'DberpPurchaseReturnOrderItem' => 'Purchase Return Item',
            'DberpTransferOrderItem' => 'Transfer Order Item',
            'DberpOtherStockInOrderItem' => 'Other Stock-in Item',
            'DberpOtherStockOutOrderItem' => 'Other Stock-out Item',
            'DberpStocktakeOrderItem' => 'Stocktake Item',
            'DberpSalesQuoteItem' => 'Quote Item',
            'DberpProductSpecGroup' => 'Product Spec Group',
            'DberpProductSpecValue' => 'Product Spec Value',
            'DberpProductSkuSpecValue' => 'Spec Combination Value',
            'DberpSettlementStatementItem' => 'Statement Item',
            'DberpSettlementWriteOffLine' => 'Write-off Detail',
            'DberpSettlementEntry' => 'Settlement Entry',
            'DberpAdvanceAccount' => 'Fund Account',
            'DberpAdvanceAccountFlow' => 'Fund Flow',
            'DberpIntegrationMapping' => 'Integration Data Mapping',
            'DberpIntegrationSyncLog' => 'Integration Sync Log',
            'DberpInventoryBatchMovement' => 'Batch Movement',
            'DberpInventorySerialNumberLog' => 'Serial Number Log',
            'DberpPurchaseInquiryQuote' => 'Purchase Inquiry Comparison',
            'DberpPurchasePriceReferenceSnapshot' => 'Purchase Price Reference',
            'DberpDocumentQuery' => 'Document Query',
            'DberpReceiptPaymentQuery' => 'Receipt/Payment Records',
            'DberpAdminPermission' => 'Permission Item',
            'DberpAuditLog' => 'Audit Log',
        ],
    ],
    'audit_display' => [
        'generic_field_label' => 'Field (:field)',
        'value_empty' => 'Not Filled',
        'boolean_yes' => 'Yes',
        'boolean_no' => 'No',
        'complex_value_placeholder' => '(Content is lengthy and cannot be displayed item by item.)',
        'deleted_relation_record' => 'Deleted record #:id',
        'subject_unknown' => '(Unnamed Object)',
        'subject_fallback_with_id' => ':entity#:id',
        'delete_subject_line' => 'Delete :entity ":subject"',
        'change_from_to' => ':label: changed from ":before" to ":after"',
        'no_snapshot_detail' => '(No field-level changes were recorded for this operation.)',
        'no_field_level_changes' => '(No field-level differences to display.)',
        'operation_summary' => 'Operation Summary',
        'business_changes' => 'Business Change Details',
        'raw_data_heading' => 'Technical Details (Admin)',
        'raw_data_description' => 'The following is the complete change record stored by the system, for administrator verification only. For daily review, use the Business Change Details above.',
        'raw_old_values' => 'Before Change (Details)',
        'raw_new_values' => 'After Change (Details)',
        'meta_heading' => 'Record Information',
        'list_summary' => 'Operation Summary',
        'entity_type_unmapped' => 'Business Data',
        'resource_unmapped' => 'Business Function',
        'subject_identifier_label' => 'Identifier',
        'subject_with_identifier' => ':label「:value」',
        'operation_verb' => [
            'created' => 'created',
            'updated' => 'updated',
            'deleted' => 'deleted',
            'restored' => 'restored',
            'enabled' => 'enabled',
            'disabled' => 'disabled',
            'confirmed' => 'confirmed',
            'approved' => 'approved',
            'rejected' => 'rejected',
            'voided' => 'voided',
            'cancelled' => 'cancelled',
            'completed' => 'completed',
            'imported' => 'imported',
            'exported' => 'exported',
            'submitted' => 'submitted',
            'applied' => 'applied',
            'reversed' => 'reversed',
            'closed' => 'closed',
            'copied' => 'copied',
            'activated' => 'activated',
            'converted' => 'converted',
            'synced' => 'synced',
            'pruned' => 'pruned',
            'viewed' => 'viewed',
            'filtered' => 'filtered',
            'generated' => 'generated',
            'status_changed' => 'changed status',
            'remapped' => 'remapped',
            'invalidated' => 'marked as invalid',
            'blocked' => 'blocked',
            'overridden' => 'released by override',
            'reset' => 'reset',
            'effective' => 'applied',
            'adjusted' => 'adjusted',
            'failed' => 'failed',
            'cleared' => 'cleared',
            'retried' => 'retried',
        ],
        'snapshot_values' => [
            'reason' => [
                'invalid_password' => 'Incorrect password',
                'unknown_account' => 'Account not found',
            ],
            '_common' => [
                'enabled' => 'Enabled',
                'disabled' => 'Disabled',
                'active' => 'Active',
                'inactive' => 'Inactive',
                'draft' => 'Draft',
                'pending' => 'Pending',
                'confirmed' => 'Confirmed',
                'submitted' => 'Submitted',
                'effective' => 'Effective',
                'voided' => 'Voided',
                'cancelled' => 'Cancelled',
                'closed' => 'Closed',
                'completed' => 'Completed',
                'processing' => 'Processing',
                'failed' => 'Failed',
                'success' => 'Success',
                'yes' => 'Yes',
                'no' => 'No',
            ],
        ],
    ],
    'notifications' => [
        'saved' => 'Saved',
        'warning' => 'Warning',
        'submitted' => 'Submitted',
        'applied' => 'Applied',
        'confirmed' => 'Confirmed',
        'purchase_order_confirmed' => 'The purchase order has been confirmed.',
        'sales_order_confirmed' => 'The sales order has been confirmed. You may continue creating sales outbound orders.',
        'sales_order_closed' => 'The sales order has been closed.',
        'completed' => 'Completed',
        'region_import_completed_title' => 'Province/city/district data imported',
        'region_import_completed_body' => 'Processed :total records: :created created, :updated updated, and :reactivated re-enabled.',
        'reversed' => 'Write-off Reversed',
        'voided' => 'Voided',
        'inventory_revoke_effective_done' => 'Effectiveness has been revoked. The system generated reverse inventory transactions according to the rules, while the original transactions remain available for audit.',
        'settlement_void_done' => 'Settlement void operation completed.',
        'inventory_confirm_failed_title' => 'Confirmation Failed',
        'purchase_order_closed' => 'Purchase order closed',
        'purchase_order_voided' => 'Purchase order voided',
        'sales_order_voided' => 'Sales order voided',
        'spec_combinations_generated' => 'Generated :count new spec combinations.',
        'spec_combo_deleted' => 'Spec combination deleted.',
        'spec_matrix_rebuilt' => 'Spec structure rebuilt',
        'operation_blocked' => 'Operation not completed',
        'bulk_add_document_line_products_success' => ':count order line(s) added in bulk.',
        'bulk_add_document_line_products_none' => 'No new lines were added (they may already exist or the selected specs are invalid).',
        'barcode_quick_add_line_added' => 'Line item added',
        'barcode_quick_add_quantity_increased' => 'Quantity increased on existing line',
        'barcode_quick_add_line_skipped' => 'Skipped (same product, spec, and unit already on document)',
    ],
    'actions' => [
        'export' => 'Export CSV',
        'view_source_document' => 'View Source Document',
        'view_product' => 'View Product',
        'view_inventory_balance' => 'View Inventory Balance',
        'view_product_operation_query' => 'View Product Operations Query',
        'view_inventory_transactions' => 'View Inventory Transactions',
        'view_stocktake_order' => 'View Stocktake Order',
        'edit' => 'Edit',
        'delete' => 'Delete',
        'create_admin_user' => 'Create Admin',
        'create_admin_role' => 'Create Role',
        'reset_password' => 'Reset Password',
        'copy_role' => 'Copy Role',
        'export_warnings' => 'Export Warnings',
        'adjust_safety_stock' => 'Adjust Safety Stock',
        'complete' => 'Complete Transfer',
        'activate_quote' => 'Activate Quote',
        'submit_quote' => 'Submit Quote',
        'convert_quote' => 'Convert to Sales Order',
        'copy_quote' => 'Copy Quote',
        'submit' => 'Submit Document',
        'confirm' => 'Confirm Document',
        'confirm_statement' => 'Confirm Statement',
        'close' => 'Close Order',
        'register_arrival' => 'Register Arrival',
        'register_payment' => 'Register Payment',
        'view_customer_settlement_query' => 'View customer settlement ledger',
        'view_supplier_settlement_query' => 'View supplier settlement ledger',
        'create_sales_outbound' => 'Create Outbound Order',
        'register_receipt' => 'Register Receipt',
        'void' => 'Void',
        'revoke_effective' => 'Revoke Effectiveness',
        'void_effective_mark_only' => 'Void (Do Not Reverse Inventory)',
        'void_settlement' => 'Void Settlement',
        'confirm_take_effect' => 'Confirm Effectiveness',
        'confirm_receipt' => 'Confirm Receipt',
        'confirm_payment' => 'Confirm Payment',
        'submit_receipt' => 'Submit Receipt Registration',
        'submit_payment' => 'Submit Payment Registration',
        'disable_price_rule' => 'Disable Rule',
        'apply_adjustment' => 'Apply Adjustment',
        'refresh_analysis' => 'Refresh Analysis',
        'refresh_credit_overview' => 'Refresh Credit Overview',
        'reverse_write_off' => 'Reverse Write-off',
        'sync_dbshop_products' => 'Sync External Channel Products',
        'sync_dbshop_customers' => 'Sync External Channel Customers',
        'import_dbshop_orders' => 'Import External Channel Orders',
        'sync_dbshop_inventory' => 'Push Inventory to External Channel',
        'retry_sync' => 'Retry Sync',
        'remap_customer' => 'Adjust Customer Mapping',
        'retry_failed_selected' => 'Retry Selected Failed Records',
        'rebind_mapping' => 'Rebind Mapping',
        'mark_mapping_invalid' => 'Mark Mapping Invalid',
        'generate_replenishment_suggestions' => 'Generate Replenishment Suggestions',
        'disable' => 'Disabled',
        'enable' => 'Enabled',
        'add_region' => 'Add Region',
        'import_china_regions' => 'Import Provinces/Cities/Districts',
        'confirm_region_import' => 'Start Import',
        'run_region_import' => 'Start Import',
        'reviewed' => 'Mark Reviewed',
        'confirm_difference' => 'Confirm Difference',
        'ignored' => 'Mark Ignored',
        'processed' => 'Mark Processed',
        'generate_purchase_request' => 'Generate Purchase Request',
        'generate_spec_combinations' => 'Generate Missing Spec Combinations',
        'bulk_add_document_line_products' => 'Bulk Add Products',
        'barcode_quick_add_document_line' => 'Barcode Quick Add',
        'disable_spec_combo' => 'Disable Spec Combination',
        'delete_spec_combo' => 'Delete Spec Combination',
        'rebuild_spec_matrix' => 'Rebuild Spec Structure',
        'confirm_rebuild_spec_matrix' => 'Confirm Rebuild',
        'convert_to_purchase_order' => 'Convert Remaining Demand to Purchase',
        'convert_selected_to_purchase_order' => 'Convert Selected Lines',
        'generate_purchase_inquiry' => 'Generate Inquiry',
        'view_purchase_inquiry_comparison' => 'View Quote Comparison',
        'create_purchase_inquiry_from_request' => 'New Inquiry from Request',
        'convert_inquiry_quotes_to_purchase_order' => 'Generate Purchase Orders',
        'mark_recommended' => 'Mark Recommended Deal',
        'invalidate_quote' => 'Void Quote',
        'refresh_purchase_inquiry_comparison' => 'Refresh Inquiry Comparison',
        'resolve' => 'Close Exception',
        'reopen' => 'Reopen',
        'submit_resolution' => 'Submit Result',
        'close_exception' => 'Close Purchase Exception',
        'view_purchase_exception_list' => 'View Exception List',
        'handle_purchase_exception' => 'Handle Exception',
        'view_purchase_receipt_documents' => 'View Arrival Documents',
        'back_to_previous_page' => 'Go Back',
        'back_to_system_home' => 'Back to Home',
    ],
    'form' => [
        'save' => 'Save',
    ],
    'sections' => [
        'admin_user_basic' => 'Admin User Basic',
        'admin_user_access' => 'Admin User Access',
        'admin_role_basic' => 'Admin Role Basic',
        'admin_role_integration_notice' => 'Admin Role Integration Notice',
        'admin_role_permissions_intro' => 'Admin Role Permissions Intro',
        'admin_role_permissions' => 'Admin Role Permissions',
        'admin_role_plugin_permissions' => 'Plugin Permissions',
        'company_public' => 'Company Public',
        'filing_info' => 'Filing Information',
        'number_display_format' => 'Number Display Format',
        'inventory_and_doc' => 'Inventory And Document',
        'number_rule' => 'Numbering Rules',
        'dictionary_type' => 'Dictionary Type',
        'organization_basic' => 'Organization Data',
        'org_department_section' => 'Org Department Section',
        'org_position_section' => 'Org Position Section',
        'master_basic' => 'Master Basic',
        'customer_business_overview' => 'Business Overview',
        'customer_recent_sales_orders' => 'Recent Sales Orders',
        'customer_open_receivables' => 'Open Receivables',
        'customer_overdue_receivables' => 'Overdue Receivables',
        'customer_recent_receipts' => 'Recent Receipts',
        'supplier_business_overview' => 'Business Overview',
        'supplier_recent_purchase_orders' => 'Recent Purchase Orders',
        'supplier_open_payables' => 'Open Payables',
        'supplier_overdue_payables' => 'Overdue Payables',
        'supplier_recent_payments' => 'Recent Payments',
        'supplier_recent_inquiry_quotes' => 'Recent Inquiry Quotes',
        'master_contact' => 'Master Contact',
        'region_address' => 'Region Address',
        'region_basic' => 'Region Basic',
        'region_hierarchy' => 'Region Hierarchy',
        'region_manual_create' => 'Add Region',
        'document_address_snapshot' => 'Document Address Snapshot',
        'product_inventory_business_overview' => 'Inventory & Operations Overview',
        'product_sku_stock_summary' => 'SKU / Warehouse Stock Summary',
        'product_recent_purchases' => 'Recent Purchase Lines',
        'product_recent_sales' => 'Recent Sales Lines',
        'product_recent_inventory_movements' => 'Recent Inventory Movements',
        'product_recent_stocktake_differences' => 'Recent Stocktake Differences',
        'product_archive' => 'Product Profile',
        'product_unit_configuration' => 'Product Unit Configuration',
        'product_business' => 'Product Business',
        'product_business_flags' => 'Product Business Flags',
        'product_spec' => 'Product Spec',
        'warehouse_setting' => 'Warehouse Setting',
        'employee_setting' => 'Employee Setting',
        'salesperson_basic' => 'Salesperson Basic',
        'inventory_account' => 'Inventory Account',
        'inventory_transaction' => 'Inventory Transaction',
        'inventory_document' => 'Inventory Document',
        'inventory_items' => 'Inventory Items',
        'purchase_document' => 'Purchase Document',
        'purchase_order_business_overview' => 'Business Overview',
        'purchase_order_related_receipts' => 'Related Purchase Receipts',
        'purchase_order_related_returns' => 'Related Purchase Returns',
        'purchase_order_related_payments' => 'Related Payments',
        'purchase_order_related_payables' => 'Related Payables',
        'purchase_order_related_exceptions' => 'Receipt Exceptions',
        'purchase_request' => 'Purchase Request',
        'purchase_request_line_selection' => 'Select Request Lines',
        'purchase_inquiry_from_request' => 'Load from Purchase Request',
        'purchase_inquiry_quote_selection' => 'Select Supplier Quotes',
        'purchase_order_source' => 'Creation Mode',
        'purchase_order_from_request' => 'Lines from Purchase Request',
        'purchase_order_from_inquiry_quote' => 'Lines from Inquiry Quotes',
        'purchase_inquiry' => 'Purchase Inquiry',
        'purchase_inquiry_item' => 'Inquiry Line',
        'purchase_inquiry_quote' => 'Supplier Quote',
        'purchase_conversion_source' => 'Conversion Source',
        'purchase_items' => 'Purchase Items',
        'sales_document' => 'Sales Document',
        'sales_order_business_overview' => 'Business Overview',
        'sales_order_related_outbounds' => 'Related Sales Outbounds',
        'sales_order_related_returns' => 'Related Sales Returns',
        'sales_order_related_receipts' => 'Related Receipts',
        'sales_order_related_receivables' => 'Related Receivables',
        'sales_order_quote_source' => 'Sales Order Quote Source',
        'sales_order_credit' => 'Sales Order Credit',
        'sales_items' => 'Sales Items',
        'sales_quote' => 'Sales Quote',
        'sales_price_rule' => 'Customer Price Rule',
        'sales_credit_control' => 'Sales Credit Control',
        'sales_pricing' => 'Sales Pricing',
        'inventory_batch' => 'Inventory Batch',
        'inventory_serial_number' => 'Inventory Serial Number',
        'inventory_serial_number_governance' => 'Serial Number Governance',
        'inventory_serial_number_identity' => 'Serial Number Overview',
        'inventory_serial_number_product_location' => 'Product & Location',
        'inventory_serial_number_lifecycle' => 'Lifecycle & Source',
        'inventory_rule' => 'Inventory Rule',
        'inventory_replenishment_suggestion' => 'Replenishment Suggestion',
        'settlement_document' => 'Settlement Document',
        'settlement_write_off' => 'Settlement Write-off',
        'settlement_adjustment' => 'Settlement Adjustment',
        'settlement_statement' => 'Settlement Statement',
        'settlement_permission' => 'Settlement Permission',
        'settlement_permission_by_module' => 'Settlement Permission By Module',
    ],
    'relations' => [
        'dictionary_items' => 'Dictionary Item',
        'inventory_items' => 'Inventory Items',
        'stocktake_items' => 'Stocktake Items',
        'purchase_order_items' => 'Purchase Order Items',
        'purchase_request_items' => 'Purchase Request Items',
        'purchase_inquiry_items' => 'Inquiry Lines',
        'purchase_inquiry_quotes' => 'Supplier Quotes',
        'purchase_receipt_items' => 'Purchase Receipt Items',
        'purchase_return_items' => 'Purchase Return Items',
        'sales_order_items' => 'Sales Order Items',
        'sales_quote_items' => 'Sales Quote Items',
        'sales_outbound_items' => 'Sales Outbound Items',
        'sales_return_items' => 'Sales Return Items',
        'receipt_orders' => 'Receipt Orders',
        'payment_orders' => 'Payment Orders',
        'write_off_lines' => 'Write-off Detail',
        'statement_items' => 'Statement Items',
        'product_spec_groups' => 'Product Spec Groups',
        'product_spec_group' => 'Product Spec Group',
        'product_spec_combos' => 'Product Spec Combinations',
        'product_spec_combo' => 'Product Spec Combination',
        'inventory_batch_movements' => 'Inventory Batch Movements',
        'inventory_batch_movement' => 'Inventory Batch Movement',
        'inventory_batch_serial_numbers' => 'Inventory Batch Serial Numbers',
        'inventory_serial_number_logs' => 'Inventory Serial Number Logs',
        'inventory_serial_number_exceptions' => 'Related Inventory Exceptions',
        'stocktake_serial_number_differences' => 'Stocktake Serial Differences',
    ],
    'fields' => [
        'company_name' => 'Company Name',
        'system_display_name' => 'Public System Display Name',
        'contact_phone' => 'Contact Phone',
        'contact_email' => 'Contact Email',
        'login_account' => 'Login Account',
        'nickname' => 'Nickname',
        'password' => 'Password',
        'password_confirmation' => 'Confirm Password',
        'bound_roles' => 'Assigned Roles',
        'role_name' => 'Name',
        'role_description' => 'Description (Optional)',
        'role_list_order' => 'List Position',
        'bound_admin_count' => 'Admins Using This Role',
        'permission_configuration' => 'Selectable Permissions',
        'keyword' => 'Keyword',
        'last_login_at' => 'Last Login AT',
        'created_at' => 'Created AT',
        'address' => 'Address',
        'address_detail' => 'Address Detail',
        'site_icp_record_no' => 'ICP Filing Number',
        'site_public_security_record_no' => 'Public Security Filing Number',
        'default_currency' => 'Default Currency',
        'display_timezone' => 'Display Timezone',
        'amount_decimal_places' => 'Amount Decimal Places',
        'quantity_decimal_places' => 'Quantity Decimal Places',
        'allow_negative_stock' => 'Allow Negative Stock',
        'default_warehouse' => 'Default Warehouse',
        'default_source_type' => 'Default Source Type',
        'document_void_policy' => 'Document Void Policy',
        'receipt_over_limit_policy' => 'Over-receipt Policy',
        'payment_over_limit_policy' => 'Over-payment Policy',
        'allow_settlement_on_closed_document' => 'Allow Receipts/Payments After Document Closure',
        'settlement_void_policy' => 'Settlement Void Policy',
        'boolean_yes' => 'Yes',
        'boolean_no' => 'No',
        'safety_stock_alert_enabled' => 'Safety Stock Alert',
        'rule_code' => 'Rule Code',
        'rule_name' => 'Rule Name',
        'rule_applies_to' => 'Applies To',
        'prefix' => 'Prefix',
        'date_segment' => 'Date Segment',
        'serial_digits' => 'Serial Number Digits',
        'current_serial' => 'Current Serial',
        'pattern_optional' => 'Extended Template (Optional)',
        'remark' => 'Remarks',
        'copy_source_role' => 'Copy Source Role',
        'role_display_name_copy_suffix' => ' (copy)',
        'sort_order' => 'Sort Order',
        'sort' => 'Sort',
        'is_enabled' => 'Enabled',
        'number_preview' => 'Rule Preview',
        'dict_type_code' => 'Dictionary Type Code',
        'dict_type_name' => 'Dictionary Type Name',
        'dict_type_description' => 'Dictionary Type Description',
        'dict_item_code' => 'Dictionary Item Code',
        'dict_item_name' => 'Name',
        'dict_item_value' => 'Dictionary Item Value',
        'dict_item_description' => 'Description',
        'is_system_preset' => 'System Preset',
        'is_delete_locked' => 'Deletion Locked',
        'system_locked' => 'System Locked',
        'updated_at' => 'Updated At',
        'category_code' => 'Category Code',
        'category_name' => 'Category Name',
        'parent_category' => 'Parent Category',
        'unit_code' => 'Unit Code',
        'unit_name' => 'Unit Name',
        'employee_code' => 'Employee Code / ID',
        'employee_name' => 'Employee Name',
        'mobile' => 'Mobile',
        'phone' => 'Phone',
        'email' => 'Email',
        'permission_count' => 'Selected Permission Count',
        'department_name' => 'Department',
        'position_name' => 'Position',
        'employee_master_department' => 'Department',
        'employee_master_position' => 'Position',
        'linked_employee' => 'Linked Employee',
        'salesperson_display_name' => 'Salesperson',
        'org_department_name' => 'Org Department Name',
        'org_department_code' => 'Org Department Code',
        'org_parent_department' => 'Org Parent Department',
        'org_position_name' => 'Org Position Name',
        'org_position_code' => 'Org Position Code',
        'org_position_department' => 'Org Position Department',
        'is_salesperson' => 'Can Be Salesperson',
        'customer_code' => 'Customer Code',
        'customer_name' => 'Customer Name',
        'ranking_position' => 'Ranking Position',
        'customer_category_code' => 'Customer Category Code',
        'customer_category_name' => 'Customer Category Name',
        'customer_category' => 'Customer Category',
        'supplier_code' => 'Supplier Code',
        'supplier_name' => 'Supplier Name',
        'supplier_category_code' => 'Supplier Category Code',
        'supplier_category_name' => 'Supplier Category Name',
        'supplier_category' => 'Supplier Category',
        'contact_person' => 'Contact Person',
        'country' => 'Country',
        'settlement_method' => 'Settlement Method',
        'salesperson_employee' => 'Salesperson Employee',
        'warehouse_code' => 'Warehouse Code',
        'warehouse_name' => 'Warehouse Name',
        'warehouse_type' => 'Warehouse Type',
        'manager_employee' => 'Manager Employee',
        'is_default' => 'Default Warehouse',
        'product_code' => 'Product Code',
        'product_name' => 'Product Name',
        'barcode' => 'Barcode',
        'mnemonic_code' => 'Mnemonic Code',
        'category' => 'Product Category',
        'brand_name' => 'Brand Placeholder',
        'product_brand_selector' => 'Product Brand Selector',
        'brand_code' => 'Brand Code',
        'brand_profile_name' => 'Brand Profile Name',
        'brand_short_name' => 'Brand Short Name',
        'brand_logo' => 'Brand Logo',
        'brand_description' => 'Remarks',
        'brand_is_enabled' => 'Enabled',
        'spec_model' => 'Spec / Model',
        'spec_enabled' => 'Enable Product Specs',
        'spec_group_name' => 'Spec Group Name',
        'spec_value_rows' => 'Spec Value Rows',
        'spec_value_label' => 'Spec Value Label',
        'spec_value_count' => 'Spec Value Count',
        'spec_combo_code' => 'Spec Combination Code',
        'spec_combo_summary' => 'Spec Combination Summary',
        'default_spec_combo' => 'Default Spec Combination',
        'purchase_spec_combo' => 'Purchase Spec Combination',
        'sales_spec_combo' => 'Sales Spec Combination',
        'unit_override' => 'Unit Override',
        'unit' => 'Unit',
        'product_base_unit' => 'Base Unit',
        'is_auxiliary_unit_enabled' => 'Enable Auxiliary Unit',
        'auxiliary_unit' => 'Auxiliary Unit',
        'auxiliary_unit_quantity' => 'Auxiliary Unit Quantity',
        'base_unit_quantity' => 'Base Unit Quantity',
        'product_auxiliary_conversion_preview' => 'Product Auxiliary Conversion Preview',
        'document_line_entered_quantity' => 'Document Line Entered Quantity',
        'document_line_entered_unit' => 'Document Line Entered Unit',
        'document_line_primary_base_quantity' => 'Document Line Primary Base Quantity',
        'document_line_conversion_snapshot' => 'Document Line Conversion Snapshot',
        'document_line_primary_base_arrival_quantity' => 'Document Line Primary Base Arrival Quantity',
        'inventory_ledger_entered_quantity' => 'Inventory Ledger Entered Quantity',
        'inventory_ledger_posting_conversion_snapshot' => 'Inventory Ledger Posting Conversion Snapshot',
        'inventory_ledger_primary_base_change' => 'Inventory Ledger Primary Base Change',
        'inventory_balance_auxiliary_reference' => 'Inventory Balance Auxiliary Reference',
        'cost_price' => 'Cost Price',
        'sales_price' => 'Sales Price',
        'can_purchase' => 'Purchasable',
        'can_sale' => 'Sellable',
        'manages_inventory' => 'Manage Inventory',
        'manages_batch' => 'Enable Batch Management',
        'manages_serial_number' => 'Enable Serial Number Management',
        'manages_expiry' => 'Enable Expiry Management',
        'inventory_issue_policy' => 'Default Issue Policy',
        'expiry_warning_days' => 'Expiry Warning Days',
        'batch_no' => 'Batch No',
        'source_batch' => 'Source Batch',
        'batch_status' => 'Batch Status',
        'serial_no' => 'Serial Number',
        'serial_numbers' => 'Serial Numbers',
        'stocktake_actual_serial_numbers' => 'Actual Count Serial Numbers',
        'stocktake_counted_serial_numbers' => 'Counted Serial Numbers',
        'serial_number_count' => 'Serial Number Count',
        'serial_number_status' => 'Serial Number Status',
        'production_date' => 'Production Date',
        'expiry_date' => 'Expiry Date',
        'expiry_status' => 'Expiry Status',
        'shelf_life_days' => 'Shelf Life Days',
        'locked_quantity' => 'Locked Quantity',
        'current_owner_type' => 'Current Owner Type',
        'current_owner_id' => 'Current Owner ID',
        'current_owner' => 'Current Owner',
        'source_document' => 'Source Document',
        'system_status_snapshot' => 'System Status Snapshot',
        'handling_status' => 'Handling Status',
        'difference_type' => 'Difference Type',
        'operation_summary' => 'Operation Summary',
        'stocktake_serial_number_difference' => 'Stocktake Serial Difference',
        'inbound_at' => 'Inbound AT',
        'outbound_at' => 'Outbound AT',
        'reorder_point' => 'Reorder Point',
        'replenish_target_quantity' => 'Replenishment Target Quantity',
        'warning_enabled' => 'Enable Alerts',
        'replenishment_enabled' => 'Enable Replenishment Suggestions',
        'system_suggested_quantity' => 'System Suggested Quantity',
        'adjusted_quantity' => 'Adjusted Quantity',
        'trigger_reason' => 'Trigger Reason',
        'replenishment_suggestion_status' => 'Replenishment Suggestion Status',
        'generated_at' => 'Generated AT',
        'processed_at' => 'Processed AT',
        'status' => 'Status',
        'import_batch_no' => 'Import Batch No.',
        'correlation_id' => 'Audit Correlation ID',
        'import_type' => 'Import Type',
        'source_filename' => 'Source Filename',
        'source_row_number' => 'Source Row Number',
        'external_key' => 'External Key',
        'error_summary' => 'Error Summary',
        'created_record_type' => 'Created Record Type',
        'created_record_id' => 'Created Record ID',
        'started_at' => 'Started At',
        'finished_at' => 'Finished At',
        'total_rows' => 'Total Rows',
        'success_rows' => 'Success Rows',
        'failed_rows' => 'Failed Rows',
        'import_upload_file' => 'Import File',
        'business_time' => 'Business Time',
        'previous_status' => 'Previous Status',
        'current_status' => 'Current Status',
        'business_time_from' => 'Business Time From',
        'business_time_until' => 'Business Time Until',
        'effective_at' => 'Effective At',
        'voided_at' => 'Voided At',
        'reason' => 'Reason',
        'quantity' => 'Quantity',
        'product' => 'Product',
        'product_spec' => 'Product Spec',
        'warehouse' => 'Warehouse',
        'requested_warehouse' => 'Requested Warehouse',
        'realtime_quantity' => 'Realtime Quantity',
        'available_quantity' => 'Available Quantity',
        'occupied_quantity' => 'Occupied Quantity',
        'safety_stock' => 'Safety Stock',
        'last_moved_at' => 'Last Moved AT',
        'direction' => 'Direction',
        'change_quantity' => 'Change Quantity',
        'before_quantity' => 'Before Quantity',
        'after_quantity' => 'After Quantity',
        'business_type' => 'Business Type',
        'business_number' => 'Business Number',
        'source_object' => 'Source Object',
        'operator' => 'Operator',
        'admin_name' => 'Admin Name',
        'admin_password' => 'Admin Password',
        'inventory_query_group' => 'Inventory Query Group',
        'inventory_aggregate_level' => 'Inventory Aggregate Level',
        'business_query_aggregate_level' => 'Business Query Aggregate Level',
        'sales_analysis_ranking_dimension' => 'Sales Analysis Ranking Dimension',
        'report_ranking_dimension' => 'Report Ranking Dimension',
        'low_stock_filter' => 'Low Stock Filter',
        'zero_stock_filter' => 'Zero Stock Filter',
        'stock_in_code' => 'Stock-in Code',
        'stock_out_code' => 'Stock-out Code',
        'transfer_code' => 'Transfer Code',
        'stocktake_code' => 'Stocktake Code',
        'from_warehouse' => 'From Warehouse',
        'to_warehouse' => 'To Warehouse',
        'completed_at' => 'Completed AT',
        'scope_type' => 'Scope Type',
        'scope_category' => 'Scope Category',
        'scope_product' => 'Scope Product',
        'stocktake_employee' => 'Stocktake Employee',
        'book_quantity' => 'Book Quantity',
        'actual_quantity' => 'Actual Quantity',
        'difference_quantity' => 'Difference Quantity',
        'result_type' => 'Result Type',
        'warning_type' => 'Warning Type',
        'difference_status' => 'Difference Status',
        'reason_code' => 'Reason Code',
        'reason_detail' => 'Reason Details',
        'resolution_type' => 'Resolution Type',
        'resolution_remark' => 'Resolution Remark',
        'handled_by' => 'Handled By',
        'handled_at' => 'Handled At',
        'stocktake_order' => 'Stocktake Order',
        'stocktake_order_status' => 'Stocktake Order Status',
        'exception_type' => 'Exception Type',
        'exception_status' => 'Exception Status',
        'severity' => 'Severity',
        'occurred_at' => 'Occurred At',
        'resolved_at' => 'Resolved At',
        'handling_remark' => 'Handling Remark',
        'title' => 'Title',
        'description' => 'Description',
        'purchase_order_code' => 'Purchase Order Code',
        'purchase_request_code' => 'Purchase Request Code',
        'request_time' => 'Request Time',
        'purchase_inquiry_code' => 'Inquiry No.',
        'purchase_inquiry_item' => 'Inquiry Line',
        'purchase_inquiry_date' => 'Inquiry Date',
        'purchase_inquiry_quote_code' => 'Quote No.',
        'inquiry_quantity' => 'Inquiry Quantity',
        'conversion_source_type' => 'Source Document Type',
        'conversion_target_type' => 'Target Document Type',
        'converted_at' => 'Converted At',
        'reversed_at' => 'Reversed At',
        'reverse_reason' => 'Reverse Reason',
        'purchase_receipt_code' => 'Purchase Receipt Code',
        'purchase_return_code' => 'Purchase Return Code',
        'source_reference_no' => 'Source Reference No.',
        'sales_order_code' => 'Sales Order Code',
        'quote_code' => 'Quote Code',
        'sales_outbound_code' => 'Sales Outbound Code',
        'sales_return_code' => 'Sales Return Code',
        'supplier' => 'Supplier',
        'suggested_supplier' => 'Suggested Supplier',
        'customer' => 'Customer',
        'handler_employee' => 'Handler Employee',
        'applicant_employee' => 'Applicant Employee',
        'urgency_level' => 'Urgency Level',
        'expected_arrival_date' => 'Expected Arrival Date',
        'last_arrival_date' => 'Last Arrival Date',
        'request_reason' => 'Request Reason',
        'purchase_request' => 'Purchase Request',
        'purchase_request_item' => 'Purchase Request Item',
        'request_quantity' => 'Request Quantity',
        'converted_quantity' => 'Converted Quantity',
        'remaining_quantity' => 'Remaining Quantity',
        'inquiry_quantity' => 'Inquiry Quantity',
        'convert_quantity' => 'Convert Quantity',
        'inquiry_suppliers' => 'Inquiry Suppliers',
        'purchase_order_source_mode' => 'Creation Mode',
        'source_quantity' => 'Quantity',
        'selectable_inquiry_quote' => 'Selectable Quote',
        'selectable_request_line' => 'Selectable Request Line',
        'quote_date' => 'Quote Date',
        'quote_note' => 'Quote Note',
        'valid_until_before' => 'Valid Until No Later Than',
        'quote_date_from' => 'Quote Date From',
        'quote_date_until' => 'Quote Date Until',
        'valid_from' => 'Valid From',
        'valid_until' => 'Valid Until',
        'min_order_quantity' => 'Minimum Order Quantity',
        'lead_time_days' => 'Lead Time (Days)',
        'tax_rate' => 'Tax Rate',
        'is_tax_included' => 'Tax Included',
        'is_recommended' => 'Recommended Deal',
        'source_inquiry_quote' => 'Source Inquiry Quote',
        'matched_reference_price' => 'Matched Reference Price',
        'price_hit_label' => 'Price Hit Label',
        'price_hit_summary' => 'Price Hit Summary',
        'invalidate_reason' => 'Invalidate Reason',
        'suggested_payment_term_days' => 'Suggested Payment Term Days',
        'external_reference_id' => 'External Reference ID',
        'converted_sales_order_no' => 'Converted Sales Order No',
        'converted_at' => 'Converted AT',
        'price_level_code' => 'Price Level Code',
        'default_payment_term_days' => 'Default Payment Term Days',
        'credit_limit_amount' => 'Credit Limit Amount',
        'credit_usage_amount' => 'Credit Usage',
        'open_receivable_amount' => 'Open Receivables',
        'overdue_receivable_amount' => 'Overdue Receivables',
        'recent_sales_amount' => 'Sales (Last 90 Days)',
        'recent_received_amount' => 'Receipts (Last 90 Days)',
        'customer_status' => 'Customer Status',
        'open_payable_amount' => 'Open Payables',
        'overdue_payable_amount' => 'Overdue Payables',
        'recent_purchase_amount' => 'Purchases (Last 90 Days)',
        'recent_paid_amount' => 'Payments (Last 90 Days)',
        'recent_inquiry_quotes' => 'Recent Inquiry Quotes',
        'supplier_status' => 'Supplier Status',
        'credit_control_note' => 'Credit Control Note',
        'rule_type' => 'Rule Type',
        'product_spec_snapshot' => 'Product Spec Snapshot',
        'channel_code' => 'Channel Code',
        'price_source_type' => 'Price Source Type',
        'price_source_label' => 'Price Source Label',
        'price_rule' => 'Price Rule',
        'matched_unit_price' => 'Matched Unit Price',
        'reference_unit_price' => 'Reference Unit Price',
        'recent_transaction_unit_price' => 'Recent Transaction Unit Price',
        'recent_transaction_date' => 'Recent Transaction Date',
        'credit_check_result' => 'Credit Check Result',
        'credit_override_reason' => 'Credit Override Reason',
        'credit_checked_at' => 'Credit Checked AT',
        'payment_term_days' => 'Payment Term Days',
        'source_quote_item_id' => 'Source Quote Item ID',
        'pending_amount' => 'Pending Amount',
        'earliest_due_date' => 'Earliest Due Date',
        'overdue_count' => 'Overdue Count',
        'overdue_amount' => 'Overdue Amount',
        'available_credit_amount' => 'Available Credit',
        'purchase_order' => 'Purchase Order',
        'purchase_receipt' => 'Purchase Receipt',
        'purchase_order_item' => 'Purchase Order Item',
        'purchase_receipt_item' => 'Purchase Receipt Item',
        'sales_order' => 'Sales Order',
        'sales_outbound' => 'Sales Outbound Order',
        'sales_order_item' => 'Sales Order Item',
        'sales_quote_item' => 'Quote Item',
        'sales_outbound_item' => 'Sales Outbound Item',
        'document_line_product_spec_combo' => 'Document Line Product Spec Combination',
        'bulk_add_product_skus' => 'Product specs (multi-select)',
        'bulk_add_default_quantity' => 'Default quantity',
        'bulk_add_skip_existing_skus' => 'Skip spec combinations already on this order',
        'barcode_duplicate_handling' => 'Duplicate product handling',
        'barcode_duplicate_increase_quantity' => 'Increase quantity',
        'barcode_duplicate_add_new_line' => 'Add new line',
        'barcode_duplicate_skip_existing' => 'Skip existing',
        'document_line_spec_code' => 'Document Line Spec Code',
        'document_line_spec_display_name' => 'Document Line Spec Display Name',
        'document_line_spec_summary' => 'Document Line Spec Summary',
        'sales_return_item' => 'Sales Return Item',
        'receipt_code' => 'Receipt Code',
        'payment_code' => 'Payment Code',
        'receivable_record_code' => 'Receivable Record Code',
        'payable_record_code' => 'Payable Record Code',
        'write_off_code' => 'Write-off Code',
        'write_off_line' => 'Write-off Detail',
        'receipt_method' => 'Receipt Method',
        'payment_method' => 'Payment Method',
        'receipt_type' => 'Receipt Type',
        'payment_type' => 'Payment Type',
        'receipt_date' => 'Receipt Date',
        'payment_date' => 'Payment Date',
        'receipt_amount' => 'Receipt Amount',
        'payment_amount' => 'Payment Amount',
        'written_off_amount' => 'Written Off Amount',
        'available_amount' => 'Available Amount',
        'occupied_amount' => 'Occupied Amount',
        'projected_amount' => 'Projected Amount',
        'write_off_amount' => 'Write-off Amount',
        'effective_amount' => 'Effective Amount',
        'write_off_status' => 'Write-off Status',
        'submitted_at' => 'Submitted AT',
        'record_status' => 'Record Status',
        'last_write_off_at' => 'Last Write-off AT',
        'settlement_side' => 'Settlement Side',
        'counterparty' => 'Counterparty',
        'line_no' => 'Line No.',
        'voucher_attachment' => 'Attachment / Voucher',
        'order_status' => 'Business Document Status',
        'receivable_amount' => 'Receivable Amount',
        'received_amount' => 'Received Amount',
        'unreceived_amount' => 'Unreceived Amount',
        'receivable_status' => 'Receivable Status',
        'payable_amount' => 'Payable Amount',
        'paid_amount' => 'Paid Amount',
        'unpaid_amount' => 'Unpaid Amount',
        'reference_order_settlement' => 'Reference Order Settlement',
        'payable_status' => 'Payable Status',
        'source_type' => 'Source Type',
        'unit_price' => 'Unit Price',
        'line_amount' => 'Line Amount',
        'discount_rate' => 'Discount Rate',
        'discount_amount' => 'Discount Amount',
        'final_amount' => 'Final Amount',
        'ordered_quantity' => 'Ordered Quantity',
        'received_quantity' => 'Received Quantity',
        'arrived_quantity' => 'Arrived Quantity',
        'rejected_quantity' => 'Rejected Quantity',
        'remaining_arrival_quantity' => 'Remaining Arrival Quantity',
        'pending_receipt_quantity' => 'Pending Receipt Quantity',
        'pending_quantity' => 'Pending Quantity',
        'arrival_quantity' => 'Arrival Quantity',
        'receipt_quantity' => 'Receipt Quantity',
        'execution_status' => 'Execution Status',
        'arrival_progress_status' => 'Arrival Progress Status',
        'arrival_attention' => 'Arrival Attention',
        'arrival_date' => 'Arrival Date',
        'delivery_note' => 'Delivery Note',
        'is_overdue' => 'Overdue Only',
        'is_completed' => 'Completed Only',
        'is_pending' => 'Pending Only',
        'has_pending_exception' => 'Has Pending Exception',
        'pending_resupply' => 'Pending Resupply',
        'handling_suggestion' => 'Handling Suggestion',
        'resolution_result' => 'Resolution Result',
        'returned_quantity' => 'Returned Quantity',
        'return_quantity' => 'Return Quantity',
        'return_amount' => 'Return Amount',
        'shipped_quantity' => 'Shipped Quantity',
        'outbound_quantity' => 'Outbound Quantity',
        'pending_ship_quantity' => 'Pending Ship Quantity',
        'confirmed_at' => 'Confirmed AT',
        'closed_at' => 'Closed AT',
        'document_type' => 'Document Type',
        'document_code' => 'Document Code',
        'total_amount' => 'Amount',
        'total_quantity' => 'Quantity',
        'amount' => 'Amount',
        'salesperson' => 'Salesperson',
        'order_count' => 'Document Count',
        'sales_amount' => 'Sales Amount',
        'purchase_amount' => 'Purchase Amount',
        'last_purchase_date' => 'Last Purchase Date',
        'latest_reference_date' => 'Latest Reference Date',
        'avg_lead_time_days' => 'Average Lead Time Days',
        'exception_count_30d' => 'Exception Count 30 Days',
        'exception_rate_percent' => 'Exception Rate Percent',
        'effective_receipt_count' => 'Effective Receipt Count',
        'return_order_count_30d' => 'Return Order Count 30 Days',
        'active_price_reference_count' => 'Active Price Reference Count',
        'latest_transaction_unit_price' => 'Latest Transaction Unit Price',
        'latest_transaction_date' => 'Latest Transaction Date',
        'latest_receipt_date' => 'Latest Receipt Date',
        'latest_lead_time_days' => 'Latest Lead Time Days',
        'refreshed_at' => 'Refreshed AT',
        'needs_attention' => 'Needs Attention',
        'is_stale' => 'IS Stale',
        'sales_quantity' => 'Sales Quantity',
        'purchase_quantity' => 'Purchase Quantity',
        'total_in_quantity' => 'Period Total Inbound',
        'total_out_quantity' => 'Period Total Outbound',
        'purchase_in_quantity' => 'Purchase Receipt Inbound',
        'sales_out_quantity' => 'Sales Outbound',
        'transfer_in_quantity' => 'Transfer Inbound',
        'transfer_out_quantity' => 'Transfer Outbound',
        'current_stock_quantity' => 'Current Stock Quantity',
        'total_stock_quantity' => 'Total Stock',
        'available_stock' => 'Available Stock',
        'pending_inbound' => 'Pending Inbound',
        'pending_outbound' => 'Pending Outbound',
        'latest_purchase_price' => 'Latest Purchase Price',
        'latest_sales_price' => 'Latest Sales Price',
        'latest_inbound_date' => 'Latest Inbound',
        'latest_outbound_date' => 'Latest Outbound',
        'product_sku_count' => 'SKU Count',
        'product_status' => 'Product Status',
        'change_type' => 'Change Type',
        'change_amount' => 'Change Amount',
        'balance_after' => 'Balance After',
        'summary' => 'Summary',
        'debit_amount' => 'Increase Amount',
        'credit_amount' => 'Credit Amount',
        'net_change_amount' => 'Net Change Amount',
        'statement_code' => 'Statement Code',
        'statement_item' => 'Statement Item',
        'statement_date' => 'Statement Date',
        'due_date' => 'Due Date',
        'attention_status' => 'Attention Status',
        'period_start_date' => 'Period Start Date',
        'period_end_date' => 'Period End Date',
        'opening_balance' => 'Opening Balance',
        'period_increase_amount' => 'Period Increase Amount',
        'period_decrease_amount' => 'Period Decrease Amount',
        'closing_balance' => 'Closing Balance',
        'item_count' => 'Item Count',
        'last_exported_at' => 'Last Exported AT',
        'as_of_date' => 'As Of Date',
        'record_count' => 'Record Count',
        'adjustment_code' => 'Adjustment Code',
        'adjustment_direction' => 'Adjustment Direction',
        'adjustment_type' => 'Adjustment Type',
        'adjustment_amount' => 'Adjustment Amount',
        'user' => 'User',
        'settlement_permissions' => 'Settlement Permissions',
        'action' => 'Action',
        'old_values_summary' => 'Old Values Summary',
        'new_values_summary' => 'New Values Summary',
        'auditable_type' => 'Auditable Type',
        'auditable_id' => 'Auditable ID',
        'ip_address' => 'IP Address',
        'user_agent' => 'User Agent',
        'channel' => 'Channel',
        'source_platform' => 'Source Platform',
        'source_system' => 'Source System',
        'date_from' => 'Start Date',
        'date_until' => 'End Date',
        'purchase_inquiry_filter_from' => 'Purchase Inquiry Filter From',
        'purchase_inquiry_filter_until' => 'Purchase Inquiry Filter Until',
        'purchase_receipt_arrived_from' => 'Purchase Receipt Arrived From',
        'purchase_receipt_arrived_until' => 'Purchase Receipt Arrived Until',
        'purchase_order_expected_from' => 'Purchase Order Expected From',
        'purchase_order_expected_until' => 'Purchase Order Expected Until',
        'table_sum_label' => 'Total',
        'target_system' => 'Target System',
        'sync_object_type' => 'Sync Object Type',
        'reference' => 'Reference',
        'message' => 'Message',
        'external_code' => 'External / Official Code',
        'external_name' => 'External Name',
        'region' => 'Region',
        'region_code' => 'Region Code',
        'region_name' => 'Region Name',
        'region_short_name' => 'Region Short Name',
        'region_status' => 'Region Status',
        'region_level' => 'Region Level',
        'region_depth' => 'Region Depth',
        'region_path' => 'Region Path',
        'province_region' => 'Province Region',
        'city_region' => 'City Region',
        'district_region' => 'District Region',
        'master_data_region_district' => 'Master Data Region District',
        'final_region' => 'Final Region',
        'merger_name' => 'Full Region Path',
        'parent_region' => 'Parent Region',
        'children_count' => 'Child Count',
        'reference_count' => 'Reference Count',
        'region_selection_status' => 'Region Selection Status',
        'region_source' => 'Region Source',
        'region_import_reactivate_disabled' => 'Region Import Reactivate Disabled',
        'is_leaf' => 'Can Be Final Region',
        'external_product_id' => 'External Product ID',
        'external_member_id' => 'External Member ID',
        'external_order_id' => 'External Order ID',
        'external_order_no' => 'External Order No',
        'external_sku' => 'External SKU',
        'external_spec' => 'External Spec',
        'match_strategy' => 'Match Strategy',
        'last_integration_synced_at' => 'Last Integration Synced AT',
        'imported_at' => 'Imported AT',
        'retry_count' => 'Retry Count',
        'source_document_no' => 'Source Document No',
        'external_reference' => 'External Reference',
        'error_type' => 'Error Type',
        'result_summary' => 'Result Summary',
        'latest_retry_status' => 'Latest Retry Status',
        'latest_retry_message' => 'Latest Retry Message',
        'related_model' => 'Related Object',
        'local_binding' => 'Local Binding',
        'governance_note' => 'Governance Note',
        'mapping_issue' => 'Mapping Issue',
        'invalidated_at' => 'Invalidated AT',
        'supplier_address_snapshot' => 'Supplier Address Snapshot',
        'customer_address_snapshot' => 'Customer Address Snapshot',
        'warehouse_address_snapshot' => 'Warehouse Address Snapshot',
        'from_warehouse_address_snapshot' => 'From Warehouse Address Snapshot',
        'to_warehouse_address_snapshot' => 'To Warehouse Address Snapshot',
    ],
    'hints' => [
        'system_display_name_requires_license' => 'Official commercial authorization is required. Until then, the login page and admin sidebar use the default product name. Once authorized, enter the system name you want customers and staff to see.',
        'default_currency' => 'Currency code used for amount display across the system, including symbols/prefixes, and as the default currency for advance receipt/payment accounts.',
        'display_timezone' => 'Used consistently for date and time display in the admin panel, printouts, and reports. Storage and internal calculations remain in UTC.',
        'allow_negative_stock' => 'When disabled, inventory balances cannot become negative, according to the system inventory validation rules.',
        'default_warehouse' => 'Select the default warehouse from the dropdown. If not set, each business document chooses its own warehouse.',
        'safety_stock_alert' => 'When enabled, inventory warnings can include safety stock and related rules.',
        'inventory_rule_section' => 'Warnings and replenishment per product + warehouse. Batch, expiry, and issue policy follow the product profile; same-named fields here are warehouse notes only.',
        'inventory_rule_safety_stock_sync' => 'When the rule and warnings are enabled, saving syncs this value to inventory balances (shared across SKUs). Disabling warnings or the rule clears it; adjust manually in Inventory Balance.',
        'inventory_rule_warning_enabled' => 'When off, safety stock is not synced and balance thresholds are cleared; low-stock warnings from this rule stop. Replenishment still uses reorder settings.',
        'inventory_rule_governance_flags_follow_product' => 'Effective flags follow the product profile; toggles here are warehouse notes only.',
        'inventory_rule_expiry_warning_follows_product' => 'Near-expiry days follow the product profile; this field is not used in calculations.',
        'inventory_rule_issue_policy_follows_product' => 'Follows the product issue policy; this option does not affect issuing.',
        'inventory_rule_reorder_replenishment' => 'Suggestions when available qty ≤ reorder point; qty references target and reorder point.',
        'inventory_rule_replenishment_enabled' => 'When off, no replenishment suggestions are generated.',
        'inventory_balance_safety_stock_from_rule' => 'If this product has an inventory rule in this warehouse and warning is enabled, saving the rule overwrites this safety stock value. You may also edit it manually here, but the next rule save may overwrite it again.',
        'rule_code' => 'The code must be unique in the system. Change it carefully after creation to avoid affecting historical document references.',
        'current_serial' => 'Starting serial value used for the next generated number. Roll it back carefully after saving to avoid duplicate numbers.',
        'pattern_optional' => 'Enter a numbering rule note here to help teammates understand it. This does not affect automatic numbering.',
        'auto_code' => 'You may enter a code manually. Leave it blank to generate one from the enabled numbering rule.',
        'voucher_attachment' => 'Supports bank receipts, transfer screenshots, PDFs, and other vouchers. Up to 10 files, 10 MB per file. Files are stored under storage/app/private (not public); previews use signed URLs—APP_URL must match your browser host. Vouchers can be added while draft or submitted; not after effective.',
        'purchase_request_source_type' => 'Select the source type when creating. It cannot be changed after saving to keep source document traceability consistent.',
        'purchase_request_source_reference_no' => 'Records an external or upstream reference number, such as a replenishment suggestion number. When the source is Replenishment Suggestion, the system fills it automatically and it cannot be changed after saving.',
        'purchase_request_source_system' => 'Marks the data source. For manual records or replenishment suggestions generated in this system, use "This System" or leave it blank. For external ERP or channel integrations, enter the counterpart system name. It is written to the purchase order during conversion.',
        'purchase_request_external_reference_id' => 'Stable reference identifier for reconciliation, interfaces, or external systems, such as the counterpart document number or UUID. It may be the same as the source reference number or different, and is optional. It is written to the purchase order during conversion.',
        'customer_category_status' => 'After disabling, this category will no longer appear in new customer forms or edit forms that do not already reference it. Customer records that already reference it can still display and retain it.',
        'customer_category_prefer_disable_when_used' => 'This category is referenced by customer profiles and cannot be deleted. Prefer disabling it to preserve category display in historical customer profiles.',
        'customer_category_table_search' => 'Typing keywords in this column searches both category code and category name.',
        'customer_salesperson_from_profiles' => 'The list comes from enabled Salesperson master records that are linked to employees. Salespersons without linked employees should be maintained in Salesperson Management first.',
        'supplier_category_status' => 'After disabling, this category will no longer appear in new supplier forms or edit forms that do not already reference it. Supplier records that already reference it can still display and retain it.',
        'supplier_category_prefer_disable_when_used' => 'This category is referenced by supplier profiles and cannot be deleted. Prefer disabling it to preserve category display in historical supplier profiles.',
        'supplier_category_table_search' => 'Typing keywords in this column searches both category code and category name.',
        'address_detail' => 'Enter detailed address information such as street, house number, building, and floor.',
        'region_default_country' => 'The current system country/region is filled by default. Existing historical values are preserved first.',
        'region_selection_scope' => 'Select and save the region by country, province, city, and district. Enter street, town, park, building, and house number details in Detailed Address below. Only enabled regions are shown; when editing existing data, disabled original regions may still be retained for display.',
        'region_final_selection' => 'Select down to the district level. Disabled regions will no longer appear in new dropdown options.',
        'region_disable_scope' => 'After disabling, the region will no longer appear in create and edit forms. Historical referenced records can still display normally.',
        'admin_role_copy' => 'The original role selections will be copied. Change the name before saving.',
        'admin_role_disable' => 'After disabling, this role cannot be assigned to new admins. Admins already using it will immediately lose the corresponding capabilities.',
        'admin_role_enable' => 'After enabling, this role can be assigned to admins again and the corresponding capabilities are restored.',
        'admin_role_delete' => 'Remove this role from all admins first. Deletion cannot be undone.',
        'admin_role_permission_readonly' => 'You can only view the selected permissions; they cannot be modified here.',
        'admin_role_super_admin_permissions' => 'This role has all capabilities by default. This view is only for browsing the structure.',
        'admin_role_integration_nav_hidden' => 'The External Integration entry is hidden from the left menu, so related selections are not listed separately here. If the role already has such capabilities, saving this page will not remove them automatically. To adjust them, enable the corresponding menu in the system and then return to select permissions.',
        'admin_role_permission_search_prompt' => 'Type to narrow the list…',
        'admin_role_plugin_permissions' => 'Grouped by installed official plugins. Each plugin lists only its own permissions, separate from host plugin management in System Settings.',
        'bootstrap_admin_roles_readonly' => 'The first admin created during installation has a system-fixed role and cannot be changed here.',
        'region_parent_change_restricted' => 'Direct parent-region changes are not supported at this stage. To correct it, create the correct region and disable the old one.',
        'region_import_update_policy' => 'You can run this again at any time. Only built-in province/city/district data is updated. Manually added regions are not overwritten or re-parented. After import, the final-region flag is refreshed based on child nodes. Names, parents, paths, and sort order align with built-in data; custom short names and disabled status are kept by default.',
        'region_manual_create_intro' => 'Manual region creation: leave Parent Region empty to create a top-level node with a custom region name, such as an operating zone or default root. With a parent selected, the system advances the level automatically and maintains path data. System region code, country code, level, path, leaf flag, and source are written automatically. Province/city/district import only updates built-in records by code and does not overwrite manual regions.',
        'region_manual_create_status' => 'Enabled means this node can be used in the region tree. Disabled nodes no longer appear in region master maintenance screens for adding child regions.',
        'region_manual_create_parent' => 'Leave blank to create a top-level region. If a parent is needed, search by keyword and select an enabled node.',
        'region_import_china_modal' => 'Import from the system built-in province/city/district data file. No external network access is required. Manually maintained regions will not be overwritten.',
        'region_import_reactivate_disabled' => 'When checked, regions within the import scope that were previously disabled manually are re-enabled.',
        'document_address_snapshot' => 'Stores the region, address, and contact information at the time of document creation. Later changes to master data do not rewrite historical document content.',
        'salesperson_recommend_link_employee' => 'It is recommended to select a linked employee. Name, department, position, and phone will sync from the employee master by default. Without a link, the text fields below can still be maintained manually. Disabled employees or employees no longer marked as salespersons remain selectable when already referenced by this profile.',
        'product_brand_strategy' => 'You may enter the brand name directly. If brand master data is enabled, select from the dropdown to keep data consistent.',
        'brand_logo' => 'Enter an image URL or a system-accessible path for list and document display.',
        'brand_sort' => 'Smaller numbers appear earlier. Records with the same sort value are shown by creation order.',
        'product_brand_code_auto' => 'You may enter a brand code manually. Leave it blank to generate one from the enabled Product Brand Code numbering rule, such as BR0001.',
        'product_brand_selector' => 'New selections list only enabled brand master records. If the current product is linked to a disabled brand, that brand remains available so the existing link can be retained.',
        'product_spec_strategy' => 'Spec and model are combined into one field. If multi-spec is enabled, maintain spec dimensions and spec combinations below.',
        'product_spec_enabled' => 'When disabled, the system maintains only one default spec combination and uses the Spec/Model value above as the summary. When enabled, multiple spec dimensions and combinations can be maintained.',
        'product_unit_configuration_intro' => 'The base unit is the default unit for product inventory and document quantities. After enabling auxiliary units, set the conversion between auxiliary and base units. Documents and reports display and summarize according to this relationship.',
        'product_auxiliary_preview_placeholder' => 'Select base and auxiliary units and enter quantities on both sides to generate a conversion preview automatically.',
        'spec_combo_code' => 'Leave blank to generate the spec code from the numbering rule. When maintained manually, ensure it is globally unique.',
        'default_spec_combo' => 'The default spec is used first for list display and document entry. Only one spec can be default when multiple specs exist.',
        'generate_spec_combinations' => 'Generate new rows only for spec value combinations that do not already exist. Existing spec combination codes, barcodes, prices, enabled status, and sort order are not changed or deleted.',
        'spec_groups_manage_before_combos' => 'Maintain spec dimensions and values first, then generate combinations on the Spec Combinations tab. Dimensions can be edited or deleted freely before any combination exists.',
        'spec_groups_locked_after_combos' => 'Once spec combinations exist, dimensions and referenced spec values cannot be deleted. Disable and delete unused combinations to reduce clutter; a dimension stays locked while any combination still references it. Use Rebuild Spec Structure when you need to change dimensions.',
        'rebuild_spec_matrix' => 'This turns off multi-spec, deletes all spec dimensions and combinations, and restores a single default combination. Allowed only when every combination has no stock balance and is not referenced by inventory, purchase, or sales data. After completion, turn multi-spec back on and maintain the new structure.',
        'spec_combos_lifecycle' => 'Spec combinations are the inventory and document dimension and are usually not physically deleted. Disable them first; redundant combinations never used in stock or trading can be deleted. At least one combination must remain for multi-spec products.',
        'delete_spec_combo' => 'Deletes only a disabled combination that was never referenced by inventory or trading documents. This cannot be undone.',
        'product_sku_unit_override' => 'Leave blank to use the product profile default unit.',
        'document_line_unit_inventory_base_only' => 'Quantities can be entered in the base unit or auxiliary unit. Inventory balance is based on the converted base-unit quantity, while the entered quantity and unit are retained for review.',
        'document_line_entry_quantity' => 'Enter a whole number, or up to :decimal decimal places (same as System Settings → Basic Information & Display → Quantity Decimal Places).',
        'document_line_entry_quantity_integer' => 'Enter a whole number greater than 0 (same as System Settings → Basic Information & Display → Quantity Decimal Places).',
        'money_entry_amount' => 'Enter a whole number, or up to :decimal decimal places (same as System Settings → Basic Information & Display → Amount Decimal Places).',
        'money_entry_amount_integer' => 'Enter a whole-number amount (same as System Settings → Basic Information & Display → Amount Decimal Places).',
        'report_quantity_in_base_unit' => 'Quantities in lists are summarized by the product base unit and may differ from the document entered unit.',
        'supplier_performance_exception_rate' => 'Purchase exceptions in the last 30 days divided by effective purchase receipt count. The denominator is at least 1 to avoid division by zero. The filters below narrow purchase orders, purchase amount, count, latest purchase date, effective receipt count, and this denominator. Last-30-day exceptions/returns and price-reference metrics keep their own fixed scopes.',
        'inventory_balance_auxiliary_reference_note' => 'Converted using the current product profile fixed conversion relationship. For reference only and not used as a settlement basis.',
        'inventory_balance_realtime_is_base' => 'Balance and available quantity are both based on the product base unit.',
        'inventory_summary_total_in_quantity' => 'Sum of all inbound-direction transactions in the selected business time range for this warehouse (including transfer and purchase receipt). See dedicated columns for transfer and purchase breakdown.',
        'inventory_summary_total_out_quantity' => 'Sum of all outbound-direction transactions in the selected business time range for this warehouse (including transfer and sales outbound). See dedicated columns for transfer and sales breakdown.',
        'inventory_summary_transfer_in_quantity' => 'Only transfer-in transactions. Excludes purchase receipt and transfer void reversal types.',
        'inventory_summary_transfer_out_quantity' => 'Only transfer-out transactions. Excludes sales outbound and transfer void reversal types.',
        'inventory_apply' => 'After confirmation, the system updates inventory by line item and generates inventory transaction records. Verify product, warehouse, and quantity information.',
        'inventory_apply_inbound' => 'After confirmation, the system increases inventory by line item and generates inventory transaction records. Verify product, warehouse, and quantity information.',
        'inventory_apply_outbound' => 'After confirmation, the system deducts inventory by line item and generates inventory transaction records. Verify product, warehouse, and quantity information.',
        'inventory_apply_transfer' => 'After confirmation, the system immediately deducts stock from the source warehouse and increases stock in the destination warehouse. Verify product, source warehouse, destination warehouse, and quantity information.',
        'transfer_apply_modal_heading' => 'Confirm transfer effectiveness and post inventory?',
        'inventory_apply_stocktake' => 'After confirmation, the system adjusts inventory according to stocktake differences and generates inventory transaction records. Verify the stocktake result.',
        'inventory_void' => 'After voiding, this document no longer participates in subsequent business processing. If inventory has changed, the system handles related inventory impact according to business rules and validates document status, line completeness, and stock quantity before proceeding.',
        'inventory_revoke_effective_heading' => 'Revoke the effective status of this document?',
        'inventory_revoke_effective_body' => 'After confirmation, the system generates reverse inventory transactions to undo the inventory impact of this effectiveness. Original inventory transactions remain for audit. If inventory has been occupied by later business or the current rule does not allow revocation, the operation stops and the reason is shown.',
        'inventory_void_policy_action_heading' => 'Cannot Revoke Effectiveness',
        'inventory_void_policy_blocked_ui' => 'The option to reverse inventory impact when voiding effective inventory documents is not enabled, so effectiveness cannot be revoked here. Adjust the document void policy in business parameters or handle it with another inventory adjustment document.',
        'inventory_void_policy_disabled_reason' => 'The current rule does not allow reversing the effective impact of an effective inventory document.',
        'inventory_void_mark_only_heading' => 'Void this document as mark-only?',
        'inventory_void_mark_only_body' => 'After confirmation, the document status is marked as voided, but the system will not generate reverse inventory transactions or roll back existing inventory/business quantity impact. Make sure this matches the current mark-only voiding rule.',
        'settlement_void_policy_disabled_reason' => 'The current system rule does not allow directly voiding an effective settlement document.',
        'transfer_complete' => 'Completing the transfer only confirms that the transfer process is finished. Inventory will not change again. After confirmation, the document is marked completed and the header and lines can no longer be edited.',
        'transfer_complete_modal_heading' => 'Confirm transfer process completion?',
        'transfer_void_with_rollback' => 'After confirmation, the system deducts the transferred quantity from the destination warehouse and restores it to the source warehouse to reverse this transfer. Original inventory transactions remain for audit. If destination stock is insufficient or the current rule does not allow reversal, the operation stops and shows the reason.',
        'transfer_void_requires_inventory_rollback' => 'This transfer has already changed inventory. The current void policy is mark-only and does not roll back stock automatically, so it cannot be voided here. Enable restore stock and finance impact on void in business parameters, or handle it with another inventory adjustment.',
        'stocktake_scope' => 'You may record the stocktake scope first. Line items should follow the products actually included in the stocktake. When applied, differences are recalculated using the current book inventory.',
        'stocktake_actual_quantity' => 'Actual quantity is entered from the stocktake result. When applied, the system writes back book quantity, difference quantity, and gain/loss result automatically.',
        'stocktake_serial_numbers_count_must_match_quantity' => 'For serial-managed products, the counted serial number count must match the actual quantity. Comma or newline paste is supported.',
        'document_line_serial_numbers_must_match_quantity' => 'Serial count must match the entered quantity (positive integer).',
        'purchase_order_business_overview' => 'Read-only summary of order status, receipt progress, payments, and related documents for quick execution tracking.',
        'purchase_order_overview_payable_pending' => 'Available after confirmation',
        'purchase_order_overview_arrival_pending' => 'Available after confirmation',
        'purchase_confirm' => 'After confirmation, this purchase order becomes executable and can proceed to purchase receipt. Verify supplier, product, quantity, unit price, and amount.',
        'purchase_close' => 'Close this purchase order? After closing, receipts are no longer allowed. Make sure all related business has been completed.',
        'purchase_order_void' => 'After voiding, this purchase order no longer participates in subsequent business. If unfinished purchase receipts or returns exist, the system stops the voiding operation and shows the reason.',
        'purchase_order_void_heading' => 'Void this purchase order?',
        'purchase_order_void_blocked_downstream' => 'Effective purchase receipts or purchase returns exist. Handle the related inventory documents before voiding this order.',
        'purchase_arrival_register' => 'Partial arrivals are registered through purchase receipt documents. Arrival quantity records the supplier-delivered quantity; receipt quantity records the actually stocked-in quantity.',
        'purchase_return_reference' => 'A purchase return may reference only a purchase order, or it may also reference a specific purchase receipt for traceability.',
        'purchase_request_convert' => 'Purchase orders will be generated based on the remaining quantity of the current purchase request. If line target warehouses differ, the system splits them into multiple purchase orders by warehouse.',
        'purchase_request_convert_selected' => 'Select the request lines to convert and enter the quantity for each line. Quantities cannot exceed each line\'s remaining convertible quantity. If target warehouses differ, multiple purchase orders may be created.',
        'purchase_request_generate_inquiry' => 'Select lines to inquire, enter inquiry quantities (not exceeding each line\'s remaining quantity), and choose one or more suppliers. The system will create an inquiry document and placeholder quotes for each supplier.',
        'purchase_inquiry_convert_quotes' => 'Select valid supplier quotes and enter convert quantities. Purchase orders will be created by supplier (and target warehouse when needed), consuming remaining request quantities.',
        'purchase_inquiry_from_request_create' => 'Select a purchase request to load eligible lines. Default inquiry quantity is each line\'s remaining quantity. You can select multiple suppliers to create placeholder quotes.',
        'purchase_request_suggested_supplier' => 'Suggested supplier for the whole purchase request. It can be filled by default when recording inquiries without a supplier and used as a preselection during conversion. The actual supplier is determined by inquiry results and the conversion selection.',
        'purchase_request_submit' => 'Submit this purchase request? After submission, it enters the pending process and can be converted to purchase orders.',
        'purchase_request_close' => 'Close this purchase request? After closing, it can no longer be converted. Make sure the remaining demand has been handled.',
        'purchase_request_void' => 'Void this purchase request? After voiding, traceability is retained according to system rules, and further business processing is no longer allowed.',
        'purchase_request_void_heading' => 'Void this purchase request?',
        'purchase_inquiry_quote_scope' => 'Inquiry records are stored by purchase request item + supplier, making it easier to compare quotes, record recommended prices, and reference them for future pricing.',
        'sales_order_business_overview' => 'Read-only summary of order status, collections, and related documents for quick execution tracking.',
        'customer_business_overview' => 'Read-only summary of credit, receivables, recent sales, and receipts for quick customer business tracking.',
        'supplier_business_overview' => 'Read-only summary of payables, recent purchases, payments, and inquiry quotes for quick supplier tracking.',
        'product_inventory_business_overview' => 'Read-only summary of stock, pending inbound/outbound, recent purchase/sales activity, and inventory movements (prices and stock are reference values).',
        'product_overview_price_from_master' => 'master data reference',
        'product_overview_price_from_recent_purchase' => 'recent purchase',
        'product_overview_price_from_recent_sales' => 'recent sales',
        'sales_order_overview_receivable_pending' => 'Available after confirmation',
        'sales_confirm' => 'After confirmation, this sales order becomes executable and can proceed to sales outbound. Verify customer, product, quantity, unit price, discount, and amount.',
        'sales_close' => 'Close this sales order? After closing, outbound processing is no longer allowed. Make sure all related business has been completed.',
        'sales_order_void' => 'After voiding, this sales order no longer participates in subsequent business. If unfinished sales outbound or returns exist, the system stops the voiding operation and shows the reason.',
        'sales_order_void_heading' => 'Void this sales order?',
        'sales_order_void_blocked_downstream' => 'Effective sales outbound documents or sales returns exist. Handle the related inventory documents before voiding this order.',
        'sales_return_reference' => 'A sales return may reference only a sales order, or it may also reference a specific sales outbound document for traceability.',
        'sales_quote_activate' => 'After activation, the quote becomes an officially valid quote and can later be converted to a sales order.',
        'sales_quote_submit' => 'After submission, the system updates the status to pending effective, effective, or expired according to the validity period.',
        'sales_quote_convert' => 'Conversion generates a new sales order and keeps quote-source traceability.',
        'sales_quote_void' => 'Void this quote? After voiding, historical traceability is retained according to system rules, and the quote can no longer be converted to a sales order.',
        'sales_quote_void_heading' => 'Void this quote?',
        'sales_auto_price_resolution' => 'Leave blank to match the official pricing rules automatically. Entering a different unit price is recorded as a manual price override.',
        'sales_payment_term_days' => 'Leave blank to use the customer payment term by default. The due date is calculated automatically from the business date during confirmation.',
        'sales_order_discount_rate' => 'This field is stored for reference only and does not affect order totals, receivables, or printed amounts. Enter discounts per line under Discount Amount. Order total = sum of (quantity × unit price − discount amount) per line.',
        'document_line_pick_product_then_spec' => 'Select a product from the dropdown first (labels include code; browse the list or search by code, barcode, or mnemonic), then select the spec combination. If only one spec exists, it is filled automatically.',
        'bulk_add_document_line_products_modal' => 'Add manual product lines to this order in bulk. They are not linked to purchase requests or inquiry conversion and do not occupy request quantities.',
        'bulk_add_document_line_products_quote_modal' => 'Add quote lines in bulk. Unit prices follow customer pricing rules; stock is not affected.',
        'bulk_add_document_line_products_request_modal' => 'Add purchase request lines in bulk. A warehouse is required; conversion occupation is not written yet.',
        'bulk_add_document_line_products_inventory_modal' => 'Add lines in bulk. Batch, expiry, and serial details must be maintained per line; posting rules are unchanged.',
        'bulk_add_document_line_products_purchase' => 'Bulk-added purchase lines are manual only; they do not write request occupation or conversion ledger entries.',
        'bulk_add_document_line_products_sales' => 'Bulk-added sales lines are manual only; unit prices follow system pricing rules and stock is not affected.',
        'bulk_add_product_skus_search' => 'Open the dropdown to browse recent specs, or search by product code, name, barcode, mnemonic, SKU code, or spec summary.',
        'barcode_quick_add_sales_order_modal' => 'Scan or type a barcode to add a sales order line. Unit price follows system pricing rules; inventory is not affected.',
        'barcode_quick_add_stocktake_modal' => 'Scan or type a barcode to add a stocktake line. Book quantity is calculated on confirmation; enter actual count here only.',
        'barcode_quick_add_other_stock_out_modal' => 'Scan or type a barcode to add an other stock-out line. Stock validation runs on outbound confirmation.',
        'purchase_receipt_default_remaining_quantity' => 'Defaults to the purchase order line remaining quantity not yet received. Adjust for actual arrival; posting follows confirmation rules.',
        'purchase_receipt_unit_price_from_order' => 'Defaults to the purchase order line unit price. Adjust if negotiated differently.',
        'sales_outbound_default_pending_ship_quantity' => 'Defaults to the sales order line pending ship quantity. Adjust for actual shipment; posting follows confirmation rules.',
        'sales_outbound_unit_price_from_order' => 'Defaults to the sales order line unit price. Adjust if negotiated differently.',
        'document_line_book_quantity_reference' => 'Book quantity (reference): :quantity. Stocktake confirmation uses system balances; this is for entry guidance only.',
        'document_line_available_stock_reference' => 'Available stock (reference): :quantity. Outbound confirmation uses system validation; this is for entry guidance only.',
        'batch_no_locked_by_source_batch' => 'Filled automatically from the selected source batch and cannot be edited.',
        'batch_no_manual_when_no_source_batch' => 'Enter a batch number manually when no source batch is selected, or pick a source batch only.',
        'sales_order_due_date_pending' => 'Select a customer and enter the business time to preview the estimated due date here.',
        'sales_order_credit_after_confirm' => 'After confirming the sales order, the system records the credit check result here.',
        'sales_credit_override_reason' => 'Fill this only when the credit check is blocked and a controlled release is required.',
        'customer_price_rule_disable' => 'After disabling, this price rule no longer participates in automatic matching, but historical traceability is retained.',
        'customer_price_level_code' => 'Uses the same price-level code as Price-level Pricing in Customer Price Rules. If not selected, this customer does not participate in price-level matching.',
        'customer_price_rule_price_level_code' => 'Must match the customer price level in the customer profile to be automatically matched when entering quotes or sales lines.',
        'price_level_unknown' => 'Not found in dictionary',
        'sales_control_workbench' => 'This area summarizes business attention items such as quote validity, expiring customer prices, credit exceptions, and controlled releases.',
        'allow_settlement_on_closed_document' => 'When enabled, continued receipt/payment registration after document closure is suitable for cases where business is complete but funds are recorded later. When disabled, registration is blocked by default to avoid inconsistency with closed document status.',
        'document_void_policy' => 'Controls whether inventory, purchase, and sales documents reverse inventory and AR/AP impact when voided.',
        'settlement_void_policy' => 'Controls how settlement documents such as receipts, payments, statements, and write-offs are handled when voided.',
        'default_source_type' => 'Default source type filled when creating business documents. It can be changed on the document.',
        'source_system_guidance' => 'For documents generated in this system, select This System. For data from external systems, select the corresponding source.',
        'receipt_reference' => 'Optionally enter the main referenced sales order for business traceability. Actual receivable offset is completed through write-off documents.',
        'receipt_order_submit' => 'Submit this receipt registration? After submission, it enters Pending Confirmation and can continue to Confirm Receipt for posting confirmation.',
        'receipt_order_confirm' => 'After confirmation, the system records this receipt and includes it in the customer AR/AP ledger, ready for later write-off and reconciliation. Verify customer, amount, and related document.',
        'receipt_order_void' => 'After voiding, this receipt registration no longer participates in subsequent business. If occupied by later write-offs, the system stops and shows the reason. The system then handles the related settlement impact according to business rules.',
        'settlement_void_effective_heading' => 'Void this effective settlement?',
        'settlement_void_effective_body' => 'After voiding, this document no longer participates in subsequent business. The system handles related settlement impact according to business rules; if occupied by write-offs, the operation stops and shows the reason. The original record remains for audit.',
        'payment_reference' => 'Optionally enter the main referenced purchase order for business traceability. Actual payable offset is completed through write-off documents.',
        'payment_amount_reference_unpaid' => 'Unpaid balance: :amount. When a purchase order is selected and payment amount is empty, the unpaid amount is filled by default and can be adjusted as needed.',
        'receipt_amount_reference_unreceived' => 'Unreceived balance: :amount. When a sales order is selected and receipt amount is empty, the unreceived amount is filled by default and can be adjusted as needed.',
        'reference_order_no_outstanding' => 'This document currently has no unpaid/unreceived balance. Enter the actual payment/receipt amount.',
        'payment_order_submit' => 'Submit this payment registration? After submission, it enters Pending Confirmation and can continue to Confirm Payment for posting confirmation.',
        'payment_order_confirm' => 'After confirmation, the system records this payment and includes it in the supplier AR/AP ledger, ready for later write-off and reconciliation. Verify supplier, amount, and related document.',
        'payment_order_void' => 'After voiding, this payment registration no longer participates in subsequent business. If occupied by later write-offs, the system stops and shows the reason. The system then handles related settlement impact according to business rules.',
        'settlement_adjustment_void_heading' => 'Void this effective settlement adjustment?',
        'settlement_adjustment_void_body' => 'After voiding, this adjustment no longer participates in subsequent business. The system reverses the settlement impact it has written according to business rules; if occupied by later business, the operation stops and shows the reason.',
        'settlement_statement_confirm' => 'After confirmation, this statement becomes a reference for subsequent write-off and settlement. Verify counterparty, period, and line amounts.',
        'settlement_statement_void' => 'After voiding, this statement no longer participates in subsequent reconciliation. If unfinished downstream business exists, the system stops and shows the reason.',
        'settlement_statement_void_heading' => 'Void this statement?',
        'settlement_statement_void_confirmed_body' => 'This statement has been confirmed and can be used for later write-off and reconciliation. After voiding, the system cancels its effective status in reconciliation and write-off. If unfinished downstream business exists, the operation stops and shows the reason.',
        'settlement_statement_void_draft_body' => 'Void this unconfirmed statement? After voiding, it no longer participates in subsequent reconciliation.',
        'settlement_adjustment_apply' => 'After confirmation, this settlement adjustment becomes effective and is written to settlement records. Verify the amount and adjustment direction again.',
        'settlement_adjustment_void' => 'After voiding, this settlement adjustment no longer participates in subsequent business. The system reverses its effective settlement impact according to business rules; if occupied by later business, the operation stops and shows the reason.',
        'settlement_write_off_confirm' => 'After confirmation, the system completes write-off by line item and updates related AR/AP document status. Verify write-off targets and amounts.',
        'settlement_write_off_reverse' => 'Reverse this write-off document? Reversal cancels the settled AR/AP impact. If the current status does not allow reversal, the system stops and shows the reason.',
        'replenishment_generate_result' => 'Generated or refreshed :count replenishment suggestions according to enabled rules.',
        'inventory_serial_number_manual_maintenance_blocked' => 'Serial numbers are created and moved by inventory business documents. To keep ledger quantities aligned with serial status, do not add or edit critical inventory fields manually.',
        'inventory_serial_number_governance_form' => 'Only remark and sort order can be edited here. Product, warehouse, batch, status, and source documents must change through receipts, shipments, transfers, returns, and other inventory flows.',
        'inventory_serial_number_disable_confirm' => 'After disabling, this serial number cannot be used for outbound operations. Continue?',
        'inventory_serial_number_enable_confirm' => 'Enabling only restores the governance availability flag; it does not correct inventory ledger quantities. Continue?',
        'inventory_serial_number_list' => 'Serial numbers are created and moved by inventory documents. Review status, source documents, and trace logs here; change critical inventory data through business documents only.',
        'inventory_serial_number_detail_trace' => 'Use Serial Number Logs below for traceability. Related exceptions and stocktake serial differences support governance follow-up.',
        'stocktake_difference_governance' => 'Stocktake differences are used to record reasons, handling status, and confirmation traces. They do not replace the main stocktake document flow.',
        'region_import_scope' => 'Built-in import only covers province, city, and district levels. Towns and streets can be added manually in this system if needed.',
    ],
    'empty_states' => [
        'default_empty' => 'No data',
        'inventory_serial_number_no_exceptions' => 'No related inventory exceptions',
        'inventory_serial_number_no_stocktake_differences' => 'No stocktake serial difference records',
    ],
    'widgets' => [
        'business_overview_workbench' => [
            'section_title' => 'Business overview',
            'section_description' => 'Core metrics for this month. Action items with counts appear in Follow-ups below, sorted by priority.',
            'metric_month_sales_amount' => 'Sales this month',
            'metric_month_purchase_amount' => 'Purchases this month',
            'metric_pending_delivery_count' => 'Orders pending shipment',
            'metric_pending_receipt_count' => 'Orders pending receipt',
            'metric_inventory_warning_count' => 'Inventory alerts',
            'metric_receivable_amount' => 'Open receivables',
            'metric_payable_amount' => 'Open payables',
            'metric_month_cashflow' => 'Receipts and payments this month',
            'metric_month_paid_amount' => 'Payments this month',
            'chart_sales_trend_heading' => 'Sales trend (last 7 days)',
            'chart_sales_trend_description' => 'Submitted sales order amounts by business date.',
            'chart_sales_trend_dataset' => 'Sales amount',
            'chart_purchase_sales_heading' => 'Sales vs purchases this month',
            'chart_purchase_sales_description' => 'Daily comparison of sales and purchase order amounts.',
            'chart_purchase_sales_sales_dataset' => 'Sales amount',
            'chart_purchase_sales_purchase_dataset' => 'Purchase amount',
            'chart_inventory_distribution_heading' => 'Inventory alert breakdown',
            'chart_inventory_distribution_description' => 'Low stock, open exceptions, and pending replenishment suggestions.',
            'chart_inventory_low_stock' => 'Low-stock alerts',
            'chart_inventory_exception' => 'Open inventory exceptions',
            'chart_inventory_replenishment' => 'Pending replenishment suggestions',
            'chart_inventory_distribution_empty' => 'No inventory alerts right now',
        ],
        'workbench_shared' => [
            'view' => 'View',
            'default_empty' => 'No data',
        ],
        'unified_workbench_reminders' => [
            'section_title' => 'Follow-ups',
            'section_description' => 'Open items across inventory, procurement, settlement, and sales. Only non-zero counts are shown, ordered by priority.',
            'empty' => 'Nothing needs attention right now',
        ],
        'inventory_workbench' => [
            'module_title' => 'Module',
            'module_description' => 'Inventory Workbench guidance and recommended processing order.',
            'reminders_title' => 'Reminders',
            'reminders_description' => 'Inventory Workbench guidance and recommended processing order.',
            'reminders_empty' => 'No pending tasks',
            'shortcuts_title' => 'Shortcuts',
            'shortcuts_description' => 'Inventory Workbench guidance and recommended processing order.',
            'shortcuts_empty' => 'No shortcuts',
            'exceptions_title' => 'Exception Entry',
            'exceptions_description' => 'Inventory Workbench guidance and recommended processing order.',
            'exceptions_empty' => 'No exception entries',
            'shortcut_batches' => 'Open Batch Management',
            'shortcut_serial' => 'Open Serial Number Management',
            'shortcut_warnings' => 'Open Inventory Warnings',
            'shortcut_rules' => 'Open Inventory Rules',
            'shortcut_replenishment' => 'Open Replenishment Suggestions',
            'shortcut_differences' => 'Open Stocktake Differences',
            'shortcut_exceptions' => 'Open Inventory Exceptions',
            'shortcut_audit' => 'Open Audit Logs (Inventory-related)',
            'exceptions_expired_batch_stock' => 'Expired batches still have remaining stock',
            'exceptions_disabled_batch_stock' => 'Disabled batches still have remaining stock',
            'exceptions_serial_batch_mismatch' => 'Serial number and batch mismatch',
            'exceptions_pending_difference' => 'Pending stocktake differences',
            'exceptions_pending_replenishment' => 'Pending replenishment suggestions',
            'reminder_expired_batch' => 'Expired batches still have remaining stock',
            'reminder_near_expiry_batch' => 'Near-expiry batches still have remaining stock',
            'reminder_low_stock' => 'Low or zero stock',
            'reminder_pending_replenishment' => 'Pending replenishment suggestions',
            'reminder_pending_stocktake_difference' => 'Pending stocktake differences',
            'reminder_serial_mismatch' => 'Serial number status exception',
            'reminder_open_inventory_exception' => 'Pending inventory exceptions',
        ],
        'purchase_workbench' => [
            'module_title' => 'Procurement collaboration',
            'module_description' => 'Central place for purchase requests, inquiries, arrival follow-up, and supplier-facing items.',
            'reminders_title' => 'Purchase to-dos',
            'reminders_description' => 'Prioritize intake, conversion to orders, arrivals, and exception coordination.',
            'reminders_empty' => 'No purchase to-dos',
            'shortcuts_title' => 'Shortcuts',
            'shortcuts_description' => 'Jump to requests, inquiry comparison, orders, receipts, and statistics.',
            'shortcuts_empty' => 'No shortcuts',
            'highlights_title' => 'Highlights',
            'highlights_description' => 'Overdue arrivals, suppliers with frequent exceptions, and stale price references.',
            'highlights_empty' => 'No highlight items',
            'stat_pending_request' => 'Pending purchase requests',
            'stat_pending_convert' => 'Requests pending conversion',
            'stat_urgent_request' => 'Urgent purchase requests',
            'stat_pending_arrival' => 'Orders pending receipt',
            'stat_overdue_arrival' => 'Overdue pending arrivals',
            'stat_partial_arrival' => 'Partial receipts not finished',
            'stat_pending_exception' => 'Pending purchase exceptions',
            'stat_resupply_exception' => 'Exceptions pending resupply',
            'stat_supplier_attention' => 'Suppliers needing attention',
            'stat_stale_price' => 'Stale price references',
            'link_requests' => 'View purchase requests',
            'link_orders' => 'View purchase orders',
            'link_overdue' => 'View overdue pending arrivals',
            'link_exceptions' => 'View purchase exceptions',
            'link_resupply' => 'View resupply-pending exceptions',
            'link_supplier' => 'View supplier performance',
            'link_price' => 'View purchase price references',
            'shortcut_requests' => 'View purchase requests',
            'shortcut_inquiry' => 'View inquiry quotes',
            'shortcut_comparison' => 'View inquiry comparison',
            'shortcut_orders' => 'View purchase orders',
            'shortcut_receipts' => 'View purchase receipts',
            'shortcut_statistics' => 'View purchase statistics',
            'shortcut_supplier' => 'View supplier performance',
            'shortcut_price' => 'View purchase price references',
            'shortcut_audit' => 'View purchase audit trail',
            'exception_pending_request' => 'Pending purchase requests',
            'exception_pending_convert' => 'Requests pending conversion',
            'exception_urgent' => 'Urgent purchase requests',
            'exception_pending_arrival' => 'Orders pending receipt',
            'exception_overdue' => 'Overdue pending arrivals',
            'exception_partial_arrival' => 'Partial receipts not finished',
            'exception_pending' => 'Pending purchase exceptions',
            'exception_resupply' => 'Exceptions pending resupply',
            'exception_supplier' => 'Suppliers with frequent recent exceptions',
            'exception_supplier_attention' => 'Suppliers needing attention',
            'exception_stale_price' => 'Stale price references',
            'reminder_pending_purchase_request' => 'Pending purchase requests',
            'reminder_pending_convert_request' => 'Requests pending conversion',
            'reminder_urgent_purchase_request' => 'Urgent purchase requests',
            'reminder_pending_arrival_order' => 'Orders pending receipt',
            'reminder_overdue_arrival_order' => 'Overdue pending arrivals',
            'reminder_partial_arrival_order' => 'Partial receipts not finished',
            'reminder_pending_purchase_exception' => 'Pending purchase exceptions',
            'reminder_pending_resupply_exception' => 'Exceptions pending resupply',
            'reminder_high_frequency_exception_supplier' => 'Suppliers with frequent recent exceptions',
            'reminder_supplier_performance_attention' => 'Suppliers needing attention',
            'reminder_stale_purchase_price_reference' => 'Stale price references',
        ],
        'sales_workbench' => [
            'module_title' => 'Sales control',
            'module_description' => 'Quotes, credit control, price rules, and controlled order release in one place.',
            'reminders_title' => 'Sales to-dos',
            'reminders_description' => 'Prioritize quote effectiveness, conversion, credit, and price-rule follow-ups.',
            'reminders_empty' => 'No sales to-dos',
            'shortcuts_title' => 'Shortcuts',
            'shortcuts_description' => 'Jump to quotes, orders, customer prices, and credit control.',
            'shortcuts_empty' => 'No shortcuts',
            'exceptions_title' => 'Exception entry',
            'exceptions_description' => 'Expired quotes, credit issues, and controlled-release orders.',
            'exceptions_empty' => 'No exception entries',
            'stat_pending_quote' => 'Pending effective quotes',
            'stat_expiring_quote' => 'Quotes expiring soon',
            'stat_long_unconverted' => 'Long-standing unconverted quotes',
            'stat_blocked_credit' => 'Customers with credit blocks',
            'stat_near_limit' => 'Customers near credit limit',
            'stat_released_order' => 'Orders released under control',
            'stat_expiring_price' => 'Customer prices expiring soon',
            'stat_expired_price' => 'Expired customer prices',
            'link_quotes' => 'View sales quotes',
            'link_credit' => 'View credit control',
            'link_orders' => 'View sales orders',
            'link_prices' => 'View customer prices',
            'shortcut_quotes' => 'View sales quotes',
            'shortcut_orders' => 'View sales orders',
            'shortcut_prices' => 'View customer prices',
            'shortcut_credit' => 'View credit control',
            'shortcut_audit' => 'View sales audit trail',
            'exception_expired_quote' => 'Expired quotes',
            'exception_long_unconverted' => 'Long-standing unconverted quotes',
            'exception_blocked_credit' => 'Customers with credit blocks',
            'exception_released_order' => 'Orders released under control',
            'exception_expired_price' => 'Expired customer prices',
            'exception_audit' => 'Quote and credit audit trail',
            'reminder_pending_effective_quote' => 'Pending effective quotes',
            'reminder_expiring_quote' => 'Quotes expiring soon',
            'reminder_expired_quote' => 'Expired quotes',
            'reminder_long_unconverted_quote' => 'Long-standing unconverted quotes',
            'reminder_blocked_credit_customer' => 'Customers with credit blocks',
            'reminder_near_limit_customer' => 'Customers near credit limit',
            'reminder_released_override_order' => 'Orders released under control',
            'reminder_expiring_price_rule' => 'Customer prices expiring soon',
            'reminder_expired_price_rule' => 'Expired customer prices',
        ],
        'settlement_workbench' => [
            'module_title' => 'Settlement',
            'module_description' => 'AR/AP, write-offs, statements, and aging in one place.',
            'reminders_title' => 'Reminders',
            'reminders_description' => 'Overdue balances, long-unapplied receipts/payments, and recent adjustments.',
            'reminders_empty' => 'No settlement to-dos',
            'shortcuts_title' => 'Shortcuts',
            'shortcuts_description' => 'Jump to receivables, payables, write-offs, statements, and aging.',
            'shortcuts_empty' => 'No shortcuts',
            'exceptions_title' => 'Exception entry',
            'exceptions_description' => 'Overdue parties, long-unapplied cash, and settlement adjustments.',
            'exceptions_empty' => 'No exception entries',
            'stat_receivable_total' => 'Total receivables',
            'stat_payable_total' => 'Total payables',
            'stat_due_today_receivable' => 'Receivables due today (follow-up)',
            'stat_overdue_receivable' => 'Overdue receivables',
            'stat_due_soon_payable' => 'Payables due soon',
            'stat_large_unwritten' => 'Large unapplied receipt count',
            'stat_month_receipt' => 'Receipts this month',
            'stat_month_payment' => 'Payments this month',
            'amount_label' => 'Amount',
            'link_receivables' => 'View customer receivables',
            'link_payables' => 'View supplier payables',
            'link_receipts' => 'View receipt registrations',
            'link_payments' => 'View payment registrations',
            'shortcut_receivables' => 'View customer receivables',
            'shortcut_payables' => 'View supplier payables',
            'shortcut_write_offs' => 'View write-offs',
            'shortcut_statements' => 'View statements',
            'shortcut_aging' => 'View aging analysis',
            'exception_overdue_customer' => 'Overdue customer receivables',
            'exception_overdue_supplier' => 'Overdue supplier payables',
            'exception_long_unwritten_receipt' => 'Long-unapplied receipts',
            'exception_long_unwritten_payment' => 'Long-unapplied payments',
            'exception_recent_adjustment' => 'Recent settlement adjustments',
            'reminder_due_today_receivable' => 'Receivables due today (follow-up)',
            'reminder_overdue_receivable' => 'Overdue receivables',
            'reminder_due_soon_payable' => 'Payables due soon',
            'reminder_large_unwritten' => 'Large unapplied items',
            'reminder_long_unwritten' => 'Long-unapplied receipts/payments',
            'reminder_reversed_write_off' => 'Follow-up after write-off reversal',
            'reminder_recent_adjustment' => 'Follow-up after settlement adjustment',
        ],
        'inventory_overview_stats' => [
            'near_expiry_batches' => 'Near Expiry Batches',
            'expired_batches' => 'Expired Batches',
            'low_stock' => 'Low Stock',
            'pending_replenishment' => 'Pending replenishment suggestions',
            'pending_stocktake_difference' => 'Pending stocktake differences',
            'open_exceptions' => 'Open Exceptions',
            'link_batches' => 'View Batches',
            'link_exceptions' => 'View Exceptions',
            'link_warnings' => 'View Warnings',
            'link_replenishment' => 'View Replenishment',
            'link_differences' => 'View Differences',
        ],
    ],
    'installer' => [
        'env_check' => [
            'groups' => [
                'public_storage' => 'Public storage',
                'php_runtime' => 'PHP runtime',
                'extensions_required' => 'Required PHP extensions',
                'extensions_recommended' => 'Recommended PHP extensions',
                'writable_paths' => 'Writable directories',
                'env_file' => 'Environment file',
            ],
            'labels' => [
                'php_version' => 'PHP version (>= 8.3)',
                'symlink' => 'symlink() function',
                'process_function' => 'Process function :function()',
                'extension' => ':ext extension',
                'extension_opcache' => 'OPcache (Zend OPcache)',
                'public_storage' => 'public/storage path',
                'env_file' => '.env file',
                'writable_directory' => 'Directory :path',
            ],
            'summaries' => [
                'php_ok' => 'Current :version (meets >= 8.3.0)',
                'php_fail' => 'Current :version (requires >= 8.3.0)',
                'symlink_ok' => 'symlink() available',
                'symlink_fail' => 'symlink() unavailable; disable_functions=:disabled',
                'process_function_ok' => ':function() available',
                'process_function_fail' => ':function() unavailable; disable_functions=:disabled',
                'disabled_empty' => '(empty)',
                'extension_ok' => 'Loaded (extension_loaded(:ext)=true)',
                'extension_fail' => 'Not loaded (extension_loaded(:ext)=false)',
                'opcache_ok' => 'Enabled (Zend OPcache; opcache.enable=1)',
                'opcache_fail' => 'Not enabled (extension_loaded=:loaded; opcache.enable=:enable)',
                'public_storage_symlink_ok' => 'Symlink OK: :link -> :target',
                'public_storage_ready' => 'Path ready; storage:link on finalize',
                'public_storage_invalid_removed' => 'Invalid path removed; storage:link on finalize',
                'public_storage_cleanup_fail' => 'Cleanup failed: :message',
                'dir_ok' => 'Directory exists and is writable',
                'dir_not_writable' => 'Directory exists but is not writable',
                'dir_missing' => 'Directory does not exist',
                'env_exists_writable' => 'File exists and is writable',
                'env_exists_not_writable' => 'File exists but is not writable',
                'env_missing_template' => 'Missing .env and template file',
                'env_will_copy_writable' => 'No .env yet; will copy from .env.example; project root writable',
                'env_will_copy_not_writable' => 'No .env yet; project root is not writable',
                'path_suffix' => 'Path: :path',
            ],
            'hints' => [
                'php_version_fail' => 'Upgrade PHP to 8.3.0 or newer, then refresh this page.',
                'symlink_fail' => 'Remove symlink from disable_functions in php.ini, or ask your host to enable it; finalize runs storage:link.',
                'process_function_fail' => 'Remove :function from disable_functions in php.ini (also enable proc_open, proc_close, proc_get_status, proc_terminate), then restart PHP-FPM; online system updates require subprocess Artisan execution.',
                'extension_required_fail' => 'Enable extension=:ext in php.ini (on Windows often extension=php_:ext.dll) and restart PHP.',
                'extension_recommended_fail' => 'Optional: enable extension=:ext in php.ini; install can continue without it.',
                'opcache_recommended_fail' => 'Optional: enable opcache and opcache.enable=1 in php.ini for better performance.',
                'directory_not_writable' => 'Fix ownership/permissions so the web server user can write to this directory.',
                'public_storage_invalid_removed' => 'Invalid public/storage was removed; finalize will run php artisan storage:link.',
                'public_storage_cleanup_fail' => 'Fix or remove public/storage (symlink to storage/app/public or writable directory).',
                'env_not_writable' => 'Make .env writable by the web server user (install will write database settings).',
                'env_missing_example' => 'Ensure the package includes .env.example in the project root.',
                'env_root_not_writable' => 'Make the project root writable so .env can be created.',
                'env_will_copy' => '.env will be created from .env.example on first run.',
            ],
        ],
        'env_file_writable' => 'Env File Writable',
        'env_file_not_writable' => 'Env File Not Writable',
        'env_missing_example' => 'Env Missing Example',
        'root_writable_no_env' => 'Root Writable No Env',
        'root_not_writable_no_env' => 'Root Not Writable No Env',
        'php_symlink_ok' => 'Php Symlink OK',
        'php_symlink_missing' => 'Php Symlink Missing',
        'php_symlink_blocked' => 'Php Symlink Blocked',
    ],
    'integration_ui' => [
        'adapter_stub_capability' => 'This is a test connection. No real data will be sent to the external system.',
        'source_system_options' => [
            'dberp' => 'This System',
            'dbshop' => 'DBShop',
        ],
        'sync_retry_bulk_title' => 'Processed :success sync retries; :failed could not be completed.',
        'sync_retry_confirmation' => 'Sync Retry Confirmation',
        'sync_failure_hint' => 'Sync Failure Hint',
    ],
    'messages' => [
        'not_available' => '—',
        'sales_order_overview_no_related_outbounds' => 'No related sales outbound orders.',
        'sales_order_overview_no_related_returns' => 'No related sales return orders.',
        'sales_order_overview_no_related_receipts' => 'No related receipt records.',
        'sales_order_overview_no_related_receivables' => 'No related receivable records.',
        'purchase_order_overview_no_related_receipts' => 'No related purchase receipt documents.',
        'purchase_order_overview_no_related_returns' => 'No related purchase return documents.',
        'purchase_order_overview_no_related_payments' => 'No related payment records.',
        'purchase_order_overview_no_related_payables' => 'No related payable records.',
        'purchase_order_overview_no_related_exceptions' => 'No related receipt exceptions.',
        'purchase_order_overview_arrival_progress' => ':progress · Arrived :arrived · Received :received · Pending :pending',
        'customer_status_enabled' => 'Enabled',
        'customer_status_disabled' => 'Disabled',
        'supplier_status_enabled' => 'Enabled',
        'supplier_status_disabled' => 'Disabled',
        'customer_credit_usage_ratio' => ':percent% used',
        'customer_overview_no_recent_sales_orders' => 'No recent sales orders.',
        'customer_overview_no_open_receivables' => 'No open receivables.',
        'customer_overview_no_overdue_receivables' => 'No overdue receivables.',
        'customer_overview_no_recent_receipts' => 'No recent receipt records.',
        'supplier_overview_no_recent_purchase_orders' => 'No recent purchase orders.',
        'supplier_overview_no_open_payables' => 'No open payables.',
        'supplier_overview_no_overdue_payables' => 'No overdue payables.',
        'supplier_overview_no_recent_payments' => 'No recent payment records.',
        'supplier_overview_no_recent_inquiry_quotes' => 'No recent inquiry quotes.',
        'product_status_enabled' => 'Enabled',
        'product_status_disabled' => 'Disabled',
        'product_overview_not_inventory_managed' => 'Inventory not managed',
        'product_overview_no_stock_records' => 'No stock records',
        'product_overview_no_recent_purchases' => 'No recent purchases',
        'product_overview_no_recent_sales' => 'No recent sales',
        'product_overview_no_recent_inventory_movements' => 'No recent inventory movements',
        'product_overview_no_recent_stocktake_differences' => 'No recent stocktake differences',
        'partner_overview_no_recent_inquiry_quotes' => 'No inquiry quotes in the last 90 days.',
        'partner_overview_inquiry_quote_count' => ':count quote(s) in the last 90 days',
        'partner_overview_inquiry_quote_summary' => ':count in 90 days; latest :code (:date, unit :price)',
        'integration_test_mode_notice' => 'This is a test connection. No real data will be sent to the external system.',
        'license_free_commercial_notice' => 'The Standard Edition may be used commercially. To remove or modify copyright information, obtain a commercial copyright license.',
        'license_copyright_not_purchased' => 'Commercial copyright license not purchased',
        'admin_access_denied' => 'The current account does not have permission to access this page.',
        'admin_access_contact_super_admin' => 'To continue, contact the system administrator to grant the required admin permissions to the current account.',
        'page_not_found' => 'Page not found',
        'page_not_found_hint' => 'The address you requested does not exist or has been removed. Please check the link, or return to the system to continue.',
        'region_not_set' => 'Region not set',
        'address_detail_not_set' => 'Detailed address not provided',
        'contact_not_set' => 'Contact information not provided',
        'document_snapshot_not_recorded' => 'Not recorded',
        'region_enabled' => 'Enabled',
        'region_disabled' => 'Disabled',
        'region_final_selectable' => 'Selectable as final region',
        'region_not_final_selectable' => 'Hierarchy only',
        'region_usage_none' => 'Not currently referenced by customers, suppliers, or warehouses',
        'region_usage_customer' => 'Customers: :count',
        'region_usage_supplier' => 'Suppliers: :count',
        'region_usage_warehouse' => 'Warehouses: :count',
        'purchase_request_generated_from_replenishment' => 'Generated purchase request :code from the replenishment suggestion.',
        'purchase_request_convert_success' => 'Generated purchase order :code.',
        'purchase_request_inquiry_generated_success' => 'Generated inquiry :code. You can now fill in supplier quotes.',
        'purchase_inquiry_created_from_request' => 'Created inquiry :code from the purchase request.',
        'purchase_inquiry_quote_convert_success' => 'Generated purchase order :code from supplier quotes.',
        'purchase_inquiry_quote_convert_success_multiple' => 'Generated :count purchase orders by supplier: :codes.',
        'purchase_request_convert_success_multiple' => 'Generated :count purchase orders split by target warehouse: :codes.',
        'purchase_request_convert_target_warehouse' => 'Target warehouse: :warehouse',
        'purchase_conversion_order_voided' => 'Purchase order voided; source occupation reversed.',
        'purchase_conversion_item_removed' => 'Purchase order line removed; source occupation reversed.',
        'purchase_conversion_source_removed' => 'Source removed from purchase order line; occupation reversed.',
        'purchase_conversion_quantity_cleared' => 'Purchase order line quantity cleared; source occupation reversed.',
        'purchase_conversion_quantity_adjusted' => 'Purchase order line quantity adjusted; source occupation re-applied.',
        'purchase_receipt_mixed_requested_warehouse' => 'This purchase order contains multiple requested target warehouses. Register arrivals separately by warehouse; no warehouse was filled automatically this time.',
        'purchase_return_ambiguous_warehouse' => 'This purchase order relates to multiple receiving warehouses or inconsistent requested target warehouses. Select the return warehouse manually; it should usually match the actual receiving warehouse.',
        'purchase_inquiry_quote_recommended' => 'Inquiry record :code has been marked as the recommended deal.',
        'purchase_arrival_register_success' => 'Purchase arrival document :code has been registered.',
        'purchase_price_fallback_to_base_cost' => 'No available inquiry or transaction reference price was found, so the product base cost price was used instead.',
        'audit_remark_admin_role_created' => 'Role created from the admin console',
        'audit_remark_admin_role_updated' => 'Role updated from the admin console',
        'audit_remark_admin_role_copied_from_resource' => 'Role copied from the role permissions page',
        'audit_remark_admin_role_status_toggled_from_resource' => 'Role status changed from the role permissions page',
        'audit_remark_admin_role_deleted_from_resource' => 'Role deleted from the role permissions page',
        'audit_remark_admin_user_deleted' => 'Admin user deleted from the admin console',
        'product_sku_compat_ambiguous_default' => 'Table :table contains multiple selectable spec combinations for the material, and the default row cannot be determined uniquely. For safety, the spec combination reference was not backfilled automatically. Please review and handle it manually.',
        'product_sku_compat_spec_matrix_without_combos' => 'This material has the spec matrix enabled, but no spec combinations have been generated yet. Create the spec combinations before continuing with business operations.',
        'product_sku_governance_multi_enabled' => 'This material has multiple enabled product spec combinations. Spec details were not written to this line automatically; please confirm and fill in the spec manually.',
        'product_sku_governance_no_enabled_sku' => 'This material has spec combinations, but none are currently enabled. The value was not backfilled automatically. Enable or create a spec in the product profile, then review historical lines.',
        'product_sku_governance_no_sku' => 'This material has no product spec combinations yet, so no value was backfilled automatically.',
        'product_sku_governance_nullable_strategy' => 'Historical documents may not have recorded spec combinations. For new business involving multi-spec products, each line must select a spec. Inventory balances are separated by warehouse + spec combination.',
        'product_sku_governance_cli_summary' => 'Spec line backfill task completed (dry run=:dry). Summary: :report',
        'organization_master_data_scan_cli_summary' => 'Organization master data scan completed (dry-run=:dry). Governance report: :report',
        'save_first_then_manage_details' => 'Save the basic information first. After it is saved successfully, you can maintain the details.',
        'save_document_first_then_manage_lines' => 'Save the document header first. After it is saved successfully, you can maintain the document lines.',
        'sales_order_due_date_preview' => 'Estimated due date: :date (will be written to the document after saving)',
        'sales_order_due_date_preview_saved' => 'Estimated due date: :projected (saved: :saved)',
        'save_document_first_then_manage_reconciliation_lines' => 'Save the document header first. After it is saved successfully, you can maintain reconciliation lines.',
        'save_document_first_then_manage_verification_lines' => 'Save the document header first. After it is saved successfully, you can maintain write-off lines.',
        'sales_quote_submitted_success' => 'The sales quote has been submitted. Current status: :status.',
        'sales_quote_copied_success' => 'Copied as new sales quote :code. The new document has been opened and can be edited.',
        'save_product_first_then_manage_specs' => 'After enabling specs, save the product profile first. Once saved, you can maintain spec groups and values.',
        'save_product_first_then_manage_auxiliary_units' => 'After enabling auxiliary units, save the product profile first. Once saved, you can maintain the conversion between auxiliary and base units.',
        'spec_matrix_not_ready' => 'Maintain spec groups and their spec values before generating spec combinations.',
        'spec_matrix_rebuilt_next_steps' => 'The product is back to single-spec mode. Save the product profile, turn multi-spec on again, then maintain the new dimensions and combinations.',
        'save_dictionary_type_first_then_manage_items' => 'If you changed the type information above, save the type basics first. Once saved, you can maintain dictionary items.',
        'save_product_or_inventory_first_then_manage_batch_serial' => 'Save the product or inventory record first. Once saved, you can maintain batch and serial number records.',
        'product_auxiliary_not_enabled' => 'Auxiliary unit is not enabled.',
        'document_line_no_auxiliary_selected' => 'This line is entered in the base unit; the base-unit quantity is the same as the entered quantity.',
        'inventory_ledger_no_entered_trace' => '— (No entered-unit record, usually historical data)',
        'inventory_ledger_no_auxiliary_posting' => '— (Posted in base unit)',
    ],
    'options' => [
        'source_system' => [
            'dberp' => 'This System',
            'dbshop' => 'External Channel',
            'external' => 'External System',
        ],
        'enabled_disabled_state' => [
            'enabled' => 'Enabled',
            'disabled' => 'Disabled',
        ],
        'document_void_policy' => [
            'restore_stock_and_finance' => 'Restore Stock And Finance',
            'mark_only' => 'Mark Only',
            'forbid_if_posted' => 'Do not allow direct voiding after confirmation',
        ],
        'price_source_type' => [
            'exclusive_price' => 'Customer-specific Price',
            'level_price' => 'Price Level Price',
            'default_sales_price' => 'Default Sales Price',
            'manual_override' => 'Manual Price Override',
            'quote_snapshot' => 'Quote Snapshot',
            'channel_price' => 'Channel Price (Pending)',
        ],
        'payment_over_limit_policy' => [
            'forbid' => 'Forbid over-limit receipts/payments',
            'warn_allow' => 'Warn and allow (permission required)',
            'allow' => 'Record only; do not block',
        ],
        'receipt_over_limit_policy' => [
            'forbid' => 'Forbid over-limit receipts',
            'warn_allow' => 'Warn and allow (permission required)',
            'allow' => 'Record only; do not block',
        ],
        'settlement_void_policy' => [
            'rollback' => 'Automatically reverse AR/AP impact when voided',
            'forbid' => 'Do not allow direct voiding after confirmation',
        ],
        'settlement_method' => [
            'cash' => 'Cash',
            'bank_transfer' => 'Bank transfer',
            'month_end' => 'Month-end terms',
            'other' => 'Other',
        ],
        'warehouse_type' => [
            'general' => 'General warehouse',
            'store' => 'Store warehouse',
            'transit' => 'Transit warehouse',
            'virtual' => 'Virtual warehouse',
        ],
        'data_import_type' => [
            'unit' => 'Units of measure',
            'product_category' => 'Product categories',
            'product_brand' => 'Product brands',
            'customer_category' => 'Customer categories',
            'supplier_category' => 'Supplier categories',
            'warehouse' => 'Warehouses',
            'customer' => 'Customers',
            'supplier' => 'Suppliers',
            'product' => 'Products',
            'opening_stock' => 'Opening stock',
        ],
        'data_import_batch_status' => [
            'pending' => 'Pending',
            'precheck_failed' => 'Precheck failed',
            'prechecked' => 'Prechecked',
            'processing' => 'Processing',
            'completed' => 'Completed',
            'failed' => 'Failed',
            'cancelled' => 'Cancelled',
        ],
        'data_import_row_status' => [
            'pending' => 'Pending',
            'success' => 'Success',
            'validated' => 'Validated',
            'imported' => 'Imported',
            'failed' => 'Failed',
            'skipped' => 'Skipped',
        ],
        'settlement_statement_status' => [
            'draft' => 'Draft',
            'confirmed' => 'Confirmed',
            'voided' => 'Voided',
        ],
        'settlement_document_status' => [
            'draft' => 'Draft',
            'submitted' => 'Submitted',
            'effective' => 'Confirmed',
            'voided' => 'Voided',
        ],
        'settlement_adjustment_status' => [
            'draft' => 'Draft',
            'effective' => 'Effective',
            'voided' => 'Voided',
        ],
        'purchase_request_status' => [
            'draft' => 'Draft',
            'pending' => 'Pending',
            'partially_converted' => 'Partially converted',
            'converted' => 'Converted',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'purchase_exception_type' => [
            'short_supply' => 'Short supply',
            'excess_supply' => 'Excess supply',
            'wrong_delivery' => 'Wrong delivery',
            'rejected' => 'Rejected',
            'near_expiry' => 'Near expiry',
            'appearance_issue' => 'Appearance issue',
        ],
        'purchase_exception_status' => [
            'pending' => 'Pending',
            'processing' => 'In progress',
            'resolved' => 'Resolved',
            'closed' => 'Closed',
        ],
        'purchase_exception_resolution_result' => [
            'resupply' => 'Resupply',
            'amend_order' => 'Amend order',
            'return_goods' => 'Return goods',
            'close' => 'Close',
            'follow_up' => 'Escalate for follow-up',
        ],
        'purchase_order_item_execution_status' => [
            'awaiting_release' => 'Awaiting release',
            'pending_arrival' => 'Pending arrival',
            'partially_arrived' => 'Partially arrived',
            'completed' => 'Completed',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'purchase_price_hit_result' => [
            'reference_missing' => 'No reference price',
            'reference_aligned' => 'Within reference band',
            'near_lowest_quote' => 'Near reference low',
            'higher_than_recent_supplier' => 'Above latest transaction price',
            'higher_than_recent_product' => 'Above latest purchase price',
            'lower_than_recent_supplier' => 'Below latest transaction price',
        ],
        'purchase_inquiry_status' => [
            'draft' => 'Draft',
            'open' => 'Open',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'purchase_inquiry_quote_status' => [
            'active' => 'Active',
            'expired' => 'Expired',
            'invalidated' => 'Invalidated',
        ],
        'purchase_request_urgency_level' => [
            'normal' => 'Normal',
            'urgent' => 'Urgent',
            'critical' => 'Critical',
        ],
        'purchase_request_source_type' => [
            'manual' => 'Manual request',
            'replenishment_suggestion' => 'Replenishment suggestion',
        ],
        'inventory_exception_type' => [
            'expired_batch_stock' => 'Expired batch with remaining stock',
            'disabled_batch_stock' => 'Disabled batch with remaining stock',
            'serial_batch_mismatch' => 'Serial number vs batch mismatch',
            'pending_stocktake_difference' => 'Pending stocktake difference',
            'pending_replenishment_suggestion' => 'Pending replenishment suggestion',
        ],
        'inventory_exception_status' => [
            'open' => 'Open',
            'resolved' => 'Resolved',
            'ignored' => 'Ignored',
        ],
        'stocktake_difference_status' => [
            'pending' => 'Pending',
            'reviewed' => 'Reviewed',
            'resolved' => 'Confirmed',
            'ignored' => 'Ignored',
        ],
        'stocktake_serial_number_difference_type' => [
            'missing_in_actual' => 'Missing in Actual Count',
            'extra_in_actual' => 'Extra in Actual Count',
            'wrong_warehouse' => 'Wrong Warehouse',
            'not_in_stock' => 'Not In Stock',
            'disabled_or_voided' => 'Disabled or Voided',
        ],
        'settlement_adjustment_type' => [
            'manual' => 'Manual adjustment',
            'reconciliation' => 'Reconciliation adjustment',
            'rounding' => 'Rounding adjustment',
        ],
        'settlement_adjustment_direction' => [
            'increase' => 'Increase AR/AP',
            'decrease' => 'Decrease AR/AP',
        ],
        'receipt_order_type' => [
            'standard' => 'Standard receipt',
            'advance' => 'Advance receipt',
        ],
        'payment_order_type' => [
            'standard' => 'Standard payment',
            'advance' => 'Advance payment',
        ],
        'advance_account_status' => [
            'active' => 'Active',
            'closed' => 'Closed',
        ],
        'advance_account_flow_type' => [
            'receipt_confirmed' => 'Advance receipt confirmed',
            'payment_confirmed' => 'Advance payment confirmed',
            'receipt_voided' => 'Advance receipt voided',
            'payment_voided' => 'Advance payment voided',
            'receipt_consumed' => 'Advance receipt applied',
            'payment_consumed' => 'Advance payment applied',
            'receipt_released' => 'Advance receipt released',
            'payment_released' => 'Advance payment released',
        ],
        'settlement_record_status' => [
            'formed' => 'Formed',
            'partially_written_off' => 'Partially written off',
            'written_off' => 'Written off',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'settlement_write_off_status' => [
            'confirmed' => 'Confirmed',
            'partially_reversed' => 'Partially reversed',
            'reversed' => 'Reversed',
            'voided' => 'Voided',
        ],
        'settlement_write_off_line_status' => [
            'confirmed' => 'Confirmed',
            'partially_reversed' => 'Partially reversed',
            'reversed' => 'Reversed',
        ],
        'settlement_funds_usage_status' => [
            'unwritten' => 'Not written off',
            'partially_written' => 'Partially written off',
            'written' => 'Written off',
        ],
        'integration_mapping_status' => [
            'matched' => 'Matched',
            'synced' => 'Synced',
            'failed' => 'Failed',
            'conflict' => 'Conflict pending',
            'invalid' => 'Invalid',
        ],
        'integration_sync_status' => [
            'pending' => 'Pending',
            'success' => 'Success',
            'failed' => 'Failed',
            'skipped' => 'Skipped',
        ],
        'integration_object_type' => [
            'product' => 'Product',
            'product_category' => 'Product category',
            'customer' => 'Customer mapping',
            'order' => 'Order',
            'inventory' => 'Inventory',
        ],
        'payable_status' => [
            'unpaid' => 'Unpaid',
            'partially_paid' => 'Partially paid',
            'paid' => 'Paid in full',
            'over_paid' => 'Overpaid',
        ],
        'receivable_status' => [
            'uncollected' => 'Uncollected',
            'partially_collected' => 'Partially collected',
            'collected' => 'Collected in full',
            'over_collected' => 'Over collected',
        ],
        'sales_source_type' => [
            'manual' => 'Manual entry',
            'import' => 'Bulk import',
            'offline' => 'Offline business',
            'dbshop' => 'DBShop channel',
            'third_party' => 'Third-party channel',
        ],
        'number_applies_to' => [
            'product_category' => 'Product Category',
            'unit' => 'Unit',
            'product_brand' => 'Product Brand',
            'product' => 'Product',
            'product_sku' => 'Product SKU',
            'customer' => 'Customer',
            'customer_category' => 'Customer Category',
            'supplier' => 'Supplier',
            'supplier_category' => 'Supplier Category',
            'warehouse' => 'Warehouse',
            'employee' => 'Employee',
            'department' => 'Department',
            'position' => 'Position',
            'purchase_bill' => 'Purchase Documents',
            'purchase_request' => 'Purchase Request',
            'purchase_inquiry' => 'Purchase Inquiry',
            'purchase_inquiry_quote' => 'Supplier Quote',
            'purchase_order' => 'Purchase Order',
            'purchase_receipt' => 'Purchase Receipt',
            'purchase_return' => 'Purchase Return Order',
            'sales_order' => 'Sales Order',
            'sales_quote' => 'Sales Quote',
            'sales_outbound' => 'Sales Outbound Order',
            'sales_return' => 'Sales Return Order',
            'sales_bill' => 'Sales Documents',
            'stock_in' => 'Stock-in',
            'stock_out' => 'Stock-out',
            'transfer_order' => 'Transfer Order',
            'stocktake_order' => 'Stocktake Order',
            'receipt' => 'Receipt',
            'payment' => 'Payment',
            'receivable_record' => 'Receivable Record',
            'payable_record' => 'Payable Record',
            'settlement_write_off' => 'Write-off Document',
            'settlement_adjustment' => 'Settlement Adjustment',
            'settlement_statement' => 'Statement',
            'other' => 'Other',
        ],
        'date_segment' => [
            'none' => 'None',
            'yyyymm' => 'Yyyymm',
            'yyyymmdd' => 'Yyyymmdd',
        ],
        'inventory_direction' => [
            'in' => 'In',
            'out' => 'Out',
        ],
        'inventory_doc_status' => [
            'draft' => 'Draft',
            'effective' => 'Applied',
            'voided' => 'Voided',
        ],
        'region_level' => [
            'country' => 'Country',
            'province' => 'Province',
            'city' => 'City',
            'district' => 'District',
            'street' => 'Street',
            'other' => 'Other',
        ],
        'region_source' => [
            'manual' => 'Manual',
            'system' => 'System',
            'china_mca' => 'China Mca',
            'china_divisions' => 'China Divisions',
            'unknown' => 'Unknown',
            'other' => 'Other',
        ],
        'settlement_side' => [
            'receivable' => 'Receivable',
            'payable' => 'Payable',
        ],
        'settlement_business_side' => [
            'receivable' => 'Receivable',
            'payable' => 'Payable',
        ],
        'settlement_attention_status_receivable' => [
            'due_today' => 'Due Today',
            'due_soon' => 'Due Soon',
            'overdue' => 'Overdue',
        ],
        'settlement_attention_status_payable' => [
            'due_soon' => 'Due Soon',
            'overdue' => 'Overdue',
        ],
        'settlement_attention_status_receipt_payment' => [
            'large_unwritten' => 'Large Unwritten',
            'long_unwritten' => 'Long Unwritten',
        ],
        'settlement_attention_status_write_off' => [
            'reversed_follow_up' => 'Reversed Follow UP',
        ],
        'settlement_attention_status_adjustment' => [
            'recent_follow_up' => 'Recent Follow UP',
        ],
        'transfer_doc_status' => [
            'draft' => 'Draft',
            'effective' => 'Effective (inventory posted)',
            'completed' => 'Completed',
            'voided' => 'Voided',
        ],
        'purchase_order_status' => [
            'draft' => 'Draft',
            'confirmed' => 'Confirmed',
            'partially_received' => 'Partially Received',
            'fully_received' => 'Fully Received',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'purchase_order_source_mode' => [
            'manual' => 'Manual Entry',
            'purchase_request' => 'From Purchase Request',
            'inquiry_quote' => 'From Inquiry Quote',
        ],
        'sales_order_status' => [
            'draft' => 'Draft',
            'confirmed' => 'Confirmed',
            'partially_shipped' => 'Partially Shipped',
            'fully_shipped' => 'Fully Shipped',
            'closed' => 'Closed',
            'voided' => 'Voided',
        ],
        'sales_quote_status' => [
            'draft' => 'Draft',
            'pending_effective' => 'Pending Effective',
            'effective' => 'Applied',
            'expired' => 'Expired',
            'converted' => 'Converted',
            'voided' => 'Voided',
        ],
        'customer_price_rule_type' => [
            'exclusive_price' => 'Customer-specific Price',
            'level_price' => 'Level Price',
            'default_sales_price' => 'Default Sales Price',
        ],
        'customer_price_rule_status' => [
            'active' => 'Enabled',
            'inactive' => 'Disabled',
        ],
        'master_record_status' => [
            'active' => 'Enabled',
            'inactive' => 'Disabled',
        ],
        'credit_check_result' => [
            'pass' => 'Pass',
            'blocked_over_limit' => 'Blocked Over Limit',
            'blocked_overdue' => 'Blocked Overdue',
            'blocked_both' => 'Blocked Both',
            'released_by_override' => 'Released By Override',
        ],
        'sales_quote_attention_status' => [
            'pending_effective' => 'Pending Effective',
            'expiring_soon' => 'Expiring Soon',
            'expired' => 'Expired',
            'long_unconverted' => 'Long Unconverted',
        ],
        'customer_price_rule_attention_status' => [
            'expiring_soon' => 'Expiring Soon',
            'expired' => 'Expired',
        ],
        'sales_order_attention_status' => [
            'released_by_override' => 'Released By Override',
        ],
        'customer_credit_attention_status' => [
            'blocked' => 'Blocked',
            'near_limit' => 'Near Limit',
            'overdue' => 'Overdue',
        ],
        'inventory_batch_movement_direction' => [
            'in' => 'In',
            'out' => 'Out',
            'rollback_in' => 'Rollback In',
        ],
        'inventory_business_type' => [
            'other_stock_in' => 'Other Stock-in',
            'other_stock_out' => 'Other Stock-out',
            'other_stock_in_void' => 'Other Stock-in Void',
            'other_stock_out_void' => 'Other Stock-out Void',
            'transfer_out' => 'Transfer Out',
            'transfer_in' => 'Transfer In',
            'transfer_out_void' => 'Transfer Out Void',
            'transfer_in_void' => 'Transfer In Void',
            'stocktake_gain' => 'Stocktake Gain',
            'stocktake_loss' => 'Stocktake Loss',
            'stocktake_gain_void' => 'Stocktake Gain Void',
            'stocktake_loss_void' => 'Stocktake Loss Void',
            'purchase_receipt' => 'Purchase Receipt',
            'purchase_receipt_void' => 'Purchase Receipt Void',
            'purchase_return' => 'Purchase Return',
            'purchase_return_void' => 'Purchase Return Void',
            'sales_outbound' => 'Sales Outbound',
            'sales_outbound_void' => 'Sales Outbound Void',
            'sales_return' => 'Sales Return',
            'sales_return_void' => 'Sales Return Void',
        ],
        'inventory_query_group' => [
            'product' => 'Product',
            'warehouse' => 'Warehouse',
        ],
        'inventory_aggregate_level' => [
            'sku_detail' => 'SKU Detail',
            'product_summary' => 'Product Summary',
        ],
        'business_aggregate_level' => [
            'product' => 'Product',
            'product_spec' => 'Product Spec',
        ],
        'report_ranking_dimension' => [
            'product' => 'Product',
            'product_spec' => 'Product Spec',
        ],
        'stocktake_scope_type' => [
            'all' => 'All',
            'category' => 'Category',
            'product' => 'Product',
        ],
        'stocktake_result_type' => [
            'gain' => 'Gain',
            'loss' => 'Loss',
            'balanced' => 'Balanced',
        ],
        'stocktake_difference_reason_code' => [
            'count_missed' => 'Count Missed',
            'damaged_loss' => 'Damaged Loss',
            'misplaced_found' => 'Misplaced Found',
            'batch_expiry_handling' => 'Batch Expiry Handling',
            'serial_mismatch' => 'Serial Mismatch',
            'manual_adjustment' => 'Manual Adjustment',
            'other' => 'Other',
        ],
        'stocktake_difference_resolution_type' => [
            'confirmed' => 'Confirm Difference',
            'recounted' => 'Recounted',
            'adjusted' => 'Adjusted',
            'voided' => 'Voided',
            'ignored' => 'Ignored',
        ],
        'inventory_warning_type' => [
            'low_stock' => 'Low Stock',
            'zero_stock' => 'Zero Stock',
            'normal' => 'Normal',
        ],
        'inventory_exception_severity' => [
            'warning' => 'Warning',
            'danger' => 'Danger',
        ],
        'inventory_issue_policy' => [
            'fifo' => 'Fifo',
            'near_expiry_first' => 'Near Expiry First',
            'manual' => 'Manual',
        ],
        'inventory_batch_status' => [
            'active' => 'Active',
            'depleted' => 'Depleted',
            'disabled' => 'Disabled',
            'voided' => 'Voided',
        ],
        'inventory_serial_number_status' => [
            'in_stock' => 'In Stock',
            'locked' => 'Locked',
            'outbound' => 'Outbound',
            'returned_pending' => 'Returned Pending',
            'disabled' => 'Disabled',
            'voided' => 'Voided',
        ],
        'inventory_serial_number_source_type' => [
            'dberp_purchase_receipt_order' => 'Purchase Receipt',
            'dberp_sales_outbound_order' => 'Sales Outbound',
            'dberp_sales_return_order' => 'Sales Return',
            'dberp_other_stock_in_order' => 'Other Stock In',
            'dberp_other_stock_out_order' => 'Other Stock Out',
            'dberp_transfer_order' => 'Transfer Order',
            'dberp_stocktake_order' => 'Stocktake Order',
            'dberp_purchase_return_order' => 'Purchase Return',
            'purchase_receipt' => 'Purchase Receipt',
            'sales_outbound' => 'Sales Outbound',
            'sales_return' => 'Sales Return',
            'other_stock_in' => 'Other Stock In',
            'other_stock_out' => 'Other Stock Out',
            'transfer_order' => 'Transfer',
            'stocktake_order' => 'Stocktake',
        ],
        'inventory_serial_number_owner_type' => [
            'dberp_customer' => 'Customer',
            'dberp_supplier' => 'Supplier',
            'dberp_sales_outbound_order' => 'Sales Outbound',
            'dberp_purchase_receipt_order' => 'Purchase Receipt',
        ],
        'inventory_expiry_status' => [
            'normal' => 'Normal',
            'near_expiry' => 'Near Expiry',
            'expired' => 'Expired',
            'blocked' => 'Blocked',
        ],
        'inventory_replenishment_suggestion_status' => [
            'pending' => 'Pending',
            'reviewed' => 'Reviewed',
            'ignored' => 'Ignored',
            'processed' => 'Processed',
        ],
        'purchase_price_reference_scope_type' => [
            'product' => 'Product',
            'supplier_product' => 'Supplier Product',
        ],
        'common_document_status' => [
            'draft' => 'Draft',
            'confirmed' => 'Confirmed',
            'effective' => 'Applied',
            'completed' => 'Completed',
            'closed' => 'Closed',
            'voided' => 'Voided',
            'partially_received' => 'Partially Received',
            'fully_received' => 'Completed',
            'partially_shipped' => 'Partially Shipped',
            'fully_shipped' => 'Fully Shipped',
        ],
        'receipt_payment_direction' => [
            'receipt' => 'Receipt',
            'payment' => 'Payment',
        ],
        'document_type' => [
            'other_stock_in' => 'Other Stock-in',
            'other_stock_out' => 'Other Stock-out',
            'transfer_order' => 'Transfer Order',
            'stocktake_order' => 'Stocktake Order',
            'purchase_order' => 'Purchase Order',
            'purchase_receipt' => 'Purchase Receipt',
            'purchase_return' => 'Purchase Return',
            'sales_order' => 'Sales Order',
            'sales_outbound' => 'Sales Outbound',
            'sales_return' => 'Sales Return',
            'receipt_order' => 'Receipt Order',
            'payment_order' => 'Payment Order',
            'purchase_request' => 'Purchase Request',
            'sales_quote' => 'Sales Quote',
            'settlement_write_off' => 'Write-off Document',
            'settlement_statement' => 'Statement',
            'settlement_adjustment' => 'Settlement Adjustment',
        ],
        'settlement_change_type' => [
            'opening_receivable_imported' => 'Opening Receivable Import',
            'opening_payable_imported' => 'Opening Payable Import',
            'sales_order_confirmed' => 'Sales Order Confirmed',
            'sales_return_applied' => 'Sales Return Applied',
            'sales_order_voided' => 'Sales Order Voided',
            'purchase_order_confirmed' => 'Purchase Order Confirmed',
            'purchase_return_applied' => 'Purchase Return Applied',
            'purchase_order_voided' => 'Purchase Order Voided',
            'write_off_confirmed' => 'Write-off Confirmed',
            'write_off_reversed' => 'Reverse Write-off',
            'adjustment_effective' => 'Adjustment Effective',
            'adjustment_voided' => 'Adjustment Voided',
        ],
        'settlement_source_type' => [
            'data_import_batch_row' => 'Data Import Batch Row',
            'opening_balance' => 'Opening Balance',
            'sales_order' => 'Sales Order',
            'purchase_order' => 'Purchase Order',
            'receipt_order' => 'Receipt Order',
            'payment_order' => 'Payment Order',
            'receivable_record' => 'Receivable Record',
            'payable_record' => 'Payable Record',
            'settlement_write_off' => 'Write-off Document',
            'settlement_adjustment' => 'Settlement Adjustment',
        ],
        'audit_action' => [
            'dberp.auth.login_succeeded' => 'Admin Login Succeeded',
            'dberp.auth.login_failed' => 'Admin Login Failed',
            'dberp.auth.logout' => 'Admin Logged Out',
            'dberp.admin.user_created' => 'User Created',
            'dberp.admin.user_create_blocked' => 'User Create Blocked',
            'dberp.admin.user_updated' => 'User Updated',
            'dberp.admin.user_update_blocked' => 'User Update Blocked',
            'dberp.admin.user_status_updated' => 'User Status Updated',
            'dberp.admin.user_status_blocked' => 'User Status Blocked',
            'dberp.admin.user_roles_synced' => 'User Roles Synced',
            'dberp.admin.user_roles_blocked' => 'User Roles Blocked',
            'dberp.admin.user_password_reset' => 'User Password Reset',
            'dberp.admin.user_password_reset_blocked' => 'User Password Reset Blocked',
            'dberp.admin.user_deleted' => 'User Deleted',
            'dberp.admin.user_delete_blocked' => 'User Delete Blocked',
            'dberp.admin.role_created' => 'Role Created',
            'dberp.admin.role_create_blocked' => 'Role Create Blocked',
            'dberp.admin.role_updated' => 'Role Updated',
            'dberp.admin.role_update_blocked' => 'Role Update Blocked',
            'dberp.admin.role_status_updated' => 'Role Status Updated',
            'dberp.admin.role_status_blocked' => 'Role Status Blocked',
            'dberp.admin.role_copied' => 'Role Copied',
            'dberp.admin.role_copy_blocked' => 'Role Copy Blocked',
            'dberp.admin.direct_permissions_synced' => 'Direct Permissions Synced',
            'dberp.admin.role_permissions_synced' => 'Role Permissions Synced',
            'dberp.admin.role_permissions_blocked' => 'Role Permissions Blocked',
            'dberp.admin.role_deleted' => 'Role Deleted',
            'dberp.admin.role_delete_blocked' => 'Role Delete Blocked',
            'dberp.report.viewed' => 'Viewed',
            'dberp.report.filtered' => 'Filtered',
            'dberp.report.exported' => 'Exported',
            'dberp.audit_log.pruned' => 'Pruned',
            'dberp.system_update.execution_log.pruned' => 'System update step logs pruned',
            'dberp.support_center.site_access_confirm.succeeded' => 'System access confirmed',
            'dberp.support_center.site_access_confirm.failed' => 'System access confirmation failed',
            'dberp.support_center.site_binding_status.refreshed' => 'Site binding status refreshed',
            'dberp.support_center.site_binding_status.refresh_failed' => 'Site binding status refresh failed',
            'dberp.support_center.site_presence.reported' => 'Site online status confirmed with Support Center',
            'dberp.support_center.site_presence.failed' => 'Failed to confirm site online status with Support Center',
            'dberp.support_center.authorization_sync.started' => 'Official authorization sync started',
            'dberp.support_center.authorization_sync.completed' => 'Official authorization sync completed',
            'dberp.support_center.authorization_sync.failed' => 'Official authorization sync failed',
            'dberp.support_center.connectivity.blocked' => 'Support Center connectivity blocked',
            'dberp.system_profile.basic_updated' => 'Basic Updated',
            'dberp.system_profile.business_updated' => 'Business Updated',
            'dberp.inventory_warning.rule_updated' => 'Rule Updated',
            'dberp.inventory_replenishment_suggestion.status_changed' => 'Status Changed',
            'dberp.dictionary_type.created' => 'Created',
            'dberp.dictionary_type.updated' => 'Updated',
            'dberp.dictionary_type.deleted' => 'Deleted',
            'dberp.dictionary_item.created' => 'Created',
            'dberp.dictionary_item.updated' => 'Updated',
            'dberp.dictionary_item.deleted' => 'Deleted',
            'dberp.master_data.delete_blocked' => 'Delete Blocked',
            'dberp.region.selection_blocked' => 'Selection Blocked',
            'dberp.region.delete_blocked' => 'Delete Blocked',
            'dberp.region.disable_blocked' => 'Disable Blocked',
            'dberp.region.parent_change_blocked' => 'Parent Change Blocked',
            'dberp.sales_outbound.quantity_overflow_blocked' => 'Quantity Overflow Blocked',
            'dberp.receipt_order.submitted' => 'Submitted',
            'dberp.receipt_order.confirmed' => 'Confirmed',
            'dberp.receipt_order.applied' => 'Applied',
            'dberp.receipt_order.voided' => 'Voided',
            'dberp.receipt_order.closed_document_blocked' => 'Closed Document Blocked',
            'dberp.receipt_order.over_limit_blocked' => 'Over Limit Blocked',
            'dberp.receipt_order.over_limit_warned' => 'Over Limit Warned',
            'dberp.payment_order.submitted' => 'Submitted',
            'dberp.payment_order.confirmed' => 'Confirmed',
            'dberp.payment_order.applied' => 'Applied',
            'dberp.payment_order.voided' => 'Voided',
            'dberp.payment_order.closed_document_blocked' => 'Closed Document Blocked',
            'dberp.payment_order.over_limit_blocked' => 'Over Limit Blocked',
            'dberp.payment_order.over_limit_warned' => 'Over Limit Warned',
            'dberp.receivable_record.created' => 'Created',
            'dberp.receivable_record.updated' => 'Updated',
            'dberp.payable_record.created' => 'Created',
            'dberp.payable_record.updated' => 'Updated',
            'dberp.settlement_write_off.created' => 'Created',
            'dberp.settlement_write_off.confirmed' => 'Confirmed',
            'dberp.settlement_write_off.reversed' => 'Reversed',
            'dberp.settlement_adjustment.created' => 'Created',
            'dberp.settlement_adjustment.updated' => 'Updated',
            'dberp.settlement_adjustment.applied' => 'Applied',
            'dberp.settlement_adjustment.voided' => 'Voided',
            'dberp.settlement_statement.created' => 'Created',
            'dberp.settlement_statement.updated' => 'Updated',
            'dberp.settlement_statement.confirmed' => 'Confirmed',
            'dberp.data_import.batch_prechecked' => 'Data import batch prechecked',
            'dberp.data_import.batch_started' => 'Data import batch started',
            'dberp.data_import.batch_completed' => 'Data import batch completed',
            'dberp.data_import.batch_failed' => 'Data import batch failed',
            'dberp.data_import.batch_deleted' => 'Data import batch record deleted',
            'dberp.settlement_statement.voided' => 'Voided',
            'dberp.settlement_statement.exported' => 'Exported',
            'dberp.user_permission_grant.created' => 'Created',
            'dberp.user_permission_grant.deleted' => 'Deleted',
            'dberp.integration.product_synced' => 'Product Synced',
            'dberp.integration.customer_synced' => 'Customer Synced',
            'dberp.integration.order_imported' => 'Order Imported',
            'dberp.integration.inventory_synced' => 'Inventory Synced',
            'dberp.integration.inventory_sync_failed' => 'Inventory Sync Failed',
            'dberp.integration.retry_requested' => 'Retry Requested',
            'dberp.integration.mapping_remapped' => 'Mapping Remapped',
            'dberp.integration.mapping_invalidated' => 'Mapping Invalidated',
            'dberp.sales_quote.created' => 'Created',
            'dberp.sales_quote.updated' => 'Updated',
            'dberp.sales_quote.submitted' => 'Submitted',
            'dberp.sales_quote.copied' => 'Copied',
            'dberp.sales_quote.activated' => 'Activated',
            'dberp.sales_quote.converted' => 'Converted',
            'dberp.sales_quote.voided' => 'Voided',
            'dberp.sales_order.confirmed' => 'Confirmed',
            'dberp.sales_order.closed' => 'Closed',
            'dberp.sales_order.voided' => 'Sales order voided',
            'dberp.sales_order.outbound_progress_updated' => 'Outbound Progress Updated',
            'dberp.sales_order.confirm_blocked_no_items' => 'Confirm Blocked No Items',
            'dberp.sales_order.credit_check_blocked' => 'Credit Check Blocked',
            'dberp.sales_order.credit_overridden' => 'Credit Overridden',
            'dberp.customer_price_rule.created' => 'Created',
            'dberp.customer_price_rule.updated' => 'Updated',
            'dberp.customer_price_rule.disabled' => 'Disabled',
            'dberp.customer_category.created' => 'Created',
            'dberp.customer_category.updated' => 'Updated',
            'dberp.customer_category.disabled' => 'Disabled',
            'dberp.customer_category.deleted' => 'Deleted',
            'dberp.supplier_category.created' => 'Created',
            'dberp.supplier_category.updated' => 'Updated',
            'dberp.supplier_category.disabled' => 'Disabled',
            'dberp.supplier_category.deleted' => 'Deleted',
            'dberp.inventory_batch.created' => 'Created',
            'dberp.inventory_batch.updated' => 'Updated',
            'dberp.inventory_batch.deleted' => 'Deleted',
            'dberp.inventory_serial_number.created' => 'Created',
            'dberp.inventory_serial_number.updated' => 'Updated',
            'dberp.inventory_serial_number.deleted' => 'Deleted',
            'dberp.inventory_rule.created' => 'Created',
            'dberp.inventory_rule.updated' => 'Updated',
            'dberp.inventory_rule.deleted' => 'Deleted',
            'dberp.inventory_replenishment_suggestion.created' => 'Created',
            'dberp.inventory_replenishment_suggestion.updated' => 'Updated',
            'dberp.inventory_replenishment_suggestion.deleted' => 'Deleted',
            'dberp.inventory_replenishment_suggestion.generated' => 'Generated',
            'dberp.purchase_request.created' => 'Created',
            'dberp.purchase_request.updated' => 'Updated',
            'dberp.purchase_request.submitted' => 'Submitted',
            'dberp.purchase_request.closed' => 'Closed',
            'dberp.purchase_request.voided' => 'Voided',
            'dberp.purchase_request.progress_updated' => 'Progress Updated',
            'dberp.purchase_request.converted_to_purchase_order' => 'Converted To Purchase Order',
            'dberp.purchase_inquiry_quote.created' => 'Created',
            'dberp.purchase_inquiry_quote.updated' => 'Updated',
            'dberp.purchase_order.confirmed' => 'Confirmed',
            'dberp.purchase_order.closed' => 'Purchase order closed',
            'dberp.purchase_order.voided' => 'Purchase order voided',
            'dberp.purchase_order.execution_progress_updated' => 'Execution Progress Updated',
            'dberp.purchase_order.confirm_blocked_no_items' => 'Confirm Blocked No Items',
            'dberp.purchase_order_item.created' => 'Created',
            'dberp.purchase_order_item.updated' => 'Updated',
            'dberp.purchase_order_item.deleted' => 'Deleted',
            'dberp.purchase_receipt.created' => 'Created',
            'dberp.purchase_receipt.updated' => 'Updated',
            'dberp.purchase_receipt.applied' => 'Applied',
            'dberp.purchase_receipt.voided' => 'Voided',
            'dberp.purchase_receipt.quantity_overflow_blocked' => 'Quantity Overflow Blocked',
            'dberp.purchase_exception.created' => 'Created',
            'dberp.purchase_exception.updated' => 'Updated',
            'dberp.purchase_exception.registered' => 'Registered',
            'dberp.purchase_exception.resolution_submitted' => 'Resolution Submitted',
            'dberp.purchase_exception.closed' => 'Closed',
            'dberp.purchase_exception.reopened' => 'Reopened',
            'dberp.inventory_exception.status_changed' => 'Status Changed',
        ],
    ],
    'resources' => [
        'admin_user' => [
            'label' => 'Admin User',
            'plural' => 'Admin User',
        ],
        'admin_role' => [
            'label' => 'Role',
            'plural' => 'Role permissions',
        ],
        'number_sequence' => [
            'label' => 'Numbering Rules',
            'plural' => 'Numbering Rules',
        ],
        'dictionary_type' => [
            'label' => 'Business Dictionary',
            'plural' => 'Business Dictionary',
        ],
        'product_category' => [
            'label' => 'Product Category',
            'plural' => 'Product Category',
        ],
        'product_brand' => [
            'label' => 'Product Brand',
            'plural' => 'Product Brand',
        ],
        'unit' => [
            'label' => 'Unit',
            'plural' => 'Unit',
        ],
        'employee' => [
            'label' => 'Employee',
            'plural' => 'Employee',
        ],
        'department' => [
            'label' => 'Department',
            'plural' => 'Department',
        ],
        'position' => [
            'label' => 'Position',
            'plural' => 'Position',
        ],
        'salesperson' => [
            'label' => 'Salesperson',
            'plural' => 'Salesperson',
        ],
        'customer' => [
            'label' => 'Customer Profile',
            'plural' => 'Customer Profile',
        ],
        'customer_category' => [
            'label' => 'Customer Category',
            'plural' => 'Customer Category',
        ],
        'supplier' => [
            'label' => 'Supplier Profile',
            'plural' => 'Supplier Profile',
        ],
        'supplier_category' => [
            'label' => 'Supplier Category',
            'plural' => 'Supplier Category',
        ],
        'warehouse' => [
            'label' => 'Warehouse Profile',
            'plural' => 'Warehouse Profile',
        ],
        'region' => [
            'label' => 'Region',
            'plural' => 'Region',
        ],
        'product' => [
            'label' => 'Product Profile',
            'plural' => 'Product Profile',
        ],
        'inventory_balance' => [
            'label' => 'Inventory Balance',
            'plural' => 'Inventory Balance',
        ],
        'inventory_transaction' => [
            'label' => 'Inventory Transaction',
            'plural' => 'Inventory Transaction',
        ],
        'other_stock_in' => [
            'label' => 'Other Stock-in',
            'plural' => 'Other Stock-in',
        ],
        'other_stock_out' => [
            'label' => 'Other Stock-out',
            'plural' => 'Other Stock-out',
        ],
        'transfer_order' => [
            'label' => 'Transfer Order',
            'plural' => 'Transfer Order',
        ],
        'stocktake_order' => [
            'label' => 'Stocktake Order',
            'plural' => 'Stocktake Order',
        ],
        'inventory_warning' => [
            'label' => 'Inventory Warning',
            'plural' => 'Inventory Warning',
        ],
        'stocktake_difference' => [
            'label' => 'Stocktake Difference',
            'plural' => 'Stocktake Difference',
        ],
        'inventory_exception' => [
            'label' => 'Inventory Exception',
            'plural' => 'Inventory Exception',
        ],
        'purchase_order' => [
            'label' => 'Purchase Order',
            'plural' => 'Purchase Order',
        ],
        'purchase_request' => [
            'label' => 'Purchase Request',
            'plural' => 'Purchase Request',
        ],
        'purchase_inquiry' => [
            'label' => 'Purchase Inquiry',
            'plural' => 'Purchase Inquiries',
        ],
        'purchase_inquiry_quote' => [
            'label' => 'Supplier Quote',
            'plural' => 'Supplier Quotes',
        ],
        'purchase_inquiry_comparison' => [
            'label' => 'Purchase Inquiry Comparison',
            'plural' => 'Purchase Inquiry Comparison',
        ],
        'purchase_receipt' => [
            'label' => 'Purchase Receipt',
            'plural' => 'Purchase Receipt',
        ],
        'purchase_return' => [
            'label' => 'Purchase Return',
            'plural' => 'Purchase Return',
        ],
        'purchase_exception' => [
            'label' => 'Purchase Exception',
            'plural' => 'Purchase Exception',
        ],
        'sales_order' => [
            'label' => 'Sales Order',
            'plural' => 'Sales Order',
        ],
        'sales_quote' => [
            'label' => 'Sales Quote',
            'plural' => 'Sales Quote',
        ],
        'customer_price_rule' => [
            'label' => 'Customer Price Rule',
            'plural' => 'Customer Price Rule',
        ],
        'customer_credit_control' => [
            'label' => 'Customer Credit Control',
            'plural' => 'Customer Credit Control',
            'stat_customer_count' => 'Customers',
            'stat_blocked_count' => 'At-risk Customers',
            'stat_overdue_count_total' => 'Total Overdue Records',
            'section_overview' => 'Customer Credit Overview',
            'empty_rows' => 'No customer credit data for the current filters.',
        ],
        'sales_outbound' => [
            'label' => 'Sales Outbound',
            'plural' => 'Sales Outbound',
        ],
        'sales_return' => [
            'label' => 'Sales Return',
            'plural' => 'Sales Return',
        ],
        'customer_receivable' => [
            'label' => 'Customer Receivable',
            'plural' => 'Customer Receivable',
        ],
        'supplier_payable' => [
            'label' => 'Supplier Payable',
            'plural' => 'Supplier Payable',
        ],
        'settlement_write_off' => [
            'label' => 'Settlement Write-off',
            'plural' => 'Settlement Write-off',
        ],
        'settlement_adjustment' => [
            'label' => 'Settlement Adjustment',
            'plural' => 'Settlement Adjustment',
        ],
        'settlement_statement' => [
            'label' => 'Settlement Statement',
            'plural' => 'Settlement Statement',
        ],
        'receipt_order' => [
            'label' => 'Receipt Order',
            'plural' => 'Receipt Order',
        ],
        'payment_order' => [
            'label' => 'Payment Order',
            'plural' => 'Payment Order',
        ],
        'settlement_aging_analysis' => [
            'label' => 'Settlement Aging Analysis',
            'plural' => 'Settlement Aging Analysis',
            'page_hint' => 'Settlement Aging Analysis uses the current filters and business rules.',
            'as_of_hint' => 'Settlement Aging Analysis uses the current filters and business rules.',
            'section_bucket_summary' => 'Bucket Summary',
            'export_note_aging_detail' => 'Export Note Aging Detail',
            'section_counterparty_detail' => 'Counterparty Detail',
            'col_counterparty' => 'Counterparty',
            'col_record_count' => 'Record Count',
            'col_total' => 'Total',
            'empty_rows' => 'No data',
        ],
        'comprehensive_summary_analysis' => [
            'label' => 'Comprehensive Summary Analysis',
            'plural' => 'Comprehensive Summary Analysis',
            'scope_hint_period' => 'Scope Hint Period',
            'scope_hint_snapshot' => 'Scope Hint Snapshot',
            'export_hint' => 'Export uses the current filters.',
            'section_sales_summary' => 'Sales Summary',
            'section_purchase_summary' => 'Purchase Summary',
            'section_inventory_summary' => 'Inventory Summary',
            'section_settlement_summary' => 'Settlement Summary',
            'section_trend_overview' => 'Trend Overview',
            'sales_summary_caption' => 'Sales Summary Caption',
            'purchase_summary_caption' => 'Purchase Summary Caption',
            'inventory_summary_caption' => 'Inventory Summary Caption',
            'settlement_summary_caption' => 'Settlement Summary Caption',
            'card_sales_order_count' => 'Sales Order Count',
            'card_sales_amount' => 'Sales Amount',
            'card_sales_unreceived' => 'Sales Unreceived',
            'card_sales_full_ship' => 'Sales Full Ship',
            'card_purchase_order_count' => 'Purchase Order Count',
            'card_purchase_amount' => 'Purchase Amount',
            'card_purchase_unpaid' => 'Purchase Unpaid',
            'card_purchase_overdue' => 'Purchase Overdue',
            'card_inventory_realtime' => 'Inventory Realtime',
            'card_inventory_available' => 'Inventory Available',
            'card_inventory_warning' => 'Inventory Warning',
            'card_inventory_exception' => 'Inventory Exception',
            'card_receivable_balance' => 'Receivable Balance',
            'card_payable_balance' => 'Payable Balance',
            'card_receipt_amount' => 'Receipt Amount',
            'card_payment_amount' => 'Payment Amount',
            'card_receivable_overdue' => 'Receivable Overdue',
            'card_payable_overdue' => 'Payable Overdue',
            'col_date' => 'Business Date',
            'col_sales_amount' => 'Sales Amount',
            'col_purchase_amount' => 'Purchase Amount',
            'col_inbound_quantity' => 'Inbound Quantity',
            'col_outbound_quantity' => 'Outbound Quantity',
            'col_receipt_amount' => 'Receipt Amount',
            'col_payment_amount' => 'Payment Amount',
            'empty_trend' => 'No data available.',
        ],
        'sales_statistics' => [
            'label' => 'Sales Statistics',
            'plural' => 'Sales Statistics',
            'scope_hint' => 'Sales Statistics uses the current filters and business rules.',
            'link_sales_orders' => 'Sales Order',
            'link_customer_receivables' => 'View Customer Receivables',
        ],
        'purchase_statistics' => [
            'label' => 'Purchase Statistics',
            'plural' => 'Purchase Statistics',
            'scope_hint' => 'Purchase Statistics uses the current filters and business rules.',
            'link_purchase_orders' => 'Purchase Order',
            'link_supplier_payables' => 'View Supplier Payables',
        ],
        'purchase_analysis' => [
            'label' => 'Purchase Analysis',
            'plural' => 'Purchase Analysis',
            'export_hint' => 'Export uses the current filters.',
            'section_summary' => 'Core Summary',
            'section_trend' => 'Trend by Business Date',
            'section_supplier' => 'Supplier',
            'section_product' => 'Product',
            'card_order_count' => 'Order Count',
            'card_total_amount' => 'Total Amount',
            'card_paid' => 'Paid',
            'card_unpaid' => 'Unpaid',
            'card_total_qty' => 'Total Qty',
            'card_arrived_qty' => 'Arrived Qty',
            'card_remaining_arrival' => 'Remaining Arrival',
            'card_overdue_orders' => 'Overdue Orders',
            'card_partial_received' => 'Partial Received',
            'card_fully_received' => 'Fully Received',
            'card_exceptions' => 'Exceptions',
            'card_returns' => 'Returns',
            'trend_date' => 'Business Date',
            'trend_orders' => 'Trend Orders',
            'trend_amount' => 'Amount',
            'col_name' => 'Name',
            'col_amount' => 'Amount',
            'col_qty' => 'Quantity',
            'col_orders' => 'Orders',
            'empty_trend' => 'No trend data under the current filters.',
            'empty_structure' => 'No data',
        ],
        'sales_analysis' => [
            'label' => 'Sales Analysis',
            'plural' => 'Sales Analysis',
            'export_hint' => 'Export uses the current filters.',
            'section_summary' => 'Core Summary',
            'section_trend' => 'Trend by Business Date',
            'section_customer' => 'Customer',
            'section_product' => 'Product',
            'card_order_count' => 'Order Count',
            'card_final_amount' => 'Final Amount',
            'card_receivable' => 'Receivable',
            'card_received' => 'Received',
            'card_unreceived' => 'Unreceived',
            'card_total_qty' => 'Total Qty',
            'card_confirmed' => 'Confirmed',
            'card_partial_ship' => 'Partial Ship',
            'card_full_ship' => 'Full Ship',
            'trend_date' => 'Business Date',
            'trend_orders' => 'Trend Orders',
            'trend_amount' => 'Amount',
            'col_name' => 'Name',
            'col_amount' => 'Amount',
            'col_qty' => 'Quantity',
            'col_orders' => 'Orders',
            'empty_trend' => 'No trend data under the current filters.',
            'empty_structure' => 'No data',
        ],
        'inventory_analysis' => [
            'label' => 'Inventory Analysis',
            'plural' => 'Inventory Analysis',
            'export_hint' => 'Export uses the current filters.',
            'section_summary' => 'Core Summary',
            'section_flow_trend' => 'Flow Trend',
            'section_product' => 'Product',
            'section_warehouse' => 'Warehouse',
            'card_sku_locations' => 'SKU Locations',
            'card_realtime_qty' => 'Realtime Qty',
            'card_available_qty' => 'Available Qty',
            'card_warning_skus' => 'Warning SKUs',
            'card_period_in' => 'Period In',
            'card_period_out' => 'Period Out',
            'card_open_exceptions' => 'Open Exceptions',
            'card_pending_stocktake' => 'Pending Stocktake',
            'col_date' => 'Business Date',
            'col_inbound' => 'Inbound',
            'col_outbound' => 'Outbound',
            'col_name' => 'Name',
            'empty_trend' => 'No transaction trend under the current filters.',
            'empty_structure' => 'No data',
        ],
        'settlement_analysis' => [
            'label' => 'Settlement Analysis',
            'plural' => 'Settlement Analysis',
            'as_of_hint' => 'Settlement Analysis uses the current filters and business rules.',
            'export_note_receivable_aging' => 'Export Note Receivable Aging',
            'export_note_payable_aging' => 'Export Note Payable Aging',
            'export_hint' => 'Export uses the current filters.',
            'section_summary' => 'Core Summary',
            'section_receipt_trend' => 'Receipt Trend',
            'section_payment_trend' => 'Payment Trend',
            'section_customer' => 'Customer',
            'section_supplier' => 'Supplier',
            'section_receivable_aging' => 'Receivable Aging',
            'section_payable_aging' => 'Payable Aging',
            'card_receivable_balance' => 'Receivable Balance',
            'card_payable_balance' => 'Payable Balance',
            'card_receipt_period' => 'Receipt Period',
            'card_payment_period' => 'Payment Period',
            'card_write_off_count' => 'Write-off Count',
            'card_receipt_unwritten' => 'Receipt Unwritten',
            'card_payment_unwritten' => 'Payment Unwritten',
            'card_statement_confirmed' => 'Statement Confirmed',
            'card_receivable_overdue' => 'Receivable Overdue',
            'card_payable_overdue' => 'Payable Overdue',
            'col_date' => 'Business Date',
            'col_amount' => 'Amount',
            'col_name' => 'Name',
            'col_remaining' => 'Remaining',
            'bucket_current' => 'Bucket Current',
            'bucket_1_30' => 'Bucket 1 30',
            'bucket_31_60' => 'Bucket 31 60',
            'bucket_61_90' => 'Bucket 61 90',
            'bucket_91_plus' => 'Bucket 91 Plus',
            'empty_trend' => 'No trend data under the current filters.',
            'empty_structure' => 'No data',
        ],
        'supplier_performance' => [
            'label' => 'Supplier Performance',
            'plural' => 'Supplier Performance',
            'scope_hint' => 'Supplier Performance uses the current filters and business rules.',
            'link_purchase_orders' => 'Purchase Order',
            'link_purchase_exceptions' => 'Purchase Exception',
            'link_purchase_returns' => 'View Purchase Returns',
            'link_purchase_price_references' => 'Purchase Price Reference',
        ],
        'purchase_price_reference' => [
            'label' => 'Purchase Price Reference',
            'plural' => 'Purchase Price Reference',
            'scope_hint' => 'Purchase Price Reference uses the current filters and business rules.',
            'link_purchase_order' => 'View Purchase Order',
            'link_product' => 'Product Profile',
            'link_supplier' => 'View Supplier',
        ],
        'inventory_summary' => [
            'label' => 'Inventory Summary',
            'plural' => 'Inventory Summary',
            'scope_hint' => 'Inventory Summary uses the current filters and business rules.',
            'link_transactions' => 'Inventory Transaction',
        ],
        'inventory_batch' => [
            'label' => 'Inventory Batch',
            'plural' => 'Inventory Batch',
        ],
        'inventory_serial_number' => [
            'label' => 'Inventory Serial Number',
            'plural' => 'Inventory Serial Number',
        ],
        'inventory_rule' => [
            'label' => 'Inventory Rule',
            'plural' => 'Inventory Rule',
        ],
        'inventory_replenishment_suggestion' => [
            'label' => 'Replenishment Suggestion',
            'plural' => 'Replenishment Suggestion',
        ],
        'customer_sales_ranking' => [
            'label' => 'Customer Sales Ranking',
            'plural' => 'Customer Sales Ranking',
            'scope_hint' => 'Customer Sales Ranking uses the current filters and business rules.',
            'link_view_customer' => 'View View Customer',
            'link_sales_orders' => 'Sales Order',
        ],
        'supplier_purchase_ranking' => [
            'label' => 'Supplier Purchase Ranking',
            'plural' => 'Supplier Purchase Ranking',
            'scope_hint' => 'Supplier Purchase Ranking uses the current filters and business rules.',
            'link_view_supplier' => 'View View Supplier',
            'link_purchase_orders' => 'Purchase Order',
        ],
        'product_sales_ranking' => [
            'label' => 'Product Sales Ranking',
            'plural' => 'Product Sales Ranking',
            'scope_hint' => 'Product Sales Ranking uses the current filters and business rules.',
            'link_view_product' => 'Product Profile',
            'link_sales_orders' => 'Sales Order',
        ],
        'product_purchase_ranking' => [
            'label' => 'Product Purchase Ranking',
            'plural' => 'Product Purchase Ranking',
            'scope_hint' => 'Product Purchase Ranking uses the current filters and business rules.',
            'link_view_product' => 'Product Profile',
            'link_purchase_orders' => 'Purchase Order',
        ],
        'document_query' => [
            'label' => 'Document Query',
            'plural' => 'Document Query',
        ],
        'product_operation_query' => [
            'label' => 'Product Operation Query',
            'plural' => 'Product Operation Query',
        ],
        'customer_settlement_query' => [
            'label' => 'Customer Settlement Query',
            'plural' => 'Customer Settlement Query',
            'scope_hint' => 'Customer Settlement Query uses the current filters and business rules.',
            'link_customer_receivables' => 'View Customer Receivables',
            'link_receipt_payment_query' => 'View Receipt/Payment Query',
            'link_write_offs' => 'View Write-offs',
            'link_statements' => 'Statement',
        ],
        'supplier_settlement_query' => [
            'label' => 'Supplier Settlement Query',
            'plural' => 'Supplier Settlement Query',
            'scope_hint' => 'Supplier Settlement Query uses the current filters and business rules.',
            'link_supplier_payables' => 'View Supplier Payables',
            'link_receipt_payment_query' => 'View Receipt/Payment Query',
            'link_write_offs' => 'View Write-offs',
            'link_statements' => 'Statement',
        ],
        'receipt_payment_query' => [
            'label' => 'Receipt/Payment Records',
            'plural' => 'Receipt/Payment Records',
            'scope_hint' => 'Receipt/Payment Query uses the current filters and business rules.',
            'link_receipt_orders' => 'View Receipt Orders',
            'link_payment_orders' => 'View Payment Orders',
            'link_customer_receivables' => 'View Customer Receivables',
            'link_supplier_payables' => 'View Supplier Payables',
        ],
        'audit_log' => [
            'label' => 'Audit Log',
            'plural' => 'Audit Log',
        ],
        'data_import_batch' => [
            'label' => 'Import Batch',
            'plural' => 'Import Batch History',
        ],
        'settlement_permission_assignment' => [
            'label' => 'Settlement Permission Assignment',
            'plural' => 'Settlement Permission Assignment',
        ],
        'integration_sync_log' => [
            'label' => 'Integration Sync Log',
            'plural' => 'Integration Sync Log',
        ],
        'dbshop_product_sync' => [
            'label' => 'DBShop Product Sync',
            'plural' => 'DBShop Product Sync',
        ],
        'dbshop_customer_mapping' => [
            'label' => 'DBShop Customer Mapping',
            'plural' => 'DBShop Customer Mapping',
        ],
        'dbshop_order_sync' => [
            'label' => 'DBShop Order Sync',
            'plural' => 'DBShop Order Sync',
        ],
        'dbshop_inventory_sync' => [
            'label' => 'DBShop Inventory Sync',
            'plural' => 'DBShop Inventory Sync',
        ],
        'integration_mapping_governance' => [
            'label' => 'Integration Mapping Governance',
            'plural' => 'Integration Mapping Governance',
        ],
        'integration_retry_handling' => [
            'label' => 'Integration Retry Handling',
            'plural' => 'Integration Retry Handling',
        ],
    ],
    'errors' => [
        'admin_role_record_invalid' => 'Admin Role Record is invalid. Please check and try again.',
        'admin_role_system_cannot_delete' => 'Admin Role System Cannot Delete is still referenced by business data and cannot be deleted.',
        'admin_role_system_cannot_disable' => 'Unable to complete this operation: Admin Role System Cannot Disable.',
        'bootstrap_admin_roles_locked' => 'Unable to complete this operation: Bootstrap Admin Roles Locked.',
        'bootstrap_admin_permissions_locked' => 'Unable to complete this operation: Bootstrap Admin Permissions Locked.',
        'bootstrap_admin_cannot_delete' => 'Bootstrap Admin Cannot Delete is still referenced by business data and cannot be deleted.',
        'admin_user_delete_self_blocked' => 'Unable to complete this operation: Admin User Delete Self Blocked.',
        'number_rule_disabled' => 'Number Rule is disabled and cannot be used.',
        'number_rule_missing' => ':scope has no enabled numbering rule configured. Maintain it in Numbering Rules first, or enter the code manually.',
        'product_sku_code_rule_missing' => 'Product SKU Code Rule is missing. Please check and try again.',
        'sku_spec_value_invalid' => 'SKU Spec Value is invalid. Please check and try again.',
        'product_spec_value_in_use' => 'Product Spec Value is still referenced by business data and cannot be deleted.',
        'product_spec_values_required' => 'Please specify Product Spec Values.',
        'product_sku_duplicate_spec_combo' => 'Product SKU Duplicate Spec Combination already exists. Please check and try again.',
        'product_sku_spec_picks_incomplete' => 'Unable to complete this operation: Product SKU Spec Picks Incomplete.',
        'product_sku_spec_groups_missing' => 'Product SKU Spec Groups is missing. Please check and try again.',
        'line_product_sku_required_when_multi_spec' => 'Unable to complete this operation: Line Product SKU Required When Multi Spec.',
        'line_product_sku_must_belong_to_product' => 'Unable to complete this operation: Line Product SKU Must Belong To Product.',
        'inventory_posting_spec_required_before_posting' => 'Unable to complete this operation: Inventory Posting Spec Required Before Posting.',
        'inventory_posting_line_spec_invalid' => 'Inventory Posting Line Spec is invalid. Please check and try again.',
        'purchase_return_line_spec_upstream_mismatch' => 'Purchase Return Line Spec Upstream Mismatch does not match the referenced business data. Please check and try again.',
        'sales_return_line_spec_upstream_mismatch' => 'Sales Return Line Spec Upstream Mismatch does not match the referenced business data. Please check and try again.',
        'category_has_children' => 'Category Has Children is still referenced by business data and cannot be deleted.',
        'department_has_children' => 'Department Has Children is still referenced by business data and cannot be deleted.',
        'department_has_positions' => 'Unable to complete this operation: Department Has Positions.',
        'salesperson_duplicate_active_employee' => 'Salesperson Duplicate Active Employee already exists. Please check and try again.',
        'salesperson_employee_must_be_salesperson' => 'Please select an enabled employee marked as "Can Be Salesperson", or enable that flag in Employee Management.',
        'salesperson_invalid_linked_employee' => 'The selected linked employee does not exist. Please choose again.',
        'department_parent_invalid' => 'Department Parent is invalid. Please check and try again.',
        'department_parent_is_descendant' => 'Unable to complete this operation: Department Parent IS Descendant.',
        'category_has_products' => 'Category Has Products is still referenced by business data and cannot be deleted.',
        'customer_category_referenced_by_customers' => 'Customer Category Referenced By Customers is still referenced by business data and cannot be deleted.',
        'supplier_category_referenced_by_suppliers' => 'Supplier Category Referenced By Suppliers is still referenced by business data and cannot be deleted.',
        'unit_in_use' => 'Unit is still referenced by business data and cannot be deleted.',
        'unit_in_use_as_auxiliary' => 'Unable to complete this operation: Unit In Use As Auxiliary.',
        'product_brand_referenced_by_products' => 'Product Brand Referenced By Products is still referenced by business data and cannot be deleted.',
        'employee_manages_warehouse' => 'Unable to complete this operation: Employee Manages Warehouse.',
        'employee_owns_customer' => 'Unable to complete this operation: Employee Owns Customer.',
        'record_delete_blocked_by_reference' => 'Unable to complete this operation: Record Delete Blocked By Reference.',
        'record_delete_failed_generic' => 'Unable to complete this operation: Record Delete Failed Generic.',
        'warehouse_is_default' => 'Unable to complete this operation: Warehouse IS Default.',
        'region_import_failed' => 'Unable to complete this operation: Region Import Failed.',
        'region_not_found' => 'Region was not found. Please select again.',
        'region_master_data_must_be_district' => 'Unable to complete this operation: Region Master Data Must BE District.',
        'region_non_final_not_selectable' => 'Unable to complete this operation: Region Non Final Not Selectable.',
        'region_disabled_not_selectable' => 'Region Disabled Not Selectable is disabled and cannot be used.',
        'region_has_children' => 'Region Has Children is still referenced by business data and cannot be deleted.',
        'region_in_use_by_customer' => 'Unable to complete this operation: Region In Use By Customer.',
        'region_in_use_by_supplier' => 'Unable to complete this operation: Region In Use By Supplier.',
        'region_in_use_by_warehouse' => 'Unable to complete this operation: Region In Use By Warehouse.',
        'region_used_in_history_documents' => 'Unable to complete this operation: Region Used In History Documents.',
        'region_has_enabled_children' => 'Region Has Enabled Children is still referenced by business data and cannot be deleted.',
        'region_parent_change_restricted' => 'Unable to complete this operation: Region Parent Change Restricted.',
        'region_parent_change_blocked_official' => 'Unable to complete this operation: Region Parent Change Blocked Official.',
        'region_parent_change_blocked_system' => 'Unable to complete this operation: Region Parent Change Blocked System.',
        'region_parent_change_blocked_in_use' => 'Region Parent Change is still referenced by business data and cannot be deleted.',
        'region_official_imported_field_locked' => 'Unable to complete this operation: Region Official Imported Field Locked.',
        'region_manual_structural_locked' => 'Unable to complete this operation: Region Manual Structural Locked.',
        'region_delete_only_manual' => 'Unable to complete this operation: Region Delete Only Manual.',
        'region_custom_parent_must_be_district' => 'Unable to complete this operation: Region Custom Parent Must BE District.',
        'region_custom_parent_disabled' => 'Region Custom Parent is disabled and cannot be used.',
        'region_manual_parent_not_found' => 'Region Manual Parent was not found. Please select again.',
        'region_manual_parent_disabled' => 'Region Manual Parent is disabled and cannot be used.',
        'region_name_required' => 'Please specify Region Name.',
        'inventory_doc_no_items' => 'Inventory Document requires at least one line item.',
        'inventory_inbound_doc_no_items' => 'Inventory Inbound Document requires at least one line item.',
        'inventory_doc_not_draft' => 'Unable to complete this operation: Inventory Document Not Draft.',
        'inventory_doc_not_effective' => 'Unable to complete this operation: Inventory Document Not Effective.',
        'inventory_void_policy_blocked' => 'Unable to complete this operation: Inventory Void Policy Blocked.',
        'insufficient_stock' => 'Insufficient stock for product ":product" in :warehouse. Available: :available; required for outbound: :required.',
        'outbound_no_stock_in_warehouse' => 'Unable to complete this operation: Outbound No Stock-in Warehouse.',
        'outbound_insufficient_available_generic' => 'Unable to complete this operation: Outbound Insufficient Available Generic.',
        'outbound_insufficient_stock_detail' => 'Product :product has :available available in the current warehouse; this outbound requires :required and cannot be confirmed.',
        'outbound_insufficient_stock_multi' => 'The following products have insufficient stock and cannot be confirmed for outbound: :products.',
        'inventory_outbound_line_incomplete' => 'Unable to complete this operation: Inventory Outbound Line Incomplete.',
        'inventory_outbound_quantity_invalid' => 'Inventory Outbound Quantity is invalid. Please check and try again.',
        'inventory_confirm_failed_generic' => 'Unable to complete this operation: Inventory Confirm Failed Generic.',
        'inventory_idempotency_key_required' => 'Please specify Inventory IDempotency Key.',
        'inventory_idempotency_conflict' => 'Unable to complete this operation: Inventory IDempotency Conflict.',
        'inventory_delete_only_draft' => 'Only draft Inventory records can be deleted.',
        'transfer_warehouse_required' => 'Please specify Transfer Warehouse.',
        'transfer_same_warehouse' => 'Unable to complete this operation: Transfer Same Warehouse.',
        'transfer_not_effective' => 'Unable to complete this operation: Transfer Not Effective.',
        'transfer_void_requires_inventory_rollback' => 'This transfer has already affected inventory. The current void policy does not allow automatic stock rollback, so it cannot be voided.',
        'stocktake_scope_category_required' => 'Please specify Stocktake Scope Category.',
        'stocktake_scope_product_required' => 'Please specify Stocktake Scope Product.',
        'stocktake_scope_category_mismatch' => 'Stocktake Scope Category Mismatch does not match the referenced business data. Please check and try again.',
        'stocktake_scope_product_mismatch' => 'Stocktake Scope Product Mismatch does not match the referenced business data. Please check and try again.',
        'stocktake_actual_negative' => 'Unable to complete this operation: Stocktake Actual Negative.',
        'purchase_delete_only_draft' => 'Only draft Purchase records can be deleted.',
        'purchase_request_delete_only_draft' => 'Only draft Purchase Request records can be deleted.',
        'sales_delete_only_draft' => 'Only draft Sales records can be deleted.',
        'purchase_request_no_items' => 'Purchase Request requires at least one line item.',
        'purchase_request_not_editable' => 'The current Purchase Request status does not allow editing.',
        'purchase_request_not_submittable' => 'The current Purchase Request status does not allow submission.',
        'purchase_request_not_closable' => 'The current Purchase Request status does not allow closing.',
        'purchase_request_not_voidable' => 'The current Purchase Request status does not allow voiding.',
        'purchase_request_has_converted_items' => 'Purchase Request Has Converted Items is still referenced by business data and cannot be deleted.',
        'purchase_request_not_convertible' => 'The current Purchase Request status does not allow conversion.',
        'purchase_request_no_convertible_items' => 'Unable to complete this operation: Purchase Request No Convertible Items.',
        'purchase_request_item_already_fully_converted' => 'Purchase Request Item Already Fully Converted already exists. Please check and try again.',
        'purchase_request_convert_quantity_exceeds_remaining' => 'The quantity exceeds the allowed remaining quantity.',
        'purchase_request_source_already_generated' => 'Purchase Request Source Already Generated already exists. Please check and try again.',
        'purchase_inquiry_quote_not_editable' => 'The current Purchase Inquiry Quote status does not allow editing.',
        'purchase_inquiry_quote_not_recommendable' => 'Unable to complete this operation: Purchase Inquiry Quote Not Recommendable.',
        'purchase_inquiry_quote_supplier_required' => 'Please specify the supplier for this quote.',
        'invalid_purchase_source_document' => 'The source purchase document is invalid or not selectable.',
        'duplicate_purchase_inquiry_quote' => 'An active quote from this supplier already exists for the inquiry line.',
        'over_conversion' => 'The conversion quantity exceeds the remaining quantity on the source document.',
        'unavailable_purchase_inquiry_quote' => 'This supplier quote is invalid, expired, or voided and cannot be used as a source.',
        'reversed_conversion' => 'This conversion record has been reversed and cannot be occupied again.',
        'purchase_request_item_not_convertible' => 'The purchase request status does not allow further conversion.',
        'purchase_request_item_remaining_quantity_insufficient' => 'This purchase request line has no remaining quantity to convert.',
        'purchase_request_no_inquiry_lines' => 'Select at least one line with a valid inquiry quantity.',
        'purchase_inquiry_no_suppliers' => 'Select at least one supplier for inquiry.',
        'purchase_request_inquiry_quantity_exceeds_remaining' => 'Inquiry quantity cannot exceed the line\'s remaining quantity.',
        'purchase_inquiry_not_convertible' => 'This inquiry document cannot be converted to purchase orders in its current status.',
        'inquiry_quote_already_converted' => 'This supplier quote has already been converted to a purchase order.',
        'no_selectable_inquiry_quote' => 'No valid quotes are available for conversion. Check quote status, validity dates, and remaining request quantities.',
        'purchase_order_supplier_required' => 'Please select a supplier.',
        'purchase_order_source_single_request_required' => 'Only one purchase request can be used per order in this flow.',
        'purchase_order_source_line_locked' => 'Source-based lines cannot change source fields or quantity. Delete the line and add again if needed.',
        'purchase_order_source_occupation_failed' => 'Source quantity occupation failed. Check remaining request quantity or quote status.',
        'inquiry_quote_not_selectable' => 'This supplier quote cannot be selected as a conversion source.',
        'inquiry_quote_expired' => 'This supplier quote has expired and cannot be used as a conversion source.',
        'inquiry_quote_invalidated' => 'This supplier quote has been voided and cannot be used as a conversion source.',
        'purchase_order_source_supplier_mismatch' => 'The purchase order supplier does not match the selected quote supplier.',
        'duplicate_conversion' => 'This purchase order line already has an active source occupation record.',
        'replenishment_suggestion_not_requestable' => 'Unable to complete this operation: Replenishment Suggestion Not Requestable.',
        'purchase_order_no_items' => 'Purchase Order requires at least one line item.',
        'purchase_order_not_draft' => 'Unable to complete this operation: Purchase Order Not Draft.',
        'purchase_order_not_closable' => 'The current Purchase Order status does not allow closing.',
        'purchase_order_not_voidable' => 'The current Purchase Order status does not allow voiding.',
        'purchase_order_source_inquiry_quote_mismatch' => 'Purchase Order Source Inquiry Quote Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_order_has_effective_receipts' => 'Unable to complete this operation: Purchase Order Has Effective Receipts.',
        'purchase_order_has_effective_returns' => 'Unable to complete this operation: Purchase Order Has Effective Returns.',
        'purchase_order_not_receivable' => 'Unable to complete this operation: Purchase Order Not Receivable.',
        'purchase_supplier_mismatch' => 'Purchase Supplier Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_receipt_no_items' => 'Purchase Receipt requires at least one line item.',
        'purchase_receipt_arrival_less_than_received' => 'Unable to complete this operation: Purchase Receipt Arrival Less Than Received.',
        'purchase_receipt_arrival_invalid' => 'Purchase Receipt Arrival is invalid. Please check and try again.',
        'purchase_receipt_quantity_invalid' => 'Purchase Receipt Quantity is invalid. Please check and try again.',
        'purchase_receipt_quantity_exceeds_remaining' => 'The quantity exceeds the allowed remaining quantity.',
        'purchase_receipt_arrival_exceeds_remaining' => 'Unable to complete this operation: Purchase Receipt Arrival Exceeds Remaining.',
        'purchase_exception_resolution_result_required' => 'Please specify Purchase Exception Resolution Result.',
        'purchase_receipt_item_order_mismatch' => 'Purchase Receipt Item Order Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_receipt_has_returns' => 'Unable to complete this operation: Purchase Receipt Has Returns.',
        'purchase_return_no_items' => 'Purchase Return requires at least one line item.',
        'purchase_return_reference_required' => 'Please specify Purchase Return Reference.',
        'purchase_return_reference_mismatch' => 'Purchase Return Reference Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_return_quantity_invalid' => 'Purchase Return Quantity is invalid. Please check and try again.',
        'purchase_return_quantity_exceeds_returnable' => 'The quantity exceeds the allowed remaining quantity.',
        'purchase_return_item_order_mismatch' => 'Purchase Return Item Order Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_return_item_receipt_mismatch' => 'Purchase Return Item Receipt Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_item_product_mismatch' => 'Purchase Item Product Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_item_sku_mismatch' => 'Purchase Item SKU Mismatch does not match the referenced business data. Please check and try again.',
        'purchase_order_item_sku_required' => 'Please specify Purchase Order Item SKU.',
        'purchase_order_item_sku_invalid' => 'Purchase Order Item SKU is invalid. Please check and try again.',
        'purchase_item_product_required' => 'Please specify Purchase Item Product.',
        'bulk_add_product_skus_required' => 'Select at least one product spec.',
        'bulk_add_quantity_must_be_positive' => 'Default quantity must be greater than zero.',
        'bulk_add_product_sku_not_purchasable' => 'One or more selected specs are not purchasable or are disabled.',
        'bulk_add_product_sku_not_salable' => 'One or more selected specs are not salable or are disabled.',
        'bulk_add_product_sku_not_inventory' => 'One or more selected specs are disabled or do not manage inventory.',
        'bulk_add_warehouse_required' => 'Select a valid warehouse.',
        'other_stock_in_not_draft' => 'Bulk add is only available for draft other stock-in documents.',
        'other_stock_out_not_draft' => 'Bulk add is only available for draft other stock-out documents.',
        'transfer_order_not_draft' => 'Bulk add is only available for draft transfer orders.',
        'barcode_quick_add_empty' => 'Please enter a barcode.',
        'barcode_quick_add_quantity_must_be_positive' => 'Quantity must be greater than zero.',
        'barcode_lookup_not_found' => 'No matching product found for this barcode.',
        'barcode_lookup_duplicate' => 'This barcode matches more than one product or spec. Please select manually.',
        'barcode_lookup_ambiguous_product' => 'This product barcode matches multiple specs. Use a SKU barcode or select the spec manually.',
        'purchase_receipt_item_sku_required' => 'Please specify Purchase Receipt Item SKU.',
        'purchase_return_item_sku_required' => 'Please specify Purchase Return Item SKU.',
        'product_sku_disabled_purchase' => 'Product SKU Disabled Purchase is disabled and cannot be used.',
        'product_sku_disabled_sale' => 'Product SKU Disabled Sale is disabled and cannot be used.',
        'product_sku_all_disabled_for_inventory' => 'Product SKU All Disabled For Inventory is disabled and cannot be used.',
        'inventory_quantity_must_be_positive' => 'The quantity must be greater than 0.',
        'sales_order_no_items' => 'Sales Order requires at least one line item.',
        'sales_quote_no_items' => 'Sales Quote requires at least one line item.',
        'sales_order_not_draft' => 'Unable to complete this operation: Sales Order Not Draft.',
        'sales_quote_not_draft' => 'Unable to complete this operation: Sales Quote Not Draft.',
        'sales_quote_not_submittable' => 'The current Sales Quote status does not allow submission.',
        'inventory_serial_number_not_reservable' => 'Unable to complete this operation: Inventory Serial Number Not Reservable.',
        'inventory_serial_number_required' => 'Please specify Inventory Serial Number.',
        'inventory_serial_number_exists' => 'Unable to complete this operation: Inventory Serial Number Exists.',
        'inventory_serial_number_not_found' => 'Inventory Serial Number was not found. Please select again.',
        'inventory_serial_number_batch_mismatch' => 'Inventory Serial Number Batch Mismatch does not match the referenced business data. Please check and try again.',
        'inventory_serial_number_quantity_must_be_integer' => 'Product [:product_name] uses serial number tracking; line quantity must be a whole number.',
        'inventory_serial_number_count_must_match_quantity' => 'Product [:product_name] uses serial number tracking. Quantity is :quantity but :serial_count serial number(s) were entered. Please correct before submitting.',
        'inventory_serial_number_governance_toggle_blocked' => 'This serial number status cannot be toggled here. Use inventory business documents instead.',
        'stocktake_serial_numbers_must_be_empty_when_zero_quantity' => 'Product [:product_name] has zero actual quantity; do not enter counted serial numbers.',
        'inventory_batch_not_found' => 'Inventory Batch was not found. Please select again.',
        'inventory_batch_not_usable' => 'Unable to complete this operation: Inventory Batch Not Usable.',
        'inventory_batch_sale_blocked' => 'Unable to complete this operation: Inventory Batch Sale Blocked.',
        'inventory_batch_quantity_not_enough' => 'Unable to complete this operation: Inventory Batch Quantity Not Enough.',
        'sales_quote_not_editable' => 'The current Sales Quote status does not allow editing.',
        'sales_quote_not_convertible' => 'The current Sales Quote status does not allow conversion.',
        'sales_quote_already_converted' => 'Sales Quote Already Converted already exists. Please check and try again.',
        'sales_quote_not_voidable' => 'The current Sales Quote status does not allow voiding.',
        'sales_quote_validity_required' => 'Please specify Sales Quote Validity.',
        'sales_quote_validity_invalid' => 'Sales Quote Validity is invalid. Please check and try again.',
        'sales_quote_customer_required' => 'Please specify Sales Quote Customer.',
        'sales_order_not_closable' => 'The current Sales Order status does not allow closing.',
        'sales_order_not_voidable' => 'The current Sales Order status does not allow voiding.',
        'sales_order_not_editable' => 'The current Sales Order status does not allow editing.',
        'sales_order_customer_required' => 'Please specify Sales Order Customer.',
        'sales_order_has_effective_outbounds' => 'Unable to complete this operation: Sales Order Has Effective Outbounds.',
        'sales_order_has_effective_returns' => 'Unable to complete this operation: Sales Order Has Effective Returns.',
        'sales_order_not_outboundable' => 'Unable to complete this operation: Sales Order Not Outboundable.',
        'sales_customer_mismatch' => 'Sales Customer Mismatch does not match the referenced business data. Please check and try again.',
        'sales_outbound_no_items' => 'Sales Outbound requires at least one line item.',
        'sales_outbound_quantity_invalid' => 'Sales Outbound Quantity is invalid. Please check and try again.',
        'sales_outbound_quantity_exceeds_remaining' => 'The quantity exceeds the allowed remaining quantity.',
        'sales_outbound_item_order_mismatch' => 'Sales Outbound Item Order Mismatch does not match the referenced business data. Please check and try again.',
        'sales_outbound_has_returns' => 'Unable to complete this operation: Sales Outbound Has Returns.',
        'sales_return_no_items' => 'Sales Return requires at least one line item.',
        'sales_return_reference_required' => 'Please specify Sales Return Reference.',
        'sales_return_reference_mismatch' => 'Sales Return Reference Mismatch does not match the referenced business data. Please check and try again.',
        'sales_return_quantity_invalid' => 'Sales Return Quantity is invalid. Please check and try again.',
        'sales_return_quantity_exceeds_returnable' => 'The quantity exceeds the allowed remaining quantity.',
        'sales_return_item_order_mismatch' => 'Sales Return Item Order Mismatch does not match the referenced business data. Please check and try again.',
        'sales_return_item_outbound_mismatch' => 'Sales Return Item Outbound Mismatch does not match the referenced business data. Please check and try again.',
        'sales_item_product_mismatch' => 'Sales Item Product Mismatch does not match the referenced business data. Please check and try again.',
        'sales_item_sku_mismatch' => 'Sales Item SKU Mismatch does not match the referenced business data. Please check and try again.',
        'sales_outbound_item_sku_required' => 'Please specify Sales Outbound Item SKU.',
        'sales_order_item_sku_required' => 'Please specify Sales Order Item SKU.',
        'sales_order_item_sku_invalid' => 'Sales Order Item SKU is invalid. Please check and try again.',
        'sales_return_item_sku_required' => 'Please specify Sales Return Item SKU.',
        'sales_item_product_required' => 'Please specify Sales Item Product.',
        'credit_override_reason_required' => 'Please specify Credit Override Reason.',
        'credit_blocked_generic' => 'Unable to complete this operation: Credit Blocked Generic.',
        'credit_blocked_over_limit' => 'The current customer is projected to use :projected_amount, exceeding the credit limit of :credit_limit_amount. The sales order cannot be confirmed directly.',
        'credit_blocked_overdue' => 'The current customer has overdue receivables. Overdue count: :overdue_count; earliest overdue date: :earliest_due_date. The sales order cannot be confirmed directly.',
        'credit_blocked_both' => 'The current customer is projected to use :projected_amount, exceeding the credit limit of :credit_limit_amount, and has :overdue_count overdue receivables (earliest overdue date: :earliest_due_date). The sales order cannot be confirmed directly.',
        'customer_price_rule_type_invalid' => 'Customer Price Rule Type is invalid. Please check and try again.',
        'customer_price_rule_customer_required' => 'Please specify Customer Price Rule Customer.',
        'customer_price_rule_level_required' => 'Please specify Customer Price Rule Level.',
        'price_level_code_invalid' => 'Price Level Code is invalid. Please check and try again.',
        'dictionary_item_used_by_customers' => 'Unable to complete this operation: Dictionary Item Used By Customers.',
        'dictionary_item_used_by_suppliers' => 'Unable to complete this operation: Dictionary Item Used By Suppliers.',
        'dictionary_item_used_by_customer_price_rules' => 'Unable to complete this operation: Dictionary Item Used By Customer Price Rules.',
        'dictionary_item_used_by_system_profile' => 'Unable to complete this operation: Dictionary Item Used By System Profile.',
        'dictionary_item_used_by_receipt_orders' => 'Unable to complete this operation: Dictionary Item Used By Receipt Orders.',
        'dictionary_item_used_by_payment_orders' => 'Unable to complete this operation: Dictionary Item Used By Payment Orders.',
        'settlement_delete_only_draft' => 'Only draft Settlement records can be deleted.',
        'settlement_doc_not_draft' => 'Unable to complete this operation: Settlement Document Not Draft.',
        'settlement_doc_not_submitted' => 'Unable to complete this operation: Settlement Document Not Submitted.',
        'settlement_doc_not_effective' => 'Unable to complete this operation: Settlement Document Not Effective.',
        'settlement_void_policy_blocked' => 'Unable to complete this operation: Settlement Void Policy Blocked.',
        'settlement_closed_document_blocked' => 'Unable to complete this operation: Settlement Closed Document Blocked.',
        'settlement_document_has_write_offs' => 'Unable to complete this operation: Settlement Document Has Write-offs.',
        'receipt_amount_invalid' => 'Receipt Amount is invalid. Please check and try again.',
        'payment_amount_invalid' => 'Payment Amount is invalid. Please check and try again.',
        'receipt_amount_exceeds_remaining' => 'Unable to complete this operation: Receipt Amount Exceeds Remaining.',
        'payment_amount_exceeds_remaining' => 'Unable to complete this operation: Payment Amount Exceeds Remaining.',
        'receipt_sales_order_unsettled' => 'Unable to complete this operation: Receipt Sales Order Unsettled.',
        'payment_purchase_order_unsettled' => 'Unable to complete this operation: Payment Purchase Order Unsettled.',
    ],
    'document_line' => [
        'unit' => 'Unit',
        'entry_quantity' => 'Entry Quantity',
        'conversion_relationship' => 'Conversion Relationship',
        'approx_base_preview' => 'Approx Base Preview',
        'inventory_hint_reference' => 'Inventory reference',
        'available_serial_numbers' => 'Available serial numbers',
        'select_in_stock_serial_numbers' => 'Select in-stock serial numbers',
        'select_in_stock_serial_numbers_helper' => 'Search and pick serial numbers from the outbound warehouse; selections merge into the list below.',
        'select_in_stock_serial_numbers_enter_quantity_first' => 'Enter the outbound quantity first, then pick in-stock serial numbers. The number selected cannot exceed the quantity.',
        'selected_serial_numbers' => 'Selected serial numbers',
        'selected_serial_numbers_helper' => 'Count must match the outbound quantity. Pick from in-stock serials below or edit tags manually.',
        'inbound_serial_numbers_helper' => 'Register new serial numbers for inbound (not in-stock picking). Type one by one, use commas, or bulk-paste above; remove tags individually.',
        'bulk_paste_serial_numbers' => 'Bulk-paste serial numbers',
        'bulk_paste_serial_numbers_helper' => 'One per line, or separated by commas/semicolons. Parsed entries merge into the list below (capped by inbound quantity).',
        'bulk_paste_serial_numbers_placeholder' => "Example:\nSN20260001\nSN20260002\nor SN20260001, SN20260002",
        'serial_number_no_stock_in_warehouse' => 'No in-stock serial numbers in this warehouse. Check the warehouse or on-hand serial records.',
        'serial_number_product_not_managed' => 'Serial number tracking is not enabled for this product',
    ],
    'placeholders' => [
        'product_brand' => 'Product Brand',
    ],
    'validation' => [
        'product_spec_combo_code_unique' => 'This spec code is already in use. Change it and try again.',
        'product_barcode_unique_non_empty' => 'This barcode is already in use. Change it and try again. Leave it blank if no scannable barcode is available.',
        'product_spec_combo_delete_blocked_referenced' => 'This spec combination is referenced by inventory, purchase, or sales data and cannot be deleted. Disable it instead when there is no stock balance.',
        'product_spec_combo_disable_blocked_has_stock' => 'This spec combination still has stock balance in a warehouse and cannot be disabled. Clear the balance first.',
        'product_spec_group_delete_blocked_in_use' => 'This spec dimension is referenced by spec combinations and cannot be deleted. Disable and delete unused combinations on the Spec Combinations tab first.',
        'product_spec_combo_delete_requires_disabled' => 'Disable this spec combination before deleting it.',
        'product_spec_combo_delete_blocked_last' => 'A multi-spec product must keep at least one spec combination; the last one cannot be deleted.',
        'product_spec_rebuild_requires_multi_spec' => 'Multi-spec is not enabled; there is nothing to rebuild.',
        'product_spec_rebuild_nothing_to_clear' => 'No spec dimensions or combinations exist yet; nothing to rebuild.',
        'product_spec_rebuild_blocked_has_stock' => 'Spec combination ":label" still has stock balance and cannot be rebuilt. Clear the balance first.',
        'product_spec_rebuild_blocked_referenced' => 'Spec combination ":label" is referenced by inventory or trading data and cannot be rebuilt.',
        'product_spec_value_delete_blocked_in_use' => 'This operation is blocked because Product Spec Value Delete is referenced by business data.',
        'product_brand_code_unique' => 'This Product Brand Code is already in use. Please change it and try again.',
        'product_brand_name_unique' => 'This Product Brand Name is already in use. Please change it and try again.',
        'product_brand_missing' => 'Please check Product Brand and try again.',
        'product_brand_must_be_enabled' => 'Please check Product Brand Must BE and try again.',
        'product_auxiliary_unit_required' => 'Please specify Product Auxiliary Unit.',
        'product_base_unit_required_before_auxiliary' => 'Please check Product Base Unit Required Before Auxiliary and try again.',
        'product_auxiliary_unit_must_differ_from_base' => 'Please check Product Auxiliary Unit Must Differ From Base and try again.',
        'product_auxiliary_unit_missing' => 'Please check Product Auxiliary Unit and try again.',
        'product_auxiliary_unit_must_be_enabled' => 'Please check Product Auxiliary Unit Must BE and try again.',
        'product_auxiliary_conversion_quantities_required' => 'Please specify Product Auxiliary Conversion Quantities.',
        'product_auxiliary_quantity_must_be_positive' => 'Please check Product Auxiliary Quantity Must BE Positive and try again.',
        'product_base_unit_quantity_must_be_positive' => 'Please check Product Base Unit Quantity Must BE Positive and try again.',
        'document_line_unit_invalid' => 'Document Line Unit is invalid. Please check and try again.',
        'document_line_unit_inventory_requires_base' => 'Please check Document Line Unit Inventory Requires Base and try again.',
        'document_line_product_missing_base_unit' => 'Please check Document Line Product Missing Base Unit and try again.',
        'document_line_quantity_invalid' => 'Document Line Quantity is invalid. Please check and try again.',
        'document_line_auxiliary_conversion_missing' => 'Please check Document Line Auxiliary Conversion and try again.',
        'document_line_auxiliary_conversion_invalid' => 'Document Line Auxiliary Conversion is invalid. Please check and try again.',
    ],
    'headings' => [
        'delete_spec_group' => 'Delete Spec Group',
        'delete_spec_combo' => 'Delete Spec Combination',
        'rebuild_spec_matrix' => 'Rebuild Spec Structure',
    ],
    'purchase_inquiry_comparison' => [
        'stat_quote_count' => 'Quote Count',
        'stat_recommended_count' => 'Recommended Deal Count',
        'stat_expiring_count' => 'Expiring Soon Count',
        'section_overview' => 'Inquiry Comparison Overview',
        'col_inquiry_no' => 'Inquiry No.',
        'col_purchase_request' => 'Purchase Request',
        'col_product' => 'Product',
        'col_supplier' => 'Supplier',
        'col_quote_unit_price' => 'Quoted Unit Price',
        'col_lowest_valid_quote' => 'Lowest Valid Quote',
        'col_supplier_last_deal_price' => 'Supplier Latest Deal Price',
        'col_product_last_purchase_price' => 'Product Latest Purchase Price',
        'col_lead_time' => 'Current Lead Time',
        'col_recent_lead_time' => 'Latest Lead Time',
        'col_hint' => 'Hint',
        'recommended_suffix' => ' / Recommended Deal',
        'lead_time_days_unit' => ':days days',
        'empty_filtered' => 'No inquiry comparison data under the current filters.',
    ],
    'data_import' => [
        'page_title' => 'Data Initialization Import',
        'page_intro' => 'Import master data and opening stock from standard Excel/CSV templates. Download a template, upload for precheck, then confirm import after precheck passes. Precheck does not write business data.',
        'page_intro_step2' => 'Download standard templates and upload Excel/CSV files for precheck. This step parses and validates headings only; no business data is written.',
        'page_intro_step3' => 'Import master data and opening stock from standard Excel/CSV templates. Download a template, upload for precheck, then confirm import after precheck passes. Precheck does not write business data.',
        'batch_list_intro' => 'Review historical import batches, statuses, row-level errors, and result summaries.',
        'template_precheck_intro' => 'Select an import type, download the matching template in your current language, fill it in, then upload for precheck. Headings must match the downloaded template exactly; extra columns and custom mapping are not supported in the base version.',
        'upload_file_hint' => 'Supports xlsx and csv; max :max_mb MB; up to :max_rows data rows (excluding the header row). Templates include example rows (codes starting with __example__); they are ignored during precheck—enter your real data below them.',
        'precheck_summary_heading' => 'Precheck Result',
        'validated_rows' => 'Validated rows',
        'failed_rows' => 'Failed rows',
        'row_error_heading' => 'Row errors (original row numbers preserved)',
        'precheck_no_write_notice' => 'Precheck finished with validation errors. No business data was written. Fix the file and upload again.',
        'precheck_ready_for_execute_notice' => 'Precheck passed. Click Confirm Import to write business data. Review carefully before continuing.',
        'precheck_file_only_notice' => 'Heading and row parsing completed. Confirmed import is not available for this type yet.',
        'precheck_passed_title' => 'Precheck passed',
        'precheck_passed_body' => ':total rows total; :validated rows passed validation and are ready to import.',
        'precheck_failed_title' => 'Precheck failed',
        'precheck_failed_body' => ':total rows total; :failed rows have errors. Fix the file and upload again.',
        'precheck_file_only_title' => 'File parsed successfully',
        'precheck_file_only_body' => ':rows valid data rows were detected and headings match the template. Confirmed import for this type will be enabled in a later step.',
        'execute_confirm_heading' => 'Confirm Import',
        'execute_confirm_body' => 'Validated rows will be written to master data. This cannot be automatically undone. Continue only if the data is correct.',
        'execute_success_title' => 'Import completed',
        'execute_success_body' => ':imported rows imported successfully.',
        'execute_failed_title' => 'Import incomplete',
        'execute_failed_body' => ':failed rows failed to import. Review batch history and row errors.',
        'sections' => [
            'batch_summary' => 'Batch Summary',
            'template_and_precheck' => 'Template Download & File Precheck',
        ],
        'skeleton' => [
            'heading' => 'Getting Ready',
            'description' => 'Data initialization import supports standard Excel/CSV templates, precheck validation, confirmed import, and batch traceability.',
            'supported_types_heading' => 'Supported import types',
            'recommended_order_heading' => 'Recommended import order',
            'recommended_order_body' => '1. Units → 2. Product categories / brands → 3. Customer/supplier categories → 4. Warehouses → 5. Customers / suppliers → 6. Products/materials → 7. Opening stock. Opening receivable/payable, multi-spec products, employees, and salespersons will be provided in later releases or advanced plugins.',
            'coming_soon_hint' => 'Confirmed import and batch persistence are available for supported types.',
            'batch_history_heading' => 'Import batch history',
            'batch_history_description' => 'Each import creates a batch record. Review batch summaries in the table below and use View to inspect row errors, operators, and correlated audit entries.',
        ],
        'precheck_batch_history_hint' => 'The current batch is listed below. Use View in the batch table to inspect details.',
        'batch_row_summary_line' => 'Row :row · :status',
        'correlation_id_hint' => 'Unique identifier for this import in audit logs. Filter by this ID under Audit Logs to review precheck, import, and related business write operations.',
        'template_columns' => [
            'code' => 'Code',
            'name' => 'Name',
            'is_enabled' => 'Enabled',
            'sort_order' => 'Sort Order',
            'remark' => 'Remark',
            'parent_code' => 'Parent Code',
            'brand_code' => 'Brand Code',
            'status' => 'Status',
            'sort' => 'Sort',
            'warehouse_type' => 'Warehouse Type',
            'is_default' => 'Default',
            'manager_employee_code' => 'Manager Employee Code',
            'region_code' => 'Region Code',
            'address' => 'Address',
            'customer_category_code' => 'Customer Category Code',
            'supplier_category_code' => 'Supplier Category Code',
            'settlement_method' => 'Settlement Method',
            'contact_person' => 'Contact Person',
            'mobile' => 'Mobile',
            'phone' => 'Phone',
            'email' => 'Email',
            'price_level_code' => 'Price Level Code',
            'default_payment_term_days' => 'Default Payment Term (Days)',
            'credit_limit_amount' => 'Credit Limit',
            'salesperson_employee_code' => 'Salesperson Employee Code',
            'category_code' => 'Category Code',
            'spec_model' => 'Spec/Model',
            'unit_code' => 'Unit Code',
            'barcode' => 'Barcode',
            'cost_price' => 'Cost Price',
            'sales_price' => 'Sales Price',
            'manages_inventory' => 'Manages Inventory',
            'external_key' => 'External Key',
            'product_code' => 'Product Code',
            'sku_code' => 'SKU Code',
            'warehouse_code' => 'Warehouse Code',
            'quantity' => 'Quantity',
            'unit_cost' => 'Unit Cost',
            'safety_stock' => 'Safety Stock',
            'batch_no' => 'Batch No.',
            'serial_no' => 'Serial No.',
            'production_date' => 'Production Date',
            'expiry_date' => 'Expiry Date',
            'business_time' => 'Business Time',
            'opening_receivable' => 'Opening Receivable',
            'opening_payable' => 'Opening Payable',
            'opening_receivable_amount' => 'Opening Receivable Amount',
            'opening_payable_amount' => 'Opening Payable Amount',
            'receivable_balance' => 'Receivable Balance',
            'payable_balance' => 'Payable Balance',
            'opening_balance' => 'Opening Balance',
            'spec_group' => 'Spec Group',
            'spec_value' => 'Spec Value',
            'sku_price' => 'SKU Price',
            'sku_barcode' => 'SKU Barcode',
            'sku_matrix' => 'SKU Matrix',
        ],
        'template_samples' => [
            'example_row_remark' => 'Example row—ignored during precheck. Enter real data below.',
            'unit_1_name' => 'Kilogram (example)',
            'unit_2_name' => 'Box (example)',
            'category_1_name' => 'Example category L1',
            'category_2_name' => 'Example category L2',
            'brand_1_name' => 'Example brand',
            'partner_category_1_name' => 'Example category',
            'warehouse_1_name' => 'Example warehouse',
            'customer_1_name' => 'Example customer',
            'supplier_1_name' => 'Example supplier',
            'product_1_name' => 'Example product',
            'sample_address' => '100 Example Street',
            'sample_contact' => 'John Doe',
            'sample_spec_model' => 'Example spec',
        ],
        'actions' => [
            'view_batch_detail' => 'View batch detail',
            'view_batch_history' => 'View import batch history',
            'download_template' => 'Download Standard Template',
            'download_failed_rows' => 'Download Failed Rows',
            'precheck_file' => 'Precheck File',
            'execute_import' => 'Confirm Import',
            'delete_batch' => 'Delete batch',
        ],
        'failed_rows_export' => [
            'source_row_number' => 'Source Row Number',
            'error_reason' => 'Error Reason',
        ],
        'delete_batch_confirm_heading' => 'Delete import batch',
        'delete_batch_confirm_body' => 'This removes the batch record, row details, and the private copy of the source file. This cannot be undone.',
        'delete_batch_confirm_body_completed' => 'This removes the batch record and row details. Imported business data will not be rolled back, and related audit log entries will remain. This cannot be undone.',
        'empty_state' => [
            'heading' => 'No import batches yet',
            'description' => 'After your first data initialization import, batch records will appear here.',
        ],
        'errors' => [
            'unsupported_import_type' => 'The selected import type is not supported.',
            'file_not_readable' => 'Unable to read the uploaded file. Please choose another file and try again.',
            'file_empty' => 'The file is empty or missing a header row.',
            'file_too_large' => 'The file exceeds the size limit (max :max_mb MB).',
            'unsupported_file_type' => 'Only xlsx and csv files are supported.',
            'forbidden_heading_columns' => 'The file contains disallowed columns: :columns. Opening receivable/payable must use separate import flows (coming later), not customer or supplier templates.',
            'forbidden_product_multi_spec_columns' => 'The product import template supports single-spec master data only. Remove multi-spec columns: :columns. Configure multi-spec products in the system or use a future multi-spec import flow.',
            'heading_missing_columns' => 'Missing required header columns: :columns.',
            'heading_extra_columns' => 'Undefined extra header columns: :columns. The base version does not support custom columns or field mapping.',
            'heading_order_mismatch' => 'Header column order does not match the standard template. Please download the template again.',
            'no_data_rows' => 'No valid data rows were found. Example rows may remain, but you must add real business data below them before uploading for precheck.',
            'too_many_rows' => 'Too many data rows (maximum :max_rows).',
            'import_type_required' => 'Please select an import type first.',
            'upload_file_required' => 'Please upload a file to precheck.',
            'execution_not_supported' => 'Confirmed import is not supported for this type yet. You can download templates and run heading precheck only.',
            'batch_not_ready_for_execution' => 'The batch did not pass precheck or has already been executed.',
            'batch_not_found' => 'Import batch not found or expired. Please upload and precheck again.',
            'batch_delete_not_allowed' => 'This batch is still processing and cannot be deleted yet.',
            'no_failed_rows_to_export' => 'This batch has no failed rows to export.',
            'execution_failed' => 'Import execution failed: :reason',
            'execution_failed_generic' => 'Import execution failed. Review batch details or contact an administrator.',
        ],
        'batch_rows' => [
            'section_heading' => 'Import row details',
            'empty_heading' => 'No row records',
            'empty_description' => 'This batch has no row-level precheck or import results yet.',
        ],
        'validation' => [
            'row_prefix' => 'Row :row: :message',
            'name_required' => 'Name is required',
            'invalid_boolean' => 'Invalid enabled flag; use 1/0 or yes/no',
            'invalid_sort_order' => 'Sort order must be an integer',
            'code_duplicate_in_file' => 'Code :value is duplicated in the file',
            'brand_code_duplicate_in_file' => 'Brand code :value is duplicated in the file',
            'name_duplicate_in_file' => 'Name :value is duplicated in the file',
            'code_exists_in_database' => 'Code :value already exists',
            'brand_code_exists_in_database' => 'Brand code :value already exists',
            'name_exists_in_database' => 'Name :value already exists',
            'invalid_parent_code' => 'Invalid parent category code :value',
            'self_parent_reference' => 'Parent category code cannot be the same as the row code',
            'circular_parent_reference' => 'Parent category references form a circular dependency',
            'invalid_master_record_status' => 'Invalid status; use active or inactive',
            'invalid_warehouse_type' => 'Invalid warehouse type; use general, store, transit, or virtual',
            'invalid_manager_employee_code' => 'Manager employee code :value does not exist',
            'invalid_region_code' => 'Region code :value does not exist',
            'multiple_default_warehouses_in_file' => 'Only one default warehouse is allowed per import file',
            'invalid_settlement_method' => 'Invalid settlement method; use one of: :allowed',
            'invalid_email' => 'Invalid email format',
            'invalid_non_negative_integer' => 'Value must be a non-negative integer',
            'invalid_non_negative_decimal' => 'Amount must be a non-negative number',
            'invalid_category_code' => 'Category code :value does not exist',
            'unit_code_required' => 'Unit code is required',
            'invalid_unit_code' => 'Unit code :value does not exist',
            'disabled_unit_code' => 'Unit :value is disabled and cannot be imported',
            'invalid_product_category_code' => 'Product category code :value does not exist',
            'disabled_product_category_code' => 'Product category :value is disabled and cannot be imported',
            'invalid_product_brand_code' => 'Product brand code :value does not exist',
            'disabled_product_brand_code' => 'Product brand :value is disabled and cannot be imported',
            'barcode_duplicate_in_file' => 'Barcode :value is duplicated in the file',
            'barcode_exists_in_database' => 'Barcode :value already exists in the system',
            'default_sku_creation_failed' => 'Default SKU creation failed; product was not saved',
            'product_code_required' => 'Product code is required',
            'warehouse_code_required' => 'Warehouse code is required',
            'quantity_required' => 'Quantity is required',
            'invalid_positive_decimal' => 'Quantity must be greater than zero',
            'invalid_date' => 'Invalid date format',
            'invalid_datetime' => 'Invalid business time format',
            'invalid_product_code' => 'Product code :value does not exist',
            'disabled_or_non_inventory_product_code' => 'Product :value is disabled or does not manage inventory',
            'invalid_warehouse_code' => 'Warehouse code :value does not exist',
            'disabled_warehouse_code' => 'Warehouse :value is disabled',
            'invalid_product_sku_code' => 'SKU code :value is invalid, disabled, or does not belong to the product',
            'product_sku_code_required' => 'This product has multiple enabled SKUs; sku_code is required',
            'external_key_duplicate_in_file' => 'External key :value is duplicated in the file',
            'external_key_already_imported' => 'External key :value was already imported successfully',
            'opening_stock_duplicate_inventory_row' => 'Duplicate opening stock row for the same product, SKU, warehouse, and external key',
            'batch_no_required' => 'Batch number is required for batch-managed products',
            'expiry_date_required' => 'Expiry date is required for expiry-managed products',
            'serial_product_requires_integer_quantity' => 'Serial-managed products require an integer quantity',
            'serial_count_must_match_quantity' => 'Serial number count must match the inbound quantity',
            'opening_stock_reference_missing' => 'Product or warehouse reference is invalid for opening stock import',
            'invalid_salesperson_employee_code' => 'Salesperson employee code :value does not exist',
            'invalid_price_level_code' => 'Price level code :value is invalid or disabled',
            'import_failed' => 'Import failed: :reason',
        ],
        'opening_stock' => [
            'order_reason' => 'Opening stock import',
            'order_remark_prefix' => 'Data initialization import',
        ],
        'values' => [
            'system_operator' => 'System',
        ],
    ],
    'permission_labels' => require __DIR__.'/dberp_permission_labels.php',
    'plugin_permission_actions' => [
        'view' => 'View',
        'configure' => 'Configure',
        'import' => 'Import',
        'export' => 'Export',
        'manage' => 'Manage',
        'submit' => 'Submit',
        'approve' => 'Approve',
        'reject' => 'Reject',
        'withdraw' => 'Withdraw',
        'retry' => 'Retry',
        'test_send' => 'Test send',
        'view_log' => 'View logs',
    ],
    'permission_modules' => [
        'inventory' => 'Inventory management',
    ],
    'admin' => [
        'locale' => [
            'group_label' => 'Interface language',
            'zh' => '中文',
            'en' => 'English',
        ],
        'bound_roles_separator' => ', ',
    ],

    'print' => [
        'actions' => [
            'print' => 'Print',
            'back' => 'Back',
            'close' => 'Close',
        ],
        'labels' => [
            'print_time' => 'Printed at',
            'document_status' => 'Status',
            'watermark_voided' => 'Voided',
            'related_order' => 'Related document',
            'warehouse' => 'Warehouse',
            'from_warehouse' => 'From warehouse',
            'to_warehouse' => 'To warehouse',
            'stocktake_scope' => 'Stocktake scope',
            'book_quantity' => 'Book quantity',
            'actual_quantity' => 'Actual quantity',
            'difference_quantity' => 'Difference',
            'payment_method' => 'Payment method',
            'amount' => 'Amount',
            'transfer_quantity' => 'Transfer quantity',
            'return_quantity' => 'Return quantity',
            'inbound_quantity' => 'Inbound quantity',
            'outbound_quantity' => 'Outbound quantity',
            'stock_reason' => 'Business reason',
            'supplier' => 'Supplier',
            'customer' => 'Customer',
        ],
        'documents' => [
            'purchase_order' => 'Purchase Order',
            'purchase_receipt' => 'Purchase Receipt',
            'sales_order' => 'Sales Order',
            'sales_outbound' => 'Sales Outbound',
            'transfer_order' => 'Transfer Order',
            'stocktake_order' => 'Stocktake Order',
            'receipt_order' => 'Receipt Voucher',
            'payment_order' => 'Payment Voucher',
            'purchase_return' => 'Purchase Return',
            'sales_return' => 'Sales Return',
            'other_stock_in' => 'Other Stock In',
            'other_stock_out' => 'Other Stock Out',
        ],
        'signatures' => [
            'maker' => 'Prepared by',
            'reviewer' => 'Reviewed by',
            'supplier_confirm' => 'Supplier confirmation',
            'receiver_confirm' => 'Receiving confirmation',
            'receive' => 'Received by',
            'recheck' => 'Rechecked by',
            'customer_confirm' => 'Customer confirmation',
            'customer_sign' => 'Customer signature',
            'ship_confirm' => 'Shipment confirmation',
            'warehouse_ship' => 'Warehouse shipment',
            'outbound_warehouse' => 'Outbound warehouse',
            'inbound_warehouse' => 'Inbound warehouse',
            'stocktake_person' => 'Stocktake by',
            'warehouse_confirm' => 'Warehouse confirmation',
            'cashier' => 'Cashier',
            'payer' => 'Paid by',
            'warehouse_operator' => 'Warehouse operator',
            'warehouse_receive' => 'Warehouse receiving',
            'stock_in_handler' => 'Stock-in handler',
            'stock_out_handler' => 'Stock-out handler',
            'receiver' => 'Receiver',
        ],
    ],

    'feedback' => [
        'admin' => [
            'label' => 'Feedback',
            'title' => 'Report issues or share suggestions',
        ],
        'install' => [
            'hint' => 'Having trouble during installation? You can report issues and suggestions on the official feedback page.',
            'failure_hint' => 'If installation still fails after several attempts, please submit feedback with screenshots or server environment details.',
            'completion_hint' => 'Installation is complete. If you run into issues later, we welcome your feedback on the official page.',
            'submit' => 'Submit feedback',
            'submit_install_issue' => 'Report install issue',
            'header_link' => 'Feedback',
        ],
    ],

    'official_news' => [
        'topbar' => [
            'label' => 'Official news',
            'title' => 'View official announcements and maintenance notices',
            'heading' => 'Official news',
        ],
        'empty' => 'No official news right now',
        'pinned' => 'Pinned',
        'levels' => [
            'info' => 'Normal',
            'important' => 'Important',
            'critical' => 'Urgent',
        ],
        'actions' => [
            'mark_all_read' => 'Mark all as read',
            'view_detail' => 'View details',
            'dismiss' => 'Got it',
            'view_all' => 'View all (:count more)',
        ],
        'slide_over' => [
            'heading' => 'Official news',
        ],
    ],

    'entity_navigation' => [
        'actions' => [
            'open' => 'Open :label',
            'view_sales_orders' => 'View sales orders for :label',
            'view_purchase_orders' => 'View purchase orders for :label',
            'view_receivables' => 'View receivables for :label',
            'view_payables' => 'View payables for :label',
            'view_inventory' => 'View inventory for :label',
        ],
    ],
];
