電子処方箋 導入記 (No.13)
実際にやってみると(その2) 確定処方箋XMLを送信
重複チェックXMLが受け入れられたので, 余勢を駆って確定処方箋を出してみました。
同じように最終型のCR,LF改行記号を削除したものを投函したら, err はなくresが返ってくるのですが,
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<XmlMsg><MessageHeader><CharacterCodeIdentifier>0</CharacterCodeIdentifier>
<SegmentOfResult>1</SegmentOfResult>
<ArbitraryFileIdentifier>3xxxx</ArbitraryFileIdentifier></MessageHeader>
<MessageBody>
<ProcessingResultStatus>2</ProcessingResultStatus>
<CsvCheckResultList><ResultMessage>改行コードはLFで記録してください。</ResultMessage>
<ResultCode>EPSB0052E</ResultCode>
</CsvCheckResultList>
</MessageBody>
</XmlMsg>
このXML には <ProcessingResultStatus>2 とありますから, 登録は不成功だったということです。
エラー内容は 改行コードはLFで記録してください。ということです。
ONSヘルプデスクにこの意味を聞いたのですが, CSVの部分の改行コードをLFにしなさい, ということのようです。
確かに「電子処方箋管理サービス・記録条件仕様v1.6」には 改行コードとしてLFを使うようにという記載があります。
ところで, Macで動くFilemakerは 改行コードは LF と思っていました。
一般に以下のように解説されています。
なので Filemakerで作成した CSVに 変更を加える必要はないと思っていました。
ところが Filemaker の 改行コードは CR のようです。
このことは 前ページの解析でも Char(13):CR が行末に 存在することからも 確かでしょう。LFはありません。
Filemakerでは テキストがテキストFieldに投入された段階で( ? ), そのテキストの行末には CRの改行コードが挿入されてしまうようです。(未検証)
そのCRをLFに置換するにはどうすれば, いいかというと,
Filemaker v16から TextEncode関数が 使えるようになりました。Fieldに入力されているtext dataの改行コードを任意のものに変換する関数です。ただし, 一般に 改行コードがCRでなければText Fieldには表示できません。それが このTextEncode関数が オブジェクト関数になっている理由だと考えられます。
TextEncode関数 TextEncode ( テキスト ; エンコード ; 改行コード )
引数 エンコード
引数: 改行コード
改行コードとして LFを指定する場合,
たとえば ABC という任意の オブジェクト Field を定義して そこに Field 設定で
TextEncode( 変換対象のFile ; “ utf-8 ”; 3 ) を出力します。
すると Fieldの イメージは以下のようになります。なぜか”utf-8.txt”というFile名になってしまいます。
オブジェクトField なので 内容は表示できないのでしょう。LF改行のTextなのでかもしれません。
このFileを そのまま Base64変換関数 Base64Encode( ABC ) に指定できます。
最初のCSVを Base64変換して最終形には LF, CRを削除したかたちで 確定電子処方箋を作成し(path3), 投函します。
うまくいったようで 以下のような 確定処方箋 登録完了Resが返ってきました。
PrescriptionId, AccessCodeを ゲットできました。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<XmlMsg><MessageHeader>
<CharacterCodeIdentifier>0</CharacterCodeIdentifier>
<SegmentOfResult>1</SegmentOfResult>
<ArbitraryFileIdentifier>2xxx67</ArbitraryFileIdentifier>
</MessageHeader><MessageBody>
<PrescriptionId>dda4cc6e-ae69-426d-9de3-741f5a017d2d</PrescriptionId>
<AccessCode>236451</AccessCode>
<ProcessingResultStatus>1</ProcessingResultStatus>
</MessageBody></XmlMsg>
これでメデタシ メデタシ と思ったのですが,
処方によっては
また, 重複チェックで 正常終了していても 確定では CSVが 不備だというコメントが返ってくることがあります。
<ResultMessage>同一グループ内で1から抜け漏れなく昇順で記録してください。
(行番号:29,項目名:薬品補足連番,値:2)</ResultMessage>
実際のCSVですと
201,1,1,1,2,612170540,アダラートL錠20mg,2,1,錠
201,1,2,1,2,610443066,アレロック錠2.5 2.5mg,2,1,錠
201,1,3,1,2,616140105,クラリス錠200 200mg,2,1,錠
281,1,2,1,3,後発品変更不可, (← アレロックに対する補足事項)
のような場合で これは あくまでもグループごとの記載順にすることが要求されます
201,1,1,1,2,612170540,アダラートL錠20mg,2,1,錠
201,1,2,1,2,610443066,アレロック錠2.5 2.5mg,2,1,錠
281,1,2,1,3,後発品変更不可,
201,1,3,1,2,616140105,クラリス錠200 200mg,2,1,錠
これを修正したら, 確定電子処方箋は受け入れられました。
ここまで きたのですが, ここで いきなり, ONSから電話があって,
私の確定処方箋は 受け入れられてはいるが, どこか 正しくないところに改行コードが入っていて, 異常な情報となっているので, 実際には電子処方箋として認識されていない, ので確定電子処方箋登録はやめてほしい. と言われました。... (T_T)
しかし, 当院の電子処方箋登録に対して, 異常なら ハネのければいいものを, 正常終了としてres を返すのはシステムが未熟だからでしょう...(-_-メ)
どこに異常な改行コードが入っているんだ ? これに対しては回答はありません。
めんどうですが 試験環境をトライする必要がありそうです。
最近 ONSのから アナウンスがありました。
今後, 「要素内で改行しないこと(改行コードを含めないこと)」
本改版に伴い、上記タグ内に記録されるBase64エンコードされた処方箋情報(調剤結果情報)の文字列に改行が含まれていた場合はエラーとなるよう、機能更新を行います。 本件に係るシステムリリースは2023年3月17日を予定しております。
---- まだまだ 電子処方箋システムも発展途上なのですね。------ (-_-;)