tebra-mcp-server 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +21 -1
- package/dist/index.js +40 -8
- package/dist/index.js.map +1 -1
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +48 -10
- package/dist/soap-client.js.map +1 -1
- package/dist/tools/fhir/allergies.d.ts +24 -0
- package/dist/tools/fhir/allergies.d.ts.map +1 -0
- package/dist/tools/fhir/allergies.js +52 -0
- package/dist/tools/fhir/allergies.js.map +1 -0
- package/dist/tools/fhir/care-plans.d.ts +29 -0
- package/dist/tools/fhir/care-plans.d.ts.map +1 -0
- package/dist/tools/fhir/care-plans.js +61 -0
- package/dist/tools/fhir/care-plans.js.map +1 -0
- package/dist/tools/fhir/care-team.d.ts +24 -0
- package/dist/tools/fhir/care-team.d.ts.map +1 -0
- package/dist/tools/fhir/care-team.js +47 -0
- package/dist/tools/fhir/care-team.js.map +1 -0
- package/dist/tools/fhir/conditions.d.ts +29 -0
- package/dist/tools/fhir/conditions.d.ts.map +1 -0
- package/dist/tools/fhir/conditions.js +57 -0
- package/dist/tools/fhir/conditions.js.map +1 -0
- package/dist/tools/fhir/devices.d.ts +24 -0
- package/dist/tools/fhir/devices.d.ts.map +1 -0
- package/dist/tools/fhir/devices.js +48 -0
- package/dist/tools/fhir/devices.js.map +1 -0
- package/dist/tools/fhir/diagnostic-reports.d.ts +29 -0
- package/dist/tools/fhir/diagnostic-reports.d.ts.map +1 -0
- package/dist/tools/fhir/diagnostic-reports.js +58 -0
- package/dist/tools/fhir/diagnostic-reports.js.map +1 -0
- package/dist/tools/fhir/documents.d.ts +30 -0
- package/dist/tools/fhir/documents.d.ts.map +1 -0
- package/dist/tools/fhir/documents.js +61 -0
- package/dist/tools/fhir/documents.js.map +1 -0
- package/dist/tools/fhir/helpers.d.ts +37 -0
- package/dist/tools/fhir/helpers.d.ts.map +1 -0
- package/dist/tools/fhir/helpers.js +113 -0
- package/dist/tools/fhir/helpers.js.map +1 -0
- package/dist/tools/fhir/immunizations.d.ts +24 -0
- package/dist/tools/fhir/immunizations.d.ts.map +1 -0
- package/dist/tools/fhir/immunizations.js +46 -0
- package/dist/tools/fhir/immunizations.js.map +1 -0
- package/dist/tools/fhir/lab-results.d.ts +36 -0
- package/dist/tools/fhir/lab-results.d.ts.map +1 -0
- package/dist/tools/fhir/lab-results.js +53 -0
- package/dist/tools/fhir/lab-results.js.map +1 -0
- package/dist/tools/fhir/medications.d.ts +29 -0
- package/dist/tools/fhir/medications.d.ts.map +1 -0
- package/dist/tools/fhir/medications.js +55 -0
- package/dist/tools/fhir/medications.js.map +1 -0
- package/dist/tools/fhir/procedures.d.ts +32 -0
- package/dist/tools/fhir/procedures.d.ts.map +1 -0
- package/dist/tools/fhir/procedures.js +60 -0
- package/dist/tools/fhir/procedures.js.map +1 -0
- package/dist/tools/fhir/vitals.d.ts +32 -0
- package/dist/tools/fhir/vitals.d.ts.map +1 -0
- package/dist/tools/fhir/vitals.js +47 -0
- package/dist/tools/fhir/vitals.js.map +1 -0
- package/package.json +62 -61
- package/dist/tools/fhir-clinical.d.ts +0 -187
- package/dist/tools/fhir-clinical.d.ts.map +0 -1
- package/dist/tools/fhir-clinical.js +0 -597
- package/dist/tools/fhir-clinical.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 James Rosing, MD, FACS / Allure MD Plastic Surgery and Dermatology
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 James H. Rosing, MD, FACS / Allure MD Plastic Surgery and Dermatology
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -332,4 +332,24 @@ npm run dev # Uses tsx for direct TypeScript execution
|
|
|
332
332
|
|
|
333
333
|
## License
|
|
334
334
|
|
|
335
|
-
MIT
|
|
335
|
+
MIT License
|
|
336
|
+
|
|
337
|
+
Copyright (c) 2026 James H. Rosing, MD, FACS
|
|
338
|
+
|
|
339
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
340
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
341
|
+
in the Software without restriction, including without limitation the rights
|
|
342
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
343
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
344
|
+
furnished to do so, subject to the following conditions:
|
|
345
|
+
|
|
346
|
+
The above copyright notice and this permission notice shall be included in all
|
|
347
|
+
copies or substantial portions of the Software.
|
|
348
|
+
|
|
349
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
350
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
351
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
352
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
353
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
354
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
355
|
+
SOFTWARE.
|
package/dist/index.js
CHANGED
|
@@ -47,14 +47,25 @@ const documents_js_1 = require("./tools/documents.js");
|
|
|
47
47
|
const bulk_patients_js_1 = require("./tools/bulk-patients.js");
|
|
48
48
|
const external_ids_js_1 = require("./tools/external-ids.js");
|
|
49
49
|
const system_js_1 = require("./tools/system.js");
|
|
50
|
-
// FHIR tool imports
|
|
51
|
-
const
|
|
50
|
+
// FHIR tool imports — one file per resource
|
|
51
|
+
const allergies_js_1 = require("./tools/fhir/allergies.js");
|
|
52
|
+
const medications_js_1 = require("./tools/fhir/medications.js");
|
|
53
|
+
const conditions_js_1 = require("./tools/fhir/conditions.js");
|
|
54
|
+
const vitals_js_1 = require("./tools/fhir/vitals.js");
|
|
55
|
+
const lab_results_js_1 = require("./tools/fhir/lab-results.js");
|
|
56
|
+
const immunizations_js_1 = require("./tools/fhir/immunizations.js");
|
|
57
|
+
const procedures_js_1 = require("./tools/fhir/procedures.js");
|
|
58
|
+
const care_plans_js_1 = require("./tools/fhir/care-plans.js");
|
|
59
|
+
const care_team_js_1 = require("./tools/fhir/care-team.js");
|
|
60
|
+
const diagnostic_reports_js_1 = require("./tools/fhir/diagnostic-reports.js");
|
|
61
|
+
const documents_js_2 = require("./tools/fhir/documents.js");
|
|
62
|
+
const devices_js_1 = require("./tools/fhir/devices.js");
|
|
52
63
|
// ─── Validate config on startup ─────────────────────────────────
|
|
53
64
|
const config = (0, config_js_1.getConfig)();
|
|
54
65
|
// ─── Create MCP Server ──────────────────────────────────────────
|
|
55
66
|
const server = new index_js_1.Server({
|
|
56
67
|
name: '@allure-md/tebra-mcp-server',
|
|
57
|
-
version: '0.2.
|
|
68
|
+
version: '0.2.3', // Keep in sync with package.json
|
|
58
69
|
}, {
|
|
59
70
|
capabilities: {
|
|
60
71
|
tools: {},
|
|
@@ -86,7 +97,7 @@ const allTools = [
|
|
|
86
97
|
];
|
|
87
98
|
// Conditionally register FHIR tools when credentials are available
|
|
88
99
|
if ((0, fhir_client_js_1.isFhirConfigured)()) {
|
|
89
|
-
allTools.push(...
|
|
100
|
+
allTools.push(...allergies_js_1.fhirAllergyTools, ...medications_js_1.fhirMedicationTools, ...conditions_js_1.fhirConditionTools, ...vitals_js_1.fhirVitalsTools, ...lab_results_js_1.fhirLabResultsTools, ...immunizations_js_1.fhirImmunizationTools, ...procedures_js_1.fhirProcedureTools, ...care_plans_js_1.fhirCarePlanTools, ...care_team_js_1.fhirCareTeamTools, ...diagnostic_reports_js_1.fhirDiagnosticReportTools, ...documents_js_2.fhirDocumentTools, ...devices_js_1.fhirDeviceTools);
|
|
90
101
|
console.error('FHIR tools enabled — 12 clinical data tools registered');
|
|
91
102
|
}
|
|
92
103
|
else {
|
|
@@ -165,11 +176,32 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
165
176
|
case 'tebra_update_patient_case':
|
|
166
177
|
case 'tebra_create_appointment_reason':
|
|
167
178
|
return await (0, system_js_1.handleSystemTool)(name, safeArgs, config);
|
|
179
|
+
// ─── FHIR tools (one file per resource) ─────────
|
|
180
|
+
case 'tebra_fhir_get_allergies':
|
|
181
|
+
return await (0, allergies_js_1.handleFhirAllergyTool)(name, safeArgs);
|
|
182
|
+
case 'tebra_fhir_get_medications':
|
|
183
|
+
return await (0, medications_js_1.handleFhirMedicationTool)(name, safeArgs);
|
|
184
|
+
case 'tebra_fhir_get_conditions':
|
|
185
|
+
return await (0, conditions_js_1.handleFhirConditionTool)(name, safeArgs);
|
|
186
|
+
case 'tebra_fhir_get_vitals':
|
|
187
|
+
return await (0, vitals_js_1.handleFhirVitalsTool)(name, safeArgs);
|
|
188
|
+
case 'tebra_fhir_get_lab_results':
|
|
189
|
+
return await (0, lab_results_js_1.handleFhirLabResultsTool)(name, safeArgs);
|
|
190
|
+
case 'tebra_fhir_get_immunizations':
|
|
191
|
+
return await (0, immunizations_js_1.handleFhirImmunizationTool)(name, safeArgs);
|
|
192
|
+
case 'tebra_fhir_get_procedures':
|
|
193
|
+
return await (0, procedures_js_1.handleFhirProcedureTool)(name, safeArgs);
|
|
194
|
+
case 'tebra_fhir_get_care_plans':
|
|
195
|
+
return await (0, care_plans_js_1.handleFhirCarePlanTool)(name, safeArgs);
|
|
196
|
+
case 'tebra_fhir_get_care_team':
|
|
197
|
+
return await (0, care_team_js_1.handleFhirCareTeamTool)(name, safeArgs);
|
|
198
|
+
case 'tebra_fhir_get_diagnostic_reports':
|
|
199
|
+
return await (0, diagnostic_reports_js_1.handleFhirDiagnosticReportTool)(name, safeArgs);
|
|
200
|
+
case 'tebra_fhir_get_documents':
|
|
201
|
+
return await (0, documents_js_2.handleFhirDocumentTool)(name, safeArgs);
|
|
202
|
+
case 'tebra_fhir_get_devices':
|
|
203
|
+
return await (0, devices_js_1.handleFhirDeviceTool)(name, safeArgs);
|
|
168
204
|
default:
|
|
169
|
-
// Route FHIR tools by prefix
|
|
170
|
-
if (name.startsWith('tebra_fhir_')) {
|
|
171
|
-
return await (0, fhir_clinical_js_1.handleFhirClinicalTool)(name, safeArgs);
|
|
172
|
-
}
|
|
173
205
|
return {
|
|
174
206
|
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
175
207
|
isError: true,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;GAkBG;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAE5C,2CAAwC;AACxC,qDAAoD;AAEpD,oBAAoB;AACpB,qDAAsE;AACtE,yDAA4E;AAC5E,iEAAwF;AACxF,6DAAkF;AAClF,2DAAiF;AACjF,mDAAmE;AACnE,mEAAyF;AACzF,uDAAyE;AACzE,uEAA+F;AAC/F,2EAAqG;AACrG,qEAA8F;AAC9F,yEAAoG;AACpG,6DAAkF;AAClF,qEAA8F;AAC9F,qDAAsE;AACtE,6DAAkF;AAClF,uDAAyE;AACzE,uDAAyE;AACzE,+DAAmF;AACnF,6DAAgF;AAChF,iDAAkE;AAElE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;GAkBG;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAE5C,2CAAwC;AACxC,qDAAoD;AAEpD,oBAAoB;AACpB,qDAAsE;AACtE,yDAA4E;AAC5E,iEAAwF;AACxF,6DAAkF;AAClF,2DAAiF;AACjF,mDAAmE;AACnE,mEAAyF;AACzF,uDAAyE;AACzE,uEAA+F;AAC/F,2EAAqG;AACrG,qEAA8F;AAC9F,yEAAoG;AACpG,6DAAkF;AAClF,qEAA8F;AAC9F,qDAAsE;AACtE,6DAAkF;AAClF,uDAAyE;AACzE,uDAAyE;AACzE,+DAAmF;AACnF,6DAAgF;AAChF,iDAAkE;AAElE,4CAA4C;AAC5C,4DAAoF;AACpF,gEAA4F;AAC5F,8DAAyF;AACzF,sDAA+E;AAC/E,gEAA4F;AAC5F,oEAAkG;AAClG,8DAAyF;AACzF,8DAAuF;AACvF,4DAAsF;AACtF,8EAA+G;AAC/G,4DAAsF;AACtF,wDAAgF;AAEhF,mEAAmE;AAEnE,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;AAE3B,mEAAmE;AAEnE,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;IACE,IAAI,EAAE,6BAA6B;IACnC,OAAO,EAAE,OAAO,EAAG,iCAAiC;CACrD,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,mEAAmE;AAEnE,MAAM,QAAQ,GAAG;IACf,GAAG,0BAAY;IACf,GAAG,8BAAc;IACjB,GAAG,sCAAkB;IACrB,GAAG,kCAAgB;IACnB,GAAG,iCAAgB;IACnB,GAAG,wBAAW;IACd,GAAG,uCAAkB;IACrB,GAAG,4BAAa;IAChB,GAAG,2CAAoB;IACvB,GAAG,+CAAsB;IACzB,GAAG,0CAAoB;IACvB,GAAG,8CAAsB;IACzB,GAAG,kCAAgB;IACnB,GAAG,0CAAoB;IACvB,GAAG,0BAAY;IACf,GAAG,kCAAgB;IACnB,GAAG,4BAAa;IAChB,GAAG,4BAAa;IAChB,GAAG,mCAAgB;IACnB,GAAG,iCAAe;IAClB,GAAG,uBAAW;CACf,CAAC;AAEF,mEAAmE;AACnE,IAAI,IAAA,iCAAgB,GAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,CACX,GAAG,+BAAgB,EACnB,GAAG,oCAAmB,EACtB,GAAG,kCAAkB,EACrB,GAAG,2BAAe,EAClB,GAAG,oCAAmB,EACtB,GAAG,wCAAqB,EACxB,GAAG,kCAAkB,EACrB,GAAG,iCAAiB,EACpB,GAAG,gCAAiB,EACpB,GAAG,iDAAyB,EAC5B,GAAG,gCAAiB,EACpB,GAAG,4BAAe,CACnB,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC1E,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,2GAA2G,CAAC,CAAC;AAC7H,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,mBAAmB,CAAC,CAAC;AAEvE,mEAAmE;AAEnE,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAE5B,QAAQ,IAAI,EAAE,CAAC;YACb,mDAAmD;YACnD,KAAK,uBAAuB,CAAC;YAC7B,KAAK,mBAAmB;gBACtB,OAAO,MAAM,IAAA,+BAAiB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEzD,KAAK,sBAAsB,CAAC;YAC5B,KAAK,sBAAsB;gBACzB,OAAO,MAAM,IAAA,uCAAqB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7D,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,IAAA,wCAAqB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7D,mDAAmD;YACnD,KAAK,kCAAkC;gBACrC,OAAO,MAAM,IAAA,2CAAuB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE/D,KAAK,mCAAmC;gBACtC,OAAO,MAAM,IAAA,sCAAqB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7D,mDAAmD;YACnD,KAAK,qBAAqB,CAAC;YAC3B,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,IAAA,mCAAmB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE3D,KAAK,+BAA+B;gBAClC,OAAO,MAAM,IAAA,+CAAyB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjE,mDAAmD;YACnD,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,IAAA,uCAAqB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7D,KAAK,8BAA8B;gBACjC,OAAO,MAAM,IAAA,mDAA2B,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnE,KAAK,0BAA0B,CAAC;YAChC,KAAK,0BAA0B,CAAC;YAChC,KAAK,0BAA0B;gBAC7B,OAAO,MAAM,IAAA,+CAAyB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjE,KAAK,+BAA+B;gBAClC,OAAO,MAAM,IAAA,oDAA2B,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnE,mDAAmD;YACnD,KAAK,mBAAmB;gBACtB,OAAO,MAAM,IAAA,6BAAgB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAExD,KAAK,oBAAoB,CAAC;YAC1B,KAAK,sBAAsB;gBACzB,OAAO,MAAM,IAAA,+BAAiB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEzD,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,IAAA,uCAAqB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE7D,mDAAmD;YACnD,KAAK,qBAAqB;gBACxB,OAAO,MAAM,IAAA,iCAAkB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE1D,KAAK,6BAA6B;gBAChC,OAAO,MAAM,IAAA,gDAAyB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEjE,KAAK,qBAAqB;gBACxB,OAAO,MAAM,IAAA,iCAAkB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE1D,KAAK,2BAA2B;gBAC9B,OAAO,MAAM,IAAA,4CAAuB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE/D,mDAAmD;YACnD,KAAK,uBAAuB,CAAC;YAC7B,KAAK,uBAAuB;gBAC1B,OAAO,MAAM,IAAA,iCAAkB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE1D,mDAAmD;YACnD,KAAK,kCAAkC,CAAC;YACxC,KAAK,gCAAgC,CAAC;YACtC,KAAK,4BAA4B;gBAC/B,OAAO,MAAM,IAAA,sCAAoB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE5D,KAAK,qBAAqB,CAAC;YAC3B,KAAK,2BAA2B,CAAC;YACjC,KAAK,2BAA2B,CAAC;YACjC,KAAK,iCAAiC;gBACpC,OAAO,MAAM,IAAA,4BAAgB,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAExD,mDAAmD;YACnD,KAAK,0BAA0B;gBAC7B,OAAO,MAAM,IAAA,oCAAqB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAErD,KAAK,4BAA4B;gBAC/B,OAAO,MAAM,IAAA,yCAAwB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAExD,KAAK,2BAA2B;gBAC9B,OAAO,MAAM,IAAA,uCAAuB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEvD,KAAK,uBAAuB;gBAC1B,OAAO,MAAM,IAAA,gCAAoB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEpD,KAAK,4BAA4B;gBAC/B,OAAO,MAAM,IAAA,yCAAwB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAExD,KAAK,8BAA8B;gBACjC,OAAO,MAAM,IAAA,6CAA0B,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE1D,KAAK,2BAA2B;gBAC9B,OAAO,MAAM,IAAA,uCAAuB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEvD,KAAK,2BAA2B;gBAC9B,OAAO,MAAM,IAAA,sCAAsB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtD,KAAK,0BAA0B;gBAC7B,OAAO,MAAM,IAAA,qCAAsB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtD,KAAK,mCAAmC;gBACtC,OAAO,MAAM,IAAA,sDAA8B,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE9D,KAAK,0BAA0B;gBAC7B,OAAO,MAAM,IAAA,qCAAsB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEtD,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,IAAA,iCAAoB,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAEpD;gBACE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;oBAC1D,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,IAAI,KAAK,OAAO,EAAE,EAAE,CAAC;YACjE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soap-client.d.ts","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"soap-client.d.ts","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA+C/C,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIlE;AAiGD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CA0EjB"}
|
package/dist/soap-client.js
CHANGED
|
@@ -17,6 +17,11 @@ exports.soapRequest = soapRequest;
|
|
|
17
17
|
const MAX_RETRIES = 3;
|
|
18
18
|
const BASE_DELAY_MS = 1000;
|
|
19
19
|
const SOAP_NAMESPACE = 'http://www.kareo.com/api/schemas/';
|
|
20
|
+
// WCF service contract name. The SOAPAction header must be
|
|
21
|
+
// `${SOAP_NAMESPACE}${SOAP_CONTRACT}/${operation}` — omitting the contract
|
|
22
|
+
// segment causes a "ContractFilter mismatch at the EndpointDispatcher"
|
|
23
|
+
// HTTP 500 from Kareo's WCF dispatcher.
|
|
24
|
+
const SOAP_CONTRACT = 'KareoServices';
|
|
20
25
|
// ─── Per-Endpoint Rate Limits (ms) from Tebra API Technical Guide ──
|
|
21
26
|
const ENDPOINT_RATE_LIMITS = {
|
|
22
27
|
GetAllPatients: 5000,
|
|
@@ -70,24 +75,44 @@ function extractNumber(xml, tagName) {
|
|
|
70
75
|
return isNaN(num) ? 0 : num;
|
|
71
76
|
}
|
|
72
77
|
// ─── Envelope Builder ───────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Inject the RequestHeader (User/Password/CustomerKey) as the first child of
|
|
80
|
+
* the operation's <kar:request> element. Tebra's WSDL declares RequestHeader
|
|
81
|
+
* as a body parameter — placing it in <soap:Header> causes WCF to reject the
|
|
82
|
+
* request before authentication is even checked.
|
|
83
|
+
*/
|
|
84
|
+
function injectRequestHeader(config, bodyXml) {
|
|
85
|
+
const header = `<kar:RequestHeader>` +
|
|
86
|
+
`<kar:CustomerKey>${escapeXml(config.customerKey)}</kar:CustomerKey>` +
|
|
87
|
+
`<kar:User>${escapeXml(config.user)}</kar:User>` +
|
|
88
|
+
`<kar:Password>${escapeXml(config.password)}</kar:Password>` +
|
|
89
|
+
`</kar:RequestHeader>`;
|
|
90
|
+
// Body is always wrapped in <kar:request>...</kar:request>. Insert the
|
|
91
|
+
// header immediately after the opening tag so it's the first child.
|
|
92
|
+
const openTagPattern = /<kar:request(\s[^>]*)?>/;
|
|
93
|
+
if (!openTagPattern.test(bodyXml)) {
|
|
94
|
+
throw new Error('soapRequest body must be wrapped in <kar:request>...</kar:request>');
|
|
95
|
+
}
|
|
96
|
+
return bodyXml.replace(openTagPattern, (match) => `${match}${header}`);
|
|
97
|
+
}
|
|
73
98
|
function buildEnvelope(config, action, bodyXml) {
|
|
99
|
+
const bodyWithHeader = injectRequestHeader(config, bodyXml);
|
|
74
100
|
return `<?xml version="1.0" encoding="utf-8"?>
|
|
75
101
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
|
76
102
|
xmlns:kar="${SOAP_NAMESPACE}">
|
|
77
|
-
<soap:Header>
|
|
78
|
-
<kar:RequestHeader>
|
|
79
|
-
<kar:User>${escapeXml(config.user)}</kar:User>
|
|
80
|
-
<kar:Password>${escapeXml(config.password)}</kar:Password>
|
|
81
|
-
<kar:CustomerKey>${escapeXml(config.customerKey)}</kar:CustomerKey>
|
|
82
|
-
</kar:RequestHeader>
|
|
83
|
-
</soap:Header>
|
|
84
103
|
<soap:Body>
|
|
85
104
|
<kar:${action}>
|
|
86
|
-
${
|
|
105
|
+
${bodyWithHeader}
|
|
87
106
|
</kar:${action}>
|
|
88
107
|
</soap:Body>
|
|
89
108
|
</soap:Envelope>`;
|
|
90
109
|
}
|
|
110
|
+
function redactSecrets(xml) {
|
|
111
|
+
return xml
|
|
112
|
+
.replace(/<kar:User>[^<]*<\/kar:User>/g, '<kar:User>***</kar:User>')
|
|
113
|
+
.replace(/<kar:Password>[^<]*<\/kar:Password>/g, '<kar:Password>***</kar:Password>')
|
|
114
|
+
.replace(/<kar:CustomerKey>[^<]*<\/kar:CustomerKey>/g, '<kar:CustomerKey>***</kar:CustomerKey>');
|
|
115
|
+
}
|
|
91
116
|
// ─── SecurityResponse Check ─────────────────────────────────────
|
|
92
117
|
function checkSecurityResponse(responseXml, action) {
|
|
93
118
|
const securityBlock = extractTag(responseXml, 'SecurityResponse');
|
|
@@ -126,9 +151,18 @@ async function enforceRateLimit(action) {
|
|
|
126
151
|
lastCallTimestamps[action] = Date.now();
|
|
127
152
|
}
|
|
128
153
|
async function soapRequest(config, action, bodyXml) {
|
|
129
|
-
const soapAction = `${SOAP_NAMESPACE}${action}`;
|
|
154
|
+
const soapAction = `${SOAP_NAMESPACE}${SOAP_CONTRACT}/${action}`;
|
|
155
|
+
// SOAP 1.1 requires SOAPAction to be a quoted string (RFC 3902 §3.2).
|
|
156
|
+
// WCF dispatchers can reject unquoted values with a ContractFilter mismatch.
|
|
157
|
+
const soapActionHeader = `"${soapAction}"`;
|
|
130
158
|
const envelope = buildEnvelope(config, action, bodyXml);
|
|
159
|
+
const debug = process.env.TEBRA_SOAP_DEBUG === '1' || process.env.TEBRA_SOAP_DEBUG === 'true';
|
|
131
160
|
let lastError = null;
|
|
161
|
+
if (debug) {
|
|
162
|
+
console.error(`[tebra-soap] POST ${config.endpoint}`);
|
|
163
|
+
console.error(`[tebra-soap] SOAPAction: ${soapActionHeader}`);
|
|
164
|
+
console.error(`[tebra-soap] Request body:\n${redactSecrets(envelope)}`);
|
|
165
|
+
}
|
|
132
166
|
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
133
167
|
try {
|
|
134
168
|
// Pre-emptive rate limiting
|
|
@@ -137,11 +171,15 @@ async function soapRequest(config, action, bodyXml) {
|
|
|
137
171
|
method: 'POST',
|
|
138
172
|
headers: {
|
|
139
173
|
'Content-Type': 'text/xml; charset=utf-8',
|
|
140
|
-
SOAPAction:
|
|
174
|
+
SOAPAction: soapActionHeader,
|
|
141
175
|
},
|
|
142
176
|
body: envelope,
|
|
143
177
|
});
|
|
144
178
|
const responseText = await response.text();
|
|
179
|
+
if (debug) {
|
|
180
|
+
console.error(`[tebra-soap] HTTP ${response.status} for ${action}`);
|
|
181
|
+
console.error(`[tebra-soap] Response body:\n${responseText.slice(0, 2000)}`);
|
|
182
|
+
}
|
|
145
183
|
if (!response.ok) {
|
|
146
184
|
const faultString = extractTag(responseText, 'faultstring');
|
|
147
185
|
throw new Error(`SOAP ${action} failed (HTTP ${response.status}): ${faultString || response.statusText}`);
|
package/dist/soap-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soap-client.js","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;
|
|
1
|
+
{"version":3,"file":"soap-client.js","sourceRoot":"","sources":["../src/soap-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIR AllergyIntolerance — patient allergies and intolerances.
|
|
3
|
+
*/
|
|
4
|
+
export declare const fhirAllergyTools: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
patientId: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
required: string[];
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
export declare function handleFhirAllergyTool(_name: string, args: Record<string, unknown>): Promise<{
|
|
19
|
+
content: Array<{
|
|
20
|
+
type: string;
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=allergies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allergies.d.ts","sourceRoot":"","sources":["../../../src/tools/fhir/allergies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;GAgB5B,CAAC;AAqBF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAQ7D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FHIR AllergyIntolerance — patient allergies and intolerances.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fhirAllergyTools = void 0;
|
|
7
|
+
exports.handleFhirAllergyTool = handleFhirAllergyTool;
|
|
8
|
+
const helpers_js_1 = require("./helpers.js");
|
|
9
|
+
exports.fhirAllergyTools = [
|
|
10
|
+
{
|
|
11
|
+
name: 'tebra_fhir_get_allergies',
|
|
12
|
+
description: 'Get patient allergy and intolerance data from Tebra FHIR API. Returns substance, clinical status, criticality, and reactions.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
patientId: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Tebra FHIR patient ID',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
required: ['patientId'],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
function summarize(r) {
|
|
26
|
+
return {
|
|
27
|
+
id: r.id,
|
|
28
|
+
substance: (0, helpers_js_1.codeDisplay)(r.code),
|
|
29
|
+
clinicalStatus: (0, helpers_js_1.codeDisplay)(r.clinicalStatus),
|
|
30
|
+
verificationStatus: (0, helpers_js_1.codeDisplay)(r.verificationStatus),
|
|
31
|
+
type: r.type,
|
|
32
|
+
category: r.category,
|
|
33
|
+
criticality: r.criticality,
|
|
34
|
+
recordedDate: r.recordedDate,
|
|
35
|
+
reactions: Array.isArray(r.reaction)
|
|
36
|
+
? r.reaction.map((rx) => ({
|
|
37
|
+
manifestations: rx.manifestation?.map((m) => (0, helpers_js_1.codeDisplay)(m)) ?? [],
|
|
38
|
+
severity: rx.severity,
|
|
39
|
+
}))
|
|
40
|
+
: [],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function handleFhirAllergyTool(_name, args) {
|
|
44
|
+
const config = (0, helpers_js_1.getFhirConfig)();
|
|
45
|
+
const patientId = String(args.patientId ?? '');
|
|
46
|
+
if (!patientId)
|
|
47
|
+
return { content: [{ type: 'text', text: 'patientId is required.' }] };
|
|
48
|
+
const data = await (0, helpers_js_1.fhirRequest)(config, 'AllergyIntolerance', { patient: patientId });
|
|
49
|
+
const resources = (0, helpers_js_1.extractBundleResources)(data);
|
|
50
|
+
return (0, helpers_js_1.formatFhirResult)(resources, 'allergies', summarize);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=allergies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allergies.js","sourceRoot":"","sources":["../../../src/tools/fhir/allergies.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgDH,sDAWC;AAzDD,6CAOsB;AAET,QAAA,gBAAgB,GAAG;IAC9B;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;CACF,CAAC;AAEF,SAAS,SAAS,CAAC,CAAe;IAChC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,IAAA,wBAAW,EAAC,CAAC,CAAC,IAAI,CAAC;QAC9B,cAAc,EAAE,IAAA,wBAAW,EAAC,CAAC,CAAC,cAAc,CAAC;QAC7C,kBAAkB,EAAE,IAAA,wBAAW,EAAC,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,IAAA,wBAAW,EAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC3E,QAAQ,EAAE,EAAE,CAAC,QAAQ;aACtB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,IAA6B;IAE7B,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;IAEvF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAW,EAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,IAAA,mCAAsB,EAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAA,6BAAgB,EAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIR CarePlan — patient care plans with activities and goals.
|
|
3
|
+
*/
|
|
4
|
+
export declare const fhirCarePlanTools: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
patientId: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
status: {
|
|
15
|
+
type: string;
|
|
16
|
+
enum: string[];
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
required: string[];
|
|
21
|
+
};
|
|
22
|
+
}[];
|
|
23
|
+
export declare function handleFhirCarePlanTool(_name: string, args: Record<string, unknown>): Promise<{
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: string;
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=care-plans.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"care-plans.d.ts","sourceRoot":"","sources":["../../../src/tools/fhir/care-plans.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;GAqB7B,CAAC;AAsBF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAW7D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FHIR CarePlan — patient care plans with activities and goals.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fhirCarePlanTools = void 0;
|
|
7
|
+
exports.handleFhirCarePlanTool = handleFhirCarePlanTool;
|
|
8
|
+
const helpers_js_1 = require("./helpers.js");
|
|
9
|
+
exports.fhirCarePlanTools = [
|
|
10
|
+
{
|
|
11
|
+
name: 'tebra_fhir_get_care_plans',
|
|
12
|
+
description: 'Get patient care plans from Tebra FHIR API. Returns plan title, status, activities, and goals.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
patientId: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Tebra FHIR patient ID',
|
|
19
|
+
},
|
|
20
|
+
status: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
enum: ['active', 'completed', 'draft', 'revoked'],
|
|
23
|
+
description: 'Filter by care plan status',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
required: ['patientId'],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
function summarize(r) {
|
|
31
|
+
return {
|
|
32
|
+
id: r.id,
|
|
33
|
+
title: r.title,
|
|
34
|
+
status: r.status,
|
|
35
|
+
intent: r.intent,
|
|
36
|
+
category: Array.isArray(r.category)
|
|
37
|
+
? r.category.map((c) => (0, helpers_js_1.codeDisplay)(c))
|
|
38
|
+
: [],
|
|
39
|
+
period: r.period,
|
|
40
|
+
activities: Array.isArray(r.activity)
|
|
41
|
+
? r.activity.map((a) => ({
|
|
42
|
+
description: a.detail?.description,
|
|
43
|
+
code: (0, helpers_js_1.codeDisplay)(a.detail?.code),
|
|
44
|
+
status: a.detail?.status,
|
|
45
|
+
}))
|
|
46
|
+
: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async function handleFhirCarePlanTool(_name, args) {
|
|
50
|
+
const config = (0, helpers_js_1.getFhirConfig)();
|
|
51
|
+
const patientId = String(args.patientId ?? '');
|
|
52
|
+
if (!patientId)
|
|
53
|
+
return { content: [{ type: 'text', text: 'patientId is required.' }] };
|
|
54
|
+
const params = { patient: patientId };
|
|
55
|
+
if (args.status)
|
|
56
|
+
params.status = String(args.status);
|
|
57
|
+
const data = await (0, helpers_js_1.fhirRequest)(config, 'CarePlan', params);
|
|
58
|
+
const resources = (0, helpers_js_1.extractBundleResources)(data);
|
|
59
|
+
return (0, helpers_js_1.formatFhirResult)(resources, 'care plans', summarize);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=care-plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"care-plans.js","sourceRoot":"","sources":["../../../src/tools/fhir/care-plans.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsDH,wDAcC;AAlED,6CAOsB;AAET,QAAA,iBAAiB,GAAG;IAC/B;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;CACF,CAAC;AAEF,SAAS,SAAS,CAAC,CAAe;IAChC,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,IAAA,wBAAW,EAAC,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,IAAA,wBAAW,EAAC,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;AAEM,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,IAA6B;IAE7B,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;IAEvF,MAAM,MAAM,GAA2B,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAW,EAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAA,mCAAsB,EAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAA,6BAAgB,EAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIR CareTeam — patient care team members and roles.
|
|
3
|
+
*/
|
|
4
|
+
export declare const fhirCareTeamTools: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
patientId: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
required: string[];
|
|
16
|
+
};
|
|
17
|
+
}[];
|
|
18
|
+
export declare function handleFhirCareTeamTool(_name: string, args: Record<string, unknown>): Promise<{
|
|
19
|
+
content: Array<{
|
|
20
|
+
type: string;
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=care-team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"care-team.d.ts","sourceRoot":"","sources":["../../../src/tools/fhir/care-team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;GAgB7B,CAAC;AAgBF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAQ7D"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FHIR CareTeam — patient care team members and roles.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fhirCareTeamTools = void 0;
|
|
7
|
+
exports.handleFhirCareTeamTool = handleFhirCareTeamTool;
|
|
8
|
+
const helpers_js_1 = require("./helpers.js");
|
|
9
|
+
exports.fhirCareTeamTools = [
|
|
10
|
+
{
|
|
11
|
+
name: 'tebra_fhir_get_care_team',
|
|
12
|
+
description: 'Get patient care team from Tebra FHIR API. Returns team members with roles.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
patientId: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Tebra FHIR patient ID',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
required: ['patientId'],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
function summarize(r) {
|
|
26
|
+
return {
|
|
27
|
+
id: r.id,
|
|
28
|
+
name: r.name,
|
|
29
|
+
status: r.status,
|
|
30
|
+
participants: Array.isArray(r.participant)
|
|
31
|
+
? r.participant.map((p) => ({
|
|
32
|
+
role: p.role?.map((role) => (0, helpers_js_1.codeDisplay)(role)),
|
|
33
|
+
member: (0, helpers_js_1.refDisplay)(p.member),
|
|
34
|
+
}))
|
|
35
|
+
: [],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async function handleFhirCareTeamTool(_name, args) {
|
|
39
|
+
const config = (0, helpers_js_1.getFhirConfig)();
|
|
40
|
+
const patientId = String(args.patientId ?? '');
|
|
41
|
+
if (!patientId)
|
|
42
|
+
return { content: [{ type: 'text', text: 'patientId is required.' }] };
|
|
43
|
+
const data = await (0, helpers_js_1.fhirRequest)(config, 'CareTeam', { patient: patientId });
|
|
44
|
+
const resources = (0, helpers_js_1.extractBundleResources)(data);
|
|
45
|
+
return (0, helpers_js_1.formatFhirResult)(resources, 'care team records', summarize);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=care-team.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"care-team.js","sourceRoot":"","sources":["../../../src/tools/fhir/care-team.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4CH,wDAWC;AArDD,6CAQsB;AAET,QAAA,iBAAiB,GAAG;IAC/B;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;CACF,CAAC;AAEF,SAAS,SAAS,CAAC,CAAe;IAChC,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,IAAA,wBAAW,EAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,EAAE,IAAA,uBAAU,EAAC,CAAC,CAAC,MAAM,CAAC;aAC7B,CAAC,CAAC;YACL,CAAC,CAAC,EAAE;KACP,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,IAA6B;IAE7B,MAAM,MAAM,GAAG,IAAA,0BAAa,GAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC;IAEvF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAW,EAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,IAAA,mCAAsB,EAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAA,6BAAgB,EAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIR Condition — patient diagnoses / problem list.
|
|
3
|
+
*/
|
|
4
|
+
export declare const fhirConditionTools: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
patientId: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
clinicalStatus: {
|
|
15
|
+
type: string;
|
|
16
|
+
enum: string[];
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
required: string[];
|
|
21
|
+
};
|
|
22
|
+
}[];
|
|
23
|
+
export declare function handleFhirConditionTool(_name: string, args: Record<string, unknown>): Promise<{
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: string;
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=conditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../../src/tools/fhir/conditions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;GAqB9B,CAAC;AAkBF,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAW7D"}
|