Amazon Web Services ブログ

Amazon Comprehend Medicalで、極秘ヘルスケアデータを識別し、それを扱い作業する

AWSで、私は定期的にAWSのお客様およびAWS パートナーネットワーク (APN) のパートナー様と、人間の健康の形を変えるためにどのように技術を使っていらっしゃるかについてお話します。これらの企業はしばしば人間健康管理および電子健康記録のような様々なアプリケーションで使用する大量の健康データを生成します。 開発者は保護健康情報 (PHI)のような極秘データに関するコンプライアンス義務に準拠しながら、これらのアプリケーションで価値のある医療情報を使用する方法を見つける必要があります。当社のお客様およびAPNパートナー様がこれを今日行っている一部のアプリケーションは、臨床決定サポート、収益循環管理、および臨床試験管理です。

データをマスクするために複数の方法があり、各組織が内部リスク査定にも続く独自のアプローチを有しています。当社はお客様が組織の特定の実装手順について、リスク査定専門家に相談されることを推奨します。一般的に、データは2つの手順でマスクされます。一つ目として、PHIが識別されなければなりません。その後、通常安全ルールまたは専門家の判断によって、データを匿名化する、または非識別するアルゴリズムが使用されます。このアプローチは一時的に自身に状態マシンを使用させ、お客様の組織が各手順で独立的に必要とする事業論理を適用し、状態間で情報を渡します。

このブログ投稿で、私はどのようにAmazon Comprehend MedicalAWS Step Functions, および Amazon DynamoDBの組み合わせを使用して、極秘健康データを識別し、お客様のコンプライアンス目標をサポートするお手伝いをするかを実証します。私はその後、お客様がしばしば採用するパターンであるアーキテクチャーの、見込まれる拡張のいくつかを論じます。

アーキテクチャ

このアーキテクチャは以下のサービスを使用します:

  • 文字列体内のエンティティを識別するためのAmazon Comprehend Medical
  • ワークフローを調整および実行するためのAWS Step FunctionsおよびAWS Lambda
  • 再識別されたマッピングを保存するAmazon DynamoDB

このアーキテクチャーおよび後続のコードはAWS CloudFormationテンプレートとして利用できます。

個別の構成要素

AWS上で構築された多くの近代的なアプリケーションのように、アーキテクチャー内の個別の構成要素はLambda関数として表されます。このブログ投稿で、私は3つのLambda関数を構築する方法をお見せします。

  • IdentifyPHI:Amazon Comprehend Medical APIを使用して、文字列体からカルテのようなPHIエンティティを検出および識別します。
  • MaskEntities:IdentifyPHIから入力としてエンティティを取り、文字列体でそれらをマスクします。
  • DeidentifyEntities: IdentifyPHIからエンティティを取り、各エンティティにハッシュを付け、そのマッピングをDynamoDBに保存します。

それぞれを通して順番に見てゆきましょう。

PHIを識別する

以下のコードはJSON体で読み込み、メッセージからPHIエンティティを抽出して、抽出されたエンティティのリストを返します。

from botocore.vendored import requests
import json
import boto3
import logging
import threading
comprehend = boto3.client(service_name='comprehendmedical')

def timeout(event, context):
    raise Exception('Execution is about to time out, exiting...')

def extract_entities_from_message(message):
    return client.detect_phi(Text=message)

def handler(event, context):
    #必要に応じて、Lambdaの本文中に加えて終了します
    timer = threading.Timer((context.get_remaining_time_in_millis() / 1000.00) - 1, timeout, args=[event, context])
    timer.start()
    print ('受信したメッセージペイロード.PIIを抽出します')
    try:
        #イベントからメッセージを抽出する
        message = event['body']['message']
        #メッセージからすべてのエンティティを抽出する
        entities_response = extract_entities_from_message(message)
        entity_list = entities_response['Entities']
        print ('PIIエンティティの抽出が完了しました')
        return entity_list
    except Exception as e:
        logging.error('Exception: %s.Unable to extract PII entities from message' % e)
        raise e

