Git Product home page Git Product logo

remote-patient-monitoring-api's Introduction

遠隔患者モニタリングシステム

これは何?

自宅療養や宿泊療養中の患者にスマートフォン上で必要項目を入力してもらい、患者の健康状態の把握を保健所で行いやすくするためのシステムです。

背景情報については、BACKGROUND.mdもご覧ください。

手伝ってくださる方へ

本システムは現状無報酬での開発となっており、コントリビューターを募集しております。

Issues に手伝って欲しいタスクを記載していますのでご確認ください。 お手伝いいただける方は、必ずCONTRIBUTING.mdをご一読いただけますようよろしくおねがいします。

また、ボランティアベースで本番環境の運用を行うことは難しいため、ある程度まで開発が進んだ段階からは、運営能力のある法人が自治体等からの委託事業としてシステムの保守/運用を行う事を想定していますのでご了承ください。

Swagger UI

Swagger UI からステージング用のAPIを実行することができます。

まず、/api/admin/login から、指示された User/Password を使ってログインを行ってください。 成功すると、idToken が返却されます。

api login

ここで返却された idToken の値を、Authorize ボタンを押した先にあるWindowの APIGatewayAdminAuthorizer (apiKey) にセットすることで、APIをテストすることができます。

同様に、/api/admin/centers/{centerId}/nurses/ などで作成した Nurse や /api/admin/centers/{centerId}/patients/ で作成した Patient で Login 系のメソッドを叩くと帰ってくる idToken を使えば、別の Authorizer でログインセッションを貼ることができます。

開発環境について

DEVELOPMENT.mdをご確認ください。

システム概要

システム概要図

※本システムは赤字で囲んだ部分が対象

詳細については、システム仕様をご覧ください。

本リポジトリは、全体的なIssue管理及び、API サーバの開発のためのリポジトリとなります。

保健師用ダッシュボード については、remote-patient-monitoring-dashboardを、 患者用クライアント については、remote-patient-monitoring-clientをご覧ください。

これまでの歩み

日付 内容
2021/04/30 一旦の実装が完了し、北海道の保健所でテスト実施。概ね高評価を得る。今後に向けての調整中
2021/01/30 サーバのステージング用URLを作成。(APIの機能自体はまだ全ては終わっていない)
2020/12/30 ユースケース及びワイヤーフレームが8割方完成。開発に着手。リポジトリを3つに分ける
2020/12/26 本リポジトリを作成
2020/12/23 奥村先生とボランティアチームのミーティングを実施、ざっくりとしたシステム要件が固まる
2020/12/14 奥村先生の呼びかけに応じ、調査を開始

ライセンス

GNU AGPL v3 です。

CONTRIBUTORS

docs/CONTRIBUTORS.mdをご確認ください。

remote-patient-monitoring-api's People

Contributors

garasubo avatar halsk avatar kaizumaki avatar kenichisak avatar masagon avatar nekoyasan avatar shimpeiws avatar tkgshn avatar yoshi-taka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

remote-patient-monitoring-api's Issues

IdToken を受け取って、新規に Password を設定して RefreshToken を返すAPIを作る

SMSでログインURLを送った際、IdToken で認証をする仕組みは作れるが、それだと RefreshToken を返すことができない。
RefreshToken を返すためには、 Cognito の AdminInitiateAuth を実行して RefreshToken を取得、返却する必要がある。

/patient/initialize/ メソッドを作り、以下の処理を行う

  • Patient で認証
  • 渡された IdToken からユーザIDを取得
  • 新規にパスワードを生成/設定する(cognito.adminSetUserPasswordを実施)
  • 新規にセットしたユーザID/パスワードで、signIn を実施
  • 戻ってきた refreshToken, idToken を返却する

ESLint , Prettierを導入する

内容

  • ESLint, Prettierを導入することでTypeScriptのコーディング規約に沿ってかけるので何処かのタイミング(リファクタリングなど)で入れても良いかもしれません。

