- 개발/테스트 스크립트를 dev_scripts/ 폴더로 이동 - 스크린샷을 screenshots/ 폴더로 이동 - 백업 파일 보존 (.backup) - 처방 관련 추가 스크립트 포함 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
180 lines
5.4 KiB
Python
180 lines
5.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
월비탕 단계별 처방 추가 스크립트
|
|
|
|
월비탕 1차부터 4차까지 단계별로 처방을 등록합니다.
|
|
각 단계마다 약재의 용량이 다릅니다.
|
|
"""
|
|
|
|
import sqlite3
|
|
import json
|
|
from datetime import datetime
|
|
|
|
def add_wolbitang_prescriptions():
|
|
"""월비탕 단계별 처방 추가"""
|
|
|
|
# 월비탕 단계별 데이터
|
|
wolbitang_data = {
|
|
"월비탕 1차": {
|
|
"마황": 4,
|
|
"석고": 3,
|
|
"감초": 3,
|
|
"진피": 3.333,
|
|
"복령": 4,
|
|
"갈근": 3.333,
|
|
"건지황": 3.333,
|
|
"창출": 3.333
|
|
},
|
|
"월비탕 2차": {
|
|
"마황": 5,
|
|
"석고": 4,
|
|
"감초": 3,
|
|
"진피": 3.75,
|
|
"복령": 4,
|
|
"갈근": 3.333,
|
|
"건지황": 3.333,
|
|
"창출": 3.333
|
|
},
|
|
"월비탕 3차": {
|
|
"마황": 6,
|
|
"석고": 4.17,
|
|
"감초": 3,
|
|
"진피": 4.17,
|
|
"복령": 4.17,
|
|
"갈근": 3.75,
|
|
"건지황": 3.75,
|
|
"창출": 3.333
|
|
},
|
|
"월비탕 4차": {
|
|
"마황": 7,
|
|
"석고": 5,
|
|
"감초": 3,
|
|
"진피": 4.17,
|
|
"복령": 5,
|
|
"갈근": 3.75,
|
|
"건지황": 4,
|
|
"창출": 3.333
|
|
}
|
|
}
|
|
|
|
conn = sqlite3.connect('kdrug.db')
|
|
cursor = conn.cursor()
|
|
|
|
try:
|
|
# 약재명-코드 매핑
|
|
herb_code_mapping = {
|
|
"마황": "H004",
|
|
"석고": "H025",
|
|
"감초": "H001",
|
|
"진피": "H022",
|
|
"복령": "H010",
|
|
"갈근": "H024",
|
|
"건지황": "H026",
|
|
"창출": "H014"
|
|
}
|
|
|
|
# 각 단계별로 처방 추가
|
|
for prescription_name, herbs in wolbitang_data.items():
|
|
print(f"\n{'='*50}")
|
|
print(f"{prescription_name} 추가 중...")
|
|
|
|
# 1. 처방 기본 정보 추가
|
|
cursor.execute("""
|
|
INSERT INTO prescriptions (
|
|
name,
|
|
description,
|
|
source,
|
|
category,
|
|
created_at
|
|
) VALUES (?, ?, ?, ?, ?)
|
|
""", (
|
|
prescription_name,
|
|
f"{prescription_name} - 월비탕의 단계별 처방",
|
|
"임상처방",
|
|
"단계별처방",
|
|
datetime.now().isoformat()
|
|
))
|
|
|
|
prescription_id = cursor.lastrowid
|
|
print(f" 처방 ID {prescription_id}로 등록됨")
|
|
|
|
# 2. 처방 구성 약재 추가
|
|
ingredients = []
|
|
for herb_name, amount in herbs.items():
|
|
herb_code = herb_code_mapping.get(herb_name)
|
|
if not herb_code:
|
|
print(f" ⚠️ {herb_name}의 코드를 찾을 수 없습니다.")
|
|
continue
|
|
|
|
# prescription_ingredients 테이블에 추가
|
|
cursor.execute("""
|
|
INSERT INTO prescription_ingredients (
|
|
prescription_id,
|
|
ingredient_code,
|
|
amount,
|
|
unit
|
|
) VALUES (?, ?, ?, ?)
|
|
""", (prescription_id, herb_code, amount, 'g'))
|
|
|
|
ingredients.append({
|
|
'code': herb_code,
|
|
'name': herb_name,
|
|
'amount': amount,
|
|
'unit': 'g'
|
|
})
|
|
|
|
print(f" - {herb_name}({herb_code}): {amount}g 추가됨")
|
|
|
|
# 3. prescription_details 테이블에 JSON 형태로도 저장
|
|
cursor.execute("""
|
|
INSERT INTO prescription_details (
|
|
prescription_id,
|
|
ingredients_json,
|
|
total_herbs,
|
|
default_packets,
|
|
preparation_method
|
|
) VALUES (?, ?, ?, ?, ?)
|
|
""", (
|
|
prescription_id,
|
|
json.dumps(ingredients, ensure_ascii=False),
|
|
len(ingredients),
|
|
20, # 기본 첩수
|
|
"1일 2회, 1회 1포"
|
|
))
|
|
|
|
print(f" ✅ {prescription_name} 처방 추가 완료 (총 {len(ingredients)}개 약재)")
|
|
|
|
conn.commit()
|
|
print(f"\n{'='*50}")
|
|
print("✅ 월비탕 1차~4차 처방이 모두 성공적으로 추가되었습니다!")
|
|
|
|
# 추가된 처방 확인
|
|
print("\n📊 추가된 처방 목록:")
|
|
cursor.execute("""
|
|
SELECT p.id, p.name, pd.total_herbs
|
|
FROM prescriptions p
|
|
LEFT JOIN prescription_details pd ON p.id = pd.prescription_id
|
|
WHERE p.name LIKE '월비탕%'
|
|
ORDER BY p.id
|
|
""")
|
|
|
|
for row in cursor.fetchall():
|
|
print(f" ID {row[0]}: {row[1]} - {row[2]}개 약재")
|
|
|
|
except sqlite3.Error as e:
|
|
print(f"❌ 데이터베이스 오류: {e}")
|
|
conn.rollback()
|
|
return False
|
|
finally:
|
|
conn.close()
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
print("🌿 월비탕 단계별 처방 추가 프로그램")
|
|
print("="*50)
|
|
|
|
if add_wolbitang_prescriptions():
|
|
print("\n✅ 월비탕 처방 추가 작업이 완료되었습니다.")
|
|
else:
|
|
print("\n❌ 처방 추가 중 오류가 발생했습니다.") |