このLambda関数の役立つところは、Amazon Comprehend Medicalが識別するエンティティのリストを返すAmazon Comprehend Medical DetectPHI APIコールです。確信度がそれぞれの識別されたエンティティとともに表示されていることに注意してください。これらのスコアは識別されたエンティティの正確性の確定度を示します。お客さまにはこれらの確信度を考慮に入れ、識別されたエンティティ出力をレビューして正しいことを確認することをお勧めします。戻りデータ構造についての詳細はDetectPHI ドキュメンテーションをご覧ください。

エンティティをマスクする

メッセージをマスキングするには複数のアプローチがあります。この例では、私たちは各エンティティを取り、エンティティの長さに対応する一続きのパウンド記号 (#)に置き換えます。出力されるのはマスクされ、各エンティティで入力されたメッセージです。最も意味を持ち、お客様の事業に適合する方法をどちらでも選択できます。例えば、複数のNAME PHIエンティティがある場合、NAME1, NAME2などのように順番に並べることができます。

# Lambda 関数を作成する

from botocore.vendored import requests
import json
import boto3
import logging
import threading
import sys

def timeout(event, context):
  raise Exception('Execution is about to time out, exiting...')

def mask_entities_in_message(message, entity_list):
  for entity in entity_list:
      message = message.replace(entity['Text'], '#' * len(entity['Text']))
  return message

def handler(event, context):
  #必要に応じて、Lambdaの本文中に加えて終了します
  timer = threading.Timer((context.get_remaining_time_in_millis() / 1000.00) - 1, timeout, args=[event, context])
  timer.start()
  print ('受信したメッセージペイロード')
  try:
      #イベントからエンティティおよびメッセージを抽出する
      message = event['body']['message']
      entity_list = event['body']['entities']
      #エンティティをマスクする
      masked_message = mask_entities_in_message(message, entity_list)
      print (masked_message)
      return masked_message
  except Exception as e:
      logging.error('Exception: %s.メッセージからPIIエンティティを抽出できません' % e)
      raise e

エンティティを非識別する

非識別化を行うためには複数の方法があります。このブログ投稿で説明された例は、極秘エンティティを非識別することで、適切な許可を持つユーザーにより後で再識別できる、一つの方法を実証するという意味です。こちらで、複数の手順を踏みます:

  1. エンティティを塩漬けする。
  2. 各エンティティで、sha3-256ハッシュの塩漬けしたエンティティを生成します。 このエンティティを辞書に保存します。
  3. メッセージ中の各エンティティを手順1で生成されたハッシュに置き換えます。
  4. sha3-256ハッシュの非識別されたメッセージを生成します。
  5. そのエンティティをハッシュキーとしてのハッシュの付いたメッセージ、および範囲キーとしてのエンティティハッシュとともにDynamoDBに保存します。

こちらがこの手順のLambda関数です。DynamoDB諸表であるEntityMapは環境変数として読み込まれます:

from botocore.vendored import requests
import json
import boto3
import hashlib
import base64
import logging
import threading
import uuid
import os

ddb = boto3.client('dynamodb')

def timeout(event, context):
    raise Exception('Execution is about to time out, exiting...')
    
def store_deidentified_message(message, entity_map, ddb_table):
    hashed_message = hashlib.sha3_256(message.encode()).hexdigest()
    for entity_hash in entity_map:
        ddb.put_item(
            TableName=ddb_table,
            Item={
                'MessageHash': {
                    'S': hashed_message
                },
                'EntityHash': {
                    'S': entity_hash
                },
                'Entity': {
                    'S': entity_map[entity_hash]
                }
            }
        )
    return hashed_message
    
def deidentify_entities_in_message(message, entity_list):
    entity_map = dict()
    for entity in entity_list:
      salted_entity = entity['Text'] + str(uuid.uuid4())
      hashkey = hashlib.sha3_256(salted_entity.encode()).hexdigest()
      entity_map[hashkey] = entity['Text']
      message = message.replace(entity['Text'], hashkey)
    return message, entity_map
    
def handler(event, context):
    #必要に応じて、Lambdaの本文中に加えて終了します
    timer = threading.Timer((context.get_remaining_time_in_millis() / 1000.00) - 1, timeout, args=[event, context])
    timer.start()
    print ('受信したメッセージペイロード')
    try:
        #イベントからエンティティおよびメッセージを抽出する
        message = event['body']['message']
        entity_list = event['body']['entities']
        #エンティティをマスクする
        deidentified_message, entity_map = deidentify_entities_in_message(message, entity_list)
        hashed_message = store_deidentified_message(deidentified_message, entity_map, os.environ['EntityMap'])
        return {
            "deid_message": deidentified_message,
            "hashed_message": hashed_message
        }
    except Exception as e:
      logging.error('Exception: %s.メッセージからPIIエンティティを抽出できません' % e)
      raise e

Boto3 Lambdaレイヤーの構築

次に、Boto3を含むLambdaレイヤーを作成します。これはLambda関数を生産配置するときの共通の最善措置です。

以下のコードをターミナルにコピー&貼り付けします。boto3envをお好きなフォルダーに気軽に変更してください。以下の例はPython 3.6を使用します。

pip install boto3 --target python/.
 
#ボットコアをインストールします
pip install botocore --target python/.
 
#4つのレイヤーにジップします
zip boto3layer.zip -r python/

aws lambda publish-layer-version --layer-name boto3-layer --zip-file fileb://boto3layer.zip

出力のLayerVersionArnに注意してください。もうすぐこれを使用します。

状態マシンの構築

ユーザーの入力に基づいたフォーキングパスの間で渡されたデータのような、このワークフロー中の複数の手順は、状態マシンとして最もよく表されます。AWS Step Functionsを使用して状態マシンを定義し、個別のLambda関数を実行します。

状態マシンは処理待ちのメッセージ文字列を含むJSON BLOBで読み込み、またメッセージをマスクするか非識別するかも読み込みます。全体の手順は次の通りです:

  1. Amazon Comprehend Medical APIsを使用してPHIエンティティを識別します。
  2. エンティティをマスクするか非識別するかを判断します。
  3. 手順2の結果に基づき、それにより行動します。

こちらがこの状態マシンを定義するAmazon 状態言語 コードです:

{
  "Comment": "PHIを匿名化するまたは非識別する状態マシン",
  "StartAt": "Identify PHI",
  "States": {
    "Identify PHI": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:IdentifyPHILambda",
      "InputPath": "$",
      "ResultPath": "$.body.entities",
      "Next": "匿名化するまたは非識別する"
    },
    "Anonymize Or De-identify": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.body.anonymizeOrDeidentify",
          "StringEquals": "匿名化する",
          "Next": "匿名化する"
        },
        {
          "Variable": "$.body.anonymizeOrDeidentify",
          "StringEquals": "非識別する",
          "Next": "非識別する"
        }
      ],
      "Default": "匿名化する"
    },
    "Anonymize": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:MaskEntitiesLambda",
      "InputPath": "$",
      "ResultPath": "$.maskedMessage",
      "OutputPath": "$.maskedMessage",
      "End": true
    },
    "De-identify": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:DeidentifyLambda",
      "InputPath": "$",
      "ResultPath": "$.maskedMessage",
      "OutputPath": "$.maskedMessage",
      "End": true
    }
  }
} 

