MCP HubMCP Hub
스킬 목록으로 돌아가기

implement-pharma-serialisation

pjt222
업데이트됨 2 days ago
7 조회
17
2
17
GitHub에서 보기
디자인design

정보

이 스킬은 EU FMD 및 US DSCSA와 같은 글로벌 규정을 준수하는 제약 직렬화 및 추적 시스템을 구현합니다. 고유 식별자 생성, 집계 계층 구조, EPCIS 데이터 교환, 검증 엔드포인트 통합을 포함합니다. 신제품 출시 시, EMVS/NMVS와 통합 시, DSCSA 준수 트랜잭션 설계 시, EPCIS 저장소 구축 시, 또는 직렬화를 새로운 시장으로 확장할 때 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/implement-pharma-serialisation

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: implement-pharma-serialisation description: > Implementar sistemas de serialización y trazabilidad farmacéutica conformes con EU FMD, US DSCSA y otras regulaciones globales. Cubre la generación de identificadores únicos, jerarquía de agregación, intercambio de datos EPCIS e integración de endpoints de verificación. Usar al implementar serialización para un nuevo lanzamiento de producto, al integrar con el EMVS/NMVS, al diseñar el intercambio de transacciones conforme a DSCSA, al construir un repositorio de eventos EPCIS, o al extender la serialización a mercados adicionales (China, Brasil, Rusia). locale: es source_locale: en source_commit: 6f65f316 translator: claude-sonnet-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

Implementar Serialización Farmacéutica

Configurar sistemas de serialización farmacéutica para el cumplimiento regulatorio con los mandatos globales de seguimiento y trazabilidad.

Cuándo Usar

  • Al implementar serialización para un nuevo lanzamiento de producto en el mercado de la UE o los EE.UU.
  • Al integrar con el Sistema Europeo de Verificación de Medicamentos (EMVS/NMVS)
  • Al diseñar el intercambio de información de transacciones conforme a DSCSA
  • Al construir o integrar un repositorio de eventos EPCIS para visibilidad de la cadena de suministro
  • Al extender la serialización a mercados adicionales (China NMPA, Brasil ANVISA, etc.)

Entradas

  • Requerido: Información del producto (GTIN, código de producto, forma farmacéutica, tamaños de envase)
  • Requerido: Regulaciones del mercado objetivo (EU FMD, DSCSA, o ambas)
  • Requerido: Jerarquía de envase (unidad, paquete, caja, palé)
  • Opcional: Detalles del sistema ERP/MES existente para integración
  • Opcional: Capacidades de serialización del fabricante por contrato
  • Opcional: Especificaciones del endpoint de verificación

Procedimiento

Paso 1: Comprender el Panorama Regulatorio

RegulaciónRegiónRequisitos ClaveFecha de Vigencia
EU FMD (2011/62/EU)UE/EEEIdentificador único + característica antimanipulación en cada unidadVigente desde feb 2019
DSCSAEE.UU.Trazabilidad electrónica e interoperable a nivel de envaseAplicación completa nov 2024+
China NMPAChinaCódigo único de trazabilidad de medicamentos por unidad mínima vendibleGradual
Brasil ANVISA (SNCM)BrasilSerialización de medicamentos con IUMGradual
Rusia MDLPRusiaCódigo criptográfico por unidad, escaneo obligatorioVigente

Elementos de datos clave por regulación:

Identificador único EU FMD (conforme al Reglamento Delegado 2016/161):

  • Código de producto (GTIN-14 de GS1)
  • Número de serie (hasta 20 caracteres alfanuméricos, aleatorio)
  • Número de lote
  • Fecha de caducidad

Información de transacción DSCSA:

  • Identificador de producto (NDC/GTIN, número de serie, lote, caducidad)
  • Información de transacción (fecha, entidades, detalles del envío)
  • Historial de transacciones y declaración de transacción
  • Verificación a nivel de envase

Esperado: Comprensión clara de qué regulaciones aplican a cada combinación producto-mercado. En caso de fallo: Consultar a asuntos regulatorios para confirmar los requisitos del mercado antes de proceder.

