2018年9月6日木曜日

患者受付処理

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)

0 件のコメント:

コメントを投稿

OpenDolphinとORCAの連携

第3章の章末問題 第2章の章末問題でやったカルテ例1をOpenDolphinに入力してORCAで診療報酬明細書を作成し、模範解答と比較しなさい。 を実際にやってみたのでまとめておく。 OpenDolphinで過去にさかのぼってカルテは作成できるか? その前に標題に...