openevidence-reference-architecture
Provides a standard project layout and architecture diagram for HIPAA-compliant clinical decision support tools.
Install
mkdir -p .claude/skills/openevidence-reference-architecture && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5949" && unzip -o skill.zip -d .claude/skills/openevidence-reference-architecture && rm skill.zipInstalls to .claude/skills/openevidence-reference-architecture
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Reference Architecture for OpenEvidence.Key capabilities
- →Structure clinical data flows for regulatory compliance
- →Implement caching strategies for evidence and citations
- →Establish audit logging pipelines for malpractice risk mitigation
- →Design event-driven feedback loops
How it works
The architecture separates the query path from the audit path, using Redis to cache evidence and citations while ensuring all queries are logged to a persistent database.
Inputs & outputs
When to use openevidence-reference-architecture
- →Designing new clinical AI integrations
- →Reviewing project structure
- →Establishing architecture standards
- →Structuring clinical data flows
About this skill
OpenEvidence Reference Architecture
Overview
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.
Architecture Diagram
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
Service Layer
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);
}
}
Caching Strategy
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
Event Pipeline
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
}
}
Data Model
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; }
Scaling Considerations
- Separate audit write path from query path — audit logging must never slow clinical responses
- Cache evidence responses aggressively — same clinical questions recur across clinicians
- Partition audit DB by month for compliance retention windows and query performance
- Use read replicas for analytics dashboard; primary DB reserved for audit writes
- Rate-limit per clinician to prevent abuse while ensuring genuine clinical queries are never blocked
Error Handling
| 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 |
Resources
Next Steps
See openevidence-deploy-integration.
When not to use it
- →Caching audit logs
- →Dropping audit entries during database failures
Prerequisites
Limitations
- →Audit logging must never slow clinical responses
- →Evidence cache invalidation required on guideline updates
How it compares
This architecture explicitly separates audit logging from the primary query path to ensure sub-second response times for clinicians.
Compared to similar skills
openevidence-reference-architecture side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| openevidence-reference-architecture (this skill) | 1 | 27d | Review | Advanced |
| architecture-patterns | 55 | 2mo | No flags | Advanced |
| kotlin-multiplatform | 32 | 3mo | Review | Advanced |
| nodejs-best-practices | 28 | 6mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
architecture-patterns
wshobson
Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use when architecting complex backend systems or refactoring existing applications for better maintainability.
kotlin-multiplatform
vitorpamplona
Platform abstraction decision-making for Amethyst KMP project. Guides when to abstract vs keep platform-specific, source set placement (commonMain, jvmAndroid, platform-specific), expect/actual patterns. Covers primary targets (Android, JVM/Desktop, iOS) with web/wasm future considerations. Integrates with gradle-expert for dependency issues. Triggers on: abstraction decisions ("should I share this?"), source set placement questions, expect/actual creation, build.gradle.kts work, incorrect placement detection, KMP dependency suggestions.
nodejs-best-practices
davila7
Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.
workflow-orchestration-patterns
wshobson
Design durable workflows with Temporal for distributed systems. Covers workflow vs activity separation, saga patterns, state management, and determinism constraints. Use when building long-running processes, distributed transactions, or microservice orchestration.
java-pro
sickn33
Master Java 21+ with modern features like virtual threads, pattern matching, and Spring Boot 3.x. Expert in the latest Java ecosystem including GraalVM, Project Loom, and cloud-native patterns. Use PROACTIVELY for Java development, microservices architecture, or performance optimization.
arm-cortex-expert
sickn33
Senior embedded software engineer specializing in firmware and driver development for ARM Cortex-M microcontrollers (Teensy, STM32, nRF52, SAMD). Decades of experience writing reliable, optimized, and maintainable embedded code with deep expertise in memory barriers, DMA/cache coherency, interrupt-driven I/O, and peripheral drivers.