-- ============================================================================ -- LeAudit Platform — 补充评查点规则组、规则点、文档类型、入口模块表 -- + 全部表中文注释补充 -- 数据库: leaudit_platform @ nas.7bm.co:54302 -- ============================================================================ BEGIN; -- ============================================================================ -- 1. 新表:入口模块 (leaudit_entry_modules) -- ============================================================================ CREATE TABLE IF NOT EXISTS leaudit_entry_modules ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, description TEXT, path VARCHAR(255), icon_path VARCHAR(255), areas JSONB, sort_order INTEGER NOT NULL DEFAULT 0, is_enabled BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); COMMENT ON TABLE leaudit_entry_modules IS '入口模块表 — 定义前端导航入口菜单及其区域配置'; COMMENT ON COLUMN leaudit_entry_modules.id IS '主键,自增'; COMMENT ON COLUMN leaudit_entry_modules.name IS '入口模块名称,唯一且非空'; COMMENT ON COLUMN leaudit_entry_modules.description IS '模块描述'; COMMENT ON COLUMN leaudit_entry_modules.path IS '前端路由路径'; COMMENT ON COLUMN leaudit_entry_modules.icon_path IS '入口菜单图标OSS路径'; COMMENT ON COLUMN leaudit_entry_modules.areas IS '区域配置JSON,格式: [{"area":"梅州","enabled":true,"sort_order":1}]'; COMMENT ON COLUMN leaudit_entry_modules.sort_order IS '排序序号'; COMMENT ON COLUMN leaudit_entry_modules.is_enabled IS '是否启用'; COMMENT ON COLUMN leaudit_entry_modules.created_at IS '创建时间'; COMMENT ON COLUMN leaudit_entry_modules.updated_at IS '更新时间'; -- ============================================================================ -- 2. 新表:文档类型定义 (leaudit_document_types) -- ============================================================================ CREATE TABLE IF NOT EXISTS leaudit_document_types ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, code VARCHAR(100) UNIQUE, name VARCHAR(100) NOT NULL, description TEXT, entry_module_id BIGINT, classification_keywords JSONB, classification_tags JSONB, extraction_mode VARCHAR(20) NOT NULL DEFAULT 'single', prompt_config JSONB, is_enabled BOOLEAN NOT NULL DEFAULT true, sort_order INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), deleted_at TIMESTAMPTZ ); COMMENT ON TABLE leaudit_document_types IS '文档类型定义表 — 定义系统支持的文档类型及其分类/抽取配置'; COMMENT ON COLUMN leaudit_document_types.id IS '主键,自增'; COMMENT ON COLUMN leaudit_document_types.code IS '文档类型编码,唯一,对应DSL的type_id(如 contract.entrust)'; COMMENT ON COLUMN leaudit_document_types.name IS '文档类型名称'; COMMENT ON COLUMN leaudit_document_types.description IS '类型描述'; COMMENT ON COLUMN leaudit_document_types.entry_module_id IS '所属入口模块ID,外键引用 leaudit_entry_modules.id'; COMMENT ON COLUMN leaudit_document_types.classification_keywords IS '分类关键词JSON,用于自动识别文档类型'; COMMENT ON COLUMN leaudit_document_types.classification_tags IS '分类标签JSON,用于前端筛选展示'; COMMENT ON COLUMN leaudit_document_types.extraction_mode IS '抽取模式: single(单实体) | multi_entity(多实体) | case_file(案卷)'; COMMENT ON COLUMN leaudit_document_types.prompt_config IS '提示词配置JSON,覆盖默认的LLM提示词模板'; COMMENT ON COLUMN leaudit_document_types.is_enabled IS '是否启用'; COMMENT ON COLUMN leaudit_document_types.sort_order IS '排序序号'; COMMENT ON COLUMN leaudit_document_types.created_at IS '创建时间'; COMMENT ON COLUMN leaudit_document_types.updated_at IS '更新时间'; COMMENT ON COLUMN leaudit_document_types.deleted_at IS '软删除时间,NULL表示未删除'; -- ============================================================================ -- 3. 新表:评查点规则组 (leaudit_evaluation_point_groups) -- ============================================================================ CREATE TABLE IF NOT EXISTS leaudit_evaluation_point_groups ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, pid BIGINT, code VARCHAR(50) NOT NULL UNIQUE, name VARCHAR(100) NOT NULL, description TEXT, rule_set_id BIGINT, sort_order INTEGER NOT NULL DEFAULT 0, is_enabled BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), deleted_at TIMESTAMPTZ ); COMMENT ON TABLE leaudit_evaluation_point_groups IS '评查点规则组表 — 评查点的树形分组结构,支持PID层级嵌套'; COMMENT ON COLUMN leaudit_evaluation_point_groups.id IS '主键,自增'; COMMENT ON COLUMN leaudit_evaluation_point_groups.pid IS '父级分组ID,NULL表示根节点,自引用外键'; COMMENT ON COLUMN leaudit_evaluation_point_groups.code IS '分组编码,全局唯一,用于前后端识别'; COMMENT ON COLUMN leaudit_evaluation_point_groups.name IS '分组名称'; COMMENT ON COLUMN leaudit_evaluation_point_groups.description IS '分组描述'; COMMENT ON COLUMN leaudit_evaluation_point_groups.rule_set_id IS '关联的规则集ID,外键引用 leaudit_rule_sets.id'; COMMENT ON COLUMN leaudit_evaluation_point_groups.sort_order IS '同级排序序号'; COMMENT ON COLUMN leaudit_evaluation_point_groups.is_enabled IS '是否启用'; COMMENT ON COLUMN leaudit_evaluation_point_groups.created_at IS '创建时间'; COMMENT ON COLUMN leaudit_evaluation_point_groups.updated_at IS '更新时间'; COMMENT ON COLUMN leaudit_evaluation_point_groups.deleted_at IS '软删除时间,NULL表示未删除'; -- ============================================================================ -- 4. 新表:规则点/评查点 (leaudit_evaluation_points) -- ============================================================================ CREATE TABLE IF NOT EXISTS leaudit_evaluation_points ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, group_id BIGINT NOT NULL, code VARCHAR(100) NOT NULL UNIQUE, name VARCHAR(200) NOT NULL, rule_set_id BIGINT, rule_id VARCHAR(100), risk VARCHAR(10) NOT NULL DEFAULT 'medium', score NUMERIC(5,2) NOT NULL DEFAULT 0, description TEXT, is_enabled BOOLEAN NOT NULL DEFAULT true, is_system BOOLEAN NOT NULL DEFAULT false, evaluation_type VARCHAR(20) NOT NULL DEFAULT 'boolean', pass_threshold INTEGER DEFAULT 60, scoring_config JSONB, pass_message TEXT, fail_message TEXT, suggestion_message TEXT, suggestion_message_type VARCHAR(20) DEFAULT 'warning', references_laws JSONB, post_action VARCHAR(50), action_config TEXT, document_attribute_type VARCHAR(20) DEFAULT 'ALL', sort_order INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), deleted_at TIMESTAMPTZ ); COMMENT ON TABLE leaudit_evaluation_points IS '规则点(评查点)表 — 评查点的完整元数据定义,与DSL YAML中的rule一一对应'; COMMENT ON COLUMN leaudit_evaluation_points.id IS '主键,自增'; COMMENT ON COLUMN leaudit_evaluation_points.group_id IS '所属分组ID,外键引用 leaudit_evaluation_point_groups.id'; COMMENT ON COLUMN leaudit_evaluation_points.code IS '规则点编码,全局唯一(对应DSL YAML中的 rule_id)'; COMMENT ON COLUMN leaudit_evaluation_points.name IS '规则点名称'; COMMENT ON COLUMN leaudit_evaluation_points.rule_set_id IS '所属规则集ID,外键引用 leaudit_rule_sets.id'; COMMENT ON COLUMN leaudit_evaluation_points.rule_id IS 'DSL YAML文件中的原始 rule_id,用于跨系统关联'; COMMENT ON COLUMN leaudit_evaluation_points.risk IS '风险等级: high(高) | medium(中) | low(低)'; COMMENT ON COLUMN leaudit_evaluation_points.score IS '评查点分值权重'; COMMENT ON COLUMN leaudit_evaluation_points.description IS '规则点详细描述'; COMMENT ON COLUMN leaudit_evaluation_points.is_enabled IS '是否启用,禁用后该规则在所有评查中被跳过'; COMMENT ON COLUMN leaudit_evaluation_points.is_system IS '是否为系统级规则点,系统级对用户隐藏,仅用于内部逻辑判断'; COMMENT ON COLUMN leaudit_evaluation_points.evaluation_type IS '评查类型: boolean(传统PASS/FAIL判定) | scored(权重积分制)'; COMMENT ON COLUMN leaudit_evaluation_points.pass_threshold IS '通过阈值(百分比),仅scored类型使用,默认60'; COMMENT ON COLUMN leaudit_evaluation_points.scoring_config IS '分数配置JSON,仅scored类型使用。结构: {field_weights: {字段名: {weight: 分值, section: 分组}}, pass_threshold: 60}'; COMMENT ON COLUMN leaudit_evaluation_points.pass_message IS '通过时的反馈文案'; COMMENT ON COLUMN leaudit_evaluation_points.fail_message IS '不通过时的反馈文案'; COMMENT ON COLUMN leaudit_evaluation_points.suggestion_message IS '修正建议文案'; COMMENT ON COLUMN leaudit_evaluation_points.suggestion_message_type IS '建议类型: info(信息) | warning(警告) | error(错误)'; COMMENT ON COLUMN leaudit_evaluation_points.references_laws IS '引用法典列表JSON,如 ["《民法典》第467条","《民法典》第470条"]'; COMMENT ON COLUMN leaudit_evaluation_points.post_action IS '评查后动作: none(无) | manual(人工复核) | replace(自动替换)'; COMMENT ON COLUMN leaudit_evaluation_points.action_config IS '动作配置文本,配合 post_action 使用'; COMMENT ON COLUMN leaudit_evaluation_points.document_attribute_type IS '适用文档属性: ALL(通用) | SALE(买卖) | LEASE(租赁) | SERVICE(服务) | MANDATE(委托) | CONSTRUCTION(建设工程) | TRAINING(培训) | TECHNOLOGY(技术) | DONATION(赠与) | TRANSPORT(运输) | STORAGE(仓储) | COOPERATION(合作) | UNDERTAKING(承揽)'; COMMENT ON COLUMN leaudit_evaluation_points.sort_order IS '排序序号'; COMMENT ON COLUMN leaudit_evaluation_points.created_at IS '创建时间'; COMMENT ON COLUMN leaudit_evaluation_points.updated_at IS '更新时间'; COMMENT ON COLUMN leaudit_evaluation_points.deleted_at IS '软删除时间,NULL表示未删除'; -- ============================================================================ -- 5. 已有表补充中文注释 -- ============================================================================ -- -------------------------------------------------------------------------- -- 5.1 jwt_tokens -- -------------------------------------------------------------------------- COMMENT ON TABLE jwt_tokens IS 'JWT令牌表 — 管理用户登录令牌的签发、刷新、吊销全生命周期'; COMMENT ON COLUMN jwt_tokens.id IS '主键,自增'; COMMENT ON COLUMN jwt_tokens.user_id IS '用户ID,关联 sso_users.id'; COMMENT ON COLUMN jwt_tokens.token_jti IS 'JWT唯一标识符(JTI),用于令牌吊销黑名单'; COMMENT ON COLUMN jwt_tokens.token_hash IS 'Access Token的SHA256哈希值,用于令牌有效性校验'; COMMENT ON COLUMN jwt_tokens.refresh_token_hash IS 'Refresh Token的SHA256哈希值'; COMMENT ON COLUMN jwt_tokens.token_type IS '令牌类型: ACCESS | REFRESH'; COMMENT ON COLUMN jwt_tokens.device_id IS '设备唯一标识'; COMMENT ON COLUMN jwt_tokens.device_name IS '设备名称/型号'; COMMENT ON COLUMN jwt_tokens.user_agent IS '客户端User-Agent字符串'; COMMENT ON COLUMN jwt_tokens.ip_address IS '签发时的客户端IP地址'; COMMENT ON COLUMN jwt_tokens.issued_at IS '令牌签发时间'; COMMENT ON COLUMN jwt_tokens.expires_at IS 'Access Token过期时间'; COMMENT ON COLUMN jwt_tokens.refresh_expires_at IS 'Refresh Token过期时间'; COMMENT ON COLUMN jwt_tokens.last_used_at IS '令牌最近一次使用时间'; COMMENT ON COLUMN jwt_tokens.is_revoked IS '是否已被吊销'; COMMENT ON COLUMN jwt_tokens.revoked_at IS '吊销时间'; COMMENT ON COLUMN jwt_tokens.revoke_reason IS '吊销原因: logout(主动登出) | password_change(密码修改) | admin(管理员强制) | security(安全事件)'; COMMENT ON COLUMN jwt_tokens.created_at IS '记录创建时间'; COMMENT ON COLUMN jwt_tokens.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.2 leaudit_documents -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_documents IS '文档主表 — 每个上传的业务文档对应一条记录,跟踪评查处理状态'; COMMENT ON COLUMN leaudit_documents.id IS '主键,自增(leaudit内部文档ID)'; COMMENT ON COLUMN leaudit_documents.biz_document_id IS '业务系统文档ID,关联旧系统 documents.id,用于跨系统追溯'; COMMENT ON COLUMN leaudit_documents.type_id IS '文档类型ID,外键引用 leaudit_document_types.id'; COMMENT ON COLUMN leaudit_documents.processing_status IS '处理状态: waiting(等待处理) | running(处理中) | completed(已完成) | failed(失败)'; COMMENT ON COLUMN leaudit_documents.current_run_id IS '当前活跃的评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_documents.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_documents.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.3 leaudit_document_files -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_document_files IS '文档文件表 — 一个文档可能包含多个文件(主文件、附件、扫描件等)'; COMMENT ON COLUMN leaudit_document_files.id IS '主键,自增'; COMMENT ON COLUMN leaudit_document_files.document_id IS '所属文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_document_files.file_role IS '文件角色: primary(主文档) | attachment(附件) | scan(扫描件) | ocr_result(OCR结果)'; COMMENT ON COLUMN leaudit_document_files.file_name IS '原始文件名'; COMMENT ON COLUMN leaudit_document_files.file_ext IS '文件扩展名(不含点)'; COMMENT ON COLUMN leaudit_document_files.mime_type IS '文件MIME类型'; COMMENT ON COLUMN leaudit_document_files.file_size IS '文件大小(字节)'; COMMENT ON COLUMN leaudit_document_files.sha256 IS '文件SHA256哈希值,用于去重和完整性校验'; COMMENT ON COLUMN leaudit_document_files.local_path IS '本地临时存储路径'; COMMENT ON COLUMN leaudit_document_files.oss_url IS 'OSS对象存储URL(唯一真源)'; COMMENT ON COLUMN leaudit_document_files.storage_provider IS '存储提供商: minio | aliyun_oss | local'; COMMENT ON COLUMN leaudit_document_files.is_active IS '是否为当前活跃版本'; COMMENT ON COLUMN leaudit_document_files.created_by IS '上传者用户ID,关联 sso_users.id'; COMMENT ON COLUMN leaudit_document_files.created_at IS '记录创建时间'; -- -------------------------------------------------------------------------- -- 5.4 leaudit_audit_runs -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_audit_runs IS '评查运行表 — 一次评查执行的核心记录,跟踪7阶段流水线进度和结果汇总'; COMMENT ON COLUMN leaudit_audit_runs.id IS '主键,自增'; COMMENT ON COLUMN leaudit_audit_runs.document_id IS '被评查的文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_audit_runs.document_file_id IS '被评查的具体文件ID,外键引用 leaudit_document_files.id'; COMMENT ON COLUMN leaudit_audit_runs.run_no IS '运行序号(同一文档多次运行的递增编号)'; COMMENT ON COLUMN leaudit_audit_runs.trigger_source IS '触发来源: manual(手动) | api(API调用) | schedule(定时任务) | webhook(Webhook回调)'; COMMENT ON COLUMN leaudit_audit_runs.trigger_user_id IS '触发用户ID,外键引用 sso_users.id'; COMMENT ON COLUMN leaudit_audit_runs.task_id IS 'Celery任务ID,用于跟踪异步任务状态'; COMMENT ON COLUMN leaudit_audit_runs.status IS '运行状态: pending(等待) | running(执行中) | completed(完成) | failed(失败) | cancelled(取消)'; COMMENT ON COLUMN leaudit_audit_runs.phase IS '当前流水线阶段: normalize | extract | evaluate | rescue | persist'; COMMENT ON COLUMN leaudit_audit_runs.rule_set_id IS '使用的规则集ID,外键引用 leaudit_rule_sets.id'; COMMENT ON COLUMN leaudit_audit_runs.rule_version_id IS '使用的规则版本ID,外键引用 leaudit_rule_versions.id'; COMMENT ON COLUMN leaudit_audit_runs.rule_type_id IS '规则类型ID(DSL metadata.type_id),如 contract.entrust'; COMMENT ON COLUMN leaudit_audit_runs.rule_source_oss_url IS '规则YAML文件的OSS存储URL'; COMMENT ON COLUMN leaudit_audit_runs.rule_source_sha256 IS '规则文件SHA256哈希,用于校验规则版本一致性'; COMMENT ON COLUMN leaudit_audit_runs.rule_local_cache_path IS '规则文件本地缓存路径'; COMMENT ON COLUMN leaudit_audit_runs.engine_version IS 'LeAudit引擎版本号(pip包版本)'; COMMENT ON COLUMN leaudit_audit_runs.llm_provider IS 'LLM提供商标识'; COMMENT ON COLUMN leaudit_audit_runs.llm_model IS 'LLM模型名称'; COMMENT ON COLUMN leaudit_audit_runs.vlm_provider IS 'VLM提供商标识'; COMMENT ON COLUMN leaudit_audit_runs.vlm_model IS 'VLM模型名称'; COMMENT ON COLUMN leaudit_audit_runs.ocr_provider IS 'OCR提供商标识'; COMMENT ON COLUMN leaudit_audit_runs.ocr_model IS 'OCR模型名称'; COMMENT ON COLUMN leaudit_audit_runs.rescue_mode IS '补救模式: auto(自动) | manual(人工) | disabled(禁用)'; COMMENT ON COLUMN leaudit_audit_runs.rescue_applied IS '本次运行是否触发了补救流程'; COMMENT ON COLUMN leaudit_audit_runs.total_score IS '评查总分'; COMMENT ON COLUMN leaudit_audit_runs.passed_count IS '通过的规则数'; COMMENT ON COLUMN leaudit_audit_runs.failed_count IS '未通过的规则数'; COMMENT ON COLUMN leaudit_audit_runs.skipped_count IS '跳过的规则数(条件不满足或被禁用)'; COMMENT ON COLUMN leaudit_audit_runs.result_status IS '整体结果: pass(通过) | fail(不通过) | partial(部分通过) | review(需人工复核)'; COMMENT ON COLUMN leaudit_audit_runs.started_at IS '评查开始时间'; COMMENT ON COLUMN leaudit_audit_runs.finished_at IS '评查结束时间'; COMMENT ON COLUMN leaudit_audit_runs.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_audit_runs.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.5 leaudit_artifacts -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_artifacts IS '评查产物表 — 统一管理评查各阶段产出的所有文件/数据,OSS为真源、DB为索引'; COMMENT ON COLUMN leaudit_artifacts.id IS '主键,自增'; COMMENT ON COLUMN leaudit_artifacts.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_artifacts.document_id IS '所属文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_artifacts.artifact_type IS '产物类型: original_doc | normalized_doc | render_png | render_pdf | ocr_json | extract_json | evaluate_json | rescue_json | quality_report | diff_report | cross_review | merged_result | final_report | vlm_render | vlm_vis_page | vlm_vis_subdoc | vlm_vis_field | vlm_debug | rescue_debug | pipeline_log'; COMMENT ON COLUMN leaudit_artifacts.artifact_role IS '产物角色: input | output | intermediate | debug | log'; COMMENT ON COLUMN leaudit_artifacts.file_name IS '文件名'; COMMENT ON COLUMN leaudit_artifacts.file_ext IS '文件扩展名'; COMMENT ON COLUMN leaudit_artifacts.mime_type IS 'MIME类型'; COMMENT ON COLUMN leaudit_artifacts.file_size IS '文件大小(字节)'; COMMENT ON COLUMN leaudit_artifacts.sha256 IS '文件SHA256哈希值'; COMMENT ON COLUMN leaudit_artifacts.page_no IS '关联的页面编号(PDF渲染产物)'; COMMENT ON COLUMN leaudit_artifacts.sub_doc_id IS '关联的子文档ID(子文档级别的产物)'; COMMENT ON COLUMN leaudit_artifacts.field_name IS '关联的字段名(字段级别的可视化产物)'; COMMENT ON COLUMN leaudit_artifacts.rule_id IS '关联的规则ID(规则级别的产物)'; COMMENT ON COLUMN leaudit_artifacts.local_path IS '本地临时文件路径'; COMMENT ON COLUMN leaudit_artifacts.oss_url IS 'OSS对象存储URL(唯一真源)'; COMMENT ON COLUMN leaudit_artifacts.storage_provider IS '存储提供商: minio | aliyun_oss | local'; COMMENT ON COLUMN leaudit_artifacts.is_persisted IS '是否已持久化到OSS'; COMMENT ON COLUMN leaudit_artifacts.retention_policy IS '保留策略: temp(临时) | run_life(评查周期) | permanent(永久)'; COMMENT ON COLUMN leaudit_artifacts.created_at IS '记录创建时间'; -- -------------------------------------------------------------------------- -- 5.6 leaudit_rule_results -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_rule_results IS '规则评查结果表 — 每次评查中每条规则的判断结果,含详细评分和补救信息'; COMMENT ON COLUMN leaudit_rule_results.id IS '主键,自增'; COMMENT ON COLUMN leaudit_rule_results.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_rule_results.rule_version_id IS '使用的规则版本ID,外键引用 leaudit_rule_versions.id'; COMMENT ON COLUMN leaudit_rule_results.document_id IS '被评查文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_rule_results.rule_id IS '规则ID(DSL YAML中的 rule_id)'; COMMENT ON COLUMN leaudit_rule_results.rule_name IS '规则名称'; COMMENT ON COLUMN leaudit_rule_results.risk IS '风险等级: high | medium | low'; COMMENT ON COLUMN leaudit_rule_results.score IS '规则得分'; COMMENT ON COLUMN leaudit_rule_results.passed IS '是否通过'; COMMENT ON COLUMN leaudit_rule_results.status IS '规则状态: pending | passed | failed | skipped | error'; COMMENT ON COLUMN leaudit_rule_results.skip_reason IS '跳过原因(条件不满足时记录)'; COMMENT ON COLUMN leaudit_rule_results.confidence IS '置信度分数(0-1)'; COMMENT ON COLUMN leaudit_rule_results.pass_message IS '通过时的反馈文案'; COMMENT ON COLUMN leaudit_rule_results.fail_message IS '不通过时的反馈文案'; COMMENT ON COLUMN leaudit_rule_results.stages IS '各阶段执行详情JSON,记录每个stage的判断过程'; COMMENT ON COLUMN leaudit_rule_results.extracted_fields IS '抽取到的字段值JSON,{field_name: {value, confidence, grounding, ...}}'; COMMENT ON COLUMN leaudit_rule_results.field_positions IS '字段在文档中的位置信息JSON'; COMMENT ON COLUMN leaudit_rule_results.rule_meta IS '规则元数据JSON(risk, score, messages等快照)'; COMMENT ON COLUMN leaudit_rule_results.remediation IS '修正建议JSON,结构: {suggestions: [...], actions: [...]}'; COMMENT ON COLUMN leaudit_rule_results.rescue_applied IS '是否已应用补救流程'; COMMENT ON COLUMN leaudit_rule_results.rescue_passed IS '补救后是否通过'; COMMENT ON COLUMN leaudit_rule_results.result_payload IS '原始结果JSON(完整保留leaudit引擎输出)'; COMMENT ON COLUMN leaudit_rule_results.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_rule_results.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.7 leaudit_field_results -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_field_results IS '字段抽取结果表 — 评查中每个字段的抽取值和置信度信息'; COMMENT ON COLUMN leaudit_field_results.id IS '主键,自增'; COMMENT ON COLUMN leaudit_field_results.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_field_results.document_id IS '所属文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_field_results.sub_doc_id IS '所属子文档ID(案卷/多实体场景)'; COMMENT ON COLUMN leaudit_field_results.field_name IS '字段名(对应DSL field.name)'; COMMENT ON COLUMN leaudit_field_results.field_type IS '字段类型(对应DSL field.type,如 verbatim/string/money/date/enum)'; COMMENT ON COLUMN leaudit_field_results.value_text IS '抽取的文本值'; COMMENT ON COLUMN leaudit_field_results.raw_value_json IS '原始抽取结果JSON(含所有候选值)'; COMMENT ON COLUMN leaudit_field_results.confidence IS '综合置信度(0-1),由logprob/grounding/rule加权计算'; COMMENT ON COLUMN leaudit_field_results.logprob_score IS 'Logprob置信分(语言模型token概率)'; COMMENT ON COLUMN leaudit_field_results.grounding_score IS '文本落地置信分(抽取值在原文中的可追溯性)'; COMMENT ON COLUMN leaudit_field_results.grounding_method IS '落地验证方法: exact(精确匹配) | fuzzy(模糊匹配) | text_search(文本搜索) | none(未验证)'; COMMENT ON COLUMN leaudit_field_results.rule_score IS '规则置信分(业务规则校验)'; COMMENT ON COLUMN leaudit_field_results.hard_failed IS '是否硬失败(落在置信阈值以下且无兜底值)'; COMMENT ON COLUMN leaudit_field_results.fallback_value IS '兜底/替代值(置信不足时使用)'; COMMENT ON COLUMN leaudit_field_results.meta_json IS '扩展元数据JSON(phase信息、field位置、分组等)'; COMMENT ON COLUMN leaudit_field_results.created_at IS '记录创建时间'; -- -------------------------------------------------------------------------- -- 5.8 leaudit_run_metrics -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_run_metrics IS '评查运行指标表 — 每次运行的性能统计和耗时分解'; COMMENT ON COLUMN leaudit_run_metrics.id IS '主键,自增'; COMMENT ON COLUMN leaudit_run_metrics.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_run_metrics.ocr_seconds IS 'OCR阶段耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.normalize_seconds IS '文档归一化阶段耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.extract_seconds IS '字段抽取阶段耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.evaluate_seconds IS '规则评查阶段耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.rescue_seconds IS '补救阶段耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.total_seconds IS '总耗时(秒)'; COMMENT ON COLUMN leaudit_run_metrics.page_count IS '文档总页数'; COMMENT ON COLUMN leaudit_run_metrics.sub_document_count IS '子文档数量(案卷拆分的子文档数)'; COMMENT ON COLUMN leaudit_run_metrics.field_count IS '抽取的字段总数'; COMMENT ON COLUMN leaudit_run_metrics.rule_count IS '执行的规则总数'; COMMENT ON COLUMN leaudit_run_metrics.llm_call_count IS 'LLM调用次数'; COMMENT ON COLUMN leaudit_run_metrics.vlm_call_count IS 'VLM调用次数'; COMMENT ON COLUMN leaudit_run_metrics.rescue_rule_count IS '补救规则数(触发rescue的规则数量)'; COMMENT ON COLUMN leaudit_run_metrics.artifact_count IS '产出的产物文件总数'; COMMENT ON COLUMN leaudit_run_metrics.created_at IS '记录创建时间'; -- -------------------------------------------------------------------------- -- 5.9 leaudit_run_errors -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_run_errors IS '评查运行错误表 — 记录流水线各阶段的异常和错误详情'; COMMENT ON COLUMN leaudit_run_errors.id IS '主键,自增'; COMMENT ON COLUMN leaudit_run_errors.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_run_errors.document_id IS '所属文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_run_errors.stage IS '发生错误的阶段: ocr | normalize | extract | evaluate | rescue | persist'; COMMENT ON COLUMN leaudit_run_errors.level IS '错误级别: fatal(致命) | error(错误) | warning(警告) | info(信息)'; COMMENT ON COLUMN leaudit_run_errors.error_code IS '错误码(标准化标识,如 OCR_TIMEOUT / LLM_API_ERROR)'; COMMENT ON COLUMN leaudit_run_errors.message IS '错误描述信息'; COMMENT ON COLUMN leaudit_run_errors.detail_json IS '错误详情JSON(堆栈、上下文、请求参数等)'; COMMENT ON COLUMN leaudit_run_errors.created_at IS '记录创建时间'; -- -------------------------------------------------------------------------- -- 5.10 leaudit_rescue_outcomes -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_rescue_outcomes IS '补救结果表 — 记录每条失败规则的补救诊断和处理结果'; COMMENT ON COLUMN leaudit_rescue_outcomes.id IS '主键,自增'; COMMENT ON COLUMN leaudit_rescue_outcomes.run_id IS '所属评查运行ID,外键引用 leaudit_audit_runs.id'; COMMENT ON COLUMN leaudit_rescue_outcomes.document_id IS '所属文档ID,外键引用 leaudit_documents.id'; COMMENT ON COLUMN leaudit_rescue_outcomes.rule_id IS '被补救的规则ID(DSL rule_id)'; COMMENT ON COLUMN leaudit_rescue_outcomes.status IS '补救状态: pending | diagnosing | fixing | retrying | resolved | failed | escalated'; COMMENT ON COLUMN leaudit_rescue_outcomes.diagnosis IS '诊断结果 — AI分析出的失败根因'; COMMENT ON COLUMN leaudit_rescue_outcomes.diagnosis_confidence IS '诊断置信度(0-1)'; COMMENT ON COLUMN leaudit_rescue_outcomes.final_status IS '补救后最终状态: pass | fail | review'; COMMENT ON COLUMN leaudit_rescue_outcomes.failure_reason IS '补救失败原因(最终仍失败时记录)'; COMMENT ON COLUMN leaudit_rescue_outcomes.llm_calls IS '补救过程LLM调用次数'; COMMENT ON COLUMN leaudit_rescue_outcomes.vlm_calls IS '补救过程VLM调用次数'; COMMENT ON COLUMN leaudit_rescue_outcomes.duration_ms IS '补救总耗时(毫秒)'; COMMENT ON COLUMN leaudit_rescue_outcomes.requires_human_review IS '是否需要人工复核'; COMMENT ON COLUMN leaudit_rescue_outcomes.payload IS '补救过程完整数据JSON(含每层rescue的输入输出)'; COMMENT ON COLUMN leaudit_rescue_outcomes.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_rescue_outcomes.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.11 leaudit_rule_sets -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_rule_sets IS '规则集表 — 管理DSL规则集(一个规则集=一套type_id对应的YAML规则文件)'; COMMENT ON COLUMN leaudit_rule_sets.id IS '主键,自增'; COMMENT ON COLUMN leaudit_rule_sets.rule_type IS '规则类型ID(对应DSL metadata.type_id,如 contract.entrust)'; COMMENT ON COLUMN leaudit_rule_sets.rule_name IS '规则集名称(对应DSL metadata.name,如 通用委托合同)'; COMMENT ON COLUMN leaudit_rule_sets.domain_type IS '领域类型: contract(合同) | admin_license(行政许可) | legal_doc(法律文书)'; COMMENT ON COLUMN leaudit_rule_sets.description IS '规则集描述(对应DSL metadata.description)'; COMMENT ON COLUMN leaudit_rule_sets.entry_module IS '所属入口模块标识'; COMMENT ON COLUMN leaudit_rule_sets.current_version_id IS '当前生效版本ID,外键引用 leaudit_rule_versions.id'; COMMENT ON COLUMN leaudit_rule_sets.status IS '状态: draft(草稿) | active(生效) | deprecated(废弃) | archived(归档)'; COMMENT ON COLUMN leaudit_rule_sets.is_builtin IS '是否为系统内置规则(内置规则不可删除)'; COMMENT ON COLUMN leaudit_rule_sets.owner_user_id IS '负责人用户ID,外键引用 sso_users.id'; COMMENT ON COLUMN leaudit_rule_sets.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_rule_sets.updated_at IS '记录更新时间'; COMMENT ON COLUMN leaudit_rule_sets.deleted_at IS '软删除时间,NULL表示未删除'; -- -------------------------------------------------------------------------- -- 5.12 leaudit_rule_versions -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_rule_versions IS '规则版本表 — 规则集每次发布生成一个版本快照,记录YAML文件OSS地址和元数据'; COMMENT ON COLUMN leaudit_rule_versions.id IS '主键,自增'; COMMENT ON COLUMN leaudit_rule_versions.rule_set_id IS '所属规则集ID,外键引用 leaudit_rule_sets.id'; COMMENT ON COLUMN leaudit_rule_versions.version_no IS '版本号(语义化版本,如 1.0 / 2.3)'; COMMENT ON COLUMN leaudit_rule_versions.version_seq IS '版本序号(自增整数,rule_set_id内递增)'; COMMENT ON COLUMN leaudit_rule_versions.status IS '状态: draft(草稿) | published(已发布) | deprecated(废弃) | rollback(已回滚)'; COMMENT ON COLUMN leaudit_rule_versions.source_type IS '规则源类型: oss_yaml(OSS上的YAML) | local_yaml(本地YAML) | db_snippet(数据库片段)'; COMMENT ON COLUMN leaudit_rule_versions.dsl_format IS 'DSL格式: yaml(新版YAML DSL) | json(旧版JSON格式)'; COMMENT ON COLUMN leaudit_rule_versions.oss_url IS '规则YAML文件的OSS存储URL'; COMMENT ON COLUMN leaudit_rule_versions.file_sha256 IS '规则文件SHA256哈希值'; COMMENT ON COLUMN leaudit_rule_versions.file_size IS '规则文件大小(字节)'; COMMENT ON COLUMN leaudit_rule_versions.local_cache_path IS '规则文件本地缓存路径'; COMMENT ON COLUMN leaudit_rule_versions.metadata_type_id IS 'DSL metadata.type_id 快照'; COMMENT ON COLUMN leaudit_rule_versions.metadata_name IS 'DSL metadata.name 快照'; COMMENT ON COLUMN leaudit_rule_versions.metadata_version IS 'DSL metadata.version 快照'; COMMENT ON COLUMN leaudit_rule_versions.change_note IS '版本变更说明'; COMMENT ON COLUMN leaudit_rule_versions.editor_user_id IS '编辑者用户ID,外键引用 sso_users.id'; COMMENT ON COLUMN leaudit_rule_versions.publisher_user_id IS '发布者用户ID,外键引用 sso_users.id'; COMMENT ON COLUMN leaudit_rule_versions.published_at IS '发布时间'; COMMENT ON COLUMN leaudit_rule_versions.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_rule_versions.updated_at IS '记录更新时间'; -- -------------------------------------------------------------------------- -- 5.13 leaudit_rule_type_bindings -- -------------------------------------------------------------------------- COMMENT ON TABLE leaudit_rule_type_bindings IS '规则类型绑定表 — 定义文档类型与规则集的匹配关系,支持显式绑定和通配符绑定'; COMMENT ON COLUMN leaudit_rule_type_bindings.id IS '主键,自增'; COMMENT ON COLUMN leaudit_rule_type_bindings.doc_type_id IS '文档类型ID,外键引用 leaudit_document_types.id'; COMMENT ON COLUMN leaudit_rule_type_bindings.doc_type_code IS '文档类型编码(冗余字段,用于快速匹配)'; COMMENT ON COLUMN leaudit_rule_type_bindings.rule_set_id IS '规则集ID,外键引用 leaudit_rule_sets.id'; COMMENT ON COLUMN leaudit_rule_type_bindings.binding_mode IS '绑定模式: explicit(显式指定) | wildcard(通配符) | fallback(兜底默认)'; COMMENT ON COLUMN leaudit_rule_type_bindings.priority IS '优先级(数值越大优先级越高),通配符绑定通常优先级较低'; COMMENT ON COLUMN leaudit_rule_type_bindings.is_active IS '是否激活'; COMMENT ON COLUMN leaudit_rule_type_bindings.note IS '备注说明'; COMMENT ON COLUMN leaudit_rule_type_bindings.created_at IS '记录创建时间'; COMMENT ON COLUMN leaudit_rule_type_bindings.updated_at IS '记录更新时间'; -- ============================================================================ -- 6. 外键约束 (新表) -- ============================================================================ -- leaudit_evaluation_point_groups 自引用 (pid → id) ALTER TABLE leaudit_evaluation_point_groups ADD CONSTRAINT fk_eval_point_groups_pid FOREIGN KEY (pid) REFERENCES leaudit_evaluation_point_groups(id) ON UPDATE CASCADE ON DELETE SET NULL; -- leaudit_evaluation_point_groups → leaudit_rule_sets ALTER TABLE leaudit_evaluation_point_groups ADD CONSTRAINT fk_eval_point_groups_rule_set FOREIGN KEY (rule_set_id) REFERENCES leaudit_rule_sets(id) ON UPDATE CASCADE ON DELETE SET NULL; -- leaudit_evaluation_points → leaudit_evaluation_point_groups ALTER TABLE leaudit_evaluation_points ADD CONSTRAINT fk_eval_points_group FOREIGN KEY (group_id) REFERENCES leaudit_evaluation_point_groups(id) ON UPDATE CASCADE ON DELETE CASCADE; -- leaudit_evaluation_points → leaudit_rule_sets ALTER TABLE leaudit_evaluation_points ADD CONSTRAINT fk_eval_points_rule_set FOREIGN KEY (rule_set_id) REFERENCES leaudit_rule_sets(id) ON UPDATE CASCADE ON DELETE SET NULL; -- leaudit_document_types → leaudit_entry_modules ALTER TABLE leaudit_document_types ADD CONSTRAINT fk_doc_types_entry_module FOREIGN KEY (entry_module_id) REFERENCES leaudit_entry_modules(id) ON UPDATE CASCADE ON DELETE SET NULL; -- leaudit_rule_type_bindings → leaudit_document_types ALTER TABLE leaudit_rule_type_bindings ADD CONSTRAINT fk_rule_type_bindings_doc_type FOREIGN KEY (doc_type_id) REFERENCES leaudit_document_types(id) ON UPDATE CASCADE ON DELETE CASCADE; -- leaudit_documents → leaudit_document_types ALTER TABLE leaudit_documents ADD CONSTRAINT fk_documents_type FOREIGN KEY (type_id) REFERENCES leaudit_document_types(id) ON UPDATE CASCADE ON DELETE SET NULL; -- ============================================================================ -- 7. 索引 -- ============================================================================ -- 入口模块 CREATE INDEX IF NOT EXISTS idx_entry_modules_sort ON leaudit_entry_modules(sort_order, is_enabled); -- 文档类型 CREATE INDEX IF NOT EXISTS idx_doc_types_code ON leaudit_document_types(code); CREATE INDEX IF NOT EXISTS idx_doc_types_entry ON leaudit_document_types(entry_module_id); -- 评查点规则组 CREATE INDEX IF NOT EXISTS idx_eval_point_groups_pid ON leaudit_evaluation_point_groups(pid); CREATE INDEX IF NOT EXISTS idx_eval_point_groups_code ON leaudit_evaluation_point_groups(code); CREATE INDEX IF NOT EXISTS idx_eval_point_groups_rule_set ON leaudit_evaluation_point_groups(rule_set_id); CREATE INDEX IF NOT EXISTS idx_eval_point_groups_sort ON leaudit_evaluation_point_groups(pid, sort_order); -- 评查点 CREATE INDEX IF NOT EXISTS idx_eval_points_code ON leaudit_evaluation_points(code); CREATE INDEX IF NOT EXISTS idx_eval_points_group ON leaudit_evaluation_points(group_id); CREATE INDEX IF NOT EXISTS idx_eval_points_rule_set ON leaudit_evaluation_points(rule_set_id); CREATE INDEX IF NOT EXISTS idx_eval_points_rule_id ON leaudit_evaluation_points(rule_id); CREATE INDEX IF NOT EXISTS idx_eval_points_enabled ON leaudit_evaluation_points(group_id, is_enabled); CREATE INDEX IF NOT EXISTS idx_eval_points_risk ON leaudit_evaluation_points(risk); COMMIT;