電子カルテ情報共有 導入記

 

診療情報提供書XMLサンプルソフト (試行版)



前ページで 使った 診療情報提供書のサンプルJSONをもとに我々の実情に合わせたものに書き換えたら。実診療で使えるFHIR文書ができるのではないかという考えのもとに Filemakerで試作品をつくってみました。実際にこのやりかたでいいのか 分かりません。


  1. 1.サンプルプログラムを任意の場所にdownloadしてください。「JSON_FHIR_sample」Folerのなかには「JSON_FHIR_sampleB.fmp12」と「JSON_FireFox」と「TEST_req」Folderが入っています。「 JSON_FHIR_sample」Folerは どこにおいてもいいのですが, なかの 3アイテムはそのまま動かさないでください。

  2. 2.JSON_FHIR_sampleB.fmp12 を起動してください。「ゲスト」でLoginしてください。 拡張アクセス権(fmuriscript)を許可していますので, 環境によっては, 何かmessageがでるかもしれません。

  3. 3.通常使っているネットブラウザーも起動してください。起動されていないと「閲覧」がうまく作動しないことがあります。


ひながたJSONは 日本医療情報学会のHPに掲載されている,

https://jpfhir.jp/fhir/clins/output/Bundle-Bundle-CLINS-Referral-NoEntry-Example-01.json.html

『Bundle-Bundle-CLINS-Referral-NoEntry-Example-01』をひながたとして使わせていただきます。 その中の 固有名詞, 電話番号, etc 病歴等の単語, テキストを 被置換語として組み込んで, 最後に 実際のテキストに置き換えて 診療情報提供書JSONを完成させます。 被置換語はJSONのテキストとかぶらないように決定します。


["RAN_DOM";$ran ];  //乱数


["CLIN_NUM_ME"; XMLJ::G040_自己医療機関番号];

["DOC_ME"; XMLJ::G070_自己_医師 ];

["CLIN_NAME_ME"; XMLJ::G050_自己医療機関_名 ];

["POST_ME"; XMLJ::G058_自己_〒番号];

["ADDRESS_ME"; XMLJ::G060_自己医療機関住所];

["STATE_ME"; XMLJ::G062_自己_都道府県];

["STATE_NUM_ME"; XMLJ::G064_自己_都道府県番号];

["PHONE_ME"; XMLJ::G076_自己_TEL];

["PROF_ME"; XMLJ::G072_自己_診療科];

["PROF_NUM_ME"; XMLJ::G074_自己_診療科番号];


["CLIN_NUM_YOU"; XMLJ::H040_紹介先_医療機関番号];

["DOC_YOU"; XMLJ::H070_紹介先_医師 ];

["CLIN_NAME_YOU"; XMLJ::H050_紹介先_医療機関_名 ];

["POST_YOU"; XMLJ::H058_紹介先_〒番号];

["ADDRESS_YOU"; XMLJ::H060_紹介先_住所];

["STATE_YOU"; XMLJ::H062_紹介先_都道府県];

["STATE_NUM_YOU"; XMLJ::H064_紹介先_都道府県番号];

["PHONE_YOU"; XMLJ::H076_紹介先_TEL];

["PROF_YOU"; XMLJ::H072_紹介先_診療科];

["PROF_NUM_YOU"; XMLJ::H074_紹介先_診療科番号];


["PT_HOKEN_INFO"; $hoken ];

["PT_SEI_KJ";XMLJ::P500_受診者_姓];

["PT_MEI_KJ";XMLJ::P501_受診者_名];

["PT_SEI_KN";XMLJ::P502_受診者_セイ];

["PT_MEI_KN";XMLJ::P503_受診者_メイ];

["PT_NAME_KJ";XMLJ::P504_受診者_姓名];

["PT_NAME_KN";XMLJ::P505_受診者_セイメイ];

["PT_SEX";XMLJ::P506_受診者_性別];

["PT_BDATE";XMLJ::P520被保険者_生年月日];

["PT_ADDRESS_WHOLE"; XMLJ::P522被保険者_住所];

["PT_ADDRESS_STATE";XMLJ::P523被保険者_住所_県 ];

["PT_ADDRESS_CITY"; XMLJ::P525被保険者_住所_市町村];

["PT_POST"; XMLJ::P540被保険者_〒番号];

["PT_PHONE_H";XMLJ::P545被保険者_Home電話];

["PT_PHONE_W";XMLJ::P550被保険者_Work電話];

["PT_ROMAN";XMLJ::P507_受診者_Roman];


["PURPOS_E"; $r01 ];//XMLJ::K110_紹介目的

["C_COMPLAINTS"; $r02 ];//XMLJ::K120_傷病名・主訴

["HISTORY_PRES"; $r03 ];//XMLJ::K130_現病歴

["HISTORY_PAST"; $r04 ];//XMLJ::K140_既往歴

["ALLERGY_S"; $r05 ];//XMLJ::K150_アレルギー・不耐応

["F_HISTORY"; $r06 ];//XMLJ::K160_家族歴

