ORCAで患者を受け付けたら、OpenDolphinにその情報が伝達されるようになっている。そのためには、ORCAの設定が必要になる。
CLAIM接続情報の設定
ORCAで[医事業務]→[マスタ登録]→[101 システム管理マスタ]と進んで、管理コードから[9000 CLAIM接続情報]を選ぶ。
 |
図1 ORCAのCLAIM接続情報設定画面 |
図1のように設定して登録する。ここで、送信アドレスにはOpenDolphinクライアントがインストールされたPCのIPアドレスを設定する。
これによって、ORCAで受付処理された患者の受付情報がOpenDolphinクライアントへ直接送信される。OpenDolphinクライアントはポート番号TCP/5002を開けておく必要がある。
 |
図2 ORCAの患者受付画面 |
図2はORCAの[受付]で、患者を選択したところである。ここで、[受付完了]ボタンをクリックすると図3のように[現在の予約、受付状況]に受け付けた患者の情報が表示され、[送信]欄に「送信」と表示される。
 |
図3 ORCAの受付完了画面 |
ORCAはOpenDolphinクライアントに向けてダイレクトに受付情報を送り、図4のように受付患者が表示される。
 |
図4 OpenDolphinクライアントの受付リスト画面 |
このときのパケットをキャプチャしたのが図5である。
 |
図5 受付完了時にORCAサーバからOpenDolphinに直接送られたパケット |
ORCAサーバはソケット通信を使ってOpenDolphinに受付情報を送信する。送信内容を組み立てたのが図6である。
 |