必要な作業

  • ESLint ,Prettierのインストール
  • Lintの設定
  • Lintエラーになる部分の対応
    • リファクタリングの規模と要相談

Patient ユーザの登録時に、ログイン用URLをSMSで送信するようにする

Patient ユーザを登録した際に、入力されたスマートフォンの番号に向けて、下記の文面のSMSを送信する

毎日の体調を入力いただく、遠隔療養者モニタリングシステムのログイン用URLです。
https://monitoring.stopcovid19.jp/login?idToken=${idToken}
このURLはあなた専用の入力画面です。他の人には転送しないようにしてください。

後にSMS送信用のAPIを使えるようにする予定だが、当面は AWS での送信で構わない

npm run deploy 実行時のテンプレート参照エラー

https://github.com/codeforjapan/remote-patient-monitoring-api/blob/8086899a00a8c8b343581331f909b465ac542083/docs/DEVELOPMENT.md#4-setup の手順にそって npm run deploy && npm run deploy:gateway を実行時に以下warning表示後にデプロイが失敗しました

Serverless Warning --------------------------------------

  A valid file to satisfy the declaration 'file(./templates/functions-aws.yml)' could not be found.

templates配下には functions-.ymlfunctions-true.yml は存在するが、 functions-aws.yml は存在しないためこのエラーになっていると思います。

デプロイプロセス全体の関連を把握できていないのですが、セットアップ時に /templates/functions-aws.yml の追加が必要でしょうか? あるいはデプロイ手順、serverless.ymlに何らか変更を加えるべきでしょうか?

/nurses/{nurseId} の結果に、保健所名が帰ってこない

curl -X GET "https://monitoring.stopcovid19.jp/stg/api/nurse/nurses/testNurse" -H "accept: application/json" -H "Authorization: ..."

{
  "manageCenters": [
    {
      "centerId": "79167710-2761-4cf4-8888-241e9f0c36b8"
    },
    {
      "centerId": "a8d3203d-9ca9-494b-9581-7e965cc96bbf"
    }
  ],
  "nurseId": "testNurse"
}

認証方法をどうするか

患者(モバイル)側、保健師側の両方で認証が必要そうです。

患者側

  • ふつうにID/Password方式でよいのか
    • 使いこなせるかどうかが割と心配…(紙に書いたIDとパスワードを渡す方式ならいける?)
  • IDはメールアドレスにするか、それとも何らかのIDにするか
    • なんとなく、保健所側で発行する方が確実な気もする。おそらく現状の保健所ではメールアドレスは管理してなさそうだし。
    • ちなみに保健所からメールを飛ばせる必要はある?
  • パスワードは再発行できるようにするか
    • 忘れたら電話してもらって、電話口で教えた方が早そうな気もする(特にメールアドレスを管理しない場合。まあSMSを使う方法もありますが)。基本的には2週間程度有効であればよいはずだし

保健師側

  • 複数人が見る場合、厳密に(保健師ごとに)ID・パスワード管理を行うべき?
    • その場合、保健所側の作業になるのか、システム管理者?側の作業になるのか
    • 個人情報保護規程みたいなものでauditのルールが決まっていたりする?(認証とはちょっとずれますが、いつ誰がどのデータを見たかが全てtrackingできないとNGなのか、ふつうにダッシュボード的に表示してるんだからログインした人=見てる人という前提が成り立たないので気にしなくてOKなのかが気になってます)

APIの実装をする

Issueとして立てました。

前回から進んだこと。

  • jest を使って、e2e テストを先に書くことにした。(まだ途中)
  • テスト用に、db の初期化や authentication 系のコードを追加した
  • sls offline で、lambda をローカル実行できるようにした(DEVELOPMENT.md を参照のこと)

e2e テストシナリオ

