# 동물약 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에 이미지가 거의 없음. 이미지 표시가 목적이라면 다른 소스 필요.

## 매핑 스크립트

### 매핑 후보 찾기

    python backend/scripts/batch_apc_matching.py

### 1:1 매핑 가능 후보 추출

    python backend/scripts/find_1to1_candidates.py

### 매핑 실행 (수동)

    # backend/scripts/batch_insert_apc.py 참고
    MAPPINGS = [
        ('제스타제(10정)', 'LB000003146', '8809720800455'),
    ]

### INSERT 쿼리 예시

    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()`