SET FOREIGN_KEY_CHECKS=0; CREATE TABLE `sys_role` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `role_code` VARCHAR(32) NOT NULL UNIQUE, `role_name` VARCHAR(64) NOT NULL, `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_permission` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `permission_code` VARCHAR(64) NOT NULL UNIQUE, `resource` VARCHAR(64) NOT NULL, `action` VARCHAR(32) NOT NULL, `data_scope` VARCHAR(32) NOT NULL, `field_policy` JSON NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_sys_permission_resource_action` (`resource`,`action`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_user_role` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `user_id` BIGINT UNSIGNED NOT NULL, `role_id` BIGINT UNSIGNED NOT NULL, `assigned_at` DATETIME NOT NULL, `expires_at` DATETIME NULL, UNIQUE KEY `uk_sys_user_role` (`user_id`,`role_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_role_permission` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `role_id` BIGINT UNSIGNED NOT NULL, `permission_id` BIGINT UNSIGNED NOT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_sys_role_permission` (`role_id`,`permission_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `episodes` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `episode_uuid` CHAR(36) NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `session_id` VARCHAR(64) NOT NULL, `start_message_no` INT NULL, `end_message_no` INT NULL, `portals_involved` JSON NOT NULL, `summary` TEXT NOT NULL, `extraction_status` VARCHAR(16) NOT NULL DEFAULT '待提取', `content_hash` CHAR(64) NULL UNIQUE, `retry_count` INT NOT NULL DEFAULT 0, `started_at` DATETIME NULL, `ended_at` DATETIME NULL, `handoff_to_employee_id` BIGINT UNSIGNED NULL, `start_at` DATETIME NULL, `end_at` DATETIME NULL, `promoted_to_ltm` TINYINT(1) NOT NULL DEFAULT 0, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `memory_unit` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `memory_uuid` CHAR(36) NOT NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `memory_key` VARCHAR(128) NOT NULL, `content` TEXT NOT NULL, `structured_value` JSON NULL, `memory_type` VARCHAR(24) NOT NULL, `source_type` VARCHAR(24) NOT NULL, `source_confidence` DECIMAL(5,4) NOT NULL, `confidence` DECIMAL(5,4) NOT NULL, `evidence_count` INT NOT NULL DEFAULT 0, `conflict_count` INT NOT NULL DEFAULT 0, `recall_count` INT NOT NULL DEFAULT 0, `status` VARCHAR(16) NOT NULL, `valid_from` DATETIME NOT NULL, `valid_until` DATETIME NULL, `last_evidenced_at` DATETIME NULL, `last_recall_at` DATETIME NULL, `promoted_at` DATETIME NULL, `version` BIGINT UNSIGNED NOT NULL DEFAULT 1, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_memory_unit_customer` (`customer_id`,`status`,`confidence`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `memory_evidence` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `memory_id` BIGINT UNSIGNED NOT NULL, `evidence_type` VARCHAR(24) NOT NULL, `source_table` VARCHAR(64) NULL, `source_record_id` VARCHAR(64) NULL, `source_episode_id` BIGINT UNSIGNED NULL, `evidence_excerpt` TEXT NULL, `evidence_snapshot` JSON NULL, `weight` DECIMAL(5,4) NOT NULL, `idempotency_key` VARCHAR(128) NOT NULL UNIQUE, `occurred_at` DATETIME NOT NULL, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `memory_conflict` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `left_memory_id` BIGINT UNSIGNED NOT NULL, `right_memory_id` BIGINT UNSIGNED NOT NULL, `conflict_type` VARCHAR(24) NOT NULL, `severity` VARCHAR(8) NOT NULL, `status` VARCHAR(16) NOT NULL, `resolution` TEXT NULL, `winner_memory_id` BIGINT UNSIGNED NULL, `resolved_by` BIGINT UNSIGNED NULL, `resolved_at` DATETIME NULL, `created_at` DATETIME NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `profile_snapshots` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `profile_uuid` CHAR(36) NULL UNIQUE, `customer_id` BIGINT UNSIGNED NOT NULL, `version` BIGINT UNSIGNED NOT NULL, `snapshot` JSON NOT NULL, `generation_basis` JSON NULL, `snapshot_hash` CHAR(64) NULL, `is_current` TINYINT(1) NOT NULL DEFAULT 0, `current_customer_id` BIGINT UNSIGNED NULL, `generated_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_profile_snapshot_version` (`customer_id`,`version`), UNIQUE KEY `uk_profile_snapshot_current` (`current_customer_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `memory_sync_outbox` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `event_uuid` CHAR(36) NOT NULL, `aggregate_type` VARCHAR(24) NOT NULL, `aggregate_uuid` CHAR(36) NOT NULL, `aggregate_version` BIGINT UNSIGNED NOT NULL, `target_store` VARCHAR(16) NOT NULL, `operation` VARCHAR(16) NOT NULL, `payload` JSON NOT NULL, `status` VARCHAR(16) NOT NULL, `retry_count` INT NOT NULL DEFAULT 0, `next_retry_at` DATETIME NULL, `last_error` TEXT NULL, `created_at` DATETIME NOT NULL, `processed_at` DATETIME NULL, UNIQUE KEY `uk_memory_sync_event` (`event_uuid`,`target_store`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `interaction_audit` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `actor_type` VARCHAR(16) NOT NULL, `actor_id` BIGINT UNSIGNED NULL, `target_customer_id` BIGINT UNSIGNED NULL, `session_id` VARCHAR(64) NULL, `portal` VARCHAR(32) NULL, `action_type` VARCHAR(64) NOT NULL, `detail` JSON NOT NULL, `created_at` DATETIME NOT NULL, KEY `idx_audit_actor` (`actor_type`,`actor_id`,`created_at`), KEY `idx_audit_customer` (`target_customer_id`,`created_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `client_facing_content` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `content_type` VARCHAR(32) NOT NULL, `draft_content` JSON NOT NULL, `generated_by_portal` VARCHAR(32) NOT NULL, `review_status` VARCHAR(16) NOT NULL, `reviewer_user_id` BIGINT UNSIGNED NULL, `reviewed_at` DATETIME NULL, `published_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_content_customer_status` (`customer_id`,`review_status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `conversation_message` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `session_id` VARCHAR(64) NOT NULL, `message_no` INT NULL, `customer_id` BIGINT UNSIGNED NULL, `portal` VARCHAR(32) NOT NULL, `role` VARCHAR(16) NOT NULL, `content` MEDIUMTEXT NOT NULL, `tool_calls` JSON NULL, `trace_id` VARCHAR(64) NULL, `intent` VARCHAR(32) NULL, `confidence` DECIMAL(5,4) NULL, `source_references` JSON NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_message_session_no` (`session_id`,`message_no`), KEY `idx_message_customer_created` (`customer_id`,`created_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_knowledge_meta` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `knowledge_type` VARCHAR(32) NOT NULL, `title` VARCHAR(256) NOT NULL, `source_file` VARCHAR(256) NULL, `minio_path` VARCHAR(512) NULL, `milvus_collection` VARCHAR(64) NOT NULL, `version` VARCHAR(16) NULL, `effective_date` DATE NULL, `expire_date` DATE NULL, `content_text` MEDIUMTEXT NOT NULL, `tags` JSON NULL, `reviewer_id` BIGINT UNSIGNED NULL, `review_status` VARCHAR(16) NOT NULL DEFAULT 'pending', `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, KEY `idx_knowledge_status` (`status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_user` ( `id` BIGINT UNSIGNED PRIMARY KEY, `user_no` VARCHAR(32) NOT NULL, `username` VARCHAR(64) NOT NULL, `email` VARCHAR(128) NULL, `password_hash` VARCHAR(255) NOT NULL, `user_type` VARCHAR(16) NOT NULL, `employee_role` VARCHAR(32) NULL, `customer_tier` VARCHAR(16) NULL, `investor_type` VARCHAR(8) NULL, `investor_type_assessed_at` DATETIME NULL, `is_professional_investor` TINYINT(1) NOT NULL DEFAULT 0, `professional_investor_status` VARCHAR(16) NOT NULL, `professional_investor_certified_at` DATETIME NULL, `fund_account_status` VARCHAR(16) NOT NULL, `fund_account_opened_at` DATETIME NULL, `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_sys_user_user_no` (`user_no`), UNIQUE KEY `uk_sys_user_username` (`username`), UNIQUE KEY `uk_sys_user_email` (`email`), KEY `idx_sys_user_user_type` (`user_type`), KEY `idx_sys_user_employee_role` (`employee_role`), KEY `idx_sys_user_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_customer_assignment` ( `id` BIGINT UNSIGNED PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `employee_id` BIGINT UNSIGNED NOT NULL, `employee_role` VARCHAR(32) NOT NULL, `assigned_at` DATETIME NOT NULL, `unassigned_at` DATETIME NULL, UNIQUE KEY `uk_sys_customer_assignment_customer_id` (`customer_id`), UNIQUE KEY `uk_sys_customer_assignment_employee_role` (`employee_role`), KEY `idx_sys_customer_assignment_customer_id` (`customer_id`), KEY `idx_sys_customer_assignment_employee_id` (`employee_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_customer_profile` ( `customer_id` BIGINT UNSIGNED NOT NULL PRIMARY KEY, `trade_account` VARCHAR(32) NOT NULL, `real_name` VARCHAR(64) NOT NULL, `birth_date` DATE NULL, `occupation` VARCHAR(64) NULL, `mobile_masked` VARCHAR(32) NULL, `investor_type` VARCHAR(8) NOT NULL, `investment_horizon` VARCHAR(32) NULL, `preferred_asset_class` JSON NULL, `trading_frequency` VARCHAR(32) NULL, `last_active_at` DATETIME NULL, `total_asset` DECIMAL(18,2) NOT NULL, `behavior_score` INT NOT NULL, `risk_tags` JSON NULL, `opened_at` DATETIME NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_customer_profile_trade_account` (`trade_account`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_risk_assessment` ( `id` BIGINT UNSIGNED PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `questionnaire_version` VARCHAR(32) NOT NULL, `answers` JSON NOT NULL, `total_score` INT NOT NULL, `investor_type` VARCHAR(8) NOT NULL, `assessed_at` DATETIME NOT NULL, `valid_until` DATETIME NOT NULL, `created_at` DATETIME NOT NULL, KEY `idx_fin_risk_assessment_customer_id` (`customer_id`), KEY `idx_fin_risk_assessment_questionnaire_version` (`questionnaire_version`), KEY `idx_fin_risk_assessment_valid_until` (`valid_until`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_facts` ( `id` BIGINT UNSIGNED PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `fact_key` VARCHAR(128) NOT NULL, `fact_value` JSON NOT NULL, `source_portal` VARCHAR(16) NOT NULL, `source_episode_id` BIGINT UNSIGNED NULL, `confidence` FLOAT NOT NULL DEFAULT 1.0, `is_critical` TINYINT(1) NOT NULL DEFAULT 0, `created_at` DATETIME NOT NULL, KEY `idx_user_facts_customer_id` (`customer_id`), KEY `idx_user_facts_fact_key` (`fact_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_product` ( `id` BIGINT UNSIGNED PRIMARY KEY, `product_code` VARCHAR(32) NOT NULL, `product_name` VARCHAR(128) NOT NULL, `exchange_code` VARCHAR(16) NOT NULL, `product_category` VARCHAR(32) NOT NULL, `risk_level` VARCHAR(8) NOT NULL, `fund_manager` VARCHAR(64) NULL, `currency` VARCHAR(8) NOT NULL DEFAULT 'CNY', `lot_size` DECIMAL(18,4) NOT NULL, `price_tick` DECIMAL(18,6) NOT NULL, `current_nav` DECIMAL(18,6) NULL, `current_nav_at` DATETIME NULL, `min_amount` DECIMAL(18,2) NOT NULL DEFAULT 0, `open_start_at` DATETIME NULL, `open_end_at` DATETIME NULL, `open_period_start` DATE NULL, `open_period_end` DATE NULL, `transaction_fee_rate` DECIMAL(10,6) NULL, `single_investor_max_holding_ratio` DECIMAL(7,4) NOT NULL DEFAULT 100, `management_fee_rate` DECIMAL(7,4) NULL, `custodian_fee_rate` DECIMAL(7,4) NULL, `risk_disclosure_required` TINYINT(1) NOT NULL DEFAULT 0, `second_confirmation_required` TINYINT(1) NOT NULL DEFAULT 0, `recording_required` TINYINT(1) NOT NULL DEFAULT 0, `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_product_product_code` (`product_code`), KEY `idx_fin_product_exchange_code` (`exchange_code`), KEY `idx_fin_product_product_category` (`product_category`), KEY `idx_fin_product_risk_level` (`risk_level`), KEY `idx_fin_product_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_market_price` ( `id` BIGINT UNSIGNED PRIMARY KEY, `product_id` BIGINT UNSIGNED NOT NULL, `trade_date` DATE NOT NULL, `open_price` DECIMAL(18,6) NOT NULL, `high_price` DECIMAL(18,6) NOT NULL, `low_price` DECIMAL(18,6) NOT NULL, `close_price` DECIMAL(18,6) NOT NULL, `volume` DECIMAL(24,4) NULL, `turnover_amount` DECIMAL(24,2) NULL, `total_fund_shares` DECIMAL(24,4) NOT NULL, `source` VARCHAR(32) NOT NULL, `source_updated_at` DATETIME NOT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_market_price_product_id` (`product_id`), UNIQUE KEY `uk_fin_market_price_trade_date` (`trade_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_nav_history` ( `id` BIGINT UNSIGNED PRIMARY KEY, `product_id` BIGINT UNSIGNED NOT NULL, `nav_date` DATE NOT NULL, `nav` DECIMAL(12,6) NOT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_nav_history_product_id` (`product_id`), UNIQUE KEY `uk_fin_nav_history_nav_date` (`nav_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_sim_account` ( `id` BIGINT UNSIGNED PRIMARY KEY, `account_no` VARCHAR(32) NOT NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `currency` VARCHAR(8) NOT NULL DEFAULT 'CNY', `cash_balance` DECIMAL(18,2) NOT NULL, `available_cash` DECIMAL(18,2) NOT NULL, `frozen_cash` DECIMAL(18,2) NOT NULL DEFAULT 0, `initial_balance` DECIMAL(18,2) NOT NULL, `status` VARCHAR(16) NOT NULL, `version` BIGINT UNSIGNED NOT NULL DEFAULT 0, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_sim_account_account_no` (`account_no`), UNIQUE KEY `uk_fin_sim_account_customer_id` (`customer_id`), KEY `idx_fin_sim_account_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_cash_ledger` ( `id` BIGINT UNSIGNED PRIMARY KEY, `ledger_no` VARCHAR(64) NOT NULL, `account_id` BIGINT UNSIGNED NOT NULL, `transaction_id` BIGINT UNSIGNED NULL, `entry_type` VARCHAR(24) NOT NULL, `amount` DECIMAL(18,2) NOT NULL, `balance_after` DECIMAL(18,2) NOT NULL, `available_cash_after` DECIMAL(18,2) NOT NULL, `frozen_cash_after` DECIMAL(18,2) NOT NULL, `idempotency_key` VARCHAR(128) NOT NULL, `occurred_at` DATETIME NOT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_cash_ledger_ledger_no` (`ledger_no`), UNIQUE KEY `uk_fin_cash_ledger_idempotency_key` (`idempotency_key`), KEY `idx_fin_cash_ledger_account_id` (`account_id`), KEY `idx_fin_cash_ledger_transaction_id` (`transaction_id`), KEY `idx_fin_cash_ledger_occurred_at` (`occurred_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_capital_flow` ( `id` BIGINT UNSIGNED PRIMARY KEY, `flow_no` VARCHAR(64) NOT NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `account_id` BIGINT UNSIGNED NULL, `transaction_id` BIGINT UNSIGNED NULL, `flow_type` VARCHAR(16) NOT NULL, `amount` DECIMAL(18,2) NOT NULL, `balance_after` DECIMAL(18,2) NULL, `status` VARCHAR(16) NOT NULL, `settled_at` DATETIME NULL, `occurred_at` DATETIME NULL, `payer_name` VARCHAR(64) NULL, `source_type` VARCHAR(16) NOT NULL, `related_work_order_id` BIGINT UNSIGNED NULL, `match_status` VARCHAR(16) NOT NULL DEFAULT '不适用', `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_capital_flow_flow_no` (`flow_no`), KEY `idx_fin_capital_flow_customer_id` (`customer_id`), KEY `idx_fin_capital_flow_account_id` (`account_id`), KEY `idx_fin_capital_flow_transaction_id` (`transaction_id`), KEY `idx_fin_capital_flow_status` (`status`), KEY `idx_fin_capital_flow_settled_at` (`settled_at`), KEY `idx_fin_capital_flow_occurred_at` (`occurred_at`), KEY `idx_fin_capital_flow_related_work_order_id` (`related_work_order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_fee_rule` ( `id` BIGINT UNSIGNED PRIMARY KEY, `rule_code` VARCHAR(64) NOT NULL, `product_id` BIGINT UNSIGNED NULL, `exchange_code` VARCHAR(16) NULL, `order_side` VARCHAR(8) NOT NULL, `customer_tier` VARCHAR(16) NULL, `min_trade_amount` DECIMAL(18,2) NULL, `max_trade_amount` DECIMAL(18,2) NULL, `fee_rate` DECIMAL(10,6) NOT NULL, `minimum_fee` DECIMAL(18,2) NOT NULL DEFAULT 0, `fixed_fee` DECIMAL(18,2) NOT NULL DEFAULT 0, `priority` INT NOT NULL DEFAULT 0, `effective_from` DATETIME NOT NULL, `effective_until` DATETIME NULL, `status` VARCHAR(16) NOT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_fee_rule_rule_code` (`rule_code`), KEY `idx_fin_fee_rule_product_id` (`product_id`), KEY `idx_fin_fee_rule_exchange_code` (`exchange_code`), KEY `idx_fin_fee_rule_customer_tier` (`customer_tier`), KEY `idx_fin_fee_rule_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_sim_order` ( `id` BIGINT UNSIGNED PRIMARY KEY, `order_no` VARCHAR(64) NOT NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `account_id` BIGINT UNSIGNED NOT NULL, `product_id` BIGINT UNSIGNED NOT NULL, `order_side` VARCHAR(8) NOT NULL, `price_type` VARCHAR(8) NOT NULL, `quantity` DECIMAL(18,4) NOT NULL, `limit_price` DECIMAL(18,6) NULL, `quote_price` DECIMAL(18,6) NOT NULL, `quote_at` DATETIME NOT NULL, `quote_source` VARCHAR(32) NOT NULL, `channel` VARCHAR(32) NULL, `advisor_id` BIGINT UNSIGNED NULL, `filled_quantity` DECIMAL(18,4) NOT NULL DEFAULT 0, `average_executed_price` DECIMAL(18,6) NULL, `status` VARCHAR(24) NOT NULL, `risk_rule_hits` JSON NULL, `risk_disclosure_ack_at` DATETIME NULL, `second_confirmation_at` DATETIME NULL, `recording_reference` VARCHAR(64) NULL, `ops_handler_id` BIGINT UNSIGNED NULL, `ops_handled_at` DATETIME NULL, `compliance_handler_id` BIGINT UNSIGNED NULL, `compliance_handled_at` DATETIME NULL, `reject_reason` TEXT NULL, `submitted_at` DATETIME NOT NULL, `cancelled_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_sim_order_order_no` (`order_no`), KEY `idx_fin_sim_order_customer_id` (`customer_id`), KEY `idx_fin_sim_order_account_id` (`account_id`), KEY `idx_fin_sim_order_product_id` (`product_id`), KEY `idx_fin_sim_order_advisor_id` (`advisor_id`), KEY `idx_fin_sim_order_status` (`status`), KEY `idx_fin_sim_order_submitted_at` (`submitted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_transaction` ( `id` BIGINT UNSIGNED PRIMARY KEY, `transaction_no` VARCHAR(64) NOT NULL, `order_id` BIGINT UNSIGNED NOT NULL, `work_order_id` BIGINT UNSIGNED NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `account_id` BIGINT UNSIGNED NOT NULL, `product_id` BIGINT UNSIGNED NOT NULL, `order_side` VARCHAR(8) NOT NULL, `transaction_type` VARCHAR(16) NOT NULL, `executed_price` DECIMAL(18,6) NOT NULL, `nav` DECIMAL(12,6) NOT NULL, `executed_quantity` DECIMAL(18,4) NOT NULL, `shares` DECIMAL(18,4) NOT NULL, `gross_amount` DECIMAL(18,2) NOT NULL, `amount` DECIMAL(18,2) NOT NULL, `fee_rule_id` BIGINT UNSIGNED NULL, `fee_rate_snapshot` DECIMAL(10,6) NOT NULL, `fee_amount` DECIMAL(18,2) NOT NULL, `fee` DECIMAL(18,2) NULL, `net_amount` DECIMAL(18,2) NOT NULL, `quote_at` DATETIME NOT NULL, `quote_source` VARCHAR(32) NOT NULL, `executed_at` DATETIME NOT NULL, `confirmed_at` DATETIME NOT NULL, `confirmed_by` INT NULL, `auto_confirmed` TINYINT(1) NOT NULL DEFAULT 0, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_transaction_transaction_no` (`transaction_no`), UNIQUE KEY `uk_fin_transaction_work_order_id` (`work_order_id`), KEY `idx_fin_transaction_order_id` (`order_id`), KEY `idx_fin_transaction_customer_id` (`customer_id`), KEY `idx_fin_transaction_account_id` (`account_id`), KEY `idx_fin_transaction_product_id` (`product_id`), KEY `idx_fin_transaction_transaction_type` (`transaction_type`), KEY `idx_fin_transaction_fee_rule_id` (`fee_rule_id`), KEY `idx_fin_transaction_executed_at` (`executed_at`), KEY `idx_fin_transaction_confirmed_at` (`confirmed_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_holding` ( `id` BIGINT UNSIGNED PRIMARY KEY, `customer_id` BIGINT UNSIGNED NOT NULL, `trade_account` VARCHAR(32) NOT NULL, `product_id` BIGINT UNSIGNED NOT NULL, `total_quantity` DECIMAL(18,4) NOT NULL, `shares` DECIMAL(18,4) NOT NULL, `available_quantity` DECIMAL(18,4) NOT NULL, `frozen_quantity` DECIMAL(18,4) NOT NULL DEFAULT 0, `average_cost` DECIMAL(18,6) NOT NULL, `cost_amount` DECIMAL(18,2) NOT NULL, `market_value` DECIMAL(18,2) NULL, `current_value` DECIMAL(18,2) NOT NULL, `profit_loss` DECIMAL(18,2) NULL, `profit_loss_ratio` DECIMAL(10,4) NULL, `status` VARCHAR(16) NOT NULL, `first_acquired_at` DATETIME NULL, `version` BIGINT UNSIGNED NOT NULL DEFAULT 0, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_holding_customer_id` (`customer_id`), UNIQUE KEY `uk_fin_holding_product_id` (`product_id`), KEY `idx_fin_holding_trade_account` (`trade_account`), KEY `idx_fin_holding_status` (`status`), KEY `idx_fin_holding_first_acquired_at` (`first_acquired_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `sys_login_record` ( `id` BIGINT UNSIGNED PRIMARY KEY, `user_id` BIGINT UNSIGNED NOT NULL, `login_at` DATETIME NOT NULL, `login_result` VARCHAR(16) NOT NULL, `ip_region` VARCHAR(64) NULL, `device_id` VARCHAR(128) NULL, `is_common_device` TINYINT(1) NOT NULL DEFAULT 1, `failure_reason` VARCHAR(128) NULL, `created_at` DATETIME NOT NULL, KEY `idx_sys_login_record_user_id` (`user_id`), KEY `idx_sys_login_record_login_at` (`login_at`), KEY `idx_sys_login_record_login_result` (`login_result`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `biz_work_order` ( `id` BIGINT UNSIGNED PRIMARY KEY, `work_order_no` VARCHAR(64) NOT NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `order_type` VARCHAR(16) NULL, `product_id` BIGINT UNSIGNED NULL, `amount` DECIMAL(18,2) NULL, `channel` VARCHAR(32) NULL, `advisor_id` BIGINT UNSIGNED NULL, `risk_rule_hits` JSON NULL, `risk_disclosure_ack_at` DATETIME NULL, `second_confirmation_at` DATETIME NULL, `recording_reference` VARCHAR(64) NULL, `ops_handler_id` BIGINT UNSIGNED NULL, `ops_handled_at` DATETIME NULL, `compliance_handler_id` BIGINT UNSIGNED NULL, `compliance_handled_at` DATETIME NULL, `reject_reason` TEXT NULL, `alert_id` BIGINT UNSIGNED NULL, `work_order_type` VARCHAR(32) NULL, `submitter_id` BIGINT UNSIGNED NULL, `handler_id` BIGINT UNSIGNED NULL, `priority` VARCHAR(8) NULL, `status` VARCHAR(24) NOT NULL DEFAULT '待风控扫描', `request_detail` JSON NULL, `handle_result` JSON NULL, `submitted_at` DATETIME NULL, `accepted_at` DATETIME NULL, `completed_at` DATETIME NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_biz_work_order_work_order_no` (`work_order_no`), KEY `idx_biz_work_order_customer_id` (`customer_id`), KEY `idx_biz_work_order_product_id` (`product_id`), KEY `idx_biz_work_order_advisor_id` (`advisor_id`), KEY `idx_biz_work_order_alert_id` (`alert_id`), KEY `idx_biz_work_order_work_order_type` (`work_order_type`), KEY `idx_biz_work_order_submitter_id` (`submitter_id`), KEY `idx_biz_work_order_handler_id` (`handler_id`), KEY `idx_biz_work_order_priority` (`priority`), KEY `idx_biz_work_order_status` (`status`), KEY `idx_biz_work_order_submitted_at` (`submitted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_risk_alert` ( `id` BIGINT UNSIGNED PRIMARY KEY, `alert_no` VARCHAR(64) NOT NULL, `customer_id` BIGINT UNSIGNED NOT NULL, `related_transaction_id` BIGINT UNSIGNED NULL, `related_order_id` BIGINT UNSIGNED NULL, `related_work_order_id` BIGINT UNSIGNED NULL, `primary_risk_work_order_id` BIGINT UNSIGNED NULL, `alert_type` VARCHAR(64) NOT NULL, `alert_level` VARCHAR(8) NOT NULL, `trigger_rule_codes` JSON NOT NULL, `evidence_summary` TEXT NOT NULL, `evidence_snapshot` JSON NOT NULL, `priority_score` INT NOT NULL, `event_status` VARCHAR(16) NOT NULL, `status` VARCHAR(16) NOT NULL, `ack_status` VARCHAR(16) NOT NULL, `ack_at` DATETIME NULL, `handler_id` BIGINT UNSIGNED NULL, `due_at` DATETIME NULL, `is_escalated` TINYINT(1) NOT NULL DEFAULT 0, `escalated_at` DATETIME NULL, `escalation_reason` TEXT NULL, `handle_result` TEXT NULL, `closed_at` DATETIME NULL, `close_reason` TEXT NULL, `ai_analysis` JSON NULL, `manual_remark` TEXT NULL, `created_at` DATETIME NOT NULL, `updated_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_risk_alert_alert_no` (`alert_no`), KEY `idx_fin_risk_alert_customer_id` (`customer_id`), KEY `idx_fin_risk_alert_related_transaction_id` (`related_transaction_id`), KEY `idx_fin_risk_alert_related_order_id` (`related_order_id`), KEY `idx_fin_risk_alert_related_work_order_id` (`related_work_order_id`), KEY `idx_fin_risk_alert_primary_risk_work_order_id` (`primary_risk_work_order_id`), KEY `idx_fin_risk_alert_alert_type` (`alert_type`), KEY `idx_fin_risk_alert_alert_level` (`alert_level`), KEY `idx_fin_risk_alert_priority_score` (`priority_score`), KEY `idx_fin_risk_alert_status` (`status`), KEY `idx_fin_risk_alert_handler_id` (`handler_id`), KEY `idx_fin_risk_alert_due_at` (`due_at`), KEY `idx_fin_risk_alert_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `fin_risk_notification` ( `id` BIGINT UNSIGNED PRIMARY KEY, `notification_no` VARCHAR(64) NOT NULL, `alert_id` BIGINT UNSIGNED NOT NULL, `channel` VARCHAR(16) NOT NULL, `receiver_user_id` BIGINT UNSIGNED NULL, `receiver_email` VARCHAR(128) NULL, `title` VARCHAR(128) NOT NULL, `content` TEXT NOT NULL, `send_status` VARCHAR(16) NOT NULL, `sent_at` DATETIME NULL, `read_at` DATETIME NULL, `acknowledged_at` DATETIME NULL, `fail_reason` TEXT NULL, `created_at` DATETIME NOT NULL, UNIQUE KEY `uk_fin_risk_notification_notification_no` (`notification_no`), KEY `idx_fin_risk_notification_alert_id` (`alert_id`), KEY `idx_fin_risk_notification_channel` (`channel`), KEY `idx_fin_risk_notification_receiver_user_id` (`receiver_user_id`), KEY `idx_fin_risk_notification_send_status` (`send_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE agent_negative_word ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, rule_code VARCHAR(64) NOT NULL, word_pattern VARCHAR(256) NOT NULL, match_type VARCHAR(16) NOT NULL DEFAULT 'contains', category VARCHAR(32) NOT NULL, severity VARCHAR(16) NOT NULL DEFAULT 'block', applicable_agents JSON NULL, safe_reply_template_code VARCHAR(64) NULL, status VARCHAR(16) NOT NULL DEFAULT 'draft', version INT UNSIGNED NOT NULL DEFAULT 1, created_by BIGINT UNSIGNED NOT NULL, reviewer_id BIGINT UNSIGNED NULL, reviewed_at DATETIME(6) NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_negative_rule_code (rule_code), KEY idx_negative_status_category (status, category), KEY idx_negative_reviewer (reviewer_id), CONSTRAINT fk_negative_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id), CONSTRAINT fk_negative_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id), CONSTRAINT chk_negative_match_type CHECK (match_type IN ('exact', 'contains', 'regex')), CONSTRAINT chk_negative_severity CHECK (severity IN ('warn', 'regenerate', 'block')), CONSTRAINT chk_negative_status CHECK (status IN ('draft', 'active', 'disabled', 'archived')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Agent禁止表达配置'; CREATE TABLE svc_handover_ticket ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, ticket_no VARCHAR(32) NOT NULL, session_id VARCHAR(64) NOT NULL, customer_id BIGINT UNSIGNED NULL, source_agent VARCHAR(32) NOT NULL DEFAULT 'customer_service', source_message_id BIGINT UNSIGNED NULL, intent VARCHAR(32) NULL, confidence DECIMAL(5,4) NULL, priority VARCHAR(8) NOT NULL DEFAULT 'P1', reason_code VARCHAR(64) NOT NULL, reason_detail VARCHAR(500) NULL, conversation_summary MEDIUMTEXT NULL, source_references JSON NULL, status VARCHAR(16) NOT NULL DEFAULT 'pending', assigned_to BIGINT UNSIGNED NULL, assigned_at DATETIME(6) NULL, accepted_at DATETIME(6) NULL, resolved_at DATETIME(6) NULL, closed_at DATETIME(6) NULL, resolution TEXT NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_handoff_ticket_no (ticket_no), KEY idx_handoff_session (session_id, created_at), KEY idx_handoff_customer (customer_id, created_at), KEY idx_handoff_queue (status, priority, created_at), KEY idx_handoff_assignee (assigned_to, status), CONSTRAINT fk_handoff_customer FOREIGN KEY (customer_id) REFERENCES sys_user(id), CONSTRAINT fk_handoff_source_message FOREIGN KEY (source_message_id) REFERENCES conversation_message(id), CONSTRAINT fk_handoff_assignee FOREIGN KEY (assigned_to) REFERENCES sys_user(id), CONSTRAINT chk_handoff_confidence CHECK (confidence IS NULL OR confidence BETWEEN 0 AND 1), CONSTRAINT chk_handoff_priority CHECK (priority IN ('P0', 'P1', 'P2')), CONSTRAINT chk_handoff_status CHECK (status IN ('pending', 'assigned', 'processing', 'resolved', 'closed', 'cancelled')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客服转人工工单'; CREATE TABLE agent_faq_synonym ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, knowledge_id BIGINT UNSIGNED NOT NULL, phrase VARCHAR(500) NOT NULL, normalized_phrase VARCHAR(500) NOT NULL, phrase_hash CHAR(64) NOT NULL, language_code VARCHAR(16) NOT NULL DEFAULT 'zh-CN', source_type VARCHAR(24) NOT NULL DEFAULT 'manual', hit_count BIGINT UNSIGNED NOT NULL DEFAULT 0, status VARCHAR(16) NOT NULL DEFAULT 'pending', created_by BIGINT UNSIGNED NOT NULL, reviewer_id BIGINT UNSIGNED NULL, reviewed_at DATETIME(6) NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_faq_synonym (knowledge_id, phrase_hash), KEY idx_faq_synonym_status (status), KEY idx_faq_synonym_normalized (normalized_phrase(191)), CONSTRAINT fk_synonym_knowledge FOREIGN KEY (knowledge_id) REFERENCES fin_knowledge_meta(id), CONSTRAINT fk_synonym_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id), CONSTRAINT fk_synonym_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id), CONSTRAINT chk_synonym_source CHECK (source_type IN ('manual', 'conversation', 'ticket', 'import')), CONSTRAINT chk_synonym_status CHECK (status IN ('pending', 'approved', 'disabled', 'archived')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='FAQ同义问法'; CREATE TABLE conversation_feedback ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, feedback_no VARCHAR(32) NOT NULL, session_id VARCHAR(64) NOT NULL, message_id BIGINT UNSIGNED NOT NULL, customer_id BIGINT UNSIGNED NULL, rating TINYINT NOT NULL, feedback_type VARCHAR(32) NULL, feedback_content VARCHAR(1000) NULL, status VARCHAR(16) NOT NULL DEFAULT 'open', handler_id BIGINT UNSIGNED NULL, handled_at DATETIME(6) NULL, handling_note VARCHAR(1000) NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_feedback_no (feedback_no), UNIQUE KEY uk_feedback_message_customer (message_id, customer_id), KEY idx_feedback_session (session_id, created_at), KEY idx_feedback_status_type (status, feedback_type), CONSTRAINT fk_feedback_message FOREIGN KEY (message_id) REFERENCES conversation_message(id), CONSTRAINT fk_feedback_customer FOREIGN KEY (customer_id) REFERENCES sys_user(id), CONSTRAINT fk_feedback_handler FOREIGN KEY (handler_id) REFERENCES sys_user(id), CONSTRAINT chk_feedback_rating CHECK (rating IN (-1, 1)), CONSTRAINT chk_feedback_status CHECK (status IN ('open', 'reviewed', 'resolved', 'ignored')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='对话回复反馈'; CREATE TABLE agent_reply_template ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, template_code VARCHAR(64) NOT NULL, scene VARCHAR(32) NOT NULL, title VARCHAR(128) NOT NULL, content_text MEDIUMTEXT NOT NULL, variables JSON NULL, locale VARCHAR(16) NOT NULL DEFAULT 'zh-CN', version INT UNSIGNED NOT NULL DEFAULT 1, status VARCHAR(16) NOT NULL DEFAULT 'draft', active_key VARCHAR(128) GENERATED ALWAYS AS (IF(status = 'active', CONCAT(template_code, ':', locale), NULL)) STORED, effective_at DATETIME(6) NULL, expire_at DATETIME(6) NULL, created_by BIGINT UNSIGNED NOT NULL, reviewer_id BIGINT UNSIGNED NULL, reviewed_at DATETIME(6) NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_reply_template_version (template_code, version), UNIQUE KEY uk_reply_template_active_one (active_key), KEY idx_reply_template_active (scene, status, effective_at, expire_at), CONSTRAINT fk_template_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id), CONSTRAINT fk_template_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id), CONSTRAINT chk_template_scene CHECK (scene IN ('disclaimer', 'low_confidence', 'compliance_block', 'transfer', 'model_failure', 'system_busy', 'clarification')), CONSTRAINT chk_template_status CHECK (status IN ('draft', 'approved', 'active', 'archived')), CONSTRAINT chk_template_window CHECK (expire_at IS NULL OR effective_at IS NULL OR expire_at > effective_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Agent回复模板'; CREATE TABLE agent_intent_config ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, agent_type VARCHAR(32) NOT NULL, intent_code VARCHAR(64) NOT NULL, intent_name VARCHAR(128) NOT NULL, description VARCHAR(500) NULL, examples JSON NOT NULL, classifier_instruction TEXT NULL, confidence_threshold DECIMAL(5,4) NOT NULL DEFAULT 0.6000, max_clarification_rounds TINYINT UNSIGNED NOT NULL DEFAULT 2, transfer_on_failure TINYINT(1) NOT NULL DEFAULT 1, collection_routes JSON NULL, allowed_tools JSON NULL, priority INT NOT NULL DEFAULT 100, version INT UNSIGNED NOT NULL DEFAULT 1, status VARCHAR(16) NOT NULL DEFAULT 'draft', active_key VARCHAR(128) GENERATED ALWAYS AS (IF(status = 'active', CONCAT(agent_type, ':', intent_code), NULL)) STORED, effective_at DATETIME(6) NULL, expire_at DATETIME(6) NULL, created_by BIGINT UNSIGNED NOT NULL, reviewer_id BIGINT UNSIGNED NULL, reviewed_at DATETIME(6) NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), PRIMARY KEY (id), UNIQUE KEY uk_intent_config_version (agent_type, intent_code, version), UNIQUE KEY uk_intent_config_active_one (active_key), KEY idx_intent_config_active (agent_type, status, priority), CONSTRAINT fk_intent_created_by FOREIGN KEY (created_by) REFERENCES sys_user(id), CONSTRAINT fk_intent_reviewer FOREIGN KEY (reviewer_id) REFERENCES sys_user(id), CONSTRAINT chk_intent_confidence CHECK (confidence_threshold BETWEEN 0 AND 1), CONSTRAINT chk_intent_status CHECK (status IN ('draft', 'approved', 'active', 'archived')), CONSTRAINT chk_intent_window CHECK (expire_at IS NULL OR effective_at IS NULL OR expire_at > effective_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Agent意图路由配置'; SET FOREIGN_KEY_CHECKS=1;