hookehuyr

docs(parse): 清理审核文档并更新 parse-docs 脚本

主要变更:
- 清理 CHANGELOG.md (移除历史记录,保持精简)
- 移除旧的 pending 审核文件
- 删除 scripts/README.md
- 更新 parse-docs.js 脚本
- 更新 README.md 和 to-parse/README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
...@@ -430,6 +430,8 @@ export default { ...@@ -430,6 +430,8 @@ export default {
430 5. 认证失败会自动跳转到 `/pages/login/index` 430 5. 认证失败会自动跳转到 `/pages/login/index`
431 6. **所有函数必须有 JSDoc 注释** - 详见 `~/.claude/rules/code-commenting.md` 431 6. **所有函数必须有 JSDoc 注释** - 详见 `~/.claude/rules/code-commenting.md`
432 7. 业务路由以 `src/app.config.js` 为准,计划类文档仅保留历史记录 432 7. 业务路由以 `src/app.config.js` 为准,计划类文档仅保留历史记录
433 +8. 文档解析成功后原始文档会自动归档到 `docs/to-parse/archived/YYYY-MM-DD/`
434 +9. 待审核文件按原始文档名分目录存放于 `docs/parse-audit/pending/<原始文档名>/`
433 435
434 ## ✅ 优化建议 436 ## ✅ 优化建议
435 437
......
1 -## [2026-02-15] - 多产品文档解析支持 1 +# CHANGELOG
2 - 2 +## [2026-02-15] - 待审核文件按文档分目录
3 -### 新增
4 -- 新增 `product-splitter.js` 产品边界检测模块
5 - - 支持产品代码前缀识别(GS、GC、FA、LV2 等)
6 - - 支持产品命名模式(以"計劃"、"保障"、"保险"、"壽險"结尾)
7 - - 自动检测和分割多产品文档
8 -
9 ### 优化 3 ### 优化
10 -- 增强 `parse-docs.js` 多产品处理能力 4 +- 待审核文件按原始文档名分目录生成,避免 pending 混乱
11 - - `parseSingleFile()` 支持返回多产品数组 5 +- 更新审核文件位置说明(docs/to-parse/README.md 与 README.md)
12 - - `generateAuditFile()` 支持产品索引参数生成独立文件名
13 - - 单文件模式 (`--file=`) 正确处理多产品结果
14 - - `buildParseSummary()` 统计多产品数量
15 -
16 -- 优化 `smart-field-extractor.js` 结构
17 - - 新增 `smartExtractFieldsForProduct()` 单产品提取函数
18 - - 移除重复的函数定义,统一调用接口
19 -
20 ----
21 -
22 -**详细信息**
23 -- **影响文件**: scripts/product-splitter.js, scripts/parse-docs.js, scripts/smart-field-extractor.js
24 -- **技术栈**: Node.js, 正则表达式, 多产品分割
25 -- **测试状态**: 已测试(解析 计划书模版2.docx 成功识别 4 个产品)
26 -- **备注**: 每个产品生成独立的审核文件,便于人工逐一确认
27 -
28 ----
29 -
30 -## [2026-02-15] - 智能字段提取器完善
31 -
32 -### 新增
33 -- 实现 `smartExtractList()` 智能列表提取函数
34 -- 支持基于起始模式和结束关键词的列表边界识别
35 -
36 -### 修复
37 -- 修复 `insurance_period``withdrawal_modes` 字段的 `postProcess` 函数类型处理问题
38 -- 优化 `payment_periods` 字段的过滤逻辑,排除"投保年龄"等无效项
39 -
40 ----
41 -
42 -**详细信息**
43 -- **影响文件**: scripts/smart-field-extractor.js
44 -- **技术栈**: Node.js, 正则表达式, 智能提取
45 -- **测试状态**: 单元测试通过
46 -- **备注**: 提升了字段提取的准确性和健壮性
47 -
48 ----
49 -
50 -## [2026-02-14] - 消息功能全面优化
51 -
52 -### 优化
53 -- 优化消息列表卡片布局,提升信息可读性
54 -- 简化消息列表逻辑,移除冗余代码
55 -- 优化消息详情页布局,避免内容重复显示
56 -- 统一消息页面样式和交互体验
57 -
58 ----
59 -
60 -**详细信息**
61 -- **影响文件**: src/pages/message/index.vue, src/pages/message-detail/index.vue
62 -- **技术栈**: Vue 3, Taro 4, NutUI
63 -- **测试状态**: 已通过
64 -- **备注**: 提升用户阅读体验,代码更简洁可维护
65 -
66 ----
67 -
68 -## [2026-02-14] - Git 工作流与版本管理优化
69 -
70 -### 优化
71 -- 使用 standard-version 替代自定义版本更新脚本
72 -- 配置 standard-version 不自动生成 CHANGELOG(由人工维护)
73 -- 完善版本发布流程和 Git 工作流文档
74 -- 移除旧的版本自动更新脚本
75 -
76 -### 新增
77 -- 配置 conventional commits 规范
78 -- 完善版本管理最佳实践文档
79 -
80 ----
81 -
82 -**详细信息**
83 -- **影响文件**: .versionrc.json, package.json, scripts/ (removed)
84 -- **技术栈**: standard-version, conventional commits
85 -- **测试状态**: 已验证
86 -- **备注**: 统一版本管理工具,简化发布流程
87 -
88 ----
89 -
90 -## [2026-02-14] - 文档解析使用说明完善
91 -
92 -### 优化
93 -- 补充解析链路与使用思路,明确审核与合并边界
94 -- 更新解析命令说明与默认行为
95 -
96 ----
97 -
98 -**详细信息**
99 -- **影响文件**: docs/to-parse/README.md, README.md
100 -- **技术栈**: 文档维护
101 -- **测试状态**: 未运行(仅文档更新)
102 -- **备注**: 使用方式与链路更清晰
103 -
104 ----
105 -
106 -## [2026-02-14] - 文档解析审核流程落地
107 -
108 -### 优化
109 -- 修复审核模板重复定义与内容断裂,统一字段命名与展示结构
110 -- 完善审核流程指引,明确 pending/approved 目录治理与合并步骤
111 -- 默认解析仅生成待审核文件,写入配置需显式开启
112 -
113 ----
114 -
115 -**详细信息**
116 -- **影响文件**: scripts/parse-docs.js, docs/to-parse/README.md, docs/tasks/plan/改进文档解析工具-添加审核流程.md, README.md
117 -- **技术栈**: Node.js, 文档维护
118 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
119 -- **备注**: 已生成待审核文件并完成可读性校验
120 -
121 ----
122 -
123 -## [2026-02-14] - 文档解析审核方案整理
124 -
125 -### 优化
126 -- 整理审核流程文档并对齐字段命名与目录规范
127 -- 补充审核模板修复重点与解析策略改进点
128 -
129 ----
130 -
131 -**详细信息**
132 -- **影响文件**: docs/tasks/plan/改进文档解析工具-添加审核流程.md, README.md
133 -- **技术栈**: 文档维护
134 -- **测试状态**: 未运行(仅文档更新)
135 -- **备注**: 明确审核流程现状与修复范围
136 -
137 ----
138 -
139 -## [2026-02-14] - markitdown 文档解析服务集成
140 -
141 -### 新增
142 -- 集成 markitdown CLI 工具支持 PDF/DOCX 文档解析
143 -- 创建 parse-config.js 统一配置管理模块
144 -- 添加配置状态检查命令 `npm run parse:docs:status`
145 -- 创建 .env.example 环境变量模板
146 -- 新增 scripts/README.md 使用指南
147 -
148 -### 优化
149 -- MD/TXT 文件直接读取,无需 markitdown 处理
150 -- PDF/DOCX 文件通过 markitdown CLI 转换
151 -- 添加 markitdown 失败时的本地库回退机制
152 -
153 ----
154 -
155 -**详细信息**
156 -- **影响文件**: scripts/parse-config.js, scripts/parse-docs.js, scripts/.env.example, scripts/README.md, package.json
157 -- **技术栈**: Node.js, Python (markitdown v0.1.4), child_process
158 -- **测试状态**: 已通过(MD 文件解析验证)
159 -- **备注**: markitdown CLI 已安装,配置已启用 (type: 'cli')
160 -
161 ----
162 -
163 -## [2026-02-14] - 空表单回退规则补齐
164 -
165 -### 修复
166 -- 空 schema 自动回退默认 schema,避免生成空表单
167 -- 生成结果中空 schema 配置回填为默认 schema 引用
168 -
169 ----
170 -
171 -**详细信息**
172 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, src/utils/parsers/config-generator.js, src/config/plan-templates.js, README.md
173 -- **技术栈**: Node.js, Vitest
174 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
175 -- **备注**: form_schema 为空结构时将使用对应类型默认 schema
176 -
177 ----
178 -
179 -## [2026-02-14] - 解析文件过滤
180 -
181 -### 修复
182 -- 解析待处理目录时跳过 README.md
183 -
184 ----
185 -
186 -**详细信息**
187 -- **影响文件**: scripts/parse-docs.js, README.md
188 -- **技术栈**: Node.js
189 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
190 -- **备注**: 仅过滤 docs/to-parse/README.md
191 -
192 ----
193 -
194 -## [2026-02-14] - 搜索测试 Mock 开关修正
195 -
196 -### 修复
197 -- 搜索页单测固定使用真实 API Mock,避免被全局 Mock 开关干扰
198 -
199 ----
200 -
201 -**详细信息**
202 -- **影响文件**: src/pages/search/index.test.js
203 -- **技术栈**: Vitest
204 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
205 -- **备注**: 用例统一 mock USE_MOCK_DATA=false
206 -
207 ----
208 -
209 -## [2026-02-14] - 解析配置字段补齐
210 -
211 -### 新增
212 -- 解析配置生成按保险类型注入 form_schema 与 submit_mapping
213 -- 补充解析生成默认 schema/mapping 输出测试
214 -
215 ----
216 -
217 -**详细信息**
218 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, src/utils/parsers/config-generator.js, README.md
219 -- **技术栈**: Node.js, Vitest
220 -- **测试状态**: pnpm test 失败(search 页面 2 项断言);pnpm lint 30 warnings
221 -- **备注**: 解析生成不会再输出空的 form_schema/submit_mapping
222 -
223 ----
224 -
225 -## [2026-02-14] - Mock 数据结构优化
226 -
227 -### 新增
228 -- 添加测试商品置顶功能(savings-product-30b41aae)
229 -- 产品列表 Mock 数据新增 form_sn 和 created_time 字段
230 -
231 -### 修复
232 -- 修复 Mock 数据结构与真实 API 一致性
233 -- 将 category_id 改为 categories 数组结构
234 -- 移除多余字段(name, description, premium)
235 -
236 ----
237 -
238 -**详细信息**
239 -- **影响文件**: src/utils/mockData.js
240 -- **技术栈**: Mock 数据生成
241 -- **测试状态**: 已通过
242 -- **备注**: 测试商品固定在第一页第一位,便于测试
243 -
244 ----
245 -
246 -## [2026-02-14] - 测试计划书解析验证
247 -
248 -### 新增
249 -- 成功解析 docs/to-parse/测试计划书-智享未来.md 并生成计划书配置
250 -
251 ----
252 -
253 -**详细信息**
254 -- **影响文件**: src/config/plan-templates.js, docs/to-parse/测试计划书-智享未来.md
255 -- **技术栈**: Node.js, 文档解析脚本
256 -- **测试状态**: pnpm run parse:docs -- --file="测试计划书-智享未来.md" 通过
257 -- **备注**: 解析产物已写入 plan-templates 配置
258 -
259 ----
260 -
261 -## [2026-02-14] - 文档解析改造回归测试
262 -
263 -### 测试
264 -- pnpm test 通过(Vitest 全量用例)
265 -- pnpm lint 通过(30 个现存警告)
266 -
267 ----
268 -
269 -**详细信息**
270 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, src/pages/search/index.test.js, src/components/list/LoadMoreList/index.vue
271 -- **技术栈**: Vitest, ESLint
272 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
273 -- **备注**: 测试中出现 NutUI/Taro 组件解析警告与 Taro API mock 警告,但用例通过
274 -
275 ----
276 -
277 -## [2026-02-14] - 运营与审计完善
278 -
279 -### 新增
280 -- 解析摘要输出(成功/失败/耗时)并生成审计日志与变更摘要
281 -- 使用说明补充解析摘要与审计日志位置
282 -
283 ----
284 -
285 -**详细信息**
286 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, docs/to-parse/README.md, docs/tasks/文档解析改造-tasks.md, README.md
287 -- **技术栈**: Node.js, Vitest, 文档维护
288 -- **测试状态**: pnpm test 通过;pnpm lint 30 warnings
289 -- **备注**: 每次解析都有可追溯审计记录
290 -
291 ----
292 -
293 -## [2026-02-14] - 测试与验证完善
294 -
295 -### 新增
296 -- 补充解析流程集成测试与 updateConfigContent 边界测试
297 -- 新增 fixtures 文档样本说明并补齐相关文档入口
298 -
299 ----
300 -
301 -**详细信息**
302 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, docs/to-parse/README.md, docs/tasks/文档解析改造-tasks.md, README.md
303 -- **技术栈**: Node.js, Vitest, 文档维护
304 -- **测试状态**: 已通过(pnpm test),ESLint 存在现有警告
305 -- **备注**: 解析流程测试可重复运行,覆盖冲突与插入边界路径
306 -
307 ----
308 -
309 -## [2026-02-14] - 生成与写入稳态化
310 -
311 -### 新增
312 -- 结构化定位 PLAN_TEMPLATES 插入位置并支持 dry-run 变更预览
313 -- 增加重复 form_sn 冲突检测与阻断写入
314 -- 完善备份记录并支持回滚入口
315 -
316 ----
317 -
318 -**详细信息**
319 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, docs/tasks/文档解析改造-tasks.md, README.md
320 -- **技术栈**: Node.js, Vitest
321 -- **测试状态**: 已通过(pnpm test),ESLint 存在现有警告
322 -- **备注**: 解析写入路径更稳定,新增冲突保护与预览模式
323 -
324 ----
325 -
326 -## [2026-02-14] - 结构化解析校验接入
327 -
328 -### 新增
329 -- 接入 JSON Schema 校验并输出缺失字段报告
330 -- 校验失败阻断解析结果写入配置
331 -- 单测覆盖校验通过与失败路径
332 -
333 ----
334 -
335 -**详细信息**
336 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, package.json, docs/tasks/文档解析改造-tasks.md, README.md
337 -- **技术栈**: Node.js, Ajv, Vitest
338 -- **测试状态**: 已通过(pnpm test),ESLint 存在现有警告
339 -- **备注**: 校验规则覆盖核心字段并保留扩展字段
340 -
341 ----
342 -
343 -## [2026-02-14] - 文本抽取管线接入
344 -
345 -### 新增
346 -- 接入 PDF 文本抽取与页数元信息
347 -- 接入 Docx 文本抽取并输出警告信息
348 -- 统一抽取结果结构并增加抽取失败回退
349 -
350 ----
351 -
352 -**详细信息**
353 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, package.json, docs/tasks/文档解析改造-tasks.md, README.md
354 -- **技术栈**: Node.js, Vitest
355 -- **测试状态**: 已通过(pnpm test),ESLint 存在现有警告
356 -- **备注**: .doc 文件提示转换为 .docx,OCR 预留未启用
357 -
358 ----
359 -
360 -## [2026-02-14] - 文档解析输出定义完善
361 -
362 -### 更新
363 -- 明确解析输出 JSON 结构并补齐示例与约束
364 -- 生成 form_sn 改为稳定的 slug + hash 规则
365 -- 配置生成支持 form_schema 与 submit_mapping 输出
366 -
367 ----
368 -
369 -**详细信息**
370 -- **影响文件**: scripts/parse-docs.js, scripts/parse-docs.test.js, docs/plan/plan-form-schema-usage.md, docs/tasks/文档解析改造-tasks.md, README.md
371 -- **技术栈**: Node.js, Vitest, 文档维护
372 -- **测试状态**: 已通过(pnpm test),ESLint 存在现有警告
373 -- **备注**: 解析输出结构对齐 Schema 与提交映射配置
374 -
375 ----
376 -
377 -## [2026-02-14] - 文档解析改造任务清单
378 -
379 -### 新增
380 -- 新增文档解析改造任务清单,细化步骤与验收标准
381 -
382 ----
383 -
384 -**详细信息**
385 -- **影响文件**: docs/tasks/文档解析改造-tasks.md, README.md
386 -- **技术栈**: 文档维护
387 -- **测试状态**: 不适用
388 -- **备注**: 任务完成后按清单勾选便于回顾
389 -
390 ----
391 -
392 -## [2026-02-14] - 优化计划书字段配置管理
393 -
394 -### 新增
395 -- planFieldValidation.js - 字段验证系统,支持必填、长度、范围、正则、自定义验证
396 -- useFieldDependencies.js - 字段关联系统,管理显示/隐藏、启用/禁用
397 -- planFieldValidation.test.js - 完整单元测试(40个用例)
398 -
399 -### 修复
400 -- 修复 ESLint 错误:使用 Number.isNaN 代替全局 isNaN
401 -
402 -### 测试
403 -- 单元测试全部通过(40/40)
404 -- ESLint 检查通过
405 -
406 ----
407 -
408 -**详细信息**
409 -- **影响文件**: src/utils/planFieldValidation.js, src/composables/useFieldDependencies.js
410 -- **技术栈**: Vitest, Vue 3 Composition API
411 -- **测试状态**: 已通过
412 -- **备注**: 提取可复用验证逻辑,支持同步/异步验证
413 -
414 ----
415 -
416 -## [2026-02-14] - 表单状态常量化
417 -
418 -### 重构
419 -- 新增 `src/config/constants/orderStatus.js` 统一管理订单状态
420 -- 提取 `mapOrderStatus``getStatusText``isValidStatus` 工具函数
421 -- 重构 `usePlanView.js` 使用常量替代硬编码状态值
422 -
423 ----
424 -
425 -**详细信息**
426 -- **影响文件**: src/composables/usePlanView.js, src/config/constants/orderStatus.js
427 -- **技术栈**: Vue 3, Taro
428 -- **测试状态**: 已通过
429 -- **备注**: 提升代码可维护性,避免魔法数字
430 -
431 ----
432 -
433 -## [2026-02-14] - 人寿/重疾模板 Schema 化
434 -
435 -### 更新
436 -- 人寿与重疾模板改为 Schema 自动渲染与校验
437 -- 人寿/重疾产品配置增加 form_schema 入口
438 -- 使用文档补充人寿/重疾示例
439 -- README 同步最新更新
440 -
441 ----
442 -
443 -**详细信息**
444 -- **影响文件**: src/config/plan-templates.js, src/components/plan/PlanTemplates/LifeInsuranceTemplate.vue, src/components/plan/PlanTemplates/CriticalIllnessTemplate.vue, docs/plan/plan-form-schema-usage.md, README.md
445 -- **技术栈**: Vue 3, Taro 4
446 -- **测试状态**: 待测试
447 -- **备注**: 保障类产品字段新增仅需调整 Schema 配置
448 -
449 ----
450 -
451 -## [2026-02-14] - 计划书 Schema 注释与使用文档
452 -
453 -## [2026-02-14] - 计划书表单重构
454 -
455 -### 重构
456 -- 重构 PlanFormContainer.vue 的 submit 函数,使用模板配置的 submit_mapping
457 -- 新增完整的储蓄计划书模板 SavingsTemplate.vue
458 -- 在 plan-templates.js 中添加详细的字段映射配置
459 -
460 -### 文档
461 -- 更新 README.md 和 CHANGELOG.md
462 -- 新增 plan-form-schema-usage.md 使用说明文档
463 -
464 ----
465 -
466 -**详细信息**
467 -- **影响文件**: src/components/plan/PlanFormContainer.vue, src/components/plan/PlanTemplates/SavingsTemplate.vue, src/config/plan-templates.js, docs/plan/plan-form-schema-usage.md, README.md
468 -- **技术栈**: Vue 3, Taro 4
469 -- **测试状态**: 待测试
470 -- **备注**: Schema 配置与提交映射均有详细说明
471 -
472 ----
473 -
474 -### 新增
475 -- 补充计划书 Schema 与提交映射的详细注释与 JSDoc
476 -- 新增计划书 Schema 使用文档,便于新增保险类型
477 -
478 ----
479 -
480 -**详细信息**
481 -- **影响文件**: src/config/plan-templates.js, src/components/plan/PlanTemplates/SavingsTemplate.vue, src/components/plan/PlanFormContainer.vue, docs/plan/plan-form-schema-usage.md, README.md
482 -- **技术栈**: Vue 3, Taro 4
483 -- **测试状态**: 待测试
484 -- **备注**: Schema 配置与提交映射均有详细说明
485 -
486 ----
487 -
488 -## [2026-02-14] - 计划书表单 Schema 化(方案 2)
489 -
490 -### 更新
491 -- 储蓄类模板使用表单 Schema 自动字段渲染与校验
492 -- 提交字段映射迁移到模板配置,统一处理金额转换
493 -- 移除模式切换清空逻辑改为配置驱动
494 -
495 ----
496 -
497 -**详细信息**
498 -- **影响文件**: src/config/plan-templates.js, src/components/plan/PlanTemplates/SavingsTemplate.vue, src/components/plan/PlanFormContainer.vue, README.md
499 -- **技术栈**: Vue 3, Taro 4
500 -- **测试状态**: 待测试
501 -- **备注**: 储蓄类产品字段新增仅需调整配置
502 -
503 ----
504 -
505 -## [2026-02-14] - 文档对齐与业务说明更新
506 -
507 -### 更新
508 -- 同步 README 的业务模块与页面清单
509 -- 修正文档导航中的 API 集成日志入口
510 -- 重写新人入门指南为业务与路由上手文档
511 -- 对齐登录页路径说明与认证调试文档
512 -- 更新前端开发计划中的当前路由与模块概览
513 -- 对齐鉴权重构文档的登录页说明
514 -- 记录项目开发计划与调整版为历史版本并补充当前业务说明
515 -- README 补充路由与计划文档对齐说明
516 -
517 ----
518 -
519 -**详细信息**
520 -- **影响文件**: README.md, QUICKSTART.md, docs/README.md, docs/guides/新人入门指南.md, docs/guides/认证调试指南.md, docs/plan/前端开发计划.md, docs/plan/前端开发计划-调整版.md, docs/specs/2026-02-02-auth-refactoring.md
521 -- **技术栈**: 文档维护
522 -- **测试状态**: 不适用
523 -- **备注**: 与现有路由与页面模块保持一致
524 -
525 ----
526 -
527 -## [2026-02-14] - 提取方式字段重命名
528 -
529 -### 更新
530 -- 将提取方式字段从 `specified_amount_type` 统一重命名为 `withdrawal_method`
531 -- 同步更新计划书模板与相关文档的字段描述
532 -
533 ----
534 -
535 -**详细信息**
536 -- **影响文件**: src/components/plan/PlanTemplates/SavingsTemplate.vue, docs/plan/plan-entry-architecture.md, docs/lessons-learned/plan-entry-module-summary.md
537 -- **技术栈**: Vue 3, Taro 4
538 -- **测试状态**: 待测试
539 -- **备注**: 中文字段名保持为"提取方式"
540 -
541 ----
542 -
543 -## [2026-02-14] - 修复文件扩展名解析逻辑
544 -
545 -### 修复
546 -- 修复 JPEG 图片文件显示为 "DOC" 标签的问题
547 -- 优化 `extractExtensionFromFile` 函数的 fallback 逻辑
548 -- 移除首页、搜索页、周热门资料页的错误扩展名提取逻辑
549 -
550 ----
551 -
552 -**详细信息**
553 -- **影响文件**: src/utils/documentIcons.js, src/pages/index/index.vue, src/pages/search/index.vue, src/pages/week-hot-material/index.vue
554 -- **技术栈**: Vue 3, Taro 4, 文件处理
555 -- **测试状态**: 待测试
556 -- **备注**:
557 - - 问题根源:`fileName.split('.')` 对 "IMG_6395大" 返回文件名本身而非扩展名
558 - - 解决方案:让组件内部使用 `extractExtensionFromFile` 自动从 downloadUrl 解析扩展名
559 - - 优先级:extension 字段 > fileName > src > downloadUrl
560 - - 涉及页面:首页周热门资料、搜索页文件结果
561 -
562 ----
563 -
564 -## [2026-02-13] - 收藏页空名称处理
565 -
566 -### 修复
567 -- 修复收藏页数据 `name` 字段为 `null` 时显示空白的问题
568 -- 添加默认标题"未命名文件"兜底处理
569 -
570 ----
571 -
572 -**详细信息**
573 -- **影响文件**: src/pages/favorites/index.vue
574 -- **技术栈**: Vue 3, Taro 4
575 -- **测试状态**: 已通过
576 -- **备注**: 使用 `map` 方法在数据获取后立即处理,保持模板简洁
577 -
578 ----
579 -
580 -## [2026-02-13] - 登录权限检查与提示文案优化
581 -
582 -### 新增
583 -- 为首页网格导航"计划书"按钮添加登录权限检查
584 -- 未登录用户点击时显示友好的登录提示弹窗
585 -
586 -### 优化
587 -- 优化默认登录权限提示文案:从"登录后即可查看完整内容"改为"登录后即可使用完整功能"
588 -- 文案更通用,同时适用于查看型和操作型场景
589 -- 提升文案与实际操作的匹配度
590 -
591 ----
592 -
593 -**详细信息**
594 -- **影响文件**: src/config/permissions.js, src/pages/index/index.vue
595 -- **技术栈**: Vue 3, Taro 4, Composables
596 -- **测试状态**: 已通过
597 -- **备注**:
598 - - 首页网格导航使用自定义提示:"计划书功能需要登录后才能使用,是否立即登录?"
599 - - 其他"制作计划书"按钮使用优化后的默认文案
600 - - 修改后覆盖首页、产品中心、产品详情、搜索页的所有计划书相关操作
601 -
602 ----
603 -
604 -## [2026-02-13] - 文件操作反馈功能配置同步
605 -
606 -### 修复
607 -- 修复文件操作失败时"去反馈"按钮导致的 `showModal` 参数错误
608 -- 导入 `features` 配置使用命名导入(修复构建警告)
609 -- 根据 `features.feedback` 动态控制"去反馈"按钮显示
610 -- 根据配置动态调整提示文案(移除"前往意见反馈"提示)
611 -- 根据配置决定是否跳转反馈页面
612 -
613 ----
614 -
615 -**详细信息**
616 -- **影响文件**: src/composables/useFileOperation.js
617 -- **技术栈**: Vue 3, Taro 4
618 -- **测试状态**: 已通过
619 -- **备注**: 修复了当 `feedback: false` 时文件操作失败提示出现的参数错误
620 -
621 ----
622 -
623 -## [2026-02-13] - 储蓄类模板提取计划逻辑修正
624 -
625 -### 修复
626 -- 修正储蓄类产品模板的提取计划逻辑错误
627 -- 移除"是否生成说明"字段与"款项提取"配置的强依赖关系
628 -- "是否希望生成一份允许减少名义金额的提取说明?"现在作为独立字段,不影响提取方案配置
629 -- 移除错误的 watch 监听器,该监听器在选择"否"时会错误地清除所有提取计划字段
630 -- 更新校验逻辑:`withdrawal_enabled` 字段改为可选,不再强制校验
631 -
632 -### 文档
633 -- 更新 `docs/plan/plan-entry-architecture.md` 架构文档
634 -- 从"三层结构"改为"字段结构说明",明确字段1为独立字段
635 -- 新增组件设计代码示例,移除错误的 `v-if` 条件和 watch 监听器
636 -
637 ----
638 -
639 -**详细信息**
640 -- **影响文件**: src/components/plan/PlanTemplates/SavingsTemplate.vue, docs/plan/plan-entry-architecture.md
641 -- **技术栈**: Vue 3, Taro 4
642 -- **测试状态**: 待测试
643 -- **备注**: 提取方案配置现在始终显示(当配置启用时),不受"是否生成说明"字段影响
644 -
645 ----
646 -
647 -## [2026-02-13] - 消息详情页布局与状态优化
648 -
649 -### 优化
650 -- 优化计划书信息布局:长文本自动换行,避免挤压左侧标签
651 -- 添加计划书状态颜色标识:待处理(橙)、处理中(蓝)、已生成(绿)、已查看(灰)
652 -
653 ----
654 -
655 -**详细信息**
656 -- **影响文件**: src/pages/message-detail/index.vue
657 -- **技术栈**: Vue 3, Less, Flexbox
658 -- **测试状态**: 已通过
659 -- **备注**: 状态样式与计划列表页保持一致
660 -
661 ----
662 -
663 -## [2026-02-13] - 功能开关配置
664 -
665 -### 配置
666 -- 添加功能开关到 `src/config/features.js`
667 - - `contactService: false` - 隐藏帮助中心联系客服
668 - - `feedback: false` - 隐藏我的页面意见反馈
669 -
670 -- 帮助中心页面 (`src/pages/help-center/index.vue`):
671 - - 导入 `features.js` 配置
672 - - 使用 `v-if="features.contactService"` 控制联系客服显示
673 -
674 -- 我的页面 (`src/pages/mine/index.vue`):
675 - - 导入 `features.js` 配置
676 - - 使用计算属性过滤菜单项
677 - - 修改 `v-for` key 为 `item.key` 提高稳定性
678 -
679 -### 修复
680 -- 移除 TypeScript 类型的 JSDoc 注释(`@type {boolean}`),修复 eslint 警告
681 -
682 ----
683 -
684 -**详细信息**
685 -- **影响文件**: src/config/features.js, src/pages/help-center/index.vue, src/pages/mine/index.vue
686 -- **技术栈**: Vue 3, Taro 4
687 -- **测试状态**: 已通过 (npm lint + npm test)
688 -- **备注**: 当功能开放时,只需在 features.js 中将对应开关改为 true 即可
689 -
690 ----
691 -
692 -## [2026-02-13] - 首页标题样式调整
693 -
694 -### 优化
695 -- 调整首页"臻奇荟"标题位置至左上方(顶部间距从 180rpx 减小至 128rpx)
696 -- 优化标题对齐方式,适配整体页面布局
697 -
698 ----
699 -
700 -**详细信息**
701 -- **影响文件**: src/pages/index/index.vue
702 -- **技术栈**: Vue 3, TailwindCSS
703 -- **测试状态**: 已通过
704 -- **备注**: 保持原有高度占位,防止布局塌陷
705 -
706 ----
707 -
708 -## [2026-02-13] - 统一权限检查与移除重复代码
709 -
710 -### 新增
711 -- ListItemActions 组件集成权限检查逻辑
712 -
713 -### 优化
714 -- 移除 material-list 页面中重复的 usePermission 调用
715 -- 权限检查完全由 ListItemActions 组件内部处理
716 -- 添加 ListItemActions 组件 README 文档
717 -
718 ----
719 -
720 -**详细信息**
721 -- **影响文件**: src/pages/material-list/index.vue, src/components/list/ListItemActions/index.vue, src/components/list/ListItemActions/README.md
722 -- **技术栈**: Vue 3, Taro 4
723 -- **测试状态**: 已通过
724 -- **备注**: 组件自包含业务逻辑模式,父组件无需重复权限检查
725 -
726 ----
727 -
728 -## [2026-02-13] - 搜索页登录提示优化
729 -
730 -### 优化
731 -- 搜索页使用自定义登录提示术语"搜索功能需要登录后才能使用"
732 -- 支持通过 customOptions 参数覆盖默认权限提示内容
733 -
734 ----
735 -
736 -**详细信息**
737 -- **影响文件**: src/pages/search/index.vue
738 -- **技术栈**: Vue 3, Taro 4
739 -- **测试状态**: 已通过
740 -- **备注**: getPermissionConfig 支持自定义内容覆盖
741 -
742 ----
743 -
744 -## [2026-02-13] - 资料查看权限与搜索页测试对齐
745 -
746 -### 新增
747 -- 统一动作级权限映射,支持页面查看权限扩展
748 -- 资料查看入口增加登录权限校验与回调路径记录
749 -
750 -### 优化
751 -- 搜索页测试对齐当前实现并补充接口 Mock
752 -
753 ----
754 -
755 -**详细信息**
756 -- **影响文件**: src/composables/usePermission.js, src/config/permissions.js, src/components/cards/MaterialCard.vue, src/pages/material-list/index.vue, src/pages/search/index.test.js, vitest.config.js, package.json
757 -- **技术栈**: Vue 3, Taro 4, Pinia, Vitest
758 -- **测试状态**: 已通过(npm test)
759 -- **备注**: lint 存在历史 warning 未处理
760 -
761 ----
762 -
763 -## [2026-02-13] - 我的页面消息红点显示
764 -
765 -### 新增
766 -- 我的页面消息菜单项添加未读红点显示
767 -- 新增 `showMessageBadge` 计算属性,从 `userStore.unreadMsgCount` 读取未读状态
768 -- 添加 `.menu-badge` 样式,与 TabBar 红点保持一致
769 -
770 -### 优化
771 -- 为菜单项添加 `key` 属性,便于识别特定菜单项
772 -- 红点逻辑与 TabBar 完全一致,确保同步显示
773 -
774 ----
775 -
776 -**详细信息**
777 -- **影响文件**: src/pages/mine/index.vue
778 -- **技术栈**: Vue 3, Pinia
779 -- **测试状态**: 已通过
780 -- **备注**: 红点在 `unreadMsgCount > 0` 时显示
781 -
782 ----
783 -
784 -## [2026-02-12] - 优化反馈列表和消息页面图片加载
785 -
786 -### 新增
787 -- 新增 `optimizeImageUrl` 工具函数,自动为 CDN 图片添加缩略图优化参数
788 -- 支持自定义缩略图宽度和图片质量
789 -- 只处理 `cdn.ipadbiz.cn` 的图片
790 -- 非 CDN 图片保持原样返回
791 -
792 -### 优化
793 -- **反馈列表图片优化**:列表中使用 200px 缩略图(质量70),点击预览时才加载原图
794 - - 显著减少列表加载时的带宽消耗
795 - - 提升列表滚动性能
796 -
797 -- **消息详情页优化**:优化布局和样式
798 - - 调整背景色为浅灰色 `bg-gray-50`
799 - - 增加卡片式布局,添加圆角和阴影
800 - - 优化标题、时间、内容的视觉层级
801 - - 调整字号和行高提升阅读体验
802 -
803 -- **消息列表优化**:重构卡片布局,提升信息可读性
804 - - 第一行:标题(或内容预览)+ 未读红点
805 - - 添加状态标签(未读/已读)
806 - - 第二行:内容预览(截取前 60 字)
807 - - 右侧:时间 + 时钟图标
808 -
809 ----
810 -
811 -**详细信息**
812 -- **影响文件**: src/utils/tools.js, src/pages/feedback-list/index.vue, src/pages/message-detail/index.vue, src/pages/message/index.vue
813 -- **技术栈**: Vue 3, Taro, CDN 图片优化
814 -- **测试状态**: 已通过
815 -- **备注**: 性能收益 - 列表加载节省 ~99% 图片流量
816 -
817 ----
818 -
819 -> 本文档记录 Manulife WeApp 项目的所有重要变更。
820 -
821 -## [2026-02-13] - 添加文档解析工具临时文件到 gitignore
822 -
823 -### 配置
824 -- 忽略 `docs/parse-backup/` 备份目录
825 -- 忽略 `docs/to-parse/*.md` 待处理文档
826 -- 保留 `docs/to-parse/README.md` 说明文件
827 -
828 ----
829 -
830 -**详细信息**
831 -- **影响文件**: .gitignore
832 -- **技术栈**: Git
833 -- **测试状态**: N/A
834 -- **备注**: 避免将临时文档和备份文件提交到版本控制
......
1 -# 产品配置审核 - 计划书模版2.docx
2 -
3 -**解析时间**: 2026/2/14 23:58:54
4 -**原始文件**: 计划书模版2.docx
5 -**数据来源**: docs/to-parse/计划书模版2.docx
6 -
7 ----
8 -
9 -## 📋 产品基本信息
10 -
11 -| 字段 | 提取值 | 需要确认 |
12 -|------|--------|---------|
13 -| 产品名称 | 计划书模版2 | ✅ 请核对产品名称 |
14 -| 产品类型 | savings | ✅ 请确认产品类型 |
15 -| 币种 | USD | ✅ 请确认币种 |
16 -| form_sn | `savings-2-55bcffc2` | ✅ 请确认 form_sn 唯一性 |
17 -| 缴费年期 | ["整付"] | ✅ 请确认缴费年期选项 |
18 -| 年龄范围 | 0-75岁 | ✅ 请确认年龄范围 |
19 -| 保险期间 | 终身 | ✅ 请确认保险期间 |
20 -
21 -
22 -### 💰 储蓄类产品特有字段
23 -
24 -| 字段 | 提取值 | 需要确认 |
25 -|------|--------|---------|
26 -| 提取方式 | ["指定提取金额","最高固定提取金额"] | ✅ 请确认提取方式 |
27 -| 提取期 | ["1年","3年","5年","10年"] | ✅ 请确认提取期选项 |
28 -
29 -
30 ----
31 -
32 -## 🤖 智能字段提取报告
33 -
34 -### 匹配统计
35 -
36 -- ✅ 成功匹配: 3 字段
37 -- ⚠️ 使用默认值: 4 字段
38 -- ❌ 未匹配(需人工补充): 1 字段
39 -
40 -### ✅ 已成功匹配的字段
41 -
42 -- product_type
43 -- payment_periods
44 -- withdrawal_modes
45 -
46 -
47 -### ⚠️ 使用默认值的字段
48 -
49 -- **currency**: 未找到字段 "currency",使用默认值: "USD"
50 -- **age_range**: 未找到字段 "age_range",使用默认值: {"min":0,"max":75}
51 -- **insurance_period**: 未找到字段 "insurance_period",使用默认值: "终身"
52 -- **product_name**: 未找到产品名称,使用文件名: "计划书模版2"
53 -
54 -
55 -
56 -### ❌ 未匹配字段(需要人工补充)
57 -
58 -
59 -#### product_name
60 -
61 -- **原因**: 未找到匹配内容
62 -- **建议值**:
63 - - 从文档标题提取
64 - - 从第一行提取
65 - - 手动输入产品全称
66 -
67 -
68 -
69 ----
70 -
71 -## 🧾 配置预览
72 -
73 -```javascript
74 -{
75 - "product_name": "计划书模版2",
76 - "product_type": "savings",
77 - "currency": "USD",
78 - "form_sn": "savings-2-55bcffc2",
79 - "payment_periods": [
80 - "整付"
81 - ],
82 - "age_range": {
83 - "min": 0,
84 - "max": 75
85 - },
86 - "insurance_period": "终身",
87 - "is_savings": true,
88 - "withdrawal_modes": [
89 - "指定提取金额",
90 - "最高固定提取金额"
91 - ],
92 - "withdrawal_periods": [
93 - "1年",
94 - "3年",
95 - "5年",
96 - "10年"
97 - ]
98 -}
99 -```
100 -
101 ----
102 -
103 -## 📝 表单字段 (form_schema)
104 -
105 -```javascript
106 -{
107 - "base_fields": [],
108 - "withdrawal_fields": [],
109 - "reset_map": {}
110 -}
111 -```
112 -
113 ----
114 -
115 -## 🔄 提交字段映射 (submit_mapping)
116 -
117 -```javascript
118 -{}
119 -```
120 -
121 ----
122 -
123 -## 🧩 生成配置片段
124 -
125 -```javascript
126 -/**
127 - * 计划书模版2
128 - * @added 2026-02-14T15:58:54.707Z
129 - * @source docs/to-parse/计划书模版2.docx
130 - */
131 - 'savings-2-55bcffc2': {
132 - name: '计划书模版2',
133 - component: 'SavingsTemplate',
134 - category: 'savings',
135 - config: {
136 - currency: 'USD',
137 - payment_periods: ["整付"],
138 - age_range: { min: 0, max: 75 },
139 - insurance_period: '终身',
140 - withdrawal_plan: {
141 - enabled: true,
142 - currencies: ['HKD', 'USD', 'CNY'],
143 - default_currency: 'USD',
144 - withdrawal_modes: ["指定提取金额","最高固定提取金额"],
145 - withdrawal_periods: ["1年","3年","5年","10年"]
146 - },
147 - form_schema: savingsFormSchema,
148 - submit_mapping: savingsSubmitMapping
149 - }
150 - }
151 -```
152 -
153 ----
154 -
155 -## ✅ 审核检查清单
156 -
157 -### 基础信息
158 -- [ ] 产品名称正确
159 -- [ ] 产品类型正确(savings/critical-illness/life-insurance)
160 -- [ ] 币种正确(USD/CNY/HKD/EUR)
161 -- [ ] form_sn 唯一且符合命名规范
162 -
163 -### 缴费与年龄
164 -- [ ] 缴费年期选项完整且正确
165 -- [ ] 年龄范围合理
166 -- [ ] 保险期间正确
167 -
168 -### 储蓄类特有(如适用)
169 -- [ ] 提取方式正确
170 -- [ ] 提取期选项完整
171 -- [ ] 表单字段定义完整
172 -- [ ] 提交字段映射正确
173 -
174 ----
175 -
176 -## 📋 审核后操作
177 -
178 -### 确认无误
179 -```bash
180 -# 1. 移动到 approved 目录
181 -mv docs/parse-audit/pending/2026-02-14-计划书模版2.md \
182 - docs/parse-audit/approved/
183 -
184 -# 2. 合并到正式配置
185 -# 手动复制或使用工具合并到 src/config/plan-templates.js
186 -
187 -# 3. 删除待审核文件(可选)
188 -rm docs/parse-audit/pending/2026-02-14-计划书模版2.md
189 -```
190 -
191 -### 需要修改
192 -1. 编辑本文件修正内容
193 -2. 重新提交审核
194 -
195 -### 放弃本次解析
196 -```bash
197 -rm docs/parse-audit/pending/2026-02-14-计划书模版2.md
198 -```
199 -
200 ----
201 -
202 -## 审核状态
203 -
204 -- [ ] 待审核
205 -- [ ] 已通过
206 -- [ ] 已拒绝
207 -
208 -## 审核意见
209 -
210 -```text
211 -```
1 -# 产品配置审核 - 计划书模版3.docx
2 -
3 -**解析时间**: 2026/2/14 23:58:54
4 -**原始文件**: 计划书模版3.docx
5 -**数据来源**: docs/to-parse/计划书模版3.docx
6 -
7 ----
8 -
9 -## 📋 产品基本信息
10 -
11 -| 字段 | 提取值 | 需要确认 |
12 -| -------- | ---------------------- | ------------------------ |
13 -| 产品名称 | 计划书模版3 | ✅ 请核对产品名称 |
14 -| 产品类型 | savings | ✅ 请确认产品类型 |
15 -| 币种 | USD | ✅ 请确认币种 |
16 -| form_sn | `savings-3-8f4f27ad` | ✅ 请确认 form_sn 唯一性 |
17 -| 缴费年期 | ["5年"] | ✅ 请确认缴费年期选项 |
18 -| 年龄范围 | 0-75岁 | ✅ 请确认年龄范围 |
19 -| 保险期间 | 终身 | ✅ 请确认保险期间 |
20 -
21 -### 💰 储蓄类产品特有字段
22 -
23 -| 字段 | 提取值 | 需要确认 |
24 -| -------- | ------------------------------- | ------------------- |
25 -| 提取方式 | ["年龄指定金额","最高固定金额"] | ✅ 请确认提取方式 |
26 -| 提取期 | ["1年","3年","5年","10年"] | ✅ 请确认提取期选项 |
27 -
28 ----
29 -
30 -## 🤖 智能字段提取报告
31 -
32 -### 匹配统计
33 -
34 -- ✅ 成功匹配: 1 字段
35 -- ⚠️ 使用默认值: 5 字段
36 -- ❌ 未匹配(需人工补充): 1 字段
37 -
38 -### ✅ 已成功匹配的字段
39 -
40 -- payment_periods
41 -
42 -### ⚠️ 使用默认值的字段
43 -
44 -- **product_type**: 未找到字段 "product_type",使用默认值: "savings"
45 -- **currency**: 未找到字段 "currency",使用默认值: "USD"
46 -- **age_range**: 未找到字段 "age_range",使用默认值: {"min":0,"max":75}
47 -- **insurance_period**: 未找到字段 "insurance_period",使用默认值: "终身"
48 -- **product_name**: 未找到产品名称,使用文件名: "计划书模版3"
49 -
50 -### ❌ 未匹配字段(需要人工补充)
51 -
52 -#### product_name
53 -
54 -- **原因**: 未找到匹配内容
55 -- **建议值**:
56 - - 从文档标题提取
57 - - 从第一行提取
58 - - 手动输入产品全称
59 -
60 ----
61 -
62 -## 🧾 配置预览
63 -
64 -```javascript
65 -{
66 - "product_name": "计划书模版3",
67 - "product_type": "savings",
68 - "currency": "USD",
69 - "form_sn": "savings-3-8f4f27ad",
70 - "payment_periods": [
71 - "5年"
72 - ],
73 - "age_range": {
74 - "min": 0,
75 - "max": 75
76 - },
77 - "insurance_period": "终身",
78 - "is_savings": true,
79 - "withdrawal_modes": [
80 - "年龄指定金额",
81 - "最高固定金额"
82 - ],
83 - "withdrawal_periods": [
84 - "1年",
85 - "3年",
86 - "5年",
87 - "10年"
88 - ]
89 -}
90 -```
91 -
92 ----
93 -
94 -## 📝 表单字段 (form_schema)
95 -
96 -```javascript
97 -{
98 - "base_fields": [],
99 - "withdrawal_fields": [],
100 - "reset_map": {}
101 -}
102 -```
103 -
104 ----
105 -
106 -## 🔄 提交字段映射 (submit_mapping)
107 -
108 -```javascript
109 -{}
110 -```
111 -
112 ----
113 -
114 -## 🧩 生成配置片段
115 -
116 -```javascript
117 -/**
118 - * 计划书模版3
119 - * @added 2026-02-14T15:58:54.729Z
120 - * @source docs/to-parse/计划书模版3.docx
121 - */
122 - 'savings-3-8f4f27ad': {
123 - name: '计划书模版3',
124 - component: 'SavingsTemplate',
125 - category: 'savings',
126 - config: {
127 - currency: 'USD',
128 - payment_periods: ["5年"],
129 - age_range: { min: 0, max: 75 },
130 - insurance_period: '终身',
131 - withdrawal_plan: {
132 - enabled: true,
133 - currencies: ['HKD', 'USD', 'CNY'],
134 - default_currency: 'USD',
135 - withdrawal_modes: ["年龄指定金额","最高固定金额"],
136 - withdrawal_periods: ["1年","3年","5年","10年"]
137 - },
138 - form_schema: savingsFormSchema,
139 - submit_mapping: savingsSubmitMapping
140 - }
141 - }
142 -```
143 -
144 ----
145 -
146 -## ✅ 审核检查清单
147 -
148 -### 基础信息
149 -
150 -- [ ] 产品名称正确
151 -- [ ] 产品类型正确(savings/critical-illness/life-insurance)
152 -- [ ] 币种正确(USD/CNY/HKD/EUR)
153 -- [ ] form_sn 唯一且符合命名规范
154 -
155 -### 缴费与年龄
156 -
157 -- [ ] 缴费年期选项完整且正确
158 -- [ ] 年龄范围合理
159 -- [ ] 保险期间正确
160 -
161 -### 储蓄类特有(如适用)
162 -
163 -- [ ] 提取方式正确
164 -- [ ] 提取期选项完整
165 -- [ ] 表单字段定义完整
166 -- [ ] 提交字段映射正确
167 -
168 ----
169 -
170 -## 📋 审核后操作
171 -
172 -### 确认无误
173 -
174 -```bash
175 -# 1. 移动到 approved 目录
176 -mv docs/parse-audit/pending/2026-02-14-计划书模版3.md \
177 - docs/parse-audit/approved/
178 -
179 -# 2. 合并到正式配置
180 -# 手动复制或使用工具合并到 src/config/plan-templates.js
181 -
182 -# 3. 删除待审核文件(可选)
183 -rm docs/parse-audit/pending/2026-02-14-计划书模版3.md
184 -```
185 -
186 -### 需要修改
187 -
188 -1. 编辑本文件修正内容
189 -2. 重新提交审核
190 -
191 -### 放弃本次解析
192 -
193 -```bash
194 -rm docs/parse-audit/pending/2026-02-14-计划书模版3.md
195 -```
196 -
197 ----
198 -
199 -## 审核状态
200 -
201 -- [ ] 待审核
202 -- [ ] 已通过
203 -- [ ] 已拒绝
204 -
205 -## 审核意见
206 -
207 -```text
208 -
209 -```
1 # 产品配置审核 - 计划书模版2.docx 1 # 产品配置审核 - 计划书模版2.docx
2 2
3 -**解析时间**: 2026/2/15 00:41:27 3 +**解析时间**: 2026/2/15 10:20:30
4 **原始文件**: 计划书模版2.docx 4 **原始文件**: 计划书模版2.docx
5 **数据来源**: docs/to-parse/计划书模版2.docx 5 **数据来源**: docs/to-parse/计划书模版2.docx
6 6
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
116 ```javascript 116 ```javascript
117 /** 117 /**
118 * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日 118 * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日
119 - * @added 2026-02-14T16:41:27.878Z 119 + * @added 2026-02-15T02:20:30.982Z
120 * @source docs/to-parse/计划书模版2.docx 120 * @source docs/to-parse/计划书模版2.docx
121 */ 121 */
122 'savings-product-ef3dd50b': { 122 'savings-product-ef3dd50b': {
...@@ -169,14 +169,14 @@ ...@@ -169,14 +169,14 @@
169 ### 确认无误 169 ### 确认无误
170 ```bash 170 ```bash
171 # 1. 移动到 approved 目录 171 # 1. 移动到 approved 目录
172 -mv docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md \ 172 +mv docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md \
173 docs/parse-audit/approved/ 173 docs/parse-audit/approved/
174 174
175 # 2. 合并到正式配置 175 # 2. 合并到正式配置
176 # 手动复制或使用工具合并到 src/config/plan-templates.js 176 # 手动复制或使用工具合并到 src/config/plan-templates.js
177 177
178 # 3. 删除待审核文件(可选) 178 # 3. 删除待审核文件(可选)
179 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md 179 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md
180 ``` 180 ```
181 181
182 ### 需要修改 182 ### 需要修改
...@@ -185,7 +185,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯傳承保障計劃 ...@@ -185,7 +185,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯傳承保障計劃
185 185
186 ### 放弃本次解析 186 ### 放弃本次解析
187 ```bash 187 ```bash
188 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md 188 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯傳承保障計劃-性別-年齡-出生年月日.md
189 ``` 189 ```
190 190
191 --- 191 ---
......
1 # 产品配置审核 - 计划书模版2.docx 1 # 产品配置审核 - 计划书模版2.docx
2 2
3 -**解析时间**: 2026/2/15 00:41:27 3 +**解析时间**: 2026/2/15 10:20:30
4 **原始文件**: 计划书模版2.docx 4 **原始文件**: 计划书模版2.docx
5 **数据来源**: docs/to-parse/计划书模版2.docx 5 **数据来源**: docs/to-parse/计划书模版2.docx
6 6
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
114 ```javascript 114 ```javascript
115 /** 115 /**
116 * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日 116 * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日
117 - * @added 2026-02-14T16:41:27.893Z 117 + * @added 2026-02-15T02:20:30.997Z
118 * @source docs/to-parse/计划书模版2.docx 118 * @source docs/to-parse/计划书模版2.docx
119 */ 119 */
120 'savings-product-aaaa60f8': { 120 'savings-product-aaaa60f8': {
...@@ -167,14 +167,14 @@ ...@@ -167,14 +167,14 @@
167 ### 确认无误 167 ### 确认无误
168 ```bash 168 ```bash
169 # 1. 移动到 approved 目录 169 # 1. 移动到 approved 目录
170 -mv docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md \ 170 +mv docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md \
171 docs/parse-audit/approved/ 171 docs/parse-audit/approved/
172 172
173 # 2. 合并到正式配置 173 # 2. 合并到正式配置
174 # 手动复制或使用工具合并到 src/config/plan-templates.js 174 # 手动复制或使用工具合并到 src/config/plan-templates.js
175 175
176 # 3. 删除待审核文件(可选) 176 # 3. 删除待审核文件(可选)
177 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md 177 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md
178 ``` 178 ```
179 179
180 ### 需要修改 180 ### 需要修改
...@@ -183,7 +183,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯家傳承保險計 ...@@ -183,7 +183,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯家傳承保險計
183 183
184 ### 放弃本次解析 184 ### 放弃本次解析
185 ```bash 185 ```bash
186 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md 186 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏摯家傳承保險計劃-性別-年齡-出生年月日.md
187 ``` 187 ```
188 188
189 --- 189 ---
......
1 # 产品配置审核 - 计划书模版2.docx 1 # 产品配置审核 - 计划书模版2.docx
2 2
3 -**解析时间**: 2026/2/15 00:41:27 3 +**解析时间**: 2026/2/15 10:20:30
4 **原始文件**: 计划书模版2.docx 4 **原始文件**: 计划书模版2.docx
5 **数据来源**: docs/to-parse/计划书模版2.docx 5 **数据来源**: docs/to-parse/计划书模版2.docx
6 6
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
114 ```javascript 114 ```javascript
115 /** 115 /**
116 * 宏浚傳承保障計劃 116 * 宏浚傳承保障計劃
117 - * @added 2026-02-14T16:41:27.893Z 117 + * @added 2026-02-15T02:20:30.997Z
118 * @source docs/to-parse/计划书模版2.docx 118 * @source docs/to-parse/计划书模版2.docx
119 */ 119 */
120 'savings-product-d1581522': { 120 'savings-product-d1581522': {
...@@ -167,14 +167,14 @@ ...@@ -167,14 +167,14 @@
167 ### 确认无误 167 ### 确认无误
168 ```bash 168 ```bash
169 # 1. 移动到 approved 目录 169 # 1. 移动到 approved 目录
170 -mv docs/parse-audit/pending/2026-02-14-计划书模版2-宏浚傳承保障計劃.md \ 170 +mv docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏浚傳承保障計劃.md \
171 docs/parse-audit/approved/ 171 docs/parse-audit/approved/
172 172
173 # 2. 合并到正式配置 173 # 2. 合并到正式配置
174 # 手动复制或使用工具合并到 src/config/plan-templates.js 174 # 手动复制或使用工具合并到 src/config/plan-templates.js
175 175
176 # 3. 删除待审核文件(可选) 176 # 3. 删除待审核文件(可选)
177 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏浚傳承保障計劃.md 177 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏浚傳承保障計劃.md
178 ``` 178 ```
179 179
180 ### 需要修改 180 ### 需要修改
...@@ -183,7 +183,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏浚傳承保障計劃 ...@@ -183,7 +183,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏浚傳承保障計劃
183 183
184 ### 放弃本次解析 184 ### 放弃本次解析
185 ```bash 185 ```bash
186 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-宏浚傳承保障計劃.md 186 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-宏浚傳承保障計劃.md
187 ``` 187 ```
188 188
189 --- 189 ---
......
1 # 产品配置审核 - 计划书模版2.docx 1 # 产品配置审核 - 计划书模版2.docx
2 2
3 -**解析时间**: 2026/2/15 00:41:27 3 +**解析时间**: 2026/2/15 10:20:30
4 **原始文件**: 计划书模版2.docx 4 **原始文件**: 计划书模版2.docx
5 **数据来源**: docs/to-parse/计划书模版2.docx 5 **数据来源**: docs/to-parse/计划书模版2.docx
6 6
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
115 ```javascript 115 ```javascript
116 /** 116 /**
117 * 赤霞珠終身壽險計劃2基本人壽保障選項 117 * 赤霞珠終身壽險計劃2基本人壽保障選項
118 - * @added 2026-02-14T16:41:27.893Z 118 + * @added 2026-02-15T02:20:30.997Z
119 * @source docs/to-parse/计划书模版2.docx 119 * @source docs/to-parse/计划书模版2.docx
120 */ 120 */
121 'savings-2-031c1237': { 121 'savings-2-031c1237': {
...@@ -168,14 +168,14 @@ ...@@ -168,14 +168,14 @@
168 ### 确认无误 168 ### 确认无误
169 ```bash 169 ```bash
170 # 1. 移动到 approved 目录 170 # 1. 移动到 approved 目录
171 -mv docs/parse-audit/pending/2026-02-14-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md \ 171 +mv docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md \
172 docs/parse-audit/approved/ 172 docs/parse-audit/approved/
173 173
174 # 2. 合并到正式配置 174 # 2. 合并到正式配置
175 # 手动复制或使用工具合并到 src/config/plan-templates.js 175 # 手动复制或使用工具合并到 src/config/plan-templates.js
176 176
177 # 3. 删除待审核文件(可选) 177 # 3. 删除待审核文件(可选)
178 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md 178 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md
179 ``` 179 ```
180 180
181 ### 需要修改 181 ### 需要修改
...@@ -184,7 +184,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-赤霞珠終身壽險計 ...@@ -184,7 +184,7 @@ rm docs/parse-audit/pending/2026-02-14-计划书模版2-赤霞珠終身壽險計
184 184
185 ### 放弃本次解析 185 ### 放弃本次解析
186 ```bash 186 ```bash
187 -rm docs/parse-audit/pending/2026-02-14-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md 187 +rm docs/parse-audit/pending/计划书模版2/2026-02-15-计划书模版2-赤霞珠終身壽險計劃2基本人壽保障選項.md
188 ``` 188 ```
189 189
190 --- 190 ---
......
...@@ -24,3 +24,6 @@ ...@@ -24,3 +24,6 @@
24 {"at":"2026-02-14T16:39:56.947Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":46,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":false,"dry_run":false,"updated_count":0,"form_sn_list":[],"conflicts":[],"reason":"insert_not_found"}} 24 {"at":"2026-02-14T16:39:56.947Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":46,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":false,"dry_run":false,"updated_count":0,"form_sn_list":[],"conflicts":[],"reason":"insert_not_found"}}
25 {"at":"2026-02-14T16:41:18.047Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":46,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":true,"dry_run":true,"updated_count":4,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:18.029Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:18.044Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-14T16:41:18.044Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}} 25 {"at":"2026-02-14T16:41:18.047Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":46,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":true,"dry_run":true,"updated_count":4,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:18.029Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:18.044Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-14T16:41:18.044Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}}
26 {"at":"2026-02-14T16:41:27.896Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":47,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":true,"dry_run":true,"updated_count":4,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:27.878Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:27.893Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-14T16:41:27.893Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}} 26 {"at":"2026-02-14T16:41:27.896Z","mode":"single","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":47,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[]},"change_summary":{"ok":true,"dry_run":true,"updated_count":4,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:27.878Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-14T16:41:27.893Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-14T16:41:27.893Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}}
27 +{"at":"2026-02-15T02:10:06.819Z","mode":"batch","options":{"dry_run":true},"summary":{"total_docs":2,"total_products":5,"success":5,"failed":0,"duration_ms":73,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"},{"form_sn":"savings-3-8f4f27ad","product_name":"计划书模版3","file":"计划书模版3.docx"}],"failed_list":[],"total":5},"change_summary":{"ok":true,"dry_run":true,"updated_count":5,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237","savings-3-8f4f27ad"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-15T02:10:06.768Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-15T02:10:06.803Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-15T02:10:06.803Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}}
28 +{"at":"2026-02-15T02:19:44.455Z","mode":"batch","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":1,"success":1,"failed":0,"duration_ms":39,"success_list":[{"form_sn":"savings-3-8f4f27ad","product_name":"计划书模版3","file":"计划书模版3.docx"}],"failed_list":[],"total":1},"change_summary":{"ok":true,"dry_run":true,"updated_count":1,"form_sn_list":["savings-3-8f4f27ad"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 计划书模版3\n+ * @added 2026-02-15T02:19:44.438Z\n+ * @source docs/to-parse/计划书模版3.docx\n+ */\n+ 'savings-3-8f4f27ad': {\n+ name: '计划书模版3',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"5年\",\"8年\",\"12年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ }"}}
29 +{"at":"2026-02-15T02:20:31.001Z","mode":"batch","options":{"dry_run":true},"summary":{"total_docs":1,"total_products":4,"success":4,"failed":0,"duration_ms":47,"success_list":[{"form_sn":"savings-product-ef3dd50b","product_name":"宏摯傳承保障計劃 - 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-aaaa60f8","product_name":"宏摯家傳承保險計劃- 性別, 年齡, 出生年月日","file":"计划书模版2.docx"},{"form_sn":"savings-product-d1581522","product_name":"宏浚傳承保障計劃","file":"计划书模版2.docx"},{"form_sn":"savings-2-031c1237","product_name":"赤霞珠終身壽險計劃2基本人壽保障選項","file":"计划书模版2.docx"}],"failed_list":[],"total":4},"change_summary":{"ok":true,"dry_run":true,"updated_count":4,"form_sn_list":["savings-product-ef3dd50b","savings-product-aaaa60f8","savings-product-d1581522","savings-2-031c1237"],"conflicts":[],"reason":null,"diff_preview":"--- plan-templates.js\n+++ plan-templates.js\n+ /**\n+ * 宏摯傳承保障計劃 - 性別, 年齡, 出生年月日\n+ * @added 2026-02-15T02:20:30.982Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-ef3dd50b': {\n+ name: '宏摯傳承保障計劃 - 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\",\"10年\",\"15年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"最高固定提取金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏摯家傳承保險計劃- 性別, 年齡, 出生年月日\n+ * @added 2026-02-15T02:20:30.997Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-aaaa60f8': {\n+ name: '宏摯家傳承保險計劃- 性別, 年齡, 出生年月日',\n+ component: 'SavingsTemplate',\n+ category: 'savings',\n+ config: {\n+ currency: 'USD',\n+ payment_periods: [\"整付\",\"3年\",\"5年\"],\n+ age_range: { min: 0, max: 75 },\n+ insurance_period: '终身',\n+ withdrawal_plan: {\n+ enabled: true,\n+ currencies: ['HKD', 'USD', 'CNY'],\n+ default_currency: 'USD',\n+ withdrawal_modes: [\"年龄指定金额\",\"最高固定金额\"],\n+ withdrawal_periods: [\"1年\",\"3年\",\"5年\",\"10年\"]\n+ },\n+ form_schema: savingsFormSchema,\n+ submit_mapping: savingsSubmitMapping\n+ }\n+ },\n+ \n+ /**\n+ * 宏浚傳承保障計劃\n+ * @added 2026-02-15T02:20:30.997Z\n+ * @source docs/to-parse/计划书模版2.docx\n+ */\n+ 'savings-product-d1581522': {"}}
......
...@@ -34,10 +34,16 @@ pnpm run parse:docs:file -- --file="产品说明书.pdf" --write-config ...@@ -34,10 +34,16 @@ pnpm run parse:docs:file -- --file="产品说明书.pdf" --write-config
34 34
35 ### 3. 查看结果 35 ### 3. 查看结果
36 36
37 -解析成功后会生成待审核文件,位置如下: 37 +解析成功后会生成待审核文件,位置如下(按原始文档名分目录)
38 38
39 ``` 39 ```
40 -docs/parse-audit/pending/ 40 +docs/parse-audit/pending/<原始文档名>/
41 +```
42 +
43 +解析成功后原始文档会自动归档到:
44 +
45 +```
46 +docs/to-parse/archived/YYYY-MM-DD/
41 ``` 47 ```
42 48
43 审核通过后再手动合并到 `src/config/plan-templates.js`,或使用 `--write-config` 明确写入。 49 审核通过后再手动合并到 `src/config/plan-templates.js`,或使用 `--write-config` 明确写入。
...@@ -103,3 +109,4 @@ docs/parsed-backup/parse-audit.jsonl ...@@ -103,3 +109,4 @@ docs/parsed-backup/parse-audit.jsonl
103 1. **文档命名**:建议使用有意义的文件名,方便识别产品 109 1. **文档命名**:建议使用有意义的文件名,方便识别产品
104 2. **手动审核**:生成后请检查配置是否正确 110 2. **手动审核**:生成后请检查配置是否正确
105 3. **版本控制**:生成的配置会自动备份 111 3. **版本控制**:生成的配置会自动备份
112 +4. **二次解析**:需要重新解析时,将归档文件移回 `docs/to-parse/`
......
1 -# 文档解析工具使用指南
2 -
3 -## 功能概述
4 -
5 -文档解析工具用于将保险产品文档(PDF、DOCX)自动解析为计划书配置,支持智能识别产品类型、币种、缴费年期等信息。
6 -
7 -## 快速开始
8 -
9 -### 1. 查看待处理文档
10 -
11 -```bash
12 -npm run parse:docs:list
13 -```
14 -
15 -### 2. 查看配置状态
16 -
17 -```bash
18 -npm run parse:docs:status
19 -```
20 -
21 -输出示例:
22 -```
23 -🔧 文档解析服务配置状态:
24 -──────────────────────────────────────────────────
25 -📄 markitdown: ❌ 未配置
26 -🤖 AI 服务: ❌ 未配置
27 -──────────────────────────────────────────────────
28 -
29 -💡 配置提示:
30 - 1. 使用 markitdown: 安装 Python 并运行 "pip install markitdown"
31 - 2. 配置 AI 服务: 设置环境变量(.env 文件)
32 -```
33 -
34 -### 3. 解析所有文档
35 -
36 -```bash
37 -npm run parse:docs
38 -```
39 -
40 -### 4. 解析单个文档
41 -
42 -```bash
43 -npm run parse:docs:file="产品说明书.pdf"
44 -```
45 -
46 -## 配置 AI 服务(可选)
47 -
48 -如需启用智能解析功能,请配置以下环境变量:
49 -
50 -### 方法 1: 使用 .env 文件
51 -
52 -```bash
53 -# 复制示例配置
54 -cp scripts/.env.example scripts/.env
55 -
56 -# 编辑 .env 文件,填写 API Key
57 -vim scripts/.env
58 -```
59 -
60 -### 方法 2: 使用环境变量
61 -
62 -```bash
63 -export AI_SERVICE_TYPE=openai
64 -export OPENAI_API_KEY=sk-your-key-here
65 -npm run parse:docs
66 -```
67 -
68 -## 支持的 AI 服务
69 -
70 -| 服务 | 说明 | 环境变量 |
71 -|------|------|---------|
72 -| OpenAI | GPT-4/GPT-3.5 | `OPENAI_API_KEY` |
73 -| Anthropic | Claude 3 Sonnet | `ANTHROPIC_API_KEY` |
74 -| OpenRouter | 聚合服务 | `OPENROUTER_API_KEY` |
75 -
76 -## 解析流程
77 -
78 -1. **文档转换**:将 PDF/DOCX 转换为可读文本
79 -2. **AI 解析**:从文本中提取结构化配置(产品类型、币种、年期等)
80 -3. **生成代码**:生成 `plan-templates.js` 配置代码
81 -4. **更新配置**:自动更新到配置文件
82 -
83 -## 当前状态
84 -
85 --**基础功能**:支持 PDF、DOCX 文本提取
86 --**启发式推断**:根据文件名和内容推断产品类型和币种
87 --**AI 解析**:待集成 AI 服务(需要配置 API Key)
88 -
89 -## 文档位置
90 -
91 -待解析文档放在:`docs/to-parse/` 文件夹
92 -
93 -支持格式:`.pdf`, `.docx`, `.doc`, `.txt`, `.md`
...@@ -36,6 +36,7 @@ import { splitByProducts, findProductTitles, generateSplitReport } from './produ ...@@ -36,6 +36,7 @@ import { splitByProducts, findProductTitles, generateSplitReport } from './produ
36 // ========== 配置区 ========== 36 // ========== 配置区 ==========
37 37
38 const DOCS_DIR = path.resolve(process.cwd(), 'docs/to-parse') 38 const DOCS_DIR = path.resolve(process.cwd(), 'docs/to-parse')
39 +const DOCS_ARCHIVE_DIR = path.resolve(process.cwd(), 'docs/to-parse/archived')
39 const CONFIG_FILE = path.resolve(process.cwd(), 'src/config/plan-templates.js') 40 const CONFIG_FILE = path.resolve(process.cwd(), 'src/config/plan-templates.js')
40 const BACKUP_DIR = path.resolve(process.cwd(), 'docs/parsed-backup') 41 const BACKUP_DIR = path.resolve(process.cwd(), 'docs/parsed-backup')
41 42
...@@ -91,6 +92,29 @@ function getFileMeta(filePath, extraMeta = {}) { ...@@ -91,6 +92,29 @@ function getFileMeta(filePath, extraMeta = {}) {
91 } 92 }
92 } 93 }
93 94
95 +function buildArchiveFilePath(fileName) {
96 + const date = new Date().toISOString().split('T')[0]
97 + const archiveDir = path.join(DOCS_ARCHIVE_DIR, date)
98 + ensureDir(archiveDir)
99 + let targetPath = path.join(archiveDir, fileName)
100 + if (fs.existsSync(targetPath)) {
101 + const ext = path.extname(fileName)
102 + const baseName = path.basename(fileName, ext)
103 + targetPath = path.join(archiveDir, `${baseName}-${Date.now()}${ext}`)
104 + }
105 + return targetPath
106 +}
107 +
108 +function archiveParsedFile(filePath) {
109 + if (!fs.existsSync(filePath)) {
110 + return null
111 + }
112 + ensureDir(DOCS_ARCHIVE_DIR)
113 + const archivePath = buildArchiveFilePath(path.basename(filePath))
114 + fs.renameSync(filePath, archivePath)
115 + return archivePath
116 +}
117 +
94 function buildExtractResult(filePath, text, warnings = [], extraMeta = {}) { 118 function buildExtractResult(filePath, text, warnings = [], extraMeta = {}) {
95 return { 119 return {
96 text, 120 text,
...@@ -750,6 +774,14 @@ async function parseSingleFile(filePath) { ...@@ -750,6 +774,14 @@ async function parseSingleFile(filePath) {
750 }) 774 })
751 } 775 }
752 776
777 + const shouldArchive = results.length > 0 && results.every(r => r.success)
778 + if (shouldArchive) {
779 + const archivedPath = archiveParsedFile(filePath)
780 + if (archivedPath) {
781 + console.log("📦 已归档原始文档: " + archivedPath)
782 + }
783 + }
784 +
753 // 单产品时返回单个结果对象(保持向后兼容) 785 // 单产品时返回单个结果对象(保持向后兼容)
754 // 多产品时返回数组 786 // 多产品时返回数组
755 if (configs.length === 1) { 787 if (configs.length === 1) {
...@@ -786,6 +818,8 @@ async function generateAuditFile(fileName, config, code, productIndex = 0, total ...@@ -786,6 +818,8 @@ async function generateAuditFile(fileName, config, code, productIndex = 0, total
786 818
787 const date = new Date().toISOString().split('T')[0] 819 const date = new Date().toISOString().split('T')[0]
788 const baseFileName = fileName.replace(/\.[^/.]+$/, '') 820 const baseFileName = fileName.replace(/\.[^/.]+$/, '')
821 + const pendingDir = path.join(AUDIT_PENDING_DIR, baseFileName)
822 + ensureDir(pendingDir)
789 823
790 // 多产品文档时,为每个产品生成独立文件 824 // 多产品文档时,为每个产品生成独立文件
791 let auditFileName 825 let auditFileName
...@@ -799,7 +833,7 @@ async function generateAuditFile(fileName, config, code, productIndex = 0, total ...@@ -799,7 +833,7 @@ async function generateAuditFile(fileName, config, code, productIndex = 0, total
799 } else { 833 } else {
800 auditFileName = `${date}-${baseFileName}.md` 834 auditFileName = `${date}-${baseFileName}.md`
801 } 835 }
802 - const auditFilePath = path.join(AUDIT_PENDING_DIR, auditFileName) 836 + const auditFilePath = path.join(pendingDir, auditFileName)
803 const formSn = generateFormSn(config) 837 const formSn = generateFormSn(config)
804 const formSchemaPreview = config.form_schema ? JSON.stringify(config.form_schema, null, 2) : '// 请手动补充' 838 const formSchemaPreview = config.form_schema ? JSON.stringify(config.form_schema, null, 2) : '// 请手动补充'
805 const submitMappingPreview = config.submit_mapping ? JSON.stringify(config.submit_mapping, null, 2) : '// 请手动补充' 839 const submitMappingPreview = config.submit_mapping ? JSON.stringify(config.submit_mapping, null, 2) : '// 请手动补充'
...@@ -945,14 +979,14 @@ ${code.trim()} ...@@ -945,14 +979,14 @@ ${code.trim()}
945 ### 确认无误 979 ### 确认无误
946 \`\`\`bash 980 \`\`\`bash
947 # 1. 移动到 approved 目录 981 # 1. 移动到 approved 目录
948 -mv docs/parse-audit/pending/${auditFileName} \\ 982 +mv docs/parse-audit/pending/${baseFileName}/${auditFileName} \\
949 docs/parse-audit/approved/ 983 docs/parse-audit/approved/
950 984
951 # 2. 合并到正式配置 985 # 2. 合并到正式配置
952 # 手动复制或使用工具合并到 src/config/plan-templates.js 986 # 手动复制或使用工具合并到 src/config/plan-templates.js
953 987
954 # 3. 删除待审核文件(可选) 988 # 3. 删除待审核文件(可选)
955 -rm docs/parse-audit/pending/${auditFileName} 989 +rm docs/parse-audit/pending/${baseFileName}/${auditFileName}
956 \`\`\` 990 \`\`\`
957 991
958 ### 需要修改 992 ### 需要修改
...@@ -961,7 +995,7 @@ rm docs/parse-audit/pending/${auditFileName} ...@@ -961,7 +995,7 @@ rm docs/parse-audit/pending/${auditFileName}
961 995
962 ### 放弃本次解析 996 ### 放弃本次解析
963 \`\`\`bash 997 \`\`\`bash
964 -rm docs/parse-audit/pending/${auditFileName} 998 +rm docs/parse-audit/pending/${baseFileName}/${auditFileName}
965 \`\`\` 999 \`\`\`
966 1000
967 --- 1001 ---
...@@ -1302,6 +1336,7 @@ export function buildParseSummary(results, duration_ms) { ...@@ -1302,6 +1336,7 @@ export function buildParseSummary(results, duration_ms) {
1302 } 1336 }
1303 }) 1337 })
1304 1338
1339 + summary.total = summary.total_products
1305 return summary 1340 return summary
1306 } 1341 }
1307 1342
......