From 95df32c14da10a48987d331051d26d13e6448987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=9C=EA=B3=A8=EC=95=BD=EC=82=AC?= Date: Wed, 18 Feb 2026 04:37:16 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=20=EC=B2=98=EB=B0=A9?= =?UTF-8?q?=20=EC=95=BD=EC=9E=AC=20=EB=B0=8F=20=ED=9A=A8=EB=8A=A5=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 쌍화탕: 당귀 → 일당귀로 수정 - 월비탕: 진피초 → 진피(陳皮)로 수정 - 십전대보탕: 각 약재별 효능 설명 추가 - 보음보혈, 보혈지통, 대보원기 등 11개 약재 효능 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- check_sipjeondaebotang.py | 119 +++++++++++++++++++++++++++++++++ check_ssanghwatang.py | 81 ++++++++++++++++++++++ update_sipjeondaebotang.py | 112 +++++++++++++++++++++++++++++++ update_ssanghwatang_danggui.py | 118 ++++++++++++++++++++++++++++++++ update_wolbitang_jinpi.py | 85 +++++++++++++++++++++++ 5 files changed, 515 insertions(+) create mode 100644 check_sipjeondaebotang.py create mode 100644 check_ssanghwatang.py create mode 100644 update_sipjeondaebotang.py create mode 100644 update_ssanghwatang_danggui.py create mode 100644 update_wolbitang_jinpi.py diff --git a/check_sipjeondaebotang.py b/check_sipjeondaebotang.py new file mode 100644 index 0000000..ccff99d --- /dev/null +++ b/check_sipjeondaebotang.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +""" +십전대보탕 데이터 조회 및 분석 +""" + +import sqlite3 + +def check_sipjeondaebotang(): + """십전대보탕 처방 상세 조회""" + + conn = sqlite3.connect('database/kdrug.db') + cursor = conn.cursor() + + print("🔍 십전대보탕 처방 조회") + print("="*70) + + # 십전대보탕 처방 찾기 + cursor.execute(""" + SELECT formula_id, formula_code, formula_name, formula_type, + base_cheop, base_pouches, description, is_active + FROM formulas + WHERE formula_name LIKE '%십전대보%' + OR formula_name LIKE '%십전대보탕%' + OR formula_code LIKE '%SJDB%' + """) + + formulas = cursor.fetchall() + + if not formulas: + print("❌ 십전대보탕 처방을 찾을 수 없습니다.") + else: + for formula_id, code, name, f_type, cheop, pouches, desc, active in formulas: + print(f"\n📋 {name} ({code})") + print(f" ID: {formula_id}") + print(f" 타입: {f_type if f_type else '❌ 없음'}") + print(f" 기본 첩수: {cheop if cheop else '❌ 없음'}") + print(f" 기본 포수: {pouches if pouches else '❌ 없음'}") + print(f" 설명: {desc if desc else '❌ 없음'}") + print(f" 활성 상태: {'활성' if active else '비활성'}") + + # 처방 구성 약재 확인 + cursor.execute(""" + SELECT hm.herb_name, hm.ingredient_code, fi.grams_per_cheop, fi.notes + FROM formula_ingredients fi + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE fi.formula_id = ? + ORDER BY fi.sort_order + """, (formula_id,)) + + ingredients = cursor.fetchall() + print(f"\n 구성 약재 ({len(ingredients)}개):") + print(" " + "-"*60) + print(f" {'약재명':15s} | {'용량(g)':>8s} | {'효능 설명'}") + print(" " + "-"*60) + + total_amount = 0 + for herb_name, code, amount, notes in ingredients: + total_amount += amount + notes_str = notes if notes else "❌ 효능 설명 없음" + print(f" {herb_name:15s} | {amount:8.1f} | {notes_str}") + + print(" " + "-"*60) + print(f" {'총 용량':15s} | {total_amount:8.1f} |") + + # 빠진 정보 체크 + print(f"\n ⚠️ 빠진 정보 체크:") + missing = [] + if not desc: + missing.append("처방 설명") + if not f_type: + missing.append("처방 타입") + if not cheop: + missing.append("기본 첩수") + if not pouches: + missing.append("기본 포수") + + # 약재별 효능 설명 체크 + missing_notes = [] + for herb_name, code, amount, notes in ingredients: + if not notes: + missing_notes.append(herb_name) + + if missing: + print(f" - 처방 기본 정보: {', '.join(missing)}") + if missing_notes: + print(f" - 약재 효능 설명 없음: {', '.join(missing_notes)}") + + if not missing and not missing_notes: + print(" ✅ 모든 정보가 완비되어 있습니다.") + + # 십전대보탕 표준 구성 확인 + print(f"\n\n📚 십전대보탕 표준 구성 (참고용):") + print("="*70) + print(""" + 십전대보탕은 사군자탕(인삼, 백출, 복령, 감초)과 + 사물탕(당귀, 천궁, 백작약, 숙지황)을 합방한 처방으로, + 황기와 육계를 추가하여 총 10개 약재로 구성됩니다. + + 주요 효능: 기혈양허(氣血兩虛)를 치료하는 대표 처방 + - 대보기혈(大補氣血): 기와 혈을 크게 보함 + - 병후 회복, 수술 후 회복, 만성 피로에 사용 + + 표준 구성 (1첩 기준): + - 인삼 4g (대보원기) + - 황기 4g (보기승양) + - 백출 4g (보기건비) + - 복령 4g (건비이수) + - 감초 2g (조화제약) + - 당귀(일당귀) 4g (보혈) + - 천궁 4g (활혈) + - 백작약 4g (보혈) + - 숙지황 4g (보음보혈) + - 육계 2g (온양보화) + """) + + conn.close() + +if __name__ == "__main__": + check_sipjeondaebotang() \ No newline at end of file diff --git a/check_ssanghwatang.py b/check_ssanghwatang.py new file mode 100644 index 0000000..71352b9 --- /dev/null +++ b/check_ssanghwatang.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +""" +쌍화탕 처방 및 당귀 약재 확인 +""" + +import sqlite3 + +def check_ssanghwatang(): + conn = sqlite3.connect('database/kdrug.db') + cursor = conn.cursor() + + # 쌍화탕 처방 찾기 + print("🔍 쌍화탕 처방 검색...") + print("="*60) + + cursor.execute(""" + SELECT formula_id, formula_code, formula_name + FROM formulas + WHERE formula_name LIKE '%쌍화%' + """) + + formulas = cursor.fetchall() + + if not formulas: + print("❌ 쌍화탕 처방을 찾을 수 없습니다.") + else: + for formula_id, code, name in formulas: + print(f"\n📋 {name} ({code})") + + # 처방 구성 약재 확인 + cursor.execute(""" + SELECT hm.herb_name, hm.ingredient_code, fi.grams_per_cheop + FROM formula_ingredients fi + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE fi.formula_id = ? + ORDER BY fi.sort_order + """, (formula_id,)) + + ingredients = cursor.fetchall() + print(" 구성 약재:") + for herb_name, code, amount in ingredients: + if '당귀' in herb_name: + print(f" ⚠️ {herb_name} ({code}): {amount}g <-- 당귀 발견!") + else: + print(f" - {herb_name} ({code}): {amount}g") + + # 당귀 관련 약재 검색 + print("\n\n🌿 당귀 관련 약재 검색...") + print("="*60) + + cursor.execute(""" + SELECT ingredient_code, herb_name, herb_name_hanja + FROM herb_masters + WHERE herb_name LIKE '%당귀%' + ORDER BY herb_name + """) + + danggui_herbs = cursor.fetchall() + for code, name, hanja in danggui_herbs: + print(f"{code}: {name} ({hanja})") + + # 일당귀 확인 + print("\n✅ 일당귀 검색:") + cursor.execute(""" + SELECT ingredient_code, herb_name, herb_name_hanja + FROM herb_masters + WHERE herb_name = '일당귀' + OR herb_name LIKE '%일당귀%' + """) + + result = cursor.fetchall() + if result: + for code, name, hanja in result: + print(f" {code}: {name} ({hanja})") + else: + print(" ❌ 일당귀를 찾을 수 없음") + + conn.close() + +if __name__ == "__main__": + check_ssanghwatang() \ No newline at end of file diff --git a/update_sipjeondaebotang.py b/update_sipjeondaebotang.py new file mode 100644 index 0000000..bcb4ceb --- /dev/null +++ b/update_sipjeondaebotang.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +""" +십전대보탕 약재별 효능 설명 추가 +""" + +import sqlite3 + +def update_sipjeondaebotang(): + """십전대보탕 약재별 효능 설명 업데이트""" + + conn = sqlite3.connect('database/kdrug.db') + cursor = conn.cursor() + + try: + # 십전대보탕 ID 확인 + cursor.execute(""" + SELECT formula_id, formula_name + FROM formulas + WHERE formula_code = 'SJDB01' + """) + + result = cursor.fetchone() + if not result: + print("❌ 십전대보탕을 찾을 수 없습니다.") + return False + + formula_id, formula_name = result + print(f"📋 {formula_name} (ID: {formula_id}) 효능 설명 추가") + print("="*60) + + # 각 약재별 효능 설명 업데이트 + herb_notes = { + "숙지황": "보음보혈", + "작약": "보혈지통", + "인삼": "대보원기", + "백출": "보기건비", + "황기": "보기승양", + "대추": "보중익기", + "일당귀": "보혈활혈", + "복령": "건비이수", + "감초": "조화제약", + "천궁": "활혈행기", + "반하생강백반제": "화담지구" + } + + print("\n약재별 효능 설명 추가:") + print("-"*60) + + for herb_name, notes in herb_notes.items(): + # 약재 코드 찾기 + cursor.execute(""" + SELECT fi.ingredient_id, hm.herb_name, fi.notes + FROM formula_ingredients fi + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE fi.formula_id = ? AND hm.herb_name = ? + """, (formula_id, herb_name)) + + result = cursor.fetchone() + if result: + ingredient_id, actual_name, current_notes = result + + # 효능 설명 업데이트 + cursor.execute(""" + UPDATE formula_ingredients + SET notes = ? + WHERE ingredient_id = ? + """, (notes, ingredient_id)) + + if current_notes: + print(f" {actual_name}: '{current_notes}' → '{notes}'") + else: + print(f" {actual_name}: 효능 설명 추가 → '{notes}'") + else: + print(f" ⚠️ {herb_name}: 약재를 찾을 수 없음") + + conn.commit() + print(f"\n✅ 효능 설명 추가 완료!") + + # 업데이트 후 확인 + print(f"\n📊 업데이트된 십전대보탕 구성:") + print("-"*60) + + cursor.execute(""" + SELECT hm.herb_name, fi.grams_per_cheop, fi.notes + FROM formula_ingredients fi + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE fi.formula_id = ? + ORDER BY fi.sort_order + """, (formula_id,)) + + results = cursor.fetchall() + for herb, amount, notes in results: + check = "✅" if notes else "❌" + print(f" {check} {herb:15s}: {amount:5.1f}g - {notes if notes else '효능 설명 없음'}") + + except sqlite3.Error as e: + print(f"❌ 데이터베이스 오류: {e}") + conn.rollback() + return False + finally: + conn.close() + + return True + +if __name__ == "__main__": + print("🌿 십전대보탕 효능 설명 추가 프로그램") + print("="*60) + + if update_sipjeondaebotang(): + print("\n✅ 업데이트 작업이 완료되었습니다.") + else: + print("\n❌ 업데이트 중 오류가 발생했습니다.") \ No newline at end of file diff --git a/update_ssanghwatang_danggui.py b/update_ssanghwatang_danggui.py new file mode 100644 index 0000000..cc650b3 --- /dev/null +++ b/update_ssanghwatang_danggui.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +""" +쌍화탕 처방의 당귀를 일당귀로 수정 +""" + +import sqlite3 + +def update_danggui(): + """쌍화탕의 당귀를 일당귀로 수정""" + + conn = sqlite3.connect('database/kdrug.db') + cursor = conn.cursor() + + try: + # 현재 쌍화탕에 등록된 당귀 확인 + print("🔍 현재 쌍화탕 처방의 당귀 확인...") + cursor.execute(""" + SELECT f.formula_name, fi.ingredient_code, hm.herb_name, fi.grams_per_cheop + FROM formulas f + JOIN formula_ingredients fi ON f.formula_id = fi.formula_id + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE f.formula_name LIKE '%쌍화%' + AND hm.herb_name LIKE '%당귀%' + """) + + current = cursor.fetchall() + print(f"현재 상태:") + for name, code, herb, amount in current: + print(f" - {name}: {herb} ({code}) - {amount}g") + + # 당귀(3105H1AHM)를 일당귀(3403H1AHM)로 변경 + print(f"\n✏️ 당귀(3105H1AHM) → 일당귀(3403H1AHM)로 변경 중...") + + # 쌍화탕 처방 ID 확인 + cursor.execute(""" + SELECT formula_id + FROM formulas + WHERE formula_name LIKE '%쌍화%' + """) + + formula_ids = [row[0] for row in cursor.fetchall()] + + if formula_ids: + # 당귀를 일당귀로 수정 + cursor.execute(""" + UPDATE formula_ingredients + SET ingredient_code = '3403H1AHM' + WHERE ingredient_code = '3105H1AHM' + AND formula_id IN ({}) + """.format(','.join('?' * len(formula_ids))), formula_ids) + + updated_count = cursor.rowcount + print(f"✅ {updated_count}개 항목 수정됨") + + # 변경 후 확인 + print(f"\n🔍 수정 후 확인...") + cursor.execute(""" + SELECT f.formula_name, fi.ingredient_code, hm.herb_name, fi.grams_per_cheop + FROM formulas f + JOIN formula_ingredients fi ON f.formula_id = fi.formula_id + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE f.formula_name LIKE '%쌍화%' + AND hm.herb_name LIKE '%당귀%' + """) + + updated = cursor.fetchall() + print(f"수정된 상태:") + for name, code, herb, amount in updated: + print(f" - {name}: {herb} ({code}) - {amount}g") + + conn.commit() + print(f"\n✅ 쌍화탕 당귀 수정 완료!") + + # 전체 처방 구성 확인 + print(f"\n📋 수정된 쌍화탕 전체 구성:") + print("-"*60) + + for formula_id in formula_ids: + cursor.execute(""" + SELECT f.formula_name + FROM formulas f + WHERE f.formula_id = ? + """, (formula_id,)) + + formula_name = cursor.fetchone()[0] + print(f"\n{formula_name}:") + + cursor.execute(""" + SELECT hm.herb_name, fi.grams_per_cheop, fi.notes + FROM formula_ingredients fi + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE fi.formula_id = ? + ORDER BY fi.sort_order + """, (formula_id,)) + + for herb, amount, notes in cursor.fetchall(): + marker = "✅" if herb == "일당귀" else " " + print(f" {marker} {herb}: {amount}g ({notes if notes else ''})") + else: + print("❌ 쌍화탕 처방을 찾을 수 없습니다.") + + except sqlite3.Error as e: + print(f"❌ 데이터베이스 오류: {e}") + conn.rollback() + return False + finally: + conn.close() + + return True + +if __name__ == "__main__": + print("🌿 쌍화탕 당귀 수정 프로그램") + print("="*60) + + if update_danggui(): + print("\n✅ 수정 작업이 완료되었습니다.") + else: + print("\n❌ 수정 중 오류가 발생했습니다.") \ No newline at end of file diff --git a/update_wolbitang_jinpi.py b/update_wolbitang_jinpi.py new file mode 100644 index 0000000..1e8e858 --- /dev/null +++ b/update_wolbitang_jinpi.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +""" +월비탕 처방의 진피초를 진피(陳皮)로 수정 +""" + +import sqlite3 + +def update_jinpi(): + """진피초를 진피로 수정""" + + conn = sqlite3.connect('database/kdrug.db') + cursor = conn.cursor() + + try: + # 현재 진피초로 등록된 월비탕 처방 확인 + print("🔍 현재 월비탕 처방에 등록된 진피 확인...") + cursor.execute(""" + SELECT f.formula_name, fi.ingredient_code, hm.herb_name + FROM formulas f + JOIN formula_ingredients fi ON f.formula_id = fi.formula_id + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE f.formula_code LIKE 'WBT%' + AND hm.herb_name LIKE '%진피%' + ORDER BY f.formula_code + """) + + current = cursor.fetchall() + print(f"현재 상태:") + for name, code, herb in current: + print(f" - {name}: {herb} ({code})") + + # 진피초(3632H1AHM)를 진피(陳皮)(3466H1AHM)로 변경 + print(f"\n✏️ 진피초(3632H1AHM) → 진피(陳皮)(3466H1AHM)로 변경 중...") + + cursor.execute(""" + UPDATE formula_ingredients + SET ingredient_code = '3466H1AHM' + WHERE ingredient_code = '3632H1AHM' + AND formula_id IN ( + SELECT formula_id + FROM formulas + WHERE formula_code LIKE 'WBT%' + ) + """) + + updated_count = cursor.rowcount + print(f"✅ {updated_count}개 항목 수정됨") + + # 변경 후 확인 + print(f"\n🔍 수정 후 확인...") + cursor.execute(""" + SELECT f.formula_name, fi.ingredient_code, hm.herb_name + FROM formulas f + JOIN formula_ingredients fi ON f.formula_id = fi.formula_id + JOIN herb_masters hm ON fi.ingredient_code = hm.ingredient_code + WHERE f.formula_code LIKE 'WBT%' + AND hm.herb_name LIKE '%진피%' + ORDER BY f.formula_code + """) + + updated = cursor.fetchall() + print(f"수정된 상태:") + for name, code, herb in updated: + print(f" - {name}: {herb} ({code})") + + conn.commit() + print(f"\n✅ 진피 수정 완료!") + + except sqlite3.Error as e: + print(f"❌ 데이터베이스 오류: {e}") + conn.rollback() + return False + finally: + conn.close() + + return True + +if __name__ == "__main__": + print("🌿 월비탕 진피 수정 프로그램") + print("="*60) + + if update_jinpi(): + print("\n✅ 수정 작업이 완료되었습니다.") + else: + print("\n❌ 수정 중 오류가 발생했습니다.") \ No newline at end of file