pharmacy-pos-qr-system/docs/alimipharm-set-product-structure.md
thug0bin f3fa4707ac docs: 알리미팜 세트상품 DB 구조 문서화
- CD_ITEM_UNIT_MEMBER 테이블 (세트 바코드)
- CD_item_set 테이블 (세트 구성품)
- 바코드 조회 쿼리 예시
- 마진 계산 시 구성품 분해 필요 안내
2026-02-27 12:36:17 +09:00

5.0 KiB

알리미팜 세트 상품 구조 (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

포장 단위 관련 테이블. 굿팜/알리미팜 처리 방식이 다를 수 있음.


바코드 조회 쿼리

세트 상품 바코드까지 포함한 조회

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원

마진 계산 쿼리 예시 (향후 개발용)

-- 세트 상품의 실제 매입가 계산
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 알리미팜: 세트 처리 방식이 다를 수 있음 (확인 필요)