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.
Files changed (90) hide show
  1. package/README.md +35 -0
  2. package/dist/api/client.d.ts +82 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +75 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/controllers.d.ts +12 -0
  7. package/dist/api/controllers.d.ts.map +1 -0
  8. package/dist/api/controllers.js +569 -0
  9. package/dist/api/controllers.js.map +1 -0
  10. package/dist/api/middleware.d.ts +7 -0
  11. package/dist/api/middleware.d.ts.map +1 -0
  12. package/dist/api/middleware.js +133 -0
  13. package/dist/api/middleware.js.map +1 -0
  14. package/dist/api/routes.d.ts +3 -0
  15. package/dist/api/routes.d.ts.map +1 -0
  16. package/dist/api/routes.js +46 -0
  17. package/dist/api/routes.js.map +1 -0
  18. package/dist/api/server.d.ts +4 -0
  19. package/dist/api/server.d.ts.map +1 -0
  20. package/dist/api/server.js +72 -0
  21. package/dist/api/server.js.map +1 -0
  22. package/dist/core/classifiers/bloodPressure.d.ts +9 -0
  23. package/dist/core/classifiers/bloodPressure.d.ts.map +1 -0
  24. package/dist/core/classifiers/bloodPressure.js +178 -0
  25. package/dist/core/classifiers/bloodPressure.js.map +1 -0
  26. package/dist/core/classifiers/cholesterol.d.ts +9 -0
  27. package/dist/core/classifiers/cholesterol.d.ts.map +1 -0
  28. package/dist/core/classifiers/cholesterol.js +123 -0
  29. package/dist/core/classifiers/cholesterol.js.map +1 -0
  30. package/dist/core/classifiers/diabetes.d.ts +8 -0
  31. package/dist/core/classifiers/diabetes.d.ts.map +1 -0
  32. package/dist/core/classifiers/diabetes.js +154 -0
  33. package/dist/core/classifiers/diabetes.js.map +1 -0
  34. package/dist/core/classifiers/general.d.ts +8 -0
  35. package/dist/core/classifiers/general.d.ts.map +1 -0
  36. package/dist/core/classifiers/general.js +84 -0
  37. package/dist/core/classifiers/general.js.map +1 -0
  38. package/dist/core/classifiers/index.d.ts +5 -0
  39. package/dist/core/classifiers/index.d.ts.map +1 -0
  40. package/dist/core/classifiers/index.js +113 -0
  41. package/dist/core/classifiers/index.js.map +1 -0
  42. package/dist/core/classifiers/redFlags.d.ts +10 -0
  43. package/dist/core/classifiers/redFlags.d.ts.map +1 -0
  44. package/dist/core/classifiers/redFlags.js +59 -0
  45. package/dist/core/classifiers/redFlags.js.map +1 -0
  46. package/dist/core/clinicalMultiplier.d.ts +6 -0
  47. package/dist/core/clinicalMultiplier.d.ts.map +1 -0
  48. package/dist/core/clinicalMultiplier.js +199 -0
  49. package/dist/core/clinicalMultiplier.js.map +1 -0
  50. package/dist/core/demo.d.ts +3 -0
  51. package/dist/core/demo.d.ts.map +1 -0
  52. package/dist/core/demo.js +128 -0
  53. package/dist/core/demo.js.map +1 -0
  54. package/dist/core/fairnessEngine.d.ts +13 -0
  55. package/dist/core/fairnessEngine.d.ts.map +1 -0
  56. package/dist/core/fairnessEngine.js +156 -0
  57. package/dist/core/fairnessEngine.js.map +1 -0
  58. package/dist/core/metricsCalculator.d.ts +23 -0
  59. package/dist/core/metricsCalculator.d.ts.map +1 -0
  60. package/dist/core/metricsCalculator.js +159 -0
  61. package/dist/core/metricsCalculator.js.map +1 -0
  62. package/dist/core/predictor.d.ts +11 -0
  63. package/dist/core/predictor.d.ts.map +1 -0
  64. package/dist/core/predictor.js +45 -0
  65. package/dist/core/predictor.js.map +1 -0
  66. package/dist/core/priorityScorer.d.ts +17 -0
  67. package/dist/core/priorityScorer.d.ts.map +1 -0
  68. package/dist/core/priorityScorer.js +129 -0
  69. package/dist/core/priorityScorer.js.map +1 -0
  70. package/dist/core/queueConfig.d.ts +4 -0
  71. package/dist/core/queueConfig.d.ts.map +1 -0
  72. package/dist/core/queueConfig.js +114 -0
  73. package/dist/core/queueConfig.js.map +1 -0
  74. package/dist/core/queueOptimizer.d.ts +24 -0
  75. package/dist/core/queueOptimizer.d.ts.map +1 -0
  76. package/dist/core/queueOptimizer.js +269 -0
  77. package/dist/core/queueOptimizer.js.map +1 -0
  78. package/dist/core/simulator.d.ts +12 -0
  79. package/dist/core/simulator.d.ts.map +1 -0
  80. package/dist/core/simulator.js +181 -0
  81. package/dist/core/simulator.js.map +1 -0
  82. package/dist/core/types.d.ts +249 -0
  83. package/dist/core/types.d.ts.map +1 -0
  84. package/dist/core/types.js +20 -0
  85. package/dist/core/types.js.map +1 -0
  86. package/dist/index.d.ts +17 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +42 -0
  89. package/dist/index.js.map +1 -0
  90. package/package.json +51 -0
