- 월비탕 1차~4차 단계별 처방 추가 (WBT001-1 ~ WBT001-4) - 삼소음 처방 추가 (SSE001) - 처방 추가 가이드 문서 작성 - 약재 성분 코드 확인 및 검증 스크립트 추가 월비탕: 단계별 비만치료 처방 (1차~4차) 삼소음: 리기화담, 해표산한 효능의 기침/가래 치료 처방 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
124 lines
3.8 KiB
Python
124 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
삼소음 처방 데이터 검증 스크립트
|
|
"""
|
|
|
|
import sqlite3
|
|
|
|
def verify_samsoeun():
|
|
"""추가된 삼소음 처방 검증"""
|
|
|
|
conn = sqlite3.connect('database/kdrug.db')
|
|
cursor = conn.cursor()
|
|
|
|
print("🔍 삼소음 처방 상세 검증")
|
|
print("="*70)
|
|
|
|
# 삼소음 처방 정보 조회
|
|
cursor.execute("""
|
|
SELECT f.formula_id, f.formula_code, f.formula_name, f.description,
|
|
f.base_cheop, f.base_pouches
|
|
FROM formulas f
|
|
WHERE f.formula_code = 'SSE001'
|
|
""")
|
|
|
|
formula = cursor.fetchone()
|
|
|
|
if formula:
|
|
formula_id, code, name, description, base_cheop, base_pouches = formula
|
|
|
|
print(f"\n📝 {name} ({code})")
|
|
print(f" ID: {formula_id}")
|
|
print(f" 설명: {description}")
|
|
print(f" 기본 첩수: {base_cheop}첩")
|
|
print(f" 기본 포수: {base_pouches}포")
|
|
|
|
# 약재 구성 상세 조회
|
|
print(f"\n 약재 구성 (1첩 기준):")
|
|
print(" " + "-"*60)
|
|
|
|
cursor.execute("""
|
|
SELECT hm.herb_name, fi.grams_per_cheop, fi.notes, hm.ingredient_code
|
|
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()
|
|
total_1cheop = 0
|
|
total_20cheop = 0 # 20첩(1제) 기준
|
|
|
|
print(f" {'약재명':15s} | {'1첩(g)':>8s} | {'20첩(g)':>8s} | {'효능'}")
|
|
print(" " + "-"*60)
|
|
|
|
for herb_name, grams, notes, code in ingredients:
|
|
total_1cheop += grams
|
|
grams_20 = grams * 20
|
|
total_20cheop += grams_20
|
|
print(f" {herb_name:15s} | {grams:8.1f} | {grams_20:8.1f} | {notes}")
|
|
|
|
print(" " + "-"*60)
|
|
print(f" {'총 용량':15s} | {total_1cheop:8.1f} | {total_20cheop:8.1f} |")
|
|
|
|
# 원본 데이터와 비교
|
|
print(f"\n📊 원본 데이터와 비교:")
|
|
print(" " + "-"*60)
|
|
|
|
original_data = {
|
|
"인삼": (4, 80),
|
|
"소엽": (4, 80),
|
|
"전호": (4, 80),
|
|
"반하": (4, 80),
|
|
"갈근": (4, 80),
|
|
"적복령": (4, 80),
|
|
"대조": (4, 80),
|
|
"진피": (3, 60),
|
|
"길경": (3, 60),
|
|
"지각": (3, 60),
|
|
"감초": (3, 60),
|
|
"건강": (1, 20)
|
|
}
|
|
|
|
print(f" {'약재':10s} | {'원본 1첩':>10s} | {'DB 1첩':>10s} | {'일치여부'}")
|
|
print(" " + "-"*60)
|
|
|
|
# DB 데이터를 딕셔너리로 변환
|
|
db_data = {}
|
|
for herb_name, grams, notes, code in ingredients:
|
|
# 약재명 정규화
|
|
if "자소엽" in herb_name:
|
|
key = "소엽"
|
|
elif "복령" in herb_name:
|
|
key = "적복령"
|
|
elif "대추" in herb_name:
|
|
key = "대조"
|
|
elif "진피" in herb_name:
|
|
key = "진피"
|
|
else:
|
|
key = herb_name
|
|
|
|
db_data[key] = grams
|
|
|
|
# 비교
|
|
all_match = True
|
|
for herb, (orig_1, orig_20) in original_data.items():
|
|
db_amount = db_data.get(herb, 0)
|
|
match = "✅" if abs(orig_1 - db_amount) < 0.01 else "❌"
|
|
if match == "❌":
|
|
all_match = False
|
|
print(f" {herb:10s} | {orig_1:10.1f}g | {db_amount:10.1f}g | {match}")
|
|
|
|
print("\n" + "="*70)
|
|
if all_match:
|
|
print("✅ 모든 약재가 원본 데이터와 일치합니다!")
|
|
else:
|
|
print("⚠️ 일부 약재가 원본 데이터와 일치하지 않습니다.")
|
|
|
|
else:
|
|
print("❌ 삼소음 처방을 찾을 수 없습니다.")
|
|
|
|
conn.close()
|
|
|
|
if __name__ == "__main__":
|
|
verify_samsoeun() |