Commit a2314f0c authored by drigle's avatar drigle

docs: sync model monitor subject definitions

parent 87f2ef5a
...@@ -36,118 +36,7 @@ type Record = { ...@@ -36,118 +36,7 @@ type Record = {
- 多值字段保存数组。 - 多值字段保存数组。
- Select 选项必须来自 Subject 字段的 `settings.options`。 - Select 选项必须来自 Subject 字段的 `settings.options`。
## 2. 固定 Subject ## 动态模型数据 Subject
### 2.1 `model_monitor_group`
| 标签 | 别名 | 类型 | 多值 | 必填 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 分组名称 | `group_name` | text | 否 | 是 | 模型分组显示名称 |
| 父分组 ID | `parent_group_id` | text | 否 | 否 | 空值表示一级分组 |
| 创建人 ID | `created_by_user_id` | text | 否 | 否 | 仅保存用户 ID |
| 创建人名称 | `created_by_user_name` | text | 否 | 否 | 冗余展示字段 |
### 2.2 `model_monitor_model`
| 标签 | 别名 | 类型 | 多值 | 必填 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 来源模型 ID | `source_model_id` | text | 否 | 是 | `ANALYZE_MXVIEW_INFO.ID`,与 `model_code` 组成同步唯一键 |
| 模型编码 | `model_code` | text | 否 | 是 | `MODEL_NAME`,与来源模型 ID 组成同步唯一键 |
| 模型名称 | `model_name` | text | 否 | 是 | 外部模型显示名称,本地不可编辑 |
| 来源模型数据更新时间 | `source_model_updated_at` | date | 否 | 否 | `MODEL_DATA_UPDATE_TIME` 转 ISO 8601 |
| 模型状态 | `model_state` | text | 否 | 否 | `MODEL_STATE` |
| 模型应用状态 | `model_apply_state` | text | 否 | 否 | `MODEL_APPLY_STATE` |
| 模型风险等级 | `model_risk_level` | text | 否 | 否 | `MODEL_RISK_LEVEL` |
| 模型业务类型 | `model_business_type` | text | 否 | 否 | `MODEL_BUSINESS_TYPE` |
| 模型业务类型名称 | `model_business_type_name` | text | 否 | 否 | `MODEL_BUSINESS_TYPE_NAME` |
| 模型说明 | `description` | long_text | 否 | 否 | 本地归档说明 |
| 所属分组 ID | `group_id` | text | 否 | 否 | 关联模型分组 ID |
| 所属分组名称 | `group_name` | text | 否 | 否 | 冗余展示字段 |
| 模型标签 | `tags` | text | 是 | 否 | 本地检索标签 |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 自动创建的动态 Subject 名称 |
| 最近同步状态 | `last_sync_status` | select | 否 | 否 | `syncing/success/partial/failed` |
| 最近同步时间 | `last_synced_at` | date | 否 | 否 | ISO 8601 |
| 创建人 ID | `created_by_user_id` | text | 否 | 否 | 首次同步用户 ID |
| 创建人名称 | `created_by_user_name` | text | 否 | 否 | 首次同步用户名称 |
### 2.3 `model_monitor_batch`
| 标签 | 别名 | 类型 | 多值 | 必填 | 说明 |
| --- | --- | --- | --- | --- | --- |
| 模型 ID | `model_id` | text | 否 | 是 | 仅保存模型 Record ID |
| 模型编码 | `model_code` | text | 否 | 是 | 冗余展示字段 |
| 模型名称 | `model_name` | text | 否 | 是 | 冗余展示字段 |
| 批次编码 | `batch_code` | text | 否 | 是 | 直接保存 `MODEL_RUN_BATCH_ID`,来源批次唯一键 |
| 批次名称 | `batch_name` | text | 否 | 是 | 外部批次显示名称 |
| 来源跑批时间 | `source_batch_date` | date | 否 | 否 | `MODEL_RUN_BATCH_DATE` 转 ISO 8601 |
| 来源数据表 | `source_data_table_name` | text | 否 | 是 | `MODEL_DATA_TABLE_NAME`,只允许白名单标识符 |
| 来源备注 | `source_remark` | long_text | 否 | 否 | `REMARK` |
| 来源未检查数量 | `source_unchecked_count` | number | 否 | 否 | `UNCHECKED_CNT` |
| 来源未提交数量 | `source_unsubmitted_count` | number | 否 | 否 | `UNSUBMITTED_CNT` |
| 来源已复核数量 | `source_reviewed_count` | number | 否 | 否 | `REVIEWED_CNT` |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 当前模型动态 Subject |
| 字段快照 | `column_schema` | object | 是 | 否 | 当前批次最近同步的 `{name,label,type}` 列表 |
| 隐藏记录 ID | `hidden_record_ids` | text | 是 | 否 | 批次级手动隐藏的稳定 Record name |
| 同步状态 | `sync_status` | select | 否 | 是 | `syncing/success/partial/failed` |
| 源数据数量 | `source_row_count` | number | 否 | 否 | `MODEL_DATA_CNT` 与实际读取数量校验后的行数 |
| 本地数据数量 | `total_record_count` | number | 否 | 否 | 本次导入后保存成功的总数 |
| 新增数量 | `inserted_count` | number | 否 | 否 | 本次同步新增数 |
| 更新数量 | `updated_count` | number | 否 | 否 | 兼容字段,一次性同步固定为 0 |
| 失败数量 | `failed_count` | number | 否 | 否 | 最近同步失败数 |
| 同步开始时间 | `sync_started_at` | date | 否 | 否 | 用于前端防重和超时判断 |
| 同步完成时间 | `synced_at` | date | 否 | 否 | ISO 8601 |
| 同步人 ID | `synced_by_id` | text | 否 | 否 | 最近同步用户 ID |
| 同步人名称 | `synced_by_name` | text | 否 | 否 | 最近同步用户名称 |
| 错误摘要 | `error_message` | long_text | 否 | 否 | 失败或部分成功原因 |
### 2.4 `model_monitor_forward_record`
| 标签 | 别名 | 类型 | 多值 | 必填 |
| --- | --- | --- | --- | --- |
| 模型 ID | `model_id` | text | 否 | 是 |
| 模型名称 | `model_name` | text | 否 | 否 |
| 批次 ID | `batch_id` | text | 否 | 是 |
| 批次编码 | `batch_code` | text | 否 | 否 |
| 批次名称 | `batch_name` | text | 否 | 否 |
| 数据对象 | `data_subject_name` | text | 否 | 是 |
| 下发记录 ID | `selected_record_ids` | text | 是 | 是 |
| 接收人 ID | `recipient_ids` | text | 是 | 否 |
| 接收人名称 | `recipient_names` | text | 是 | 否 |
| 不下发记录 ID | `excluded_record_ids` | text | 是 | 否 |
| 转发说明 | `note` | long_text | 否 | 是 |
| 填写状态 | `editor_status` | select | 否 | 是 |
| 完成人 ID/名称 | `completed_by_id` / `completed_by_name` | text | 否 | 否 |
| 完成时间 | `completed_at` | date | 否 | 否 |
| 一级审批状态 | `approval_status` | select | 否 | 是 |
| 终审状态 | `final_approval_status` | select | 否 | 是 |
| 一级审批人 ID/名称 | `first_approver` / `first_approver_name` | text | 否 | 是/否 |
| 终审人 ID/名称 | `final_approver` / `final_approver_name` | text | 否 | 是/否 |
| 发起人 ID/名称 | `initiator_id` / `initiator_name` | text | 否 | 否 |
状态选项由字段 `settings.options` 提供:填写状态为 `editing/completed`,审批状态为 `pending/approved/rejected`。任一审批环节驳回后将 `editor_status` 重置为 `editing`;接收人重新完成填写时,两级审批状态均重置为 `pending`。
### 2.5 `model_monitor_forward_item`
| 标签 | 别名 | 类型 | 多值 | 必填 |
| --- | --- | --- | --- | --- |
| 转发批次 ID | `forward_record_id` | text | 否 | 是 |
| 转发批次名称 | `forward_record_title` | text | 否 | 否 |
| 模型 ID/名称 | `model_id` / `model_name` | text | 否 | 是/否 |
| 批次 ID/名称 | `batch_id` / `batch_name` | text | 否 | 是/否 |
| 数据对象 | `data_subject_name` | text | 否 | 是 |
| 源记录 ID/标题 | `source_record_id` / `source_record_title` | text | 否 | 是/否 |
| 是否属实 | `truth_status` | select | 否 | 否 |
| 整改方案 | `rectification_plan` | long_text | 否 | 否 |
| 预计整改完成时间 | `expected_rectification_completed_at` | date | 否 | 否 |
| 填写人 ID/名称 | `filled_by_id` / `filled_by_name` | text | 否 | 否 |
| 填写时间 | `filled_at` | date | 否 | 否 |
| 备注 | `remark` | long_text | 否 | 否 |
`truth_status` 选项必须来自 `settings.options`,当前值为 `truthful/untruthful`。
上述三个回填字段在 Subject 层保持可选,以允许转发发起时先创建空白明细并分次保存。未填写时不向 `metadata` 写入这三个字段,不使用空字符串占位;前端界面仍标记为必填,并在“完成填写”时校验三项均已填写。
## 3. 动态模型数据 Subject
每个模型首次同步时按 `ANALYZE_MXVIEW_INFO.MODEL_NAME + ID` 自动创建稳定的 `model_monitor_data_<stable_id>` 普通动态数据 Subject,后续批次继续使用同一 Subject。 每个模型首次同步时按 `ANALYZE_MXVIEW_INFO.MODEL_NAME + ID` 自动创建稳定的 `model_monitor_data_<stable_id>` 普通动态数据 Subject,后续批次继续使用同一 Subject。
...@@ -167,7 +56,7 @@ type Record = { ...@@ -167,7 +56,7 @@ type Record = {
结果行不配置业务主键。数据 Record `name` 由 `MODEL_RUN_BATCH_ID + source_row_number` 生成稳定哈希,只执行一次性新增,不查询或更新已有结果行。 结果行不配置业务主键。数据 Record `name` 由 `MODEL_RUN_BATCH_ID + source_row_number` 生成稳定哈希,只执行一次性新增,不查询或更新已有结果行。
## 4. 当前约束 ## 当前约束
- 模型和批次不提供删除。 - 模型和批次不提供删除。
- 模型仅由同步自动创建,来源模型 ID、模型编码和名称不可本地修改。 - 模型仅由同步自动创建,来源模型 ID、模型编码和名称不可本地修改。
...@@ -175,3 +64,149 @@ type Record = { ...@@ -175,3 +64,149 @@ type Record = {
- 固定 Subject 在开发阶段由前端检查并创建为普通对象;正式环境应由部署流程预建。 - 固定 Subject 在开发阶段由前端检查并创建为普通对象;正式环境应由部署流程预建。
- 已存在的 Subject 自动补充新字段时先按可选字段添加,以兼容历史 Record;新同步数据仍由 service 层执行必填校验。 - 已存在的 Subject 自动补充新字段时先按可选字段添加,以兼容历史 Record;新同步数据仍由 service 层执行必填校验。
- Subject/Record 写入失败必须明确报错,不得回退 localStorage。 - Subject/Record 写入失败必须明确报错,不得回退 localStorage。
## 2. Subject Definitions
<!-- SUBJECT_SCHEMA_SYNC:START -->
> 同步根对象:`model_monitor_group`、`model_monitor_model`、`model_monitor_batch`、`model_monitor_forward_record`、`model_monitor_forward_item`
> 当前依赖闭包:5 个 Subject。
### `model_monitor_group`:模型分组
- 类型:`normal`
- 字段数量:4
- 说明:模型分组自动配置
| 字段标签 | 字段别名 | 字段类型 | 多值 | 必填 | 主键 | 关联/配置 |
| --- | --- | --- | --- | --- | --- | --- |
| 分组名称 | `group_name` | text | 否 | 是 | 否 | |
| 父分组 ID | `parent_group_id` | text | 否 | 否 | 否 | |
| 创建人 ID | `created_by_user_id` | text | 否 | 否 | 否 | |
| 创建人名称 | `created_by_user_name` | text | 否 | 否 | 否 | |
### `model_monitor_model`:模型主档
- 类型:`normal`
- 字段数量:19
- 说明:模型主档自动配置
| 字段标签 | 字段别名 | 字段类型 | 多值 | 必填 | 主键 | 关联/配置 |
| --- | --- | --- | --- | --- | --- | --- |
| 模型编码 | `model_code` | text | 否 | 是 | 否 | |
| 模型名称 | `model_name` | text | 否 | 是 | 否 | |
| 模型说明 | `description` | long_text | 否 | 否 | 否 | |
| 所属分组 ID | `group_id` | text | 否 | 否 | 否 | |
| 所属分组名称 | `group_name` | text | 否 | 否 | 否 | |
| 模型标签 | `tags` | text | 是 | 否 | 否 | |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 否 | |
| 组合主键字段 | `primary_key_fields` | text | 是 | 是 | 否 | |
| 最近同步状态 | `last_sync_status` | select | 否 | 否 | 否 | options: syncing, success, partial, failed |
| 最近同步时间 | `last_synced_at` | date | 否 | 否 | 否 | |
| 创建人 ID | `created_by_user_id` | text | 否 | 否 | 否 | |
| 创建人名称 | `created_by_user_name` | text | 否 | 否 | 否 | |
| 来源模型 ID | `source_model_id` | text | 否 | 否 | 否 | |
| 来源模型数据更新时间 | `source_model_updated_at` | date | 否 | 否 | 否 | |
| 模型状态 | `model_state` | text | 否 | 否 | 否 | |
| 模型应用状态 | `model_apply_state` | text | 否 | 否 | 否 | |
| 模型风险等级 | `model_risk_level` | text | 否 | 否 | 否 | |
| 模型业务类型 | `model_business_type` | text | 否 | 否 | 否 | |
| 模型业务类型名称 | `model_business_type_name` | text | 否 | 否 | 否 | |
### `model_monitor_batch`:模型批次
- 类型:`normal`
- 字段数量:25
- 说明:模型批次自动配置
| 字段标签 | 字段别名 | 字段类型 | 多值 | 必填 | 主键 | 关联/配置 |
| --- | --- | --- | --- | --- | --- | --- |
| 模型 ID | `model_id` | text | 否 | 是 | 否 | |
| 模型编码 | `model_code` | text | 否 | 是 | 否 | |
| 模型名称 | `model_name` | text | 否 | 是 | 否 | |
| 批次编码 | `batch_code` | text | 否 | 是 | 否 | |
| 批次名称 | `batch_name` | text | 否 | 是 | 否 | |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 否 | |
| 字段快照 | `column_schema` | object | 否 | 否 | 否 | |
| 隐藏记录 ID | `hidden_record_ids` | text | 是 | 否 | 否 | |
| 同步状态 | `sync_status` | select | 否 | 是 | 否 | options: syncing, success, partial, failed |
| 源数据数量 | `source_row_count` | number | 否 | 否 | 否 | |
| 本地数据数量 | `total_record_count` | number | 否 | 否 | 否 | |
| 新增数量 | `inserted_count` | number | 否 | 否 | 否 | |
| 更新数量 | `updated_count` | number | 否 | 否 | 否 | |
| 失败数量 | `failed_count` | number | 否 | 否 | 否 | |
| 同步开始时间 | `sync_started_at` | date | 否 | 否 | 否 | |
| 同步完成时间 | `synced_at` | date | 否 | 否 | 否 | |
| 同步人 ID | `synced_by_id` | text | 否 | 否 | 否 | |
| 同步人名称 | `synced_by_name` | text | 否 | 否 | 否 | |
| 错误摘要 | `error_message` | long_text | 否 | 否 | 否 | |
| 来源跑批时间 | `source_batch_date` | date | 否 | 否 | 否 | |
| 来源数据表 | `source_data_table_name` | text | 否 | 否 | 否 | |
| 来源备注 | `source_remark` | long_text | 否 | 否 | 否 | |
| 来源未检查数量 | `source_unchecked_count` | number | 否 | 否 | 否 | |
| 来源未提交数量 | `source_unsubmitted_count` | number | 否 | 否 | 否 | |
| 来源已复核数量 | `source_reviewed_count` | number | 否 | 否 | 否 | |
### `model_monitor_forward_record`:模型转发审批记录
- 类型:`normal`
- 字段数量:23
- 说明:模型转发审批记录自动配置
| 字段标签 | 字段别名 | 字段类型 | 多值 | 必填 | 主键 | 关联/配置 |
| --- | --- | --- | --- | --- | --- | --- |
| 模型 ID | `model_id` | text | 否 | 是 | 否 | |
| 模型名称 | `model_name` | text | 否 | 否 | 否 | |
| 批次 ID | `batch_id` | text | 否 | 是 | 否 | |
| 批次编码 | `batch_code` | text | 否 | 否 | 否 | |
| 批次名称 | `batch_name` | text | 否 | 否 | 否 | |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 否 | |
| 下发记录 ID | `selected_record_ids` | text | 是 | 是 | 否 | |
| 接收人 ID | `recipient_ids` | text | 是 | 否 | 否 | |
| 接收人名称 | `recipient_names` | text | 是 | 否 | 否 | |
| 不下发记录 ID | `excluded_record_ids` | text | 是 | 否 | 否 | |
| 转发说明 | `note` | long_text | 否 | 是 | 否 | |
| 填写状态 | `editor_status` | select | 否 | 是 | 否 | options: editing, completed |
| 完成人 ID | `completed_by_id` | text | 否 | 否 | 否 | |
| 完成人名称 | `completed_by_name` | text | 否 | 否 | 否 | |
| 完成时间 | `completed_at` | date | 否 | 否 | 否 | |
| 一级审批状态 | `approval_status` | select | 否 | 是 | 否 | options: pending, approved, rejected |
| 终审状态 | `final_approval_status` | select | 否 | 是 | 否 | options: pending, approved, rejected |
| 一级审批人 | `first_approver` | text | 否 | 是 | 否 | |
| 一级审批人名称 | `first_approver_name` | text | 否 | 否 | 否 | |
| 终审人 | `final_approver` | text | 否 | 是 | 否 | |
| 终审人名称 | `final_approver_name` | text | 否 | 否 | 否 | |
| 发起人 ID | `initiator_id` | text | 否 | 否 | 否 | |
| 发起人名称 | `initiator_name` | text | 否 | 否 | 否 | |
### `model_monitor_forward_item`:模型转发回填明细
- 类型:`normal`
- 字段数量:16
- 说明:模型转发回填明细自动配置
| 字段标签 | 字段别名 | 字段类型 | 多值 | 必填 | 主键 | 关联/配置 |
| --- | --- | --- | --- | --- | --- | --- |
| 转发批次 ID | `forward_record_id` | text | 否 | 是 | 否 | |
| 转发批次名称 | `forward_record_title` | text | 否 | 否 | 否 | |
| 模型 ID | `model_id` | text | 否 | 是 | 否 | |
| 模型名称 | `model_name` | text | 否 | 否 | 否 | |
| 批次 ID | `batch_id` | text | 否 | 是 | 否 | |
| 批次名称 | `batch_name` | text | 否 | 否 | 否 | |
| 数据对象 | `data_subject_name` | text | 否 | 是 | 否 | |
| 源记录 ID | `source_record_id` | text | 否 | 是 | 否 | |
| 源记录标题 | `source_record_title` | text | 否 | 否 | 否 | |
| 是否属实 | `truth_status` | select | 否 | 否 | 否 | options: truthful, untruthful |
| 整改方案 | `rectification_plan` | long_text | 否 | 否 | 否 | |
| 预计整改完成时间 | `expected_rectification_completed_at` | date | 否 | 否 | 否 | |
| 填写人 ID | `filled_by_id` | text | 否 | 否 | 否 | |
| 填写人名称 | `filled_by_name` | text | 否 | 否 | 否 | |
| 填写时间 | `filled_at` | date | 否 | 否 | 否 | |
| 备注 | `remark` | long_text | 否 | 否 | 否 | |
### 关联对象与子对象定义
依赖字段通过 `settings.subject` 指向的对象会递归纳入本节;`form` 资源不属于 Subject 依赖。
<!-- SUBJECT_SCHEMA_SYNC:END -->
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment