電子処方箋   導入記 (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日を予定しております。


---- まだまだ 電子処方箋システムも発展途上なのですね。------ (-_-;)






                                                                       









 

2023.3.7 更新