@erosolaraijs/cure 1.0.1 → 1.0.3

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.
Files changed (87) hide show
  1. package/dist/bin/cure.d.ts +2 -5
  2. package/dist/bin/cure.d.ts.map +1 -1
  3. package/dist/bin/cure.js +360 -129
  4. package/dist/bin/cure.js.map +1 -1
  5. package/dist/clinician/decisionSupport.d.ts +325 -0
  6. package/dist/clinician/decisionSupport.d.ts.map +1 -0
  7. package/dist/clinician/decisionSupport.js +604 -0
  8. package/dist/clinician/decisionSupport.js.map +1 -0
  9. package/dist/clinician/index.d.ts +5 -0
  10. package/dist/clinician/index.d.ts.map +1 -0
  11. package/dist/clinician/index.js +5 -0
  12. package/dist/clinician/index.js.map +1 -0
  13. package/dist/compliance/index.d.ts +5 -0
  14. package/dist/compliance/index.d.ts.map +1 -0
  15. package/dist/compliance/index.js +5 -0
  16. package/dist/compliance/index.js.map +1 -0
  17. package/dist/index.d.ts +65 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +102 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/integrations/clinicalTrials/index.d.ts +5 -0
  22. package/dist/integrations/clinicalTrials/index.d.ts.map +1 -0
  23. package/dist/integrations/clinicalTrials/index.js +5 -0
  24. package/dist/integrations/clinicalTrials/index.js.map +1 -0
  25. package/dist/integrations/ehr/index.d.ts +5 -0
  26. package/dist/integrations/ehr/index.d.ts.map +1 -0
  27. package/dist/integrations/ehr/index.js +5 -0
  28. package/dist/integrations/ehr/index.js.map +1 -0
  29. package/dist/integrations/genomics/index.d.ts +5 -0
  30. package/dist/integrations/genomics/index.d.ts.map +1 -0
  31. package/dist/integrations/genomics/index.js +5 -0
  32. package/dist/integrations/genomics/index.js.map +1 -0
  33. package/dist/ml/index.d.ts +5 -0
  34. package/dist/ml/index.d.ts.map +1 -0
  35. package/dist/ml/index.js +5 -0
  36. package/dist/ml/index.js.map +1 -0
  37. package/dist/ml/outcomePredictor.d.ts +297 -0
  38. package/dist/ml/outcomePredictor.d.ts.map +1 -0
  39. package/dist/ml/outcomePredictor.js +823 -0
  40. package/dist/ml/outcomePredictor.js.map +1 -0
  41. package/dist/orchestrator/index.d.ts +5 -0
  42. package/dist/orchestrator/index.d.ts.map +1 -0
  43. package/dist/orchestrator/index.js +5 -0
  44. package/dist/orchestrator/index.js.map +1 -0
  45. package/dist/orchestrator/realWorldOncology.d.ts +351 -0
  46. package/dist/orchestrator/realWorldOncology.d.ts.map +1 -0
  47. package/dist/orchestrator/realWorldOncology.js +425 -0
  48. package/dist/orchestrator/realWorldOncology.js.map +1 -0
  49. package/dist/patient/index.d.ts +5 -0
  50. package/dist/patient/index.d.ts.map +1 -0
  51. package/dist/patient/index.js +5 -0
  52. package/dist/patient/index.js.map +1 -0
  53. package/dist/patient/patientPortal.d.ts +337 -0
  54. package/dist/patient/patientPortal.d.ts.map +1 -0
  55. package/dist/patient/patientPortal.js +667 -0
  56. package/dist/patient/patientPortal.js.map +1 -0
  57. package/dist/safety/drugInteractions.d.ts +230 -0
  58. package/dist/safety/drugInteractions.d.ts.map +1 -0
  59. package/dist/safety/drugInteractions.js +697 -0
  60. package/dist/safety/drugInteractions.js.map +1 -0
  61. package/dist/safety/index.d.ts +5 -0
  62. package/dist/safety/index.d.ts.map +1 -0
  63. package/dist/safety/index.js +5 -0
  64. package/dist/safety/index.js.map +1 -0
  65. package/dist/validation/index.d.ts +5 -0
  66. package/dist/validation/index.d.ts.map +1 -0
  67. package/dist/validation/index.js +5 -0
  68. package/dist/validation/index.js.map +1 -0
  69. package/dist/validation/retrospectiveValidator.d.ts +246 -0
  70. package/dist/validation/retrospectiveValidator.d.ts.map +1 -0
  71. package/dist/validation/retrospectiveValidator.js +602 -0
  72. package/dist/validation/retrospectiveValidator.js.map +1 -0
  73. package/package.json +1 -1
  74. package/src/bin/cure.ts +412 -143
  75. package/src/clinician/decisionSupport.ts +949 -0
  76. package/src/clinician/index.ts +11 -0
  77. package/src/compliance/index.ts +19 -0
  78. package/src/integrations/clinicalTrials/index.ts +21 -0
  79. package/src/integrations/ehr/index.ts +32 -0
  80. package/src/integrations/genomics/index.ts +23 -0
  81. package/src/ml/index.ts +15 -0
  82. package/src/orchestrator/index.ts +11 -0
  83. package/src/orchestrator/realWorldOncology.ts +803 -0
  84. package/src/patient/index.ts +14 -0
  85. package/src/patient/patientPortal.ts +1039 -0
  86. package/src/safety/index.ts +14 -0
  87. package/src/validation/index.ts +10 -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 { ClinicalDecisionSupportService, type ClinicalRecommendation, type ClinicianOverride, type OverrideCategory, type TumorBoardCase, type AlertAcknowledgment } 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,8BAA8B,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Clinician Decision Support Module Exports
3
+ */
4
+ export { ClinicalDecisionSupportService } from './decisionSupport.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clinician/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,8BAA8B,EAM/B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * HIPAA Compliance Module Exports
3
+ */
4
+ export { HIPAAComplianceService, type AuditLogEntry, type AuditEventType, type AuditAction, type PatientConsent, type ConsentType, type DataCategory, type ConsentPurpose, type AccessPolicy, type AccessCondition, type AccessDecision, type EncryptionConfig, type EncryptedData, type DataMaskingConfig } from './hipaa.js';
5
+ //# sourceMappingURL=index.d.ts.map