2018年8月9日木曜日

②患者基本情報データの取得2

前回、WireSharkを使って、スマホとORCAまたは、OpenDolphinの通信内容を分析しようとしていたが、スマホとサーバの通信内容は、たとえ同じネットワーク内といえども他の通信機器でキャプチャすることはできないことが判明した。

なので、2年前のあるブログの中の、特に、ブログ1ブログ2を参考にして、これをAngularJS版に改編することで、スマホに表示する患者基本情報データを取得できるだろうと考えた。

  1. .function getPatientData(patientId) {
  2. var url = 'http://hustler***.softether.net/~*******/api01rv2/
  3. patientgetv2.xml';
  4. patientData = null;
  5. $.ajax({
  6. type: 'GET',
  7. url: url,
  8. async: false,
  9. cache: false,
  10. dataType: "xml"
  11. }).done(function(xml, status, error){
  12. if (status == 'success') {
  13. patientData = $(xml).find('Patient_Information');
  14. } else {
  15. alert('文書データ取得失敗');
  16. }
  17. }).fail(function(xhr, status, error){
  18. var message = "xhr.status = " + xhr.status + ", xhr.statusText = " + xhr.statusText + ", status = " + status + ", error = " + error;
  19. alert('サーバから応答がありません: ' + message);
  20. });
  21. }




2年前のあるブログを見る限り、患者情報をGETメソッドを使って、取得していることが分かった。GETメソッドを使うにあたって、アプリに渡すためのURLを指定しなければならない。ここでは、2,3行目に、URLが指定されていた。このURLはどんなのか、見てみると、このような画面が出てきた。
ORCAの患者基本情報がAPIとして処理されて、レスポンスされていた。
そこで、ORCAのサイトを見てみると、ここを参考にしたら、APIとして処理され、患者基本情報が返却されそうだと分かった。
また、ver5以降から引数のformatによってJson形式でも返却できることが可能になっていので、それを使う。

なので、ORCAのサイトのテスト方法にのっているURLをもとに、localhostをIPアドレス「172.16.108.251」に変更し、id=の後を、患者番号である1または0001を指定したURLにアクセスしてみた。
図1:URLにアクセスした結果


アクセスした結果、図1のような画面が出てきて、エラーが発生した。APIとして処理された患者基本情報が返却されないと、作業が進まないので、エラーがでた原因を追究し、遅れを取り戻していきたい。

今回は2年前のあるブログの患者基本情報の取得方法を理解することに時間がかかったり、図1のようなエラーが出てしまったりと、作業が思うように進まなかった。次回は、エラーの原因を解決し、APIとして処理された患者基本情報を入手し、URLを得た状態で、2年前のあるブログのようなプログラムを参考に、AngularJS版に改変し、患者基本情報データの取得が行えるのか検証していきたい。




【コメント】

日レセAPIを使ってORCAから患者基本情報を取得するには次のようなURLを書きます。
http://172.16.108.251:8000/api01rv2/patientgetv2?id=00001&format=json
これは、患者ID=00001の患者の基本情報をJSON形式で返却することをリクエストするURLです。ちなみに、この例が示すようにORCAのWebAPIはRESTfulではありません。通常のクエリストリングで患者IDなどのパラメタを渡しています。

 ブラウザに上記URLを打ち込むと、次のような認証要求画面が表示されます。
図2 ORCAの認証画面(Firefoxの場合)
 ユーザ名にormaster、パスワードに***を入力すると次のような画面が表示されます。
図3 ORCAからのレスポンス
 これは、ORCAからのレスポンスです。JSON形式を要求しているため「XMLパースエラー」と表示されます。ブラウザはJSONを解釈できないからです。ブラウザの機能を使ってソースを表示します。
図4 レスポンスのソース表示
 ソースをコピーしてJSON Pretty Printにかけます。
