From openevidence-pack
Provides a production architecture for clinical decision support integrations with OpenEvidence, including HIPAA-compliant query handling, citation pipelines, audit logging, and caching strategies.
How this skill is triggered — by the user, by Claude, or both
Slash command
/openevidence-pack:openevidence-reference-architectureThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Production architecture for clinical decision support integrations with OpenEvidence. Designed for healthcare platforms needing evidence-based query processing, citation-backed clinical answers, and full audit logging for regulatory compliance. Key design drivers: HIPAA-compliant data handling, deterministic citation pipelines for clinical accuracy, query audit trails for malpractice risk mitig...
Production architecture for clinical decision support integrations with OpenEvidence. Designed for healthcare platforms needing evidence-based query processing, citation-backed clinical answers, and full audit logging for regulatory compliance. Key design drivers: HIPAA-compliant data handling, deterministic citation pipelines for clinical accuracy, query audit trails for malpractice risk mitigation, and sub-second response times for point-of-care workflows where clinicians need answers during patient encounters.
Clinician UI ──→ API Gateway (auth + HIPAA) ──→ Query Service ──→ OpenEvidence API
↓ ↓ /query
Audit Logger ──→ Audit DB Cache (Redis) /citations
↓ ↓
Analytics ──→ Usage Dashboard Citation Store ──→ Evidence DB
class ClinicalQueryService {
constructor(private oe: OpenEvidenceClient, private cache: CacheLayer, private audit: AuditLogger) {}
async queryEvidence(query: ClinicalQuery): Promise<EvidenceResponse> {
await this.audit.log({ type: 'query_submitted', clinicianId: query.clinicianId, queryText: query.text, timestamp: new Date() });
const cacheKey = `evidence:${this.hashQuery(query.text)}`;
const cached = await this.cache.get(cacheKey);
if (cached) { await this.audit.log({ type: 'cache_hit', cacheKey }); return cached; }
const response = await this.oe.query(query.text, { specialty: query.specialty });
await this.storeCitations(response.citations);
await this.cache.set(cacheKey, response, CACHE_CONFIG.evidence.ttl);
await this.audit.log({ type: 'query_completed', citationCount: response.citations.length });
return response;
}
async getCitationChain(citationId: string): Promise<Citation[]> {
return this.evidenceDb.getCitationWithReferences(citationId);
}
}
const CACHE_CONFIG = {
evidence: { ttl: 86400, prefix: 'evidence' }, // 24 hr — clinical evidence changes slowly
citations: { ttl: 604800, prefix: 'cite' }, // 7 days — published citations are stable
queryHist: { ttl: 3600, prefix: 'qhist' }, // 1 hr — recent query dedup for same clinician
guidelines: { ttl: 43200, prefix: 'guide' }, // 12 hr — clinical guidelines update infrequently
audit: { ttl: 0, prefix: 'audit' }, // never cached — every audit entry must persist
};
// New guideline publication events invalidate evidence cache for affected specialties
class ClinicalEventPipeline {
private queue = new Bull('clinical-events', { redis: process.env.REDIS_URL });
async onQueryCompleted(event: QueryCompletedEvent): Promise<void> {
await this.queue.add('process', event, { attempts: 5, backoff: { type: 'exponential', delay: 2000 } });
}
async processQueryEvent(event: QueryCompletedEvent): Promise<void> {
await this.updateUsageAnalytics(event.clinicianId, event.specialty);
if (event.feedbackScore !== undefined) await this.logFeedback(event);
await this.checkGuidelineAlignment(event); // Flag if answer diverges from current guidelines
}
}
interface ClinicalQuery { clinicianId: string; text: string; specialty: string; patientContext?: string; urgency: 'routine' | 'urgent'; }
interface EvidenceResponse { answer: string; confidence: number; citations: Citation[]; specialty: string; responseTimeMs: number; }
interface Citation { id: string; title: string; journal: string; year: number; doi: string; relevanceScore: number; evidenceLevel: 'I' | 'II' | 'III' | 'IV' | 'V'; }
interface AuditEntry { id: string; type: string; clinicianId: string; timestamp: Date; queryText?: string; citationCount?: number; ipAddress: string; }
| Component | Failure Mode | Recovery |
|---|---|---|
| Evidence query | OpenEvidence API timeout | Serve cached response if available, degrade to "consult specialist" message |
| Audit logging | Audit DB write failure | Buffer to local WAL, retry with dead-letter queue — never drop audit entries |
| Citation retrieval | DOI resolution failure | Return citation metadata without full text link, flag for manual review |
| Cache layer | Redis connection lost | Bypass cache, query API directly, alert ops for cache restoration |
| HIPAA compliance | Unauthorized access attempt | Immediate block, audit log, alert security team, preserve evidence |
See openevidence-deploy-integration.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin openevidence-pack2plugins reuse this skill
First indexed Jul 18, 2026
Production readiness checklist for OpenEvidence clinical decision support API. Covers HIPAA compliance, secrets management, error handling, and evidence accuracy. Invoke via /openevidence-prod-checklist.
Provides reference architecture for Abridge clinical AI integration with EHRs (Epic/Athena) via FHIR R4 APIs. Includes HIPAA-compliant data flows, project structure for multi-site health systems.
Guides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.