状態マシンのテスト

概要で言及した通り、AWS CloudFormationを使用して全体のアーキテクチャーを配置できます。CloudFormation テンプレートを起動してください :

以前Boto3LayerArn CloudFormationパラメータで見かけたLayerVersionArnの出力を使用します。

CloudFormationスタックの配置後は、以下のリソースがあるはずです:

  • 3つのLambda 関数
  • 再識別されたエンティティへのマッピングを含んだDynamoDB諸表
  • Step Functions 状態マシン
  • AWS Identity and Access Management (IAM)リソース

Amazon Comprehend Medicalチームにより提供された架空のカルテ、または複数のカルテを取りましょう。エンティティ識別のためのルールベースのアプローチにとって困難となる、タイピングミスが記入されていることに注意してください。

Stay Free Medical Center
救急救命室
臨床概要
12341 W. Bohannon Rd, Grantville, GA
電話: (770) 922-9800

個人情報
氏名: SALAZAR, CARLOS
カルテ番号: RQ36114734
救急救命室到着時刻: 2011年11月12日 18:15

性別: 男
生年月日: 1961年2月11日
年齢: 50歳
来診理由:フィブリノゲン、呼吸促迫 新規発病
治療程度: 2件の応急処置: 在宅/自己療養
住所: 186 VALETINE, NE 69201
電話: 402 213-2221

