@careevolution/orchestrate
Version:
A TypeScript client for the Orchestrate API
393 lines (392 loc) • 13.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TerminologyApi = void 0;
const batch_js_1 = require("./batch.js");
const standardizeTargetSystems = [
"ICD-10-CM",
"ICD-9-CM-Diagnosis",
"SNOMED",
"RxNorm",
"LOINC",
"CPT",
"HCPCS",
"NDC",
"CVX",
"http://hl7.org/fhir/sid/icd-10",
"http://hl7.org/fhir/sid/icd-9",
"http://snomed.info/sct",
"http://www.nlm.nih.gov/research/umls/rxnorm",
"http://loinc.org",
"http://www.ama-assn.org/go/cpt",
// TODO: "http://www.ama-assn.org/go/cpt-hcpcs" HCPCS URL
"http://hl7.org/fhir/sid/ndc",
"http://hl7.org/fhir/sid/cvx",
];
const standardizeResponseSystems = [
"http://hl7.org/fhir/sid/icd-10",
"http://hl7.org/fhir/sid/icd-9",
"http://snomed.info/sct",
"http://hl7.org/fhir/sid/ndc",
"http://hl7.org/fhir/sid/cvx",
"http://www.nlm.nih.gov/research/umls/rxnorm",
"http://loinc.org",
];
const classifyConditionSystems = [
"http://snomed.info/sct",
"http://hl7.org/fhir/sid/icd-10-cm",
"http://hl7.org/fhir/sid/icd-9-cm-diagnosis",
"ICD-10-CM",
"ICD-9-CM-Diagnosis",
"SNOMED",
];
const covid19Condition = [
"Confirmed",
"Suspected",
"Exposure",
"Encounter",
"SignsAndSymptoms",
"NonspecificRespiratoryViralInfection",
];
const classifyMedicationSystems = [
"RxNorm",
"NDC",
"CVX",
"SNOMED",
"http://www.nlm.nih.gov/research/umls/rxnorm",
"http://hl7.org/fhir/sid/ndc",
"http://hl7.org/fhir/sid/cvx",
"http://snomed.info/sct",
];
const covid19Rx = ["vaccination", "immunoglobulin", "medication"];
const classifyObservationSystems = ["http://loinc.org", "LOINC", "http://snomed.info/sct", "SNOMED"];
const codeSystems = [
"ICD-10-CM",
"ICD-9-CM-Diagnosis",
"SNOMED",
"RxNorm",
"LOINC",
"CPT",
"HCPCS",
"NDC",
"CVX",
"Argonaut",
"C4BBClaimCareTeamRole",
"C4BBClaimDiagnosisType",
"C4BBCompoundLiteral",
"CareEvolution",
"CARIN-BB-Claim-Type",
"CARIN-BB-DiagnosisType",
"CdcRaceAndEthnicity",
"ClaimCareTeamRoleCodes",
"CMSRemittanceAdviceRemarkCodes",
"DRG-FY2018",
"DRG-FY2019",
"DRG-FY2020",
"DRG-FY2021",
"DRG-FY2022",
"DRG-FY2023",
"fhir-address-use",
"fhir-administrative-gender",
"fhir-allergy-clinical-status",
"fhir-allergy-intolerance-category",
"Fhir-allergy-intolerance-category-dstu2",
"fhir-allergy-intolerance-criticality",
"fhir-allergy-intolerance-criticality-dstu2",
"fhir-allergy-intolerance-status",
"fhir-allergy-intolerance-type",
"fhir-allergy-verification-status",
"fhir-allergyintolerance-clinical",
"fhir-allergyintolerance-verification",
"fhir-care-plan-activity-status",
"fhir-claim-type-link",
"fhir-condition-category",
"fhir-condition-category-dstu2",
"fhir-condition-category-stu3",
"fhir-condition-clinical",
"fhir-condition-ver-status",
"fhir-contact-point-system",
"fhir-contact-point-system-DSTU2",
"fhir-contact-point-use",
"fhir-diagnosis-role",
"fhir-diagnostic-order-priority",
"fhir-diagnostic-order-status",
"fhir-diagnostic-report-status",
"fhir-document-reference-status",
"fhir-encounter-admit-source",
"fhir-encounter-class",
"fhir-event-status",
"fhir-explanationofbenefit-status",
"fhir-fm-status",
"fhir-goal-status",
"fhir-goal-status-dstu2",
"fhir-goal-status-stu3",
"fhir-medication-admin-status",
"fhir-medication-admin-status-R4",
"fhir-medication-dispense-status",
"fhir-medication-order-status",
"fhir-medication-request-priority",
"fhir-medication-request-status",
"fhir-medication-statement-status",
"fhir-medicationdispense-status",
"fhir-medicationrequest-status",
"fhir-name-use",
"fhir-observation-status",
"fhir-procedure-request-priority",
"fhir-procedure-request-status",
"fhir-reaction-event-severity",
"fhir-referralstatus",
"fhir-request-intent",
"fhir-request-priority",
"fhir-request-status",
"fhir-task-intent",
"fhir-task-status",
"FhirCodes",
"FhirCodesAlternate1",
"FhirCodesAlternate2",
"FhirCodesAlternate3",
"FhirCodesAlternate4",
"FhirCodesAlternate5",
"FhirCodesAlternate6",
"FhirCodesAlternate7",
"HCC-V22",
"HCC-V23",
"HCC-V24",
"HL7 Table 0001 - Administrative Sex",
"HL7 Table 0002 - Marital Status",
"HL7 Table 0004 - Patient Class",
"HL7 Table 0005 - Race",
"HL7 Table 0006 - Religion",
"HL7 Table 0189 - Ethnic Group",
"HL7ActCode",
"HL7Acuity",
"HL7ContactInfoUseCode",
"HL7CurrentSmokingStatus",
"HL7DetailedEthnicity",
"HL7Ethnicity",
"HL7Gender",
"HL7MaritalStatus",
"HL7NullFlavor",
"HL7Race",
"HL7RaceCategoryExcludingNulls",
"HL7v3Religion",
"ICD-9-CM (diagnosis codes)",
"ICD-9-CM (procedure codes)",
"InternetSocietyLanguage",
"NCPDPDispensedAsWrittenOrProductSelectionCode",
"OMOP",
"POS",
"ProviderTaxonomy",
"Source Of Payment Typology",
"UCUM",
"UNII",
"uscore-condition-category",
"v2 Name Type",
"X12ClaimAdjustmentReasonCodes",
];
const translateDomains = [
"Condition",
"AllergyIntolerance",
"MedicationDispense",
"MedicationAdministration",
"MedicationRequest",
"ExplanationOfBenefit",
"Encounter",
"Procedure",
"DiagnosticReport",
"Observation",
"ServiceRequest",
"Patient",
"Practitioner",
"Person",
"CarePlan",
];
const classifyValueSetSystems = [
"http://snomed.info/sct",
"http://hl7.org/fhir/sid/icd-10-cm",
"http://hl7.org/fhir/sid/icd-9-cm-diagnosis",
"http://hl7.org/fhir/sid/ndc",
"http://hl7.org/fhir/sid/cvx",
];
class TerminologyApi {
constructor(httpHandler) {
this.httpHandler = httpHandler;
}
handleBatchOverload(url, request) {
return (0, batch_js_1.handleBatchOverload)(this.httpHandler, url, request);
}
classifyCondition(request) {
return this.handleBatchOverload("/terminology/v1/classify/condition", request);
}
classifyMedication(request) {
return this.handleBatchOverload("/terminology/v1/classify/medication", request);
}
classifyObservation(request) {
return this.handleBatchOverload("/terminology/v1/classify/observation", request);
}
standardizeCondition(request) {
return this.handleBatchOverload("/terminology/v1/standardize/condition", request);
}
standardizeMedication(request) {
return this.handleBatchOverload("/terminology/v1/standardize/medication", request);
}
standardizeObservation(request) {
return this.handleBatchOverload("/terminology/v1/standardize/observation", request);
}
standardizeProcedure(request) {
return this.handleBatchOverload("/terminology/v1/standardize/procedure", request);
}
standardizeLab(request) {
return this.handleBatchOverload("/terminology/v1/standardize/lab", request);
}
standardizeRadiology(request) {
return this.handleBatchOverload("/terminology/v1/standardize/radiology", request);
}
/**
* Describes a code system
* @param request A code system name
* @returns A populated CodeSystem
* @link https://rosetta-api.docs.careevolution.com/fhir/codesystem.html
*/
getFhirR4CodeSystem(request) {
const urlParameters = new URLSearchParams();
if (request.pageNumber) {
urlParameters.append("page.num", request.pageNumber.toString());
}
if (request.pageSize) {
urlParameters.append("_count", request.pageSize.toString());
}
if (request.conceptContains) {
urlParameters.append("concept:contains", request.conceptContains);
}
let route = `/terminology/v1/fhir/r4/codesystem/${request.codeSystem}`;
const urlParametersString = urlParameters.toString();
if (urlParametersString) {
route += `?${urlParametersString}`;
}
return this.httpHandler.get(route);
}
/**
* Describes available code systems
* @returns A bundle of known CodeSystems
* @link https://rosetta-api.docs.careevolution.com/fhir/codesystem.html
*/
summarizeFhirR4CodeSystems() {
return this.httpHandler.get("/terminology/v1/fhir/r4/codesystem?_summary=true");
}
/**
* Describes available concept maps
* @returns A bundle of known ConceptMaps
* @link https://rosetta-api.docs.careevolution.com/fhir/conceptmap.html
*/
getFhirR4ConceptMaps() {
return this.httpHandler.get("/terminology/v1/fhir/r4/conceptmap");
}
/**
* Standardizes source codings to a reference code
* @param request The best source description of the concept
* @returns A Parameters object with the `"result"` parameter of `"valueBoolean": true` indicating if the service was able to standardize the code
* @link https://rosetta-api.docs.careevolution.com/fhir/conceptmap.html
*/
translateFhirR4ConceptMap(request) {
let route = "/terminology/v1/fhir/r4/conceptmap/$translate";
const urlParameters = new URLSearchParams({ code: request.code });
if (request.domain) {
urlParameters.append("domain", request.domain);
}
route += `?${urlParameters.toString()}`;
return this.httpHandler.get(route);
}
/**
* Retrieves the set of ValueSets described in a scope
* @param request A scope identifier
* @returns A bundle of ValueSets within the requested scope
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
summarizeFhirR4ValueSetScope(request) {
const params = new URLSearchParams({
"extension.scope": request.scope,
_summary: "true",
});
const route = `/terminology/v1/fhir/r4/valueset?${params.toString()}`;
return this.httpHandler.get(route);
}
/**
* Summarizes the total number of codes in a ValueSet
* @param request A ValueSet identifier
* @returns A ValueSet resource with only the count populated
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
summarizeFhirR4ValueSet(request) {
const parameters = new URLSearchParams({
_summary: "true",
});
const route = `/terminology/v1/fhir/r4/valueset/${encodeURIComponent(request.id)}?${parameters.toString()}`;
return this.httpHandler.get(route);
}
/**
* Retrieves a ValueSet by identifier
* @param request A ValueSet identifier
* @returns A ValueSet resource
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
getFhirR4ValueSet(request) {
const route = `/terminology/v1/fhir/r4/valueset/${encodeURIComponent(request.id)}`;
return this.httpHandler.get(route);
}
/**
* Retrieves a paginated list of ValueSets filtered by name or scope
* @param request A paginated request for ValueSets
* @returns A bundle of ValueSets that match the search criteria
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
getFhirR4ValueSetsByScope(request) {
const parameters = new URLSearchParams();
if (request.name) {
parameters.append("name", request.name);
}
if (request.pageNumber) {
parameters.append("page.num", request.pageNumber.toString());
}
if (request.pageSize) {
parameters.append("_count", request.pageSize.toString());
}
if (request.scope) {
parameters.append("extension.scope", request.scope);
}
const route = `/terminology/v1/fhir/r4/valueset?${parameters.toString()}`;
return this.httpHandler.get(route);
}
/**
* Requests the available ValueSet scopes
* @returns A unique ValueSet that contains a list of all scopes available on the server
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
getFhirR4ValueSetScopes() {
return this.httpHandler.get("/terminology/v1/fhir/r4/valueset/Rosetta.ValueSetScopes");
}
/**
* In some situations it is useful to get the ValueSet(s) that a list of codes are members of. This can be used to categorize or group codes by ValueSet membership. For example, you may wish to:
*
* - Categorize a collection of NDC drug codes by their active ingredient.
* - Categorize a collection of LOINC lab tests by the component they are measuring.
* - Categorize a collection of ICD-10-CM Diagnoses into a broad set of disease groupings.
* @param request A Parameters resource containing codes to classify
* @returns A Parameters resource containing the classification results
* @link https://rosetta-api.docs.careevolution.com/fhir/valueset.html
*/
getAllFhirR4ValueSetsForCodes(request) {
const route = "/terminology/v1/fhir/r4/valueset/$classify";
return this.httpHandler.post(route, request);
}
/**
* Summarizes a code system, typically used to determine number of codes
* @param request A code system name
* @returns An unpopulated CodeSystem
* @link https://rosetta-api.docs.careevolution.com/fhir/codesystem.html
*/
summarizeFhirR4CodeSystem(request) {
const route = `/terminology/v1/fhir/r4/codesystem/${encodeURIComponent(request.codeSystem)}?_summary=true`;
return this.httpHandler.get(route);
}
}
exports.TerminologyApi = TerminologyApi;