從原始碼掌握日レセ API 的全貌 ── 通讀 ORCA 公開原始碼(附全137個端點對應表)

· · 醫療IT, ORCA, API串接, COBOL, 原始碼閱讀

上一篇文章中,我們整理了 ORCA(日醫標準診療報酬結算軟體)是一套收費電腦(レセコン),以及其原始碼已持續公開20年以上這兩點。

這次要實際閱讀那份原始碼。主題是從第一手資訊掌握日レセ API 的全貌。不是從頭逐條閱讀官方 API 規格書,而是依照下面這個順序進行:

  1. 從原始碼中數出伺服器端實際存在的全部端點,
  2. 把一支 API 從實作一路追蹤到回應 XML 的形態,
  3. 與官方文件對照、驗證差異,
  4. 用版本間 diff 實測 API 的變化。

文章末尾附上這次調查得到的全137個端點的對應表(URL・COBOL 程式・功能)。

本文的調查對象是官方公開的日レセ本體 5.2系列原始碼(2026年7月1日公開快照),同時也使用5.1系列(同日公開) 作為對照對象。所有描述均依據這兩個版本,正文中會列出重現所需的指令。

目標讀者是接下來要設計・實作與日レセ API 串接功能的開發者。不需要會讀 COBOL。掌握全貌只需要用到文字的 grep 和 iconv,即便到了深入追查單一 API 的階段,主要閱讀的也是標頭註解與修改履歷。同樣不預設醫療事務方面的實務知識。

目錄

  1. 先講結論
  2. 前提 ── 原始碼的取得與版本固定
  3. API 分派機制 ── URL 由lddef決定
  4. 發現:API 是「畫面業務的 API 版」── bindbindapi
  5. 完整追蹤一支 API ── 解剖patientgetv2
  6. 統計全部端點 ── 一條 grep 命令搞定的調查步驟
  7. 與官方一覽表對照 ── 一覽表中沒有的 API 範例
  8. 從原始碼推導未文件化 API 的規格 ── 以findv3為例
  9. 用版本間 diff 實測 API 的變化 ── 5.1系列 vs 5.2系列
  10. 如何與未文件化 API 相處 ── 「文件化」並非保證
  11. 深入追查時的實務筆記
  12. 總結
  13. 附錄:全137個端點對應表(5.2系列・2026年7月版)
  14. 參考資料