起点:
Carlosは救急車で息子のJorgeに付き添われ救急救命室に来ました。彼は急な動悸を発症した当時Food Corpに勤務していた50歳の男性です。Carlosは faterはDiegoであり、障害を通して動悸を起こしていることを明言しました。

職員の連絡時刻:2011年11月12日 19:00
入室の決定: 入室せず
救急救命室出発時刻:2011年11月23日 00:07

診断:甲状腺機能亢進症
出席職員:
Saanvi Sarkar, 医師

主任看護師:
Jackson; Mateo

完全新規処方箋
ネパフェナク (ネパフェナク 1 mg / 1mL 眼科懸濁液) 左目14 日間12時間毎に1 滴
ゾフラン (オンダンセトロン 4 mg 錠剤) 4 mg 必要に応じて服用
アトロピン硫酸塩 0.05 mcg / 硫酸ヒオスシアミン 3.1 mcg / フェノバルビタール 48.6 MG / スコポラミン臭化水素酸塩 0.0195 mg ( Donnata ER 内服用錠剤) 1 錠 必要に応じて内服
アセトアミノフェン – ヒドロコドン ( バイコジン 5 mg – 500 mg 服用錠剤 ) 痛み止めのため、6時間毎2 錠服用
ドクサートナトリウム100服用カプセル 便秘時1日2回、100 mg服用

アレルギー:
ペニシリン
イブプロフェン
ビーポーレン

患者教育および追跡情報
説明:
救急救命室、吐き気(習慣的)
追跡調査:

項目 :
住所:
時刻:

救急救命室へ戻る

コメント:

吐き気 嘔吐

抗吐き気薬物治療による制御なしでは吐き気が継続する 噴出嘔吐が制御不可、途切れのない吐き気および嘔吐 血液または「挽きコーヒー」のように見える原料が嘔吐物にある 嘔吐により薬が下に収まらない 吐き気および嘔吐とともにだるさやめまいが起こる 嘔吐の間の激しい胃痛

痛み
激しい胸/腕の痛み 胸の激しい締め付けまたは圧迫 激しい突然の頭痛
新規または制御できない痛み 新規の頭痛 胸の不快感 激しい動悸 心臓が急変する感覚 中央線部位または「トンネル」の部位に痛み 胸または胃の炎症 放尿中の痛みまたは炎症 薬物治療の注入物での痛みまたは中央線への流動体

下痢

絶え間のない、または制御できない下痢 新規発症の下痢 発熱および腹部痙攣を伴う下痢 便器に薬がそのまま落ちる 毎日5回以上 血の付いた、ワイン色または黒い便器 腹部痙攣

疲労
起きられない
めまい、疲労が悪化 ベッドから起きたり浴室まで歩くことができないほど疲れている 一日中ベッドに留まっている

発熱/寒け

体温は正常であっても身体が震える寒気 口内体温が38.3° C または 100.9° F以上 ステロイド24の症状の場合、発熱が通常より1度高い 寒さの症状(鼻水、涙目、くしゃみ、咳)

