commit 4bacdb0a1e139a7be68b8b6fcd0d2734c67874e5 Author: thug0bin Date: Mon Jun 29 00:27:06 2026 +0000 초기 정리: PIT3000 분석 자료 업로드 - 좌표/SQL/API 분석 문서화 - 재현 스크립트와 예시 응답 추가 - 개인정보/원본 실행파일 제외 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4bb369 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +__pycache__/ +.venv/ +.env +*.mdb +*.mdf +*.ldf +*.bak +Image/Temp/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..53f6413 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# PIT3000 의약품정보/API·이미지 흐름 Reverse Engineering Notes + +PIT3000/PM2000V6에서 확인한 **의약품 상세정보, 식별 이미지, 약품 이미지, pictogram** 관련 SQL/API 흐름을 정리한 저장소입니다. + +## 핵심 결론 + +1. 화면/인쇄에 쓰이는 약품 상세정보는 로컬 DB(`PM_DRUG`, `PM_IMAGE`)와 외부 health.kr URL을 병행합니다. +2. `DRUGCODE`에서 `DIK_CODE`, `SUNG_CODE`를 조회합니다. +3. `SUNG_CODE`는 **성분코드**입니다. 보험코드가 아닙니다. +4. 식별/약품 이미지는 `PM_IMAGE..DrugImg`, `C:\Dik20\Data\Drugimg2005.MDB`, `C:\Dik2004\Data\Drugimg.MDB` 계열에서 확인됩니다. +5. health.kr URL은 상세 페이지/확대 이미지 페이지를 여는 보조 경로로 확인됩니다. + +## 확인된 외부 URL + +```text +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 + +```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 이미지 테이블 +SELECT DIK_CODE, DRUG_IMG, EXPR1 +FROM PM_IMAGE..DrugImg +WHERE DIK_CODE = :dik_code +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로만 둡니다. diff --git a/data/teoul_drug_image_api_PM_PharmCharge.txt b/data/teoul_drug_image_api_PM_PharmCharge.txt new file mode 100644 index 0000000..9c6b61b --- /dev/null +++ b/data/teoul_drug_image_api_PM_PharmCharge.txt @@ -0,0 +1,67 @@ +===== PM_PharmCharge.exe https://health.kr/searchDrug/result_drug_simple.asp?drug_cd= char=3309727 byte=65013e ===== + + ꇨ駲跿ʺ ル푮ル髫譛工ӂ Ұ￿￿ SELECT ISNULL(DIK_CODE, Ұ￿￿ ) AS DIK_CODE, SUNG_CODE Ұ￿￿ FROM Ұ￿￿ Ұ￿￿ PM_DRUG.. Ұ￿￿ CD_GOODS Ұ￿￿ WHERE Ұ￿￿ DRUGCODE = Ұ￿￿ DIK_CODE Ұ￿￿ SUNG_CODE Ұ￿￿ TB Ұ￿￿ CH Ұ￿￿ CS Ұ￿￿ CE Ұ￿￿ TE Ұ￿￿ TD Ұ￿￿ TR Ұ￿￿ CR Ұ￿￿ TL Ұ￿￿ TC Ұ￿￿ TO Ұ￿￿ SP Ұ￿￿ DRUGIMG Ұ￿￿ DRUGIMG_PKG Ұ￿￿= SELECT DIK_CODE, DRUG_IMG AS DRUGIMG, EXPR1 FROM PM_IMAGE.. Ұ￿￿ WHERE DIK_CODE = Ұ￿￿ ORDER BY EXPR1 DESC Ұ￿￿ EXPR1 Ұ￿￿ 1 Ұ￿￿< https://health.kr/searchDrug/result_drug_simple.asp?drug_cd= Ұ￿￿ 0 Ұ￿￿ê SELECT A.ETCNAME, A.SPLNAME, B.PRINT_TYPE, 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 WHERE A.DRUGCODE = Ұ￿￿ ETCNAME Ұ￿￿ 약 품 명 : Ұ￿￿ SPLNAME Ұ￿￿ 제약회사 : Ұ￿￿ + PRINT_TYPE Ұ￿￿ 약효분류 : Ұ￿￿I ▶ 저 장 방 법 -------------------------------------------------------------- Ұ￿￿ SAVE_MEDI Ұ￿￿I ▶ 효능 / 효과 -------------------------------------------------------------- Ұ￿￿ EFFECT Ұ￿￿I ▶ 주 의 사 항 -------------------------------------------------------------- Ұ￿￿ ADR Ұ￿￿I ▶ 상 호 작 용 -------------------------------------------------------------- Ұ￿￿ INTERACTION Ұ￿￿I ▶ 복 약 지 도 -------------------------------------------------------------- Ұ￿￿ GEN_MEDI  Ұ￿￿ - Ұ￿￿ ? + +===== PM_PharmCharge.exe https://health.kr/searchDrug/result_drug_simple.asp?drug_cd= char=4233647 byte=81335e ===== + +DE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ PRINT_FRONT Ұ￿￿ @ Ұ￿￿ + PRINT_BACK Ұ￿￿ C:\Dik2004\Data\Drugimg.MDB Ұ￿￿ DRUG_CODE Ұ￿￿Y SELECT DRUGCODE, FILENAME, FILELENGTH, DRUGIMG, "00" AS SEQ FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿Q SELECT DRUGCODE, FILENAME, FILELENGTH, DRUGIMG, SEQ FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿ ORDER BY SEQ Ұ￿￿ SEQ Ұ￿￿_ SELECT * FROM 식별정보 AS A LEFT JOIN 식별정보품목 AS B ON A.DRUG_CODE = B.DRUG_CODE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ 1 Ұ￿￿< https://health.kr/searchDrug/result_drug_simple.asp?drug_cd= Ұ￿￿ ▶ 약효분류 Ұ￿￿ ▶ 작용기전 Ұ￿￿ ▶ 약동학 Ұ￿￿ ▶ Off-label Indication Ұ￿￿ ▶ 전문가용 복약정보 譕召뜏昑琛昈瑙ノᓫ邋Ϥ 莋Ĕ 鏿Đ 嵛ӂ贀@觷쏿삋譕召坖Ʋ碡䐞℮チ쀳桕ǬÃ、搰₉ƺ 讀⇮チƱᲺ쌂謀⌤チ삄捴袹쌂먀ʸÃ쎋Ꮸ脪㏿뫉˔Ã쎋ר脪맿˰ÃႺ쌃謀⧴チ쌂먀̴Ã쎋脩맿˰Ã岺쌃謀⧒チ쌂먀΀Ã쎋쇨脩诿䰆ス쀳奚摙ႉΎ絒櫿ༀභΜÃƲ겸쌃ニ絗忿孞썝Ұ￿￿. Software\Microsoft\Internet Explorer\PageSetup Ұ￿￿ &w&bPage &p of &P Ұ￿￿ header Ұ￿￿ footer Ұ￿￿ 0.250000 Ұ￿￿ margin_left Ұ￿￿ margin_right Ұ￿￿ + margin_top Ұ￿￿ margin_bottom  Ұ￿￿6 Error while writing page print values to the registry! 譕맬 jj畉凹譓㏘嗀꽨쌄搀ヿ襤謠ﳴ￿䶍뫔Ë 莋Д ᗨ밉诿푕䖍맼ҼÃ엨綘跿赐橐樂樆謀ﱅ譐＀ၐ쀳奚摙ႉ뙨쌄贀푅嗨綘跿ᖋሜ@ʹ 聲ス䖍頺ス勤ス헫譛工Ã볋뜢乨ရ벢ꨀ䀀灇譕櫬樀匀쀳桕ՆÃ、搰₉喍ꇸ됰œ揨蟭诿喍ス綃üή恨쌅樀ꄂ뼴Ջ璹쌅먀֠Ã䤳謇ﻴ￿쀳奚摙ႉ䵨쌅贀珨絰跿ﱅ毨絰쏿䷩絒寨奙썝 Ұ￿￿ 확인 Ұ￿￿ 출력할 내용이 없습니다. Ұ￿￿ 출력확인 譕맬 jj畉凹襓쀳桕৅Ã、搰₉㒡傿謁먀ৠÃ䥍贀䖋说墀郎ス䶋诤䰅먀ਐÃ鿨絴诿袋ь 䖋跴䢐ꄀ뼴Ջ㧨䥋謀肋ш 뉦蓿痀譗肋Ш 譐袋м 䖋说墀謀ﱕ毨偀謀肋Ш 譐袋м 䖋说墀謀ﱕ珨偕贀為쌋澊ス㇫䖋说⢀倀䖋说㲈謀肋ј 喋瀰P䖍뫸஌Ã埨絯诿颋И 쎋뉁诿 + +===== PM_PharmCharge.exe https://www.health.kr/drug_info/sb/zoom.asp?drug_code= char=4237873 byte=815462 ===== + + AS A LEFT JOIN 식별정보품목 AS B ON A.DRUG_CODE = B.DRUG_CODE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ PRINT_FRONT Ұ￿￿ @ Ұ￿￿ + PRINT_BACK Ұ￿￿ 1 譕맬 jj畉凹譓㏘嗀表쌠搀ヿ襤贠莋ќ 짨緞菿ༀ쪄謀䠍僂謁눉ꄁ릌¥诨要觿ﱅ쀳桕‬Ã、搰₉툳䖋폴ヌ䲡債老̸舏“ ꂸ쌠ス삄萏 쌠謀悋謀岓贀폨絛诿喍ス痿棬ⅤÃ喍诤撃ス痿棤↌Ã喍诠梃ス痿跠ں 屰ス喋跰⧨絙诿䖋诼碀⑴ᄐ싩 ꄀ뎀Ő㢀琀桾⃨Ã讋Ѡ 鎋ќ 䖍孈ス䖋跐푕쇨緝￿푵摨쌡贀챕莋Ѥ ꯨ緝￿챵豨쌡贀졕莋Ѩ 门緝￿졵䖍뫘 絛诿䖍增ス喋诜ﱅ肋͸ 밣贺뱕莋ќ 姨緝诿뱍䖍뫀↴Ã엨絚诿쁕䖍塢ス喋评ﱅ肋͸ 귨밣ꇿ꽴ŐÆ謁ﱅႋ鋿Ā 璡傯영 쀳奚摙ႉ㍨쌠謀ﱅ뷨紭쏿柩紷㏰嫀奙襤栐₏Ã䖍몼 毨絕跿쑅㟨絎跿졅ֺ 啖ス䖍丢ス䖍뫠 䇨絕跿෨絎跿⧨絕쏿௩紷宱썝Ұ￿￿ C:\Dik20\Data\Drugimg2005.MDB Ұ￿￿6 https://www.health.kr/drug_info/sb/zoom.asp?drug_code= Ұ￿￿ &print_front= Ұ￿￿ &print_back= Ұ￿￿2 https://www.pharm.or.kr/search/zoom.asp?drug_code= 譕召ꗨ綝櫿樀栂¡ 쎋䷨衛僿綝룿≘Ã巨北嬀쉝 Ұ￿￿ TfrmPMMain6 譕㏬嗀ꅨ쌢搀ヿ襤@㰅厴甁렊됴œ嗨絺㏿嫀奙襤栐⊨Ã㓲ス썝삋⌄à ␌ÃⓠÃ␞Ã␸à ⒾÃᘬ 췀ï交@京@傌@뤤CꆰLꎬL催@L䶀@䶜@ꐔL誜KꩴLഄC꘤LꚨL꟤LJ뤼C놨L똈C΀MꀈL蓀K諌K記KJ绌K귤L笠KJ껰LᶠK,MJJJ냬L꾨LJ뇨LJḤK箬K籬K痰K籐K魬L먀L䁘K칔L홌L푐L䃰K䄔K퟈LL㽄K鋔K綘KL鉈K䓨K秐K鎘K齃L镌L韼LLꕈLꗄLーLꍤL寮LLﮰL냨L  ᇜ@ᘠ ⓖÃᘘ 䈍湴偟慨浲潰瑲┠Ã䘊牯䍭敲瑡ၥЀ쌧ऀ潆浲汃獯፥쌨ఀ潆浲捁楴慶整晄Ã䘈牯卭潨ᕷ썦฀楂䉴湴牐䍮楬正⟼Ã戏湴捏䍲污䍬楬正⠀Ã戏湴䝟䑯湡䍧楬正吗牆偭敲捳楲瑰潩䍮湯畳瑬剰yⓠÃᜇ䙔浲牐獥牣灩楴湯潃獮汵Ѵ쌣氀᠀湕瑩偟敲捳楲瑰潩䍮湯畳瑬 삋譕櫬樀匀쀳桕♭Ã、搰₉쎋헨ⴇ였ᲃĀ툳莋ތ 槨蟃ꇿ뗤Ő먀♼Ã藨紘狿ꄖ뗤Ő먀⚀Ã濨紘盿贪ﱅᖋ뗤Ő슁ˠ ꇨ絓诿ﱅ懨緣菿爂䠆猄㌜诒钃謀(摑툳莋෸ 蟍㌧诒钃쯊ヌ툳莋ޔ 취蟍㏿诒 췀ヌ삡僅謁ᒀ먀⚐Ã珨絗痿렝⚠Ã忨緪蓿瓀눏謁ᢃ쭾ヌ෫툳莋ᘘ 濨蟋诿簕僊謁贒쌦呢ス喋뇸謁蓼Q쀳奚摙ႉ瑨쌦贀ʺ 佌スㄦス奛嵙à ㄁ 㜁 Ұ￿￿ 1 Ұ￿￿ C:\PharmPort\p-viewer.exe Ұ￿￿ IMG_Drug_Plus.bmp 譕櫬匀譖诱㏘嗀꽨쌧搀ヿ襤謠2菆ᗜ 였 傾영 Ʋ莋ܤ ࢋ凿뉤謁ⲃ謀(摑Ʋ莋ܰ ࢋ凿뉤謁㒃謀(摑졨쌧樀贀ﱕ쎋헨蟊诿ﱍ压레⟤Ã뗨匒㌀ꏀ둀œۆ㌂嫀奙襤栐➶Ã䖍丂ス⿤ス孞嵙ÃҰ￿￿ MemoDel Ұ￿￿ TfrmPMMain6 跃 + +===== PM_PharmCharge.exe PM_IMAGE..DrugImg char=4225134 byte=80f0dc ===== + +栌릸Â䖍뫸 旨緂诿쎋忨蠹栤만Â痿栌릸Â䖍뫴 㿨緂诿쎋㧨蠹㏿嫀奙襤栐릂Â䖍뫴 䯨綼跿ࡅʺ 밾ス鸘ス孞쉝 Ұ￿￿ 성분명 : ( Ұ￿￿ ) Ұ￿￿ 약품명 : ( 譕櫬樀樀樀樀樀匀譖诱㏘嗀鑨슼搀ヿ襤謠ゃ倀莋м 譐㒋謀⢓謀㢃薀P㔻됴œᅵ׆됸œ렁됴œ꟨緢跿岃謀咓뭮ス뎋И 욋嗨늎诿廊ᅩႋ勿桄벰Â喍诬岃肶P䖋跬鏨繄￿偨슽贀κ 샪ス䖋僴욋蟨챞嫿ࢋ凿謸跲ᄇ욋叨늲蓿࿀超먀불Â욋쯨늞跿ࢋ凿譤莍Ѡ 綺诿识0碒䠀ᱵ莋ϰ 툳ࢋ凿譤㌀诒(摑櫫莋΄ 뢀  琀謜㌀诒(摑莋ϴ Ʋࢋ凿耿ꆸ ᱴ莋ϰ Ʋࢋ凿譤㌀诒(摑᫫莋ϰ Ʋࢋ凿譤눀謁(摑䲡債老̸ᵲꂸ슽哞セ삄ུ莋ϸ Ʋࢋ凿謍㌀诒(摑莋Ϭ 툳蠵诿눀㗔ネƲ䲡枿ٔᆬ䖉닼ꄁ푀B헨綑觿쀳桕뱋Â、搰₉莋Р 喋⥆ᄇjj䖋绖タ喋诸ﱅࢋ凿譜謀ꢀ謀ﱕﯨ致㏿嫀奙襤栐뱹Â䖋醦ス䖋醞ス魈ス莋ϸ 툳ࢋ凿譤㌀㔰ネ莋Ϭ Ʋ⏨蠵㏿嫀奙襤栐벛Â䖍뫨 ◨綹쏿←続廫譛工ӂ Ұ￿￿I SELECT DIK_CODE, DRUG_IMG, EXPR1 FROM PM_IMAGE..DrugImg WHERE DIK_CODE = Ұ￿￿ ORDER BY EXPR1 DESC Ұ￿￿ EXPR1 Ұ￿￿ C:\Dik20\Data\Drugimg2005.MDB 譕召㶃됴œ甀렌됴œ펋২緟寿쉝譕櫬匀쀳桕뼛Â、搰₉僄謁謀ಀ먀뼴Â䯨綿痿ꅰ뎀Ő㢀甀ꅛ때Ő㢀猂㍑诒㍐ネ툳莋ϰ ࢋ凿㍤诒謀(摑툳莋ϸ ࢋ凿㍤诒㌜ネ䒺슿謀㏼ネ툳쎋叨ꅪ쓰Ջ肋Ȍ 肺슿뻂ス兵喍诼境䁚セ䶋跼䲃먀뾐Â쿨綻跿⢓ꄀ뼴Ջ讋ь 濨䦒謀⢃긘ᄇ삄ॵ툳쎋㌀嫀奙襤栐뼢Â䖍뚖ス顸ス奛썝 Ұ￿￿ 1 Ұ￿￿ Dik 또는 식별이미지 DB가 없습니다. Ұ￿￿ 0 Ұ￿￿ŕ 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 = 譕맬 jj畉凹譓㏘嗀२싇搀ヿ襤ꄠ때Ő㢀༂킂贀莋є ꏨ縼诿莍ь Ⓔ싇렘ス벸싈䷖セ삄奴돿ь 싈栀줜Â鑨싉栀쨐Â遨싊栀좼Â끨싊栀쫈Â싊栀쬘Â喍说咃㰼セ痿跴䲃먀 门綸诿粃薶ᄇ莋ͼ ⟨챖诿0䑒莋ͼ ៨챖诿䲓謀(㡑莋ͼ 秨늅跿莋є 縻诿莍ь 䲺싋띔ス벸싈䴒セ삄䕴돿ь 싈栀쯀Â뱨싈栀쪰Â졨싊栀쯼Â喍诬咃㮌セ痿跬䲃먀 綷诿碃蔆ᄇ莋͸ 矨챕诿0䑒莋͸ 柨챕诿䲓謀(㡑莋͸ 짨늄诿碃ꤦᄇ삄ᡵ䢺싌謀碃閞ᄇ喍诼(摑桨싌 + +===== PM_PharmCharge.exe PM_IMAGE..DrugImg char=4232957 byte=812dfa ===== + +FCTNAME Ұ￿￿ + 단 위 : Ұ￿￿ CHARACT Ұ￿￿ + 성 상 : Ұ￿￿ + PRINT_TYPE Ұ￿￿ 약효분류 : Ұ￿￿I ▶ 저 장 방 법 -------------------------------------------------------------- Ұ￿￿ SAVE_MEDI Ұ￿￿I ▶ 효능 / 효과 -------------------------------------------------------------- Ұ￿￿ EFFECT Ұ￿￿I ▶ 상 호 작 용 -------------------------------------------------------------- Ұ￿￿ INTERACTION Ұ￿￿ ▶ 주 의 사 항 Ұ￿￿ ADR Ұ￿￿ ▶ 복 약 지 도 Ұ￿￿ GEN_MEDI  Ұ￿￿ - Ұ￿￿ ? Ұ￿￿I SELECT DIK_CODE, DRUG_IMG, EXPR1 FROM PM_IMAGE..DrugImg WHERE DIK_CODE = Ұ￿￿ ORDER BY EXPR1 DESC Ұ￿￿ EXPR1 Ұ￿￿ C:\Dik20\Data\Drugimg2005.MDB Ұ￿￿` SELECT * FROM 식별정보 AS A LEFT JOIN 식별정보품목 AS B ON A.DRUG_CODE = B.DRUG_CODE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ PRINT_FRONT Ұ￿￿ @ Ұ￿￿ + PRINT_BACK Ұ￿￿ C:\Dik2004\Data\Drugimg.MDB Ұ￿￿ DRUG_CODE Ұ￿￿Y SELECT DRUGCODE, FILENAME, FILELENGTH, DRUGIMG, "00" AS SEQ FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿Q SELECT DRUGCODE, FILENAME, FILELENGTH, DRUGIMG, SEQ FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿ ORDER BY SEQ Ұ￿￿ SEQ Ұ￿￿_ SELECT * FROM 식별정보 AS A LEFT JOIN 식별정보품목 AS B ON A.DRUG_CODE = B.DRUG_CODE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ 1 Ұ￿￿< https://health.kr/searchDrug/result_drug_simple.asp?drug_cd= Ұ￿￿ ▶ 약효분류 Ұ￿￿ ▶ 작용기전 Ұ￿￿ ▶ 약동학 Ұ￿￿ ▶ Off-label Indication Ұ￿￿ ▶ 전문가용 복약정보 譕召뜏昑琛昈瑙ノᓫ邋Ϥ 莋Ĕ 鏿Đ 嵛ӂ贀@觷쏿삋譕召坖Ʋ碡䐞℮チ쀳桕ǬÃ、搰₉ƺ 讀 + +===== PM_PharmCharge.exe PM_IMAGE..DrugImg char=4284971 byte=82c456 ===== + +사용 Ұ￿￿ 개인별 설정내용 Ұ￿￿ \Temp\InDikPlus.ifo Ұ￿￿ 1 Ұ￿￿ 2 Ұ￿￿ drugcode Ұ￿￿G SELECT DIK_CODE, PLUS_CODE FROM PM_DRUG..CD_ETCGOODS WHERE DRUGCODE = Ұ￿￿§ SELECT DISTINCT CMMC_RN, CMPAT FROM CCMM CM INNER JOIN GIYP_IN01 YP ON CM.YAKPUM_CD = YP.YAKPUM_CD WHERE YP.KD_CD = Ұ￿￿ AND CMMC_RN <= Ұ￿￿J ORDER BY CMMC_RN Ұ￿￿ Dru_EName Ұ￿￿L SELECT DIK_CODE, DRUG_IMG, EXPR1 FROM PM_IMAGE..DrugImg WHERE DIK_CODE = Ұ￿￿ DIK_CODE Ұ￿￿ ORDER BY EXPR1 DESC Ұ￿￿ \Image\Temp\Sik_ Ұ￿￿ .jpg Ұ￿￿   Ұ￿￿ + Ұ￿￿) .jpg" width="163" height="95" border="0"> Ұ￿￿. SELECT DRUGIMG FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿ ORDER BY SEQ DESC Ұ￿￿J SELECT TOP 3 PIC_CODE FROM PM_DRUG..CD_PICTOGRAM_SUB WHERE DIK_CODE = Ұ￿￿= ORDER BY SEQ Ұ￿￿D SELECT TOP 1 PIC_IMG FROM PM_DRUG..CD_PICTOGRAM WHERE PIC_CODE = Ұ￿￿ PIC_CODE Ұ￿￿ AND PIC_LAG = '0' Ұ￿￿ AND IMG_CODE = '1' Ұ￿￿ \Image\Temp\Pito_ Ұ￿￿) .jpg" width="59" height="100" border="0"> Ұ￿￿) .jpg" width="84" height="141" border="0"> Ұ￿￿ CMMC_RN Ұ￿￿ . Ұ￿￿ CMPAT Ұ￿￿Z

