diff --git a/docs/APC_MAPPING_PLAN.md b/docs/APC_MAPPING_PLAN.md new file mode 100644 index 0000000..24eaa74 --- /dev/null +++ b/docs/APC_MAPPING_PLAN.md @@ -0,0 +1,299 @@ +# 🎯 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 업데읎튞 (현재 구조 활용)** +```sql +-- CD_SALEGOODS에서 바윔드륌 APC로 변겜 +UPDATE CD_SALEGOODS +SET BARCODE = '0230237010107' -- APC 윔드 +WHERE DrugCode = 'LB000003158'; -- 안텔믌뜀삐 +``` + +또는 POS에서 직접: +1. 제품 선택 → 바윔드 수정 → APC 입력 → 저장 + +**옵션 B: 별도 맀핑 테읎랔 (SQLite) - MSSQL 수정 최소화** +```sql +-- 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) +- [x] MSSQL 동묌앜 38개 추출 +- [x] CD_BARCODE 구조 분석 +- [x] PostgreSQL apc 테읎랔 구조 분석 +- [x] 맀핑 가능 제품 샘플 확읞 (안텔믌, 하튞가드 등) +- [ ] 전첎 38개 제품 APC 후볎 목록 생성 + +### 2닚계: Ʞ획 +- [x] 맀핑 전략 수늜 (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)* +*상태: Ʞ획 쀑* diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..a305434 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,433 @@ +# 🏗 앜국 통합 솔룚션 아킀텍처 + +## 📋 개요 + +볞 시슀템은 **동묌앜 도맀상(애니팜)**, **개별 앜국 POS**, **마음늬지 솔룚션**을 통합하는 멀티 데읎터베읎슀 아킀텍처입니닀. + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 🏢 애니팜 (동묌앜 도맀상) │ +│ PostgreSQL Database │ +│ 제품 마슀터, 재고, 죌묞, 거래처 │ +└─────────────────────────────────────────────────────────────────────────────┘ + │ + │ 제품 정볎 / 발죌 + â–Œ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 💊 개별 앜국 (청춘앜국 등) │ +│ ┌──────────────────────┐ ┌──────────────────────┐ │ +│ │ MSSQL (팜IT3000) │ │ SQLite (솔룚션) │ │ +│ │ - 제품 마슀터 │ │ - 마음늬지 │ │ +│ │ - 판맀 낎역 │◄──►│ - AI 추천 │ │ +│ │ - 조제 읎력 │ │ - 알늌톡 로귞 │ │ +│ │ - 회원 정볎 │ │ - 동묌앜 태귞 │ │ +│ └──────────────────────┘ └──────────────────────┘ │ +└─────────────────────────────────────────────────────────────────────────────┘ + │ + │ API / 웹 읞터페읎슀 + â–Œ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 🌐 Flask 웹 서버 (7001) │ +│ QR 적늜 | AI 챗뎇 | ꎀ늬자 | 회원 조회 | 알늌톡 │ +└─────────────────────────────────────────────────────────────────────────────┘ + │ + │ 왞부 서비슀 + â–Œ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 🔌 왞부 API 연동 │ +│ - OpenAI GPT (동묌앜 챗뎇, AI 업셀링) │ +│ - 칎칎였 OAuth (로귞읞) │ +│ - NHN Cloud 알늌톡 │ +│ - Clawdbot Gateway (AI 에읎전튞) │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 🗄 데읎터베읎슀 구조 + +### 1⃣ PostgreSQL (애니팜 - 동묌앜 도맀상) + +> **역할**: 동묌앜 도맀 사업의 핵심 DB. 제품 마슀터, 거래처(앜국), 죌묞/발죌 ꎀ늬 + +| 테읎랔 | 섀명 | 죌요 컬럌 | +|--------|------|-----------| +| `products` | 제품 마슀터 | id, name, barcode, price, category | +| `customers` | 거래처 (앜국) | id, pharmacy_name, owner, phone | +| `orders` | 죌묞 낎역 | id, customer_id, order_date, status | +| `order_items` | 죌묞 상섞 | order_id, product_id, qty, price | +| `inventory` | 재고 현황 | product_id, stock_qty, location | + +```sql +-- 예시: 읞Ʞ 동묌앜 TOP 10 조회 +SELECT p.name, SUM(oi.qty) as total_sold +FROM order_items oi +JOIN products p ON oi.product_id = p.id +WHERE oi.created_at >= NOW() - INTERVAL '30 days' +GROUP BY p.name +ORDER BY total_sold DESC +LIMIT 10; +``` + +--- + +### 2⃣ MSSQL (팜IT3000 - 앜국 POS) + +> **역할**: 앜국 청구/POS 프로귞랚의 DB. 제품, 판맀, 조제, 회원 정볎 + +#### 죌요 데읎터베읎슀 +| DB명 | 섀명 | +|------|------| +| `PM_DRUG` | 제품 마슀터 (의앜품/걎Ʞ식) | +| `PM_PRES` | 판맀/조제 낎역 | +| `PM_BASE` | 회원/거래처 Ʞ볞 정볎 | + +#### 핵심 테읎랔 + +**PM_DRUG.dbo.CD_GOODS** - 제품 마슀터 +| 컬럌 | 섀명 | +|------|------| +| `DrugCode` | 제품 윔드 (PK) | +| `GoodsName` | 제품명 | +| `BARCODE` | 바윔드 | +| `Saleprice` | 판맀가 | +| `Price` | 원가 | +| `POS_BOON` | 분류윔드 (010103 = 동묌앜) | +| `GoodsSelCode` | 판맀상태 (B = 판맀쀑) | + +**PM_PRES.dbo.SALE_MAIN** - 판맀 헀더 +| 컬럌 | 섀명 | +|------|------| +| `SL_NO_order` | 거래번혞 (PK) | +| `InsertTime` | 거래 음시 | +| `SL_MY_total` | 쎝 ꞈ액 | +| `SL_CD_custom` | 고객 윔드 | + +**PM_PRES.dbo.SALE_SUB** - 판맀 상섞 +| 컬럌 | 섀명 | +|------|------| +| `SL_NO_order` | 거래번혞 (FK) | +| `DrugCode` | 제품 윔드 | +| `SL_NM_item` | 수량 | +| `SL_TOTAL_PRICE` | ꞈ액 | + +**PM_BASE.dbo.CD_PERSON** - 회원 정볎 +| 컬럌 | 섀명 | +|------|------| +| `CUSCODE` | 고객 윔드 (PK) | +| `PANAME` | 읎늄 | +| `PHONE` | 전화번혞 | +| `PANUM` | 죌믌번혞 | + +```sql +-- 예시: 였늘 판맀 낎역 + 제품명 조회 +SELECT + M.SL_NO_order AS 거래번혞, + M.InsertTime AS 거래음시, + G.GoodsName AS 제품명, + S.SL_NM_item AS 수량, + S.SL_TOTAL_PRICE AS ꞈ액 +FROM PM_PRES.dbo.SALE_MAIN M +JOIN PM_PRES.dbo.SALE_SUB S ON M.SL_NO_order = S.SL_NO_order +JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode +WHERE CONVERT(DATE, M.InsertTime) = CONVERT(DATE, GETDATE()) +ORDER BY M.InsertTime DESC; +``` + +```sql +-- 예시: 동묌앜 목록 조회 (POS_BOON = '010103') +SELECT DrugCode, GoodsName, Saleprice, BARCODE +FROM PM_DRUG.dbo.CD_GOODS +WHERE POS_BOON = '010103' AND GoodsSelCode = 'B' +ORDER BY GoodsName; +``` + +--- + +### 3⃣ SQLite (마음늬지 솔룚션) + +> **역할**: 앜국별 마음늬지 적늜, AI 추천, 알늌톡 로귞 등 부가 Ʞ능 + +**겜로**: `backend/db/mileage.db` + +#### 핵심 테읎랔 + +**users** - 마음늬지 회원 +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| `id` | INTEGER | PK | +| `nickname` | TEXT | 읎늄 | +| `phone` | TEXT | 전화번혞 (UNIQUE) | +| `mileage_balance` | INTEGER | 포읞튞 잔액 | +| `birthday` | TEXT | 생년월음 | +| `created_at` | TIMESTAMP | 가입음 | + +**claim_tokens** - QR 적늜 토큰 +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| `id` | INTEGER | PK | +| `transaction_id` | TEXT | POS 거래번혞 (UNIQUE) | +| `token_hash` | TEXT | 토큰 핎시 | +| `total_amount` | REAL | 구맀 ꞈ액 | +| `claimable_points` | INTEGER | 적늜 가능 포읞튞 | +| `claimed_at` | TIMESTAMP | 적늜 완료 시각 | +| `claimed_by_user_id` | INTEGER | 적늜한 회원 ID | + +**mileage_ledger** - 포읞튞 원장 +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| `id` | INTEGER | PK | +| `user_id` | INTEGER | 회원 ID | +| `transaction_id` | TEXT | 거래번혞 | +| `points` | INTEGER | 적늜/찚감 포읞튞 | +| `balance_after` | INTEGER | 변동 후 잔액 | +| `reason` | TEXT | CLAIM / USE / ADMIN | + +**ai_recommendations** - AI 업셀링 추천 +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| `id` | INTEGER | PK | +| `user_id` | INTEGER | 회원 ID | +| `recommended_product` | TEXT | 추천 제품 | +| `recommendation_message` | TEXT | 추천 메시지 | +| `status` | TEXT | active / interested / dismissed | + +**drug_tags** - 동묌앜 태귞 (별도 DB: `drug_tags.db`) +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| `drug_code` | TEXT | 제품 윔드 | +| `drug_name` | TEXT | 제품명 | +| `tag_type` | TEXT | animal_drug 등 | +| `tag_value` | TEXT | all / dog / cat | + +```sql +-- 예시: 회원별 적늜 낎역 조회 +SELECT + u.nickname, u.phone, u.mileage_balance, + ml.points, ml.reason, ml.created_at +FROM users u +JOIN mileage_ledger ml ON u.id = ml.user_id +WHERE u.phone = '01012345678' +ORDER BY ml.created_at DESC; +``` + +--- + +## 🔄 데읎터 흐멄 예시 + +### 📱 시나늬였 1: QR 마음늬지 적늜 + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ POS 결제 │────►│ QR 발행 │────►│ 고객 슀캔 │────►│ 적늜 완료 │ +│ (MSSQL) │ │ (SQLite) │ │ (Flask) │ │ (SQLite) │ +└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ + │ │ │ │ + │ │ │ │ + â–Œ â–Œ â–Œ â–Œ + SALE_MAIN claim_tokens users 조회 mileage_ledger + SALE_SUB 생성 & 저장 /생성 적늜 Ʞ록 +``` + +**쿌늬 흐멄:** +```sql +-- 1. POS 판맀 완료 시 (MSSQL) +INSERT INTO SALE_MAIN (SL_NO_order, SL_MY_total, ...) VALUES (...) + +-- 2. QR 토큰 생성 (SQLite) +INSERT INTO claim_tokens (transaction_id, total_amount, claimable_points, ...) +VALUES ('20260228001234', 50000, 1500, ...) + +-- 3. 고객 QR 슀캔 → 회원 조회/생성 (SQLite) +SELECT * FROM users WHERE phone = '01012345678' +-- 없윌멎: +INSERT INTO users (nickname, phone, mileage_balance) VALUES ('홍Ꞟ동', '01012345678', 0) + +-- 4. 적늜 처늬 (SQLite) +UPDATE users SET mileage_balance = mileage_balance + 1500 WHERE id = 1 +INSERT INTO mileage_ledger (user_id, transaction_id, points, balance_after, reason) +VALUES (1, '20260228001234', 1500, 1500, 'CLAIM') + +-- 5. 토큰 사용 완료 표시 (SQLite) +UPDATE claim_tokens SET claimed_at = datetime('now'), claimed_by_user_id = 1 +WHERE transaction_id = '20260228001234' +``` + +--- + +### 🐟 시나늬였 2: 동묌앜 AI 챗뎇 + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 사용자 질묞 │────►│ 동묌앜 조회 │────►│ OpenAI API │────►│ 응답 생성 │ +│ "구충제 추천" │ │ (MSSQL) │ │ (RAG) │ │ + 제품 맀칭 │ +└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ + │ │ + │ │ + â–Œ â–Œ + CD_GOODS에서 지식 베읎슀 + + 동묌앜 38개 제품 목록 전달 + 가격 포핚 조회 +``` + +**쿌늬 흐멄:** +```sql +-- 1. 동묌앜 목록 조회 (MSSQL → RAG 컚텍슀튞) +SELECT DrugCode, GoodsName, Saleprice, BARCODE +FROM PM_DRUG.dbo.CD_GOODS +WHERE POS_BOON = '010103' AND GoodsSelCode = 'B' +ORDER BY GoodsName; +-- 결곌: 안텔믌(5000원), 넥슀가드L(84000원), ... 38개 + +-- 2. OpenAI API 혞출 (Python) +# System Prompt에 포핚: +# - 동묌앜 지식 (심장사상충, 구충제, 왞부Ʞ생충 등) +# - 현재 볎유 제품 목록 + 가격 + +# User: "구충제 추천핎쀘" +# AI 응답: "구충제로는 **안텔믌**을 추천드렀요! 프띌지윎텔+플란텔 성분윌로..." + +-- 3. 응답에서 제품명 맀칭 (Python) +# AI 응답에 "안텔믌" 포핚 → 가격 5000원 표시 +``` + +--- + +### 👀 시나늬였 3: 회원 상섞 조회 (통합) + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 전화번혞 │────►│ DB 3ê³³ │────►│ 통합 응답 │ +│ 입력 │ │ 동시 조회 │ │ 반환 │ +└─────────────┘ └─────────────┘ └─────────────┘ + │ + ┌───────────────┌───────────────┐ + â–Œ â–Œ â–Œ + ┌─────────┐ ┌─────────┐ ┌─────────┐ + │ SQLite │ │ MSSQL │ │ MSSQL │ + │ users │ │PM_BASE │ │PM_PRES │ + │마음늬지 │ │회원정볎 │ │조제읎력 │ + └─────────┘ └─────────┘ └─────────┘ +``` + +**쿌늬 흐멄:** +```sql +-- 1. 마음늬지 회원 조회 (SQLite) +SELECT id, nickname, phone, mileage_balance, created_at +FROM users WHERE phone = '01012345678' + +-- 2. 적늜 읎력 조회 (SQLite) +SELECT points, balance_after, reason, created_at, transaction_id +FROM mileage_ledger WHERE user_id = 1 +ORDER BY created_at DESC LIMIT 50 + +-- 3. POS 고객 윔드 조회 (MSSQL PM_BASE) +SELECT CUSCODE, PANAME FROM CD_PERSON +WHERE REPLACE(PHONE, '-', '') = '01012345678' + +-- 4. 조제 읎력 조회 (MSSQL PM_PRES) +SELECT P.PreSerial, P.Indate, P.Drname, P.OrderName +FROM PS_main P +WHERE P.CusCode = 'C00001234' +ORDER BY P.Indate DESC + +-- 5. 구맀 상섞 조회 (MSSQL PM_PRES + PM_DRUG) +SELECT G.GoodsName, S.SL_NM_item, S.SL_TOTAL_PRICE +FROM SALE_SUB S +JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode +WHERE S.SL_NO_order = '20260228001234' +``` + +--- + +## 🛠 Ʞ술 슀택 + +| 계잵 | Ʞ술 | 용도 | +|------|------|------| +| **Frontend** | HTML/CSS/JS | ꎀ늬자 페읎지, 킀였슀크, 마읎페읎지 | +| **Backend** | Flask (Python) | REST API, 템플늿 렌더링 | +| **Database** | PostgreSQL | 애니팜 (도맀상) | +| | MSSQL | 팜IT3000 (앜국 POS) | +| | SQLite | 마음늬지 솔룚션 | +| **AI** | OpenAI GPT-4o-mini | 동묌앜 챗뎇, 업셀링 추천 | +| **읞슝** | 칎칎였 OAuth | 소셜 로귞읞 | +| **알늌** | NHN Cloud | 알늌톡/SMS | +| **프로섞슀** | PM2 | 서버 ꎀ늬 | +| **도메읞** | Cloudflare | SSL, 프록시 | + +--- + +## 📁 프로젝튞 구조 + +``` +pharmacy-pos-qr-system/ +├── backend/ +│ ├── app.py # Flask 메읞 앱 +│ ├── db/ +│ │ ├── dbsetup.py # DB 연결 ꎀ늬 +│ │ ├── mileage.db # SQLite (마음늬지) +│ │ └── drug_tags.db # SQLite (동묌앜 태귞) +│ ├── templates/ # HTML 템플늿 +│ │ ├── admin.html +│ │ ├── admin_products.html # 제품 검색 + AI 챗뎇 +│ │ ├── admin_members.html +│ │ ├── kiosk.html +│ │ └── my_page.html +│ ├── services/ +│ │ ├── kakao_client.py # 칎칎였 OAuth +│ │ ├── nhn_alimtalk.py # 알늌톡 +│ │ └── clawdbot_client.py # AI 에읎전튞 +│ ├── utils/ +│ │ └── qr_token_generator.py +│ └── .env # 환겜 변수 +├── docs/ +│ └── ARCHITECTURE.md # 읎 묞서 +├── logs/ +└── ecosystem.config.js # PM2 섀정 +``` + +--- + +## 🔐 환겜 변수 (.env) + +```env +# 칎칎였 OAuth +KAKAO_CLIENT_ID=xxx +KAKAO_CLIENT_SECRET=xxx +KAKAO_REDIRECT_URI=https://mile.0bin.in/claim/kakao/callback + +# OpenAI API +OPENAI_API_KEY=sk-xxx +OPENAI_MODEL=gpt-4o-mini + +# MSSQL 연결 (dbsetup.py에서 섀정) +# SQLite 겜로 (backend/db/) +``` + +--- + +## 📊 죌요 API 엔드포읞튞 + +| 겜로 | 메서드 | 섀명 | DB | +|------|--------|------|-----| +| `/api/products` | GET | 제품 검색 | MSSQL | +| `/api/animal-chat` | POST | 동묌앜 AI 챗뎇 | MSSQL + OpenAI | +| `/api/animal-drugs` | GET | 동묌앜 목록 | MSSQL | +| `/api/claim` | POST | 마음늬지 적늜 | SQLite | +| `/api/members/search` | GET | 회원 검색 | MSSQL | +| `/api/members/history/:phone` | GET | 회원 읎력 통합 | 전첎 | +| `/admin/user/:id` | GET | 회원 상섞 (적늜+구맀+조제) | 전첎 | + +--- + +## 📝 버전 읎력 + +| 날짜 | 버전 | 변겜 낎용 | +|------|------|----------| +| 2026-02-28 | 1.0 | 쎈Ʞ 아킀텍처 묞서 작성 | +| | | 동묌앜 AI 챗뎇 추가 | +| | | 플로팅 챗뎇 UI 구현 | + +--- + +*작성: Clawdbot AI | 청춘앜국 통합 솔룚션* diff --git a/docs/DATABASE_STRUCTURE.md b/docs/DATABASE_STRUCTURE.md new file mode 100644 index 0000000..36e8119 --- /dev/null +++ b/docs/DATABASE_STRUCTURE.md @@ -0,0 +1,165 @@ +# 데읎터베읎슀 구조 (2025-06-30 정늬) + +## 개요 + +양구청춘앜국 시슀템은 3개의 데읎터베읎슀륌 사용합니닀: + +| DB | 용도 | 위치 | +|----|------|------| +| **MSSQL (PM_DRUG)** | POS 제품/재고/판맀 | localhost (팜IT3000) | +| **MSSQL (PM_PRES)** | 처방전/조제 | localhost (팜IT3000) | +| **PostgreSQL** | 동묌앜 상섞 정볎 (RAG) | 192.168.0.87:5432 | +| **SQLite** | 마음늬지 시슀템 | backend/db/mileage.db | + +--- + +## MSSQL 테읎랔 구조 (PM_DRUG) + +### 핵심 테읎랔 ꎀ계 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ CD_GOODS (제품 마슀터) - 178,182개 │ +│ └── DrugCode (PK): LB000003157 │ +│ │ │ +│ ┌─────────┎─────────────┬──────────────────────────┐ │ +│ â–Œ â–Œ â–Œ │ +│ CD_SALEGOODS CD_ITEM_UNIT_MEMBER CD_BARCODE│ +│ (대표 바윔드) (바윔드 N개) ★ (읞첎용) │ +│ 3,053개 N:1 ꎀ계 306,565개│ +└─────────────────────────────────────────────────────────────┘ +``` + +### CD_GOODS (제품 마슀터) + +팜IT3000 전첎 제품 DB. 앜국읎 개별 등록한 제품은 `LB`, `S`로 시작. + +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| DrugCode | nvarchar | PK. `LB000003157` (앜국등록), `050000010` (표쀀) | +| GoodsName | nvarchar | 제품명 | +| Saleprice | decimal | 판맀가 | +| BARCODE | nvarchar | (볎통 비얎있음 - CD_SALEGOODS 사용) | +| POS_BOON | nvarchar | 분류윔드. `010103` = 동묌앜 | +| GoodsSelCode | nvarchar | `B` = 판맀용 | + +### CD_SALEGOODS (판맀용 제품) + +앜국에서 싀제 판맀하는 제품. **대표 바윔드 1개** 저장. + +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| DrugCode | nvarchar | FK → CD_GOODS | +| GoodsName | nvarchar | 제품명 | +| BARCODE | nvarchar | **대표 바윔드** (자첎생성: `999000000xxxx`) | +| SplCode | nvarchar | 공꞉처 윔드 | +| SplName | nvarchar | 공꞉처명 | + +### CD_ITEM_UNIT_MEMBER (바윔드 N개) ★ + +**한 제품에 여러 바윔드** 저장. APC 윔드는 여Ʞ에 저장됚! + +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| DRUGCODE | nvarchar | FK → CD_GOODS.DrugCode | +| CD_CD_BARCODE | nvarchar | **바윔드** (APC: `0230237810109`) | +| CD_CD_UNIT | nvarchar | 닚위윔드 (13, 015 등) | +| CD_MY_UNIT | decimal | 판맀가 | +| CD_IN_UNIT | decimal | 입고가 | +| CHANGE_DATE | nvarchar | 변겜음 (YYYYMMDD) | +| SN | bigint | 음렚번혞 | + +### CD_BARCODE (읞첎용 표쀀) + +식앜처 읞첎용 의앜품 표쀀 바윔드. **동묌앜은 없음!** + +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| DRUGCODE | nvarchar | 제품윔드 | +| BARCODE | nvarchar | 표쀀 바윔드 | +| BASECODE | nvarchar | 표쀀윔드 | +| ETCNAME | nvarchar | 제품명 | +| CL_GUBUN | nvarchar | 구분 (전묞의앜품 등) | + +--- + +## PostgreSQL 구조 (apdb_master) + +동묌앜품 상섞 정볎. 농늌축산검역볞부 데읎터 + LLM 가공. + +### apc 테읎랔 (핵심) + +| 컬럌 | 타입 | 섀명 | +|------|------|------| +| apc | varchar | **PK**. `0230237810109` | +| product_name | varchar | 제품명 | +| company_name | varchar | 제조사 | +| main_ingredient | varchar | 죌성분 | +| efficacy_effect | text | 횚능/횚곌 (HTML) | +| dosage_instructions | text | 용법/용량 (HTML) | +| precautions | text | 죌의사항 (HTML) | +| **llm_pharm** | jsonb | **LLM 가공 정볎** ★ | +| image_url1 | varchar | 앞멎 읎믞지 | +| image_url2 | varchar | 뒷멎 읎믞지 | +| weight_min_kg | float | 최소 첎쀑 | +| weight_max_kg | float | 최대 첎쀑 | + +### llm_pharm JSON 구조 (핵심!) + +```json +{ + "사용가능 동묌": "개, 고양읎", + "분류": "낎부구충제", + "성분1": "메벀닀졞", + "성분2": "프띌지윎텔", + "첎쀑/부위": "첎쀑 5~9kg: 1정, 10~19kg: 2정...", + "êž°ê°„/용법": "1음 1회, 1~2음간 겜구투여", + "월령ꞈꞰ": "생후 1죌 믞만 사용 ꞈ지", + "반렀읞죌의": "사람읎 복용 시 슉시 의사의 조치 필요", + "앞읎믞지": "https://...", + "뒀읎믞지": "https://..." +} +``` + +--- + +## 바윔드 첎계 + +| 팹턮 | 섀명 | 예시 | +|------|------|------| +| `023xxxxxxxx` | **APC (동묌앜 표쀀)** | `0230237810109` | +| `999000000xxxx` | 앜국 자첎 생성 | `9990000001134` | +| `880xxxxxxxxx` | 음반 GS1 바윔드 | `8809989000009` | + +--- + +## 연결 예시 + +**안텔믌킹(5kg읎상) 조회:** + +```sql +-- MSSQL: 바윔드 조회 +SELECT CD_CD_BARCODE +FROM CD_ITEM_UNIT_MEMBER +WHERE DRUGCODE = 'LB000003157' + AND CD_CD_BARCODE LIKE '023%'; +-- → 0230237810109 + +-- PostgreSQL: 상섞 정볎 조회 +SELECT llm_pharm->>'사용가능 동묌', efficacy_effect +FROM apc +WHERE apc = '0230237810109'; +-- → 개, 고양읎 +``` + +--- + +## 읎믞지 URL 규칙 + +``` +https://ani.0bin.in/img/{APC}_F.jpg # 앞멎 +https://ani.0bin.in/img/{APC}_B.jpg # 뒷멎 +https://ani.0bin.in/img/{APC}_D.jpg # 상섞 +``` + +예: `https://ani.0bin.in/img/0230237810109_F.jpg` diff --git a/docs/ENCODING_GUIDE.md b/docs/ENCODING_GUIDE.md new file mode 100644 index 0000000..325a2b1 --- /dev/null +++ b/docs/ENCODING_GUIDE.md @@ -0,0 +1,167 @@ +# 🔀 읞윔딩 가읎드 (필독!) + +> ⚠ **쀑요**: 한Ꞁ 데읎터 처늬 시 반드시 읎 가읎드륌 따륌 것 + +--- + +## ✅ 현재 섀정 (2025-06-30 적용됚) + +``` +환겜변수: PYTHONIOENCODING=utf-8 (User 레벚) +``` + +읎 섀정윌로 몚든 Python 슀크늜튞에서 UTF-8 출력읎 Ʞ볞 적용됩니닀. + +--- + +## 📋 묞제 상황 + +### 슝상 +``` +DB 싀제 값: "안텔믌뜀삐" +윘솔 출력: "안텔믌사사" ← 깚젞서 닀륞 Ꞁ자로 볎임! +``` + +### 원읞 +``` +┌──────────────┐ ┌──────────────┐ ┌──────────────┐ +│ DB (UTF-8) │ ──► │ Python │ ──► │ Windows 윘솔 │ +│ "뜀삐" │ │ stdout │ │ (CP949) │ +│ U+BF40 │ │ │ │ "사사" │ +└──────────────┘ └──────────────┘ └──────────────┘ + ↑ + 읞윔딩 변환 싀팚! +``` + +- Windows 윘솔 Ʞ볞 읞윔딩: **CP949** (한국얎 완성형) +- CP949에서 지원하지 않거나 닀륎게 맀핑되는 유니윔드 묞자 졎재 +- "뜀삐" 같은 Ꞁ자가 "사사"로 잘못 표시됚 + +--- + +## ✅ 핎결책 + +### 1. 슀크늜튞 상닚에 읞윔딩 섀정 추가 (필수!) + +```python +# -*- coding: utf-8 -*- +import sys +import io + +# stdout을 UTF-8로 강제 섀정 +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') +sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') +``` + +### 2. 환겜변수 섀정 (권장) + +```powershell +# PowerShell에서 싀행 전 섀정 +$env:PYTHONIOENCODING = "utf-8" + +# 또는 시슀템 환겜변수로 영구 섀정 +[Environment]::SetEnvironmentVariable("PYTHONIOENCODING", "utf-8", "User") +``` + +### 3. Windows Terminal UTF-8 몚드 + +```powershell +# 윘솔 윔드페읎지륌 UTF-8로 변겜 +chcp 65001 +``` + +### 4. JSON 출력 사용 (가장 안전) + +```python +import json + +# 윘솔 출력 대신 JSON윌로 반환 +result = { + "product_name": "안텔믌뜀삐", + "apc": "0230237010107" +} +print(json.dumps(result, ensure_ascii=False, indent=2)) +``` + +--- + +## 📝 슀크늜튞 템플늿 + +몚든 DB 조회 슀크늜튞는 읎 템플늿을 사용할 것: + +```python +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +슀크늜튞 섀명 +""" +import sys +import io +import json + +# ═══════════════════════════════════════════════════════════ +# 읞윔딩 섀정 (Windows CP949 묞제 방지) +# ═══════════════════════════════════════════════════════════ +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') +sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') + +# ═══════════════════════════════════════════════════════════ +# 메읞 로직 +# ═══════════════════════════════════════════════════════════ + +def main(): + # ... 로직 ... + + # 결곌는 JSON윌로 출력 (가장 안전) + result = {"data": [...]} + print(json.dumps(result, ensure_ascii=False, indent=2)) + +if __name__ == '__main__': + main() +``` + +--- + +## 🔧 Ʞ졎 슀크늜튞 수정 목록 + +| 슀크늜튞 | 상태 | 수정 필요 | +|----------|------|-----------| +| `scripts/query_mileage.py` | ⚠ | 읞윔딩 섀정 추가 | +| `scripts/query_sales.py` | ⚠ | 읞윔딩 섀정 추가 | +| `scripts/query_aniparm.py` | ⚠ | 읞윔딩 섀정 추가 | +| `scripts/search_mssql.py` | ⚠ | 읞윔딩 섀정 추가 | +| `scripts/check_*.py` | ⚠ | 읞윔딩 섀정 추가 | + +--- + +## 🧪 테슀튞 방법 + +```python +# 읞윔딩 테슀튞 슀크늜튞 +# -*- coding: utf-8 -*- +import sys +import io + +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') + +test_words = ["뜀삐", "킹", "안텔믌뜀삐(5kg읎하)", "닀읎로하튞정M(12~22kg)"] + +for word in test_words: + print(f"원볞: {word}") + print(f"유니윔드: {[f'U+{ord(c):04X}' for c in word]}") + print() +``` + +--- + +## ⚠ 죌의사항 + +1. **절대 CP949 출력을 믿지 말 것** - 깚진 Ꞁ자가 닀륞 Ꞁ자로 볎음 수 있음 +2. **DB 데읎터 확읞 시** - 직접 DB 툎로 확읞하거나 JSON 출력 사용 +3. **AI 분석 시** - 유니윔드 윔드포읞튞로 확읞 (U+XXXX) +4. **맀핑 작업 시** - 반드시 양쪜 DB 직접 확읞 후 진행 + +--- + +*작성음: 2025-06-30* +*사유: "뜀삐"가 "사사"로 잘못 표시되는 읞윔딩 묞제 발생* diff --git a/docs/IMAGE_MAPPING_PLAN.md b/docs/IMAGE_MAPPING_PLAN.md new file mode 100644 index 0000000..a560f7c --- /dev/null +++ b/docs/IMAGE_MAPPING_PLAN.md @@ -0,0 +1,238 @@ +# 🖌 동묌앜 읎믞지 맀핑 계획 + +## 📋 목표 +챗뎇에서 동묌앜 추천 시 **제품 읎믞지**륌 핚께 표시 + +--- + +## 🗄 데읎터 현황 + +### MSSQL (앜국 POS - PM_DRUG.CD_GOODS) + +| 컬럌 | 섀명 | 현황 | +|------|------|------| +| `DrugCode` | 제품윔드 | ✅ 전첎 있음 (예: LB000003151) | +| `GoodsName` | 제품명 | ✅ 전첎 있음 | +| `BARCODE` | 바윔드 | ⚠ **14/38개만 있음 (37%)** | +| `BaseCode` | 표쀀윔드 | ❌ **0개** (사용 불가) | + +### PostgreSQL (애니팜 - apc 테읎랔) + +| 컬럌 | 섀명 | +|------|------| +| `idx` | 고유 ID | +| `apc` | APC 윔드 (고유) | +| `product_name` | 제품명 | +| `image_url1` ~ `image_url3` | 읎믞지 URL | +| `godoimage_url_f` | 고도몰 CDN - 앞 읎믞지 | +| `godoimage_url_b` | 고도몰 CDN - ë’€ 읎믞지 | +| `godoimage_url_d` | 고도몰 CDN - 상섞 읎믞지 | + +**확읞 필요**: `apc` 테읎랔에 바윔드 컬럌읎 있는지? + +--- + +## 🔗 맀핑 전략 + +### 옵션 1: 바윔드 맀핑 (37% 컀버) +``` +MSSQL.BARCODE ↔ PostgreSQL.barcode(?) +``` +- 장점: 정확한 맀칭 +- 닚점: 14/38개만 맀핑 가능 + +### 옵션 2: 제품명 유사도 맀핑 (Fuzzy Matching) +```python +from fuzzywuzzy import fuzz + +# MSSQL: "닀읎로하튞정M(12~22kg)" +# PostgreSQL: "닀읎로하튞 정M 12~22kg" 등 유사 읎늄 맀칭 +score = fuzz.partial_ratio(mssql_name, pgsql_name) +if score > 80: + matched = True +``` +- 장점: 100% 컀버 가능 +- 닚점: 였맀칭 위험 + +### 옵션 3: 맀핑 테읎랔 생성 (권장) ✅ +```sql +-- SQLite에 맀핑 테읎랔 생성 +CREATE TABLE drug_image_mapping ( + id INTEGER PRIMARY KEY, + mssql_drug_code TEXT UNIQUE, -- MSSQL DrugCode + pgsql_apc TEXT, -- PostgreSQL apc 윔드 + image_url TEXT, -- 확정된 읎믞지 URL + verified BOOLEAN DEFAULT 0, -- 수동 검슝 여부 + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +**작업 흐멄:** +1. 바윔드 맀칭 (자동) → 14개 슉시 맀핑 +2. 제품명 유사도로 후볎 추천 → ꎀ늬자 확읞 +3. 수동 맀핑 → 나뚞지 제품 + +--- + +## 📊 MSSQL 동묌앜 바윔드 현황 (38개) + +### ✅ 바윔드 있음 (14개) +| 제품명 | DrugCode | 바윔드 | +|--------|----------|--------| +| 가드L(20~40kg) | LB000003570 | 8801244508268 | +| 가드M(10~20kg) | LB000003569 | 8801244508237 | +| 가드S(2~10kg) | LB000003568 | 8801244508220 | +| 하튞가드정L(10~20kg) | LB000003564 | 8801244508343 | +| 하튞가드정M(5~10kg) | LB000003453 | 8801244508329 | +| 하튞가드정S(2.5~5kg) | LB000003452 | 8801244508312 | +| 하튞가드정SS(2.5kg읎하) | LB000003451 | 8801244508305 | +| 심파늬칎L(10~25kg) | LB000003634 | 8801244508534 | +| 심파늬칎M(4~10kg) | LB000003635 | 8801244508435 | +| 안텔믌 | S0000001 | 8809989000009 | +| 섞레타정(10정) | LB000003146 | 8809720800455 | +| 파띌칞L(5kg읎상) | LB000003159 | 8809625390914 | +| 파띌칞S(5kg읎하) | LB000003160 | 8809625390655 | +| 하튞칞임얎랔(11kg읎하) | LB000003696 | 8809625390563 | + +### ❌ 바윔드 없음 (24개) +| 제품명 | DrugCode | +|--------|----------| +| (동)큎늬얎믌50(100정) | LB000003504 | +| 넥슀가드L(15~30kg) | LB000003531 | +| 넥슀가드xs(2~3.5kg) | LB000003530 | +| 닀읎로하튞정M(12~22kg) | LB000003151 | +| 닀읎로하튞정S(5.6~11kg) | LB000003150 | +| 닀읎로하튞정SS(5.6kg읎하) | LB000003149 | +| 레볎M(10~20kg) | LB000003161 | +| 레볎S(2~10kg) | LB000003162 | +| 밀베마읎신A정16mg(대동믞얎) | LB000003353 | +| 밀베마읎신A정24mg(대동믞얎) | LB000003354 | +| 하튞가드정XL(20~40kg) | LB000003545 | +| 안텔믌사사(5kg읎하) | LB000003158 | +| 안텔믌킹(5kg읎상) | LB000003157 | +| 캐치펫캅(2.5~7.5kg)/고양읎 | LB000003167 | +| 캐치펫L(10~20kg)/개 | LB000003166 | +| 캐치펫M(5~10kg)/개 | LB000003165 | +| 캐치펫S(2.5~5kg)/개 | LB000003164 | +| 캐치펫SS(2.5kg읎하/개,고양읎가능) | LB000003163 | +| 하튞플레읎버랔정L(23~45kg) | LB000003544 | +| 하튞플레읎버랔정M(12~22kg) | LB000003152 | +| 하튞플레읎버랔정mini(5.6kg읎하) | LB000003154 | +| 하튞플레읎버랔정S(5.6~11kg) | LB000003153 | +| 하튞플띌랔러슀정M(12~22kg) | LB000003155 | +| 하튞플띌랔러슀정S(11kg읎하) | LB000003156 | + +--- + +## 🛠 구현 닚계 + +### Phase 1: PostgreSQL 조사 +- [ ] apc 테읎랔에 바윔드 컬럌 확읞 +- [ ] 읎믞지 URL 싀제 데읎터 샘플 확읞 +- [ ] 동묌앜 제품 필터링 방법 확읞 (`for_pets = true`?) + +### Phase 2: 맀핑 테읎랔 생성 +- [ ] SQLite에 `drug_image_mapping` 테읎랔 생성 +- [ ] 바윔드 있는 14개 자동 맀핑 시도 +- [ ] ꎀ늬자 페읎지에 맀핑 UI 추가 + +### Phase 3: 챗뎇 연동 +- [ ] AI 응답에서 제품 맀칭 시 읎믞지 URL 포핚 +- [ ] 프론튞엔드에 읎믞지 표시 (썞넀음) +- [ ] 큎늭 시 큰 읎믞지 또는 상섞 페읎지 + +--- + +## 📝 닀음 작업 + +1. **PostgreSQL apc 테읎랔 샘플 조회** + ```sql + SELECT product_name, image_url1, godoimage_url_f + FROM apc + WHERE for_pets = true + LIMIT 10; + ``` + +2. **바윔드 컬럌 졎재 여부 확읞** + ```sql + SELECT column_name + FROM information_schema.columns + WHERE table_name = 'apc' AND column_name LIKE '%barcode%'; + ``` + +--- + +## 🗃 MSSQL 테읎랔 구조 상섞 + +### CD_GOODS vs CD_BARCODE ꎀ계 + +``` +CD_GOODS (제품 마슀터) CD_BARCODE (바윔드 마슀터) +├── DrugCode (PK) ──────────► DRUGCODE (FK) +├── GoodsName ├── BARCODE (개별 바윔드) +├── BARCODE (대표 바윔드) ├── TITLECODE (대표 바윔드) +├── BaseCode (❌ 비얎있음) ├── BASECODE ✅ (100% 있음!) +├── SUNG_CODE ├── SUNG_CODE (성분윔드) +└── Saleprice ├── DIK_CODE (의앜품통합윔드) + ├── ETCNAME (제품명) + └── SPLNAME (제조사) +``` + +**핵심 포읞튞:** +- `CD_GOODS.BaseCode`는 비얎있음 (사용 안 핹) +- `CD_BARCODE.BASECODE`에 표쀀윔드 100% 있음! +- 1개 제품(DrugCode)에 여러 바윔드 가능 (낱개, 박슀 등) + +### CD_BARCODE 맀핑 í‚€ 통계 + +| 컬럌 | 볎유윚 | 섀명 | 왞부 맀핑 | +|------|--------|------|-----------| +| `BARCODE` | 100% | 개별 바윔드 | ⭐ PostgreSQL 맀핑 가능 | +| `BASECODE` | 100% | 표쀀윔드 (식앜처) | 읞첎용만 | +| `TITLECODE` | 100% | 대표 바윔드 | | +| `DIK_CODE` | 68.2% | 의앜품통합윔드 | | +| `SUNG_CODE` | 44.5% | 성분윔드 | | + +### 동묌앜 특읎사항 + +``` +동묌앜 38개 +├── CD_GOODS에 있음 ✅ (POS_BOON = '010103') +├── CD_BARCODE에 없음 ❌ (읞첎용 아님) +├── DrugCode가 "LB"로 시작 (로컬/자첎 등록) +└── BASECODE 맀핑 불가 → PostgreSQL(애니팜) 필요 +``` + +--- + +## 🔗 PostgreSQL(애니팜) 맀핑 전략 + +### 확읞 필요 사항 + +PostgreSQL `apc` 테읎랔에서 확읞할 컬럌: + +```sql +-- 바윔드 ꎀ렚 컬럌 확읞 +SELECT column_name FROM information_schema.columns +WHERE table_name = 'apc' + AND column_name ILIKE '%barcode%'; + +-- 윔드 ꎀ렚 컬럌 확읞 +SELECT column_name FROM information_schema.columns +WHERE table_name = 'apc' + AND (column_name ILIKE '%code%' OR column_name ILIKE '%apc%'); +``` + +### 예상 맀핑 í‚€ + +| MSSQL (CD_GOODS/BARCODE) | PostgreSQL (apc) | 맀핑 방식 | +|--------------------------|------------------|-----------| +| `BARCODE` | `barcode`? | 직접 맀핑 | +| `GoodsName` | `product_name` | 유사도 맀칭 | +| `제조사` | `company_name` | 볎조 í‚€ | + +--- + +*작성음: 2025-06-30* +*업데읎튞: 2025-06-30 - CD_BARCODE 구조 분석 추가* +*프로젝튞: pharmacy-pos-qr-system*