diff --git a/.gitignore b/.gitignore index 1f5dadc5..2b70a086 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,8 @@ my.env *.env static/bower_components/ .*.sw? +.DS_Store -.vagrant \ No newline at end of file +.vagrant +/iisnode +/web.config \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..489b2700 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: node server.js diff --git a/README.md b/README.md index e2e312c1..4941a409 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ cgm-remote-monitor (a.k.a. NightScout) [](https://david-dm.org/nightscout/cgm-remote-monitor) [](https://gitter.im/nightscout/public) +[](https://heroku.com/deploy) + This acts as a web-based CGM (Continuous Glucose Montinor) to allow multiple caregivers to remotely view a patients glucose data in realtime. The server reads a MongoDB which is intended to be data diff --git a/app.json b/app.json new file mode 100644 index 00000000..11b3f0cf --- /dev/null +++ b/app.json @@ -0,0 +1,13 @@ +{ + "name": "CGM Remote Monitor", + "repository": "https://github.com/nightscout/cgm-remote-monitor", + "env": { + "MONGO_COLLECTION": { + "description": "The mongo collection to connect to.", + "value": "nightscout" + } + }, + "addons": [ + "mongolab" + ] +} diff --git a/bin/post-treatment.sh b/bin/post-treatment.sh new file mode 100755 index 00000000..f67c90f5 --- /dev/null +++ b/bin/post-treatment.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +curl -H "Content-Type: application/json" -XPOST 'http://localhost:1337/api/v1/treatments/' -d '{ + "enteredBy": "Dad", + "eventType":"Site Change", + "glucoseValue": 322, + "glucoseType": "sensor", + "carbsGiven": 0, + "insulinGiven": 1.25, + "notes": "Argh..." +}' diff --git a/bower.json b/bower.json index 11cb3a30..6dbd1b93 100644 --- a/bower.json +++ b/bower.json @@ -2,6 +2,8 @@ "name": "nightscout", "version": "0.3.5", "dependencies": { + "angularjs": "1.3.0-beta.19", + "bootstrap": "~3.2.0", "d3": "3.4.3", "jquery": "2.1.0", "jQuery-Storage-API": "~1.7.2", diff --git a/env.js b/env.js index 1ec8ab1d..8532a20f 100644 --- a/env.js +++ b/env.js @@ -23,9 +23,10 @@ function config ( ) { env.name = software.name; env.DISPLAY_UNITS = process.env.DISPLAY_UNITS || 'mg/dl'; env.PORT = process.env.PORT || 1337; - env.mongo = process.env.MONGO_CONNECTION || process.env.CUSTOMCONNSTR_mongo; - env.mongo_collection = process.env.CUSTOMCONNSTR_mongo_collection || 'entries'; + env.mongo = process.env.MONGO_CONNECTION || process.env.CUSTOMCONNSTR_mongo || process.env.MONGOLAB_URI; + env.mongo_collection = process.env.CUSTOMCONNSTR_mongo_collection || process.env.MONGO_COLLECTION || 'entries'; env.settings_collection = process.env.CUSTOMCONNSTR_mongo_settings_collection || 'settings'; + env.treatments_collection = process.env.CUSTOMCONNSTR_mongo_treatments_collection || 'treatments'; var shasum = crypto.createHash('sha1'); var useSecret = (process.env.API_SECRET && process.env.API_SECRET.length > 0); env.api_secret = null; diff --git a/lib/api/index.js b/lib/api/index.js index 7fce2bbe..323eff38 100644 --- a/lib/api/index.js +++ b/lib/api/index.js @@ -1,6 +1,6 @@ 'use strict'; -function create (env, entries, settings) { +function create (env, entries, settings, treatments) { var express = require('express'), app = express( ) ; @@ -29,6 +29,7 @@ function create (env, entries, settings) { // Entries and settings app.use('/', require('./entries/')(app, wares, entries)); app.use('/', require('./settings/')(app, wares, settings)); + app.use('/', require('./treatments/')(app, wares, treatments)); // Status app.use('/', require('./status')(app, wares)); diff --git a/lib/api/treatments/index.js b/lib/api/treatments/index.js new file mode 100644 index 00000000..9dde12f9 --- /dev/null +++ b/lib/api/treatments/index.js @@ -0,0 +1,47 @@ +'use strict'; + +var consts = require('../../constants'); + +function configure (app, wares, treatments) { + var express = require('express'), + api = express.Router( ); + + // invoke common middleware + api.use(wares.sendJSONStatus); + // text body types get handled as raw buffer stream + api.use(wares.bodyParser.raw( )); + // json body types get handled as parsed json + api.use(wares.bodyParser.json( )); + // also support url-encoded content-type + api.use(wares.bodyParser.urlencoded({ extended: true })); + + // List settings available + api.get('/treatments/', function(req, res) { + treatments.list(function (err, profiles) { + return res.json(profiles); + }); + }); + + function config_authed (app, api, wares, treatments) { + + api.post('/treatments/', /*TODO: auth disabled for quick UI testing... wares.verifyAuthorization, */ function(req, res) { + var treatment = req.body; + treatments.create(treatment, function (err, created) { + if (err) + res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', err); + else + res.json(created); + }); + }); + + } + + if (app.enabled('api') || true /*TODO: auth disabled for quick UI testing...*/) { + config_authed(app, api, wares, treatments); + } + + return api; +} + +module.exports = configure; + diff --git a/lib/entries.js b/lib/entries.js index 4fa5ece2..3039d162 100644 --- a/lib/entries.js +++ b/lib/entries.js @@ -92,10 +92,16 @@ function entries (name, storage) { with_collection(function(err, collection) { if (err) { fn(err); return; } // potentially a batch insert - collection.insert(docs, function (err, created) { - // execute the callback - fn(err, created, docs); + var firstErr = null, + totalCreated = 0; + + docs.forEach(function(doc) { + collection.update(doc, doc, {upsert: true}, function (err, created) { + firstErr = firstErr || err; + totalCreated += created; + }); }); + fn(firstErr, totalCreated, docs); }); } diff --git a/lib/treatments.js b/lib/treatments.js new file mode 100644 index 00000000..c7ba0e10 --- /dev/null +++ b/lib/treatments.js @@ -0,0 +1,24 @@ +'use strict'; + +function configure (collection, storage) { + + function create (obj, fn) { + obj.created_at = (new Date( )).toISOString( ); + api( ).insert(obj, function (err, doc) { + fn(null, doc); + }); + } + + function list (fn) { + return api( ).find({ }).sort({created_at: -1}).toArray(fn); + } + + function api ( ) { + return storage.pool.db.collection(collection); + } + + api.list = list; + api.create = create; + return api; +} +module.exports = configure; diff --git a/lib/websocket.js b/lib/websocket.js index 9ac00c2d..d034bd3e 100644 --- a/lib/websocket.js +++ b/lib/websocket.js @@ -1,5 +1,5 @@ -function websocket (env, server, entries) { +function websocket (env, server, entries, treatments) { "use strict"; // CONSTANTS var ONE_HOUR = 3600000, @@ -24,8 +24,10 @@ var dir2Char = { var io; var watchers = 0; var now = new Date().getTime(); - var cgmData = []; - var patientData = []; + + var cgmData = [], + treatmentData = [], + patientData = []; function start ( ) { io = require('socket.io').listen(server); @@ -101,6 +103,7 @@ function update() { now = Date.now(); cgmData = []; + treatmentData = []; var earliest_data = now - TWO_DAYS; var q = { find: {"date": {"$gte": earliest_data}} }; entries.list(q, function (err, results) { @@ -114,8 +117,15 @@ function update() { cgmData.push(obj); } }); - // all done, do loadData - loadData( ); + treatments.list(function (err, results) { + treatmentData = results.map(function(treatment) { + var timestamp = new Date(treatment.timestamp || treatment.created_at); + treatment.x = timestamp.getTime(); + return treatment; + }); + // all done, do loadData + loadData( ); + }); }); return update; @@ -133,16 +143,21 @@ function emitAlarm(alarmType) { function loadData() { console.log('running loadData'); - var treatment = []; var mbg = []; - var actual = []; + var actual = [], + actualCurrent, + treatment = [], + errorCode; + if (cgmData) { actual = cgmData.slice(); actual.sort(function(a, b) { return a.x - b.x; }); + actualCurrent = actual.length > 0 ? actual[actual.length - 1].y : null; + // sgv less than or equal to 10 means error code // or warm up period code, so ignore actual = actual.filter(function (a) { @@ -150,6 +165,15 @@ function loadData() { }) } + if (treatmentData) { + treatment = treatmentData.slice(); + treatment.sort(function(a, b) { + return a.x - b.x; + }); + } + + if (actualCurrent && actualCurrent < 39) errorCode = actualCurrent; + var actualLength = actual.length - 1; if (actualLength > 1) { @@ -181,8 +205,8 @@ function loadData() { //TODO: need to consider when data being sent has less than the 2 day minimum // consolidate and send the data to the client - var shouldEmit = is_different(actual, predicted, mbg, treatment); - patientData = [actual, predicted, mbg, treatment]; + var shouldEmit = is_different(actual, predicted, mbg, treatment, errorCode); + patientData = [actual, predicted, mbg, treatment, errorCode]; console.log('patientData', patientData.length); if (shouldEmit) { emitData( ); @@ -195,16 +219,16 @@ function loadData() { avgLoss += 1 / size * Math.pow(log10(predicted[j].y / 120), 2); } - //console.log(alarms['urgent_alarm'].threshold); - //console.log(alarms['alarm'].threshold); if (avgLoss > alarms['urgent_alarm'].threshold) { emitAlarm('urgent_alarm'); } else if (avgLoss > alarms['alarm'].threshold) { emitAlarm('alarm'); + } else if (errorCode) { + emitAlarm('urgent_alarm'); } } } - function is_different (actual, predicted, mbg, treatment) { + function is_different (actual, predicted, mbg, treatment, errorCode) { if (patientData && patientData.length < 3) { return true; } @@ -213,12 +237,14 @@ function loadData() { , predicted: patientData[1].slice(-1).pop( ) , mbg: patientData[2].slice(-1).pop( ) , treatment: patientData[3].slice(-1).pop( ) + , errorCode: patientData.length >= 5 ? patientData[4] : 0 }; var last = { actual: actual.slice(-1).pop( ) , predicted: predicted.slice(-1).pop( ) , mbg: mbg.slice(-1).pop( ) , treatment: treatment.slice(-1).pop( ) + , errorCode: errorCode }; // textual diff of objects diff --git a/package.json b/package.json index f6693051..bb451054 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "express": "^4.6.1", "express-extension-to-accept": "0.0.2", "mongodb": "^1.4.7", + "moment": "2.8.1", "sgvdata": "0.0.2", "socket.io": "^0.9.17" }, diff --git a/server.js b/server.js index 8d8e460f..72b8dcf1 100644 --- a/server.js +++ b/server.js @@ -31,7 +31,8 @@ var express = require('express'); /////////////////////////////////////////////////// var entries = require('./lib/entries')(env.mongo_collection, store); var settings = require('./lib/settings')(env.settings_collection, store); -var api = require('./lib/api/')(env, entries, settings); +var treatments = require('./lib/treatments')(env.treatments_collection, store); +var api = require('./lib/api/')(env, entries, settings, treatments); var pebble = require('./lib/pebble'); /////////////////////////////////////////////////// @@ -39,7 +40,6 @@ var pebble = require('./lib/pebble'); // setup http server /////////////////////////////////////////////////// var PORT = env.PORT; -var THIRTY_DAYS = 2592000; var app = express(); var appInfo = software.name + ' ' + software.version; @@ -57,7 +57,8 @@ app.get('/pebble', pebble(entries)); //app.get('/package.json', software); // define static server -var staticFiles = express.static(env.static_files, {maxAge: THIRTY_DAYS * 1000}); +//TODO: JC - changed cache to 1 hour from 30d ays to bypass cache hell until we have a real solution +var staticFiles = express.static(env.static_files, {maxAge: 60 * 60 * 1000}); // serve the static content app.use(staticFiles); @@ -76,7 +77,7 @@ store(function ready ( ) { // setup socket io for data and message transmission /////////////////////////////////////////////////// var websocket = require('./lib/websocket'); - var io = websocket(env, server, entries); + var io = websocket(env, server, entries, treatments); }); /////////////////////////////////////////////////// diff --git a/static/css/drawer.css b/static/css/drawer.css index c52cd0e3..40a1fc8c 100644 --- a/static/css/drawer.css +++ b/static/css/drawer.css @@ -17,6 +17,31 @@ #drawer i { opacity: 0.6; } + +#treatmentDrawer { + background-color: #666; + border-left: 1px solid #999; + box-shadow: inset 4px 4px 5px 0px rgba(50, 50, 50, 0.75); + color: #eee; + display: none; + font-size: 16px; + height: calc(100% - 45px); + overflow-y: auto; + position: absolute; + margin-top: 45px; + right: -200px; + width: 300px; + top: 0; + z-index: 1; +} +#treatmentDrawer i { + opacity: 0.6; +} + +#treatmentDrawer a { + color: white; +} + #about { margin-top: 1em; } @@ -98,7 +123,7 @@ h1, legend, padding: 0; float: right; height: 44px; - width: 180px; + width: 190px; opacity: 0.75; vertical-align: middle; } @@ -118,7 +143,7 @@ h1, legend, #buttonbar a { float: left; text-decoration: none; - width: 44px; + width: 34px; } #buttonbar i { padding-left: 12px; diff --git a/static/css/main.css b/static/css/main.css index 24640817..e85fd229 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -136,7 +136,7 @@ body { #bgButton, #silenceBtn { - z-index: 999; + z-index: 99; } #bgButton { diff --git a/static/glyphs/config.json b/static/glyphs/config.json index 149750f0..ebfdc8a8 100644 --- a/static/glyphs/config.json +++ b/static/glyphs/config.json @@ -60,6 +60,12 @@ "code": 59392, "src": "mfglabs" }, + { + "uid": "55e2ff85b1c459c383f46da6e96014b0", + "css": "plus", + "code": 59403, + "src": "elusive" + }, { "uid": "b59b3b618699b467541f631edd5a02ed", "css": "volume", diff --git a/static/glyphs/css/fontello-codes.css b/static/glyphs/css/fontello-codes.css index dcbfd4a0..d38f9fe8 100644 --- a/static/glyphs/css/fontello-codes.css +++ b/static/glyphs/css/fontello-codes.css @@ -9,4 +9,5 @@ .icon-battery-75:before { content: '\e807'; } /* '' */ .icon-battery-100:before { content: '\e808'; } /* '' */ .icon-cancel-circled:before { content: '\e809'; } /* '' */ -.icon-volume:before { content: '\e80a'; } /* '' */ \ No newline at end of file +.icon-volume:before { content: '\e80a'; } /* '' */ +.icon-plus:before { content: '\e80b'; } /* '' */ \ No newline at end of file diff --git a/static/glyphs/css/fontello-embedded.css b/static/glyphs/css/fontello-embedded.css index be4d85ca..c280a635 100644 --- a/static/glyphs/css/fontello-embedded.css +++ b/static/glyphs/css/fontello-embedded.css @@ -1,15 +1,15 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?75577666'); - src: url('../font/fontello.eot?75577666#iefix') format('embedded-opentype'), - url('../font/fontello.svg?75577666#fontello') format('svg'); + src: url('../font/fontello.eot?87362083'); + src: url('../font/fontello.eot?87362083#iefix') format('embedded-opentype'), + url('../font/fontello.svg?87362083#fontello') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'fontello'; - src: url('data:application/octet-stream;base64,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') format('woff'), - url('data:application/octet-stream;base64,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') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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sAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEmARQrLbA9LLAwKy6xJgEUKy2wPiywMSshIyAgPLAEI0IjOLEmARQrsARDLrAmKy2wPyywABUgR7AAI0KyAAEBFRQTLrAsKi2wQCywABUgR7AAI0KyAAEBFRQTLrAsKi2wQSyxAAEUE7AtKi2wQiywLyotsEMssAAWRSMgLiBGiiNhOLEmARQrLbBELLAII0KwQystsEUssgAAPCstsEYssgABPCstsEcssgEAPCstsEgssgEBPCstsEkssgAAPSstsEossgABPSstsEsssgEAPSstsEwssgEBPSstsE0ssgAAOSstsE4ssgABOSstsE8ssgEAOSstsFAssgEBOSstsFEssgAAOystsFIssgABOystsFMssgEAOystsFQssgEBOystsFUssgAAPistsFYssgABPistsFcssgEAPistsFgssgEBPistsFkssgAAOistsFossgABOistsFsssgEAOistsFwssgEBOistsF0ssDIrLrEmARQrLbBeLLAyK7A2Ky2wXyywMiuwNystsGAssAAWsDIrsDgrLbBhLLAzKy6xJgEUKy2wYiywMyuwNistsGMssDMrsDcrLbBkLLAzK7A4Ky2wZSywNCsusSYBFCstsGYssDQrsDYrLbBnLLA0K7A3Ky2waCywNCuwOCstsGkssDUrLrEmARQrLbBqLLA1K7A2Ky2wayywNSuwNystsGwssDUrsDgrLbBtLCuwCGWwAyRQeLABFTAtAAAAS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('truetype'); } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ @@ -17,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?75577666#fontello') format('svg'); + src: url('../font/fontello.svg?87362083#fontello') format('svg'); } } */ @@ -62,4 +62,5 @@ .icon-battery-75:before { content: '\e807'; } /* '' */ .icon-battery-100:before { content: '\e808'; } /* '' */ .icon-cancel-circled:before { content: '\e809'; } /* '' */ -.icon-volume:before { content: '\e80a'; } /* '' */ \ No newline at end of file +.icon-volume:before { content: '\e80a'; } /* '' */ +.icon-plus:before { content: '\e80b'; } /* '' */ \ No newline at end of file diff --git a/static/glyphs/css/fontello-ie7-codes.css b/static/glyphs/css/fontello-ie7-codes.css index e18146c1..c50afefb 100644 --- a/static/glyphs/css/fontello-ie7-codes.css +++ b/static/glyphs/css/fontello-ie7-codes.css @@ -9,4 +9,5 @@ .icon-battery-75 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-battery-100 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-volume { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-volume { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/static/glyphs/css/fontello-ie7.css b/static/glyphs/css/fontello-ie7.css index b4966911..79ca9ab5 100644 --- a/static/glyphs/css/fontello-ie7.css +++ b/static/glyphs/css/fontello-ie7.css @@ -20,4 +20,5 @@ .icon-battery-75 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-battery-100 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } -.icon-volume { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file +.icon-volume { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/static/glyphs/css/fontello.css b/static/glyphs/css/fontello.css index 95edcbaa..8920cc80 100644 --- a/static/glyphs/css/fontello.css +++ b/static/glyphs/css/fontello.css @@ -1,10 +1,10 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?77167544'); - src: url('../font/fontello.eot?77167544#iefix') format('embedded-opentype'), - url('../font/fontello.woff?77167544') format('woff'), - url('../font/fontello.ttf?77167544') format('truetype'), - url('../font/fontello.svg?77167544#fontello') format('svg'); + src: url('../font/fontello.eot?48374311'); + src: url('../font/fontello.eot?48374311#iefix') format('embedded-opentype'), + url('../font/fontello.woff?48374311') format('woff'), + url('../font/fontello.ttf?48374311') format('truetype'), + url('../font/fontello.svg?48374311#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -14,7 +14,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?77167544#fontello') format('svg'); + src: url('../font/fontello.svg?48374311#fontello') format('svg'); } } */ @@ -60,4 +60,5 @@ .icon-battery-75:before { content: '\e807'; } /* '' */ .icon-battery-100:before { content: '\e808'; } /* '' */ .icon-cancel-circled:before { content: '\e809'; } /* '' */ -.icon-volume:before { content: '\e80a'; } /* '' */ \ No newline at end of file +.icon-volume:before { content: '\e80a'; } /* '' */ +.icon-plus:before { content: '\e80b'; } /* '' */ \ No newline at end of file diff --git a/static/glyphs/demo.html b/static/glyphs/demo.html index d59efc91..cd689710 100644 --- a/static/glyphs/demo.html +++ b/static/glyphs/demo.html @@ -270,6 +270,7 @@ body {
+ diff --git a/static/glyphs/font/fontello.eot b/static/glyphs/font/fontello.eot index 1d70fcab..25039a0d 100644 Binary files a/static/glyphs/font/fontello.eot and b/static/glyphs/font/fontello.eot differ diff --git a/static/glyphs/font/fontello.svg b/static/glyphs/font/fontello.svg index ed019eab..177af8dc 100644 --- a/static/glyphs/font/fontello.svg +++ b/static/glyphs/font/fontello.svg @@ -17,6 +17,7 @@| Time | +Event Type | +BG | +Insulin | +Carbs | +Entered By | +Notes | +
| {{treatment.created_at | date:'short'}} | +{{treatment.eventType}} | +{{glucoseDisplay(treatment)}} | +{{treatment.insulin | number: 2}} | +{{treatment.carbs}} | +{{treatment.enteredBy}} | +{{treatment.notes}} | +