This repository has been archived by the owner on Apr 21, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdummy_data_controller.rb
61 lines (56 loc) · 1.77 KB
/
dummy_data_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class DummyDataController < ApplicationController
# This controller makes plausible-ish dummy data for a given condition
# the condition is specified by SNOMED-CT code in the request
#
def calculate
case params[:clinical_code]
when '44054006' # 44054006 | Diabetes mellitus type 2 (disorder) |
rbg = dummy_normal_distribution(
params[:rbg_mean] || 7.60,
params[:rbg_standard_deviation] || 1.17,
params[:rbg_number_in_series] || 10,
)
hba1c = dummy_normal_distribution(
params[:hba1c_mean] || 59,
params[:hba1c_standard_deviation] || 15.14,
params[:hba1c_number_in_series] || 3,
)
when '123456789'
bp_sys = dummy_normal_distribution(
180,
25,
10,
)
else
message = "No dummy data available for clinical code #{params[:clinical_code]}"
end
render json: {
request_parameters: params,
calculations: [
{
random_blood_glucose: rbg,
units: 'mmol/l',
},
{
hba1c: hba1c,
units: 'mmol/mol (IFCC)',
},
{
blood_pressure_systolic: bp_sys,
units: 'mmHg',
},
message,
],
metadata: {
authors: 'Dr Marcus Baw',
clinical_assurance: 'Not clinically assured - not for live use',
publication_date: '2018-11-07T13:07:21+0000',
version: '0.0.1',
},
}
end
def dummy_normal_distribution(mean, standard_deviation, number_in_series)
normal = Distribution::Normal.rng(mean.to_f, standard_deviation.to_f)
number_in_series.to_i.times.map { normal.call.round(1) }
end
end