# Fake Foreign Health Audit

> 鉴别药品/保健品是否为"假洋货"（伪造洋品牌身份）。当用户给出商品链接、包装图片或品牌名，问"是不是假洋货""是不是真进口""XX国品牌是真的吗"，或需要核验某"进口"保健品的产地、资质、宣称国本土在售情况时使用。覆盖加拿大 NPN/LNHPD、德国欧盟工商登记与健康宣称合规、美国 FDA/商标、澳洲 TGA、中国蓝帽子与 GACC 备案。

- Skill: `longppai68-ai/fake-foreign-health-audit` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add longppai68-ai/fake-foreign-health-audit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/longppai68-ai/fake-foreign-health-audit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: longppai68-ai (https://skillmd.com/u/longppai68-ai)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/longppai68-ai/fake-foreign-health-audit

---


<!--
  本文件由 master 仓库的 tools/build_workbuddy.py 自动生成。
  请勿直接修改此仓库——改动请提到 master：
  https://github.com/longppai68-ai/fake-foreign-health-audit
-->

# 假洋货鉴别（药品 / 保健品）

## ⚠️ Windows / WorkBuddy 环境须知（先读）

本变体面向 **Windows 上的 WorkBuddy（CodeBuddy Code）**。开始前先确认两件事：

**1) 确认 Python 命令名**

```bash
python --version     # 首选
py -3 --version      # 若上一条失败，用 Windows Python 启动器
```

本文档中的命令一律写成 `python`。若你的环境只有 `py -3`，**自行替换**即可——
四个脚本都只用标准库，任何 Python 3.8+ 都能跑。

**2) 路径分隔符**

脚本路径用 `${CODEBUDDY_SKILL_DIR}` 占位符，由 WorkBuddy 自动替换为该 skill 的绝对路径，
**不要**手写成 `scripts/x.py` 这种相对路径——那取决于当前工作目录，会找不到文件。

**3) 抓取命令**

文档里的 `curl` 命令在 Windows 10 1803+ 自带 `curl.exe`，可直接用。
若在 PowerShell 里执行，注意引号规则与 bash 不同；建议在 WorkBuddy 的 Bash 中执行。

**4) 缓存目录**

`lnhpd_search.py` 默认把约 140 MB 的加拿大数据库缓存到用户主目录下的 `.cache/lnhpd`。
Windows 上即 `%USERPROFILE%\.cache\lnhpd`。若该位置不可写，加参数指定：

```bash
python ${CODEBUDDY_SKILL_DIR}/scripts/lnhpd_search.py --brand "LOEON" --cache-dir "%TEMP%\lnhpd"
```

---

对"某国进口"的药品/保健品做**可验证的**产地与身份核查，输出带证据分级的鉴定报告。

## 何时使用

- 用户发来商品链接/包装照片/品牌名，问"**是不是假洋货**""**是不是真进口**""**这牌子靠谱吗**"
- 需要核实某"XX国品牌"的**产地、监管资质、宣称国本土是否真有卖**
- 需要复核别人给的"鉴别结论"或软文里的"实证"

**不适用**：纯临床用药指导、疗效评价。本技能只做**身份与合规**核查，不做医疗建议。

---

## 核心原则（先读；违反会直接导致错误结论）

1. **三层分开验。** 不要笼统问"是不是假的"：
   - **身份层**：品牌控制主体在不在它宣称的国家？
   - **实质层**：在该国是否取得合法资质、按当地标准生产？
   - **存在层**：在该国本土是否真有渠道、消费者、口碑？
2. **四级判定**（不要只答"是/否"）：
   | 级别 | 含义 |
   |---|---|
   | **A 真洋品牌** | 本土主体 + 本土资质 + 本土在售 + 本土口碑 |
   | **B 合法授权贴牌** | 境外主体真实持有并授权，本国确有销售（规模小） |
   | **C 伪造洋身份（假洋货）** | 境外空壳/贸易壳承载品牌，本土几无市场，叙事虚构，主攻中国 |
   | **D 三无假货** | 任何国家/地区监管资质都没有 |
   > ⚠️ **C ≠ D**。一个产品完全可能"该国注册号真实存在"却仍是假洋货。**大多数争议案落在 C。**
