docs: 알리미팜 세트상품 DB 구조 문서화
- CD_ITEM_UNIT_MEMBER 테이블 (세트 바코드) - CD_item_set 테이블 (세트 구성품) - 바코드 조회 쿼리 예시 - 마진 계산 시 구성품 분해 필요 안내
This commit is contained in:
parent
1b78704ca6
commit
f3fa4707ac
186
docs/alimipharm-set-product-structure.md
Normal file
186
docs/alimipharm-set-product-structure.md
Normal file
@ -0,0 +1,186 @@
|
||||
# 알리미팜 세트 상품 구조 (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 알리미팜: 세트 처리 방식이 다를 수 있음 (확인 필요)
|
||||
Loading…
Reference in New Issue
Block a user