項目 :
住所:
時刻:

主要ケアワーカーとの追跡調査

コメント:

明日お電話いただき次の1~2日間のアポイントを取ってPCP追跡調査の手配を開始してください

Stay Free Medical Centerにご来診いただきありがとうございました。

コメント:

明日お電話いただき次の1~2日間のアポイントを取ってPCP追跡調査の手配を開始してください

Stay Free Medical Centerにご来診いただきありがとうございました。

状態マシンへは2つの数値を入力します。一つ目はカルテです。二つ目は、それを匿名化するか非識別するかの選択です。この例ではメッセージを非識別します。 これはこのように表示されます:

{
	"body": {
		"message": " Stay Free Medical Center \n救急救命室 \n臨床サマリ \n12341 W. Bohannon Rd, Grantville, GA\n電話: (770) 922-9800 \n\n\n個人情報\n氏名:  SALAZAR, CARLOS\nMRN:  RQ36114734 \n救急救命室到着時刻:  2011年11月12日 18:15\n \n性別:  男 \n生年月日:  1961年2月11日\n 年齢:   50 歳 \n来診理由:  フィブリノゲン、呼吸促迫 新規発病\n 治療程度: 2件の応急処置: 在宅/自己療養 \n住所:  186 VALETINE, NE 69201\n電話:  402 213-2221 \n \n起点:\nCarlosは救急車で息子のJorgeに付き添われ救急救命室に来ました。彼は急な動悸を発症した当時Food Corpに勤務していた50歳の男性です。Carlosは faterはDiegoであり、障害を通して動悸を起こしていることを明言しました。\n \n職員の連絡時刻:2011年11月12日 19:00\n 入室の決定: 入室せず\n 救急救命室出発時刻:2011年11月23日 00:07\n \n診断:甲状腺機能亢進症 \n 出席職員: \nSaanvi Sarkar, 医師\n \n 主任看護師: \nJackson; Mateo\n \n\n 完全新規処方箋:\nネパフェナク (ネパフェナク 1 mg / 1mL 眼科懸濁液) 左目14 日間12時間毎1 滴\nゾフラン (オンダンセトロン 4 mg 錠剤) 4 mg 必要に応じて服用\nアトロピン硫酸塩 0.05 mcg / 硫酸ヒオスシアミン 3.1 mcg / フェノバルビタール 48.6 MG / スコポラミン臭化水素酸塩 0.0195 mg ( Donnata ER 内服用錠剤) 1 錠 必要に応じて内服\nアセトアミノフェン – ヒドロコドン ( バイコジン 5 mg – 500 mg 服用錠剤 ) 痛み止めのため、6時間毎2 錠服用\nドクサートナトリウム100服用カプセル 便秘時1日2回、100 mg服用\n\n \nアレルギー:\n ペニシリン\n イブプロフェン\n ビーポーレン\n \n患者教育および追跡情報\n 説明:\n   救急救命室、吐き気(習慣的) \n 追跡調査:\n  \n \n住所:\n時刻:\n\n救急救命室へ戻る\n\n\n\nコメント:\n\n吐き気 嘔吐\n\n抗吐き気薬物治療による制御なしでは吐き気が継続する 噴出嘔吐が制御不可、途切れのない吐き気および嘔吐 血液または「挽きコーヒー」のように見える原料が嘔吐物にある 嘔吐により薬が下に収まらない 吐き気および嘔吐とともにだるさやめまいが起こる 嘔吐の間の激しい胃痛\n\n痛み \n激しい胸/腕の痛み 胸の激しい締め付けまたは圧迫 激しい突然の頭痛\n新規または制御できない痛み 新規の頭痛 胸の不快感 激しい動悸 心臓が急変する感覚 の中央線部位または「トンネル」の部位に痛み 胸または胃の炎症 放尿中の痛みまたは炎症 薬物治療の注入物での痛みまたは中央線への流動体\n\n\n下痢 \n\n絶えない、または制御できない下痢 新規発症の下痢 発熱および腹部痙攣を伴う下痢 便器に薬がそのまま落ちる 毎日5回以上 血の付いた、ワイン色または黒い便器 腹部痙攣\n\n疲労\n起きられない\nめまい、疲労が悪化 ベッドから起きたり浴室まで歩くことができないほど疲れている 一日中ベッドに留まっている\n\n発熱/寒け \n\n体温は正常であっても身体が震える寒気 口内体温が38.3° C または 100.9° F以上 ステロイド24の症状の場合、発熱が通常より1度高い 寒さの症状(鼻水、涙目、くしゃみ、咳) \n\n\n\n\n住所:\n時刻:\n\n主要ケアワーカーとの追跡調査\n\n\n\nコメント:\n\n明日お電話いただき次の1~2日間のアポイントを取ってPCP追跡調査の手配を開始してください\n\n\nStay Free Medical Centerにご来診いただきありがとうございました。\n \n",
		"anonymizeOrDeidentify": "非識別"
	}
}

