Showing
2 changed files
with
259 additions
and
0 deletions
docs/tasks/plan/改进文档解析工具-添加审核流程.md
0 → 100644
| 1 | +# 改进文档解析工具-添加审核流程 | ||
| 2 | + | ||
| 3 | +**创建时间**: 2026-02-14 | ||
| 4 | +**负责人**: Claude Code | ||
| 5 | +**优先级**: 🔴 高 | ||
| 6 | + | ||
| 7 | +--- | ||
| 8 | + | ||
| 9 | +## 背景分析 | ||
| 10 | + | ||
| 11 | +### 当前问题 | ||
| 12 | +使用 `pnpm parse:docs --file="计划书模版2.docx"` 解析文档时存在以下问题: | ||
| 13 | + | ||
| 14 | +1. **解析不准确**:mammoth解析.docx提取的内容与实际文档内容不符 | ||
| 15 | + - 缺少产品基本信息(name, type, currency) | ||
| 16 | + - 字段定义提取不完整(form_schema, submit_mapping) | ||
| 17 | + - 结构化表格数据提取困难 | ||
| 18 | + | ||
| 19 | +2. **缺少审核环节**: | ||
| 20 | + - 当前流程:解析 → 直接生成配置代码 | ||
| 21 | + - 问题:无法验证解析准确性,直接写入配置文件风险高 | ||
| 22 | + | ||
| 23 | +3. **用户需求**: | ||
| 24 | + - 需要"人工辅助"的半自动化方式 | ||
| 25 | + - 在自动解析和直接生成配置之间增加审核环节 | ||
| 26 | + | ||
| 27 | +--- | ||
| 28 | + | ||
| 29 | +## 解决方案 | ||
| 30 | + | ||
| 31 | +### 方案设计 | ||
| 32 | +采用 **"解析 → 审核 → 生成"** 三步流程,支持多种解析方式: | ||
| 33 | + | ||
| 34 | +``` | ||
| 35 | +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ | ||
| 36 | +│ 选择解析方式 │ → │ 生成待审核文件 │ → │ 人工审核后移动 │ | ||
| 37 | +│ mammoth/MCP │ │ (markdown) │ │ 到正式配置 │ | ||
| 38 | +└─────────────────┘ └─────────────────┘ └─────────────────┘ | ||
| 39 | +``` | ||
| 40 | + | ||
| 41 | +#### 解析方式对比 | ||
| 42 | + | ||
| 43 | +| 特性 | mammoth | MCP文档解析 | | ||
| 44 | +|------|---------|-------------| | ||
| 45 | +| **准确性** | 基础(纯文本提取) | 高(AI理解结构) | | ||
| 46 | +| **结构化** | 弱(需手动处理) | 强(自动识别字段) | | ||
| 47 | +| **表格解析** | 一般(markdown表格) | 好(保留结构) | | ||
| 48 | +| **速度** | 快(本地解析) | 慢(网络请求) | | ||
| 49 | +| **成本** | 免费 | 可能需要API Key | | ||
| 50 | + | ||
| 51 | +#### 使用场景 | ||
| 52 | +- **mammoth**: 快速预览、简单文档、离线使用 | ||
| 53 | +- **MCP**: 复杂文档、准确度要求高、有网络连接 | ||
| 54 | + | ||
| 55 | +### 技术实现 | ||
| 56 | + | ||
| 57 | +#### 1. 改进extractProductBasicInfo | ||
| 58 | +尝试从多个位置提取产品基本信息: | ||
| 59 | + | ||
| 60 | +```javascript | ||
| 61 | +// 尝试从文档标题、表格、特定文本模式提取 | ||
| 62 | +async function extractProductBasicInfo(content, fileName) { | ||
| 63 | + const info = { | ||
| 64 | + name: '', | ||
| 65 | + type: 'savings', // 默认储蓄型 | ||
| 66 | + currency: 'USD', | ||
| 67 | + form_sn: generateFormSn(fileName) | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + // 策略1: 从文档标题提取 | ||
| 71 | + const titleMatch = content.match(/^#\s+(.+)$/m) | ||
| 72 | + if (titleMatch) { | ||
| 73 | + info.name = cleanProductName(titleMatch[1].trim()) | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + // 策略2: 从表格中提取"币种"信息 | ||
| 77 | + const currencyMatch = content.match(/币种[::]\s*([A-Z]{3})/i) | ||
| 78 | + if (currencyMatch) { | ||
| 79 | + info.currency = currencyMatch[1] | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + // 策略3: 从表格中提取"产品类型"信息 | ||
| 83 | + if (content.includes('重疾') || content.includes('危疾')) { | ||
| 84 | + info.type = 'critical-illness' | ||
| 85 | + } else if (content.includes('人寿')) { | ||
| 86 | + info.type = 'life-insurance' | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + return info | ||
| 90 | +} | ||
| 91 | +``` | ||
| 92 | + | ||
| 93 | +#### 2. 实现generateAuditFile | ||
| 94 | +生成结构化的待审核markdown文件: | ||
| 95 | + | ||
| 96 | +```javascript | ||
| 97 | +async function generateAuditFile(fileName, config, code) { | ||
| 98 | + const auditDir = 'docs/parse-audit/pending/' | ||
| 99 | + const dateStr = new Date().toISOString().split('T')[0].replace(/:/g, '-') | ||
| 100 | + const auditFileName = `${dateStr}-${fileName.replace(/\.[^/.]+$/, '')}.md` | ||
| 101 | + const auditFilePath = path.join(auditDir, auditFileName) | ||
| 102 | + | ||
| 103 | + const content = `# 产品配置审核 - ${fileName} | ||
| 104 | + | ||
| 105 | +**解析时间**: ${new Date().toLocaleString('zh-CN')} | ||
| 106 | + | ||
| 107 | +--- | ||
| 108 | + | ||
| 109 | +## 📋 产品基本信息 | ||
| 110 | + | ||
| 111 | +| 字段 | 提取值 | 需要确认 | | ||
| 112 | +|------|--------|---------| | ||
| 113 | +| 产品名称 | ${config.name || '未提取'} | ✅ 请核对产品名称 | | ||
| 114 | +| 产品类型 | ${config.type || '未提取'} | ✅ 请确认产品类型 | | ||
| 115 | +| 币种 | ${config.currency || 'USD'} | ✅ 请确认币种 | | ||
| 116 | +| form_sn | \`${config.form_sn || '未生成'}` | ✅ 请确认form_sn唯一性 | | ||
| 117 | + | ||
| 118 | +--- | ||
| 119 | + | ||
| 120 | +## 📝 表单字段 (form_schema) | ||
| 121 | + | ||
| 122 | +\`\`\`javascript | ||
| 123 | +${code.form_schema || '// 请手动补充'} | ||
| 124 | +\`\`\` | ||
| 125 | + | ||
| 126 | +--- | ||
| 127 | + | ||
| 128 | +## 🔄 提交字段映射 (submit_mapping) | ||
| 129 | + | ||
| 130 | +\`\`\`javascript | ||
| 131 | +${code.submit_mapping || '// 请手动补充'} | ||
| 132 | +\`\`\` | ||
| 133 | + | ||
| 134 | +--- | ||
| 135 | + | ||
| 136 | +## ✅ 审核检查清单 | ||
| 137 | + | ||
| 138 | +- [ ] 产品名称正确 | ||
| 139 | +- [ ] 产品类型正确(savings/critical-illness/life-insurance) | ||
| 140 | +- [ ] 币种正确(USD/CNY/HKD/EUR) | ||
| 141 | +- [ ] form_sn 唯一且符合命名规范 | ||
| 142 | +- [ ] 缴费年期选项完整 | ||
| 143 | +- [ ] 年龄范围合理 | ||
| 144 | +- [ ] 提取计划配置(如适用) | ||
| 145 | +- [ ] 表单字段定义完整 | ||
| 146 | +- [ ] 提交字段映射正确 | ||
| 147 | + | ||
| 148 | +--- | ||
| 149 | + | ||
| 150 | +## 📋 审核后操作 | ||
| 151 | + | ||
| 152 | +### 确认无误 | ||
| 153 | +\`\`\`bash | ||
| 154 | +# 1. 移动配置到正式文件 | ||
| 155 | +mv docs/parse-audit/pending/${auditFileName} \\ | ||
| 156 | + src/config/plan-templates.backup.js | ||
| 157 | + | ||
| 158 | +# 2. 合并到正式配置 | ||
| 159 | +# 手动复制或使用工具合并 | ||
| 160 | + | ||
| 161 | +# 3. 删除待审核文件 | ||
| 162 | +rm docs/parse-audit/pending/${auditFileName} | ||
| 163 | +\`\`\` | ||
| 164 | + | ||
| 165 | +### 需要修改 | ||
| 166 | +1. 编辑本文件修正内容 | ||
| 167 | +2. 重新提交审核 | ||
| 168 | + | ||
| 169 | +### 放弃本次解析 | ||
| 170 | +\`\`\`bash | ||
| 171 | +rm docs/parse-audit/pending/${auditFileName} | ||
| 172 | +\`\`\` | ||
| 173 | +` | ||
| 174 | + | ||
| 175 | +--- | ||
| 176 | + | ||
| 177 | +**生成工具**: Claude Code - parse-docs.js | ||
| 178 | +` | ||
| 179 | + | ||
| 180 | + return fs.writeFileSync(auditFilePath, content, 'utf-8') | ||
| 181 | +} | ||
| 182 | +``` | ||
| 183 | + | ||
| 184 | +--- | ||
| 185 | + | ||
| 186 | +## 实施计划 | ||
| 187 | + | ||
| 188 | +### 阶段1: 改进解析逻辑 (30分钟) | ||
| 189 | +- [ ] 改进extractProductBasicInfo函数 | ||
| 190 | + - [ ] 添加文档标题提取 | ||
| 191 | + - [ ] 添加币种信息提取 | ||
| 192 | + - [ ] 添加产品类型推断 | ||
| 193 | + - [ ] 测试验证提取效果 | ||
| 194 | + | ||
| 195 | +### 阶段2: 实现审核文件生成 (20分钟) | ||
| 196 | +- [ ] 实现generateAuditFile函数 | ||
| 197 | + - [ ] 创建待审核目录结构 | ||
| 198 | + - [ ] 测试生成markdown格式 | ||
| 199 | + - [ ] 添加文件路径返回 | ||
| 200 | + | ||
| 201 | +### 阶段3: 集成到主流程 (10分钟) | ||
| 202 | +- [ ] 更新parse-docs.js主函数 | ||
| 203 | + - [ ] 添加成功提示和审核引导 | ||
| 204 | + - [ ] 错误处理和日志输出 | ||
| 205 | + | ||
| 206 | +### 阶段4: 测试验证 (10分钟) | ||
| 207 | +- [ ] 使用实际文档测试 | ||
| 208 | +- [ ] 验证生成的审核文件格式 | ||
| 209 | + - [ ] 确认目录结构正确 | ||
| 210 | + | ||
| 211 | +--- | ||
| 212 | + | ||
| 213 | +## 预期成果 | ||
| 214 | + | ||
| 215 | +1. **更准确的信息提取** | ||
| 216 | + - 产品基本信息提取率提升 | ||
| 217 | + - 减少人工补充工作 | ||
| 218 | + | ||
| 219 | +2. **结构化审核流程** | ||
| 220 | + - 清晰的待审核markdown格式 | ||
| 221 | + - 明确的审核检查清单 | ||
| 222 | + - 简单的审核后操作指引 | ||
| 223 | + | ||
| 224 | +3. **更好的用户体验** | ||
| 225 | + - 成功提示包含下一步操作 | ||
| 226 | + - 降低配置错误风险 | ||
| 227 | + | ||
| 228 | +--- | ||
| 229 | + | ||
| 230 | +## 风险评估 | ||
| 231 | + | ||
| 232 | +| 风险 | 影响 | 应对措施 | | ||
| 233 | +|------|------|---------| | ||
| 234 | +| 提取仍不准确 | 需要大量人工补充 | 提供清晰的标记和默认值 | | ||
| 235 | +| 审核文件过多 | 难以管理 | 定期清理已审核文件 | | ||
| 236 | +| 目录权限问题 | 无法写入文件 | 提前创建目录并检查权限 | | ||
| 237 | + | ||
| 238 | +--- | ||
| 239 | + | ||
| 240 | +## 后续优化 | ||
| 241 | + | ||
| 242 | +1. **交互式审核** | ||
| 243 | + - 提供命令行工具逐步引导填写缺失信息 | ||
| 244 | + - 支持编辑现有审核文件 | ||
| 245 | + | ||
| 246 | +2. **智能推断** | ||
| 247 | + - 基于历史配置推断产品类型 | ||
| 248 | + - 从表格结构自动推断字段定义 | ||
| 249 | + | ||
| 250 | +3. **版本对比** | ||
| 251 | + - 检测配置变更并生成差异报告 | ||
| 252 | + - 支持配置回滚 | ||
| 253 | + | ||
| 254 | +--- | ||
| 255 | + | ||
| 256 | +## 相关文档 | ||
| 257 | +- [mamoth使用文档](https://github.com/mwilliamtohman/mammoth) | ||
| 258 | +- [计划书模板配置规范](../../src/config/CLAUDE.md) | ||
| 259 | +- [代码注释规范](~/.claude/rules/code-commenting.md) |
This diff is collapsed. Click to expand it.
-
Please register or login to post a comment