- 월비탕 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>
213 lines
8.4 KiB
Python
213 lines
8.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
월비탕 단계별 처방 추가 스크립트
|
|
|
|
월비탕 1차부터 4차까지 단계별로 처방을 등록합니다.
|
|
각 단계마다 약재의 용량이 다릅니다.
|
|
"""
|
|
|
|
import sqlite3
|
|
from datetime import datetime
|
|
|
|
def add_wolbitang_formulas():
|
|
"""월비탕 단계별 처방 추가"""
|
|
|
|
# 약재 성분 코드 매핑
|
|
herb_codes = {
|
|
"마황": "3147H1AHM",
|
|
"석고": "3265H1AHM",
|
|
"감초": "3007H1AHM",
|
|
"진피": "3632H1AHM",
|
|
"복령": "3215H1AHM",
|
|
"갈근": "3002H1AHM",
|
|
"지황": "3463H1AHM", # 건지황 대신 지황 사용
|
|
"창출": "3472H1AHM"
|
|
}
|
|
|
|
# 월비탕 단계별 처방 데이터
|
|
wolbitang_prescriptions = [
|
|
{
|
|
'formula_code': 'WBT001-1',
|
|
'formula_name': '월비탕 1차',
|
|
'formula_type': 'CUSTOM',
|
|
'base_cheop': 1,
|
|
'base_pouches': 1,
|
|
'description': '월비탕 1차 - 단계별 처방의 첫 번째 단계',
|
|
'ingredients': [
|
|
{'herb': '마황', 'amount': 4.0, 'notes': '발한해표'},
|
|
{'herb': '석고', 'amount': 3.0, 'notes': '청열사화'},
|
|
{'herb': '감초', 'amount': 3.0, 'notes': '조화제약'},
|
|
{'herb': '진피', 'amount': 3.333, 'notes': '리기화담'},
|
|
{'herb': '복령', 'amount': 4.0, 'notes': '건비이수'},
|
|
{'herb': '갈근', 'amount': 3.333, 'notes': '승진해기'},
|
|
{'herb': '지황', 'amount': 3.333, 'notes': '보음청열'},
|
|
{'herb': '창출', 'amount': 3.333, 'notes': '건비조습'}
|
|
]
|
|
},
|
|
{
|
|
'formula_code': 'WBT001-2',
|
|
'formula_name': '월비탕 2차',
|
|
'formula_type': 'CUSTOM',
|
|
'base_cheop': 1,
|
|
'base_pouches': 1,
|
|
'description': '월비탕 2차 - 단계별 처방의 두 번째 단계',
|
|
'ingredients': [
|
|
{'herb': '마황', 'amount': 5.0, 'notes': '발한해표'},
|
|
{'herb': '석고', 'amount': 4.0, 'notes': '청열사화'},
|
|
{'herb': '감초', 'amount': 3.0, 'notes': '조화제약'},
|
|
{'herb': '진피', 'amount': 3.75, 'notes': '리기화담'},
|
|
{'herb': '복령', 'amount': 4.0, 'notes': '건비이수'},
|
|
{'herb': '갈근', 'amount': 3.333, 'notes': '승진해기'},
|
|
{'herb': '지황', 'amount': 3.333, 'notes': '보음청열'},
|
|
{'herb': '창출', 'amount': 3.333, 'notes': '건비조습'}
|
|
]
|
|
},
|
|
{
|
|
'formula_code': 'WBT001-3',
|
|
'formula_name': '월비탕 3차',
|
|
'formula_type': 'CUSTOM',
|
|
'base_cheop': 1,
|
|
'base_pouches': 1,
|
|
'description': '월비탕 3차 - 단계별 처방의 세 번째 단계',
|
|
'ingredients': [
|
|
{'herb': '마황', 'amount': 6.0, 'notes': '발한해표'},
|
|
{'herb': '석고', 'amount': 4.17, 'notes': '청열사화'},
|
|
{'herb': '감초', 'amount': 3.0, 'notes': '조화제약'},
|
|
{'herb': '진피', 'amount': 4.17, 'notes': '리기화담'},
|
|
{'herb': '복령', 'amount': 4.17, 'notes': '건비이수'},
|
|
{'herb': '갈근', 'amount': 3.75, 'notes': '승진해기'},
|
|
{'herb': '지황', 'amount': 3.75, 'notes': '보음청열'},
|
|
{'herb': '창출', 'amount': 3.333, 'notes': '건비조습'}
|
|
]
|
|
},
|
|
{
|
|
'formula_code': 'WBT001-4',
|
|
'formula_name': '월비탕 4차',
|
|
'formula_type': 'CUSTOM',
|
|
'base_cheop': 1,
|
|
'base_pouches': 1,
|
|
'description': '월비탕 4차 - 단계별 처방의 네 번째 단계',
|
|
'ingredients': [
|
|
{'herb': '마황', 'amount': 7.0, 'notes': '발한해표'},
|
|
{'herb': '석고', 'amount': 5.0, 'notes': '청열사화'},
|
|
{'herb': '감초', 'amount': 3.0, 'notes': '조화제약'},
|
|
{'herb': '진피', 'amount': 4.17, 'notes': '리기화담'},
|
|
{'herb': '복령', 'amount': 5.0, 'notes': '건비이수'},
|
|
{'herb': '갈근', 'amount': 3.75, 'notes': '승진해기'},
|
|
{'herb': '지황', 'amount': 4.0, 'notes': '보음청열'},
|
|
{'herb': '창출', 'amount': 3.333, 'notes': '건비조습'}
|
|
]
|
|
}
|
|
]
|
|
|
|
conn = sqlite3.connect('database/kdrug.db')
|
|
cursor = conn.cursor()
|
|
|
|
try:
|
|
# 기존 월비탕 처방 확인
|
|
cursor.execute("""
|
|
SELECT formula_code, formula_name
|
|
FROM formulas
|
|
WHERE formula_code LIKE 'WBT%'
|
|
ORDER BY formula_code
|
|
""")
|
|
existing = cursor.fetchall()
|
|
if existing:
|
|
print("⚠️ 기존 월비탕 처방 발견:")
|
|
for code, name in existing:
|
|
print(f" - {code}: {name}")
|
|
print()
|
|
|
|
# 각 처방 추가
|
|
for prescription in wolbitang_prescriptions:
|
|
print(f"\n{'='*60}")
|
|
print(f"📝 {prescription['formula_name']} 추가 중...")
|
|
|
|
# 1. formulas 테이블에 처방 추가
|
|
cursor.execute("""
|
|
INSERT INTO formulas (
|
|
formula_code, formula_name, formula_type,
|
|
base_cheop, base_pouches, description,
|
|
is_active, created_at, updated_at
|
|
) VALUES (?, ?, ?, ?, ?, ?, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
|
""", (
|
|
prescription['formula_code'],
|
|
prescription['formula_name'],
|
|
prescription['formula_type'],
|
|
prescription['base_cheop'],
|
|
prescription['base_pouches'],
|
|
prescription['description']
|
|
))
|
|
|
|
formula_id = cursor.lastrowid
|
|
print(f" ✅ 처방 기본 정보 등록 (ID: {formula_id})")
|
|
|
|
# 2. formula_ingredients 테이블에 약재 추가
|
|
sort_order = 0
|
|
for ingredient in prescription['ingredients']:
|
|
herb_name = ingredient['herb']
|
|
ingredient_code = herb_codes[herb_name]
|
|
|
|
cursor.execute("""
|
|
INSERT INTO formula_ingredients (
|
|
formula_id, ingredient_code,
|
|
grams_per_cheop, notes,
|
|
sort_order, created_at
|
|
) VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
""", (
|
|
formula_id,
|
|
ingredient_code,
|
|
ingredient['amount'],
|
|
ingredient['notes'],
|
|
sort_order
|
|
))
|
|
|
|
sort_order += 1
|
|
print(f" - {herb_name}: {ingredient['amount']}g ({ingredient['notes']})")
|
|
|
|
print(f" ✅ {prescription['formula_name']} 추가 완료!")
|
|
|
|
conn.commit()
|
|
print(f"\n{'='*60}")
|
|
print("🎉 월비탕 1차~4차 모든 처방이 성공적으로 추가되었습니다!")
|
|
|
|
# 추가된 처방 확인
|
|
print("\n📊 추가된 월비탕 처방 목록:")
|
|
print("-"*60)
|
|
cursor.execute("""
|
|
SELECT f.formula_id, f.formula_code, f.formula_name,
|
|
COUNT(fi.ingredient_id) as herb_count,
|
|
SUM(fi.grams_per_cheop) as total_grams
|
|
FROM formulas f
|
|
LEFT JOIN formula_ingredients fi ON f.formula_id = fi.formula_id
|
|
WHERE f.formula_code LIKE 'WBT%'
|
|
GROUP BY f.formula_id
|
|
ORDER BY f.formula_code
|
|
""")
|
|
|
|
for row in cursor.fetchall():
|
|
print(f"ID {row[0]}: {row[1]} - {row[2]}")
|
|
print(f" 약재 {row[3]}개, 총 {row[4]:.3f}g")
|
|
|
|
except sqlite3.IntegrityError as e:
|
|
print(f"❌ 중복 오류: {e}")
|
|
print(" 이미 동일한 처방 코드가 존재합니다.")
|
|
conn.rollback()
|
|
return False
|
|
except sqlite3.Error as e:
|
|
print(f"❌ 데이터베이스 오류: {e}")
|
|
conn.rollback()
|
|
return False
|
|
finally:
|
|
conn.close()
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
print("🌿 월비탕 단계별 처방 추가 프로그램")
|
|
print("="*60)
|
|
|
|
if add_wolbitang_formulas():
|
|
print("\n✅ 월비탕 처방 추가 작업이 완료되었습니다.")
|
|
else:
|
|
print("\n❌ 처방 추가 중 오류가 발생했습니다.") |