# 건조시럽 환산계수 시스템 > 작성일: 2026-03-19 > 작성자: 용림 🐉 --- ## 1. 개요 건조시럽(dry syrup)은 물로 희석하여 복용하는 시럽 형태의 의약품입니다. **환산계수(conversion_factor)**를 사용하여 복용량(mL)을 실제 분말량(g)으로 변환합니다. ### 계산 예시 ``` 오구멘틴듀오시럽 228mg/5ml ├─ 환산계수: 0.11 ├─ 총량: 120mL └─ 필요 분말량: 120 × 0.11 = 13.2g ``` --- ## 2. 데이터베이스 정보 ### PostgreSQL 연결 | 항목 | 값 | |------|-----| | **Host** | 192.168.0.39 | | **Port** | 5432 | | **Database** | label10 | | **User** | admin | | **Password** | trajet6640 | ### Connection String ``` postgresql://admin:trajet6640@192.168.0.39:5432/label10 ``` ### Python 연결 코드 ```python import psycopg2 conn = psycopg2.connect( host='192.168.0.39', port=5432, database='label10', user='admin', password='trajet6640' ) ``` --- ## 3. 테이블 스키마 ### drysyrup 테이블 | 컬럼명 | 타입 | 설명 | |--------|------|------| | `idx` | INTEGER | PK, 자동증가 | | `ingredient_code` | VARCHAR | 성분코드 (MSSQL SUNG_CODE와 매칭) | | `ingredient_name` | VARCHAR | 성분명 | | `product_name` | VARCHAR | 대표 제품명 | | `post_prep_amount` | VARCHAR | 조제 후 농도 (예: 25mg/ml) | | `main_ingredient_amt` | VARCHAR | 주성분량 (예: 0.75g/16.7g) | | `conversion_factor` | DOUBLE PRECISION | **환산계수** (mL → g) | | `storage_conditions` | VARCHAR | 보관조건 (냉장, 상온 등) | | `expiration_date` | VARCHAR | 조제 후 유효기간 | ### 매핑 관계 ``` MSSQL (PIT3000) PostgreSQL (label10) ───────────────── ──────────────────── PM_DRUG.CD_GOODS drysyrup └─ SUNG_CODE ──────▶ └─ ingredient_code ``` --- ## 4. 데이터 샘플 (23건) | idx | ingredient_code | 성분명 | 제품명 | 환산계수 | 보관 | 유효기간 | |-----|-----------------|--------|--------|----------|------|----------| | 18 | 125333ASY | 세파드록실수화물 | 보령듀리세프 125mg/5ml | 0.557 | 냉장 | 14일 | | 19 | 125332ASY | 세파드록실수화물 | 보령듀리세프 250mg/5ml | 0.557 | 냉장 | 14일 | | 20 | 125237ASY | 세파클러수화물 | 크로세프 | 0.667 | 냉장 | 14일 | | 21 | 128931ASY | 세푸록심악세틸 | 올세프 | 1.0 | 25℃이하 | 10일 | | 22 | 127931ASY | 세프포독심프록세틸 | 포독스 | 0.2 | 냉장 | 14일 | | 23 | 128030ASY | 세프프로질수화물 | 세프질시럽 | 0.5 | 냉장 | 14일 | | 24 | 108130ASY | 아목시실린수화물 | 파목신시럽 | 0.775 | 냉장 | 14일 | | 25 | 535000ASY | 아목시실린+클라불란산 | 오구멘틴듀오 228mg/5ml | **0.11** | 냉장 | 7일 | | 26 | 536300ASY | 아목시실린+클라불란산 | 아목클란네오시럽 | 0.22 | 냉장 | 7일 | | 27 | 112732ASY | 아지트로마이신수화물 | 지스로맥스 | 0.867 | 상온 | 5일 | --- ## 5. API 엔드포인트 ### 환산계수 조회 ``` GET /api/drug-info/conversion-factor/ ``` #### 요청 예시 ```bash curl https://mile.0bin.in/api/drug-info/conversion-factor/535000ASY ``` #### 응답 (성공) ```json { "success": true, "sung_code": "535000ASY", "conversion_factor": 0.11, "ingredient_name": "아목시실린수화물·클라불란산칼륨", "product_name": "일성오구멘틴듀오시럽 228mg/5ml" } ``` #### 응답 (데이터 없음) ```json { "success": true, "sung_code": "NOTEXIST", "conversion_factor": null, "ingredient_name": null, "product_name": null } ``` --- ## 6. 쿼리 예시 ### 환산계수 조회 ```sql SELECT conversion_factor, ingredient_name, product_name, storage_conditions, expiration_date FROM drysyrup WHERE ingredient_code = '535000ASY'; ``` ### 전체 목록 조회 ```sql SELECT * FROM drysyrup ORDER BY idx; ``` ### 특정 성분 검색 ```sql SELECT * FROM drysyrup WHERE ingredient_name LIKE '%아목시실린%'; ``` --- ## 7. Python 사용 예시 ### 환산계수 조회 함수 ```python import psycopg2 def get_conversion_factor(sung_code): """성분코드로 환산계수 조회""" conn = psycopg2.connect( host='192.168.0.39', port=5432, database='label10', user='admin', password='trajet6640' ) cursor = conn.cursor() cursor.execute(""" SELECT conversion_factor, ingredient_name, product_name, storage_conditions, expiration_date FROM drysyrup WHERE ingredient_code = %s """, (sung_code,)) row = cursor.fetchone() conn.close() if row: return { 'conversion_factor': row[0], 'ingredient_name': row[1], 'product_name': row[2], 'storage_conditions': row[3], 'expiration_date': row[4] } return None # 사용 예시 result = get_conversion_factor('535000ASY') print(result) # {'conversion_factor': 0.11, 'ingredient_name': '아목시실린...', ...} ``` ### 분말량 계산 함수 ```python def calculate_powder_amount(sung_code, total_ml): """총 mL로 필요한 분말량(g) 계산""" data = get_conversion_factor(sung_code) if data and data['conversion_factor']: return round(total_ml * data['conversion_factor'], 2) return None # 사용 예시 powder = calculate_powder_amount('535000ASY', 120) print(f"필요 분말량: {powder}g") # 필요 분말량: 13.2g ``` --- ## 8. 관련 파일 | 파일 | 위치 | 설명 | |------|------|------| | app.py | `backend/app.py` | Flask API 라우트 | | DRYSYRUP_CONVERSION.md | `docs/` | 기존 문서 | ### Flask 라우트 위치 ```python # backend/app.py @app.route('/api/drug-info/conversion-factor/') def get_drug_conversion_factor(sung_code): ... ``` --- ## 9. 아키텍처 ``` ┌─────────────────────────────────────────────────────────┐ │ 클라이언트 │ │ (POS, 라벨 프린터, 웹 UI) │ └─────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Flask Backend (7001) │ │ GET /api/drug-info/conversion-factor/ │ └─────────────────────────────────────────────────────────┘ │ ┌───────────────┴───────────────┐ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ MSSQL (PIT3000) │ │ PostgreSQL │ │ 192.168.0.4 │ │ 192.168.0.39:5432 │ ├─────────────────────┤ ├─────────────────────┤ │ PM_DRUG.CD_GOODS │ │ label10.drysyrup │ │ └─ SUNG_CODE ─────┼──────▶│ └─ ingredient_code│ │ └─ GoodsName │ │ └─ conversion_factor │ └─ DrugCode │ │ └─ storage_conditions └─────────────────────┘ └─────────────────────┘ ``` --- *총 23개 건조시럽 환산계수 등록됨*