diff --git a/assets/模型信息.xlsx b/assets/模型信息.xlsx index 8a557b97..2cea8c00 100644 Binary files a/assets/模型信息.xlsx and b/assets/模型信息.xlsx differ diff --git a/docs/superpowers/specs/2026-03-20-model-info-xlsx-update-design.md b/docs/design/2026-03-20-model-info-xlsx-update-design.md similarity index 100% rename from docs/superpowers/specs/2026-03-20-model-info-xlsx-update-design.md rename to docs/design/2026-03-20-model-info-xlsx-update-design.md diff --git a/docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md b/docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md new file mode 100644 index 00000000..0f11be3e --- /dev/null +++ b/docs/plans/fullstack/2026-03-20-model-info-xlsx-update-implementation.md @@ -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: 生成仅包含本次任务文件的中文提交。 diff --git a/docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md b/docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md new file mode 100644 index 00000000..0914c6d6 --- /dev/null +++ b/docs/reports/implementation/2026-03-20-model-info-xlsx-update-record.md @@ -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)