実装しようとしているテストシナリオは下記。ユニットテストはとりあえず後回し。--runInBand で逐次実行する。
テストケースが一通り書ければ、作業分担がしやすくなる。
リファクタリングもやりやすい。

  • truncate tables
  • anonymous で API を叩く。 /get/centers 等の一部のコマンド以外はエラーになることを確認
  • admin user でログインできることを確認
  • admin user の IdToken を Authorization ヘッダにセットして、下記を実行
    • center への get/post/put 操作
    • patient への get/post/put 操作
    • nurse の登録操作(Cognito でユーザを作る)
    • status の get/put 操作
  • 前段階のテストで作成した nurse アカウントでログインできることを確認
  • nurse user の IdToken を Authorization ヘッダにセットして、下記を実行
    • admin 系の操作ができないこと
    • patient の get/post/put 操作
    • status の get/put 操作
  • 前段階のテストで作成した patient アカウントでログインできることを確認
  • patient user の IdToken を Authorization ヘッダにセットして、下記を実行
    • admin/nurse 系の操作ができないこと
    • status の get/post/delete 操作
  • truncate tables

残作業(プライオリティ高い順)

  • テストシナリオの残りを書く(とりあえず期待する動作のみで中身は書かない)
  • ユーザ登録まわりの処理を書く(そうしないと nurse とかのコードが書けない)
  • 残りの処理を書く(現在は /admin/ の一部しか無い)
  • リファクタリング
  • ユニットテストを書く

何かおかしいところ

デプロイ後、lambda が実行できなくなるときがある。こちらの手順 で直る。

誰かに見て欲しいところ

serverless.yml の書き方が美しくない気がする。
特に、API Gateway の CLIENT_POOL を設定するために2回デプロイしているところ。更に、手動で deploy api しないとその情報が反映されないので不便。 #50 で解決。

deploy 時に staging を変えると src/webpack/config.json の設定がそれぞれの環境で上書きされてしまうので、療法が共存できるようにする

Config {
    region: string;
    cognito: {
        identityPoolId: string;
        adminUserPoolId?: string;
        adminUserPoolWebClientId: string;
        nurseUserPoolId: string;
        nurseUserPoolWebClientId: string;
        patientUserPoolId: string;
        patientUserPoolWebClientId: string;
        oauthDomain: string;
    };
    apiGateway: {
        restApiId: string;
        stageName: string;
    };
}
```
となっているので、配列で保存することができるようにする

/patients/{patientId}/statuses POST 実装

対象API

  • /api/admin/patients/{patientId}/statuses POST
  • /api/nurse/patients/{patientId}/statuses POST
  • /api/patient/patients/{patientId}/statuses POST

Lambda名

  • remote-Status-monitoring-postStatus-{Stage名}
  • remote-patient-monitoring-postStatus-${Stage名}
    • 他のLambdaの命名規則に合わせました。

作業項目

  • 作業前の質問・確認事項洗い出し
  • API実装
  • 動作確認 (E2E)

PR

deploy 時に、lambda の AWS KMS エラー が発生する

DEVELOPMENT.md に書きましたが、deploy 時にAPIがうまく動作しないケースがあります。

  • lambda function の KMS まわりがエラーになる
  • API Gateway から lambda を実行する権限がなくなる (解決済み)

という2つのエラーがありますが、原因が不明です。AWS に詳しい方、どなたか調査いただけると助かります🙏。

ワイヤーフレームを作る

モバイルアプリとウェブアプリの両方でワイヤーフレームが必要
Figma 等の、デザインを共有できるツールでの作成が望ましい

モバイルアプリ開発

ネイティブアプリの場合、COVID-19関連のものは審査が通りにくい。そもそも一般企業はアプリを出せないことが多い。
一般的な健康観察アプリとしてならいけるかもしれないが、時間がかかることが想定される。

パルスオキシメーターからのデータの自動入力アプリは一旦後回しにして、PWA アプリとして展開するのが良さそうに思う

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.