Skip to main content

Regulatory Requirements Overview

Healthcare AI systems must demonstrate safety and efficacy through documented testing. Different regulatory frameworks have specific requirements:
FrameworkApplies ToKey Requirements
FDA 510(k) / De NovoSoftware as Medical Device (SaMD)Clinical validation, performance testing, risk analysis
FDA AI/ML GuidanceAdaptive AI systemsChange management, ongoing monitoring, predetermined change protocol
HIPAAAny PHI handlingAudit logs, access controls, encryption
SOC 2 Type IIEnterprise SaaSSecurity controls, availability, processing integrity
CE Marking (MDR)EU medical devicesClinical evaluation, post-market surveillance
ISO 13485Medical device QMSDesign controls, risk management, traceability

Step 1: Configure Compliance Export

Set up your project for regulatory export with required metadata:
configure_compliance.py
from rubric import Rubric

client = Rubric(api_key="your-api-key")

# Configure project for regulatory compliance
client.projects.update(
    "patient-triage",
    compliance_config={
        # Regulatory frameworks you're targeting
        "frameworks": ["fda_510k", "hipaa", "soc2"],

        # Device classification (for FDA)
        "device_classification": {
            "product_code": "QAS",  # Clinical decision support
            "device_class": "II",
            "intended_use": "AI-assisted patient triage for non-emergency symptoms"
        },

        # Risk management (ISO 14971)
        "risk_classification": {
            "severity": "serious",  # Could delay necessary care
            "probability": "remote",
            "risk_level": "moderate"
        },

        # Data retention requirements
        "retention": {
            "evaluation_results": "7_years",
            "audit_logs": "7_years",
            "model_artifacts": "lifetime_of_device"
        },

        # Required signatories for exports
        "authorized_signatories": [
            {"name": "Dr. Jane Smith", "title": "Chief Medical Officer", "role": "clinical_validation"},
            {"name": "John Doe", "title": "VP Engineering", "role": "technical_validation"},
            {"name": "Sarah Johnson", "title": "Head of Compliance", "role": "regulatory_review"}
        ]
    }
)

Step 2: Generate FDA Submission Package

Export a complete validation package for FDA 510(k) or De Novo submission:
fda_export.py
# Generate FDA submission package
fda_package = client.exports.create_fda_package(
    project="patient-triage",

    # Evaluation runs to include
    evaluations=[
        "eval_clinical_validation_v2",
        "eval_safety_testing_final",
        "eval_edge_case_analysis"
    ],

    # Package configuration
    config={
        "submission_type": "510k",  # or "de_novo", "pma"

        # Performance summary
        "performance_summary": {
            "primary_endpoint": "triage_accuracy",
            "secondary_endpoints": ["safety_score", "sensitivity_by_condition"],
            "include_confidence_intervals": True,
            "confidence_level": 0.95
        },

        # Test dataset documentation
        "dataset_documentation": {
            "include_demographics": True,
            "include_source_description": True,
            "include_sampling_methodology": True,
            "include_ground_truth_methodology": True
        },

        # Clinical validation
        "clinical_validation": {
            "include_human_review_results": True,
            "include_reviewer_credentials": True,
            "include_inter_rater_reliability": True
        },

        # Risk analysis
        "risk_analysis": {
            "include_failure_mode_analysis": True,
            "include_hazard_assessment": True,
            "include_mitigation_measures": True
        }
    }
)

print(f"Package ID: {fda_package.id}")
print(f"Status: {fda_package.status}")

# Download when ready
if fda_package.status == "complete":
    client.exports.download(
        fda_package.id,
        destination="./fda_submission_package.zip"
    )
FDA Package Contents: The FDA package includes: Executive Summary, Performance Testing Report, Clinical Validation Report, Risk Analysis (FMEA), Software Documentation, Labeling/Intended Use, and all supporting data files.

Step 3: Export Performance Testing Report