3. **搜不到 ≠ 不存在。** 被反爬拦截（403/人机验证/JS 壳页）的渠道**必须标注"未获证据"**，**不得**计入否定证据。
4. **区分"推论"与"证实"。** 没有实物标签时只能说"推论"；拿到实物标签才能写"证实"。
5. **举证责任在卖方。** 你不需要证明"它不是"，只需指出**其宣称未被证实，或与其自身注册信息矛盾**。
6. **不要复述网上的"鉴别标准"。** 这类"X国品牌鉴别攻略"往往本身就是软文（例：声称"支持本地医保积分抵扣"——加拿大用 PC Optimum 等商业积分，根本没有"医保积分"概念）。**一切声称必须自己复核。**
7. **只用 `${CODEBUDDY_SKILL_DIR}/references/endpoints.md` 里列出的源，且单源只试一次。** 那份文件里的端点都实测过并标注了可用性；**临场另找站点**（药品库、商标聚合站、企业黄页）绝大多数上了反爬，试了也是白试。
   > **反例（真实发生）**：为查德国保健品去查 `gelbe-liste.de`——那是**德国药品**库（Arzneimittel），对膳食补充剂本就没什么收录，**也不在推荐列表里**，结果超时被 SIGTERM 杀掉，白耗一轮。
   > **正确做法**：官方库 → 官方 API → **搜索引擎摘要** → 第三方聚合（标注置信度）。每个源的退路都写在 endpoints.md 里。
8. **SIGTERM ≠ 未获证据。** 被本地超时杀掉是**任务未完成**，不是"某源查无结果"。前者写「本轮未完成，需延长超时重试」，后者才写「未获证据」——**两者措辞绝不能混**。

---

## 工作流

### 第 0 步：抽取硬信息

从链接/图片抽取：品牌、品名、宣称、**成分与剂量**、**注册号**、条码、公司署名、认证徽标。

> 🔴 **输入是淘宝/天猫/京东链接时，先做这件事**：
> **商品页需要登录态，抓不到是正常的**——纯 HTTP 只拿到 ~1.7 KB 的 JS 壳页，无头浏览器也会被
> 重定向到 `login.taobao.com`。**但短链本身可解析**（`e.tb.cn` 页内嵌 `var url='…'`，能取到商品 ID 与标价）。
>
> ```bash
> python ${CODEBUDDY_SKILL_DIR}/scripts/taobao_share.py '【淘宝】https://e.tb.cn/xxxx CZ321 「商品标题…」'
> ```
>
> **你不需要商品页。** 按此阶梯取证：**① 让用户发商品页截图/包装实拍图（最强）→ ② 用标题+商品 ID 直接开始核查 → ③ 交叉检索同款在其他平台 → ④ 第三方聚合站（标注强度）**。
>
> ❌ **绝不可**把「商品页抓不到」写成「品牌查不到」——前者是访问限制，后者才是核查结论。**以"链接被拦截"收尾 = 流程用错了。**

**反向图片搜索（必做）**：
- 用 Google Lens / TinEye 搜包装图
- 同一包装图出现在 3 个以上不相关品牌 → 共用模板，典型贴牌
- 只有渲染图、无实拍图 → 可能无真实产品

图片取字要点（小字必须裁剪放大，直接看原图会看错）：

```bash
python - <<'PY'
from PIL import Image, ImageEnhance, ImageOps
im = Image.open("label.jpg").convert("RGB")
c = im.crop((L,T,R,B))                      # 先按预览图比例换算真实像素
w,h = c.size
c = c.resize((w*8, h*8), Image.LANCZOS)     # 放大 4~14 倍
c = ImageEnhance.Contrast(ImageOps.autocontrast(c)).enhance(1.8)
c.save("zoom.png")
PY
```
然后用 `read_image zoom.png`。

