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,237 @@
1
+ // test-runner.js
2
+ // Quick test runner to verify the fixes
3
+
4
+ const {
5
+ ServerRegistries,
6
+ ServerRegistry,
7
+ ServerInformation,
8
+ ServerVersionInformation
9
+ } = require('./registry-model');
10
+ const RegistryCrawler = require('./registry/crawler');
11
+ const RegistryAPI = require('./registry-api');
12
+
13
+ // Create sample test data
14
+ function createSampleData() {
15
+ const data = new ServerRegistries();
16
+ data.address = 'https://registry.example.org';
17
+ data.lastRun = new Date('2024-01-15T10:00:00Z');
18
+ data.outcome = 'Crawled 2 registries successfully, 0 errors';
19
+ data.doco = 'Test registry for unit tests';
20
+
21
+ // Registry 1: Main Registry
22
+ const reg1 = new ServerRegistry();
23
+ reg1.code = 'main';
24
+ reg1.name = 'Main Terminology Registry';
25
+ reg1.address = 'https://main.registry.org';
26
+ reg1.authority = 'HL7 International';
27
+
28
+ // Server 1.1: TX Server
29
+ const server11 = new ServerInformation();
30
+ server11.code = 'tx1';
31
+ server11.name = 'TX Terminology Server';
32
+ server11.address = 'https://tx.fhir.org';
33
+ server11.accessInfo = 'Public FHIR terminology server';
34
+ server11.authCSList = ['http://loinc.org*', 'http://snomed.info/sct*'];
35
+ server11.authVSList = ['http://hl7.org/fhir/ValueSet/loinc*'];
36
+ server11.usageList = ['production', 'public'];
37
+
38
+ // Version 4.0.1 for TX Server
39
+ const version111 = new ServerVersionInformation();
40
+ version111.version = '4.0.1';
41
+ version111.address = 'https://tx.fhir.org/r4';
42
+ version111.security = 'open';
43
+ version111.lastSuccess = new Date('2024-01-15T09:55:00Z');
44
+ version111.lastTat = '250ms';
45
+ version111.codeSystems = [
46
+ 'http://loinc.org',
47
+ 'http://snomed.info/sct',
48
+ 'http://hl7.org/fhir/sid/icd-10',
49
+ 'http://www.nlm.nih.gov/research/umls/rxnorm'
50
+ ].sort();
51
+ version111.valueSets = [
52
+ 'http://hl7.org/fhir/ValueSet/observation-codes',
53
+ 'http://hl7.org/fhir/ValueSet/condition-code',
54
+ 'http://hl7.org/fhir/ValueSet/loinc-diagnostic-report-codes'
55
+ ].sort();
56
+ server11.versions.push(version111);
57
+
58
+ // Version 5.0.0 for TX Server (doesn't have loinc-diagnostic-report-codes)
59
+ const version112 = new ServerVersionInformation();
60
+ version112.version = '5.0.0';
61
+ version112.address = 'https://tx.fhir.org/r5';
62
+ version112.security = 'open';
63
+ version112.lastSuccess = new Date('2024-01-15T09:56:00Z');
64
+ version112.lastTat = '180ms';
65
+ version112.codeSystems = [
66
+ 'http://loinc.org',
67
+ 'http://snomed.info/sct',
68
+ 'http://hl7.org/fhir/sid/icd-11'
69
+ ].sort();
70
+ version112.valueSets = [
71
+ 'http://hl7.org/fhir/ValueSet/observation-codes'
72
+ ].sort();
73
+ server11.versions.push(version112);
74
+
75
+ // Server 1.2: Ontoserver
76
+ const server12 = new ServerInformation();
77
+ server12.code = 'onto';
78
+ server12.name = 'Ontoserver';
79
+ server12.address = 'https://ontoserver.example.org';
80
+ server12.accessInfo = 'Enterprise terminology server';
81
+ server12.authCSList = ['http://snomed.info/sct*'];
82
+ server12.authVSList = [];
83
+ server12.usageList = ['production'];
84
+
85
+ const version121 = new ServerVersionInformation();
86
+ version121.version = '6.4.0';
87
+ version121.address = 'https://ontoserver.example.org/fhir';
88
+ version121.security = 'oauth';
89
+ version121.lastSuccess = new Date('2024-01-15T09:50:00Z');
90
+ version121.lastTat = '180ms';
91
+ version121.codeSystems = [
92
+ 'http://snomed.info/sct',
93
+ 'http://snomed.info/sct/32506021000036107',
94
+ 'http://loinc.org'
95
+ ].sort();
96
+ version121.valueSets = [
97
+ 'http://snomed.info/sct?fhir_vs=ecl/<404684003',
98
+ 'http://snomed.info/sct?fhir_vs=ecl/<373873005'
99
+ ].sort();
100
+ server12.versions.push(version121);
101
+
102
+ reg1.servers.push(server11);
103
+ reg1.servers.push(server12);
104
+
105
+ // Registry 2: Test Registry
106
+ const reg2 = new ServerRegistry();
107
+ reg2.code = 'test';
108
+ reg2.name = 'Test Terminology Registry';
109
+ reg2.address = 'https://test.registry.org';
110
+ reg2.authority = 'Testing Authority';
111
+
112
+ // Server 2.1: Test Server with error
113
+ const server21 = new ServerInformation();
114
+ server21.code = 'test-server';
115
+ server21.name = 'Test Server';
116
+ server21.address = 'https://test.server.org';
117
+ server21.accessInfo = 'Test server (currently down)';
118
+
119
+ const version211 = new ServerVersionInformation();
120
+ version211.version = '1.0.0';
121
+ version211.address = 'https://test.server.org/fhir';
122
+ version211.error = 'Connection timeout';
123
+ server21.versions.push(version211);
124
+
125
+ // Server 2.2: Local Dev Server
126
+ const server22 = new ServerInformation();
127
+ server22.code = 'local';
128
+ server22.name = 'Local Development Server';
129
+ server22.address = 'http://localhost:8080';
130
+ server22.accessInfo = 'Local development instance';
131
+ server22.authCSList = ['http://example.org/codesystem/*'];
132
+ server22.authVSList = ['http://example.org/valueset/*'];
133
+
134
+ const version221 = new ServerVersionInformation();
135
+ version221.version = '5.0.0';
136
+ version221.address = 'http://localhost:8080/fhir';
137
+ version221.security = 'open';
138
+ version221.lastSuccess = new Date('2024-01-15T08:00:00Z');
139
+ version221.lastTat = '50ms';
140
+ version221.codeSystems = [
141
+ 'http://example.org/codesystem/test1',
142
+ 'http://example.org/codesystem/test2',
143
+ 'http://hl7.org/fhir/sid/icd-10'
144
+ ].sort();
145
+ version221.valueSets = [
146
+ 'http://example.org/valueset/test1',
147
+ 'http://example.org/valueset/test2'
148
+ ].sort();
149
+ server22.versions.push(version221);
150
+
151
+ reg2.servers.push(server21);
152
+ reg2.servers.push(server22);
153
+
154
+ data.registries.push(reg1);
155
+ data.registries.push(reg2);
156
+
157
+ return data;
158
+ }
159
+
160
+ // Run specific tests
161
+ function runTests() {
162
+ const crawler = new RegistryCrawler();
163
+ crawler.loadData(createSampleData().toJSON());
164
+ const api = new RegistryAPI(crawler);
165
+
166
+ console.log('\nRunning problematic tests:\n');
167
+
168
+ // Test 1: should return all servers when no filter specified
169
+ console.log('Test 1: should return all servers when no filter specified');
170
+ const rows1 = api.buildRowsForCodeSystem({});
171
+ console.log(` Expected: 4 working versions`);
172
+ console.log(` Received: ${rows1.length} versions`);
173
+ console.log(` Server codes: ${rows1.map(r => `${r.serverCode}(${r.version})`).join(', ')}`);
174
+ console.log(` Test ${rows1.length === 4 ? '✓ PASSED' : '✗ FAILED'}\n`);
175
+
176
+ // Test 2: should handle wildcard value set matching
177
+ console.log('Test 2: should handle wildcard value set matching');
178
+ const rows2 = api.buildRowsForValueSet({
179
+ valueSet: 'http://hl7.org/fhir/ValueSet/loinc-diagnostic-report-codes'
180
+ });
181
+ console.log(` Query: 'http://hl7.org/fhir/ValueSet/loinc-diagnostic-report-codes'`);
182
+ console.log(` TX server is authoritative for: 'http://hl7.org/fhir/ValueSet/loinc*'`);
183
+ console.log(` Version 4.0.1 HAS this value set`);
184
+ console.log(` Version 5.0.0 does NOT have this value set`);
185
+ console.log(` Expected: 1 version (4.0.1 which has the value set) OR 2 versions (both authoritative)?`);
186
+ console.log(` Received: ${rows2.length} version(s)`);
187
+ if (rows2.length > 0) {
188
+ console.log(` Versions: ${rows2.map(r => `${r.version} (auth=${r.authoritative})`).join(', ')}`);
189
+ }
190
+ console.log(` Test ${rows2.length === 1 && rows2[0].version === '4.0.1' ? '✓ PASSED (strict)' : rows2.length === 2 ? '✓ PASSED (Pascal-style)' : '✗ FAILED'}\n`);
191
+
192
+ // Test 3: should rank servers without errors higher
193
+ console.log('Test 3: should not include servers with errors even if authoritative');
194
+ const data = crawler.getData();
195
+ const testServer = data.registries[1].servers[0];
196
+ testServer.authCSList = ['http://test.org/*'];
197
+
198
+ const rows3 = api.buildRowsForCodeSystem({
199
+ codeSystem: 'http://test.org/cs'
200
+ });
201
+ const hasErrorServer = rows3.some(r => r.serverCode === 'test-server');
202
+ console.log(` Expected: No test-server in results`);
203
+ console.log(` Received: ${hasErrorServer ? 'test-server found' : 'test-server not found'}`);
204
+ console.log(` Servers in result: ${rows3.map(r => r.serverCode).join(', ')}`);
205
+ console.log(` Test ${!hasErrorServer ? '✓ PASSED' : '✗ FAILED'}\n`);
206
+
207
+ // Run all the other tests to make sure we didn't break anything
208
+ console.log('Running additional validation tests:\n');
209
+
210
+ // Test: Find servers supporting LOINC
211
+ const loincRows = api.buildRowsForCodeSystem({
212
+ codeSystem: 'http://loinc.org'
213
+ });
214
+ console.log('Test: Find servers supporting LOINC');
215
+ console.log(` Expected: 3 servers (tx1 v4, tx1 v5, onto v6)`);
216
+ console.log(` Received: ${loincRows.length} servers`);
217
+ console.log(` Test ${loincRows.length === 3 ? '✓ PASSED' : '✗ FAILED'}\n`);
218
+
219
+ // Test: Filter by version
220
+ const versionRows = api.buildRowsForCodeSystem({
221
+ version: '4.0',
222
+ codeSystem: 'http://loinc.org'
223
+ });
224
+ console.log('Test: Filter by version 4.0');
225
+ console.log(` Expected: 1 server (version 4.0.1)`);
226
+ console.log(` Received: ${versionRows.length} server(s)`);
227
+ if (versionRows.length > 0) {
228
+ console.log(` Version: ${versionRows[0].version}`);
229
+ }
230
+ console.log(` Test ${versionRows.length === 1 && versionRows[0].version === '4.0.1' ? '✓ PASSED' : '✗ FAILED'}\n`);
231
+
232
+ console.log('================================');
233
+ console.log('Test run complete!');
234
+ }
235
+
236
+ // Run the tests
237
+ runTests();
@@ -0,0 +1,124 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <html xml:lang="en" lang="en">
4
+ <head>
5
+ <title>FHIRsmith: [%title%]</title>
6
+
7
+ <meta charset="utf-8"/>
8
+ <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
9
+ <meta content="http://hl7.org/fhir" name="author"/>
10
+ <meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=edge" />
11
+
12
+ <link rel="stylesheet" href="/fhir.css"/>
13
+
14
+
15
+ <!-- Bootstrap core CSS -->
16
+ <link rel="stylesheet" href="/assets/css/bootstrap.css"/>
17
+ <link rel="stylesheet" href="/assets/css/bootstrap-fhir.css"/>
18
+
19
+ <!-- Project extras -->
20
+ <link rel="stylesheet" href="/assets/css/project.css"/>
21
+ <link rel="stylesheet" href="/assets/css/pygments-manni.css"/>
22
+
23
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
24
+ <!-- [if lt IE 9]>
25
+ <script src="/assets/js/html5shiv.js"></script>
26
+ <script src="/assets/js/respond.min.js"></script>
27
+ <![endif] -->
28
+
29
+ <!-- Favicons -->
30
+ <link sizes="144x144" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-144-precomposed.png"/>
31
+ <link sizes="114x114" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-114-precomposed.png"/>
32
+ <link sizes="72x72" rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-72-precomposed.png"/>
33
+ <link rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-57-precomposed.png"/>
34
+ <link rel="shortcut icon" href="/assets/ico/favicon.png"/>
35
+ <script type="text/javascript" src="/assets/js/json2.js"></script>
36
+ <script type="text/javascript" src="/assets/js/statuspage.js"></script>
37
+ <script type="text/javascript" src="/assets/js/jquery.min.js"></script>
38
+ <script type="text/javascript" src="/assets/js/jquery-ui.min.js"></script>
39
+ <link rel="stylesheet" href="/assets/css/jquery.ui.all.css">
40
+ <script type="text/javascript" src="/assets/js/jquery.ui.core.js"></script>
41
+ <script type="text/javascript" src="/assets/js/jquery.ui.widget.js"></script>
42
+ <script type="text/javascript" src="/assets/js/jquery.ui.mouse.js"></script>
43
+ <script type="text/javascript" src="/assets/js/jquery.ui.resizable.js"></script>
44
+ <script type="text/javascript" src="/assets/js/jquery.ui.draggable.js"></script>
45
+ <script type="text/javascript" src="/assets/js/jtip.js"></script>
46
+ <script type="text/javascript" src="/assets/js/jcookie.js"></script>
47
+ <script type="text/javascript" src="/assets/js/fhir-gw.js"></script>
48
+ </head>
49
+
50
+ <body>
51
+
52
+ <div id="segment-navbar" class="segment"> <!-- segment-breadcrumb -->
53
+ <div id="stripe"> </div>
54
+ <div class="container"> <!-- container -->
55
+ <div style="background-color: #ad1f2f; padding: 6px; color: white;"> <!-- container -->
56
+ <a href="http://www.hl7.org/fhir" style="color: gold" title="Fast Healthcare Interoperability Resources - Home Page"><img border="0" src="/icon-fhir-16.png" style="vertical-align: text-bottom"/> <b>FHIR</b></a> &copy; HL7.org &nbsp;|&nbsp;
57
+ <a href="https://github.com/HealthIntersections/FHIRsmith/blob/main/README.md" style="color: gold"><img border="0" src="/FHIRsmith16.png" style="vertical-align: text-bottom"/> FHIRsmith</a> [%ver%] &nbsp;|&nbsp;
58
+ <a href="/" style="color: gold"> Server Home</a>
59
+ &nbsp;
60
+ &nbsp;
61
+ </div> <!-- /container -->
62
+ </div> <!-- /container -->
63
+ </div>
64
+
65
+ <!-- /segment-breadcrumb -->
66
+
67
+ <div id="segment-content" class="segment"> <!-- segment-content -->
68
+ <div class="container"> <!-- container -->
69
+ <div class="row">
70
+ <div class="inner-wrapper">
71
+ <div class="col-9">
72
+
73
+ <h2><img border="0" src="/FHIRsmith32.png" style="vertical-align: text-bottom"/> FHIRsmith: [%title%] </h2>
74
+
75
+ [%content%]
76
+
77
+
78
+ </div>
79
+
80
+
81
+ </div> <!-- /inner-wrapper -->
82
+ </div> <!-- /row -->
83
+ </div> <!-- /container -->
84
+ </div> <!-- /segment-content -->
85
+
86
+
87
+ <div id="segment-footer" class="segment"> <!-- segment-footer -->
88
+ <div class="container"> <!-- container -->
89
+ <div class="inner-wrapper">
90
+ <p>
91
+ <a href="http://www.hl7.org/fhir" style="color: gold" title="Fast Healthcare Interoperability Resources - Home Page"><img border="0" src="/icon-fhir-16.png" style="vertical-align: text-bottom"/> <b>FHIR</b></a> &copy; HL7.org 2011+. &nbsp;|&nbsp;
92
+ <a href="https://github.com/HealthIntersections/FHIRsmith/blob/main/README.md" style="color: gold"><img border="0" src="/FHIRsmith16.png" style="vertical-align: text-bottom"/> FHIRsmith</a> [%ver%] &copy; HealthIntersections.com.au 2023+ &nbsp;|&nbsp; ([%ms%] ms)
93
+ &nbsp;
94
+ </p>
95
+ </div> <!-- /inner-wrapper -->
96
+ </div> <!-- /container -->
97
+ </div> <!-- /segment-footer -->
98
+
99
+
100
+ <div id="segment-post-footer" class="segment hidden"> <!-- segment-post-footer -->
101
+ <div class="container"> <!-- container -->
102
+ </div> <!-- /container -->
103
+ </div> <!-- /segment-post-footer -->
104
+
105
+
106
+
107
+
108
+
109
+ <!-- JS and analytics only. -->
110
+ <!-- Bootstrap core JavaScript
111
+ ================================================== -->
112
+ <!-- Placed at the end of the document so the pages load faster -->
113
+ <!-- <script src="/assets/js/jquery.js"/> -->
114
+ <script src="/assets/js/bootstrap.min.js"/>
115
+ <script src="/assets/js/respond.min.js"/>
116
+
117
+ <script src="/assets/js/fhir.js"/>
118
+
119
+ <!-- Analytics Below
120
+ ================================================== -->
121
+
122
+ </body>
123
+
124
+ </html>