Generate a detailed performance report with statistical analysis:
performance_report.py
# Generate standalone performance report
performance_report = client.exports.create_performance_report(
    project="patient-triage",
    evaluation="eval_clinical_validation_v2",

    config={
        "format": "pdf",  # or "docx", "html"

        # Report sections
        "sections": {
            "executive_summary": True,
            "methodology": True,
            "dataset_description": True,
            "results_summary": True,
            "detailed_metrics": True,
            "subgroup_analysis": True,
            "failure_analysis": True,
            "statistical_analysis": True,
            "conclusions": True
        },

        # Metrics to include
        "metrics": {
            "primary": ["accuracy", "sensitivity", "specificity", "ppv", "npv"],
            "by_condition": ["chest_pain", "stroke", "pediatric_fever", "psychiatric"],
            "by_demographic": ["age_group", "sex"],
            "confusion_matrix": True,
            "roc_curves": True,
            "calibration_plots": True
        },

        # Statistical rigor
        "statistics": {
            "confidence_intervals": True,
            "confidence_level": 0.95,
            "method": "wilson",  # For proportions
            "hypothesis_tests": ["mcnemar"],  # vs baseline
            "effect_sizes": True
        },

        # Failure analysis
        "failure_analysis": {
            "include_examples": True,
            "max_examples": 10,
            "redact_phi": True,
            "categorize_by_type": True
        }
    }
)

# Wait for generation
report = client.exports.wait(performance_report.id)
print(f"Report ready: {report.download_url}")
Example output structure:
Performance Report Structure
PERFORMANCE TESTING REPORT
Patient Triage AI System v2.4.1
Generated: 2024-03-15

1. EXECUTIVE SUMMARY
   - Overall Accuracy: 86.2% (95% CI: 83.8-88.4%)
   - Safety Score: 95.4% (95% CI: 93.7-96.8%)
   - Critical Finding: Zero missed life-threatening conditions

2. METHODOLOGY
   - Test Dataset: 2,847 cases (stratified sample)
   - Ground Truth: Board-certified physician consensus
   - Evaluation Protocol: Blinded, randomized review

3. DATASET DESCRIPTION
   - Demographics: 52% female, mean age 47.2 years
   - Condition Distribution: [table]
   - Geographic Distribution: [table]
   - Collection Period: Jan 2023 - Dec 2023

4. RESULTS BY TRIAGE LEVEL
   - Emergent: Sensitivity 99.2%, Specificity 94.1%
   - Urgent: Sensitivity 91.3%, Specificity 88.7%
   - Semi-Urgent: Sensitivity 84.5%, Specificity 91.2%
   - Routine: Sensitivity 88.9%, Specificity 85.3%

5. RESULTS BY CONDITION
   - Cardiac (n=312): Sensitivity 98.4%
   - Neurological (n=198): Sensitivity 99.0%
   - Pediatric (n=245): Sensitivity 95.5%
   [continued...]

6. SUBGROUP ANALYSIS
   - By Age Group: [table with CIs]
   - By Sex: [table with CIs]
   - Disparity Analysis: No statistically significant differences

7. FAILURE ANALYSIS
   - Total Failures: 392/2847 (13.8%)
   - Over-triage: 287 (73.2% of failures)
   - Under-triage: 105 (26.8% of failures)
   - Critical Under-triage: 0 (0.0%)
   [Example cases with redacted PHI]

