tebra-mcp-server 0.1.0 → 0.2.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 (103) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +267 -35
  3. package/dist/config.d.ts +12 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +12 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/fhir-client.d.ts +22 -0
  8. package/dist/fhir-client.d.ts.map +1 -0
  9. package/dist/fhir-client.js +86 -0
  10. package/dist/fhir-client.js.map +1 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +98 -6
  14. package/dist/index.js.map +1 -1
  15. package/dist/integrations/epic-notes-integration.d.ts +145 -0
  16. package/dist/integrations/epic-notes-integration.d.ts.map +1 -0
  17. package/dist/integrations/epic-notes-integration.js +227 -0
  18. package/dist/integrations/epic-notes-integration.js.map +1 -0
  19. package/dist/integrations/fal-integration.d.ts +109 -0
  20. package/dist/integrations/fal-integration.d.ts.map +1 -0
  21. package/dist/integrations/fal-integration.js +192 -0
  22. package/dist/integrations/fal-integration.js.map +1 -0
  23. package/dist/soap-client.d.ts +1 -0
  24. package/dist/soap-client.d.ts.map +1 -1
  25. package/dist/soap-client.js +68 -1
  26. package/dist/soap-client.js.map +1 -1
  27. package/dist/tools/appointment-crud.d.ts +117 -0
  28. package/dist/tools/appointment-crud.d.ts.map +1 -0
  29. package/dist/tools/appointment-crud.js +218 -0
  30. package/dist/tools/appointment-crud.js.map +1 -0
  31. package/dist/tools/appointment-detail.d.ts +25 -0
  32. package/dist/tools/appointment-detail.d.ts.map +1 -0
  33. package/dist/tools/appointment-detail.js +85 -0
  34. package/dist/tools/appointment-detail.js.map +1 -0
  35. package/dist/tools/appointment-reasons.d.ts +20 -0
  36. package/dist/tools/appointment-reasons.d.ts.map +1 -0
  37. package/dist/tools/appointment-reasons.js +48 -0
  38. package/dist/tools/appointment-reasons.js.map +1 -0
  39. package/dist/tools/appointments.d.ts +46 -0
  40. package/dist/tools/appointments.d.ts.map +1 -1
  41. package/dist/tools/appointments.js +71 -4
  42. package/dist/tools/appointments.js.map +1 -1
  43. package/dist/tools/authorizations.js +5 -5
  44. package/dist/tools/bulk-patients.d.ts +33 -0
  45. package/dist/tools/bulk-patients.d.ts.map +1 -0
  46. package/dist/tools/bulk-patients.js +81 -0
  47. package/dist/tools/bulk-patients.js.map +1 -0
  48. package/dist/tools/charges.d.ts +61 -0
  49. package/dist/tools/charges.d.ts.map +1 -1
  50. package/dist/tools/charges.js +98 -14
  51. package/dist/tools/charges.js.map +1 -1
  52. package/dist/tools/documents.d.ts +71 -0
  53. package/dist/tools/documents.d.ts.map +1 -0
  54. package/dist/tools/documents.js +139 -0
  55. package/dist/tools/documents.js.map +1 -0
  56. package/dist/tools/eligibility.js +5 -5
  57. package/dist/tools/encounter-status.d.ts +34 -0
  58. package/dist/tools/encounter-status.d.ts.map +1 -0
  59. package/dist/tools/encounter-status.js +73 -0
  60. package/dist/tools/encounter-status.js.map +1 -0
  61. package/dist/tools/encounters.js +29 -29
  62. package/dist/tools/external-ids.d.ts +66 -0
  63. package/dist/tools/external-ids.d.ts.map +1 -0
  64. package/dist/tools/external-ids.js +140 -0
  65. package/dist/tools/external-ids.js.map +1 -0
  66. package/dist/tools/fhir-clinical.d.ts +187 -0
  67. package/dist/tools/fhir-clinical.d.ts.map +1 -0
  68. package/dist/tools/fhir-clinical.js +597 -0
  69. package/dist/tools/fhir-clinical.js.map +1 -0
  70. package/dist/tools/patient-crud.d.ts +190 -0
  71. package/dist/tools/patient-crud.d.ts.map +1 -0
  72. package/dist/tools/patient-crud.js +297 -0
  73. package/dist/tools/patient-crud.js.map +1 -0
  74. package/dist/tools/patients.d.ts +87 -1
  75. package/dist/tools/patients.d.ts.map +1 -1
  76. package/dist/tools/patients.js +108 -8
  77. package/dist/tools/patients.js.map +1 -1
  78. package/dist/tools/payments.d.ts +105 -0
  79. package/dist/tools/payments.d.ts.map +1 -0
  80. package/dist/tools/payments.js +206 -0
  81. package/dist/tools/payments.js.map +1 -0
  82. package/dist/tools/practices.d.ts +20 -0
  83. package/dist/tools/practices.d.ts.map +1 -0
  84. package/dist/tools/practices.js +54 -0
  85. package/dist/tools/practices.js.map +1 -0
  86. package/dist/tools/procedure-codes.js +5 -5
  87. package/dist/tools/providers.d.ts +25 -0
  88. package/dist/tools/providers.d.ts.map +1 -0
  89. package/dist/tools/providers.js +62 -0
  90. package/dist/tools/providers.js.map +1 -0
  91. package/dist/tools/service-locations.d.ts +25 -0
  92. package/dist/tools/service-locations.d.ts.map +1 -0
  93. package/dist/tools/service-locations.js +62 -0
  94. package/dist/tools/service-locations.js.map +1 -0
  95. package/dist/tools/system.d.ts +81 -0
  96. package/dist/tools/system.d.ts.map +1 -0
  97. package/dist/tools/system.js +184 -0
  98. package/dist/tools/system.js.map +1 -0
  99. package/dist/tools/transactions.d.ts +61 -0
  100. package/dist/tools/transactions.d.ts.map +1 -0
  101. package/dist/tools/transactions.js +122 -0
  102. package/dist/tools/transactions.js.map +1 -0
  103. package/package.json +60 -54
