fhirsmith 0.3.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.
Files changed (277) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/FHIRsmith.png +0 -0
  3. package/README.md +277 -0
  4. package/config-template.json +144 -0
  5. package/library/folder-setup.js +58 -0
  6. package/library/html-server.js +166 -0
  7. package/library/html.js +835 -0
  8. package/library/i18nsupport.js +259 -0
  9. package/library/languages.js +779 -0
  10. package/library/logger-telnet.js +205 -0
  11. package/library/logger.js +279 -0
  12. package/library/package-manager.js +876 -0
  13. package/library/utilities.js +196 -0
  14. package/library/version-utilities.js +1056 -0
  15. package/npmprojector/config-example.json +13 -0
  16. package/npmprojector/indexer.js +394 -0
  17. package/npmprojector/npmprojector.js +395 -0
  18. package/npmprojector/readme.md +174 -0
  19. package/npmprojector/watcher.js +335 -0
  20. package/package.json +119 -0
  21. package/packages/package-crawler.js +846 -0
  22. package/packages/packages-template.html +126 -0
  23. package/packages/packages.js +2838 -0
  24. package/passwords.ini +2 -0
  25. package/publisher/publisher-template.html +208 -0
  26. package/publisher/publisher.js +2167 -0
  27. package/publisher/task-draft.js +458 -0
  28. package/registry/api.js +735 -0
  29. package/registry/crawler.js +637 -0
  30. package/registry/model.js +513 -0
  31. package/registry/readme.md +243 -0
  32. package/registry/registry-data.json +121015 -0
  33. package/registry/registry-template.html +126 -0
  34. package/registry/registry.js +1395 -0
  35. package/registry/test-runner.js +237 -0
  36. package/root-template.html +124 -0
  37. package/server.js +524 -0
  38. package/shl/private-key.pem +5 -0
  39. package/shl/public-key.pem +18 -0
  40. package/shl/shl.js +1125 -0
  41. package/shl/vhl.js +69 -0
  42. package/static/FHIRsmith128.png +0 -0
  43. package/static/FHIRsmith16.png +0 -0
  44. package/static/FHIRsmith32.png +0 -0
  45. package/static/FHIRsmith64.png +0 -0
  46. package/static/assets/css/bootstrap-fhir.css +5302 -0
  47. package/static/assets/css/bootstrap-glyphicons.css +2 -0
  48. package/static/assets/css/bootstrap.css +4097 -0
  49. package/static/assets/css/jquery-ui.css +523 -0
  50. package/static/assets/css/jquery-ui.structure.css +863 -0
  51. package/static/assets/css/jquery-ui.structure.min.css +5 -0
  52. package/static/assets/css/jquery-ui.theme.css +439 -0
  53. package/static/assets/css/jquery-ui.theme.min.css +5 -0
  54. package/static/assets/css/jquery.ui.all.css +7 -0
  55. package/static/assets/css/modules.css +18 -0
  56. package/static/assets/css/project.css +367 -0
  57. package/static/assets/css/pygments-manni.css +66 -0
  58. package/static/assets/css/tags.css +74 -0
  59. package/static/assets/css/xml.css +2 -0
  60. package/static/assets/fonts/glyphiconshalflings-regular.eot +0 -0
  61. package/static/assets/fonts/glyphiconshalflings-regular.otf +0 -0
  62. package/static/assets/fonts/glyphiconshalflings-regular.svg +175 -0
  63. package/static/assets/fonts/glyphiconshalflings-regular.ttf +0 -0
  64. package/static/assets/fonts/glyphiconshalflings-regular.woff +0 -0
  65. package/static/assets/ico/apple-touch-icon-114-precomposed.png +0 -0
  66. package/static/assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  67. package/static/assets/ico/apple-touch-icon-57-precomposed.png +0 -0
  68. package/static/assets/ico/apple-touch-icon-72-precomposed.png +0 -0
  69. package/static/assets/ico/favicon.ico +0 -0
  70. package/static/assets/ico/favicon.png +0 -0
  71. package/static/assets/images/fhir-logo-www.png +0 -0
  72. package/static/assets/images/fhir-logo.png +0 -0
  73. package/static/assets/images/hl7-logo.png +0 -0
  74. package/static/assets/images/logo_ansinew.jpg +0 -0
  75. package/static/assets/images/search.png +0 -0
  76. package/static/assets/images/stripe.png +0 -0
  77. package/static/assets/images/target.png +0 -0
  78. package/static/assets/images/tx-registry-root.gif +0 -0
  79. package/static/assets/images/tx-registry.png +0 -0
  80. package/static/assets/images/tx-server.png +0 -0
  81. package/static/assets/images/tx-version.png +0 -0
  82. package/static/assets/js/bootstrap.min.js +6 -0
  83. package/static/assets/js/fhir-gw.js +259 -0
  84. package/static/assets/js/fhir.js +2 -0
  85. package/static/assets/js/html5shiv.js +8 -0
  86. package/static/assets/js/jcookie.js +96 -0
  87. package/static/assets/js/jquery-ui.min.js +6 -0
  88. package/static/assets/js/jquery.js +10716 -0
  89. package/static/assets/js/jquery.min.js +2 -0
  90. package/static/assets/js/jquery.ui.core.js +314 -0
  91. package/static/assets/js/jquery.ui.draggable.js +825 -0
  92. package/static/assets/js/jquery.ui.mouse.js +162 -0
  93. package/static/assets/js/jquery.ui.resizable.js +842 -0
  94. package/static/assets/js/jquery.ui.widget.js +268 -0
  95. package/static/assets/js/json2.js +487 -0
  96. package/static/assets/js/jtip.js +97 -0
  97. package/static/assets/js/respond.min.js +6 -0
  98. package/static/assets/js/statuspage.js +70 -0
  99. package/static/assets/js/xml.js +2 -0
  100. package/static/dist/js/bootstrap.js +1964 -0
  101. package/static/favicon.png +0 -0
  102. package/static/fhir.css +626 -0
  103. package/static/icon-fhir-16.png +0 -0
  104. package/static/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  105. package/static/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  106. package/static/images/ui-bg_flat_10_000000_40x100.png +0 -0
  107. package/static/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  108. package/static/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  109. package/static/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  110. package/static/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  111. package/static/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  112. package/static/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  113. package/static/images/ui-icons_222222_256x240.png +0 -0
  114. package/static/images/ui-icons_228ef1_256x240.png +0 -0
  115. package/static/images/ui-icons_ef8c08_256x240.png +0 -0
  116. package/static/images/ui-icons_ffd27a_256x240.png +0 -0
  117. package/static/images/ui-icons_ffffff_256x240.png +0 -0
  118. package/static/js/jquery.effects.blind.js +49 -0
  119. package/static/js/jquery.effects.bounce.js +78 -0
  120. package/static/js/jquery.effects.clip.js +54 -0
  121. package/static/js/jquery.effects.core.js +763 -0
  122. package/static/js/jquery.effects.drop.js +50 -0
  123. package/static/js/jquery.effects.explode.js +79 -0
  124. package/static/js/jquery.effects.fade.js +32 -0
  125. package/static/js/jquery.effects.fold.js +56 -0
  126. package/static/js/jquery.effects.highlight.js +50 -0
  127. package/static/js/jquery.effects.pulsate.js +51 -0
  128. package/static/js/jquery.effects.scale.js +178 -0
  129. package/static/js/jquery.effects.shake.js +57 -0
  130. package/static/js/jquery.effects.slide.js +50 -0
  131. package/static/js/jquery.effects.transfer.js +45 -0
  132. package/static/js/jquery.ui.accordion.js +611 -0
  133. package/static/js/jquery.ui.autocomplete.js +612 -0
  134. package/static/js/jquery.ui.button.js +416 -0
  135. package/static/js/jquery.ui.datepicker.js +1823 -0
  136. package/static/js/jquery.ui.dialog.js +878 -0
  137. package/static/js/jquery.ui.droppable.js +296 -0
  138. package/static/js/jquery.ui.position.js +252 -0
  139. package/static/js/jquery.ui.progressbar.js +109 -0
  140. package/static/js/jquery.ui.selectable.js +266 -0
  141. package/static/js/jquery.ui.slider.js +666 -0
  142. package/static/js/jquery.ui.sortable.js +1077 -0
  143. package/static/js/jquery.ui.tabs.js +758 -0
  144. package/stats.js +80 -0
  145. package/test-cache/vsac/vsac-valuesets.db +0 -0
  146. package/token/nginx_passport_setup.md +383 -0
  147. package/token/security_guide.md +294 -0
  148. package/token/token-template.html +330 -0
  149. package/token/token.js +1300 -0
  150. package/translations/Messages.properties +1510 -0
  151. package/translations/Messages_ar.properties +1399 -0
  152. package/translations/Messages_de.properties +836 -0
  153. package/translations/Messages_es.properties +737 -0
  154. package/translations/Messages_fr.properties +1 -0
  155. package/translations/Messages_ja.properties +893 -0
  156. package/translations/Messages_nl.properties +1357 -0
  157. package/translations/Messages_pt.properties +1302 -0
  158. package/translations/Messages_ru.properties +1 -0
  159. package/translations/Messages_uz.properties +1 -0
  160. package/translations/Messages_zh.properties +1 -0
  161. package/translations/rendering-phrases.properties +1128 -0
  162. package/translations/rendering-phrases_ar.properties +1091 -0
  163. package/translations/rendering-phrases_de.properties +6 -0
  164. package/translations/rendering-phrases_es.properties +6 -0
  165. package/translations/rendering-phrases_fr.properties +624 -0
  166. package/translations/rendering-phrases_ja.properties +21 -0
  167. package/translations/rendering-phrases_nl.properties +970 -0
  168. package/translations/rendering-phrases_pt.properties +1020 -0
  169. package/translations/rendering-phrases_ru.properties +1094 -0
  170. package/translations/rendering-phrases_uz.properties +1 -0
  171. package/translations/rendering-phrases_zh.properties +1 -0
  172. package/tx/README.md +418 -0
  173. package/tx/cm/cm-api.js +110 -0
  174. package/tx/cm/cm-database.js +735 -0
  175. package/tx/cm/cm-package.js +325 -0
  176. package/tx/cs/cs-api.js +789 -0
  177. package/tx/cs/cs-areacode.js +615 -0
  178. package/tx/cs/cs-country.js +1110 -0
  179. package/tx/cs/cs-cpt.js +785 -0
  180. package/tx/cs/cs-cs.js +1579 -0
  181. package/tx/cs/cs-currency.js +539 -0
  182. package/tx/cs/cs-db.js +1321 -0
  183. package/tx/cs/cs-hgvs.js +329 -0
  184. package/tx/cs/cs-lang.js +465 -0
  185. package/tx/cs/cs-loinc.js +1485 -0
  186. package/tx/cs/cs-mimetypes.js +238 -0
  187. package/tx/cs/cs-ndc.js +704 -0
  188. package/tx/cs/cs-omop.js +1025 -0
  189. package/tx/cs/cs-provider-api.js +43 -0
  190. package/tx/cs/cs-provider-list.js +37 -0
  191. package/tx/cs/cs-rxnorm.js +808 -0
  192. package/tx/cs/cs-snomed.js +1102 -0
  193. package/tx/cs/cs-ucum.js +514 -0
  194. package/tx/cs/cs-unii.js +271 -0
  195. package/tx/cs/cs-uri.js +218 -0
  196. package/tx/cs/cs-usstates.js +305 -0
  197. package/tx/dev.fhir.org.yml +14 -0
  198. package/tx/fixtures/test-cases-setup.json +18 -0
  199. package/tx/fixtures/test-cases.yml +16 -0
  200. package/tx/html/codesystem-operations.liquid +25 -0
  201. package/tx/html/home-metrics.liquid +247 -0
  202. package/tx/html/operations-form.liquid +148 -0
  203. package/tx/html/search-form.liquid +62 -0
  204. package/tx/html/tx-template.html +133 -0
  205. package/tx/html/valueset-operations.liquid +54 -0
  206. package/tx/importers/atc-to-fhir.js +316 -0
  207. package/tx/importers/import-loinc.module.js +1536 -0
  208. package/tx/importers/import-ndc.module.js +1088 -0
  209. package/tx/importers/import-rxnorm.module.js +898 -0
  210. package/tx/importers/import-sct.module.js +2457 -0
  211. package/tx/importers/import-unii.module.js +601 -0
  212. package/tx/importers/readme.md +453 -0
  213. package/tx/importers/subset-loinc.module.js +1081 -0
  214. package/tx/importers/subset-rxnorm.module.js +938 -0
  215. package/tx/importers/tx-import-base.js +351 -0
  216. package/tx/importers/tx-import-settings.js +310 -0
  217. package/tx/importers/tx-import.js +357 -0
  218. package/tx/library/canonical-resource.js +88 -0
  219. package/tx/library/capabilitystatement.js +292 -0
  220. package/tx/library/codesystem.js +774 -0
  221. package/tx/library/conceptmap.js +568 -0
  222. package/tx/library/designations.js +932 -0
  223. package/tx/library/errors.js +77 -0
  224. package/tx/library/extensions.js +117 -0
  225. package/tx/library/namingsystem.js +322 -0
  226. package/tx/library/operation-outcome.js +127 -0
  227. package/tx/library/parameters.js +105 -0
  228. package/tx/library/renderer.js +1559 -0
  229. package/tx/library/terminologycapabilities.js +418 -0
  230. package/tx/library/ucum-parsers.js +1029 -0
  231. package/tx/library/ucum-service.js +370 -0
  232. package/tx/library/ucum-types.js +1099 -0
  233. package/tx/library/valueset.js +543 -0
  234. package/tx/library.js +676 -0
  235. package/tx/ocl/cm-ocl.js +106 -0
  236. package/tx/ocl/cs-ocl.js +39 -0
  237. package/tx/ocl/vs-ocl.js +105 -0
  238. package/tx/operation-context.js +568 -0
  239. package/tx/params.js +613 -0
  240. package/tx/provider.js +403 -0
  241. package/tx/sct/ecl.js +1560 -0
  242. package/tx/sct/expressions.js +2077 -0
  243. package/tx/sct/structures.js +1396 -0
  244. package/tx/tx-html.js +1063 -0
  245. package/tx/tx.fhir.org.yml +39 -0
  246. package/tx/tx.js +927 -0
  247. package/tx/vs/vs-api.js +112 -0
  248. package/tx/vs/vs-database.js +786 -0
  249. package/tx/vs/vs-package.js +358 -0
  250. package/tx/vs/vs-vsac.js +366 -0
  251. package/tx/workers/batch-validate.js +129 -0
  252. package/tx/workers/batch.js +361 -0
  253. package/tx/workers/closure.js +32 -0
  254. package/tx/workers/expand.js +1845 -0
  255. package/tx/workers/lookup.js +407 -0
  256. package/tx/workers/metadata.js +467 -0
  257. package/tx/workers/operations.js +34 -0
  258. package/tx/workers/read.js +164 -0
  259. package/tx/workers/search.js +384 -0
  260. package/tx/workers/subsumes.js +334 -0
  261. package/tx/workers/translate.js +492 -0
  262. package/tx/workers/validate.js +2504 -0
  263. package/tx/workers/worker.js +904 -0
  264. package/tx/xml/capabilitystatement-xml.js +63 -0
  265. package/tx/xml/codesystem-xml.js +62 -0
  266. package/tx/xml/conceptmap-xml.js +65 -0
  267. package/tx/xml/namingsystem-xml.js +65 -0
  268. package/tx/xml/operationoutcome-xml.js +127 -0
  269. package/tx/xml/parameters-xml.js +312 -0
  270. package/tx/xml/terminologycapabilities-xml.js +64 -0
  271. package/tx/xml/valueset-xml.js +64 -0
  272. package/tx/xml/xml-base.js +603 -0
  273. package/vcl/vcl-parser.js +1098 -0
  274. package/vcl/vcl.js +253 -0
  275. package/windows-install.js +19 -0
  276. package/xig/xig-template.html +124 -0
  277. package/xig/xig.js +3049 -0
