duxingchen a68b2bbca0 feat(webhook): 部门校验 —— 只认 company_name == "LICA"
MOM 现在同时对接 IRIS 与 LICA 两个 Track 实例,按载荷里的 company_name 分流。
本实例采取**严格白名单**:
  · company_name == "LICA"(strip 后)→ 正常处理
  · 空白 / 缺失 / "IRIS" / 未知值      → 忽略

⚠️ 与 IRIS 实例的策略**刻意相反**,别"顺手统一成一样":
   IRIS 对空白值要放行 —— MOM 判定不出公司时会回落到指向 IRIS 的扁平配置,
   不收就彻底丢了。
   LICA 没有兜底角色,空白值只可能来自「MOM 没判定出公司」,那本就该由 IRIS 兜。
   **宁可漏,不可误收** —— 误收会把别的部门的设备状态改掉,那是数据污染,
   比漏一条通知严重得多。

实现:
  · MomInboundPayload / MomOutboundPayload 补 company_name 字段
    (不补的话会被 Pydantic 静默丢弃,校验无从谈起)
  · 新增 _belongs_to_this_org(),在**鉴权之后、匹配产品之前**拦截
  · 拦截时返回 200 + matched=False + reason=org_mismatch —— 与「未命中」保持
    同一契约,避免 MOM 侧把它当成故障去重试
  · 顺带补上 outbound 一直在发、但此前被丢弃的 outbound_type 字段

实测:
  · 7 种 company_name 取值全部符合预期
    ("LICA" / "LICA " 通过;"IRIS" / "" / 缺失 / null / "UNKNOWN" 全部忽略)
  · 无 X-API-Key 仍返回 401(鉴权没有被绕过)
  · 真实闭环:LICA 入库回调 → 产品「待仓库收货」→「已入库」
  · 对照:对同一产品发 IRIS 的回调 → 状态纹丝不动 
  · 测试数据已还原为原始值
2026-09-22 13:09:22 +08:00
Description
LICA生产流程追踪
8.6 MiB
Languages
Python 43.1%
TypeScript 37.7%
Vue 15.4%
JavaScript 3.1%
Shell 0.4%
Other 0.1%