サービス料金導入事例開発ブログ会社案内 お問い合わせ →
Dev Blog

レセコン「ORCA」の外来の画面を、公式APIでLaravelに置き換えるデモを作った

レセコン「ORCA」(日医標準レセプトソフト)の外来の画面を、ORCA本体には手を入れずに、公式のAPIでつないだPHP+Laravelの画面で作り直すデモを作った。 → ORCA連携デモ(外来)

公開しているデモは、弊社で作った「模擬ORCA」につないでいる。公式のAPIと同じ形式のXMLで応答するもので、本物のORCAではない。患者・医師・保険者番号はすべて架空。日本医師会ORCA管理機構とは関係のない、非公式のデモ。

デモの診療の画面。左がLaravelで作った画面で、再診と血液検査のセットを選び、金額の目安(710円・238点)を出している。右はORCA側の状態で、患者の病名と、本日の会計前の診療データを表示している

■背景と目的

  • 以前、ORCAの画面を直したいという相談を受けて調べたことがある。画面に入力欄を1つ足すだけでも、画面の定義、COBOLで書かれた業務処理、データの定義まで手を入れることになる。ORCAが更新されるたびに作り直しも要る。そのときは対応を見送った
  • クラウド版のWebORCAは、そもそも医療機関の側で本体を直せない
  • 一方でORCAは公式のAPIを公開していて、クラウド版でも使える。電子カルテとの連携に使われてきたCLAIM通信は2026年3月末で廃止され(機能は止めないが、不具合の修正はしない)、APIへの切り替えが案内されている
  • 本体を直すのではなく、APIでつないだ別の画面を作る形なら、普段のPHP+Laravelの開発で受けられるのではないか。それを確かめるために作った

■デモでできること

  • 予約:予約を入れる・取り消す・一覧を見る。一覧からそのまま受付へ進める
  • 患者:新患登録、住所・電話・アレルギーの変更、患者メモ
  • 受付:受付・取消、本日の受付一覧
  • 診療:病名の登録・治ゆ。よく使う診療行為のセットを選んで金額の目安を出し、ORCAへ送る
  • 履歴:受診履歴と、その日の診療内容・点数
  • 画面の右にはORCA側の状態、下にはORCA APIとの送受信のXMLと、職員ごとの操作記録を出している
  • 受付の画面に、クリニック独自の項目を1つ足す実験ができる。足した項目はLaravel側だけに保存され、ORCAへ送るXMLには入らないことを、通信ログで確かめられる

■ORCAの画面はなくならない

作ってみてはっきりしたのは、APIでつないでも、ORCAの画面は使い続けることになる点だった。

公式に公開されているAPIで扱えるのは、予約・受付・患者の登録・病名・診療行為の送信まで。診療行為はAPIで送っても「中途データ」(会計前の下書き)としてORCAに残るだけで、会計の確定はORCAの画面で行う。公開されている50を超えるAPIの一覧に、会計の確定、入金の登録、レセプトの作成にあたるものはない。金額は「請求金額シミュレーション」のAPIで出せるが、これは確定ではなく試算になる。

そのため、このデモでは次のように分けた。デモの画面にも、この分け方の表を載せている。

業務Laravelの画面ORCAの画面
予約・受付登録・取消・一覧—
患者新患登録、連絡先などの変更、メモ保険・公費の追加や変更など
病名登録・治ゆ細かな編集
診療行為よく使うセットを送る、金額の目安送った内容の確認・修正
会計—会計の確定、入金
レセプト—作成・点検・提出
入院・マスタ・設定—すべて

毎日いちばん手がかかるのは受付と診療の入力なので、そこを使いやすい画面に寄せる意味はあると思う。ただ、会計のたびにORCAの画面へ切り替える手間は残る。2つの画面を行き来する運用を受け入れられるかは医療機関ごとに違うはずで、導入の前に必ず確かめたい点だ。

■HAORIでまた変わるかもしれない

ORCA管理機構は、拡張API「HAORI(はおり)」の公開に向けて準備していると案内している。電子カルテの診療行為の入力・追加・修正に合わせて請求ができるようになる、という説明で、時期は示されていない。

ORCAの公開資料を見ると、HAORIには次のようなAPIがある。

  • 診療内容のチェックと、請求金額の返却(請求確認)
  • 診療の登録。連携先から入金の情報を受け取って登録し、請求書兼領収書を印刷するための情報を返す(2016年の資料での説明)
  • 収納。入金、入金の取消、返金、再発行など

