Class: Renalware::HD::Sessions::AuditableSessionCollection

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
app/models/renalware/hd/sessions/auditable_session_collection.rb

Defined Under Namespace

Classes: MeanValueStrategy

Constant Summary collapse

AUDITABLE_ATTRIBUTES =
%i(
  number_of_missed_sessions
  dialysis_minutes_shortfall
  dialysis_minutes_shortfall_percentage
  pre_mean_systolic_blood_pressure
  pre_mean_diastolic_blood_pressure
  post_mean_systolic_blood_pressure
  post_mean_diastolic_blood_pressure
  lowest_systolic_blood_pressure
  highest_systolic_blood_pressure
  mean_fluid_removal
  mean_weight_loss
  mean_weight_loss_as_percentage_of_body_weight
  mean_machine_ktv
  mean_blood_flow
  mean_litres_processed
  mean_ufr
  number_of_sessions_with_dialysis_minutes_shortfall_gt_5_pct
).freeze

Instance Method Summary collapse

Constructor Details

#initialize(sessions) ⇒ AuditableSessionCollection

Returns a new instance of AuditableSessionCollection.



43
44
45
46
47
48
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 43

def initialize(sessions)
  @sessions = Array(sessions).map do |session|
    Renalware::HD::Sessions::AuditableSession.new(session)
  end
  super(@sessions)
end

Instance Method Details

#dialysis_minutes_shortfallObject



85
86
87
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 85

def dialysis_minutes_shortfall
  sessions.sum(&:dialysis_minutes_shortfall)
end

#dialysis_minutes_shortfall_percentageObject



89
90
91
92
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 89

def dialysis_minutes_shortfall_percentage
  selector = ->(session) { session.dialysis_minutes_shortfall_percentage }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call.round(2)
end

#highest_systolic_blood_pressureObject



81
82
83
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 81

def highest_systolic_blood_pressure
  all_systolic_blood_pressure_measurements.max_by(&:systolic)
end

#lowest_systolic_blood_pressureObject



77
78
79
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 77

def lowest_systolic_blood_pressure
  all_systolic_blood_pressure_measurements.min_by(&:systolic)
end

#mean_blood_flowObject



123
124
125
126
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 123

def mean_blood_flow
  selector = ->(session) { session.document.dialysis.blood_flow }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_fluid_removalObject



103
104
105
106
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 103

def mean_fluid_removal
  selector = ->(session) { session.document.dialysis.fluid_removed }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_litres_processedObject



128
129
130
131
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 128

def mean_litres_processed
  selector = ->(session) { session.document.dialysis.litres_processed }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_machine_ktvObject



118
119
120
121
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 118

def mean_machine_ktv
  selector = ->(session) { session.document.dialysis.machine_ktv }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_ufrObject



98
99
100
101
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 98

def mean_ufr
  selector = ->(session) { session.ufr }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_weight_lossObject



108
109
110
111
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 108

def mean_weight_loss
  selector = ->(session) { session.weight_loss }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#mean_weight_loss_as_percentage_of_body_weightObject



113
114
115
116
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 113

def mean_weight_loss_as_percentage_of_body_weight
  selector = ->(session) { session.weight_loss_as_percentage_of_body_weight }
  MeanValueStrategy.new(sessions: closed_sessions, selector: selector).call
end

#number_of_missed_sessionsObject



57
58
59
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 57

def number_of_missed_sessions
  sessions.count(&:dna?)
end

#number_of_sessions_with_dialysis_minutes_shortfall_gt_5_pctObject



94
95
96
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 94

def number_of_sessions_with_dialysis_minutes_shortfall_gt_5_pct
  sessions.count(&:dialysis_minutes_shortfall_gt_5_pct?)
end

#post_mean_diastolic_blood_pressureObject



73
74
75
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 73

def post_mean_diastolic_blood_pressure
  mean_blood_pressure(:observations_after, :diastolic)
end

#post_mean_systolic_blood_pressureObject



69
70
71
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 69

def post_mean_systolic_blood_pressure
  mean_blood_pressure(:observations_after, :systolic)
end

#pre_mean_diastolic_blood_pressureObject



65
66
67
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 65

def pre_mean_diastolic_blood_pressure
  mean_blood_pressure(:observations_before, :diastolic)
end

#pre_mean_systolic_blood_pressureObject



61
62
63
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 61

def pre_mean_systolic_blood_pressure
  mean_blood_pressure(:observations_before, :systolic)
end

#to_hObject



50
51
52
53
54
55
# File 'app/models/renalware/hd/sessions/auditable_session_collection.rb', line 50

def to_h
  AUDITABLE_ATTRIBUTES.each_with_object({}) do |sym, hash|
    hash[sym] = public_send(sym)
    hash
  end
end