@@ -0,0 +1,597 @@
1
+ "use strict";
2
+ /**
3
+ * Tebra MCP tools: FHIR R4 clinical data retrieval.
4
+ *
5
+ * 12 tools for accessing clinical data via Tebra's FHIR API:
6
+ * allergies, medications, conditions, vitals, labs, immunizations,
7
+ * procedures, care plans, care team, diagnostic reports, documents, devices.
8
+ *
9
+ * Only registered when FHIR credentials are configured.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fhirClinicalTools = void 0;
13
+ exports.handleFhirClinicalTool = handleFhirClinicalTool;
14
+ const fhir_client_js_1 = require("../fhir-client.js");
15
+ /**
16
+ * Extract resources from a FHIR Bundle response.
17
+ * Returns the resource array or an empty array if no entries.
18
+ */
19
+ function extractBundleResources(bundle) {
20
+ const b = bundle;
21
+ if (!b?.entry || !Array.isArray(b.entry))
22
+ return [];
23
+ return b.entry
24
+ .filter((e) => e.resource)
25
+ .map((e) => e.resource);
26
+ }
27
+ /** Extract a human-readable display from a CodeableConcept */
28
+ function codeDisplay(concept) {
29
+ if (!concept || typeof concept !== 'object')
30
+ return '';
31
+ const c = concept;
32
+ if (c.text)
33
+ return c.text;
34
+ if (c.coding?.[0]?.display)
35
+ return c.coding[0].display;
36
+ if (c.coding?.[0]?.code)
37
+ return c.coding[0].code;
38
+ return '';
39
+ }
40
+ /** Extract code value from a CodeableConcept */
41
+ function codeValue(concept) {
42
+ if (!concept || typeof concept !== 'object')
43
+ return '';
44
+ const c = concept;
45
+ return c.coding?.[0]?.code ?? '';
46
+ }
47
+ /** Extract a reference display */
48
+ function refDisplay(ref) {
49
+ if (!ref || typeof ref !== 'object')
50
+ return '';
51
+ const r = ref;
52
+ return r.display ?? r.reference ?? '';
53
+ }
54
+ // ─── Resource Summarizers ───────────────────────────────────────
55
+ function summarizeAllergyIntolerance(r) {
56
+ return {
57
+ id: r.id,
58
+ substance: codeDisplay(r.code),
59
+ clinicalStatus: codeDisplay(r.clinicalStatus),
60
+ verificationStatus: codeDisplay(r.verificationStatus),
61
+ type: r.type,
62
+ category: r.category,
63
+ criticality: r.criticality,
64
+ recordedDate: r.recordedDate,
65
+ reactions: Array.isArray(r.reaction)
66
+ ? r.reaction.map((rx) => ({
67
+ manifestations: rx.manifestation?.map((m) => codeDisplay(m)) ?? [],
68
+ severity: rx.severity,
69
+ }))
70
+ : [],
71
+ };
72
+ }
73
+ function summarizeMedicationRequest(r) {
74
+ return {
75
+ id: r.id,
76
+ medication: codeDisplay(r.medicationCodeableConcept) || refDisplay(r.medicationReference),
77
+ status: r.status,
78
+ intent: r.intent,
79
+ authoredOn: r.authoredOn,
80
+ requester: refDisplay(r.requester),
81
+ dosageInstructions: Array.isArray(r.dosageInstruction)
82
+ ? r.dosageInstruction.map((d) => d.text).filter(Boolean)
83
+ : [],
84
+ };
85
+ }
86
+ function summarizeCondition(r) {
87
+ return {
88
+ id: r.id,
89
+ condition: codeDisplay(r.code),
90
+ code: codeValue(r.code),
91
+ clinicalStatus: codeDisplay(r.clinicalStatus),
92
+ verificationStatus: codeDisplay(r.verificationStatus),
93
+ category: Array.isArray(r.category)
94
+ ? r.category.map((c) => codeDisplay(c))
95
+ : [],
96
+ onsetDateTime: r.onsetDateTime,
97
+ abatementDateTime: r.abatementDateTime,
98
+ recordedDate: r.recordedDate,
99
+ };
100
+ }
101
+ function summarizeObservation(r) {
102
+ const result = {
103
+ id: r.id,
104
+ type: codeDisplay(r.code),
105
+ code: codeValue(r.code),
106
+ status: r.status,
107
+ effectiveDateTime: r.effectiveDateTime,
108
+ issued: r.issued,
109
+ };
110
+ // Value can be in different shapes
111
+ if (r.valueQuantity) {
112
+ const vq = r.valueQuantity;
113
+ result.value = vq.value;
114
+ result.unit = vq.unit;
115
+ }
116
+ else if (r.valueCodeableConcept) {
117
+ result.value = codeDisplay(r.valueCodeableConcept);
118
+ }
119
+ else if (r.valueString) {
120
+ result.value = r.valueString;
121
+ }
122
+ // Reference ranges
123
+ if (Array.isArray(r.referenceRange)) {
124
+ result.referenceRange = r.referenceRange.map((rr) => ({
125
+ low: rr.low ? `${rr.low.value} ${rr.low.unit ?? ''}`.trim() : undefined,
126
+ high: rr.high ? `${rr.high.value} ${rr.high.unit ?? ''}`.trim() : undefined,
127
+ text: rr.text,
128
+ }));
129
+ }
130
+ // Component observations (e.g., BP systolic/diastolic)
131
+ if (Array.isArray(r.component)) {
132
+ result.components = r.component.map((comp) => ({
133
+ type: codeDisplay(comp.code),
134
+ value: comp.valueQuantity?.value,
135
+ unit: comp.valueQuantity?.unit,
136
+ }));
137
+ }
138
+ return result;
139
+ }
140
+ function summarizeImmunization(r) {
141
+ return {
142
+ id: r.id,
143
+ vaccine: codeDisplay(r.vaccineCode),
144
+ status: r.status,
145
+ occurrenceDateTime: r.occurrenceDateTime,
146
+ primarySource: r.primarySource,
147
+ performer: Array.isArray(r.performer)
148
+ ? r.performer.map((p) => refDisplay(p.actor))
149
+ : [],
150
+ };
151
+ }
152
+ function summarizeProcedure(r) {
153
+ return {
154
+ id: r.id,
155
+ procedure: codeDisplay(r.code),
156
+ code: codeValue(r.code),
157
+ status: r.status,
158
+ performedDateTime: r.performedDateTime,
159
+ performedPeriod: r.performedPeriod,
160
+ performer: Array.isArray(r.performer)
161
+ ? r.performer.map((p) => refDisplay(p.actor))
162
+ : [],
163
+ reasonCode: Array.isArray(r.reasonCode)
164
+ ? r.reasonCode.map((c) => codeDisplay(c))
165
+ : [],
166
+ };
167
+ }
168
+ function summarizeCarePlan(r) {
169
+ return {
170
+ id: r.id,
171
+ title: r.title,
172
+ status: r.status,
173
+ intent: r.intent,
174
+ category: Array.isArray(r.category)
175
+ ? r.category.map((c) => codeDisplay(c))
176
+ : [],
177
+ period: r.period,
178
+ activities: Array.isArray(r.activity)
179
+ ? r.activity.map((a) => ({
180
+ description: a.detail?.description,
181
+ code: codeDisplay(a.detail?.code),
182
+ status: a.detail?.status,
183
+ }))
184
+ : [],
185
+ };
186
+ }
187
+ function summarizeCareTeam(r) {
188
+ return {
189
+ id: r.id,
190
+ name: r.name,
191
+ status: r.status,
192
+ participants: Array.isArray(r.participant)
193
+ ? r.participant.map((p) => ({
194
+ role: p.role?.map((role) => codeDisplay(role)),
195
+ member: refDisplay(p.member),
196
+ }))
197
+ : [],
198
+ };
199
+ }
200
+ function summarizeDiagnosticReport(r) {
201
+ return {
202
+ id: r.id,
203
+ type: codeDisplay(r.code),
204
+ status: r.status,
205
+ category: Array.isArray(r.category)
206
+ ? r.category.map((c) => codeDisplay(c))
207
+ : [],
208
+ effectiveDateTime: r.effectiveDateTime,
209
+ issued: r.issued,
210
+ conclusion: r.conclusion,
211
+ results: Array.isArray(r.result)
212
+ ? r.result.map((res) => refDisplay(res))
213
+ : [],
214
+ };
215
+ }
216
+ function summarizeDocumentReference(r) {
217
+ return {
218
+ id: r.id,
219
+ type: codeDisplay(r.type),
220
+ status: r.status,
221
+ date: r.date,
222
+ description: r.description,
223
+ author: Array.isArray(r.author)
224
+ ? r.author.map((a) => refDisplay(a))
225
+ : [],
226
+ contentTypes: Array.isArray(r.content)
227
+ ? r.content.map((c) => ({
228
+ contentType: c.attachment?.contentType,
229
+ title: c.attachment?.title,
230
+ }))
231
+ : [],
232
+ };
233
+ }
234
+ function summarizeDevice(r) {
235
+ return {
236
+ id: r.id,
237
+ type: codeDisplay(r.type),
238
+ status: r.status,
239
+ manufacturer: r.manufacturer,
240
+ model: r.modelNumber,
241
+ serialNumber: r.serialNumber,
242
+ patient: refDisplay(r.patient),
243
+ udiCarrier: Array.isArray(r.udiCarrier)
244
+ ? r.udiCarrier.map((u) => u.deviceIdentifier)
245
+ : [],
246
+ };
247
+ }
248
+ // ─── Tool Definitions ───────────────────────────────────────────
249
+ exports.fhirClinicalTools = [
250
+ {
251
+ name: 'tebra_fhir_get_allergies',
252
+ description: 'Get patient allergy and intolerance data from Tebra FHIR API. Returns substance, clinical status, criticality, and reactions.',
253
+ inputSchema: {
254
+ type: 'object',
255
+ properties: {
256
+ patientId: {
257
+ type: 'string',
258
+ description: 'Tebra FHIR patient ID',
259
+ },
260
+ },
261
+ required: ['patientId'],
262
+ },
263
+ },
264
+ {
265
+ name: 'tebra_fhir_get_medications',
266
+ description: 'Get patient medication requests from Tebra FHIR API. Returns medication name, dosage, status, and prescriber.',
267
+ inputSchema: {
268
+ type: 'object',
269
+ properties: {
270
+ patientId: {
271
+ type: 'string',
272
+ description: 'Tebra FHIR patient ID',
273
+ },
274
+ status: {
275
+ type: 'string',
276
+ enum: ['active', 'completed', 'stopped'],
277
+ description: 'Filter by medication status',
278
+ },
279
+ },
280
+ required: ['patientId'],
281
+ },
282
+ },
283
+ {
284
+ name: 'tebra_fhir_get_conditions',
285
+ description: 'Get patient conditions/diagnoses from Tebra FHIR API. Returns condition name, ICD code, clinical status, and onset date.',
286
+ inputSchema: {
287
+ type: 'object',
288
+ properties: {
289
+ patientId: {
290
+ type: 'string',
291
+ description: 'Tebra FHIR patient ID',
292
+ },
293
+ clinicalStatus: {
294
+ type: 'string',
295
+ enum: ['active', 'resolved', 'inactive'],
296
+ description: 'Filter by clinical status',
297
+ },
298
+ },
299
+ required: ['patientId'],
300
+ },
301
+ },
302
+ {
303
+ name: 'tebra_fhir_get_vitals',
304
+ description: 'Get patient vital signs from Tebra FHIR API. Returns BP, HR, temp, weight, height, BMI, SpO2, etc.',
305
+ inputSchema: {
306
+ type: 'object',
307
+ properties: {
308
+ patientId: {
309
+ type: 'string',
310
+ description: 'Tebra FHIR patient ID',
311
+ },
312
+ fromDate: {
313
+ type: 'string',
314
+ description: 'Date range start (YYYY-MM-DD)',
315
+ },
316
+ toDate: {
317
+ type: 'string',
318
+ description: 'Date range end (YYYY-MM-DD)',
319
+ },
320
+ },
321
+ required: ['patientId'],
322
+ },
323
+ },
324
+ {
325
+ name: 'tebra_fhir_get_lab_results',
326
+ description: 'Get patient laboratory results from Tebra FHIR API. Returns test name, value, units, reference ranges.',
327
+ inputSchema: {
328
+ type: 'object',
329
+ properties: {
330
+ patientId: {
331
+ type: 'string',
332
+ description: 'Tebra FHIR patient ID',
333
+ },
334
+ fromDate: {
335
+ type: 'string',
336
+ description: 'Date range start (YYYY-MM-DD)',
337
+ },
338
+ toDate: {
339
+ type: 'string',
340
+ description: 'Date range end (YYYY-MM-DD)',
341
+ },
342
+ code: {
343
+ type: 'string',
344
+ description: 'LOINC code to filter by',
345
+ },
346
+ },
347
+ required: ['patientId'],
348
+ },
349
+ },
350
+ {
351
+ name: 'tebra_fhir_get_immunizations',
352
+ description: 'Get patient immunization history from Tebra FHIR API. Returns vaccine name, date administered, and status.',
353
+ inputSchema: {
354
+ type: 'object',
355
+ properties: {
356
+ patientId: {
357
+ type: 'string',
358
+ description: 'Tebra FHIR patient ID',
359
+ },
360
+ },
361
+ required: ['patientId'],
362
+ },
363
+ },
364
+ {
365
+ name: 'tebra_fhir_get_procedures',
366
+ description: 'Get patient procedure history from Tebra FHIR API. Returns procedure name, CPT code, date, and performer.',
367
+ inputSchema: {
368
+ type: 'object',
369
+ properties: {
370
+ patientId: {
371
+ type: 'string',
372
+ description: 'Tebra FHIR patient ID',
373
+ },
374
+ fromDate: {
375
+ type: 'string',
376
+ description: 'Date range start (YYYY-MM-DD)',
377
+ },
378
+ toDate: {
379
+ type: 'string',
380
+ description: 'Date range end (YYYY-MM-DD)',
381
+ },
382
+ },
383
+ required: ['patientId'],
384
+ },
385
+ },
386
+ {
387
+ name: 'tebra_fhir_get_care_plans',
388
+ description: 'Get patient care plans from Tebra FHIR API. Returns plan title, status, activities, and goals.',
389
+ inputSchema: {
390
+ type: 'object',
391
+ properties: {
392
+ patientId: {
393
+ type: 'string',
394
+ description: 'Tebra FHIR patient ID',
395
+ },
396
+ status: {
397
+ type: 'string',
398
+ enum: ['active', 'completed', 'draft', 'revoked'],
399
+ description: 'Filter by care plan status',
400
+ },
401
+ },
402
+ required: ['patientId'],
403
+ },
404
+ },
405
+ {
406
+ name: 'tebra_fhir_get_care_team',
407
+ description: 'Get patient care team from Tebra FHIR API. Returns team members with roles.',
408
+ inputSchema: {
409
+ type: 'object',
410
+ properties: {
411
+ patientId: {
412
+ type: 'string',
413
+ description: 'Tebra FHIR patient ID',
414
+ },
415
+ },
416
+ required: ['patientId'],
417
+ },
418
+ },
419
+ {
420
+ name: 'tebra_fhir_get_diagnostic_reports',
421
+ description: 'Get patient diagnostic reports from Tebra FHIR API. Returns report type, status, conclusion, and linked results.',
422
+ inputSchema: {
423
+ type: 'object',
424
+ properties: {
425
+ patientId: {
426
+ type: 'string',
427
+ description: 'Tebra FHIR patient ID',
428
+ },
429
+ category: {
430
+ type: 'string',
431
+ enum: ['LAB', 'RAD', 'PATH'],
432
+ description: 'Filter by category: LAB=Laboratory, RAD=Radiology, PATH=Pathology',
433
+ },
434
+ },
435
+ required: ['patientId'],
436
+ },
437
+ },
438
+ {
439
+ name: 'tebra_fhir_get_documents',
440
+ description: 'Get patient document references from Tebra FHIR API. Returns document type, author, date, and content metadata.',
441
+ inputSchema: {
442
+ type: 'object',
443
+ properties: {
444
+ patientId: {
445
+ type: 'string',
446
+ description: 'Tebra FHIR patient ID',
447
+ },
448
+ type: {
449
+ type: 'string',
450
+ description: 'Document type code filter',
451
+ },
452
+ },
453
+ required: ['patientId'],
454
+ },
455
+ },
456
+ {
457
+ name: 'tebra_fhir_get_devices',
458
+ description: 'Get patient-associated devices from Tebra FHIR API. Returns device type, manufacturer, model, and UDI.',
459
+ inputSchema: {
460
+ type: 'object',
461
+ properties: {
462
+ patientId: {
463
+ type: 'string',
464
+ description: 'Tebra FHIR patient ID',
465
+ },
466
+ },
467
+ required: ['patientId'],
468
+ },
469
+ },
470
+ ];
471
+ // ─── Tool Handler ───────────────────────────────────────────────
472
+ async function handleFhirClinicalTool(name, args) {
473
+ const config = (0, fhir_client_js_1.getFhirConfig)();
474
+ const patientId = String(args.patientId ?? '');
475
+ if (!patientId) {
476
+ return { content: [{ type: 'text', text: 'patientId is required.' }] };
477
+ }
478
+ switch (name) {
479
+ case 'tebra_fhir_get_allergies': {
480
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'AllergyIntolerance', { patient: patientId });
481
+ const resources = extractBundleResources(data);
482
+ return formatFhirResult(resources, 'allergies', summarizeAllergyIntolerance);
483
+ }
484
+ case 'tebra_fhir_get_medications': {
485
+ const params = { patient: patientId };
486
+ if (args.status)
487
+ params.status = String(args.status);
488
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'MedicationRequest', params);
489
+ const resources = extractBundleResources(data);
490
+ return formatFhirResult(resources, 'medications', summarizeMedicationRequest);
491
+ }
492
+ case 'tebra_fhir_get_conditions': {
493
+ const params = { patient: patientId };
494
+ if (args.clinicalStatus)
495
+ params['clinical-status'] = String(args.clinicalStatus);
496
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Condition', params);
497
+ const resources = extractBundleResources(data);
498
+ return formatFhirResult(resources, 'conditions', summarizeCondition);
499
+ }
500
+ case 'tebra_fhir_get_vitals': {
501
+ const params = {
502
+ patient: patientId,
503
+ category: 'vital-signs',
504
+ };
505
+ addDateRange(params, args);
506
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Observation', params);
507
+ const resources = extractBundleResources(data);
508
+ return formatFhirResult(resources, 'vital signs', summarizeObservation);
509
+ }
510
+ case 'tebra_fhir_get_lab_results': {
511
+ const params = {
512
+ patient: patientId,
513
+ category: 'laboratory',
514
+ };
515
+ addDateRange(params, args);
516
+ if (args.code)
517
+ params.code = String(args.code);
518
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Observation', params);
519
+ const resources = extractBundleResources(data);
520
+ return formatFhirResult(resources, 'lab results', summarizeObservation);
521
+ }
522
+ case 'tebra_fhir_get_immunizations': {
523
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Immunization', { patient: patientId });
524
+ const resources = extractBundleResources(data);
525
+ return formatFhirResult(resources, 'immunizations', summarizeImmunization);
526
+ }
527
+ case 'tebra_fhir_get_procedures': {
528
+ const params = { patient: patientId };
529
+ addDateRange(params, args);
530
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Procedure', params);
531
+ const resources = extractBundleResources(data);
532
+ return formatFhirResult(resources, 'procedures', summarizeProcedure);
533
+ }
534
+ case 'tebra_fhir_get_care_plans': {
535
+ const params = { patient: patientId };
536
+ if (args.status)
537
+ params.status = String(args.status);
538
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'CarePlan', params);
539
+ const resources = extractBundleResources(data);
540
+ return formatFhirResult(resources, 'care plans', summarizeCarePlan);
541
+ }
542
+ case 'tebra_fhir_get_care_team': {
543
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'CareTeam', { patient: patientId });
544
+ const resources = extractBundleResources(data);
545
+ return formatFhirResult(resources, 'care team records', summarizeCareTeam);
546
+ }
547
+ case 'tebra_fhir_get_diagnostic_reports': {
548
+ const params = { patient: patientId };
549
+ if (args.category)
550
+ params.category = String(args.category);
551
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'DiagnosticReport', params);
552
+ const resources = extractBundleResources(data);
553
+ return formatFhirResult(resources, 'diagnostic reports', summarizeDiagnosticReport);
554
+ }
555
+ case 'tebra_fhir_get_documents': {
556
+ const params = { patient: patientId };
557
+ if (args.type)
558
+ params.type = String(args.type);
559
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'DocumentReference', params);
560
+ const resources = extractBundleResources(data);
561
+ return formatFhirResult(resources, 'documents', summarizeDocumentReference);
562
+ }
563
+ case 'tebra_fhir_get_devices': {
564
+ const data = await (0, fhir_client_js_1.fhirRequest)(config, 'Device', { patient: patientId });
565
+ const resources = extractBundleResources(data);
566
+ return formatFhirResult(resources, 'devices', summarizeDevice);
567
+ }
568
+ default:
569
+ return { content: [{ type: 'text', text: `Unknown FHIR tool: ${name}` }] };
570
+ }
571
+ }
572
+ // ─── Helpers ────────────────────────────────────────────────────
573
+ function addDateRange(params, args) {
574
+ if (args.fromDate)
575
+ params.date = `ge${String(args.fromDate)}`;
576
+ if (args.toDate) {
577
+ // FHIR allows multiple date params via comma for AND
578
+ if (params.date) {
579
+ params.date = `${params.date}&date=le${String(args.toDate)}`;
580
+ }
581
+ else {
582
+ params.date = `le${String(args.toDate)}`;
583
+ }
584
+ }
585
+ }
586
+ function formatFhirResult(resources, label, summarizer) {
587
+ if (resources.length === 0) {
588
+ return {
589
+ content: [{ type: 'text', text: `No ${label} found for this patient.` }],
590
+ };
591
+ }
592
+ const summarized = resources.map(summarizer);
593
+ return {
594
+ content: [{ type: 'text', text: JSON.stringify(summarized, null, 2) }],
595
+ };
596
+ }
597
+ //# sourceMappingURL=fhir-clinical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-clinical.js","sourceRoot":"","sources":["../../src/tools/fhir-clinical.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAigBH,wDA8GC;AA7mBD,sDAA+D;AAqB/D;;;GAGG;AACH,SAAS,sBAAsB,CAAC,MAAe;IAC7C,MAAM,CAAC,GAAG,MAAoB,CAAC;IAC/B,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpD,OAAO,CAAC,CAAC,KAAK;SACX,MAAM,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAwB,CAAC,CAAC;AAC7D,CAAC;AAED,8DAA8D;AAC9D,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,CAAC,GAAG,OAAiF,CAAC;IAC5F,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,gDAAgD;AAChD,SAAS,SAAS,CAAC,OAAgB;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,CAAC,GAAG,OAAgD,CAAC;IAC3D,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,kCAAkC;AAClC,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,CAAC,GAAG,GAA+C,CAAC;IAC1D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,mEAAmE;AAEnE,SAAS,2BAA2B,CAAC,CAAe;IAClD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7C,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClC,CAAC,CAAE,CAAC,CAAC,QAAoE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnF,cAAc,EAAE,EAAE,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC3E,QAAQ,EAAE,EAAE,CAAC,QAAQ;aACtB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAe;IACjD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAClC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACpD,CAAC,CAAE,CAAC,CAAC,iBAA8C,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACtF,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAe;IACzC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACvB,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7C,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACrD,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjC,CAAC,CAAE,CAAC,CAAC,QAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,EAAE;QACN,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,YAAY,EAAE,CAAC,CAAC,YAAY;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAe;IAC3C,MAAM,MAAM,GAA4B;QACtC,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACzB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACvB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC;IAEF,mCAAmC;IACnC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,CAAC,CAAC,aAAkD,CAAC;QAChE,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACxB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACxB,CAAC;SAAM,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACrD,CAAC;SAAM,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,cAAc,GAAI,CAAC,CAAC,cAIxB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACf,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;YACvE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;YAC3E,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC,CAAC,CAAC;IACN,CAAC;IAED,uDAAuD;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,UAAU,GAAI,CAAC,CAAC,SAGpB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK;YAChC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAe;IAC5C,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QACnC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACnC,CAAC,CAAE,CAAC,CAAC,SAAwC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAe;IACzC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACvB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,eAAe,EAAE,CAAC,CAAC,eAAe;QAClC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YACnC,CAAC,CAAE,CAAC,CAAC,SAAwC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,CAAC,CAAC,EAAE;QACN,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrC,CAAC,CAAE,CAAC,CAAC,UAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAe;IACxC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjC,CAAC,CAAE,CAAC,CAAC,QAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,EAAE;QACN,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnC,CAAC,CAAE,CAAC,CAAC,QAA0F,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW;gBAClC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM;aACzB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAe;IACxC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YACxC,CAAC,CAAE,CAAC,CAAC,WAA6D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3E,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;aAC7B,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,CAAe;IAChD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjC,CAAC,CAAE,CAAC,CAAC,QAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,EAAE;QACN,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9B,CAAC,CAAE,CAAC,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAe;IACjD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAE,CAAC,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,EAAE;QACN,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACpC,CAAC,CAAE,CAAC,CAAC,OAA4E,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1F,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,WAAW;gBACtC,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK;aAC3B,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,CAAe;IACtC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,KAAK,EAAE,CAAC,CAAC,WAAW;QACpB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9B,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrC,CAAC,CAAE,CAAC,CAAC,UAAmD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACvF,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEtD,QAAA,iBAAiB,GAAG;IAC/B;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,+HAA+H;QACjI,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,+GAA+G;QACjH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;oBACxC,WAAW,EAAE,6BAA6B;iBAC3C;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,0HAA0H;QAC5H,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;oBACxC,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACT,4GAA4G;QAC9G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,2GAA2G;QAC7G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,gGAAgG;QAClG,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC;oBACjD,WAAW,EAAE,4BAA4B;iBAC1C;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,mCAAmC;QACzC,WAAW,EACT,kHAAkH;QACpH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;oBAC5B,WAAW,EAAE,mEAAmE;iBACjF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,iHAAiH;QACnH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2BAA2B;iBACzC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;CACF,CAAC;AAEF,mEAAmE;AAE5D,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,IAA6B;IAE7B,MAAM,MAAM,GAAG,IAAA,8BAAa,GAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,2BAA2B,CAAC,CAAC;QAC/E,CAAC;QAED,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,0BAA0B,CAAC,CAAC;QAChF,CAAC;QAED,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,cAAc;gBAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAA2B;gBACrC,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,aAAa;aACxB,CAAC;YACF,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAA2B;gBACrC,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,YAAY;aACvB,CAAC;YACF,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAC7E,CAAC;QAED,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC7E,CAAC;QAED,KAAK,mCAAmC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,EAAE,yBAAyB,CAAC,CAAC;QACtF,CAAC;QAED,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC;QAC9E,CAAC;QAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAW,EAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACzE,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/C,OAAO,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,CAAC;QAED;YACE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,mEAAmE;AAEnE,SAAS,YAAY,CACnB,MAA8B,EAC9B,IAA6B;IAE7B,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,qDAAqD;QACrD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,SAAyB,EACzB,KAAa,EACb,UAAwD;IAExD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,0BAA0B,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC;AACJ,CAAC"}