@erosolaraijs/cure 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cure.d.ts +2 -5
- package/dist/bin/cure.d.ts.map +1 -1
- package/dist/bin/cure.js +285 -124
- package/dist/bin/cure.js.map +1 -1
- package/dist/clinician/decisionSupport.d.ts +325 -0
- package/dist/clinician/decisionSupport.d.ts.map +1 -0
- package/dist/clinician/decisionSupport.js +604 -0
- package/dist/clinician/decisionSupport.js.map +1 -0
- package/dist/clinician/index.d.ts +5 -0
- package/dist/clinician/index.d.ts.map +1 -0
- package/dist/clinician/index.js +5 -0
- package/dist/clinician/index.js.map +1 -0
- package/dist/compliance/index.d.ts +5 -0
- package/dist/compliance/index.d.ts.map +1 -0
- package/dist/compliance/index.js +5 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/integrations/clinicalTrials/index.d.ts +5 -0
- package/dist/integrations/clinicalTrials/index.d.ts.map +1 -0
- package/dist/integrations/clinicalTrials/index.js +5 -0
- package/dist/integrations/clinicalTrials/index.js.map +1 -0
- package/dist/integrations/ehr/index.d.ts +5 -0
- package/dist/integrations/ehr/index.d.ts.map +1 -0
- package/dist/integrations/ehr/index.js +5 -0
- package/dist/integrations/ehr/index.js.map +1 -0
- package/dist/integrations/genomics/index.d.ts +5 -0
- package/dist/integrations/genomics/index.d.ts.map +1 -0
- package/dist/integrations/genomics/index.js +5 -0
- package/dist/integrations/genomics/index.js.map +1 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +10 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/ml/index.d.ts +5 -0
- package/dist/ml/index.d.ts.map +1 -0
- package/dist/ml/index.js +5 -0
- package/dist/ml/index.js.map +1 -0
- package/dist/ml/outcomePredictor.d.ts +297 -0
- package/dist/ml/outcomePredictor.d.ts.map +1 -0
- package/dist/ml/outcomePredictor.js +823 -0
- package/dist/ml/outcomePredictor.js.map +1 -0
- package/dist/patient/index.d.ts +5 -0
- package/dist/patient/index.d.ts.map +1 -0
- package/dist/patient/index.js +5 -0
- package/dist/patient/index.js.map +1 -0
- package/dist/patient/patientPortal.d.ts +337 -0
- package/dist/patient/patientPortal.d.ts.map +1 -0
- package/dist/patient/patientPortal.js +667 -0
- package/dist/patient/patientPortal.js.map +1 -0
- package/dist/safety/drugInteractions.d.ts +230 -0
- package/dist/safety/drugInteractions.d.ts.map +1 -0
- package/dist/safety/drugInteractions.js +697 -0
- package/dist/safety/drugInteractions.js.map +1 -0
- package/dist/safety/index.d.ts +5 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +5 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +5 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/retrospectiveValidator.d.ts +246 -0
- package/dist/validation/retrospectiveValidator.d.ts.map +1 -0
- package/dist/validation/retrospectiveValidator.js +602 -0
- package/dist/validation/retrospectiveValidator.js.map +1 -0
- package/package.json +1 -1
- package/src/bin/cure.ts +331 -140
- package/src/clinician/decisionSupport.ts +949 -0
- package/src/patient/patientPortal.ts +1039 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clinician Decision Support System
|
|
3
|
+
*
|
|
4
|
+
* Provides clinical decision support features:
|
|
5
|
+
* - Treatment recommendations with explanations
|
|
6
|
+
* - Override management and documentation
|
|
7
|
+
* - Tumor board integration
|
|
8
|
+
* - Evidence summaries
|
|
9
|
+
* - Risk-benefit visualization
|
|
10
|
+
* - Alert acknowledgment workflows
|
|
11
|
+
*
|
|
12
|
+
* Designed to augment (not replace) clinical judgment.
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'events';
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
// DECISION SUPPORT SERVICE
|
|
17
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
18
|
+
export class ClinicalDecisionSupportService extends EventEmitter {
|
|
19
|
+
recommendations = new Map();
|
|
20
|
+
overrides = new Map();
|
|
21
|
+
tumorBoardCases = new Map();
|
|
22
|
+
alertAcknowledgments = [];
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a clinical recommendation
|
|
28
|
+
*/
|
|
29
|
+
async generateRecommendation(params) {
|
|
30
|
+
const id = `REC-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
31
|
+
const now = new Date();
|
|
32
|
+
// Generate recommendation based on inputs
|
|
33
|
+
// In production, this would call the ML prediction service and knowledge base
|
|
34
|
+
const recommendation = {
|
|
35
|
+
id,
|
|
36
|
+
patientId: params.patientId,
|
|
37
|
+
generatedAt: now,
|
|
38
|
+
validUntil: new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000), // 7 days
|
|
39
|
+
primaryRecommendation: this.determinePrimaryRecommendation(params),
|
|
40
|
+
alternativeOptions: this.determineAlternatives(params),
|
|
41
|
+
supportingEvidence: this.gatherEvidence(params),
|
|
42
|
+
biomarkerRationale: this.generateBiomarkerRationale(params.biomarkers, params.genomicAlterations),
|
|
43
|
+
predictions: this.generatePredictions(params),
|
|
44
|
+
clinicalConsiderations: this.identifyConsiderations(params),
|
|
45
|
+
monitoringPlan: this.generateMonitoringPlan(params),
|
|
46
|
+
clinicalTrialOptions: [],
|
|
47
|
+
status: 'active'
|
|
48
|
+
};
|
|
49
|
+
this.recommendations.set(id, recommendation);
|
|
50
|
+
this.emit('recommendation-generated', recommendation);
|
|
51
|
+
return recommendation;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get recommendation by ID
|
|
55
|
+
*/
|
|
56
|
+
getRecommendation(recommendationId) {
|
|
57
|
+
return this.recommendations.get(recommendationId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get recommendations for a patient
|
|
61
|
+
*/
|
|
62
|
+
getPatientRecommendations(patientId) {
|
|
63
|
+
return Array.from(this.recommendations.values())
|
|
64
|
+
.filter(r => r.patientId === patientId)
|
|
65
|
+
.sort((a, b) => b.generatedAt.getTime() - a.generatedAt.getTime());
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Accept a recommendation
|
|
69
|
+
*/
|
|
70
|
+
async acceptRecommendation(recommendationId, clinicianId, clinicianName) {
|
|
71
|
+
const rec = this.recommendations.get(recommendationId);
|
|
72
|
+
if (!rec)
|
|
73
|
+
throw new Error('Recommendation not found');
|
|
74
|
+
rec.status = 'accepted';
|
|
75
|
+
rec.reviewedBy = clinicianId;
|
|
76
|
+
rec.reviewedAt = new Date();
|
|
77
|
+
this.emit('recommendation-accepted', {
|
|
78
|
+
recommendationId,
|
|
79
|
+
clinicianId,
|
|
80
|
+
clinicianName,
|
|
81
|
+
recommendation: rec.primaryRecommendation.regimen
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Record an override
|
|
86
|
+
*/
|
|
87
|
+
async recordOverride(override) {
|
|
88
|
+
const id = `OVR-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
89
|
+
const fullOverride = {
|
|
90
|
+
...override,
|
|
91
|
+
id,
|
|
92
|
+
timestamp: new Date(),
|
|
93
|
+
auditStatus: this.requiresSupervisorApproval(override) ? 'pending-review' : 'reviewed'
|
|
94
|
+
};
|
|
95
|
+
// Check if supervisor approval is required
|
|
96
|
+
if (this.requiresSupervisorApproval(override)) {
|
|
97
|
+
fullOverride.supervisorApproval = {
|
|
98
|
+
required: true
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Update recommendation status
|
|
102
|
+
const rec = this.recommendations.get(override.recommendationId);
|
|
103
|
+
if (rec) {
|
|
104
|
+
rec.status = override.overrideType === 'full' ? 'rejected' : 'modified';
|
|
105
|
+
rec.reviewedBy = override.clinicianId;
|
|
106
|
+
rec.reviewedAt = new Date();
|
|
107
|
+
}
|
|
108
|
+
// Store override
|
|
109
|
+
const patientOverrides = this.overrides.get(override.patientId) || [];
|
|
110
|
+
patientOverrides.push(fullOverride);
|
|
111
|
+
this.overrides.set(override.patientId, patientOverrides);
|
|
112
|
+
this.emit('override-recorded', fullOverride);
|
|
113
|
+
return id;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if supervisor approval is required
|
|
117
|
+
*/
|
|
118
|
+
requiresSupervisorApproval(override) {
|
|
119
|
+
// Require approval for certain categories
|
|
120
|
+
const requiresApproval = [
|
|
121
|
+
'clinical-judgment',
|
|
122
|
+
'other'
|
|
123
|
+
];
|
|
124
|
+
if (requiresApproval.includes(override.reason.category))
|
|
125
|
+
return true;
|
|
126
|
+
// Require approval if clinician is a trainee
|
|
127
|
+
if (['resident', 'fellow', 'np-trainee', 'pa-trainee'].some(r => override.clinicianRole.toLowerCase().includes(r))) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Approve an override
|
|
134
|
+
*/
|
|
135
|
+
async approveOverride(overrideId, supervisorId, supervisorName, approved, comments) {
|
|
136
|
+
for (const [patientId, overrides] of this.overrides) {
|
|
137
|
+
const override = overrides.find(o => o.id === overrideId);
|
|
138
|
+
if (override && override.supervisorApproval) {
|
|
139
|
+
override.supervisorApproval.supervisorId = supervisorId;
|
|
140
|
+
override.supervisorApproval.supervisorName = supervisorName;
|
|
141
|
+
override.supervisorApproval.approved = approved;
|
|
142
|
+
override.supervisorApproval.approvalTimestamp = new Date();
|
|
143
|
+
override.supervisorApproval.comments = comments;
|
|
144
|
+
override.auditStatus = approved ? 'reviewed' : 'flagged';
|
|
145
|
+
this.emit('override-reviewed', { overrideId, approved, supervisorName });
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
throw new Error('Override not found');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get overrides for a patient
|
|
153
|
+
*/
|
|
154
|
+
getPatientOverrides(patientId) {
|
|
155
|
+
return this.overrides.get(patientId) || [];
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get pending approvals for a supervisor
|
|
159
|
+
*/
|
|
160
|
+
getPendingApprovals() {
|
|
161
|
+
const pending = [];
|
|
162
|
+
for (const overrides of this.overrides.values()) {
|
|
163
|
+
for (const override of overrides) {
|
|
164
|
+
if (override.supervisorApproval?.required && !override.supervisorApproval.approved) {
|
|
165
|
+
pending.push(override);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return pending.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create a tumor board case
|
|
173
|
+
*/
|
|
174
|
+
async createTumorBoardCase(caseData) {
|
|
175
|
+
const id = `TB-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
176
|
+
const tumorBoardCase = {
|
|
177
|
+
...caseData,
|
|
178
|
+
id,
|
|
179
|
+
status: 'scheduled',
|
|
180
|
+
actions: []
|
|
181
|
+
};
|
|
182
|
+
// Attach active recommendation if available
|
|
183
|
+
const recommendations = this.getPatientRecommendations(caseData.patientId);
|
|
184
|
+
if (recommendations.length > 0 && recommendations[0].status === 'active') {
|
|
185
|
+
tumorBoardCase.systemRecommendation = recommendations[0];
|
|
186
|
+
}
|
|
187
|
+
this.tumorBoardCases.set(id, tumorBoardCase);
|
|
188
|
+
this.emit('tumor-board-case-created', { caseId: id, patientId: caseData.patientId });
|
|
189
|
+
return id;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Record tumor board decision
|
|
193
|
+
*/
|
|
194
|
+
async recordTumorBoardDecision(caseId, decision) {
|
|
195
|
+
const tbCase = this.tumorBoardCases.get(caseId);
|
|
196
|
+
if (!tbCase)
|
|
197
|
+
throw new Error('Tumor board case not found');
|
|
198
|
+
tbCase.boardDecision = decision;
|
|
199
|
+
tbCase.status = 'completed';
|
|
200
|
+
this.emit('tumor-board-decision-recorded', { caseId, decision });
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Acknowledge an alert
|
|
204
|
+
*/
|
|
205
|
+
async acknowledgeAlert(acknowledgment) {
|
|
206
|
+
const fullAcknowledgment = {
|
|
207
|
+
...acknowledgment,
|
|
208
|
+
acknowledgedAt: new Date()
|
|
209
|
+
};
|
|
210
|
+
this.alertAcknowledgments.push(fullAcknowledgment);
|
|
211
|
+
this.emit('alert-acknowledged', fullAcknowledgment);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generate explanation for a recommendation
|
|
215
|
+
*/
|
|
216
|
+
generateExplanation(recommendation) {
|
|
217
|
+
const summary = `Based on the patient's ${recommendation.biomarkerRationale.map(b => b.biomarker).join(', ')} status, ` +
|
|
218
|
+
`${recommendation.primaryRecommendation.regimen} is recommended with ` +
|
|
219
|
+
`${(recommendation.predictions.responseRate.value * 100).toFixed(0)}% expected response rate.`;
|
|
220
|
+
const detailedRationale = [];
|
|
221
|
+
// Add biomarker rationale
|
|
222
|
+
for (const br of recommendation.biomarkerRationale) {
|
|
223
|
+
detailedRationale.push(`${br.biomarker} ${br.status}: ${br.impact}`);
|
|
224
|
+
}
|
|
225
|
+
// Add evidence rationale
|
|
226
|
+
for (const ev of recommendation.supportingEvidence.filter(e => e.strength === 'strong')) {
|
|
227
|
+
detailedRationale.push(`${ev.source}: ${ev.description}`);
|
|
228
|
+
}
|
|
229
|
+
// Key factors
|
|
230
|
+
const keyFactors = recommendation.biomarkerRationale.map(br => ({
|
|
231
|
+
factor: `${br.biomarker} ${br.status}`,
|
|
232
|
+
impact: this.determineImpact(br.impact),
|
|
233
|
+
weight: this.determineWeight(br.evidenceLevel)
|
|
234
|
+
}));
|
|
235
|
+
// Uncertainties
|
|
236
|
+
const uncertainties = [];
|
|
237
|
+
if (recommendation.predictions.responseRate.ci95[1] - recommendation.predictions.responseRate.ci95[0] > 0.3) {
|
|
238
|
+
uncertainties.push('Response rate prediction has wide confidence interval');
|
|
239
|
+
}
|
|
240
|
+
if (recommendation.supportingEvidence.every(e => e.strength !== 'strong')) {
|
|
241
|
+
uncertainties.push('Limited strong evidence available for this combination');
|
|
242
|
+
}
|
|
243
|
+
// Alternative considerations
|
|
244
|
+
const alternativeConsiderations = recommendation.alternativeOptions.map(alt => `${alt.regimen}: ${alt.comparisonToPrimary}`);
|
|
245
|
+
return {
|
|
246
|
+
summary,
|
|
247
|
+
detailedRationale,
|
|
248
|
+
keyFactors,
|
|
249
|
+
uncertainties,
|
|
250
|
+
alternativeConsiderations
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Generate risk-benefit analysis
|
|
255
|
+
*/
|
|
256
|
+
generateRiskBenefitAnalysis(recommendation) {
|
|
257
|
+
const benefits = [
|
|
258
|
+
{
|
|
259
|
+
benefit: `${(recommendation.predictions.responseRate.value * 100).toFixed(0)}% objective response rate`,
|
|
260
|
+
magnitude: recommendation.predictions.responseRate.value > 0.5 ? 'high' :
|
|
261
|
+
recommendation.predictions.responseRate.value > 0.3 ? 'moderate' : 'low',
|
|
262
|
+
confidence: recommendation.primaryRecommendation.confidenceScore
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
benefit: `Median PFS ${recommendation.predictions.medianPFS.value.toFixed(1)} months`,
|
|
266
|
+
magnitude: recommendation.predictions.medianPFS.value > 12 ? 'high' :
|
|
267
|
+
recommendation.predictions.medianPFS.value > 6 ? 'moderate' : 'low',
|
|
268
|
+
confidence: recommendation.primaryRecommendation.confidenceScore
|
|
269
|
+
}
|
|
270
|
+
];
|
|
271
|
+
const risks = recommendation.predictions.grade3PlusToxicity.topRisks.map((risk, i) => ({
|
|
272
|
+
risk,
|
|
273
|
+
probability: recommendation.predictions.grade3PlusToxicity.value * (1 - i * 0.1),
|
|
274
|
+
severity: 'moderate',
|
|
275
|
+
manageable: true
|
|
276
|
+
}));
|
|
277
|
+
// Calculate NNT (simplified)
|
|
278
|
+
const baselineResponse = 0.2; // Assumed baseline
|
|
279
|
+
const treatmentResponse = recommendation.predictions.responseRate.value;
|
|
280
|
+
const absoluteBenefit = treatmentResponse - baselineResponse;
|
|
281
|
+
const numberNeededToTreat = absoluteBenefit > 0 ? Math.ceil(1 / absoluteBenefit) : undefined;
|
|
282
|
+
// Calculate NNH (simplified)
|
|
283
|
+
const toxicityRate = recommendation.predictions.grade3PlusToxicity.value;
|
|
284
|
+
const baselineToxicity = 0.1;
|
|
285
|
+
const absoluteHarm = toxicityRate - baselineToxicity;
|
|
286
|
+
const numberNeededToHarm = absoluteHarm > 0 ? Math.ceil(1 / absoluteHarm) : undefined;
|
|
287
|
+
const overallAssessment = this.generateOverallAssessment(benefits, risks, numberNeededToTreat, numberNeededToHarm);
|
|
288
|
+
return {
|
|
289
|
+
benefits,
|
|
290
|
+
risks,
|
|
291
|
+
overallAssessment,
|
|
292
|
+
numberNeededToTreat,
|
|
293
|
+
numberNeededToHarm
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
297
|
+
// HELPER METHODS
|
|
298
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
299
|
+
determinePrimaryRecommendation(params) {
|
|
300
|
+
// Simplified logic - would use ML service in production
|
|
301
|
+
let regimen = 'Standard therapy';
|
|
302
|
+
let drugs = [];
|
|
303
|
+
let confidenceScore = 0.75;
|
|
304
|
+
// Check for biomarker-matched therapy
|
|
305
|
+
const alterations = params.genomicAlterations || [];
|
|
306
|
+
// EGFR mutation
|
|
307
|
+
if (alterations.some((a) => a.gene === 'EGFR')) {
|
|
308
|
+
regimen = 'Osimertinib';
|
|
309
|
+
drugs = [{
|
|
310
|
+
name: 'Osimertinib',
|
|
311
|
+
dose: '80mg',
|
|
312
|
+
schedule: 'Daily',
|
|
313
|
+
route: 'Oral'
|
|
314
|
+
}];
|
|
315
|
+
confidenceScore = 0.92;
|
|
316
|
+
}
|
|
317
|
+
// ALK fusion
|
|
318
|
+
else if (alterations.some((a) => a.gene === 'ALK')) {
|
|
319
|
+
regimen = 'Alectinib';
|
|
320
|
+
drugs = [{
|
|
321
|
+
name: 'Alectinib',
|
|
322
|
+
dose: '600mg',
|
|
323
|
+
schedule: 'BID',
|
|
324
|
+
route: 'Oral'
|
|
325
|
+
}];
|
|
326
|
+
confidenceScore = 0.90;
|
|
327
|
+
}
|
|
328
|
+
// PD-L1 high
|
|
329
|
+
else if (params.biomarkers.some((b) => b.name.toLowerCase().includes('pd-l1') && parseFloat(b.value) >= 50)) {
|
|
330
|
+
regimen = 'Pembrolizumab';
|
|
331
|
+
drugs = [{
|
|
332
|
+
name: 'Pembrolizumab',
|
|
333
|
+
dose: '200mg',
|
|
334
|
+
schedule: 'Q3W',
|
|
335
|
+
route: 'IV'
|
|
336
|
+
}];
|
|
337
|
+
confidenceScore = 0.85;
|
|
338
|
+
}
|
|
339
|
+
// Default chemotherapy
|
|
340
|
+
else {
|
|
341
|
+
regimen = 'Carboplatin + Pemetrexed + Pembrolizumab';
|
|
342
|
+
drugs = [
|
|
343
|
+
{ name: 'Carboplatin', dose: 'AUC 5', schedule: 'Q3W', route: 'IV' },
|
|
344
|
+
{ name: 'Pemetrexed', dose: '500mg/m²', schedule: 'Q3W', route: 'IV' },
|
|
345
|
+
{ name: 'Pembrolizumab', dose: '200mg', schedule: 'Q3W', route: 'IV' }
|
|
346
|
+
];
|
|
347
|
+
confidenceScore = 0.78;
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
regimen,
|
|
351
|
+
drugs,
|
|
352
|
+
setting: params.priorTherapies?.length > 0 ? 'second-line' : 'first-line',
|
|
353
|
+
confidenceScore
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
determineAlternatives(params) {
|
|
357
|
+
// Generate 2-3 alternative options
|
|
358
|
+
return [
|
|
359
|
+
{
|
|
360
|
+
regimen: 'Clinical trial',
|
|
361
|
+
drugs: ['Investigational agent'],
|
|
362
|
+
confidenceScore: 0.7,
|
|
363
|
+
comparisonToPrimary: 'Access to novel therapies; additional monitoring required'
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
regimen: 'Alternative standard therapy',
|
|
367
|
+
drugs: ['Docetaxel'],
|
|
368
|
+
confidenceScore: 0.65,
|
|
369
|
+
comparisonToPrimary: 'Lower efficacy but familiar toxicity profile'
|
|
370
|
+
}
|
|
371
|
+
];
|
|
372
|
+
}
|
|
373
|
+
gatherEvidence(params) {
|
|
374
|
+
const evidence = [];
|
|
375
|
+
// Add guideline evidence
|
|
376
|
+
evidence.push({
|
|
377
|
+
type: 'guideline',
|
|
378
|
+
source: 'NCCN Guidelines',
|
|
379
|
+
description: `Recommended for ${params.cancerType} stage ${params.stage}`,
|
|
380
|
+
strength: 'strong',
|
|
381
|
+
url: 'https://www.nccn.org/guidelines'
|
|
382
|
+
});
|
|
383
|
+
// Add clinical trial evidence based on biomarkers
|
|
384
|
+
if (params.genomicAlterations?.some((a) => a.gene === 'EGFR')) {
|
|
385
|
+
evidence.push({
|
|
386
|
+
type: 'clinical-trial',
|
|
387
|
+
source: 'FLAURA trial',
|
|
388
|
+
description: 'Osimertinib improved median PFS vs 1st-gen TKI (18.9 vs 10.2 months)',
|
|
389
|
+
strength: 'strong'
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
if (params.biomarkers?.some((b) => b.name.toLowerCase().includes('pd-l1') && parseFloat(b.value) >= 50)) {
|
|
393
|
+
evidence.push({
|
|
394
|
+
type: 'clinical-trial',
|
|
395
|
+
source: 'KEYNOTE-024',
|
|
396
|
+
description: 'Pembrolizumab improved OS vs chemotherapy in PD-L1 ≥50%',
|
|
397
|
+
strength: 'strong'
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
return evidence;
|
|
401
|
+
}
|
|
402
|
+
generateBiomarkerRationale(biomarkers, alterations) {
|
|
403
|
+
const rationale = [];
|
|
404
|
+
for (const alt of alterations) {
|
|
405
|
+
rationale.push({
|
|
406
|
+
biomarker: alt.gene,
|
|
407
|
+
status: alt.alteration,
|
|
408
|
+
impact: this.getBiomarkerImpact(alt.gene, alt.alteration),
|
|
409
|
+
evidenceLevel: this.getBiomarkerEvidenceLevel(alt.gene)
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
for (const bm of biomarkers) {
|
|
413
|
+
if (!rationale.some(r => r.biomarker === bm.name)) {
|
|
414
|
+
rationale.push({
|
|
415
|
+
biomarker: bm.name,
|
|
416
|
+
status: String(bm.value),
|
|
417
|
+
impact: this.getBiomarkerImpact(bm.name, String(bm.value)),
|
|
418
|
+
evidenceLevel: this.getBiomarkerEvidenceLevel(bm.name)
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return rationale;
|
|
423
|
+
}
|
|
424
|
+
getBiomarkerImpact(biomarker, value) {
|
|
425
|
+
const impacts = {
|
|
426
|
+
'EGFR': 'Sensitive to EGFR TKI therapy',
|
|
427
|
+
'ALK': 'Sensitive to ALK TKI therapy',
|
|
428
|
+
'BRAF': 'Sensitive to BRAF/MEK inhibitor combination',
|
|
429
|
+
'KRAS G12C': 'Sensitive to KRAS G12C inhibitors',
|
|
430
|
+
'PD-L1': parseFloat(value) >= 50 ? 'High likelihood of response to immunotherapy' :
|
|
431
|
+
parseFloat(value) >= 1 ? 'May benefit from immunotherapy' :
|
|
432
|
+
'Consider immunotherapy combination',
|
|
433
|
+
'MSI-H': 'High likelihood of response to immunotherapy',
|
|
434
|
+
'TMB': 'May predict immunotherapy response'
|
|
435
|
+
};
|
|
436
|
+
return impacts[biomarker] || 'Prognostic significance';
|
|
437
|
+
}
|
|
438
|
+
getBiomarkerEvidenceLevel(biomarker) {
|
|
439
|
+
const fdaApproved = ['EGFR', 'ALK', 'ROS1', 'BRAF', 'NTRK', 'RET', 'MET', 'KRAS G12C', 'HER2'];
|
|
440
|
+
if (fdaApproved.includes(biomarker))
|
|
441
|
+
return 'FDA-approved';
|
|
442
|
+
const nccnRecommended = ['PD-L1', 'MSI-H', 'TMB'];
|
|
443
|
+
if (nccnRecommended.includes(biomarker))
|
|
444
|
+
return 'NCCN-recommended';
|
|
445
|
+
return 'Clinical evidence';
|
|
446
|
+
}
|
|
447
|
+
generatePredictions(params) {
|
|
448
|
+
// Simplified predictions - would use ML service in production
|
|
449
|
+
let responseRate = 0.4;
|
|
450
|
+
let pfs = 8;
|
|
451
|
+
let os = 18;
|
|
452
|
+
let toxicityRisk = 0.25;
|
|
453
|
+
// Adjust based on biomarkers
|
|
454
|
+
if (params.genomicAlterations?.some((a) => ['EGFR', 'ALK', 'ROS1'].includes(a.gene))) {
|
|
455
|
+
responseRate = 0.75;
|
|
456
|
+
pfs = 15;
|
|
457
|
+
os = 30;
|
|
458
|
+
toxicityRisk = 0.15;
|
|
459
|
+
}
|
|
460
|
+
// Adjust based on PD-L1
|
|
461
|
+
const pdl1 = params.biomarkers?.find((b) => b.name.toLowerCase().includes('pd-l1'));
|
|
462
|
+
if (pdl1 && parseFloat(pdl1.value) >= 50) {
|
|
463
|
+
responseRate = Math.max(responseRate, 0.45);
|
|
464
|
+
}
|
|
465
|
+
// Adjust based on performance status
|
|
466
|
+
if (params.performanceStatus && params.performanceStatus >= 2) {
|
|
467
|
+
responseRate *= 0.8;
|
|
468
|
+
pfs *= 0.7;
|
|
469
|
+
os *= 0.7;
|
|
470
|
+
toxicityRisk *= 1.3;
|
|
471
|
+
}
|
|
472
|
+
return {
|
|
473
|
+
responseRate: {
|
|
474
|
+
value: responseRate,
|
|
475
|
+
ci95: [responseRate * 0.8, Math.min(responseRate * 1.2, 0.95)]
|
|
476
|
+
},
|
|
477
|
+
medianPFS: {
|
|
478
|
+
value: pfs,
|
|
479
|
+
ci95: [pfs * 0.75, pfs * 1.3],
|
|
480
|
+
unit: 'months'
|
|
481
|
+
},
|
|
482
|
+
medianOS: {
|
|
483
|
+
value: os,
|
|
484
|
+
ci95: [os * 0.7, os * 1.4],
|
|
485
|
+
unit: 'months'
|
|
486
|
+
},
|
|
487
|
+
grade3PlusToxicity: {
|
|
488
|
+
value: toxicityRisk,
|
|
489
|
+
topRisks: ['Neutropenia', 'Fatigue', 'Nausea']
|
|
490
|
+
},
|
|
491
|
+
qualityOfLife: {
|
|
492
|
+
score: 0.75,
|
|
493
|
+
considerations: ['Oral therapy allows home administration', 'Weekly monitoring during first cycle']
|
|
494
|
+
}
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
identifyConsiderations(params) {
|
|
498
|
+
const considerations = [];
|
|
499
|
+
// Performance status
|
|
500
|
+
if (params.performanceStatus && params.performanceStatus >= 2) {
|
|
501
|
+
considerations.push({
|
|
502
|
+
category: 'safety',
|
|
503
|
+
consideration: 'Consider dose reduction due to performance status',
|
|
504
|
+
importance: 'critical'
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
// Prior therapy
|
|
508
|
+
if (params.priorTherapies && params.priorTherapies.length > 2) {
|
|
509
|
+
considerations.push({
|
|
510
|
+
category: 'efficacy',
|
|
511
|
+
consideration: 'Heavily pretreated patient - consider clinical trial',
|
|
512
|
+
importance: 'important'
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
// Comorbidities
|
|
516
|
+
if (params.comorbidities?.some((c) => c.toLowerCase().includes('renal'))) {
|
|
517
|
+
considerations.push({
|
|
518
|
+
category: 'safety',
|
|
519
|
+
consideration: 'Dose adjustment may be needed for renal impairment',
|
|
520
|
+
importance: 'critical'
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
return considerations;
|
|
524
|
+
}
|
|
525
|
+
generateMonitoringPlan(params) {
|
|
526
|
+
return [
|
|
527
|
+
{ item: 'CBC with differential', frequency: 'Before each cycle', rationale: 'Monitor for myelosuppression' },
|
|
528
|
+
{ item: 'Comprehensive metabolic panel', frequency: 'Before each cycle', rationale: 'Monitor liver/kidney function' },
|
|
529
|
+
{ item: 'Imaging (CT chest/abdomen)', frequency: 'Every 8-12 weeks', rationale: 'Response assessment (RECIST)' },
|
|
530
|
+
{ item: 'Clinical assessment', frequency: 'Each visit', rationale: 'Monitor for adverse events' }
|
|
531
|
+
];
|
|
532
|
+
}
|
|
533
|
+
determineImpact(impactText) {
|
|
534
|
+
if (impactText.toLowerCase().includes('sensitive') ||
|
|
535
|
+
impactText.toLowerCase().includes('response') ||
|
|
536
|
+
impactText.toLowerCase().includes('benefit')) {
|
|
537
|
+
return 'positive';
|
|
538
|
+
}
|
|
539
|
+
if (impactText.toLowerCase().includes('resistant') ||
|
|
540
|
+
impactText.toLowerCase().includes('poor')) {
|
|
541
|
+
return 'negative';
|
|
542
|
+
}
|
|
543
|
+
return 'neutral';
|
|
544
|
+
}
|
|
545
|
+
determineWeight(evidenceLevel) {
|
|
546
|
+
const weights = {
|
|
547
|
+
'FDA-approved': 1.0,
|
|
548
|
+
'NCCN-recommended': 0.9,
|
|
549
|
+
'Clinical evidence': 0.7,
|
|
550
|
+
'Preclinical': 0.3
|
|
551
|
+
};
|
|
552
|
+
return weights[evidenceLevel] || 0.5;
|
|
553
|
+
}
|
|
554
|
+
generateOverallAssessment(benefits, risks, nnt, nnh) {
|
|
555
|
+
const highBenefits = benefits.filter(b => b.magnitude === 'high').length;
|
|
556
|
+
const severeRisks = risks.filter(r => r.severity === 'severe' && r.probability > 0.1).length;
|
|
557
|
+
if (highBenefits >= 2 && severeRisks === 0) {
|
|
558
|
+
return 'Favorable risk-benefit profile. Treatment strongly recommended.';
|
|
559
|
+
}
|
|
560
|
+
if (highBenefits >= 1 && severeRisks <= 1) {
|
|
561
|
+
return 'Acceptable risk-benefit profile. Treatment recommended with appropriate monitoring.';
|
|
562
|
+
}
|
|
563
|
+
if (severeRisks >= 2) {
|
|
564
|
+
return 'Elevated risk profile. Consider alternatives or enhanced monitoring if proceeding.';
|
|
565
|
+
}
|
|
566
|
+
return 'Moderate risk-benefit profile. Individual patient factors should guide decision.';
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Export decision data for quality review
|
|
570
|
+
*/
|
|
571
|
+
exportDecisionData(startDate, endDate) {
|
|
572
|
+
const recommendations = Array.from(this.recommendations.values())
|
|
573
|
+
.filter(r => r.generatedAt >= startDate && r.generatedAt <= endDate);
|
|
574
|
+
const allOverrides = Array.from(this.overrides.values()).flat()
|
|
575
|
+
.filter(o => o.timestamp >= startDate && o.timestamp <= endDate);
|
|
576
|
+
const cases = Array.from(this.tumorBoardCases.values())
|
|
577
|
+
.filter(c => c.scheduledDate >= startDate && c.scheduledDate <= endDate);
|
|
578
|
+
// Calculate summary statistics
|
|
579
|
+
const accepted = recommendations.filter(r => r.status === 'accepted').length;
|
|
580
|
+
const overridden = recommendations.filter(r => r.status === 'modified' || r.status === 'rejected').length;
|
|
581
|
+
// Count override reasons
|
|
582
|
+
const reasonCounts = new Map();
|
|
583
|
+
for (const override of allOverrides) {
|
|
584
|
+
const count = reasonCounts.get(override.reason.category) || 0;
|
|
585
|
+
reasonCounts.set(override.reason.category, count + 1);
|
|
586
|
+
}
|
|
587
|
+
const commonOverrideReasons = Array.from(reasonCounts.entries())
|
|
588
|
+
.map(([reason, count]) => ({ reason, count }))
|
|
589
|
+
.sort((a, b) => b.count - a.count);
|
|
590
|
+
return {
|
|
591
|
+
recommendations,
|
|
592
|
+
overrides: allOverrides,
|
|
593
|
+
tumorBoardCases: cases,
|
|
594
|
+
summary: {
|
|
595
|
+
totalRecommendations: recommendations.length,
|
|
596
|
+
acceptanceRate: recommendations.length > 0 ? accepted / recommendations.length : 0,
|
|
597
|
+
overrideRate: recommendations.length > 0 ? overridden / recommendations.length : 0,
|
|
598
|
+
commonOverrideReasons
|
|
599
|
+
}
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
export default ClinicalDecisionSupportService;
|
|
604
|
+
//# sourceMappingURL=decisionSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisionSupport.js","sourceRoot":"","sources":["../../src/clinician/decisionSupport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clinician Decision Support Module Exports
|
|
3
|
+
*/
|
|
4
|
+
export { ClinicalDecisionSupport, RecommendationEngine, OverrideManager, TumorBoardManager, RiskBenefitAnalyzer, ExplanationGenerator, type ClinicalRecommendation, type OverrideRecord, type TumorBoardCase, type RiskBenefitAnalysis, type RecommendationExplanation, type DecisionSupportConfig } from './decisionSupport.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clinician/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clinician/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EAOrB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HIPAA Compliance Module Exports
|
|
3
|
+
*/
|
|
4
|
+
export { HIPAAComplianceService, AuditLogger, ConsentManager, EncryptionService, AccessControlManager, DataMaskingService, type AuditLogEntry, type PatientConsent, type ConsentScope, type AccessPolicy, type AccessDecision, type HIPAAConfig } from './hipaa.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|