thesis #5
1
.gitignore
vendored
@ -21,6 +21,7 @@
|
|||||||
**/*.bcf
|
**/*.bcf
|
||||||
**/*.blg
|
**/*.blg
|
||||||
**/*.gz
|
**/*.gz
|
||||||
|
**/*.loa
|
||||||
**/*.log
|
**/*.log
|
||||||
**/*.lof
|
**/*.lof
|
||||||
**/*.lot
|
**/*.lot
|
||||||
|
@ -10,7 +10,7 @@ We use the following devices for vitals data measurement:
|
|||||||
* Heart Rate, SPO2
|
* Heart Rate, SPO2
|
||||||
* [Withings Thermo](https://www.withings.com/de/en/thermo)
|
* [Withings Thermo](https://www.withings.com/de/en/thermo)
|
||||||
* Body Surface Temperature
|
* Body Surface Temperature
|
||||||
* [WIthings BPM Core](https://www.withings.com/de/en/bpm-core)
|
* [Withings BPM Core](https://www.withings.com/de/en/bpm-core)
|
||||||
* Blood Pressure
|
* Blood Pressure
|
||||||
|
|
||||||
## API Access
|
## API Access
|
||||||
|
1
docs/analysis/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/.venv/
|
0
docs/analysis/__init__.py
Normal file
BIN
docs/analysis/chart-connection-boxplot.png
Normal file
After Width: | Height: | Size: 405 KiB |
245
docs/analysis/chart-measurement-stats.svg
Normal file
After Width: | Height: | Size: 479 KiB |
BIN
docs/analysis/chart-measurement-stats.xcf
Normal file
217
docs/analysis/charts.py
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
plt.rcParams['font.family'] = 'serif'
|
||||||
|
plt.rcParams['font.size'] = 12
|
||||||
|
|
||||||
|
def generate_measurement_stats_pie_chart(show: bool, save: bool):
|
||||||
|
fig, ax = plt.subplots()
|
||||||
|
|
||||||
|
size_outer = 0.3
|
||||||
|
size_inner = 0.2
|
||||||
|
|
||||||
|
vals_outer = np.array([28., 7.]) # Measurements vs Measurement failures
|
||||||
|
vals_middle = np.array([17., 11., 7., 0.]) # MEWS calculations, Measurement only, P2 failures, P1 failures
|
||||||
|
vals_inner = np.array([16., 1., 8., 3., 2., 5., 0., 0.]) # Innermost ring values
|
||||||
|
|
||||||
|
cmap = plt.get_cmap("tab20b")
|
||||||
|
outer_colors = cmap(np.array([6, 13]))
|
||||||
|
middle_colors = cmap(np.array([5, 15, 14, 14]))
|
||||||
|
inner_colors = cmap(np.array([11, 10, 11, 10, 11, 10, 11, 10]))
|
||||||
|
|
||||||
|
# Outer ring
|
||||||
|
ax.pie(vals_outer, radius=1, colors=outer_colors,
|
||||||
|
wedgeprops=dict(width=size_outer, edgecolor='w'))
|
||||||
|
|
||||||
|
# Middle ring
|
||||||
|
ax.pie(vals_middle, radius=1-size_outer, colors=middle_colors,
|
||||||
|
wedgeprops=dict(width=size_inner, edgecolor='w'))
|
||||||
|
|
||||||
|
# Innermost ring
|
||||||
|
inner_pie = ax.pie(vals_inner, radius=1-size_outer-size_inner, colors=inner_colors,
|
||||||
|
wedgeprops=dict(width=size_inner, edgecolor='w'))
|
||||||
|
#labels_inner = ["home", "on the go"]
|
||||||
|
#ax.legend(inner_pie[0], labels_inner, loc="center right")
|
||||||
|
|
||||||
|
ax.set(aspect="equal")
|
||||||
|
|
||||||
|
if save:
|
||||||
|
plt.savefig(
|
||||||
|
"chart-measurement-stats.png",
|
||||||
|
dpi=900,
|
||||||
|
bbox_inches='tight',
|
||||||
|
transparent=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if show:
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def generate_measurement_repeats_histogram(show: bool, save: bool):
|
||||||
|
device_names = ["Scanwatch", "BPM Core", "Thermo"]
|
||||||
|
labels_attempts = [f"{name} measurement attempts" for name in device_names]
|
||||||
|
labels_failures = ["S\u2081 failures", "B\u2081 failures", "T\u2081 failures"]
|
||||||
|
values_attempts = [43, 33, 28]
|
||||||
|
values_failures = [15, 5, 0]
|
||||||
|
|
||||||
|
# Define a list of colors for the bars
|
||||||
|
cmap = plt.get_cmap("tab20b")
|
||||||
|
colors_attempts = cmap(np.array([15, 11, 7]))
|
||||||
|
colors_failures = cmap(np.array([13, 9, 5]))
|
||||||
|
|
||||||
|
# Plot the bars with the specified colors and labels for the legend
|
||||||
|
bars_attempts = plt.bar(device_names, values_attempts, color=colors_attempts)
|
||||||
|
bars_failures = plt.bar(device_names, values_failures, color=colors_failures)
|
||||||
|
|
||||||
|
# Add individual labels for each bar in the legend
|
||||||
|
for i in range(3):
|
||||||
|
bars_attempts[i].set_label(labels_attempts[i])
|
||||||
|
bars_failures[i].set_label(labels_failures[i])
|
||||||
|
|
||||||
|
plt.ylabel("Count")
|
||||||
|
|
||||||
|
plt.ylim(0, 55)
|
||||||
|
plt.yticks(range(0, 56, 5))
|
||||||
|
|
||||||
|
plt.legend(loc="upper right", prop={"size":8})
|
||||||
|
|
||||||
|
if save:
|
||||||
|
plt.savefig(
|
||||||
|
"chart-measurement-repeats.png",
|
||||||
|
dpi=900,
|
||||||
|
bbox_inches="tight",
|
||||||
|
transparent=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if show:
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def generate_connection_boxplots(show: bool, save: bool):
|
||||||
|
data_downlink = [
|
||||||
|
[50.42, 46.29, 39.94, 39.44, 50.21, 44.34, 41.03, 47.88, 50.34, 41.72, 43.93, 49.34, 50.49, 52.47, 47.04, 45.86, 51.17, 50.12, 52.16, 50.55, 50.69, 53.43, 42.21, 46.81],
|
||||||
|
[15.3, 25.47, 33.91, 12.27]
|
||||||
|
]
|
||||||
|
data_uplink = [
|
||||||
|
[11.38, 11.24, 8.46, 9.33, 11.39, 9.33, 9.03, 10.65, 11.59, 8.81, 8.91, 10.56, 10.98, 10.04, 9.11, 8.62, 11.08, 10.62, 11.24, 11.29, 10.86, 10.46, 9.16, 9.15],
|
||||||
|
[5.33, 5.46, 3.38, 4.23]
|
||||||
|
]
|
||||||
|
data_rtt = [
|
||||||
|
[14, 16, 15, 15, 15, 15, 16, 12, 15, 14, 18, 14, 19, 16, 23, 12, 16, 14, 12, 13, 13, 13, 17, 15],
|
||||||
|
[145, 127, 104, 108]
|
||||||
|
]
|
||||||
|
|
||||||
|
fig, axes = plt.subplots(nrows=1, ncols=3, sharex=True, figsize=(15,5))
|
||||||
|
#plt.subplots_adjust(wspace=0.4)
|
||||||
|
|
||||||
|
cmap = plt.get_cmap("tab20b")
|
||||||
|
|
||||||
|
medianprops= {
|
||||||
|
"color": cmap(1),
|
||||||
|
"linewidth": 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
# Downlink Boxplot
|
||||||
|
axes[1].boxplot(data_downlink, medianprops=medianprops)
|
||||||
|
axes[1].set_ylabel("Datarate [Mbps]")
|
||||||
|
axes[1].set_title("Downlink")
|
||||||
|
axes[1].set_xticks([1, 2])
|
||||||
|
axes[1].set_xticklabels(["At home", "On the go"])
|
||||||
|
|
||||||
|
# Uplink Boxplot
|
||||||
|
axes[0].boxplot(data_uplink, medianprops=medianprops)
|
||||||
|
axes[0].set_ylabel("Datarate [Mbps]")
|
||||||
|
axes[0].set_title("Uplink")
|
||||||
|
axes[0].set_xticks([1, 2])
|
||||||
|
axes[0].set_xticklabels(["At home", "On the go"])
|
||||||
|
|
||||||
|
# RTT Boxplot
|
||||||
|
axes[2].boxplot(data_rtt, medianprops=medianprops)
|
||||||
|
axes[2].set_ylabel("RTT [ms]")
|
||||||
|
axes[2].set_title("RTT")
|
||||||
|
axes[2].set_xticks([1, 2])
|
||||||
|
axes[2].set_xticklabels(["At home", "On the go"])
|
||||||
|
|
||||||
|
# Function to add jitter
|
||||||
|
def jitter(x, width=0.1):
|
||||||
|
"""Return the given x coordinate plus a small random offset."""
|
||||||
|
np.random.seed = 0
|
||||||
|
return x + np.random.uniform(-width, width)
|
||||||
|
|
||||||
|
# Sample points to plot on the boxplots
|
||||||
|
points_uplink = [
|
||||||
|
(1, 11.38),
|
||||||
|
(2, 5.33),
|
||||||
|
(1, 9.33),
|
||||||
|
(2, 5.46),
|
||||||
|
(1, 11.59),
|
||||||
|
(1, 10.56),
|
||||||
|
(1, 10.98),
|
||||||
|
(1, 11.24),
|
||||||
|
(2, 4.23),
|
||||||
|
(1, 10.86),
|
||||||
|
(1, 10.46),
|
||||||
|
]
|
||||||
|
points_downlink = [
|
||||||
|
(1, 50.42),
|
||||||
|
(2, 15.3),
|
||||||
|
(1, 39.44),
|
||||||
|
(2, 25.47),
|
||||||
|
(1, 50.34),
|
||||||
|
(1, 49.34),
|
||||||
|
(1, 50.49),
|
||||||
|
(1, 52.16),
|
||||||
|
(2, 12.27),
|
||||||
|
(1, 50.69),
|
||||||
|
(1, 53.43),
|
||||||
|
]
|
||||||
|
points_rtt = [
|
||||||
|
(1, 14),
|
||||||
|
(2, 145),
|
||||||
|
(1, 15),
|
||||||
|
(2, 127),
|
||||||
|
(1, 15),
|
||||||
|
(1, 14),
|
||||||
|
(1, 19),
|
||||||
|
(1, 12),
|
||||||
|
(2, 108),
|
||||||
|
(1, 13),
|
||||||
|
(1, 13),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Plotting points on Uplink Boxplot
|
||||||
|
for x, y in points_uplink:
|
||||||
|
axes[0].scatter(jitter(x), y, marker='x', color=cmap(14), linewidth=0.5)
|
||||||
|
|
||||||
|
# Plotting points on Downlink Boxplot
|
||||||
|
for x, y in points_downlink:
|
||||||
|
axes[1].scatter(jitter(x), y, marker='x', color=cmap(14), linewidth=0.5)
|
||||||
|
|
||||||
|
# Plotting points on RTT Boxplot
|
||||||
|
for x, y in points_rtt:
|
||||||
|
axes[2].scatter(jitter(x), y, marker='x', color=cmap(14), linewidth=0.5)
|
||||||
|
|
||||||
|
# Plot a dummy point for the legend (outside the visible range)
|
||||||
|
#axes[0].scatter([-100], [-100], marker='x', color=cmap(14), linewidth=0.5, label='synchronization failure')
|
||||||
|
#fig.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1))
|
||||||
|
|
||||||
|
if save:
|
||||||
|
plt.savefig(
|
||||||
|
"chart-connection-boxplot.png",
|
||||||
|
dpi=900,
|
||||||
|
bbox_inches="tight",
|
||||||
|
transparent=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if show:
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
#generate_measurement_stats_pie_chart(False, True)
|
||||||
|
#generate_measurement_repeats_histogram(False, True)
|
||||||
|
generate_connection_boxplots(False, True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
1402
docs/analysis/data.json
Normal file
BIN
docs/analysis/data.ods
Normal file
108
docs/analysis/main.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
import records as r
|
||||||
|
|
||||||
|
def get_records() -> list[r.Collection]:
|
||||||
|
"""Returns the trial data as a list of `records.Collection` objects."""
|
||||||
|
|
||||||
|
json_data = []
|
||||||
|
with open('data.json', 'r') as file:
|
||||||
|
json_data = json.load(file)
|
||||||
|
|
||||||
|
def incremented(time: datetime) -> datetime:
|
||||||
|
if time.hour == 22:
|
||||||
|
time += timedelta(hours=12)
|
||||||
|
else:
|
||||||
|
time += timedelta(hours=3)
|
||||||
|
return time
|
||||||
|
|
||||||
|
records: list[r.Collection] = []
|
||||||
|
time = datetime.fromisoformat("2023-08-14T10:00:00")
|
||||||
|
|
||||||
|
for item in json_data:
|
||||||
|
p1 = item['p1']
|
||||||
|
home_environment = item['home']
|
||||||
|
|
||||||
|
if p1:
|
||||||
|
mews = None
|
||||||
|
blood_pressure = None
|
||||||
|
body_temp = None
|
||||||
|
heart_rate = None
|
||||||
|
respiration_score = None
|
||||||
|
spo2 = None
|
||||||
|
s1 = None
|
||||||
|
b1 = None
|
||||||
|
t1 = None
|
||||||
|
p2 = None
|
||||||
|
s2 = None
|
||||||
|
b2 = None
|
||||||
|
t2 = None
|
||||||
|
uplink = None
|
||||||
|
downlink = None
|
||||||
|
rtt = None
|
||||||
|
else:
|
||||||
|
blood_pressure = r.BloodPressure(
|
||||||
|
time=datetime.fromisoformat(item['blood_pressure']['time']),
|
||||||
|
value_systolic=item['blood_pressure']['value_systolic'],
|
||||||
|
value_diastolic=item['blood_pressure']['value_systolic']
|
||||||
|
)
|
||||||
|
body_temp = r.BodyTemp(
|
||||||
|
time=datetime.fromisoformat(item['body_temp']['time']),
|
||||||
|
value=item['body_temp']['value']
|
||||||
|
)
|
||||||
|
heart_rate = r.HeartRate(
|
||||||
|
time=datetime.fromisoformat(item['heart_rate']['time']),
|
||||||
|
value=item['heart_rate']['value']
|
||||||
|
)
|
||||||
|
respiration_score = r.RespirationScore(
|
||||||
|
time=datetime.fromisoformat(item['respiration_score']['time']),
|
||||||
|
value=item['respiration_score']['value']
|
||||||
|
)
|
||||||
|
spo2 = r.Spo2(
|
||||||
|
time=datetime.fromisoformat(item['spo2']['time']),
|
||||||
|
value=item['spo2']['value']
|
||||||
|
)
|
||||||
|
s1 = item['s1']
|
||||||
|
b1 = item['b1']
|
||||||
|
t1 = item['t1']
|
||||||
|
p2 = item['p2']
|
||||||
|
s2 = item['s2']
|
||||||
|
b2 = item['b2']
|
||||||
|
t2 = item['t2']
|
||||||
|
uplink = item['uplink']
|
||||||
|
downlink = item['downlink']
|
||||||
|
rtt = item['rtt']
|
||||||
|
if s2 or b2 or t2:
|
||||||
|
mews = None
|
||||||
|
else:
|
||||||
|
mews = r.Mews(
|
||||||
|
time=datetime.fromisoformat(item['mews']['time']),
|
||||||
|
value=item['mews']['value']
|
||||||
|
)
|
||||||
|
|
||||||
|
records.append(r.Collection(
|
||||||
|
notification_time=time,
|
||||||
|
mews=mews,
|
||||||
|
blood_pressure=blood_pressure,
|
||||||
|
body_temp=body_temp,
|
||||||
|
heart_rate=heart_rate,
|
||||||
|
respiration_score=respiration_score,
|
||||||
|
spo2=spo2,
|
||||||
|
s1=s1,
|
||||||
|
b1=b1,
|
||||||
|
t1=t1,
|
||||||
|
s2=s2,
|
||||||
|
b2=b2,
|
||||||
|
t2=t2,
|
||||||
|
p1=p1,
|
||||||
|
p2=p2,
|
||||||
|
home_environment=home_environment,
|
||||||
|
uplink=uplink,
|
||||||
|
downlink=downlink,
|
||||||
|
rtt=rtt
|
||||||
|
))
|
||||||
|
|
||||||
|
time = incremented(time)
|
||||||
|
|
||||||
|
return records
|
65
docs/analysis/records.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
"""Type classes used during analysis."""
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BloodPressure:
|
||||||
|
time: datetime
|
||||||
|
value_diastolic: int
|
||||||
|
value_systolic: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BodyTemp:
|
||||||
|
time: datetime
|
||||||
|
value: float
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class HeartRate:
|
||||||
|
time: datetime
|
||||||
|
value: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Mews:
|
||||||
|
time: datetime
|
||||||
|
value: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class RespirationScore:
|
||||||
|
time: datetime
|
||||||
|
value: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Spo2:
|
||||||
|
time: datetime
|
||||||
|
value: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Collection:
|
||||||
|
notification_time: datetime
|
||||||
|
mews: Optional[Mews]
|
||||||
|
blood_pressure: Optional[BloodPressure]
|
||||||
|
body_temp: Optional[BodyTemp]
|
||||||
|
heart_rate: Optional[HeartRate]
|
||||||
|
respiration_score: Optional[RespirationScore]
|
||||||
|
spo2: Optional[Spo2]
|
||||||
|
s1: Optional[int]
|
||||||
|
b1: Optional[int]
|
||||||
|
t1: Optional[int]
|
||||||
|
s2: Optional[bool]
|
||||||
|
b2: Optional[bool]
|
||||||
|
t2: Optional[bool]
|
||||||
|
p1: bool
|
||||||
|
p2: Optional[bool]
|
||||||
|
home_environment: bool
|
||||||
|
uplink: Optional[float]
|
||||||
|
downlink: Optional[float]
|
||||||
|
rtt: Optional[int]
|
14
docs/analysis/shell.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
|
pkgs.mkShell {
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
python3Packages.numpy
|
||||||
|
python3Packages.matplotlib
|
||||||
|
python310Packages.pyqt6
|
||||||
|
python310Packages.pyside6
|
||||||
|
qt6.qtwayland
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
export MPLBACKEND=QtAgg
|
||||||
|
'';
|
||||||
|
}
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 632 KiB |
1
docs/figures/components-micro.drawio
Normal file
@ -0,0 +1 @@
|
|||||||
|
<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>
|
@ -1 +1,210 @@
|
|||||||
<mxfile host="Electron" modified="2023-08-02T11:28:29.093Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.7.4 Chrome/106.0.5249.199 Electron/21.3.3 Safari/537.36" etag="zYpybP46Dq96U6SLnOQ4" version="20.7.4" type="device"><diagram id="f6zhRbDmt8kIpFGfOheX" name="Page-1">7V3dcqO4En6aXJoCJCG4TCaZzKnaqTOVzO6euUoRI9ucAcQATuJ9+hX/SMgYO0BwJrlITFu0pFZ/6m6ppVyAT/7LbWSHm6/UId6FrjovF+D6QtctCNjvlLDLCQjBnLCOXCcnaTXh3v2HFES1oG5dh8RcwYRSL3FDnrikQUCWCUezo4g+88VW1ONrDe01aRHul7bXpv7tOskmp5o6rulfiLvelDVrhpV/49tl4aIn8cZ26HODBG4uwKeI0iT/5L98Il4qu1Iu+Xuf93xbNSwiQdLnhb8WvzaL258geALxZnFNbv3PaKEVo/Fke9uixz5xnt1gHRetTnalKFgHwvSjT51tSruyPXcdMIJHVqwFV3FoL9mLf2RP16w1dYklayOJGOGJRInLpHtZfJHQkFFXNEjui4o09swGM7HdIH3jOmXT7mrR+5QdeWmQiq7fEuqTJNqxIuW3oOhpoYc6KobluR5VhAvapjGiABREu9CkdcW7Fjb7UMj7GNnrLdm3ZL6O6Dbs3/0KB/ZjyUHtFIvFS8XQ21LRTYlUKvENL5WWUOwta8pbKWNL9N1D2VsfocoJfqFJBA8nFbxMGw0vlWXIid74tU2nrCvfjtYuE9ulGr5Uj4tMhpcwIzFRJItC6peV1DOqQ5Y0shOXpl9tA4dEHsN7BvWSP/u0Lv5mrXgsCX/GjE9BZD19FAsyWijSNpFIOaZTuU5dmhltfwu3JYHJuSC50lqkLGw/1b7gMU7/sNrYm/9hIltznXVbUml1jJWqGhLacfxMo2Zzuuq7TyKGmX7VeXacPHg0lVY/5td2Qr67PunH3o0f4m1Iom1jsA9UcMX8AmIH/finfAO7bs2Aklm5ERPNSMwzsee81fztViXHsCO+7XojNDMdvsRercYYOsbbXibuU1/xHsXcYVr68H/KJqO+oOmj1/yUJJgyuRkS7BllpVZe5j+u3HRiz+1U7i8z85M/f7Z910tNyhfiPZGUazr3Jb5XOFajmTPDUiwLGUjXMLA0oArOVtu4aRZUsKkbqmlk7+kSU6eOZuqMw54XcVgcUDzSKNnQNQ1s76amtgagIWcSOJdp8MEeb+7+IRH9Tr/awS71SxI7SurvfDtw/psZPuboMTPoFB4vG59o97+KG3v4kX6joPLx+qVZ8npXPr24SfaaoqqgeM7fBHr5XL+aPjTf/EYipsjJYb87pttoSQ47E6yza9KpacVIpNLu1LOm6qgSv6giRsSzs8mBiwQlGlTU8Y1hPakVeWEZnOoiS1DCvOvFW81wS2DEIwCKbHLJtNgwzbB3jWJhWiDe31woIA2rqLtVQnlDUzvLY/115SEflLIPeQ9r7FZj/Ao44/cOZ5XNrpiHs2XOEc54bnA2eTgbok3pC2eN12sk8hkKz0I9WFzUOVDeOFAeg9eVB5Pg2XzveNY4LOuoE8oTwNaaG2yxAFvtRNgK5giJfAaCLRDX0axuWLXKqwdgKML8yPJoEthaZwNb9TTYLlTmVuu8HZ6jV13GW/PBsyHgWT8Rz0Cu10PjWRPNsGp0ewdC+Unc3nJjYhq81ZjqC7bKd63s248mROR4qRBag/JH087uQ2jgfM6WRaaymGhuCEMCwsRtq96OrggxkdFAEGMVSU38Xksulj9gAnVd7vmPC8ly4Wy+JrBEJWfF4NFGjAfcqYZ1AlOozQ2oQ5lCTfBtAULj2MJyAugZkorlhw4ZHwH84d3Yv/66pc/bYOM/P7hfFqCFuzVN3NWuhb432zd+dcaCWe7DN7eIyziJ01QxyDll3VwqZSSZ3Wa5RXybDf5lGHpsnDIWc9ov5raHB9v/TehPItuLVY/fvZv/ttXRaKqyWAo0WcVCOTfva5J5H48FJlm0PGMwzS7rYhwUvUPV1wzMq77WVn0M25o/RKaRVPO1HoHreGHpK9eA+KXb7pXbw65+Lwe4a/poOsBdNns2/i+EqqI3d/453dQwELzYvu6wUTal5GT03HIdKvZrZ9I+u8nmTTNpXz93QHH/F7adUCAzm/poabNn44Rehu7lcskmn2RWdjPNfBvHdma5adswTaH6LXKnjkZTtVxdhtImbjuhMLUqLTwZYCQ4yVKhZgmnO7KKSLz53gxzZgGoXHTD51CSl9BlPf6AktQwId6pNSSrI5o+UjwnBZIsCWmWQGJGicTxB44+cJSaJGtuOJo0i+AV4WOxrVlFkBf94sc6Zqz2NUfI/DHa0WGXMz2b6BCYvDpiKKhZ33AQ6TwjU9TXkaPBPmsc81BjfJQan66S+ExVEosqeerOOhbW4fB4KilfdmsfrWyp5BQKN/q0OdCyW999567ludlosXgkxxJXd3tnYBlqN6Oh8kMMfj2vnMD35nsIHRTKj5PvMWmi8hsvdeO3zlKem2Fonb059agQEjM5Rkq52tfgvoeFzCJPfH8/1K7y40BQO5v14G8RZbEemVXMHbMosV9cfBNs/X7xdnaElq4eHt0ovbihd9R9DhH3GDeTGECxLA44UBqEQ6Vk3pzNzLHicO1sVoa/EGYO75gG3aVMnFkBrGQpvxvilVsvF42rHto4jDJpDHqOvWaeacXDY+hLuKvHdOC9whpBqAA+1RNgCawBVJAsiW+0w+/a2SxUX1Fn95344QesJ4b1knhLdytbMS+gfU2Wrm97BzrxbqHNMKvy0akus9hsBrAmtdhnk1J4H1L9D/JEvLOF9lE2roVmWacG7MIEU0RIolQdPqz/3inisEc/9fxQhufznx+uPEqdbxGJ42304dVPbf7jXZxQz10++P5mPVy/xGoc1+6uRz6TSHO1f6e5JVswMK36xzwcZZiGUp5NnCbK0GWbTbOca+5IHLr5y/eMy8d0M/l0wxzByE12Pas4tBD5rpEv3Ksn8yoQUnTJgsIQXoV8W7md+D5TpH8lz/EHuidGd9/rYX/veAEgU8G8HZeGDHtWC8cD9/nclHniJndjY7vP9SSjXTPSObfOZs8biPfHnZoMBU+8ZmSwZKhJ74zcm7qRa/w4V0ZC3LyqKru7CnZrt+Sej6y9x+p8py6f35UdwMSKCuoTi/zSLxTv3egNAagqFuJjt6lRMI8EpjFRAEwgogCfBQrUmaEAAqwgTbdMpvGGBlXEqy60LAVrjVUJfBoqgG4pOsOYiphx0RDmMyOA0e+Sm8EAMo/TCD0AcrL7w2Y0ESDGOQBkdncNQx0pCGBVwwgCE1m4DRAkMD0i6VYBqgkrWAgWaFqrId1HeF+gMFALFGdhNWZ3nz7TTUXVmWEoDAd/iV+GCdwwGqfBI821Yc5tZpYAUk3RZkDFav7AadHS49jFWaPlmBtR3gISczuKAQ1d0QCuMIH5Y0GvsRMIpUlnavUjRCpwnBsCkXDjn3Db9LHlj80TZ4/1f1HMi9f/ihLc/As=</diagram></mxfile>
|
<mxfile host="app.diagrams.net" modified="2023-08-20T22:49:49.811Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" etag="PkJOclFEVI5TEfIjMddY" version="21.6.8" type="device">
|
||||||
|
<diagram id="f6zhRbDmt8kIpFGfOheX" name="Page-1">
|
||||||
|
<mxGraphModel dx="1412" dy="742" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-14" value="medwings" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fontStyle=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="134" y="250" width="570" height="330" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-12" value="" style="group" parent="1" vertex="1" connectable="0">
|
||||||
|
<mxGeometry x="94" y="620" width="280" height="250" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-1" value="authentication" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fontStyle=1" parent="V-qh-Gk3nv3sh-DeGmF5-12" vertex="1">
|
||||||
|
<mxGeometry x="40" y="-10" width="240" height="250" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-2" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>User</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i style="">&nbsp;: Integer</i><br></u>password<i>&nbsp;: String</i><br>last_login<i>&nbsp;: DateTime</i><br>is_superuser<i>&nbsp;: Boolean</i><br>username<i>&nbsp;: String</i><br>first_name<i>&nbsp;: String</i><br>last_name : <i>String</i><br>email<i>&nbsp;: String</i><br>is_staff<i>&nbsp;: Boolean</i><br>is_active<i>&nbsp;: Boolean</i><br>date_joined<i>&nbsp;: DateTime</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="V-qh-Gk3nv3sh-DeGmF5-12" vertex="1">
|
||||||
|
<mxGeometry x="69.99565217391304" y="20" width="194.7826086956522" height="200" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-26" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=1.003;exitY=0.323;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-16" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-96" y="590" as="sourcePoint" />
|
||||||
|
<mxPoint x="4" y="490" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="404" y="705" />
|
||||||
|
<mxPoint x="404" y="610" />
|
||||||
|
<mxPoint x="724" y="610" />
|
||||||
|
<mxPoint x="724" y="420" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-27" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.997;exitY=0.398;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-17" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-86" y="600" as="sourcePoint" />
|
||||||
|
<mxPoint x="14" y="500" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="414" y="720" />
|
||||||
|
<mxPoint x="414" y="620" />
|
||||||
|
<mxPoint x="734" y="620" />
|
||||||
|
<mxPoint x="734" y="320" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-28" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-19" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-76" y="610" as="sourcePoint" />
|
||||||
|
<mxPoint x="24" y="510" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="394" y="690" />
|
||||||
|
<mxPoint x="394" y="600" />
|
||||||
|
<mxPoint x="714" y="600" />
|
||||||
|
<mxPoint x="714" y="520" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-29" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=-0.002;exitY=0.33;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-20" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-66" y="620" as="sourcePoint" />
|
||||||
|
<mxPoint x="34" y="520" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="114" y="706" />
|
||||||
|
<mxPoint x="114" y="420" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-30" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endFill=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-15" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-56" y="630" as="sourcePoint" />
|
||||||
|
<mxPoint x="134" y="530" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="213" y="610" />
|
||||||
|
<mxPoint x="213" y="600" />
|
||||||
|
<mxPoint x="226" y="600" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-32" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;exitX=0;exitY=0.4;exitDx=0;exitDy=0;exitPerimeter=0;endFill=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-21" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-66" y="620" as="sourcePoint" />
|
||||||
|
<mxPoint x="124" y="355" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="130" y="720" />
|
||||||
|
<mxPoint x="130" y="320" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-3" value="gotify" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="134" y="880" width="276" height="110" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-5" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>GotifyApplication</b></p><hr><p style="margin:0px;margin-left:8px;">id<i>&nbsp;: Integer</i><br>token<i> : String</i><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="280" y="905" width="110" height="70" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-9" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>GotifyUser</b></p><hr><p style="margin:0px;margin-left:8px;">id<i>&nbsp;: Integer</i><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="167" y="915" width="74" height="50" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-10" value="" style="fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="b34YlEaqVGowunhmw_iH-9" target="b34YlEaqVGowunhmw_iH-5" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="440.2782608695652" y="1735" as="sourcePoint" />
|
||||||
|
<mxPoint x="621" y="1690" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-4" value="withings" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="424" y="640" width="310" height="230" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-5" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>ApiAccount</b></p><hr><p style="margin:0px;margin-left:8px;">userid<i>&nbsp;: Integer</i><br>last_update<i>&nbsp;: DateTime</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="520" y="787" width="140.5" height="63" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-6" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>RefreshToken</b></p><hr><p style="margin:0px;margin-left:8px;">value<i>&nbsp;: String</i><br>expires<i>&nbsp;: DateTime</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="457" y="680" width="120" height="70" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-7" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>AccessToken</b></p><hr><p style="margin:0px;margin-left:8px;">value<i>&nbsp;: String</i><br>expires<i>&nbsp;: DateTime</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="597" y="680" width="120" height="70" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-9" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-6" target="V-qh-Gk3nv3sh-DeGmF5-5" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="387" y="740" as="sourcePoint" />
|
||||||
|
<mxPoint x="527" y="870" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-10" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-7" target="V-qh-Gk3nv3sh-DeGmF5-5" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="787" y="730" as="sourcePoint" />
|
||||||
|
<mxPoint x="767" y="770" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-11" value="" style="fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="b34YlEaqVGowunhmw_iH-9" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="304" y="950" as="sourcePoint" />
|
||||||
|
<mxPoint x="360" y="950" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="261" y="870" />
|
||||||
|
<mxPoint x="204" y="870" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-8" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="V-qh-Gk3nv3sh-DeGmF5-5" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="404" y="790" as="sourcePoint" />
|
||||||
|
<mxPoint x="524" y="330" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="404" y="790" />
|
||||||
|
<mxPoint x="404" y="819" />
|
||||||
|
<mxPoint x="520" y="819" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-15" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>Profile</b></p><hr><p style="margin:0px;margin-left:8px;">sex<i>&nbsp;: Enum</i><br>date_of_birth<i>&nbsp;: Date</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="163.99" y="480" width="124.21" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-16" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>HeartRateRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i>&nbsp;: Integer</i></u><br>recorded<i>&nbsp;: DateTime</i><br>value_bpm<i> : Integer</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="544.36" y="370" width="134.56" height="100" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-17" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>BodyTempRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i>&nbsp;: Integer</i></u><br>recorded<i>&nbsp;: DateTime</i><br>value_celcius<i> : Decimal</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="534.01" y="280" width="144.91" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-19" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>Spo2LevelRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i> : Integer</i></u></p><p style="margin:0px;margin-left:8px;">recorded<i>&nbsp;: DateTime</i><br>value_percent<i> : Integer</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="534" y="480" width="144.91" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-20" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>BloodPressureRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i>&nbsp;: Integer</i></u><br>recorded<i>&nbsp;: DateTime</i><br>value_systolic_mmhg<i>&nbsp;: Integer</i><br>value_diastolic_mmhg<i> : Integer<br></i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="163.98999999999998" y="370" width="186.32" height="100" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="V-qh-Gk3nv3sh-DeGmF5-21" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>RespirationScoreRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i>&nbsp;: Integer</i></u><br>recorded<i>&nbsp;: DateTime</i><br>value_severity<i>&nbsp;: Enum</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="164" y="280" width="155.26" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-14" value="<p style="margin:0px;margin-top:4px;text-align:center;text-decoration:underline;"><b>MewsRecord</b></p><hr><p style="margin:0px;margin-left:8px;"><u>id<i>&nbsp;: Integer</i></u><br>recorded<i>&nbsp;: DateTime</i><br>value_n<i>&nbsp;: Integer</i></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;container=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="358.78" y="480" width="134.56" height="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-16" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;startArrow=ERmandOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endFill=0;" parent="1" source="V-qh-Gk3nv3sh-DeGmF5-2" target="b34YlEaqVGowunhmw_iH-14" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="334" y="630" as="sourcePoint" />
|
||||||
|
<mxPoint x="434" y="530" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-17" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERzeroToOne;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.472;exitY=-0.004;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" parent="1" source="b34YlEaqVGowunhmw_iH-14" target="V-qh-Gk3nv3sh-DeGmF5-21" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="387.0326086956521" y="455" as="sourcePoint" />
|
||||||
|
<mxPoint x="440.95" y="330" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-18" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERzeroToOne;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.383;exitY=-0.007;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" parent="1" source="b34YlEaqVGowunhmw_iH-14" target="V-qh-Gk3nv3sh-DeGmF5-20" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="437.51298245614055" y="499.71999999999997" as="sourcePoint" />
|
||||||
|
<mxPoint x="329.2521052631579" y="365" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-19" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERzeroToOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.565;exitY=-0.006;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" parent="1" source="b34YlEaqVGowunhmw_iH-14" target="V-qh-Gk3nv3sh-DeGmF5-17" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="425.53701754385975" y="499.51" as="sourcePoint" />
|
||||||
|
<mxPoint x="360.3084210526315" y="450" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-20" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERzeroToOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.655;exitY=-0.007;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" parent="1" source="b34YlEaqVGowunhmw_iH-14" target="V-qh-Gk3nv3sh-DeGmF5-16" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="450.0271929824563" y="499.5799999999999" as="sourcePoint" />
|
||||||
|
<mxPoint x="544.0045614035089" y="364.99999999999994" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="b34YlEaqVGowunhmw_iH-21" value="" style="edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERzeroToOne;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;startFill=0;" parent="1" source="b34YlEaqVGowunhmw_iH-14" target="V-qh-Gk3nv3sh-DeGmF5-19" edge="1">
|
||||||
|
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||||
|
<mxPoint x="462.13771929824577" y="499.51" as="sourcePoint" />
|
||||||
|
<mxPoint x="554.3600000000001" y="445" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="530" y="520" />
|
||||||
|
<mxPoint x="530" y="520" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
|
17
docs/figures/icon-browser.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
|
||||||
|
|
||||||
|
<title>browser</title>
|
||||||
|
<desc>Created with Sketch Beta.</desc>
|
||||||
|
<defs>
|
||||||
|
|
||||||
|
</defs>
|
||||||
|
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
|
||||||
|
<g id="Icon-Set" sketch:type="MSLayerGroup" transform="translate(-256.000000, -671.000000)" fill="#000000">
|
||||||
|
<path d="M265,675 C264.448,675 264,675.448 264,676 C264,676.553 264.448,677 265,677 C265.552,677 266,676.553 266,676 C266,675.448 265.552,675 265,675 L265,675 Z M269,675 C268.448,675 268,675.448 268,676 C268,676.553 268.448,677 269,677 C269.552,677 270,676.553 270,676 C270,675.448 269.552,675 269,675 L269,675 Z M286,679 L258,679 L258,675 C258,673.896 258.896,673 260,673 L284,673 C285.104,673 286,673.896 286,675 L286,679 L286,679 Z M286,699 C286,700.104 285.104,701 284,701 L260,701 C258.896,701 258,700.104 258,699 L258,681 L286,681 L286,699 L286,699 Z M284,671 L260,671 C257.791,671 256,672.791 256,675 L256,699 C256,701.209 257.791,703 260,703 L284,703 C286.209,703 288,701.209 288,699 L288,675 C288,672.791 286.209,671 284,671 L284,671 Z M261,675 C260.448,675 260,675.448 260,676 C260,676.553 260.448,677 261,677 C261.552,677 262,676.553 262,676 C262,675.448 261.552,675 261,675 L261,675 Z" id="browser" sketch:type="MSShapeGroup">
|
||||||
|
|
||||||
|
</path>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
10
docs/figures/icon-server.svg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g fill="none" fill-rule="evenodd" transform="translate(2 4)">
|
||||||
|
<path d="m.5 10.5v-2c0-1.1045695.8954305-2 2-2h12c1.1045695 0 2 .8954305 2 2v2c0 1.1045695-.8954305 2-2 2h-12c-1.1045695 0-2-.8954305-2-2z" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="m4.5 9.5c0-.55228475-.44771525-1-1-1s-1 .44771525-1 1c0 .5522847.44771525 1 1 1s1-.4477153 1-1z" fill="#000000"/>
|
||||||
|
<path d="m.5 4.49375668.00936503-2c.00344048-1.10212675.89785814-1.99375668 1.99999025-1.99375668h11.99057232c1.0543617 0 1.9181651.81587779 1.9945142 1.85073766l.005476.15550566-.009365 2c-.0034405 1.10212675-.8978582 1.99375668-1.9999903 1.99375668h-11.9905625c-1.05437154 0-1.91817487-.81587779-1.99452401-1.85073766z" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path d="m4.5 3.5c0-.55228475-.44771525-1-1-1s-1 .44771525-1 1 .44771525 1 1 1 1-.44771525 1-1z" fill="#000000"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
34
docs/figures/icon-user-interface.svg
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 281.25 281.25" id="svg2" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
|
||||||
|
<defs id="defs4"/>
|
||||||
|
|
||||||
|
<g id="layer1" transform="translate(7276.1064,-3697.2496)">
|
||||||
|
|
||||||
|
<g id="g23642" style="fill:#3d3d3d;fill-opacity:1">
|
||||||
|
|
||||||
|
<path d="m -7211.4766,3736.0898 c -14.2755,10e-5 -25.9492,11.6738 -25.9492,25.9493 0,14.2755 11.6737,25.9491 25.9492,25.9492 14.2756,0 25.9493,-11.6737 25.9493,-25.9492 0,-14.2756 -11.6737,-25.9493 -25.9493,-25.9493 z m 0,9.375 c 9.209,0 16.5743,7.3653 16.5743,16.5743 0,9.2089 -7.3653,16.5742 -16.5743,16.5742 -9.2088,0 -16.5742,-7.3654 -16.5742,-16.5742 0,-9.2089 7.3654,-16.5742 16.5742,-16.5743 z" id="path3266" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3743.8574 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 129.2676 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3268" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3770.8477 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 53.5059 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3270" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7211.4766,3811.9258 c -14.2755,0 -25.9492,11.6737 -25.9492,25.9492 0,14.2755 11.6737,25.9472 25.9492,25.9473 14.2756,0 25.9493,-11.6718 25.9493,-25.9473 0,-14.2755 -11.6737,-25.9492 -25.9493,-25.9492 z m 0,9.375 c 9.209,0 16.5743,7.3653 16.5743,16.5742 0,9.2089 -7.3653,16.5723 -16.5743,16.5723 -9.2088,-10e-5 -16.5742,-7.3634 -16.5742,-16.5723 0,-9.2089 7.3654,-16.5742 16.5742,-16.5742 z" id="circle3282" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3819.6914 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 129.2676 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3284" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3846.6816 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 53.5059 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3286" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7211.4766,3887.7617 c -14.2754,1e-4 -25.9491,11.6718 -25.9492,25.9473 0,14.2755 11.6737,25.9492 25.9492,25.9492 14.2756,0 25.9493,-11.6737 25.9493,-25.9492 -1e-4,-14.2755 -11.6738,-25.9473 -25.9493,-25.9473 z m 0,9.375 c 9.2089,0 16.5742,7.3634 16.5743,16.5723 0,9.2089 -7.3653,16.5742 -16.5743,16.5742 -9.2088,0 -16.5742,-7.3653 -16.5742,-16.5742 0,-9.2089 7.3654,-16.5723 16.5742,-16.5723 z" id="circle3292" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3895.5273 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 129.2676 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3294" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
<path d="m -7167.4922,3922.5176 a 4.6875,4.6875 0 0 0 -4.6875,4.6875 4.6875,4.6875 0 0 0 4.6875,4.6875 h 53.5059 a 4.6875,4.6875 0 0 0 4.6875,-4.6875 4.6875,4.6875 0 0 0 -4.6875,-4.6875 z" id="path3296" style="color:#000000;fill:#3d3d3d;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"/>
|
||||||
|
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</g>
|
||||||
|
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
947
docs/misc/trial-data.json
Normal file
@ -0,0 +1,947 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-14T10:26:35",
|
||||||
|
"value_diastolic": 86,
|
||||||
|
"value_systolic": 131
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-14T10:25:48",
|
||||||
|
"value": 36.98
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-14T10:26:35",
|
||||||
|
"value": 90
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-14T10:24:51",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-14T10:25:35",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-14T13:05:06",
|
||||||
|
"value_diastolic": 75,
|
||||||
|
"value_systolic": 117
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-14T13:04:18",
|
||||||
|
"value": 37.49
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-14T13:05:06",
|
||||||
|
"value": 71
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-14T13:06:18",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-14T13:03:24",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-14T13:03:59",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-14T16:48:16",
|
||||||
|
"value_diastolic": 85,
|
||||||
|
"value_systolic": 126
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-14T16:47:12",
|
||||||
|
"value": 37.16
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-14T16:48:16",
|
||||||
|
"value": 73
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-14T16:46:18",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-14T16:46:57",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-14T19:06:01",
|
||||||
|
"value_diastolic": 86,
|
||||||
|
"value_systolic": 124
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-14T19:05:10",
|
||||||
|
"value": 37.28
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-14T19:06:01",
|
||||||
|
"value": 82
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-14T19:07:22",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-14T19:03:39",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-14T19:04:57",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-14T22:27:50",
|
||||||
|
"value_diastolic": 86,
|
||||||
|
"value_systolic": 114
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-14T22:27:12",
|
||||||
|
"value": 37.32
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-14T22:27:50",
|
||||||
|
"value": 56
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-14T22:24:14",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-14T22:26:54",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-15T16:13:28",
|
||||||
|
"value_diastolic": 83,
|
||||||
|
"value_systolic": 115
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-15T16:12:25",
|
||||||
|
"value": 37.64
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-15T16:13:28",
|
||||||
|
"value": 84
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-15T16:16:55",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-15T16:11:23",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-15T16:12:03",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-15T19:37:37",
|
||||||
|
"value_diastolic": 80,
|
||||||
|
"value_systolic": 114
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-15T19:36:32",
|
||||||
|
"value": 37.33
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-15T19:37:37",
|
||||||
|
"value": 75
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-15T19:40:31",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-15T19:35:07",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-15T19:36:19",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-15T22:37:09",
|
||||||
|
"value_diastolic": 78,
|
||||||
|
"value_systolic": 114
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-15T22:36:27",
|
||||||
|
"value": 37.27
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-15T22:37:09",
|
||||||
|
"value": 63
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-15T22:37:55",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-15T22:35:34",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-15T22:36:09",
|
||||||
|
"value": 99
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-16T10:33:29",
|
||||||
|
"value_diastolic": 82,
|
||||||
|
"value_systolic": 112
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-16T10:32:39",
|
||||||
|
"value": 37.39
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-16T10:33:29",
|
||||||
|
"value": 93
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-16T10:34:59",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-16T10:31:40",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-16T10:32:23",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-16T14:38:04",
|
||||||
|
"value_diastolic": 93,
|
||||||
|
"value_systolic": 119
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-16T14:36:55",
|
||||||
|
"value": 37.65
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-16T14:38:04",
|
||||||
|
"value": 72
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-16T14:36:04",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-16T14:36:42",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-16T16:47:26",
|
||||||
|
"value_diastolic": 83,
|
||||||
|
"value_systolic": 118
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-16T16:45:42",
|
||||||
|
"value": 37.64
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-16T16:47:26",
|
||||||
|
"value": 89
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-16T16:44:39",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-16T16:45:28",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-16T20:12:49",
|
||||||
|
"value_diastolic": 81,
|
||||||
|
"value_systolic": 118
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-16T20:11:58",
|
||||||
|
"value": 37.52
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-16T20:12:49",
|
||||||
|
"value": 97
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-16T20:15:42",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-16T20:10:52",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-16T20:11:35",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-16T23:18:08",
|
||||||
|
"value_diastolic": 74,
|
||||||
|
"value_systolic": 125
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-16T23:15:39",
|
||||||
|
"value": 37.65
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-16T23:18:08",
|
||||||
|
"value": 85
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-16T23:18:50",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-16T23:13:39",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-16T23:15:17",
|
||||||
|
"value": 99
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-17T11:01:05",
|
||||||
|
"value_diastolic": 79,
|
||||||
|
"value_systolic": 112
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-17T11:00:04",
|
||||||
|
"value": 37.05
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-17T11:01:05",
|
||||||
|
"value": 87
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-17T10:58:59",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-17T10:59:48",
|
||||||
|
"value": 95
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-17T14:27:40",
|
||||||
|
"value_diastolic": 82,
|
||||||
|
"value_systolic": 118
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-17T14:27:09",
|
||||||
|
"value": 37.43
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-17T14:27:40",
|
||||||
|
"value": 80
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-17T14:25:59",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-17T14:26:45",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-17T16:53:03",
|
||||||
|
"value_diastolic": 71,
|
||||||
|
"value_systolic": 121
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-17T16:52:21",
|
||||||
|
"value": 37.73
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-17T16:53:03",
|
||||||
|
"value": 83
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-17T16:54:15",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-17T16:50:34",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-17T16:51:58",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-17T20:12:24",
|
||||||
|
"value_diastolic": 69,
|
||||||
|
"value_systolic": 129
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-17T20:11:32",
|
||||||
|
"value": 37.46
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-17T20:12:24",
|
||||||
|
"value": 73
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-17T20:13:09",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-17T20:10:31",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-17T20:11:13",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-17T22:47:55",
|
||||||
|
"value_diastolic": 81,
|
||||||
|
"value_systolic": 121
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-17T22:47:18",
|
||||||
|
"value": 36.79
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-17T22:47:55",
|
||||||
|
"value": 95
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-17T22:50:02",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-17T22:46:04",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-17T22:46:54",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-18T10:54:12",
|
||||||
|
"value_diastolic": 75,
|
||||||
|
"value_systolic": 124
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-18T10:53:27",
|
||||||
|
"value": 37.34
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-18T10:54:12",
|
||||||
|
"value": 73
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-18T10:55:50",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-18T10:51:36",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-18T10:53:12",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-18T13:32:51",
|
||||||
|
"value_diastolic": 86,
|
||||||
|
"value_systolic": 123
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-18T13:32:16",
|
||||||
|
"value": 37.09
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-18T13:32:51",
|
||||||
|
"value": 61
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-18T13:34:01",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-18T13:29:25",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-18T13:31:55",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-18T16:39:14",
|
||||||
|
"value_diastolic": 83,
|
||||||
|
"value_systolic": 122
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-18T16:37:22",
|
||||||
|
"value": 37.13
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-18T16:39:14",
|
||||||
|
"value": 73
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-18T16:36:14",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-18T16:37:02",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-18T19:38:58",
|
||||||
|
"value_diastolic": 75,
|
||||||
|
"value_systolic": 123
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-18T19:36:37",
|
||||||
|
"value": 37.65
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-18T19:38:58",
|
||||||
|
"value": 114
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-18T19:41:43",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-18T19:35:24",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-18T19:36:14",
|
||||||
|
"value": 95
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-19T11:36:26",
|
||||||
|
"value_diastolic": 76,
|
||||||
|
"value_systolic": 121
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-19T11:35:24",
|
||||||
|
"value": 37.5
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-19T11:36:26",
|
||||||
|
"value": 54
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-19T11:34:30",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-19T11:35:05",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-19T13:24:56",
|
||||||
|
"value_diastolic": 73,
|
||||||
|
"value_systolic": 120
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-19T13:24:02",
|
||||||
|
"value": 37.31
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-19T13:24:56",
|
||||||
|
"value": 106
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-19T13:27:13",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-19T13:21:46",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-19T13:23:43",
|
||||||
|
"value": 96
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": null,
|
||||||
|
"value_diastolic": null,
|
||||||
|
"value_systolic": null
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-20T13:21:35",
|
||||||
|
"value_diastolic": 82,
|
||||||
|
"value_systolic": 119
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-20T13:20:44",
|
||||||
|
"value": 37.29
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-20T13:21:35",
|
||||||
|
"value": 83
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-20T13:18:46",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-20T13:20:20",
|
||||||
|
"value": 98
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-20T16:13:04",
|
||||||
|
"value_diastolic": 79,
|
||||||
|
"value_systolic": 118
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-20T16:12:05",
|
||||||
|
"value": 37.38
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-20T16:13:04",
|
||||||
|
"value": 95
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": null,
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-20T16:10:40",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-20T16:11:52",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-20T19:06:47",
|
||||||
|
"value_diastolic": 82,
|
||||||
|
"value_systolic": 120
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-20T19:05:37",
|
||||||
|
"value": 37.25
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-20T19:06:47",
|
||||||
|
"value": 93
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-20T19:12:52",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-20T19:04:47",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-20T19:05:24",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blood_pressure": {
|
||||||
|
"time": "2023-08-20T22:25:47",
|
||||||
|
"value_diastolic": 73,
|
||||||
|
"value_systolic": 115
|
||||||
|
},
|
||||||
|
"body_temp": {
|
||||||
|
"time": "2023-08-20T22:25:06",
|
||||||
|
"value": 37.45
|
||||||
|
},
|
||||||
|
"heart_rate": {
|
||||||
|
"time": "2023-08-20T22:25:47",
|
||||||
|
"value": 83
|
||||||
|
},
|
||||||
|
"mews": {
|
||||||
|
"time": "2023-08-20T22:29:09",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"respiration_score": {
|
||||||
|
"time": "2023-08-20T22:23:27",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"spo2": {
|
||||||
|
"time": "2023-08-20T22:24:51",
|
||||||
|
"value": 97
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
BIN
docs/misc/trial-data.ods
Normal file
BIN
docs/thesis/attachments/trial-data.pdf
Normal file
@ -1,28 +1,34 @@
|
|||||||
\begin{titlepage}
|
\begin{titlepage}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
{\normalsize\textbf{Early detection of patient deterioration at home using smart medical sensors}} \\
|
{\Large\textbf{Early detection of patient deterioration at home using smart medical sensors}} \\
|
||||||
\vspace{1cm}
|
\vspace{2cm}
|
||||||
\includegraphics[width=0.5\textwidth]{figures/tubs-logo.png} \\
|
\includegraphics[width=0.5\textwidth]{figures/tubs-logo.png} \\
|
||||||
|
\vspace{2cm}
|
||||||
|
{\large\textbf{Bachelor Thesis}} \\
|
||||||
\vspace{1cm}
|
\vspace{1cm}
|
||||||
{\large{Bachelor Thesis}} \\
|
{\small{
|
||||||
\vspace{1cm}
|
|
||||||
{\small\textbf{
|
|
||||||
submitted to \\
|
submitted to \\
|
||||||
Peter L. Reichertz Institut für Medizinische Informatik \\
|
\vspace{1cm}
|
||||||
der Technischen Universität Braunschweig \\
|
\textbf{
|
||||||
und der Medizinischen Hochschule Hannover \\
|
Peter L. Reichertz Institut für Medizinische Informatik \\
|
||||||
|
der Technischen Universität Braunschweig \\
|
||||||
|
und der Medizinischen Hochschule Hannover \\
|
||||||
|
}
|
||||||
\vspace{0.5cm}
|
\vspace{0.5cm}
|
||||||
in September 2023 \\
|
in \\
|
||||||
|
\vspace{0.5cm}
|
||||||
|
\textbf{September 2023} \\
|
||||||
\vspace{0.5cm}
|
\vspace{0.5cm}
|
||||||
by \\
|
by \\
|
||||||
Julian Lobbes \\
|
\vspace{0.5cm}
|
||||||
from Hannover
|
\textbf{Julian Lobbes} \\
|
||||||
|
born in Hannover
|
||||||
}} \\
|
}} \\
|
||||||
\end{center}
|
\end{center}
|
||||||
\vfill
|
\vfill
|
||||||
{\footnotesize{
|
{\footnotesize{
|
||||||
Supervisor: Prof. Dr. Thomas M. Deserno \\
|
Supervisor: \textbf{Prof. Dr. Thomas M. Deserno} \\
|
||||||
Supervising assistant: Prof. Dr. Sharareh R. Niakan Kalhori \\
|
Supervising assistant: \textbf{Prof. Dr. Sharareh R. Niakan Kalhori} \\
|
||||||
}}
|
}}
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
%\newpage
|
%\newpage
|
||||||
|
BIN
docs/thesis/figures/chart-connection-boxplot.png
Normal file
After Width: | Height: | Size: 449 KiB |
BIN
docs/thesis/figures/chart-measurement-repeats.png
Normal file
After Width: | Height: | Size: 333 KiB |
BIN
docs/thesis/figures/chart-measurement-stats.png
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
docs/thesis/figures/components-macro.png
Normal file
After Width: | Height: | Size: 261 KiB |
BIN
docs/thesis/figures/datamodel.png
Normal file
After Width: | Height: | Size: 336 KiB |
BIN
docs/thesis/figures/prisma-flowchart.png
Normal file
After Width: | Height: | Size: 247 KiB |
BIN
docs/thesis/figures/screenshot-home-page.png
Normal file
After Width: | Height: | Size: 930 KiB |
BIN
docs/thesis/figures/screenshot-recording.png
Normal file
After Width: | Height: | Size: 9.7 MiB |
BIN
docs/thesis/figures/screenshot-register-continue.png
Normal file
After Width: | Height: | Size: 251 KiB |
BIN
docs/thesis/figures/screenshot-register-finalize.png
Normal file
After Width: | Height: | Size: 624 KiB |
BIN
docs/thesis/figures/screenshot-register-init.png
Normal file
After Width: | Height: | Size: 518 KiB |
BIN
docs/thesis/figures/screenshot-register-oauth2.png
Normal file
After Width: | Height: | Size: 176 KiB |
BIN
docs/thesis/figures/screenshot-vitals-measurement.png
Normal file
After Width: | Height: | Size: 9.7 MiB |
BIN
docs/thesis/figures/withings-bpm-core.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
BIN
docs/thesis/figures/withings-scanwatch.png
Normal file
After Width: | Height: | Size: 457 KiB |
BIN
docs/thesis/figures/withings-thermo.png
Normal file
After Width: | Height: | Size: 76 KiB |
@ -1,15 +1,211 @@
|
|||||||
\makenoidxglossaries
|
\makenoidxglossaries
|
||||||
\newglossaryentry{dbms}{
|
\newglossaryentry{dbms}{
|
||||||
type=\acronymtype,
|
type=\acronymtype,
|
||||||
name={DBMS},
|
name={DBMS},
|
||||||
description={Database Management System},
|
description={Database Management System},
|
||||||
first={\Gls{dbms_full} (DBMS)}
|
first={\Gls{dbms_full} (DBMS)}
|
||||||
}
|
}
|
||||||
\newglossaryentry{dbms_full}{
|
\newglossaryentry{dbms_full}{
|
||||||
name={Database Management System},
|
name={Database Management System},
|
||||||
description={
|
description={
|
||||||
A Database Management System is a software system which enables the creation, organization, and management of databases.
|
A Database Management System is a software system which enables the creation, organization, and management of databases.
|
||||||
It generally acts as an interface between the database and client applications, ensuring that data is consistently
|
It generally acts as an interface between the database and client applications, ensuring that data is consistently
|
||||||
stored and readily accessible in a secure and efficient manner, while maintaining data integrity.
|
stored and readily accessible in a secure and efficient manner, while maintaining data integrity.
|
||||||
}
|
They can manage various forms of data, including text, numbers, multimedia, and more.
|
||||||
|
The DBMS plays a crucial role in maintaining the integrity, consistency, and security of the data it handles.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{gui}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={GUI},
|
||||||
|
description={Graphical User Interface},
|
||||||
|
first={Graphical User Interface (GUI)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{ui}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={UI},
|
||||||
|
description={User Interface},
|
||||||
|
first={User Interface (UI)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{iot}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={IoT},
|
||||||
|
description={Internet of Things},
|
||||||
|
first={Internet of Things (IoT)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{spo2}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={SPO\textsubscript{2}},
|
||||||
|
description={\Gls{spo2_full}},
|
||||||
|
first={\Gls{spo2_full} (SPO\textsubscript{2})}
|
||||||
|
}
|
||||||
|
\newglossaryentry{spo2_full}{
|
||||||
|
name={Blood Oxygen Saturation},
|
||||||
|
description={
|
||||||
|
A percentage measure indicating the level of oxygen saturation in the blood.
|
||||||
|
The blood oxygen saturation represents the proportion of hemoglobin molecules in the bloodstream that are saturated with oxygen\cite{hafen_oxygen_2023}.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{uplink-datarate}{
|
||||||
|
name={uplink datarate},
|
||||||
|
description={
|
||||||
|
The speed at which data is transmitted from a client device, such as a computer or smartphone, to a server or central network.
|
||||||
|
Typically measured in Mbps (megabits per second), it represents the efficiency of data sending capabilities of a network connection.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{downlink-datarate}{
|
||||||
|
name={downlink datarate},
|
||||||
|
description={
|
||||||
|
The rate at which data is received by a client device from a central server or network.
|
||||||
|
Expressed often in Mbps, it reflects the downloading or data reception efficiency of a network connection.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rtt}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={RTT},
|
||||||
|
description={\Gls{rtt_full}},
|
||||||
|
first={\Gls{rtt_full} (RTT)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rtt_full}{
|
||||||
|
name={Round trip time},
|
||||||
|
description={
|
||||||
|
The time taken for a data packet to travel from a source to a destination and back again.
|
||||||
|
It provides an indication of the latency or delay inherent in a network connection and is usually measured in milliseconds (ms).
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{icu}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={ICU},
|
||||||
|
description={intensive care unit},
|
||||||
|
first={intensive care unit (ICU)},
|
||||||
|
}
|
||||||
|
\newglossaryentry{mews}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={MEWS},
|
||||||
|
plural={MEWSs},
|
||||||
|
description={\Gls{mews_full}},
|
||||||
|
first={\Gls{mews_full} (MEWS)},
|
||||||
|
}
|
||||||
|
\newglossaryentry{mews_full}{
|
||||||
|
name={Modified Early Warning Score},
|
||||||
|
description={
|
||||||
|
An adaptation of the \Gls{ews_full}, which provides a simplified scoring system based on fewer physiological parameters to predict medical deterioration.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{news2}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={NEWS2},
|
||||||
|
description={\Gls{news2_full}},
|
||||||
|
first={\Gls{news2_full} (NEWS2)},
|
||||||
|
}
|
||||||
|
\newglossaryentry{news2_full}{
|
||||||
|
name={National Early Warning Score 2},
|
||||||
|
description={
|
||||||
|
The second iteration of a standardized scoring system used in the UK to detect and respond to clinical deterioration in adult patients.
|
||||||
|
It builds upon and refines the original NEWS score.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{ews}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={EWS},
|
||||||
|
plural={EWSs},
|
||||||
|
description={\Gls{ews_full}},
|
||||||
|
first={\Gls{ews_full} (EWS)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{ews_full}{
|
||||||
|
name={Early Warning Score},
|
||||||
|
plural={Early Warning Scores},
|
||||||
|
description={
|
||||||
|
A clinical tool used to assess the severity and likelihood of patient deterioration by scoring multiple vital signs.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{deterioration}{
|
||||||
|
name={deterioration},
|
||||||
|
description={
|
||||||
|
A decline in a patient's health status marked by worsening of clinical signs and symptoms, often necessitating escalated medical intervention.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rpm}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={RPM},
|
||||||
|
description={\Gls{rpm_full}},
|
||||||
|
first={\Gls{rpm_full} (RPM)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rpm_full}{
|
||||||
|
name={remote patient monitoring},
|
||||||
|
description={
|
||||||
|
A technology to enable monitoring of patients outside of conventional clinical settings, such as in the home or in a remote area,
|
||||||
|
which may increase access to care and decrease healthcare delivery costs.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rwsm}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={RWSM},
|
||||||
|
description={\Gls{rwm_full}},
|
||||||
|
first={\Gls{rwm_full} (RWSM)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{rwm_full}{
|
||||||
|
name={Remote Warning Score Monitoring},
|
||||||
|
description={
|
||||||
|
An approach that integrates \gls{rpm} of mobile patients with the automated calculation of an \gls{ews}.
|
||||||
|
It enables real-time assessment of patient deterioration risk based on data gathered remotely.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{api}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={API},
|
||||||
|
description={\Gls{api_full}},
|
||||||
|
first={\Gls{api_full} (API)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{api_full}{
|
||||||
|
name={Application Programming Interface},
|
||||||
|
description={
|
||||||
|
A set of rules and protocols that allow different software entities to communicate with each other.
|
||||||
|
It defines the methods and data formats that applications can use to request and exchange information.
|
||||||
|
APIs are utilized to enable the integration between different systems and devices, streamlining their functionalities and expanding capabilities.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{pews}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={PEWS},
|
||||||
|
description={\Gls{pews_full}},
|
||||||
|
first={\Gls{pews_full} (PEWS)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{pews_full}{
|
||||||
|
name={Pediatric Early Warning Score},
|
||||||
|
description={
|
||||||
|
An early warning score used to identify early signs of \gls{deterioration} in pediatric patients.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{avpu}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={AVPU},
|
||||||
|
description={\Gls{avpu_full}},
|
||||||
|
first={\Gls{avpu_full} (AVPU)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{avpu_full}{
|
||||||
|
name={AVPU Score},
|
||||||
|
description={
|
||||||
|
A rapid assessment method to determine a patient's level of consciousness.
|
||||||
|
The AVPU scale is used to quickly identify potential neurological impairment or altered mental status in emergency settings.
|
||||||
|
The four possible findings are:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Alert}: Patient is fully alert and oriented.
|
||||||
|
\item \textbf{Voice}: Patient responds to verbal stimuli but is not fully alert.
|
||||||
|
\item \textbf{Pain}: Patient responds only to painful stimuli.
|
||||||
|
\item \textbf{Unresponsive}: Patient does not respond to any external stimuli.
|
||||||
|
\end{itemize}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
\newglossaryentry{ecg}{
|
||||||
|
type=\acronymtype,
|
||||||
|
name={ECG},
|
||||||
|
description={\Gls{ecg_full}},
|
||||||
|
first={\Gls{ecg_full} (ECG)}
|
||||||
|
}
|
||||||
|
\newglossaryentry{ecg_full}{
|
||||||
|
name={Electrocardiogram},
|
||||||
|
description={
|
||||||
|
A medical test that measures the electrical activity of the heartbeat to diagnose various heart conditions.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|