14 KiB
🎯 APC 기반 동물약 매핑 기획서
⚠️ 주의: 기획 단계에서는 MSSQL READ ONLY. 절대 데이터 입력/수정 금지.
📋 현상황 분석
1. 동물약 바코드 문제
문제 1: 바코드 없음
- 동물약은 수의사 소분 판매 방지 목적으로 공산품이지만 바코드가 없는 경우 많음
- "판매 최소포장단위"별 바코드가 부여되지 않음
- 예: 다이로하트, 넥스가드 등 → 바코드 없음
문제 2: 바코드 중복
- 바코드가 있어도 여러 사이즈 제품이 동일 바코드 사용
- 예: 다이로하트정 SS/S/M/L → 모두 동일 바코드
- 바코드만으로 사이즈/체중 구분 불가
문제 3: 약국별 자체 바코드
- 약국은 POS 재고관리를 위해 자체 바코드 생성하여 사용
- 원래 바코드 무시하고 새로 지정
- 이유: POS에서 스캔 시 제품별 즉시 구분 + 재고 차감 필요
결과: 중앙 매핑 불가
약국 A: "안텔민사사" → 바코드 "A001"
약국 B: "안텔민사사" → 바코드 "B999"
약국 C: "안텔민사사" → 바코드 없음 (수기 입력)
↓ 중앙 시스템 입장
바코드 "A001" = ??? (알 수 없음)
바코드 "B999" = ??? (알 수 없음)
2. 현재 데이터 구조 (2025-06-30 최종 확인)
┌─────────────────────────────────────────────────────────────┐
│ MSSQL (팜IT3000 - 약국 POS) │
├─────────────────────────────────────────────────────────────┤
│ │
│ CD_GOODS (제품 마스터) - 178,182개 │
│ ├── DrugCode: LB000003157 (PK) │
│ ├── GoodsName: "안텔민킹(5kg이상)" │
│ └── 팜IT3000 전체 제품 DB │
│ │ │
│ ├────────────────┬─────────────────────────────┐ │
│ ▼ ▼ ▼ │
│ CD_SALEGOODS CD_ITEM_UNIT_MEMBER CD_BARCODE│
│ (대표 바코드 1개) (바코드 N개!) ★ (인체용) │
│ 3,053개 ├ CD_CD_BARCODE 306,565개│
│ BARCODE: │ 0230237810109 (APC!) 동물약X │
│ 9990000001134 │ 9990000001134 (자체) │
│ └ DRUGCODE → CD_GOODS.DrugCode │
│ │
└─────────────────────────────────────────────────────────────┘
★ 핵심: 한 제품에 여러 바코드 가능! → CD_ITEM_UNIT_MEMBER
★ APC 저장 위치: CD_ITEM_UNIT_MEMBER.CD_CD_BARCODE
★ APC로 이미지 조회: https://ani.0bin.in/img/{APC}_F.jpg
│
│ 매핑 필요
▼
┌─────────────────────────────────────────────────────────────┐ │ PostgreSQL (애니팜 - 동물약 마스터) │ ├─────────────────────────────────────────────────────────────┤ │ apc 테이블 │ │ ├── apc: "0230237010107" (고유!) │ │ ├── product_name: "대성 안텔민 사사 정 100mg/25mg/10정" │ │ ├── company_name: "(주)대성미생물연구소" │ │ ├── for_pets: true │ │ ├── image_url1: "https://ani.0bin.in/img/..." │ │ └── godoimage_url_f: "https://cdn.../..." │ └─────────────────────────────────────────────────────────────┘
---
## 💡 해결책: APC 기반 매핑
### 핵심 아이디어
**APC(Animal Product Code)를 고유 매핑 키로 사용**
CD_GOODS.DrugCode ←→ CD_BARCODE.DRUGCODE ←→ APC(새로추가) ←→ PostgreSQL.apc
### 왜 APC인가?
| 키 | 고유성 | 중앙관리 | 이미지 | 현황 |
|----|--------|----------|--------|------|
| 바코드 | ❌ 중복/없음 | ❌ 약국별 다름 | ❌ | 사용 불가 |
| DrugCode | ⚠️ 약국내 고유 | ❌ 약국별 다름 | ❌ | 내부용 |
| **APC** | ✅ 전국 고유 | ✅ 애니팜 관리 | ✅ | **사용 가능** |
---
## 🔄 구현 계획
### Phase 1: 동물약 태깅 (완료 ✅)
CD_GOODS에서 POS_BOON='010103' 추출 → 38개 동물약 식별
### Phase 2: AI 기반 APC 매핑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ MSSQL 동물약 │ │ AI 분석 │ │ PostgreSQL │ │ 38개 제품 │────►│ 제품명 매칭 │────►│ apc 후보 추천 │ │ │ │ 성분/체중 분석 │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ 관리자 확인 │ │ 매핑 승인/수정 │ └─────────────────┘
**AI 매칭 로직:**
```python
# MSSQL 제품
mssql_product = "안텔민사사(5kg이하)"
# PostgreSQL 검색
pgsql_candidates = search_apc("안텔민 사사")
# → [
# "대성 안텔민 사사 정 100mg/25mg/10정" (APC: 0230237010107),
# "대성 안텔민 사사 정 100mg/25mg/50정" (APC: 0230237010205),
# ...
# ]
# AI 추천: 체중 범위, 포장단위 분석
recommended_apc = "0230237010107" # 10정 (최소 판매단위)
Phase 3: APC 바코드 등록 방법
옵션 A: CD_SALEGOODS.BARCODE 업데이트 (현재 구조 활용)
-- CD_SALEGOODS에서 바코드를 APC로 변경
UPDATE CD_SALEGOODS
SET BARCODE = '0230237010107' -- APC 코드
WHERE DrugCode = 'LB000003158'; -- 안텔민뽀삐
또는 POS에서 직접:
- 제품 선택 → 바코드 수정 → APC 입력 → 저장
옵션 B: 별도 매핑 테이블 (SQLite) - MSSQL 수정 최소화
-- SQLite에 매핑 테이블 생성
CREATE TABLE animal_drug_apc_mapping (
id INTEGER PRIMARY KEY,
mssql_drug_code TEXT NOT NULL, -- CD_GOODS.DrugCode
mssql_barcode TEXT, -- CD_SALEGOODS.BARCODE (현재값)
apc_code TEXT NOT NULL, -- PostgreSQL apc
product_name TEXT, -- 확인용
verified BOOLEAN DEFAULT 0, -- 관리자 검증 여부
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
현재 동물약 바코드 현황:
| 제품 | DrugCode | CD_SALEGOODS.BARCODE |
|---|---|---|
| 안텔민뽀삐 | LB000003158 | 9990000001133 |
| 안텔민킹 | LB000003157 | 9990000001134 |
| 다이로하트S | LB000003150 | 9990000001131 |
| 다이로하트M | LB000003151 | 9990000001132 |
Phase 4: QR 라벨 출력 연동
┌─────────────────────────────────────────────────────────────┐
│ 프론트엔드: 제품 검색 → QR 라벨 출력 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 제품 선택 (MSSQL) │
│ └── DrugCode: LB000003158 │
│ │
│ 2. APC 매핑 확인 │
│ └── APC: 0230237010107 (매핑됨 ✅) │
│ │
│ 3. QR 라벨 생성 │
│ ├── QR 내용: APC 코드 │
│ ├── 라벨 텍스트: 제품명 + 가격 │
│ └── [인쇄] 버튼 활성화 │
│ │
│ ※ APC 미매핑 제품 → [인쇄] 버튼 비활성화 또는 경고 │
└─────────────────────────────────────────────────────────────┘
Phase 5: 이미지 표시 연동
챗봇 응답: "안텔민을 추천드려요"
│
├── MSSQL: "안텔민사사(5kg이하)" 재고 확인
│
├── APC 매핑: LB000003158 → 0230237010107
│
├── PostgreSQL: 이미지 URL 조회
│ └── https://ani.0bin.in/img/0230237010107_F.jpg
│
└── 프론트: 제품 칩 + 이미지 썸네일 표시
┌──────────────────────────┐
│ 📦 안텔민사사 (5,000원) │
│ [썸네일 이미지] │
└──────────────────────────┘
📊 예상 데이터 흐름
┌─────────────────────────────────────────────────────────────────────────┐
│ 전체 데이터 흐름 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ [약국 POS] │
│ │ │
│ ▼ │
│ CD_GOODS ──────► CD_BARCODE (APC 추가) │
│ │ │ │
│ │ │ APC = "0230237010107" │
│ │ │ │
│ ▼ ▼ │
│ 제품 판매 ◄──── QR 스캔 (APC 인식) │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ [챗봇/이미지] [애니팜 연동] │
│ │ │ │
│ │ │ │
│ ▼ ▼ │
│ PostgreSQL ◄─────────────┘ │
│ (이미지, 상세정보, 용법용량) │
│ │
└─────────────────────────────────────────────────────────────────────────┘
✅ TODO 체크리스트
1단계: 분석 (READ ONLY)
- MSSQL 동물약 38개 추출
- CD_BARCODE 구조 분석
- PostgreSQL apc 테이블 구조 분석
- 매핑 가능 제품 샘플 확인 (안텔민, 하트가드 등)
- 전체 38개 제품 APC 후보 목록 생성
2단계: 기획
- 매핑 전략 수립 (APC 기반)
- CD_BARCODE 활용 vs SQLite 매핑 테이블 결정
- 관리자 매핑 UI 설계
- QR 라벨 출력 연동 설계
3단계: 구현 (약사님 승인 후)
- 매핑 테이블 생성
- AI 매핑 추천 기능
- 관리자 매핑 확인/수정 UI
- QR 라벨 출력 (APC 기반)
- 챗봇 이미지 연동
⚠️ 주의사항
-
MSSQL 수정 금지 (기획 단계)
- READ ONLY 유지
- 테스트도 SELECT만
-
APC 신뢰성
- PostgreSQL apc 테이블이 마스터
- 애니팜에서 관리하는 공식 코드
-
약국별 차이
- 자체 바코드 사용 중인 약국 고려
- 기존 워크플로우 방해하지 않도록
-
단계적 적용
- 매핑 확인된 제품만 QR 출력 허용
- 미매핑 제품은 기존 방식 유지
작성일: 2025-06-30 작성자: 용림 (Clawdbot) 상태: 기획 중