8. STATISTICAL ANALYSIS
   - Comparison to Baseline v2.3.0: +2.1% accuracy (p=0.003)
   - McNemar's Test: χ² = 8.92, p = 0.003
   - Effect Size (Cohen's h): 0.15 (small)

9. CONCLUSIONS
   [Summary and recommendations]

APPENDICES
A. Confusion Matrices
B. ROC Curves
C. Calibration Plots
D. Complete Failure Case List
E. Reviewer Credentials

Step 4: Export Audit Trail

Generate comprehensive audit logs for SOC 2 or HIPAA compliance:
audit_export.py
# Export audit trail
audit_export = client.exports.create_audit_trail(
    project="patient-triage",

    # Time range
    start_date="2024-01-01",
    end_date="2024-03-31",

    config={
        "format": "json",  # or "csv", "parquet"

        # Event types to include
        "event_types": [
            "evaluation_created",
            "evaluation_completed",
            "sample_created",
            "sample_reviewed",
            "model_deployed",
            "safety_gate_result",
            "override_requested",
            "override_approved",
            "data_accessed",
            "export_created",
            "settings_changed"
        ],

        # Fields to include
        "fields": [
            "timestamp",
            "event_type",
            "actor_id",
            "actor_email",
            "actor_role",
            "resource_type",
            "resource_id",
            "action",
            "details",
            "ip_address",
            "user_agent",
            "result"
        ],

        # Compliance annotations
        "compliance_annotations": {
            "hipaa_category": True,  # Access, modification, disclosure
            "soc2_control": True     # Map to SOC 2 control objectives
        },

        # PHI handling
        "phi_handling": {
            "redact_patient_data": True,
            "include_access_logs": True,
            "include_phi_flags": True
        }
    }
)

# Download audit trail
client.exports.download(
    audit_export.id,
    destination="./audit_trail_q1_2024.json"
)
Example audit log entry:
Audit Log Entry
{
  "timestamp": "2024-03-15T14:32:18.847Z",
  "event_type": "sample_reviewed",
  "actor_id": "usr_Dr8mKp2n",
  "actor_email": "[email protected]",
  "actor_role": "physician_reviewer",
  "resource_type": "sample",
  "resource_id": "smp_Kj9pL2mN",
  "action": "submit_review",
  "details": {
    "review_type": "clinical_validation",
    "grades_submitted": {
      "triage_accuracy": "correct",
      "safety_flags": "all_addressed"
    },
    "time_spent_seconds": 142,
    "phi_accessed": true
  },
  "ip_address": "10.0.1.45",
  "user_agent": "Mozilla/5.0...",
  "result": "success",
  "hipaa_category": "access",
  "soc2_controls": ["CC6.1", "CC7.2"]
}

Step 5: Export Human Review Documentation

Document the clinical expert review process for validation:
human_review_export.py
# Export human review documentation
review_docs = client.exports.create_human_review_report(
    project="patient-triage",
    evaluation="eval_clinical_validation_v2",

    config={
        # Reviewer documentation
        "reviewer_documentation": {
            "credentials": True,           # Licenses, certifications
            "credential_verification": True,  # How verified
            "training_records": True,      # Calibration completed
            "conflict_of_interest": True   # COI declarations
        },

        # Review process documentation
        "process_documentation": {
            "review_protocol": True,       # Step-by-step process
            "blinding_methodology": True,  # How reviewers were blinded
            "randomization": True,         # How cases were assigned
            "quality_controls": True       # Gold standard insertion, etc.
        },

        # Inter-rater reliability
        "reliability_analysis": {
            "cohens_kappa": True,
            "fleiss_kappa": True,          # For >2 reviewers
            "percent_agreement": True,
            "by_category": True,
            "confidence_intervals": True
        },

        # Consensus handling
        "consensus_documentation": {
            "disagreement_rate": True,
            "adjudication_process": True,
            "final_consensus_method": True
        },

        # Individual review data (de-identified)
        "review_data": {
            "include_individual_grades": True,
            "include_reviewer_notes": True,
            "redact_phi": True,
            "de_identify_reviewers": False  # Keep for credential linking
        }
    }
)

print(f"Review documentation: {review_docs.download_url}")

Step 6: Generate Reproducibility Manifest

Create a cryptographically signed manifest for exact reproducibility:
reproducibility_manifest.py
# Generate reproducibility manifest
manifest = client.exports.create_reproducibility_manifest(
    evaluation="eval_clinical_validation_v2",

    config={
        # Include cryptographic hashes
        "hashes": {
            "algorithm": "sha256",
            "include": [
                "model_weights",
                "model_config",
                "evaluation_config",
                "dataset",
                "evaluator_code"
            ]
        },

        # Version information
        "versions": {
            "model_version": True,
            "sdk_version": True,
            "evaluator_versions": True,
            "dependencies": True
        },

        # Environment capture
        "environment": {
            "python_version": True,
            "package_versions": True,
            "system_info": True,
            "gpu_info": True
        },

        # Timestamps
        "timestamps": {
            "evaluation_start": True,
            "evaluation_end": True,
            "data_snapshot": True
        },

        # Digital signature
        "signature": {
            "sign": True,
            "certificate": "projects/patient-triage/certificates/signing-cert"
        }
    }
)

# Verify manifest integrity
verification = client.exports.verify_manifest(manifest.id)
print(f"Signature Valid: {verification.signature_valid}")
print(f"Hashes Match: {verification.all_hashes_match}")
print(f"Reproducible: {verification.is_reproducible}")
Example manifest:
Reproducibility Manifest
{
  "manifest_version": "1.0",
  "evaluation_id": "eval_clinical_validation_v2",
  "created_at": "2024-03-15T10:30:00Z",

  "hashes": {
    "model_weights": "sha256:a3f2e8c9d1b4...",
    "model_config": "sha256:7c8d9e0f1a2b...",
    "evaluation_config": "sha256:4e5f6a7b8c9d...",
    "dataset": "sha256:1a2b3c4d5e6f...",
    "evaluator_triage_accuracy": "sha256:9d8c7b6a5e4f...",
    "evaluator_safety_score": "sha256:3f2e1d0c9b8a..."
  },

  "versions": {
    "model": "v2.4.1",
    "rubric_sdk": "1.2.3",
    "evaluators": {
      "triage_accuracy": "2.1.0",
      "safety_score": "1.5.2"
    }
  },

  "environment": {
    "python": "3.11.4",
    "torch": "2.1.0",
    "transformers": "4.35.0"
  },

  "execution": {
    "start": "2024-03-15T08:00:00Z",
    "end": "2024-03-15T10:28:47Z",
    "samples_processed": 2847,
    "compute_hours": 2.48
  },

  "signature": {
    "algorithm": "ECDSA-SHA256",
    "certificate": "CN=Rubric Clinical Validation",
    "signature": "MEUCIQC7x9Hk..."
  }
}

Step 7: Schedule Regular Exports

Set up automated exports for ongoing compliance:
scheduled_exports.py
# Configure scheduled exports
client.exports.create_schedule(
    name="monthly-compliance-export",
    project="patient-triage",

    schedule={
        "frequency": "monthly",
        "day_of_month": 1,
        "time": "02:00",
        "timezone": "America/New_York"
    },

    exports=[
        {
            "type": "performance_summary",
            "config": {
                "period": "previous_month",
                "format": "pdf",
                "include_trends": True
            }
        },
        {
            "type": "audit_trail",
            "config": {
                "period": "previous_month",
                "format": "json"
            }
        },
        {
            "type": "safety_gate_summary",
            "config": {
                "period": "previous_month",
                "include_overrides": True
            }
        }
    ],

    delivery={
        "method": "s3",
        "bucket": "compliance-exports",
        "prefix": "patient-triage/monthly/",
        "notify": ["[email protected]"]
    }
)

# Also create quarterly QBR export
client.exports.create_schedule(
    name="quarterly-qbr-export",
    project="patient-triage",

    schedule={
        "frequency": "quarterly",
        "day_of_quarter": 5,  # 5th day of quarter
        "time": "02:00"
    },

    exports=[
        {
            "type": "executive_summary",
            "config": {
                "period": "previous_quarter",
                "format": "pptx",
                "include_charts": True,
                "include_recommendations": True
            }
        }
    ]
)

Export Types Summary

Export TypeUse CaseFormat Options
FDA Package510(k), De Novo, PMA submissionsZIP (structured)
Performance ReportClinical validation documentationPDF, DOCX, HTML
Audit TrailSOC 2, HIPAA auditsJSON, CSV, Parquet
Human Review ReportReviewer credential documentationPDF, DOCX
Reproducibility ManifestExact reproduction of resultsJSON (signed)
Safety Gate SummaryDeployment decision documentationPDF, JSON
Executive SummaryBoard/investor reportingPPTX, PDF
Raw Data ExportCustom analysis, archivesParquet, CSV

Compliance Checklist

RequirementExport TypeFrequency
Clinical validation evidencePerformance ReportPer release
Reviewer credentials on fileHuman Review ReportQuarterly
Access audit logsAudit TrailMonthly
Change control documentationSafety Gate SummaryPer deployment
Reproducibility evidenceReproducibility ManifestPer evaluation
Post-market surveillancePerformance ReportMonthly
Risk management updatesFDA PackageAnnual minimum

Next Steps