AWS CloudFormationコンソールで、出力ページにナビゲートして状態マシンにAmazon リソースネーム (ARN)を記録して、状態マシン実行を発動するために後ほど使用します。

AWS CLI、お好みのAWS SDK、またはAWS Step Functionsコンソールを使用してテストできます。以下のコマンドはCLIを使用したときの様子を示します。しかし、以下のコマンドを入力する前に、前回のJSONをコピーしてexample_note.jsonに保存します。またAWS Step Functions状態マシンARNをCloudFormation出力のARNに置き換えます。

aws step-functions start-execution --state-machine-arn YOUR_STATEMACHINE_ARN --input file://example_note.json

全体の実行は数秒しかかかりません。AWS Step Functionsコンソールにナビゲートして何が起こったか見てみましょう。

前回のコマンドを実行すると、複数のことが起こります。

  1. Lambda関数がカルテ内の見込まれるPHIエンティティを識別しました。
  2. これらのエンティティは塩漬けされ、結果となる組み合わせはSHA3-256を使用してハッシュ付けされます。
  3. ハッシュはメッセージ中の元々のエンティティを置き換え、更新されたメッセージはその後ハッシュ付けされました。
  4. そのマッピングはDynamoDBに保存されました。
  5. そのハッシュ付けされたメッセージは実行の出力として返されます。

AWS Step Functionsコンソールでの手順から出力をご覧になれます。前回のメッセージは以下のように見えるはずです(読みやすくするためにフォーマットされています)。  非識別されたメッセージは依然使用可能な価値のある情報を含んでいますが、極秘データは前回のマスキングの例を用いてマスクされています。

8db49f8fdfc0a003402dd68439d2a848635d6c60a2719020c7b922916aafbdf0 
c027ee7d7992ea804c589c2c2777fc646e2f394d5db900177246f9d7bd8d762d 
臨床概要 
5d0276605f49fa2c8e010b9781cb348d9efca84dd7a49e0ce6fb845e156f3331
電話: 988c20b763f3b60b83aa64f48ce3184642dcf15707eeaead9d24c266e8967680 

個人情報
氏名:  ba1a8b9ba885c1b867b0fda332845d2c4435a921cdbf849a86b4e5768b00972395cbf6c9eda8afecd3a8a454a28774512f78cd9d03ae7f2670433bc0217379
MRN:  45dd4310f18cddb1f37c4e11b36b12e77fc64001229a2632333d1e0f379f5847 
2e0fbaa0c9008457c15f9306a9cd588ec09402f8db12194ec705b3f058e3eff6 到着時刻:  712caefd59fd2015172ef9cb560dad2852c652368a618d446b472958db6a288b 18:15
 
性別: 男 
生年月日:  88d76b85ad3e7cc2b1d06ea99a8a13df842fdd7ab0986ae3c747a3993944f91d
 年齢:   b9ba885c1b867b0fda332845d2c4435a921cdbf849a86b4e5768b00972395cbf 歳 
