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.
- package/LICENSE +21 -21
- package/README.md +267 -35
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/fhir-client.d.ts +22 -0
- package/dist/fhir-client.d.ts.map +1 -0
- package/dist/fhir-client.js +86 -0
- package/dist/fhir-client.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -6
- package/dist/index.js.map +1 -1
- package/dist/integrations/epic-notes-integration.d.ts +145 -0
- package/dist/integrations/epic-notes-integration.d.ts.map +1 -0
- package/dist/integrations/epic-notes-integration.js +227 -0
- package/dist/integrations/epic-notes-integration.js.map +1 -0
- package/dist/integrations/fal-integration.d.ts +109 -0
- package/dist/integrations/fal-integration.d.ts.map +1 -0
- package/dist/integrations/fal-integration.js +192 -0
- package/dist/integrations/fal-integration.js.map +1 -0
- package/dist/soap-client.d.ts +1 -0
- package/dist/soap-client.d.ts.map +1 -1
- package/dist/soap-client.js +68 -1
- package/dist/soap-client.js.map +1 -1
- package/dist/tools/appointment-crud.d.ts +117 -0
- package/dist/tools/appointment-crud.d.ts.map +1 -0
- package/dist/tools/appointment-crud.js +218 -0
- package/dist/tools/appointment-crud.js.map +1 -0
- package/dist/tools/appointment-detail.d.ts +25 -0
- package/dist/tools/appointment-detail.d.ts.map +1 -0
- package/dist/tools/appointment-detail.js +85 -0
- package/dist/tools/appointment-detail.js.map +1 -0
- package/dist/tools/appointment-reasons.d.ts +20 -0
- package/dist/tools/appointment-reasons.d.ts.map +1 -0
- package/dist/tools/appointment-reasons.js +48 -0
- package/dist/tools/appointment-reasons.js.map +1 -0
- package/dist/tools/appointments.d.ts +46 -0
- package/dist/tools/appointments.d.ts.map +1 -1
- package/dist/tools/appointments.js +71 -4
- package/dist/tools/appointments.js.map +1 -1
- package/dist/tools/authorizations.js +5 -5
- package/dist/tools/bulk-patients.d.ts +33 -0
- package/dist/tools/bulk-patients.d.ts.map +1 -0
- package/dist/tools/bulk-patients.js +81 -0
- package/dist/tools/bulk-patients.js.map +1 -0
- package/dist/tools/charges.d.ts +61 -0
- package/dist/tools/charges.d.ts.map +1 -1
- package/dist/tools/charges.js +98 -14
- package/dist/tools/charges.js.map +1 -1
- package/dist/tools/documents.d.ts +71 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +139 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/eligibility.js +5 -5
- package/dist/tools/encounter-status.d.ts +34 -0
- package/dist/tools/encounter-status.d.ts.map +1 -0
- package/dist/tools/encounter-status.js +73 -0
- package/dist/tools/encounter-status.js.map +1 -0
- package/dist/tools/encounters.js +29 -29
- package/dist/tools/external-ids.d.ts +66 -0
- package/dist/tools/external-ids.d.ts.map +1 -0
- package/dist/tools/external-ids.js +140 -0
- package/dist/tools/external-ids.js.map +1 -0
- package/dist/tools/fhir-clinical.d.ts +187 -0
- package/dist/tools/fhir-clinical.d.ts.map +1 -0
- package/dist/tools/fhir-clinical.js +597 -0
- package/dist/tools/fhir-clinical.js.map +1 -0
- package/dist/tools/patient-crud.d.ts +190 -0
- package/dist/tools/patient-crud.d.ts.map +1 -0
- package/dist/tools/patient-crud.js +297 -0
- package/dist/tools/patient-crud.js.map +1 -0
- package/dist/tools/patients.d.ts +87 -1
- package/dist/tools/patients.d.ts.map +1 -1
- package/dist/tools/patients.js +108 -8
- package/dist/tools/patients.js.map +1 -1
- package/dist/tools/payments.d.ts +105 -0
- package/dist/tools/payments.d.ts.map +1 -0
- package/dist/tools/payments.js +206 -0
- package/dist/tools/payments.js.map +1 -0
- package/dist/tools/practices.d.ts +20 -0
- package/dist/tools/practices.d.ts.map +1 -0
- package/dist/tools/practices.js +54 -0
- package/dist/tools/practices.js.map +1 -0
- package/dist/tools/procedure-codes.js +5 -5
- package/dist/tools/providers.d.ts +25 -0
- package/dist/tools/providers.d.ts.map +1 -0
- package/dist/tools/providers.js +62 -0
- package/dist/tools/providers.js.map +1 -0
- package/dist/tools/service-locations.d.ts +25 -0
- package/dist/tools/service-locations.d.ts.map +1 -0
- package/dist/tools/service-locations.js +62 -0
- package/dist/tools/service-locations.js.map +1 -0
- package/dist/tools/system.d.ts +81 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +184 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/tools/transactions.d.ts +61 -0
- package/dist/tools/transactions.d.ts.map +1 -0
- package/dist/tools/transactions.js +122 -0
- package/dist/tools/transactions.js.map +1 -0
- package/package.json +60 -54
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tebra MCP tools: Bulk patient retrieval with pagination.
|
|
3
|
+
*/
|
|
4
|
+
import type { TebraConfig } from '../config.js';
|
|
5
|
+
export declare const bulkPatientTools: {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: "object";
|
|
10
|
+
properties: {
|
|
11
|
+
batchSize: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
startKey: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
isActive: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
required: never[];
|
|
25
|
+
};
|
|
26
|
+
}[];
|
|
27
|
+
export declare function handleBulkPatientTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
|
|
28
|
+
content: Array<{
|
|
29
|
+
type: string;
|
|
30
|
+
text: string;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=bulk-patients.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-patients.d.ts","sourceRoot":"","sources":["../../src/tools/bulk-patients.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAWhD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;GAwB5B,CAAC;AAIF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoD7D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tebra MCP tools: Bulk patient retrieval with pagination.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.bulkPatientTools = void 0;
|
|
7
|
+
exports.handleBulkPatientTool = handleBulkPatientTool;
|
|
8
|
+
const soap_client_js_1 = require("../soap-client.js");
|
|
9
|
+
// ─── Tool Definitions ───────────────────────────────────────────
|
|
10
|
+
exports.bulkPatientTools = [
|
|
11
|
+
{
|
|
12
|
+
name: 'tebra_get_all_patients',
|
|
13
|
+
description: 'Get all patients in bulk with pagination. Returns a page of patients and a continuation key for the next page. Use startKey from the previous response to get the next batch.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
batchSize: {
|
|
18
|
+
type: 'number',
|
|
19
|
+
description: 'Number of patients per page (default 200, max 1000)',
|
|
20
|
+
},
|
|
21
|
+
startKey: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Continuation key from previous response (omit for first page)',
|
|
24
|
+
},
|
|
25
|
+
isActive: {
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
description: 'Optional filter: true for active patients only, false for inactive only',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
required: [],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
// ─── Tool Handler ───────────────────────────────────────────────
|
|
35
|
+
async function handleBulkPatientTool(name, args, config) {
|
|
36
|
+
if (name !== 'tebra_get_all_patients') {
|
|
37
|
+
return { content: [{ type: 'text', text: `Unknown bulk patient tool: ${name}` }] };
|
|
38
|
+
}
|
|
39
|
+
const batchSize = args.batchSize != null ? Number(args.batchSize) : 200;
|
|
40
|
+
const startKey = args.startKey ? String(args.startKey) : undefined;
|
|
41
|
+
const isActive = args.isActive != null ? args.isActive : undefined;
|
|
42
|
+
const fieldsXml = [
|
|
43
|
+
`<kar:BatchSize>${batchSize}</kar:BatchSize>`,
|
|
44
|
+
startKey ? `<kar:StartKey>${(0, soap_client_js_1.escapeXml)(startKey)}</kar:StartKey>` : '',
|
|
45
|
+
isActive != null ? `<kar:Active>${isActive ? 'true' : 'false'}</kar:Active>` : '',
|
|
46
|
+
]
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.join('\n ');
|
|
49
|
+
const bodyXml = `
|
|
50
|
+
<kar:request>
|
|
51
|
+
<kar:Fields>
|
|
52
|
+
${fieldsXml}
|
|
53
|
+
</kar:Fields>
|
|
54
|
+
</kar:request>`;
|
|
55
|
+
const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetAllPatients', bodyXml);
|
|
56
|
+
const blocks = (0, soap_client_js_1.extractAllTags)(xml, 'PatientData');
|
|
57
|
+
const nextStartKey = (0, soap_client_js_1.extractTag)(xml, 'NextStartKey') || null;
|
|
58
|
+
const patients = blocks.map((block) => ({
|
|
59
|
+
patientId: (0, soap_client_js_1.extractTag)(block, 'PatientID') || (0, soap_client_js_1.extractTag)(block, 'ID'),
|
|
60
|
+
firstName: (0, soap_client_js_1.extractTag)(block, 'FirstName'),
|
|
61
|
+
lastName: (0, soap_client_js_1.extractTag)(block, 'LastName'),
|
|
62
|
+
dateOfBirth: (0, soap_client_js_1.extractTag)(block, 'DateofBirth') || (0, soap_client_js_1.extractTag)(block, 'DOB'),
|
|
63
|
+
mrn: (0, soap_client_js_1.extractTag)(block, 'MRN'),
|
|
64
|
+
active: (0, soap_client_js_1.extractTag)(block, 'Active'),
|
|
65
|
+
insurances: (0, soap_client_js_1.extractAllTags)(block, 'InsurancePolicyData').map((ins) => ({
|
|
66
|
+
payerName: (0, soap_client_js_1.extractTag)(ins, 'PayerName') || (0, soap_client_js_1.extractTag)(ins, 'CompanyName'),
|
|
67
|
+
memberId: (0, soap_client_js_1.extractTag)(ins, 'MemberNumber') || (0, soap_client_js_1.extractTag)(ins, 'PolicyNumber'),
|
|
68
|
+
isPrimary: ((0, soap_client_js_1.extractNumber)(ins, 'SequenceNumber') || 1) === 1,
|
|
69
|
+
})),
|
|
70
|
+
}));
|
|
71
|
+
const result = {
|
|
72
|
+
patients,
|
|
73
|
+
count: patients.length,
|
|
74
|
+
nextStartKey,
|
|
75
|
+
hasMore: nextStartKey !== null && nextStartKey !== '',
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=bulk-patients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-patients.js","sourceRoot":"","sources":["../../src/tools/bulk-patients.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/charges.d.ts
CHANGED
|
@@ -20,6 +20,67 @@ export declare const chargeTools: {
|
|
|
20
20
|
type: string;
|
|
21
21
|
description: string;
|
|
22
22
|
};
|
|
23
|
+
fromPostingDate: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
toPostingDate: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
batchNumber: {
|
|
32
|
+
type: string;
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
renderingProviderName: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
procedureCode: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
diagnosisCode: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
status: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
billedTo: {
|
|
52
|
+
type: string;
|
|
53
|
+
description: string;
|
|
54
|
+
};
|
|
55
|
+
includeUnapprovedCharges: {
|
|
56
|
+
type: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
encounterStatus: {
|
|
60
|
+
type: string;
|
|
61
|
+
enum: string[];
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
casePayerScenario: {
|
|
65
|
+
type: string;
|
|
66
|
+
description: string;
|
|
67
|
+
};
|
|
68
|
+
fromLastModifiedDate: {
|
|
69
|
+
type: string;
|
|
70
|
+
description: string;
|
|
71
|
+
};
|
|
72
|
+
toLastModifiedDate: {
|
|
73
|
+
type: string;
|
|
74
|
+
description: string;
|
|
75
|
+
};
|
|
76
|
+
fromCreatedDate: {
|
|
77
|
+
type: string;
|
|
78
|
+
description: string;
|
|
79
|
+
};
|
|
80
|
+
toCreatedDate: {
|
|
81
|
+
type: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
23
84
|
};
|
|
24
85
|
required: never[];
|
|
25
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charges.d.ts","sourceRoot":"","sources":["../../src/tools/charges.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"charges.d.ts","sourceRoot":"","sources":["../../src/tools/charges.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFvB,CAAC;AAIF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0E7D"}
|
package/dist/tools/charges.js
CHANGED
|
@@ -10,21 +10,82 @@ const soap_client_js_1 = require("../soap-client.js");
|
|
|
10
10
|
exports.chargeTools = [
|
|
11
11
|
{
|
|
12
12
|
name: 'tebra_get_charges',
|
|
13
|
-
description: 'Get charges from Tebra with
|
|
13
|
+
description: 'Get charges from Tebra with flexible filters: date range, patient, provider, procedure/diagnosis codes, billing status, encounter status, and more. Returns charge details with payment status, amounts, and balances.',
|
|
14
14
|
inputSchema: {
|
|
15
15
|
type: 'object',
|
|
16
16
|
properties: {
|
|
17
17
|
fromDate: {
|
|
18
18
|
type: 'string',
|
|
19
|
-
description: '
|
|
19
|
+
description: 'Service start date filter (ISO 8601)',
|
|
20
20
|
},
|
|
21
21
|
toDate: {
|
|
22
22
|
type: 'string',
|
|
23
|
-
description: '
|
|
23
|
+
description: 'Service end date filter (ISO 8601)',
|
|
24
24
|
},
|
|
25
25
|
patientId: {
|
|
26
26
|
type: 'string',
|
|
27
|
-
description: '
|
|
27
|
+
description: 'Tebra patient ID to filter by',
|
|
28
|
+
},
|
|
29
|
+
fromPostingDate: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Posting date range start (YYYY-MM-DD)',
|
|
32
|
+
},
|
|
33
|
+
toPostingDate: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Posting date range end (YYYY-MM-DD)',
|
|
36
|
+
},
|
|
37
|
+
batchNumber: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'Filter by batch number',
|
|
40
|
+
},
|
|
41
|
+
renderingProviderName: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Rendering provider full name',
|
|
44
|
+
},
|
|
45
|
+
procedureCode: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Filter by CPT procedure code',
|
|
48
|
+
},
|
|
49
|
+
diagnosisCode: {
|
|
50
|
+
type: 'string',
|
|
51
|
+
description: 'Filter by ICD diagnosis code',
|
|
52
|
+
},
|
|
53
|
+
status: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'Charge status filter',
|
|
56
|
+
},
|
|
57
|
+
billedTo: {
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'Billed-to entity filter',
|
|
60
|
+
},
|
|
61
|
+
includeUnapprovedCharges: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
description: 'Include unapproved charges (default false)',
|
|
64
|
+
},
|
|
65
|
+
encounterStatus: {
|
|
66
|
+
type: 'string',
|
|
67
|
+
enum: ['Draft', 'Review', 'Approved', 'Rejected'],
|
|
68
|
+
description: 'Encounter status filter',
|
|
69
|
+
},
|
|
70
|
+
casePayerScenario: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'Case payer scenario filter',
|
|
73
|
+
},
|
|
74
|
+
fromLastModifiedDate: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Modified date range start (YYYY-MM-DD)',
|
|
77
|
+
},
|
|
78
|
+
toLastModifiedDate: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Modified date range end (YYYY-MM-DD)',
|
|
81
|
+
},
|
|
82
|
+
fromCreatedDate: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
description: 'Created date range start (YYYY-MM-DD)',
|
|
85
|
+
},
|
|
86
|
+
toCreatedDate: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'Created date range end (YYYY-MM-DD)',
|
|
28
89
|
},
|
|
29
90
|
},
|
|
30
91
|
required: [],
|
|
@@ -36,16 +97,39 @@ async function handleChargeTool(name, args, config) {
|
|
|
36
97
|
if (name !== 'tebra_get_charges') {
|
|
37
98
|
return { content: [{ type: 'text', text: `Unknown charge tool: ${name}` }] };
|
|
38
99
|
}
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
100
|
+
// Map of arg names to SOAP filter field names
|
|
101
|
+
const stringFilterMap = [
|
|
102
|
+
['fromDate', 'FromServiceDate'],
|
|
103
|
+
['toDate', 'ToServiceDate'],
|
|
104
|
+
['patientId', 'PatientID'],
|
|
105
|
+
['fromPostingDate', 'FromPostingDate'],
|
|
106
|
+
['toPostingDate', 'ToPostingDate'],
|
|
107
|
+
['batchNumber', 'BatchNumber'],
|
|
108
|
+
['renderingProviderName', 'RenderingProviderFullName'],
|
|
109
|
+
['procedureCode', 'ProcedureCode'],
|
|
110
|
+
['diagnosisCode', 'DiagnosisCode'],
|
|
111
|
+
['status', 'Status'],
|
|
112
|
+
['billedTo', 'BilledTo'],
|
|
113
|
+
['encounterStatus', 'EncounterStatus'],
|
|
114
|
+
['casePayerScenario', 'CasePayerScenario'],
|
|
115
|
+
['fromLastModifiedDate', 'FromLastModifiedDate'],
|
|
116
|
+
['toLastModifiedDate', 'ToLastModifiedDate'],
|
|
117
|
+
['fromCreatedDate', 'FromCreatedDate'],
|
|
118
|
+
['toCreatedDate', 'ToCreatedDate'],
|
|
119
|
+
];
|
|
120
|
+
const filterFields = [];
|
|
121
|
+
for (const [argKey, soapField] of stringFilterMap) {
|
|
122
|
+
const val = args[argKey];
|
|
123
|
+
if (val !== undefined && val !== null && val !== '') {
|
|
124
|
+
filterFields.push(`<kar:${soapField}>${(0, soap_client_js_1.escapeXml)(String(val))}</kar:${soapField}>`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Boolean: includeUnapprovedCharges -> "T" / "F"
|
|
128
|
+
if (args.includeUnapprovedCharges !== undefined && args.includeUnapprovedCharges !== null) {
|
|
129
|
+
const boolVal = args.includeUnapprovedCharges ? 'T' : 'F';
|
|
130
|
+
filterFields.push(`<kar:IncludeUnapprovedCharges>${boolVal}</kar:IncludeUnapprovedCharges>`);
|
|
131
|
+
}
|
|
132
|
+
const fieldsXml = filterFields.join('\n ');
|
|
49
133
|
const bodyXml = `
|
|
50
134
|
<kar:request>
|
|
51
135
|
<kar:Fields>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charges.js","sourceRoot":"","sources":["../../src/tools/charges.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"charges.js","sourceRoot":"","sources":["../../src/tools/charges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tebra MCP tools: Document create and delete.
|
|
3
|
+
*/
|
|
4
|
+
import type { TebraConfig } from '../config.js';
|
|
5
|
+
export declare const documentTools: ({
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: "object";
|
|
10
|
+
properties: {
|
|
11
|
+
patientId: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
documentLabel: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
fileName: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
fileContent: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
fileType: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
enum: string[];
|
|
31
|
+
};
|
|
32
|
+
description: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
encounterDate: {
|
|
37
|
+
type: string;
|
|
38
|
+
description: string;
|
|
39
|
+
};
|
|
40
|
+
documentId?: undefined;
|
|
41
|
+
};
|
|
42
|
+
required: string[];
|
|
43
|
+
};
|
|
44
|
+
} | {
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object";
|
|
49
|
+
properties: {
|
|
50
|
+
documentId: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
patientId?: undefined;
|
|
55
|
+
documentLabel?: undefined;
|
|
56
|
+
fileName?: undefined;
|
|
57
|
+
fileContent?: undefined;
|
|
58
|
+
fileType?: undefined;
|
|
59
|
+
description?: undefined;
|
|
60
|
+
encounterDate?: undefined;
|
|
61
|
+
};
|
|
62
|
+
required: string[];
|
|
63
|
+
};
|
|
64
|
+
})[];
|
|
65
|
+
export declare function handleDocumentTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
|
|
66
|
+
content: Array<{
|
|
67
|
+
type: string;
|
|
68
|
+
text: string;
|
|
69
|
+
}>;
|
|
70
|
+
}>;
|
|
71
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwDzB,CAAC;AAIF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmF7D"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tebra MCP tools: Document create and delete.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.documentTools = void 0;
|
|
7
|
+
exports.handleDocumentTool = handleDocumentTool;
|
|
8
|
+
const soap_client_js_1 = require("../soap-client.js");
|
|
9
|
+
// ─── Tool Definitions ───────────────────────────────────────────
|
|
10
|
+
exports.documentTools = [
|
|
11
|
+
{
|
|
12
|
+
name: 'tebra_create_document',
|
|
13
|
+
description: 'Upload a document to a patient record in Tebra. Supports PDF, JPG, PNG, and TIFF files via base64 content.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
patientId: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
description: 'Tebra patient ID',
|
|
20
|
+
},
|
|
21
|
+
documentLabel: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'Document category label (e.g. Lab Results, Referral Letter)',
|
|
24
|
+
},
|
|
25
|
+
fileName: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
description: 'File name with extension (e.g. lab_results.pdf)',
|
|
28
|
+
},
|
|
29
|
+
fileContent: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Base64-encoded file content',
|
|
32
|
+
},
|
|
33
|
+
fileType: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'File type: PDF, JPG, PNG, or TIFF',
|
|
36
|
+
enum: ['PDF', 'JPG', 'PNG', 'TIFF'],
|
|
37
|
+
},
|
|
38
|
+
description: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
description: 'Optional document description/notes',
|
|
41
|
+
},
|
|
42
|
+
encounterDate: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Optional encounter date to associate with (ISO 8601)',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ['patientId', 'documentLabel', 'fileName', 'fileContent', 'fileType'],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'tebra_delete_document',
|
|
52
|
+
description: 'Delete a document from Tebra by document ID.',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
documentId: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Tebra document ID to delete',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
required: ['documentId'],
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
// ─── Tool Handler ───────────────────────────────────────────────
|
|
66
|
+
async function handleDocumentTool(name, args, config) {
|
|
67
|
+
switch (name) {
|
|
68
|
+
case 'tebra_create_document': {
|
|
69
|
+
const patientId = String(args.patientId ?? '');
|
|
70
|
+
const documentLabel = String(args.documentLabel ?? '');
|
|
71
|
+
const fileName = String(args.fileName ?? '');
|
|
72
|
+
const fileContent = String(args.fileContent ?? '');
|
|
73
|
+
const fileType = String(args.fileType ?? '');
|
|
74
|
+
if (!patientId || !documentLabel || !fileName || !fileContent || !fileType) {
|
|
75
|
+
return {
|
|
76
|
+
content: [{
|
|
77
|
+
type: 'text',
|
|
78
|
+
text: 'patientId, documentLabel, fileName, fileContent, and fileType are all required.',
|
|
79
|
+
}],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const validTypes = ['PDF', 'JPG', 'PNG', 'TIFF'];
|
|
83
|
+
if (!validTypes.includes(fileType)) {
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: 'text', text: `Invalid fileType "${fileType}". Must be one of: ${validTypes.join(', ')}` }],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const description = args.description ? String(args.description) : undefined;
|
|
89
|
+
const encounterDate = args.encounterDate ? String(args.encounterDate) : undefined;
|
|
90
|
+
const bodyXml = `
|
|
91
|
+
<kar:request>
|
|
92
|
+
<kar:Document>
|
|
93
|
+
<kar:PatientId>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientId>
|
|
94
|
+
<kar:Label>${(0, soap_client_js_1.escapeXml)(documentLabel)}</kar:Label>
|
|
95
|
+
<kar:Name>${(0, soap_client_js_1.escapeXml)(documentLabel)}</kar:Name>
|
|
96
|
+
<kar:FileName>${(0, soap_client_js_1.escapeXml)(fileName)}</kar:FileName>
|
|
97
|
+
<kar:FileContent>${fileContent}</kar:FileContent>
|
|
98
|
+
${encounterDate ? `<kar:DocumentDate>${(0, soap_client_js_1.escapeXml)(encounterDate)}</kar:DocumentDate>` : ''}
|
|
99
|
+
${description ? `<kar:DocumentNotes>${(0, soap_client_js_1.escapeXml)(description)}</kar:DocumentNotes>` : ''}
|
|
100
|
+
<kar:Status>New</kar:Status>
|
|
101
|
+
</kar:Document>
|
|
102
|
+
</kar:request>`;
|
|
103
|
+
const xml = await (0, soap_client_js_1.soapRequest)(config, 'CreateDocument', bodyXml);
|
|
104
|
+
const documentId = (0, soap_client_js_1.extractTag)(xml, 'DocumentID') || (0, soap_client_js_1.extractTag)(xml, 'ID');
|
|
105
|
+
return {
|
|
106
|
+
content: [{
|
|
107
|
+
type: 'text',
|
|
108
|
+
text: JSON.stringify({
|
|
109
|
+
documentId,
|
|
110
|
+
message: 'Document uploaded successfully.',
|
|
111
|
+
}, null, 2),
|
|
112
|
+
}],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
case 'tebra_delete_document': {
|
|
116
|
+
const documentId = String(args.documentId ?? '');
|
|
117
|
+
if (!documentId) {
|
|
118
|
+
return { content: [{ type: 'text', text: 'documentId is required.' }] };
|
|
119
|
+
}
|
|
120
|
+
const bodyXml = `
|
|
121
|
+
<kar:request>
|
|
122
|
+
<kar:DocumentID>${(0, soap_client_js_1.escapeXml)(documentId)}</kar:DocumentID>
|
|
123
|
+
</kar:request>`;
|
|
124
|
+
await (0, soap_client_js_1.soapRequest)(config, 'DeleteDocument', bodyXml);
|
|
125
|
+
return {
|
|
126
|
+
content: [{
|
|
127
|
+
type: 'text',
|
|
128
|
+
text: JSON.stringify({
|
|
129
|
+
documentId,
|
|
130
|
+
message: 'Document deleted successfully.',
|
|
131
|
+
}, null, 2),
|
|
132
|
+
}],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
default:
|
|
136
|
+
return { content: [{ type: 'text', text: `Unknown document tool: ${name}` }] };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,11 +36,11 @@ async function handleEligibilityTool(name, args, config) {
|
|
|
36
36
|
if (!patientId) {
|
|
37
37
|
return { content: [{ type: 'text', text: 'patientId is required.' }] };
|
|
38
38
|
}
|
|
39
|
-
const bodyXml = `
|
|
40
|
-
<kar:request>
|
|
41
|
-
<kar:Fields>
|
|
42
|
-
<kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
|
|
43
|
-
</kar:Fields>
|
|
39
|
+
const bodyXml = `
|
|
40
|
+
<kar:request>
|
|
41
|
+
<kar:Fields>
|
|
42
|
+
<kar:PatientID>${(0, soap_client_js_1.escapeXml)(patientId)}</kar:PatientID>
|
|
43
|
+
</kar:Fields>
|
|
44
44
|
</kar:request>`;
|
|
45
45
|
const xml = await (0, soap_client_js_1.soapRequest)(config, 'GetPatient', bodyXml);
|
|
46
46
|
const patientBlock = (0, soap_client_js_1.extractTag)(xml, 'Patient');
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tebra MCP tools: Encounter status update.
|
|
3
|
+
*/
|
|
4
|
+
import type { TebraConfig } from '../config.js';
|
|
5
|
+
export declare const encounterStatusTools: {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: "object";
|
|
10
|
+
properties: {
|
|
11
|
+
encounterId: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
status: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
enum: string[];
|
|
19
|
+
};
|
|
20
|
+
reviewNote: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
required: string[];
|
|
26
|
+
};
|
|
27
|
+
}[];
|
|
28
|
+
export declare function handleEncounterStatusTool(name: string, args: Record<string, unknown>, config: TebraConfig): Promise<{
|
|
29
|
+
content: Array<{
|
|
30
|
+
type: string;
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
//# sourceMappingURL=encounter-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encounter-status.d.ts","sourceRoot":"","sources":["../../src/tools/encounter-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;GAyBhC,CAAC;AAIF,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2C7D"}
|