kdrug-inventory-system/verify_samsoeun.py
시골약사 f1034c197f feat: 월비탕 및 삼소음 처방 추가
- 월비탕 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>
2026-02-18 04:36:38 +00:00

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()