Files
pit3000-drug-info-api-notes/README.md
시골약사 659e9d5880 docs: 약학정보원 JSON API 정답 경로 추가 (로컬 BLOB 우회 해법)
다른 AI가 로컬 BLOB(DrugImg) 매칭키에서 막힌 부분을, 운영 POS에
실제 구현·검증한 약정원 JSON API 경로로 보강. 혼동 방지용 결정 문서.

- docs/healthkr-json-api-SOLVED.md: 정답 경로 단일 진입점.
  · 연결고리 = CD_GOODS.BARCODE → CD_BARCODE.DIK_CODE (CD_GOODS.DIK
    직접 14/19, 바코드 경로 18/19. 용각산(대) 실증).
  · 정답 엔드포인트 = ajax_result_drug2.asp (JSON 64필드+이미지URL).
    result_drug_simple.asp는 사람용 HTML, zoom.asp 파싱 불필요.
  · 로컬 BLOB 안 씀 → 44자 base64 image key 문제 자체가 사라짐.
- README: 핵심결론 최상단에 SOLVED 문서 포인터.
- scripts/probe_healthkr_json.py: 정답 경로 재현 스크립트(비번 CHANGEME).

기존 drugimg-key-findings.md(BLOB 분석)는 보존 — "BLOB 쓸 때의 문제"로
관계 명시.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 10:22:26 +09:00

3.7 KiB

PIT3000 의약품정보/API·이미지 흐름 Reverse Engineering Notes

PIT3000/PM2000V6에서 확인한 의약품 상세정보, 식별 이미지, 약품 이미지, pictogram 관련 SQL/API 흐름을 정리한 저장소입니다.

핵심 결론

이미지/약품정보를 실제로 가져오려면 docs/healthkr-json-api-SOLVED.md 를 보세요. 로컬 BLOB(PM_IMAGE..DrugImg) 매칭키 분석은 막혔지만, 약학정보원 JSON API로 평문 DIK_CODE로 안정 해결됨(운영 POS 반영). 정답 경로 = CD_GOODS.BARCODE → CD_BARCODE.DIK_CODE → ajax_result_drug2.asp(JSON). CD_GOODS.DIK_CODE 직접·로컬 BLOB은 함정.

  1. (권장 경로) 약품 이미지·상세는 로컬 BLOB이 아니라 약학정보원 JSON API에서 받는다. 위 SOLVED 문서 참조.
  2. 화면/인쇄에 쓰이는 약품 상세정보는 로컬 DB(PM_DRUG, PM_IMAGE)와 외부 health.kr URL을 병행합니다.
  3. DRUGCODE에서 DIK_CODE, SUNG_CODE를 조회합니다.
  4. SUNG_CODE성분코드입니다. 보험코드가 아닙니다.
  5. 식별/약품 이미지는 PM_IMAGE..DrugImg, C:\\Dik20\\Data\\Drugimg2005.MDB, C:\\Dik2004\\Data\\Drugimg.MDB 계열에서 확인됩니다.
  6. PM_IMAGE..DrugImg.DIK_CODE는 일부 인스턴스에서 평문 13자리 DIK_CODE가 아니라 44자 Base64/32-byte digest 형태의 image key일 수 있습니다. 직접 join을 단정하면 안 됩니다.
  7. health.kr URL은 상세 페이지/확대 이미지 페이지를 여는 보조 경로입니다. zoom.asp 내부에 보이는 이미지 URL도 실제 HTTP 200/JPEG인지 별도 검증해야 합니다.

확인된 외부 URL

https://health.kr/searchDrug/result_drug_simple.asp?drug_cd={DIK_CODE}
https://www.health.kr/drug_info/sb/zoom.asp?drug_code={DIK_CODE}&print_front={PRINT_FRONT}&print_back={PRINT_BACK}
https://www.pharm.or.kr/search/zoom.asp?drug_code={DIK_CODE}

확인된 주요 SQL

-- DRUGCODE → DIK_CODE / SUNG_CODE
SELECT ISNULL(DIK_CODE, '') AS DIK_CODE, SUNG_CODE
FROM PM_DRUG..CD_GOODS
WHERE DRUGCODE = :drugcode;

-- 약품 상세정보
SELECT
  A.ETCNAME,
  A.SPLNAME,
  C.SUNG_ENM,
  B.PRINT_TYPE,
  A.EFFCTNAME,
  B.CHARACT,
  B.SAVE_MEDI,
  B.INDIC_MEDI,
  B.EFFECT,
  B.ADR,
  B.INTERACTION,
  B.GEN_MEDI
FROM PM_DRUG..CD_ETCGOODS AS A
INNER JOIN PM_DRUG..CD_MC AS B
  ON A.DRUGCODE = B.DRUGCODE
LEFT JOIN PM_DRUG..CD_SUNG AS C
  ON A.SUNG_CODE = C.SUNG_CODE
WHERE A.DRUGCODE = :drugcode;

-- SQL Server 이미지 테이블
-- 주의: DrugImg.DIK_CODE는 인스턴스에 따라 평문 DIK_CODE가 아니라 44자 Base64 image key일 수 있음.
-- 평문 join을 먼저 가정하지 말고 key 분포/DRUGIMG_USER.DRUG_CODE/legacy MDB/PIT 생성 함수를 확인한다.
SELECT DIK_CODE, DRUG_IMG, EXPR1
FROM PM_IMAGE..DrugImg
WHERE DIK_CODE = :image_key
ORDER BY EXPR1 DESC;

-- Access MDB 계열 이미지
SELECT DRUGCODE, FILENAME, FILELENGTH, DRUGIMG, SEQ
FROM DRUGIMG
WHERE DRUGCODE = :drugcode
ORDER BY SEQ;

-- pictogram
SELECT TOP 3 PIC_CODE
FROM PM_DRUG..CD_PICTOGRAM_SUB
WHERE DIK_CODE = :dik_code
ORDER BY SEQ;

SELECT TOP 1 PIC_IMG
FROM PM_DRUG..CD_PICTOGRAM
WHERE PIC_CODE = :pic_code
  AND PIC_LAG = '0'
  AND IMG_CODE = '1';

예시 JSON

examples/drug-info-response.example.json 참고.

원본 분석 산출물

  • data/teoul_drug_image_api_PM_PharmCharge.txt
    PM_PharmCharge에서 추출한 문자열/SQL/API URL 히트 요약.

주의

  • 이 저장소는 API 계약/흐름 문서화용입니다. 외부 사이트를 과도하게 호출하지 마세요.
  • 실제 환자/처방 데이터는 포함하지 않습니다.
  • 이미지 BLOB은 예시에서는 URL/base64 placeholder로만 둡니다.