図5 レスポンスをJSON Pretty Printにかけたもの
こうして、次のようなJSONデータが得られます。
  1. {
  2. "patientinfores": {
  3. "Information_Date": "2018-08-10",
  4. "Information_Time": "07:08:48",
  5. "Api_Result": "00",
  6. "Api_Result_Message": "処理終了",
  7. "Reskey": "Patient Info",
  8. "Patient_Information": {
  9. "Patient_ID": "00001",
  10. "WholeName": "山下 浩介",
  11. "WholeName_inKana": "ヤマシタ コウスケ",
  12. "BirthDate": "1970-12-06",
  13. "Sex": "1",
  14. "HouseHolder_WholeName": "山下 浩介",
  15. "Home_Address_Information": {
  16. "Address_ZipCode": "*******",
  17. "WholeAddress1": "岡山県**市**",
  18. "WholeAddress2": "*丁目*?*",
  19. "PhoneNumber1": "***-**-****"
  20. },
  21. "Contraindication1": "********",
  22. "Allergy1": "********",
  23. "Infection1": "********",
  24. "TestPatient_Flag": "0",
  25. "NickName": "カルテ例1 P56",
  26. "Reduction_Reason": "00",
  27. "Reduction_Reason_Name": "該当なし",
  28. "Discount": "00",
  29. "Discount_Name": "該当なし",
  30. "Condition1": "00",
  31. "Condition1_Name": "該当なし",
  32. "Condition2": "00",
  33. "Condition2_Name": "該当なし",
  34. "Condition3": "00",
  35. "Condition3_Name": "該当なし",
  36. "Ic_Code": "01",
  37. "Ic_Code_Name": "現金",
  38. "Community_Cid_Agree": "False",
  39. "FirstVisit_Date": "2017-12-18",
  40. "LastVisit_Date": "2018-01-17",
  41. "HealthInsurance_Information": [
  42. {
  43. "Insurance_Combination_Number": "0001",
  44. "InsuranceCombination_Rate_Admission": "0.30",
  45. "InsuranceCombination_Rate_Outpatient": "0.30",
  46. "Insurance_Nondisplay": "N",
  47. "InsuranceProvider_Class": "009",
  48. "InsuranceProvider_Number": "01400019",
  49. "InsuranceProvider_WholeName": "協会",
  50. "HealthInsuredPerson_Symbol": "41061242",
  51. "HealthInsuredPerson_Number": "9635",
  52. "RelationToInsuredPerson": "1",
  53. "HealthInsuredPerson_WholeName": "山下 浩介",
  54. "Certificate_StartDate": "2017-10-25",
  55. "Certificate_ExpiredDate": "9999-12-31",
  56. "Insurance_CheckDate": "2017-10-25"
  57. },
  58. {},
  59. {},
  60. {},
  61. {},
  62. {},
  63. {},
  64. {},
  65. {},
  66. {},
  67. {},
  68. {},
  69. {},
  70. {},
  71. {},
  72. {},
  73. {},
  74. {},
  75. {},
  76. {},
  77. {},
  78. {},
  79. {},
  80. {},
  81. {},
  82. {},
  83. {},
  84. {},
  85. {},
  86. {}
  87. ]
  88. }
  89. }
  90. }
これを下記のORCAの患者登録画面と比較してみます。
図6 同じ患者番号のORCAの患者登録画面
 これらから、禁忌がJSONのContraindication1に、アレルギーがAllergy1に、感染症がInfection1に対応していることがわかります。コメントは入力されていませんが、ORCAのドキュメントからComment1であることがわかります。さらに、これらはいずれも2つずつあり、それがContraindication2, Allergy2, Infection2, Comment2であることもわかります。これらについては、実際にORCAにデータを入力して確認するとよいでしょう。

さて、 これでORCAのWebAPIを利用して患者基本情報をJSON形式で取得できることがわかりました。しかし、図2の認証はどうすればよいのでしょう?
まさか、患者基本情報を取得する都度、認証画面が現れて、ユーザ名とパスワードを入力するわけにもいきません。
なんとか、OpenDolphinのように、スマホアプリのプログラムで認証情報をORCAへ渡したいものです。
それについてはORCAのドキュメントを調べるか、2年前のブログから探し出すか、あるいはネット上の情報から見つけ出す以外にありません。挑戦してみましょう。

0 件のコメント:

コメントを投稿

レーダーチャートの表示2

前回 レーダーチャートの表示を行うことが出来たので、今回は実際の値を代入したグラフの描画を試みる。 .controller('RaderChartController', ['$scope', 'Countries', funct...