レセプトまるみえ君の作り方 2
前回は、レセプトデータを読み込んで、個人情報を隠蔽してアップロードする所まで説明しました。
アップロード前に個人情報はなくなっているので、漏洩の心配はないという事さえ分かってもらえれば、筆者の目的は達せられるのですが、ついでなので以後の流れも述べます。
マスター
「レセプト電算データの中身」少しふれましたが、支払基金からダウンロードした傷病名マスターは、以下のようなコンマで区切ったCSV形式です。
"0","B","0000999","0000999","14","** 未コード化傷病名 **","14","** 未コード化傷病名 **","19","** ミコードカショウビョウメイ **","20084317","","0000","","","","","","00","0","00","","","99999999","0","0","0","0","0","0","0","0","0","0","0","0","0","","** 未コード化傷病名 **","","","14","00","00","0","0"
"0","B","8848176","8848176","12","11β-水酸化酵素欠損症","12","11β-水酸化酵素欠損症","21","11ベータ-スイサンカコウソケッソンショウ","20100524","1","QJ83","E250","","E250","","","00","0","00","20150101","","99999999","0","0","0","0","0","0","0","0","0","0","0","0","0","","11β-水酸化酵素欠損症","","","12","00","00","0","0"
"0","B","8848177","8848177","12","17α-水酸化酵素欠損症","12","17α-水酸化酵素欠損症","22","17アルファ-スイサンカコウソケッソンショウ","20100530","1","CP8K","E250","","E250","","","00","0","00","20150101","","99999999","0","0","0","0","0","0","0","0","0","0","0","0","0","","17α-水酸化酵素欠損症","","","12","00","00","0","0"
...つづく
このファイルからコードと傷病名を切り取って、使いやすい辞書にしておきます。筆者は慣れている Delphi でやりましたが、jupyter とかでもいいと思います。
Dic_B = {}
Dic_B["0000999"] = "** 未コード化傷病名 **";
Dic_B["8848176"] = "11β-水酸化酵素欠損症";
Dic_B["8848177"] = "17α-水酸化酵素欠損症";
...つづく
同様に診療行為マスター、修飾語マスター、なども作っておきます。
サーバーでやること
サーバー側は flask, python, データベースは PostgreSQL, SQLAlchemy でほとんど tutorial などの通りに作ってみました。一応のログイン機能を実装できたようです。
flask というフレームワークは jinja2 というテンプレートエンジンをつかっていますが、テンプレート?テンプル?神社?というダジャレでしょうか。テンプルならお寺のような気もしますが、、、。
heroku も俳句からきたネーミングらしいです。俳句のヒーローだそうです。松尾芭蕉?
閑話休題。
アップロードされたデータを整理して、2次元配列のデータにします。未分類、合格、不合格、保留、のそれぞれにレセプトのレコードを 並べていくかんじですが、最初にデータ欠損だけチェックして、引っかかったものは保留にいれます。残りは全部未分類にいれます。辞書を参照して傷病名コード、修飾語コード、診療行為コードを翻訳します。ここまでやったら、データを一度 JSON 形式にしてブラウザに返します。rcpt という変数に JSON 化したデータが入ります。render_template で html を出力します。
return render_template(
'work.html',
title='レセプトまるみえ君',
year=datetime.now().year,
rcpts=json.dumps(Rcpts, ensure_ascii=False),
clinic=cln
)
受け取る側は以下のように受け取ったのですが、
<script type="text/javascript">
var clinic = "{{clinic}}"
var data = "{{rcpts}}"
</script>
ここで少しつまづきました。
jinja2 というテンプレートエンジンではふつうには「"」、「[」などの記号を、ブラウザが間違えないように「"」、「[」などの符丁にして出力します。そうしない設定にしたつもりだったのですが、なぜかうまくいかなかったので、仕方なく自分で変換してみました。
javascript でデータを受け取って JSON 形式からパースします。
data = DecHtmlEsc(data);
Rcpts = JSON.parse(data);
function DecHtmlEsc(str){
var s = str
s = s.replace(/"/g,'"');
s = s.replace(/{/g,'{');
s = s.replace(/}/g,'}');
s = s.replace(/[/g,'[');
s = s.replace(/]/g,']');
s = s.replace(/:/g,':');
s = s.replace(/,/g,',');
s = s.replace(/_/g,'_');
return s;
}
本当はもっとスマートな方法があるのでしょうが、まあいいか、ということでやっちまいました。
ユーザーインターフェース
あとは、表示するだけです。といっても、目で見てチェックするツールなので、表示の仕方次第で、作業の能率が変わります。
自分ではやりやすくできたかな、と思っても他の人にはそうでないということもよくあることだと思います。
ご意見、ご要望など、できるだけ反映させていきたいので、どしどしお寄せください。
また、サーバーの作業の部分だけ API にしてあとは、それぞれ各人が使いやすく作る、というのもあるかも、です。
いずれ、今後の予定は決めていないので、反応をみながら変えていきたいと思います。そもそも、レセプトビューアの需要自体どの程度あるのか、という問題もあるし。