来診理由:フィブリノゲン、呼吸促迫 新規発病
 治療程度: 2件の応急処置: 在宅/自己療養 
住所:  aff3537058e53a9de01a4689cf1c3109584370e98ec31241a3ae4c07eceb0cbb
電話:  35cda8ec6c456bdf120843e0a1302f0aef1bab003a51353a02fe41e56baa92f03a465fe2bac1c23d18cacdb3576a84aa5c0aeee3fb8aafb61bd18a6970610d 
 
起点:
1093369cc39bcae926a41719947e202ba749ff91691777321dcec52d34eb9296 に来ました 2e0fbaa0c9008457c15f9306a9cd588ec09402f8db12194ec705b3f058e3eff6 息子に付き添われて救急車で、 abaefc3557e1c7577a16c658126d74cf8ae36857737c22eb587bc414bd926936.この方は b9ba885c1b867b0fda332845d2c4435a921cdbf849a86b4e5768b00972395cbf 歳 男性 急な動機を発症したときはf64136468ffae173d7eb43e4735e0bb9940d1718723dc0f42e0ffeb9053756cf に勤務していました。1093369cc39bcae926a41719947e202ba749ff91691777321dcec52d34eb9296 彼の父親は23f255a3e4ec38a0fd094f3d96f30cb1a4787f269913aa890fb3a68058bd44fb, であり、また障害に渡り動悸があったと明言しました。
 
職員連絡時間:  712caefd59fd2015172ef9cb560dad2852c652368a618d446b472958db6a288b 19:00
 入室の決定: 入室せず
 2e0fbaa0c9008457c15f9306a9cd588ec09402f8db12194ec705b3f058e3eff6 出発時刻:  c078acc1b42e5eda560ec66cbabcddc16fde9ba0758ef73f095a11b87cda87b5 00:07
 
診断:甲状腺機能亢進症 
 出席職員: 
9437ca325df16c59a18c57c52194cc344ea3a3e4155a9b8decb7caf453b93c10, 医師
 
 主任看護師: 
30ed768bd50007158ddd6ca6e71bc3e5d8bf411cb7597692c7aa729b53a13527

 完全新規処方箋
ネパフェナク (ネパフェナク 1 mg / 1mL 眼科懸濁液) 左目14 日間12時間毎に1 滴
ゾフラン (オンダンセトロン 4 mg 錠剤) 4 mg 必要に応じて服用
アトロピン硫酸塩 0.05 mcg / 硫酸ヒオスシアミン 3.1 mcg / フェノバルビタール 48.6 MG / スコポラミン臭化水素酸塩 0.0195 mg ( Donnata ER 内服用錠剤) 1 錠 必要に応じて内服
アセトアミノフェン - ヒドロコドン ( バイコジン 5 mg - b9ba885c1b867b0fda332845d2c4435a921cdbf849a86b4e5768b00972395cbf0 mg oral tablet )  痛み緩和の必要時6時間毎2 錠服用
ドクサートナトリウム100服用カプセル 便秘時1日2回、100 mg服用

アレルギー:
 ペニシリン
 イブプロフェン
 ビーポーレン
 
患者教育および追跡情報
 説明:
   2e0fbaa0c9008457c15f9306a9cd588ec09402f8db12194ec705b3f058e3eff6, 吐き気 (習慣的) 
 追跡調査:
  
 項目 :
住所:
時刻:

返還先 c027ee7d7992ea804c589c2c2777fc646e2f394d5db900177246f9d7bd8d762d

コメント:

吐き気 嘔吐

抗吐き気薬物治療による制御なしでは吐き気が継続する 噴出嘔吐が制御不可、途切れのない吐き気および嘔吐 血液または「挽きコーヒー」のように見える原料が嘔吐物にある 嘔吐により薬が下に収まらない 吐き気および嘔吐とともにだるさやめまいが起こる 嘔吐の間の激しい胃痛

