정보
이 스킬은 개발자가 EU FMD 및 미국 DSCSA와 같은 글로벌 규정을 준수하는 제약 직렬화 및 추적 시스템을 구현하는 데 도움을 줍니다. 고유 식별자 생성, 집계 계층 관리, EPCIS 데이터 교환 및 검증 엔드포인트 통합을 다룹니다. 신제품 출시 시, 국가 검증 시스템과 통합 시, 규정 준수 데이터 교환 설계 시 또는 직렬화를 다른 시장으로 확장할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/implement-pharma-serialisationClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
name: implement-pharma-serialisation description: > 实施符合 EU FMD、US DSCSA 及其他全球法规的药品序列化和追溯系统。 涵盖唯一标识符生成、聚合层级、EPCIS 数据交换和验证终端集成。 适用于新产品上市序列化实施、与 EMVS/NMVS 集成、设计 DSCSA 合规 交易交换、构建 EPCIS 事件库,或将序列化扩展到其他市场 (中国、巴西、俄罗斯)时使用。 locale: zh-CN source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: compliance complexity: advanced language: multi tags: serialisation, eu-fmd, dscsa, epcis, track-and-trace, pharma
实施药品序列化
为符合全球追溯法规要求搭建药品序列化系统。
适用场景
- 为在欧盟或美国市场的新产品上市实施序列化
- 与欧洲药品验证系统(EMVS/NMVS)集成
- 设计 DSCSA 合规的交易信息交换
- 构建或集成 EPCIS 事件库以实现供应链可视化
- 将序列化扩展到其他市场(中国 NMPA、巴西 ANVISA 等)
输入
- 必填:产品信息(GTIN、产品代码、剂型、包装规格)
- 必填:目标市场法规(EU FMD、DSCSA 或两者均适用)
- 必填:包装层级(单件、捆包、箱、托盘)
- 可选:用于集成的现有 ERP/MES 系统详情
- 可选:合同制造商的序列化能力
- 可选:验证终端规范
步骤
第 1 步:了解法规全貌
| 法规 | 地区 | 关键要求 | 截止日期 |
|---|---|---|---|
| EU FMD (2011/62/EU) | 欧盟/欧洲经济区 | 每个单位包含唯一标识符及防篡改特征 | 2019年2月起生效 |
| DSCSA | 美国 | 包装级电子化、可互操作追溯 | 2024年11月起全面执行 |
| 中国 NMPA | 中国 | 每最小销售单位的唯一药品追溯码 | 滚动推进 |
| 巴西 ANVISA (SNCM) | 巴西 | 带 IUM 的药品序列化 | 滚动推进 |
| 俄罗斯 MDLP | 俄罗斯 | 每单位密码码,强制扫描 | 已生效 |
各法规关键数据要素:
EU FMD 唯一标识符(依据授权法规 2016/161):
- 产品代码(GS1 GTIN-14)
- 序列号(最多 20 位字母数字字符,随机生成)
- 批次/批号
- 有效期
DSCSA 交易信息:
- 产品标识符(NDC/GTIN、序列号、批次、有效期)
- 交易信息(日期、实体、发货详情)
- 交易历史和交易声明
- 包装级验证
预期结果: 清晰了解适用于每个产品-市场组合的法规。 失败处理: 在继续前与监管事务部门确认市场要求。
第 2 步:设计序列化数据模型
-- 核心序列化数据模型
CREATE TABLE serial_numbers (
id BIGSERIAL PRIMARY KEY,
gtin VARCHAR(14) NOT NULL, -- GS1 GTIN-14
serial_number VARCHAR(20) NOT NULL, -- 每个 GTIN 唯一
batch_lot VARCHAR(20) NOT NULL,
expiry_date DATE NOT NULL,
status VARCHAR(20) DEFAULT 'ACTIVE', -- ACTIVE, DECOMMISSIONED, DISPENSED 等
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(gtin, serial_number)
);
-- 聚合层级
CREATE TABLE aggregation (
id BIGSERIAL PRIMARY KEY,
parent_code VARCHAR(50) NOT NULL, -- SSCC 或更高级别代码
parent_level VARCHAR(10) NOT NULL, -- CASE, PALLET, BUNDLE
child_code VARCHAR(50) NOT NULL, -- GTIN+序列号或子 SSCC
child_level VARCHAR(10) NOT NULL, -- UNIT, BUNDLE, CASE
aggregation_event_id UUID NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- EPCIS 事件
CREATE TABLE epcis_events (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
event_type VARCHAR(30) NOT NULL, -- ObjectEvent, AggregationEvent, TransactionEvent
action VARCHAR(10) NOT NULL, -- ADD, OBSERVE, DELETE
biz_step VARCHAR(100), -- urn:epcglobal:cbv:bizstep:commissioning
disposition VARCHAR(100), -- urn:epcglobal:cbv:disp:active
read_point VARCHAR(100), -- urn:epc:id:sgln:location
event_time TIMESTAMPTZ NOT NULL,
event_timezone VARCHAR(6) NOT NULL,
payload JSONB NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
聚合层级:
托盘(SSCC)
└── 箱(SSCC)
└── 捆包(GTIN + 序列号)[可选层级]
└── 单件(GTIN + 序列号)
预期结果: 数据模型支持完整包装层级和 EPCIS 事件追踪。 失败处理: 若现有 ERP 架构存在冲突,设计集成层而非直接修改 ERP。
第 3 步:实施序列号生成
import secrets
import string
def generate_serial_number(length: int = 20, charset: str = None) -> str:
"""生成符合 GS1 标准的随机序列号。
EU FMD 要求随机序列号以防止预测。
最多 20 个字符,字母数字(GS1 应用标识符 21)。
"""
if charset is None:
# GS1 AI(21) 允许:数字、大写字母、小写字母及部分特殊字符
# 大多数实现仅使用字母数字以确保互操作性
charset = string.ascii_uppercase + string.digits
return ''.join(secrets.choice(charset) for _ in range(length))
def generate_serial_batch(gtin: str, batch_lot: str, expiry: str, count: int) -> list:
"""为生产运行生成一批唯一序列号。"""
serials = set()
while len(serials) < count:
serials.add(generate_serial_number())
return [
{
"gtin": gtin,
"serial_number": sn,
"batch_lot": batch_lot,
"expiry_date": expiry,
"status": "COMMISSIONED"
}
for sn in serials
]
预期结果: 序列号是密码学随机的,每个 GTIN 唯一,并在打印前存储。 失败处理: 若出现唯一性冲突,重新生成冲突序列号并记录该事件。
第 4 步:实施 GS1 DataMatrix 编码
二维 DataMatrix 条码编码 GS1 元素字符串:
(01)GTIN(21)序列号(10)批次(17)有效期
示例:
(01)05012345678901(21)A1B2C3D4E5(10)LOT123(17)261231
其中:
- AI(01) = GTIN-14
- AI(21) = 序列号
- AI(10) = 批次/批号
- AI(17) = 有效期(YYMMDD)
GS1 DataMatrix 使用 FNC1 作为分隔符(GS 字符,ASCII 29)来分隔可变长度字段。
def encode_gs1_element_string(gtin: str, serial: str, batch: str, expiry: str) -> str:
"""为 DataMatrix 打印编码 GS1 元素字符串。
FNC1(GS 字符 \\x1d)分隔可变长度字段。
AI(01) 和 AI(17) 为固定长度,其后无需分隔符。
AI(21) 和 AI(10) 为可变长度,需要 FNC1 终止符。
"""
GS = '\x1d' # GS1 FNC1 / 组分隔符
return f"01{gtin}21{serial}{GS}10{batch}{GS}17{expiry}"
预期结果: 编码字符串通过 GS1 认证验证器(ISO 15415 C 级或以上)扫描测试打印件验证。 失败处理: 若扫描验证失败,检查打印质量、静区和编码顺序。
第 5 步:与国家验证系统集成
EU FMD — EMVS/NMVS 集成
MAH → 上传序列数据 → EU Hub → 分发到国家系统(NMVS)
├── 德国(securPharm)
├── 法国(CTS)
├── 意大利(AIFA)
└── ... 31 个市场
API 操作:
- 上传(MAH → EU Hub):批量上传已委托序列号
- 验证(药房 → NMVS):在配发前检查序列状态
- 注销(药房 → NMVS):在销售点标记为已配发
- 重新激活(MAH → NMVS):撤销意外注销
DSCSA — 验证路由器服务
贸易伙伴 A → VRS 请求 → 验证路由器 → MAH 的 VRS → 响应
实施 VRS 响应端点:
# 简化的 VRS 端点(DSCSA 验证)
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/verify/{gtin}/{serial}/{lot}/{expiry}")
async def verify_product(gtin: str, serial: str, lot: str, expiry: str):
"""DSCSA 产品验证端点。"""
record = await lookup_serial(gtin, serial)
if record is None:
return {"verified": False, "reason": "SERIAL_NOT_FOUND"}
if record.batch_lot != lot or str(record.expiry_date) != expiry:
return {"verified": False, "reason": "DATA_MISMATCH"}
if record.status != "ACTIVE":
return {"verified": False, "reason": f"STATUS_{record.status}"}
return {"verified": True, "status": record.status}
预期结果: 验证端点在 1 秒内以正确状态响应。 失败处理: 若国家系统上传失败,使用指数退避重试并通知运营团队。
第 6 步:实施 EPCIS 事件捕获
以 EPCIS 2.0 格式记录供应链事件:
{
"@context": "https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
"type": "ObjectEvent",
"eventTime": "2025-03-15T10:30:00.000+01:00",
"eventTimeZoneOffset": "+01:00",
"epcList": ["urn:epc:id:sgtin:5012345.067890.A1B2C3D4E5"],
"action": "ADD",
"bizStep": "urn:epcglobal:cbv:bizstep:commissioning",
"disposition": "urn:epcglobal:cbv:disp:active",
"readPoint": {"id": "urn:epc:id:sgln:5012345.00001.0"},
"bizLocation": {"id": "urn:epc:id:sgln:5012345.00001.0"}
}
药品供应链中的关键业务步骤:
commissioning— 序列号分配给实物单位packing— 聚合到箱/托盘shipping— 从某地点发出receiving— 到达某地点dispensing— 配发给患者(注销触发点)
预期结果: 每次状态变更均生成带正确时间戳和地点的 EPCIS 事件。 失败处理: 事件捕获失败必须排队重试;绝不能静默丢弃。
验证清单
- 序列号已随机化,每个 GTIN 唯一
- GS1 DataMatrix 编码经条码扫描仪验证(ISO 15415 C 级或以上)
- 聚合层级正确链接单件→捆包→箱→托盘
- 国家验证系统集成已测试(上传、验证、注销)
- 所有业务步骤均已捕获 EPCIS 事件
- 验证端点在 1 秒内响应
- 异常处理涵盖上传失败、扫描失败和网络错误
常见问题
- 顺序序列号:EU FMD 明确要求随机化以防止仿冒,绝不使用顺序编号
- 聚合错误:拆箱(打开箱子)必须更新层级关系,运送带错误子关联的箱子会导致下游验证失败
- 时区处理:EPCIS 事件必须包含时区偏移,使用不带偏移的本地时间会在跨站点时造成事件排序歧义
- 上传延迟:序列数据必须在产品进入供应链之前上传到国家系统,延迟上传=产品在药房被标记为可疑
- 忽视异常:合法产品定期会产生错误警报,建立调查和解决警报的流程至关重要
相关技能
perform-csv-assessment— 将序列化系统作为计算机化系统进行验证conduct-gxp-audit— 审计序列化流程implement-audit-trail— 序列化事件的审计追踪serialize-data-formats— 通用数据序列化(不同领域,互补概念)design-serialization-schema— 数据交换格式的架构设计
GitHub 저장소
Frequently asked questions
What is the implement-pharma-serialisation skill?
implement-pharma-serialisation is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform implement-pharma-serialisation-related tasks without extra prompting.
How do I install implement-pharma-serialisation?
Use the install commands on this page: add implement-pharma-serialisation to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.
What category does implement-pharma-serialisation belong to?
implement-pharma-serialisation is in the Other category, tagged general.
Is implement-pharma-serialisation free to use?
Yes. implement-pharma-serialisation is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.
연관 스킬
LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.
이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.
이 Claude Skill은 스프레드, 오버/언더, 프로프 베트를 포함한 스포츠 베팅 시장을 분석합니다. 역사적 추이와 상황별 통계를 검토하여 가치 베트를 발견하고, 교육적 목적으로 실행 가능한 권장 사항이 담긴 구조화된 마크다운 결과를 제공합니다. 개발자는 이 기능을 스포츠 베팅 분석 도구에 활용할 수 있으며, 단순히 엔터테인먼트/교육 목적으로만 설계되었음을 유의해야 합니다.
이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.
