- herb_items 테이블에 product_type, standard_code 컬럼 추가 - POST /api/purchase-receipts/from-cart API 구현 (표준코드 기반 입고) - 5개 API에 product_type/standard_code 필드 추가 - 프론트엔드 전역 구분 표시: 한약재/OTC 배지, 보험코드/표준코드 구분 - 경방신약 주문 매핑 문서 작성 (38건, 총액 1,561,800원) - DB 스키마 백업 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.2 KiB
4.2 KiB
DB 매핑 구조: 의약품 마스터 ↔ 한약재 코드 테이블
의약품 마스터(medicine_master.db)와 기존 한약재 테이블(kdrug.db)은
representative_code(대표코드) 로 연결된다.
1. 테이블 관계도
herb_masters (454개 약재, 공통 성분 마스터)
│ ingredient_code (PK) 예: 3033H1AHM = 계지
│
├─→ herb_products (53,769건, 제품별 코드)
│ ingredient_code (FK)
│ representative_code ← 매핑 키
│ standard_code
│ product_code (보험코드 9자리)
│
└─→ herb_items (29건, 우리 약국 보유 약재)
ingredient_code (FK)
insurance_code
herb_name 예: "휴먼계지"
medicine_master.db (305,522건, 의약품표준코드 마스터)
│ representative_code ← 매핑 키
│ standard_code
│ item_std_code (품목기준코드)
│ product_name, company_name, spec, category, ...
2. 매핑 키: representative_code (대표코드)
| 구분 | herb_products | medicine_master |
|---|---|---|
| 대표코드 수 | 17,356 | 13,771 (한약재) |
| 매칭 수 | 13,188 (95.8%) | |
| 표준코드 수 | 53,769 | - |
| 표준코드 매칭 | 40,364 (75.1%) |
- 풀체인 매칭 약재: 447 / 454개 (98.5%)
- medicine_master에만 있는 한약재 대표코드: 6개 (무시 가능)
- herb_products에만 있는 대표코드: 4,168개 (취소/폐지 제품 등)
3. 매핑 예시: 계지
-- herb_masters: 공통명
ingredient_code = '3033H1AHM', herb_name = '계지'
-- herb_products: 제품들 (57개 제조사)
휴먼계지 rep: 8800624003904 std: 8800624003911 (500g)
대효계지 rep: 8800628002200 std: 8800628002224 (500g)
광명계지 rep: 8800640000505 std: 8800640000512 (500g)
...
-- medicine_master: 동일 대표코드로 매칭
휴먼계지 rep: 8800624003904 item_std: 200406389 category: 한약재
대효계지 rep: 8800628002200 item_std: 200406525 category: 한약재
...
4. 매핑 SQL
특정 약재의 전체 제품 + 의약품 마스터 정보 조회
SELECT hm.herb_name AS 공통명,
hp.product_name, hp.company_name,
hp.representative_code, hp.standard_code,
mm.spec, mm.form_type, mm.package_type,
mm.item_std_code, mm.category
FROM herb_masters hm
JOIN herb_products hp ON hp.ingredient_code = hm.ingredient_code
LEFT JOIN med_master.medicine_master mm
ON mm.representative_code = hp.representative_code
AND (mm.cancel_date IS NULL OR mm.cancel_date = '')
WHERE hm.herb_name = '계지';
herb_items(보유 약재) → 의약품 마스터 연결
SELECT hi.herb_name, hi.ingredient_code,
mm.item_std_code, mm.representative_code, mm.standard_code,
mm.spec, mm.package_type
FROM herb_items hi
JOIN herb_products hp ON hp.ingredient_code = hi.ingredient_code
JOIN med_master.medicine_master mm
ON mm.representative_code = hp.representative_code
AND mm.product_name = hi.herb_name
WHERE mm.category = '한약재'
AND (mm.cancel_date IS NULL OR mm.cancel_date = '');
5. 코드 체계 정리
| 코드 | 출처 | 예시 | 설명 |
|---|---|---|---|
ingredient_code |
herb_masters | 3033H1AHM | 성분코드 (약재 공통) |
product_code |
herb_products | 062400390 | 보험 제품코드 9자리 |
representative_code |
양쪽 | 8800624003904 | 대표 바코드 (매핑 키) |
standard_code |
양쪽 | 8800624003911 | 규격별 바코드 |
item_std_code |
medicine_master | 200406389 | 식약처 품목기준코드 |
insurance_code |
herb_items | 062400390 | = product_code와 동일 체계 |
6. 활용 가능 시나리오
- 바코드 스캔 입고: 제품 바코드(standard_code) → herb_products → ingredient_code → herb_items 자동 매칭
- 제품 비교: 같은 ingredient_code의 다른 업체 제품 가격/규격 비교
- 마스터 검색 → 입고 연동: 의약품 마스터에서 검색 → representative_code로 herb_products 조회 → 입고 등록
- 유효성 검증: 취소(cancel_date) 제품 식별, 현행 유통 제품만 필터링
최종 수정: 2026-02-19