# 동물약 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()`