fix: 기존 처방 약재 및 효능 정보 수정
- 쌍화탕: 당귀 → 일당귀로 수정 - 월비탕: 진피초 → 진피(陳皮)로 수정 - 십전대보탕: 각 약재별 효능 설명 추가 - 보음보혈, 보혈지통, 대보원기 등 11개 약재 효능 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f1034c197f
commit
95df32c14d
119
check_sipjeondaebotang.py
Normal file
119
check_sipjeondaebotang.py
Normal file
@ -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()
|
||||
81
check_ssanghwatang.py
Normal file
81
check_ssanghwatang.py
Normal file
@ -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()
|
||||
112
update_sipjeondaebotang.py
Normal file
112
update_sipjeondaebotang.py
Normal file
@ -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❌ 업데이트 중 오류가 발생했습니다.")
|
||||
118
update_ssanghwatang_danggui.py
Normal file
118
update_ssanghwatang_danggui.py
Normal file
@ -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❌ 수정 중 오류가 발생했습니다.")
|
||||
85
update_wolbitang_jinpi.py
Normal file
85
update_wolbitang_jinpi.py
Normal file
@ -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❌ 수정 중 오류가 발생했습니다.")
|
||||
Loading…
Reference in New Issue
Block a user