2016年のORCAカンファレンスの資料で流れが紹介されていて、2024年の診療報酬改定の対応資料にも、HAORIのAPIの変更点が載っている。公開されているRubyのライブラリ(orca-api)にも、収納のAPIを呼ぶ処理が入っている。仕組みとしてはすでにあるが、一般向けのAPI一覧には載っていない、という状態に見える。

これが一般に使えるようになれば、今はORCAの画面で行っている会計の確定と入金を、外の画面から行えるようになる。そうなると「受付まわりはLaravel、会計はORCA」という分け方は変わり、ORCAの画面を開く場面はかなり減るかもしれない。一方で、使える条件(どの会社が使えるか、費用、手続き)はまだ分からない。このデモはHAORIを使っていないので、公開されたら試して、この記事も書き直すつもり。

ORCA管理機構は「日医標準レセプトAPI協議会」も立ち上げていて、APIでの連携を広げる動きは続いている。

■作りで決めたこと

  • ORCAのデータはORCAが正しい、という前提にした。患者名や保険はLaravel側に写さない。Laravel側に持つのは、受付IDなど突き合わせ用の番号、操作した職員、独自の項目だけ。写すと、どちらが正しいのか分からなくなる
  • 書き込みは「ORCAへ送る → 成功したらLaravel側に記録」の順。ORCAで失敗したら、Laravel側にも残さない
  • ORCAから見ると、操作はすべて「APIの利用者1人」になる。誰が何をしたかは、Laravel側で職員ごとに記録する
  • ORCAの患者情報の更新は、送った内容で項目をまるごと置き換える。変えた項目だけを送ると、ほかの項目が空になる。今の登録内容を取ってきて、変えた所だけ差し替えて送る
  • 入力の形はLaravel側でそろえる。ひらがなで入れたカナはカタカナに、全角の電話番号は半角に直してから送り、直した結果を画面に出す
  • 二重送信を防ぐ。ボタンの連打や、通信が切れたあとの再送で、同じ受付が2件できないようにした
  • 点数や金額の計算はしない。これはORCAの中身そのもので、まねすると改定のたびにずれる。金額の目安はORCAの試算のAPIに任せる。模擬ORCAは「点数×10円×負担割合」の簡易計算で、画面にもそう書いた
  • 診療行為のセットに入れた請求コードと点数は、厚生労働省の診療報酬情報提供サービスで、令和8年度改定の告示の値を確かめた

■権利の扱い

  • ORCAは日医オープンソース使用許諾契約で公開されていて、改変そのものは認められている。ただし、改変したものも同じ条件で無償で提供し、ソースも出す必要がある。受託で手を入れて納める形には向かない
  • APIでつなぐ別のプログラムは、ORCAを改変したものにはあたらないと考えている。デモでは、ORCAのソース・画面定義・マスタデータは使っていない。公開されているAPIの仕様だけを見て作った

■技術構成

  • PHP 8.3、Laravel 13、MySQL(AWSのRDS)、Nginx。画面はBladeと素のJavaScriptで、ビルドの工程はない
  • ORCA APIは、HTTPでXMLを送受信する。クラウド版のWebORCAでは、BASIC認証(パスワードはAPIキー)とクライアント証明書を使う
  • ORCAとの通信を1か所にまとめ、接続先を設定で「模擬ORCA」と「本物のORCA」に切り替えられるようにした。画面やほかの処理は、どちらにつないでいるかを知らない
  • 模擬ORCAは、公式の仕様にある結果コード(受付の二重登録、同じ病名の重複など)も返す。エラーのときの画面も、デモで確かめられる
  • 自動テストは52件。模擬ORCAを相手に、外来の流れを通しで確かめている

■課題

  • 公式のお試しサーバ(本物のORCA)での通しの確認がまだ。会計済みかどうかの見分け方や予約番号の桁数など、仕様書だけでは決めきれず、模擬ORCAで仮に決めた所がある
  • 会計の確定はORCAの画面で行う。受付の担当者が2つの画面を行き来する運用になる
  • 入院、レセプト、マスタの管理は扱っていない
  • 模擬ORCAの金額は簡易計算で、本物の計算(年齢による加算や、判断料などの自動算定)とは違う

■所感

  • ORCA本体の改修は難しいが、APIの範囲なら普段のWeb開発の延長で作れる。画面に項目を1つ足すのも、Laravel側だけで済む
  • 一方で、APIでできることの境目は、作る前に知っておく必要がある。「ORCAを丸ごと置き換えられる」と思って始めると、会計のところで止まる
  • HAORIが使えるようになれば、その境目は大きく動く。しばらくは公式の発表を追いかけたい

ORCAをお使いの医療機関や、ORCAとつなぐシステムをお考えの方は、お問い合わせからお気軽にご相談ください。

■参考