profile.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //для pumpprofile.json параметры: settings/settings.json settings/bg_targets.json settings/insulin_sensitivities.json settings/basal_profile.json preferences.json settings/carb_ratios.json settings/temptargets.json settings/model.json
  2. //для profile.json параметры: settings/settings.json settings/bg_targets.json settings/insulin_sensitivities.json settings/basal_profile.json preferences.json settings/carb_ratios.json settings/temptargets.json settings/model.json settings/autotune.json
  3. var console = {
  4. log: function(...args) { _consoleLog(args); },
  5. error: function(...args) { _consoleLog(args); }
  6. };
  7. function generate(pumpsettings_data, bgtargets_data, isf_data, basalprofile_data, preferences_input = false, carbratio_input = false, temptargets_input = false, model_input = false, autotune_input = false){
  8. if (bgtargets_data.units !== 'mg/dL') {
  9. if (bgtargets_data.units === 'mmol/L') {
  10. for (var i = 0, len = bgtargets_data.targets.length; i < len; i++) {
  11. bgtargets_data.targets[i].high = bgtargets_data.targets[i].high * 18;
  12. bgtargets_data.targets[i].low = bgtargets_data.targets[i].low * 18;
  13. }
  14. bgtargets_data.units = 'mg/dL';
  15. } else {
  16. return { "error" : 'BG Target data is expected to be expressed in mg/dL or mmol/L. Found '+bgtargets_data.units};
  17. }
  18. }
  19. if (isf_data.units !== 'mg/dL') {
  20. if (isf_data.units === 'mmol/L') {
  21. for (var i = 0, len = isf_data.sensitivities.length; i < len; i++) {
  22. isf_data.sensitivities[i].sensitivity = isf_data.sensitivities[i].sensitivity * 18;
  23. }
  24. isf_data.units = 'mg/dL';
  25. } else {
  26. return { "error" : 'ISF is expected to be expressed in mg/dL or mmol/L. Found '+isf_data.units};
  27. }
  28. }
  29. var autotune_data = { };
  30. if (autotune_input) {
  31. autotune_data = autotune_input;
  32. }
  33. var temptargets_data = { };
  34. if (temptargets_input) {
  35. temptargets_data = temptargets_input;
  36. }
  37. var model_data = { };
  38. if(model_input){
  39. model_data = model_input.replace(/"/gi, '');
  40. }
  41. var carbratio_data = { };
  42. if (carbratio_input){
  43. var errors = [ ];
  44. if (!(carbratio_input.schedule && carbratio_input.schedule[0].start && carbratio_input.schedule[0].ratio)) {
  45. errors.push("Carb ratio data should have an array called schedule with a start and ratio fields.");
  46. }
  47. if (carbratio_input.units !== 'grams' && carbratio_input.units !== 'exchanges') {
  48. errors.push("Carb ratio should have units field set to 'grams' or 'exchanges'.");
  49. }
  50. if (errors.length) {
  51. return { "error" : errors.join(' ')};
  52. }
  53. carbratio_data = carbratio_input;
  54. }
  55. var preferences = { };
  56. if(preferences_input){
  57. preferences = preferences_input;
  58. }
  59. var inputs = { };
  60. //add all preferences to the inputs
  61. for (var pref in preferences) {
  62. if (preferences.hasOwnProperty(pref)) {
  63. inputs[pref] = preferences[pref];
  64. }
  65. }
  66. inputs.max_iob = inputs.max_iob || 0;
  67. //set these after to make sure nothing happens if they are also set in preferences
  68. inputs.settings = pumpsettings_data;
  69. inputs.targets = bgtargets_data;
  70. inputs.basals = basalprofile_data;
  71. inputs.isf = isf_data;
  72. inputs.carbratio = carbratio_data;
  73. inputs.temptargets = temptargets_data;
  74. inputs.model = model_data;
  75. inputs.autotune = autotune_data;
  76. if (autotune_data) {
  77. if (autotune_data.basalprofile) { inputs.basals = autotune_data.basalprofile; }
  78. if (autotune_data.isfProfile) { inputs.isf = autotune_data.isfProfile; }
  79. if (autotune_data.carb_ratio) { inputs.carbratio.schedule[0].ratio = autotune_data.carb_ratio; }
  80. }
  81. return freeaps_profile(inputs);
  82. }