## 目标
- 为具体供应商定制更细的解析规则（词典、包装倍数、忽略词、同义单位），并在列映射向导提供可视化编辑入口与预览。

## 配置扩展
- 扩展 `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与预览→测试。