レセプトオンライン送信で請求ができたかを確認するRubyスクリプト

すごいニッチなところをすみませんwww。

レセプトオンライン送信について知っている人だけをまずは対象にしています。

複数の店舗のレセプトを一括してオンライン請求するときにきちんと請求済みになっているかどうか1 を(念のため)確認するのは2(社保、国保) × 店舗数分やらないといけないので大変です。
特にEeePCを使っていると遅いので、だいぶん大変度が増します。
ということで、Rubyでオートマティックに確認するスクリプトを書いてみました。
神奈川県の事例しか知らないので神奈川県限定です。
スクリプト中の神奈川県に関する部分を修正すれば、ほかの県でももしかしたら利用できるかもしれません。
またHTMLを解析して、やっていますのでサイトの構成やHTML等が変わってしまった場合には利用ができません。

共有はしますが、ノーサポートです。
私はこのスクリプトを使用して生じた一切の責任を負いません。

ライセンスをどうしようかと思いましたが、どのみちスクリプトですから改変しても公開せざるを得ないと思うので、GPLv3にしておきます。2

動作環境は

  • Windows3
  • Ruby 1.8.7
  • RubyGems 1.3.2
    RubyGemsによってインストールした

    • WWW::Mechanize 0.9.2
    • Term::ANSIColor 1.0.3
    • Win32Console 1.2.0
    • およびそれらの依存ライブラリ(Nokogiri等)

です。
これらのインストールに関する質問はお答えできませんので、あらかじめご了承を。

さらにopenssl(UNIX系だと普通にあると思われる4 )を用いて配布されているp12形式の証明書ファイルからcerファイルとkeyファイル(この二つをいまいちわかっていない)を作成します。

パスワードの入力を求められますが、これは証明書発行時に発行されたパスワードになります。

openssl pkcs12 -in hoge.p12 -clcerts -out hoge.cer -nokeys
openssl pkcs12 -in hoge.p12 -clcerts -out hoge.key -nocerts -nodes

さらに店舗情報としてYAMLファイルを作成します。
名前は適当につけていただいて、ファイルの中身は

- name: hoge
  id: 0120444444
  password: hogepass
  cert: hoge.cer
  key: hoge.key
- name: piyo
  id: 0120888888
  password: piyopass
  cert: piyo.cer
  key: piyo.key

とかしてください。

nameは任意の区別できる名前にします。
id, passwordはその薬局がログインするときのIDとパスワードです。
certとkeyは上記で作成したcertファイルとkeyファイルのパスを指定します。
後のオプションはきっとわかると思います。
このときWindowsでパス区切りに使われるバックスラッシュ(\)はうまく動いてくれなかったように思えるので、スラッシュでパスを区切りました。

あとは

ruby receipt_check.rb hoge.yaml

とでも打ち込めば、請求済みであれば緑色の字で[OK]、請求済みになっていない場合には[Failed]と表示されます。

ruby receipt_check.rb -t hoge.yaml

のように -t オプションをつけると、確認試験で実行します。

さらに自分は上記コマンドを呼び出すバッチファイルを作成し、それをcmd.exeで呼び出すリンクファイルを作ってリンクファイルをクリックするだけで確認できるようにしてあります。

TODOはそこにも書いてありますが、エラー処理を全くしていません。
そのため運用時間外などに実行すると、運用時間外ですとか知らせることなく、思い切りスクリプトのエラーが出ます。
もしやる気があれば、未請求になっていた場合にはスクリプトで請求できるようにしたり、もうスクリプトだけで請求するということも考えています(こちらは実現が難しそう)。

あと、できるだけ修正はしたいと思いますが、最終的なデバッグはレセプトオンライン送信の端末でしかできないので、修正まで非常に時間がかかる場合、修正しない場合があります。

ということで、以上を理解した方のみダウンロードはこちらから。

  1. 送信してから、請求するボタンを押さないといけません []
  2. 正直ここらは返るかもしれません []
  3. 今から考えると確認するだけならWindowsである必要はありませんね。 []
  4. MacでやったのでWindowsだとわからない []