Files
gh-k-dense-ai-claude-scient…/skills/clinical-reports/scripts/compliance_checker.py
2025-11-30 08:30:18 +08:00

79 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Check clinical reports for regulatory compliance (HIPAA, GCP, FDA).
Usage:
python compliance_checker.py <report_file>
"""
import argparse
import json
import re
COMPLIANCE_CHECKS = {
"hipaa": {
"consent_statement": r"(?i)(informed\s+consent|written\s+consent).*obtained",
"deidentification": r"(?i)(de-identif|anonymi[sz])",
},
"gcp": {
"irb_approval": r"(?i)(IRB|IEC|ethics\s+committee).*approv",
"protocol_compliance": r"(?i)protocol",
"informed_consent": r"(?i)informed\s+consent",
},
"fda": {
"study_id": r"(?i)(IND|IDE|protocol)\s+(number|#)[:]\s*\S+",
"safety_reporting": r"(?i)(adverse\s+event|SAE)",
}
}
def check_compliance(filename: str) -> dict:
"""Check regulatory compliance."""
with open(filename, 'r', encoding='utf-8') as f:
content = f.read()
results = {}
for regulation, checks in COMPLIANCE_CHECKS.items():
reg_results = {}
for check_name, pattern in checks.items():
reg_results[check_name] = bool(re.search(pattern, content))
results[regulation] = reg_results
return {"filename": filename, "compliance": results}
def main():
"""Main entry point."""
parser = argparse.ArgumentParser(description="Check regulatory compliance")
parser.add_argument("input_file", help="Path to clinical report")
parser.add_argument("--json", action="store_true")
args = parser.parse_args()
try:
report = check_compliance(args.input_file)
if args.json:
print(json.dumps(report, indent=2))
else:
print("\nRegulatory Compliance Check:\n")
for reg, checks in report["compliance"].items():
print(f"{reg.upper()}:")
for check, passed in checks.items():
symbol = "" if passed else ""
print(f" {symbol} {check}")
print()
return 0
except Exception as e:
print(f"Error: {e}")
return 1
if __name__ == "__main__":
import sys
sys.exit(main())