> 🔴 **最优先的一问：包装上有没有该国的注册号？** 见 `${CODEBUDDY_SKILL_DIR}/references/jurisdictions.md`。
> 若宣称"德国制造"却**通篇无一个德文字** → 这产品不是给德国人买的（欧盟 1169/2011 第 15 条要求用销售国语言）。这是极高价值信号。

### 第 1 步：确定"宣称国"，切换对应打法

**各国监管结构完全不同，打法必须换**（详见 `${CODEBUDDY_SKILL_DIR}/references/jurisdictions.md`）：

| 宣称国 | 有无产品级公开注册库 | 主攻方向 |
|---|---|---|
| **加拿大** | ✅ NPN / LNHPD | **直接查 NPN**，一击命中 |
| **澳大利亚** | ✅ AUST L / ARTG | 查 ARTG 编号 |
| **中国** | ✅ 蓝帽子 | 查注册/备案 + GACC 进口备案 |
| **美国** | ❌ DSHEA 无上市前审批 | 公司注册 + FDA 警告信 + USPTO 商标状态 |
| **德国/欧盟** | ❌ 补充剂按食品管理 | **工商登记"经营范围"** + 零售实测 + 健康宣称合规 |
| **英国/香港** | ❌ | Companies House / 公司注册处 + SIC 代码 |
| **日本** | ⚠️ FFC 备案（仅机能性表示食品） | CAA 备案 + 公司登记 + 渠道实测 |
| **韩国** | ✅ MFDS 健康功能食品备案 | 备案编号 + 渠道实测 |
| **新西兰** | ❌ 无需审批 | Companies Register + 渠道实测 |

### 第 2 步：查主体（最容易被跳过、也最致命）

**关键动作：查宣称国工商登记的「经营范围 / Nature of business / Gegenstand」。**

> 一个"保健品品牌"背后的公司，其法定经营范围**是不是生产保健品**？
> **实战命中**：某"德国"叶酸标注的"生产企业"，德国登记经营范围是"食品、尤其各类饮料的进出口"——**一家葡萄酒贸易商**。一家贸易商不可能是胶囊的生产企业。

同时看：
- **成立日期 vs 宣称历史**（例：官网称"1989 年创立、过去 21 年"，而许可主体 **2020 年**才成立 → 叙事自相矛盾）
- **空壳地址特征**：英国 Croydon/Brighton Road 批量注册地址、中国"集群注册"、**SIC 99999 = Dormant（休眠公司）**、年报逾期
- **董事/股东姓名**：是否为宣称国本地人
- **商标状态**：是否 DEAD / 放弃 / 驳回（例：某品牌的 USPTO 申请 2021 年已放弃）

### 第 3 步：查宣称国本土渠道

逐个实测，**区分"有商品页"与"可下单"**：
- 主流电商（Amazon 各国站、Walmart、Shop Apotheke、DocMorris…）
- 线下连锁（Rossmann、dm、Shoppers…）
- 行业协会/展会名录（如加拿大 CHFA）
- **注意**：同一家店的不同域名（如 `apotheke-am-theater.de` 与 `internet-apotheke-freiburg.de`）**可能是同一家**，不要重复计数

判读口径：**"有 PZN / 有条目但显示不可订购、且缺该国强制标示"≈ 为留下本国痕迹而铺的条目，不是正常在售。**

### 第 4 步：标签法证

见 `${CODEBUDDY_SKILL_DIR}/references/label-forensics.md`。必查六项：

