# DataOps Platform 数据模型 > 图中“当前”表示已有建库脚本、Alembic 迁移或 Neo4j 读写代码;“目标”仅用于后续迁移设计,尚未部署到生产。 ## 1. PostgreSQL 当前表 ```mermaid erDiagram users { varchar id PK varchar username UK varchar password "旧认证,仅本地验收" boolean is_admin } data_orders { serial id PK varchar order_no UK varchar status integer result_product_id "逻辑引用" integer result_dataflow_id "Neo4j 节点 ID" integer data_source "Neo4j 节点 ID" jsonb graph_analysis } data_products { serial id PK varchar product_name integer source_dataflow_id "Neo4j 节点 ID" varchar target_schema varchar target_table varchar status } metadata_review_records { bigserial id PK bigint business_domain_id "Neo4j 节点 ID" varchar record_type varchar status jsonb new_meta jsonb old_meta jsonb resolution_payload } metadata_version_history { bigserial id PK bigint meta_id "Neo4j 节点 ID" jsonb before_snapshot jsonb after_snapshot varchar created_by } task_list { serial task_id PK varchar task_name varchar status varchar create_by } datasource_credentials { uuid id PK uuid data_source_uid integer credential_version bytea encrypted_payload bytea nonce varchar key_version varchar status } datasource_credential_audit_events { bigserial id PK uuid data_source_uid integer credential_version varchar event_type varchar actor_uid text safe_detail } data_orders }o--o| data_products : "result_product_id(当前无 FK)" datasource_credentials ||--o{ datasource_credential_audit_events : "data_source_uid / credential_version" ``` 当前脚本没有为跨表逻辑引用建立外键;跨 Neo4j 引用使用内部节点 ID,存在节点重建后失效风险。下一阶段必须引入稳定业务 UUID,内部节点 ID 仅用于查询加速,不作为长期契约。 ## 2. Neo4j 当前治理图 ```mermaid flowchart LR BD["BusinessDomain"] -->|"COME_FROM"| DS["DataSource"] BD -->|"INCLUDES"| META["DataMeta"] BD -->|"LABEL"| LABEL["DataLabel"] META -->|"LABEL"| LABEL META -->|"ALIAS"| PRIMARY["DataMeta 主对象"] BD -->|"INPUT"| DF["DataFlow"] DF -->|"OUTPUT"| TARGET["BusinessDomain"] ``` 唯一方向约定: - `BusinessDomain-[:COME_FROM]->DataSource` - `BusinessDomain-[:INCLUDES]->DataMeta` - `BusinessDomain-[:INPUT]->DataFlow` - `DataFlow-[:OUTPUT]->BusinessDomain` - 治理对象 `-[:LABEL]->DataLabel` - 别名 `alias DataMeta-[:ALIAS]->primary DataMeta` 遗留查询和注释中若出现反方向假设,应在下一阶段以自动化图模型契约测试消除。 ### DataSource 安全字段约定 Neo4j `DataSource` 节点保存 `uid`、类型、主机、端口、数据库、schema、 TLS 白名单选项、连接池覆盖项、`credential_ref` 和 `credential_version`。 节点不允许保存 `username`、`password`、`conn_str`、`connection_string` 或 `connection_url`。`credential_ref` 指向平台 PostgreSQL 中相同 `data_source_uid` 的当前不可变凭据版本: ```mermaid flowchart LR DS["Neo4j DataSource\nuid + credential_version"] -->|"逻辑引用"| CRED["PostgreSQL datasource_credentials\nAES-256-GCM 密文"] CRED --> AUDIT["datasource_credential_audit_events\n不含密钥的审计明细"] DS --> POOL["Worker 本地池键\nuid + version + fingerprint"] ``` 数据库约束保证同一数据源每个 `credential_version` 唯一,且同一数据源最多 一个 `active` 版本。密文使用数据源 UID 和版本号作为认证附加数据,不能复制到 另一个数据源或版本后解密。删除生产凭据表不属于本轮范围。 ## 3. 已实施的 PostgreSQL 增量表 下表均已由 `migrations/` 中的 Alembic 版本链创建,不再只是设计目标。 | 表 | 核心字段 | 约束/用途 | |---|---|---| | `users` | `id UUID`, `username`, `password_hash`, `status` | 替换旧明文/可逆密码字段 | | `roles` | `id`, `code` | 固定 `admin/editor/viewer`,即管理员、编辑者、查看者 | | `user_roles` | `user_id`, `role_id` | 用户与角色映射 | | `governance_responsibility_scopes` | `resource_type`, `resource_uid`, `revision`, `updated_by` | 业务域、设备、本体、映射、故障分类和质量问题的责任矩阵版本 | | `governance_responsibility_assignments` | `scope_id`, `user_id`, `responsibility_role`, `raci_role` | Owner、Steward、架构师、设备资产管理员与 RACI 责任绑定 | | `governance_responsibility_audit_events` | `resource_type`, `resource_uid`, `actor_uid`, `before_state`, `after_state` | 责任矩阵变更前后快照与操作审计 | | `dataflow_workflow_versions` | `id`, `dataflow_uid`, `environment`, `version_no`, `n8n_workflow_id`, `status` | 一个 DataFlow 对多个 n8n Workflow 版本 | | `governance_documents` | `object_type`, `object_uid`, `object_version`, `content_hash` | 治理对象文本快照 | | `governance_chunks` | `document_id`, `chunk_no`, `content`, `embedding vector` | Qwen Embedding 结果 | | `governance_sync_jobs` | `mode`, `cursor`, `status`, `error` | 增量同步和每日全量一致性巡检 | | `knowledge_query_audits` | `query_hash`, `user_id`, `roles`, `business_domain_uids`, `mode`, `retriever_counts`, `cited_points`, `degraded_components`, `correlation_id`, `latency_ms` | 最小化知识查询审计;不保存原始问题、回答或证据内容 | | `knowledge_evaluation_sets/cases/runs/results` | `case_type`, `allowed_business_domains`, `expected_sources`, `expected_answer_points`, `must_refuse`, `metrics`, `citations` | 版本化检索、问答、授权与拒答验收证据 | | `workbench_layouts` | `user_id`, `layout_version`, `widgets jsonb` | 按用户保存有限标准组件布局 | | `outbox_events` | `event_id`, `aggregate_type`, `aggregate_id`, `payload`, `published_at` | 跨存储最终一致性 | | `datasource_credentials` | `data_source_uid`, `credential_version`, `encrypted_payload`, `nonce`, `key_version`, `status` | 外部数据源不可变加密凭据 | | `datasource_credential_audit_events` | `data_source_uid`, `credential_version`, `event_type`, `actor_uid`, `safe_detail` | 不含秘密的凭据及连接池审计 | | `ingestion_sources` | `uid`, `source_type`, `config`, `permission_scope` | 数据库、文件、DDL 采集来源 | | `source_artifacts` | `source_uid`, `content_hash`, `storage_ref`, `parser_version` | MinIO 原件/工件索引与哈希去重 | | `ingestion_jobs` | `idempotency_key`, `status`, `attempt_count`, `failure_stage`, `statistics`, `last_error` | 可重复执行、可诊断、可重试的采集状态机 | | `catalog_snapshots` | `job_uid`, `source_uid`, `attempt`, `content_hash`, `snapshot` | 每次数据库目录采集的不可变结构快照 | | `evidence_fragments` | `artifact_uid`, `locator`, `excerpt`, `confidence` | 页、表、行列、坐标级证据 | | `extraction_candidates` | `normalized_data`, `evidence_uids`, `confidence`, `status` | 解析候选项 | | `data_elements` | `code`, `current_version`, `status`, `business_domain_uids` | 稳定数据元素身份与生命周期 | | `data_element_versions` | `data_element_uid`, `version`, `snapshot`, `evidence_uids` | 不可变数据元素版本 | | `candidate_decisions` | `candidate_uid`, `action`, `data_element_uid`, `actor_uid` | `reuse/create/map/ignore` 决策审计 | | `device_assets` | `uid`, `asset_type`, `name`, `current_version`, `content_hash`, `location`, `organization`, `responsible_person`, `attributes` | 设备、部件、测点、告警和维护记录的稳定平台档案 | | `device_asset_source_mappings` | `asset_uid`, `source_uid`, `source_entity`, `asset_type`, `source_code`, `source_updated_at` | 源系统身份映射;同一来源身份唯一,不在 WP-04 自动跨源合并 | | `device_asset_versions` | `asset_uid`, `version`, `content_hash`, `snapshot`, `source_mapping_uid`, `actor_uid` | 设备资产不可变版本和变更来源追溯 | | `device_semantic_codes` | `ontology_uid`, `code_type`, `canonical_code`, `canonical_name`, `status`, `current_version`, `source_mappings`, `evidence_uids`, `suggestion_source`, `confidence` | 故障、原因、措施规范代码;按本体、类型、代码保持唯一身份 | | `device_semantic_code_versions` | `code_uid`, `version`, `snapshot`, `created_by` | 设备语义代码不可变版本;修订只追加、不覆盖历史 | | `device_semantic_code_reviews` | `code_uid`, `version`, `decision`, `reason`, `actor_uid` | 设备资产负责人对代码版本的批准或退回审计 | | `device_entity_match_candidates` | `left_asset_uid`, `right_asset_uid`, `canonical_asset_uid`, `status`, `suggestion_source`, `confidence`, `explanation`, `evidence_uids`, `current_version` | 跨来源实体匹配候选;开放候选对唯一,规则与 AI 候选共用受治理生命周期 | | `device_entity_match_reviews` | `candidate_uid`, `version`, `decision`, `reason`, `actor_uid` | 人工批准、拒绝或严格门禁自动批准的不可变审核证据 | | `device_entity_merge_events` | `candidate_uid`, `canonical_asset_uid`, `member_asset_uid`, `review_uid`, `snapshot` | 非破坏性主资产关联及合并前证据快照,不改写设备资产和来源映射 | | `device_entity_merge_rollbacks` | `merge_uid`, `candidate_uid`, `reason`, `snapshot`, `actor_uid` | 每次合并最多一个追加式回滚事件;原合并事件保留 | | `device_quality_profiles` | `uid`, `name`, `created_by` | 设备台账与故障质量策略的稳定身份 | | `device_quality_profile_versions` | `profile_uid`, `version`, `status`, `rules`, `content_hash`, `published_by` | 七类封闭规则的不可变版本;只允许一个生效发布版本 | | `device_quality_runs` | `policy_version_uid`, `policy_hash`, `source_uid`, `total_assets`, `total_violations`, `score` | 绑定精确策略版本和检查范围的不可变质量执行 | | `device_quality_rule_results` | `run_uid`, `rule_code`, `evaluated_count`, `violation_count`, `pass_rate`, `weighted_score` | 每条启用规则的精确计数和得分贡献 | | `device_quality_violation_samples` | `run_uid`, `rule_code`, `asset_uid`, `field_name`, `source_mapping_uid`, `evidence`, `expires_at` | 每条规则最多 100 条脱敏违规样本,保留 30 天 | | `device_quality_asset_scores` | `run_uid`, `asset_uid`, `evaluated_rule_count`, `violation_count`, `score` | 按适用规则计算的资产级质量评分 | | `device_quality_issues` | `source_violation_uid`, `asset_uid`, `recurrence_key`, `status`, `assignee_uid`, `due_at`, `current_version` | 从违规证据形成的整改问题、状态、责任和复发身份 | | `device_quality_issue_remediations` | `issue_uid`, `round_number`, `summary`, `evidence_refs`, `review_status`, `reviewed_by` | 追加式整改轮次和独立复核结果 | | `device_quality_issue_timeline` | `issue_uid`, `action`, `from_status`, `to_status`, `actor_uid`, `payload` | 质量问题不可变处理时间线 | | `device_operational_events` | `source_uid`, `source_entity`, `source_code`, `event_type`, `asset_uid`, `component_uid`, `occurred_at`, `evidence_refs`, `content_hash` | 告警、故障、维修和停机事件的不可变来源证据 | | `device_evidence_relations` | `from_kind`, `from_uid`, `relation_type`, `to_kind`, `to_uid`, `evidence_refs`, `source` | 设备资产、运行事件和质量问题之间的有向证据关系 | | `ontologies` | `code`, `owner_uid`, `draft_revision`, `active_version_uid` | 本体稳定身份和生效版本 | | `ontology_versions` | `ontology_uid`, `version`, `parent_version_uid`, `graph_document`, `content_hash` | 不可变本体版本 | | `ontology_domain_links` | `ontology_uid`, `domain_uid`, `role` | 多业务域 owner/contributor/consumer 关系 | | `ontology_change_sets` | `base_version_uid`, `changes`, `decisions`, `status` | 动态建议及人工决策 | | `ontology_publish_runs` | `version_uid`, `idempotency_key`, `validation_result`, `status` | 幂等发布运行 | | `governance_domain_templates` | `template_code`, `lifecycle_status`, `current_version`, `content_hash`, `definition` | 领域模板稳定身份和当前规范化定义 | | `governance_domain_template_versions` | `template_uid`, `version`, `content_hash`, `definition`, `actor_uid` | 追加式领域模板历史版本 | | `governance_object_types` | `template_uid`, `type_code`, `source_identity_fields`, `stable_uid_prefix`, `current_version` | 可被业务域初始化的通用治理对象类型 | | `governance_domain_template_imports` | `template_uid`, `operation`, `version`, `target_version`, `before_state`, `after_state`, `diff` | 模板导入和回滚审计 | 环境级唯一生效约束:`UNIQUE (dataflow_uid, environment) WHERE status = 'active'`,保证同一环境只允许一个当前生效版本。 ## 4. 数据治理知识库映射 | 治理对象 | 来源 | 文档标识 | 触发方式 | |---|---|---|---| | 业务域定义 | Neo4j `BusinessDomain` | `business_domain:{uid}` | 变更后增量同步 | | 数据流程定义 | Neo4j `DataFlow` + 版本映射 | `dataflow:{uid}:{version}` | 变更/激活后增量同步 | | 元数据定义 | Neo4j `DataMeta` | `metadata:{uid}` | 审核落库后增量同步 | | 数据标准/标签 | Neo4j | `standard/label:{uid}` | 变更后增量同步 | | 全量校验 | Neo4j + PostgreSQL | 内容哈希 | 每日全量一致性巡检 | | 设备资产与运行事件 | PostgreSQL `device_assets`、授权后的来源映射和运行事件 | `device:{uid}:v{version}` | 查询时按数据源业务域直接检索,不复制事件原始证据 | 向量由 Qwen 的 embedding 模型生成;DeepSeek 只负责生成式问答。召回结果必须携带对象类型、业务域、版本、更新时间和访问范围,回答必须返回来源对象。 设备检索以 PostgreSQL canonical 数据为源真相:`ingestion_sources.permission_scope.business_domains` 为空时仅管理员可见;普通用户查询必须先在 SQL 的 `authorized_sources` 范围内完成来源 映射、事件聚合和文本匹配,候选进入 RRF 后再次按访问上下文授权。设备证据只包含平台 UID、名称、授权源 ID、位置、组织、责任人和授权事件类型/标题/源 ID,不包含数据源配置、 设备扩展属性、事件 `evidence_refs` 或凭据。LightRAG 仍是影子投影,不能绕过 canonical 授权、直接回答或阻断 canonical 发布。 问答只允许模型选择已召回证据的引用索引;引用无效、证据不足或模型不可用时回答为空, 页面仍可展示当前用户有权访问的检索证据。每次已执行检索和问答必须成功写入 `knowledge_query_audits`,但只保存规范化问题的 SHA-256、身份/角色/授权域、检索模式、 检索器计数、引用知识点身份、降级组件、关联 ID 和耗时。 ## 4.1 WP11 治理运营指标查询投影 WP11 不新增指标快照表,也不允许人工填报聚合结果。五项指标均在请求时从 PostgreSQL canonical 数据计算,并返回固定定义、分子、分母、比率和可用状态: | 指标 | 分子 | 分母 | |---|---|---| | 台账完整率 | 名称、位置、组织、责任人非空,且至少存在一个授权有效来源映射的在用设备 | 当前用户可见在用设备 | | 责任覆盖率 | 责任人非空的在用设备 | 当前用户可见在用设备 | | 实体映射率 | 参与有效且未回滚实体合并的在用设备 | 当前用户可见在用设备 | | 问题闭环率 | 状态为 `closed` 的可见质量问题 | 当前用户可见质量问题 | | 问题复发率 | `occurrence_number > 1` 的可见质量问题 | 当前用户可见质量问题 | 分母为零时返回 `rate = null` 和 `status = no_data`,不能用 0% 替代暂无数据。比率最多保留 六位小数。指标明细只返回设备 UID/名称/类型/位置/组织/责任人、授权来源编码、缺失字段、 有效合并 UID,以及质量问题编号、设备、规则、字段、优先级、状态、发生次数、责任人 UID、 期限、关闭时间和实时逾期标记;不返回 `device_assets.attributes`、质量问题 `message`/ `evidence`、数据源 `config`/`permission_scope` 或凭据。 授权沿用知识检索的服务端身份和业务域授权上下文。普通用户只可见映射到 `authorized_sources` 的在用设备;实体合并只有 canonical/member 两端均可见且没有回滚记录 时才能计入;质量问题优先按其明确 `source_uid` 或 `source_mapping_uid` 授权。管理员可统计 全部在用设备和问题。聚合与明细均在 SQL 查询阶段先授权,不依赖前端过滤。 该投影只完成设备域固定运营视图,不代表综合业务域评分、员工绩效、排名趋势、成熟度驾驶舱、 通用 BI、NL2SQL 或分析开发平台已经建设。 ## 4.2 WP12 安全审计查询投影与签名封存 WP12 不复制一套通用审计日志,也不把自由文本和业务证据汇总到新的高敏感表。审计中心以 现有 PostgreSQL 记录为源真相,只归一化以下六类第一阶段关键操作: | 类别代码 | 权威记录 | 安全投影 | |---|---|---| | `authentication` | `auth_audit_events` | 登录动作、成功/失败、用户身份和时间;不返回 IP、User-Agent 或详细错误 | | `ingestion` | `ingestion_jobs` | 采集类型、状态、操作者、数据源 UID、尝试次数和失败阶段;不返回参数、错误正文或源配置 | | `entity_resolution` | `device_entity_match_reviews`、`device_entity_merge_rollbacks` | 审批/拒绝/回滚、候选或合并 UID 和版本;不返回原因或快照 | | `publication` | `ontology_publish_runs`、`device_semantic_code_reviews`、`device_quality_profile_versions` | 本体、代码和质量策略发布/驳回状态与版本;不返回图文档、规则正文或审批原因 | | `remediation` | `device_quality_issue_timeline` | 状态动作、前后状态、问题 UID 和操作者;不返回备注、整改材料或证据正文 | | `knowledge_query` | `knowledge_query_audits` | 模式、引用/降级计数、关联 ID 和耗时;不返回问题原文、回答正文或访问网络标识 | 管理员可按时间窗、类别、操作和状态查看最多每页 100 条安全记录。页面中的“暂无记录”只表示 当前时间窗没有事件,不等于 0% 或审计能力缺失。查看与封存分别受 `governance-audit:read`、`governance-audit:seal` 权限控制,均只授予管理员。 `governance_audit_seals` 是追加式封存记录,保存时间窗、六类类别集合、事件数、根摘要、 HMAC-SHA256 签名、密钥版本、封存人和创建时间。封存过程先对每条规范化安全事件生成 SHA-256,再按稳定顺序生成根摘要,最后对封存元数据签名;复核时重新读取同一时间窗并计算。 单次封存上限为 50,000 条,超过时失败关闭。结果分为 `intact`、`tampered` 和 `invalid_signature`。封存结束时间不得晚于服务器当前时间,避免尚未闭合的时间窗因后续 正常事件被误判为篡改;前端日期按用户本地日历转换,并将当天结束时间收敛到当前时刻。 签名封存用于检测篡改,不等于阻止数据库管理员修改。生产环境必须配置至少 32 字节的独立 `AUDIT_EVIDENCE_SECRET` 并记录 `AUDIT_EVIDENCE_KEY_VERSION`;本地工程环境允许使用由 应用密钥派生的回退密钥,但安全检查明确标记为警告,不能据此通过企业安全验收。生产环境 缺少独立密钥时,封存与复核接口失败关闭。采集源明文秘密检查递归扫描嵌套 JSON 配置键, 不只检查顶层字段。五年保留目前是设计目标;定时归档、外部时间戳/不可变存储、法务保全 以及备份恢复证明仍需企业制度和 WP13 交付流程补齐。 ## 4.3 P2-WP01 通用治理对象与领域模板 领域模板只定义业务域的对象类型、字段、来源身份、责任角色、规则、指标和初始化数据, 不创建第二套领域资产服务。每个对象类型通过 `template_code + type_code + canonical source_identity` 计算 UUIDv5 稳定身份;来源身份字段必须在模板中显式声明且值非空。 模板定义使用 canonical JSON 和 SHA-256 内容哈希,版本只追加,不覆盖历史。 `dry-run` 只执行规范化、秘密字段检查和差异计算,不写数据库。正式导入在同一事务内更新 模板当前版本、追加不可变版本、物化对象类型并写入导入审计;任一步骤失败由 API 回滚整个 事务。回滚读取目标历史版本,但以新版本重新导入,保留原版本和回滚审计。被新模板移除的 对象类型只标记为 `retired`,不删除类型或业务数据。 P2-WP00 默认的“备品备件/物料主数据”模板包含物料、物料分类、仓库与库位、库存余额、 供应商物料映射、设备备件适配关系六类对象,以及三类责任角色、八条质量规则、三项运营 指标和来源/术语/流程初始化契约。企业真实连接、样本和人员仍需在 P2-WP12 前绑定,模板 不保存密码、令牌、连接串或真实网络地址。 ## 4.4 P2-WP02 主动元数据、字段血缘与纠错 主动元数据保留现有目录采集结果,并将跨批次当前态、不可变版本和变化证据持久化到 PostgreSQL。数据库目录采集产生新快照后,在同一事务中投影到匹配数据源的启用计划; 受控文件和 API 来源使用相同计划与批次契约,由其采集器提交规范化快照。每个计划使用 `plan_uid + batch_key` 保证幂等,游标只在成功批次后推进。 | 数据对象 | 作用 | 关键约束 | |---|---|---| | `active_metadata_plans` | 数据库、文件、API 的发现计划 | 来源、调度、发现模式、范围、游标和责任人显式记录 | | `active_metadata_runs` | 每次发现批次 | 计划内批次键唯一,保存游标前后值、内容哈希、统计和失败原因 | | `active_metadata_assets` | 来源资产当前态 | 来源与资产键唯一;缺失资产标记为 `deletion_candidate`,不物理删除 | | `active_metadata_asset_versions` | 资产不可变版本 | 内容变化才追加版本,并关联发现批次和操作者 | | `active_metadata_changes` | 资产与字段增量证据 | 记录新增、字段变化、字段删除候选和资产删除候选 | | `active_metadata_lineage` | 表级/字段级血缘 | 解析成功保存字段边;失败保存语句哈希和失败原因 | | `active_metadata_health_signals` | 资产健康时间序列 | 仅接受质量、新鲜度、任务失败和使用热度四类信号 | | `active_metadata_corrections` | 用户纠错当前态 | 指定责任人处置并采用乐观版本控制 | | `active_metadata_correction_audits` | 纠错不可变审计 | 提交和处置逐版本追加,不覆盖历史 | 主动发现不会直接覆盖 Neo4j 中已发布的治理元数据。发现变化先以候选和证据形式留在 PostgreSQL;用户纠错也只形成待责任人处置的版本化记录。后续发布仍需走既有评审和发布 门禁。SQL 字段血缘当前采用保守解析:无法可靠解析时失败关闭并保留原因,不猜测字段关系。 ## 4.5 P2-WP03 通用术语与标准 P2-WP03 复用现有不可变 `DataStandardVersion`、数据元素和本体服务,不复制数据标准服务, 新增业务术语、通用代码集和指标定义三类通用语义对象。三类对象统一采用 `draft → in_review → approved → published` 生命周期;创建者不得审批自己的版本,发布和 回滚只允许管理员。修订和回滚均追加新版本,旧发布版本标记为 `superseded`,审计不覆盖。 | 数据对象 | 作用 | 关键约束 | |---|---|---| | `semantic_assets` | 术语、代码集和指标当前态 | 类型与编码唯一,显式责任人和业务域,乐观版本控制 | | `semantic_asset_versions` | 不可变语义版本 | canonical JSON 哈希;回滚保存目标版本号 | | `semantic_asset_reviews` | 独立审批记录 | 创建者与审批者分离,审批理由必填 | | `semantic_asset_links` | 资产、数据元素、标准版本和代码值引用 | 只允许引用活动资产、已发布数据元素/标准/代码值 | | `data_element_field_mappings` | 物理字段到逻辑数据元素映射 | 物理字段必须来自活动主动元数据,数据元素必须已发布 | | `semantic_publication_audits` | 发布链审计 | 创建、修订、提交、审批、发布、回滚和映射均追加记录 | 业务术语保存定义、别名、责任人和关联对象;代码集校验代码唯一、父代码完整性和跨对象引用; 指标只保存定义、公式、单位、维度、责任人和关联资产,拒绝 SQL、脚本、查询或运行时字段, 不提供 BI 计算引擎。语义对象提供安全 JSON 和受控 RDF/XML 导出;本体继续使用既有 JSON/OWL 交换接口,不把普通语义 JSON 冒充 OWL。 语义对象、数据标准和本体发布分别写入 `semantic_asset.version_published`、 `data_standard.version_published` 和 `ontology.version_published` outbox 事件。默认消费者 只领取这三类已注册事件,避免误消费其他业务事件;只有在知识库启用、Qwen 凭据齐备且活动 embedding profile 与模型、维度一致时才同步 PostgreSQL canonical 治理知识。配置未就绪时 事件保留为 pending,不跳过授权、不降级为未受治理向量,也不让 LightRAG 旁路成为源真相。 ## 4.6 P2-WP04 通用质量运营 通用质量模板使用语义字段角色和执行绑定复用质量策略,不把设备或备品备件物理字段写入 平台模板。模板和版本使用 canonical JSON 哈希;只有已发布版本可执行。每次执行固定关联 主动元数据资产、来源、模板版本和批次键,同一资产内批次键唯一。 | 数据对象 | 作用 | 关键约束 | |---|---|---| | `quality_templates` | 通用质量模板当前态 | 编码唯一,显式责任人、当前版本和活动发布版本 | | `quality_template_versions` | 不可变模板版本 | 定义哈希去重,同一模板只允许一个已发布版本 | | `quality_profile_runs` | 确定性画像执行批次 | 关联资产、来源、模板版本、业务域、上批次和字段绑定;拒绝 AI 判定 | | `quality_profile_metrics` | 字段画像 | 保存完整率、唯一性、空值、类型、分布、模式和不可逆样例摘要 | | `quality_findings` | 异常与退化发现 | 保存稳定复发键、发生次数、实际/阈值以及血缘、变更、运行和责任证据 | | `quality_sla_events` | 新鲜度和质量得分 SLA | 保存达标、违约、恢复、责任人和升级级别 | 执行输入限制为最多 5,000 行、每行最多 200 个标量字段、总计 200,000 个单元格和 800 万字符,并拒绝高风险正则。分布和样例不保存原始值,只保存不可逆 SHA-256 摘要。 服务端从主动元数据读取资产、血缘、变更和采集运行证据,客户端不能提交根因证据覆盖 canonical 数据。画像与异常只用于数据运营与治理,不提供任意 SQL、在线分析、BI 计算或 自动修复。 ## 5. 所有权与删除规则 - PostgreSQL 是身份、权限、映射、任务状态、布局和一致性事件的源真相。 - Neo4j 是治理对象结构和血缘的源真相。 - MinIO 是附件原件的源真相;PostgreSQL 只保存对象键和元数据。 - n8n 是 Workflow 定义与执行记录的源真相;平台保存治理映射和生效状态。 - 本体与数据元素的发布版本以 PostgreSQL 为源真相;Neo4j 是可重建的已发布语义投影。 - 设备资产、源编码映射和不可变版本以 PostgreSQL 为源真相;跨来源匹配、合并与回滚在 WP-06 经审核后实施。 - 实体匹配候选、审核、主资产关联和回滚证据以 PostgreSQL 为源真相;合并是可撤销关系,不删除、不搬迁设备资产、来源映射或历史版本。 - 规则自动合并默认关闭,只允许显式开闸后的确定性规则高置信度候选;AI 候选始终进入人工审核。 - 设备质量策略版本、执行结果、规则计数、违规样本和资产评分以 PostgreSQL 为源真相;检查只读设备资产和已发布语义代码,不修改来源台账。 - 质量问题、整改轮次和处理时间线以 PostgreSQL 为源真相;问题保存 WP-07 违规的安全证据快照,状态变更采用乐观锁,关闭必须由 `quality_issue/DEVICE_QUALITY_ISSUES` 唯一负责的设备资产管理员独立复核。逾期由期限和未关闭状态实时计算,复发由规则、资产和字段的确定性身份统计,不等同于自动根因结论。 - 设备运行事件和有向证据关系以 PostgreSQL 为源真相;关系图是最多三跳、100 个节点和 200 条边的可重建查询投影。根因分析只沿 `indicates`、`triggered` 和 `evidences` 上游关系返回候选及证据路径;没有持久化路径时必须返回“证据不足,无法确认根因”,结果不触发自动修复或维修计划。 - 设备知识检索直接读取授权后的 PostgreSQL canonical 资产、来源映射和运行事件;不建立第二份设备主数据,不读取来源配置和事件原始证据。问答不能替代 WP-09 的证据路径或设备专家根因结论。 - 治理运营指标是 PostgreSQL canonical 数据的实时只读查询投影;不保存人工覆盖值。指标汇总与明细必须使用同一业务域授权边界,跨域合并只有两端均可见时才能计入非管理员结果。 - 审计中心只读取六类现有权威记录的安全投影;`governance_audit_seals` 只追加封存摘要和签名,不接收原始问题、凭据、来源配置、自由文本备注或证据正文。 - 领域模板、模板版本、通用对象类型和导入审计以 PostgreSQL 为源真相;模板只描述对象契约,不替代设备台账或复制第二套资产服务。模板回滚追加新版本,被移除对象类型只退役、不删除。 - 主动元数据计划、批次、资产当前态、不可变版本、变化候选、字段血缘、健康信号和纠错审计以 PostgreSQL 为源真相;现有目录快照继续作为批次输入证据。删除只形成候选,解析失败保留原因,发现或纠错不能绕过既有发布门禁覆盖 Neo4j 已发布元数据。 - 业务术语、通用代码集、指标口径、物理字段映射、不可变版本、独立审批和发布审计以 PostgreSQL 为源真相;标准版本继续复用既有不可变发布门禁。指标口径不是执行计划,发布后通过 outbox 同步 canonical 治理知识,知识同步配置未就绪时事件不得丢失。 - 通用质量模板、版本、画像批次、字段指标、异常发现和 SLA 事件以 PostgreSQL 为源真相;主动元数据资产是质量对象身份和根因证据的权威来源。复发次数和升级级别为确定性运营证据,不等同于自动因果结论或自动修复授权。 - 设备本体、故障/原因/措施代码身份、不可变代码版本和审批记录以 PostgreSQL 为源真相;Neo4j 只接收通过发布门禁的本体投影。 - `DEVICE_SEMANTIC` 本体发布必须同时通过通用图校验、设备语义覆盖度校验和设备资产负责人校验;代码审批复用同一责任矩阵门禁。 - 本轮只清理代码和建库脚本。生产表必须在数据核查、备份和依赖确认后以独立变更单下线。