図6 ORCAサーバからOpenDolphinクライアントに送信された受付情報 |
図6に示すように、受付情報は
XMLの形式になっている。
<?xml version="1.0" encoding="UTF-8" ?>
<Mml version="2.3" createDate="2018-09-06T09:30:32" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mmlCm="http://www.medxml.net/MML/SharedComponent/Common/1.0" xmlns:mmlNm="http://www.medxml.net/MML/SharedComponent/Name/1.0" xmlns:mmlFc="http://www.medxml.net/MML/SharedComponent/Facility/1.0" xmlns:mmlDp="http://www.medxml.net/MML/SharedComponent/Department/1.0" xmlns:mmlAd="http://www.medxml.net/MML/SharedComponent/Address/1.0" xmlns:mmlPh="http://www.medxml.net/MML/SharedComponent/Phone/1.0" xmlns:mmlPsi="http://www.medxml.net/MML/SharedComponent/PersonalizedInfo/1.0" xmlns:mmlCi="http://www.medxml.net/MML/SharedComponent/CreatorInfo/1.0" xmlns:mmlPi="http://www.medxml.net/MML/ContentModule/PatientInfo/1.0" xmlns:mmlBc="http://www.medxml.net/MML/ContentModule/BaseClinic/1.0" xmlns:mmlFcl="http://www.medxml.net/MML/ContentModule/FirstClinic/1.0" xmlns:mmlHi="http://www.medxml.net/MML/ContentModule/HealthInsurance/1.1" xmlns:mmlLs="http://www.medxml.net/MML/ContentModule/Lifestyle/1.0" xmlns:mmlPc="http://www.medxml.net/MML/ContentModule/ProgressCourse/1.0" xmlns:mmlRd="http://www.medxml.net/MML/ContentModule/RegisteredDiagnosis/1.0" xmlns:mmlSg="http://www.medxml.net/MML/ContentModule/Surgery/1.0" xmlns:mmlSm="http://www.medxml.net/MML/ContentModule/Summary/1.0" xmlns:mmlLb="http://www.medxml.net/MML/ContentModule/test/1.0" xmlns:mmlRp="http://www.medxml.net/MML/ContentModule/report/1.0" xmlns:mmlRe="http://www.medxml.net/MML/ContentModule/Referral/1.0" xmlns:mmlSc="http://www.medxml.net/MML/SharedComponent/Security/1.0" xmlns:claim="http://www.medxml.net/claim/claimModule/2.1" xmlns:claimA="http://www.medxml.net/claim/claimAmountModule/2.1">
<MmlHeader>
<mmlCi:CreatorInfo>
<mmlPsi:PersonalizedInfo>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
1234567
</mmlCm:Id>
<mmlPsi:personName>
<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
<mmlNm:fullname>オルカ シャチ</mmlNm:fullname>
</mmlNm:Name>
</mmlPsi:personName>
<mmlFc:Facility>
<mmlFc:name mmlFc:repCode="I" mmlFc:tableId="MML0025">
医療法人 オルカ医院
</mmlFc:name>
<mmlCm:Id mmlCm:type="insurance" mmlCm:tableId="MML0027">
JPN332020100008
</mmlCm:Id>
</mmlFc:Facility>
<mmlDp:Department>
<mmlDp:name mmlDp:repCode="I" mmlDp:tableId="MML0025">
内科
</mmlDp:name>
<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0029">
01
</mmlCm:Id>
</mmlDp:Department>
<mmlPsi:addresses>
<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
<mmlAd:full>
東京都文京区本駒込2?28?16
</mmlAd:full>
<mmlAd:zip>
113-0021
</mmlAd:zip>
</mmlAd:Address>
</mmlPsi:addresses>
</mmlPsi:PersonalizedInfo>
<mmlCi:creatorLicense mmlCi:tableId="MML0026">
doctor
</mmlCi:creatorLicense>
</mmlCi:CreatorInfo>
<masterId>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
00001
</mmlCm:Id>
</masterId>
<toc>
<tocItem>http://www.medxml.net/MML/SharedComponent/Common/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/Name/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/Facility/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/Department/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/Address/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/Phone/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/PersonalizedInfo/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/SharedComponent/CreatorInfo/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/ContentModule/PatientInfo/1.0</tocItem>
<tocItem>http://www.medxml.net/MML/ContentModule/HealthInsurance/1.1</tocItem>
<tocItem>http://www.medxml.net/claim/claimModule/2.1</tocItem>
</toc>
<encryptInfo>no encryption</encryptInfo>
</MmlHeader>
<MmlBody>
<MmlModuleItem>
<docInfo contentModuleType="patientInfo">
<securityLevel>
<accessRight permit="all" />
</securityLevel>
<title>
Data of Regist
</title>
<docId>
<uid>7533aba1-0f33-4c4a-a7cd-4c75ab327b44</uid>
</docId>
<confirmDate>2018-09-06</confirmDate>
<mmlCi:CreatorInfo>
<mmlPsi:PersonalizedInfo>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
1234567
</mmlCm:Id>
<mmlPsi:personName>
<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
<mmlNm:fullname>オルカ シャチ</mmlNm:fullname>
</mmlNm:Name>
</mmlPsi:personName>
<mmlFc:Facility>
<mmlFc:name mmlFc:repCode="I" mmlFc:tableId="MML0025">
医療法人 オルカ医院
</mmlFc:name>
<mmlCm:Id mmlCm:type="insurance" mmlCm:tableId="MML0027">
JPN332020100008
</mmlCm:Id>
</mmlFc:Facility>
<mmlPsi:addresses>
<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
<mmlAd:full>
東京都文京区本駒込2?28?16
</mmlAd:full>
<mmlAd:zip>
113-0021
</mmlAd:zip>
</mmlAd:Address>
</mmlPsi:addresses>
</mmlPsi:PersonalizedInfo>
<mmlCi:creatorLicense mmlCi:tableId="MML0026">
doctor
</mmlCi:creatorLicense>
</mmlCi:CreatorInfo>
<extRefs />
</docInfo>
<content>
<mmlPi:PatientModule>
<mmlPi:uniqueInfo>
<mmlPi:masterId>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
00001
</mmlCm:Id>
</mmlPi:masterId>
</mmlPi:uniqueInfo>
<mmlPi:personName>
<mmlNm:Name mmlNm:repCode="P" mmlNm:tableId="MML0025">
<mmlNm:fullname>キョウカイ タロウ</mmlNm:fullname>
</mmlNm:Name>
<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
<mmlNm:fullname>協会 太郎</mmlNm:fullname>
</mmlNm:Name>
</mmlPi:personName>
<mmlPi:birthday>1986-10-22</mmlPi:birthday>
<mmlPi:sex>male</mmlPi:sex>
<mmlPi:addresses>
<mmlAd:Address mmlAd:repCode="I" mmlAd:addressClass="home" mmlAd:tableId="MML0025">
<mmlAd:full>
東京都新宿区市谷左内町
</mmlAd:full>
<mmlAd:zip>
162-0846
</mmlAd:zip>
</mmlAd:Address>
</mmlPi:addresses>
<mmlPi:phones>
<mmlPh:Phone>
<mmlPh:area>
?????
</mmlPh:area>
<mmlPh:city>
?????
</mmlPh:city>
<mmlPh:number>
?????
</mmlPh:number>
<mmlPh:memo>
03-1234-5678
</mmlPh:memo>
</mmlPh:Phone>
</mmlPi:phones>
<mmlPi:death>false</mmlPi:death>
</mmlPi:PatientModule>
</content>
</MmlModuleItem>
<MmlModuleItem>
<docInfo contentModuleType="healthInsurance">
<securityLevel>
<accessRight permit="all" />
</securityLevel>
<title>
Data of Regist
</title>
<docId>
<uid>72a9fbf9-0f3e-4137-9b91-fd496077cd69</uid>
</docId>
<confirmDate>2018-09-06</confirmDate>
<mmlCi:CreatorInfo>
<mmlPsi:PersonalizedInfo>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
1234567
</mmlCm:Id>
<mmlPsi:personName>
<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
<mmlNm:fullname>オルカ シャチ</mmlNm:fullname>
</mmlNm:Name>
</mmlPsi:personName>
<mmlFc:Facility>
<mmlFc:name mmlFc:repCode="I" mmlFc:tableId="MML0025">
医療法人 オルカ医院
</mmlFc:name>
<mmlCm:Id mmlCm:type="insurance" mmlCm:tableId="MML0027">
JPN332020100008
</mmlCm:Id>
</mmlFc:Facility>
<mmlDp:Department>
<mmlDp:name mmlDp:repCode="I" mmlDp:tableId="MML0025">
内科
</mmlDp:name>
<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0029">
01
</mmlCm:Id>
</mmlDp:Department>
<mmlPsi:addresses>
<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
<mmlAd:full>
東京都文京区本駒込2?28?16
</mmlAd:full>
<mmlAd:zip>
113-0021
</mmlAd:zip>
</mmlAd:Address>
</mmlPsi:addresses>
</mmlPsi:PersonalizedInfo>
<mmlCi:creatorLicense mmlCi:tableId="MML0026">
doctor
</mmlCi:creatorLicense>
</mmlCi:CreatorInfo>
<extRefs />
</docInfo>
<content>
<mmlHi:HealthInsuranceModule mmlHi:countryType="JPN">
<mmlHi:insuranceClass mmlHi:ClassCode="09" mmlHi:tableId="MML0031">
協会けんぽ
</mmlHi:insuranceClass>
<mmlHi:insuranceNumber>01010016</mmlHi:insuranceNumber>
<mmlHi:clientId>
<mmlHi:group>21700023</mmlHi:group>
<mmlHi:number>21</mmlHi:number>
</mmlHi:clientId>
<mmlHi:familyClass>true</mmlHi:familyClass>
<mmlHi:startDate>2018-09-04</mmlHi:startDate>
<mmlHi:expiredDate>9999-12-31</mmlHi:expiredDate>
<mmlHi:paymentOutRatio>0.30</mmlHi:paymentOutRatio>
</mmlHi:HealthInsuranceModule>
</content>
</MmlModuleItem>
<MmlModuleItem>
<docInfo contentModuleType="claim">
<securityLevel>
<accessRight permit="all" />
</securityLevel>
<title>
Data of Regist
</title>
<docId>
<uid>28c3da1f-c6cf-4b90-b2f2-faaebe526a12</uid>
</docId>
<confirmDate>2018-09-06</confirmDate>
<mmlCi:CreatorInfo>
<mmlPsi:PersonalizedInfo>
<mmlCm:Id mmlCm:type="facility" mmlCm:tableId="MML0024">
10002
</mmlCm:Id>
<mmlPsi:personName>
<mmlNm:Name mmlNm:repCode="I" mmlNm:tableId="MML0025">
<mmlNm:fullname>医師 二郎</mmlNm:fullname>
</mmlNm:Name>
</mmlPsi:personName>
<mmlFc:Facility>
<mmlFc:name mmlFc:repCode="I" mmlFc:tableId="MML0025">
医療法人 オルカ医院
</mmlFc:name>
<mmlCm:Id mmlCm:type="insurance" mmlCm:tableId="MML0027">
JPN332020100008
</mmlCm:Id>
</mmlFc:Facility>
<mmlDp:Department>
<mmlDp:name mmlDp:repCode="I" mmlDp:tableId="MML0025">
内科
</mmlDp:name>
<mmlCm:Id mmlCm:type="medical" mmlCm:tableId="MML0029">
01
</mmlCm:Id>
</mmlDp:Department>
<mmlPsi:addresses>
<mmlAd:Address mmlAd:repCode="I" mmlAd:tableId="MML0025">
<mmlAd:full>
東京都文京区本駒込2?28?16
</mmlAd:full>
<mmlAd:zip>
113-0021
</mmlAd:zip>
</mmlAd:Address>
</mmlPsi:addresses>
</mmlPsi:PersonalizedInfo>
<mmlCi:creatorLicense mmlCi:tableId="MML0026">
doctor
</mmlCi:creatorLicense>
</mmlCi:CreatorInfo>
<extRefs />
</docInfo>
<content>
<claim:ClaimModule>
<claim:information claim:status="regist" claim:registTime="2018-09-06T09:30:31" claim:admitFlag="false" claim:insuranceUid="72a9fbf9-0f3e-4137-9b91-fd496077cd69">
<claim:appoint>
<claim:memo>
診察1
</claim:memo>
</claim:appoint>
<claim:patientDepartment>
<mmlDp:Department>
<mmlDp:name mmlDp:repCode="I" mmlDp:tableId="MML0025">
内科
</mmlDp:name>
</mmlDp:Department>
</claim:patientDepartment>
</claim:information>
<claim:bundle claim:classCode="110" claim:classCodeId="Claim007">
<claim:className>診療料</claim:className>
<claim:bundleNumber>1</claim:bundleNumber>
<claim:item claim:subclassCode="0" claim:subclassCodeId="Claim003" claim:code="111000110" claim:tableId="tbl_tensu">
<claim:name>初診料</claim:name>
</claim:item>
</claim:bundle>
</claim:ClaimModule>
</content>
</MmlModuleItem>
</MmlBody>
</Mml>
【Tips】
OpenDolphinクライアントのポーリング
OpenDolphinクライアントは45秒おきにOpenDolphinサーバに対してポーリングを行っている。
 |