1. 先講結論

  • 日レセ API 的 URL 與伺服器端程式的對應關係,以宣告方式寫在原始碼的 lddef/*.ld(LD 定義檔)中。即使不讀 COBOL,只憑文字的 grep 就能列舉出 API 的全貌。
  • 在5.2系列快照中,27個 LD 定義合計束有137個端點,皆由 bindapi 統整。官網 API 規格一覽頁面上刊載的只有約50個,原始碼一側實際存在的端點數量是它的2倍以上
  • XML 請求・回應的結構宣告在 record/*.db 中,XML 標籤名稱直接沿用定義中的項目名稱。也就是說,即使是未文件化的 API,只要沿著 lddefcobolrecord 追溯,也能推導出規格。
  • 與5.1系列進行版本間 diff 後可以看到,端點新增9個・刪除0個。新增部分集中在線上資格確認(My Number保險證)相關領域,由此可以實測出「API 會隨制度因應而增加,而既有的 API(至少在這兩個系列之間)並未消失」這件事。
  • 未文件化的 API 並不是「不能用的 API」。ORCA 是開放原始碼軟體,可以把原始碼本身當作第一手規格來對待。問題的關鍵不在於有沒有承諾,而在於「能否建立起自行偵測變更的運維體系」,這個判斷架構會在第10章中整理。

2. 前提 ── 原始碼的取得與版本固定

原始碼可以從官方技術資訊頁面以 tar 包(zip)的形式下載。由於每月1日都會更新為上月1日時點的快照,調查結果必須與版本一起記錄是鐵律。本文使用的是下面這個版本。

  • 取得來源:https://ftp.orca.med.or.jp/pub/src/jma-receipt.r_5_2_branch.zip(用於比較的r_5_1_branch.zip也一併使用)
  • 取得日期:2026-07-17(兩者皆為2026年7月1日時點的快照)
  • 5.2系列的VERSION檔:5.2.0

若要親自動手操作,最簡步驟如下。之後各章的指令,都以解壓縮後的目錄為起點執行。

# 決定工作目錄,取得並解壓縮5.2系列的快照
mkdir -p ~/orca-src && cd ~/orca-src
curl -O https://ftp.orca.med.or.jp/pub/src/jma-receipt.r_5_2_branch.zip
unzip -q jma-receipt.r_5_2_branch.zip

# 記錄版本。以下這兩項務必留在調查筆記中
sha256sum jma-receipt.r_5_2_branch.zip
cat jma-receipt.r_5_2_branch/VERSION      # → 5.2.0

# 之後的指令都在這個目錄內執行
cd jma-receipt.r_5_2_branch
ls lddef/ | head

用於比較的5.1系列,只要把 URL 中的r_5_2_branch換成r_5_1_branch,依照同樣的步驟解壓縮備用,第9章的 diff 就能直接執行。

解壓縮後大約有8,200個檔案、237MB,本文主要使用下面這3個目錄。

目錄 內容 本次用途
lddef/ LD 定義(分派表).ld檔40個(其中27個含有bindapi定義) 全部端點的列舉
cobol/ 業務邏輯(COBOL 共1,754個・約406萬行) 各 API 的功能確認・實作解讀
record/ 資料結構定義 約1,240個(其中 XML 系274個) 請求・回應結構的推導

3. API 分派機制 ── URL 由lddef決定

在進入正題之前,先把本章開始要用到的詞彙整理一下。雖然全都是 ORCA 特有的說法,但要記住的只有5個。

用語 意義
MONTSUQI(モンツキ) 承載著日レセ的基礎軟體。ORCA 官方技術資訊頁面將其說明為「運行在 Linux 之上的開放原始碼 OLTP(線上交易處理)監控器」。它是接收來自畫面客戶端或 API 的請求、並將處理轉交給負責的 COBOL 程式的中介層
LD 定義(lddef/*.ld) 宣告「哪個 URL(畫面・API)由哪個 COBOL 程式處理」的文字檔。既是分派表,也是該模組的目錄
bind / bindapi LD 定義中的宣告行。bind逐行宣告對話畫面,bindapi逐行宣告 API 的入口(第4章)
record/*.db 請求・回應及各種紀錄的資料結構定義。XML 的標籤名稱直接沿用這裡的項目名稱(第5章)
xml2 LD 定義中的db "xml2" { … }區塊。它羅列了該模組在 XML 交換中所使用的紀錄定義。在 COBOL 標頭功能名稱的末尾,也常能看到標有「(xml2)」字樣的 API(見附錄)

日レセ API 的 URL 採用「模組名稱/端點名稱」這樣的兩段式結構,例如/api01rv2/patientgetv2。這個對應關係原樣體現在lddef/目錄下的 LD 定義檔中。

來看一下lddef/api01rv2.ld的開頭部分。

name	api01rv2;

bindapi	"patientgetv2"	"OpenCOBOL"	"ORAPI012R1V2";
bindapi	"acceptlstv2"	"OpenCOBOL"	"ORAPI011R1V2";
bindapi	"appointlstv2"	"OpenCOBOL"	"ORAPI014R1V2";
...

讀法很直接:LD 名稱對應 URL 的第1段,bindapi的第1個參數對應第2段,第3個參數則是負責處理的 COBOL 程式名稱。也就是說,發往/api01rv2/patientgetv2的請求,會被轉交給名為ORAPI012R1V2的 COBOL 程式。

GET /api01rv2/patientgetv2?id=患者編號lddef/api01rv2.ld參照bindapi定義XML回應對接系統電子病歷等日レセ伺服器MONTSUQIORAPI012R1V2.CBL患者基本情報取得PostgreSQL

LD 定義中除此之外,還宣告了用於組裝回應的一組 XML 紀錄(db "xml2" { ... }),以及一些值得留意的設定(如陣列大小等)。LD 檔可以當作「該模組所涉及的畫面・API・資料結構的目錄」來閱讀。

4. 發現:API 是「畫面業務的 API 版」── bindbindapi

瀏覽 LD 定義時,會立刻注意到一件事:同一份檔案中,bind(畫面)與bindapi(API)是共存的。來看一下患者查詢模組lddef/orca13.ld

name	orca13;

bind	"Q01"		"OpenCOBOL"	"ORCGQ01";     ← 患者查詢的對話畫面
bind	"Q02"		"OpenCOBOL"	"ORCGQ02";
...
bindapi "findv3"    "OpenCOBOL"	"ORCGQAPI01";  ← 該功能的API版
bindapi "findinfv3" "OpenCOBOL"	"ORCGQAPI02";
bindapi "foundv3"   "OpenCOBOL"	"ORCGQAPI03";

Q01等是醫療事務人員操作的患者查詢畫面所對應的程式,findv3等則是屬於同一模組的 API。程式名稱也是如此對應的:畫面為ORCGQ01,API 則在畫面系名稱中插入「API」字樣成為ORCGQAPI01

也就是說,日レセ API 並不是作為獨立的 API 伺服器設計出來的,而是在與對話畫面相同的業務程式基礎之上,按業務模組逐一增設了「用 XML 取代畫面進行對話的入口」。理解了這個結構之後,下面兩點就能自然地說得通。

  • 為什麼 URL 的第1段(orca13orca42……)源自畫面的業務編號,作為 API 來看,乍看之下像是毫無意義的數字
  • 為什麼「畫面上能做的業務,或許存在 API 版」這種探尋思路能夠成立──尋找未文件化 API,實際上更接近於把這些「畫面業務的 API 版」逐一列舉出來

5. 完整追蹤一支 API ── 解剖patientgetv2

在統計全貌之前,先把一支 API 從實作一路追蹤到回應的形態。選用的題材是最基本的患者基本資訊取得 /api01rv2/patientgetv2

(1) 分派:lddef/api01rv2.ld 中的 bindapi "patientgetv2" → ORAPI012R1V2。實體是 cobol/api01rv2/ORAPI012R1V2.CBL(2,163行)。COBOL 原始碼原則上放在與 LD 名稱相同的目錄下,因此只要能讀懂 lddef,幾乎可以機械式地定位到實作檔案(也有例外,例如orca51的 API 群的實體位於cobol/orca52/。最可靠的做法是用程式名稱來find)。

(2) 程式標頭:開頭寫著「コンポーネント名 : 患者基本情報取得(version2対応)」,緊接著的修改履歷,從2013年的地區協作ID因應,到2022年的電子處方箋因應,再到2024年的「以保險證核對資格有效性並回傳的因應」,這一支 API 所經歷過的制度修訂,就這樣排成了一份年表。比 API 規格書裡的「更新履歷」更加詳細。

(3) 讀取哪些資料:查看 WORKING-STORAGE SECTION 中的 COPY 語句(引入的共用定義),就能看出這支 API 觸及了哪些資料。摘錄如下:

COPY "CPPTINF.INC".          *> 患者基本情報(tbl_ptinf)
COPY "CPPTNUM.INC".          *> 患者番号
COPY "CPJYURRK.INC".         *> 受療履歴
COPY "CPPTCARE-HKNINF.INC".  *> 介護保険情報
COPY "CPPTMYNUMBER.INC".     *> 患者個人番号
COPY "CPONSHI-KAKU.INC".     *> オンライン資格確認結果
COPY "CPPATIENTXMLV2RES.INC" *> レスポンス編集用

一支只用來回傳單一患者資訊的 API,竟引入了從介護保險、My Number 到線上資格確認在內近30個定義。這正是「患者基本資訊」的含義隨著制度不斷膨脹的實物證據。

(4) 回應的形態:回應 XML 的結構宣告在 record/xml_patientinfov2res.db 中。

xml_patientinfov2res {
    patientinfores {
        Api_Result          varchar(2);
        Patient_Information {
            Patient_ID          varchar(20);
            WholeName           varchar(100);
            WholeName_inKana    varchar(100);
            BirthDate           varchar(10);
            Sex                 varchar(1);
            Home_Address_Information {
                Address_ZipCode varchar(07);
                ...

用過日レセ API 的人應該會覺得眼熟。API 回應中的 XML 標籤名稱(Patient_IDWholeName……),直接沿用了這份 record 定義中的項目名稱。 也就是說,官方 XML 規格書中所寫項目表的「原本」就在這裡。由於連項目的大小(位數)都寫明了,也可以作為串接方設計驗證規則的第一手資訊來使用。

這(1)→(4)就是解剖一支日レセ API 的標準流程範本。用 lddef 確定程式,用標頭掌握功能與歷史,用 COPY 語句掌握所涉及的資料,用 record 確定報文結構──即使不深入閱讀 COBOL 本體的邏輯,到這一步為止,實務所需的資訊已經大致齊備。

6. 統計全部端點 ── 一條 grep 命令搞定的調查步驟

弄清楚原理之後,統計全貌就只是機械作業了。

# 列舉出全部「端點 → COBOL程式」對應關係
grep -H '^[[:space:]]*bindapi' lddef/*.ld

# 依模組統計件數
for f in lddef/*.ld; do
  n=$(grep -c '^[[:space:]]*bindapi' "$f"); [ "$n" -gt 0 ] && echo "$f: $n"
done

# 從COBOL標頭機械擷取每個端點的功能名稱
# (原始碼是EUC-JP編碼,因此要透過iconv轉換。程式的存放位置
#  存在與LD名稱不一致的例外,因此用find來確定)
for ld in lddef/*.ld; do
  mod=$(basename "$ld" .ld)
  grep '^[[:space:]]*bindapi' "$ld" | sed 's/"//g; s/;//' \
  | while read -r _ ep _ prog; do
      cbl=$(find cobol -name "$prog.CBL" | head -1)
      comp=$(iconv -f EUC-JP -t UTF-8 "$cbl" 2>/dev/null \
             | grep -m1 'コンポーネント名' \
             | sed 's/.*コンポーネント名[[:space:]]*[::][[:space:]]*//')
      printf '%s\t%s\t%s\t%s\n' "$mod" "$ep" "$prog" "$comp"
    done