1. **注册号**是否印在包装上（加拿大 NHP 标签**必须**印 NPN）
2. **语言**：是否使用销售国语言
3. **%NRV 算术**：`${CODEBUDDY_SKILL_DIR}/scripts/nrv_check.py` 一键核对——**标签引用了法规却算错**是贴牌套模板的铁证
4. **剂量 vs 安全上限（UL）**：`${CODEBUDDY_SKILL_DIR}/scripts/nrv_check.py --ul` 核对（实战：某产品维生素 B6 日剂量 **50 mg**，而 EFSA 2023 年已将 UL 下调至 **12 mg/日** → 超 4 倍且无警示）
   > ⚠️ **务必区分「UL」与「建议上限 / 指导水平」**。维生素 B12、K、生物素、泛酸、B1、B2、钾在 IOM/EFSA 均**没有 UL**；网上常见的 1000 µg 维生素 K、900 µg 生物素、100 mg B1 等是**英国 EVM 指导水平 / 欧盟建议上限，不是 UL**。把它们当 UL 会把正常的复合 B 族、生物素产品误判为"超标"（**假阳性**）。脚本已分开输出：真 UL 在 `UL` 表，非 UL 参考值在 `SOFT_LIMITS` 表。
5. **宣称合法性**：有没有疾病治疗宣称（欧盟 1924/2006 禁止；中国同样禁止）
6. **机械翻译痕迹**："Add Betaine"（=添加甜菜碱）、"unchewed" 这类中式英语
7. **伪造认证章**：国旗配色圆章、枫叶圆标、"Gold Award"——注意区分**付费送评奖项**（如 Monde Selection，企业付费申报、"原产国"自报不核验）

**标签剂量 vs 官方注册剂量**也要对：实战中某产品标签标叶酸 **2000 µg**，而该国许可仅 **1000 µg**（且已超该国成人 UL）。

### 第 5 步：反证与营销侧

- 中文软文的**投放时间与渠道**（是否集中投放、是否标注"广告"）
- 是否投放了"这品牌不是假洋货"的自辩话术——**这类话术本身是最强的反向信号**
- 消费者投诉（注意：投诉链接常在数月后失效，失效不等于没有）
- 宣称国语言的论坛/Reddit 是否有真实消费者讨论

**GMP 证书核查**：
- 要求卖方提供 GMP 证书编号
- 向发证机构核实（Health Canada / EudraGMDP / FDA）
- 注意 "GMP compliant" ≠ "GMP certified"，前者是自我声明

### 第 6 步：出报告

严格按文末 **「输出契约」** 的骨架输出：**固定章节、固定顺序、固定标题、固定表格列**，标题中不留占位符。

发出前逐条跑一遍契约里的**输出自检**；不通过就重排，不要将就发出。

> ⚠️ **格式一致性是硬要求**。同一个 skill 每次输出结构不同，会直接削弱报告的可信度——
> 阅读者无法快速定位"定性"和"证据边界"在哪。**不要因为内容少就省略章节**，无内容写「无」。

---

## 脚本

| 脚本 | 用途 |
|---|---|
| `${CODEBUDDY_SKILL_DIR}/scripts/lnhpd_search.py` | 加拿大 LNHPD 全量检索：按品牌/公司/NPN 查许可、持证人、许可日期、市场状态（Not Marketed）、成分剂量 |
| `${CODEBUDDY_SKILL_DIR}/scripts/nrv_check.py` | 核对标签 %NRV 算术（EU/US），并比对 EFSA 安全上限 UL |
| `${CODEBUDDY_SKILL_DIR}/scripts/ean_check.py` | 校验条码校验位 + 解读 GS1 国家前缀（识别 200–299 非零售号段） |
| `${CODEBUDDY_SKILL_DIR}/scripts/taobao_share.py` | 解析淘宝/天猫/京东**分享文本** → 商品 ID / 标题 / 标价 + 取证阶梯提示（CN 商品页需登录态时必用） |

运行示例：

```bash
python ${CODEBUDDY_SKILL_DIR}/scripts/taobao_share.py '【淘宝】https://e.tb.cn/xxxx CZ321 「商品标题…」'
python ${CODEBUDDY_SKILL_DIR}/scripts/lnhpd_search.py --brand "LOEON"
python ${CODEBUDDY_SKILL_DIR}/scripts/lnhpd_search.py --company "Bethune Health Develops Limited"
python ${CODEBUDDY_SKILL_DIR}/scripts/lnhpd_search.py --npn 80145377 --detail     # 抓详情页，含 Market status
python ${CODEBUDDY_SKILL_DIR}/scripts/nrv_check.py --label folate=1000ug --label b6=50mg --label b12=500ug --ul
python ${CODEBUDDY_SKILL_DIR}/scripts/ean_check.py 4262366230132
```

