# 동물약 APC 매핑 가이드

> 최종 업데이트: 2026-03-02

## 개요

POS(PIT3000)의 동물약 제품을 APDB의 APC 코드와 매핑하여 제품 정보(용법, 용량, 주의사항) 및 이미지를 표시하기 위한 작업 가이드.

---

## 현재 상태

### 매핑 현황

| 구분 | 개수 | 비율 |
|------|------|------|
| 동물약 총 | 39개 | 100% |
| APC 매핑됨 | 7개 | 18% |
| **APC 미매핑** | **32개** | **82%** |

### 매핑 완료 제품

| POS 제품명 | DrugCode | APC |
|------------|----------|-----|
| (판)복합개시딘 | LB000003140 | 0231093520106 |
| 안텔민킹(5kg이상) | LB000003158 | 0230237810109 |
| 안텔민뽀삐(5kg이하) | LB000003157 | 0230237010107 |
| 파라캅L(5kg이상) | LB000003159 | 0230338510101 |
| 파라캅S(5kg이하) | LB000003160 | 0230347110106 |
| 세레니아정16mg(개멀미약) | LB000003353 | 0231884610109 |
| 세레니아정24mg(개멀미약) | LB000003354 | 0231884620107 |

---

## 매핑 구조

### 데이터베이스 연결

```
MSSQL (192.168.0.4\PM2014)          PostgreSQL (192.168.0.87:5432)
┌─────────────────────────┐         ┌─────────────────────────┐
│ PM_DRUG.CD_GOODS        │         │ apdb_master.apc         │
│ - DrugCode              │         │ - apc (PK)              │
│ - GoodsName             │         │ - product_name          │
│ - BARCODE               │         │ - image_url1            │
│                         │         │ - llm_pharm (JSONB)     │
├─────────────────────────┤         └─────────────────────────┘
│ PM_DRUG.CD_ITEM_UNIT_   │
│ MEMBER                  │
│ - DRUGCODE (FK)         │
│ - CD_CD_BARCODE ◀───────┼── APC 코드 저장 (023%로 시작)
│ - CHANGE_DATE           │
└─────────────────────────┘
```

### APC 매핑 방식

1. `CD_ITEM_UNIT_MEMBER` 테이블에 **추가 바코드**로 APC 등록
2. 기존 바코드는 유지, APC를 별도 레코드로 INSERT
3. APC 코드는 `023%`로 시작 (식별자)

---

## 1:1 매핑 가능 후보

### ✅ 확실한 매핑 (1개)

| POS 제품명 | DrugCode | APC | APDB 제품명 | 이미지 |
|------------|----------|-----|-------------|--------|
| **제스타제(10정)** | LB000003146 | 8809720800455 | 제스타제 | ✅ 있음 |

### ⚠️ 검토 필요 (1개)

| POS 제품명 | DrugCode | APC 후보 | 비고 |
|------------|----------|----------|------|
| 안텔민 | S0000001 | 0230237800003 | "안텔민킹"과 "안텔민뽀삐"는 이미 별도 매핑됨. 이 제품이 무엇인지 확인 필요 |

### ❌ APDB에 없음 (3개)

| POS 제품명 | 사유 |
|------------|------|
| (판)클라펫정50(100정) | APDB엔 "클라펫 정"만 있음 (함량 불일치) |
| 넥스가드xs(2~3.5kg) | 사이즈별 APC 없음 |
| 캐치원캣(2.5~7.5kg)/고양이 | APDB에 캐치원 자체가 없음 |

---

## 1:N 매핑 필요 제품 (27개)

사이즈별로 세분화된 제품들. 하나의 APDB APC에 여러 POS 제품을 매핑해야 함.

### 브랜드별 현황

| 브랜드 | POS 제품 수 | APDB 존재 | 비고 |
|--------|-------------|-----------|------|
| 다이로하트 | 3개 (SS/S/M) | ✅ | 다이로하트 츄어블 정 |
| 하트세이버 | 4개 (mini/S/M/L) | ✅ | 하트세이버 플러스 츄어블 |
| 하트웜솔루션 | 2개 (S/M) | ❌ | APDB에 없음 |
| 리펠로 | 2개 (S/M) | ✅ | 리펠로액 (이미지 있음!) |
| 캐치원 | 5개 (SS/S/M/L/캣) | ❌ | APDB에 없음 |
| 셀라이트 | 5개 (SS/S/M/L/XL) | ✅ | 셀라이트 액 |
| 넥스가드 | 2개 (xs/L) | ✅ | 넥스가드 스펙트라 |
| 가드닐 | 3개 (S/M/L) | ✅ | 가드닐 액 |
| 심피드 | 2개 (M/L) | ❌ | APDB에 없음 |
| 하트캅 | 1개 | ✅ | 하트캅-츄어블 정 |

---

## APDB 통계

| 항목 | 수치 |
|------|------|
| 전체 APC | 16,326개 |
| 이미지 있음 | 73개 (0.4%) |
| LLM 정보 있음 | 81개 (0.5%) |
| 동물 관련 키워드 | ~200개 |

⚠️ **주의:** APDB에 이미지가 거의 없음. 이미지 표시가 목적이라면 다른 소스 필요.

---

## 매핑 스크립트

### 매핑 후보 찾기
```bash
python backend/scripts/batch_apc_matching.py
```

### 1:1 매핑 가능 후보 추출
```bash
python backend/scripts/find_1to1_candidates.py
```

### 매핑 실행 (수동)
```python
# backend/scripts/batch_insert_apc.py 참고
MAPPINGS = [
    ('제스타제(10정)', 'LB000003146', '8809720800455'),
]
```

### INSERT 쿼리 예시
```sql
INSERT INTO CD_ITEM_UNIT_MEMBER (
    DRUGCODE, CD_CD_UNIT, CD_NM_UNIT, CD_MY_UNIT, CD_IN_UNIT,
    CD_CD_BARCODE, CD_CD_POS, CHANGE_DATE
) VALUES (
    'LB000003146',  -- DrugCode
    '015',          -- 단위코드
    1.0,            -- 단위명
    <기존값>,        -- CD_MY_UNIT (기존 레코드에서 복사)
    <기존값>,        -- CD_IN_UNIT (기존 레코드에서 복사)
    '8809720800455', -- APC 바코드
    '',
    '20260302'      -- 변경일자
)
```

---

## 다음 단계

1. **제스타제** 1:1 매핑 실행
2. **안텔민(S0000001)** 제품 확인 후 결정
3. 1:N 매핑 정책 결정 (사이즈별 제품 → 동일 APC?)
4. 이미지 소스 대안 검토 (필요시)

---

## 관련 파일

- `backend/db/dbsetup.py` - DB 연결 설정
- `backend/scripts/batch_apc_matching.py` - 매칭 후보 찾기
- `backend/scripts/batch_insert_apc.py` - 매핑 실행
- `backend/scripts/find_1to1_candidates.py` - 1:1 후보 추출
- `backend/app.py` - `_get_animal_drugs()`, `_get_animal_drug_rag()`
