跳转至

IVDR法规要求

IVDR概述

欧盟体外诊断医疗器械法规(In Vitro Diagnostic Regulation, IVDR 2017/746)于2017年发布,2022年5月26日全面实施,取代了原有的IVDD指令。

主要变化

1. 风险分类更严格

新分类系统

类别 风险等级 示例 合格评定
A类 低风险 样本容器、通用试剂 自我声明
B类 中低风险 妊娠自测、血糖仪 公告机构参与
C类 中高风险 PSA检测、HbA1c 公告机构参与
D类 高风险 HIV筛查、血型鉴定 公告机构全面审查

分类规则

class IVDRClassifier:
    """IVDR分类器"""

    def classify_device(self, device_info):
        """根据IVDR规则分类器械"""

        # 规则1: 用于血液、血液成分、细胞、组织或器官的筛查、诊断或分期
        if device_info.purpose in ["BLOOD_SCREENING", "TISSUE_TYPING"]:
            return "CLASS_D"

        # 规则2: 用于检测传染病的存在或暴露
        if device_info.detects_infectious_disease:
            if device_info.high_risk_pathogen:
                return "CLASS_D"
            else:
                return "CLASS_C"

        # 规则3: 用于检测遗传性疾病的存在
        if device_info.genetic_testing:
            if device_info.prenatal_screening:
                return "CLASS_C"
            else:
                return "CLASS_B"

        # 规则4: 用于预测、预后、监测或诊断癌症
        if device_info.cancer_related:
            return "CLASS_C"

        # 规则5: 伴随诊断
        if device_info.companion_diagnostic:
            return "CLASS_C"

        # 规则6: 自测器械
        if device_info.self_testing:
            return max("CLASS_B", self.classify_by_intended_use(device_info))

        # 规则7: 其他器械
        return "CLASS_A"

2. 临床证据要求

临床性能研究

class ClinicalPerformanceStudy:
    """临床性能研究"""

    def design_study(self, device):
        """设计临床性能研究"""
        study_plan = {
            "objectives": self.define_objectives(device),
            "endpoints": self.define_endpoints(device),
            "sample_size": self.calculate_sample_size(device),
            "inclusion_criteria": self.define_inclusion_criteria(),
            "statistical_analysis": self.plan_statistical_analysis()
        }

        return study_plan

    def calculate_sample_size(self, device):
        """计算样本量"""
        # 基于预期灵敏度和特异性
        sensitivity = device.claimed_sensitivity
        specificity = device.claimed_specificity
        confidence_level = 0.95
        precision = 0.05

        # 使用二项分布计算
        n_sensitivity = self.binomial_sample_size(
            sensitivity, confidence_level, precision
        )
        n_specificity = self.binomial_sample_size(
            specificity, confidence_level, precision
        )

        return max(n_sensitivity, n_specificity)

    def analyze_results(self, study_data):
        """分析研究结果"""
        results = {
            "sensitivity": self.calculate_sensitivity(study_data),
            "specificity": self.calculate_specificity(study_data),
            "ppv": self.calculate_ppv(study_data),
            "npv": self.calculate_npv(study_data),
            "accuracy": self.calculate_accuracy(study_data),
            "confidence_intervals": self.calculate_ci(study_data)
        }

        return ClinicalPerformanceReport(results)

3. 质量管理体系

ISO 13485:2016要求

class QMSCompliance:
    """质量管理体系合规性"""

    def __init__(self):
        self.iso13485_requirements = self.load_requirements()

    def verify_qms_compliance(self):
        """验证QMS合规性"""
        checks = {
            "management_responsibility": self.check_management(),
            "resource_management": self.check_resources(),
            "product_realization": self.check_realization(),
            "measurement_analysis": self.check_measurement(),
            "risk_management": self.check_risk_management(),
            "post_market_surveillance": self.check_pms()
        }

        return all(checks.values())

    def check_risk_management(self):
        """检查风险管理"""
        # ISO 14971要求
        risk_activities = [
            "risk_analysis_performed",
            "risk_evaluation_documented",
            "risk_control_implemented",
            "residual_risk_acceptable",
            "risk_management_review_conducted"
        ]

        return all(self.verify_activity(a) for a in risk_activities)