---

## 红旗清单

命中 **≥3 条**基本可定 **C 类**；命中 **≥6 条**则相当确凿：

- [ ] 品牌商标持有人是**与宣称国无关的空壳**（名称含"Switzerland"却注册在英国等）
- [ ] 负责主体的**工商登记经营范围不是生产**（贸易/咨询/进出口/展会）
- [ ] **宣称国本土主流渠道查无在售**，或仅有"不可订购"的孤条目
- [ ] **成立日期与宣称历史矛盾**
- [ ] 官网自述的公司名在宣称国**官方库中查无此主体**
- [ ] 包装**缺该国语言**、缺强制标示
- [ ] **无该国注册号**，或注册号与标签剂量**不符**
- [ ] **%NRV 算错**（尤其"引用了法规却算错"）
- [ ] 剂量**超出该国安全上限（UL）且无警示**
- [ ] 带**违法疾病宣称**
- [ ] 机械翻译的中式外文
- [ ] **伪造认证章**／使用付费送评奖项冒充权威认证
- [ ] 商标**已放弃/驳回/失效**
- [ ] 有集中的中文软文投放，或自辩式"鉴别攻略"
- [ ] **宣称日本/韩国进口却无 FFC/MFDS 备案**（日本 FFC 或韩国 MFDS 健康功能食品编号）
- [ ] **GMP 证书无法核实**或证书编号不存在
- [ ] **反向图片搜索发现同一包装图出现在多个不相关品牌**

---

## 输出契约（骨架固定，小节按案情自定）

> 🔴 **固定不变**：H1 形态、元信息三行、**五个大章及其标题与顺序**、「三、结论」内部四段。
> **可按案情调整**：第二章 `2.x` 的**小节名与数量**（编号必须连续）。
> **禁止**：改大章标题、调大章顺序、省略第四/五章、在标题里留未替换的占位符。
> 某章无内容时写 **「无」**，**不要删掉那一章**。

### 骨架

```markdown
# 「<品牌> <产品>」鉴别报告

核查对象：<链接 / 图片文件名 / 品牌名>
核查日期：<YYYY-MM-DD>
核查方式：<方法1 + 方法2 + …>

## 一、鉴别思路与取证路径

宣称国：<国家（判断依据）>
关键问题：<本次要回答的核心问题，一句话>

## 二、取证结果

### 2.1 <小节名>

| 项目 | 结果 |
|---|---|
| … | … |

**关键发现：**
- <要点>

### 2.2 <小节名>

<同上：表格 + 关键发现>

（2.1 … 2.n，数量按案情定，编号连续，不跳号）

## 三、结论

**定性：<A / B / C / D 之一>（<类别名>）**

**它"真"的部分**
- ✅ <逐条，避免误伤>

**它"假"的部分**
- ⚠️ <逐条；若倾向 B 类，可写"存疑的部分">

**一句话概括**
<一句话>
```

> ⚠️ **不要把「定性」提到头部**。结论统一在「三、结论」给出，头部只放对象/日期/方式三行。

### 定性必须落到单一类别

**「定性」一行只允许下面三种写法：**

| 写法 | 用于 | 示例 |
|---|---|---|
| **单一类别** | 证据清楚、无争议 | `**定性：C（伪造洋身份）**` |
| **相邻两类之间** | 证据同时支持两个相邻类别 | `**定性：B/C 之间**` |
| **倾向 X + 缺口** | 有倾向，但关键证据缺失 | `**定性：倾向 B，需补充证据**` |

**禁止**：
- ❌ 含糊限定词：`接近 C 类`、`存疑`、`可能是`、`疑似`、`偏向`
- ❌ 跨越非相邻类别（如 `A/D 之间`）——这说明证据链断裂，应写成 `倾向 X，需补充证据`
- ❌ 只写类别名不写字母，或只写字母不写类别名

