人類には早すぎる謎の計算ロジックに立ち向かう@jooohn1234
View Slide
M3, Inc. @jooohn1234● エムスリーデジカルCTO● Scala / FP 好き
電子カルテとレセコン
受付 診察 会計
受付 診察 会計電子カルテ患者への医療行為を記録
受付 診察 会計レセコン会計計算・保険請求
??
?
ORCAに依存した場合のキャップ電カルだけの場合のキャップレセコン単体・一体型のポテンシャル
レセコン作っちゃいましょう!当時の電カルチームPM
レセコンとは
医療機関レセコン
医療機関レセコン合計: 1,000円自己負担: 300円日時会計処理 (会計計算・記録)患者
医療機関レセコン月次請求処理 (必要ファイル・書類の作成)支払基金・自治体
レセコン会計計算、保険請求の処理を担う魔法の機械。以下の要素でできている。・診療報酬点数を計算する謎のロジック・保険・公費を適用した際の請求額や窓口会計額などを計算する謎のロジック
レセコン会計計算、保険請求の処理を担う魔法の機械。以下の要素でできている。・診療報酬を計算する謎のロジック・保険・公費を適用した際の請求額や窓口会計額などを計算する謎のロジックす、すごい!
安くて良いレセコンを作りたい!謎の計算ロジック
レセコンのつくりかた● 製品品質の担保● コード品質の担保
製品品質の担保
協力クリニックを募り、デジレセ・ORCA双方に同じ処方内容を入力それぞれからレセ電ファイルを出力
差分を比較、分析。改善すべき計算ルールを特定。
計算ルールを仕様に落とし実装。目標差分になるまで改善ループを回す。
この改善サイクルを複数診療科で実行。(診療科によって診療パターンが大きく違う)
コード品質の担保
エンジニアA調剤レセコン開発経験ありのエンジニアRubyが得意エンジニアB関数型やScalaが得意。「メンテを考えたら絶対に静的型言語で書くべき。」
ロジックの検証を真っ先に行えるようにRubyでプロトタイプを作成。捨てる前提で爆速で開発。長期のメンテナンス性を考慮し、Scalaで書き直し。計算ロジックを理解、モデルを整理しながら清書。エンジニアA調剤レセコン開発経験ありのエンジニアRubyが得意エンジニアB関数型やScalaが得意。「メンテを考えたら絶対に静的型言語で書くべき。」
結果
新規導入数の推移(の雰囲気)レセ単体・一体型のローンチ1年半ほどで、新規導入比率が連携型と同程度に!
新規導入数の推移(の雰囲気)爆上げ間違いなし!!
まとめ● サービス成長過程で超えるべき壁がある(あった)○ 一見難しそうに見えるし、実際に難易度は高い(高かった)○ やったリターンは大きい(大きかった)● 工夫で品質を担保する○ 既存の製品をベンチマークとして品質を担保○ 一度作ったプロトタイプを捨てることでコード品質を担保