tebra-mcp-server 0.2.1 → 0.2.2
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 +42 -9
- 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 +61 -61
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.2', // 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":"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"}
|
|
@@ -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;AA0C/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;
|
|
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;AA0C/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
|
@@ -70,24 +70,44 @@ function extractNumber(xml, tagName) {
|
|
|
70
70
|
return isNaN(num) ? 0 : num;
|
|
71
71
|
}
|
|
72
72
|
// ─── Envelope Builder ───────────────────────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Inject the RequestHeader (User/Password/CustomerKey) as the first child of
|
|
75
|
+
* the operation's <kar:request> element. Tebra's WSDL declares RequestHeader
|
|
76
|
+
* as a body parameter — placing it in <soap:Header> causes WCF to reject the
|
|
77
|
+
* request before authentication is even checked.
|
|
78
|
+
*/
|
|
79
|
+
function injectRequestHeader(config, bodyXml) {
|
|
80
|
+
const header = `<kar:RequestHeader>` +
|
|
81
|
+
`<kar:CustomerKey>${escapeXml(config.customerKey)}</kar:CustomerKey>` +
|
|
82
|
+
`<kar:User>${escapeXml(config.user)}</kar:User>` +
|
|
83
|
+
`<kar:Password>${escapeXml(config.password)}</kar:Password>` +
|
|
84
|
+
`</kar:RequestHeader>`;
|
|
85
|
+
// Body is always wrapped in <kar:request>...</kar:request>. Insert the
|
|
86
|
+
// header immediately after the opening tag so it's the first child.
|
|
87
|
+
const openTagPattern = /<kar:request(\s[^>]*)?>/;
|
|
88
|
+
if (!openTagPattern.test(bodyXml)) {
|
|
89
|
+
throw new Error('soapRequest body must be wrapped in <kar:request>...</kar:request>');
|
|
90
|
+
}
|
|
91
|
+
return bodyXml.replace(openTagPattern, (match) => `${match}${header}`);
|
|
92
|
+
}
|
|
73
93
|
function buildEnvelope(config, action, bodyXml) {
|
|
94
|
+
const bodyWithHeader = injectRequestHeader(config, bodyXml);
|
|
74
95
|
return `<?xml version="1.0" encoding="utf-8"?>
|
|
75
96
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
|
|
76
97
|
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
98
|
<soap:Body>
|
|
85
99
|
<kar:${action}>
|
|
86
|
-
${
|
|
100
|
+
${bodyWithHeader}
|
|
87
101
|
</kar:${action}>
|
|
88
102
|
</soap:Body>
|
|
89
103
|
</soap:Envelope>`;
|
|
90
104
|
}
|
|
105
|
+
function redactSecrets(xml) {
|
|
106
|
+
return xml
|
|
107
|
+
.replace(/<kar:User>[^<]*<\/kar:User>/g, '<kar:User>***</kar:User>')
|
|
108
|
+
.replace(/<kar:Password>[^<]*<\/kar:Password>/g, '<kar:Password>***</kar:Password>')
|
|
109
|
+
.replace(/<kar:CustomerKey>[^<]*<\/kar:CustomerKey>/g, '<kar:CustomerKey>***</kar:CustomerKey>');
|
|
110
|
+
}
|
|
91
111
|
// ─── SecurityResponse Check ─────────────────────────────────────
|
|
92
112
|
function checkSecurityResponse(responseXml, action) {
|
|
93
113
|
const securityBlock = extractTag(responseXml, 'SecurityResponse');
|
|
@@ -127,8 +147,17 @@ async function enforceRateLimit(action) {
|
|
|
127
147
|
}
|
|
128
148
|
async function soapRequest(config, action, bodyXml) {
|
|
129
149
|
const soapAction = `${SOAP_NAMESPACE}${action}`;
|
|
150
|
+
// SOAP 1.1 requires SOAPAction to be a quoted string. WCF dispatchers can
|
|
151
|
+
// reject unquoted values with a ContractFilter mismatch.
|
|
152
|
+
const soapActionHeader = `"${soapAction}"`;
|
|
130
153
|
const envelope = buildEnvelope(config, action, bodyXml);
|
|
154
|
+
const debug = process.env.TEBRA_SOAP_DEBUG === '1' || process.env.TEBRA_SOAP_DEBUG === 'true';
|
|
131
155
|
let lastError = null;
|
|
156
|
+
if (debug) {
|
|
157
|
+
console.error(`[tebra-soap] POST ${config.endpoint}`);
|
|
158
|
+
console.error(`[tebra-soap] SOAPAction: ${soapActionHeader}`);
|
|
159
|
+
console.error(`[tebra-soap] Request body:\n${redactSecrets(envelope)}`);
|
|
160
|
+
}
|
|
132
161
|
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
|
|
133
162
|
try {
|
|
134
163
|
// Pre-emptive rate limiting
|
|
@@ -137,11 +166,15 @@ async function soapRequest(config, action, bodyXml) {
|
|
|
137
166
|
method: 'POST',
|
|
138
167
|
headers: {
|
|
139
168
|
'Content-Type': 'text/xml; charset=utf-8',
|
|
140
|
-
SOAPAction:
|
|
169
|
+
SOAPAction: soapActionHeader,
|
|
141
170
|
},
|
|
142
171
|
body: envelope,
|
|
143
172
|
});
|
|
144
173
|
const responseText = await response.text();
|
|
174
|
+
if (debug) {
|
|
175
|
+
console.error(`[tebra-soap] HTTP ${response.status} for ${action}`);
|
|
176
|
+
console.error(`[tebra-soap] Response body:\n${responseText.slice(0, 2000)}`);
|
|
177
|
+
}
|
|
145
178
|
if (!response.ok) {
|
|
146
179
|
const faultString = extractTag(responseText, 'faultstring');
|
|
147
180
|
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;;AA4CH,8BAOC;AAED,gCAOC;AAED,wCAMC;AAED,sCAIC;
|
|
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"}
|