From dab2ecae4497b66a5893fad1504554abea93c32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B2=AD=EC=B6=98=EC=95=BD=EA=B5=AD?= Date: Mon, 6 Apr 2026 18:07:12 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=95=A0=EB=8B=88=ED=8C=9C=20=ED=88=AC?= =?UTF-8?q?=EC=95=BD=EC=A7=80=EB=8F=84=EC=84=9C=20API=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A7=88=EC=8A=A4=ED=84=B0=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - anipharm_api.py: 동물약 PDF 생성 API 추가 - data/master/*.json: 16종 마스터 데이터 업데이트 - templates: medication_guide_v2, 로고 추가 - docs: AI 매핑 아키텍처, API 스펙 문서 - .gitignore: _dev_scripts/, *.db 제외 추가 Co-Authored-By: Claude Opus 4.6 --- .gitignore | 6 + anipharm_api.py | 379 ++++++++++ data/master/actibet.json | 408 +++++++++-- data/master/antelmin.json | 87 ++- data/master/asikaff_carprofen.json | 107 ++- data/master/chlorhexidine_shampoo.json | 15 +- data/master/enrofloxacin.json | 66 +- data/master/fronilspot.json | 56 +- data/master/gaesidin.json | 267 +++++++- data/master/heartsaver.json | 57 +- data/master/impact.json | 71 +- data/master/meloxicash.json | 61 +- data/master/nexgard_spectra.json | 140 +++- data/master/oridermyl.json | 15 +- data/master/selight.json | 102 ++- data/master/serenia_maropitant.json | 68 +- data/master/simparica.json | 2 +- data/master/terbiderm.json | 15 +- data/master/tiergard.json | 407 ++++++++++- docs/AI_MAPPING_ARCHITECTURE.md | 347 ++++++++++ docs/API_SPEC.md | 226 ++++++ scripts/update_apc_mapping.py | 67 ++ static/lectures/lecture_01.html | 914 +++++++++++++++++++++++++ static/nexgard_spectra.jpg | Bin 0 -> 39104 bytes templates/anipharm_logo.svg | 137 ++++ templates/anipharm_logo_base64.txt | Bin 0 -> 27050 bytes templates/medication_guide_v2.html | 251 ++++++- 27 files changed, 3880 insertions(+), 391 deletions(-) create mode 100644 anipharm_api.py create mode 100644 docs/AI_MAPPING_ARCHITECTURE.md create mode 100644 docs/API_SPEC.md create mode 100644 scripts/update_apc_mapping.py create mode 100644 static/lectures/lecture_01.html create mode 100644 static/nexgard_spectra.jpg create mode 100644 templates/anipharm_logo.svg create mode 100644 templates/anipharm_logo_base64.txt diff --git a/.gitignore b/.gitignore index fe49e6b..3eb9de7 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,9 @@ output/ # IDE .vscode/ .idea/ + +# 런타임 DB +*.db + +# 개발/디버깅 스크립트 +_dev_scripts/ diff --git a/anipharm_api.py b/anipharm_api.py new file mode 100644 index 0000000..035d4f4 --- /dev/null +++ b/anipharm_api.py @@ -0,0 +1,379 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +애니팜 투약지도서 API +- 동물약 PDF 생성 API +- 포트: 7002 +""" + +from flask import Flask, request, jsonify, send_file, render_template_string +from flask_cors import CORS +import os +import tempfile +import uuid +import sqlite3 +from datetime import datetime + +from animal_med.renderer_v2 import AnimalMedRendererV2 + +app = Flask(__name__) +CORS(app) + +# 렌더러 인스턴스 (싱글톤) +renderer = AnimalMedRendererV2() + +# 출력 디렉토리 +OUTPUT_DIR = os.path.join(os.path.dirname(__file__), 'output') +os.makedirs(OUTPUT_DIR, exist_ok=True) + +# ───────────────────────────────────────────────────────────── +# SQLite 접속 로그 DB +# ───────────────────────────────────────────────────────────── +LOGS_DB = os.path.join(os.path.dirname(__file__), 'lecture_logs.db') + +def init_logs_db(): + """접속 로그 DB 초기화""" + conn = sqlite3.connect(LOGS_DB) + c = conn.cursor() + c.execute(''' + CREATE TABLE IF NOT EXISTS lecture_views ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + lecture_id INTEGER NOT NULL, + ip_address TEXT, + user_agent TEXT, + referer TEXT, + viewed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + ''') + c.execute('CREATE INDEX IF NOT EXISTS idx_lecture_id ON lecture_views(lecture_id)') + c.execute('CREATE INDEX IF NOT EXISTS idx_viewed_at ON lecture_views(viewed_at)') + conn.commit() + conn.close() + +def log_lecture_view(lecture_id, ip, user_agent, referer): + """강의 조회 로깅""" + try: + conn = sqlite3.connect(LOGS_DB) + c = conn.cursor() + c.execute(''' + INSERT INTO lecture_views (lecture_id, ip_address, user_agent, referer) + VALUES (?, ?, ?, ?) + ''', (lecture_id, ip, user_agent[:500] if user_agent else None, referer[:500] if referer else None)) + conn.commit() + conn.close() + except Exception as e: + print(f"[LOG ERROR] {e}") + +# DB 초기화 +init_logs_db() + + +@app.route('/health', methods=['GET']) +def health(): + """헬스체크""" + return jsonify({ + 'status': 'ok', + 'service': 'anipharm-api', + 'timestamp': datetime.now().isoformat() + }) + + +@app.route('/api/products', methods=['GET']) +def list_products(): + """등록된 약품 목록 조회""" + products = renderer.list_drugs() + return jsonify({ + 'success': True, + 'count': len(products), + 'products': products + }) + + +@app.route('/api/guide/pdf', methods=['POST']) +def generate_pdf(): + """ + 투약지도서 PDF 생성 + + Request Body: + { + "product_ids": ["nexgard_spectra", "heartsaver", ...], + "patient_name": "김남곤", + "pet_name": "뽀삐", + "pet_species": "푸들", + "pet_age": "3세", + "pharmacy_name": "청춘약국 동물약 전문상담", // optional + "pharmacy_tel": "033-481-0384" // optional + } + + Response: PDF 파일 (application/pdf) + """ + try: + data = request.get_json() + + if not data: + return jsonify({'success': False, 'error': 'No JSON data'}), 400 + + product_ids = data.get('product_ids', []) + if not product_ids: + return jsonify({'success': False, 'error': 'product_ids required'}), 400 + + # 파일명 생성 + timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') + filename = f"guide_{timestamp}_{uuid.uuid4().hex[:8]}.pdf" + output_path = os.path.join(OUTPUT_DIR, filename) + + # PDF 생성 + result = renderer.render_to_pdf( + product_ids=product_ids, + output_path=output_path, + patient_name=data.get('patient_name', '보호자'), + pet_name=data.get('pet_name', '반려동물'), + pet_species=data.get('pet_species', ''), + pet_age=data.get('pet_age', ''), + pharmacy_name=data.get('pharmacy_name', '청춘약국 동물약 전문상담'), + pharmacy_tel=data.get('pharmacy_tel', '033-481-0384') + ) + + if result['success']: + return send_file( + output_path, + mimetype='application/pdf', + as_attachment=True, + download_name=f"투약지도서_{timestamp}.pdf" + ) + else: + return jsonify({ + 'success': False, + 'error': result.get('error', 'Unknown error') + }), 500 + + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +@app.route('/api/guide/preview', methods=['POST']) +def preview_guide(): + """ + 투약지도서 미리보기 (메타데이터만 반환) + + Request Body: generate_pdf와 동일 + Response: JSON (약품 정보 + 예상 페이지 수) + """ + try: + data = request.get_json() + + if not data: + return jsonify({'success': False, 'error': 'No JSON data'}), 400 + + product_ids = data.get('product_ids', []) + if not product_ids: + return jsonify({'success': False, 'error': 'product_ids required'}), 400 + + # 약품 정보 조회 + drugs = [] + for pid in product_ids: + drug = renderer.get_drug(pid) + if drug: + drugs.append({ + 'id': pid, + 'name': drug.get('name'), + 'category': drug.get('category'), + 'has_image': bool(drug.get('image_url') or drug.get('apc_code')) + }) + + # 페이지 수 계산 (4개/페이지) + page_count = (len(drugs) + 3) // 4 + + return jsonify({ + 'success': True, + 'drug_count': len(drugs), + 'page_count': page_count, + 'drugs': drugs + }) + + except Exception as e: + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + + +# ───────────────────────────────────────────────────────────── +# 동물약 강의 콘텐츠 라우트 +# ───────────────────────────────────────────────────────────── +LECTURES_DIR = os.path.join(os.path.dirname(__file__), 'static', 'lectures') +os.makedirs(LECTURES_DIR, exist_ok=True) + +@app.route('/lecture/') +def serve_lecture(lecture_id): + """동물약 강의 콘텐츠 서빙 (카카오톡 og 태그 포함) + 접속 로깅""" + from flask import send_from_directory + + # 접속 로깅 + ip = request.headers.get('X-Forwarded-For', request.remote_addr) + user_agent = request.headers.get('User-Agent', '') + referer = request.headers.get('Referer', '') + log_lecture_view(lecture_id, ip, user_agent, referer) + + filename = f'lecture_{lecture_id:02d}.html' + return send_from_directory(LECTURES_DIR, filename) + + +# ───────────────────────────────────────────────────────────── +# 관리자 페이지 - 강의 접속 통계 +# ───────────────────────────────────────────────────────────── +ADMIN_HTML = ''' + + + + + + 📊 강의 접속 통계 - 애니팜 + + + +
+

📊 강의 접속 통계

+ +
+
+
{{ total_views }}
+
총 조회수
+
+
+
{{ today_views }}
+
오늘 조회수
+
+
+
{{ unique_ips }}
+
순 방문자 (IP)
+
+
+ +
+

📈 강의별 조회수

+ + + + + + {% for row in lecture_stats %} + + + + + + {% endfor %} + +
강의조회수최근 조회
Lecture {{ row[0] }}{{ row[1] }}{{ row[2] }}
+
+ +
+

🕐 최근 접속 로그 (50건)

+ + + + + + {% for row in recent_logs %} + + + + + + + {% endfor %} + +
시간강의IPReferer
{{ row[0] }}Lecture {{ row[1] }}{{ row[2] }}{{ row[3] or '-' }}
+
+ + +
+ + +''' + +@app.route('/admin/lectures') +def admin_lectures(): + """강의 접속 통계 관리자 페이지""" + conn = sqlite3.connect(LOGS_DB) + c = conn.cursor() + + # 총 조회수 + c.execute('SELECT COUNT(*) FROM lecture_views') + total_views = c.fetchone()[0] + + # 오늘 조회수 + c.execute("SELECT COUNT(*) FROM lecture_views WHERE date(viewed_at) = date('now', 'localtime')") + today_views = c.fetchone()[0] + + # 순 방문자 (unique IP) + c.execute('SELECT COUNT(DISTINCT ip_address) FROM lecture_views') + unique_ips = c.fetchone()[0] + + # 강의별 통계 + c.execute(''' + SELECT lecture_id, COUNT(*) as cnt, MAX(viewed_at) as last_view + FROM lecture_views + GROUP BY lecture_id + ORDER BY cnt DESC + ''') + lecture_stats = c.fetchall() + + # 최근 로그 50건 + c.execute(''' + SELECT viewed_at, lecture_id, ip_address, referer + FROM lecture_views + ORDER BY viewed_at DESC + LIMIT 50 + ''') + recent_logs = c.fetchall() + + conn.close() + + return render_template_string(ADMIN_HTML, + total_views=total_views, + today_views=today_views, + unique_ips=unique_ips, + lecture_stats=lecture_stats, + recent_logs=recent_logs + ) + + +if __name__ == '__main__': + print("=" * 50) + print("🐾 애니팜 투약지도서 API") + print("=" * 50) + print(f"📍 http://localhost:7002") + print(f"📋 GET /health - 헬스체크") + print(f"📋 GET /api/products - 약품 목록") + print(f"📋 POST /api/guide/pdf - PDF 생성") + print(f"📋 POST /api/guide/preview - 미리보기") + print("=" * 50) + + app.run(host='0.0.0.0', port=7002, debug=False, threaded=True) diff --git a/data/master/actibet.json b/data/master/actibet.json index b29cf05..ae92c21 100644 --- a/data/master/actibet.json +++ b/data/master/actibet.json @@ -1,58 +1,386 @@ { "product_id": "MASTER-016", - "apc_code": "0519-ACTIBET", + "apc_code": "9240043910403", "name": "액티벳정", "english_name": "Actibet (Amoxicillin + Clavulanate)", "manufacturer": "홍익메디케어", "category": "antibiotic", "category_display": "항생제 (β-Lactam)", - "target_animal": ["개", "고양이"], + "drug_class": "Aminopenicillin + β-Lactamase 억제제", + "ema_ameg_category": "D (Prudence) — 1차 선택 가능", + "who_classification": "CIA (Critically Important Antimicrobials) - High Priority", + "target_animal": [ + "개", + "고양이" + ], "administration": "경구 (정제)", - - "indication": "광범위 세균 감염 (피부, 호흡기, 요로, 치주)", - + "composition": { + "amoxicillin_mg": 40, + "potassium_clavulanate_mg": 10, + "ratio": "4:1", + "description": "아목시실린 40mg + 클라불란산칼륨 10mg (1정 기준)" + }, "mechanism": { - "amoxicillin": "40mg - PBP 결합 → 세포벽 합성 억제 → 살균", - "clavulanate": "10mg - β-Lactamase 억제 → 내성균 커버 확장", - "ratio": "4:1 (Amoxicillin:Clavulanate)" + "amoxicillin": "세균 세포벽 합성 효소(PBP)에 결합 → Peptidoglycan 교차결합 억제 → 세포벽 파괴 → 살균", + "clavulanate": "β-Lactamase 효소에 비가역적 결합 → 아목시실린 분해 방지 → 내성균 커버 확장", + "killing_type": "살균성(bactericidal), 시간 의존적(time-dependent)", + "clinical_implication": "MIC 이상 농도 유지 시간이 효능 결정 → 1일 2회 분할 투여 필수" + }, + "spectrum": { + "gram_positive_aerobic": [ + "Staphylococcus pseudintermedius (MSSP)", + "Staphylococcus aureus (MSSA)", + "Streptococcus spp.", + "Enterococcus faecalis" + ], + "gram_negative_aerobic": [ + "Escherichia coli", + "Proteus mirabilis", + "Klebsiella spp.", + "Pasteurella multocida" + ], + "anaerobes": [ + "Bacteroides spp.", + "Fusobacterium spp.", + "Clostridium spp. (일부)" + ], + "resistant_organisms": [ + "MRSP (메티실린 내성 S. pseudintermedius)", + "MRSA", + "Pseudomonas aeruginosa", + "Mycoplasma spp.", + "Bordetella bronchiseptica (일부)" + ] + }, + "indications": { + "summary": "광범위 세균 감염 (피부, 요로, 호흡기, 연조직, 구강)", + "detailed": [ + { + "name": "피부감염 (농피증)", + "description": "표재성 및 심부 세균성 피부감염", + "iscaid_position": "전신 항생제 1차 선택 (국소치료 실패 시)" + }, + { + "name": "요로감염 (방광염, 신우신염)", + "description": "단순 산발성 방광염부터 복잡성 상부 UTI까지", + "iscaid_position": "1차 선택" + }, + { + "name": "호흡기 감염", + "description": "상·하부 호흡기 세균 감염 (폐렴 포함)", + "iscaid_position": "대안 1차 (Doxycycline 불가 시)" + }, + { + "name": "연조직 감염", + "description": "농양, 항문낭염, 교상(물린 상처)", + "iscaid_position": "1차 선택" + }, + { + "name": "구강/치주 감염", + "description": "치주질환, 구강 내 혼합감염", + "iscaid_position": "2차 (Clindamycin이 1차)" + } + ] }, - "dosage": { - "standard": "12.5mg/kg 1일 2회", - "formula": "체중 4kg당 1정", - "duration": "5~7일 (질환별 상이)" + "standard": "12.5mg/kg (복합) 1일 2회 (q12h)", + "formula": "체중 4kg당 1정, 12시간 간격", + "per_kg": { + "amoxicillin": "10mg/kg/회", + "clavulanate": "2.5mg/kg/회" + } }, - "dosage_table": [ - {"weight": "4kg", "tablets": "1정 × 2회"}, - {"weight": "8kg", "tablets": "2정 × 2회"}, - {"weight": "12kg", "tablets": "3정 × 2회"}, - {"weight": "20kg", "tablets": "5정 × 2회"} + { + "weight": "2kg", + "tablets_per_dose": "0.5정", + "frequency": "1일 2회", + "daily_amoxicillin": "40mg", + "daily_clavulanate": "10mg" + }, + { + "weight": "4kg", + "tablets_per_dose": "1정", + "frequency": "1일 2회", + "daily_amoxicillin": "80mg", + "daily_clavulanate": "20mg" + }, + { + "weight": "6kg", + "tablets_per_dose": "1.5정", + "frequency": "1일 2회", + "daily_amoxicillin": "120mg", + "daily_clavulanate": "30mg" + }, + { + "weight": "8kg", + "tablets_per_dose": "2정", + "frequency": "1일 2회", + "daily_amoxicillin": "160mg", + "daily_clavulanate": "40mg" + }, + { + "weight": "10kg", + "tablets_per_dose": "2.5정", + "frequency": "1일 2회", + "daily_amoxicillin": "200mg", + "daily_clavulanate": "50mg" + }, + { + "weight": "12kg", + "tablets_per_dose": "3정", + "frequency": "1일 2회", + "daily_amoxicillin": "240mg", + "daily_clavulanate": "60mg" + }, + { + "weight": "16kg", + "tablets_per_dose": "4정", + "frequency": "1일 2회", + "daily_amoxicillin": "320mg", + "daily_clavulanate": "80mg" + }, + { + "weight": "20kg", + "tablets_per_dose": "5정", + "frequency": "1일 2회", + "daily_amoxicillin": "400mg", + "daily_clavulanate": "100mg" + } ], - - "indications_by_disease": { - "skin_pyoderma": "5~7일 (표재성) / 3~4주 (심부)", - "uti": "7~14일", - "respiratory": "7~10일", - "dental": "수술 전후 5~7일" + "duration_by_indication": [ + { + "indication": "단순 방광염", + "duration": "3~5일", + "note": "ISCAID 2019 권장. 증상 소실 후에도 완료", + "source": "ISCAID UTI Guidelines 2019" + }, + { + "indication": "신우신염 (상부 UTI)", + "duration": "10~14일", + "note": "전신 증상 동반 시. 배양검사 권장", + "source": "ISCAID UTI Guidelines 2019" + }, + { + "indication": "표재성 농피증", + "duration": "2주 + 재평가", + "note": "국소치료 실패 시만 전신투여. 임상호전 후 1주 추가", + "source": "ISCAID Pyoderma Guidelines 2025" + }, + { + "indication": "심부 농피증", + "duration": "3주 + 재평가", + "note": "배양검사 권장. 증상 소실 후 최소 1주 연장", + "source": "ISCAID Pyoderma Guidelines 2025" + }, + { + "indication": "상부 호흡기 감염", + "duration": "7~10일", + "note": "Mycoplasma 의심 시 Doxycycline 선택", + "source": "ISCAID Respiratory Guidelines 2017" + }, + { + "indication": "하부 호흡기/폐렴 (개)", + "duration": "14일", + "note": "경증~중등도 폐렴", + "source": "ISCAID Respiratory Guidelines 2017" + }, + { + "indication": "하부 호흡기/폐렴 (고양이)", + "duration": "21일", + "note": "고양이는 재발률 높아 장기 투여", + "source": "ISCAID Respiratory Guidelines 2017" + }, + { + "indication": "연조직 감염/교상", + "duration": "5~7일", + "note": "Pasteurella + 혐기성균 동시 커버", + "source": "ISCAID" + }, + { + "indication": "치주/구강 감염", + "duration": "5~7일", + "note": "수술 전후 예방적 투여 포함", + "source": "General practice" + } + ], + "administration_instructions": { + "timing": [ + "1일 2회, 12시간 간격 유지 (예: 아침 8시, 저녁 8시)", + "시간 의존적 살균제 → 일정한 간격이 효과에 중요" + ], + "with_food": { + "recommended": true, + "reason": "음식과 함께 투여 시 위장관 부작용 감소", + "note": "공복 투여도 가능하나 구토/설사 위험 증가" + }, + "completion_importance": { + "message": "증상이 나아져도 처방 기간 끝까지 복용 완료", + "reason": "불완전 투약 시 남은 세균이 내성을 획득할 위험", + "warning": "임의 중단은 항생제 내성 유발의 주요 원인" + }, + "missed_dose": "1회분을 놓쳤을 경우 기억난 즉시 투여. 다음 투약 시간이 가까우면 건너뛰고 다음 회차에 정상 용량 투여 (2배 용량 투여 금지)" }, - + "side_effects": { + "common": [ + { + "symptom": "구토", + "frequency": "흔함", + "management": "음식과 함께 투여. 지속 시 수의사 상담" + }, + { + "symptom": "설사", + "frequency": "흔함", + "management": "장내균총 교란 가능. 프로바이오틱스 병행 고려 (투약 2시간 간격)" + }, + { + "symptom": "식욕 부진", + "frequency": "흔함", + "management": "대부분 일시적. 지속 시 수의사 상담" + } + ], + "uncommon": [ + { + "symptom": "알레르기 반응 (두드러기, 안면부종, 호흡곤란)", + "frequency": "드묾", + "management": "즉시 투약 중단 및 응급 처치 필요", + "severity": "심각" + }, + { + "symptom": "아나필락시스", + "frequency": "매우 드묾", + "management": "응급 상황. 에피네프린 투여 필요", + "severity": "생명 위협" + } + ], + "when_to_stop": [ + "심한 구토/설사가 지속될 때", + "두드러기, 안면 부종, 호흡 곤란 발생 시 (알레르기)", + "혈변, 극심한 복통 등 심각한 증상 시" + ] + }, + "contraindications": [ + { + "condition": "페니실린 계열 알레르기", + "severity": "절대 금기", + "note": "과거 페니실린/세팔로스포린 과민반응 이력 있는 경우" + }, + { + "condition": "중증 신부전", + "severity": "주의 필요", + "note": "용량 조절 또는 투여 간격 연장 필요. 수의사 판단" + } + ], "warnings": [ - "⚠️ 페니실린 알레르기 과거력 확인", - "⚠️ 소형견/고양이 정확한 체중 투여", - "⚠️ 시간 의존적 살균 → 분할 투여 필수", - "⚠️ 장기 투여 시 내성균 모니터링" + "⚠️ 페니실린 알레르기 과거력 반드시 확인", + "⚠️ 소형견/고양이는 체중에 정확히 비례하여 투여 (과량 주의)", + "⚠️ 시간 의존적 살균제 → 1일 2회 분할 투여 필수 (1일 1회 투여 금지)", + "⚠️ 사람용 오그멘틴(Augmentin) 임의 투여 금지 (비율/용량 다름)", + "⚠️ 장기 투여 시 내성균 발생 모니터링 필요", + "⚠️ 치료 실패 시 배양검사 시행 (경험적 재처방 지양)" ], - - "clinical_notes": [ - "EMA AMEG Category D: 1차 선택 가능", - "β-Lactamase 생산균까지 커버 (단독 AMX 대비)", - "MIC 이상 농도 유지 시간이 핵심 → BID 분할" - ], - - "source": { - "guidelines": ["ISCAID (수의 피부과)", "AAHA"] + "antibiotic_stewardship": { + "importance": "항생제 내성은 인수공통 문제. 동물에서의 오남용은 사람에게도 영향", + "principles": [ + "처방된 기간 끝까지 복용 완료 (조기 중단 금지)", + "남은 약 보관 후 자가 투약 금지", + "증상 재발 시 수의사 재진 (같은 약 임의 복용 금지)", + "가능하면 배양검사 후 처방 (특히 재발/치료 실패 시)" + ], + "resistance_warning": "불완전 투약, 과소/과다 용량, 불필요한 처방은 내성균 선택의 주요 원인", + "iscaid_effect": "ISCAID 가이드라인 준수 결과 이탈리아에서 E.coli의 AMX-CLV 내성률이 52.6%→25.6%로 감소 (PMID:41012835)" }, - - "storage": "25°C 이하, 건조, 차광 보관" -} + "drug_interactions": [ + { + "drug": "Methotrexate", + "effect": "Methotrexate 배설 감소 → 독성 증가 가능", + "recommendation": "병용 시 모니터링 필요" + }, + { + "drug": "Probenecid", + "effect": "아목시실린 신장 배설 억제 → 혈중 농도 상승", + "recommendation": "용량 조절 고려" + }, + { + "drug": "구충제 (일반)", + "effect": "대부분 병용 가능", + "recommendation": "펜벤다졸, 이버멕틴 등 일반 구충제와 병용 안전" + }, + { + "drug": "프로바이오틱스", + "effect": "항생제로 인한 장내균총 교란 완화", + "recommendation": "병용 가능. 투약 시간 2시간 간격 권장" + } + ], + "susceptibility_data": [ + { + "pathogen": "E. coli (개 UTI)", + "susceptibility": "92%", + "source": "KuKanich 2020 (PMID:31777977)", + "region": "미국 중서부" + }, + { + "pathogen": "E. coli (이탈리아, 2019 이후)", + "susceptibility": "74.4%", + "source": "Tagliasacchi 2025 (PMID:41012835)", + "note": "ISCAID 가이드라인 도입 후 내성률 25.6%로 감소" + }, + { + "pathogen": "S. pseudintermedius (MSSP, 유럽)", + "susceptibility": "≥88.5%", + "source": "ComPath 2020 (PMID:32924232)", + "note": "피부 분리주" + }, + { + "pathogen": "S. pseudintermedius (MRSP)", + "susceptibility": "내성 (일반)", + "source": "Pirolo 2023 (PMID:37294541)", + "note": "Low-level MRSP 일부는 임상 반응" + } + ], + "clinical_notes": [ + "EMA AMEG Category D: 경험적 처방 허용되는 1차 선택 항생제", + "β-Lactamase 생산균까지 커버 (Amoxicillin 단독 대비 스펙트럼 확장)", + "시간 의존적 살균 → MIC 이상 농도 유지가 핵심 → BID 분할 필수", + "ISCAID 가이드라인이 항생제 내성률 감소에 실질적 효과 입증됨", + "치료 실패 시 Category C (Cephalexin 등) → B (Fluoroquinolone) 순으로 상향" + ], + "pharmacy_counseling": { + "key_messages": [ + "체중 4kg당 1정, 하루 2번 (12시간 간격)", + "음식과 함께 드리면 위장 부작용 감소", + "증상 나아져도 처방 기간 끝까지 복용 완료 (내성 예방)", + "구토/설사 심하거나 알레르기 증상(부종, 호흡곤란) 시 즉시 중단" + ], + "common_questions": [ + { + "question": "며칠이나 먹여야 하나요?", + "answer": "질환에 따라 다릅니다. 방광염 3~5일, 피부감염 2~3주, 호흡기 7~21일. 수의사 처방 기간 준수하세요." + }, + { + "question": "증상이 나았는데 계속 먹여야 하나요?", + "answer": "네, 반드시요. 증상만 나아지고 세균은 남아있을 수 있습니다. 중간에 끊으면 내성균이 생깁니다." + }, + { + "question": "사람용 오그멘틴 줘도 되나요?", + "answer": "안 됩니다. 용량과 비율이 다릅니다. 동물 전용 제품만 사용하세요." + }, + { + "question": "부작용은 없나요?", + "answer": "구토, 설사 같은 위장 증상이 흔합니다. 음식과 함께 주면 줄어듭니다. 알레르기 반응(부종, 호흡곤란)은 드물지만 발생 시 즉시 중단하세요." + } + ] + }, + "source": { + "guidelines": [ + "ISCAID UTI Guidelines 2019 (PMID:30971357)", + "ISCAID Pyoderma Guidelines 2025 (PMID:40338805)", + "ISCAID Respiratory Guidelines 2017 (PMC5354050)", + "AAHA/AAFP Antimicrobial Stewardship Guidelines 2022" + ], + "golden_pattern": "actibet_amoxicillin_clavulanate.md (2026-03-02)" + }, + "storage": "25°C 이하, 건조, 차광 보관", + "last_updated": "2026-03-19", + "indication": "광범위 세균 감염 (피부, 요로, 호흡기, 연조직, 구강)" +} \ No newline at end of file diff --git a/data/master/antelmin.json b/data/master/antelmin.json index d3d8583..f9a12c1 100644 --- a/data/master/antelmin.json +++ b/data/master/antelmin.json @@ -1,64 +1,101 @@ { "product_id": "MASTER-014", - "apc_code": "0519-ANTELMIN", + "apc_code": "0230237810109", "name": "안텔민 뽀삐/킹", "english_name": "Antelmin (Mebendazole + Praziquantel)", "manufacturer": "대성", "category": "antiparasitic", "category_display": "광범위 내부구충제", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "경구 (정제)", - "indication": "회충, 조충(촌충), 십이지장충(구충), 편충 구제", - "coverage_summary": { - "covered": ["회충", "조충(촌충)", "구충(십이지장충)", "편충"], - "not_covered": ["벼룩", "진드기", "심장사상충"], + "covered": [ + "회충", + "조충(촌충)", + "구충(십이지장충)", + "편충" + ], + "not_covered": [ + "벼룩", + "진드기", + "심장사상충" + ], "gap_solution": "넥스가드/셀라이트의 조충 갭 보완용" }, - "mechanism": { "mebendazole": "벤즈이미다졸계 → 회충, 구충, 편충 구제", "praziquantel": "프라지노이소퀴놀린계 → 조충(촌충) 구제" }, - "dosing": { "interval": "3개월마다 (연 4회)", "interval_reason": "ESCCAP/CAPC 가이드라인 기반, 기생충 prepatent period 고려", "puppy_kitten": "6개월 미만: 2주~1개월 간격", "minimum_age": "제한 없음" }, - "dosage_table": [ - {"product": "뽀삐 정", "weight": "~5kg", "tablets": "1정"}, - {"product": "킹 정 5kg", "weight": "5kg", "tablets": "1정"}, - {"product": "킹 정 10kg", "weight": "10kg", "tablets": "2정"}, - {"product": "킹 정 15kg", "weight": "15kg", "tablets": "3정"}, - {"product": "킹 정 20kg", "weight": "20kg", "tablets": "4정"} + { + "product": "뽀삐 정", + "weight": "~5kg", + "tablets": "1정" + }, + { + "product": "킹 정 5kg", + "weight": "5kg", + "tablets": "1정" + }, + { + "product": "킹 정 10kg", + "weight": "10kg", + "tablets": "2정" + }, + { + "product": "킹 정 15kg", + "weight": "15kg", + "tablets": "3정" + }, + { + "product": "킹 정 20kg", + "weight": "20kg", + "tablets": "4정" + } ], - "prepatent_periods": [ - {"parasite": "십이지장충", "period": "14~18일"}, - {"parasite": "개회충", "period": "2~5주"}, - {"parasite": "조충(벼룩매개)", "period": "~3주"}, - {"parasite": "편충", "period": "10~12주"} + { + "parasite": "십이지장충", + "period": "14~18일" + }, + { + "parasite": "개회충", + "period": "2~5주" + }, + { + "parasite": "조충(벼룩매개)", + "period": "~3주" + }, + { + "parasite": "편충", + "period": "10~12주" + } ], - "warnings": [ "⚠️ 공복 투여 권장 (효과 증가)", "⚠️ 다두 사육 시 동시 투약 (교차 감염 방지)", "⚠️ 유기동물: 즉시 투약 + 2주 후 재투약" ], - "clinical_notes": [ "넥스가드 스펙트라/셀라이트의 조충 미커버 보완", "3개월 간격 정기 투약 권장 (ESCCAP/CAPC)", "벼룩 관리 필수 (조충 중간숙주)" ], - "source": { - "guidelines": ["ESCCAP GL01 7th Ed (2025)", "CAPC Guidelines"] + "guidelines": [ + "ESCCAP GL01 7th Ed (2025)", + "CAPC Guidelines" + ] }, - "storage": "실온 보관" -} +} \ No newline at end of file diff --git a/data/master/asikaff_carprofen.json b/data/master/asikaff_carprofen.json index b4931eb..2892479 100644 --- a/data/master/asikaff_carprofen.json +++ b/data/master/asikaff_carprofen.json @@ -1,38 +1,58 @@ { "product_id": "MASTER-002", - "apc_code": "0232617800004", + "apc_code": "0232635710103", "name": "아시카프 츄어블정", "english_name": "Asikaff Chewable (Carprofen 50mg)", "manufacturer": "미상", "category": "nsaid", "category_display": "진통소염제 (NSAIDs)", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "경구 (츄어블정)", - "image_url": "/images/asikaff.png", - "indication": "개의 관절염, 수술 후 통증, 근골격계 염증 완화", - "mechanism": { "drug_class": "프로피온산계 NSAIDs", "action": "COX-2 우선 억제 → 염증성 프로스타글란딘 생성 억제", "selectivity": "COX-2 우선 (preferential) - 완전 선택적 아님" }, - "dosage": { "standard": "4.4mg/kg 1일 1회", "alternative": "2.2mg/kg 1일 2회", "note": "최소 유효 용량 원칙 - 효과 확인 후 감량 시도" }, - "dosage_table": [ - {"weight": "5kg", "daily_dose": "22mg", "tablets": "0.5정 (반정)"}, - {"weight": "10kg", "daily_dose": "44mg", "tablets": "1정"}, - {"weight": "15kg", "daily_dose": "66mg", "tablets": "1.5정"}, - {"weight": "20kg", "daily_dose": "88mg", "tablets": "2정"}, - {"weight": "25kg", "daily_dose": "110mg", "tablets": "2.5정"}, - {"weight": "30kg", "daily_dose": "132mg", "tablets": "3정"} + { + "weight": "5kg", + "daily_dose": "22mg", + "tablets": "0.5정 (반정)" + }, + { + "weight": "10kg", + "daily_dose": "44mg", + "tablets": "1정" + }, + { + "weight": "15kg", + "daily_dose": "66mg", + "tablets": "1.5정" + }, + { + "weight": "20kg", + "daily_dose": "88mg", + "tablets": "2정" + }, + { + "weight": "25kg", + "daily_dose": "110mg", + "tablets": "2.5정" + }, + { + "weight": "30kg", + "daily_dose": "132mg", + "tablets": "3정" + } ], - "absolute_contraindications": [ { "item": "고양이 사용 절대 금지", @@ -50,16 +70,14 @@ "severity": "치명적" } ], - "relative_contraindications": [ "신장 기능 저하", - "간 기능 저하", + "간 기능 저하", "위장관 궤양 병력", "출혈 경향", "심부전", "탈수 상태" ], - "warnings": [ "🚫 고양이에게 절대 투여하지 마세요 (치명적)", "🚫 스테로이드와 함께 투여하지 마세요", @@ -67,16 +85,33 @@ "⚠️ 장기 투여 시 3~6개월마다 혈액검사 필요", "⚠️ 음식과 함께 투여하면 위장 자극 감소" ], - "side_effects": { - "common": ["구토", "설사", "식욕부진"], - "serious": ["위장관 궤양/출혈 (흑색변)", "간독성 (황달)", "신독성 (다음다뇨)"], - "monitoring_signs": ["흑색변", "토혈", "황달", "기력저하", "다음다뇨"] + "common": [ + "구토", + "설사", + "식욕부진" + ], + "serious": [ + "위장관 궤양/출혈 (흑색변)", + "간독성 (황달)", + "신독성 (다음다뇨)" + ], + "monitoring_signs": [ + "흑색변", + "토혈", + "황달", + "기력저하", + "다음다뇨" + ] }, - "monitoring": { "required": true, - "pre_treatment": ["CBC", "간기능 (ALT, ALP, AST)", "신기능 (BUN, Cr)", "뇨검사"], + "pre_treatment": [ + "CBC", + "간기능 (ALT, ALP, AST)", + "신기능 (BUN, Cr)", + "뇨검사" + ], "during_treatment": { "2_4_weeks": "혈청 화학 (간·신기능)", "3_months": "혈청 화학, 뇨검사", @@ -89,31 +124,39 @@ "황달" ] }, - "washout_period": { "to_other_nsaid": "3~5일", "to_steroid": "5~7일", "from_short_steroid": "5~7일", "from_long_steroid": "2주 이상" }, - "clinical_efficacy": { "osteoarthritis": "89.1~92.4% 개선", "post_surgical": "우수한 통증 관리", - "source_pmid": ["7759332", "12665145", "17056650", "25433056"] + "source_pmid": [ + "7759332", + "12665145", + "17056650", + "25433056" + ] }, - "storage": "실온 보관, 습기 피할 것", - "pharmacist_tips": [ "음식과 함께 투여 권장 (위장 자극 감소)", "장기 투여 시 정기 검사 안내 필수", "보호자에게 중단 신호 교육 (흑색변, 구토, 황달)", "스테로이드 병용 여부 반드시 확인" ], - "source": { - "guidelines": ["WSAVA Pain Management Guidelines"], - "pmid": ["7759332", "12665145", "17056650", "16468926", "25433056"] + "guidelines": [ + "WSAVA Pain Management Guidelines" + ], + "pmid": [ + "7759332", + "12665145", + "17056650", + "16468926", + "25433056" + ] } -} +} \ No newline at end of file diff --git a/data/master/chlorhexidine_shampoo.json b/data/master/chlorhexidine_shampoo.json index 2ba7970..e29f74e 100644 --- a/data/master/chlorhexidine_shampoo.json +++ b/data/master/chlorhexidine_shampoo.json @@ -1,39 +1,36 @@ { "product_id": "MASTER-009", - "apc_code": "0519-CHLORHEX-SHAMPOO", + "apc_code": "0231334930108", "name": "클로르헥시딘 샴푸", "english_name": "Chlorhexidine Shampoo 2%", "manufacturer": "비르박", "category": "topical", "category_display": "피부외용제 (샴푸)", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "외용 (샴푸)", - "indication": "세균성/진균성 피부염, 농피증, 피부 감염 예방", - "mechanism": { "drug_class": "비구아나이드계 소독제", "action": "세균 세포막 파괴 → 살균 작용", "spectrum": "그람양성균, 그람음성균, 효모균" }, - "dosage": { "frequency": "주 2~3회", "contact_time": "5~10분간 방치 후 헹굼", "duration": "증상 호전 시까지 (보통 2~4주)" }, - "warnings": [ "⚠️ 눈, 귀, 점막 접촉 피할 것", "⚠️ 사용 후 완전히 헹굴 것", "⚠️ 깊은 상처에는 사용 금지" ], - "clinical_notes": [ "경구 항생제와 병용 시 효과 증가", "거품을 충분히 내어 피부에 접촉시키는 것이 중요", "피부 건조 시 보습제 병용 권장" ], - "storage": "실온 보관, 직사광선 피할 것" -} +} \ No newline at end of file diff --git a/data/master/enrofloxacin.json b/data/master/enrofloxacin.json index e714bdf..ce43638 100644 --- a/data/master/enrofloxacin.json +++ b/data/master/enrofloxacin.json @@ -1,67 +1,89 @@ { "product_id": "MASTER-003", - "apc_code": "0519-ENROFLOXACIN", + "apc_code": "0232532310106", "name": "아시엔로 50", "english_name": "Enrofloxacin 50mg", "manufacturer": "아시아제약", "category": "antibiotic", "category_display": "항생제 (퀴놀론계)", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "경구 (정제)", - "image_url": "/images/enrofloxacin.png", - "indication": "피부감염, 요로감염, 호흡기감염, 상처감염 등 세균성 감염증 치료", - "mechanism": { "drug_class": "Fluoroquinolone (3세대 퀴놀론)", "action": "DNA gyrase 및 topoisomerase IV 억제 → 세균 DNA 복제 차단", "spectrum": "그람양성균, 그람음성균 광범위" }, - "dosage": { "standard": "5mg/kg 1일 1회", "duration": "7~14일", "note": "음식과 함께 또는 공복 투여 가능" }, - "dosage_table": [ - {"weight": "5kg", "daily_dose": "25mg", "tablets": "0.5정"}, - {"weight": "10kg", "daily_dose": "50mg", "tablets": "1정"}, - {"weight": "15kg", "daily_dose": "75mg", "tablets": "1.5정"}, - {"weight": "20kg", "daily_dose": "100mg", "tablets": "2정"}, - {"weight": "25kg", "daily_dose": "125mg", "tablets": "2.5정"} + { + "weight": "5kg", + "daily_dose": "25mg", + "tablets": "0.5정" + }, + { + "weight": "10kg", + "daily_dose": "50mg", + "tablets": "1정" + }, + { + "weight": "15kg", + "daily_dose": "75mg", + "tablets": "1.5정" + }, + { + "weight": "20kg", + "daily_dose": "100mg", + "tablets": "2정" + }, + { + "weight": "25kg", + "daily_dose": "125mg", + "tablets": "2.5정" + } ], - "warnings": [ "⚠️ 고양이: 5mg/kg 초과 금지 (망막 독성 위험!)", "⚠️ 성장기 동물: 연골 손상 가능성 (1세 미만 주의)", "⚠️ 간질/경련 병력 동물 주의", "⚠️ 제산제(알루미늄, 마그네슘)와 2시간 간격 투여" ], - "contraindications": [ "1세 미만 강아지 (대형견은 18개월 미만)", "임신/수유 중", "간질/경련 병력", "퀴놀론 과민반응 이력" ], - "side_effects": { - "common": ["구토", "설사", "식욕부진"], - "serious": ["고양이 망막 독성 (고용량)", "연골 손상 (성장기)", "경련 (드묾)"] + "common": [ + "구토", + "설사", + "식욕부진" + ], + "serious": [ + "고양이 망막 독성 (고용량)", + "연골 손상 (성장기)", + "경련 (드묾)" + ] }, - "cat_warning": { "max_dose": "5mg/kg/day", "max_duration": "21일", "risk": "망막 변성 → 실명 가능", "source": "다수 문헌 보고" }, - "storage": "실온 보관, 습기 피할 것", - "source": { - "guidelines": ["ISCAID Antimicrobial Guidelines"], + "guidelines": [ + "ISCAID Antimicrobial Guidelines" + ], "notes": "고양이 망막 독성 관련 다수 증례 보고" } -} +} \ No newline at end of file diff --git a/data/master/fronilspot.json b/data/master/fronilspot.json index 57700c2..5463c2d 100644 --- a/data/master/fronilspot.json +++ b/data/master/fronilspot.json @@ -6,43 +6,63 @@ "manufacturer": "한국동물약품", "category": "antiparasitic", "category_display": "외부구충제 (스팟온)", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "경피 도포 (스팟온)", - "indication": "벼룩, 진드기 구제", - "coverage": { "external": { - "fleas": {"covered": true, "note": "4~8시간 내 사멸"}, - "ticks": {"covered": true, "note": "접촉 사멸"} + "fleas": { + "covered": true, + "note": "4~8시간 내 사멸" + }, + "ticks": { + "covered": true, + "note": "접촉 사멸" + } + }, + "heartworm": { + "covered": false }, - "heartworm": {"covered": false}, "intestinal": { - "roundworm": {"covered": false}, - "hookworm": {"covered": false}, - "whipworm": {"covered": false}, - "tapeworm": {"covered": false} + "roundworm": { + "covered": false + }, + "hookworm": { + "covered": false + }, + "whipworm": { + "covered": false + }, + "tapeworm": { + "covered": false + } } }, - "coverage_summary": { - "covered": ["벼룩", "진드기"], - "not_covered": ["심장사상충", "내부기생충"], + "covered": [ + "벼룩", + "진드기" + ], + "not_covered": [ + "심장사상충", + "내부기생충" + ], "gap_solution": "심장사상충: 하트세이버 / 내부기생충: 안텔민 추가" }, - "dosing": { "interval": "매월 1회", "interval_reason": "효능 지속 4주", "minimum_age": "8주 이상", "minimum_weight": "제한 없음" }, - "warnings": [ "⚠️ 도포 후 2일간 목욕/수영 금지", "⚠️ 토끼에게는 독성 (사용 금지)", "⚠️ 피부 상처 부위 도포 금지" ], - - "storage": "실온 보관, 직사광선 피할 것" -} + "storage": "실온 보관, 직사광선 피할 것", + "image_url": "https://d1vgkbcgf4kpck.cloudfront.net/medicine/3faefec5-4bdf-4039-93e3-b99b55ef9417.png" +} \ No newline at end of file diff --git a/data/master/gaesidin.json b/data/master/gaesidin.json index d565432..2462346 100644 --- a/data/master/gaesidin.json +++ b/data/master/gaesidin.json @@ -1,43 +1,264 @@ { "product_id": "MASTER-012", - "apc_code": "0231093500002", + "apc_code": "0231093520106", + "apc_variants": { + "5g": "0231093510108", + "10g": "0231093520106", + "15g": "0231093530104", + "20g": "0231093540102", + "30g": "0231093550109", + "50g": "0231093560107", + "100g": "0231093570105", + "200g": "0231093580103" + }, "name": "복합 개시딘 겔", "english_name": "GaeSidin Gel (Fusidic acid + Betamethasone)", "manufacturer": "(주)이엘티사이언스", + "approval_number": "194", + "approval_date": "2020-02-13", "category": "topical", "category_display": "피부외용제 (농피증)", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "외용 (겔)", - "indication": "표면성 세균성 농피증 국소 치료", - - "mechanism": { - "fusidic_acid": "0.5% - 황색포도상구균·MRSP 살균", - "betamethasone": "0.1% - 항염증·항소양 (Class III 스테로이드)" + "active_ingredients": { + "fusidic_acid": { + "concentration": "5mg/g (0.5%)", + "class": "스테로이드 구조 항생제", + "mechanism": "EF-G 결합 → 단백질 합성 억제 → 살균", + "target_bacteria": [ + "황색포도상구균", + "S. pseudintermedius", + "MRSP" + ] + }, + "betamethasone_valerate": { + "concentration": "1mg/g (0.1%)", + "class": "Class III 코르티코스테로이드", + "mechanism": "PLA2 억제 → 프로스타글란딘/루코트리엔 감소 → 항염증·항소양" + } + }, + "formulation_advantage": { + "why_gel": "털이 있는 개 피부에 최적화 - 겔이 털 사이로 침투하여 피부에 직접 도달", + "vs_cream": "크림/연고는 털에 흡착되어 피부 도달 저하", + "ph_optimization": "개 피부 pH(6.5~8.2)에 맞는 중성~친수성 기제", + "efficacy_evidence": "피부 내 농도 MIC90의 67,000배 달성 (PMID 29162115)" }, - "dosage": { "frequency": "1일 2회", - "duration": "최소 5일 → 증상 소실 후 2일 추가", - "max_duration": "7일 초과 금지", - "application": "환부 청결 후 환부에만 국소 도포" + "duration_min": "최소 5일", + "duration_after_resolution": "증상 소실 후 2일 추가", + "duration_max": "7일 (절대 초과 금지)", + "amount": "소량을 환부에만" + }, + "application_method": { + "step_1": { + "action": "환부 세정", + "detail": "미온수 또는 클로르헥시딘 희석액으로 환부를 깨끗이 닦고 완전히 건조" + }, + "step_2": { + "action": "털 갈라내기", + "detail": "환부 주변 털을 손가락으로 갈라 피부를 최대한 노출" + }, + "step_3": { + "action": "도포", + "detail": "소량(완두콩 크기 정도)을 환부에만 얇게 펴 바름" + }, + "step_4": { + "action": "흡수 대기", + "detail": "2~3분간 자연 건조 - 겔이 빠르게 흡수됨" + }, + "step_5": { + "action": "핥기 방지", + "detail": "도포 직후 엘리자베스 칼라 착용 또는 15분간 감시" + }, + "caregiver_tip": "장갑 착용 권장 - 베타메타손 피부 흡수 방지" + }, + "wound_care_guidelines": { + "before_application": [ + "환부가 심하게 오염된 경우 생리식염수로 세척", + "딱지나 가피가 있으면 무리하게 제거하지 말 것", + "출혈이 있는 깊은 상처에는 사용 금지" + ], + "after_application": [ + "통기성 유지 - 밀폐 드레싱 금지", + "붕대 감기 비권장 (습기 축적 → 세균 증식)", + "환부 긁기 방지를 위해 발톱 정리 권장" + ], + "environment": [ + "도포 후 30분간 산책/목욕 금지", + "수영/물놀이 금지 (치료 기간 중)", + "습한 환경 피하기 - 건조한 환경 유지" + ] + }, + "elizabethan_collar_guide": { + "necessity": "필수 - 베타메타손 경구 섭취 시 전신 흡수 위험", + "timing": "도포 직후 최소 15~20분, 가능하면 치료 기간 내내", + "size_selection": "코 끝이 칼라 가장자리에 닿지 않는 크기 선택", + "alternatives": [ + "도넛형 넥칼라 (목 부담 적음)", + "수술복/보호복 (체간 환부인 경우)", + "발 환부인 경우 양말+테이프" + ], + "signs_of_licking": [ + "환부 주변 털이 축축함", + "겔이 번들거리지 않고 매트함", + "환부 악화 또는 발적 증가" + ] + }, + "progress_monitoring": { + "day_1_2": { + "expected": "소양감 감소 시작 (베타메타손 효과)", + "observe": [ + "긁는 빈도 감소", + "발적 약간 완화" + ], + "action": "계속 도포, 칼라 유지" + }, + "day_3": { + "expected": "병변 크기 감소, 삼출물 감소", + "observe": [ + "환부 건조해짐", + "딱지 형성 시작" + ], + "checkpoint": true, + "action_if_improved": "계속 도포", + "action_if_no_change": "⚠️ 수의사 재진 필요 (내성균 또는 진균 가능성)" + }, + "day_5": { + "expected": "대부분 증상 소실", + "observe": [ + "피부 정상색 회복", + "털 재성장 시작" + ], + "action": "증상 소실 확인 후 2일 추가 도포" + }, + "day_7": { + "expected": "완전 치유", + "observe": [ + "환부 완전 건조", + "정상 피부와 구분 어려움" + ], + "action": "사용 종료 - 7일 초과 절대 금지" + } + }, + "veterinary_revisit_triggers": { + "timing_3_days": "3일 사용 후 호전 없거나 악화 시", + "immediate_triggers": [ + "환부 급격히 확대", + "고름 증가 또는 악취", + "발열, 식욕저하, 무기력", + "전신으로 병변 확산" + ], + "possible_causes": [ + "퓨시드산 내성균 감염 (한국 27%)", + "진균성(Malassezia) 농피증 오진", + "심부 농피증으로 진행" + ], + "required_tests": "세균 배양검사 및 감수성 검사 권장" }, - "warnings": [ - "⚠️ 7일 초과 사용 금지", + "⚠️ 7일 초과 사용 금지 - HPA 억제 위험", "⚠️ 3일 사용 후 호전 없으면 수의사 재진", - "⚠️ 눈·점막·깊은 상처 도포 금지", - "⚠️ 도포 후 핥지 않도록 엘리자베스 칼라" + "⚠️ 눈·점막·귀 내부·깊은 상처 도포 금지", + "⚠️ 도포 후 핥지 않도록 엘리자베스 칼라 필수", + "⚠️ 사용자(보호자) 장갑 착용 권장" ], - + "contraindications": { + "absolute": [ + "진균성(곰팡이) 농피증 - 스테로이드가 악화시킴", + "고양이 - 개 전용 허가", + "고막 천공된 귀 감염", + "바이러스성 피부 감염" + ], + "relative": [ + "임신·수유 중인 개 - 수의사 판단", + "당뇨병 환자 - 스테로이드 영향", + "쿠싱 증후군 환자" + ] + }, + "side_effects": { + "local": [ + "도포 부위 자극감 (드묾)", + "피부 얇아짐 - 장기 사용 시" + ], + "systemic_if_ingested": [ + "다음다뇨 (스테로이드 효과)", + "식욕 증가", + "장기: HPA 축 억제" + ] + }, + "vs_human_fucidin": { + "can_use_human": false, + "reason_1": "제형 차이: 사람용=크림(털에 흡착), 개시딘=겔(털 통과)", + "reason_2": "pH 차이: 사람 피부 4.5~5.5 vs 개 피부 6.5~8.2", + "reason_3": "농도 차이: 사람용 2% vs 개시딘 0.5%+스테로이드 복합" + }, + "clinical_evidence": { + "skin_penetration": "표재성 240μm에서 MIC90의 67,000배 농도 (PMID 29162115)", + "mrsp_coverage": "MRSP 포함 대부분 MIC ≤0.03 mg/L (PMID 25749003)", + "resistance_korea": "한국 S. pseudintermedius 내성률 27% (PMID 32115810)" + }, + "available_sizes": [ + "5g", + "10g", + "15g", + "20g", + "30g", + "50g", + "100g", + "200g" + ], + "storage": "실온 보관, 직사광선 피할 것", + "prescription_required": false, + "pharmacy_counseling": { + "quick_explanation": "개 피부 농피증(세균성 피부병) 치료 겔이에요. 항생제와 소염제가 함께 들어있어 세균도 죽이고 가려움도 줄여줘요.", + "key_points": [ + "하루 2번, 환부에만 얇게", + "최소 5일, 최대 7일", + "핥지 못하게 넥칼라 필수", + "3일째 안 좋아지면 병원으로" + ], + "common_question": { + "q": "사람 후시딘 써도 되나요?", + "a": "제형이 달라요. 사람용 크림은 개 털에 묻어서 피부에 안 닿아요. 개시딘 겔은 털 사이로 스며들어 피부에 직접 도달해요." + } + }, + "references": [ + { + "pmid": "29162115", + "title": "Opportunities for topical antimicrobial therapy: permeation of canine skin by fusidic acid", + "key_finding": "퓨시드산 겔 피부 침투: MIC의 67,000배 농도" + }, + { + "pmid": "25749003", + "title": "Susceptibility in vitro of canine staphylococcal isolates to fusidic acid", + "key_finding": "MRSP 포함 대부분 MIC ≤0.03 mg/L" + }, + { + "pmid": "34414614", + "title": "Influence of age, sex on skin pH in dogs", + "key_finding": "개 피부 pH 4.4~8.2 (사람보다 알칼리성)" + }, + { + "pmid": "32115810", + "title": "Fusidic acid resistance in S. pseudintermedius from dogs in Korea", + "key_finding": "한국 퓨시드산 내성률 27%" + } + ], + "last_updated": "2026-03-19", + "version": "2.0", "clinical_notes": [ - "개 피부 pH (4.4~8.2)에 최적화된 겔 제형", - "사람용 후시딘과 농도·제형 다름", + "사람용 후시딘과 농도/제형 다름 (동물 피부 pH 최적화)", + "개 피부 pH (4.4~8.2)에 맞춘 겔 제형", "털 있는 피부 침투에 유리한 겔 타입", "MRSP(메티실린 내성 포도상구균)에도 효과" ], - - "available_sizes": ["5g", "10g", "15g", "20g", "30g", "50g", "100g"], - - "storage": "실온 보관" -} + "pharmacy_tips": { + "human_vs_animal": "사람용 후시딘: 크림제형, 농도 2% / 동물용 개시딘: 겔제형, 농도 0.5%", + "ph_tip": "개 피부 pH는 4.4~8.2로 사람(5.5)보다 넓음. 겔 제형이 털 사이 침투에 유리", + "mrsp_note": "MRSP(메티실린 내성 포도상구균)에도 효과 있음" + } +} \ No newline at end of file diff --git a/data/master/heartsaver.json b/data/master/heartsaver.json index 723e8f3..8d831e7 100644 --- a/data/master/heartsaver.json +++ b/data/master/heartsaver.json @@ -1,51 +1,74 @@ { "product_id": "MASTER-005", - "apc_code": "0519-HEARTSAVER", + "apc_code": "0230467230300", "name": "하트세이버 츄어블", "english_name": "Heartsaver (Ivermectin + Pyrantel)", "manufacturer": "중앙바이오텍", "category": "antiparasitic", "category_display": "심장사상충 예방", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "경구 (츄어블)", - "indication": "심장사상충 예방 + 회충/구충 구제", - "coverage": { "external": { - "fleas": {"covered": false, "note": ""}, - "ticks": {"covered": false, "note": ""} + "fleas": { + "covered": false, + "note": "" + }, + "ticks": { + "covered": false, + "note": "" + } }, "heartworm": { "covered": true, "note": "L3/L4 유충 구제" }, "intestinal": { - "roundworm": {"covered": true, "note": "회충"}, - "hookworm": {"covered": true, "note": "구충"}, - "whipworm": {"covered": false, "note": ""}, - "tapeworm": {"covered": false, "note": ""} + "roundworm": { + "covered": true, + "note": "회충" + }, + "hookworm": { + "covered": true, + "note": "구충" + }, + "whipworm": { + "covered": false, + "note": "" + }, + "tapeworm": { + "covered": false, + "note": "" + } } }, - "coverage_summary": { - "covered": ["심장사상충", "회충", "구충"], - "not_covered": ["벼룩", "진드기", "편충", "조충"], + "covered": [ + "심장사상충", + "회충", + "구충" + ], + "not_covered": [ + "벼룩", + "진드기", + "편충", + "조충" + ], "gap_solution": "외부구충: 프로닐스팟 / 편충·조충: 안텔민 추가" }, - "dosing": { "interval": "매월 1회", "interval_reason": "심장사상충 윈도우 30일", "minimum_age": "6주 이상", "minimum_weight": "제한 없음" }, - "warnings": [ "⚠️ 콜리 품종: MDR1 유전자 확인 필요", "⚠️ 투약 전 심장사상충 검사 필수", "⚠️ 감염견에 투약 시 쇼크 위험" ], - "storage": "실온 보관" -} +} \ No newline at end of file diff --git a/data/master/impact.json b/data/master/impact.json index 5667c7d..b13bd84 100644 --- a/data/master/impact.json +++ b/data/master/impact.json @@ -1,60 +1,91 @@ { "product_id": "MASTER-013", - "apc_code": "0232873800003", + "apc_code": "0232873820205", "name": "임팩트액", "english_name": "Impact (Imidacloprid + Moxidectin)", "manufacturer": "제이에스코리아 (애드보킷 제네릭)", "category": "antiparasitic", "category_display": "스팟온 복합구충제", - "target_animal": ["개", "고양이", "페렛"], + "target_animal": [ + "개", + "고양이", + "페렛" + ], "administration": "경피 도포 (스팟온)", - "indication": "벼룩 + 심장사상충 예방 + 회충 + 구충 + 귀진드기 + 모낭충", - "coverage_summary": { - "covered": ["벼룩", "심장사상충", "회충", "구충", "편충(개)", "귀진드기", "모낭충", "개선충"], - "not_covered": ["진드기", "조충"], + "covered": [ + "벼룩", + "심장사상충", + "회충", + "구충", + "편충(개)", + "귀진드기", + "모낭충", + "개선충" + ], + "not_covered": [ + "진드기", + "조충" + ], "gap_solution": "진드기: 프로닐스팟 추가 / 조충: 안텔민 추가" }, - "dosing": { "interval": "매월 1회", "interval_reason": "심장사상충 L3→L5 30일 윈도우", "minimum_age": "개 7주, 고양이 9주 이상", "minimum_weight": "제한 없음" }, - "weight_products": [ - {"size": "개 XS", "weight_range": "~4kg", "dose": "0.4mL"}, - {"size": "개 S", "weight_range": "4~10kg", "dose": "1.0mL"}, - {"size": "개 M", "weight_range": "10~25kg", "dose": "2.5mL"}, - {"size": "개 L", "weight_range": "25~40kg", "dose": "4.0mL"}, - {"size": "고양이 S", "weight_range": "~4kg", "dose": "0.4mL"}, - {"size": "고양이 M", "weight_range": "4~8kg", "dose": "0.8mL"} + { + "size": "개 XS", + "weight_range": "~4kg", + "dose": "0.4mL" + }, + { + "size": "개 S", + "weight_range": "4~10kg", + "dose": "1.0mL" + }, + { + "size": "개 M", + "weight_range": "10~25kg", + "dose": "2.5mL" + }, + { + "size": "개 L", + "weight_range": "25~40kg", + "dose": "4.0mL" + }, + { + "size": "고양이 S", + "weight_range": "~4kg", + "dose": "0.4mL" + }, + { + "size": "고양이 M", + "weight_range": "4~8kg", + "dose": "0.8mL" + } ], - "special_protocols": { "demodex": "모낭충: 2~4주 간격, 2회 연속 피부검사 음성까지", "mf_treatment": "마이크로필라리아 치료: 월 1회, 성충구제 후 9개월" }, - "warnings": [ "⚠️ 도포 후 48시간 목욕 금지 (셀라멕틴 2시간과 다름)", "⚠️ 등 전체 정중선으로 분산 도포 (한 곳 X)", "⚠️ 도포 부위 마를 때까지 다른 동물과 격리", "⚠️ 핥으면 신경 증상 가능" ], - "clinical_notes": [ "셀라이트보다 커버 넓음: 구충+편충+모낭충까지", "진드기 미커버 → 진드기 유행 시 프로닐 추가", "이미다클로프리드: 접촉 즉시 사멸 (흡혈 전)", "목시덱틴: 전신 흡수 → 심장사상충·내부기생충" ], - "source": { "original": "애드보킷 (Advocate®, 엘랑코)" }, - "storage": "직사광선 피하여 서늘한 곳 보관" -} +} \ No newline at end of file diff --git a/data/master/meloxicash.json b/data/master/meloxicash.json index f148d49..61a83f4 100644 --- a/data/master/meloxicash.json +++ b/data/master/meloxicash.json @@ -1,37 +1,58 @@ { "product_id": "MASTER-011", - "apc_code": "0232523500007", + "apc_code": "0232523510309", "name": "멜록시캐시 CH", "english_name": "Meloxicash (Meloxicam 1mg)", "manufacturer": "국내", "category": "nsaid", "category_display": "진통소염제 (NSAIDs)", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "경구 (츄어블정)", - "indication": "개의 급성·만성 근골격계 질환 통증경감 및 염증 치료", - "mechanism": { "drug_class": "옥시캄계 NSAIDs", "action": "COX-2 강선택 억제 → 카프로펜보다 위장관 유리", "half_life": "~24시간 (1일 1회 투여 가능)" }, - "dosage": { "standard": "로딩 0.2mg/kg → 유지 0.1mg/kg", "note": "첫날 2배 용량 → 다음날부터 1일 1회", "formula": "유지: 10kg당 1정" }, - "dosage_table": [ - {"weight": "5kg", "loading": "1.0mg", "tablets": "0.5정"}, - {"weight": "10kg", "loading": "2.0mg", "tablets": "1정"}, - {"weight": "15kg", "loading": "3.0mg", "tablets": "1.5정"}, - {"weight": "20kg", "loading": "4.0mg", "tablets": "2정"}, - {"weight": "30kg", "loading": "6.0mg", "tablets": "3정"}, - {"weight": "40kg", "loading": "8.0mg", "tablets": "4정"} + { + "weight": "5kg", + "loading": "1.0mg", + "tablets": "0.5정" + }, + { + "weight": "10kg", + "loading": "2.0mg", + "tablets": "1정" + }, + { + "weight": "15kg", + "loading": "3.0mg", + "tablets": "1.5정" + }, + { + "weight": "20kg", + "loading": "4.0mg", + "tablets": "2정" + }, + { + "weight": "30kg", + "loading": "6.0mg", + "tablets": "3정" + }, + { + "weight": "40kg", + "loading": "8.0mg", + "tablets": "4정" + } ], - "absolute_contraindications": [ { "item": "다른 NSAIDs 동시 투여 금지", @@ -46,28 +67,28 @@ "reason": "31일 반복 투여 시 신장 손상 입증 (PMID:41549544)" } ], - "washout_period": { "to_other_nsaid": "3~5일", "to_steroid": "5~7일" }, - "warnings": [ "⚠️ 탈수·저혈압 상태 투여 금지 (신장독성)", "⚠️ 장기 투여 시 정기 혈액검사 필요", "⚠️ 구토, 흑색변, 식욕부진 시 즉시 중단", "✅ 카프로펜보다 COX-2 선택성 높음" ], - "clinical_notes": [ "로딩 용량: 첫날 치료 농도 즉시 달성", "수술 후 24시간 통증: 로베나콕시브보다 우수 (PMID:30637777)", "OA 개: 마바콕시브와 동등 효과 (PMID:24859353)" ], - "source": { - "pmid": ["10769766", "24859353", "30637777", "32059002"] + "pmid": [ + "10769766", + "24859353", + "30637777", + "32059002" + ] }, - "storage": "실온 보관" -} +} \ No newline at end of file diff --git a/data/master/nexgard_spectra.json b/data/master/nexgard_spectra.json index 19f9471..accc3cd 100644 --- a/data/master/nexgard_spectra.json +++ b/data/master/nexgard_spectra.json @@ -1,24 +1,39 @@ { "product_id": "MASTER-001", - "apc_code": "0519-NEXGARD-SPECTRA", + "apc_code": null, "name": "넥스가드 스펙트라", "english_name": "NexGard Spectra (Afoxolaner + Milbemycin Oxime)", "manufacturer": "베링거인겔하임 (Boehringer Ingelheim)", "category": "antiparasitic", "category_display": "올인원 구충제", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "경구 (소고기맛 츄어블)", - "image_url": "/images/nexgard_spectra.png", - + "image_url": "data:image/jpeg;base64,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", "indication": "벼룩·진드기 구제 + 심장사상충 예방 + 내부기생충 구제", - "coverage": { "external": { - "fleas": {"covered": true, "note": "6~8시간 내 사멸"}, - "ticks": {"covered": true, "note": "12~24시간 내 사멸"}, - "demodex": {"covered": true, "note": "모낭충증 치료"}, - "sarcoptes": {"covered": true, "note": "개선충증"}, - "ear_mites": {"covered": true, "note": "귀진드기"} + "fleas": { + "covered": true, + "note": "6~8시간 내 사멸" + }, + "ticks": { + "covered": true, + "note": "12~24시간 내 사멸" + }, + "demodex": { + "covered": true, + "note": "모낭충증 치료" + }, + "sarcoptes": { + "covered": true, + "note": "개선충증" + }, + "ear_mites": { + "covered": true, + "note": "귀진드기" + } }, "heartworm": { "covered": true, @@ -26,19 +41,39 @@ "limitation": "성충(L5+)은 구제 불가" }, "intestinal": { - "roundworm": {"covered": true, "note": "회충"}, - "hookworm": {"covered": true, "note": "구충"}, - "whipworm": {"covered": true, "note": "편충 - 하트가드에 없는 커버!"}, - "tapeworm": {"covered": false, "note": "❌ 조충 미커버 - Praziquantel 필요"} + "roundworm": { + "covered": true, + "note": "회충" + }, + "hookworm": { + "covered": true, + "note": "구충" + }, + "whipworm": { + "covered": true, + "note": "편충 - 하트가드에 없는 커버!" + }, + "tapeworm": { + "covered": false, + "note": "❌ 조충 미커버 - Praziquantel 필요" + } } }, - "coverage_summary": { - "covered": ["벼룩", "진드기", "심장사상충", "회충", "구충", "편충", "모낭충"], - "not_covered": ["조충(촌충)"], + "covered": [ + "벼룩", + "진드기", + "심장사상충", + "회충", + "구충", + "편충", + "모낭충" + ], + "not_covered": [ + "조충(촌충)" + ], "gap_solution": "안텔민(Praziquantel) 3개월마다 보조 투약" }, - "dosing": { "interval": "매월 1회", "interval_reason": "심장사상충 L3→L5 전환 시간 ~60일, 30일 간격으로 차단", @@ -47,52 +82,87 @@ "minimum_age": "8주 이상", "minimum_weight": "2kg 이상" }, - "weight_products": [ - {"size": "XS", "weight_range": "2~3.5kg", "afoxolaner": "9.4mg", "milbemycin": "1.9mg", "price_approx": "16,000원"}, - {"size": "S", "weight_range": "3.6~7.5kg", "afoxolaner": "18.8mg", "milbemycin": "3.8mg", "price_approx": "17,000원"}, - {"size": "M", "weight_range": "7.6~15kg", "afoxolaner": "37.5mg", "milbemycin": "7.5mg", "price_approx": "18,000원"}, - {"size": "L", "weight_range": "15.1~30kg", "afoxolaner": "75mg", "milbemycin": "15mg", "price_approx": "20,000원"}, - {"size": "XL", "weight_range": "30.1~60kg", "afoxolaner": "150mg", "milbemycin": "30mg", "price_approx": "22,000원"} + { + "size": "XS", + "weight_range": "2~3.5kg", + "afoxolaner": "9.4mg", + "milbemycin": "1.9mg", + "price_approx": "16,000원" + }, + { + "size": "S", + "weight_range": "3.6~7.5kg", + "afoxolaner": "18.8mg", + "milbemycin": "3.8mg", + "price_approx": "17,000원" + }, + { + "size": "M", + "weight_range": "7.6~15kg", + "afoxolaner": "37.5mg", + "milbemycin": "7.5mg", + "price_approx": "18,000원" + }, + { + "size": "L", + "weight_range": "15.1~30kg", + "afoxolaner": "75mg", + "milbemycin": "15mg", + "price_approx": "20,000원" + }, + { + "size": "XL", + "weight_range": "30.1~60kg", + "afoxolaner": "150mg", + "milbemycin": "30mg", + "price_approx": "22,000원" + } ], - "warnings": [ "⚠️ 경련/간질 이력이 있는 개는 수의사 상담 필수 (이소자졸린 계열 FDA 경고)", "⚠️ 투약 전 심장사상충 검사 필수 (감염 상태에서 투약 시 위험)", "⚠️ 8주(2개월) 미만, 2kg 미만 투여 금지", "⚠️ 콜리 품종은 MDR1 유전자 검사 후 투여 권장" ], - "contraindications": [ "8주 미만, 2kg 미만", "심장사상충 양성 (미검사 포함)", "경련/간질 이력 (상대적 금기)" ], - "side_effects": [ "드물게 구토, 설사, 무기력, 식욕부진 (대부분 일시적)", "매우 드물게 근육떨림, 운동실조, 경련 (FDA 경고)" ], - "fda_warning": { "year": 2018, "content": "이소자졸린 계열에서 드물게 신경계 부작용 보고", - "symptoms": ["근육 떨림", "운동실조", "경련"], + "symptoms": [ + "근육 떨림", + "운동실조", + "경련" + ], "fda_statement": "대다수 동물에서 안전하고 효과적" }, - "comparison_with_3set": { "convenience": "넥스가드 스펙트라 우위 (한 알로 끝)", "cost": "3종 세트가 저렴 (~15,000원 vs ~20,000원)", "coverage": "넥스가드가 편충까지 추가 커버", "tapeworm_gap": "둘 다 안텔민 보조 필요" }, - "storage": "직사광선 피하여 서늘한 곳 보관", - "source": { - "guidelines": ["ESCCAP GL1/GL3/GL5 (2024-2025)", "CAPC (2024)", "AHS Think 12 (2024)"], + "guidelines": [ + "ESCCAP GL1/GL3/GL5 (2024-2025)", + "CAPC (2024)", + "AHS Think 12 (2024)" + ], "fda": "FDA Isoxazoline Fact Sheet (2018)", - "pmid": ["40234985", "30201031", "30516132", "32485788"] + "pmid": [ + "40234985", + "30201031", + "30516132", + "32485788" + ] } -} +} \ No newline at end of file diff --git a/data/master/oridermyl.json b/data/master/oridermyl.json index 42e0951..139ac67 100644 --- a/data/master/oridermyl.json +++ b/data/master/oridermyl.json @@ -1,39 +1,36 @@ { "product_id": "MASTER-007", - "apc_code": "0519-ORIDERMYL", + "apc_code": "0231065620103", "name": "오리더밀", "english_name": "Oridermyl (Nystatin+Neomycin+Triamcinolone)", "manufacturer": "TVM", "category": "otic", "category_display": "귀염증 치료제", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "점이 (귀에 투약)", - "indication": "외이염, 귀진드기 감염, 세균성/진균성 귀감염", - "mechanism": { "nystatin": "항진균 (칸디다, 말라세지아)", "neomycin": "항균 (그람음성균)", "triamcinolone": "항염증 (가려움, 부종 완화)", "permethrin": "귀진드기 구제" }, - "dosage": { "standard": "1일 1~2회", "amount": "귀당 5~10방울", "duration": "7~14일" }, - "warnings": [ "⚠️ 고막 천공 시 사용 금지", "⚠️ 투약 전 귀 세정 권장", "⚠️ 장기 사용 시 내성균 주의" ], - "contraindications": [ "고막 천공/손상", "아미노글리코사이드 과민증" ], - "storage": "실온 보관" -} +} \ No newline at end of file diff --git a/data/master/selight.json b/data/master/selight.json index d3b315e..024925d 100644 --- a/data/master/selight.json +++ b/data/master/selight.json @@ -1,69 +1,119 @@ { "product_id": "MASTER-010", - "apc_code": "0519-SELIGHT", + "apc_code": "0232545420203", "name": "셀라이트", "english_name": "Selight (Selamectin)", "manufacturer": "국내산 (레볼루션 제네릭)", "category": "antiparasitic", "category_display": "스팟온 종합구충제", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "경피 도포 (스팟온)", - "indication": "심장사상충 예방 + 벼룩 + 귀진드기 + 개선충(옴) + 회충 + 이 + 참진드기(개)", - "coverage_summary": { - "covered": ["심장사상충", "벼룩", "귀진드기", "개선충", "회충", "이", "진드기(개)"], - "not_covered": ["조충(촌충)", "편충", "구충(개)"], + "covered": [ + "심장사상충", + "벼룩", + "귀진드기", + "개선충", + "회충", + "이", + "진드기(개)" + ], + "not_covered": [ + "조충(촌충)", + "편충", + "구충(개)" + ], "gap_solution": "안텔민 3개월마다 보조 투약 (조충·편충 보완)" }, - "dosing": { "interval": "매월 1회", "interval_reason": "심장사상충 L3→L5 전환 30일 윈도우 + 벼룩 라이프사이클", "minimum_age": "6주 이상", "minimum_weight": "제한 없음" }, - "weight_products": [ - {"size": "SS", "weight_range": "~2.5kg", "dose": "0.25mL (15mg)"}, - {"size": "S", "weight_range": "2.5~5kg", "dose": "0.5mL (30mg)"}, - {"size": "M", "weight_range": "5~10kg", "dose": "0.5mL (60mg)"}, - {"size": "L", "weight_range": "10~20kg", "dose": "1.0mL (120mg)"}, - {"size": "XL", "weight_range": "20~40kg", "dose": "2.0mL (240mg)"} + { + "size": "SS", + "weight_range": "~2.5kg", + "dose": "0.25mL (15mg)" + }, + { + "size": "S", + "weight_range": "2.5~5kg", + "dose": "0.5mL (30mg)" + }, + { + "size": "M", + "weight_range": "5~10kg", + "dose": "0.5mL (60mg)" + }, + { + "size": "L", + "weight_range": "10~20kg", + "dose": "1.0mL (120mg)" + }, + { + "size": "XL", + "weight_range": "20~40kg", + "dose": "2.0mL (240mg)" + } ], - "special_protocols": { "tick_intensive": "진드기 집중: 2주 간격 3회 → 이후 월 1회", "sarcoptes": "옴 치료: Day 0 + Day 30 (2회)", "ear_mite_cat": "귀진드기(고양이): 단일 도포 (100%)", "ear_mite_dog": "귀진드기(개): Day 0 + Day 30 (2회 - 이도 깊음)" }, - "efficacy_data": [ - {"target": "심장사상충", "efficacy": "100%", "source": "PMID:10940527"}, - {"target": "벼룩(C.felis)", "efficacy": "≥98.9%", "source": "PMID:10940521"}, - {"target": "귀진드기(고양이)", "efficacy": "94~100%", "source": "PMID:10940530"}, - {"target": "개선충(옴)", "efficacy": "100% (Day60)", "source": "PMID:10940530"} + { + "target": "심장사상충", + "efficacy": "100%", + "source": "PMID:10940527" + }, + { + "target": "벼룩(C.felis)", + "efficacy": "≥98.9%", + "source": "PMID:10940521" + }, + { + "target": "귀진드기(고양이)", + "efficacy": "94~100%", + "source": "PMID:10940530" + }, + { + "target": "개선충(옴)", + "efficacy": "100% (Day60)", + "source": "PMID:10940530" + } ], - "warnings": [ "⚠️ 6주 미만 사용 금지", "⚠️ 도포 후 2시간 이후 목욕 가능", "⚠️ 피부 상처 부위 도포 금지", "✅ 콜리 품종 안전 (PMID:10940536 확인)" ], - "clinical_notes": [ "레볼루션(Zoetis) 국내산 제네릭 - 동일 성분·동일 효능", "개+고양이 겸용 (체중별 제품 선택)", "조충·편충 미커버 → 안텔민 병행 필요", "도포 후 건조될 때까지 다른 동물이 핥지 않도록" ], - "source": { - "guidelines": ["AHS 2024", "ESCCAP GL5 2024", "CAPC 2024"], - "pmid": ["10940527", "10940521", "10940530", "10940536"] + "guidelines": [ + "AHS 2024", + "ESCCAP GL5 2024", + "CAPC 2024" + ], + "pmid": [ + "10940527", + "10940521", + "10940530", + "10940536" + ] }, - "storage": "직사광선 피하여 서늘한 곳 보관" -} +} \ No newline at end of file diff --git a/data/master/serenia_maropitant.json b/data/master/serenia_maropitant.json index f827982..aa2c7fa 100644 --- a/data/master/serenia_maropitant.json +++ b/data/master/serenia_maropitant.json @@ -1,23 +1,22 @@ { "product_id": "MASTER-004", - "apc_code": "0519-SERENIA", + "apc_code": "0231884620107", "name": "세레니아 정", "english_name": "Serenia (Maropitant citrate)", "manufacturer": "조에티스 (Zoetis)", "category": "antiemetic", "category_display": "항구토제", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "경구 (정제)", - "image_url": "/images/serenia.png", - "indication": "급성 구토, 멀미(차멀미) 예방 및 치료", - "mechanism": { "drug_class": "NK1 수용체 길항제", "action": "구토중추의 NK1 수용체 차단 → 구토 억제", "feature": "중추 및 말초 모두 작용" }, - "dosage": { "acute_vomiting": { "dose": "2mg/kg 1일 1회", @@ -29,45 +28,68 @@ "note": "공복 상태 권장 (효과 향상)" } }, - "dosage_table": [ - {"weight": "3kg", "acute": "6mg", "motion": "24mg"}, - {"weight": "5kg", "acute": "10mg", "motion": "40mg"}, - {"weight": "10kg", "acute": "20mg", "motion": "80mg"}, - {"weight": "15kg", "acute": "30mg", "motion": "120mg"}, - {"weight": "20kg", "acute": "40mg", "motion": "160mg"} + { + "weight": "3kg", + "acute": "6mg", + "motion": "24mg" + }, + { + "weight": "5kg", + "acute": "10mg", + "motion": "40mg" + }, + { + "weight": "10kg", + "acute": "20mg", + "motion": "80mg" + }, + { + "weight": "15kg", + "acute": "30mg", + "motion": "120mg" + }, + { + "weight": "20kg", + "acute": "40mg", + "motion": "160mg" + } + ], + "available_strengths": [ + "16mg", + "24mg", + "60mg", + "160mg" ], - - "available_strengths": ["16mg", "24mg", "60mg", "160mg"], - "warnings": [ "⚠️ 16주(4개월) 미만 강아지 금지", "⚠️ 고양이: 급성 구토에만 사용 (멀미 적응증 없음)", "⚠️ 5일 이상 연속 투여 금지 (급성 구토)", "⚠️ 차멀미 예방 시 공복 상태에서 효과적" ], - "contraindications": [ "16주 미만 강아지", "위장관 폐색 의심 시 (구토 억제가 위험)", "독소 섭취 후 (구토 유도 필요 시)" ], - "side_effects": { - "common": ["침흘림 (일시적)", "무기력"], - "rare": ["설사", "식욕부진"] + "common": [ + "침흘림 (일시적)", + "무기력" + ], + "rare": [ + "설사", + "식욕부진" + ] }, - "clinical_notes": [ "구토 원인 파악 필수 (단순 증상 억제 아님)", "위장관 폐색, 독소 섭취 시에는 구토 유도가 필요할 수 있음", "멀미 예방: 이동 2시간 전 + 공복 = 최대 효과" ], - "storage": "실온 보관", - "source": { "product_info": "Zoetis Serenia Product Information", "notes": "FDA 승인 수의용 항구토제" } -} +} \ No newline at end of file diff --git a/data/master/simparica.json b/data/master/simparica.json index 8987a02..6913d4a 100644 --- a/data/master/simparica.json +++ b/data/master/simparica.json @@ -1,6 +1,6 @@ { "product_id": "MASTER-019", - "apc_code": "0519-SIMPARICA", + "apc_code": "0232571730106", "name": "심파리카 트리오", "english_name": "Simparica Trio (Sarolaner+Moxidectin+Pyrantel)", "manufacturer": "조에티스 (Zoetis)", diff --git a/data/master/terbiderm.json b/data/master/terbiderm.json index da983fb..c27b9cd 100644 --- a/data/master/terbiderm.json +++ b/data/master/terbiderm.json @@ -1,38 +1,35 @@ { "product_id": "MASTER-008", - "apc_code": "0519-TERBIDERM", + "apc_code": "0232064110102", "name": "터비덤 스프레이", "english_name": "Terbiderm (Terbinafine)", "manufacturer": "동방동물약품", "category": "antifungal", "category_display": "항진균제 (피부)", - "target_animal": ["개", "고양이"], + "target_animal": [ + "개", + "고양이" + ], "administration": "외용 (스프레이)", - "indication": "피부사상균증 (백선), 말라세지아 피부염", - "mechanism": { "drug_class": "알릴아민계 항진균제", "action": "스쿠알렌 에폭시다제 억제 → 진균 세포막 합성 차단" }, - "dosage": { "frequency": "1일 1~2회", "duration": "2~4주 (완치 후 1주 추가)", "application": "병변 및 주변 2cm까지 도포" }, - "warnings": [ "⚠️ 눈, 점막 접촉 피할 것", "⚠️ 핥지 못하게 엘리자베스 칼라 권장", "⚠️ 경구 항진균제 병용 시 효과 증가" ], - "clinical_notes": [ "피부사상균 배양 검사 권장 (치료 전)", "환경 소독 병행 필수 (재감염 방지)", "장모종은 병변 주변 제모 권장" ], - "storage": "실온 보관, 화기 주의" -} +} \ No newline at end of file diff --git a/data/master/tiergard.json b/data/master/tiergard.json index 6838e96..e153369 100644 --- a/data/master/tiergard.json +++ b/data/master/tiergard.json @@ -1,50 +1,393 @@ { "product_id": "MASTER-015", - "apc_code": "0231089400001", + "apc_code": "0231089420409", "name": "티어가드 정", "english_name": "TierGard (Tylosin tartrate)", - "manufacturer": "국내", + "name_meaning": "Tier(동물) + Guard(보호) — 동물 안구·피부 감염 보호", + "manufacturer": "(주)이엘티사이언스", + "country": "한국", + "global_status": "한국 독자 허가 제품 (글로벌 개용 60mg 정제 시판 없음)", + "approval_date": "2013-03-20", + "approval_number": "159", "category": "antibiotic", "category_display": "항생제 (마크롤라이드계)", - "target_animal": ["개"], + "target_animal": [ + "개" + ], "administration": "경구 (정제)", - - "indication": "결막염, 눈물 자국(세균성), 농피증 치료", - + "indication": "포도상구균·연쇄상구균에 의한 결막염, 농피증 치료", "mechanism": { - "drug_class": "마크롤라이드계 항생제 (16원환)", - "action": "세균 50S 리보솜 결합 → 단백 합성 억제", - "spectrum": "포도상구균, 연쇄상구균, 마이코플라즈마" + "drug_class": "마크롤라이드계 항생제 (16원환 Macrolide)", + "action": "세균 50S 리보솜 결합 → 단백 합성 억제 → 정균 작용", + "spectrum": { + "covered": [ + "Staphylococcus pseudintermedius", + "Staphylococcus aureus", + "Streptococcus spp.", + "Mycoplasma spp." + ], + "not_covered": [ + "Pseudomonas aeruginosa", + "E. coli", + "Proteus spp.", + "진균류" + ], + "susceptibility_rate": "82.61% (항생제 미노출 S. pseudintermedius, PMID: 20960412)" + }, + "tear_staining_mechanism": { + "description": "세균성 분비물 감소 + 마크롤라이드 항염증 효과 복합 작용", + "pathway": [ + "내안각·결막 세균 (S. pseudintermedius, Mycoplasma 등)", + "타일로신 → 세균 50S 리보솜 결합 → 단백 합성 억제", + "세균 부하 감소", + "결막·비루관 주변 만성 염증 감소 + 세균성 분비물 감소", + "눈물관 주변 환경 개선", + "포르피린 착색 유발 삼출물 감소", + "눈물 자국 완화 (수주 이상 소요)" + ], + "limitation": "이미 착색된 털은 항생제로 탈색 불가 — 새 털이 자라면서 교체됨" + }, + "porphyrin_explanation": { + "what": "혈액 속 헤모글로빈의 헴(heme) 합성 과정에서 생성되는 대사산물", + "why_staining": "눈물에 과도하게 분비되면 흰 털에 갈색-적갈색 얼룩", + "why_darkens": "빛(자외선)에 노출되면 산화되어 색이 짙어짐", + "note": "포르피린 자체는 무해하나 미용적으로 문제" + } }, - "dosage": { - "standard": "10~20mg/kg 1일 2회", - "duration": "4주간", - "note": "소형견(말티즈·비숑) 주 사용" + "standard": "20mg/kg (타일로신 기준)", + "approved_range": "10~20mg/kg (한국 허가사항)", + "confirmed_dose": "20mg/kg bid (임상 근거 확정)", + "frequency": "1일 2회 (12시간 간격)", + "duration": "4주 (한국 허가사항)", + "with_food": "권장 (위장관 자극 최소화)", + "note": "반감기 54분으로 짧아 1일 2회 투여 필수" }, - "dosage_table": [ - {"weight": "2kg", "dose": "40mg", "tablets": "20mg × 2정"}, - {"weight": "3kg", "dose": "60mg", "tablets": "60mg × 1정"}, - {"weight": "5kg", "dose": "100mg", "tablets": "60mg × 1.7정"}, - {"weight": "10kg", "dose": "200mg", "tablets": "200mg × 1정"}, - {"weight": "15kg", "dose": "300mg", "tablets": "200mg × 1.5정"} + { + "weight": "2kg", + "dose": "40mg", + "tablets": "20mg × 2정" + }, + { + "weight": "3kg", + "dose": "60mg", + "tablets": "60mg × 1정", + "breed_example": "말티즈·요크셔" + }, + { + "weight": "5kg", + "dose": "100mg", + "tablets": "60mg × 1.5~2정", + "breed_example": "푸들·비숑" + }, + { + "weight": "6kg", + "dose": "120mg", + "tablets": "60mg × 2정", + "breed_example": "시추·페키니즈" + }, + { + "weight": "9kg", + "dose": "180mg", + "tablets": "60mg × 3정", + "breed_example": "코커스패니얼" + }, + { + "weight": "10kg", + "dose": "200mg", + "tablets": "200mg × 1정", + "note": "중형견 경계" + }, + { + "weight": "15kg", + "dose": "300mg", + "tablets": "200mg × 1.5정" + }, + { + "weight": "20kg", + "dose": "400mg", + "tablets": "200mg × 2정" + } ], - - "available_strengths": ["20mg", "60mg", "200mg"], - + "available_strengths": [ + "20mg", + "60mg", + "200mg" + ], + "strength_recommendation": { + "small_dog": "60mg 정이 가장 실용적 (3~6kg 소형견)", + "medium_large": "10kg 이상은 200mg 정 전환 권장" + }, + "treatment_timeline": { + "description": "효과가 나타나는 시기 (눈물자국 기준)", + "phases": [ + { + "week": "1~2주", + "expected": "결막 충혈·분비물 감소 (세균성인 경우)" + }, + { + "week": "2~3주", + "expected": "눈물 분비량 감소 시작" + }, + { + "week": "4주", + "expected": "눈물 자국 색이 옅어지기 시작" + }, + { + "week": "4주 이후", + "expected": "새 털이 자라면서 착색 털 교체 (트리밍 병행)" + } + ], + "realistic_expectation": "효과를 눈으로 확인하려면 최소 4~8주 소요", + "important_note": "이미 착색된 털은 항생제로 탈색되지 않음" + }, + "follow_up_points": { + "description": "4주 복용 후 경과 관찰 포인트", + "checkpoints": [ + { + "timing": "2주차", + "items": [ + "병변 면적 감소 확인", + "눈물 분비량 변화", + "새 병변 발생 여부" + ] + }, + { + "timing": "4주차", + "items": [ + "완치 여부 판단", + "추가 연장 필요성 결정", + "착색 털 트리밍 권고" + ] + }, + { + "timing": "치료 완료 후", + "items": [ + "근본 원인(알레르기·구조적) 교정 여부 확인", + "재발 모니터링" + ] + } + ], + "treatment_failure_signs": [ + "2주 투여 후 뚜렷한 개선 없음 → 감수성 재검", + "반복 재발 (3개월 내) → 원인 감별 + 배양 검사", + "MRSP 의심 → 다약제 내성 확인" + ] + }, + "relapse_prevention": { + "description": "재발 방지 관리법", + "daily_care": [ + { + "action": "외안각 세정", + "detail": "매일 생리식염수나 안과용 세정제로 내안각(눈물 고이는 부분) 닦기" + }, + { + "action": "물 관리", + "detail": "정수 또는 생수 사용 (철분 포함 수돗물은 포르피린 착색 악화 가능)" + }, + { + "action": "미용 관리", + "detail": "착색된 털은 정기적으로 트리밍" + } + ], + "dietary_management": { + "principle": "알레르기 원인 제거", + "recommendation": "첨가물 없는 단순 식이로 변경 검토" + }, + "root_cause_correction": { + "importance": "근본 원인 미교정 시 치료 중단 후 재발 빈번", + "causes_to_address": [ + "비루관 협착", + "삼모증", + "안검 내번", + "알레르기" + ], + "warning": "마크롤라이드 100일 이상 장기 투여 시 내성균 선택 위험 (PMID: 32109782)" + }, + "relapse_rate": "28.6% (3개월 내, PMID: 7994702)" + }, + "concurrent_treatments": { + "description": "병행 시술 안내", + "structural_causes": { + "conditions": [ + "비루관 협착·폐쇄", + "속눈썹 이상(삼모증)", + "안검 내번" + ], + "treatment": "수의안과 전문 처치/수술 필요", + "note": "구조적 원인은 항생제로 해결 불가" + }, + "nasolacrimal_flushing": { + "description": "비루관 세척", + "purpose": "비루관 협착 예방 및 눈물 배출 개선", + "frequency": "수의사가 주기적으로 시행", + "when_needed": "비루관 폐쇄 의심 시, 반복적 눈물 과다 시" + }, + "topical_treatments": { + "eye_cleaning": "안과용 세정제로 외안부 세정 병행", + "note": "전신 항생제 + 국소 관리 병행 시 효과 극대화" + } + }, + "tear_staining_info": { + "description": "눈물자국(Tear Staining) 상세 정보", + "causes_multifactorial": { + "bacterial": { + "role": "내안각 만성 세균 감염 → 분비물 증가", + "tylosin_helps": true + }, + "structural": { + "conditions": [ + "비루관 협착·폐쇄", + "삼모증", + "안검 내번" + ], + "tylosin_helps": false, + "treatment": "수술/시술 필요" + }, + "allergic": { + "conditions": [ + "음식 알레르기", + "환경 알레르기" + ], + "tylosin_helps": false, + "treatment": "원인 제거 필요" + }, + "dietary": { + "issue": "포르피린 전구체 함유 식품 과다", + "tylosin_helps": false + }, + "breed_predisposition": { + "issue": "단두형 안구 돌출, 얕은 안와", + "tylosin_helps": false, + "note": "해부학적 한계" + } + }, + "high_risk_breeds": [ + { + "breed": "말티즈", + "reason": "흰 털 + 비루관 저형성 빈번" + }, + { + "breed": "비숑 프리제", + "reason": "흰 털 + 내안각 삼모증" + }, + { + "breed": "토이·미니어처 푸들", + "reason": "흰 털 개체에서 두드러짐" + }, + { + "breed": "시추", + "reason": "안검불완전폐쇄 82%, 삼모증 100%, TBUT 4초" + }, + { + "breed": "퍼그·페키니즈·불독", + "reason": "단두형 안구 돌출" + } + ], + "key_message": "타일로신은 세균성 원인에만 작용. 구조적·알레르기성 원인 먼저 교정해야 효과 극대화" + }, + "pharmacokinetics": { + "t_half": "54분 (IV, 개)", + "Vd": "1.7-2.0 L/kg (높음 → 조직 침투 우수)", + "primary_excretion": "담즙 (간→장), bile/serum ratio 1,230-3,780", + "renal_excretion": "극소량", + "accumulation": "없음 (29일, 2년 투여 확인)", + "bioavailability_im": "92.6%", + "clinical_implication": "반감기 매우 짧아 1일 2회 투여 필수" + }, + "safety": { + "NOAEL_dog_2yr": "100 mg/kg/day", + "LD50_dog_oral": ">800 mg/kg", + "clinical_dose": "40 mg/kg/day (20mg/kg bid)", + "safety_margin": "2.5배 (NOAEL/임상용량)", + "liver_burden": "주 대사·배설 경로이나 100mg/kg/day까지 중대한 간 손상 없음", + "kidney_burden": "신장 배설 극소량 → 부담 매우 낮음", + "gi_side_effect": "일과성 위염 3.3% (30마리 중 1마리)", + "long_term_risk": "100일 이상 투여 시 마크롤라이드 내성균 선택 위험" + }, "warnings": [ - "⚠️ 세균성 원인에만 효과 (구조적·알레르기성 X)", - "⚠️ 비루관 협착 시 수술/시술 필요", - "⚠️ 4주 이상 투여 시 내성균 주의" + "⚠️ 세균성 원인에만 효과 (구조적·알레르기성 원인은 별도 처치 필요)", + "⚠️ 비루관 협착 시 수술/시술 필요 — 항생제로 해결 불가", + "⚠️ 이미 착색된 털은 탈색 불가 — 트리밍으로 제거", + "⚠️ 4주 이상 장기 투여 시 내성균 주의", + "⚠️ 식사와 함께 투여 (공복 시 위장관 자극 가능)" + ], + "contraindications": [ + "❌ 마크롤라이드계 항생제 과민반응·쇼크 병력", + "❌ 린코사마이드계 항생제(린코마이신·클린다마이신) 동시 투여", + "❌ 다른 마크롤라이드 동시 투여", + "❌ 고양이 (개 전용 제품)", + "⚠️ 임신·수유 중 암캐 — 수의사 상담 후 결정" ], - "clinical_notes": [ - "눈물 자국: 세균 부하 감소 → 염증 감소 → 완화", - "포르피린 착색: 햇빛 노출 시 더 진해짐", + "눈물 자국: 세균 부하 감소 → 염증 감소 → 분비물 감소 → 완화", + "포르피린 착색: 햇빛 노출 시 더 진해짐 (실내견보다 야외 활동 많은 개에서 더 진함)", "구조적 원인 먼저 교정해야 효과 극대화", - "흰 털 품종(말티즈, 비숑)에서 눈물 자국 두드러짐" + "흰 털 품종(말티즈, 비숑)에서 눈물 자국 두드러짐", + "한국 독자 허가 — 글로벌에 개용 60mg 정제 없음" ], - - "storage": "실온 보관" -} + "patient_education_qa": [ + { + "q": "왜 눈 밑이 갈색으로 얼룩져 있나요?", + "a": "눈물에 포르피린이라는 물질이 포함되어 있어요. 눈물이 흘러넘치면 털에 쌓이고, 빛에 의해 산화되면서 갈색으로 변합니다." + }, + { + "q": "티어가드를 먹이면 눈물 자국이 없어지나요?", + "a": "이미 생긴 자국은 사라지지 않습니다. 세균성 원인을 억제해서 새로 자라는 털에 자국이 덜 생기게 합니다. 기존 착색 털은 트리밍으로 제거하세요." + }, + { + "q": "효과는 언제 나타나나요?", + "a": "1~2주: 분비물 감소, 2~4주: 눈물량 감소, 4~8주: 새 털에서 자국 감소. 눈으로 확인하려면 최소 4~8주 소요됩니다." + }, + { + "q": "4주 먹였는데 효과가 없어요", + "a": "두 가지를 확인하세요: 1) 구조적 원인(비루관 협착, 삼모증) → 수의안과 진찰 필요, 2) 타일로신 내성균 → 세균 배양·감수성 검사" + }, + { + "q": "재발을 막으려면 계속 먹여야 하나요?", + "a": "근본 원인 미교정 시 재발합니다. 장기 투여(100일+)는 내성 위험이 있어 권장하지 않습니다. 일상 관리(외안각 세정, 물 관리, 트리밍)와 근본 원인 교정이 장기 해결책입니다." + }, + { + "q": "간이나 신장에 부담이 큰 약인가요?", + "a": "담즙으로 배설되며 신장 부담은 매우 낮습니다. 2년 장기 시험에서 임상 용량의 2.5배까지 중대한 손상 없었습니다. 4주 투여 범위에서 안전합니다." + } + ], + "references": { + "korean_approval": "APDB 허가사항 (APC: 0231089400001, 허가번호: 159, 2013-03-20)", + "clinical_efficacy": [ + "Scott et al. 1994 (PMID: 7994702) — 농피증 90.5% 성공률, n=21", + "Harvey 1996 (PMID: 8873399) — 표재성 농피증 80%, n=30", + "Scott BA et al. 2010 (PMID: 20960412) — In vitro 감수성 82.61%, n=103" + ], + "pk_safety": [ + "Weisel et al. 1977 (PMID: 842925) — PK: t½ 54분, Vd 1.7L/kg", + "Kim et al. 2011 (PMID: 21068517) — IM 생체이용률 92.6%", + "JECFA/WHO 1991 — 개 2년 독성시험, NOAEL 100mg/kg/day" + ], + "pathogen_data": [ + "Murphy et al. 1978 (PMID: 624664) — 결막염 원인균 (S. aureus 68%)", + "Casemiro et al. 2025 (PMID: 38768284) — 각막염 병원체", + "Cooper et al. 1993 (PMID: 8393208) — Mycoplasma 탁월한 활성" + ], + "resistance_data": [ + "Kang et al. 2014 (PMID: 24690601) — 한국 MRSP 36%", + "Cazer et al. 2020 (PMID: 32109782) — 100일+ 투여 시 내성 증가" + ], + "tear_staining": [ + "Sebbag & Sanchez 2023 (PMID: 36585820) — 단두형 안구 증후군 총설" + ] + }, + "storage": "실온 보관, 직사광선 피함", + "last_updated": "2026-03-19", + "version": "2.0", + "source_documents": [ + "tiergard_tylosin_conjunctivitis_tearstain_v3.md", + "tiergard_tylosin_pyoderma_v2.md" + ], + "indication_detail": { + "primary": "포도상구균·연쇄상구균에 의한 결막염, 농피증 치료", + "secondary": "세균성 눈물자국(tear staining) 완화 보조", + "note": "눈물자국 직접 치료 RCT 없음. 세균성 원인 있는 경우 임상적으로 사용됨." + } +} \ No newline at end of file diff --git a/docs/AI_MAPPING_ARCHITECTURE.md b/docs/AI_MAPPING_ARCHITECTURE.md new file mode 100644 index 0000000..1ef2754 --- /dev/null +++ b/docs/AI_MAPPING_ARCHITECTURE.md @@ -0,0 +1,347 @@ +# 동물약 투약지도서 API - AI 매핑 아키텍처 + +> 작성일: 2026-03-19 +> 작성자: 용림 🐉 + +--- + +## 1. 문제 정의 + +### 현재 상황 + +``` +약국 POS (PIT3000) + └─ DrugCode: LB000003158 + └─ GoodsName: "안텔민뽀삐(5kg이하)" + └─ BARCODE: 9990000001134 (자체 바코드) ❌ APC 아님 + └─ CD_ITEM_UNIT_MEMBER + └─ 0230237010107 (APC) ✅ 있으면 좋음 + └─ 9990000001134 (자체) ← 이것만 있는 경우 多 +``` + +### 핵심 문제 + +| 상황 | 비율 | 처리 방법 | +|------|------|----------| +| APC 매핑 완료 | ~18% (17건) | APC로 바로 조회 ✅ | +| APC 미매핑 | ~82% (32건+) | **제품명 기반 AI 매핑 필요** ⚠️ | + +### 왜 어려운가? + +1. **약국마다 바코드 체계 다름** + - A약국: "안텔민사향" → 바코드 "A001" + - B약국: "안텔민사향" → 바코드 "B999" + - C약국: "안텔민사향" → 바코드 없음 (수기 입력) + +2. **제품명 표기 불일치** + - POS: "안텔민뽀삐(5kg이하)" + - APDB: "뉴펫 안텔민 정사 정 100mg/25mg/10정" + - 쇼핑몰: "안텔민 뽀삐 5kg이하" + +3. **사이즈/용량 구분** + - 하트세이버 mini/S/M/L → 각각 다른 APC + - 넥스가드 XS/S/M/L → 각각 다른 APC + +--- + +## 2. 제안 아키텍처 + +### 2.1 전체 흐름 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ API 요청 │ +│ { │ +│ "items": [ │ +│ { "apc": "0230237010107", "name": "안텔민뽀삐" }, │ ← APC 있음 +│ { "apc": null, "name": "하트세이버S(5.6~11kg)" } │ ← APC 없음 +│ ], │ +│ "patient_name": "김남곤", │ +│ "pet_name": "뽀삐" │ +│ } │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ 매핑 분기 처리 │ +├─────────────────────────────────────────────────────────────┤ +│ │ +│ for each item: │ +│ if item.apc exists: │ +│ ──────────────────▶ [직접 조회] │ +│ else: │ +│ ──────────────────▶ [AI 매핑 레이어] │ +│ │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ PDF 렌더링 │ +│ │ +│ 매핑된 APC들로 APDB 조회 → 템플릿 렌더링 → PDF 반환 │ +└─────────────────────────────────────────────────────────────┘ +``` + +### 2.2 AI 매핑 레이어 상세 + +``` +┌─────────────────────────────────────────────────────────────┐ +│ AI 매핑 레이어 │ +├─────────────────────────────────────────────────────────────┤ +│ │ +│ 입력: "하트세이버S(5.6~11kg)" │ +│ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ Step 1: 정규화 (Normalize) │ │ +│ │ - 공백/특수문자 정리 │ │ +│ │ - 체중 정보 추출: 5.6~11kg → S사이즈 │ │ +│ │ - 브랜드 추출: "하트세이버" │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ Step 2: 후보 검색 (Candidate Search) │ │ +│ │ - PostgreSQL 퍼지 매칭 │ │ +│ │ - 벡터 유사도 검색 (선택적) │ │ +│ │ │ │ +│ │ 결과: [ │ │ +│ │ { apc: "0230474210202", name: "하트세이버S", score: 0.95 }, │ +│ │ { apc: "0230474220200", name: "하트세이버M", score: 0.72 }, │ +│ │ { apc: "0230470000008", name: "하트세이버mini", score: 0.68 }│ +│ │ ] │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ Step 3: AI 최종 선택 (LLM Decision) │ │ +│ │ │ │ +│ │ 프롬프트: │ │ +│ │ "POS 제품명: 하트세이버S(5.6~11kg) │ │ +│ │ 후보 APC: │ │ +│ │ 1. 0230474210202 - 하트세이버S (5.6~11kg) │ │ +│ │ 2. 0230474220200 - 하트세이버M (12~22kg) │ │ +│ │ 3. 0230470000008 - 하트세이버mini (5.6kg이하) │ │ +│ │ │ │ +│ │ 가장 적합한 APC는?" │ │ +│ │ │ │ +│ │ AI 응답: "0230474210202" (체중 범위 일치) │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ Step 4: 캐싱 (선택적) │ │ +│ │ - 동일 제품명 재요청 시 캐시 사용 │ │ +│ │ - Redis 또는 SQLite │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 3. 구현 옵션 비교 + +### 옵션 A: 규칙 기반 매핑 (No AI) + +```python +def match_by_rules(product_name): + # 정규식 + 키워드 매칭 + if "안텔민" in product_name: + if "뽀삐" in product_name or "5kg이하" in product_name: + return "0230237010107" + elif "킹" in product_name or "5kg이상" in product_name: + return "0230237810109" + # ... 수십 개 규칙 +``` + +| 장점 | 단점 | +|------|------| +| 빠름, 비용 0 | 유지보수 지옥 | +| 예측 가능 | 새 제품 대응 불가 | +| | 표기 변형에 취약 | + +**적합**: 제품 수 적고, 변동 없을 때 + +--- + +### 옵션 B: 퍼지 매칭 + 점수 기반 + +```python +from rapidfuzz import fuzz + +def match_by_fuzzy(product_name, candidates): + scores = [] + for c in candidates: + score = fuzz.token_sort_ratio(product_name, c['name']) + scores.append((c['apc'], score)) + + best = max(scores, key=lambda x: x[1]) + if best[1] > 80: # 임계값 + return best[0] + return None # 매칭 실패 +``` + +| 장점 | 단점 | +|------|------| +| AI 비용 없음 | 체중/사이즈 구분 어려움 | +| 빠름 | 애매한 경우 오매핑 | + +**적합**: 1:1 매핑이 명확한 경우 + +--- + +### 옵션 C: AI 하이브리드 (권장) ⭐ + +```python +def match_hybrid(product_name): + # 1. 캐시 확인 + cached = cache.get(product_name) + if cached: + return cached + + # 2. 퍼지 매칭으로 후보 추림 + candidates = fuzzy_search(product_name, limit=5) + + # 3. 고신뢰 매칭이면 바로 반환 + if candidates[0]['score'] > 95: + return candidates[0]['apc'] + + # 4. 애매하면 AI 판단 + if candidates[0]['score'] > 70: + apc = llm_decide(product_name, candidates) + cache.set(product_name, apc) + return apc + + # 5. 전혀 못 찾으면 실패 + return None +``` + +| 장점 | 단점 | +|------|------| +| 정확도 높음 | AI 비용 (캐싱으로 최소화) | +| 새 제품 대응 가능 | 초기 구축 복잡 | +| 체중/사이즈 정확 구분 | | + +**적합**: 현재 상황 (다양한 표기, 사이즈 구분 필요) + +--- + +## 4. 비용 분석 + +### AI 호출 비용 (GPT-4o-mini 기준) + +| 시나리오 | 월 요청 | AI 호출률 | AI 호출 수 | 비용 | +|----------|---------|----------|-----------|------| +| 소규모 | 100건 | 30% | 30건 | ~$0.01 | +| 중규모 | 1,000건 | 20% | 200건 | ~$0.10 | +| 대규모 | 10,000건 | 10% | 1,000건 | ~$0.50 | + +**캐싱 효과**: 동일 제품명 재요청 시 AI 호출 안 함 → 호출률 급감 + +--- + +## 5. 내 생각 (용림) + +### 현실적인 접근 + +1. **Phase 1: 규칙 기반 시작** + - 현재 17건의 APC 매핑된 제품은 직접 조회 + - 자주 쓰는 10~20개 제품은 수동 규칙 추가 + - 나머지는 "매핑 실패" 로깅 + +2. **Phase 2: 퍼지 매칭 도입** + - PostgreSQL `pg_trgm` 확장으로 유사도 검색 + - 95% 이상 매칭은 자동 처리 + - 70~95%는 로깅 + 수동 검토 + +3. **Phase 3: AI 레이어 추가** + - 70~95% 구간에 LLM 판단 도입 + - 판단 결과 캐싱 + - 오매핑 피드백 루프 + +### 왜 AI가 필요한가? + +``` +POS: "하트세이버츄어블S(5.6~11kg)" +APDB: "뉴펫 하트세이버 츄어블 소형견용 5.6-11kg" + +→ 퍼지 매칭만으로는 "소형견용 = S" 판단 어려움 +→ 체중 범위 파싱 + 의미 이해 필요 +→ LLM이 "5.6~11kg"와 "5.6-11kg" 같다고 판단 가능 +``` + +### 우선순위 제안 + +| 순위 | 항목 | 이유 | +|------|------|------| +| 1 | APC 직접 매핑 확대 | 가장 정확, 비용 0 | +| 2 | 캐시 레이어 | AI 비용 절감 | +| 3 | 퍼지 매칭 | AI 호출 최소화 | +| 4 | AI 최종 판단 | 애매한 케이스만 | + +--- + +## 6. API 인터페이스 (안) + +### 요청 + +```json +POST /api/guide/pdf + +{ + "items": [ + { + "apc": "0230237010107", + "name": "안텔민뽀삐", + "drugcode": "LB000003158" + }, + { + "apc": null, + "name": "하트세이버S(5.6~11kg)", + "drugcode": "LB000003153" + } + ], + "patient_name": "김남곤", + "pet_name": "뽀삐", + "pet_species": "푸들", + "pet_age": "3세" +} +``` + +### 응답 + +```json +{ + "success": true, + "pdf_url": "/output/guide_20260319_abc123.pdf", + "mapping_results": [ + { + "name": "안텔민뽀삐", + "apc": "0230237010107", + "method": "direct", + "confidence": 1.0 + }, + { + "name": "하트세이버S(5.6~11kg)", + "apc": "0230474210202", + "method": "ai_matched", + "confidence": 0.92, + "candidates_considered": 3 + } + ] +} +``` + +--- + +## 7. 다음 단계 + +- [ ] APDB 퍼지 검색 인덱스 구축 (`pg_trgm`) +- [ ] AI 매핑 프롬프트 설계 +- [ ] 캐시 레이어 (Redis/SQLite) +- [ ] 매핑 실패 로깅 & 대시보드 +- [ ] 피드백 루프 (오매핑 수정) + +--- + +*이 문서는 논의용입니다. 피드백 주세요!* 🐉 diff --git a/docs/API_SPEC.md b/docs/API_SPEC.md new file mode 100644 index 0000000..5ebe63e --- /dev/null +++ b/docs/API_SPEC.md @@ -0,0 +1,226 @@ +# 애니팜 투약지도서 API 명세서 + +> **Base URL:** `https://ap.0bin.in` +> **Local:** `http://localhost:7002` +> **Version:** 1.0.0 +> **Last Updated:** 2026-03-19 + +--- + +## 📋 엔드포인트 목록 + +| Method | Endpoint | 설명 | +|--------|----------|------| +| GET | `/health` | 헬스체크 | +| GET | `/api/products` | 약품 목록 조회 | +| POST | `/api/guide/pdf` | PDF 생성 | +| POST | `/api/guide/preview` | 미리보기 (메타데이터) | + +--- + +## 1. 헬스체크 + +서버 상태 확인 + +### Request +``` +GET /health +``` + +### Response +```json +{ + "status": "ok", + "service": "anipharm-api", + "timestamp": "2026-03-19T20:01:13.292109" +} +``` + +--- + +## 2. 약품 목록 조회 + +등록된 모든 약품 목록 반환 + +### Request +``` +GET /api/products +``` + +### Response +```json +{ + "success": true, + "count": 21, + "products": [ + { + "product_id": "MASTER-001", + "name": "넥스가드 스펙트라", + "category": "antiparasitic", + "category_display": "올인원 구충제" + }, + { + "product_id": "MASTER-002", + "name": "아시카프 츄어블정", + "category": "nsaid", + "category_display": "진통소염제 (NSAIDs)" + } + // ... 21개 + ] +} +``` + +--- + +## 3. PDF 생성 + +투약지도서 PDF 파일 생성 및 다운로드 + +### Request +``` +POST /api/guide/pdf +Content-Type: application/json +``` + +### Request Body +```json +{ + "product_ids": ["MASTER-001", "MASTER-002", "MASTER-005"], + "patient_name": "김남곤", + "pet_name": "뽀삐", + "pet_species": "푸들", + "pet_age": "3세", + "pharmacy_name": "청춘약국 동물약 전문상담", + "pharmacy_tel": "033-481-0384" +} +``` + +| 필드 | 타입 | 필수 | 설명 | +|------|------|------|------| +| product_ids | string[] | ✅ | 약품 ID 배열 | +| patient_name | string | ❌ | 보호자 이름 (기본: "보호자") | +| pet_name | string | ❌ | 반려동물 이름 (기본: "반려동물") | +| pet_species | string | ❌ | 품종 | +| pet_age | string | ❌ | 나이 | +| pharmacy_name | string | ❌ | 약국명 (기본: "청춘약국 동물약 전문상담") | +| pharmacy_tel | string | ❌ | 전화번호 (기본: "033-481-0384") | + +### Response +- **Success:** `application/pdf` (PDF 파일 다운로드) +- **Error:** +```json +{ + "success": false, + "error": "에러 메시지" +} +``` + +### cURL 예시 +```bash +curl -X POST https://ap.0bin.in/api/guide/pdf \ + -H "Content-Type: application/json" \ + -d '{ + "product_ids": ["MASTER-001", "MASTER-002"], + "patient_name": "김남곤", + "pet_name": "뽀삐", + "pet_species": "푸들", + "pet_age": "3세" + }' \ + --output 투약지도서.pdf +``` + +--- + +## 4. 미리보기 (메타데이터) + +PDF 생성 전 약품 정보 및 예상 페이지 수 확인 + +### Request +``` +POST /api/guide/preview +Content-Type: application/json +``` + +### Request Body +```json +{ + "product_ids": ["MASTER-001", "MASTER-002", "MASTER-005"] +} +``` + +### Response +```json +{ + "success": true, + "drug_count": 3, + "page_count": 1, + "drugs": [ + { + "id": "MASTER-001", + "name": "넥스가드 스펙트라", + "category": "antiparasitic", + "has_image": true + }, + { + "id": "MASTER-002", + "name": "아시카프 츄어블정", + "category": "nsaid", + "has_image": true + }, + { + "id": "MASTER-005", + "name": "하트세이버 츄어블", + "category": "antiparasitic", + "has_image": true + } + ] +} +``` + +--- + +## 📦 등록된 약품 목록 (21개) + +| ID | 이름 | 카테고리 | +|----|------|----------| +| MASTER-001 | 넥스가드 스펙트라 | antiparasitic | +| MASTER-002 | 아시카프 츄어블정 | nsaid | +| MASTER-003 | 아시엔로 50 | antibiotic | +| MASTER-004 | 세레니아 정 | antiemetic | +| MASTER-005 | 하트세이버 츄어블 | antiparasitic | +| MASTER-006 | 프로닐스팟 | antiparasitic | +| MASTER-007 | 오리더밀 | otic | +| MASTER-008 | 터비덤 스프레이 | antifungal | +| MASTER-009 | 클로르헥시딘 샴푸 | topical | +| MASTER-010 | 셀라이트 | antiparasitic | +| MASTER-011 | 멜록시캐시 CH | nsaid | +| MASTER-012 | 복합 개시딘 겔 | topical | +| MASTER-013 | 임팩트액 | antiparasitic | +| MASTER-014 | 안텔민 뽀삐/킹 | antiparasitic | +| MASTER-015 | 티어가드 정 | antibiotic | +| MASTER-016 | 액티벳정 | antibiotic | +| MASTER-017 | 아포퀠 | immunomodulator | +| MASTER-018 | 브라벡토 | antiparasitic | +| MASTER-019 | 심파리카 트리오 | antiparasitic | +| MASTER-020 | 가바펜틴 | analgesic | +| MASTER-021 | 메트로니다졸 | antibiotic | + +--- + +## 🔧 서버 정보 + +| 항목 | 값 | +|------|-----| +| 프레임워크 | Flask | +| 포트 | 7002 | +| PM2 이름 | anipharm-api | +| PDF 엔진 | WeasyPrint | +| 페이지당 약품 | 4개 | + +--- + +## 📝 변경 이력 + +| 날짜 | 버전 | 내용 | +|------|------|------| +| 2026-03-19 | 1.0.0 | 최초 배포 | diff --git a/scripts/update_apc_mapping.py b/scripts/update_apc_mapping.py new file mode 100644 index 0000000..7574819 --- /dev/null +++ b/scripts/update_apc_mapping.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +"""마스터 JSON에 실제 쇼핑몰 APC 매핑""" +import json +import os + +# 마스터 JSON → 쇼핑몰 APC 매핑 +APC_MAPPING = { + "nexgard_spectra.json": "0232555060207", # 넥스포인트(20~40kg) - 넥스가드 대용 + "heartsaver.json": "0230467230300", # 하트세이버L(23~45kg) + "impact.json": "0232873820205", # 임팩트 독(4~10kg) + "antelmin.json": "0230237810109", # 안텔민 킹(5kg이상) + "selight.json": "0232545420203", # 셀라이트 독(4~10kg) + "meloxicash.json": "0232523510309", # 멜록시캐시CH + "asikaff_carprofen.json": "0232635710103", # 아시카프정 + "enrofloxacin.json": "0232532310106", # 아시엔로정 + "tiergard.json": "0231089420409", # 티어가드(100T) + "chlorhexidine_shampoo.json": "0231334930108", # 클로르헥시딘샴푸(200ml) + "actibet.json": "9240043910403", # 액티벳(100T) + "serenia_maropitant.json": "0231884620107", # 세레니아정 24mg + "terbiderm.json": "0232064110102", # 터비더미 솔루션 + "simparica.json": "0232571730106", # 심파리카 트리오 L(20~40kg) + "gaesidin.json": "0231093520106", # 복합개시딘겔(10g) + "oridermyl.json": "0231065620103", # 오이드로믹스클린(10ml) - 귀약 대용 + "fronilspot.json": None, # 쇼핑몰 미등록 + "apoquel.json": None, # 쇼핑몰 미등록 + "bravecto.json": None, # 쇼핑몰 미등록 + "gabapentin.json": None, # 쇼핑몰 미등록 + "metronidazole.json": None, # 쇼핑몰 미등록 +} + +MASTER_DIR = os.path.join(os.path.dirname(__file__), "..", "data", "master") + +def update_json_files(): + updated = [] + skipped = [] + + for filename, apc in APC_MAPPING.items(): + filepath = os.path.join(MASTER_DIR, filename) + if not os.path.exists(filepath): + skipped.append(f"{filename} (파일 없음)") + continue + + with open(filepath, 'r', encoding='utf-8') as f: + data = json.load(f) + + old_apc = data.get('apc_code', '') + + if apc: + data['apc_code'] = apc + with open(filepath, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=2) + updated.append(f"{filename}: {old_apc} → {apc}") + else: + skipped.append(f"{filename} (매핑 없음)") + + print("=" * 60) + print("APC 매핑 업데이트 완료") + print("=" * 60) + print(f"\n✅ 업데이트됨 ({len(updated)}개):") + for item in updated: + print(f" {item}") + print(f"\n⏭️ 건너뜀 ({len(skipped)}개):") + for item in skipped: + print(f" {item}") + +if __name__ == "__main__": + update_json_files() diff --git a/static/lectures/lecture_01.html b/static/lectures/lecture_01.html new file mode 100644 index 0000000..7a13099 --- /dev/null +++ b/static/lectures/lecture_01.html @@ -0,0 +1,914 @@ + + + + + + 시골약사의 동물약 이야기 #1 복합 개시딘 겔 | 애니팜 + + + + + + + + + + + + + + + + + +
+

+ 애니팜 로고 +

+

동물약의 전문가는 약사입니다

+
+ +

시골약사의 동물약 이야기

+

#1 복합 개시딘 겔

+

🐕 세균성 피부염·농피증 치료제 | 퓨시드산 + 베타메타손 | 비처방대상 동물용의약품

+ +
+

"사람 후시딘 개한테 발라도 돼요?"

+
+

약국에서 한 번쯤 들어보셨죠? 저도 처음엔 "뭐... 되지 않을까?" 했는데, 알고 보니 꽤 복잡한 이야기가 숨어 있더라고요. 오늘은 이 질문에 제대로 답할 수 있는 약사가 되어봅시다! 🎯

+
+

💊 약사와 동물약 - 우리가 할 수 있는 것

+

법적으로, 이미 가능합니다

+

혹시 "동물약은 수의사만 줄 수 있는 거 아니야?"라고 생각하셨다면, 그건 오해예요.

+ + + + + + + + + + + + + + + + + +
구분약국 판매
처방대상 동물용의약품 (항생제 일부, 호르몬제 등)✅ 가능 (수의사 처방 필요)
비처방대상 동물용의약품 (구충제, 외용제, 소화제 등)✅ 가능 (처방 없이)
+

👉 동물약국 개설허가를 받은 약국은 동물용의약품을 취급할 수 있습니다. 복합 개시딘 겔처럼 비처방대상 동물용의약품은 수의사 처방 없이 판매 가능해요.

+

수의사와 약사, 다른 전문성

+

수의사를 깎아내리려는 게 아닙니다. 교육 구조 자체가 다르고, 그래서 강점이 다릅니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
영역수의대 (6년)약대 (6년)
교육 목표진단 → 처방 → 수술까지 종합 임상약 중심 전문가
약물학종별 차이 + 임상 적용 중심Receptor, signaling pathway 수준 심화
약동학기본 PK + 종간 차이Compartment model, Clearance, TDM, Modeling
제제학·제형사용자 입장 (tablet, injection 이해)설계자 입장 (서방형, 나노, 생체이용률)
약물 상호작용임상 빈용 조합 중심CYP, Transporter, Mechanism 분석
+

종간 차이 — 특히 대동물(소, 말)과 소동물(개, 고양이)의 용량 체계, 종별 독성 프로파일, 그리고 진단에서 수술까지 이어지는 임상 판단은 수의사의 전문 영역이에요. 6년간 그걸 집중적으로 훈련받은 분들이니까요.

+

물론 우리도 고양이 acetaminophen 독성 같은 건 알고 있죠. 하지만 "말에게는 이 용량, 소에게는 저 용량" 같은 대동물 임상 디테일까지는 솔직히 깊지 않아요.

+

반면, "이 약이 왜 이런 제형인지", "왜 이 농도인지", "왜 이 기간만 써야 하는지" — 이건 우리가 평소 인체약으로 매일 하고 있는 설명이잖아요? 동물약도 마찬가지예요. 약의 원리를 깊이 있게 전달하는 건 약사가 잘할 수 있는 영역입니다.

+

반려인이 약국에 오는 이유

+

반려인들은 수의사 가기 전, 또는 처방받고 나서도 약국에 와요.

+
    +
  • 💬 "이거 개한테 발라도 돼요?"
  • +
  • 💬 "수의사 선생님이 준 약인데, 어떻게 먹이는 거예요?"
  • +
  • 💬 "항생제 언제까지 먹여야 해요?"
  • +
+

이때 정확한 정보 + 전문가다운 설명을 해주면?
+→ 신뢰가 쌓이고, "약 관련은 약국에 물어봐야지"가 됩니다.

+

우리는 법적 테두리 안에서 충분히 전문가로서 역할할 수 있어요. 항생제 남용 문제, 제형 선택 이유, 투약 기간의 근거 — 이런 건 약사가 더 잘 전달할 수 있는 영역입니다.

+
+

💡 이 연재의 목표: 이미 알고 있는 동물약, 더 깊이 알고 더 잘 설명하자.

+
+
+

🔬 개시딘 vs 사람 후시딘 - 뭐가 다른데?

+

+ 복합 개시딘 겔 +
+ 복합 개시딘 겔 (퓨시드산 0.5% + 베타메타손 0.1%) +

+ +

"어차피 퓨시드산 아니야?" 맞아요. 근데 결정적 차이가 3가지 있어요.

+

1️⃣ 제형: 겔 vs 크림

+ + + + + + + + + + + + + + + + + + + + + + + + + +
구분개시딘사람 후시딘
제형크림
털 침투✅ 우수❌ 불량
잔여감깔끔번들거림
+

개는 털이 있어요. (너무 당연한가요? ㅋㅋ) 크림은 털 위에서 뭉치는데, 겔은 털 사이로 쭉쭉 스며들어요. 이게 생각보다 큰 차이예요.

+

2️⃣ pH 최적화

+
    +
  • 개 피부 pH: 4.4~8.2 (넓은 범위)
  • +
  • 사람 피부 pH: 4.5~5.5 (좁은 범위)
  • +
+

개시딘은 개 피부 pH 범위에 맞게 제형화되어 있어요. 사람용은 사람 피부에 최적화되어 있고요.

+

3️⃣ 농도 & 스테로이드 차이

+

+ 인체용 후시딘 +     + 후시딘H +
+ 후시딘 연고 (퓨시드산 2%)  |  후시딘H 크림 (퓨시드산 2% + 하이드로코르티손 1%) +

+ +

후시딘 제품별 성분 비교

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
제품퓨시드산스테로이드스테로이드 강도
개시딘 겔 (동물용)0.5%베타메타손발레레이트 0.1%Class IV (중등도)
후시딘 연고/크림 (인체용)2%❌ 없음-
후시딘H 크림 (인체용)2%하이드로코르티손아세테이트 1%Class VI (약함)
+

스테로이드 강도 분류 기준 (Stoughton-Cornell Classification)

+

국소 스테로이드 강도는 혈관수축 분석(Vasoconstriction Assay)을 기반으로 Class I(초강력)~VII(가장 약함)로 분류됩니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class강도대표 약물
I초강력 (Superpotent)Clobetasol propionate 0.05%
II강력 (Potent)Betamethasone dipropionate 0.05%
III상위 중강도Fluticasone propionate 0.005%
IV중등도 (Mid-strength)Betamethasone valerate 0.1% ← 개시딘
V하위 중등도Fluticasone propionate 0.05% cream
VI약함 (Mild)Hydrocortisone 1% ← 후시딘H
VII가장 약함Hydrocortisone 0.5%
+
+

📚 근거: Stoughton RB. Vasoconstrictor assay—specific applications. In: Maibach HI, Surber C, eds. Topical Corticosteroids. Basel: Karger; 1992:42-53. 및 PMID 3881106 - Jacob SE, Steele T. Corticosteroid classes: a quick reference guide including patch test substances and cross-reactivity. J Am Acad Dermatol. 2006.

+
+

베타메타손 "염(Ester)"에 따른 차이

+

같은 베타메타손이라도 어떤 염(ester)으로 결합되어 있느냐에 따라 효력이 다릅니다:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
베타메타손 염스테로이드 등급특징
Betamethasone valerate (개시딘)Class IV중등도, 표피 침투 적당
Betamethasone dipropionateClass I~II초강력, 깊은 침투
Betamethasone sodium phosphate주사용수용성, 전신 투여
+
+

💡 약사 포인트: 개시딘의 베타메타손발레레이트(Class IV)는 후시딘H의 하이드로코르티손(Class VI)보다 약 10~15배 강력합니다. 그래서 개시딘은 최대 7일로 사용 기간이 제한되어 있어요.

+
+

왜 개시딘이 낮은 농도인데 괜찮을까?

+

"어? 퓨시드산이 0.5%밖에 안 돼?" 맞아요. 근데 여기서 약사의 시선이 필요해요.

+

겔 제형은 피부 침투가 좋아서 낮은 농도로도 피부 내 MIC의 67,000배 농도를 달성해요! (PMID 29162115)

+

높은 농도가 항상 좋은 게 아닙니다:
+- 크림 2% → 털에 흡착되어 실제 피부 도달량 ↓
+- 겔 0.5% → 털 통과 + 피부 직접 도달 → 유효 농도 충분

+
+

🧪 약제학 깊이 보기: 왜 겔이어야 하는가?

+

대학 시절 약제학 시간에 배웠던 에멀전, Henderson-Hasselbalch 방정식... 기억나시죠? 개시딘이 왜 인지, 그 과학적 이유를 파헤쳐봅시다.

+

에멀전의 기초: O/W vs W/O

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분O/W (수중유형)W/O (유중수형)Gel (수성 겔)
연속상오일
분산상오일(없음)
촉감산뜻함유성/무거움가장 산뜻
털 침투보통나쁨우수
증발 후약간 잔여기름막깔끔
+

크림(O/W)이나 연고(W/O)는 지용성 기제가 털 위에서 뭉쳐요. 반면 겔은 수성 기반이라 털 사이로 쭉쭉 퍼지고, 증발 후 약물만 피부에 남깁니다.

+

pH와 약물 흡수: Henderson-Hasselbalch로 이해하기

+

퓨시드산은 약산(pKa ≈ 6.0)입니다. 약산의 이온화는 pH에 따라 달라지죠:

+
Henderson-Hasselbalch 방정식:
+pH = pKa + log([A⁻]/[HA])
+
+비이온화율(%) = 100 / (1 + 10^(pH-pKa))
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
피부 환경pH비이온화(HA)이온화(A⁻)지용성
사람 피부5.091%9%높음
개 피부(귀/발)6.050%50%중간
개 피부(체간)7.09%91%낮음
+

핵심 포인트:
+- 사람 피부(pH 5): 비이온화↑ → 지용성 크림이 각질층 확산에 유리
+- 개 피부(pH 7): 이온화↑ → 수성 겔 기제가 이온화된 약물을 피부 표면에 효율적으로 전달 후, 피부 pH에서 약물 방출

+

겔 제형의 과학: 털 있는 피부에서의 강점

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
특성크림/연고
Spreading coefficient낮음높음
모낭 침투털 위에 머묾털 사이 침투
핥았을 때기름 맛 = 더 핥음무미건조
약물 잔류기제와 함께 제거피부 흡착 유지
+

PMID 29162115 연구에서 퓨시드산 겔 적용 시, 표피 상층 240μm에서 2,000 μg/g 농도 달성 - 이는 MIC(0.03 mg/L)의 약 67,000배입니다!

+
+

💡 약사 포인트: 제형 선택은 약물의 물리화학적 특성 + 적용 부위의 생리적 조건을 모두 고려해야 해요. 개시딘이 겔인 건 마케팅이 아니라, 약제학적 근거가 있는 거죠!

+
+
+

🐱 잠깐! 고양이는 왜 안 되나요?

+

개시딘이 "개 전용"인 이유는 제품명에 '개'가 들어가서가 아닙니다. 베타메타손 0.1%가 포함되어 있기 때문이에요.

+

고양이와 스테로이드: 민감한 관계

+

고양이도 스테로이드를 "잘 견딘다"는 오래된 인식이 있지만, 이는 급성 부작용이 적다는 의미일 뿐입니다. 진짜 문제는 대사적 취약성이에요.

+

고양이의 HPA axis(시상하부-뇌하수체-부신 축)는 외인성 글루코코르티코이드에 의해 억제될 수 있으며, 특히 고양이의 당뇨 발생 기전이 개와 근본적으로 다릅니다. 고양이는 사람의 제2형 당뇨와 유사한 췌도 아밀로이드 침착(islet amyloidosis) 기전을 가지고 있어, 스테로이드에 의한 인슐린 저항성이 비가역적 당뇨로 진행할 위험이 높아요 (PMID 11106586).

+

약동학으로 보는 차이

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
항목고양이
Glucuronidation활발미숙 (UGT 효소 결핍)
스테로이드 대사상대적 빠름지연
당뇨 발생 기전Type 1 유사Type 2 유사 (amyloid)
인슐린 저항성가역적 경향비가역적 위험↑
+

고양이는 glucuronidation 경로가 미숙하여 여러 약물의 대사가 느립니다. 베타메타손 같은 강력한 fluorocorticoid(C-16 치환, mineralocorticoid 활성 無)는 외용제라도 피부를 통해 전신 흡수되어 HPA axis 억제를 유발할 수 있습니다.

+

임상적 위험: 숫자로 보면 무섭습니다

+

2021년 J Feline Med Surg 연구(PMID 32716236):
+- Prednisolone ≥1.9mg/kg/day 투여 고양이 143마리 중 14마리(9.7%)에서 당뇨 발생
+- 85.7%가 투약 3개월 이내 발생

+

2022년 브라질 연구(PMID 35202848):
+- MPA 단회 주사만으로도 혈당·인슐린 상승, HOMA-IR 지표 악화
+- 메트포르민이나 당뇨식이로도 예방 실패

+ + + + + + + + + + + + + + + + + + + + +
고양이 스테로이드 부작용
당뇨병 유발 (특히 비만묘, 버미즈 품종)
의인성 쿠싱 증후군
피부 위축, 상처 치유 지연
면역억제 → 감염 취약
+

그럼 고양이는 뭘 써요?

+

고양이 피부 세균 감염 시:
+1. 퓨시드산 단독 제품 (스테로이드 無) - 사람용 후시딘 연고 off-label
+2. 클로르헥시딘 세정제 - 1차 관리
+3. 전신 항생제 - 세팔렉신, 아목시실린-클라불란산 등
+4. 수의사 처방 - 고양이 허가 제품 또는 off-label 사용 판단

+
+

⚠️ 복약상담 포인트: "고양이 키우시는 분들 많으시죠? 개시딘은 스테로이드 성분 때문에 고양이에게 당뇨를 유발할 수 있어요. 퓨시드산만 필요하시면 스테로이드 없는 제품을 찾거나, 수의사 선생님과 상의해 보세요."

+
+
+

📋 약사의 꿀팁: 이렇게 설명하세요!

+

🎯 3-5-7 법칙

+
┌─────────────────────────────────────────┐
+│  3일: 효과 체크 (안 나으면 수의사!)     │
+│  5일: 최소 사용 기간                    │
+│  7일: 최대 사용 기간 (이상 사용 금지)   │
+└─────────────────────────────────────────┘
+
+

반려인에게 이렇게 말해주세요:

+
+

"3일 발랐는데 전혀 안 나아지면 수의사 선생님께 가세요. 효과 있으면 5~7일 꾸준히! 근데 7일 넘기면 안 돼요~"

+
+

🐶 핥기 방지 필수!

+

이거 꼭 강조하세요:

+
+

"바르고 나서 10~15분은 핥지 못하게 해주세요. 엘리자베스 칼라 있으면 씌우시고, 없으면 안고 계시거나 간식으로 관심 돌리세요!"

+
+

🍄 곰팡이(진균) 감별 포인트

+

퓨시드산은 세균성 피부염에 써요. 진균이면 안 들어요!

+ + + + + + + + + + + + + + + + + + + + + +
세균성 (개시딘 OK)진균성 (터비덤 or 수의사)
부분적, 붉은 병변동그란 링 모양
고름/삼출물털 빠짐 + 비듬
급성 발생서서히 퍼짐
+
+

💡 진균이 의심된다면? 약국에서 바로 추천할 수 있는 제품이 있어요!
+터비덤 스프레이 큐어 — 테르비나핀(항진균) + 클로르헥시딘(항균) 복합 스프레이
+- Malassezia 피부염, 윤선(Microsporum), 표재성 세균 감염까지 커버
+- 1일 1~2회 분무, 증상 소실 후 7일 추가 사용
+- 개 전용 비처방대상 동물용의약품

+

확실하지 않거나, 윤선(링웜) 의심 시에는 수의사 진료도 함께 권유하세요. 윤선은 인수공통이라 가족에게도 전파될 수 있거든요!

+
+
+

⚠️ 항생제 스튜어드십 - 이건 진지하게!

+

한국 퓨시드산 내성률: 27% (PMID 32115810)

+

4마리 중 1마리 이상에서 내성균이 나온다는 거예요. 이게 왜 중요하냐면:

+

항생제 스튜어드십이란?

+
+

항생제를 꼭 필요할 때, 적절한 용량으로, 적절한 기간만 쓰자는 원칙

+
+

국소 항생제라고 막 쓰면 안 되는 이유:
+- 피부 상재균에 내성 유발
+- 나중에 전신 감염 시 치료 옵션 감소
+- 사람에게도 내성균 전파 가능 (One Health 개념)

+

그래서 우리가 할 일

+
    +
  1. 7일 넘게 쓰지 말라고 안내 (정말 중요!)
  2. +
  3. 호전 안 되면 수의사 가라고 (배양검사 필요할 수 있음)
  4. +
  5. 예방 목적 사용 금지 (상처 없는데 미리 바르기 ❌)
  6. +
+
+

🌟 마무리: 약사의 자부심

+

우리는 약의 전문가예요. 수의사가 진단하면, 우리는 그 약이 어떻게 작용하고, 어떻게 써야 효과적인지 설명할 수 있어요.

+

동물약도 결국 약리학, 약동학, 제제학의 연장선이에요. 사람약 공부하며 쌓은 내공이 여기서도 빛을 발하는 거죠! ✨

+

다음에 "사람 후시딘 발라도 돼요?" 질문 받으면, 이렇게 답해보세요:

+
+

"쓸 수는 있는데, 개 전용 개시딘이 더 좋아요. 겔이라 털 사이로 잘 스며들고, 개 피부에 맞게 만들어졌거든요. 3일 발라서 효과 없으면 수의사 선생님 가시고, 효과 있으면 5~7일 꾸준히 바르세요. 7일 넘기면 안 돼요!"

+
+

전문가다운 답변, 멋지지 않나요? 😎

+
+

다음 편 예고: 귀 세정제의 과학 - 왜 클로르헥시딘은 귀에 안 될까?

+
+ +

+

📚 참고문헌
+- Fusidic acid resistance in S. pseudintermedius (Korea): PMID 32115810
+- Topical fusidic acid skin concentration: PMID 29162115
+- Feline islet amyloidosis model: PMID 11106586
+- Prednisolone-induced diabetes in cats: PMID 32716236
+- MPA insulin resistance in cats: PMID 35202848
+- 복합 개시딘 겔 제품 설명서

+ + \ No newline at end of file diff --git a/static/nexgard_spectra.jpg b/static/nexgard_spectra.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bdd1b60ee9830abee6d3b5c2255cdc96869c2c97 GIT binary patch literal 39104 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 m06-} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/anipharm_logo_base64.txt b/templates/anipharm_logo_base64.txt new file mode 100644 index 0000000000000000000000000000000000000000..e7579159a809c832830117d48244cfeaff387fd8 GIT binary patch literal 27050 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 literal 0 HcmV?d00001 diff --git a/templates/medication_guide_v2.html b/templates/medication_guide_v2.html index d16266f..b841008 100644 --- a/templates/medication_guide_v2.html +++ b/templates/medication_guide_v2.html @@ -2,7 +2,7 @@ - 동물약 복약안내문 v2 + 애니팜 투약지도서 @@ -295,13 +375,18 @@
-
{{ patient_name }} 보호자님
-
🐾 {{ pet_name }} ({{ pet_species }}, {{ pet_age }}) | 📅 {{ issue_date }}
+
{{ patient_name }} 반려인님
+
{{ pet_name }} · {{ pet_species }} · {{ pet_age }}
-
🏥 {{ pharmacy_name }}
+
{{ pharmacy_name }}
+
동물약 전문 상담
+
+
+
TEL
+
{{ pharmacy_tel }}
+
{{ issue_date }}
-
{{ pharmacy_tel }}
{% endif %} @@ -312,7 +397,27 @@ {% for drug in drugs[start_idx:end_idx] %}
-
💊
+
+ {% if drug.image_url %} + {{ drug.name }} + + {% elif drug.apc_code is not none and drug.apc_code and (drug.apc_code|string)[:4] != '0519' and (drug.apc_code|string)[:4] != 'None' %} + {{ drug.name }} + + {% else %} + + + + {% endif %} +
{{ drug.name }}
{{ drug.english_name }}
@@ -399,11 +504,49 @@ {% elif drug.category == 'antibiotic' %}
-
📋 {{ drug.indication[:30] }}...
-
{{ drug.dosage.standard }}
+
📋 {{ drug.indication[:40] if drug.indication is string else drug.indication }}...
+
{{ drug.dosage.standard if drug.dosage.standard is defined else drug.dosage }}
+ {% if drug.dosage.duration is defined %}
기간: {{ drug.dosage.duration }}
+ {% endif %}
+ {% if drug.dosage_table %} +
⚖️ 체중별 용량
+
+ {% for row in drug.dosage_table[:6] %} +
+
{{ row.weight }}
+
{{ row.tablets_per_dose if row.tablets_per_dose is defined else (row.tablets if row.tablets is defined else row.dose) }}
+
+ {% endfor %} +
+ {% endif %} + + {% if drug.treatment_timeline %} +
+ 📅 효과 시기
+ {% if drug.treatment_timeline.phases is defined %} + {% for phase in drug.treatment_timeline.phases[:4] %} + • {{ phase.week }}: {{ phase.expected[:30] }}...
+ {% endfor %} + {% else %} + {% for key, val in drug.treatment_timeline.items() %} + {% if key not in ['realistic_expectation', 'important_note', 'description', 'phases'] %} + • {{ key }}: {{ val }}
+ {% endif %} + {% endfor %} + {% endif %} +
+ {% endif %} + + {% if drug.clinical_notes %} +
+ 💡 임상 참고
+ {% for note in drug.clinical_notes[:3] %}• {{ note }}
{% endfor %} +
+ {% endif %} + {% if drug.cat_warning %}
🐱 고양이 주의
@@ -495,7 +638,51 @@
{% if drug.dosage.frequency %}빈도: {{ drug.dosage.frequency }}
{% endif %} {% if drug.dosage.duration %}기간: {{ drug.dosage.duration }}
{% endif %} - {% if drug.dosage.contact_time %}접촉: {{ drug.dosage.contact_time }}{% endif %} + {% if drug.dosage.max_duration %}최대: {{ drug.dosage.max_duration }}
{% endif %} + {% if drug.dosage.application %}방법: {{ drug.dosage.application }}{% endif %} +
+ {% endif %} + + {% if drug.application_method %} +
+ 🖐️ 도포 방법 +
+ {% for key, val in drug.application_method.items() %} + {% if key.startswith('step') and val.action is defined %} + {{ loop.index }}. {{ val.action[:12] }} + {% endif %} + {% endfor %} +
+
+ {% endif %} + + {% if drug.progress_monitoring %} +
+ 📅 경과 관찰
+ {% for key, val in drug.progress_monitoring.items() %} + {% if val.description is defined %} + • {{ key.replace('_', ' ') }}: {{ val.description }}
+ {% endif %} + {% endfor %} +
+ {% endif %} + + {% if drug.pharmacy_tips %} +
+ 💡 약사 꿀팁
+ {% if drug.pharmacy_tips.human_vs_animal %} + • {{ drug.pharmacy_tips.human_vs_animal }}
+ {% endif %} + {% if drug.pharmacy_tips.ph_tip %} + • {{ drug.pharmacy_tips.ph_tip }}
+ {% endif %} +
+ {% endif %} + + {% if drug.clinical_notes %} +
+ 💡 임상 참고
+ {% for note in drug.clinical_notes[:3] %}• {{ note }}
{% endfor %}
{% endif %} {% endif %} @@ -514,13 +701,17 @@ {% endfor %}
- {% if loop.last %} - + - {% endif %}
{% endfor %}