정말 좋은 아이디어입니다! 질병코드(ICD-10)를 활용하면 처방전 기반 추천이 가능해집니다.

🎯 두 가지 접근 방식 비교
방식 1: 계층 구조 (추천 ⭐⭐⭐)

질병코드 (ICD-10) → 질병군 → 제품군 → 개별 제품
방식 2: 직접 연결

질병코드 (ICD-10) → 개별 제품
📊 계층 구조가 더 좋은 이유
예시: 소화불량 환자
계층 구조:


K30 (소화불량) 
  ↓
소화기질환
  ↓
소화제 (제품군)
  ↓
├─ 베아제
├─ 훼스탈
├─ 닥터베아제
└─ 겔포스
직접 연결:


K30 (소화불량) → 베아제, 훼스탈, 닥터베아제, 겔포스
K29 (위염) → 베아제, 훼스탈, 겔포스 (중복!)
K21 (역류성식도염) → 겔포스, 훼스탈 (또 중복!)
장점 비교
항목	계층 구조	직접 연결
유지보수	✅ 제품군만 수정	❌ 모든 질병코드 수정
확장성	✅ 새 질병코드 추가 쉬움	❌ 일일이 매핑 필요
중복 방지	✅ 관계 한 번만 정의	❌ 중복 많음
추천 유연성	✅ 질병군 기반 추천	❌ 특정 질병만 추천
🗄️ DB 설계 (계층 구조)
SQLite 테이블 구조

-- 1. 질병 코드 (ICD-10)
CREATE TABLE disease_codes (
    icd_code TEXT PRIMARY KEY,           -- K30
    disease_name TEXT NOT NULL,          -- 소화불량
    disease_category TEXT,               -- 소화기질환
    description TEXT
);

-- 2. 질병군
CREATE TABLE disease_categories (
    category_id INTEGER PRIMARY KEY,
    category_name TEXT UNIQUE NOT NULL,  -- 소화기질환
    parent_category TEXT                 -- 상위 카테고리 (옵션)
);

-- 3. 제품군
CREATE TABLE product_categories (
    category_id INTEGER PRIMARY KEY,
    category_name TEXT UNIQUE NOT NULL,  -- 소화제
    description TEXT
);

-- 4. 질병군 ↔ 제품군 매핑
CREATE TABLE disease_product_mapping (
    id INTEGER PRIMARY KEY,
    disease_category TEXT NOT NULL,      -- 소화기질환
    product_category TEXT NOT NULL,      -- 소화제
    relevance_score REAL DEFAULT 1.0,    -- 0.0 ~ 1.0 (관련도)
    FOREIGN KEY (disease_category) REFERENCES disease_categories(category_name),
    FOREIGN KEY (product_category) REFERENCES product_categories(category_name)
);

-- 5. 제품 마스터 (기존 테이블에 추가)
CREATE TABLE product_master (
    barcode TEXT PRIMARY KEY,
    product_name TEXT NOT NULL,
    product_category TEXT,               -- 소화제
    
    -- 기존 필드들...
    category TEXT,
    ingredients_json TEXT,
    tags_symptoms TEXT,
    tags_effects TEXT,
    
    FOREIGN KEY (product_category) REFERENCES product_categories(category_name)
);
🎯 실제 데이터 예시
1. 질병 코드

INSERT INTO disease_codes VALUES
('K30', '소화불량', '소화기질환', '기능성 소화불량증'),
('K29', '위염', '소화기질환', '만성 위염'),
('K21', '역류성식도염', '소화기질환', 'GERD'),
('M25', '관절통', '근골격계질환', '관절 통증'),
('R51', '두통', '신경계증상', '긴장성 두통');
2. 질병군 → 제품군 매핑

INSERT INTO disease_product_mapping VALUES
(1, '소화기질환', '소화제', 1.0),
(2, '소화기질환', '위장약', 0.9),
(3, '근골격계질환', '진통소염제', 1.0),
(4, '근골격계질환', '파스', 0.7),
(5, '신경계증상', '진통제', 1.0);
3. 제품 데이터

