making difficult things – less difficult – water



making difficult things – less difficult – water

0 0


letsmakeehealthservices

presentation from HANDI stand at EHI Live 2015 on developing web services for eHealth developers to use

On Github pacharanero / letsmakeehealthservices

making difficult things

less difficult

or what we call 'progress'

things that were hard in the past get made easier

which enables the next innovators to tackle the

next hard problem

and make that easier

water

electricity

computing

web

One of the reasons we can do impressive things in the Web is that there are APIs that have wrapped some of the hard stuff in an easy interface

telephony

compute & storage

maps

things that were hard in the past get made easier

which enables the next innovators to tackle the

next hard problem

and make that easier

healthcare IT is hard

no one monolithic system can possibly do everything needed everywhere

so we need to break the monoliths into services

almost nobody disagrees with this

(but unfortunately almost nobody is doing it)

clinical calculator

wraps clinical calculations in a simple API

BMI is easy

bmi = weight_in_kg / ( height_in_m ** 2 )

BMI Centile ain't so easy

  def lms_to_centile(x, lms)
    # formulae taken from http://www.cdc.gov/growthcharts/percentile_data_files.htm
    # x is the measurement under consideration
    # returns the percentile as a number from 0 to 100
    # for more information about generating centile values in code, see this blog post: http://www.bawmedical.co.uk/2014/05/10/centiles-doing-them-in-code-part-1/
    l = lms[:l]
    m = lms[:m]
    s = lms[:s]

    if l == 0
      z = log(x / m) / s
    else
      z = (((x / m)**l) - 1) / (l * s)
    end

    Distribution::Normal.cdf(z) * 100
  end

and then you need this data...