@@ -0,0 +1,453 @@
1
+ # TX-Import: Medical Terminology Import Tool
2
+
3
+ A comprehensive CLI tool for importing various medical terminology standards into SQLite databases and other formats. The tool supports LOINC, SNOMED CT, UNII, NDC, and provides extensible architecture for additional terminologies.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Installation](#installation)
8
+ - [Quick Start](#quick-start)
9
+ - [Available Terminologies](#available-terminologies)
10
+ - [Common Commands](#common-commands)
11
+ - [Configuration Management](#configuration-management)
12
+ - [Terminology-Specific Usage](#terminology-specific-usage)
13
+ - [Advanced Features](#advanced-features)
14
+ - [Troubleshooting](#troubleshooting)
15
+
16
+ ## Installation
17
+
18
+ 1. **Prerequisites:**
19
+ ```bash
20
+ # Node.js 16+ required
21
+ npm install
22
+ chmod +x tx-import.js
23
+ ln -s $(pwd)/tx-import.js /usr/local/bin/tx-import
24
+ ./tx-import.js list
25
+ ```
26
+
27
+ 2. **Get help for a specific terminology:**
28
+ ```bash
29
+ ./tx-import.js loinc --help
30
+ ```
31
+
32
+ 3. **Import LOINC data (interactive):**
33
+ ```bash
34
+ ./tx-import.js loinc import
35
+ ```
36
+
37
+ 4. **Import with parameters (non-interactive):**
38
+ ```bash
39
+ ./tx-import.js loinc import \
40
+ --source /path/to/loinc/files \
41
+ --dest ./data/loinc.db \
42
+ --version "LOINC-2.78" \
43
+ --yes
44
+ ```
45
+
46
+ ## Available Terminologies
47
+
48
+ | Terminology | Command | Description | Duration |
49
+ |------------|---------|-------------|----------|
50
+ | **LOINC** | `loinc` | Logical Observation Identifiers Names and Codes | 45-120 min |
51
+ | **LOINC Subset** | `loinc-subset` | Create LOINC subsets for testing | 5-15 min |
52
+ | **SNOMED CT** | `snomed` | SNOMED Clinical Terms | 2-6 hours |
53
+ | **UNII** | `unii` | Unique Ingredient Identifier (FDA) | 15-45 min |
54
+ | **NDC** | `ndc` | National Drug Code Directory | 30-90 min |
55
+
56
+ ## Common Commands
57
+
58
+ To import:
59
+
60
+ ```bash
61
+ tx-import loinc import
62
+ tx-import snomed import
63
+ tx-import unii import
64
+ tx-import ndc import
65
+ tx-import loinc-subset subset
66
+ ```
67
+
68
+ See additional commands below.
69
+
70
+ ## Basic Functionality
71
+
72
+ * LOINC: Import from a full Download (all files, including accessories)
73
+ * SNOMED: Import from a full snapshot download
74
+ * UNII: Import from a set of past downloads (see discussion below about UNII)
75
+ * NDC: import from NDC downloads
76
+
77
+ In addition, there's functionality to create test subsets for LOINC and RxNorm.
78
+ For SNOMED CT, use the SCT subset functionality (documented in the tx-ecosystem IG).
79
+
80
+
81
+ ## Full Command Documentation
82
+
83
+ ### Global Commands
84
+
85
+ ```bash
86
+ # List all available terminology importers
87
+ tx-import list
88
+
89
+ # Show configuration management options
90
+ tx-import config
91
+
92
+ # Display help for any command
93
+ tx-import help [command]
94
+ ```
95
+
96
+ ### Import Commands Pattern
97
+ Each terminology follows the same command pattern:
98
+
99
+ ```bash
100
+ # Basic import (interactive)
101
+ tx-import <terminology> import
102
+
103
+ # Import with options
104
+ tx-import <terminology> import [options]
105
+
106
+ # Validate source files
107
+ tx-import <terminology> validate --source /path/to/files
108
+
109
+ # Check database status
110
+ tx-import <terminology> status --dest /path/to/database
111
+ ```
112
+
113
+ ### Common Import Options
114
+
115
+ | Option | Description | Example |
116
+ |--------|-------------|---------|
117
+ | `-s, --source <path>` | Source file/directory | `--source ./loinc_files/` |
118
+ | `-d, --dest <path>` | Destination database | `--dest ./data/loinc.db` |
119
+ | `-v, --version <ver>` | Version identifier | `--version "2.78"` |
120
+ | `-y, --yes` | Skip confirmations | `--yes` |
121
+ | `--verbose` | Enable detailed logging | `--verbose` |
122
+ | `--no-indexes` | Skip index creation | `--no-indexes` |
123
+
124
+ ## Configuration Management
125
+
126
+ The tool remembers your previous inputs and suggests them as defaults:
127
+
128
+ ### View Configuration History
129
+ ```bash
130
+ # Show all saved configurations
131
+ tx-import config:show
132
+
133
+ # Show config for specific terminology
134
+ tx-import config:show --terminology loinc
135
+ ```
136
+
137
+ ### Clear Configuration
138
+ ```bash
139
+ # Clear config for specific terminology
140
+ tx-import config:clear --terminology loinc
141
+
142
+ # Clear all configurations
143
+ tx-import config:clear --all
144
+ ```
145
+
146
+ ### Import/Export Configuration
147
+ ```bash
148
+ # Export configuration to file
149
+ tx-import config:export --output my-config.json
150
+
151
+ # Import configuration from file
152
+ tx-import config:import --input my-config.json
153
+ ```
154
+
155
+ ## Terminology-Specific Usage
156
+
157
+ ### LOINC Import
158
+
159
+ **Full LOINC Database Import:**
160
+ ```bash
161
+ # Interactive mode
162
+ tx-import loinc import
163
+
164
+ # Batch mode
165
+ tx-import loinc import \
166
+ --source /path/to/loinc_distribution \
167
+ --dest ./data/loinc.db \
168
+ --version "LOINC-2.78" \
169
+ --yes
170
+ ```
171
+
172
+ **Options:**
173
+ - `--main-only`: Import only main codes (skip language variants)
174
+ - `--no-indexes`: Skip index creation for faster import
175
+
176
+ **Required Source Structure:**
177
+ ```
178
+ loinc_distribution/
179
+ ├── LoincTable/
180
+ │ └── Loinc.csv
181
+ ├── AccessoryFiles/
182
+ │ ├── PartFile/
183
+ │ │ ├── Part.csv
184
+ │ │ └── LoincPartLink_Primary.csv
185
+ │ ├── ConsumerName/
186
+ │ │ └── ConsumerName.csv
187
+ │ └── LinguisticVariants/
188
+ │ └── [language files]
189
+ ```
190
+
191
+ ### LOINC Subset Creation
192
+
193
+ **Create Test Subset:**
194
+ ```bash
195
+ # Interactive mode
196
+ tx-import loinc-subset subset
197
+
198
+ # With parameters
199
+ tx-import loinc-subset subset \
200
+ --source /path/to/full/loinc \
201
+ --dest ./loinc-subset \
202
+ --codes ./my-codes.txt \
203
+ --yes
204
+ ```
205
+
206
+ **Codes File Format** (`my-codes.txt`):
207
+ ```
208
+ # One LOINC code per line
209
+ # Comments start with #
210
+ 33747-0
211
+ 1975-2
212
+ 6690-2
213
+ ```
214
+
215
+ **Options:**
216
+ - `--codes <file>`: Text file with LOINC codes (one per line)
217
+ - `--expand-part-links`: Expand codes based on PartLink relationships
218
+
219
+ ### SNOMED CT Import
220
+
221
+ **Import SNOMED CT:**
222
+ ```bash
223
+ # Interactive mode (will prompt for edition selection)
224
+ tx-import snomed import
225
+
226
+ # International Edition
227
+ tx-import snomed import \
228
+ --source /path/to/rf2/files \
229
+ --dest ./data/snomed.cache \
230
+ --edition "900000000000207008" \
231
+ --version "20250801" \
232
+ --yes
233
+
234
+ # With custom URI
235
+ tx-import snomed import \
236
+ --source /path/to/rf2/files \
237
+ --dest ./data/snomed.cache \
238
+ --uri "http://snomed.info/sct/900000000000207008/version/20250301" \
239
+ --yes
240
+ ```
241
+
242
+ **Supported Editions:**
243
+ - International (900000000000207008)
244
+ - US Edition (731000124108)
245
+ - UK Edition (83821000000107)
246
+ - Australian Edition (32506021000036107)
247
+ - [And many more...]
248
+
249
+ **Required RF2 Structure:**
250
+ ```
251
+ rf2_files/
252
+ ├── Terminology/
253
+ │ ├── sct2_Concept_*.txt
254
+ │ ├── sct2_Description_*.txt
255
+ │ └── sct2_Relationship_*.txt
256
+ └── Refset/
257
+ └── [various refset files]
258
+ ```
259
+
260
+ ### UNII Import
261
+
262
+ **Import UNII Data:**
263
+ ```bash
264
+ # Interactive mode
265
+ tx-import unii import
266
+
267
+ # Batch mode
268
+ tx-import unii import \
269
+ --source ./unii_data.txt \
270
+ --dest ./data/unii.db \
271
+ --version "2025-01" \
272
+ --yes
273
+ ```
274
+
275
+ **Source File Format** (tab-delimited):
276
+ ```
277
+ Display_Name Type UNII PT
278
+ Aspirin CN R16CO5Y76E aspirin
279
+ Acetaminophen CN 362O9ITL9D acetaminophen
280
+ ```
281
+
282
+ ### NDC Import
283
+
284
+ **Import NDC Data:**
285
+ ```bash
286
+ # Interactive mode
287
+ tx-import ndc import
288
+
289
+ # Full import
290
+ tx-import ndc import \
291
+ --source /path/to/ndc/versions \
292
+ --dest ./data/ndc.db \
293
+ --version "2025-01" \
294
+ --yes
295
+
296
+ # Products only
297
+ tx-import ndc import --products-only
298
+
299
+ # Packages only (requires existing products)
300
+ tx-import ndc import --packages-only
301
+ ```
302
+
303
+ **Source Structure:**
304
+ ```
305
+ ndc_versions/
306
+ ├── 2024-12/
307
+ │ ├── product.txt
308
+ │ └── package.txt
309
+ ├── 2025-01/
310
+ │ ├── product.txt
311
+ │ └── package.txt
312
+ ```
313
+
314
+ **List Available Versions:**
315
+ ```bash
316
+ tx-import ndc versions --source /path/to/ndc/versions
317
+ ```
318
+
319
+ ## Advanced Features
320
+
321
+ ### Progress Tracking
322
+ All imports show detailed progress with:
323
+ - Current operation name
324
+ - Progress bar with percentage
325
+ - Items processed / total items
326
+ - Estimated time remaining
327
+
328
+ ### Validation Before Import
329
+ ```bash
330
+ # Validate source files before importing
331
+ tx-import loinc validate --source /path/to/files
332
+ tx-import snomed validate --source /path/to/rf2
333
+ tx-import unii validate --source /path/to/file.txt
334
+ ```
335
+
336
+ ### Database Status Checking
337
+ ```bash
338
+ # Check imported database statistics
339
+ tx-import loinc status --dest ./data/loinc.db
340
+ tx-import snomed status --dest ./data/snomed.cache
341
+ tx-import unii status --dest ./data/unii.db
342
+ ```
343
+
344
+ ### Batch Processing
345
+ ```bash
346
+ # Process multiple terminologies in sequence
347
+ tx-import loinc import --yes --source /loinc --dest ./loinc.db
348
+ tx-import unii import --yes --source /unii.txt --dest ./unii.db
349
+ tx-import ndc import --yes --source /ndc --dest ./ndc.db
350
+ ```
351
+
352
+ ### Smart Defaults
353
+ The tool remembers your previous inputs:
354
+ - Source directories
355
+ - Destination paths
356
+ - Version identifiers
357
+ - Import options
358
+
359
+ Recent choices appear as selectable options in interactive mode.
360
+
361
+ ## Troubleshooting
362
+
363
+ ### Common Issues
364
+
365
+ **1. "Module not found" errors:**
366
+ ```bash
367
+ # Ensure all dependencies are installed
368
+ npm install commander inquirer chalk cli-progress sqlite3
369
+ ```
370
+
371
+ **2. "Permission denied" errors:**
372
+ ```bash
373
+ # Make script executable
374
+ chmod +x tx-import.js
375
+
376
+ # Check directory permissions
377
+ ls -la /path/to/source/files
378
+ ```
379
+
380
+ **3. "Source directory validation failed":**
381
+ ```bash
382
+ # Use validate command to check file structure
383
+ tx-import loinc validate --source /path/to/files
384
+
385
+ # Check for required files
386
+ ls -la /path/to/loinc/LoincTable/Loinc.csv
387
+ ```
388
+
389
+ **4. "Database locked" errors:**
390
+ ```bash
391
+ # Ensure no other processes are using the database
392
+ lsof /path/to/database.db
393
+
394
+ # Remove existing database if needed
395
+ rm /path/to/database.db
396
+ ```
397
+
398
+ **5. Memory issues with large datasets:**
399
+ ```bash
400
+ # Increase Node.js memory limit
401
+ node --max-old-space-size=8192 tx-import.js loinc import
402
+
403
+ # Use --no-indexes option for faster initial import
404
+ tx-import loinc import --no-indexes
405
+ ```
406
+
407
+ ### Debugging
408
+
409
+ **Enable verbose logging:**
410
+ ```bash
411
+ tx-import loinc import --verbose
412
+ ```
413
+
414
+ **Check configuration:**
415
+ ```bash
416
+ tx-import config:show --terminology loinc
417
+ ```
418
+
419
+ **Validate before importing:**
420
+ ```bash
421
+ tx-import loinc validate --source /path/to/files
422
+ ```
423
+
424
+ ### Getting Help
425
+
426
+ **Command-specific help:**
427
+ ```bash
428
+ tx-import loinc --help
429
+ tx-import loinc import --help
430
+ ```
431
+
432
+ **List all available commands:**
433
+ ```bash
434
+ tx-import list
435
+ tx-import help
436
+ ```
437
+
438
+ ## Performance Tips
439
+
440
+ 1. **Use SSD storage** for faster I/O during imports
441
+ 2. **Skip indexes initially** with `--no-indexes` for faster imports
442
+ 3. **Use batch mode** with `--yes` for unattended imports
443
+ 4. **Increase Node.js memory** for large datasets
444
+ 5. **Validate first** to catch issues early
445
+ 6. **Monitor disk space** - some terminologies create large databases
446
+
447
+ ## Database Output Formats
448
+
449
+ - **LOINC**: SQLite database with normalized tables
450
+ - **SNOMED CT**: Binary cache file optimized for fast loading
451
+ - **UNII**: SQLite database with simple structure
452
+ - **NDC**: SQLite database supporting multiple versions
453
+ - **LOINC Subset**: File-based subset matching original structure