done

第3段指令碼比較長,這裡把管道每一段在做什麼拆解一下。

  1. grep '^[[:space:]]*bindapi' "$ld" ── 從 LD 定義中只取出 API 宣告的行
  2. sed 's/"//g; s/;//' ── 去掉雙引號和行尾分號,變成以空白分隔的4個詞(bindapi / 端點名稱 / OpenCOBOL / 程式名稱)
  3. while read -r _ ep _ prog ── 捨棄第1個和第3個詞,只接收端點名稱和程式名稱
  4. find cobol -name "$prog.CBL" ── 尋找程式的實體檔案。由於存在 LD 名稱與目錄名稱不一致的例外,所以路徑不能寫死
  5. iconv -f EUC-JP -t UTF-8 ── 由於 COBOL 原始碼是 EUC-JP 編碼,為了能讀到日文的標頭註解而進行轉換
  6. grep -m1 'コンポーネント名' | sed … ── 只擷取標頭中「コンポーネント名」(組件名稱)這一行的第1筆,取出冒號之後的部分(功能名稱)

執行之後,會以 Tab 分隔,排列出「模組 / 端點 / 程式 / 功能名稱」這4欄。前6行如下所示。

api01rv2	patientgetv2	ORAPI012R1V2	患者基本情報取得
api01rv2	acceptlstv2	ORAPI011R1V2	受付一覧
api01rv2	appointlstv2	ORAPI014R1V2	予約一覧  (xml2)
api01rv2	patientlst1v2	ORAPI012R2V2	患者番号一覧取得処理
api01rv2	patientlst2v2	ORAPI012R3V2	患者情報一覧取得
api01rv2	patientlst3v2	ORAPI012R4V2	患者情報一覧取得(氏名指定)

整體一共有137行。第3行「予約一覧 (xml2)」中出現的重複空白,以及全形和半形括號混用的情況,都是因為直接照搬了標頭記載的原始內容。把這份輸出整理之後,就是附錄中的對應表,那裡同樣表記原文照錄(第13章)。

本版本的統計結果如下(全部137筆的詳細清單見附錄)。

LD 定義(=URL 第1段) 件數 業務領域
api01rv2 52 讀取類全般(患者・掛號・預約・診療・住院・報表資料)
api21 16 診療行為的登記・檢查・刪除(門診/住院)
orca51 12 主檔・患者資料的批次回傳(病名・點數・地址等)
orca14 10 預約登記+線上資格確認(My Number保險證)系
orca12 8 患者資訊的登記・更新(基本/保險/職災/介護……)
orca71 8 線上資格確認的附加系(OCR 影像・醫療扶助等)
orca31 4 入退院登記・住院會計
orca13 / orca22 / orca42 / orca44 各2〜3 患者查詢 / 病名登記 / 診療報酬明細書製作・列印 / 診療報酬明細書電子資料製作
其他(掛號・收款・報表列印・使用者管理・登入等) 剩餘
合計(27個模組) 137