"bmi": {
  "0": { "l": -0.233, "m": 13.281, "s": 0.0926 },
  "1": { "l": -0.398, "m": 14.953, "s": 0.0872 },
  "2": { "l": -0.512, "m": 16.137, "s": 0.0836 },
  "3": { "l": -0.589, "m": 16.844, "s": 0.0813 },
  "4": { "l": -0.641, "m": 17.258, "s": 0.0799 },
  "5": { "l": -0.676, "m": 17.51, "s": 0.079 },
  "6": { "l": -0.698, "m": 17.666, "s": 0.0784 },
  "7": { "l": -0.711, "m": 17.758, "s": 0.078 },
  "8": { "l": -0.718, "m": 17.798, "s": 0.0777 },
  "9": { "l": -0.72, "m": 17.797, "s": 0.0775 },
  "10": { "l": -0.72, "m": 17.763, "s": 0.0774 },
  "11": { "l": -0.718, "m": 17.709, "s": 0.0773 },
  "12": { "l": -0.717, "m": 17.644, "s": 0.0774 },
  "13": { "l": -0.716, "m": 17.572, "s": 0.0774 },
  "14": { "l": -0.716, "m": 17.492, "s": 0.0776 },
  "15": { "l": -0.718, "m": 17.406, "s": 0.0777 },
  "16": { "l": -0.721, "m": 17.316, "s": 0.0779 },
  "17": { "l": -0.726, "m": 17.223, "s": 0.0781 },
  "18": { "l": -0.733, "m": 17.131, "s": 0.0783 },
  "19": { "l": -0.742, "m": 17.04, "s": 0.0785 },
  "20": { "l": -0.753, "m": 16.953, "s": 0.0786 },
  "21": { "l": -0.766, "m": 16.87, "s": 0.0787 },
  "22": { "l": -0.781, "m": 16.793, "s": 0.0788 },
  "23": { "l": -0.797, "m": 16.721, "s": 0.0788 },
  "24": { "l": -0.814, "m": 16.655, "s": 0.0788 },
  "25": { "l": -0.832, "m": 16.595, "s": 0.0788 },
  "26": { "l": -0.851, "m": 16.539, "s": 0.0788 },
  "27": { "l": -0.871, "m": 16.488, "s": 0.0787 },
  "28": { "l": -0.891, "m": 16.441, "s": 0.0787 },
  "29": { "l": -0.912, "m": 16.397, "s": 0.0786 },
  "30": { "l": -0.933, "m": 16.355, "s": 0.0785 },
  "31": { "l": -0.954, "m": 16.315, "s": 0.0784 },
  "32": { "l": -0.975, "m": 16.276, "s": 0.0783 },
  "33": { "l": -0.996, "m": 16.239, "s": 0.0781 },
  "34": { "l": -1.018, "m": 16.203, "s": 0.078 },
  "35": { "l": -1.039, "m": 16.168, "s": 0.0779 },
  "36": { "l": -1.06, "m": 16.133, "s": 0.0777 },
  "37": { "l": -1.08, "m": 16.099, "s": 0.0776 },
  "38": { "l": -1.101, "m": 16.065, "s": 0.0774 },
  "39": { "l": -1.121, "m": 16.031, "s": 0.0773 },
  "40": { "l": -1.141, "m": 15.997, "s": 0.0772 },
  "41": { "l": -1.161, "m": 15.963, "s": 0.0771 },
  "42": { "l": -1.181, "m": 15.93, "s": 0.077 },
  "43": { "l": -1.2, "m": 15.898, "s": 0.0769 },
  "44": { "l": -1.219, "m": 15.867, "s": 0.0769 },
  "45": { "l": -1.237, "m": 15.836, "s": 0.0768 },
  "46": { "l": -1.256, "m": 15.807, "s": 0.0768 },
  "47": { "l": -1.273, "m": 15.779, "s": 0.0768 },
  "48": { "l": -1.291, "m": 15.752, "s": 0.0768 },
  "49": { "l": -1.309, "m": 15.727, "s": 0.0769 },
  "50": { "l": -1.325, "m": 15.704, "s": 0.0769 },
  "51": { "l": -1.342, "m": 15.682, "s": 0.077 },
  "52": { "l": -1.359, "m": 15.662, "s": 0.0771 },
  "53": { "l": -1.375, "m": 15.644, "s": 0.0772 },
  "54": { "l": -1.391, "m": 15.626, "s": 0.0773 },
  "55": { "l": -1.407, "m": 15.61, "s": 0.0775 },
  "56": { "l": -1.422, "m": 15.595, "s": 0.0777 },
  "57": { "l": -1.437, "m": 15.582, "s": 0.0778 },
  "58": { "l": -1.452, "m": 15.569, "s": 0.0781 },
  "59": { "l": -1.467, "m": 15.557, "s": 0.0783 },
  "60": { "l": -1.481, "m": 15.547, "s": 0.0786 },
  "61": { "l": -1.495, "m": 15.538, "s": 0.0788 },
  "62": { "l": -1.509, "m": 15.53, "s": 0.0792 },
  "63": { "l": -1.523, "m": 15.523, "s": 0.0795 },
  "64": { "l": -1.536, "m": 15.517, "s": 0.0798 },
  "65": { "l": -1.549, "m": 15.511, "s": 0.0802 },
  "66": { "l": -1.562, "m": 15.507, "s": 0.0806 },
  "67": { "l": -1.575, "m": 15.503, "s": 0.081 },
  "68": { "l": -1.587, "m": 15.5, "s": 0.0814 },
  "69": { "l": -1.599, "m": 15.498, "s": 0.0819 },
  "70": { "l": -1.611, "m": 15.497, "s": 0.0824 },
  "71": { "l": -1.622, "m": 15.497, "s": 0.0828 },
  "72": { "l": -1.634, "m": 15.498, "s": 0.0833 },
  "73": { "l": -1.644, "m": 15.499, "s": 0.0839 },
  "74": { "l": -1.655, "m": 15.501, "s": 0.0844 },
  "75": { "l": -1.665, "m": 15.503, "s": 0.0849 },
  "76": { "l": -1.675, "m": 15.507, "s": 0.0855 },
  "77": { "l": -1.685, "m": 15.511, "s": 0.0861 },
  "78": { "l": -1.694, "m": 15.516, "s": 0.0866 },
  "79": { "l": -1.704, "m": 15.522, "s": 0.0872 },
  "80": { "l": -1.713, "m": 15.529, "s": 0.0878 },
  "81": { "l": -1.721, "m": 15.536, "s": 0.0884 },
  "82": { "l": -1.73, "m": 15.545, "s": 0.089 },
  "83": { "l": -1.738, "m": 15.554, "s": 0.0896 },
  "84": { "l": -1.745, "m": 15.564, "s": 0.0902 },
  "85": { "l": -1.753, "m": 15.575, "s": 0.0908 },
  "86": { "l": -1.76, "m": 15.587, "s": 0.0915 },
  "87": { "l": -1.767, "m": 15.6, "s": 0.0921 },
  "88": { "l": -1.774, "m": 15.614, "s": 0.0927 },
  "89": { "l": -1.781, "m": 15.628, "s": 0.0933 },
  "90": { "l": -1.787, "m": 15.643, "s": 0.0939 },
  "91": { "l": -1.793, "m": 15.659, "s": 0.0945 },
  "92": { "l": -1.798, "m": 15.675, "s": 0.0951 },
  "93": { "l": -1.804, "m": 15.692, "s": 0.0957 },
  "94": { "l": -1.809, "m": 15.71, "s": 0.0963 },
  "95": { "l": -1.814, "m": 15.729, "s": 0.0969 },
  "96": { "l": -1.818, "m": 15.748, "s": 0.0975 },
  "97": { "l": -1.823, "m": 15.768, "s": 0.0981 },
  "98": { "l": -1.827, "m": 15.789, "s": 0.0986 },
  "99": { "l": -1.83, "m": 15.81, "s": 0.0992 },
  "100": { "l": -1.834, "m": 15.833, "s": 0.0998 },
  "101": { "l": -1.837, "m": 15.855, "s": 0.1003 },
  "102": { "l": -1.84, "m": 15.88, "s": 0.1008 },
  "103": { "l": -1.843, "m": 15.904, "s": 0.1014 },
  "104": { "l": -1.846, "m": 15.929, "s": 0.1019 },
  "105": { "l": -1.848, "m": 15.955, "s": 0.1024 },
  "106": { "l": -1.85, "m": 15.982, "s": 0.1029 },
  "107": { "l": -1.852, "m": 16.009, "s": 0.1034 },
  "108": { "l": -1.854, "m": 16.037, "s": 0.1039 },
  "109": { "l": -1.855, "m": 16.066, "s": 0.1044 },
  "110": { "l": -1.856, "m": 16.095, "s": 0.1048 },
  "111": { "l": -1.857, "m": 16.125, "s": 0.1053 },
  "112": { "l": -1.858, "m": 16.155, "s": 0.1057 },
  "113": { "l": -1.858, "m": 16.187, "s": 0.1062 },
  "114": { "l": -1.859, "m": 16.219, "s": 0.1066 },
  "115": { "l": -1.859, "m": 16.251, "s": 0.107 },
  "116": { "l": -1.859, "m": 16.284, "s": 0.1074 },
  "117": { "l": -1.859, "m": 16.318, "s": 0.1078 },
  "118": { "l": -1.859, "m": 16.352, "s": 0.1082 },
  "119": { "l": -1.858, "m": 16.387, "s": 0.1085 },
  "120": { "l": -1.857, "m": 16.423, "s": 0.1089 },
  "121": { "l": -1.856, "m": 16.459, "s": 0.1092 },
  "122": { "l": -1.855, "m": 16.496, "s": 0.1096 },
  "123": { "l": -1.854, "m": 16.533, "s": 0.1099 },
  "124": { "l": -1.853, "m": 16.57, "s": 0.1102 },
  "125": { "l": -1.851, "m": 16.609, "s": 0.1105 },
  "126": { "l": -1.85, "m": 16.648, "s": 0.1108 },
  "127": { "l": -1.848, "m": 16.687, "s": 0.1111 },
  "128": { "l": -1.846, "m": 16.727, "s": 0.1114 },
  "129": { "l": -1.844, "m": 16.768, "s": 0.1117 },
  "130": { "l": -1.842, "m": 16.808, "s": 0.112 },
  "131": { "l": -1.839, "m": 16.85, "s": 0.1122 },
  "132": { "l": -1.837, "m": 16.892, "s": 0.1125 },
  "133": { "l": -1.834, "m": 16.935, "s": 0.1127 },
  "134": { "l": -1.831, "m": 16.977, "s": 0.113 },
  "135": { "l": -1.829, "m": 17.02, "s": 0.1132 },
  "136": { "l": -1.826, "m": 17.065, "s": 0.1134 },
  "137": { "l": -1.823, "m": 17.108, "s": 0.1136 },
  "138": { "l": -1.819, "m": 17.154, "s": 0.1138 },
  "139": { "l": -1.816, "m": 17.199, "s": 0.114 },
  "140": { "l": -1.813, "m": 17.244, "s": 0.1142 },
  "141": { "l": -1.809, "m": 17.291, "s": 0.1144 },
  "142": { "l": -1.806, "m": 17.338, "s": 0.1146 },
  "143": { "l": -1.802, "m": 17.386, "s": 0.1147 },
  "144": { "l": -1.799, "m": 17.433, "s": 0.1149 },
  "145": { "l": -1.795, "m": 17.481, "s": 0.115 },
  "146": { "l": -1.791, "m": 17.53, "s": 0.1152 },
  "147": { "l": -1.787, "m": 17.579, "s": 0.1153 },
  "148": { "l": -1.783, "m": 17.629, "s": 0.1155 },
  "149": { "l": -1.78, "m": 17.679, "s": 0.1156 },
  "150": { "l": -1.776, "m": 17.729, "s": 0.1157 },
  "151": { "l": -1.771, "m": 17.779, "s": 0.1158 },
  "152": { "l": -1.767, "m": 17.83, "s": 0.1159 },
  "153": { "l": -1.763, "m": 17.881, "s": 0.116 },
  "154": { "l": -1.759, "m": 17.933, "s": 0.1161 },
  "155": { "l": -1.755, "m": 17.985, "s": 0.1162 },
  "156": { "l": -1.75, "m": 18.037, "s": 0.1163 },
  "157": { "l": -1.746, "m": 18.089, "s": 0.1164 },
  "158": { "l": -1.742, "m": 18.142, "s": 0.1165 },
  "159": { "l": -1.738, "m": 18.194, "s": 0.1166 },
  "160": { "l": -1.733, "m": 18.247, "s": 0.1166 },
  "161": { "l": -1.729, "m": 18.3, "s": 0.1167 },
  "162": { "l": -1.724, "m": 18.354, "s": 0.1167 },
  "163": { "l": -1.72, "m": 18.407, "s": 0.1168 },
  "164": { "l": -1.715, "m": 18.46, "s": 0.1169 },
  "165": { "l": -1.711, "m": 18.514, "s": 0.1169 },
  "166": { "l": -1.707, "m": 18.567, "s": 0.117 },
  "167": { "l": -1.702, "m": 18.621, "s": 0.117 },
  "168": { "l": -1.697, "m": 18.675, "s": 0.117 },
  "169": { "l": -1.693, "m": 18.729, "s": 0.1171 },
  "170": { "l": -1.689, "m": 18.783, "s": 0.1171 },
  "171": { "l": -1.684, "m": 18.836, "s": 0.1171 },
  "172": { "l": -1.68, "m": 18.89, "s": 0.1172 },
  "173": { "l": -1.675, "m": 18.944, "s": 0.1172 },
  "174": { "l": -1.671, "m": 18.997, "s": 0.1172 },
  "175": { "l": -1.666, "m": 19.051, "s": 0.1172 },
  "176": { "l": -1.661, "m": 19.104, "s": 0.1172 },
  "177": { "l": -1.657, "m": 19.158, "s": 0.1172 },
  "178": { "l": -1.652, "m": 19.211, "s": 0.1172 },
  "179": { "l": -1.648, "m": 19.264, "s": 0.1172 },
  "180": { "l": -1.643, "m": 19.317, "s": 0.1173 },
  "181": { "l": -1.639, "m": 19.37, "s": 0.1173 },
  "182": { "l": -1.635, "m": 19.423, "s": 0.1173 },
  "183": { "l": -1.63, "m": 19.475, "s": 0.1172 },
  "184": { "l": -1.626, "m": 19.528, "s": 0.1172 },
  "185": { "l": -1.621, "m": 19.579, "s": 0.1172 },
  "186": { "l": -1.617, "m": 19.632, "s": 0.1172 },
  "187": { "l": -1.612, "m": 19.683, "s": 0.1172 },
  "188": { "l": -1.608, "m": 19.735, "s": 0.1172 },
  "189": { "l": -1.603, "m": 19.786, "s": 0.1172 },
  "190": { "l": -1.599, "m": 19.837, "s": 0.1172 },
  "191": { "l": -1.595, "m": 19.887, "s": 0.1171 },
  "192": { "l": -1.59, "m": 19.938, "s": 0.1171 },
  "193": { "l": -1.586, "m": 19.988, "s": 0.1171 },
  "194": { "l": -1.582, "m": 20.038, "s": 0.1171 },
  "195": { "l": -1.577, "m": 20.087, "s": 0.1171 },
  "196": { "l": -1.573, "m": 20.137, "s": 0.117 },
  "197": { "l": -1.569, "m": 20.186, "s": 0.117 },
  "198": { "l": -1.564, "m": 20.234, "s": 0.117 },
  "199": { "l": -1.56, "m": 20.282, "s": 0.117 },
  "200": { "l": -1.556, "m": 20.33, "s": 0.1169 },
  "201": { "l": -1.551, "m": 20.378, "s": 0.1169 },
  "202": { "l": -1.547, "m": 20.425, "s": 0.1169 },
  "203": { "l": -1.543, "m": 20.472, "s": 0.1168 },
  "204": { "l": -1.538, "m": 20.519, "s": 0.1168 },
  "205": { "l": -1.534, "m": 20.565, "s": 0.1168 },
  "206": { "l": -1.53, "m": 20.611, "s": 0.1167 },
  "207": { "l": -1.526, "m": 20.656, "s": 0.1167 },
  "208": { "l": -1.521, "m": 20.702, "s": 0.1167 },
  "209": { "l": -1.517, "m": 20.746, "s": 0.1166 },
  "210": { "l": -1.513, "m": 20.791, "s": 0.1166 },
  "211": { "l": -1.509, "m": 20.836, "s": 0.1166 },
  "212": { "l": -1.505, "m": 20.879, "s": 0.1165 },
  "213": { "l": -1.501, "m": 20.923, "s": 0.1165 },
  "214": { "l": -1.496, "m": 20.967, "s": 0.1165 },
  "215": { "l": -1.492, "m": 21.009, "s": 0.1164 },
  "216": { "l": -1.488, "m": 21.052, "s": 0.1164 },
  "217": { "l": -1.484, "m": 21.095, "s": 0.1164 },
  "218": { "l": -1.48, "m": 21.136, "s": 0.1163 },
  "219": { "l": -1.476, "m": 21.178, "s": 0.1163 },
  "220": { "l": -1.472, "m": 21.22, "s": 0.1162 },
  "221": { "l": -1.467, "m": 21.26, "s": 0.1162 },
  "222": { "l": -1.463, "m": 21.301, "s": 0.1162 },
  "223": { "l": -1.459, "m": 21.342, "s": 0.1161 },
  "224": { "l": -1.455, "m": 21.382, "s": 0.1161 },
  "225": { "l": -1.451, "m": 21.422, "s": 0.1161 },
  "226": { "l": -1.447, "m": 21.461, "s": 0.116 },
  "227": { "l": -1.443, "m": 21.501, "s": 0.116 },
  "228": { "l": -1.439, "m": 21.54, "s": 0.1159 },
  "229": { "l": -1.435, "m": 21.578, "s": 0.1159 },
  "230": { "l": -1.431, "m": 21.617, "s": 0.1159 },
  "231": { "l": -1.427, "m": 21.655, "s": 0.1158 },
  "232": { "l": -1.423, "m": 21.693, "s": 0.1158 },
  "233": { "l": -1.419, "m": 21.73, "s": 0.1158 },
  "234": { "l": -1.415, "m": 21.768, "s": 0.1157 },
  "235": { "l": -1.412, "m": 21.805, "s": 0.1157 },
  "236": { "l": -1.408, "m": 21.842, "s": 0.1157 },
  "237": { "l": -1.404, "m": 21.878, "s": 0.1156 },
  "238": { "l": -1.4, "m": 21.914, "s": 0.1156 },
  "239": { "l": -1.396, "m": 21.951, "s": 0.1155 },
  "240": { "l": -1.392, "m": 21.986, "s": 0.1155 },
  "241": { "l": -1.388, "m": 22.022, "s": 0.1155 },
  "242": { "l": -1.385, "m": 22.058, "s": 0.1154 },
  "243": { "l": -1.381, "m": 22.093, "s": 0.1154 },
  "244": { "l": -1.377, "m": 22.128, "s": 0.1154 },
  "245": { "l": -1.373, "m": 22.162, "s": 0.1153 },
  "246": { "l": -1.369, "m": 22.197, "s": 0.1153 },
  "247": { "l": -1.366, "m": 22.231, "s": 0.1153 },
  "248": { "l": -1.362, "m": 22.266, "s": 0.1152 },
  "249": { "l": -1.358, "m": 22.299, "s": 0.1152 },
  "250": { "l": -1.354, "m": 22.333, "s": 0.1152 },
  "251": { "l": -1.351, "m": 22.367, "s": 0.1151 },
  "252": { "l": -1.347, "m": 22.4, "s": 0.1151 },
  "253": { "l": -1.343, "m": 22.433, "s": 0.1151 },
  "254": { "l": -1.34, "m": 22.467, "s": 0.115 },
  "255": { "l": -1.336, "m": 22.499, "s": 0.115 },
  "256": { "l": -1.332, "m": 22.532, "s": 0.115 },
  "257": { "l": -1.329, "m": 22.565, "s": 0.1149 },
  "258": { "l": -1.325, "m": 22.597, "s": 0.1149 },
  "259": { "l": -1.322, "m": 22.629, "s": 0.1149 },
  "260": { "l": -1.318, "m": 22.662, "s": 0.1148 },
  "261": { "l": -1.314, "m": 22.693, "s": 0.1148 },
  "262": { "l": -1.311, "m": 22.725, "s": 0.1148 },
  "263": { "l": -1.307, "m": 22.757, "s": 0.1147 },
  "264": { "l": -1.304, "m": 22.788, "s": 0.1147 },
  "265": { "l": -1.3, "m": 22.82, "s": 0.1147 },
  "266": { "l": -1.297, "m": 22.851, "s": 0.1146 },
  "267": { "l": -1.293, "m": 22.882, "s": 0.1146 },
  "268": { "l": -1.29, "m": 22.913, "s": 0.1146 },
  "269": { "l": -1.286, "m": 22.945, "s": 0.1146 },
  "270": { "l": -1.283, "m": 22.975, "s": 0.1145 },
  "271": { "l": -1.279, "m": 23.005, "s": 0.1145 },
  "272": { "l": -1.276, "m": 23.036, "s": 0.1145 },
  "273": { "l": -1.272, "m": 23.067, "s": 0.1144 },
  "274": { "l": -1.269, "m": 23.097, "s": 0.1144 },
  "275": { "l": -1.266, "m": 23.127, "s": 0.1144 },
  "276": { "l": -1.263, "m": 23.154, "s": 0.1143 }
}

and then you'd need to know what to do with it all

and clinically assure the answers

and keep up with any changes to the centile reference data

or you could just use

api.clinicalcalculator.org

other candidates

api based n3 storage

semantically-aware cloud storage (openEHR-aaS?)

clinical decision support

and others...

questions

making difficult things less difficult