Paso 2: Diseñar el Modelo de Datos de Serialización

-- Core serialisation data model
CREATE TABLE serial_numbers (
    id BIGSERIAL PRIMARY KEY,
    gtin VARCHAR(14) NOT NULL,          -- GS1 GTIN-14
    serial_number VARCHAR(20) NOT NULL,  -- Unique per GTIN
    batch_lot VARCHAR(20) NOT NULL,
    expiry_date DATE NOT NULL,
    status VARCHAR(20) DEFAULT 'ACTIVE', -- ACTIVE, DECOMMISSIONED, DISPENSED, etc.
    created_at TIMESTAMPTZ DEFAULT NOW(),
    UNIQUE(gtin, serial_number)
);

-- Aggregation hierarchy
CREATE TABLE aggregation (
    id BIGSERIAL PRIMARY KEY,
    parent_code VARCHAR(50) NOT NULL,     -- SSCC or higher-level code
    parent_level VARCHAR(10) NOT NULL,    -- CASE, PALLET, BUNDLE
    child_code VARCHAR(50) NOT NULL,      -- GTIN+serial or child SSCC
    child_level VARCHAR(10) NOT NULL,     -- UNIT, BUNDLE, CASE
    aggregation_event_id UUID NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- EPCIS events
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()
);

Jerarquía de agregación:

Pallet (SSCC)
  └── Case (SSCC)
       └── Bundle (GTIN + serial) [optional level]
            └── Unit (GTIN + serial)

Esperado: El modelo de datos admite la jerarquía completa de envases con seguimiento de eventos EPCIS. En caso de fallo: Si el esquema ERP existente entra en conflicto, diseñar una capa de integración en lugar de modificar el ERP directamente.

Paso 3: Implementar la Generación de Números de Serie

import secrets
import string

def generate_serial_number(length: int = 20, charset: str = None) -> str:
    """Generate a random serial number compliant with GS1 standards.

    EU FMD requires randomised serial numbers to prevent prediction.
    Max 20 characters, alphanumeric (GS1 Application Identifier 21).
    """
    if charset is None:
        # GS1 AI(21) allows: digits, uppercase, lowercase, and some special chars
        # Most implementations use alphanumeric only for interoperability
        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:
    """Generate a batch of unique serial numbers for a production run."""
    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
    ]

Esperado: Los números de serie son criptográficamente aleatorios, únicos por GTIN y almacenados antes de la impresión. En caso de fallo: Si ocurre una colisión de unicidad, regenerar el número de serie en conflicto y registrar el evento.

Paso 4: Implementar la Codificación GS1 DataMatrix

El código de barras 2D DataMatrix codifica la cadena de elementos GS1:

(01)GTIN(21)Serial(10)Batch(17)Expiry

Ejemplo:

(01)05012345678901(21)A1B2C3D4E5(10)LOT123(17)261231

Donde:

  • AI(01) = GTIN-14
  • AI(21) = Número de serie
  • AI(10) = Número de lote
  • AI(17) = Fecha de caducidad (YYMMDD)

El DataMatrix GS1 usa FNC1 como separador (carácter GS, ASCII 29) entre campos de longitud variable.

def encode_gs1_element_string(gtin: str, serial: str, batch: str, expiry: str) -> str:
    """Encode GS1 element string for DataMatrix printing.

    FNC1 (GS character \\x1d) separates variable-length fields.
    AI(01) and AI(17) are fixed length, so no separator needed after them.
    AI(21) and AI(10) are variable length and need FNC1 terminator.
    """
    GS = '\x1d'  # GS1 FNC1 / Group Separator
    return f"01{gtin}21{serial}{GS}10{batch}{GS}17{expiry}"

Esperado: Las cadenas codificadas se verifican escaneando impresiones de prueba con un verificador certificado por GS1 (grado ISO 15415 C o superior). En caso de fallo: Si la verificación del escaneo falla, verificar la calidad de impresión, las zonas tranquilas y el orden de codificación.

Paso 5: Integrar con los Sistemas Nacionales de Verificación

