수정 이력(4건, 최종 수정 2026년 09월 03일)
이 글에 적용한 변경 사항의 기록입니다. 보관해 둔 수정 전 버전은 DOI가 부여된 고정 URL에서 읽을 수 있습니다.
- permalink·저자 표기·지식 맵 래퍼·깨진 내부 링크 등 CI가 지적한 표시용 수정을 반영했습니다. 본문의 기술적인 주장은 바꾸지 않았습니다.
- 글 맨앞에 「이 글의 지식 맵」 절을 추가했습니다. 본문에서 다루는 개념과 그 관계를 요약·그림·상세 페이지 링크로 정리한 것입니다. 본문의 주장은 바꾸지 않았습니다.
- 외부 리뷰(1283건) 대응으로 본문을 업데이트했습니다. 개별 변경 내용은 아래 이력을 참조하세요.
- 소스를 읽는 데 필요한 용어(MONTSUQI, LD 정의, bind/bindapi, 레코드 정의, xml2) 표를 추가했습니다. 더불어 직접 소스를 받아 읽기 시작할 때까지의 명령 예도 추가했습니다.
- 최초 공개
이 글을 인용하기(DOI(등록된 아카이브): 10.5281/zenodo.22174274)
아래 DOI는 이전에 등록된 아카이브를 가리키며 현재 본문과 다를 수 있습니다. 현재 본문을 참조할 때는 이 페이지의 URL을 사용하세요.
Go Komura (2026). 「닛레세 API의 전체 구조를 소스코드로 파악한다 ── ORCA의 공개 소스를 읽다(전 137개 엔드포인트 대응표 포함)」. 합동회사 코무라소프트. https://comcomponent.com/ko/blog/orca-api-source-reading/
- DOI(등록된 아카이브)
- 10.5281/zenodo.22174274
- DOI(마지막 등록 버전)
- 10.5281/zenodo.22174275
지난 글에서는 ORCA(일본의사회 표준 레셉트 소프트웨어)가 레세콘이라는 점, 그리고 20년 넘게 소스코드가 공개되어 왔다는 점을 정리했습니다.
이번에는 그 소스코드를 실제로 읽습니다. 주제는 닛레세 API의 전체 구조를 1차 정보에서 파악하는 것입니다. 공식 API 사양서를 위에서부터 읽는 대신,
- 서버에 실제로 있는 엔드포인트를 소스에서 모두 세고,
- API 하나를 구현부터 응답 XML 형태까지 따라가고,
- 공식 문서와 대조해 차이를 검증하고,
- 버전 간 diff로 API 변화를 실제로 측정한다
는 순서로 진행합니다. 글 끝에, 이 조사에서 얻은 전 137개 엔드포인트 대응표(URL·COBOL 프로그램·기능)를 실었습니다.
이 글의 조사 대상은 공식 공개된 닛레세 본체 5.2 계열 소스(2026년 7월 1일 공개 스냅샷)이며, 비교용으로 5.1 계열(같은 날 공개)도 사용합니다. 서술은 모두 이 두 버전에 근거하며, 재현에 필요한 명령은 본문에 적습니다.
대상 독자는 닛레세 API 연동을 앞으로 설계·구현할 개발자입니다. COBOL을 읽을 필요는 없습니다. 전체 구조를 파악할 때는 텍스트 grep과 iconv만 쓰고, 개별 API를 깊게 볼 때도 헤더 주석과 수정 이력이 중심입니다. 의료 사무 실무 지식도 전제로 하지 않습니다.
목차
- 먼저 결론
- 전제 ── 소스 입수와 버전 고정
- API 디스패치 구조 ── URL은
lddef로 정해진다 - 발견: API는 ‘화면 업무의 API 판’이다 ──
bind와bindapi - API 하나를 끝까지 따라간다 ──
patientgetv2해부 - 엔드포인트를 모두 센다 ── grep 한 번의 조사 절차
- 공식 목록과 대조한다 ── 목록에 없는 API의 예
- 문서화되지 않은 API의 사양을 소스에서 도출한다 ──
findv3예 - 버전 간 diff로 API 변화를 실측한다 ── 5.1 계열 vs 5.2 계열
- 문서화되지 않은 API를 다루는 법 ── ‘문서화’는 보증이 아니다
- 깊게 따라갈 때의 실무 메모
- 정리
- 부록: 전 137개 엔드포인트 대응표(5.2 계열·2026년 7월판)
- 참고 자료
그림의 실선은 항상 성립하는 관계, 점선은 조건이 붙는 관계입니다(성립 조건은 상세 페이지의 관계별 설명에 적혀 있습니다). 관계 전체 목록(총 20건, 근거와 확신도 포함)과 주요 개념의 정의는 지식 맵 상세 페이지에 정리되어 있습니다(일본어). 데이터: JSON-LD / Turtle
1. 먼저 결론
- 닛레세 API의 URL과 서버 측 프로그램의 대응은 소스의
lddef/*.ld(LD 정의 파일)에 선언적으로 적혀 있다. COBOL을 읽지 않아도 텍스트 grep만으로 API 전체를 나열할 수 있다. - 5.2 계열 스냅샷에서는 LD 정의 27개에 엔드포인트 137개가
bindapi로 묶여 있다. 공식 사이트의 API 사양 목록 페이지에 실린 것은 약 50건이며, 소스 쪽에는 그 두 배가 넘는 엔드포인트가 실제로 존재한다. - XML 요청·응답 구조는
record/*.db에 선언되어 있고, XML 태그 이름은 정의의 항목 이름이 그대로 쓰인다. 즉 문서화되지 않은 API라도lddef→cobol→record를 따라가면 사양을 도출할 수 있다. - 5.1 계열과 버전 간 diff를 내면 엔드포인트는 9건 추가·삭제 0건이다. 추가분은 온라인 자격 확인(마이나 보험증) 관련에 몰려 있어, “API는 제도 대응으로 늘어난다. 기존 것은(적어도 이 두 계열 사이에서는) 사라지지 않았다”는 점을 실측할 수 있다.
- 문서화되지 않은 API는 “쓰면 안 되는 API”가 아니다. ORCA는 오픈소스이며, 소스 자체를 1차 사양으로 다룰 수 있다. 문제는 약속의 유무가 아니라 “변경을 스스로 감지하는 운영을 갖출 수 있는가”이며, 그 판단의 틀을 10장에서 정리한다.
2. 전제 ── 소스 입수와 버전 고정
소스는 공식 기술 정보 페이지에서 tarball(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이며, 이 글에서 쓰는 것은 주로 다음 세 디렉터리입니다.
| 디렉터리 | 내용 | 이번 용도 |
|---|---|---|
lddef/ |
LD 정의(디스패치 표) .ld 파일 40개(그중 27개에 bindapi 정의) |
엔드포인트 전체 나열 |
cobol/ |
업무 로직(COBOL 1,754개·약 406만 행) | 각 API의 기능 확인·구현 독해 |
record/ |
데이터 구조 정의 약 1,240개(그중 XML 계열 274개) | 요청·응답 구조 도출 |
3. API 디스패치 구조 ── URL은 lddef로 정해진다
본론에 들어가기 전에, 이 장부터 쓰는 말을 정리해 둡니다. ORCA 고유의 표현이 대부분이지만, 외울 것은 다섯 개면 충분합니다.
| 용어 | 의미 |
|---|---|
| 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의 첫 번째 세그먼트, bindapi의 첫 번째 인수가 두 번째 세그먼트, 세 번째 인수가 처리를 담당하는 COBOL 프로그램 이름입니다. 즉 /api01rv2/patientgetv2로의 요청은 ORAPI012R1V2라는 COBOL 프로그램으로 넘어갑니다.
flowchart LR
C["연동 시스템<br/>전자 차트 등"] -->|"GET /api01rv2/patientgetv2?id=환자번호"| M["닛레세 서버<br/>MONTSUQI"]
M -->|"lddef/api01rv2.ld<br/>bindapi 정의를 참조"| P["ORAPI012R1V2.CBL<br/>환자 기본 정보 조회"]
P --> D[("PostgreSQL")]
P -->|"XML 응답"| C
LD 정의에는 이 밖에도, 응답을 조립할 때 쓰는 XML 레코드 군(db "xml2" { ... })이나, 알아 두면 편한 설정(배열 크기 등)도 선언되어 있습니다. LD 파일은 “그 모듈이 다루는 화면·API·데이터 구조의 목차”로 읽을 수 있습니다.
4. 발견: API는 ‘화면 업무의 API 판’이다 ── bind와 bindapi
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(화면)에 대해 ORCGQAPI01(API)처럼, 화면 쪽 이름 안에 API를 끼운 형태입니다.
즉 닛레세 API는 독립 API 서버로 설계된 것이 아니라, 대화 화면과 같은 업무 프로그램 기반 위에 “화면 대신 XML로 대화하는 입구”를 업무 모듈마다 더해 온 것입니다. 이 구조를 알면 다음 두 가지가 자연스럽게 이해됩니다.
- URL의 첫 번째 세그먼트(
orca13,orca42…)가 화면의 업무 번호에서 왔기 때문에, 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가 개호보험·마이넘버·온라인 자격 확인까지 정의 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_ID, WholeName…)은 이 record 정의의 항목 이름이 그대로 쓰입니다. 즉 공식 XML 사양서에 적힌 항목 표의 “원본”이 여기에 있다는 뜻입니다. 항목 크기(자릿수)까지 적혀 있으므로, 연동 측 밸리데이션 설계의 1차 정보로도 쓸 수 있습니다.
이 (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
세 번째 스크립트는 길어서, 파이프 각 단이 하는 일을 나눠 둡니다.
grep '^[[:space:]]*bindapi' "$ld"── LD 정의에서 API 선언 행만 꺼낸다sed 's/"//g; s/;//'── 큰따옴표와 행 끝 세미콜론을 떼고, 공백으로 나뉜 네 단어(bindapi/ 엔드포인트 이름 /OpenCOBOL/ 프로그램 이름)로 만든다while read -r _ ep _ prog── 첫째·셋째 단어는 버리고, 엔드포인트 이름과 프로그램 이름만 받는다find cobol -name "$prog.CBL"── 프로그램 실체를 찾는다. LD 이름과 디렉터리 이름이 일치하지 않는 예외가 있으므로 경로를 고정하지 않는다iconv -f EUC-JP -t UTF-8── COBOL 소스는 EUC-JP이므로, 일본어 헤더 주석을 읽으려면 변환한다grep -m1 'コンポーネント名' | sed …── 헤더의 “コンポーネント名” 행을 한 건만 집어, 콜론 뒤(기능 이름)를 꺼낸다
실행하면 탭 구분으로 “모듈 / 엔드포인트 / 프로그램 / 기능 이름” 네 열이 나옵니다. 앞 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 첫 번째 세그먼트) | 건수 | 업무 영역 |
|---|---|---|
api01rv2 |
52 | 조회계 전반(환자·접수·예약·진료·입원·서식 데이터) |
api21 |
16 | 진료 행위의 등록·체크·삭제(외래/입원) |
orca51 |
12 | 마스터·환자 데이터의 일괄 반환(병명·점수·주소 등) |
orca14 |
10 | 예약 등록+온라인 자격 확인(마이나 보험증) 계열 |
orca12 |
8 | 환자 정보의 등록·갱신(기본/보험/노재/개호…) |
orca71 |
8 | 온라인 자격 확인의 추가 계열(OCR 이미지·의료 부조 등) |
orca31 |
4 | 입퇴원 등록·입원 회계 |
orca13 / orca22 / orca42 / orca44 |
각 2〜3 | 환자 조회 / 병명 등록 / 레셉트 작성·인쇄 / 레세덴 데이터 작성 |
| 기타(접수·수납·서식 인쇄·사용자 관리·로그인 등) | 나머지 | ─ |
| 합계(27모듈) | 137 | ─ |
조회계(api01rv2)에 약 40%가 모이는 한편, 갱신계는 업무 모듈 단위(환자=orca12, 접수=orca11, 진료 행위=api21…)로 나뉩니다. 4장의 “화면 업무의 API 판”이라는 구조가 이 분포에도 그대로 나타납니다.
하나 더 눈에 띄는 것은 session 모듈의 session_start(로그인 인증)나 orca00의 print(인쇄)처럼, 업무 API라기보다 기반 기능 API가 섞여 있다는 점입니다. 공식 사양서 목록만 아무리 봐도 이 계층의 존재에는 깨닫지 못합니다.
개별 엔드포인트는 부록의 전 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 군이 구현으로 존재한다는 것입니다. 전자 차트 연동만 알면 보이지 않는 계층입니다.
여기서 중요한 주의가 두 가지 있습니다.
- “목록에 없다 = 문서화되지 않았다”고 바로 단정하지 말 것. 예를 들어 서식 데이터 취득(
formdatagetv2)처럼 PushAPI 쪽 문서에서 문서화된 API도 있고, 목록 페이지는 전 API의 망라를 보장하지 않습니다. 개별 문서 페이지나 사이트 내 검색까지 확인한 뒤에 “문서를 찾지 못했다”고 말해야 합니다(위 표는 그 확인을 한 결과이지만, 그래도 “공개된 문서가 존재하지 않는다”는 완전한 증명은 되지 않습니다). - 서드파티 구현도 대조 재료가 된다. 닛레세 API를 Ruby에서 쓰는 orca-api 라이브러리 같은 OSS는, 실무에서 써 온 엔드포인트 카탈로그로 참고가 됩니다.
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)을 읽으면 세부 동작(건수 상한이나 정렬 순서 등)도 확인할 수 있습니다. “문서화되지 않은 API”는, 소스가 공개된 ORCA에서는 “스스로 문서를 만들 수 있는 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건(onlinequa10·onlinequa11·onlinequaapp1〜3·onlineaidlstreq1), 환자 메모 등록(patientmemomodv2), 입력 코드 일괄 반환(inputcodelstv3), 입력·진료 코드 정보 조회(medicationgetv2)로 합계 9건입니다. 제도 대응(마이나 보험증 주변)이 API 증설로 나타나 있다는 점이 분명합니다.
이 관찰에서 말할 수 있는 것은 다음 두 가지입니다.
- 엔드포인트의 “면”은 안정적이다(이 두 계열 사이에서 삭제 제로). 두려워할 것은 소멸보다 개별 API의 항목 추가·동작 변경(5장에서 본 수정 이력 같은 변화)이다.
- 소스가 매월 공개되므로 이런 변경 감지는 자동화할 수 있다. 연동 시스템을 보수하고 있다면, 월차 스냅샷의
lddef와record를 diff하는 것만으로 다음 달 버전 업에서 무엇이 바뀌는지의 조기 경보망이 됩니다. 소스 공개가 아니면 얻기 어려운, 다른 레세콘에서는 갖기 힘든 보수 수단입니다.
10. 문서화되지 않은 API를 다루는 법 ── ‘문서화’는 보증이 아니다
먼저 전제를 바로잡습니다. 일본의사회 오픈소스 사용 허락 계약은 제2장 제5조에서, 지장 없이 동작한다거나 하자가 없다는 점에 대해 프로그램 전체를 무보증으로 두고 있습니다. 이는 문서화된 API에도 똑같이 적용됩니다. 호환성에 대해서도, 문서화 API를 “바꾸지 않는다”고 약속하는 명문의 규정이 공식 문서에 있는 것은 아니며, 실제로 5장에서 본 대로 문서화 API의 대표인 patientgetv2조차 제도 대응마다 항목이 계속 추가되어 왔습니다.
즉 “문서화 여부”의 차이는 보증의 유무가 아닙니다. 실질적 차이를 압축하면 다음 두 가지뿐입니다.
- 변경이 공식 문서 갱신으로 나타나기 쉬운가(문서화되지 않은 API의 변경은 소스를 읽지 않으면 보이지 않는다)
- 지원 사업자와 대화할 때 안건으로 올리기 쉬운가
그리고 ORCA는 소스가 매월 공개됩니다. 1번 차이는 소스 diff 감시로 메울 수 있습니다. 소스야말로 1차 사양이고, 문서는 그 발췌 번역에 지나지 않는다 ── 오픈소스에 대한 올바른 태도는 이쪽입니다. 문서와 소스가 어긋날 때, 실제로 움직이는 것은 소스 쪽입니다.
그 위에서, 레셉트 청구라는 금전에 직결되는 시스템을 다루는 이상, 문서화 여부와 관계없이 프로덕션 흐름에 넣는 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, DB 쪽 의미는 공식 공개의 테이블 정의서. 둘을 나란히 두면 확실도가 올라간다. 일부 정의에는 WebORCA용.db.weborca판이 함께 있고, 배열 상한 등이 다르다(예:xml_acceptlstv2res는 1,000건→1,500건). WebORCA 연동 설계에서는 그쪽을 확인한다. - 동작 확인은 검증 환경에서. 공식 체험 서버나 커뮤니티의 Docker 환경을 쓰면, 실기 레세콘에 손대지 않고 API를 호출해 확인할 수 있다. 프로덕션 기기에서의 “시험 호출”은 금지.
12. 정리
- 닛레세 API의 전체 구조는
lddef/*.ld의bindapi정의에 모여 있으며, 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를 포함해 무보증을 명시하고 있으며, “문서화 = 안전”이 아니다. 소스야말로 1차 사양이다. 문서화 여부를 가리지 않고, 프로덕션에서 쓴다면 버전 고정·월차 diff 감시·회귀 확인·자체 문서 정비를 세트로 둔다.
사양서부터 들어가지 않고 소스부터 들어간다는 이번 순서는, ORCA에 한정하지 않고 “문서가 구현을 따라가지 못하는 장수 업무 시스템” 전반에서 쓸 수 있는 조사 기법입니다. 다행히 ORCA는 소스가 공개되어 있어, 이 기법을 합법적으로, 게다가 매월 최신 상태로 실천할 수 있습니다.
13. 부록: 전 137개 엔드포인트 대응표(5.2 계열·2026년 7월판)
lddef/*.ld의 bindapi 정의에서 기계 추출한 전체 엔드포인트입니다. 기능 이름은 각 COBOL 프로그램 헤더의 “コンポーネント名” 란을 그대로 옮겼습니다(표기 흔들림·전각 괄호·오기로 보이는 철자도 모두 원문 그대로입니다. “請求額シュミレーション”, “medicatonmodv2” 등은 당사가 옮겨 적으며 틀린 것이 아닙니다). 이 표는 2026년 7월 1일 시점 5.2 계열 스냅샷의 사실 기록이며, 각 엔드포인트의 이용 가능 여부·지원 상황을 나타내는 것이 아닙니다.
표는 모듈(URL의 첫 번째 세그먼트) 순으로 늘어놓았습니다. 목적 API를 찾을 때는 다음 순으로 좁히면 빨리 도착합니다. 브라우저의 페이지 내 검색(Ctrl+F)에 모듈 이름을 넣으면 그 덩어리의 선두로 건너뜁니다.
| 찾는 것 | 볼 모듈 |
|---|---|
| 정보를 조회하고 싶다(환자·접수·예약·진료·입원·서식 데이터) | /api01rv2/ |
| 진료 행위를 등록·체크·삭제하고 싶다 | /api21/ |
| 마스터나 환자 데이터를 일괄로 받고 싶다 | /orca51/ |
| 환자 정보를 등록·갱신하고 싶다 | /orca12/ |
| 온라인 자격 확인(마이나 보험증) 주변 | /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. 참고 자료
- 기술 정보 - 日医標準レセプトソフト - ORCA Project(소스코드 공개)
- 日医標準レセプトソフトAPI仕様 - ORCA Project
- 日医標準レセプトソフトAPI - ORCA Project
- orca-api: 日医標準レセプトソフトAPI의 Ruby 라이브러리(GitHub)
- 닛레세 본체 5.2 계열·5.1 계열 소스코드(모두 2026년 7월 공개 스냅샷)
lddef/api01rv2.ld/lddef/orca13.ld/cobol/api01rv2/ORAPI012R1V2.CBL/record/xml_patientinfov2res.db/record/xml_findv3req.db외 ── 본문의 실측값·인용은 모두 이 스냅샷에 근거한다
관련 기사
같은 태그를 공유하는 최신 기사입니다. 더 가까운 주제로 지식을 넓힐 수 있습니다.
보험자번호 8자리는 무엇을 말하나 ── 법별번호·도도부현번호·검증번호를 레세콘 구현에서 읽다
보험증의 보험자번호는 법별번호 2자리·도도부현번호 2자리·보험자별번호 3자리·검증번호 1자리로 이루어져 있습니다. 후생노동성의 설정요령을 1차 자료로 구성을 분해하고, 검증번호의 검산과 ORCA(日レセ)의 COBOL 구현까지 공개 소스에서 확인합니다.
전자처방전이 레세콘의 무엇을 바꾸는가 ── 소스 코드로 읽는 ORCA의 전자처방전 대응
전자처방전에 레세콘이 갖춰야 할 것은 무엇인가. 처방전 ID·교환번호·리필을 관리하는 ORCA(니치레세)의 테이블 설계, 전자처방전 CSV 연동, 발행 형태 희망이 온라인 자격확인에서 넘어오는 흐름까지, 공개 소스 코드의 실측으로 해설합니다.
사정(査定)과 반려(返戻)는 어디서 일어나는가 ── 레셉트 점검 로직을 ORCA의 소스코드와 공개 자료로 분해한다
레셉트의 사정·반려는 어디서 일어나는가. ORCA의 데이터 체크 업무와 체크마스터, 레세덴 데이터 체크, 심사지급기관의 컴퓨터 체크·대조점검·종람점검까지, 레셉트 점검의 다단계 구조를 공개 소스와 공개 자료로 해설합니다.
마이나보험증을 태그하면 무슨 일이 일어나는가 ── 온라인 자격확인과 레세콘 연계를 ORCA 소스코드로 읽다
마이나보험증을 태그한 뒤 보험 자격이 레세콘에 등록되기까지를, 온라인 자격확인의 전체 흐름과 ORCA(니치레세) 공개 소스로 해설합니다. 온자 관련 API 20개, tbl_onshi_* 테이블 13개, 2020~2026년 제도 대응 연표를 포함합니다.
ORCA(니치레세)는 전자차트가 아니다 ── 엔지니어 관점에서 정리하는 레세콘과 의료 시스템 구성
ORCA(니치레세)는 전자차트가 아니라 레세콘입니다. 엔지니어 관점에서 의료기관의 시스템 구성, 레셉트 업무, COBOL 약 406만 행의 소스 내용, 니치레세API, WebORCA 전환의 요점을 공개 소스 실측으로 정리합니다.
관련 토픽
이 기사와 가까운 토픽 페이지입니다. 기사를 출발점 삼아 관련 서비스와 다른 기사로 이어집니다.
Windows 기술 토픽
Windows 개발, 장애 조사, 기존 자산 활용에 관한 KomuraSoft LLC 기사를 모은 토픽 허브입니다.
이 주제와 연결되는 서비스
이 기사는 다음 서비스 페이지로 이어집니다. 가까운 입구부터 확인해 주세요.
기술 상담 & 설계 리뷰
ORCA 연동 방식을 고르거나, 사양서에 없는 동작을 조사하는 일은 기술 상담·설계 리뷰에서 자주 다루는 주제입니다.
기존 자산 활용 & 이관 지원
COBOL 자산의 소스코드 리딩과 연동 설계는, 레거시 자산을 살리는 이전·연동 업무와 이어져 있습니다.
자주 묻는 질문
이 기사 주제에 대해 상담 시 자주 나오는 질문을 모았습니다.
- 닛레세 API 엔드포인트는 모두 몇 개인가요?
- 공식 사이트의 API 사양 목록 페이지에는 약 50건이 실려 있습니다. 다만 공개 소스코드(5.2 계열·2026년 7월 스냅샷)의 LD 정의 파일을 세면, bindapi로 묶인 엔드포인트는 137건입니다. 차분의 일부는 서식 계열처럼 다른 페이지에 문서화된 것도 있으므로 '목록에 없다 = 문서화되지 않았다'고 바로 단정할 수는 없습니다. 그래도 소스 쪽에서 세면 API 전체 구조를 1차 정보로 파악할 수 있습니다. 이 글에 137건 전체 대응표를 실었습니다.
- 공식 문서에 없는 API를 프로덕션에서 사용해도 되나요?
- 사용할 수 있습니다. ORCA는 소스코드가 공개되어 있어, 구현 자체를 1차 사양으로 확인할 수 있기 때문입니다. 애초에 사용 허락 계약은 문서화된 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을 읽게 되지만, 프로그램 헤더의 주석(일본어)과 수정 이력만으로도 많은 정보를 얻을 수 있습니다.