**选哪种写法：**
1. 证据能支撑某个类别 → **直接写该类别的字母**
2. 确实卡在两个**相邻**类别之间 → 写 `X/Y 之间`，并在下方"它'真'的部分"与"它'假'的部分"里**分别说明各支持哪一边**
3. 关键证据没拿到（渠道被拦、实物缺失）→ 写 `倾向 X，需补充证据`，并在「五、证据边界与不确定性」里**写清缺什么证据、补到就能定案**

> 用 `X/Y 之间` 或 `倾向 X` 时，必须在「五、证据边界」里点明**决定性的那一项证据是什么**。
> 否则这个限定就变成了逃避下判断。

### 第二章小节的常见形态（按案情取舍）

| 小节 | 何时用 |
|---|---|
| **主体核查** | 公司注册、成立时间、注册地、董监高署名 |
| **商标核查** | 商标库查询（内容少时可与主体核查合并） |
| **宣称国监管核查** | 该国有产品级注册库时（加拿大 NPN、澳洲 AUST L、中国蓝帽子） |
| **标签法证** | 拿到包装图时（语言、%NRV、剂量、违法宣称、机翻痕迹） |
| **<国家>本土渠道实测** | 主流电商 / 连锁实测；标题写「美国本土渠道实测」这种 |
| **中文营销侧** | 百度百科、软文投放、值得买专区、**价格对比**（如同类品牌溢价倍数） |
| **产品成分与安全** | 成分清单 + 是否超 UL + 有无 GMP/NSF/USP 等第三方认证 |

> ⚠️ **「中文营销侧」和「产品成分」最容易被漏掉**，但它们是判定"主攻中国市场的贴牌品牌"的关键证据——**每案都要考虑是否需要**。
>
> **渠道实测的判读口径**：只有"有售"不够，要同时看**痕迹深浅**——评论数、论坛/Reddit 讨论、第三方评测、行业认可。**"上架了但没人讨论"本身就是重要发现。**

### 表格规范

- `2.x` 内默认用**两列表**：`| 项目 | 结果 |`
- 需要多列时才扩展（如渠道实测用 `渠道 | 结果`），但**同一表内列数一致**
- 状态标记统一用 `✅` / `⚠️` / `❌` / `🔴`

### 骨架续（固定不变）

```markdown
## 四、安全提示

- <剂量是否超 UL、禁忌人群、认证缺失、是否需医生指导；无则写「无」>

## 五、证据边界与不确定性

- <被拦截未取证的渠道；哪些是推论；哪些未能直连核实>
```

### 输出自检（发出前逐条对）

- [ ] H1 形如 `# 「<品牌> <产品>」鉴别报告`
- [ ] 元信息**三行齐全**：核查对象 / 核查日期 / 核查方式
- [ ] 五个大章全部存在，标题与顺序**逐字未改**
- [ ] 第二章 `2.x` 编号**连续无跳号**，每个小节都有表格或要点
- [ ] 「三、结论」四段齐全：定性 / 真的部分 / 假的部分 / 一句话概括
- [ ] **「定性」是单一类别**（`C` / `B/C 之间` / `倾向 B，需补充证据` 三者之一），**没有**"接近""存疑""疑似"这类含糊词；用后两种写法时已在「五、证据边界」点明决定性证据
- [ ] 「四、安全提示」「五、证据边界与不确定性」**未被省略**（无内容也要写「无」）
- [ ] **无未替换的 `<…>` 残留**
- [ ] 已考虑过「中文营销侧」「产品成分」两节，该有则有

> ⚠️ 自检不通过就**重排**，不要将就发出。格式一致本身就是可信度的一部分。

---

## 参考资料

- `${CODEBUDDY_SKILL_DIR}/references/jurisdictions.md` — 各国核查路径与数据库字段含义
- `${CODEBUDDY_SKILL_DIR}/references/endpoints.md` — **可直接复制的命令与端点**（含踩坑记录）
- `${CODEBUDDY_SKILL_DIR}/references/label-forensics.md` — 标签法证清单 + NRV/UL 对照表

