Commit 90f936e8 authored by David Yang's avatar David Yang

feat: refine risk case library schema docs

parent 7ec600da
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
"clsx": "^2.1.1", "clsx": "^2.1.1",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"echarts": "^6.1.0",
"echarts-for-react": "^3.0.6",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"tailwindcss": "^4.2.0", "tailwindcss": "^4.2.0",
...@@ -10274,6 +10276,36 @@ ...@@ -10274,6 +10276,36 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/echarts": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.1.0.tgz",
"integrity": "sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "2.3.0",
"zrender": "6.1.0"
}
},
"node_modules/echarts-for-react": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.6.tgz",
"integrity": "sha512-4zqLgTGWS3JvkQDXjzkR1k1CHRdpd6by0988TWMJgnvDytegWLbeP/VNZmMa+0VJx2eD7Y632bi2JquXDgiGJg==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"size-sensor": "^1.0.1"
},
"peerDependencies": {
"echarts": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
"react": "^15.0.0 || >=16.0.0"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
},
"node_modules/ee-first": { "node_modules/ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -18544,6 +18576,12 @@ ...@@ -18544,6 +18576,12 @@
"integrity": "sha512-9SQdmsyz4HSP+3gs6PJzhkaMEg+6zTlu9oxIghnwUX3eq+ajq4ft5egl0iyR55LAmO/UwvU8NgIWs/ZyQMa6dw==", "integrity": "sha512-9SQdmsyz4HSP+3gs6PJzhkaMEg+6zTlu9oxIghnwUX3eq+ajq4ft5egl0iyR55LAmO/UwvU8NgIWs/ZyQMa6dw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/size-sensor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/size-sensor/-/size-sensor-1.0.3.tgz",
"integrity": "sha512-+k9mJ2/rQMiRmQUcjn+qznch260leIXY8r4FyYKKyRBO/s5UoeMAHGkCJyE1R/4wrIhTJONfyloY55SkE7ve3A==",
"license": "ISC"
},
"node_modules/slash": { "node_modules/slash": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
...@@ -21265,6 +21303,21 @@ ...@@ -21265,6 +21303,21 @@
"peerDependencies": { "peerDependencies": {
"zod": "^3.18.0" "zod": "^3.18.0"
} }
},
"node_modules/zrender": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.1.0.tgz",
"integrity": "sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==",
"license": "BSD-3-Clause",
"dependencies": {
"tslib": "2.3.0"
}
},
"node_modules/zrender/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
} }
} }
} }
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
"clsx": "^2.1.1", "clsx": "^2.1.1",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
"echarts": "^6.1.0",
"echarts-for-react": "^3.0.6",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"tailwindcss": "^4.2.0", "tailwindcss": "^4.2.0",
......
...@@ -7,13 +7,13 @@ ...@@ -7,13 +7,13 @@
- 导入线下 Excel 维护的案例数据 - 导入线下 Excel 维护的案例数据
- 支持手动创建、编辑、删除案例 - 支持手动创建、编辑、删除案例
- 提供更直观的案例浏览体验 - 提供更直观的案例浏览体验
- 支持按关键词、分类、标签快速检索典型案例 - 支持按关键词、案例性质、案例来源、案例等级快速检索典型案例
- 为培训、复盘、经验沉淀提供统一入口 - 为培训、复盘、经验沉淀提供统一入口
当前阶段的核心原则是: 当前阶段的核心原则是:
- 每条案例对应一条独立 `Record` - 每条案例对应一条独立 `Record`
- 案例正文以文本为主,不额外拆分附件对象 - 案例详情以文本为主,不额外拆分附件对象
- 页面优先保证“看起来直观、方便查” - 页面优先保证“看起来直观、方便查”
--- ---
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
推荐职责划分: 推荐职责划分:
- `案例总览` - `案例总览`
- 展示案例总数、分类分布、标签热度、最近更新 - 展示案例总数、案例性质分布、关键字热度、最近更新
- 通过图表展示案例性质占比、案例年份分布、近 7 日更新活跃度
- 提供对库内内容密度和结构完整度的快速判断 - 提供对库内内容密度和结构完整度的快速判断
- `案例管理` - `案例管理`
- 搜索、筛选、浏览案例卡片 - 搜索、筛选、浏览案例卡片
...@@ -48,9 +49,15 @@ ...@@ -48,9 +49,15 @@
关键字段: 关键字段:
- `label`:案例标题 - `label`:案例标题
- `content`:案例正文 - `case_type`:案例类型,列表与导入模板的主展示字段
- `category`:案例分类 - `case_attribute`:案例属性
- `tag`:检索标签 - `category`:案例性质
- `case_details`:案例详情正文
- `case_warning`:案件警示
- `keyword`:关键字,用于检索和热度统计
- `case_source`:案例来源
- `case_level`:案例等级
- `case_year`:案例年份
--- ---
...@@ -60,7 +67,7 @@ ...@@ -60,7 +67,7 @@
1. 用户进入 `案例管理` 1. 用户进入 `案例管理`
2. 点击 `手动新建` 2. 点击 `手动新建`
3. 填写标题、内容、分类、标签 3. 填写案例类型、案例属性、案例性质、案例详情、案件警示、关键字、案例来源、案例等级、案例年份
4. 前端调用 `POST /record` 4. 前端调用 `POST /record`
5. 成功后生成一条 `risk_case_library` 记录 5. 成功后生成一条 `risk_case_library` 记录
6. 页面顶部提示创建成功,并刷新当前列表 6. 页面顶部提示创建成功,并刷新当前列表
...@@ -72,31 +79,54 @@ ...@@ -72,31 +79,54 @@
2. 点击 `Excel 导入` 2. 点击 `Excel 导入`
3. 上传 `.xlsx`、`.xls` 或 `.csv` 3. 上传 `.xlsx`、`.xls` 或 `.csv`
4. 前端读取首个工作表并解析表头 4. 前端读取首个工作表并解析表头
5. 按以下映射生成记录: 5. Excel 表头按以下模板解析:
- `标题` 或 `label` → `metadata.label` - `案例类型` → `metadata.case_type`,同时作为 `title` 与 `metadata.label`
- `内容` 或 `content` → `metadata.content` - `案例属性` → `metadata.case_attribute`
- `分类` 或 `category` → `metadata.category` - `案例性质` → `metadata.category`
- `标签` 或 `tag` → `metadata.tag` - `案例详情` → `content`、`metadata.case_details`
6. 前端逐条调用 `POST /record` 批量落库 - `案件警示` → `metadata.case_warning`
7. 导入完成后反馈成功条数和失败条数 - `关键字` → `metadata.keyword`,同时回填 `metadata.tag` 以兼容现有检索
- `案例来源` → `metadata.case_source`
- `案例等级` → `metadata.case_level`
- `案例年份` → `metadata.case_year`
6. 前端兼容旧模板字段名,但新导入导出统一使用上述 9 列模板
7. 前端逐条调用 `POST /record` 批量落库
8. 导入完成后反馈成功条数和失败条数
### 4.3 Excel 批量导出案例
### 4.3 浏览与检索案例 1. 用户进入 `案例管理`
2. 点击 `Excel 批量导出`
3. 前端按当前搜索词、案例性质与关键字筛选条件查询全部案例
4. 导出文件统一输出以下 9 列:
- `案例类型`
- `案例属性`
- `案例性质`
- `案例详情`
- `案件警示`
- `关键字`
- `案例来源`
- `案例等级`
- `案例年份`
5. 浏览器直接下载 `.xlsx` 文件
### 4.4 浏览与检索案例
1. 用户进入 `案例管理` 1. 用户进入 `案例管理`
2. 通过关键词搜索标题、内容、分类、标签 2. 通过搜索框检索案例类型、案例属性、案例详情、案件警示、关键字、案例来源、案例等级
3. 通过分类标签快速切换当前视图 3. 通过案例性质标签快速切换当前视图
4. 通过标签输入框进一步缩小范围 4. 通过关键字输入框进一步缩小范围,前端同时兼容历史 `metadata.tag`
5. 页面以卡片方式展示案例摘要 5. 页面以卡片方式展示案例摘要
6. 点击卡片后,以弹框方式查看并编辑详情 6. 点击卡片后,以弹框方式查看并编辑详情
### 4.4 编辑案例 ### 4.5 编辑案例
1. 用户在列表中打开某个案例详情 1. 用户在列表中打开某个案例详情
2. 修改标题、内容、分类、标签 2. 修改案例类型、案例属性、案例性质、案例详情、案件警示、关键字、案例来源、案例等级、案例年份
3. 前端调用 `PUT /record/:name` 3. 前端调用 `PUT /record/:name`
4. 保存成功后刷新列表与统计数据 4. 保存成功后刷新列表与统计数据
### 4.5 删除案例 ### 4.6 删除案例
1. 用户在案例详情内点击删除 1. 用户在案例详情内点击删除
2. 页面弹出二次确认 2. 页面弹出二次确认
...@@ -118,14 +148,16 @@ ...@@ -118,14 +148,16 @@
- 未识别到的列忽略,不中断导入 - 未识别到的列忽略,不中断导入
- 空行直接跳过 - 空行直接跳过
- 标题为空时,使用正文摘要自动生成 `title` - `案例类型` 为空时,使用 `标题` 或 `案例详情` 摘要自动生成 `title`
- 所有文本字段统一按字符串保存 - 所有文本字段统一按字符串保存
- `案例年份` 优先按数字写入,不可解析时保留原字符串
- 导出模板固定为 9 列标准表头,便于线下统一维护
### 5.3 筛选规则 ### 5.3 筛选规则
- 分类筛选使用 `metadata.category` - 案例性质筛选使用 `metadata.category`
- 标签筛选使用 `metadata.tag` - 关键字筛选优先使用 `metadata.keyword`,同时兼容历史 `metadata.tag`
- 关键词检索同时覆盖 `title`、`metadata.label`、`metadata.content`、`metadata.category`、`metadata.tag` - 关键词检索同时覆盖 `title`、`metadata.label`、`metadata.case_type`、`metadata.case_attribute`、`metadata.case_details`、`metadata.case_warning`、`metadata.keyword`、`metadata.case_source`、`metadata.case_level`、`metadata.category`、`metadata.tag`
--- ---
...@@ -137,20 +169,31 @@ ...@@ -137,20 +169,31 @@
- 案例总数 - 案例总数
- 最近 7 天更新数 - 最近 7 天更新数
- 分类分布 - 案例性质分布
- 标签热度 - 关键字热度
- 案例年份分布趋势图
- 近 7 日更新活跃度图
- 最近更新案例 - 最近更新案例
- 重点长文本案例或待整理案例 - 重点长文本案例或待整理案例,待整理规则关注缺少案例性质、关键字、案例详情或详情偏短
- 数据洞察卡片,例如分类最集中主题、最高频关键字、结构完整度
图表口径说明:
- 案例性质分布:按 `metadata.category` 聚合
- 关键字热度:按 `metadata.keyword`,缺失时兼容 `metadata.tag`
- 案例年份分布:按 `metadata.case_year` 聚合
- 近 7 日更新活跃度:按 `updated_at` 汇总最近 7 天更新次数
### 6.2 案例管理 ### 6.2 案例管理
建议至少包含: 建议至少包含:
- 搜索框 - 搜索框
- 分类切换 - 案例性质切换
- 标签筛选 - 关键字筛选
- 手动新建按钮 - 手动新建按钮
- Excel 导入按钮 - Excel 导入按钮
- Excel 导出按钮
- 案例卡片列表 - 案例卡片列表
- 详情编辑弹框 - 详情编辑弹框
- 删除确认弹框 - 删除确认弹框
...@@ -160,10 +203,13 @@ ...@@ -160,10 +203,13 @@
建议展示: 建议展示:
- 标题 - 标题
- 内容全文 - 案例类型
- 分类 - 案例详情全文
- 标签 - 案例性质
- 内容字数 - 关键字
- 案件警示
- 案例来源 / 案例等级 / 案例年份
- 案例详情字数
- 创建时间 / 更新时间 - 创建时间 / 更新时间
--- ---
...@@ -214,5 +260,5 @@ ...@@ -214,5 +260,5 @@
1. `risk_case_library` 1. `risk_case_library`
当前不拆分独立标签表、分类表或附件表。 当前不拆分独立关键字表、案例性质表或附件表。
分类与标签先通过文本字段实现,后续如有需要再演进。 案例性质与关键字先通过文本字段实现,后续如有需要再演进。
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
## 2. 建 Subject 总原则 ## 2. 建 Subject 总原则
- 所有业务字段都放在 `metadata` 中 - 所有业务字段都放在 `metadata` 中
- 案例正文走纯文本,不单独拆分附件对象 - 案例详情走纯文本,不单独拆分附件对象
- 一期先不建独立标签表、分类表 - 一期先不建独立关键字表、案例性质表
- 分类和标签先通过文本字段实现 - 案例性质和关键字先通过文本字段实现
--- ---
...@@ -34,21 +34,28 @@ ...@@ -34,21 +34,28 @@
建议说明: 建议说明:
- 一条记录代表一个案例 - 一条记录代表一个案例
- 主要承载标题、正文、分类、标签 - 主要承载案例类型、案例属性、案例性质、案例详情、案件警示、关键字、案例来源、案例等级、案例年份
## 3.2 字段清单 ## 3.2 字段清单
| 字段标题 | 字段别名 | 类型 | 必填 | 多值 | 主键 | 默认值 | 备注 | | 字段标题 | 字段别名 | 类型 | 必填 | 多值 | 主键 | 默认值 | 备注 |
| --- | --- | --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- | --- | --- |
| 标题 | `label` | `text` | 否 | 否 | 否 | 无 | 主展示字段 | | 标题 | `label` | `text` | 否 | 否 | 否 | 无 | 主展示字段 |
| 内容 | `content` | `text` | 否 | 否 | 否 | 无 | 案例正文 | | 分类 | `category` | `text` | 否 | 否 | 否 | 无 | 案例性质 |
| 分类 | `category` | `text` | 否 | 否 | 否 | 无 | 用户自定义分类 | | 标签 | `tag` | `text` | 否 | 否 | 否 | 无 | 历史兼容字段,可同步关键字 |
| 标签 | `tag` | `text` | 否 | 否 | 否 | 无 | 用户自定义检索标签 | | 案例类型 | `case_type` | `text` | 否 | 否 | 否 | 无 | 导入模板主字段 |
| 案例属性 | `case_attribute` | `text` | 否 | 否 | 否 | 无 | 案例属性或归属维度 |
| 案例详情 | `case_details` | `long_text` | 否 | 否 | 否 | 无 | 案例详细内容正文 |
| 案例警示 | `case_warning` | `text` | 否 | 否 | 否 | 无 | 警示或风险提示 |
| 关键字 | `keyword` | `text` | 否 | 否 | 否 | 无 | 用户自定义检索关键字 |
| 案例来源 | `case_source` | `text` | 否 | 否 | 否 | 无 | 如监管通报、内部复盘 |
| 案例等级 | `case_level` | `text` | 否 | 否 | 否 | 无 | 风险等级或分级 |
| 案例年份 | `case_year` | `number` | 否 | 否 | 否 | 无 | 案例发生或归档年份 |
## 3.3 推荐初始记录规则 ## 3.3 推荐初始记录规则
- `title` 默认取 `label` - `title` 默认取 `label`
- `label` 为空时,可回退为 `content` 摘要 - `label` 为空时,可回退为 `case_details` 摘要
- `status` 默认 `active` - `status` 默认 `active`
- 如果后端支持 `name` 自动生成,一期可不强制要求 `name` - 如果后端支持 `name` 自动生成,一期可不强制要求 `name`
...@@ -56,8 +63,8 @@ ...@@ -56,8 +63,8 @@
1. 能成功手动创建一条案例 1. 能成功手动创建一条案例
2. 可以按 `metadata.category` 查询 2. 可以按 `metadata.category` 查询
3. 可以按 `metadata.tag` 查询 3. 可以按 `metadata.keyword` 查询,并兼容历史 `metadata.tag`
4. 可以按 `metadata.content` 做关键词检索 4. 可以按 `metadata.case_details` 做关键词检索
--- ---
...@@ -65,8 +72,8 @@ ...@@ -65,8 +72,8 @@
以下对象当前先不要建: 以下对象当前先不要建:
- 独立标签字典 Subject - 独立关键字字典 Subject
- 独立分类字典 Subject - 独立案例性质字典 Subject
- 案例附件关联 Subject - 案例附件关联 Subject
原因: 原因:
...@@ -91,7 +98,7 @@ ...@@ -91,7 +98,7 @@
1. 在案例管理页手动创建后,能生成 `risk_case_library` 1. 在案例管理页手动创建后,能生成 `risk_case_library`
2. 通过 Excel 导入后,能批量生成 `risk_case_library` 2. 通过 Excel 导入后,能批量生成 `risk_case_library`
3. 案例总览页能正确读取分类、标签和更新统计 3. 案例总览页能正确读取案例性质、关键字和更新统计
4. 案例详情页能完成编辑与删除 4. 案例详情页能完成编辑与删除
--- ---
......
...@@ -148,9 +148,16 @@ ...@@ -148,9 +148,16 @@
"content": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值……", "content": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值……",
"metadata": { "metadata": {
"label": "采购审批绕行典型案例", "label": "采购审批绕行典型案例",
"content": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值……",
"category": "合规风险", "category": "合规风险",
"tag": "采购审批" "tag": "采购审批",
"case_type": "采购审批绕行典型案例",
"case_attribute": "流程绕行",
"case_details": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值……",
"case_warning": "涉及审批阈值、例外授权和供应商集中度的场景应设置联合预警。",
"keyword": "采购审批, 拆单",
"case_source": "内部审计复盘",
"case_level": "高",
"case_year": 2024
} }
} }
``` ```
...@@ -166,7 +173,10 @@ ...@@ -166,7 +173,10 @@
"page_size": 20, "page_size": 20,
"filter": { "filter": {
"metadata.category": "合规风险", "metadata.category": "合规风险",
"metadata.tag": "采购审批" "$or": [
{ "metadata.keyword": { "$regex": "采购审批", "$options": "i" } },
{ "metadata.tag": { "$regex": "采购审批", "$options": "i" } }
]
}, },
"sort": "-updated_at -created_at" "sort": "-updated_at -created_at"
} }
...@@ -183,7 +193,13 @@ ...@@ -183,7 +193,13 @@
"$or": [ "$or": [
{ "title": { "$regex": "审批", "$options": "i" } }, { "title": { "$regex": "审批", "$options": "i" } },
{ "metadata.label": { "$regex": "审批", "$options": "i" } }, { "metadata.label": { "$regex": "审批", "$options": "i" } },
{ "metadata.content": { "$regex": "审批", "$options": "i" } }, { "metadata.case_type": { "$regex": "审批", "$options": "i" } },
{ "metadata.case_attribute": { "$regex": "审批", "$options": "i" } },
{ "metadata.case_details": { "$regex": "审批", "$options": "i" } },
{ "metadata.case_warning": { "$regex": "审批", "$options": "i" } },
{ "metadata.keyword": { "$regex": "审批", "$options": "i" } },
{ "metadata.case_source": { "$regex": "审批", "$options": "i" } },
{ "metadata.case_level": { "$regex": "审批", "$options": "i" } },
{ "metadata.category": { "$regex": "审批", "$options": "i" } }, { "metadata.category": { "$regex": "审批", "$options": "i" } },
{ "metadata.tag": { "$regex": "审批", "$options": "i" } } { "metadata.tag": { "$regex": "审批", "$options": "i" } }
] ]
...@@ -207,9 +223,16 @@ ...@@ -207,9 +223,16 @@
"content": "财务负责人通过虚构往来科目转移资金……", "content": "财务负责人通过虚构往来科目转移资金……",
"metadata": { "metadata": {
"label": "资金挪用典型案例", "label": "资金挪用典型案例",
"content": "财务负责人通过虚构往来科目转移资金……",
"category": "舞弊风险", "category": "舞弊风险",
"tag": "资金管理" "tag": "资金管理",
"case_type": "资金挪用典型案例",
"case_attribute": "财务舞弊",
"case_details": "财务负责人通过虚构往来科目转移资金……",
"case_warning": "资金支付复核应与月末异常波动分析交叉验证。",
"keyword": "资金管理, 异常调账",
"case_source": "内部通报",
"case_level": "高",
"case_year": 2025
}, },
"subject": "risk_case_library" "subject": "risk_case_library"
} }
......
...@@ -42,9 +42,16 @@ type Record = { ...@@ -42,9 +42,16 @@ type Record = {
"content": "项目经理通过虚构供应商合同套取资金……", "content": "项目经理通过虚构供应商合同套取资金……",
"metadata": { "metadata": {
"label": "资金挪用典型案例", "label": "资金挪用典型案例",
"content": "项目经理通过虚构供应商合同套取资金……",
"category": "舞弊风险", "category": "舞弊风险",
"tag": "资金管理" "tag": "资金管理",
"case_type": "违规操作",
"case_attribute": "内部控制缺陷",
"case_details": "项目经理通过虚构供应商合同套取资金……",
"case_warning": "供应商准入与合同审批需交叉复核",
"keyword": "资金挪用, 虚构合同",
"case_source": "内部通报",
"case_level": "高",
"case_year": 2025
} }
} }
``` ```
...@@ -61,15 +68,16 @@ type Record = { ...@@ -61,15 +68,16 @@ type Record = {
### 2.2 `Record.title` ### 2.2 `Record.title`
- 建议优先取 `metadata.label` - 建议优先取 `metadata.label`
- 若 `label` 为空,可退化为 `metadata.content` 前 24~32 个字符摘要 - 若 `label` 为空,可退化为 `metadata.case_details` 前 24~32 个字符摘要
- 再兜底为 `未命名案例` - 再兜底为 `未命名案例`
### 2.3 搜索与展示建议 ### 2.3 搜索与展示建议
- 列表主标题使用 `label` - 列表主标题使用 `label`
- 卡片或详情摘要使用 `content` - 卡片或详情摘要使用 `case_details`
- 分类筛选读取 `category` - 案例性质筛选读取 `category`
- 标签筛选读取 `tag` - 关键字筛选读取 `keyword`,历史数据可兼容读取 `tag`
- 关键词检索优先覆盖 `label`、`keyword`、`case_details`、`case_warning`
--- ---
...@@ -84,24 +92,39 @@ type Record = { ...@@ -84,24 +92,39 @@ type Record = {
说明: 说明:
- `label` 用作主展示标题 - `label` 用作主展示标题
- `content` 为案例正文,通常为几百到上千字
- `category` 用于主题归类 - `category` 用于主题归类
- `tag` 用于更灵活的检索和二次分组 - `tag` 用于更灵活的检索和二次分组
- `case_details` 为案例详情正文,通常为几百到上千字
- `case_year` 建议存储为数字类型年份,便于筛选和排序
| 字段标签 | 字段别名 | 字段类型 | 是否主键 | 是否多值 | 是否必填 | 说明 | | 字段标签 | 字段别名 | 字段类型 | 是否主键 | 是否多值 | 是否必填 | 说明 |
| --- | --- | --- | --- | --- | --- | --- | | --- | --- | --- | --- | --- | --- | --- |
| 标题 | `label` | text | 否 | 否 | 否 | 案例展示主标题 | | 标题 | `label` | text | 否 | 否 | 否 | 案例展示主标题 |
| 内容 | `content` | text | 否 | 否 | 否 | 案例正文 |
| 分类 | `category` | text | 否 | 否 | 否 | 案例分类,如舞弊风险、合规风险 | | 分类 | `category` | text | 否 | 否 | 否 | 案例分类,如舞弊风险、合规风险 |
| 标签 | `tag` | text | 否 | 否 | 否 | 标签或关键词,如资金管理、采购审批 | | 标签 | `tag` | text | 否 | 否 | 否 | 标签或关键词,如资金管理、采购审批 |
| 案例类型 | `case_type` | text | 否 | 否 | 否 | 案例类型,如违规操作、警示通报 |
| 案例属性 | `case_attribute` | text | 否 | 否 | 否 | 案例属性或归属维度 |
| 案例详情 | `case_details` | long_text | 否 | 否 | 否 | 案例详细内容正文 |
| 案例警示 | `case_warning` | text | 否 | 否 | 否 | 案例提炼出的警示或风险提示 |
| 关键字 | `keyword` | text | 否 | 否 | 否 | 检索关键字,支持人工维护 |
| 案例来源 | `case_source` | text | 否 | 否 | 否 | 案例来源,如监管通报、内部复盘 |
| 案例等级 | `case_level` | text | 否 | 否 | 否 | 案例风险等级或分级 |
| 案例年份 | `case_year` | number | 否 | 否 | 否 | 案例发生或归档年份 |
### 3.1.1 metadata 示例 ### 3.1.1 metadata 示例
```json ```json
{ {
"label": "采购审批绕行典型案例", "label": "采购审批绕行典型案例",
"content": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值,导致同一供应商在短期内累计发生异常采购金额。复盘发现,审批节点设置与例外授权规则未同步更新,最终形成流程漏洞。",
"category": "合规风险", "category": "合规风险",
"tag": "采购审批" "tag": "采购审批",
"case_type": "违规操作",
"case_attribute": "流程绕行",
"case_details": "某项目在高峰采购期内,多次通过拆分订单绕过审批阈值,导致同一供应商在短期内累计发生异常采购金额。复盘发现,审批节点设置与例外授权规则未同步更新,最终形成流程漏洞。",
"case_warning": "涉及审批阈值、例外授权和供应商集中度的场景应设置联合预警。",
"keyword": "审批, 采购, 拆单",
"case_source": "内部审计复盘",
"case_level": "高",
"case_year": 2024
} }
``` ```
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