@@ -0,0 +1,569 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.intakeQuestionsController = exports.enqueueIntakeController = exports.classifyIntakeController = exports.docsController = exports.configController = exports.getConfigController = exports.metricsController = exports.compareQueuesController = exports.simulateQueueController = exports.optimizeQueueController = void 0;
4
+ const index_1 = require("../index");
5
+ const index_2 = require("../core/classifiers/index");
6
+ const DEFAULT_DOCTORS = [
7
+ { id: 'D001', name: 'Dr. Ananya Shah', specialty: 'General Medicine', isAvailable: true, currentWorkload: 0, maxDailyPatients: 20, patientsServed: 0 },
8
+ { id: 'D002', name: 'Dr. Rohan Iyer', specialty: 'Cardiology', isAvailable: true, currentWorkload: 0, maxDailyPatients: 20, patientsServed: 0 },
9
+ { id: 'D003', name: 'Dr. Priya Mehta', specialty: 'Neurology', isAvailable: true, currentWorkload: 0, maxDailyPatients: 20, patientsServed: 0 },
10
+ ];
11
+ const hydratePatientsFromRequest = (raw) => raw.map((p) => ({
12
+ ...p,
13
+ arrivalTime: p.arrivalTime instanceof Date ? p.arrivalTime : new Date(p.arrivalTime),
14
+ }));
15
+ const serializeQueueOrder = (order) => ({
16
+ position: order.position,
17
+ patientId: order.patient.id,
18
+ urgency: order.patient.urgency,
19
+ arrivalTime: order.patient.arrivalTime.toISOString(),
20
+ estimatedDuration: order.patient.estimatedDuration ?? null,
21
+ estimatedWaitTime: Math.round(order.estimatedWaitTime * 100) / 100,
22
+ estimatedStartTime: order.estimatedStartTime.toISOString(),
23
+ estimatedEndTime: order.estimatedEndTime.toISOString(),
24
+ priorityScore: order.priorityScore ?? null,
25
+ assignedDoctor: order.assignedDoctor?.name ?? null,
26
+ queueType: order.patient.queueType ?? null,
27
+ patient: {
28
+ id: order.patient.id,
29
+ age: order.patient.age,
30
+ gender: order.patient.gender,
31
+ chiefComplaint: order.patient.chiefComplaint,
32
+ urgency: order.patient.urgency,
33
+ arrivalTime: order.patient.arrivalTime.toISOString(),
34
+ estimatedDuration: order.patient.estimatedDuration ?? null,
35
+ waitTime: order.patient.waitTime ?? null,
36
+ queueType: order.patient.queueType ?? null,
37
+ classification: order.patient.classification ?? null,
38
+ },
39
+ });
40
+ const serializeMetrics = (metrics) => ({
41
+ averageWaitTime: Math.round(metrics.averageWaitTime * 100) / 100,
42
+ medianWaitTime: Math.round(metrics.medianWaitTime * 100) / 100,
43
+ maxWaitTime: Math.round(metrics.maxWaitTime * 100) / 100,
44
+ minWaitTime: Math.round(metrics.minWaitTime * 100) / 100,
45
+ fairnessScore: Math.round(metrics.fairnessScore * 100) / 100,
46
+ doctorUtilization: Math.round(metrics.doctorUtilization * 100) / 100,
47
+ throughput: Math.round(metrics.throughput * 100) / 100,
48
+ patientSatisfaction: Math.round(metrics.patientSatisfaction * 100) / 100,
49
+ totalOvertime: Math.round(metrics.totalOvertime * 100) / 100,
50
+ });
51
+ const optimizeQueueController = async (req, res) => {
52
+ try {
53
+ const { patients: rawPatients, config, doctors: reqDoctors } = req.body;
54
+ const patients = hydratePatientsFromRequest(rawPatients);
55
+ const doctors = reqDoctors?.length ? reqDoctors : DEFAULT_DOCTORS;
56
+ const optimizer = new index_1.QueueOptimizer(config);
57
+ const optimizedQueue = optimizer.optimize(patients, doctors);
58
+ const queueOrders = optimizer.generateQueueOrder(optimizedQueue, new Date(), doctors);
59
+ res.json({
60
+ success: true,
61
+ message: "Queue optimized successfully",
62
+ data: { optimizedQueue: queueOrders.map(serializeQueueOrder) },
63
+ timestamp: new Date().toISOString(),
64
+ });
65
+ }
66
+ catch (error) {
67
+ res.status(400).json({
68
+ success: false, error: "Optimization failed",
69
+ message: error.message,
70
+ timestamp: new Date().toISOString(),
71
+ });
72
+ }
73
+ };
74
+ exports.optimizeQueueController = optimizeQueueController;
75
+ const simulateQueueController = async (req, res) => {
76
+ try {
77
+ const { patients: rawPatients, config, doctors: reqDoctors } = req.body;
78
+ const patients = hydratePatientsFromRequest(rawPatients);
79
+ const doctors = reqDoctors?.length ? reqDoctors : DEFAULT_DOCTORS;
80
+ const simulator = new index_1.QueueSimulator(config);
81
+ const result = simulator.simulate(patients, doctors);
82
+ res.json({
83
+ success: true,
84
+ message: "Queue simulation completed",
85
+ data: {
86
+ baselineQueue: result.baselineQueue.map(serializeQueueOrder),
87
+ optimizedQueue: result.optimizedQueue.map(serializeQueueOrder),
88
+ baselineMetrics: serializeMetrics(result.baselineMetrics),
89
+ optimizedMetrics: serializeMetrics(result.optimizedMetrics),
90
+ fairnessReport: result.fairnessReport,
91
+ recommendations: result.recommendations,
92
+ },
93
+ timestamp: new Date().toISOString(),
94
+ });
95
+ }
96
+ catch (error) {
97
+ res.status(400).json({
98
+ success: false, error: "Simulation failed",
99
+ message: error.message,
100
+ timestamp: new Date().toISOString(),
101
+ });
102
+ }
103
+ };
104
+ exports.simulateQueueController = simulateQueueController;
105
+ const compareQueuesController = async (req, res) => {
106
+ try {
107
+ const { patients: rawPatients, config, doctors: reqDoctors } = req.body;
108
+ const patients = hydratePatientsFromRequest(rawPatients);
109
+ const doctors = reqDoctors?.length ? reqDoctors : DEFAULT_DOCTORS;
110
+ const optimizer = new index_1.QueueOptimizer(config);
111
+ const { baseline, optimized } = optimizer.compareQueues(patients, new Date(), doctors);
112
+ const numDocs = doctors.filter((d) => d.isAvailable).length;
113
+ const baselineMetrics = index_1.MetricsCalculator.calculateMetrics(baseline, 240, numDocs);
114
+ const optimizedMetrics = index_1.MetricsCalculator.calculateMetrics(optimized, 240, numDocs);
115
+ res.json({
116
+ success: true,
117
+ message: "Queue comparison completed",
118
+ data: {
119
+ baseline: { queue: baseline.map(serializeQueueOrder), metrics: serializeMetrics(baselineMetrics) },
120
+ optimized: { queue: optimized.map(serializeQueueOrder), metrics: serializeMetrics(optimizedMetrics) },
121
+ improvements: index_1.MetricsCalculator.compareMetrics(baselineMetrics, optimizedMetrics).improvements,
122
+ },
123
+ timestamp: new Date().toISOString(),
124
+ });
125
+ }
126
+ catch (error) {
127
+ res.status(400).json({
128
+ success: false, error: "Comparison failed",
129
+ message: error.message,
130
+ timestamp: new Date().toISOString(),
131
+ });
132
+ }
133
+ };
134
+ exports.compareQueuesController = compareQueuesController;
135
+ const metricsController = async (req, res) => {
136
+ try {
137
+ const { patients: rawPatients, config } = req.body;
138
+ const patients = hydratePatientsFromRequest(rawPatients);
139
+ const optimizer = new index_1.QueueOptimizer(config);
140
+ const queueOrders = optimizer.generateQueueOrder(patients);
141
+ const metrics = index_1.MetricsCalculator.calculateMetrics(queueOrders);
142
+ res.json({
143
+ success: true,
144
+ message: "Metrics calculated",
145
+ data: { metrics: serializeMetrics(metrics), queue: queueOrders.map(serializeQueueOrder) },
146
+ timestamp: new Date().toISOString(),
147
+ });
148
+ }
149
+ catch (error) {
150
+ res.status(400).json({
151
+ success: false, error: "Metrics calculation failed",
152
+ message: error.message,
153
+ timestamp: new Date().toISOString(),
154
+ });
155
+ }
156
+ };
157
+ exports.metricsController = metricsController;
158
+ const getConfigController = (req, res) => {
159
+ res.json({
160
+ success: true,
161
+ message: "Default TeleMedQ configuration",
162
+ data: { config: index_1.DEFAULT_CONFIG },
163
+ timestamp: new Date().toISOString(),
164
+ });
165
+ };
166
+ exports.getConfigController = getConfigController;
167
+ const configController = (req, res) => {
168
+ const { config } = req.body;
169
+ const weightSum = config.severityWeight + config.waitTimeWeight + config.fairnessWeight;
170
+ const isValid = Math.abs(weightSum - 1.0) < 0.01;
171
+ res.json({
172
+ success: isValid,
173
+ message: isValid ? "Configuration is valid" : "Configuration is invalid",
174
+ data: { valid: isValid, weightSum: weightSum.toFixed(2), errors: isValid ? [] : [`Weights must sum to 1.0 (currently ${weightSum.toFixed(2)})`] },
175
+ timestamp: new Date().toISOString(),
176
+ });
177
+ };
178
+ exports.configController = configController;
179
+ const docsController = (req, res) => {
180
+ res.json({
181
+ success: true,
182
+ data: {
183
+ title: "TeleMedQ Queue Optimizer REST API",
184
+ version: "2.0.0",
185
+ baseUrl: "/api/v1",
186
+ patientSchema: {
187
+ id: "string", age: "number", gender: "M | F | Other",
188
+ chiefComplaint: "string", conditionType: "string",
189
+ urgency: "CRITICAL | HIGH | STANDARD | LOW",
190
+ arrivalTime: "ISO 8601 datetime",
191
+ isReturning: "boolean", hasComplexHistory: "boolean",
192
+ isMultiSymptom: "boolean", isTeleconsultFollowUp: "boolean",
193
+ preferredDoctorId: "string (optional)",
194
+ },
195
+ endpoints: [
196
+ { method: "POST", path: "/optimize", description: "Optimize queue order" },
197
+ { method: "POST", path: "/simulate", description: "Run full dual-mode simulation" },
198
+ { method: "POST", path: "/compare", description: "Compare baseline FIFO vs optimized" },
199
+ { method: "POST", path: "/metrics", description: "Calculate metrics for a queue" },
200
+ { method: "GET", path: "/config", description: "Get default configuration" },
201
+ { method: "POST", path: "/config/validate", description: "Validate configuration" },
202
+ { method: "POST", path: "/intake/classify", description: "Classify patient from intake form" },
203
+ { method: "POST", path: "/intake/enqueue", description: "Classify + enqueue patient" },
204
+ { method: "GET", path: "/intake/questions/:queueType", description: "Get intake questions for queue" },
205
+ ],
206
+ },
207
+ timestamp: new Date().toISOString(),
208
+ });
209
+ };
210
+ exports.docsController = docsController;
211
+ const classifyIntakeController = async (req, res) => {
212
+ try {
213
+ const { intake, age } = req.body;
214
+ if (!intake || !intake.queueType) {
215
+ return res.status(400).json({
216
+ success: false,
217
+ error: "Validation Error",
218
+ message: "intake object with queueType is required",
219
+ timestamp: new Date().toISOString(),
220
+ });
221
+ }
222
+ const classification = (0, index_2.classifyPatient)(intake, age);
223
+ res.json({
224
+ success: true,
225
+ message: "Patient classified successfully",
226
+ data: {
227
+ classification,
228
+ urgency: (0, index_2.severityToUrgency)(classification.severity),
229
+ summary: {
230
+ severity: classification.severity,
231
+ clinicalMultiplier: classification.clinicalMultiplier,
232
+ symptomPattern: classification.symptomPattern,
233
+ estimatedDuration: classification.estimatedDuration,
234
+ starvationThreshold: classification.starvationThreshold,
235
+ queueType: classification.queueType,
236
+ escalationReasons: classification.escalationReasons,
237
+ },
238
+ },
239
+ timestamp: new Date().toISOString(),
240
+ });
241
+ }
242
+ catch (error) {
243
+ res.status(400).json({
244
+ success: false,
245
+ error: "Classification failed",
246
+ message: error.message,
247
+ timestamp: new Date().toISOString(),
248
+ });
249
+ }
250
+ };
251
+ exports.classifyIntakeController = classifyIntakeController;
252
+ const enqueueIntakeController = async (req, res) => {
253
+ try {
254
+ const { intake, patient: patientData, existingQueue, config, doctors: reqDoctors } = req.body;
255
+ const doctors = reqDoctors?.length ? reqDoctors : DEFAULT_DOCTORS;
256
+ if (!intake || !intake.queueType) {
257
+ return res.status(400).json({
258
+ success: false,
259
+ error: "Validation Error",
260
+ message: "intake object with queueType is required",
261
+ timestamp: new Date().toISOString(),
262
+ });
263
+ }
264
+ const classification = (0, index_2.classifyPatient)(intake, patientData?.age);
265
+ const urgency = (0, index_2.severityToUrgency)(classification.severity);
266
+ const patient = {
267
+ id: patientData?.id || `patient-${Date.now()}`,
268
+ age: patientData?.age ?? 30,
269
+ gender: patientData?.gender ?? "Other",
270
+ chiefComplaint: patientData?.chiefComplaint ?? intake.queueType,
271
+ conditionType: intake.queueType,
272
+ urgency,
273
+ arrivalTime: new Date(),
274
+ estimatedDuration: classification.estimatedDuration,
275
+ isReturning: patientData?.isReturning ?? false,
276
+ hasComplexHistory: patientData?.hasComplexHistory ?? false,
277
+ isMultiSymptom: patientData?.isMultiSymptom ?? false,
278
+ isTeleconsultFollowUp: patientData?.isTeleconsultFollowUp ?? false,
279
+ intake: intake,
280
+ classification,
281
+ queueType: intake.queueType,
282
+ };
283
+ let queueResult = null;
284
+ if (existingQueue && Array.isArray(existingQueue)) {
285
+ const allPatients = [
286
+ ...hydratePatientsFromRequest(existingQueue),
287
+ patient,
288
+ ];
289
+ const optimizer = new index_1.QueueOptimizer(config);
290
+ const optimized = optimizer.optimize(allPatients, doctors);
291
+ const queueOrders = optimizer.generateQueueOrder(optimized, new Date(), doctors);
292
+ queueResult = queueOrders.map(serializeQueueOrder);
293
+ }
294
+ res.json({
295
+ success: true,
296
+ message: `Patient classified as ${classification.severity.toUpperCase()} and enqueued`,
297
+ data: {
298
+ patient: {
299
+ id: patient.id,
300
+ urgency: patient.urgency,
301
+ classification: patient.classification,
302
+ estimatedDuration: patient.estimatedDuration,
303
+ queueType: patient.queueType,
304
+ },
305
+ queue: queueResult,
306
+ },
307
+ timestamp: new Date().toISOString(),
308
+ });
309
+ }
310
+ catch (error) {
311
+ res.status(400).json({
312
+ success: false,
313
+ error: "Enqueue failed",
314
+ message: error.message,
315
+ timestamp: new Date().toISOString(),
316
+ });
317
+ }
318
+ };
319
+ exports.enqueueIntakeController = enqueueIntakeController;
320
+ const intakeQuestionsController = (req, res) => {
321
+ const queueType = req.params.queueType;
322
+ const validQueues = ["diabetes", "cholesterol", "bloodPressure", "general"];
323
+ if (!validQueues.includes(queueType)) {
324
+ return res.status(400).json({
325
+ success: false,
326
+ error: "Invalid queue type",
327
+ message: `Queue type must be one of: ${validQueues.join(", ")}`,
328
+ timestamp: new Date().toISOString(),
329
+ });
330
+ }
331
+ const universalQuestions = {
332
+ sectionA: {
333
+ comfort: {
334
+ question: "How are you feeling RIGHT NOW overall?",
335
+ options: [
336
+ { value: 0, label: "Fine — came for a routine check" },
337
+ { value: 1, label: "Uncomfortable but managing" },
338
+ { value: 2, label: "Quite unwell, hard to ignore" },
339
+ { value: 3, label: "Very unwell, struggling to function" },
340
+ { value: 4, label: "Extremely unwell or frightened" },
341
+ ],
342
+ },
343
+ onset: {
344
+ question: "How long has this been happening?",
345
+ options: [
346
+ { value: "acute", label: "Just started — less than 1 hour" },
347
+ { value: "today", label: "Started today" },
348
+ { value: "days", label: "Few days" },
349
+ { value: "chronic", label: "Weeks or longer" },
350
+ ],
351
+ },
352
+ emergencySignals: {
353
+ question: "Are you experiencing ANY of these right now?",
354
+ multiSelect: true,
355
+ options: [
356
+ { key: "chestPain", label: "Chest pain or heaviness" },
357
+ { key: "breathingDifficulty", label: "Difficulty breathing at rest" },
358
+ { key: "severeHeadache", label: "Sudden, severe, 'worst ever' headache" },
359
+ { key: "confusion", label: "Confusion — can't think or speak clearly" },
360
+ { key: "visionLoss", label: "Blurred or lost vision (sudden)" },
361
+ { key: "limbWeakness", label: "Weakness or numbness in face, arm, or leg (one side)" },
362
+ { key: "fainting", label: "Feeling like you might faint or pass out" },
363
+ ],
364
+ },
365
+ },
366
+ };
367
+ const queueQuestions = {
368
+ diabetes: {
369
+ sectionB: {
370
+ hypoSymptoms: {
371
+ title: "Low Blood Sugar Symptoms",
372
+ multiSelect: true,
373
+ options: [
374
+ { key: "shaking", label: "Shaking or trembling" },
375
+ { key: "suddenSweating", label: "Sudden sweating (not from heat/exercise)" },
376
+ { key: "heartPounding", label: "Heart pounding or racing" },
377
+ { key: "suddenHunger", label: "Sudden intense hunger" },
378
+ { key: "paleSkin", label: "Pale or clammy skin" },
379
+ { key: "mentalFog", label: "Mental fog — hard to concentrate or speak" },
380
+ { key: "tinglingLips", label: "Tingling around lips or fingertips" },
381
+ { key: "suddenAnxiety", label: "Feeling very anxious or irritable suddenly" },
382
+ ],
383
+ },
384
+ hyperSymptoms: {
385
+ title: "High Blood Sugar Symptoms",
386
+ multiSelect: true,
387
+ options: [
388
+ { key: "extremeThirst", label: "Extremely thirsty — can't drink enough water" },
389
+ { key: "frequentUrination", label: "Urinating much more than usual" },
390
+ { key: "blurredVision", label: "Blurred vision (new or suddenly worse)" },
391
+ { key: "fruityBreath", label: "Fruity or strange smell on breath" },
392
+ { key: "nausea", label: "Nausea or vomiting" },
393
+ { key: "deepFastBreathing", label: "Deep, fast breathing or feeling breathless" },
394
+ { key: "extremeTiredness", label: "Extreme tiredness — heavy, hard to move" },
395
+ { key: "stomachPain", label: "Stomach pain (new or severe)" },
396
+ { key: "slowWoundHealing", label: "Wounds or cuts healing very slowly" },
397
+ ],
398
+ },
399
+ context: {
400
+ title: "Context",
401
+ multiSelect: true,
402
+ options: [
403
+ { key: "onInsulin", label: "I am on insulin" },
404
+ { key: "hasKidneyDisease", label: "I have kidney disease" },
405
+ { key: "isPregnant", label: "I am pregnant" },
406
+ { key: "recentHypoEpisode", label: "I had a low blood sugar episode in the last 24 hours" },
407
+ { key: "missedInsulinDose", label: "I ran out of insulin or missed a dose" },
408
+ { key: "routineCheck", label: "None of the above — routine check / HbA1c review" },
409
+ ],
410
+ },
411
+ optionalReadings: {
412
+ bloodGlucose: { label: "Current blood sugar reading (mg/dL)", type: "number", optional: true },
413
+ hba1c: { label: "Recent HbA1c (%)", type: "number", optional: true },
414
+ },
415
+ },
416
+ },
417
+ cholesterol: {
418
+ sectionB: {
419
+ reasonForVisit: {
420
+ title: "Why are you visiting today?",
421
+ multiSelect: true,
422
+ options: [
423
+ { key: "followUpBloodTest", label: "Follow-up on a recent blood test" },
424
+ { key: "doctorReferred", label: "Doctor referred me for cholesterol check" },
425
+ { key: "chestTightness", label: "I have chest tightness or pressure during activity" },
426
+ { key: "breathlessOnStairs", label: "I get unusually breathless going up stairs or walking" },
427
+ { key: "unusualFatigue", label: "I feel exhausted doing things that used to be easy" },
428
+ { key: "familyHeartAttack", label: "I am worried — family member had a heart attack" },
429
+ { key: "priorCardiacEvent", label: "I had a heart attack, stroke, or blocked artery before" },
430
+ { key: "medicationReview", label: "I want to start or review cholesterol medication" },
431
+ { key: "statinSideEffect", label: "I'm having muscle pain or weakness (possible statin side effect)" },
432
+ { key: "generalAssessment", label: "General heart risk assessment" },
433
+ ],
434
+ },
435
+ riskFactors: {
436
+ title: "Risk Factors",
437
+ multiSelect: true,
438
+ options: [
439
+ { key: "hasDiabetes", label: "I have diabetes" },
440
+ { key: "hasHighBP", label: "I have high blood pressure" },
441
+ { key: "smokerOrExSmoker", label: "I smoke or used to smoke" },
442
+ { key: "significantlyOverweight", label: "I am significantly overweight" },
443
+ { key: "ageRisk", label: "I am a man over 55, or a woman over 65" },
444
+ { key: "familyEarlyHeartAttack", label: "A close family member had a heart attack before age 60" },
445
+ { key: "hasKidneyDisease", label: "I have kidney disease" },
446
+ { key: "familialHypercholesterolaemia", label: "I have been told I have a very high cholesterol (familial or genetic)" },
447
+ { key: "priorClotStrokeTIA", label: "I have had a blood clot, stroke, or TIA (mini-stroke)" },
448
+ { key: "inflammatoryCondition", label: "I have an inflammatory condition (RA, lupus, psoriasis)" },
449
+ ],
450
+ },
451
+ optionalReadings: {
452
+ ldl: { label: "LDL cholesterol (mg/dL)", type: "number", optional: true },
453
+ totalCholesterol: { label: "Total cholesterol (mg/dL)", type: "number", optional: true },
454
+ hdl: { label: "HDL cholesterol (mg/dL)", type: "number", optional: true },
455
+ triglycerides: { label: "Triglycerides (mg/dL)", type: "number", optional: true },
456
+ },
457
+ },
458
+ },
459
+ bloodPressure: {
460
+ sectionB: {
461
+ symptoms: {
462
+ title: "What are you experiencing right now?",
463
+ multiSelect: true,
464
+ options: [
465
+ { key: "severeHeadache", label: "Severe pounding headache — worst I've had" },
466
+ { key: "blurredVision", label: "Blurred vision or sudden change in vision" },
467
+ { key: "nauseaWithHeadache", label: "Nausea or vomiting alongside headache" },
468
+ { key: "chestPain", label: "Chest pain or pressure" },
469
+ { key: "shortnessOfBreathRest", label: "Shortness of breath even at rest" },
470
+ { key: "heartbeatInEars", label: "Feeling my heartbeat in my ears or neck" },
471
+ { key: "unstoppableNosebleed", label: "Nosebleed that won't stop" },
472
+ { key: "swollenAnkles", label: "Swollen ankles or legs (new or suddenly worse)" },
473
+ { key: "mildHeadache", label: "Mild dull headache — pressure feeling" },
474
+ { key: "flushed", label: "Feeling flushed or hot in the face" },
475
+ { key: "dizziness", label: "Dizziness or lightheadedness" },
476
+ { key: "palpitations", label: "Palpitations — irregular or fast heartbeat" },
477
+ { key: "noSymptoms", label: "None of the above — routine / medication check" },
478
+ ],
479
+ },
480
+ context: {
481
+ title: "Context",
482
+ multiSelect: true,
483
+ options: [
484
+ { key: "diagnosedHighBP", label: "I know I have high blood pressure (diagnosed)" },
485
+ { key: "measuredVeryHighToday", label: "I measured my BP today and it was very high" },
486
+ { key: "missedBPMedication", label: "I've been unable to take my BP medication (missed doses)" },
487
+ { key: "hasDiabetes", label: "I have diabetes" },
488
+ { key: "hasKidneyDisease", label: "I have kidney disease" },
489
+ { key: "priorStrokeTIA", label: "I have had a stroke or TIA (mini-stroke) before" },
490
+ { key: "hasHeartFailure", label: "I have heart failure" },
491
+ { key: "isPregnant", label: "I am pregnant or gave birth in the last 6 weeks" },
492
+ { key: "recentMedicationChange", label: "My doctor increased / changed my BP medication recently" },
493
+ ],
494
+ },
495
+ optionalReadings: {
496
+ systolic: { label: "Systolic (top number) mmHg", type: "number", optional: true },
497
+ diastolic: { label: "Diastolic (bottom number) mmHg", type: "number", optional: true },
498
+ },
499
+ },
500
+ },
501
+ general: {
502
+ sectionB: {
503
+ primaryComplaint: {
504
+ question: "What is your main concern today?",
505
+ singleSelect: true,
506
+ options: [
507
+ { value: "fever", label: "Fever / flu / infection" },
508
+ { value: "cough", label: "Cough, cold, or sore throat" },
509
+ { value: "stomach", label: "Stomach or digestive problem" },
510
+ { value: "pain", label: "Pain — back, joint, muscle, or headache" },
511
+ { value: "skin", label: "Skin problem — rash, wound, or bite" },
512
+ { value: "mentalHealth", label: "Feeling very low, anxious, or overwhelmed" },
513
+ { value: "urinary", label: "Urinary / kidney symptoms" },
514
+ { value: "eyeEarDental", label: "Eye, ear, or dental problem" },
515
+ { value: "prescription", label: "Prescription refill or medication review" },
516
+ { value: "other", label: "Something else" },
517
+ ],
518
+ },
519
+ situationFlags: {
520
+ title: "Which of these describe your situation?",
521
+ multiSelect: true,
522
+ options: [
523
+ { key: "highFever", label: "I have a high temperature / fever (> 38.5°C / 101°F)" },
524
+ { key: "worseningRapidly", label: "My symptoms have been getting worse quickly (hours, not days)" },
525
+ { key: "bladderBowelLoss", label: "I have lost control of bladder or bowel (new — not normal for me)" },
526
+ { key: "rashWithSwelling", label: "I have a rash AND swelling in my face, lips, or throat" },
527
+ { key: "selfHarmThoughts", label: "I have thought about harming myself" },
528
+ { key: "vomitingOver5Times", label: "I vomited or had diarrhoea more than 5 times today" },
529
+ { key: "nothingStaysDown", label: "I cannot eat or drink anything — everything comes back up" },
530
+ { key: "worstPainEver", label: "The pain is severe — worst I have felt" },
531
+ { key: "gotSeriousBefore", label: "I had this before and it became very serious / needed hospital" },
532
+ { key: "confusedNotSelf", label: "I feel confused or not quite myself" },
533
+ ],
534
+ },
535
+ impactLevel: {
536
+ question: "How much is this affecting your day?",
537
+ singleSelect: true,
538
+ options: [
539
+ { value: 0, label: "Not much — I can function normally" },
540
+ { value: 1, label: "Somewhat — some discomfort but managing" },
541
+ { value: 2, label: "Significantly — hard to do normal things" },
542
+ { value: 3, label: "Completely — I cannot get up or function" },
543
+ ],
544
+ },
545
+ additionalContext: {
546
+ title: "Additional Context",
547
+ multiSelect: true,
548
+ options: [
549
+ { key: "isOver65", label: "I am over 65 years old" },
550
+ { key: "immunocompromised", label: "I have a weakened immune system (chemo, HIV, steroids)" },
551
+ { key: "isPregnant", label: "I am pregnant or recently gave birth" },
552
+ { key: "caringForChild", label: "I am caring for a young child with these symptoms" },
553
+ ],
554
+ },
555
+ },
556
+ },
557
+ };
558
+ res.json({
559
+ success: true,
560
+ message: `Intake questions for ${queueType} queue`,
561
+ data: {
562
+ ...universalQuestions,
563
+ ...queueQuestions[queueType],
564
+ },
565
+ timestamp: new Date().toISOString(),
566
+ });
567
+ };
568
+ exports.intakeQuestionsController = intakeQuestionsController;
569
+ //# sourceMappingURL=controllers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../src/api/controllers.ts"],"names":[],"mappings":";;;AAKA,oCAQkB;AAClB,qDAA+E;AAI/E,MAAM,eAAe,GAAa;IAChC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE;IACtJ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE;IAC/I,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE;CAChJ,CAAC;AAMF,MAAM,0BAA0B,GAAG,CAAC,GAAU,EAAa,EAAE,CAC3D,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACd,GAAG,CAAC;IACJ,WAAW,EAAE,CAAC,CAAC,WAAW,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;CACrF,CAAC,CAAC,CAAC;AAEN,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;IAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;IAC9B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;IACpD,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI;IAC1D,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC,GAAG,GAAG;IAClE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,WAAW,EAAE;IAC1D,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE;IACtD,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;IAC1C,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,IAAI;IAClD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI;IAC1C,OAAO,EAAE;QACP,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG;QACtB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC5B,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAC5C,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QAC9B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE;QACpD,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI;QAC1D,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI;QACxC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI;QAC1C,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;KACrD;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;IAC1C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;IAChE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,GAAG,GAAG;IAC9D,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;IACxD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;IACxD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG;IAC5D,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC,GAAG,GAAG;IACpE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,GAAG;IACtD,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;IACxE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG;CAC7D,CAAC,CAAC;AAMI,MAAM,uBAAuB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAEtF,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,8BAA8B;YACvC,IAAI,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YAC9D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB;YAC5C,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAtBW,QAAA,uBAAuB,2BAsBlC;AAMK,MAAM,uBAAuB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAErD,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE;gBACJ,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBAC5D,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBAC9D,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC;gBACzD,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC3D,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB;YAC1C,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AA5BW,QAAA,uBAAuB,2BA4BlC;AAMK,MAAM,uBAAuB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QACpE,MAAM,eAAe,GAAG,yBAAiB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,yBAAiB,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAErF,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,eAAe,CAAC,EAAE;gBAClG,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,EAAE;gBACrG,YAAY,EAAE,yBAAiB,CAAC,cAAc,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,YAAY;aAC/F;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB;YAC1C,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AA7BW,QAAA,uBAAuB,2BA6BlC;AAMK,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACnD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,yBAAiB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEhE,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,oBAAoB;YAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE;YACzF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B;YACnD,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B;AAMK,MAAM,mBAAmB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACjE,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,gCAAgC;QACzC,IAAI,EAAE,EAAE,MAAM,EAAE,sBAAc,EAAE;QAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,mBAAmB,uBAO9B;AAEK,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACxF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;IAEjD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B;QACxE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,sCAAsC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QACjJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B;AAMK,MAAM,cAAc,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC5D,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,KAAK,EAAE,mCAAmC;YAC1C,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE;gBACb,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe;gBACpD,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ;gBACjD,OAAO,EAAE,kCAAkC;gBAC3C,WAAW,EAAE,mBAAmB;gBAChC,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS;gBACpD,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS;gBAC3D,iBAAiB,EAAE,mBAAmB;aACvC;YACD,SAAS,EAAE;gBACT,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE;gBAC1E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBACnF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oCAAoC,EAAE;gBACvF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE;gBAClF,EAAE,MAAM,EAAE,KAAK,EAAG,IAAI,EAAE,SAAS,EAAG,WAAW,EAAE,2BAA2B,EAAE;gBAC9E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBACnF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBAC9F,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE;gBACtF,EAAE,MAAM,EAAE,KAAK,EAAG,IAAI,EAAE,8BAA8B,EAAE,WAAW,EAAE,gCAAgC,EAAE;aACxG;SACF;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC,CAAC;AA9BW,QAAA,cAAc,kBA8BzB;AAUK,MAAM,wBAAwB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC5E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,0CAA0C;gBACnD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,MAAoB,EAAE,GAAG,CAAC,CAAC;QAElE,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,iCAAiC;YAC1C,IAAI,EAAE;gBACJ,cAAc;gBACd,OAAO,EAAE,IAAA,yBAAiB,EAAC,cAAc,CAAC,QAAQ,CAAC;gBACnD,OAAO,EAAE;oBACP,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,kBAAkB,EAAE,cAAc,CAAC,kBAAkB;oBACrD,cAAc,EAAE,cAAc,CAAC,cAAc;oBAC7C,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;oBACnD,mBAAmB,EAAE,cAAc,CAAC,mBAAmB;oBACvD,SAAS,EAAE,cAAc,CAAC,SAAS;oBACnC,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;iBACpD;aACF;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAxCW,QAAA,wBAAwB,4BAwCnC;AAMK,MAAM,uBAAuB,GAAG,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAC9F,MAAM,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;QAElE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kBAAkB;gBACzB,OAAO,EAAE,0CAA0C;gBACnD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,MAAoB,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAA,yBAAiB,EAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAG3D,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;YAC9C,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE;YAC3B,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,OAAO;YACtC,cAAc,EAAE,WAAW,EAAE,cAAc,IAAI,MAAM,CAAC,SAAS;YAC/D,aAAa,EAAE,MAAM,CAAC,SAAS;YAC/B,OAAO;YACP,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,iBAAiB,EAAE,cAAc,CAAC,iBAAiB;YACnD,WAAW,EAAE,WAAW,EAAE,WAAW,IAAI,KAAK;YAC9C,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,IAAI,KAAK;YAC1D,cAAc,EAAE,WAAW,EAAE,cAAc,IAAI,KAAK;YACpD,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,IAAI,KAAK;YAClE,MAAM,EAAE,MAAoB;YAC5B,cAAc;YACd,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;QAGF,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG;gBAClB,GAAG,0BAA0B,CAAC,aAAa,CAAC;gBAC5C,OAAO;aACR,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,sBAAc,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YACjF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACrD,CAAC;QAED,GAAG,CAAC,IAAI,CAAC;YACP,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,yBAAyB,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe;YACtF,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,cAAc,EAAE,OAAO,CAAC,cAAc;oBACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;oBAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B;gBACD,KAAK,EAAE,WAAW;aACnB;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAG,KAAe,CAAC,OAAO;YACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAxEW,QAAA,uBAAuB,2BAwElC;AAKK,MAAM,yBAAyB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACvE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAmB,CAAC;IACjD,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAE5E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,8BAA8B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,kBAAkB,GAAG;QACzB,QAAQ,EAAE;YACR,OAAO,EAAE;gBACP,QAAQ,EAAE,wCAAwC;gBAClD,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE;oBACtD,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE;oBACjD,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE;oBACnD,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE;oBAC1D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE;iBACtD;aACF;YACD,KAAK,EAAE;gBACL,QAAQ,EAAE,mCAAmC;gBAC7C,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE;oBAC5D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;oBAC1C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;oBACpC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE;iBAC/C;aACF;YACD,gBAAgB,EAAE;gBAChB,QAAQ,EAAE,8CAA8C;gBACxD,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE;oBACP,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE;oBACtD,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,8BAA8B,EAAE;oBACrE,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,uCAAuC,EAAE;oBACzE,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,0CAA0C,EAAE;oBACvE,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,iCAAiC,EAAE;oBAC/D,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,sDAAsD,EAAE;oBACtF,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,0CAA0C,EAAE;iBACvE;aACF;SACF;KACF,CAAC;IAEF,MAAM,cAAc,GAAwB;QAC1C,QAAQ,EAAE;YACR,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,KAAK,EAAE,0BAA0B;oBACjC,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE;wBACjD,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,0CAA0C,EAAE;wBAC5E,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,0BAA0B,EAAE;wBAC3D,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,uBAAuB,EAAE;wBACvD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE;wBACjD,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,2CAA2C,EAAE;wBACxE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,oCAAoC,EAAE;wBACpE,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,4CAA4C,EAAE;qBAC9E;iBACF;gBACD,aAAa,EAAE;oBACb,KAAK,EAAE,2BAA2B;oBAClC,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,8CAA8C,EAAE;wBAC/E,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,gCAAgC,EAAE;wBACrE,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,wCAAwC,EAAE;wBACzE,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,mCAAmC,EAAE;wBACnE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE;wBAC9C,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,4CAA4C,EAAE;wBACjF,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,yCAAyC,EAAE;wBAC7E,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,8BAA8B,EAAE;wBAC7D,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,oCAAoC,EAAE;qBACzE;iBACF;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE;wBAC9C,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,uBAAuB,EAAE;wBAC3D,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE;wBAC7C,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,sDAAsD,EAAE;wBAC3F,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,uCAAuC,EAAE;wBAC5E,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,kDAAkD,EAAE;qBACnF;iBACF;gBACD,gBAAgB,EAAE;oBAChB,YAAY,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9F,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACrE;aACF;SACF;QACD,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,KAAK,EAAE,6BAA6B;oBACpC,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,kCAAkC,EAAE;wBACvE,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,0CAA0C,EAAE;wBAC5E,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,oDAAoD,EAAE;wBACtF,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,uDAAuD,EAAE;wBAC7F,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,oDAAoD,EAAE;wBACtF,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,iDAAiD,EAAE;wBACtF,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,wDAAwD,EAAE;wBAC7F,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,kDAAkD,EAAE;wBACtF,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,kEAAkE,EAAE;wBACtG,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,+BAA+B,EAAE;qBACrE;iBACF;gBACD,WAAW,EAAE;oBACX,KAAK,EAAE,cAAc;oBACrB,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE;wBAChD,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,4BAA4B,EAAE;wBACzD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,0BAA0B,EAAE;wBAC9D,EAAE,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAE,+BAA+B,EAAE;wBAC1E,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,wCAAwC,EAAE;wBACnE,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,wDAAwD,EAAE;wBAClG,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,uBAAuB,EAAE;wBAC3D,EAAE,GAAG,EAAE,+BAA+B,EAAE,KAAK,EAAE,uEAAuE,EAAE;wBACxH,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,uDAAuD,EAAE;wBAC7F,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,yDAAyD,EAAE;qBACnG;iBACF;gBACD,gBAAgB,EAAE;oBAChB,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACzE,gBAAgB,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACxF,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACzE,aAAa,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAClF;aACF;SACF;QACD,aAAa,EAAE;YACb,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,KAAK,EAAE,sCAAsC;oBAC7C,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,2CAA2C,EAAE;wBAC7E,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,2CAA2C,EAAE;wBAC5E,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,uCAAuC,EAAE;wBAC7E,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,wBAAwB,EAAE;wBACrD,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,kCAAkC,EAAE;wBAC3E,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,yCAAyC,EAAE;wBAC5E,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,2BAA2B,EAAE;wBACnE,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,gDAAgD,EAAE;wBACjF,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,uCAAuC,EAAE;wBACvE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,oCAAoC,EAAE;wBAC/D,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,8BAA8B,EAAE;wBAC3D,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,4CAA4C,EAAE;wBAC5E,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,gDAAgD,EAAE;qBAC/E;iBACF;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,+CAA+C,EAAE;wBAClF,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,6CAA6C,EAAE;wBACtF,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,0DAA0D,EAAE;wBAChG,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE;wBAChD,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,uBAAuB,EAAE;wBAC3D,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,iDAAiD,EAAE;wBACnF,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,EAAE;wBACzD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,iDAAiD,EAAE;wBAC/E,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,yDAAyD,EAAE;qBACpG;iBACF;gBACD,gBAAgB,EAAE;oBAChB,QAAQ,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACjF,SAAS,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;iBACvF;aACF;SACF;QACD,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,gBAAgB,EAAE;oBAChB,QAAQ,EAAE,kCAAkC;oBAC5C,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE;wBACpD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE;wBACxD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,8BAA8B,EAAE;wBAC3D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,yCAAyC,EAAE;wBACnE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,qCAAqC,EAAE;wBAC/D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,2CAA2C,EAAE;wBAC7E,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,2BAA2B,EAAE;wBACxD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,6BAA6B,EAAE;wBAC/D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,0CAA0C,EAAE;wBAC5E,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE;qBAC5C;iBACF;gBACD,cAAc,EAAE;oBACd,KAAK,EAAE,yCAAyC;oBAChD,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,sDAAsD,EAAE;wBACnF,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,+DAA+D,EAAE;wBACnG,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,mEAAmE,EAAE;wBACvG,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,wDAAwD,EAAE;wBAC5F,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,qCAAqC,EAAE;wBACzE,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,oDAAoD,EAAE;wBAC1F,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,2DAA2D,EAAE;wBAC/F,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,wCAAwC,EAAE;wBACzE,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,gEAAgE,EAAE;wBACpG,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,qCAAqC,EAAE;qBACzE;iBACF;gBACD,WAAW,EAAE;oBACX,QAAQ,EAAE,sCAAsC;oBAChD,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE;wBACzD,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE;wBAC9D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE;wBAC/D,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE;qBAChE;iBACF;gBACD,iBAAiB,EAAE;oBACjB,KAAK,EAAE,oBAAoB;oBAC3B,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE;wBACP,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,wBAAwB,EAAE;wBACpD,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,wDAAwD,EAAE;wBAC7F,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,sCAAsC,EAAE;wBACpE,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,mDAAmD,EAAE;qBACtF;iBACF;aACF;SACF;KACF,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,wBAAwB,SAAS,QAAQ;QAClD,IAAI,EAAE;YACJ,GAAG,kBAAkB;YACrB,GAAG,cAAc,CAAC,SAAwC,CAAC;SAC5D;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC,CAAC;AA3PW,QAAA,yBAAyB,6BA2PpC"}
@@ -0,0 +1,7 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export declare const requestLogger: (req: Request, res: Response, next: NextFunction) => void;
3
+ export declare const validatePatients: (req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
4
+ export declare const validateConfig: (req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
5
+ export declare const errorHandler: (error: any, req: Request, res: Response, next: NextFunction) => void;
6
+ export declare const asyncHandler: (fn: Function) => (req: Request, res: Response, next: NextFunction) => void;
7
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/api/middleware.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAM1D,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SAW5E,CAAC;AAQF,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mDAkE/E,CAAC;AAMF,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mDAuC7E,CAAC;AAMF,eAAO,MAAM,YAAY,GACvB,OAAO,GAAG,EACV,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,MAAM,YAAY,SAUnB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,IAAI,QAAQ,MAAM,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SAE7F,CAAC"}