EU FMD — Integración EMVS/NMVS

MAH → Upload serial data → EU Hub → Distribute to National Systems (NMVS)
                                      ├── Germany (securPharm)
                                      ├── France (CTS)
                                      ├── Italy (AIFA)
                                      └── ... 31 markets

Operaciones API:

  1. Carga (MAH → EU Hub): Carga masiva de números de serie puestos en circulación
  2. Verificación (Farmacia → NMVS): Verificar el estado del número de serie antes de dispensar
  3. Desactivación (Farmacia → NMVS): Marcar como dispensado en el punto de venta
  4. Reactivación (MAH → NMVS): Revertir una desactivación accidental

DSCSA — Servicio de Enrutamiento de Verificación

Trading Partner A → VRS Request → Verification Router → MAH's VRS → Response

Implementar un endpoint respondedor VRS:

# Simplified VRS endpoint (DSCSA verification)
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 product verification endpoint."""
    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}

Esperado: Los endpoints de verificación responden en menos de 1 segundo con el estado correcto. En caso de fallo: Si la carga al sistema nacional falla, reintentar con retardo exponencial y alertar a operaciones.

Paso 6: Implementar la Captura de Eventos EPCIS

Registrar los eventos de la cadena de suministro en formato 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"}
}

Pasos de negocio clave en la cadena de suministro farmacéutica:

  • commissioning — número de serie asignado a la unidad física
  • packing — agregación en cajas/palés
  • shipping — salida de una ubicación
  • receiving — llegada a una ubicación
  • dispensing — suministrado al paciente (desencadenador de desactivación)

Esperado: Cada cambio de estado genera un evento EPCIS con marcas de tiempo y ubicaciones correctas. En caso de fallo: La captura de eventos fallida debe ponerse en cola y reintentarse; nunca descartarse silenciosamente.

Validación

  • Los números de serie son aleatorios y únicos por GTIN
  • La codificación GS1 DataMatrix verificada por escáner de código de barras (grado ISO 15415 C+)
  • La jerarquía de agregación vincula correctamente unidades → paquetes → cajas → palés
  • La integración con el sistema de verificación nacional probada (carga, verificación, desactivación)
  • Eventos EPCIS capturados para todos los pasos de negocio
  • El endpoint de verificación responde en menos de 1 segundo
  • El manejo de excepciones cubre fallos de carga, fallos de escaneo y errores de red

Errores Comunes

  • Números de serie secuenciales: EU FMD requiere explícitamente la aleatorización para prevenir la falsificación. Nunca usar numeración secuencial.
  • Errores de agregación: La desagregación (ruptura de una caja) debe actualizar la jerarquía. Enviar una caja con asociaciones de contenido incorrectas causa fallos de verificación aguas abajo.
  • Gestión de zona horaria: Los eventos EPCIS deben incluir el desplazamiento de zona horaria. Usar la hora local sin desplazamiento causa ambigüedad en el orden de eventos entre sedes.
  • Cargas tardías: Los datos de números de serie deben cargarse a los sistemas nacionales antes de que el producto entre en la cadena de suministro. Carga tardía = producto señalado como sospechoso en la farmacia.
  • Ignorar excepciones: Los productos legítimos se señalan con frecuencia (falsas alertas). Un proceso para investigar y resolver alertas es esencial.

Habilidades Relacionadas

  • perform-csv-assessment — validar el sistema de serialización como un sistema informatizado
  • conduct-gxp-audit — auditar los procesos de serialización
  • implement-audit-trail — registro de auditoría para eventos de serialización
  • serialize-data-formats — serialización de datos general (dominio diferente, conceptos complementarios)
  • design-serialization-schema — diseño de esquema para formatos de intercambio de datos

GitHub 저장소

pjt222/agent-almanac
경로: i18n/es/skills/implement-pharma-serialisation
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

executing-plans

디자인

executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.

스킬 보기

requesting-code-review

디자인

이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.

스킬 보기

connect-mcp-server

디자인

이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.

스킬 보기

web-cli-teleport

디자인

이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.

스킬 보기