pharmacy-pos-qr-system/docs/APC_MAPPING_PLAN.md

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에서 직접:

  1. 제품 선택 → 바코드 수정 → 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 기반)
  • 챗봇 이미지 연동

⚠️ 주의사항

  1. MSSQL 수정 금지 (기획 단계)

    • READ ONLY 유지
    • 테스트도 SELECT만
  2. APC 신뢰성

    • PostgreSQL apc 테이블이 마스터
    • 애니팜에서 관리하는 공식 코드
  3. 약국별 차이

    • 자체 바코드 사용 중인 약국 고려
    • 기존 워크플로우 방해하지 않도록
  4. 단계적 적용

    • 매핑 확인된 제품만 QR 출력 허용
    • 미매핑 제품은 기존 방식 유지

작성일: 2025-06-30 작성자: 용림 (Clawdbot) 상태: 기획 중