図7 45秒おきにOpenDolphinクライアントとサーバの間で送受信されるデータ(受付情報がない場合) |
 |
図8 受付情報がある場合 |
GET /dolphin/openSource/pvt2/pvtList HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
password: d844211bc2d60c9dea151d0b3abb6678
userName: 1.3.6.1.4.1.9414.70.1:DR0002
Host: 172.16.111.217:8080
Connection: Keep-Alive
HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Undertow/1
Server: WildFly/9
Content-Type: application/json
Content-Length: 2457
Date: Thu, 06 Sep 2018 00:31:10 GMT
{
"list": [
{
"deptCode": "01",
"doctorName": "医師 二郎",
"doctorId": "10002",
"jmariNumber": "JPN332020100008",
"pvtDate": "2018-09-06T09:30:31",
"department": "内科,01,医師 二郎,10002,JPN332020100008,",
"firstInsurance": "09 協会けんぽ",
"insuranceUid": "72a9fbf9-0f3e-4137-9b91-fd496077cd69",
"facilityId": "1.3.6.1.4.1.9414.70.1",
"patientModel": {
"patientId": "00001",
"healthInsurances": [
{
"beanBytes": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGphdmEgdmVyc2lvbj0iMS44LjBfMTcxIiBjbGFzcz0iamF2YS5iZWFucy5YTUxEZWNvZGVyIj4KIDxvYmplY3QgY2xhc3M9Im9wZW4uZG9scGhpbi5pbmZvbW9kZWwuUFZUSGVhbHRoSW5zdXJhbmNlTW9kZWwiPgogIDx2b2lkIHByb3BlcnR5PSJHVUlEIj4KICAgPHN0cmluZz43MmE5ZmJmOS0wZjNlLTQxMzctOWI5MS1mZDQ5NjA3N2NkNjk8L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9ImNsaWVudEdyb3VwIj4KICAgPHN0cmluZz7vvJLvvJHvvJfvvJDvvJDvvJDvvJLvvJM8L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9ImNsaWVudE51bWJlciI+CiAgIDxzdHJpbmc+77yS77yRPC9zdHJpbmc+CiAgPC92b2lkPgogIDx2b2lkIHByb3BlcnR5PSJleHBpcmVkRGF0ZSI+CiAgIDxzdHJpbmc+OTk5OS0xMi0zMTwvc3RyaW5nPgogIDwvdm9pZD4KICA8dm9pZCBwcm9wZXJ0eT0iZmFtaWx5Q2xhc3MiPgogICA8c3RyaW5nPnRydWU8L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9Imluc3VyYW5jZUNsYXNzIj4KICAgPHN0cmluZz7ljZTkvJrjgZHjgpPjgb08L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9Imluc3VyYW5jZUNsYXNzQ29kZSI+CiAgIDxzdHJpbmc+MDk8L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9Imluc3VyYW5jZUNsYXNzQ29kZVN5cyI+CiAgIDxzdHJpbmc+TU1MMDAzMTwvc3RyaW5nPgogIDwvdm9pZD4KICA8dm9pZCBwcm9wZXJ0eT0iaW5zdXJhbmNlTnVtYmVyIj4KICAgPHN0cmluZz4wMTAxMDAxNjwvc3RyaW5nPgogIDwvdm9pZD4KICA8dm9pZCBwcm9wZXJ0eT0icGF5T3V0UmF0aW8iPgogICA8c3RyaW5nPjAuMzA8L3N0cmluZz4KICA8L3ZvaWQ+CiAgPHZvaWQgcHJvcGVydHk9InN0YXJ0RGF0ZSI+CiAgIDxzdHJpbmc+MjAxOC0wOS0wNDwvc3RyaW5nPgogIDwvdm9pZD4KIDwvb2JqZWN0Pgo8L2phdmE+Cg==",
"id": 18
}
],
"kanaName": "キョウカイ タロウ",
"gender": "male",
"genderDesc": "男",
"birthday": "1986-10-22",
"simpleAddressModel": {
"zipCode": "162-0846",
"address": "東京都新宿区市谷左内町 "
},
"appMemo": "診察1",
"pvtDate": null,
"ownerUUID": null,
"romanName": null,
"nationality": null,
"nationalityDesc": null,
"maritalStatus": null,
"jpegPhoto": null,
"mobilePhone": null,
"relations": null,
"reserve1": null,
"reserve2": null,
"reserve3": null,
"reserve4": null,
"reserve5": null,
"reserve6": null,
"facilityId": "1.3.6.1.4.1.9414.70.1",
"telephone": "03-1234-5678",
"memo": null,
"email": null,
"fullName": "協会 太郎",
"id": 9
},
"deptName": "内科",
"memo": null,
"appointment": null,
"lastDocDate": null,
"id": 19,
"state": 0
}
]
}
図7のように、受付情報がない場合は空のリストが返ってくるが、受付情報がある場合はその受付情報が返ってくる。
ORCAは患者を受け付けると、受付情報を直接OpenDolphinに送るので、このようなポーリングは不要に思えるが、万一、OpenDolphinが起動していない場合や、OpenDolphinクライアントが複数台立ち上がっている場合など、これによって受付患者情報が取得でき、受付リストに表示できる。
しかし、何故OpenDolphinはサーバではなくクライアントでORCAの受付情報を受信する設計方針をとったのだろう?
また、クライアントで受け取った受付情報をどのようにしてサーバへ送っているのだろうか?
ORCAクライアントのポーリング
ORCAクライアントは7秒おきにポーリングしている。サーバとやりとりする情報には2通りがある(図9、10)。
 |
図9 ORCAクライアントのポーリング(list_downloads) |
 |
図10 ORCAクライアントのポーリング(get_message) |