讀取類(api01rv2)約占4成,相對地,更新類則按業務模組(患者=orca12、掛號=orca11、診療行為=api21……)各自分開。第4章所說的「畫面業務的 API 版」這一結構,也原樣體現在這個分布上。

另外還值得關注的一點是,其中混雜著一些與其說是業務 API,不如說更接近基礎功能 API的存在,例如session模組的session_start(登入驗證)、orca00print(列印)。無論把官方規格書的一覽表看幾遍,都不會注意到這一層的存在。

各端點的詳細資訊參見附錄的全137筆對應表。先從上表的件數把目標模組的範圍鎖定,再依模組名稱在附錄中查找,是最基本的查找方法。

7. 與官方一覽表對照 ── 一覽表中沒有的 API 範例

接下來,把官網「日医標準レセプトソフトAPI仕様」一覽頁面上刊載的 API(約50個),與從原始碼中擷取出的137個進行對照。結果會發現,一覽頁面上沒有列出的端點,在原始碼一側大量實際存在。以下按功能領域各舉一例(功能名稱皆已透過 COBOL 標頭的「コンポーネント名」確認)。

領域 端點範例 負責程式 標頭記載的功能
患者搜尋 /orca13/findv3 ORCGQAPI01 患者照会
診療報酬明細書業務 /orca42/receiptmakev3 ORAPI042R1V3 レセプト作成(xml2)
診療報酬明細書業務 /orca44/receiptdatamakev3 ORAPI044R1V3 レセ電データ作成(xml2)
點檢業務 /orca41/datacheckv3 ORCGDAPI01 データチェック
請款管理 /orca43/claimedmanagementv3 ORAPI043R1V3 請求管理登録
基礎 /session/session_start ORCGSESSTART ログイン認証

也就是說,不只是掛號、患者資訊這類日常串接,就連按月進行的診療報酬明細書業務(製作→點檢→輸出診療報酬明細書電子資料→請款管理),也存在可從外部驅動的 API 群實作。這是只了解電子病歷串接就無法看到的一層。

這裡有兩點需要特別注意。

  1. 不要草率地斷定「一覽表中沒有=未文件化」。 例如報表資料取得(formdatagetv2)這樣的 API,就已經在 PushAPI 一側的文件中被記載,一覽頁面並不保證涵蓋全部 API。應當在確認過各自的文件頁面乃至站內搜尋之後,才能說「找不到相關文件」(上表就是經過這樣確認後的結果,但即便如此,也無法完全證明「不存在已公開的文件」)。
  2. 第三方實作同樣可以作為對照材料。 像是用 Ruby 呼叫日レセ API 的orca-api 函式庫這樣的開放原始碼軟體,作為一份在實務中曾被使用過的端點目錄,也很有參考價值。

8. 從原始碼推導未文件化 API 的規格 ── 以findv3為例

即使弄清楚了「存在一覽表中沒有的 API」,如果不知道請求的格式,調查也無從下手。這時第5章的範本就派上用場了。下面就以findv3(患者照会)來試一下。

請求結構位於record/xml_findv3req.db中(節錄)。

