pacio_inferno_core 0.1.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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/pacio_inferno_core/custom_groups/capability_statement/conformance_support_test.rb +41 -0
  4. data/lib/pacio_inferno_core/custom_groups/capability_statement/fhir_version_test.rb +15 -0
  5. data/lib/pacio_inferno_core/custom_groups/capability_statement/instantiate_test.rb +23 -0
  6. data/lib/pacio_inferno_core/custom_groups/capability_statement/json_support_test.rb +40 -0
  7. data/lib/pacio_inferno_core/date_search_validation.rb +112 -0
  8. data/lib/pacio_inferno_core/fhir_resource_navigation.rb +7 -0
  9. data/lib/pacio_inferno_core/generator/group_generator.rb +161 -0
  10. data/lib/pacio_inferno_core/generator/group_metadata.rb +114 -0
  11. data/lib/pacio_inferno_core/generator/group_metadata_extractor.rb +301 -0
  12. data/lib/pacio_inferno_core/generator/ig_loader.rb +118 -0
  13. data/lib/pacio_inferno_core/generator/ig_metadata.rb +60 -0
  14. data/lib/pacio_inferno_core/generator/ig_metadata_extractor.rb +88 -0
  15. data/lib/pacio_inferno_core/generator/ig_resources.rb +88 -0
  16. data/lib/pacio_inferno_core/generator/must_support_metadata_extractor.rb +8 -0
  17. data/lib/pacio_inferno_core/generator/must_support_test_generator.rb +138 -0
  18. data/lib/pacio_inferno_core/generator/naming.rb +50 -0
  19. data/lib/pacio_inferno_core/generator/read_test_generator.rb +102 -0
  20. data/lib/pacio_inferno_core/generator/reference_resolution_test_generator.rb +96 -0
  21. data/lib/pacio_inferno_core/generator/search_definition_metadata_extractor.rb +228 -0
  22. data/lib/pacio_inferno_core/generator/search_metadata_extractor.rb +78 -0
  23. data/lib/pacio_inferno_core/generator/search_test_generator.rb +298 -0
  24. data/lib/pacio_inferno_core/generator/special_cases.rb +61 -0
  25. data/lib/pacio_inferno_core/generator/suite_generator.rb +105 -0
  26. data/lib/pacio_inferno_core/generator/templates/group.rb.erb +27 -0
  27. data/lib/pacio_inferno_core/generator/templates/must_support.rb.erb +36 -0
  28. data/lib/pacio_inferno_core/generator/templates/read.rb.erb +34 -0
  29. data/lib/pacio_inferno_core/generator/templates/reference_resolution.rb.erb +40 -0
  30. data/lib/pacio_inferno_core/generator/templates/search.rb.erb +40 -0
  31. data/lib/pacio_inferno_core/generator/templates/validation.rb.erb +36 -0
  32. data/lib/pacio_inferno_core/generator/terminology_binding_metadata_extractor.rb +116 -0
  33. data/lib/pacio_inferno_core/generator/validation_test_generator.rb +146 -0
  34. data/lib/pacio_inferno_core/generator/value_extractor.rb +152 -0
  35. data/lib/pacio_inferno_core/generator.rb +130 -0
  36. data/lib/pacio_inferno_core/must_support_test.rb +20 -0
  37. data/lib/pacio_inferno_core/primitive_type.rb +5 -0
  38. data/lib/pacio_inferno_core/read_test.rb +103 -0
  39. data/lib/pacio_inferno_core/reference_resolution_test.rb +181 -0
  40. data/lib/pacio_inferno_core/request_logger.rb +46 -0
  41. data/lib/pacio_inferno_core/resource_search_param_checker.rb +136 -0
  42. data/lib/pacio_inferno_core/search_test.rb +859 -0
  43. data/lib/pacio_inferno_core/search_test_properties.rb +56 -0
  44. data/lib/pacio_inferno_core/validation_test.rb +55 -0
  45. data/lib/pacio_inferno_core/version.rb +4 -0
  46. data/lib/pacio_inferno_core/well_known_code_systems.rb +21 -0
  47. metadata +165 -0
