Sha256: 1d5bcc347a1a59aa650ec7878e8684578b9f35b7bc2e52c599214a42e10a6393

Contents?: true

Size: 1.41 KB

Versions: 71

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

require_dependency "renalware/pathology"

module Renalware
  module Pathology
    class ObservationsForCodesPresenter
      # Example usage
      #   ObservationsForCodesPresenter.new(patient: patient, codes: %w(HBA FER PHT))
      def initialize(patient:, codes:)
        @patient = Pathology.cast_patient(patient)
        @codes = Array(codes).map(&:upcase)
      end

      # Returns an array of observations reformatted to be easy to consume.
      def observations
        codes.map do |code|
          observation = observation_for(code) || NullObject.instance
          OpenStruct.new(code: code,
                         description: description_for(code).name,
                         result: observation.result,
                         observed_at: observation.observed_at)
        end
      end

      private

      attr_reader :patient, :codes

      def descriptions
        @descriptions ||= Renalware::Pathology::ObservationDescription.where(code: codes).to_a
      end

      def matching_observations
        @matching_observations ||= patient.current_observations.where(description_code: codes).to_a
      end

      def description_for(code)
        descriptions.find{ |desc| desc.code.upcase == code } || NullObject.instance
      end

      def observation_for(code)
        matching_observations.find{ |observation| observation.description_code.upcase == code }
      end
    end
  end
end

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
renalware-core-2.0.77 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.76 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.75 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.74 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.73 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.72 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.71 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.70 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.69 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.68 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.67 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.64 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.63 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.62 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.61 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.60 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.58 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.57 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.56 app/presenters/renalware/pathology/observations_for_codes_presenter.rb
renalware-core-2.0.55 app/presenters/renalware/pathology/observations_for_codes_presenter.rb