技术文档要求

1. 通用规范文档(GSPR)

class GSPRDocumentation:
    """通用安全和性能要求文档"""

    def create_gspr_checklist(self):
        """创建GSPR检查清单"""
        requirements = {
            "Chapter I - General Requirements": [
                "达到制造商预期性能",
                "设计和制造不损害患者安全",
                "风险可接受",
                "正常使用条件下性能不受影响"
            ],
            "Chapter II - Design and Manufacturing": [
                "化学、物理和生物特性",
                "感染和微生物污染",
                "制造和环境特性",
                "具有测量功能的器械",
                "辐射防护",
                "内置软件的器械",
                "电气和电子系统",
                "机械和热风险防护"
            ],
            "Chapter III - Information": [
                "标签和使用说明",
                "用户培训要求"
            ]
        }

        return requirements

2. 软件文档要求

IEC 62304合规性

class SoftwareDocumentation:
    """软件文档"""

    def generate_software_documentation(self, software_class):
        """生成软件文档"""
        docs = {
            "software_development_plan": self.create_sdp(),
            "software_requirements": self.document_requirements(),
            "software_architecture": self.document_architecture(),
            "software_detailed_design": self.document_design(),
            "software_unit_testing": self.document_unit_tests(),
            "software_integration_testing": self.document_integration(),
            "software_system_testing": self.document_system_tests(),
            "software_release": self.document_release()
        }

        if software_class in ["B", "C"]:
            docs["software_risk_management"] = self.document_risks()

        return docs

    def document_requirements(self):
        """文档化软件需求"""
        return {
            "functional_requirements": self.list_functional_req(),
            "performance_requirements": self.list_performance_req(),
            "interface_requirements": self.list_interface_req(),
            "safety_requirements": self.list_safety_req(),
            "security_requirements": self.list_security_req(),
            "traceability_matrix": self.create_traceability()
        }

3. 临床评价报告

class ClinicalEvaluationReport:
    """临床评价报告"""

    def create_cer(self, device):
        """创建临床评价报告"""
        report = {
            "executive_summary": self.write_summary(),
            "device_description": self.describe_device(device),
            "clinical_background": self.research_clinical_context(),
            "literature_review": self.conduct_literature_review(),
            "clinical_data_analysis": self.analyze_clinical_data(),
            "performance_evaluation": self.evaluate_performance(),
            "benefit_risk_analysis": self.analyze_benefit_risk(),
            "conclusions": self.draw_conclusions()
        }

        return report

    def conduct_literature_review(self):
        """进行文献综述"""
        search_strategy = {
            "databases": ["PubMed", "Embase", "Cochrane"],
            "keywords": self.define_search_terms(),
            "inclusion_criteria": self.define_inclusion(),
            "exclusion_criteria": self.define_exclusion(),
            "quality_assessment": self.assess_study_quality()
        }

        return LiteratureReview(search_strategy)

上市后监督

1. 警戒系统

class VigilanceSystem:
    """警戒系统"""

    def __init__(self):
        self.incident_database = IncidentDatabase()
        self.reporting_authority = "Competent Authority"

    def handle_incident(self, incident):
        """处理事件"""
        # 评估严重性
        severity = self.assess_severity(incident)

        # 确定报告时限
        if severity == "SERIOUS":
            deadline = timedelta(days=15)
        else:
            deadline = timedelta(days=30)

        # 创建报告
        report = self.create_incident_report(incident)

        # 提交给主管当局
        self.submit_to_authority(report, deadline)

        # 采取纠正措施
        if self.requires_fsca(incident):
            self.initiate_fsca(incident)

    def initiate_fsca(self, incident):
        """启动现场安全纠正措施(FSCA)"""
        fsca = {
            "type": self.determine_fsca_type(incident),
            "affected_devices": self.identify_affected_devices(),
            "customers_to_notify": self.get_customer_list(),
            "corrective_action": self.define_corrective_action(),
            "timeline": self.create_timeline()
        }

        return FSCA(fsca)

2. 定期安全更新报告(PSUR)

