pharmacy-pos-qr-system/docs/질병코드기반 제품추천.md
시골약사 032795c0fa docs: GraphRAG 및 그래프 DB 전환 기획 문서 추가
약국 POS 시스템의 GraphRAG 기반 추천 시스템 구축 관련 문서:

## 핵심 설계 문서

1. 질병코드기반 제품추천.md
   - ICD-10 질병 코드 활용 추천 시스템 설계
   - 계층 구조 (질병 → 질병군 → 제품군 → 개별 제품)
   - 처방전 기반 추천 알고리즘

2. complex-product-graph-modeling.md
   - 복합제(비맥스제트 등) 그래프 모델링
   - 성분 간 시너지 효과 표현
   - 복합 증상 매칭 쿼리 예시

3. pubmed-graphrag-workflow.md
   - PubMed → GraphRAG 전체 워크플로우 (5단계)
   - 논문 검색, 근거 추출, 지식 그래프 구축
   - MCP Server 개발 가이드

## 그래프 DB 비교 및 평가

4. sqlite-graph-evaluation.md
   - SQLite vs SQLite-Graph vs Neo4j 비교
   - 현 시점(2026-01) 평가: 기존 SQL 유지 권장
   - 6개월 후 재평가 계획

5. opensource-graph-db-comparison.md
   - 오픈소스 그래프 DB 비교 (Neo4j, ArangoDB 등)

6. 온톨로지로전환.md
   - 관계형 DB → 온톨로지 구조 전환 가이드
   - PubMed RAG 활용 방안
   - 추론 규칙 설계

## PubMed GraphRAG 활용

7. pycnogenol-multi-indication-graphrag.md
   - 피크노제놀 다중 적응증 GraphRAG 구축 사례
   - 7가지 적응증별 근거 수준

8. grpahrag_아쉬아간다.md
   - Ashwagandha GraphRAG 구축 사례

9. pubdmed이용ai.md
   - PubMed + AI 통합 활용 가이드

## 추가 워크플로우

10. pubmed-graphrag-workflow_next.md
    - 다음 단계 워크플로우

11. PostgresGRAPH전환.md
    - PostgreSQL + Apache AGE 전환 가이드

모든 문서는 한국어로 작성되었으며, 코드 예시는 영어로 포함.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-24 21:04:56 +09:00

7.0 KiB

정말 좋은 아이디어입니다! 질병코드(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 컬럼만 추가해서 시작할까요?