- /admin/drug-usage 페이지 + API 3개 구현
- GET /api/drug-usage: 기간별 약품 통계 (조제건수, 입고건수)
- GET /api/drug-usage/<code>/imports: 약품별 입고 상세
- GET /api/drug-usage/<code>/prescriptions: 약품별 조제 상세
UX 개선:
- 약품 클릭 시 입고/조제 상세 펼침 패널
- table-layout:fixed + colgroup으로 컬럼 너비 고정
- white-space:nowrap으로 날짜/숫자 줄바꿈 방지
- 금액/거래처 사이 border로 구분선 추가
- 발행기관 OrderName으로 수정 (InsName 오류 수정)
QT_GUI 데이터와 100% 일치 검증 (살라겐정)
## APC 코드 체계 확장
- 기존: 023%만 검색 (~2023년 제품만)
- 변경: 02% OR 92% + 13자리 검증
- 02%: 2023년 이전 item_seq (9자리) 기반 APC
- 92%: 2024년 이후 item_seq (10자리) 기반 APC
- 999% 등 청구프로그램 임의코드는 제외
## 동물약 챗봇 피부약 추천 개선
- 피부약 2단계 추천 구조 추가
- 1차(치료): 의약품 (개시딘겔, 테르비덤 등)
- 2차(보조케어): 의약외품 (스킨카솔 - 회복기 피부보호)
- 스킨카솔은 의약외품임을 명시하여 치료제로 오인 방지
## 기타
- RAG 테스트 스크립트 추가
- 수인약품 API 문서화
autobegin 상태에서 begin() 재호출 에러 → engine.begin() 컨텍스트 매니저로 변경.
189건 PostgreSQL weight_min_kg/weight_max_kg 업데이트 완료.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
지마스터 캣 등에서 "4kg 초과-8kg 이하" 형태의 체중 구간이
(0, 8)로 잘못 파싱되던 문제 수정.
- 패턴8a: "Xkg 초과-Ykg" 전용 패턴 추가
- 패턴8c: "초과" 컨텍스트 중복 방지
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
제품명에 사이즈 라벨이 없지만 dosage 컬럼으로 구분 가능한 제품
(하트웜 솔루션, 지마스터, 넥스포인트 등) 처리 추가.
- 고유 dosage 수 == 체중구간 수 일 때 오름차순 매칭
- 작은 용량 = 작은 체중 원칙 적용
- 결과: 146건 → 189건으로 커버리지 증가 (+43건)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
dosage_instructions에서 체중 구간을 파싱하여 weight 컬럼 업데이트.
- 제품명 사이즈 라벨(소형견/중형견 등)로 체중구간 매칭
- 단일 체중구간 제품은 전체 APC에 적용
- 통합 제품(SS,S,M,L)은 안전하게 SKIP
- 축산용(>60kg) 자동 제외
- dry-run 기본, --commit으로 실행
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. 프롬프트 개선:
- 상세 요청 감지 ('자세히', '설명해줘' 등)
- 상세 요청 시 10-15문장 응답
- RAG 검색 결과 적극 활용 지시
2. 벡터 검색 수정:
- L2 거리 → 유사도 변환: 1/(1+distance)
- 음수 유사도 문제 해결
- 임계값 0.3 적용 (30% 미만 제외)
3. 컨텍스트 주입 개선:
- 상세 질문 시 n_results=5로 증가
- RAG 활용 지시 추가
- API 3개 추가:
- POST /api/upload-session (세션 생성)
- GET /api/upload-session/{id} (상태 확인/폴링)
- POST /api/upload-session/{id}/image (이미지 업로드)
- 모바일 업로드 페이지 (/upload/{session_id})
- 이미지 등록 모달에 '📱 모바일' 탭 추가
- QR 스캔 → 모바일 촬영 → PC 실시간 반영
- 2초 폴링으로 업로드 완료 감지
- 세션 10분 만료, 메모리 기반 관리
- Edit 툴로 부분 수정하여 인코딩 유지
- 위치 뱃지 클릭 시 위치 수정 모달 표시
- '미지정' 뱃지 스타일 (점선 테두리, 클릭 유도)
- 기존 위치 선택 드롭다운 + 직접 입력 가능
- 위치 삭제 기능
- products 페이지와 동일한 API 재활용 (/api/locations, /api/drugs/.../location)
- 다크 테마에 맞는 모달 스타일
- Edit 툴로 부분 수정하여 인코딩 유지
- admin_return_management.html 업데이트:
- 입고이력 모달 스타일/HTML 추가 (다크테마 적용)
- tr ondblclick → openPurchaseModal()
- 도매상 전화번호 클릭 시 복사 기능
- 테이블 위에 더블클릭 힌트 추가
- 상태변경 버튼에 event.stopPropagation() 추가
- 새 API: GET /api/drugs/<drug_code>/purchase-history
- WH_sub + WH_main + PM_BASE.CD_custom 조인
- 도매상명, 입고일, 수량, 단가, 전화번호 반환
- admin_products.html 업데이트:
- tr ondblclick → openPurchaseModal()
- 입고이력 모달 UI/스타일 추가
- 도매상 전화번호 클릭 시 복사 기능
- 결과 카운트 옆에 더블클릭 힌트 추가
- 기타 onclick에 event.stopPropagation() 추가 (충돌 방지)
- GET /api/geoyoung/order-list: 기간별 주문 목록
- GET /api/geoyoung/order-detail/<order_num>: 주문 상세
- GET /api/geoyoung/order-today: 오늘 주문 요약
수인약품 API와 동일한 엔드포인트 구조
- 도매상 한도 API 추가 (wholesaler_limits 테이블)
- 다중 도매상 모달: 월 한도 + 실제 월 매출 표시
- 주문 후 예상 사용량 계산 및 경고 표시
- 이모지 대신 로고 이미지 사용
- 약가 → 매출액 헤더 변경
- 매출액 계산: SUM(DRUPRICE)