Sha256: 2e1bb97d77e59605fec54fec39adccf408028c143462ed843562df7297d6537c

Contents?: true

Size: 1.77 KB

Versions: 52

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/pathology"

module Renalware
  module Pathology
    # Represents a set of observation descriptions that are displayed together for example on a
    # letter on or an HD MDM.
    # We don't always want to display the same set of results. For example in the context of
    # an HD MDM we might want to display only HD-relevant results, while in the main historical
    # pathology view we want to see a wide set of results.
    # By defining a group with a name like 'letters' or 'pd_mdm' we can load and display
    # only the results in that group.
    # Check what codes are in which group manually in the rails console using e.g.
    #   Renalware::Pathology::CodeGroup.descriptions_for_group("letters")
    # (you can merge this as a scope also)
    # or in SQL using
    #   SELECT
    #     G.name,
    #     M.subgroup,
    #     M.position_within_subgroup,
    #     POD.code
    # FROM
    #     pathology_code_groups G
    #     INNER JOIN pathology_code_group_memberships M ON M.code_group_id = G.id
    #     INNER JOIN pathology_observation_descriptions POD ON POD.id = M.observation_description_id
    #     ORDER BY
    #         G.name,
    #         M.subgroup,
    #         M.position_within_subgroup;

    class CodeGroup < ApplicationRecord
      validates :name, presence: true, uniqueness: true
      has_many(
        :memberships,
        class_name: "CodeGroupMembership",
        dependent: :destroy
      )
      has_many(
        :observation_descriptions,
        through: :memberships
      )

      def self.descriptions_for_group(name)
        CodeGroup
          .find_by!(name: name)
          .observation_descriptions
          .order(subgroup: :asc, position_within_subgroup: :asc)
      end
    end
  end
end

Version data entries

52 entries across 52 versions & 1 rubygems

Version Path
renalware-core-2.0.132 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.131 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.130 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.129 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.128 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.127 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.126 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.125 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.124 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.123 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.121 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.120 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.119 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.118 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.117 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.116 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.115 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.113 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.112 app/models/renalware/pathology/code_group.rb
renalware-core-2.0.111 app/models/renalware/pathology/code_group.rb