# 알리미팜 세트 상품 구조 (PIT3000) > 작성일: 2026-02-27 > 약국: 양구청춘약국 ## 개요 PIT3000(팜잇3000) DB는 세트 상품을 기본적으로 잘 처리하지 못하게 설계되어 있다. 하지만 알리미팜에서는 세트 상품을 등록하고 **자체 바코드**를 생성하여 사용한다. 이 문서는 세트 상품의 DB 구조와 바코드 조회 방법을 정리한 참고 문서이다. --- ## 테이블 구조 ### 1. CD_GOODS (기본 상품 테이블) ``` Database: PM_DRUG Table: CD_GOODS ``` | 컬럼 | 설명 | |------|------| | DrugCode | 상품 코드 (PK) | | GoodsName | 상품명 | | BARCODE | **바코드** (세트상품은 대부분 비어있음!) | | SplName | 공급업체 | | Saleprice | 판매가 | | Price | 매입가 | ⚠️ **주의**: 세트 상품의 경우 `BARCODE` 컬럼이 비어있는 경우가 많음! --- ### 2. CD_ITEM_UNIT_MEMBER (단위/바코드 확장 테이블) ⭐ ``` Database: PM_DRUG Table: CD_ITEM_UNIT_MEMBER ``` | 컬럼 | 설명 | |------|------| | DRUGCODE | 상품 코드 (FK → CD_GOODS.DrugCode) | | CD_CD_UNIT | 단위 코드 | | CD_NM_UNIT | 단위 수량 | | CD_MY_UNIT | 판매가 | | CD_IN_UNIT | 매입가 | | **CD_CD_BARCODE** | **세트상품 바코드** ⭐ | | CD_CD_POS | POS 코드 | | CHANGE_DATE | 변경일 | ✅ **핵심**: 세트 상품/자체 등록 상품의 바코드는 이 테이블의 `CD_CD_BARCODE`에 저장됨! --- ### 3. CD_item_set (세트 구성품 테이블) ``` Database: PM_DRUG Table: CD_item_set ``` | 컬럼 | 설명 | |------|------| | SetCode | 세트 상품 코드 (FK → CD_GOODS.DrugCode) | | DrugCode | 구성품 코드 ('SET0000' = 헤더, 그 외 = 구성품) | | CD_NM_UNIT | 구성품 수량 | **구조 예시 (투엑스벤포파워 LB000003181):** ``` SetCode | DrugCode | CD_NM_UNIT --------------|---------------|------------ LB000003181 | SET0000 | NULL ← 세트 헤더 LB000003181 | LB000003324 | 1.0 ← 구성품 1 LB000003181 | LB000001423 | 1.0 ← 구성품 2 (벤포파워Z) LB000003181 | LB000001412 | 1.0 ← 구성품 3 ``` --- ### 4. CD_item_pack / CD_ITEM_PACK_UNIT ``` Database: PM_DRUG ``` 포장 단위 관련 테이블. 굿팜/알리미팜 처리 방식이 다를 수 있음. --- ## 바코드 조회 쿼리 ### 세트 상품 바코드까지 포함한 조회 ```sql SELECT S.DrugCode, G.GoodsName, -- CD_GOODS.BARCODE가 없으면 CD_ITEM_UNIT_MEMBER.CD_CD_BARCODE 사용 COALESCE(NULLIF(G.BARCODE, ''), U.CD_CD_BARCODE, '') as barcode FROM SALE_SUB S LEFT JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode OUTER APPLY ( SELECT TOP 1 CD_CD_BARCODE FROM PM_DRUG.dbo.CD_ITEM_UNIT_MEMBER WHERE DRUGCODE = S.DrugCode AND CD_CD_BARCODE IS NOT NULL AND CD_CD_BARCODE != '' ) U ``` --- ## 세트 상품 바코드 패턴 | 패턴 | 설명 | |------|------| | `999XXXXXXXXX` | 알리미팜 자체 생성 바코드 (세트/자체등록) | | `880XXXXXXXXX` | 일반 제조사 바코드 | 예시: - `9990000001101` - 투엑스벤포파워 (세트상품) - `8806418067510` - 벤포파워Z (일반상품) --- ## ⚠️ 마진 계산 시 주의사항 ### 세트 상품 마진 계산의 복잡성 세트 상품의 **실제 마진**을 계산하려면 **구성품을 물고 들어가서** 각 구성품의 매입가를 합산해야 한다! ``` 세트 판매가: 9,000원 세트 매입가(CD_GOODS.Price): 3,300원 ← 이건 정확하지 않을 수 있음! 실제 계산 필요: ├── 구성품1 매입가: 1,500원 ├── 구성품2 매입가: 1,200원 └── 구성품3 매입가: 800원 ──────────────────── 실제 매입가 합계: 3,500원 실제 마진: 9,000 - 3,500 = 5,500원 ``` ### 마진 계산 쿼리 예시 (향후 개발용) ```sql -- 세트 상품의 실제 매입가 계산 SELECT S.SetCode, G1.GoodsName as set_name, G1.Saleprice as set_sale_price, SUM(G2.Price * S.CD_NM_UNIT) as actual_cost FROM CD_item_set S JOIN CD_GOODS G1 ON S.SetCode = G1.DrugCode JOIN CD_GOODS G2 ON S.DrugCode = G2.DrugCode WHERE S.DrugCode != 'SET0000' -- 헤더 제외 GROUP BY S.SetCode, G1.GoodsName, G1.Saleprice ``` --- ## 관련 테이블 요약 | 테이블 | 데이터베이스 | 용도 | |--------|-------------|------| | CD_GOODS | PM_DRUG | 기본 상품 정보 | | CD_ITEM_UNIT_MEMBER | PM_DRUG | 단위별 바코드 (세트 바코드 저장) | | CD_item_set | PM_DRUG | 세트 구성품 매핑 | | CD_item_pack | PM_DRUG | 포장 단위 | | CD_BARCODE | PM_DRUG | 표준코드 매핑 | | SALE_SUB | PM_PRES | 판매 상세 | | SALE_MAIN | PM_PRES | 판매 헤더 | --- ## 히스토리 | 날짜 | 내용 | |------|------| | 2026-02-27 | 세트상품 바코드 조회 문제 해결 (`CD_ITEM_UNIT_MEMBER` 연동) | | 2026-02-27 | 바코드 매핑률 89.8% → 99.8% 개선 | --- ## 참고 - PIT3000 DB 서버: `192.168.0.4\PM2014` - 굿팜 vs 알리미팜: 세트 처리 방식이 다를 수 있음 (확인 필요)