@@ -0,0 +1,56 @@
1
+ module PacioInfernoCore
2
+ class SearchTestProperties
3
+ ATTRIBUTES = %i[
4
+ resource_type
5
+ search_param_names
6
+ first_search
7
+ fixed_value_search
8
+ saves_delayed_references
9
+ possible_status_search
10
+ test_medication_inclusion
11
+ token_search_params
12
+ test_reference_variants
13
+ params_with_comparators
14
+ multiple_or_search_params
15
+ test_post_search
16
+ ].freeze
17
+
18
+ ATTRIBUTES.each { |name| attr_reader name }
19
+
20
+ def initialize(**properties)
21
+ properties.each do |key, value|
22
+ raise StandardError, "Unkown search test property: #{key}" unless ATTRIBUTES.include?(key)
23
+
24
+ instance_variable_set(:"@#{key}", value)
25
+ end
26
+ end
27
+
28
+ def first_search?
29
+ !!first_search
30
+ end
31
+
32
+ def fixed_value_search?
33
+ !!fixed_value_search
34
+ end
35
+
36
+ def saves_delayed_references?
37
+ !!saves_delayed_references
38
+ end
39
+
40
+ def possible_status_search?
41
+ !!possible_status_search
42
+ end
43
+
44
+ def test_medication_inclusion?
45
+ !!test_medication_inclusion
46
+ end
47
+
48
+ def test_reference_variants?
49
+ !!test_reference_variants
50
+ end
51
+
52
+ def test_post_search?
53
+ !!test_post_search
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,55 @@
1
+ module PacioInfernoCore
2
+ module ValidationTest
3
+ DAR_CODE_SYSTEM_URL = 'http://terminology.hl7.org/CodeSystem/data-absent-reason'.freeze
4
+ DAR_EXTENSION_URL = 'http://hl7.org/fhir/StructureDefinition/data-absent-reason'.freeze
5
+
6
+ def perform_validation_test(resources,
7
+ profile_url,
8
+ profile_version,
9
+ skip_if_empty: true)
10
+ skip_if skip_if_empty && resources.blank?,
11
+ "No #{resource_type} resources conforming to the #{profile_url} profile were returned"
12
+
13
+ omit_if resources.blank?,
14
+ "No #{resource_type} resources provided so the #{profile_url} profile does not apply"
15
+
16
+ profile_with_version = "#{profile_url}|#{profile_version}"
17
+ resources.each do |resource|
18
+ resource_is_valid?(resource: resource, profile_url: profile_with_version)
19
+ check_for_dar(resource)
20
+ end
21
+
22
+ errors_found = messages.any? { |message| message[:type] == 'error' }
23
+
24
+ assert !errors_found, "Resource does not conform to the profile #{profile_with_version}"
25
+ end
26
+
27
+ def check_for_dar(resource)
28
+ unless scratch[:dar_code_found]
29
+ resource.each_element do |element, _meta, _path|
30
+ next unless element.is_a?(FHIR::Coding)
31
+
32
+ check_for_dar_code(element)
33
+ end
34
+ end
35
+
36
+ return if scratch[:dar_extension_found]
37
+
38
+ check_for_dar_extension(resource)
39
+ end
40
+
41
+ def check_for_dar_code(coding)
42
+ return unless coding.code == 'unknown' && coding.system == DAR_CODE_SYSTEM_URL
43
+
44
+ scratch[:dar_code_found] = true
45
+ output dar_code_found: 'true'
46
+ end
47
+
48
+ def check_for_dar_extension(resource)
49
+ return unless resource.source_contents&.include? DAR_EXTENSION_URL
50
+
51
+ scratch[:dar_extension_found] = true
52
+ output dar_extension_found: 'true'
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,4 @@
1
+ module PacioInfernoCore
2
+ VERSION = '0.1.0'.freeze
3
+ LAST_UPDATED = '2026-06-11'.freeze # TODO: update next release
4
+ end
@@ -0,0 +1,21 @@
1
+ module PacioInfernoCore
2
+ module WellKnownCodeSystems
3
+ HL7_CODE_SYSTEMS = [
4
+ 'http://terminology.hl7.org/CodeSystem',
5
+ 'http://hl7.org/fhir/us/core/CodeSystem'
6
+ ].freeze
7
+
8
+ WELL_KNOWN_CODE_SYSTEMS = [
9
+ 'http://loinc.org',
10
+ 'http://snomed.info/sct'
11
+ ].freeze
12
+
13
+ class << self
14
+ def include?(system)
15
+ return false unless system.present?
16
+
17
+ WELL_KNOWN_CODE_SYSTEMS.include?(system) || HL7_CODE_SYSTEMS.any? { |cs| system.start_with?(cs) }
18
+ end
19
+ end
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pacio_inferno_core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stephen MacVicar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-06-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: inferno_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: database_cleaner-sequel
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.8'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.8'
47
+ - !ruby/object:Gem::Dependency
48
+ name: factory_bot
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '6.1'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '6.1'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.10'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.10'
75
+ - !ruby/object:Gem::Dependency
76
+ name: webmock
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.11'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.11'
89
+ description: PACIO Inferno Core
90
+ email:
91
+ executables: []
92
+ extensions: []
93
+ extra_rdoc_files: []
94
+ files:
95
+ - LICENSE
96
+ - lib/pacio_inferno_core/custom_groups/capability_statement/conformance_support_test.rb
97
+ - lib/pacio_inferno_core/custom_groups/capability_statement/fhir_version_test.rb
98
+ - lib/pacio_inferno_core/custom_groups/capability_statement/instantiate_test.rb
99
+ - lib/pacio_inferno_core/custom_groups/capability_statement/json_support_test.rb
100
+ - lib/pacio_inferno_core/date_search_validation.rb
101
+ - lib/pacio_inferno_core/fhir_resource_navigation.rb
102
+ - lib/pacio_inferno_core/generator.rb
103
+ - lib/pacio_inferno_core/generator/group_generator.rb
104
+ - lib/pacio_inferno_core/generator/group_metadata.rb
105
+ - lib/pacio_inferno_core/generator/group_metadata_extractor.rb
106
+ - lib/pacio_inferno_core/generator/ig_loader.rb
107
+ - lib/pacio_inferno_core/generator/ig_metadata.rb
108
+ - lib/pacio_inferno_core/generator/ig_metadata_extractor.rb
109
+ - lib/pacio_inferno_core/generator/ig_resources.rb
110
+ - lib/pacio_inferno_core/generator/must_support_metadata_extractor.rb
111
+ - lib/pacio_inferno_core/generator/must_support_test_generator.rb
112
+ - lib/pacio_inferno_core/generator/naming.rb
113
+ - lib/pacio_inferno_core/generator/read_test_generator.rb
114
+ - lib/pacio_inferno_core/generator/reference_resolution_test_generator.rb
115
+ - lib/pacio_inferno_core/generator/search_definition_metadata_extractor.rb
116
+ - lib/pacio_inferno_core/generator/search_metadata_extractor.rb
117
+ - lib/pacio_inferno_core/generator/search_test_generator.rb
118
+ - lib/pacio_inferno_core/generator/special_cases.rb
119
+ - lib/pacio_inferno_core/generator/suite_generator.rb
120
+ - lib/pacio_inferno_core/generator/templates/group.rb.erb
121
+ - lib/pacio_inferno_core/generator/templates/must_support.rb.erb
122
+ - lib/pacio_inferno_core/generator/templates/read.rb.erb
123
+ - lib/pacio_inferno_core/generator/templates/reference_resolution.rb.erb
124
+ - lib/pacio_inferno_core/generator/templates/search.rb.erb
125
+ - lib/pacio_inferno_core/generator/templates/validation.rb.erb
126
+ - lib/pacio_inferno_core/generator/terminology_binding_metadata_extractor.rb
127
+ - lib/pacio_inferno_core/generator/validation_test_generator.rb
128
+ - lib/pacio_inferno_core/generator/value_extractor.rb
129
+ - lib/pacio_inferno_core/must_support_test.rb
130
+ - lib/pacio_inferno_core/primitive_type.rb
131
+ - lib/pacio_inferno_core/read_test.rb
132
+ - lib/pacio_inferno_core/reference_resolution_test.rb
133
+ - lib/pacio_inferno_core/request_logger.rb
134
+ - lib/pacio_inferno_core/resource_search_param_checker.rb
135
+ - lib/pacio_inferno_core/search_test.rb
136
+ - lib/pacio_inferno_core/search_test_properties.rb
137
+ - lib/pacio_inferno_core/validation_test.rb
138
+ - lib/pacio_inferno_core/version.rb
139
+ - lib/pacio_inferno_core/well_known_code_systems.rb
140
+ homepage: https://github.com/inferno-framework/us-core-test-kit
141
+ licenses:
142
+ - Apache-2.0
143
+ metadata:
144
+ homepage_uri: https://github.com/inferno-framework/us-core-test-kit
145
+ source_code_uri: https://github.com/paciowg/pacio-inferno-core
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 3.3.6
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubygems_version: 3.5.22
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: PACIO Inferno Core
165
+ test_files: []