contract_management/mysql.ddl.sql
yumoqing a72637b2a3 sync: local modifications to contract_management
- Updated core modules: __init__, ai_config, ai_core, attachment, contract, enhanced_contract
- Updated mysql.ddl.sql
- Updated UI files: contract_detail, contract_edit, contract_list
- Added new files: api/*.dspy, contract_list.dspy
2026-04-28 18:49:46 +08:00

152 lines
8.9 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Table from contract.json
CREATE TABLE IF NOT EXISTS `contract` (
`id` VARCHAR(32) NOT NULL COMMENT '合同ID主键',
`contract_number` VARCHAR(50) NOT NULL COMMENT '合同编号,唯一标识',
`title` VARCHAR(200) NOT NULL COMMENT '合同标题',
`party_a` VARCHAR(100) NOT NULL COMMENT '甲方(我方)',
`party_b` VARCHAR(100) NOT NULL COMMENT '乙方(对方)',
`contract_type` VARCHAR(32) NOT NULL COMMENT '合同类型引用appcodes表的id',
`status` VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '合同状态draft-草稿, active-生效, expired-过期, terminated-终止',
`amount` DECIMAL(15,2) COMMENT '合同金额',
`start_date` DATE NOT NULL COMMENT '合同开始日期',
`end_date` DATE NOT NULL COMMENT '合同结束日期',
`sign_date` DATE COMMENT '签署日期',
`owner_id` VARCHAR(32) NOT NULL COMMENT '合同负责人引用users表的id',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织引用organization表的id',
`ai_compliance_result` TEXT COMMENT 'AI合规检查结果',
`ai_key_dates` TEXT COMMENT 'AI提取的关键时点JSON数据',
`payment_terms` TEXT COMMENT '付款节点规则,如\'30%+50%+20%\'',
`credit_period` INT COMMENT '账期天数',
`penalty_clause` TEXT COMMENT '违约金相关条款',
`opportunity_id` VARCHAR(32) COMMENT '关联的商机ID',
`customer_id` VARCHAR(32) COMMENT '关联的客户ID',
`tax_rate` DECIMAL(5,4) DEFAULT '0.1300' COMMENT '税率默认13%',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同表';
CREATE UNIQUE INDEX `idx_contract_number` ON `contract` (`contract_number`);
CREATE INDEX `idx_contract_org` ON `contract` (`org_id`);
CREATE INDEX `idx_contract_status` ON `contract` (`status`);
-- Table from contract_ai_config.json
CREATE TABLE IF NOT EXISTS `contract_ai_config` (
`id` VARCHAR(32) NOT NULL COMMENT 'AI配置ID',
`ai_service_url` VARCHAR(500) NOT NULL COMMENT 'AI服务URL地址',
`api_key` VARCHAR(255) NOT NULL COMMENT 'API密钥',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI配置表';
CREATE UNIQUE INDEX `idx_ai_config_org` ON `contract_ai_config` (`org_id`);
-- Table from contract_attachment.json
CREATE TABLE IF NOT EXISTS `contract_attachment` (
`id` VARCHAR(32) NOT NULL COMMENT '附件ID主键',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID引用contract表的id',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '文件存储路径',
`file_size` INT NOT NULL COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) NOT NULL COMMENT '文件类型MIME类型',
`version` INT NOT NULL DEFAULT '1' COMMENT '文件版本号',
`description` VARCHAR(200) COMMENT '附件描述',
`uploaded_by` VARCHAR(32) NOT NULL COMMENT '上传人引用users表的id',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织',
`created_at` TIMESTAMP NOT NULL COMMENT '上传时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同附件表';
CREATE INDEX `idx_attachment_contract` ON `contract_attachment` (`contract_id`);
CREATE INDEX `idx_attachment_org` ON `contract_attachment` (`org_id`);
CREATE INDEX `idx_attachment_version` ON `contract_attachment` (`file_name`, `version`);
-- Table from contract_milestones.json
CREATE TABLE IF NOT EXISTS `contract_milestones` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`milestone_name` VARCHAR(100) NOT NULL COMMENT '里程碑名称,如\'\'、\'\'、\'\'',
`milestone_type` VARCHAR(20) NOT NULL COMMENT '里程碑类型payment=付款, delivery=交付, acceptance=验收',
`planned_date` DATE NOT NULL COMMENT '计划完成日期',
`actual_date` DATE COMMENT '实际完成日期',
`amount` DECIMAL(15,2) COMMENT '该里程碑关联的金额',
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态pending=待处理, completed=已完成, overdue=已逾期',
`description` TEXT COMMENT '里程碑详细描述',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`reminder_sent` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '逾期提醒是否已发送1=是, 0=否',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同里程碑管理表';
CREATE INDEX `idx_milestones_contract` ON `contract_milestones` (`contract_id`);
CREATE INDEX `idx_milestones_status` ON `contract_milestones` (`status`);
CREATE INDEX `idx_milestones_planned` ON `contract_milestones` (`planned_date`);
-- Table from contract_versions.json
CREATE TABLE IF NOT EXISTS `contract_versions` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`version_number` VARCHAR(20) NOT NULL COMMENT '版本号如v1.0, v1.1等',
`content` TEXT NOT NULL COMMENT '合同完整内容或差异内容',
`diff_content` TEXT COMMENT '与上一版本的差异内容HTML格式',
`modified_by` VARCHAR(32) NOT NULL COMMENT '修改人用户ID',
`modified_reason` TEXT COMMENT '版本修改原因',
`created_at` TIMESTAMP NOT NULL COMMENT '版本创建时间',
`is_current` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '是否为当前生效版本1=是, 0=否',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同版本管理表';
CREATE INDEX `idx_contract_versions_contract` ON `contract_versions` (`contract_id`);
CREATE UNIQUE INDEX `idx_contract_versions_version` ON `contract_versions` (`contract_id`, `version_number`);
CREATE INDEX `idx_contract_versions_current` ON `contract_versions` (`contract_id`, `is_current`);
-- Table from order_payments.json
CREATE TABLE IF NOT EXISTS `order_payments` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`order_id` VARCHAR(32) NOT NULL COMMENT '关联的订单ID',
`payment_amount` DECIMAL(15,2) NOT NULL COMMENT '本次付款金额',
`payment_date` DATE NOT NULL COMMENT '付款日期',
`payment_method` VARCHAR(50) COMMENT '付款方式',
`payment_reference` VARCHAR(100) COMMENT '付款凭证号或参考号',
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态pending=待确认, confirmed=已确认, rejected=已拒绝',
`notes` TEXT COMMENT '付款备注',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`confirmed_at` TIMESTAMP COMMENT '付款确认时间',
`confirmed_by` VARCHAR(32) COMMENT '付款确认人ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单付款记录表';
CREATE INDEX `idx_payments_order` ON `order_payments` (`order_id`);
CREATE INDEX `idx_payments_status` ON `order_payments` (`status`);
CREATE INDEX `idx_payments_date` ON `order_payments` (`payment_date`);
-- Table from orders.json
CREATE TABLE IF NOT EXISTS `orders` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`order_number` VARCHAR(50) NOT NULL COMMENT '订单编号,唯一标识',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`customer_id` VARCHAR(32) NOT NULL COMMENT '客户ID',
`order_type` VARCHAR(20) NOT NULL COMMENT '订单类型advance=预付款, progress=进度款, final=尾款, other=其他',
`delivery_batch` VARCHAR(100) COMMENT '交付批次,如\'Q3季度服务交付\'',
`acceptance_deadline` DATE COMMENT '验收截止日期',
`amount` DECIMAL(15,2) NOT NULL COMMENT '该订单的金额',
`paid_amount` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '已支付金额',
`tax_rate` DECIMAL(5,4) NOT NULL DEFAULT '0.1300' COMMENT '税率',
`credit_period` INT COMMENT '账期天数要求',
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态active=活跃, completed=完成, cancelled=取消',
`description` TEXT COMMENT '订单详细描述',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`owner_id` VARCHAR(32) NOT NULL COMMENT '订单负责人ID',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
CREATE UNIQUE INDEX `idx_orders_number` ON `orders` (`order_number`);
CREATE INDEX `idx_orders_contract` ON `orders` (`contract_id`);
CREATE INDEX `idx_orders_customer` ON `orders` (`customer_id`);
CREATE INDEX `idx_orders_status` ON `orders` (`status`);
CREATE INDEX `idx_orders_owner` ON `orders` (`owner_id`);