kdrug-inventory-system/add_wolbitang_prescriptions.py
시골약사 ad9ac396e2 chore: 개발 파일 정리 및 구조화
- 개발/테스트 스크립트를 dev_scripts/ 폴더로 이동
- 스크린샷을 screenshots/ 폴더로 이동
- 백업 파일 보존 (.backup)
- 처방 관련 추가 스크립트 포함

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-18 04:44:48 +00:00

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❌ 처방 추가 중 오류가 발생했습니다.")