Sha256: e579c0159c633b8882f7a88091ea5b7197bbbb012a5b6fdc2e5e577ad57717d7

Contents?: true

Size: 1.39 KB

Versions: 44

Compression:

Stored size: 1.39 KB

Contents

require_relative '../exceptions'
require_relative 'bcp_13'
require_relative 'bcp47'

module Inferno
  module Terminology
    class Codesystem
      attr_accessor :codesystem_model

      def initialize(cs_model)
        @codesystem_model = cs_model
      end

      def all_codes_in_concept(concepts)
        Set.new.tap { |cs_set| load_codes(concepts.flatten, cs_set) }
      end

      def load_codes(concepts, cs_set)
        concepts.each do |concept|
          cs_set.add(system: codesystem_model.url, code: concept.code)
          load_codes(concept.concept, cs_set) unless concept.concept.blank?
        end
      end

      def find_concept(code, concepts = codesystem_model.concept)
        return if concepts.nil?

        concepts.find do |concept|
          concept.code == code || find_concept(code, concept.concept)
        end
      end

      def is_a_concept_filter?(filter) # rubocop:disable Naming/PredicateName
        (filter.op == 'is-a') && (codesystem_model.hierarchyMeaning == 'is-a') && (filter.property == 'concept')
      end

      def filter_codes(filter = nil)
        if filter.nil?
          all_codes_in_concept(codesystem_model.concept)
        elsif is_a_concept_filter? filter
          parent_concept = find_concept(filter.value)
          all_codes_in_concept([parent_concept])
        else
          raise FilterOperationException, filter.to_s
        end
      end
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
onc_certification_g10_test_kit-7.1.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-7.0.3 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-7.0.2 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-7.0.1 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-7.0.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-6.0.3 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-6.0.2 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-6.0.1 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-6.0.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.4.2 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.4.1 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.3.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.2.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.1.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-5.0.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-4.1.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-4.0.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-3.8.1 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-3.8.0 lib/inferno/terminology/codesystem.rb
onc_certification_g10_test_kit-3.7.2 lib/inferno/terminology/codesystem.rb