class PSURGenerator:
    """PSUR生成器"""

    def generate_psur(self, device, period):
        """生成定期安全更新报告"""
        psur = {
            "reporting_period": period,
            "device_information": self.get_device_info(device),
            "sales_data": self.collect_sales_data(period),
            "incident_data": self.collect_incident_data(period),
            "trend_analysis": self.analyze_trends(),
            "literature_review": self.review_new_literature(),
            "risk_benefit_assessment": self.assess_risk_benefit(),
            "conclusions": self.draw_conclusions()
        }

        return PSUR(psur)

    def analyze_trends(self):
        """分析趋势"""
        incidents = self.incident_database.get_all()

        # 按类型分组
        by_type = self.group_by_type(incidents)

        # 计算发生率
        rates = self.calculate_incident_rates(by_type)

        # 识别趋势
        trends = self.identify_trends(rates)

        return TrendAnalysis(trends)

唯一器械标识(UDI)

UDI实施

class UDISystem:
    """UDI系统"""

    def generate_udi(self, device):
        """生成UDI"""
        # UDI-DI: 器械标识
        udi_di = self.generate_udi_di(device)

        # UDI-PI: 生产标识
        udi_pi = self.generate_udi_pi(device)

        # 完整UDI
        udi = f"{udi_di}{udi_pi}"

        # 生成条形码
        barcode = self.generate_barcode(udi)

        return UDI(udi_di, udi_pi, barcode)

    def register_in_eudamed(self, device, udi):
        """在EUDAMED中注册"""
        registration = {
            "basic_udi_di": udi.udi_di,
            "device_name": device.name,
            "risk_class": device.risk_class,
            "manufacturer": device.manufacturer,
            "intended_purpose": device.intended_purpose,
            "clinical_size": device.size if applicable
        }

        self.eudamed_api.register(registration)

合规检查清单

上市前检查

class PreMarketChecklist:
    """上市前检查清单"""

    def verify_compliance(self, device):
        """验证合规性"""
        checks = {
            "分类正确": self.verify_classification(device),
            "技术文档完整": self.verify_technical_docs(device),
            "临床证据充分": self.verify_clinical_evidence(device),
            "QMS认证": self.verify_qms_certification(),
            "风险管理完成": self.verify_risk_management(device),
            "标签符合要求": self.verify_labeling(device),
            "UDI分配": self.verify_udi(device),
            "公告机构审查": self.verify_nb_review(device),
            "EUDAMED注册": self.verify_eudamed_registration(device)
        }

        compliance_status = all(checks.values())

        if not compliance_status:
            failed_checks = [k for k, v in checks.items() if not v]
            raise ComplianceError(f"以下检查未通过: {failed_checks}")

        return compliance_status

过渡期安排

时间表

日期 要求
2022年5月26日 IVDR全面实施
2025年5月26日 A类器械过渡期结束
2027年5月26日 B类和C类器械过渡期结束
2028年5月26日 D类器械过渡期结束
class TransitionManager:
    """过渡期管理器"""

    def check_transition_status(self, device):
        """检查过渡状态"""
        current_date = datetime.now()

        deadlines = {
            "CLASS_A": datetime(2025, 5, 26),
            "CLASS_B": datetime(2027, 5, 26),
            "CLASS_C": datetime(2027, 5, 26),
            "CLASS_D": datetime(2028, 5, 26)
        }

        deadline = deadlines[device.risk_class]
        days_remaining = (deadline - current_date).days

        if days_remaining < 180:
            return TransitionStatus(
                urgent=True,
                days_remaining=days_remaining,
                action_required="立即启动IVDR合规项目"
            )

        return TransitionStatus(
            urgent=False,
            days_remaining=days_remaining,
            action_required="按计划推进合规工作"
        )

相关资源

参考文献

  • IVDR 2017/746: 欧盟体外诊断医疗器械法规
  • MDCG 2020-16: IVDR分类指南
  • MDCG 2020-5: 临床证据指南
  • MDCG 2019-11: 通用规范文档模板

💬 讨论区

欢迎在这里分享您的想法、提出问题或参与讨论。需要 GitHub 账号登录。