feat: 환산계수 모달 구현 전 백업

This commit is contained in:
thug0bin
2026-03-12 10:14:17 +09:00
parent e254c5c23d
commit 9531b74d0e
5 changed files with 517 additions and 26 deletions

View File

@@ -571,6 +571,7 @@ def preview_label():
- frequency: 복용 횟수
- duration: 복용 일수
- unit: 단위 (정, 캡슐, mL 등)
- sung_code: 성분코드 (환산계수 조회용, 선택)
"""
try:
data = request.get_json()
@@ -582,6 +583,17 @@ def preview_label():
frequency = int(data.get('frequency', 0))
duration = int(data.get('duration', 0))
unit = data.get('unit', '')
sung_code = data.get('sung_code', '')
# 환산계수 조회 (sung_code가 있는 경우)
conversion_factor = None
if sung_code:
try:
from db.dbsetup import db_manager
cf_result = db_manager.get_conversion_factor(sung_code)
conversion_factor = cf_result.get('conversion_factor')
except Exception as cf_err:
logging.warning(f"환산계수 조회 실패 (무시): {cf_err}")
# 라벨 이미지 생성
image = create_label_image(
@@ -591,7 +603,8 @@ def preview_label():
dosage=dosage,
frequency=frequency,
duration=duration,
unit=unit
unit=unit,
conversion_factor=conversion_factor
)
# Base64 인코딩
@@ -602,7 +615,8 @@ def preview_label():
return jsonify({
'success': True,
'image': f'data:image/png;base64,{img_base64}'
'image': f'data:image/png;base64,{img_base64}',
'conversion_factor': conversion_factor
})
except Exception as e:
@@ -679,9 +693,14 @@ def draw_scissor_border(draw, width, height, edge_size=5, steps=20):
draw.line(right_points, fill="black", width=2)
def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=0, duration=0, unit=''):
def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=0, duration=0, unit='', conversion_factor=None):
"""
라벨 이미지 생성 (29mm 용지 기준) - 레거시 디자인 적용
Args:
conversion_factor: 건조시럽 환산계수 (mL→g 변환용, 선택)
- 예: 0.11이면 120ml * 0.11 = 13.2g
- 총량 옆에 괄호로 표시: "총120mL (13.2g)/5일분"
"""
# 약품명 정제 (밀리그램 → mg 등)
med_name = normalize_medication_name(med_name)
@@ -811,11 +830,21 @@ def create_label_image(patient_name, med_name, add_info='', dosage=0, frequency=
y += 5
# 총량 계산 및 표시
# 총량 계산 및 표시 (환산계수 반영)
if dosage > 0 and frequency > 0 and duration > 0:
total = dosage * frequency * duration
total_str = str(int(total)) if total == int(total) else f"{total:.2f}".rstrip('0').rstrip('.')
total_text = f"{total_str}{unit}/{duration}일분"
# 환산계수가 있으면 변환된 총량도 표시 (예: "총120mL (13.2g)/5일분")
if conversion_factor is not None and conversion_factor > 0:
converted_total = total * conversion_factor
if converted_total == int(converted_total):
converted_str = str(int(converted_total))
else:
converted_str = f"{converted_total:.2f}".rstrip('0').rstrip('.')
total_text = f"{total_str}{unit} ({converted_str}g)/{duration}일분"
else:
total_text = f"{total_str}{unit}/{duration}일분"
y = draw_centered(total_text, y, additional_font)
y += 5