セキュア問診票 問診票の定義方法
問診票定義マニュアル
問診票は、ユーザー自身でご自由に定義していくつでも用意して運用することが可能です。 Emuyn LLC が用意しているいくつかのサンプルをコピーして適宜目的に沿う形に変更していただくのがよろしいかと思います。 以下に、記述方法を解説させていただきます。
問診票の名称
問診票の名称は、ユーザー様ごとに一意である必要があり、重複していると登録できません(上書き保存されます)。
問診票の内容
動作定義や装飾定義項目、質問内容を定義する Fields からなります。
動作定義や装飾定義項目
| 項目名 | 説明 | デフォルト | 注意事項 |
|---|---|---|---|
| title | タイトル | 問診票の表題 | |
| logo | ロゴ | 問診票画面に表示 base64 形式の png (もしくは jpg) 省略の場合は ご施設のロゴになります | |
| description | 内容説明 | html tag を使用でき配列要素が <br> で接続されます | |
| responsible_person | 責任者 | 配列 | |
| staffs | 担当者 | 配列 | |
| dept_in_charge | 責任部署 | ||
| contact | 問い合わせ先 | ||
| submit_button_title | 送信ボタンの表記 | ||
| message | メッセージ | 問診票ごとの 送信完了メッセージ。プロファイルで設定された 送信後メッセージ の代わりに表示されます。 | |
| mail_notification | 通知メール | false | 問診票への回答が送信されたら ユーザー名 (ログインID) のメールアドレス宛てに通知を送信します。 コンソールアプリのプロファイル画面からも設定できますが、個々の問診票の設定が優先されます。 |
| welcomemessage | 開始時メッセージ | 問診票ごと 開始時メッセージ。プロファイルで設定された 問診票の挨拶文 の代わりに表示されます。 | |
| disable_welcomemessage | 開始時メッセージの 表示を抑制 | false | 繰り返し 送信させる場合など、 開始時メッセージの表示が 煩わしい状況で true に設定します。 |
| disable_privacyitems | 患者情報の 取得を しない | false | 患者情報の取得をしない 特別な問診票において true に設定します。 |
| disable_privacyitem_requirement | 患者情報の 必須入力設定 を無効にする | false | 患者情報の取得を 必須としない 特別な問診票において true に設定します。 |
| translate | 自動翻訳設定 | 空白 | "all": 全言語, "major": 主要言語(後述), その他言語コード指定 |
| _comment | コメント | プレビューでは 別枠表示されるが、 問診表アプリでは 無視されます |
Fields: フィールド
質問項目の配列です。 記述した順に問診票に展開されます。 radio, checkbox による選択結果に応じて表示するかどうかを決めることができます。 すなわち、「発熱がある」と答えた方に対してのみ、「いつからですか」「最高何度でしたか」の追加質問をしたい時などに使えます。
Type: フィールドのタイプ
入力フィールドだけでなく、区切り表示もフィールドの一つとして設定します。
| type | 意味 | 内容 | 注意事項 |
|---|---|---|---|
| text | テキストボックス | 一行入力 | |
| textarea | テキストエリア | 複数行入力 | |
| radio | ラジオボタン | 一つを選択 | |
| checkbox | チェックボックス | 複数を選択 | |
| date | 日付 | ||
| time | 時刻 | ||
| scale | スケール | ||
| painscale | 痛みスケール | 0 ~ 10 | scale の派生。入力なければ -1 を返す |
| bodytemp | 体温 | 34.0 ~ 41.0 | scale の派生。入力なければ 0 を返す |
| bloodpressure | 血圧 | 40 ~ 240 | scale の派生。入力なければ 0-0 を返す |
| getphoto | 写真 | 3枚まで取得可能 | |
| figure | 図 | 編集可能な図 | src に画像データ (base64 フォーマット) またはファイル URL を指定svgsrcに svg ファイルの内容を直接記述2枚まで指定可能 |
| clipart | クリップアート | 編集不可の図 | src に画像データ (base64 フォーマット) またはファイル URL を指定svgsrcに svg ファイルの内容を直接記述 |
| note | 挿入文 | 文書 | description に表示したい内容を markdown にて記述します。 |
| embed | 資料埋め込み | Google ドキュメント, YouTube, その他 | 動画やスライドを参考資料として埋め込み表示します。 src にファイルの embed 用アドレスを 指定します。 Google ドキュメントの場合は、リンクを指定すれば自動変換します。 |
| signpad | 署名 | 手書き署名欄 | 通常は required に true を設定します。dispname には "署名"、 description には "回答したら署名をお願いします" などを設定します。 |
| section | 区切り | グループ分けするための区切り | |
| subsection | 小区切り | グループ分けするための小区切り。eval 項目の手前に表示なしの subsection を設置すると結果が見やすくなります。 | |
| separator | 区切り線 | 横線 | |
| eval | 式評価 | formula に評価式を指定記述方法は 式評価の記述 (formula) 項のとおりです。 | |
| warning | 論理式評価 | 警告対象検知用 | formula に結果が論理値 (true/false) となるような評価式を指定特殊項目であり、 true の場合は一覧表上で 黄色に表示されます。もし同時に指定された emergency が true の場合はそちらが優先されます。 |
| emergency | 論理式評価 | 警告対象検知用 | formula に結果が論理値 (true/false) となるような評価式を指定特殊項目であり、 true の場合は一覧表上で 赤色に表示されます。 |
- getphoto, figure では通信量が大きくなりすぎないよう、送信前にサイズの縮小処理をしています。
- figure の画像の指定は、
srcもしくはsvgsrcのいずれかにて指定します。svgsrcには、ベクタ形式の画像形式である svg ファイルの内容を直接記述できます。このとき、json で文法エラーを生じないために"は\"にエスケープして記述する必要があります。srcには、jpg, png, gif, svg ファイルを指定します。インターネット上に存在する画像であれば、その URL を以下のように指定します。ローカルの PC 内の jpg, png, gif 画像ファイルであれば base64 に変換して以下のように記載できます。変換にはツールを利用する必要がありますが、 https://lab.syncer.jp/Tool/Base64-encode/ など便利です。
フィールドの設定項目
各質問項目の表記や動作を指定するための設定項目です。
| 項目名 | 使用 フィールド | 意味 | 例 | 注意事項 |
|---|---|---|---|---|
| name | 項目名 | 症状 | 必須 | |
| required | 入力必須 | true | default は false です。 | |
| dispname | 項目名表記 | 症状 | ||
| type | 項目の種類 | text | 必須 各々の説明は下記 | |
| description | 説明 | 説明文になります or [ "説明文一行目", "説明文二行目" ] | 表示したい文字列を記述します。複数行にわたる場合は文字列の配列で指定します。Markdown の記法で記述できます。 | |
| parentname | 親となる項目 | 大分類 | radio, checkbox を指定 | |
| parentsel | フィールド が表示されるための 親の選択肢 | 分類2, "分類1|分類2" or [ "分類1", "分類2" ] | parentname において parentsel で指定した項目 が選択されてなければ、 フィールド自体が 非表示となる。 parentsel を複数指定する場合は | で接続するか、 配列で指定する。 | |
| src | figure, clipart, embed | 画像ソース, 参考資料 URL (embed) | "data:image... " svg ソース 画像ファイル URL | base64 形式の png/jpg/gif svg ソースコード 画像ファイルへのリンク (*1) Google ドキュメントや YouTube の埋め込み用 URL |
| style | clipart | 画像スタイル | "width: 30%" | <img> タグの style を指定 |
| inline | radio, checkbox | 行内表示指定 | true/false | デフォルトは false |
| selector | radio, checkbox | 選択枝 | "分類1|分類2|その他" or [ "分類1", "分類2", "その他" ] | 選択肢を | で接続したもの または、 選択肢の配列 |
| selectoridx | radio, checkbox | 選択枝インデックス | "1|2" | 選択肢インデックスを | で接続したもの。selectoridx を指定しない場合は、 "0|1| ..." が暗黙下に設定される。 |
| rows | textarea | 枠の行数 | 5 | textarea の高さ |
| prefix | text | 前置語 | 約 | |
| postfix | text, extarea | 後置語 | kg | |
| inputmode | scale | 入力モード | numeric で数値 | text, tel, url, email, numeric, decimal のいずれか |
| min | scale | 最小値 | 0 | |
| max | scale | 最大値 | 100 | |
| starttag | scale | 最小表記 | 最小 | |
| endtag | scale | 最大表記 | 最大 | |
| value | scale | 値 | -1 | 一般的には、取り得ない値を 設定しておくのが安全 |
| step | scale | ステップ | 1 | |
| disprange | scale | 範囲の表示 | true/false | true にする場合には min/max を必ず指定してください |
| unit | scale | 単位 | ||
| format | date, time | 日付表示/入力フォーマット | YYYY/MM/DD, YYYY, HH:mm | |
| format | text | 複数の入力項目を 持たせる場合に使用 | 喫煙 %d 本 x %d 年間, 発症 およそ %d %l(時間|日|週|月|年)前 | %s: 文字列、%d: 数値、%l(リスト1|2|3)、%r(ラジオボタン1|2|3) で指定する。 選択枝に半角の()は使えません。 |
| formula | eval | eval, waring, emergency での 評価式 | {{体重}}/{{身長}}* {{身長}} | セキュリティのため、複文と代入はできません。 3項演算子は利用可能。 |
| noreport | eval | eval の結果を 回答内容に表示するかどうか | true | true で非表示。 中間変数などで表示が必要ないものに設定します。 default は false |
| instanttext | textarea | テキストエリアに インスタント入力 できる文字列 | [ "文1", "文2", "文3" ] | 数が多いと スマホの場合は 画面が見づらくなるので 注意してください |
式評価の記述 (formula)
| 表記 | 意味 | 値が得られない場合 |
|---|---|---|
%%フィールド名%% | 値 (無変換) | 空白文字列 "" を返します。 |
{{フィールド名}} | 文字列値 | 空白文字列 "" を返します。 |
[[フィールド名]] | 整数値 | 整数 0 を返します。 |
((フィールド名)) | 浮動小数点値 | 浮動小数 0.0 を返します。 |
ここで、単一選択肢フィールド (radio) に対して フィールド名 ではなく フィールド名.index と記載した場合、
選択された選択肢の番号 (selectoridx があればそこで設定された値、なければ 0 から始まる整数値) が値として得られますので、
順序や重みづけのある選択項目の場合に有用です。
すなわち、例えば、"痛み" フィールドの selector が "痛くない|少し痛い|痛い" である場合に "少し痛い" が選択されたとき、
{{痛み}}は "少し痛い" を返し、{{痛み.index}}はselectoridxが "A|B|C" であれば文字列の "B" を返し、selectoridxがなければ文字列の "1" を返します。[[痛み.index]]はselectoridxが "A|B|C" であれば整数の 0 を返し ("B" は数値でないので 0 と解釈される)、selectoridxがなければ整数の 1 を返します。
フィールド名.index はしばしば warning や emegency にて警告表示を設定する場合に利用できます。
例えば、selectoridx がない場合の上の例では、
warning の formula を [[痛み.index]] > 0 とし、
emegency の formula を [[0痛み.index]] > 1 とすることで、
痛みが少しでもあれば warning、痛みがはっきりあれば emergency として扱うことができるようになります。
回答内容の一覧表の画面において、warning は黄色、emergency は赤色で表示されるのですぐに気付くことができます。
なお、formula では標準の javascript 関数が使えます。 さらに、下表の組み込み関数が使えます。
| 組み込み関数 | 返値 | 引数 |
|---|---|---|
| average(...args) | args (個数は自由) の平均値 | 空白や数値ではない値は無視します。例:average("1", 2.0, "x") = 1.5{{フィールド名}} や {{フィールド名.index}} の形式で渡す場合が多いです。 |
| sum(...args) | args (個数は自由) の合計 | 空白や数値ではない値は無視します。例:sum("1", 2.0, "x") = 3.0{{フィールド名}} や {{フィールド名.index}} の形式で渡す場合が多いです。 |
| yearsSince(from, to) | from から to (省略の場合現在) までの年数 | date フィールド値 もしくは 文字列 (YYYY-MM-DD 形式) |
| monthsSince(from, to) | from から to (省略の場合現在) までの月数 | date フィールド値 もしくは 文字列 (YYYY-MM-DD 形式) |
| weeksSince(from, to) | from から to (省略の場合現在) までの週数 | date フィールド値 もしくは 文字列 (YYYY-MM-DD 形式) |
| daysSince(from, to) | from から to (省略の場合現在) までの日数 | date フィールド値 もしくは 文字列 (YYYY-MM-DD 形式) |
例えば、daysSince({{発症日}}) 発症日からの経過日数を表します。
日付表示/入力フォーマット (format)
| 指定文字 | 取得対象 |
|---|---|
| YYYY | 年 |
| MM | 月 |
| DD | 日 |
| HH | 時(24 時間表記) |
| hh | 時(12 時間表記) |
| mm | 分 |
| ss | 秒 |
資料埋め込み (embed)
問診票の内部に、参考資料として Google ドキュメントや、YouTube 動画を表示することができます。
Google ドキュメント を埋め込む場合
埋め込みたい Google ドキュメント を開き、右上の「共有」ボタンを押してください。
回答者からファイルが見えるようにするために、「リンクを知っている全員に変更」に設定を変更してください。
「リンクをコピー」を押しますと、そのファイルのリンクがクリップボードにコピーされます。
問診票定義は以下のように記述し、リンクを src の部分に貼り付けます。
height は横長の資料ですと通常 60% 程度が適当ですが、適宜調整してください。
"fields": [
...
{
"description": "この資料をご覧になってから、下の質問にお答えください。",
"dispname": "スライド",
"height": "60%",
"name": "スライド",
"src": "https://docs.google.com/presentation/d/1AxojlYB8597i07oBezHdylwjPl0DkI1P22Qlkje1eSA/edit?usp=sharing",
"type": "embed"
},
...
]
この例のようなスライドの他、表計算シート・ワード文書・動画・静止画などを埋め込むことも可能です (ファイルサイズなどの制約により表示できない場合もあります)。
YouTube 動画を埋め込む場合
YouTube の再生画面上で右クリックして「埋め込みコードをコピー」すると、
次のようなコードがクリップボードにコピーされます。
<iframe
width="1280"
height="720"
src="https://www.youtube.com/embed/M7lc1UVf-VE"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
>
</iframe>
その src の部分を使用して、問診票定義に以下のように記述します。 height は横長の資料ですと通常 60% 程度が適当ですが、適宜調整してください。
"fields": [
...
{
"description": "この資料をご覧になってから、下の質問にお答えください。",
"dispname": "YouTube 動画",
"height": "60%",
"name": "Youtube",
"src": "https://www.youtube.com/embed/M7lc1UVf-VE",
"type": "embed"
},
...
]
SlideShare スライドを埋め込む場合
スライド表示画面のスライド右下の Share ボタンを押すと、Embed のコードが取得できます。
<iframe src="//www.slideshare.net/slideshow/embed_code/key/17X5LCb4Pgydjo" ...> </iframe>
その src の部分を使用して、問診票定義に以下のように記述します。
"fields": [
...
{
"description": "この資料をご覧になってから、下の質問にお答えください。",
"dispname": "SlideShare スライド",
"height": "60%",
"name": "SlideShare",
"src": "https://www.slideshare.net/slideshow/embed_code/key/17X5LCb4Pgydjo",
"type": "embed"
},
...
]
自動翻訳機能
「セキュア問診票」では、問診票ごとに自動翻訳による言語設定が可能です。 2021/10 現在、世界 108 言語に対応しています。 日本語の問診票を用意するだけで、外国人受診者に対応することができます。 外国語で入力された内容は、日本語に自動翻訳した結果とともに送信されます。
動作定義の "translate" を設定することで、自動翻訳により問診票を外国語対応とすることができます。 2021/10 現在サポートしている言語コードは以下の通りです。
言語コードの部分に
- "all" を指定すると、全ての言語が対象となります。
- "major" を指定すると、主要言語である Chinese (中国語), English (英語), French (フランス語), German (ドイツ語), Korean (韓国語), Portuguese (ポルトガル語), Russian (ロシア語) が対象となります。
- 言語コードを "," で接続することで、複数の言語を指定できます。
- "da,nl": デンマーク語とオランダ語
- "major,ne": 上記主要言語 + ネパール語
| 言語コード | 言語名 | 言語名(日本語) | 言語名(原語) |
|---|---|---|---|
| af | Afrikaans | アフリカーンス語 | Afrikaans |
| sq | Albanian | アルバニア語 | Shqiptare |
| am | Amharic | アムハラ語 | አማርኛ |
| ar | Arabic letters | アラビア文字 | حروف عربية |
| hy | Armenian | アルメニア語 | հայերեն |
| az | Azerbaijani | アゼルバイジャン語 | Azərbaycanca |
| eu | Basque | バスク語 | Euskara |
| be | Belarusian | ベラルーシ語 | Беларуская |
| bn | Bengali letters | ベンガル文字 | বাংলা অক্ষর |
| bs | Bosnian | ボスニア語 | Bosanski |
| bg | Bulgarian | ブルガリア語 | български |
| ca | Catalan | カタロニア語 | Català |
| ceb | Cebu | セブ語 | Cebu |
| zh | Chinese | 中国語 | 中國 |
| zh-CN | Chinese (Simplified) | 中国語(簡体) | 简体中文 |
| zh-TW | Chinese (traditional) | 中国語(繁体) | 中國(傳統的) |
| co | Corsican | コルシカ語 | Corsu |
| hr | Croatian | クロアチア語 | Hrvatski |
| cs | Czech language | チェコ語 | Český jazyk |
| da | Danish | デンマーク語 | dansk |
| nl | Dutch | オランダ語 | Nederlands |
| en | English | 英語 | English |
| eo | Esperanto | エスペラント語 | Esperanto |
| et | Estonian | エストニア語 | Eestlane |
| fi | Finnish | フィンランド語 | Suomalainen |
| fr | French | フランス語 | français |
| fy | Frisian | フリジア語 | Frysk |
| gl | Galician | ガリシア語 | Galego |
| ka | Georgian | グルジア語 | ქართული |
| de | German | ドイツ語 | Deutsch |
| el | Greek language | ギリシャ語 | ελληνική γλώσσα |
| gu | Gujarati | グジャラト語 | ગુજરાતી |
| ht | Creole (Haiti) | クレオール語(ハイチ) | Kreyòl (Ayiti) |
| ha | Hausa | ハウサ語 | Hausa |
| haw | Hawaiian | ハワイ語 | Ōlelo Hawaiʻi |
| he | Hebrew | ヘブライ語 | עִברִית |
| hi | Hindi | ヒンディー語 | हिंदी |
| hmn | Mon language | モン語 | Lus Mev |
| hu | Hungarian | ハンガリー語 | Magyar |
| is | Icelandic | アイスランド語 | Íslensku |
| ig | Igbo | イボ語 | Igbo |
| id | Indonesian | インドネシア語 | bahasa Indonesia |
| ga | Irish | アイルランド語 | Gaeilge |
| it | Italian | イタリア語 | italiano |
| ja | Japanese | 日本語 | 日本語 |
| jv | Javanese | ジャワ語 | Wong jawa |
| kn | Kannada | カンナダ語 | ಕನ್ನಡ |
| kk | Kazakh | カザフ語 | Қазақша |
| km | Khmer | クメール語 | ខ្មែរ |
| rw | Kinyarwanda | キニヤルワンダ語 | Kinyarwanda |
| ko | Korean | 韓国語 | 한국 |
| ku | Kurdish | クルド語 | Kurdî |
| ky | Kyrgyz | キルギス語 | Кыргызча |
| lo | Lao | ラオ語 | ພາສາລາວ |
| lv | Latvian | ラトビア語 | Latvietis |
| lt | Lithuanian | リトアニア語 | Lietuvių |
| lb | Luxembourgish | ルクセンブルク語 | Lëtzebuergesch |
| mk | Macedonian | マケドニア語 | Македонски |
| mg | Malagasi | マラガシ語 | Malagasi |
| ms | Malay | マレー語 | Bahasa Melayu |
| ml | Malayalam script | マラヤーラム文字 | മലയാളം ലിപി |
| mt | Maltese | マルタ語 | Malti |
| mi | Maori | マオリ語 | Maori |
| mr | Marathi | マラーティー語 | मराठी |
| mn | Mongolian | モンゴル語 | Монгол |
| my | Myanmar (Burmese) | ミャンマー語(ビルマ語) | မြန်မာ (ဗမာ) |
| ne | Nepali | ネパール語 | नेपाली |
| no | Norwegian | ノルウェー語 | norsk |
| ny | Nyanja (Chewa) | ニャンジャ語(チェワ語) | Nyanja (Chewa) |
| or | Odia | オリヤ語 | ଓଡିଆ |
| ps | Pashto | パシュト語 | پښتو |
| fa | Persian | ペルシャ語 | فارسی |
| pl | Polish language | ポーランド語 | Język polski |
| pt | Portuguese | ポルトガル語 | português |
| pt-PT | Portuguese (Portugal) | ポルトガル語(ポルトガル) | Portugues (portugal) |
| pt-BR | Portuguese (Brazil) | ポルトガル語(ブラジル) | Portugues (brasil) |
| pa | Punjabi | パンジャブ語 | ਪੰਜਾਬੀ |
| ro | Romanian | ルーマニア語 | Română |
| ru | Russian | ロシア語 | русский |
| sm | Samoan | サモア語 | Faasamoa |
| gd | Scottish Gaelic | スコットランド ゲール語 | Gàidhlig na h-Alba |
| sr | Serbian | セルビア語 | Српски |
| st | Sesotho | セソト語 | Sesotho |
| sn | Shona | ショナ語 | Shona |
| sd | Sindhi | シンド語 | سنڌي |
| si | Sinhala | シンハラ語 | සිංහල |
| sk | Slovak | スロバキア語 | Slovenský |
| sl | Slovenian | スロベニア語 | Slovenščina |
| so | Somali | ソマリ語 | Soomaali |
| es | Spanish | スペイン語 | Español |
| su | Sundanese | スンダ語 | Sundanis |
| sw | Swahili | スワヒリ語 | Kiswahili |
| sv | Swedish | スウェーデン語 | svenska |
| tl | Tagalog (Filipino) | タガログ語(フィリピン語) | Tagalog (Filipino) |
| tg | Tajik | タジク語 | Тоҷикӣ |
| ta | Tamil | タミル語 | தமிழ் |
| tt | Tatar | タタール語 | Татар |
| te | Telugu | テルグ語 | తెలుగు |
| th | Thai | タイ語 | ไทย |
| tr | Turkish language | トルコ語 | Türk Dili |
| tk | Turkmen | トルクメン語 | Türkmenler |
| uk | Ukrainian | ウクライナ語 | Українська |
| ur | Urdu | ウルドゥー語 | اردو |
| ug | Uyghur | ウイグル語 | ئۇيغۇر |
| uz | Uzbek | ウズベク語 | O'zbek |
| vi | Vietnamese | ベトナム語 | Tiếng Việt |
| cy | Welsh | ウェールズ語 | Cymraeg |
| xh | Xhosa | コーサ語 | isiXhosa |
| yi | Yiddish | イディッシュ語 | יידיש |
| yo | Yoruba | ヨルバ語 | Yoruba |
| zu | Zulu | ズールー語 | Zulu |
よくある質問
- 患者氏名や住所などのフィールドを設定せず、個人情報を入力させない問診票においてはどうやって回答者を特定するのですか?
- 回答時に、端末画面に6桁の「回答番号」が表示されます。これを回答者にメモしておいていただくことで特定が可能です。
- 回答者が入力した個人情報は、本システムの管理会社である Emuyn LLC はどのように管理するのでしょうか?
- 本システムでは、入力内容は高度に暗号化され、その解読用パスコードは各利用者様の PC の内部に保管されています。そのため、Emuyn LLC は、その内容を読みだすことはできません。暗号化されたデータは、Google のセキュアなサーバーに保管されます。
- 回答者の個人情報をマーケティングにに利用する業者が多い中、Emuyn LLC はそもそも個人情報を保持しないという立場を貫きます。
- 回答ページを分ける機能はないのですか?
- 本システムでは、問診票はすべて単一ページに表示され、スクロールしながら入力する形式となります。そうしている理由は、回答する立場で考えると質問の全体像が把握しやすく安心感につながるためです。
- よくあるのが、延々と続くページにいつまで入力させられるのか不安になったり、最後のページに「入力したくない必須項目」が現れて回答者の不満につながることですが、これらを回避できます。
- radio/checkbox の結果による表示制御の深さは何段まで可能ですか?
- 制限はありません。