feat: add project skeleton
18
.gitignore
vendored
@ -1,3 +1,19 @@
|
||||
# Backend config file
|
||||
/config.py
|
||||
|
||||
# Local environments
|
||||
/.venv/
|
||||
/node_modules/
|
||||
|
||||
# Cache files and directories
|
||||
*.pyc
|
||||
__pycache__/
|
||||
/.parcel-cache/
|
||||
|
||||
# Bundled files
|
||||
/dist/
|
||||
|
||||
# Latex compiled files
|
||||
**/*.aux
|
||||
**/*.bbl
|
||||
**/*.bcf
|
||||
@ -6,4 +22,4 @@
|
||||
**/*.log
|
||||
**/*.out
|
||||
**/*.run.xml
|
||||
proposal/*.pdf
|
||||
docs/proposal/*.pdf
|
||||
|
7
.postcssrc
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"plugins": {
|
||||
"postcss-import": {},
|
||||
"tailwindcss/nesting": {},
|
||||
"tailwindcss": {},
|
||||
}
|
||||
}
|
@ -1,3 +1,7 @@
|
||||
# MEDWings
|
||||
|
||||
Mobile Early Deterioration Warning System.
|
||||
|
||||
# MEWS
|
||||
|
||||
The following vital signs need to be recorded for a MEWS calculation:
|
||||
@ -32,7 +36,3 @@ Access to vitals data is available through the [Withings API](https://developer.
|
||||
|
||||
A detailed [API integration guide](https://developer.withings.com/developer-guide/v3/integration-guide/public-health-data-api/public-health-data-api-overview/),
|
||||
as well as an [API reference guide](https://developer.withings.com/api-reference) are available online.
|
||||
|
||||
# Smart Home Lab
|
||||
|
||||
???
|
0
backend/__init__.py
Normal file
8
backend/main.py
Normal file
@ -0,0 +1,8 @@
|
||||
from fastapi import FastAPI, HTTPException
|
||||
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/hello/")
|
||||
async def hello() -> str:
|
||||
return "Hello World!"
|
38
development.Caddyfile
Normal file
@ -0,0 +1,38 @@
|
||||
:3000 {
|
||||
|
||||
encode zstd gzip
|
||||
|
||||
@staticfiles {
|
||||
method GET
|
||||
path /static/*
|
||||
}
|
||||
handle @staticfiles {
|
||||
file_server {
|
||||
root /app/public/
|
||||
}
|
||||
}
|
||||
|
||||
handle_path /api/* {
|
||||
reverse_proxy * backend:3001
|
||||
}
|
||||
|
||||
@robots {
|
||||
method GET
|
||||
path /robots.txt
|
||||
path /sitemap.xml
|
||||
}
|
||||
handle @robots {
|
||||
file_server {
|
||||
root /app/robots/
|
||||
}
|
||||
}
|
||||
|
||||
handle * {
|
||||
reverse_proxy * parcel:1234
|
||||
}
|
||||
|
||||
log {
|
||||
output stderr
|
||||
format console
|
||||
}
|
||||
}
|
25
development.backend.Dockerfile
Normal file
@ -0,0 +1,25 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM python:3
|
||||
|
||||
# Create non-root user
|
||||
ARG CUSTOM_UID
|
||||
ARG CUSTOM_GID
|
||||
ENV CUSTOM_USERNAME=backend
|
||||
ENV CUSTOM_GROUPNAME=backend
|
||||
RUN groupadd --gid ${CUSTOM_GID:-1000} ${CUSTOM_GROUPNAME} && \
|
||||
useradd --uid ${CUSTOM_UID:-1000} --gid ${CUSTOM_GID:-1000} --create-home --shell /bin/bash ${CUSTOM_USERNAME} && \
|
||||
mkdir /app && chown ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000} /app
|
||||
|
||||
# Copy source files
|
||||
WORKDIR /app
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} requirements.txt /app/
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} backend /app/backend/
|
||||
|
||||
# Install dependencies
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
# Run ASGI server
|
||||
EXPOSE 3001/tcp
|
||||
USER ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000}
|
||||
ENTRYPOINT ["uvicorn", "backend.main:app", "--root-path", "/api", "--host", "0.0.0.0", "--port", "3001", "--access-log", "--use-colors", "--log-level", "debug", "--reload"]
|
54
development.docker-compose.yml
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
frontend:
|
||||
container_name: frontend
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./development.frontend.Dockerfile
|
||||
args:
|
||||
CUSTOM_UID: 1000
|
||||
CUSTOM_GID: 1000
|
||||
environment:
|
||||
TZ: Europe/Berlin
|
||||
ports:
|
||||
- "8000:3000"
|
||||
volumes:
|
||||
- ./public/:/app/public/:ro
|
||||
- ./robots/:/app/robots/:ro
|
||||
- ./Caddyfile:/app/Caddyfile:ro
|
||||
parcel:
|
||||
container_name: parcel
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./development.parcel.Dockerfile
|
||||
args:
|
||||
CUSTOM_UID: 1000
|
||||
CUSTOM_GID: 1000
|
||||
volumes:
|
||||
- ./frontend/:/app/frontend/:ro
|
||||
- ./postcss.config.js:/app/postcss.config.js:ro
|
||||
- ./.postcssrc:/app/.postcssrc:ro
|
||||
- ./tailwind.config.js:/app/tailwind.config.js:ro
|
||||
expose:
|
||||
- "1234"
|
||||
backend:
|
||||
container_name: backend
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./development.backend.Dockerfile
|
||||
args:
|
||||
CUSTOM_UID: 1000
|
||||
CUSTOM_GID: 1000
|
||||
expose:
|
||||
- "3001"
|
||||
volumes:
|
||||
- ./backend/:/app/backend/:ro
|
||||
- ./requirements.txt:/app/requirements.txt:ro
|
||||
|
||||
...
|
33
development.frontend.Dockerfile
Normal file
@ -0,0 +1,33 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM debian:latest
|
||||
|
||||
# Install Caddy
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt update && apt install -y curl && \
|
||||
apt install -y debian-keyring debian-archive-keyring apt-transport-https && \
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && \
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list && \
|
||||
apt update && apt install -y caddy && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create non-root user
|
||||
ARG CUSTOM_UID
|
||||
ARG CUSTOM_GID
|
||||
ENV CUSTOM_USERNAME=webserver
|
||||
ENV CUSTOM_GROUPNAME=webserver
|
||||
RUN groupadd --gid ${CUSTOM_GID:-1000} ${CUSTOM_GROUPNAME} && \
|
||||
useradd --uid ${CUSTOM_UID:-1000} --gid ${CUSTOM_GID:-1000} --create-home --shell /bin/bash ${CUSTOM_USERNAME} && \
|
||||
mkdir /app && chown ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000} /app
|
||||
|
||||
# Copy source files
|
||||
WORKDIR /app
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} development.Caddyfile /app/
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} public /app/public/
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} robots /app/robots/
|
||||
|
||||
# Install dependencies
|
||||
USER ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000}
|
||||
|
||||
# Run Caddy in development mode
|
||||
ENTRYPOINT ["caddy", "run", "--config", "/app/development.Caddyfile", "--adapter", "caddyfile", "--watch"]
|
34
development.parcel.Dockerfile
Normal file
@ -0,0 +1,34 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
FROM debian:latest
|
||||
|
||||
# Install packages
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt update && apt install -y curl && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_19.x | bash - && apt-get install -y nodejs && \
|
||||
apt install -y debian-keyring debian-archive-keyring apt-transport-https && \
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && \
|
||||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list && \
|
||||
apt update && apt install -y caddy && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create non-root user
|
||||
ARG CUSTOM_UID
|
||||
ARG CUSTOM_GID
|
||||
ENV CUSTOM_USERNAME=webserver
|
||||
ENV CUSTOM_GROUPNAME=webserver
|
||||
RUN groupadd --gid ${CUSTOM_GID:-1000} ${CUSTOM_GROUPNAME} && \
|
||||
useradd --uid ${CUSTOM_UID:-1000} --gid ${CUSTOM_GID:-1000} --create-home --shell /bin/bash ${CUSTOM_USERNAME} && \
|
||||
mkdir /app && chown ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000} /app
|
||||
|
||||
# Copy source files
|
||||
WORKDIR /app
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} package.json package-lock.json .postcssrc postcss.config.js tailwind.config.js /app/
|
||||
COPY --chown=${CUSTOM_USERNAME}:${CUSTOM_GROUPNAME} frontend /app/frontend/
|
||||
|
||||
# Install dependencies
|
||||
USER ${CUSTOM_UID:-1000}:${CUSTOM_GID:-1000}
|
||||
RUN npm install
|
||||
|
||||
# Run the parcel file watcher
|
||||
ENTRYPOINT ["npx", "parcel", "frontend/src/html/index.html"]
|
1
docs/figures/.$gantt.drawio.bkp
Normal file
@ -0,0 +1 @@
|
||||
<mxfile host="Electron" modified="2023-05-10T10:31:45.622Z" 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="PHVfaFFo1ibX0lGajEse" version="20.7.4" type="device"><diagram name="Page-1" id="fc2ac565-0d4e-3f0d-88b0-a54af1634ed7">5ZrLctsgFIafxst2JKHrsnHStItu6s5kTSQs02ChQfjWpy+SkG8HTzKTBOGxFx5xkAB95wA/iAmaLrePAteLX7wgbBJ4xXaC7idBkIVI/beGXW+IorA3lIIWvck/GGb0H9FGT1tXtCDNyY2ScyZpfWrMeVWRXPY2/SwWgm9Ob5tzdlprjUsCDLMcs8H6NTrYn2ghF9rux9kh4weh5UJXngZJn/GM85dS8FWla6x4RfqcJR6K0S1tFrjgmyMTepigqeBc9lfL7ZSwluvAbHhO7oaGTtDdQi6ZSvjqssv+fuFh/y0Pq/cSpDoBeqm8RCNaY7baY1Ppe9LQsgKVYdZa0T0jc1X8XSMFfyFTzrjo8tG0+502ac4rOdNFBLB9+o3WREiyPTLp9j4SviRS7NQtOjcMNUEdlv6Q3hy5ONa2xZF397Gl46rcF30ApC40IzOv1AO8gp7XmjBeL9vXUjWouFHBThpJq/I6IMY2IcKgQy3En5UkpcCSchV5qp4YL2v17v1/OxCRmvFdz/gamKYWmWYwMMMuMLHE3RjLmBpjO7JXgC7wbKKD4Ri16L5VmO0a2hhjkapYFbUgEl8P1MAiVN+DARm3VJ8ElZJUXUwua8quiJ/NiSYA9P7g5gVw6sEM4uacgveaOHj/GGczpuIkz7wwDLDnZXMUZV+CNAOYkjbIfpM1JRtzz8XF31Uj21mkuY6wszk1Q8SZDxB/CLYPIBV7Z8Fo6KBp+EmkQoBlQ4jqoB6U6LY7KeBi6KSJtQBK0kukYCBZJ5U4RQqOZpoUGp1U8oaB3x4pwzJMkwpHJ5X6TpGCw7cmFY1PKnWKFJRcmlQ8OqkscooUukQqGZ2U7wVOobooE1IHUGVOoYLLcI0qGx/VXnC7gSq+hGqYe8ZkFSCnWCUXWY2v1H3klFRPL0p1f3yt7iOnxHoG5QJA5Mq62LCD8GnrYgMpKBecJWXYsrdJCqoFV0mZduhtkoJiwVlShmHKJimoFZwlZXP/zkAKKgVnSY08osONqqAArDYLKsmsxnmb3ghcn2I51Q/tOYY5ZeyIZfyckmfVhrtS4IIqeENedxpDy43+1Ikftjv82jc5ab/NmbyDUObnub3N58CWR5Dha1u0uTWPnK/8DZ0ERfZcAnfebq6TZOeS3aCvLHYSKNmTm/NI9rqOs7aIQh5cGqBb84jvxa8LRmTPJXANcnOdBOyMmpSpxV4CFzvhrU3uYAfWJIH33wXf6ROVPBzg7fKOTkijh/8=</diagram></mxfile>
|
1
docs/figures/.$gantt.drawio.dtmp
Normal file
@ -0,0 +1 @@
|
||||
<mxfile host="Electron" modified="2023-05-10T10:32:34.710Z" 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="COiyQg4zBvAdCB36jXXZ" version="20.7.4" type="device"><diagram name="Page-1" id="fc2ac565-0d4e-3f0d-88b0-a54af1634ed7">5ZrLctsgFIafxst2JKHrsnHStItu6s5kTSws0yChQfjWpy+SkG8HTzKTBOFxFo44SIC+c4AfxARNy+2jwPXyF88JmwRevp2g+0kQ+EEaqX+tZddbkkgbCkFzfdPBMKP/iDZ62rqiOWlObpScM0nrU+OcVxWZy96mn8VC8M3pbQvOTmutcUGAYTbHbLB+jQ72J5rLpbb7cXbI+EFosdSVp0HSZzzj+Ush+KrSNVa8In1OiYdidEubJc755siEHiZoKjiX/VW5nRLWgh2YDc/J3dDQCbpbypKphK8uu+zvFx723/Kwei9BqhOgl8pLNKI1Zqs9NpW+Jw0tKlAZZq0V3TOyUMXfNVLwFzLljIsuH027v9MmLXglZ7qIALZPv9GaCEm2Rybd3kfCSyLFTt2ic8NQE9Rh6Q/pzZGLY21bHnl3H1s6rop90QdA6kIzMvNKPcAr6HmtCeN12b6WqkHFjQp20khaFdcBMbYJEQYdaiH+rCQpBJaUq8hT9cS4rNW797/tQERqxnc942tgmlpkmsHADLvAxBJ3YyxjaoztyF4BusCziQ6GY9Si+1ZhtmtoY4xFqmJV1IJIfD1QA4tQfQ8GZNxSfRJUSlJ1MVnWlF0RP5sTTQDo/cHNC+DUgxnEzTkF7zVx8P4xzmZMxck888IwwJ6XLVCUfQnSDGBK2iD7TdaUbMw9F+d/V41sZ5HmOsLO5tQMEWc+QPwh2D6AVOydBaOhg6bhJ5EKAZYNIaqDelCi2+6kgIuhkybWAihJL5GCgWSdVOIUKTiaaVJodFLJGwZ+e6QMyzBNKhydVOo7RQoO35pUND6p1ClSUHJpUvHopLLIKVLoEqlkdFK+FziF6qJMSB1AlTmFCi7DNapsfFR7we0GqvgSqmHuGZNVgJxilVxkNb5S95FTUj29KNX98bW6j5wS6xmUCwCRK+tiww7Cp62LDaSgXHCWlGHL3iYpqBZcJWXaobdJCooFZ0kZhimbpKBWcJaUzf07AymoFJwlNfKIDjeqghyw2iypJLMaz9v0RuD6FMupfmjPMSwoY0cs4+eUPKs23BUC51TBG/K60xhabvSnTvyw3eHXvpmT9tucyTuthojv7G0+B7Y8ggxf26LNrXnkfOVv6CQosucSuPN2c50kO5fsBn1lsZNAyZ7cnEey13WctUUU8uDSAN2aR3wvfl0wInsugWuQm+skYGfUpEwt9hK42AlvbXIHO7AmCbz/LvhOn6jk4QBvl3d0RBo9/Ac=</diagram></mxfile>
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
1
docs/figures/gantt.drawio
Normal file
@ -0,0 +1 @@
|
||||
<mxfile host="Electron" modified="2023-05-10T10:32:30.891Z" 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="-VbW2lHYwfbZlyXhP3NS" version="20.7.4" type="device"><diagram name="Page-1" id="fc2ac565-0d4e-3f0d-88b0-a54af1634ed7">5ZrLctsgFIafxst2JKHrsnHStItu6s5kTSws0yChQfjWpy+SkG8HTzKTBOFxFo44SIC+c4AfxARNy+2jwPXyF88JmwRevp2g+0kQ+EEaqX+tZddbkkgbCkFzfdPBMKP/iDZ62rqiOWlObpScM0nrU+OcVxWZy96mn8VC8M3pbQvOTmutcUGAYTbHbLB+jQ72J5rLpbb7cXbI+EFosdSVp0HSZzzj+Ush+KrSNVa8In1OiYdidEubJc755siEHiZoKjiX/VW5nRLWgh2YDc/J3dDQCbpbypKphK8uu+zvFx723/Kwei9BqhOgl8pLNKI1Zqs9NpW+Jw0tKlAZZq0V3TOyUMXfNVLwFzLljIsuH027v9MmLXglZ7qIALZPv9GaCEm2Rybd3kfCSyLFTt2ic8NQE9Rh6Q/pzZGLY21bHnl3H1s6rop90QdA6kIzMvNKPcAr6HmtCeN12b6WqkHFjQp20khaFdcBMbYJEQYdaiH+rCQpBJaUq8hT9cS4rNW797/tQERqxnc942tgmlpkmsHADLvAxBJ3YyxjaoztyF4BusCziQ6GY9Si+1ZhtmtoY4xFqmJV1IJIfD1QA4tQfQ8GZNxSfRJUSlJ1MVnWlF0RP5sTTQDo/cHNC+DUgxnEzTkF7zVx8P4xzmZMxck888IwwJ6XLVCUfQnSDGBK2iD7TdaUbMw9F+d/V41sZ5HmOsLO5tQMEWc+QPwh2D6AVOydBaOhg6bhJ5EKAZYNIaqDelCi2+6kgIuhkybWAihJL5GCgWSdVOIUKTiaaVJodFLJGwZ+e6QMyzBNKhydVOo7RQoO35pUND6p1ClSUHJpUvHopLLIKVLoEqlkdFK+FziF6qJMSB1AlTmFCi7DNapsfFR7we0GqvgSqmHuGZNVgJxilVxkNb5S95FTUj29KNX98bW6j5wS6xmUCwCRK+tiww7Cp62LDaSgXHCWlGHL3iYpqBZcJWXaobdJCooFZ0kZhimbpKBWcJaUzf07AymoFJwlNfKIDjeqghyw2iypJLMaz9v0RuD6FMupfmjPMSwoY0cs4+eUPKs23BUC51TBG/K60xhabvSnTvyw3eHXvpmT9tucyTuthojv7G0+B7Y8ggxf26LNrXnkfOVv6CQosucSuPN2c50kO5fsBn1lsZNAyZ7cnEey13WctUUU8uDSAN2aR3wvfl0wInsugWuQm+skYGfUpEwt9hK42AlvbXIHO7AmCbz/LvhOn6jk4QBvl3d0RBo9/Ac=</diagram></mxfile>
|
BIN
docs/figures/gantt.png
Normal file
After Width: | Height: | Size: 267 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 657 B After Width: | Height: | Size: 657 B |
Before Width: | Height: | Size: 613 B After Width: | Height: | Size: 613 B |
Before Width: | Height: | Size: 398 B After Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 692 B |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
@ -74,7 +74,8 @@ The individual scores are then added together to produce the final MEWS.
|
||||
\end{table}
|
||||
|
||||
Traditionally, doctors and nursing staff perform collection and evaluation of the data manually, often inputting data into an EWS-calculator by hand.
|
||||
Low frequency of scoring, miscalculations and practical integration are known setbacks of NEWS2 and other scores\cite{eisenkraft_developing_2023}.
|
||||
However, as Eisenkraft et al. mentioned in 2023, ``some known setbacks of the NEWS and other scales are the frequency of scoring and
|
||||
response, integration into practice, a miscalculation by healthcare providers [...]''\cite{eisenkraft_developing_2023}{(p.2)}.
|
||||
|
||||
Remote patient monitoring (RPM) can improve deterioration detection\cite{shaik_remote_2023} by greatly reducing the
|
||||
amount of human interaction required to take measurements and perform EWS calculations.
|
||||
@ -95,8 +96,9 @@ specialized equipment and technical expertise.
|
||||
Furthermore, these systems are cumbersome for patients, as they involve connecting patient and sensor device with numerous electrodes
|
||||
and cables, restricting patient mobility to the bed area, and physically tying the monitoring equipment
|
||||
to a single location.
|
||||
In contrast, battery-powered, wireless vitals monitoring devices, such as wearable arm- or wristbands, can incorporate multiple biosensors in a single device in a
|
||||
smaller form-factor, and allow for a much higher degree of patient mobility, rapid deployment and scalability\cite{un_observational_2021}.
|
||||
Conversely, battery-powered, wireless vitals monitoring devices, such as wearable armbands or smartwatches, can combine several
|
||||
biometric sensors into one device, allowing for a much higher degree of patient mobility, faster deployment and better
|
||||
scalability\cite{un_observational_2021}.
|
||||
Therefore, utilizing such devices for RPM is a suitable approach.
|
||||
|
||||
While the application of EWS in ambulant care facilities and hospitals has been thoroughly investigated, very little research has been done to
|
||||
@ -183,7 +185,7 @@ the web application and its alert system prompts the patient periodically to tak
|
||||
|
||||
Following the technical implementation of the described system, its day-to-day usability and effectiveness will be evaluated in
|
||||
a case study.
|
||||
Over the course of two weeks, a test subject, representing a patient recently dismissed from an accident and emergency hospital department
|
||||
Over the course of a week, a test subject, representing a patient recently dismissed from an accident and emergency hospital department
|
||||
(A\&E) will be using the system both at home and while out and about.
|
||||
While awake, the patient will be prompted by the system via smartphone notifications to take new measurements every two hours.
|
||||
The captured data and resulting MEWS records will be periodically reviewed by another person representing medical staff during
|
@ -1,112 +0,0 @@
|
||||
<mxfile host="Electron" modified="2023-05-01T22:16:34.541Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="1Wzcjv7OB8KUVon0POAM" version="21.2.1" type="device">
|
||||
<diagram name="Page-1" id="fc2ac565-0d4e-3f0d-88b0-a54af1634ed7">
|
||||
<mxGraphModel dx="1710" dy="991" grid="1" gridSize="10" guides="1" tooltips="1" connect="0" arrows="1" fold="1" page="1" pageScale="1.5" pageWidth="1169" pageHeight="827" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" style=";html=1;" />
|
||||
<mxCell id="1" style=";html=1;" parent="0" />
|
||||
<mxCell id="75" value="1. Design" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="140" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="80" value="2. Development and testing" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="160" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="85" value="3. Integration &amp; deployment" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="180" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="90" value="4. Data collection" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="200" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="95" value="5. Analysis &amp; interpretation" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="220" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="100" value="6. Written compilation" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="240" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="2" value="Task" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="120" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-289" value="7. Reviews &amp; adjustments" style="align=left;strokeColor=#CCCCCC;html=1;fontStyle=2" parent="1" vertex="1">
|
||||
<mxGeometry x="440" y="260" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-291" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="140" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4" value="week 1" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-278" value="week 2" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="670" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-279" value="week 3" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="740" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-280" value="week 4" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="810" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-281" value="week 5" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="880" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-282" value="week 6" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-283" value="week 7" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1020" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-284" value="week 8" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1090" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-285" value="week 9" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1160" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-286" value="week 10" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1230" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-287" value="week 11" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1300" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-288" value="week 12" style="strokeWidth=1;fontStyle=0;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1370" y="120" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-292" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="160" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-293" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="180" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-294" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="200" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-295" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="220" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-296" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="240" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-297" value="" style="align=left;strokeColor=#CCCCCC;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="260" width="840" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-299" value="3 d" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="600" y="140" width="30" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-300" value="4 w" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="630" y="160" width="280" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-301" value="2d" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="910" y="180" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-302" value="2 w" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="930" y="200" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-303" value="2d" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="1070" y="220" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-304" value="7d" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="1090" y="240" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="67c90442a009f359-305" value="4w" style="whiteSpace=wrap;html=1;strokeWidth=2;fillColor=#6b8ebd;gradientColor=none;fontSize=14;align=center;strokeColor=#3391cc;" parent="1" vertex="1">
|
||||
<mxGeometry x="1160" y="260" width="280" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 27 KiB |