xml_findv3req {
  findv3req {
    Request_Number               varchar(2);
    Patient_Information {
      BirthDate    { First varchar(10); Last varchar(10); };
      Sex                        varchar(1);
      LastVisit_Date { First varchar(10); Last varchar(10); };
      Doctor_Code                varchar(05);
      Department_Code            varchar(2);
      Death_Class                varchar(1);
      Patient_ID   { First varchar(20); Last varchar(20); };
      TestPatient_Class          varchar(1);
      WholeName                  varchar(100)[5];
      ...

僅透過閱讀這份定義就能看出,這是一支可以組合出生日期範圍・性別・最後回診日範圍・主治醫師・診療科・死亡區分・患者編號範圍・姓名(可指定多個)等條件的、相當高機能的患者檢索 API。官方一覽表中列出的患者檢索類 API(patientlst1v2等)大多以患者編號範圍或姓名等單一功能的檢索為主,相較之下,這支能實現與畫面端患者查詢同等複合條件檢索的 API,在功能層面明顯是它們的上位相容版本。

回應結構同樣位於record/xml_findv3res.db中,只要閱讀對應的 COBOL(ORCGQAPI01.CBL),還能確認更細緻的行為(如件數上限、排序方式等)。在原始碼公開的 ORCA 中,「未文件化 API」其實就是「可以自己寫出文件的 API」

如此推導出來的規格,在正式環境中究竟可以信任到什麼程度──這是下一章的主題。

9. 用版本間 diff 實測 API 的變化 ── 5.1系列 vs 5.2系列

在討論未文件化 API 的風險之前,先來實測一下「API 到底會變化到什麼程度」。將同日公開的5.1系列快照與bindapi定義進行 diff,結果如下:

比較項目 結果
5.1系列的端點總數 128
5.2系列的端點總數 137
5.2系列新增 9個
5.2系列刪除 0個

新增的9個明細為:線上資格確認相關6個(onlinequa10onlinequa11onlinequaapp13onlineaidlstreq1)、患者備註登記(patientmemomodv2)、輸入代碼批次回傳(inputcodelstv3)、輸入・診療代碼資訊取得(medicationgetv2),合計9個。可以清楚看到,制度因應(圍繞 My Number 保險證的相關制度)以 API 增設的形式體現了出來

從這個觀察中可以得出以下兩點:

  • 端點的「面」是穩定的(這兩個系列之間刪除數為零)。應當擔心的不是端點消失,而是個別 API 的項目增加・行為變化(如第5章中所見的修改履歷那樣的變化)。
  • 由於原始碼每月都會公開,這類變更偵測是可以自動化的。如果正在維護串接系統,只需對月度快照中的lddefrecord進行 diff,就能構成一張預警網,及早掌握下個月版本升級會帶來哪些變化。這是原始碼公開才特有的、其他收費電腦難以獲得的維護手段。

10. 如何與未文件化 API 相處 ── 「文件化」並非保證

首先要把前提釐清。日醫開放原始碼使用授權合約在第2章第5條中,針對「能否無障礙運作」以及「是否存在瑕疵」等,將整個程式聲明為不提供任何保證。這一點同樣適用於已文件化的 API。關於相容性,官方文件中也並沒有明文規定承諾「不改變」已文件化的 API,實際上正如第5章所見,即便是已文件化 API 的代表patientgetv2,也在每次制度因應時不斷被追加項目。

也就是說,「文件化/未文件化」之間的差異,並不在於有沒有保證。歸根結底,實質性的差異只有以下兩點:

  1. 變更是否容易以官方文件更新的形式體現出來(未文件化 API 的變更,除非閱讀原始碼,否則無從得知)
  2. 是否容易被納入與支援業者溝通的議題

而 ORCA 的原始碼是每月都會公開的。第1點的差異,可以透過對原始碼進行 diff 監控來彌補。原始碼才是第一手規格,文件不過是它的摘譯──面對開放原始碼軟體應有的正確態度正是如此。當文件與原始碼出現分歧時,實際運作的是原始碼那一方。

在此基礎上,既然經手的是與金錢直接掛鉤的診療報酬申報系統,那麼無論是否已文件化,納入正式流程的 API 都應當配套實施以下運維措施。

應做的事 目的
版本的固定與記錄(取得日期・SHA-256・與運行中套件的對應關係) 讓調查・驗證結果隨時都能重現。在支援業者帶有獨家修補的環境中,也要確認與公開原始碼之間的差異
月度快照的 diff 監控(lddef/record+所使用 API 對應的 COBOL) 及早偵測變更。介面的變更會體現在lddef/record中,行為的變更會體現在 COBOL 一側。由於未文件化 API 的變更不會出現在官方文件中,原始碼 diff 實際上就成了偵測手段
在版本升級流程中納入驗證環境的回歸確認 防止在改版當月「悄悄壞掉」
未文件化 API 要自行整理 API 文件並持續維護 把第8章方法推導出的規格,沉澱為團隊的資產
提前與支援業者共享使用配置 加快故障發生時的問題定位

有一點運維上的注意事項。公開快照的內容是上月1日時點的狀態,因此如果先把套件更新套用到正式環境,那麼能夠讀到對應原始碼的時間點,就會落在套用之後。要讓這項監控真正發揮預警作用,就必須把順序顛倒過來──等到對應的原始碼公開並完成驗證之後,再進行版本升級

反過來說,無法建立起這套運維體系的組織,即便只使用已文件化的 API,也談不上安全。把不提供任何保證的開放原始碼軟體用作業務核心系統,意味著的就是這麼一回事。

11. 深入追查時的實務筆記

在用原始碼深入追查單一 API 這個階段,容易碰壁的一些細節。

  • 文字編碼是 EUC-JP。 COBOL 原始碼及註解均為 EUC-JP 編碼,因此要先透過iconv -f EUC-JP -t UTF-8轉換之後再閱讀。授權文件(doc/license.html)則是 ISO-2022-JP 編碼。grep 如果不經過iconv轉換,也無法用日文關鍵字命中。
  • 記住程式名稱的命名規則會更快。 API 系的基本形式是ORAPI+業務編號+R(參照)/S(更新)+版本(V2/V3),畫面系的 API 版則是ORCG〜API〜。COBOL 原始碼原則上位於cobol/<LD名>/目錄下,但存在例外(orca51的 API 實體在cobol/orca52/),遇到不確定的情況就用程式名稱來find
  • 入口分為 GET 系與 POST+XML 系兩種。 LD 定義的db "xml2"區塊中,沒有請求用紀錄(〜req)的 API(例如patientgetv2)大致可判斷為 GET 參數型,有的則是 POST+XML 型。最終確認要看 COBOL 一側的輸入處理。
  • 資料項目的含義要透過record/與官方資料表定義書對照確認。 回應項目的「原本」在record/*.db中,資料庫一側的含義則在官方公開的資料表定義書中。兩者並排對照,準確度會更高。另外要注意,部分定義還並存有面向 WebORCA 的.db.weborca版本,其陣列上限等會有所不同(例如xml_acceptlstv2res從1,000筆變為1,500筆)。在設計 WebORCA 串接時,需要確認該版本。
  • 動作確認應在驗證環境中進行。 利用官方的試用伺服器,或社群提供的 Docker 環境,無需觸碰實體收費電腦機台,就能呼叫 API 進行確認。切忌在正式機上進行「試打」。

12. 總結

  • 日レセ API 的全貌彙集在lddef/*.ldbindapi定義中,僅用 grep 就能列舉出137個端點(5.2系列・2026年7月版)
  • 日レセ API 的真面目是「畫面業務的 API 版」bind(畫面)與bindapi(API)共存於同一份 LD 定義中,URL 的模組名稱源自畫面的業務編號。
  • 一支 API 可以按lddef(分派)→COBOL 標頭(功能・歷史)→COPY 語句(涉及的資料)→record/*.db(XML 結構的原本)這樣的順序解剖。XML 標籤名稱就是record定義中的項目名稱本身
  • 官方一覽表(約50個)與原始碼(137個)之間的差異中,包含了診療報酬明細書製作・診療報酬明細書電子資料製作・資料檢查這類能夠驅動月度業務的 API 群。不過不能草率地斷定「一覽表中沒有=未文件化」,需要逐一驗證。
  • 與5.1系列的 diff 實測顯示:新增9個(以線上資格確認相關為主)・刪除0個。月度快照的 diff,可以作為串接維護的預警網來使用。
  • 使用授權合約明確表示,包括已文件化 API 在內均不提供保證,「文件化=安全」並不成立。原始碼才是第一手規格。無論文件化與否,只要在正式環境中使用,就應當把版本固定・月度 diff 監控・回歸確認・自有文件的完善配套實施。

不從規格書入手、而是從原始碼入手,這次所用的順序,並不局限於 ORCA,而是適用於所有「文件跟不上實作的長壽命業務系統」的通用調查方法。所幸 ORCA 的原始碼是公開的,這使得這種方法既合法,又能每月保持最新狀態地加以實踐。

13. 附錄:全137個端點對應表(5.2系列・2026年7月版)

這是從lddef/*.ldbindapi定義中機械擷取出的全部端點。功能名稱均直接轉錄自各 COBOL 程式標頭的「コンポーネント名」欄(用詞不一致、全形括號、疑似筆誤的拼寫,均照原文保留。諸如「請求額シュミレーション」「medicatonmodv2」之類,並非本公司轉錄時的失誤)。本表是對2026年7月1日時點5.2系列快照這一事實的記錄,並不代表各端點的可用性或支援狀況。

表格按模組(URL 第1段)順序排列。要查找目標 API 時,按下面的順序縮小範圍會更快。在瀏覽器中用頁內搜尋(Ctrl+F)輸入模組名稱,即可跳到該模組所在段落的開頭。

想找的內容 查看的模組
想取得資訊(患者・掛號・預約・診療・住院・報表資料) /api01rv2/
想登記・檢查・刪除診療行為 /api21/
想批次取得主檔或患者資料 /orca51/
想登記・更新患者資訊 /orca12/
線上資格確認(My Number保險證)相關 /orca14//orca71/
月度診療報酬明細書業務(點檢・製作・列印・電子資料・請款管理) /orca41//orca42//orca43//orca44/
入退院・住院會計 /orca31//orca32//orca36/
登入、列印等基礎功能 /session//orca00/
URL COBOL 程式 標頭記載的功能
/api01rv2/patientgetv2 ORAPI012R1V2 患者基本情報取得
/api01rv2/acceptlstv2 ORAPI011R1V2 受付一覧
/api01rv2/appointlstv2 ORAPI014R1V2 予約一覧 (xml2)
/api01rv2/patientlst1v2 ORAPI012R2V2 患者番号一覧取得処理
/api01rv2/patientlst2v2 ORAPI012R3V2 患者情報一覧取得
/api01rv2/patientlst3v2 ORAPI012R4V2 患者情報一覧取得(氏名指定)
/api01rv2/system01lstv2 ORAPI101R1V2 システム管理 診療科・ドクター一覧取得処理
/api01rv2/medicalgetv2 ORAPI021R1V2 診療行為返却1 (xml2)
/api01rv2/diseasegetv2 ORAPI022R1V2 患者病名返却
/api01rv2/appointlst2v2 ORAPI014R2V2 患者予約状況 (xml2)
/api01rv2/acsimulatev2 ORAPI023R1V2 請求額シュミレーション
/api01rv2/visitptlstv2 ORAPI021R2V2 来院患者一覧 (xml2)
/api01rv2/hsconfbasev2 ORAPI031RC1V2 入院基本情報取得
/api01rv2/hsconfwardv2 ORAPI031RC2V2 入院病棟情報取得
/api01rv2/tmedicalgetv2 ORAPI021R3V2 中途データ一覧 (xml2)
/api01rv2/hsmealv2 ORAPI032R1V2 入院食事情報取得
/api01rv2/insprogetv2 ORAPI105R1V2 保険者マスタ一覧 (xml2)
/api01rv2/hsptevalv2 ORAPI032R2V2 入院医療区分・ADL点数情報取得
/api01rv2/hsptinfv2 ORAPI031R1V2 入院患者基本取得
/api01rv2/hsacsimulatev2 ORAPI034R1V2 退院仮計算
/api01rv2/incomeinfv2 ORAPI023R2V2 収納情報取得
/api01rv2/systeminfv2 ORAPI000R1V2 システム情報取得
/api01rv2/insuranceinf1v2 ORAPI012R5V2 保険番号マスタ(保険公費の種類)、補助区分取得
/api01rv2/receiptinf1v2 ORAPI042R1V2 レセプト情報(レセプトの枚数、点数)取得
/api01rv2/claimfrontv2 ORAPICLAIMR1V2 CLAIM受付送信(xml2)
/api01rv2/claimaccountv2 ORAPICLAIMR2V2 CLAIM請求確認送信(xml2)
/api01rv2/formdatagetv2 ORAPI001R1V2 帳票データ取得
/api01rv2/contraindicationcheckv2 ORAPI021R4V2 併用禁忌薬剤情報返却 (xml2)
/api01rv2/okusurigetv2 ORAPIRELR1V2 患者お薬手帳情報 (xml2)
/api01rv2/okusuriputv2 ORAPIRELR2V2 患者お薬手帳情報 (xml2)
/api01rv2/imagegetv2 ORAPI000R2V2 画像データ取得
/api01rv2/patientlst6v2 ORAPI012R6V2 患者 保険組合せ取得
/api01rv2/prescriptionv2 ORAPI001R2V2 処方箋印刷
/api01rv2/medicinenotebookv2 ORAPI001R3V2 お薬手帳印刷
/api01rv2/subjectiveslstv2 ORAPI025R1V2 症状詳記情報取得(取得) (xml2)
/api01rv2/system01dailyv2 ORAPI101R2V2 システム管理 患者登録・診療行為設定情報取得
/api01rv2/pusheventgetv2 ORAPI000R3V2 Push通知取得
/api01rv2/apiversiongetv2 ORAPI000R4V2 APIバージョン取得
/api01rv2/karteno1v2 ORAPI001R4V2 カルテ1号紙(外来)印刷
/api01rv2/karteno1hv2 ORAPI001R5V2 カルテ1号紙(入院)印刷
/api01rv2/karteno3v2 ORAPI001R6V2 カルテ3号紙(外来)印刷
/api01rv2/karteno3hv2 ORAPI001R7V2 カルテ3号紙(入院)印刷
/api01rv2/patientlst7v2 ORAPI012R7V2 患者 メモ内容取得
/api01rv2/invoicereceiptv2 ORAPI001R8V2 外来請求書兼領収書
/api01rv2/statementv2 ORAPI001R9V2 外来診療費明細書
/api01rv2/invoicereceipthv2 ORAPI001R10V2 入院請求書兼領収書
/api01rv2/statementhv2 ORAPI001R11V2 入院診療費明細書
/api01rv2/onlinedruggetv2 ORAPIONSHIR1V2 API 資格確認薬剤情報取得処理
/api01rv2/onlinespecgetv2 ORAPIONSHIR2V2 API 資格確認特定検診情報取得処理
/api01rv2/patientlst8v2 ORAPI012R8V2 旧姓履歴情報情報取得
/api01rv2/onlinemedgetv2 ORAPIONSHIR3V2 API 資格確認診療情報取得処理
/api01rv2/medicationgetv2 ORAPI102R1V2 入力・診療コード情報取得
/api21/medicalmodv2 ORAPI021S1V2 診療行為 登録 (xml2)
/api21/medicalmodv31 ORAPI021S1V3 診療行為 診察料返却 (入力一体化)
/api21/medicalmodv32 ORAPI021S2V3 診療行為 診療内容チェック (入力一体化)
/api21/medicalmodv33 ORAPI021S3V3 診療行為 診療行為登録 (入力一体化)
/api21/medicalmodv34 ORAPI021S4V3 診療行為 削除 (入力一体化)
/api21/claimreceivev2 ORAPICLAIM21S1V2 CLAIM 診療行為 登録 (xml2)
/api21/medicalmodv35 ORAPI021S5V3 診療行為 リハビリ開始日・コメント登録
/api21/medicalmodv36 ORAPI021S6V3 診療行為 保険一括変更処理
/api21/tmedicalmodv2 ORAPI021S2V2 中途データ取得、削除 (xml2)
/api21/medicalmodv37 ORAPI021S7V3 排他制御 解除処理
/api21/medicalmodav31 ORAPI021NS1V3 入院診療行為 初期返却 (入力一体化)
/api21/medicalmodav32 ORAPI021NS2V3 入院診療行為 診療内容チェック
/api21/medicalmodav33 ORAPI021NS3V3 入院診療行為 診療行為登録 (入力一体化)
/api21/medicalmodav34 ORAPI021NS4V3 入院診療行為 削除 (入力一体化)
/api21/medicalmodv23 ORAPI021S3V2 初診算定日登録処理
/api21/medicalmodav35 ORAPI021NS5V3 入院診療行為 入院調剤料更新(入力一体化)
/orca00/print ORCGMPRT 印刷APIモジュール
/orca01/reprintv3 ORAPI001R1V3 再印刷取得 (xml2)
/orca02/jobmanagev3 ORAPI002R1V3 ジョブ一覧返却(xml2)
/orca06/patientmemomodv2 ORAPI006S1V2 患者メモ内容登録処理
/orca07/statisticsdatav3 ORAPI007R1V3 CSV出力選択画面(日次月次統計データ取得)
/orca101/manageusersv2 ORCGWAPI01 ユーザ管理
/orca102/medicatonmodv2 ORAPI102S1V2 ユーザ点数マスタ登録(xml)
/orca11/acceptmodv2 ORAPI011S1V2 受付登録 (xml2)
/orca12/patientmodv2 ORAPI012S1V2 患者基本情報設定(登録・削除)(xml2)
/orca12/patientmodv31 ORAPI012S1V3 患者基本情報設定(登録・削除)(V3)
/orca12/patientmodv32 ORAPI012S2V3 患者保険・公費情報設定(登録・削除)(V3)
/orca12/patientmodv33 ORAPI012S3V3 患者労災・自賠責設定(登録・削除)(V3)
/orca12/patientmodv34 ORAPI012S4V3 患者 所得者情報・特記事項・個別情報等設定
/orca12/patientmodv35 ORAPI012S5V3 患者 公費負担額情報等設定
/orca12/patientmodv36 ORAPI012S6V3 患者 介護保険情報・介護認定情報等設定
/orca12/patientmodv37 ORAPI012S7V3 患者 患者禁忌薬剤設定
/orca13/findv3 ORCGQAPI01 患者照会
/orca13/findinfv3 ORCGQAPI02 患者照会
/orca13/foundv3 ORCGQAPI03 患者照会(印刷)
/orca14/appointmodv2 ORAPI014S1V2 予約登録 (xml2)
/orca14/onlinequa1 ORAPION001R1V2 オンライン資格確認
/orca14/onlinequa2 ORAPION002R1V2 顔認証資格確認登録、更新処理
/orca14/onlinequa3 ORAPION003R1V2 保険証資格確認登録、更新処理
/orca14/onlinedrug1 ORAPION004R1V2 資格確認薬剤情報登録、更新処理
/orca14/onlinespec1 ORAPION005R1V2 資格確認特定検診登録、更新処理
/orca14/onlinerefall1 ORAPION006R1V2 照会番号一括登録
/orca14/onlinequa4 ORAPION007R1V2 公費確認登録、更新処理
/orca14/onlinequaapp1 ORAPION008R1V2 予約患者一括資格確認照会処理
/orca14/onlinequaapp2 ORAPION009R1V2 予約患者一括資格確認照会処理
/orca21/medicalsetv2 ORAPI021SETV2 診療行為 セット登録 (xml2)
/orca22/diseasev2 ORAPI022R1V3 患者病名登録(xml2)
/orca22/diseasev3 ORAPI022R2V3 患者病名登録(xml2)
/orca23/incomev3 ORCGSAPI01 収納(請求一覧)
/orca25/subjectivesv2 ORAPI025S1V2 症状詳記コメント登録 (xml2)
/orca31/hsptinfmodv2 ORCGI0API01 入院登録
/orca31/birthdeliveryv2 ORCGI0API02 出産育児一時金
/orca31/hsacctmodv2 ORCGI4API02 入院会計登録
/orca31/hspmmv2 ORCGI4API03 入院会計最終診療年月返却
/orca32/hsptevalmodv2 ORCGI4API01 医療区分・ADL点数登録
/orca36/hsfindv3 ORCGI2API01 入院患者照会
/orca41/datacheckv3 ORCGDAPI01 データチェック
/orca42/receiptmakev3 ORAPI042R1V3 レセプト作成(xml2)
/orca42/receiptprintv3 ORAPI042R2V3 レセプト印刷(xml2)
/orca42/unclaimedv3 ORAPI042R3V3 未請求設定
/orca43/claimedmanagementv3 ORAPI043R1V3 請求管理登録
/orca44/receiptdatamakev3 ORAPI044R1V3 レセ電データ作成(xml2)
/orca44/receiptdatacheckmakev3 ORAPI044R2V3 チェック用レセ電データ作成(xml2)
/orca44/receiptdatapatientmakev3 ORAPI044R3V3 個別レセ電データ作成(xml2)
/orca51/diseasemasterlstv3 ORAPI052R1V3 病名マスタ返却 (xml2)
/orca51/medicationmasterlstv3 ORAPI052R2V3 点数マスタ返却 (xml2)
/orca51/stock1v2 ORAPI052R3V3 在庫管理情報返却 (xml2)
/orca51/patientbasisallv3 ORAPI052R4V3 患者基本情報一括返却 (xml2)
/orca51/patientdiseaseallv3 ORAPI052R5V3 患者病名マスタ返却 (xml2)
/orca51/masterlastupdatev3 ORAPI052R6V3 マスタ最終更新日返却
/orca51/patientmedicalallv3 ORAPI052R7V3 患者診療行為一括返却 (xml2)
/orca51/addressmasterlstv3 ORAPI052R8V3 住所マスタ返却 (xml2)
/orca51/tempmedicaladdv3 ORAPI051R1V3 中途データ一括登録 (xml2)
/orca51/statisticsformv3 ORAPI051R2V3 日次月次統計一覧取得 (xml2)
/orca51/masterexportv3 ORAPI052R9V3 マスタ取得
/orca51/inputcodelstv3 ORAPI052R10V3 入力コード一括返却 (xml2)
/orca71/onshicond ORAPIONCONDR1V2 オンライン資格確認
/orca71/onlineimg1 ORAPION011R1V2 資格確認 保険証OCR画像登録処理
/orca71/onlinemedical1 ORAPION010R1V2 資格確認 診療情報登録、更新処理
/orca71/onlinemedical2 ORAPION012R1V2 資格確認 歯科診療情報登録、更新処理
/orca71/onlineaidlstreq1 ORAPION013R1V2 資格確認 医療扶助交付番号登録処理
/orca71/onlinequaapp3 ORAPION014R1V2 訪問診療患者一括資格確認照会処理
/orca71/onlinequa10 ORAPION015R1V2 医療費助成情報登録、更新処理
/orca71/onlinequa11 ORAPION016R1V2 訪問診療/オンライン診療登録登録、更新処理
/session/session_start ORCGSESSTART ログイン認証

14. 參考資料

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

日レセ API 的端點一共有多少個?
官網的 API 規格一覽頁面上刊載了約50個,但只要統計公開原始碼(5.2系列・2026年7月快照)中 LD 定義檔的內容,就會發現由 bindapi 統整起來的端點共有137個。差異之中也包含了像單據類這樣在其他頁面另行文件化的端點,因此不能直接斷定「一覽表中沒有=未文件化」,但透過統計原始碼一側,可以把 API 的全貌當作第一手資訊來掌握。本文附有全137個端點的對應表。
可以在正式環境中使用官方文件裡沒有記載的 API 嗎?
可以使用。因為 ORCA 的原始碼是公開的,可以把實作本身當作第一手規格來確認。使用授權合約本來就針對包含已文件化 API 在內的整個程式明確表示不提供保證,因此「文件化了就代表安全」這個前提本身才是錯的。與是否文件化相比,實質性的差異只有兩點:一是「變更是否容易體現在官方文件中」,二是「是否容易被納入與支援業者溝通的議題」。前者可以透過對月度公開原始碼進行 diff 監控來彌補,但後者(未文件化 API 很難成為支援對象這一點)依然存在。若要在正式環境中使用,請把版本固定、diff 監控、在驗證環境中進行回歸確認、完善自有文件、與支援業者共享使用配置這幾項配套實施。即便是使用已文件化的 API,原本也應該做到這些。
API 的請求與回應格式,也能從原始碼中得知嗎?
可以得知。日レセ 的 XML 請求・回應結構,以宣告式的方式寫在 record/ 目錄下的定義檔中(例如:record/xml_patientinfov2res.db),XML 標籤名稱直接沿用該定義中的項目名稱。即使是未文件化的 API,只要從 LD 定義中確定負責的程式,再閱讀對應的 record 定義,就能推導出請求・回應的全部項目。
即使不會讀 COBOL 也能調查嗎?
可以調查。如果只是想掌握端點的整體全貌,幾乎不需要讀懂 COBOL。LD 定義檔(lddef/*.ld)與資料結構定義(record/*.db)都是純文字,URL、程式與 XML 結構之間的對應關係都以宣告式方式寫明。只有到深入追蹤單一 API 內部行為的階段,才真正需要閱讀 COBOL,而僅憑程式標頭的註解(日文)與修改履歷,就已經能獲得大量資訊。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