更新模型信息xlsx并补充SQL校验结论
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
# 模型信息 XLSX 更新实施计划
|
||||
|
||||
> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** 直接更新 `assets/模型信息.xlsx`,仅对未真实实现模型补齐可明确推出的字段,并新增 SQL 可执行性与缺少内容结论列。
|
||||
|
||||
**Architecture:** 先以项目代码、规则定义、数据库表结构为依据,逐行判定模型是否已经具备真实命中逻辑;对未实现模型再执行表格回填和 SQL 可执行性校验,最后补充实施记录。整个过程不新增业务规则,不修改后端实现逻辑,只更新资料文件与文档。
|
||||
|
||||
**Tech Stack:** Python 3、openpyxl、rg、MySQL MCP、Git
|
||||
|
||||
---
|
||||
|
||||
### Task 1: 梳理实现状态与回填依据
|
||||
|
||||
**Files:**
|
||||
- Modify: `assets/模型信息.xlsx`
|
||||
- Reference: `docs/design/2026-03-20-model-info-xlsx-update-design.md`
|
||||
- Reference: `docs/reports/implementation/2026-03-17-model-sql-check-and-rewrite.md`
|
||||
|
||||
- [ ] **Step 1: 列出 XLSX 中的全部模型行**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook('assets/模型信息.xlsx')
|
||||
ws = wb['Sheet1']
|
||||
for idx, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2):
|
||||
if row[2]:
|
||||
print(idx, row[2], row[3], row[6], row[7])
|
||||
PY
|
||||
```
|
||||
|
||||
Expected: 输出每一行对应的序号、模型名称、相关指标和指标英文名。
|
||||
|
||||
- [ ] **Step 2: 检索项目内真实规则实现与占位规则**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
rg -n "HOUSE_OR_CAR_EXPENSE|TAX_EXPENSE|SINGLE_LARGE_INCOME|CUMULATIVE_INCOME|ANNUAL_TURNOVER|LARGE_CASH_DEPOSIT|ABNORMAL_CUSTOMER_TRANSACTION|LOW_INCOME_RELATIVE_LARGE_TRANSACTION|MULTI_PARTY_GAMBLING_TRANSFER|GAMBLING_SENSITIVE_KEYWORD|MONTHLY_FIXED_INCOME|FIXED_COUNTERPARTY_TRANSFER|FOREX_BUY_AMT|INTEREST_PAYMENT_BY_OTHERS|LARGE_PURCHASE_TRANSACTION|SUPPLIER_CONCENTRATION|STOCK_TFR_LARGE|WITHDRAW_CNT|SALARY_QUICK_TRANSFER" ccdi-project ruoyi-ui sql docs
|
||||
```
|
||||
|
||||
Expected: 区分哪些模型已有真实命中逻辑,哪些只有占位规则或文档描述。
|
||||
|
||||
- [ ] **Step 3: 用当前数据库结构确认 SQL 校验基线**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook('assets/模型信息.xlsx')
|
||||
ws = wb['Sheet1']
|
||||
print('rows=', ws.max_row, 'cols=', ws.max_column)
|
||||
PY
|
||||
```
|
||||
|
||||
Expected: 确认当前工作簿可正常读取,为后续回写做基线检查。
|
||||
|
||||
### Task 2: 更新 XLSX 未实现模型信息
|
||||
|
||||
**Files:**
|
||||
- Modify: `assets/模型信息.xlsx`
|
||||
|
||||
- [ ] **Step 1: 追加两列表头**
|
||||
|
||||
实现要求:
|
||||
|
||||
```text
|
||||
在现有最后一列后新增:
|
||||
1. 当前环境是否可执行SQL
|
||||
2. 当前缺少内容
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 对已真实实现模型保持跳过**
|
||||
|
||||
实现要求:
|
||||
|
||||
```text
|
||||
只标记为“已实现并跳过”,不重写该行原有内容,不填新增结论列。
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 对未实现模型补齐可明确推出的字段**
|
||||
|
||||
实现要求:
|
||||
|
||||
```text
|
||||
优先补充指标英文名、风险筛查对象、技术口径、可疑结果返回、风险等级;
|
||||
仅在项目代码、规则表、SQL 或当前库结构能明确支持时回填,不能唯一确定则保留原值。
|
||||
```
|
||||
|
||||
- [ ] **Step 4: 写入 SQL 可执行性结论**
|
||||
|
||||
实现要求:
|
||||
|
||||
```text
|
||||
当前环境可直接执行写“是”,否则写“否”;
|
||||
“当前缺少内容”列中写最小必需缺项或明确错误,可执行则写“/”。
|
||||
```
|
||||
|
||||
- [ ] **Step 5: 保存工作簿**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook('assets/模型信息.xlsx')
|
||||
wb.save('assets/模型信息.xlsx')
|
||||
print('saved')
|
||||
PY
|
||||
```
|
||||
|
||||
Expected: 输出 `saved`,且文件可再次被 `openpyxl` 正常打开。
|
||||
|
||||
### Task 3: 校验结果并补充实施记录
|
||||
|
||||
**Files:**
|
||||
- Modify: `assets/模型信息.xlsx`
|
||||
- Create: `docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md`
|
||||
|
||||
- [ ] **Step 1: 抽样读取更新后的关键行**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 - <<'PY'
|
||||
from openpyxl import load_workbook
|
||||
wb = load_workbook('assets/模型信息.xlsx')
|
||||
ws = wb['Sheet1']
|
||||
for row_no in [10, 11, 12, 14, 18, 22, 25, 26, 28, 31]:
|
||||
vals = [ws.cell(row_no, col).value for col in range(3, ws.max_column + 1)]
|
||||
print(row_no, vals)
|
||||
PY
|
||||
```
|
||||
|
||||
Expected: 关键未实现模型行已带有新增结论列,且补充信息与设计口径一致。
|
||||
|
||||
- [ ] **Step 2: 记录本次实施内容和判定依据**
|
||||
|
||||
实施记录应包含:
|
||||
|
||||
```text
|
||||
1. 已实现模型跳过的判定口径
|
||||
2. 未实现模型的回填原则
|
||||
3. 新增列说明
|
||||
4. SQL 可执行性判断依据
|
||||
5. 抽样验证结果
|
||||
```
|
||||
|
||||
- [ ] **Step 3: 检查 Git 变更范围**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
```
|
||||
|
||||
Expected: 只包含本次任务相关文件;如存在无关变更,不纳入提交。
|
||||
|
||||
- [ ] **Step 4: 提交本次修改**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git add docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md assets/模型信息.xlsx
|
||||
git commit -m "更新模型信息xlsx并补充校验结论"
|
||||
```
|
||||
|
||||
Expected: 生成仅包含本次任务文件的中文提交。
|
||||
@@ -0,0 +1,76 @@
|
||||
# 模型信息 XLSX 更新实施记录
|
||||
|
||||
## 修改目标
|
||||
|
||||
- 直接更新 [assets/模型信息.xlsx](/Users/wkc/Desktop/ccdi/ccdi/assets/模型信息.xlsx)
|
||||
- 按“已有真实 SQL 或真实结果产出逻辑才算已实现”的口径,区分跳过模型和待补充模型
|
||||
- 对未实现模型新增 SQL 可执行性结论列,并补齐可从项目和数据库明确推出的缺失字段
|
||||
|
||||
## 判定口径
|
||||
|
||||
- 已实现并跳过:
|
||||
- 仅认定 `CcdiBankTagServiceImpl` 已接入且 `CcdiBankTagAnalysisMapper.xml` 中存在真实查询逻辑的模型
|
||||
- 本次跳过的是大额交易前 8 条规则:
|
||||
- `HOUSE_OR_CAR_EXPENSE`
|
||||
- `TAX_EXPENSE`
|
||||
- `SINGLE_LARGE_INCOME`
|
||||
- `CUMULATIVE_INCOME`
|
||||
- `ANNUAL_TURNOVER`
|
||||
- `LARGE_CASH_DEPOSIT`
|
||||
- `FREQUENT_CASH_DEPOSIT`
|
||||
- `LARGE_TRANSFER`
|
||||
- 未实现并处理:
|
||||
- 虽然项目已挂规则入口,但 `CcdiBankTagAnalysisMapper.xml` 中仍是 `where 1 = 0` 的占位 SQL
|
||||
- 原始 SQL 引用了当前环境不存在的外部库表、字段或不兼容语法
|
||||
- 原始 SQL 为空
|
||||
|
||||
## XLSX 修改内容
|
||||
|
||||
- 在 `Sheet1` 末尾新增两列:
|
||||
- `当前环境是否可执行SQL`
|
||||
- `当前缺少内容`
|
||||
- 对未实现模型补齐了以下信息:
|
||||
- 指标英文名统一补到当前项目规则编码风格,如 `ABNORMAL_CUSTOMER_TRANSACTION`、`WITHDRAW_AMT`、`SALARY_UNUSED`
|
||||
- 少量技术口径按当前库表字段修正为真实表结构描述,例如:
|
||||
- 房产相关规则由历史描述中的 `ccdi_family_liability` 调整为当前实际存在的 `ccdi_asset_info`
|
||||
- 采购规则技术口径改为基于 `ccdi_purchase_transaction.actual_amount`
|
||||
- 对缺少原始 SQL 的行保留原业务口径,同时在新增列中明确写明“缺少原始SQL”
|
||||
|
||||
## SQL 可执行性结论
|
||||
|
||||
- 判定标准:
|
||||
- 以当前 `ccdi` 库真实表结构为准
|
||||
- 以当前 MySQL 能力为准
|
||||
- 不假设外部 schema、外部表、临时表和占位变量已经准备好
|
||||
- 本次结论概况:
|
||||
- 标记为 `是` 的 1 行:
|
||||
- `9.1 可疑采购 / LARGE_PURCHASE_TRANSACTION`
|
||||
- 标记为 `否` 的未实现行,主要原因包括:
|
||||
- `PROJECT_ID`、`$$$$` 等占位变量未替换
|
||||
- `trx_time`、`updated_at` 等字段在当前库不存在
|
||||
- `WITH`、`add_months()` 等不兼容当前 MySQL 的语法
|
||||
- 缺少外部表,如 `odsdb.blfmconf`、`sjfx_pro.bdfmhqaa_orc`、`xdzx.*`
|
||||
- 原始 SQL 为空
|
||||
|
||||
## 验证记录
|
||||
|
||||
- 已执行工作簿结构校验,确认表头已扩展到 16 列
|
||||
- 已抽样回读以下关键行,确认新增列和补齐字段已写入:
|
||||
- 第 10 行:异常交易 2.1
|
||||
- 第 12 行:疑似赌博 3.1
|
||||
- 第 15 行:可疑兼职 5.1
|
||||
- 第 18 行:可疑财产 6.1
|
||||
- 第 21 行:可疑财产 收入资产不符
|
||||
- 第 24 行:可疑外汇交易 跨境汇款
|
||||
- 第 26 行:可疑采购 9.1
|
||||
- 第 27 行:可疑采购 9.2
|
||||
- 第 30 行:异常行为 微信支付宝提现超额
|
||||
- 第 32 行:异常行为 工资无使用记录
|
||||
- 第 34 行:异常行为 疑似代理他人账户
|
||||
|
||||
## 本次涉及文件
|
||||
|
||||
- 更新 [assets/模型信息.xlsx](/Users/wkc/Desktop/ccdi/ccdi/assets/模型信息.xlsx)
|
||||
- 新增 [docs/design/2026-03-20-model-info-xlsx-update-design.md](/Users/wkc/Desktop/ccdi/ccdi/docs/design/2026-03-20-model-info-xlsx-update-design.md)
|
||||
- 新增 [docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md](/Users/wkc/Desktop/ccdi/ccdi/docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md)
|
||||
- 新增 [docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md](/Users/wkc/Desktop/ccdi/ccdi/docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md)
|
||||
Reference in New Issue
Block a user