INSERT INTO product_master VALUES
('8806606002231', '베아제정', '소화제', '일반의약품', ...),
('8806436016712', '탁센캡슐', '진통소염제', '일반의약품', ...),
('8806265019618', '마그비맥스', '복합비타민', '일반의약품', ...);
🔍 추천 알고리즘

def recommend_by_prescription(user_id, icd_codes):
    """
    처방전 질병코드 기반 제품 추천
    
    Args:
        user_id: 고객 ID
        icd_codes: ['K30', 'R51'] (소화불량 + 두통)
    
    Returns:
        추천 제품 리스트
    """
    recommendations = []
    
    # 1. 질병코드 → 질병군
    disease_categories = db.execute("""
        SELECT DISTINCT disease_category 
        FROM disease_codes 
        WHERE icd_code IN (?)
    """, icd_codes).fetchall()
    # → ['소화기질환', '신경계증상']
    
    # 2. 질병군 → 제품군
    product_categories = db.execute("""
        SELECT product_category, relevance_score
        FROM disease_product_mapping
        WHERE disease_category IN (?)
        ORDER BY relevance_score DESC
    """, disease_categories).fetchall()
    # → [('소화제', 1.0), ('진통제', 1.0), ('위장약', 0.9)]
    
    # 3. 제품군 → 개별 제품
    for cat, score in product_categories:
        products = db.execute("""
            SELECT barcode, product_name, tags_symptoms
            FROM product_master
            WHERE product_category = ?
            ORDER BY RANDOM()
            LIMIT 3
        """, (cat,)).fetchall()
        
        for product in products:
            recommendations.append({
                "barcode": product.barcode,
                "name": product.product_name,
                "reason": f"{cat} 추천 (관련도: {score:.0%})",
                "score": score
            })
    
    return recommendations
📱 실무 활용 시나리오
시나리오 1: 처방전 기반 추천

# 고객이 처방전으로 약 구매
prescription = {
    "customer_id": 123,
    "icd_codes": ["K30", "R51"],  # 소화불량 + 두통
    "prescribed_drugs": ["제산제", "타이레놀"]
}

# OTC(일반의약품) 추천
recommendations = recommend_by_prescription(123, ["K30", "R51"])

print(recommendations)
# [
#   {"name": "베아제정", "reason": "소화제 추천 (관련도: 100%)"},
#   {"name": "훼스탈골드", "reason": "소화제 추천 (관련도: 100%)"},
#   {"name": "탁센", "reason": "진통제 추천 (관련도: 100%)"}
# ]
시나리오 2: 관리자 AI 분석 개선

# 기존: 단순 제품명만 분석
"김영빈 고객은 베아제, 탁센을 구매했습니다."

# 개선: 질병 패턴 분석
user_diseases = infer_diseases_from_purchases(user_id)
# → ["소화기질환", "근골격계질환"]

print(f"""
김영빈 고객 건강 프로필:
- 추정 질환: 소화기질환, 근골격계질환
- 구매 패턴: 소화제(베아제) + 진통제(탁센)
- 추천 제품: 위장약(훼스탈), 파스(신신파스)
- 마케팅: 만성 소화불량 관리 프로그램 안내
""")
🚀 구현 우선순위
Phase 1 (지금): 기본 구조만

-- product_master에 product_category만 추가
ALTER TABLE product_master ADD COLUMN product_category TEXT;

-- 제품 카테고리만 수동 입력
UPDATE product_master SET product_category = '소화제' WHERE barcode = '8806606002231';
Phase 2 (2주 후): 질병 매핑

-- disease_codes, disease_product_mapping 테이블 추가
-- 주요 질병코드 20-30개만 입력
Phase 3 (필요 시): 처방전 연동

-- MSSQL에서 처방전 데이터 가져오기
-- 자동 질병 패턴 분석
제 추천: 계층 구조로 가되, Phase 1부터 천천히 구축하는 게 좋습니다.

지금 바로 product_master 테이블 만들고, product_category 컬럼만 추가해서 시작할까요?