## 目标 - 为具体供应商定制更细的解析规则(词典、包装倍数、忽略词、同义单位),并在列映射向导提供可视化编辑入口与预览。 ## 配置扩展 - 扩展 `suppliers_config.json` 每个供应商对象新增: - `dictionary`: 解析词典 - `ignore_words`: ["白膜","彩膜","赠品"](在名称解析时剔除) - `unit_synonyms`: {"箱":"件","提":"件","盒":"件","瓶":"瓶"} - `pack_multipliers`: {"件": 24, "箱": 24, "提": 12, "盒": 10}(缺规格时用于单位归一) - `name_patterns`: [正则表达式](从名称抽取规格/容量×数量,如 `([\d\.]+)(ml|l|升|毫升)[*×xX](\d+)`) - `default_unit`: "瓶" - `default_package_quantity`: 1 - `rules`: 规则数组(与现有一致),规则在执行时可访问 `dictionary` - `output_templates`: 模板列表;`current_template_index`: 当前选择索引 ## 规则引擎增强 - 在 `app/core/handlers/rule_engine.py`: - `apply_rules(df, rules, dictionary=None)` 接口增加 `dictionary` 参数 - `extract_spec_from_name`:先剔除 `ignore_words`,匹配 `name_patterns`,无匹配时按 `pack_multipliers` 推断包装数量 - `normalize_unit`:使用 `unit_synonyms` 统一单位;如单位为“件/箱/提/盒”且有 `package_quantity` 或 `pack_multipliers`,数量×包装并单位归一为“瓶” - `split_quantity_unit`:解析数量中的单位,同义词归一;无单位时用 `default_unit` - 其余规则(回推数量、填充、赠品标记)保持不变 ## 供应商处理器接入 - `GenericSupplierProcessor`: - 从 `supplier_config['dictionary']` 取词典并传入 `apply_rules`,保证每家供应商按自身词典执行 - 若未配置词典,使用默认空词典 ## 向导UI扩展(右侧系统设置→列映射向导) - 增加“供应商规则”区域: - 可编辑列表: - 忽略词(多行输入或表格) - 单位同义词(键值对表格:原单位→统一单位) - 包装倍数(单位→包装数量) - 名称正则(多行,每行一个表达式) - 默认单位、默认包装数量(输入框) - 操作:新增/删除、导入(JSON)/导出(JSON)、保存 - 规则预览: - 选择预设(基础拆分与推断或自定义),点击“应用规则预览”,显示“原始/规范化”两列树表对比 - 保存行为:将 `dictionary` 与 `rules` 写入对应供应商的 `suppliers_config.json` 并重载处理器 ## 验证与测试 - 单元测试: - 名称解析(容量×数量、简单乘法、忽略词影响、同义词归一) - 数量拆分与单位归一(“4瓶/1箱/3件/2提/2盒”) - 包装倍数应用与数量回推 - 烟雾测试:构建 5–10 类供货商样本,验证端到端转换与模板填充可用 ## 交付 - 完成词典与规则编辑入口、配置扩展与引擎接入,提交验证报告与示例配置;保留导入/导出便于你迭代调整。 确认后我将按此方案实现:扩展配置→增强规则引擎→处理器接入→向导UI与预览→测试。