Ұ￿￿ + Ұ￿￿) .jpg" width="163" height="95" border="0"> Ұ￿￿. SELECT DRUGIMG FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿ ORDER BY SEQ DESC Ұ￿￿J SELECT TOP 3 PIC_CODE FROM PM_DRUG..CD_PICTOGRAM_SUB WHERE DIK_CODE = Ұ￿￿= ORDER BY SEQ Ұ￿￿D SELECT TOP 1 PIC_IMG FROM PM_DRUG..CD_PICTOGRAM WHERE PIC_CODE = Ұ￿￿ PIC_CODE Ұ￿￿ AND PIC_LAG = '0' Ұ￿￿ AND IMG_CODE = '1' Ұ￿￿ \Image\Temp\Pito_ Ұ￿￿) .jpg" width="59" height="100" border="0"> Ұ￿￿) .jpg" width="84" height="141" border="0"> Ұ￿￿ CMMC_RN Ұ￿￿ . Ұ￿￿ CMPAT Ұ￿￿Z

Ұ￿￿

 Ұ￿￿ (임부금기) + +===== PM_PharmCharge.exe \Image\Temp\Sik_ char=6253442 byte=bed704 ===== + +tom:0;" align="right"> Ұ￿￿ : Ұ￿￿*   

Ұ￿￿ DRUGCODE Ұ￿￿ \ Ұ￿￿ PM2000V6.INI Ұ￿￿ 0 Ұ￿￿ + DIKPLUS_사용 Ұ￿￿ 개인별 설정내용 Ұ￿￿< SELECT DIK_CODE FROM PM_DRUG..CD_ETCGOODS WHERE DRUGCODE = Ұ￿￿- SELECT * FROM PM_DRUG..CD_MC WHERE DIK_CODE = Ұ￿￿ DIK_CODE Ұ￿￿ ORDER BY EDIT_DATE DESC Ұ￿￿ 준비중입니다. Ұ￿￿. SELECT DRUGIMG FROM DRUGIMG WHERE DRUGCODE = Ұ￿￿ ORDER BY SEQ DESC Ұ￿￿ \Image\Temp\Sik_ Ұ￿￿ .jpg Ұ￿￿   Ұ￿￿ + Ұ￿￿J SELECT TOP 3 PIC_CODE FROM PM_DRUG..CD_PICTOGRAM_SUB WHERE DIK_CODE = Ұ￿￿= ORDER BY SEQ Ұ￿￿D SELECT TOP 1 PIC_IMG FROM PM_DRUG..CD_PICTOGRAM WHERE PIC_CODE = Ұ￿￿ PIC_CODE Ұ￿￿ AND PIC_LAG = '0' Ұ￿￿ AND IMG_CODE = '1' Ұ￿￿ \Image\Temp\Pito_ Ұ￿￿) .jpg" width="75" height="100" border="0"> Ұ￿￿ .jpg" border="0">  Ұ￿￿ ETCNAME Ұ￿￿ (임부금기) Ұ￿￿ INOUT_GUBUN Ұ￿￿ ········· Ұ￿￿ 1일 Ұ￿￿ QUAN_TIME Ұ￿￿ #.# Ұ￿￿ 회/ Ұ￿￿ DAYS Ұ￿￿ 일 Ұ￿￿ (약품명입력) Ұ￿￿ 1일 Ұ￿￿ (복용법입력) Ұ￿￿ġ SELECT CASE WHEN CHARINDEX('/', REPLACE(EFFCTNAME, EFFCTUNIT, '')) > 0 THEN LEFT(REPLACE(EFFCTNAME, EFFCTUNIT, ''), CHARINDEX('/', REPLACE(EF + +===== PM_PharmCharge.exe 식별이미지 업데이트 char=4234938 byte=813d74 ===== + +诤䰅먀ਐÃ鿨絴诿袋ь 䖋跴䢐ꄀ뼴Ջ㧨䥋謀肋ш 뉦蓿痀譗肋Ш 譐袋м 䖋说墀謀ﱕ毨偀謀肋Ш 譐袋м 䖋说墀謀ﱕ珨偕贀為쌋澊ス㇫䖋说⢀倀䖋说㲈謀肋ј 喋瀰P䖍뫸஌Ã埨絯诿颋И 쎋뉁诿ቜᅩႋ勿桄ரÃ痿棸ఠÃ喍诘肋ќ 㷨倴謀喍ス痿棜౔Ã䖍뫠 燨絴诿譐ሎᅩ譚(㡑쎋秨뉁诿旚ᄇ삄蔏Ƽ 貺쌌謀剒ᄇ喍诔(摑喋诔怅湞ス쎋ႋ鋿Ÿ 畈謢肋ϰ 툳ࢋ凿譤肋ϴ 툳ࢋ凿譿肋΄ 뢀  琀謢肋ϰ 툳ࢋ凿譤肋ϴ Ʋࢋ凿聋ꆸ ≴䖋说눀謁(摑䖋说㌀诒(摑⃫䖋说눀謁(摑䖋说눀謁(摑䲡債老̸⁲꒸쌌ࡈセ삄ቴ䖋说눀謁(摑ძ䖋说㌀诒(摑䖋说㌀ヌ䖋说눀ヌƲ䲡枿릲ᄂ䖉닰ꄁ푀B㏨絅觿쀳桕ࣳÃ、搰₉䖋说₀謀ꇨ뇜櫿樀謀㇨耲诿䖋诰(屑䖋说謀ꢀ謀叨膨㏿嫀奙襤栐पÃ䖋䓾ス䖋䓶ス亠ス䖋说㌀诒(摑䖋说㌀ヌ䖋说눀ヌ㒡傿謁仪Iඋ쉈ŐঋƲᲡꖾ难ノ䖉㏨嗀陨쌉搀ヿ襤謠袋Μ 䖋说謀࿨诿ႋ鋿Ā 쀳奚摙ႉ鵨쌉謀叨組쏿﷩絍㏰嫀奙襤栐ৌÃ䖍뫔 Ǩ絬跿ʺ 毴ス䷎ス譛工à Ұ￿￿ 식별이미지 업데이트 중입니다. Ұ￿￿© SELECT * FROM PM_DRUG..CD_ETCGOODS WHERE SUBSTRING(SUNG_CODE, 8, 2) IN ('TB', 'CH', 'CS', 'CE', 'TE', 'TD', 'TR', 'CR', 'TL', 'TC', 'TO', 'SP') AND DRUGCODE = Ұ￿￿ DrugImg Ұ￿￿ DrugImg_PKG Ұ￿￿0 SELECT DIK_CODE, DRUG_IMG, EXPR1 FROM PM_IMAGE.. Ұ￿￿ WHERE DIK_CODE = Ұ￿￿ ORDER BY EXPR1 DESC Ұ￿￿ EXPR1 Ұ￿￿ C:\Dik20\Data\Drugimg2005.MDB 譕㯬ಐ甀謎뫂ഠÃ巨刑㬔႐甀謌뫂സÃ䟨刑崀ೂ Ұ￿￿ EXIT Ұ￿￿ PRINT 譕㯬ಐ甀謎뫂඄Ã刑㬔႐甀謌뫂ගÃ쏨刑崀ೂ Ұ￿￿ EXIT Ұ￿￿ PRINT 譕召ᖋ귄Őኋ逻Ќ ᩵쒡傭謁먀ดÃꗨ刏ꄀ귄Őᢉ⣫ᖋ귄Őኋ逻А ᡵ쒡傭謁먀ฬÃ篨刏ꄀ귄Őᢉ嵛ࣂ Ұ￿￿ EXIT Ұ￿￿ PRINT 譕凬噓䶈诿诚ꇰ귄Őᠻ䱴鸻Ќ ๵낺쌎謀าRᓫ鸻А ౵좺쌎謀ผR䖋倌䖋倈ᖋ귄Őኋ똏m욋ᗨ￿ꇿ귄Őᢉ孞嵙ࣂ Ұ￿￿ EXIT Ұ￿￿ PRINT 譕맬 jj畉凹譓㏘嗀Ѩ쌓搀ヿ襤ꄠ세Ő㢁Ѐ 萏‹ 㢡僁脁砸甀謖㠕僁謁㌒ꇉ됰œ卣ꅨ세Ő㢁ڐ 孵ᖋ세Őኋ줳ァ厴揎S莋Τ 傋䩄⿨蟙诿ﲃ謀䱐슃ヌ莋ϼ 傋䩀蟘뫿څ 쎋㟨蟙뫿ͨ 쎋忨蟙ꇿ뎀Ő㢀ༀㆄꄀ믄Ջ肋à Ჺ쌓涾ス蔏˹ 喍说咃ス䶋跴䲃먀ጬÃ쟨絪跿⢓ꄀ뼴Ջ讋ь 柨䥁謀⢃崐ᄇ삄蔏ʭ 풺쌓謀⢃䦄ᄇ喍诼(摑쌓謀⢃䥬ᄇ喍诸(摑ᒺ쌔謀⢃䥔ᄇ喍诰(摑䖋뫰ᐴÃ៨絭࿿즄먀ᐔÃ莋Ш ⧨뉉跿ࢋ凿譤䢺쌔泬ス萏ƞ ᒺ쌔謀⢃䣾ᄇ喍诨(摑䖋뫨ᑜÃ쇨絬࿿玄먀ᐔÃ莋Ш 폨뉈跿ࢋ凿譤為쌔沖ス萏ň ᒺ쌔謀⢃ + +===== PM_PharmCharge.exe 약품이미지 업데이트 char=3315151 byte=652b9e ===== + +債老̸舏Ī ꒸ꚳ扴レ삄萏Ę 䖋诸謀肋Ϭ ꚳꮀᅫ喍诔(摑喋诔尅잌ル쎋秨캚诿櫮│ႋ勿桄됀¦喍诌肋՘ 뿨驐￿챵큨ꚴ贀졕䖋诸岀傦レ痿跈큅Һ 촂ル䖋僐쎋鿨嫿ࢋ凿謸騊ᅫ쎋믨컀诿빤ᅫ삄桵ºꚵ謀ꫠᅫ喍诀(摑䖋跀쑍Ⓔꚵ⺀n喋评怅웜ル㒺ꚵ謀ꪬᅫ喍许(摑䖋趸뱍Ⓔꚵ⹌n喋讼搅욨ル䖋㯸悰ༀ麅 謀肋Ϭ 鿨컂닿ꄁ뽌g섒觿Ʋ䂡䋔鹨ル䖉㏰嗀빨ꚯ搀ヿ襤謠肋Ѐ 喋㗖ᅫjj䖋警ワ喋诰ࢋ凿譜肋є 肋ƨ 喋ƈ゙쀳奚摙ႉ難ꚰ謀㏨馞诿⯨馞쏿헩馧诨뀻Ѥ 蔏ž 䖋诸쇂ᅫƲ䲡枿ሺ￁䖉담ꄁ푀B믨馝觿쀳桕끫¦、搰₉䖋诸€謀⧨층櫿樀謀맨鲊诿䖋说(屑䖋诸咀謀ꢀ謀鸀㏿嫀奙襤栐냺¦䖋鶆ル䖋鵾ルꜨル䖋㯸械甀譽肋ϰ 藨캼蓿࿀徭 謀䠍僂謁눉ꄁ븜¥懨ꗯ觿쀳桕냳¦、搰₉䖋诸謀邋є 䖋Ꮂ￿䖋诬0’㌀嫀奙襤栐냺¦䖋鳶ルꚠル䖋诸謀0碒䠀罾䖋诸耀ꂸ ≴䖋诸悀㌀诒(摑䖋诸撀눀謁(摑䯫뢀¡ 琀謢肋Ѡ Ʋࢋ凿譤肋Ѥ 툳ࢋ凿謠肋Ѡ Ʋࢋ凿譤肋Ѥ Ʋࢋ凿㍤嫀奙襤栐놷¦䖍몸 ᇨ駄跿ﱅǨ駄쏿馥廣譛工à Ұ￿￿ 약품이미지 업데이트 중입니다. Ұ￿￿Í SELECT * FROM PM_DRUG..CD_ETCGOODS WHERE SUBSTRING(SUNG_CODE, 8, 2) IN ('TB', 'CH', 'CS', 'CE', 'TE', 'TD', 'TR', 'CR', 'TL', 'TC', 'TO', 'SP', 'TX', 'TU', 'TT', 'TS', 'CV', 'OF') AND DRUGCODE = Ұ￿￿ C:\Dik20\Data\Drugimg2005.MDB Ұ￿￿ SEQ Ұ￿￿` SELECT * FROM 식별정보 AS A LEFT JOIN 식별정보품목 AS B ON A.DRUG_CODE = B.DRUG_CODE WHERE A.DRUG_CODE = Ұ￿￿ AND A.EXPR1 = Ұ￿￿ PRINT_FRONT Ұ￿￿ @ Ұ￿￿ + PRINT_BACK 跃@譕㏬凉兑兑卑譖㏘嗀㡨ꚷ搀ヿ襤茠₻ ൵줳툳쎋䟨G㌋㏉诒ꨦ￿삄蔏 뮃Ԡ 甀资ﱅ譐颳謀μ¥좋ࢺ 謀ᕢᅳ喋跼㲃뿴ルŪ讋Լ 鎋Ҥ 쎋揨﾿赂譐钳謀͸¥좋ֺ 謀ᔞᅳ喋跸㲃뾰ルj讋Լ 鎋Ҥ 쎋Ῠ﾿诿뭈￿뮃Ԡ 甀謐颃謀0 謎钃謀0 謀邃謀0 萀瓀赝ᖋ즄Ő方 션ル痿棰띔¦摨ꚷ贀κ 쓶ル䶋담ꄁﱄC柨鵆诿棘람¦鲹ꚷ먀랼¦쎋る囿謄霨ル寫䖍诨萕僉뤁e ﯨ駀￿周ꚷ栀띤¦䖍뫬 駨駄诿Ʋ䒡䏼䘊ン𲱨ꚷ뤀랜¦벺ꚷ謀诃Pі쎋쯨首㏿嫀奙襤栐뜿¦䖍뫨 臨馾쏿審馠廫譛工à Ұ￿￿ \ Ұ￿￿ PM2000V6.INI Ұ￿￿ 1 Ұ￿￿ 대체조제사용약품 Ұ￿￿ 개인별 설정내용 Ұ￿￿ 0 譕櫬樀樀匀譖㏘嗀쵨ꚸ搀ヿ襤贠ﱅᖋ즄Ő方 뿂ル莋Ҝ ႋ鋿Ü 삄䩵痿棼루¦ꚸ贀κ 썎ル䶋닸ꄁﱄC뿨鵄诿棘뤠¦スꚹ먀륌¦쎋る囿謄門ル䣫痿棼루¦ꚸ贀κ 쌄ル䶋담ꄁﱄC痨鵄诿棘륨¦スꚹ먀륌¦쎋る囿謄锶ル쀳奚摙ႉ푨ꚸ贀κ 볬ル黆ル孞썝 + +===== PM_PharmCharge.exe 약품이미지 업데이트 char=4301990 byte=83494c ===== + +쨸Ő芉Ü 뎋܄ 纀W䙴욋ႋ鋿Ü 삄㡵㢡僊ԁô 㢺씖ༀࢶ⢦サၵ㢡僊昁胇ô ㌁໫㢡僊昁胇ô ㈁Ʊ鎋ۨ 쎋ߨﻳ뇿謁謀￾쎋২蟣㏿嫀奙襤栐ᘱÅ䖍뫴 迨筟쏿槩筁廫譛工Ã㄁ 譓㯘Დ甀㌯诒벃ナ➺謀벃퇰ナ䲺謀벃툔ナ썛錻ऐ ⵵Ʋ莋޼ ᇨ藛뫿„ 莋޼ 맨藑뫿 莋޼ 藑寿跃@譕맬 jj畉叹쀳桕ᤤÅ、搰₉䖍㏼强サⷨ俤萀࿀⊄렀᤼Å篨篹蓿࿀ႄꄀ뼴Ջ蒺씙㲲G莋ॄ 珨끗Ż 炸厴藄サ׆둴œ茀ﱽ甀먥ᦴÅ莋ॄ 寨끂跿ࢋ凿譤喍サ㯫痿棼᧔Å뒺씙謀䒃 䈮ᄚ喍诬(摑䖋跬鯨篧￿䖍뫼 筣跿툳秨筞뫿ᦴÅ莋ॄ 끁跿ࢋ凿譤喍サ䶋跨沃 먀᧨Å폨筢跿낓ꄀ뼴Ջ讋६ 珨䜹謀낃唜ᄚ삄扵莋Ұ 멐ᦴÅ莋ॄ 跨끁跿ࢋ凿譤讋ऀ 喋⺜N莋Ұ 멐ᦴÅ莋ॄ 巨끁跿ࢋ凿譤讋ऀ 喋䎘Nル莋Ұ 멐ᦴÅ莋ॄ ⯨끁跿ࢋ凿譤讋ऀ 喋幖N莋ॄ ࿨끙诿䒃 耀ꆸ 萏ﹲ￿׆둴œꄁ쉈ՋǨ蠩胿琽厴㒡傿謁㽐G袺씛謀ⲃࣄᅨ莋ॄ 譐境 倀똏咃 倀讋ै 鎋ौ 쎋Ῠﻒ㏿嫀奙襤栐ᤫÅ䖍뫘 + 门筜쏿濩笾寫썝Ұ￿￿ C:\PM2000V6\Data\PM_IMAGE.mdf Ұ￿￿ 약품이미지 업데이트 중입니다. Ұ￿￿ DRUGCODE Ұ￿￿ , Ұ￿￿Í SELECT * FROM PM_DRUG..CD_ETCGOODS WHERE SUBSTRING(SUNG_CODE, 8, 2) IN ('TB', 'CH', 'CS', 'CE', 'TE', 'TD', 'TR', 'CR', 'TL', 'TC', 'TO', 'SP', 'TX', 'TU', 'TT', 'TS', 'CV', 'OF') AND DRUGCODE =  about:blank 譕召ᖋ귄Őኋ逻Ѩ ᙵ쒡傭謁먀᲼Å귨倁Ö ᖋ귄Őኋ逻Ҁ ᙵ쒡傭謁먀᳜Å蟨倁° ᖋ귄Őኋ逻ۄ ᙵ쒡傭謁먀᳸Å懨倁Š ᖋ귄Őኋ逻҄ ፵쒡傭謁먀ᴐÅ㯨倁譧쐕傭謁㬒袐甀ꄓ귄Ջ㒺씝ĘP䓫ᖋ귄Őኋ逻Ѱ ፵쒡傭謁먀ᵔÅ倀謡쐕傭謁㬒邐甀ꄑ귄Ջ粺씝ÒP쒡傭褁嬘쉝 Ұ￿￿ COMPLETE Ұ￿￿ CANCEL Ұ￿￿ PRINT Ұ￿￿ + MEDI_PRINT Ұ￿￿ TAKE_MEDI Ұ￿￿ CASHCOMPLETE Ұ￿￿ CREDITCOMPLETE 譕凬噓䶈诿诚ꇰ귄Őᠻ萏½ 鸻Ѩ ᅵ袺씞謀ﻊO苩 㬀肞甀먎ẨÅ쎋뇨俾㭬쒞甀먎ỄÅ쎋鯨俾㭖蒞甀먎ỜÅ쎋藨俾㭀袞甀먎ἀÅ쎋濨俾㬪炞甀먎ἠÅ쎋姨俾㬔邞甀먌ὈÅ쎋䏨俾謀౅譐ࡅ譐쐕傭謁༒䶶诿ﴴ￿쒡傭褁帘奛쉝 Ұ￿￿ COMPLETE Ұ￿￿ CANCEL Ұ￿￿ PRINT Ұ￿￿ + MEDI_PRINT Ұ￿￿ TAKE_MEDI Ұ￿￿ CASHCOMPLETE Ұ￿￿ CREDITCOMPLETE Ⴁ傷謁鈀韨藔쏿삋颡僂謁鈀蟨藔쏿삋譕櫬匀譖诘䠵傺㌁嗀롨씠搀ヿ襤謠ᑆ킺씠巂サ蔏ê 뒡傾謁၀뜏茀쿀荦Өᡲ뒡傾謁၀씠嶖サ蔏¾ 䚋謈ﰕ傿謁嶀サ䱴䚋謈ﰕ傿謁ђ淨筝瓿謹ࡆᖋ뿼Ő劋嵚サ♴䚋謈ﰕ傿謁౒䟨筝瓿謓ࡆᖋ뿼Ő劋崴サ恵莍६ 씠啮サ돿६ 偨씡贀ﱕڋ뗨篞￿ﱵ莍६ κ 嬎サ莍६ 蒺씡奚サ鎍ͼ diff --git a/docs/api-response.md b/docs/api-response.md new file mode 100644 index 0000000..0d28e8e --- /dev/null +++ b/docs/api-response.md @@ -0,0 +1,66 @@ +# API/JSON 응답 설계 예시 + +PIT 원본은 JSON API라기보다는 SQL + BLOB + health.kr HTML/이미지 URL을 조합합니다. 현대화할 때는 아래처럼 normalization하는 것을 권장합니다. + +## Endpoint 예시 + +```http +GET /api/drugs/{drugcode} +GET /api/drugs/{drugcode}/images +GET /api/drugs/{drugcode}/pictograms +``` + +## 응답 예시 + +```json +{ + "drugcode": "A000000001", + "dik_code": "123456789", + "sung_code": "1234567TB", + "sung_code_kind": "ingredient_code", + "names": { + "etcname": "샘플정", + "splname": "샘플제약", + "ingredient_name_en": "Sample ingredient" + }, + "classification": { + "print_type": "해열진통소염제", + "effctname": "정제", + "character": "흰색 원형 정제" + }, + "drug_info": { + "save_medi": "실온 보관", + "indic_medi": "용법용량 예시", + "effect": "효능/효과 예시", + "adr": "주의사항 예시", + "interaction": "상호작용 예시", + "gen_medi": "복약지도 예시" + }, + "images": [ + { + "source": "PM_IMAGE..DrugImg", + "expr1": "1", + "content_type": "image/jpeg", + "url": "/api/drugs/A000000001/images/1.jpg", + "width_hint": 183, + "height_hint": 100 + }, + { + "source": "health.kr", + "url": "https://www.health.kr/drug_info/sb/zoom.asp?drug_code=123456789&print_front=&print_back=" + } + ], + "pictograms": [ + { + "pic_code": "P001", + "source": "PM_DRUG..CD_PICTOGRAM", + "url": "/api/drugs/A000000001/pictograms/P001.jpg" + } + ], + "external_links": { + "health_kr_simple": "https://health.kr/searchDrug/result_drug_simple.asp?drug_cd=123456789", + "health_kr_zoom": "https://www.health.kr/drug_info/sb/zoom.asp?drug_code=123456789&print_front=&print_back=", + "pharm_or_kr_zoom": "https://www.pharm.or.kr/search/zoom.asp?drug_code=123456789" + } +} +``` diff --git a/docs/flow.md b/docs/flow.md new file mode 100644 index 0000000..131dd80 --- /dev/null +++ b/docs/flow.md @@ -0,0 +1,46 @@ +# 의약품 상세/이미지 흐름 + +## 1. 입력 + +PIT 내부의 약품 단위 key는 상황에 따라 `DRUGCODE`, `DIK_CODE`, `SUNG_CODE`가 함께 등장합니다. + +- `DRUGCODE`: PIT/PM 내부 약품 코드 +- `DIK_CODE`: health.kr/식별 이미지 계열에서 사용하는 식별 코드 +- `SUNG_CODE`: 성분코드 + +## 2. 기본 해석 흐름 + +```mermaid +flowchart TD + A[DRUGCODE] --> B[PM_DRUG..CD_GOODS] + B --> C[DIK_CODE] + B --> D[SUNG_CODE 성분코드] + A --> E[PM_DRUG..CD_ETCGOODS + CD_MC] + D --> F[PM_DRUG..CD_SUNG] + C --> G[PM_IMAGE..DrugImg] + C --> H[health.kr result_drug_simple.asp] + C --> I[health.kr zoom.asp] + C --> J[PM_DRUG..CD_PICTOGRAM_SUB/CD_PICTOGRAM] +``` + +## 3. 이미지 후보 우선순위 + +1. `PM_IMAGE..DrugImg`의 `DRUG_IMG` BLOB +2. `C:\Dik20\Data\Drugimg2005.MDB` / `C:\Dik2004\Data\Drugimg.MDB` +3. health.kr 확대 이미지 URL +4. pictogram BLOB + +## 4. HTML/인쇄 쪽에서 관찰된 임시 파일 + +```text +\Image\Temp\Sik_{...}.jpg +\Image\Temp\Pito_{...}.jpg +``` + +PIT는 BLOB을 임시 jpg로 쓰고 다음 형태의 HTML img tag를 구성하는 흔적이 있습니다. + +```html + + + +``` diff --git a/examples/drug-info-response.example.json b/examples/drug-info-response.example.json new file mode 100644 index 0000000..bc934cf --- /dev/null +++ b/examples/drug-info-response.example.json @@ -0,0 +1,50 @@ +{ + "drugcode": "A000000001", + "dik_code": "123456789", + "sung_code": "1234567TB", + "sung_code_kind": "ingredient_code", + "names": { + "etcname": "샘플정", + "splname": "샘플제약", + "ingredient_name_en": "Sample ingredient" + }, + "classification": { + "print_type": "해열진통소염제", + "effctname": "정제", + "character": "흰색 원형 정제" + }, + "drug_info": { + "save_medi": "실온 보관", + "indic_medi": "1일 3회 식후 복용", + "effect": "효능/효과 예시", + "adr": "주의사항 예시", + "interaction": "상호작용 예시", + "gen_medi": "복약지도 예시" + }, + "images": [ + { + "source": "PM_IMAGE..DrugImg", + "expr1": "1", + "content_type": "image/jpeg", + "url": "/api/drugs/A000000001/images/1.jpg", + "width_hint": 183, + "height_hint": 100 + }, + { + "source": "health.kr", + "url": "https://www.health.kr/drug_info/sb/zoom.asp?drug_code=123456789&print_front=&print_back=" + } + ], + "pictograms": [ + { + "pic_code": "P001", + "source": "PM_DRUG..CD_PICTOGRAM", + "url": "/api/drugs/A000000001/pictograms/P001.jpg" + } + ], + "external_links": { + "health_kr_simple": "https://health.kr/searchDrug/result_drug_simple.asp?drug_cd=123456789", + "health_kr_zoom": "https://www.health.kr/drug_info/sb/zoom.asp?drug_code=123456789&print_front=&print_back=", + "pharm_or_kr_zoom": "https://www.pharm.or.kr/search/zoom.asp?drug_code=123456789" + } +} \ No newline at end of file diff --git a/scripts/normalize_drug_info.py b/scripts/normalize_drug_info.py new file mode 100644 index 0000000..b665a03 --- /dev/null +++ b/scripts/normalize_drug_info.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Example normalizer for PIT3000 drug info rows. +This file does not connect to production DB. Replace the stub functions with pyodbc/pymssql calls. +""" +from __future__ import annotations +import json + + +def normalize_drug_info(drugcode: str, goods: dict, detail: dict, images: list[dict], pictograms: list[dict]) -> dict: + dik_code = goods.get('DIK_CODE') or '' + sung_code = goods.get('SUNG_CODE') or '' + return { + 'drugcode': drugcode, + 'dik_code': dik_code, + 'sung_code': sung_code, + 'sung_code_kind': 'ingredient_code', + 'names': { + 'etcname': detail.get('ETCNAME'), + 'splname': detail.get('SPLNAME'), + 'ingredient_name_en': detail.get('SUNG_ENM'), + }, + 'classification': { + 'print_type': detail.get('PRINT_TYPE'), + 'effctname': detail.get('EFFCTNAME'), + 'character': detail.get('CHARACT'), + }, + 'drug_info': { + 'save_medi': detail.get('SAVE_MEDI'), + 'indic_medi': detail.get('INDIC_MEDI'), + 'effect': detail.get('EFFECT'), + 'adr': detail.get('ADR'), + 'interaction': detail.get('INTERACTION'), + 'gen_medi': detail.get('GEN_MEDI'), + }, + 'images': images, + 'pictograms': pictograms, + 'external_links': { + 'health_kr_simple': f'https://health.kr/searchDrug/result_drug_simple.asp?drug_cd={dik_code}', + 'health_kr_zoom': f'https://www.health.kr/drug_info/sb/zoom.asp?drug_code={dik_code}&print_front=&print_back=', + 'pharm_or_kr_zoom': f'https://www.pharm.or.kr/search/zoom.asp?drug_code={dik_code}', + }, + } + + +if __name__ == '__main__': + sample = normalize_drug_info( + 'A000000001', + {'DIK_CODE': '123456789', 'SUNG_CODE': '1234567TB'}, + { + 'ETCNAME': '샘플정', 'SPLNAME': '샘플제약', 'SUNG_ENM': 'Sample ingredient', + 'PRINT_TYPE': '해열진통소염제', 'EFFCTNAME': '정제', 'CHARACT': '흰색 원형 정제', + 'SAVE_MEDI': '실온 보관', 'INDIC_MEDI': '1일 3회 식후 복용', + 'EFFECT': '효능/효과 예시', 'ADR': '주의사항 예시', + 'INTERACTION': '상호작용 예시', 'GEN_MEDI': '복약지도 예시', + }, + [{'source': 'PM_IMAGE..DrugImg', 'expr1': '1', 'url': '/api/drugs/A000000001/images/1.jpg'}], + [{'pic_code': 'P001', 'source': 'PM_DRUG..CD_PICTOGRAM', 'url': '/api/drugs/A000000001/pictograms/P001.jpg'}], + ) + print(json.dumps(sample, ensure_ascii=False, indent=2))