["PRES_STATUS"; $r07 ];//XMLJ::K170_身体所見

["INFECTION_S"; $r08 ];//XMLJ::K180_感染症情報

["CL_COURSE"; $r09 ];//XMLJ::K190_臨床経過

["DRUG_S"; $r10 ];//XMLJ::K200_投薬指示

["THANK_S"; $r11]//XMLJ::K210_連絡事項



左の赤い単語が被置換単語になっています。 それを ひながたJSON に組み込みます。


以下 ひながたJSONの一部分です。全文download→  ( hinagataJSON.rtf )

       "status" : "generated",

        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ja\" lang=\"ja\"><a name=\"Patient_Example-JP-Patient-eCS-PT_ROMANInline\"> </a><p class=\"res-header-id\"><b>Generated Narrative: Patient Example-JP-Patient-eCS-PT_ROMANInline</b></p><a name=\"Example-JP-Patient-eCS-PT_ROMANInline\"> </a><a name=\"hcExample-JP-Patient-eCS-PT_ROMANInline\"> </a><a name=\"Example-JP-Patient-eCS-PT_ROMANInline-ja-JP\"> </a><div style=\"display: inline-block; background-color: #d9e0e7; padding: 6px; margin: 4px; border: 1px solid #8da1b4; border-radius: 5px; line-height: 60%\"><p style=\"margin-bottom: 0px\">Last updated: 2021-11-26 10:00:00+0900; Language: ja</p><p style=\"margin-bottom: 0px\">Profile: <a href=\"StructureDefinition-JP-Patient-eCS.html\">JP_Patient_eCSversion: null1.10.0)</a></p></div><p style=\"border: 1px #661aff solid; background-color: #e6e6ff; padding: 10px;\">PT_NAME_KJ PT_SEX, DoB: 1930-06-28 ( urn:oid:1.2.392.100495.20.3.51.11318814790#000999739)</p><hr/><table class=\"grid\"><tr><td style=\"background-color: #f3f5da\" title=\"Record is active\">Active:</td><td colspan=\"3\">true</td></tr><tr><td style=\"background-color: #f3f5da\" title=\"Other Ids (see the one above)\">Other Ids:</td><td colspan=\"3\"><code>http://jpfhir.jp/fhir/clins/Idsystem/JP_Insurance_memberID</code>/PT_HOKEN_INFO:05</td></tr><tr><td style=\"background-color: #f3f5da\" title=\"Alternate names (see the one above)\">Alt. Name:</td><td colspan=\"3\">PT_NAME_KN</td></tr><tr><td style=\"background-color: #f3f5da\" title=\"Ways to contact the Patient\">Contact Detail</td><td colspan=\"3\"><ul><li>ph: PT_PHONE_H(Home)</li><li>PT_ADDRESS_WHOLE</li></ul></td></tr><tr><td style=\"background-color: #f3f5da\" title=\"Patient contact\">Contact:</td><td colspan=\"3\"><ul><li>ph: PT_PHONE_W(Work)</li></ul></td></tr></table></div>"

      },

      "identifier" : [{

        "system" : "urn:oid:1.2.392.100495.20.3.51.11318814790",

        "value" : "000999739"

      },

      {

        "system" : "http://jpfhir.jp/fhir/clins/Idsystem/JP_Insurance_memberID",

        "value" : "PT_HOKEN_INFO"

      }],

      "active" : true,

      "name" : [{

        "extension" : [{

          "url" : "http://hl7.org/fhir/StructureDefinition/iso21090-EN-representation",

          "valueCode" : "IDE"

        }],

        "text" : "PT_NAME_KJ",

        "family" : "PT_SEI_KJ",

        "given" : ["PT_MEI_KJ"]



留意点

1. 以下オリジナルJSON の冒頭の12行ですが

{

  "resourceType" : "Bundle",

  "id" : "Bundle-CLINS-Referral-NoEntry-Example-01",

  "meta" : {

    "lastUpdated" : "2021-11-26T10:00:00+09:00",

    "profile" : ["http://jpfhir.jp/fhir/clins/StructureDefinition/JP_Bundle_eReferral|1.10.0-testCondBundle"]

  },

  "language" : "ja",

  "identifier" : {

    "system" : "http://jpfhir.jp/fhir/clins/bundle-identifier",

    "value" : "1318814790^2024^0123-Referral-203949583949"



11行目 "system" : "http://jpfhir.jp/fhir/clins/bundle-identifier", は この文書の ID が その直下の

"value" : "1318814790^2024^0123-Referral-203949583949" であることを示しています。このID は、

『医療機関番号10桁^西暦4件^36文字以内の半角文字列(英字、数字、ハイフン記号のみ可)であること。』

『Bundleリソースのidentifier要素は、一般に受信システム側で保存される。送信側は、後続の送信においてこのidentifierを指定することで、受信側は過去に受信したBundleリソースを特定し、それに含まれていた全データについて削除、更新などの処理を行うためにこれを使用することができる。』と解説されています。

https://jpfhir.jp/fhir/clins/igv1/StructureDefinition-JP-Bundle-eReferral.html

そのIDが 同一のJSON文書を電子カルテ共有サービスに送信すると「この文書はすでに 登録されています。』というようなXML_resが返されます. そこで 便宜上 このソフトでは 送信のたびに後半部分の12ケタの数字を乱数 (RAN_DOM) にしています。

このvalue値は JSON文書を一意に特定する ID ですから, 実際は自院で管理しながら規則に沿って作成することになるでしょう。


2. Field内に 改行を入れてXMLを作成すると,エラーになります。 HTMLのマークアップ言語では改行に<br/>を使用しますので, 被置換語を置き換える前に改行文字を <br/>に自動変更することにしました。 なので Fieldでは使用してもOKです。患者情報, 自己情報, 紹介先情報ではこの操作はしていません。


3. Fieldはすべてなにかの文字を入れなければなりません。 emptyは エラーになります.


4. オリジナルのjsonでは 既往歴 etc の部分に "\u3000" が使用されています。 "\u3000"は全角空白 を著しています, JavaScriptなどのプログラミング言語で 使われるようですが, この部分はdocumet の内部なので, 表現は自由だと思います. 使っても, 使わなくてもエラーにはなりません. ただ正しい医療JSONでは使わないといけないかもしれません。


5. 診療科と 都道府県を入力すると,診療科番号と 都道府県番号は, 自動計算で入力されるようにしました。


  1. 6.試験環境でも医療機関番号(10ケタ)は架空のものは使えません。また 実在の医療機関のものでも, その医療機関が電子カルテ共有サービスに登録していないと使えません。 なので, 支払基金に登録を済ませてから, 試験環境でトライしてください。 紹介元と紹介先に同じ医療機関番号を使ってもOKです. そもそも, この紹介先の医療機関番号が記載されないと 相手に届かないので, 必須と思われます。 今は, すべての医療機関のそれは各地の厚生局で公表されています。

  2. このソフトでは とりあえず 送信先は “TEST_req” Folderになっていますので, エラーは出ません。






  1. 7.また 外枠のXMLにも 保険情報を記載する必要がありますが, これも XMLひながたを作ってから, はめ込みます。 このことは 前ページ ( route4 ) でも説明しています。

  2. <?xml version='1.0' encoding='UTF-8' standalone='no'?>

    <XmlMsg>

        <MessageHeader>

    <ArbitraryFileIdentifier>Clinic_NUM_TODAY</ArbitraryFileIdentifier>

        </MessageHeader>

        <MessageBody>

    <MedicalReferralDocument>BASE_B</MedicalReferralDocument>

            <BrowsingConsent>0</BrowsingConsent>

            <QualificationInfo>

                <InsurerNumber>PT_INS_NUM</InsurerNumber>

                <InsuredCardSymbol>PT_INS_SYMB</InsuredCardSymbol>

                <InsuredIdentificationNumber>PT_INS_MEM</InsuredIdentificationNumber>

                <InsuredBranchNumber>PT_INS_BR</InsuredBranchNumber>

            </QualificationInfo>

            <Birthdate>PT_BDATE</Birthdate>

        </MessageBody>

    </XmlMsg>



8.「XML作製」ボタンで最終的な XMLが完成します。




「XML送信」ボタンで 送信されます。ただし, このサンプルソフトでは 便宜上 同階層の“TEST_req”に 送信されます。

Script “XML_送信”のなかの $pathreqfile を書き換えることによって 送信先をオンライン資格確認 Folderに変更できます。

"file:TEST_req/" & Q_XML::Q120_FileName  (download 時)

[Windows]    "file:/C:/OQS/req/" 

[Mac → Windows]    filemac:/OQS/req/”


ひょっとしたら, これではうまくゆかないかもしれません。このあたりは 皆さんの環境で変更・試行してください。

( オンライン資格確認導入記 No.29 )


  1. 9.任意のJSONを 置き換えないで, そのままXMLに組み込んで送信することもできます。




上の [割込_JS]ボタンで「割り込み_JSON」レイアウトに移動して, 任意のJSON を Fieldにコピペしてください。そのページの「XML作製」「XML送信」ボタンを使ってください。そのままのJSONがXMLに組み込まれて送信されます。


  1. 10.[Decode] レイアウトで完成 XMLから JSONを抜き出して復元することができます。


  1. 11.[完成JSON_閲覧] [割込JSON_閲覧] ボタンで 完成 JSON ・割込JSON の <div>...</div> の部分を抽出して ネットブラウザーで読むことができます。( route2 参照 ) ただし URLのパスが うまく作動しないことがありますので, そのときは「JSON_FireFox」を開いて, 最新の”FHIR_xxxxxx.html”をクリックしてください。


今後の課題

  1. 1.uuid: [timestampのような 意味合いの乱数に近い文字列 ]をどうするか, やみくもに書き込めばいいのか?

  2. 2.LastUpdate は?

  3. 3.MedicalOrganizationは?


 

(工事中)

2025.3.29 更新

No. 05

JSON_FHIR 作製サンプルroute_5_files/JSON_FHIR_sample.zip