ezmedicationinput 0.1.1 → 0.1.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/README.md +60 -20
- package/dist/context.js +10 -5
- package/dist/fhir.d.ts +1 -1
- package/dist/fhir.js +40 -32
- package/dist/format.d.ts +3 -2
- package/dist/format.js +371 -86
- package/dist/i18n.d.ts +31 -0
- package/dist/i18n.js +664 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +53 -19
- package/dist/internal-types.d.ts +33 -0
- package/dist/internal-types.js +2 -0
- package/dist/maps.d.ts +2 -0
- package/dist/maps.js +543 -350
- package/dist/package.json +3 -0
- package/dist/parser.d.ts +2 -31
- package/dist/parser.js +809 -142
- package/dist/safety.js +7 -4
- package/dist/schedule.js +148 -76
- package/dist/suggest.js +391 -79
- package/dist/types.d.ts +26 -8
- package/dist/types.js +12 -9
- package/dist/utils/array.d.ts +1 -0
- package/dist/utils/array.js +11 -0
- package/dist/utils/enum.d.ts +2 -0
- package/dist/utils/enum.js +7 -0
- package/dist/utils/object.d.ts +7 -0
- package/dist/utils/object.js +34 -0
- package/package.json +2 -2
package/dist/maps.js
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_UNIT_BY_ROUTE = exports.DEFAULT_UNIT_BY_NORMALIZED_FORM = exports.KNOWN_TMT_DOSAGE_FORM_TO_SNOMED_ROUTE = exports.KNOWN_DOSAGE_FORMS_TO_DOSE = exports.WORD_FREQUENCIES = exports.DAY_OF_WEEK_TOKENS = exports.DISCOURAGED_TOKENS = exports.MEAL_KEYWORDS = exports.EVENT_TIMING_TOKENS = exports.TIMING_ABBREVIATIONS = exports.DEFAULT_UNIT_SYNONYMS = exports.HOUSEHOLD_VOLUME_UNITS = exports.DEFAULT_ROUTE_SYNONYMS = exports.ROUTE_BY_SNOMED = exports.ROUTE_TEXT = exports.ROUTE_SNOMED = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const object_1 = require("./utils/object");
|
|
2
6
|
const ROUTE_TEXT_OVERRIDES = {
|
|
3
|
-
[RouteCode["Oral route"]]: "by mouth",
|
|
4
|
-
[RouteCode["Sublingual route"]]: "sublingual",
|
|
5
|
-
[RouteCode["Buccal route"]]: "buccal",
|
|
6
|
-
[RouteCode["Respiratory tract route (qualifier value)"]]: "inhalation",
|
|
7
|
-
[RouteCode["Nasal route"]]: "intranasal",
|
|
8
|
-
[RouteCode["Topical route"]]: "topical",
|
|
9
|
-
[RouteCode["Transdermal route"]]: "transdermal",
|
|
10
|
-
[RouteCode["Subcutaneous route"]]: "subcutaneous",
|
|
11
|
-
[RouteCode["Intramuscular route"]]: "intramuscular",
|
|
12
|
-
[RouteCode["Intravenous route"]]: "intravenous",
|
|
13
|
-
[RouteCode["Per rectum"]]: "rectal",
|
|
14
|
-
[RouteCode["Per vagina"]]: "vaginal",
|
|
15
|
-
[RouteCode["Ophthalmic route"]]: "ophthalmic",
|
|
16
|
-
[RouteCode["Intravitreal route (qualifier value)"]]: "intravitreal"
|
|
7
|
+
[types_1.RouteCode["Oral route"]]: "by mouth",
|
|
8
|
+
[types_1.RouteCode["Sublingual route"]]: "sublingual",
|
|
9
|
+
[types_1.RouteCode["Buccal route"]]: "buccal",
|
|
10
|
+
[types_1.RouteCode["Respiratory tract route (qualifier value)"]]: "inhalation",
|
|
11
|
+
[types_1.RouteCode["Nasal route"]]: "intranasal",
|
|
12
|
+
[types_1.RouteCode["Topical route"]]: "topical",
|
|
13
|
+
[types_1.RouteCode["Transdermal route"]]: "transdermal",
|
|
14
|
+
[types_1.RouteCode["Subcutaneous route"]]: "subcutaneous",
|
|
15
|
+
[types_1.RouteCode["Intramuscular route"]]: "intramuscular",
|
|
16
|
+
[types_1.RouteCode["Intravenous route"]]: "intravenous",
|
|
17
|
+
[types_1.RouteCode["Per rectum"]]: "rectal",
|
|
18
|
+
[types_1.RouteCode["Per vagina"]]: "vaginal",
|
|
19
|
+
[types_1.RouteCode["Ophthalmic route"]]: "ophthalmic",
|
|
20
|
+
[types_1.RouteCode["Intravitreal route (qualifier value)"]]: "intravitreal"
|
|
17
21
|
};
|
|
18
22
|
function defaultRouteText(display) {
|
|
19
23
|
const cleaned = display.replace(/\s*\(qualifier value\)/gi, "");
|
|
20
24
|
const withoutSuffix = cleaned.replace(/\b(route|use)\b/gi, "");
|
|
21
25
|
return withoutSuffix.replace(/\s+/g, " ").trim().toLowerCase();
|
|
22
26
|
}
|
|
23
|
-
const ROUTE_SNOMED_ENTRIES =
|
|
27
|
+
const ROUTE_SNOMED_ENTRIES = (0, object_1.objectEntries)(types_1.SNOMEDCTRouteCodes).map(([display, code]) => {
|
|
24
28
|
const routeCode = code;
|
|
25
29
|
return [
|
|
26
30
|
routeCode,
|
|
@@ -32,17 +36,20 @@ const ROUTE_SNOMED_ENTRIES = Object.entries(SNOMEDCTRouteCodes).map(([display, c
|
|
|
32
36
|
* data-driven ensures any additions to the enumeration are surfaced
|
|
33
37
|
* automatically throughout the library.
|
|
34
38
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
exports.ROUTE_SNOMED = (0, object_1.objectFromEntries)(ROUTE_SNOMED_ENTRIES);
|
|
40
|
+
exports.ROUTE_TEXT = (0, object_1.objectFromEntries)(ROUTE_SNOMED_ENTRIES.map(([routeCode, meta]) => {
|
|
41
|
+
var _a;
|
|
42
|
+
return [
|
|
43
|
+
routeCode,
|
|
44
|
+
(_a = ROUTE_TEXT_OVERRIDES[routeCode]) !== null && _a !== void 0 ? _a : defaultRouteText(meta.display)
|
|
45
|
+
];
|
|
46
|
+
}));
|
|
40
47
|
/**
|
|
41
48
|
* Inverse lookup so that SNOMED codes flowing in from FHIR can be mapped back
|
|
42
49
|
* into our internal RouteCode abstraction during round-tripping.
|
|
43
50
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
exports.ROUTE_BY_SNOMED = (0, object_1.objectFromEntries)(ROUTE_SNOMED_ENTRIES.map(([routeCode, meta]) => [meta.code, routeCode]));
|
|
52
|
+
exports.DEFAULT_ROUTE_SYNONYMS = (() => {
|
|
46
53
|
const map = {};
|
|
47
54
|
const assign = (key, code) => {
|
|
48
55
|
if (!key)
|
|
@@ -51,7 +58,7 @@ export const DEFAULT_ROUTE_SYNONYMS = (() => {
|
|
|
51
58
|
if (!normalized || map[normalized]) {
|
|
52
59
|
return;
|
|
53
60
|
}
|
|
54
|
-
map[normalized] = { code, text: ROUTE_TEXT[code] };
|
|
61
|
+
map[normalized] = { code, text: exports.ROUTE_TEXT[code] };
|
|
55
62
|
};
|
|
56
63
|
const registerVariants = (value, code) => {
|
|
57
64
|
if (!value)
|
|
@@ -73,51 +80,51 @@ export const DEFAULT_ROUTE_SYNONYMS = (() => {
|
|
|
73
80
|
.trim();
|
|
74
81
|
assign(withoutPunctuation, code);
|
|
75
82
|
};
|
|
76
|
-
registerVariants("po", RouteCode["Oral route"]);
|
|
77
|
-
registerVariants("oral", RouteCode["Oral route"]);
|
|
78
|
-
registerVariants("by mouth", RouteCode["Oral route"]);
|
|
79
|
-
registerVariants("per os", RouteCode["Oral route"]);
|
|
80
|
-
registerVariants("sl", RouteCode["Sublingual route"]);
|
|
81
|
-
registerVariants("s.l.", RouteCode["Sublingual route"]);
|
|
82
|
-
registerVariants("sublingual", RouteCode["Sublingual route"]);
|
|
83
|
-
registerVariants("buccal", RouteCode["Buccal route"]);
|
|
84
|
-
registerVariants("inh", RouteCode["Respiratory tract route (qualifier value)"]);
|
|
85
|
-
registerVariants("inhalation", RouteCode["Respiratory tract route (qualifier value)"]);
|
|
86
|
-
registerVariants("inhaled", RouteCode["Respiratory tract route (qualifier value)"]);
|
|
87
|
-
registerVariants("iv", RouteCode["Intravenous route"]);
|
|
88
|
-
registerVariants("ivp", RouteCode["Intravenous route"]);
|
|
89
|
-
registerVariants("ivpb", RouteCode["Intravenous route"]);
|
|
90
|
-
registerVariants("iv push", RouteCode["Intravenous route"]);
|
|
91
|
-
registerVariants("iv bolus", RouteCode["Intravenous route"]);
|
|
92
|
-
registerVariants("iv drip", RouteCode["Intravenous route"]);
|
|
93
|
-
registerVariants("intravenous", RouteCode["Intravenous route"]);
|
|
94
|
-
registerVariants("im", RouteCode["Intramuscular route"]);
|
|
95
|
-
registerVariants("im injection", RouteCode["Intramuscular route"]);
|
|
96
|
-
registerVariants("intramuscular", RouteCode["Intramuscular route"]);
|
|
97
|
-
registerVariants("sc", RouteCode["Subcutaneous route"]);
|
|
98
|
-
registerVariants("sq", RouteCode["Subcutaneous route"]);
|
|
99
|
-
registerVariants("subq", RouteCode["Subcutaneous route"]);
|
|
100
|
-
registerVariants("subcut", RouteCode["Subcutaneous route"]);
|
|
101
|
-
registerVariants("subcutaneous", RouteCode["Subcutaneous route"]);
|
|
102
|
-
registerVariants("in", RouteCode["Nasal route"]);
|
|
103
|
-
registerVariants("intranasal", RouteCode["Nasal route"]);
|
|
104
|
-
registerVariants("nasal", RouteCode["Nasal route"]);
|
|
105
|
-
registerVariants("top", RouteCode["Topical route"]);
|
|
106
|
-
registerVariants("topical", RouteCode["Topical route"]);
|
|
107
|
-
registerVariants("td", RouteCode["Transdermal route"]);
|
|
108
|
-
registerVariants("patch", RouteCode["Transdermal route"]);
|
|
109
|
-
registerVariants("transdermal", RouteCode["Transdermal route"]);
|
|
110
|
-
registerVariants("pr", RouteCode["Per rectum"]);
|
|
111
|
-
registerVariants("rectal", RouteCode["Per rectum"]);
|
|
112
|
-
registerVariants("pv", RouteCode["Per vagina"]);
|
|
113
|
-
registerVariants("vaginal", RouteCode["Per vagina"]);
|
|
114
|
-
registerVariants("oph", RouteCode["Ophthalmic route"]);
|
|
115
|
-
registerVariants("ophth", RouteCode["Ophthalmic route"]);
|
|
116
|
-
registerVariants("ophthalmic", RouteCode["Ophthalmic route"]);
|
|
117
|
-
registerVariants("ocular", RouteCode["Ophthalmic route"]);
|
|
118
|
-
registerVariants("intravitreal", RouteCode["Intravitreal route (qualifier value)"]);
|
|
119
|
-
registerVariants("intravitreal injection", RouteCode["Intravitreal route (qualifier value)"]);
|
|
120
|
-
registerVariants("ivt", RouteCode["Intravitreal route (qualifier value)"]);
|
|
83
|
+
registerVariants("po", types_1.RouteCode["Oral route"]);
|
|
84
|
+
registerVariants("oral", types_1.RouteCode["Oral route"]);
|
|
85
|
+
registerVariants("by mouth", types_1.RouteCode["Oral route"]);
|
|
86
|
+
registerVariants("per os", types_1.RouteCode["Oral route"]);
|
|
87
|
+
registerVariants("sl", types_1.RouteCode["Sublingual route"]);
|
|
88
|
+
registerVariants("s.l.", types_1.RouteCode["Sublingual route"]);
|
|
89
|
+
registerVariants("sublingual", types_1.RouteCode["Sublingual route"]);
|
|
90
|
+
registerVariants("buccal", types_1.RouteCode["Buccal route"]);
|
|
91
|
+
registerVariants("inh", types_1.RouteCode["Respiratory tract route (qualifier value)"]);
|
|
92
|
+
registerVariants("inhalation", types_1.RouteCode["Respiratory tract route (qualifier value)"]);
|
|
93
|
+
registerVariants("inhaled", types_1.RouteCode["Respiratory tract route (qualifier value)"]);
|
|
94
|
+
registerVariants("iv", types_1.RouteCode["Intravenous route"]);
|
|
95
|
+
registerVariants("ivp", types_1.RouteCode["Intravenous route"]);
|
|
96
|
+
registerVariants("ivpb", types_1.RouteCode["Intravenous route"]);
|
|
97
|
+
registerVariants("iv push", types_1.RouteCode["Intravenous route"]);
|
|
98
|
+
registerVariants("iv bolus", types_1.RouteCode["Intravenous route"]);
|
|
99
|
+
registerVariants("iv drip", types_1.RouteCode["Intravenous route"]);
|
|
100
|
+
registerVariants("intravenous", types_1.RouteCode["Intravenous route"]);
|
|
101
|
+
registerVariants("im", types_1.RouteCode["Intramuscular route"]);
|
|
102
|
+
registerVariants("im injection", types_1.RouteCode["Intramuscular route"]);
|
|
103
|
+
registerVariants("intramuscular", types_1.RouteCode["Intramuscular route"]);
|
|
104
|
+
registerVariants("sc", types_1.RouteCode["Subcutaneous route"]);
|
|
105
|
+
registerVariants("sq", types_1.RouteCode["Subcutaneous route"]);
|
|
106
|
+
registerVariants("subq", types_1.RouteCode["Subcutaneous route"]);
|
|
107
|
+
registerVariants("subcut", types_1.RouteCode["Subcutaneous route"]);
|
|
108
|
+
registerVariants("subcutaneous", types_1.RouteCode["Subcutaneous route"]);
|
|
109
|
+
registerVariants("in", types_1.RouteCode["Nasal route"]);
|
|
110
|
+
registerVariants("intranasal", types_1.RouteCode["Nasal route"]);
|
|
111
|
+
registerVariants("nasal", types_1.RouteCode["Nasal route"]);
|
|
112
|
+
registerVariants("top", types_1.RouteCode["Topical route"]);
|
|
113
|
+
registerVariants("topical", types_1.RouteCode["Topical route"]);
|
|
114
|
+
registerVariants("td", types_1.RouteCode["Transdermal route"]);
|
|
115
|
+
registerVariants("patch", types_1.RouteCode["Transdermal route"]);
|
|
116
|
+
registerVariants("transdermal", types_1.RouteCode["Transdermal route"]);
|
|
117
|
+
registerVariants("pr", types_1.RouteCode["Per rectum"]);
|
|
118
|
+
registerVariants("rectal", types_1.RouteCode["Per rectum"]);
|
|
119
|
+
registerVariants("pv", types_1.RouteCode["Per vagina"]);
|
|
120
|
+
registerVariants("vaginal", types_1.RouteCode["Per vagina"]);
|
|
121
|
+
registerVariants("oph", types_1.RouteCode["Ophthalmic route"]);
|
|
122
|
+
registerVariants("ophth", types_1.RouteCode["Ophthalmic route"]);
|
|
123
|
+
registerVariants("ophthalmic", types_1.RouteCode["Ophthalmic route"]);
|
|
124
|
+
registerVariants("ocular", types_1.RouteCode["Ophthalmic route"]);
|
|
125
|
+
registerVariants("intravitreal", types_1.RouteCode["Intravitreal route (qualifier value)"]);
|
|
126
|
+
registerVariants("intravitreal injection", types_1.RouteCode["Intravitreal route (qualifier value)"]);
|
|
127
|
+
registerVariants("ivt", types_1.RouteCode["Intravitreal route (qualifier value)"]);
|
|
121
128
|
for (const [routeCode, meta] of ROUTE_SNOMED_ENTRIES) {
|
|
122
129
|
const display = meta.display.toLowerCase();
|
|
123
130
|
registerVariants(display, routeCode);
|
|
@@ -133,7 +140,92 @@ export const DEFAULT_ROUTE_SYNONYMS = (() => {
|
|
|
133
140
|
}
|
|
134
141
|
return map;
|
|
135
142
|
})();
|
|
136
|
-
|
|
143
|
+
const UNIT_PREFIXES = [
|
|
144
|
+
{ canonical: "", abbreviations: [""], names: [{ singular: "", plural: "" }] },
|
|
145
|
+
{
|
|
146
|
+
canonical: "m",
|
|
147
|
+
abbreviations: ["m"],
|
|
148
|
+
names: [{ singular: "milli", plural: "milli" }],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
canonical: "mc",
|
|
152
|
+
abbreviations: ["mc", "µ", "μ", "u"],
|
|
153
|
+
names: [{ singular: "micro", plural: "micro" }],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
canonical: "n",
|
|
157
|
+
abbreviations: ["n"],
|
|
158
|
+
names: [{ singular: "nano", plural: "nano" }],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
canonical: "k",
|
|
162
|
+
abbreviations: ["k"],
|
|
163
|
+
names: [{ singular: "kilo", plural: "kilo" }],
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
const METRIC_UNIT_BASES = [
|
|
167
|
+
{
|
|
168
|
+
canonical: "g",
|
|
169
|
+
abbreviations: ["g"],
|
|
170
|
+
names: [
|
|
171
|
+
{ singular: "gram", plural: "grams" },
|
|
172
|
+
{ singular: "gramme", plural: "grammes" },
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
canonical: "L",
|
|
177
|
+
abbreviations: ["l"],
|
|
178
|
+
names: [
|
|
179
|
+
{ singular: "liter", plural: "liters" },
|
|
180
|
+
{ singular: "litre", plural: "litres" },
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
function assignUnitSynonym(map, key, canonical) {
|
|
185
|
+
const normalized = key.trim().toLowerCase();
|
|
186
|
+
if (!normalized || map[normalized]) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
map[normalized] = canonical;
|
|
190
|
+
}
|
|
191
|
+
function addMetricUnitSynonyms(map) {
|
|
192
|
+
for (const prefix of UNIT_PREFIXES) {
|
|
193
|
+
for (const base of METRIC_UNIT_BASES) {
|
|
194
|
+
const canonical = `${prefix.canonical}${base.canonical}`;
|
|
195
|
+
for (const prefixAbbrev of prefix.abbreviations) {
|
|
196
|
+
for (const baseAbbrev of base.abbreviations) {
|
|
197
|
+
if (!baseAbbrev) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
const token = `${prefixAbbrev}${baseAbbrev}`;
|
|
201
|
+
assignUnitSynonym(map, token, canonical);
|
|
202
|
+
assignUnitSynonym(map, `${token}s`, canonical);
|
|
203
|
+
if (token.endsWith(".")) {
|
|
204
|
+
assignUnitSynonym(map, token.replace(/\.+$/, ""), canonical);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
for (const prefixName of prefix.names) {
|
|
209
|
+
for (const baseName of base.names) {
|
|
210
|
+
const singular = `${prefixName.singular}${baseName.singular}`;
|
|
211
|
+
const plural = `${prefixName.singular}${baseName.plural}`;
|
|
212
|
+
const hyphenSingular = prefixName.singular
|
|
213
|
+
? `${prefixName.singular}-${baseName.singular}`
|
|
214
|
+
: baseName.singular;
|
|
215
|
+
const hyphenPlural = prefixName.singular
|
|
216
|
+
? `${prefixName.singular}-${baseName.plural}`
|
|
217
|
+
: baseName.plural;
|
|
218
|
+
assignUnitSynonym(map, singular, canonical);
|
|
219
|
+
assignUnitSynonym(map, plural, canonical);
|
|
220
|
+
assignUnitSynonym(map, hyphenSingular, canonical);
|
|
221
|
+
assignUnitSynonym(map, hyphenPlural, canonical);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
exports.HOUSEHOLD_VOLUME_UNITS = ["tsp", "tbsp"];
|
|
228
|
+
const STATIC_UNIT_SYNONYMS = {
|
|
137
229
|
tab: "tab",
|
|
138
230
|
tabs: "tab",
|
|
139
231
|
tablet: "tab",
|
|
@@ -142,13 +234,6 @@ export const DEFAULT_UNIT_SYNONYMS = {
|
|
|
142
234
|
caps: "cap",
|
|
143
235
|
capsule: "cap",
|
|
144
236
|
capsules: "cap",
|
|
145
|
-
ml: "mL",
|
|
146
|
-
"milliliter": "mL",
|
|
147
|
-
"milliliters": "mL",
|
|
148
|
-
mg: "mg",
|
|
149
|
-
g: "g",
|
|
150
|
-
mcg: "mcg",
|
|
151
|
-
ug: "mcg",
|
|
152
237
|
puff: "puff",
|
|
153
238
|
puffs: "puff",
|
|
154
239
|
spray: "spray",
|
|
@@ -159,144 +244,195 @@ export const DEFAULT_UNIT_SYNONYMS = {
|
|
|
159
244
|
patches: "patch",
|
|
160
245
|
supp: "suppository",
|
|
161
246
|
suppository: "suppository",
|
|
162
|
-
suppositories: "suppository"
|
|
247
|
+
suppositories: "suppository",
|
|
248
|
+
tsp: "tsp",
|
|
249
|
+
"tsp.": "tsp",
|
|
250
|
+
tsps: "tsp",
|
|
251
|
+
"tsps.": "tsp",
|
|
252
|
+
teaspoon: "tsp",
|
|
253
|
+
teaspoons: "tsp",
|
|
254
|
+
tbsp: "tbsp",
|
|
255
|
+
"tbsp.": "tbsp",
|
|
256
|
+
tbs: "tbsp",
|
|
257
|
+
"tbs.": "tbsp",
|
|
258
|
+
tablespoon: "tbsp",
|
|
259
|
+
tablespoons: "tbsp",
|
|
163
260
|
};
|
|
164
|
-
|
|
261
|
+
exports.DEFAULT_UNIT_SYNONYMS = (() => {
|
|
262
|
+
const map = Object.assign({}, STATIC_UNIT_SYNONYMS);
|
|
263
|
+
addMetricUnitSynonyms(map);
|
|
264
|
+
return map;
|
|
265
|
+
})();
|
|
266
|
+
exports.TIMING_ABBREVIATIONS = {
|
|
165
267
|
qd: {
|
|
166
268
|
code: "QD",
|
|
167
269
|
frequency: 1,
|
|
168
270
|
period: 1,
|
|
169
|
-
periodUnit: FhirPeriodUnit.Day,
|
|
271
|
+
periodUnit: types_1.FhirPeriodUnit.Day,
|
|
170
272
|
discouraged: "QD"
|
|
171
273
|
},
|
|
172
274
|
qod: {
|
|
173
275
|
code: "QOD",
|
|
174
276
|
period: 2,
|
|
175
|
-
periodUnit: FhirPeriodUnit.Day,
|
|
277
|
+
periodUnit: types_1.FhirPeriodUnit.Day,
|
|
176
278
|
discouraged: "QOD"
|
|
177
279
|
},
|
|
280
|
+
od: {
|
|
281
|
+
code: "QD",
|
|
282
|
+
frequency: 1,
|
|
283
|
+
period: 1,
|
|
284
|
+
periodUnit: types_1.FhirPeriodUnit.Day
|
|
285
|
+
},
|
|
178
286
|
ad: {
|
|
179
287
|
period: 2,
|
|
180
|
-
periodUnit: FhirPeriodUnit.Day,
|
|
288
|
+
periodUnit: types_1.FhirPeriodUnit.Day,
|
|
181
289
|
discouraged: "AD"
|
|
182
290
|
},
|
|
183
291
|
bid: {
|
|
184
292
|
code: "BID",
|
|
185
293
|
frequency: 2,
|
|
186
294
|
period: 1,
|
|
187
|
-
periodUnit: FhirPeriodUnit.Day
|
|
295
|
+
periodUnit: types_1.FhirPeriodUnit.Day
|
|
188
296
|
},
|
|
189
297
|
tid: {
|
|
190
298
|
code: "TID",
|
|
191
299
|
frequency: 3,
|
|
192
300
|
period: 1,
|
|
193
|
-
periodUnit: FhirPeriodUnit.Day
|
|
301
|
+
periodUnit: types_1.FhirPeriodUnit.Day
|
|
194
302
|
},
|
|
195
303
|
qid: {
|
|
196
304
|
code: "QID",
|
|
197
305
|
frequency: 4,
|
|
198
306
|
period: 1,
|
|
199
|
-
periodUnit: FhirPeriodUnit.Day
|
|
307
|
+
periodUnit: types_1.FhirPeriodUnit.Day
|
|
200
308
|
},
|
|
201
|
-
q1h: { code: "Q1H", period: 1, periodUnit: FhirPeriodUnit.Hour },
|
|
202
|
-
q2h: { code: "Q2H", period: 2, periodUnit: FhirPeriodUnit.Hour },
|
|
203
|
-
q3h: { code: "Q3H", period: 3, periodUnit: FhirPeriodUnit.Hour },
|
|
204
|
-
q4h: { code: "Q4H", period: 4, periodUnit: FhirPeriodUnit.Hour },
|
|
205
|
-
q6h: { code: "Q6H", period: 6, periodUnit: FhirPeriodUnit.Hour },
|
|
206
|
-
q8h: { code: "Q8H", period: 8, periodUnit: FhirPeriodUnit.Hour },
|
|
207
|
-
q12h: { code: "Q12H", period: 12, periodUnit: FhirPeriodUnit.Hour },
|
|
208
|
-
q24h: { code: "Q24H", period: 24, periodUnit: FhirPeriodUnit.Hour },
|
|
309
|
+
q1h: { code: "Q1H", period: 1, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
310
|
+
q2h: { code: "Q2H", period: 2, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
311
|
+
q3h: { code: "Q3H", period: 3, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
312
|
+
q4h: { code: "Q4H", period: 4, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
313
|
+
q6h: { code: "Q6H", period: 6, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
314
|
+
q8h: { code: "Q8H", period: 8, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
315
|
+
q12h: { code: "Q12H", period: 12, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
316
|
+
q24h: { code: "Q24H", period: 24, periodUnit: types_1.FhirPeriodUnit.Hour },
|
|
209
317
|
q1d: {
|
|
210
318
|
code: "QD",
|
|
211
319
|
frequency: 1,
|
|
212
320
|
period: 1,
|
|
213
|
-
periodUnit: FhirPeriodUnit.Day
|
|
321
|
+
periodUnit: types_1.FhirPeriodUnit.Day
|
|
214
322
|
},
|
|
215
|
-
q2d: { code: "Q2D", period: 2, periodUnit: FhirPeriodUnit.Day },
|
|
216
|
-
q3d: { code: "Q3D", period: 3, periodUnit: FhirPeriodUnit.Day },
|
|
217
|
-
q1wk: { code: "WK", period: 1, periodUnit: FhirPeriodUnit.Week },
|
|
218
|
-
q1w: { code: "WK", period: 1, periodUnit: FhirPeriodUnit.Week },
|
|
219
|
-
q2wk: { code: "Q2WK", period: 2, periodUnit: FhirPeriodUnit.Week },
|
|
220
|
-
q1mo: { code: "MO", period: 1, periodUnit: FhirPeriodUnit.Month },
|
|
221
|
-
q2mo: { code: "Q2MO", period: 2, periodUnit: FhirPeriodUnit.Month },
|
|
222
|
-
wk: { code: "WK", period: 1, periodUnit: FhirPeriodUnit.Week },
|
|
223
|
-
weekly: { code: "WK", period: 1, periodUnit: FhirPeriodUnit.Week },
|
|
224
|
-
mo: { code: "MO", period: 1, periodUnit: FhirPeriodUnit.Month },
|
|
225
|
-
monthly: { code: "MO", period: 1, periodUnit: FhirPeriodUnit.Month },
|
|
226
|
-
am: { code: "AM", when: [EventTiming.Morning] },
|
|
227
|
-
pm: { code: "PM", when: [EventTiming.Evening] }
|
|
228
|
-
};
|
|
229
|
-
export const EVENT_TIMING_TOKENS = {
|
|
230
|
-
ac: EventTiming["Before Meal"],
|
|
231
|
-
acm: EventTiming["Before Breakfast"],
|
|
232
|
-
acl: EventTiming["Before Lunch"],
|
|
233
|
-
acd: EventTiming["Before Lunch"],
|
|
234
|
-
acv: EventTiming["Before Dinner"],
|
|
235
|
-
pc: EventTiming["After Meal"],
|
|
236
|
-
pcm: EventTiming["After Breakfast"],
|
|
237
|
-
pcl: EventTiming["After Lunch"],
|
|
238
|
-
pcd: EventTiming["After Lunch"],
|
|
239
|
-
pcv: EventTiming["After Dinner"],
|
|
240
|
-
wm: EventTiming.Meal,
|
|
241
|
-
"with meals": EventTiming.Meal,
|
|
242
|
-
"@m": EventTiming.Meal,
|
|
243
|
-
"@meal": EventTiming.Meal,
|
|
244
|
-
"@meals": EventTiming.Meal,
|
|
245
|
-
cm: EventTiming.Breakfast,
|
|
246
|
-
cd: EventTiming.Lunch,
|
|
247
|
-
cv: EventTiming.Dinner,
|
|
248
|
-
am: EventTiming.Morning,
|
|
249
|
-
morning: EventTiming.Morning,
|
|
250
|
-
morn: EventTiming.Morning,
|
|
251
|
-
noon: EventTiming.Noon,
|
|
252
|
-
pm: EventTiming.Evening,
|
|
253
|
-
evening: EventTiming.Evening,
|
|
254
|
-
night: EventTiming.Night,
|
|
255
|
-
hs: EventTiming["Before Sleep"],
|
|
256
|
-
bedtime: EventTiming["Before Sleep"],
|
|
257
|
-
wake: EventTiming.Wake,
|
|
258
|
-
waking: EventTiming.Wake,
|
|
259
|
-
stat: EventTiming.Immediate
|
|
323
|
+
q2d: { code: "Q2D", period: 2, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
324
|
+
q3d: { code: "Q3D", period: 3, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
325
|
+
q1wk: { code: "WK", period: 1, periodUnit: types_1.FhirPeriodUnit.Week },
|
|
326
|
+
q1w: { code: "WK", period: 1, periodUnit: types_1.FhirPeriodUnit.Week },
|
|
327
|
+
q2wk: { code: "Q2WK", period: 2, periodUnit: types_1.FhirPeriodUnit.Week },
|
|
328
|
+
q1mo: { code: "MO", period: 1, periodUnit: types_1.FhirPeriodUnit.Month },
|
|
329
|
+
q2mo: { code: "Q2MO", period: 2, periodUnit: types_1.FhirPeriodUnit.Month },
|
|
330
|
+
wk: { code: "WK", period: 1, periodUnit: types_1.FhirPeriodUnit.Week },
|
|
331
|
+
weekly: { code: "WK", period: 1, periodUnit: types_1.FhirPeriodUnit.Week },
|
|
332
|
+
mo: { code: "MO", period: 1, periodUnit: types_1.FhirPeriodUnit.Month },
|
|
333
|
+
monthly: { code: "MO", period: 1, periodUnit: types_1.FhirPeriodUnit.Month },
|
|
334
|
+
am: { code: "AM", when: [types_1.EventTiming.Morning] },
|
|
335
|
+
pm: { code: "PM", when: [types_1.EventTiming.Evening] }
|
|
260
336
|
};
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
337
|
+
exports.EVENT_TIMING_TOKENS = {
|
|
338
|
+
ac: types_1.EventTiming["Before Meal"],
|
|
339
|
+
acm: types_1.EventTiming["Before Breakfast"],
|
|
340
|
+
acl: types_1.EventTiming["Before Lunch"],
|
|
341
|
+
acd: types_1.EventTiming["Before Lunch"],
|
|
342
|
+
acv: types_1.EventTiming["Before Dinner"],
|
|
343
|
+
pc: types_1.EventTiming["After Meal"],
|
|
344
|
+
pcm: types_1.EventTiming["After Breakfast"],
|
|
345
|
+
pcl: types_1.EventTiming["After Lunch"],
|
|
346
|
+
pcd: types_1.EventTiming["After Lunch"],
|
|
347
|
+
pcv: types_1.EventTiming["After Dinner"],
|
|
348
|
+
wm: types_1.EventTiming.Meal,
|
|
349
|
+
"with meals": types_1.EventTiming.Meal,
|
|
350
|
+
"@m": types_1.EventTiming.Meal,
|
|
351
|
+
"@meal": types_1.EventTiming.Meal,
|
|
352
|
+
"@meals": types_1.EventTiming.Meal,
|
|
353
|
+
cm: types_1.EventTiming.Breakfast,
|
|
354
|
+
breakfast: types_1.EventTiming.Breakfast,
|
|
355
|
+
bfast: types_1.EventTiming.Breakfast,
|
|
356
|
+
brkfst: types_1.EventTiming.Breakfast,
|
|
357
|
+
brk: types_1.EventTiming.Breakfast,
|
|
358
|
+
cd: types_1.EventTiming.Lunch,
|
|
359
|
+
lunch: types_1.EventTiming.Lunch,
|
|
360
|
+
lunchtime: types_1.EventTiming.Lunch,
|
|
361
|
+
cv: types_1.EventTiming.Dinner,
|
|
362
|
+
dinner: types_1.EventTiming.Dinner,
|
|
363
|
+
dinnertime: types_1.EventTiming.Dinner,
|
|
364
|
+
supper: types_1.EventTiming.Dinner,
|
|
365
|
+
suppertime: types_1.EventTiming.Dinner,
|
|
366
|
+
am: types_1.EventTiming.Morning,
|
|
367
|
+
morning: types_1.EventTiming.Morning,
|
|
368
|
+
morn: types_1.EventTiming.Morning,
|
|
369
|
+
noon: types_1.EventTiming.Noon,
|
|
370
|
+
midday: types_1.EventTiming.Noon,
|
|
371
|
+
"mid-day": types_1.EventTiming.Noon,
|
|
372
|
+
afternoon: types_1.EventTiming.Afternoon,
|
|
373
|
+
aft: types_1.EventTiming.Afternoon,
|
|
374
|
+
pm: types_1.EventTiming.Evening,
|
|
375
|
+
evening: types_1.EventTiming.Evening,
|
|
376
|
+
night: types_1.EventTiming.Night,
|
|
377
|
+
hs: types_1.EventTiming["Before Sleep"],
|
|
378
|
+
bedtime: types_1.EventTiming["Before Sleep"],
|
|
379
|
+
wake: types_1.EventTiming.Wake,
|
|
380
|
+
waking: types_1.EventTiming.Wake,
|
|
381
|
+
stat: types_1.EventTiming.Immediate
|
|
266
382
|
};
|
|
267
|
-
|
|
383
|
+
const MEAL_KEYWORD_ENTRIES = [];
|
|
384
|
+
function registerMealKeywords(keys, meal) {
|
|
385
|
+
for (const key of keys) {
|
|
386
|
+
MEAL_KEYWORD_ENTRIES.push([key, meal]);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
registerMealKeywords(["breakfast", "bfast", "brkfst", "brk"], {
|
|
390
|
+
pc: types_1.EventTiming["After Breakfast"],
|
|
391
|
+
ac: types_1.EventTiming["Before Breakfast"]
|
|
392
|
+
});
|
|
393
|
+
registerMealKeywords(["lunch", "lunchtime"], {
|
|
394
|
+
pc: types_1.EventTiming["After Lunch"],
|
|
395
|
+
ac: types_1.EventTiming["Before Lunch"]
|
|
396
|
+
});
|
|
397
|
+
registerMealKeywords(["dinner", "dinnertime", "supper", "suppertime"], {
|
|
398
|
+
pc: types_1.EventTiming["After Dinner"],
|
|
399
|
+
ac: types_1.EventTiming["Before Dinner"]
|
|
400
|
+
});
|
|
401
|
+
exports.MEAL_KEYWORDS = (0, object_1.objectFromEntries)(MEAL_KEYWORD_ENTRIES);
|
|
402
|
+
exports.DISCOURAGED_TOKENS = {
|
|
268
403
|
qd: "QD",
|
|
269
404
|
qod: "QOD",
|
|
405
|
+
od: "OD",
|
|
270
406
|
bld: "BLD",
|
|
271
407
|
"b-l-d": "BLD",
|
|
272
408
|
ad: "AD"
|
|
273
409
|
};
|
|
274
|
-
|
|
275
|
-
monday: FhirDayOfWeek.Monday,
|
|
276
|
-
mon: FhirDayOfWeek.Monday,
|
|
277
|
-
tuesday: FhirDayOfWeek.Tuesday,
|
|
278
|
-
tue: FhirDayOfWeek.Tuesday,
|
|
279
|
-
wednesday: FhirDayOfWeek.Wednesday,
|
|
280
|
-
wed: FhirDayOfWeek.Wednesday,
|
|
281
|
-
thursday: FhirDayOfWeek.Thursday,
|
|
282
|
-
thu: FhirDayOfWeek.Thursday,
|
|
283
|
-
friday: FhirDayOfWeek.Friday,
|
|
284
|
-
fri: FhirDayOfWeek.Friday,
|
|
285
|
-
saturday: FhirDayOfWeek.Saturday,
|
|
286
|
-
sat: FhirDayOfWeek.Saturday,
|
|
287
|
-
sunday: FhirDayOfWeek.Sunday,
|
|
288
|
-
sun: FhirDayOfWeek.Sunday
|
|
410
|
+
exports.DAY_OF_WEEK_TOKENS = {
|
|
411
|
+
monday: types_1.FhirDayOfWeek.Monday,
|
|
412
|
+
mon: types_1.FhirDayOfWeek.Monday,
|
|
413
|
+
tuesday: types_1.FhirDayOfWeek.Tuesday,
|
|
414
|
+
tue: types_1.FhirDayOfWeek.Tuesday,
|
|
415
|
+
wednesday: types_1.FhirDayOfWeek.Wednesday,
|
|
416
|
+
wed: types_1.FhirDayOfWeek.Wednesday,
|
|
417
|
+
thursday: types_1.FhirDayOfWeek.Thursday,
|
|
418
|
+
thu: types_1.FhirDayOfWeek.Thursday,
|
|
419
|
+
friday: types_1.FhirDayOfWeek.Friday,
|
|
420
|
+
fri: types_1.FhirDayOfWeek.Friday,
|
|
421
|
+
saturday: types_1.FhirDayOfWeek.Saturday,
|
|
422
|
+
sat: types_1.FhirDayOfWeek.Saturday,
|
|
423
|
+
sunday: types_1.FhirDayOfWeek.Sunday,
|
|
424
|
+
sun: types_1.FhirDayOfWeek.Sunday
|
|
289
425
|
};
|
|
290
|
-
|
|
291
|
-
daily: { frequency: 1, periodUnit: FhirPeriodUnit.Day },
|
|
292
|
-
"once daily": { frequency: 1, periodUnit: FhirPeriodUnit.Day },
|
|
293
|
-
once: { frequency: 1, periodUnit: FhirPeriodUnit.Day },
|
|
294
|
-
twice: { frequency: 2, periodUnit: FhirPeriodUnit.Day },
|
|
295
|
-
"twice daily": { frequency: 2, periodUnit: FhirPeriodUnit.Day },
|
|
296
|
-
"three times": { frequency: 3, periodUnit: FhirPeriodUnit.Day },
|
|
297
|
-
"three times daily": { frequency: 3, periodUnit: FhirPeriodUnit.Day }
|
|
426
|
+
exports.WORD_FREQUENCIES = {
|
|
427
|
+
daily: { frequency: 1, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
428
|
+
"once daily": { frequency: 1, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
429
|
+
once: { frequency: 1, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
430
|
+
twice: { frequency: 2, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
431
|
+
"twice daily": { frequency: 2, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
432
|
+
"three times": { frequency: 3, periodUnit: types_1.FhirPeriodUnit.Day },
|
|
433
|
+
"three times daily": { frequency: 3, periodUnit: types_1.FhirPeriodUnit.Day }
|
|
298
434
|
};
|
|
299
|
-
|
|
435
|
+
exports.KNOWN_DOSAGE_FORMS_TO_DOSE = {
|
|
300
436
|
"nasal spray, suspension": "nasal spray",
|
|
301
437
|
"implantation chain": "implantation chain",
|
|
302
438
|
capsule: "capsule",
|
|
@@ -353,6 +489,9 @@ export const KNOWN_DOSAGE_FORMS_TO_DOSE = {
|
|
|
353
489
|
collodion: "collodion",
|
|
354
490
|
"powder for rectal solution": "powder for rectal solution",
|
|
355
491
|
"eye drops, solution": "eye drops, solution",
|
|
492
|
+
// additional helpers
|
|
493
|
+
"eye drops": "eye drops, solution",
|
|
494
|
+
"eye drop": "eye drops, solution",
|
|
356
495
|
"oromucosal paste": "oromucosal paste",
|
|
357
496
|
"dental paste": "dental paste",
|
|
358
497
|
"solution for peritoneal dialysis": "solution for peritoneal dialysis",
|
|
@@ -481,188 +620,190 @@ export const KNOWN_DOSAGE_FORMS_TO_DOSE = {
|
|
|
481
620
|
* Map of normalized dosage-form labels to their associated SNOMED route code.
|
|
482
621
|
* The keys intentionally mirror KNOWN_DOSAGE_FORMS_TO_DOSE to keep lookups simple.
|
|
483
622
|
*/
|
|
484
|
-
|
|
485
|
-
"nasal spray, suspension": SNOMEDCTRouteCodes["Nasal route"],
|
|
486
|
-
"implantation chain": SNOMEDCTRouteCodes["Intralesional use"],
|
|
487
|
-
capsule: SNOMEDCTRouteCodes["Oral route"],
|
|
488
|
-
"capsule, soft": SNOMEDCTRouteCodes["Oral route"],
|
|
489
|
-
"oral solution": SNOMEDCTRouteCodes["Oral route"],
|
|
490
|
-
"oral suspension": SNOMEDCTRouteCodes["Oral route"],
|
|
491
|
-
"inhalation powder": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
492
|
-
"nasal spray, solution": SNOMEDCTRouteCodes["Nasal route"],
|
|
493
|
-
"pressurised inhalation, suspension": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
494
|
-
"pressurised inhalation, solution": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
495
|
-
"rectal foam": SNOMEDCTRouteCodes["Per rectum"],
|
|
496
|
-
"sublingual spray, solution": SNOMEDCTRouteCodes["Sublingual route"],
|
|
497
|
-
"inhalation vapour, solution": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
498
|
-
"inhalation powder, pre-dispensed": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
499
|
-
"solution for injection": SNOMEDCTRouteCodes["Intravenous route"],
|
|
500
|
-
"inhalation solution": SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
501
|
-
cream: SNOMEDCTRouteCodes["Topical route"],
|
|
502
|
-
"cutaneous powder": SNOMEDCTRouteCodes["Topical route"],
|
|
503
|
-
"powder for solution for injection": SNOMEDCTRouteCodes["Intravenous route"],
|
|
504
|
-
gel: SNOMEDCTRouteCodes["Topical route"],
|
|
505
|
-
"granules for oral solution": SNOMEDCTRouteCodes["Oral route"],
|
|
506
|
-
"powder for oral solution": SNOMEDCTRouteCodes["Oral route"],
|
|
507
|
-
"oral paste": SNOMEDCTRouteCodes["Oromucosal use"],
|
|
508
|
-
"cutaneous stick": SNOMEDCTRouteCodes["Transdermal route"],
|
|
509
|
-
"prolonged-release granules": SNOMEDCTRouteCodes["Oral route"],
|
|
510
|
-
"oromucosal gel": SNOMEDCTRouteCodes["Oromucosal use"],
|
|
511
|
-
"oral powder": SNOMEDCTRouteCodes["Oral route"],
|
|
512
|
-
ointment: SNOMEDCTRouteCodes["Topical route"],
|
|
513
|
-
"cutaneous paste": SNOMEDCTRouteCodes["Topical route"],
|
|
514
|
-
"powder for oral suspension": SNOMEDCTRouteCodes["Oral route"],
|
|
515
|
-
"vaginal gel": SNOMEDCTRouteCodes["Per vagina"],
|
|
516
|
-
"nasal drops, powder for solution": SNOMEDCTRouteCodes["Nasal route"],
|
|
517
|
-
"oral gel": SNOMEDCTRouteCodes["Oromucosal use"],
|
|
518
|
-
"eye gel": SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
519
|
-
"impregnated dressing": SNOMEDCTRouteCodes["Topical route"],
|
|
520
|
-
"vaginal cream": SNOMEDCTRouteCodes["Per vagina"],
|
|
521
|
-
"ear powder": SNOMEDCTRouteCodes["Otic route"],
|
|
522
|
-
"cutaneous emulsion": SNOMEDCTRouteCodes["Topical route"],
|
|
523
|
-
"cutaneous liquid": SNOMEDCTRouteCodes["Topical route"],
|
|
524
|
-
"cutaneous solution": SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
525
|
-
"effervescent powder": SNOMEDCTRouteCodes["Oral route"],
|
|
526
|
-
"bath additive": SNOMEDCTRouteCodes["Topical route"],
|
|
527
|
-
"nasal spray, powder for solution": SNOMEDCTRouteCodes["Nasal route"],
|
|
528
|
-
"powder for cutaneous solution": SNOMEDCTRouteCodes["Topical route"],
|
|
529
|
-
"dental gel": SNOMEDCTRouteCodes["Gingival use"],
|
|
530
|
-
"nasal gel": SNOMEDCTRouteCodes["Nasal route"],
|
|
531
|
-
"powder for oral/rectal suspension": SNOMEDCTRouteCodes["Oral route"],
|
|
532
|
-
"gingival gel": SNOMEDCTRouteCodes["Gingival use"],
|
|
533
|
-
"powder for solution for infusion": SNOMEDCTRouteCodes["Intravenous route"],
|
|
534
|
-
"gastro-resistant granules": SNOMEDCTRouteCodes["Oral route"],
|
|
535
|
-
"eye ointment": SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
536
|
-
"oromucosal spray, solution": SNOMEDCTRouteCodes["Oropharyngeal route (qualifier value)"],
|
|
537
|
-
granules: SNOMEDCTRouteCodes["Oral route"],
|
|
538
|
-
collodion: SNOMEDCTRouteCodes["Oral route"],
|
|
539
|
-
"powder for rectal solution": SNOMEDCTRouteCodes["Per rectum"],
|
|
540
|
-
"eye drops, solution": SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
541
|
-
"
|
|
542
|
-
"
|
|
543
|
-
"
|
|
544
|
-
paste: SNOMEDCTRouteCodes["
|
|
545
|
-
"
|
|
546
|
-
|
|
547
|
-
"
|
|
548
|
-
|
|
549
|
-
"
|
|
550
|
-
|
|
551
|
-
"
|
|
552
|
-
"
|
|
553
|
-
"
|
|
554
|
-
"solution
|
|
555
|
-
"solution for
|
|
556
|
-
"
|
|
557
|
-
"
|
|
558
|
-
"
|
|
559
|
-
"
|
|
560
|
-
"concentrate for
|
|
561
|
-
"
|
|
562
|
-
"concentrate for
|
|
563
|
-
"
|
|
564
|
-
"
|
|
565
|
-
"
|
|
566
|
-
"
|
|
567
|
-
"powder for
|
|
568
|
-
"
|
|
569
|
-
"powder
|
|
570
|
-
"
|
|
571
|
-
"
|
|
572
|
-
|
|
573
|
-
"
|
|
574
|
-
|
|
575
|
-
"
|
|
576
|
-
"concentrate for
|
|
577
|
-
"
|
|
578
|
-
"concentrate
|
|
579
|
-
"concentrate
|
|
580
|
-
"
|
|
581
|
-
"
|
|
582
|
-
"
|
|
583
|
-
"
|
|
584
|
-
"
|
|
585
|
-
"
|
|
586
|
-
"
|
|
587
|
-
"solution for
|
|
588
|
-
"
|
|
589
|
-
"
|
|
590
|
-
"
|
|
591
|
-
"
|
|
592
|
-
"
|
|
593
|
-
"
|
|
594
|
-
"
|
|
595
|
-
"
|
|
596
|
-
"
|
|
597
|
-
"
|
|
598
|
-
"
|
|
599
|
-
"
|
|
600
|
-
"
|
|
601
|
-
"
|
|
602
|
-
"
|
|
603
|
-
"
|
|
604
|
-
"
|
|
605
|
-
"
|
|
606
|
-
"
|
|
607
|
-
"
|
|
608
|
-
"
|
|
609
|
-
"
|
|
610
|
-
"
|
|
611
|
-
"
|
|
612
|
-
"
|
|
613
|
-
"
|
|
614
|
-
|
|
615
|
-
"powder and solvent for oral
|
|
616
|
-
|
|
617
|
-
"oral
|
|
618
|
-
"oral
|
|
619
|
-
"oral
|
|
620
|
-
"
|
|
621
|
-
"
|
|
622
|
-
"
|
|
623
|
-
|
|
624
|
-
"
|
|
625
|
-
|
|
626
|
-
"
|
|
627
|
-
"
|
|
628
|
-
"
|
|
629
|
-
"
|
|
630
|
-
"
|
|
631
|
-
"gastro-resistant
|
|
632
|
-
"
|
|
633
|
-
"
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
"
|
|
640
|
-
|
|
641
|
-
"powder
|
|
642
|
-
"powder and solvent for
|
|
643
|
-
"
|
|
644
|
-
"
|
|
645
|
-
"
|
|
646
|
-
"
|
|
647
|
-
|
|
648
|
-
"
|
|
649
|
-
|
|
650
|
-
"
|
|
651
|
-
|
|
652
|
-
"medicated
|
|
653
|
-
"
|
|
654
|
-
"
|
|
655
|
-
"
|
|
656
|
-
"
|
|
657
|
-
"
|
|
658
|
-
"
|
|
659
|
-
"
|
|
660
|
-
"
|
|
661
|
-
"
|
|
662
|
-
"
|
|
663
|
-
"
|
|
623
|
+
exports.KNOWN_TMT_DOSAGE_FORM_TO_SNOMED_ROUTE = {
|
|
624
|
+
"nasal spray, suspension": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
625
|
+
"implantation chain": types_1.SNOMEDCTRouteCodes["Intralesional use"],
|
|
626
|
+
capsule: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
627
|
+
"capsule, soft": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
628
|
+
"oral solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
629
|
+
"oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
630
|
+
"inhalation powder": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
631
|
+
"nasal spray, solution": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
632
|
+
"pressurised inhalation, suspension": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
633
|
+
"pressurised inhalation, solution": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
634
|
+
"rectal foam": types_1.SNOMEDCTRouteCodes["Per rectum"],
|
|
635
|
+
"sublingual spray, solution": types_1.SNOMEDCTRouteCodes["Sublingual route"],
|
|
636
|
+
"inhalation vapour, solution": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
637
|
+
"inhalation powder, pre-dispensed": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
638
|
+
"solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
639
|
+
"inhalation solution": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
640
|
+
cream: types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
641
|
+
"cutaneous powder": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
642
|
+
"powder for solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
643
|
+
gel: types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
644
|
+
"granules for oral solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
645
|
+
"powder for oral solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
646
|
+
"oral paste": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
647
|
+
"cutaneous stick": types_1.SNOMEDCTRouteCodes["Transdermal route"],
|
|
648
|
+
"prolonged-release granules": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
649
|
+
"oromucosal gel": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
650
|
+
"oral powder": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
651
|
+
ointment: types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
652
|
+
"cutaneous paste": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
653
|
+
"powder for oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
654
|
+
"vaginal gel": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
655
|
+
"nasal drops, powder for solution": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
656
|
+
"oral gel": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
657
|
+
"eye gel": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
658
|
+
"impregnated dressing": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
659
|
+
"vaginal cream": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
660
|
+
"ear powder": types_1.SNOMEDCTRouteCodes["Otic route"],
|
|
661
|
+
"cutaneous emulsion": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
662
|
+
"cutaneous liquid": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
663
|
+
"cutaneous solution": types_1.SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
664
|
+
"effervescent powder": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
665
|
+
"bath additive": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
666
|
+
"nasal spray, powder for solution": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
667
|
+
"powder for cutaneous solution": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
668
|
+
"dental gel": types_1.SNOMEDCTRouteCodes["Gingival use"],
|
|
669
|
+
"nasal gel": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
670
|
+
"powder for oral/rectal suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
671
|
+
"gingival gel": types_1.SNOMEDCTRouteCodes["Gingival use"],
|
|
672
|
+
"powder for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
673
|
+
"gastro-resistant granules": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
674
|
+
"eye ointment": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
675
|
+
"oromucosal spray, solution": types_1.SNOMEDCTRouteCodes["Oropharyngeal route (qualifier value)"],
|
|
676
|
+
granules: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
677
|
+
collodion: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
678
|
+
"powder for rectal solution": types_1.SNOMEDCTRouteCodes["Per rectum"],
|
|
679
|
+
"eye drops, solution": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
680
|
+
"eye drops": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
681
|
+
"eye drop": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
682
|
+
"oromucosal paste": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
683
|
+
"dental paste": types_1.SNOMEDCTRouteCodes["Dental use"],
|
|
684
|
+
"solution for peritoneal dialysis": types_1.SNOMEDCTRouteCodes["Intradialytic route"],
|
|
685
|
+
paste: types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
686
|
+
"effervescent granules": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
687
|
+
shampoo: types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
688
|
+
"solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
689
|
+
syrup: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
690
|
+
"oral liquid": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
691
|
+
"oral drops, solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
692
|
+
"emulsion for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
693
|
+
"irrigation solution": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
694
|
+
"solution for injection/infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
695
|
+
"solution for haemodialysis/haemofiltration": types_1.SNOMEDCTRouteCodes["Intradialytic route"],
|
|
696
|
+
"solution for organ preservation": types_1.SNOMEDCTRouteCodes["Extracorporeal route (qualifier value)"],
|
|
697
|
+
"gargle/mouthwash": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
698
|
+
"concentrate for solution for injection/infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
699
|
+
"concentrate for cutaneous solution": types_1.SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
700
|
+
"cutaneous spray, solution": types_1.SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
701
|
+
"concentrate for dip solution": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
702
|
+
"oral emulsion": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
703
|
+
"concentrate for oral solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
704
|
+
"concentrate for haemodialysis solution": types_1.SNOMEDCTRouteCodes["Intradialytic route"],
|
|
705
|
+
"suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
706
|
+
"powder and solvent for solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
707
|
+
"powder and suspension for suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
708
|
+
"powder for suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
709
|
+
"transdermal patch": types_1.SNOMEDCTRouteCodes["Transdermal route"],
|
|
710
|
+
"powder and solvent for suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
711
|
+
"endotracheopulmonary instillation, powder for solution": types_1.SNOMEDCTRouteCodes["Endotracheopulmonary use"],
|
|
712
|
+
"intrauterine delivery system": types_1.SNOMEDCTRouteCodes["Intrauterine route"],
|
|
713
|
+
implant: types_1.SNOMEDCTRouteCodes["Intradermal use"],
|
|
714
|
+
"powder for solution for injection/infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
715
|
+
"concentrate for solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
716
|
+
"eye drops, emulsion": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
717
|
+
"concentrate for dispersion for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
718
|
+
"concentrate for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
719
|
+
"concentrate and solvent for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
720
|
+
"concentrate and solvent for suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
721
|
+
"gel for injection": types_1.SNOMEDCTRouteCodes["Intramuscular route"],
|
|
722
|
+
"prolonged-release suspension for injection": types_1.SNOMEDCTRouteCodes["Intramuscular route"],
|
|
723
|
+
"rectal solution": types_1.SNOMEDCTRouteCodes["Per rectum"],
|
|
724
|
+
"emulsion for injection": types_1.SNOMEDCTRouteCodes["Intramuscular route"],
|
|
725
|
+
"oromucosal solution": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
726
|
+
"powder and solvent for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
727
|
+
"emulsion for injection/infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
728
|
+
"solution for cardioplegia": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
729
|
+
"endotracheopulmonary instillation, suspension": types_1.SNOMEDCTRouteCodes["Endotracheopulmonary use"],
|
|
730
|
+
"ear drops, solution": types_1.SNOMEDCTRouteCodes["Otic route"],
|
|
731
|
+
"eye drops, suspension": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
732
|
+
"nasal drops, solution": types_1.SNOMEDCTRouteCodes["Nasal route"],
|
|
733
|
+
"suspension and solution for spray": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
734
|
+
"solution for sealant": types_1.SNOMEDCTRouteCodes["Topical route"],
|
|
735
|
+
"inhalation vapour, liquid": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
736
|
+
"ear drops, suspension": types_1.SNOMEDCTRouteCodes["Otic route"],
|
|
737
|
+
"dental suspension": types_1.SNOMEDCTRouteCodes["Dental use"],
|
|
738
|
+
"nebuliser solution": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
739
|
+
"concentrate for gargle": types_1.SNOMEDCTRouteCodes["Oropharyngeal route (qualifier value)"],
|
|
740
|
+
"ear/eye drops, solution": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
741
|
+
"ear wash, solution": types_1.SNOMEDCTRouteCodes["Otic route"],
|
|
742
|
+
"oromucosal drops": types_1.SNOMEDCTRouteCodes["Oromucosal use"],
|
|
743
|
+
"powder for syrup": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
744
|
+
"cutaneous suspension": types_1.SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
745
|
+
"eye lotion": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
746
|
+
"rectal suspension": types_1.SNOMEDCTRouteCodes["Per rectum"],
|
|
747
|
+
"intestinal gel": types_1.SNOMEDCTRouteCodes["Intestinal route (qualifier value)"],
|
|
748
|
+
"dental solution": types_1.SNOMEDCTRouteCodes["Dental use"],
|
|
749
|
+
"gingival solution": types_1.SNOMEDCTRouteCodes["Gingival use"],
|
|
750
|
+
"oral drops, suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
751
|
+
"eye drops, tablet and solvent for solution": types_1.SNOMEDCTRouteCodes["Ocular route (qualifier value)"],
|
|
752
|
+
"nebuliser suspension": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
753
|
+
"dispersion for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
754
|
+
"powder and solvent for oral solution": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
755
|
+
solution: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
756
|
+
"powder and solvent for oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
757
|
+
"suspension and effervescent granules for oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
758
|
+
"oral drops, emulsion": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
759
|
+
"oral drops, liquid": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
760
|
+
"oral/rectal suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
761
|
+
"intravesical solution": types_1.SNOMEDCTRouteCodes["Intralesional use"],
|
|
762
|
+
"granules for oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
763
|
+
"granules for syrup": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
764
|
+
tablet: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
765
|
+
"film-coated tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
766
|
+
"coated tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
767
|
+
"chewable tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
768
|
+
"capsule, hard": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
769
|
+
"gastro-resistant tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
770
|
+
"gastro-resistant granules for oral suspension": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
771
|
+
"orodispersible tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
772
|
+
"gastro-resistant capsule, hard": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
773
|
+
"prolonged-release capsule, hard": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
774
|
+
"prolonged-release tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
775
|
+
suppository: types_1.SNOMEDCTRouteCodes["Per rectum"],
|
|
776
|
+
lozenge: types_1.SNOMEDCTRouteCodes["Oropharyngeal route (qualifier value)"],
|
|
777
|
+
"modified-release tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
778
|
+
"dispersible tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
779
|
+
injection: types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
780
|
+
"powder for concentrate for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
781
|
+
"powder and solvent for solution for injection/infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
782
|
+
"powder and solvent for prolonged-release suspension for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
783
|
+
"powder and solvent for concentrate for solution for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
784
|
+
"sublingual tablet": types_1.SNOMEDCTRouteCodes["Sublingual route"],
|
|
785
|
+
"effervescent tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
786
|
+
"vaginal tablet": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
787
|
+
"inhalation powder, hard capsule": types_1.SNOMEDCTRouteCodes["Respiratory tract route (qualifier value)"],
|
|
788
|
+
pessary: types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
789
|
+
"vaginal capsule, hard": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
790
|
+
pastille: types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
791
|
+
"medicated chewing-gum": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
792
|
+
"vaginal delivery system": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
793
|
+
"medicated plaster": types_1.SNOMEDCTRouteCodes["Transdermal route"],
|
|
794
|
+
"intravitreal implant in applicator": types_1.SNOMEDCTRouteCodes["Intravitreal route (qualifier value)"],
|
|
795
|
+
"vaginal capsule, soft": types_1.SNOMEDCTRouteCodes["Per vagina"],
|
|
796
|
+
"lyophilisate and solvent for solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
797
|
+
"powder for concentrate for dispersion for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
798
|
+
"powder for suspension for infusion": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
799
|
+
"cutaneous patch": types_1.SNOMEDCTRouteCodes["Cutaneous route (qualifier value)"],
|
|
800
|
+
"modified-release capsule, hard": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
801
|
+
"oral lyophilisate": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
802
|
+
"powders for solution for injection": types_1.SNOMEDCTRouteCodes["Intravenous route"],
|
|
803
|
+
"capsule, hard-capsule, soft-tablet": types_1.SNOMEDCTRouteCodes["Oral route"],
|
|
804
|
+
"capsule, hard-tablet": types_1.SNOMEDCTRouteCodes["Oral route"]
|
|
664
805
|
};
|
|
665
|
-
|
|
806
|
+
exports.DEFAULT_UNIT_BY_NORMALIZED_FORM = {
|
|
666
807
|
tab: "tab",
|
|
667
808
|
tabs: "tab",
|
|
668
809
|
tablet: "tab",
|
|
@@ -747,3 +888,55 @@ export const DEFAULT_UNIT_BY_NORMALIZED_FORM = {
|
|
|
747
888
|
"intravitreal implant in applicator": "implant",
|
|
748
889
|
"medicated chewing-gum": "piece"
|
|
749
890
|
};
|
|
891
|
+
const ROUTE_UNIT_FALLBACK_WHITELIST = new Set([
|
|
892
|
+
"drop",
|
|
893
|
+
"puff",
|
|
894
|
+
"spray",
|
|
895
|
+
"patch",
|
|
896
|
+
"suppository",
|
|
897
|
+
"implant",
|
|
898
|
+
"piece",
|
|
899
|
+
"stick",
|
|
900
|
+
"pessary",
|
|
901
|
+
"lozenge"
|
|
902
|
+
]);
|
|
903
|
+
exports.DEFAULT_UNIT_BY_ROUTE = (() => {
|
|
904
|
+
const unitCandidates = new Map();
|
|
905
|
+
for (const [form, snomed] of (0, object_1.objectEntries)(exports.KNOWN_TMT_DOSAGE_FORM_TO_SNOMED_ROUTE)) {
|
|
906
|
+
const routeCode = exports.ROUTE_BY_SNOMED[snomed];
|
|
907
|
+
if (!routeCode) {
|
|
908
|
+
continue;
|
|
909
|
+
}
|
|
910
|
+
const unit = exports.DEFAULT_UNIT_BY_NORMALIZED_FORM[form];
|
|
911
|
+
if (!unit) {
|
|
912
|
+
continue;
|
|
913
|
+
}
|
|
914
|
+
let unitsForRoute = unitCandidates.get(routeCode);
|
|
915
|
+
if (!unitsForRoute) {
|
|
916
|
+
unitsForRoute = new Set();
|
|
917
|
+
unitCandidates.set(routeCode, unitsForRoute);
|
|
918
|
+
}
|
|
919
|
+
unitsForRoute.add(unit);
|
|
920
|
+
}
|
|
921
|
+
const resolved = {};
|
|
922
|
+
for (const [route, units] of unitCandidates) {
|
|
923
|
+
if (units.size !== 1) {
|
|
924
|
+
continue;
|
|
925
|
+
}
|
|
926
|
+
const [unit] = Array.from(units);
|
|
927
|
+
if (unit && ROUTE_UNIT_FALLBACK_WHITELIST.has(unit)) {
|
|
928
|
+
resolved[route] = unit;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
const ensure = (route, unit) => {
|
|
932
|
+
if (ROUTE_UNIT_FALLBACK_WHITELIST.has(unit)) {
|
|
933
|
+
resolved[route] = unit;
|
|
934
|
+
}
|
|
935
|
+
};
|
|
936
|
+
ensure(types_1.RouteCode["Ophthalmic route"], "drop");
|
|
937
|
+
ensure(types_1.RouteCode["Ocular route (qualifier value)"], "drop");
|
|
938
|
+
ensure(types_1.RouteCode["Otic route"], "drop");
|
|
939
|
+
ensure(types_1.RouteCode["Respiratory tract route (qualifier value)"], "puff");
|
|
940
|
+
ensure(types_1.RouteCode["Transdermal route"], "patch");
|
|
941
|
+
return resolved;
|
|
942
|
+
})();
|