fluxq-engine 1.0.0
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/README.md +35 -0
- package/dist/api/client.d.ts +82 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +75 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/controllers.d.ts +12 -0
- package/dist/api/controllers.d.ts.map +1 -0
- package/dist/api/controllers.js +569 -0
- package/dist/api/controllers.js.map +1 -0
- package/dist/api/middleware.d.ts +7 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +133 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/routes.d.ts +3 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +46 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/server.d.ts +4 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +72 -0
- package/dist/api/server.js.map +1 -0
- package/dist/core/classifiers/bloodPressure.d.ts +9 -0
- package/dist/core/classifiers/bloodPressure.d.ts.map +1 -0
- package/dist/core/classifiers/bloodPressure.js +178 -0
- package/dist/core/classifiers/bloodPressure.js.map +1 -0
- package/dist/core/classifiers/cholesterol.d.ts +9 -0
- package/dist/core/classifiers/cholesterol.d.ts.map +1 -0
- package/dist/core/classifiers/cholesterol.js +123 -0
- package/dist/core/classifiers/cholesterol.js.map +1 -0
- package/dist/core/classifiers/diabetes.d.ts +8 -0
- package/dist/core/classifiers/diabetes.d.ts.map +1 -0
- package/dist/core/classifiers/diabetes.js +154 -0
- package/dist/core/classifiers/diabetes.js.map +1 -0
- package/dist/core/classifiers/general.d.ts +8 -0
- package/dist/core/classifiers/general.d.ts.map +1 -0
- package/dist/core/classifiers/general.js +84 -0
- package/dist/core/classifiers/general.js.map +1 -0
- package/dist/core/classifiers/index.d.ts +5 -0
- package/dist/core/classifiers/index.d.ts.map +1 -0
- package/dist/core/classifiers/index.js +113 -0
- package/dist/core/classifiers/index.js.map +1 -0
- package/dist/core/classifiers/redFlags.d.ts +10 -0
- package/dist/core/classifiers/redFlags.d.ts.map +1 -0
- package/dist/core/classifiers/redFlags.js +59 -0
- package/dist/core/classifiers/redFlags.js.map +1 -0
- package/dist/core/clinicalMultiplier.d.ts +6 -0
- package/dist/core/clinicalMultiplier.d.ts.map +1 -0
- package/dist/core/clinicalMultiplier.js +199 -0
- package/dist/core/clinicalMultiplier.js.map +1 -0
- package/dist/core/demo.d.ts +3 -0
- package/dist/core/demo.d.ts.map +1 -0
- package/dist/core/demo.js +128 -0
- package/dist/core/demo.js.map +1 -0
- package/dist/core/fairnessEngine.d.ts +13 -0
- package/dist/core/fairnessEngine.d.ts.map +1 -0
- package/dist/core/fairnessEngine.js +156 -0
- package/dist/core/fairnessEngine.js.map +1 -0
- package/dist/core/metricsCalculator.d.ts +23 -0
- package/dist/core/metricsCalculator.d.ts.map +1 -0
- package/dist/core/metricsCalculator.js +159 -0
- package/dist/core/metricsCalculator.js.map +1 -0
- package/dist/core/predictor.d.ts +11 -0
- package/dist/core/predictor.d.ts.map +1 -0
- package/dist/core/predictor.js +45 -0
- package/dist/core/predictor.js.map +1 -0
- package/dist/core/priorityScorer.d.ts +17 -0
- package/dist/core/priorityScorer.d.ts.map +1 -0
- package/dist/core/priorityScorer.js +129 -0
- package/dist/core/priorityScorer.js.map +1 -0
- package/dist/core/queueConfig.d.ts +4 -0
- package/dist/core/queueConfig.d.ts.map +1 -0
- package/dist/core/queueConfig.js +114 -0
- package/dist/core/queueConfig.js.map +1 -0
- package/dist/core/queueOptimizer.d.ts +24 -0
- package/dist/core/queueOptimizer.d.ts.map +1 -0
- package/dist/core/queueOptimizer.js +269 -0
- package/dist/core/queueOptimizer.js.map +1 -0
- package/dist/core/simulator.d.ts +12 -0
- package/dist/core/simulator.d.ts.map +1 -0
- package/dist/core/simulator.js +181 -0
- package/dist/core/simulator.js.map +1 -0
- package/dist/core/types.d.ts +249 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +20 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cholesterol.js","sourceRoot":"","sources":["../../../src/core/classifiers/cholesterol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DiabetesSymptoms, ComfortLevel, OnsetType, SeverityLevel } from '../types';
|
|
2
|
+
export interface DiabetesClassification {
|
|
3
|
+
severity: SeverityLevel;
|
|
4
|
+
pattern: 'hypo' | 'hyper' | 'dka' | 'hhs' | 'mixed' | 'routine';
|
|
5
|
+
escalationReasons: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function classifyDiabetes(symptoms: DiabetesSymptoms, comfort: ComfortLevel, onset: OnsetType): DiabetesClassification;
|
|
8
|
+
//# sourceMappingURL=diabetes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diabetes.d.ts","sourceRoot":"","sources":["../../../src/core/classifiers/diabetes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;IAChE,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAKD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,GACf,sBAAsB,CA+IxB"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyDiabetes = classifyDiabetes;
|
|
4
|
+
function classifyDiabetes(symptoms, comfort, onset) {
|
|
5
|
+
const reasons = [];
|
|
6
|
+
const hypoSymptoms = [
|
|
7
|
+
symptoms.shaking, symptoms.suddenSweating, symptoms.heartPounding,
|
|
8
|
+
symptoms.suddenHunger, symptoms.paleSkin, symptoms.mentalFog,
|
|
9
|
+
symptoms.tinglingLips, symptoms.suddenAnxiety,
|
|
10
|
+
];
|
|
11
|
+
const hypoCount = hypoSymptoms.filter(Boolean).length;
|
|
12
|
+
const hyperSymptoms = [
|
|
13
|
+
symptoms.extremeThirst, symptoms.frequentUrination, symptoms.blurredVision,
|
|
14
|
+
symptoms.fruityBreath, symptoms.nausea, symptoms.deepFastBreathing,
|
|
15
|
+
symptoms.extremeTiredness, symptoms.stomachPain, symptoms.slowWoundHealing,
|
|
16
|
+
];
|
|
17
|
+
const hyperCount = hyperSymptoms.filter(Boolean).length;
|
|
18
|
+
let severity = 'low';
|
|
19
|
+
let pattern = 'routine';
|
|
20
|
+
if (hypoCount === 0 && hyperCount === 0) {
|
|
21
|
+
severity = 'low';
|
|
22
|
+
pattern = 'routine';
|
|
23
|
+
}
|
|
24
|
+
else if (hypoCount > hyperCount || (hypoCount >= 2 && hypoCount === hyperCount)) {
|
|
25
|
+
pattern = 'hypo';
|
|
26
|
+
if (hypoCount >= 3 && comfort >= 3) {
|
|
27
|
+
severity = 'high';
|
|
28
|
+
reasons.push('Severe hypoglycaemia — imminent LOC risk');
|
|
29
|
+
}
|
|
30
|
+
else if (hypoCount >= 2 && comfort >= 2) {
|
|
31
|
+
severity = 'high';
|
|
32
|
+
reasons.push('Significant hypo symptoms with distress');
|
|
33
|
+
}
|
|
34
|
+
else if (hypoCount >= 2 && comfort === 1) {
|
|
35
|
+
severity = 'standard';
|
|
36
|
+
}
|
|
37
|
+
else if (hypoCount === 1 && comfort >= 2) {
|
|
38
|
+
severity = 'standard';
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
severity = 'low';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (hyperCount > hypoCount || (hyperCount >= 2 && hyperCount === hypoCount)) {
|
|
45
|
+
if (symptoms.fruityBreath && (symptoms.nausea || symptoms.deepFastBreathing) && comfort >= 3) {
|
|
46
|
+
severity = 'high';
|
|
47
|
+
pattern = 'dka';
|
|
48
|
+
reasons.push('DKA pattern — fruity breath + nausea/deep breathing');
|
|
49
|
+
}
|
|
50
|
+
else if (hyperCount >= 4 && comfort >= 3) {
|
|
51
|
+
severity = 'high';
|
|
52
|
+
pattern = 'hhs';
|
|
53
|
+
reasons.push('HHS pattern — very high symptom load');
|
|
54
|
+
}
|
|
55
|
+
else if (hyperCount >= 3 && comfort >= 2) {
|
|
56
|
+
severity = 'high';
|
|
57
|
+
pattern = 'hyper';
|
|
58
|
+
reasons.push('Multiple hyper symptoms with significant discomfort');
|
|
59
|
+
}
|
|
60
|
+
else if (hyperCount >= 2 && comfort >= 1 && comfort <= 2) {
|
|
61
|
+
severity = 'standard';
|
|
62
|
+
pattern = 'hyper';
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
severity = 'low';
|
|
66
|
+
pattern = 'hyper';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (hypoCount > 0 && hyperCount > 0) {
|
|
70
|
+
severity = 'standard';
|
|
71
|
+
pattern = 'mixed';
|
|
72
|
+
reasons.push('Mixed hypo/hyper signals — caution');
|
|
73
|
+
}
|
|
74
|
+
if (severity === 'standard' && onset === 'acute') {
|
|
75
|
+
severity = 'high';
|
|
76
|
+
reasons.push('Acute onset escalation: standard → high');
|
|
77
|
+
}
|
|
78
|
+
else if (severity === 'low' && onset === 'acute') {
|
|
79
|
+
severity = 'standard';
|
|
80
|
+
reasons.push('Acute onset escalation: low → standard');
|
|
81
|
+
}
|
|
82
|
+
if (symptoms.missedInsulinDose && hypoCount >= 1) {
|
|
83
|
+
severity = escalate(severity);
|
|
84
|
+
reasons.push('Missed insulin dose + hypo symptoms → escalated');
|
|
85
|
+
}
|
|
86
|
+
if (symptoms.recentHypoEpisode && onset === 'today') {
|
|
87
|
+
if (severity === 'standard') {
|
|
88
|
+
severity = 'high';
|
|
89
|
+
reasons.push('Recent hypo episode + today onset → escalated to high');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (symptoms.isPregnant) {
|
|
93
|
+
if (severity === 'low')
|
|
94
|
+
severity = 'standard';
|
|
95
|
+
else if (severity === 'standard')
|
|
96
|
+
severity = 'high';
|
|
97
|
+
reasons.push('Pregnant — escalated one level (max high)');
|
|
98
|
+
}
|
|
99
|
+
if (symptoms.bloodGlucose !== undefined) {
|
|
100
|
+
const bg = symptoms.bloodGlucose;
|
|
101
|
+
if (bg < 54) {
|
|
102
|
+
severity = 'high';
|
|
103
|
+
reasons.push(`Glucose ${bg} mg/dL < 54 — severe hypo, immediate risk`);
|
|
104
|
+
}
|
|
105
|
+
else if (bg >= 54 && bg <= 70) {
|
|
106
|
+
if (severity !== 'high' && severity !== 'critical') {
|
|
107
|
+
severity = 'high';
|
|
108
|
+
reasons.push(`Glucose ${bg} mg/dL (54-70) — danger zone`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (bg >= 141 && bg <= 180) {
|
|
112
|
+
if (severity === 'low') {
|
|
113
|
+
severity = 'standard';
|
|
114
|
+
reasons.push(`Glucose ${bg} mg/dL (141-180) — mildly elevated`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (bg >= 181 && bg <= 300) {
|
|
118
|
+
if (severity === 'low')
|
|
119
|
+
severity = 'standard';
|
|
120
|
+
if (hyperCount > 0 && severity === 'standard')
|
|
121
|
+
severity = 'high';
|
|
122
|
+
reasons.push(`Glucose ${bg} mg/dL (181-300) — elevated`);
|
|
123
|
+
}
|
|
124
|
+
else if (bg > 300) {
|
|
125
|
+
severity = 'high';
|
|
126
|
+
reasons.push(`Glucose ${bg} mg/dL > 300 — DKA/HHS territory`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (symptoms.hba1c !== undefined) {
|
|
130
|
+
const a1c = symptoms.hba1c;
|
|
131
|
+
if (a1c < 7.0 && hypoCount === 0 && hyperCount === 0 && severity === 'standard') {
|
|
132
|
+
severity = 'low';
|
|
133
|
+
reasons.push(`HbA1c ${a1c}% < 7.0 — well controlled, downgraded`);
|
|
134
|
+
}
|
|
135
|
+
else if (a1c >= 9.0 && a1c <= 10.0 && severity === 'low') {
|
|
136
|
+
severity = 'standard';
|
|
137
|
+
reasons.push(`HbA1c ${a1c}% (9-10) — poor control`);
|
|
138
|
+
}
|
|
139
|
+
else if (a1c > 10.0) {
|
|
140
|
+
severity = escalate(severity);
|
|
141
|
+
reasons.push(`HbA1c ${a1c}% > 10 — chronic poor control, escalated`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { severity, pattern, escalationReasons: reasons };
|
|
145
|
+
}
|
|
146
|
+
function escalate(severity) {
|
|
147
|
+
switch (severity) {
|
|
148
|
+
case 'low': return 'standard';
|
|
149
|
+
case 'standard': return 'high';
|
|
150
|
+
case 'high': return 'high';
|
|
151
|
+
case 'critical': return 'critical';
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=diabetes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diabetes.js","sourceRoot":"","sources":["../../../src/core/classifiers/diabetes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GeneralSymptoms, ComfortLevel, OnsetType, SeverityLevel } from '../types';
|
|
2
|
+
export interface GeneralClassification {
|
|
3
|
+
severity: SeverityLevel;
|
|
4
|
+
points: number;
|
|
5
|
+
escalationReasons: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function classifyGeneral(symptoms: GeneralSymptoms, comfort: ComfortLevel, onset: OnsetType): GeneralClassification;
|
|
8
|
+
//# sourceMappingURL=general.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../../src/core/classifiers/general.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAKD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,GACf,qBAAqB,CAmFvB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classifyGeneral = classifyGeneral;
|
|
4
|
+
function classifyGeneral(symptoms, comfort, onset) {
|
|
5
|
+
const reasons = [];
|
|
6
|
+
if (symptoms.bladderBowelLoss) {
|
|
7
|
+
reasons.push('Loss of bladder/bowel control → cauda equina emergency');
|
|
8
|
+
return { severity: 'critical', points: 99, escalationReasons: reasons };
|
|
9
|
+
}
|
|
10
|
+
if (symptoms.rashWithSwelling) {
|
|
11
|
+
reasons.push('Rash + facial/throat swelling → anaphylaxis');
|
|
12
|
+
return { severity: 'critical', points: 99, escalationReasons: reasons };
|
|
13
|
+
}
|
|
14
|
+
if (symptoms.selfHarmThoughts) {
|
|
15
|
+
reasons.push('Self-harm thoughts → mental health emergency');
|
|
16
|
+
return { severity: 'critical', points: 99, escalationReasons: reasons };
|
|
17
|
+
}
|
|
18
|
+
if (symptoms.confusedNotSelf && comfort >= 3) {
|
|
19
|
+
reasons.push('Confused/not self + comfort ≥ 3 → altered mental status');
|
|
20
|
+
return { severity: 'critical', points: 99, escalationReasons: reasons };
|
|
21
|
+
}
|
|
22
|
+
let points = 0;
|
|
23
|
+
points += comfort;
|
|
24
|
+
points += symptoms.impactLevel;
|
|
25
|
+
if (symptoms.highFever)
|
|
26
|
+
points += 2;
|
|
27
|
+
if (symptoms.worseningRapidly)
|
|
28
|
+
points += 2;
|
|
29
|
+
if (symptoms.vomitingOver5Times)
|
|
30
|
+
points += 2;
|
|
31
|
+
if (symptoms.nothingStaysDown)
|
|
32
|
+
points += 2;
|
|
33
|
+
if (symptoms.worstPainEver)
|
|
34
|
+
points += 2;
|
|
35
|
+
if (symptoms.gotSeriousBefore)
|
|
36
|
+
points += 1;
|
|
37
|
+
if (onset === 'acute')
|
|
38
|
+
points += 1;
|
|
39
|
+
if (symptoms.isOver65)
|
|
40
|
+
points += 1;
|
|
41
|
+
if (symptoms.immunocompromised)
|
|
42
|
+
points += 2;
|
|
43
|
+
if (symptoms.isPregnant)
|
|
44
|
+
points += 1;
|
|
45
|
+
if (symptoms.confusedNotSelf)
|
|
46
|
+
points += 2;
|
|
47
|
+
const complaintPoints = {
|
|
48
|
+
fever: 2,
|
|
49
|
+
cough: 1,
|
|
50
|
+
stomach: 1,
|
|
51
|
+
pain: 2,
|
|
52
|
+
skin: 1,
|
|
53
|
+
mentalHealth: 1,
|
|
54
|
+
urinary: 1,
|
|
55
|
+
eyeEarDental: 1,
|
|
56
|
+
prescription: 0,
|
|
57
|
+
other: 1,
|
|
58
|
+
};
|
|
59
|
+
points += complaintPoints[symptoms.primaryComplaint] || 0;
|
|
60
|
+
let severity;
|
|
61
|
+
if (points >= 10) {
|
|
62
|
+
severity = 'high';
|
|
63
|
+
}
|
|
64
|
+
else if (points >= 6) {
|
|
65
|
+
severity = 'standard';
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
severity = 'low';
|
|
69
|
+
}
|
|
70
|
+
if (symptoms.primaryComplaint === 'mentalHealth' && comfort >= 3 && severity === 'low') {
|
|
71
|
+
severity = 'standard';
|
|
72
|
+
reasons.push('Mental health + comfort ≥ 3 → minimum standard');
|
|
73
|
+
}
|
|
74
|
+
if ((symptoms.isOver65 || symptoms.immunocompromised) && severity === 'low') {
|
|
75
|
+
severity = 'standard';
|
|
76
|
+
reasons.push('Elderly/immunocompromised + low → escalated to standard');
|
|
77
|
+
}
|
|
78
|
+
if (symptoms.highFever && symptoms.isOver65 && severity === 'low') {
|
|
79
|
+
severity = 'standard';
|
|
80
|
+
reasons.push('Fever + elderly → at least standard');
|
|
81
|
+
}
|
|
82
|
+
return { severity, points, escalationReasons: reasons };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=general.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../../src/core/classifiers/general.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IntakeForm, ClassificationResult } from '../types';
|
|
2
|
+
import { checkRedFlags, severityToUrgency, baseSeverityScore } from './redFlags';
|
|
3
|
+
export declare function classifyPatient(intake: IntakeForm, age?: number): ClassificationResult;
|
|
4
|
+
export { checkRedFlags, severityToUrgency, baseSeverityScore };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/classifiers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,EACV,oBAAoB,EAGrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAuBjF,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAkFtF;AAmCD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.baseSeverityScore = exports.severityToUrgency = exports.checkRedFlags = void 0;
|
|
4
|
+
exports.classifyPatient = classifyPatient;
|
|
5
|
+
const redFlags_1 = require("./redFlags");
|
|
6
|
+
Object.defineProperty(exports, "checkRedFlags", { enumerable: true, get: function () { return redFlags_1.checkRedFlags; } });
|
|
7
|
+
Object.defineProperty(exports, "severityToUrgency", { enumerable: true, get: function () { return redFlags_1.severityToUrgency; } });
|
|
8
|
+
Object.defineProperty(exports, "baseSeverityScore", { enumerable: true, get: function () { return redFlags_1.baseSeverityScore; } });
|
|
9
|
+
const diabetes_1 = require("./diabetes");
|
|
10
|
+
const cholesterol_1 = require("./cholesterol");
|
|
11
|
+
const bloodPressure_1 = require("./bloodPressure");
|
|
12
|
+
const general_1 = require("./general");
|
|
13
|
+
const clinicalMultiplier_1 = require("../clinicalMultiplier");
|
|
14
|
+
const queueConfig_1 = require("../queueConfig");
|
|
15
|
+
function classifyPatient(intake, age) {
|
|
16
|
+
const { queueType, comfort, onset, emergencySignals } = intake;
|
|
17
|
+
const redFlag = (0, redFlags_1.checkRedFlags)(emergencySignals, comfort);
|
|
18
|
+
if (redFlag.triggered && redFlag.level === 'critical') {
|
|
19
|
+
return buildCrisisResult(queueType, redFlag.reasons);
|
|
20
|
+
}
|
|
21
|
+
let severity;
|
|
22
|
+
let symptomPattern = 'unknown';
|
|
23
|
+
let escalationReasons = [];
|
|
24
|
+
switch (queueType) {
|
|
25
|
+
case 'diabetes': {
|
|
26
|
+
if (!intake.diabetesSymptoms)
|
|
27
|
+
throw new Error('Diabetes symptoms required for diabetes queue');
|
|
28
|
+
const result = (0, diabetes_1.classifyDiabetes)(intake.diabetesSymptoms, comfort, onset);
|
|
29
|
+
severity = result.severity;
|
|
30
|
+
symptomPattern = result.pattern;
|
|
31
|
+
escalationReasons = result.escalationReasons;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case 'cholesterol': {
|
|
35
|
+
if (!intake.cholesterolSymptoms)
|
|
36
|
+
throw new Error('Cholesterol symptoms required for cholesterol queue');
|
|
37
|
+
const result = (0, cholesterol_1.classifyCholesterol)(intake.cholesterolSymptoms, comfort, onset);
|
|
38
|
+
severity = result.severity;
|
|
39
|
+
symptomPattern = result.pattern;
|
|
40
|
+
escalationReasons = result.escalationReasons;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case 'bloodPressure': {
|
|
44
|
+
if (!intake.bloodPressureSymptoms)
|
|
45
|
+
throw new Error('BP symptoms required for blood pressure queue');
|
|
46
|
+
const result = (0, bloodPressure_1.classifyBloodPressure)(intake.bloodPressureSymptoms, comfort, onset, emergencySignals);
|
|
47
|
+
severity = result.severity;
|
|
48
|
+
symptomPattern = result.pattern;
|
|
49
|
+
escalationReasons = result.escalationReasons;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case 'general': {
|
|
53
|
+
if (!intake.generalSymptoms)
|
|
54
|
+
throw new Error('General symptoms required for general queue');
|
|
55
|
+
const result = (0, general_1.classifyGeneral)(intake.generalSymptoms, comfort, onset);
|
|
56
|
+
severity = result.severity;
|
|
57
|
+
symptomPattern = `points:${result.points}`;
|
|
58
|
+
escalationReasons = result.escalationReasons;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (redFlag.triggered && redFlag.level === 'high') {
|
|
63
|
+
if (severity === 'low' || severity === 'standard') {
|
|
64
|
+
severity = 'high';
|
|
65
|
+
escalationReasons.push(...redFlag.reasons);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (severity === 'critical') {
|
|
69
|
+
return buildCrisisResult(queueType, escalationReasons);
|
|
70
|
+
}
|
|
71
|
+
const multiplier = computeMultiplier(queueType, intake, symptomPattern, severity, age);
|
|
72
|
+
const base = (0, redFlags_1.baseSeverityScore)(severity);
|
|
73
|
+
const clinicalScore = base * multiplier;
|
|
74
|
+
const threshold = (0, queueConfig_1.getStarvationThreshold)(queueType, severity, symptomPattern);
|
|
75
|
+
const duration = (0, queueConfig_1.getDurationPrediction)(queueType, severity, symptomPattern);
|
|
76
|
+
return {
|
|
77
|
+
severity,
|
|
78
|
+
clinicalMultiplier: multiplier,
|
|
79
|
+
symptomPattern,
|
|
80
|
+
baseSeverityScore: base,
|
|
81
|
+
finalScore: clinicalScore,
|
|
82
|
+
starvationThreshold: threshold,
|
|
83
|
+
estimatedDuration: duration,
|
|
84
|
+
escalationReasons,
|
|
85
|
+
queueType,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function buildCrisisResult(queueType, reasons) {
|
|
89
|
+
return {
|
|
90
|
+
severity: 'critical',
|
|
91
|
+
clinicalMultiplier: 1,
|
|
92
|
+
symptomPattern: 'crisis',
|
|
93
|
+
baseSeverityScore: 9999,
|
|
94
|
+
finalScore: 9999,
|
|
95
|
+
starvationThreshold: 0,
|
|
96
|
+
estimatedDuration: 30,
|
|
97
|
+
escalationReasons: reasons,
|
|
98
|
+
queueType,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function computeMultiplier(queueType, intake, pattern, severity, age) {
|
|
102
|
+
switch (queueType) {
|
|
103
|
+
case 'diabetes':
|
|
104
|
+
return (0, clinicalMultiplier_1.computeDiabetesMultiplier)(intake.diabetesSymptoms, intake.onset, severity, age);
|
|
105
|
+
case 'cholesterol':
|
|
106
|
+
return (0, clinicalMultiplier_1.computeCholesterolMultiplier)(intake.cholesterolSymptoms, pattern);
|
|
107
|
+
case 'bloodPressure':
|
|
108
|
+
return (0, clinicalMultiplier_1.computeBPMultiplier)(intake.bloodPressureSymptoms, pattern, age);
|
|
109
|
+
case 'general':
|
|
110
|
+
return (0, clinicalMultiplier_1.computeGeneralMultiplier)(intake.generalSymptoms, pattern, intake.onset);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/classifiers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EmergencySignals, ComfortLevel, SeverityLevel } from '../types';
|
|
2
|
+
export interface RedFlagResult {
|
|
3
|
+
triggered: boolean;
|
|
4
|
+
level: 'critical' | 'high' | 'none';
|
|
5
|
+
reasons: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function checkRedFlags(signals: EmergencySignals, comfort: ComfortLevel): RedFlagResult;
|
|
8
|
+
export declare function severityToUrgency(severity: SeverityLevel): 'CRITICAL' | 'HIGH' | 'STANDARD' | 'LOW';
|
|
9
|
+
export declare function baseSeverityScore(severity: SeverityLevel): number;
|
|
10
|
+
//# sourceMappingURL=redFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redFlags.d.ts","sourceRoot":"","sources":["../../../src/core/classifiers/redFlags.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,YAAY,GACpB,aAAa,CA+Cf;AAKD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAOnG;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAOjE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkRedFlags = checkRedFlags;
|
|
4
|
+
exports.severityToUrgency = severityToUrgency;
|
|
5
|
+
exports.baseSeverityScore = baseSeverityScore;
|
|
6
|
+
function checkRedFlags(signals, comfort) {
|
|
7
|
+
const reasons = [];
|
|
8
|
+
if (signals.chestPain && signals.breathingDifficulty) {
|
|
9
|
+
reasons.push('Chest pain + breathing difficulty → possible MI');
|
|
10
|
+
return { triggered: true, level: 'critical', reasons };
|
|
11
|
+
}
|
|
12
|
+
if (signals.severeHeadache && (signals.confusion || signals.visionLoss || signals.limbWeakness)) {
|
|
13
|
+
reasons.push('Severe headache + neurological signs → possible stroke');
|
|
14
|
+
return { triggered: true, level: 'critical', reasons };
|
|
15
|
+
}
|
|
16
|
+
if (signals.confusion && comfort >= 3) {
|
|
17
|
+
reasons.push('Confusion + comfort ≥ 3 → altered mental status');
|
|
18
|
+
return { triggered: true, level: 'critical', reasons };
|
|
19
|
+
}
|
|
20
|
+
if (signals.visionLoss) {
|
|
21
|
+
reasons.push('Sudden vision loss → possible stroke/retinal emergency');
|
|
22
|
+
return { triggered: true, level: 'critical', reasons };
|
|
23
|
+
}
|
|
24
|
+
if (signals.limbWeakness) {
|
|
25
|
+
reasons.push('One-sided limb/face weakness → possible stroke');
|
|
26
|
+
return { triggered: true, level: 'critical', reasons };
|
|
27
|
+
}
|
|
28
|
+
const highReasons = [];
|
|
29
|
+
if (signals.fainting) {
|
|
30
|
+
highReasons.push('Fainting → vasovagal/cardiac syncope risk');
|
|
31
|
+
}
|
|
32
|
+
if (signals.chestPain) {
|
|
33
|
+
highReasons.push('Chest pain → cardiac evaluation needed');
|
|
34
|
+
}
|
|
35
|
+
if (signals.breathingDifficulty) {
|
|
36
|
+
highReasons.push('Breathing difficulty at rest → respiratory compromise');
|
|
37
|
+
}
|
|
38
|
+
if (highReasons.length > 0) {
|
|
39
|
+
return { triggered: true, level: 'high', reasons: highReasons };
|
|
40
|
+
}
|
|
41
|
+
return { triggered: false, level: 'none', reasons: [] };
|
|
42
|
+
}
|
|
43
|
+
function severityToUrgency(severity) {
|
|
44
|
+
switch (severity) {
|
|
45
|
+
case 'critical': return 'CRITICAL';
|
|
46
|
+
case 'high': return 'HIGH';
|
|
47
|
+
case 'standard': return 'STANDARD';
|
|
48
|
+
case 'low': return 'LOW';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function baseSeverityScore(severity) {
|
|
52
|
+
switch (severity) {
|
|
53
|
+
case 'critical': return 9999;
|
|
54
|
+
case 'high': return 150;
|
|
55
|
+
case 'standard': return 75;
|
|
56
|
+
case 'low': return 25;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=redFlags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redFlags.js","sourceRoot":"","sources":["../../../src/core/classifiers/redFlags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DiabetesSymptoms, CholesterolSymptoms, BloodPressureSymptoms, GeneralSymptoms, OnsetType } from './types';
|
|
2
|
+
export declare function computeDiabetesMultiplier(symptoms: DiabetesSymptoms, onset: OnsetType, severity: string, age?: number): number;
|
|
3
|
+
export declare function computeCholesterolMultiplier(symptoms: CholesterolSymptoms, pattern: string): number;
|
|
4
|
+
export declare function computeBPMultiplier(symptoms: BloodPressureSymptoms, pattern: string, age?: number): number;
|
|
5
|
+
export declare function computeGeneralMultiplier(symptoms: GeneralSymptoms, pattern: string, onset: OnsetType): number;
|
|
6
|
+
//# sourceMappingURL=clinicalMultiplier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clinicalMultiplier.d.ts","sourceRoot":"","sources":["../../src/core/clinicalMultiplier.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACV,MAAM,SAAS,CAAC;AAMjB,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAyCR;AAMD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAkCR;AAMD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAwBR;AAcD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,GACf,MAAM,CA6BR"}
|