痛み 
激しい胸/腕の痛み 胸の激しい締め付けまたは圧迫 激しい突然の頭痛
新規または制御できない痛み 新規の頭痛 胸の不快感 激しい動悸 心臓が急変する感覚 中央線部位または「トンネル」の部位に痛み 胸または胃の炎症 放尿中の痛みまたは炎症 薬物治療の注入物での痛みまたは中央線への流動体

下痢 

絶え間のない、または制御できない下痢 新規発症の下痢 発熱および腹部痙攣を伴う下痢 便器に薬がそのまま落ちる 毎日5回以上 血の付いた、ワイン色または黒い便器 腹部痙攣

疲労
起きられない
めまい、疲労が悪化 ベッドから起きたり浴室まで歩くことができないほど疲れている 一日中ベッドに留まっている

発熱/寒け 

体温は正常であっても身体が震える寒気 口内体温が38.3° C または 100.9° F以上 ステロイド24の症状の場合、発熱が通常より1度高い 寒さの症状(鼻水、涙目、くしゃみ、咳) 

項目 :
住所:
時刻:

主要ケアワーカーとの追跡調査

コメント:

明日お電話いただき次の1~2日間のアポイントを取ってPCP追跡調査の手配を開始してください

8db49f8fdfc0a003402dd68439d2a848635d6c60a2719020c7b922916aafbdf0にご来診いただきありがとうございました。

こちらは二つが同じメッセージを実行した後の諸表の様子です。

各エンティティが塩漬けされているため、DynamoDBマッピング諸表を使用せずにハッシュが元々のエンティティに戻るようなマッピングをすることができません。これは塩漬けにより異なるハッシュを持つ繰り返しのエンティティにより知ることができます。それに加え、IAMを使用してDynamoDBアクセスを管理できるため、諸表内の項目に誰がアクセスできるかをコントロールできます。その後AWS CloudTrailを使用して、極秘情報を含む諸表からの読み込みを監査できます。

結論と次のステップ

極秘データを保護することはヘルスケア組織にとっては常にジョブゼロです。このブログ投稿で、私はどのようにAmazon Comprehend Medicalを使用して作業を行い、保護された健康情報を識別するかを実証しました。組織は極秘データを保護するための異なるアプローチを持ちながら、同じアーキテクチャーパターンに従います:(1)極秘エンティティを識別する、および(2)お客様の組織により定義された極秘エンティティ用に適切な保護戦略を適用する。状態マシンはその二つの手順を組織するためにはお誂え向きです。

このアーキテクチャーをお客様のニーズに合わせるために行える追加の調整があります。こちらがいくつかのアイデアです:

  • 状態マシンを、個別のLambda関数へのゲートウェイと同様に、Amazon API Gatewayの後ろに置き、承認レイヤーを加えて文字列を処理します。
  • DetectPHIコールの確信度によりフィルターします。Amazon Comprehend Medical エンティティは文字列に加え、スコア フィールドがあります。お客様の事業要件によって、閾値を適用してコールをフィルターできます。
  • DetectPHIをDetectEntitiesと併せて使用し、PHIを検出して識別するのを助け、またダウンストリーム分析に使用できる非PHIエンティティ関係を抽出します。

Amazon Comprehend Medicalについてもっと知りたいですか?

HIMSSにいらっしゃいますか? HIMSS19のブース#5058でAWS ヘルスケアチームに会いましょう!

ご質問とコメントを歓迎いたします。ご連絡をお待ちしております。


著者について

Aaron Friedman 博士は、アマゾン ウェブ サービスのヘルスケア&ライフサイエンス分野のパートナーソリューションアーキテクトです。彼は ISV や SI で、AWS のヘルスケアソリューションをアーキテクトし、お客様に最高の体験を提供いたします。その情熱は、科学、ビッグデータ、ソフトウェアに注がれています。空き時間には、屋外で探索したり、新しい料理を学んだり、夫人と犬のマカロンと時間を過ごしています。