청춘약국 ef23830a77 fix(v1): QT-POS sales_stats_dialog.py 와 1:1 동기화
pharmon-web/sales_stats_dialog.py 의 _query / _build_margin_cache
로직을 그대로 이식하여 QT-POS 와 stats-api 의 통계 수치 불일치
문제를 해결.

주요 변경:
- CD_SUNAB LEFT JOIN → OUTER APPLY TOP 1
  (1:N 곱증으로 행 중복되어 매출 이중계산되던 버그 제거)
- PS_SUB_BOJO JOIN 추가 (보훈 GITA_GUBUN 세분화 지원)
- SELECT 확장: S_FASTMON, S_TEMP3, SE_BOHUN_C, DRUG_T1~T3,
  S_S_PHOL_0~3, SUGA_ZE_PRICE, GITA_GUBUN
- GPPOS2 공식으로 재작성
  sales_amt = PRICE_C + PRICE_P + S_FASTMON + S_TEMP3
            + SE_PRICE_C + SE_PRICE_P + SE_BOHUN_C
- 보훈(PreGubun='4') + GITA_GUBUN ∈ {1,2,3,4} → '4_1'~'4_4'
- 자동차보험 할증금액, 선별급여 청구액 (SE_PRICE_P*0.25) 반영
- 비급여 마진 캐시 (PS_SUB_PHARM × WH_sub/CD_GOODS)
- config.py: DB 서버 192.168.0.201 → 192.168.0.69 (테스트 서버)

2026-04-08 1/3 스크린샷 기준 QT-POS 와 1원 단위까지 수치 일치 확인.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:53:46 +09:00

Pharmacy Stats API

QT-POS 통계 다이얼로그 API 버전

구조

pharmacy-stats-api/
├── app.py                      # Flask 메인
├── config.py                   # DB 연결 설정
├── queries/
│   ├── v1_pharmit3000.py      # PharmIT3000 쿼리
│   └── v2_pmplus20.py         # PMPLUS20 쿼리
└── templates/
    └── stats.html             # 비교 UI

API 엔드포인트

v1 - PharmIT3000

Endpoint 설명
/v1/api/stats 전체 통계
/v1/api/stats/insurance 보험별 통계
/v1/api/stats/time 시간가산별 통계
/v1/api/stats/payment 결제수단별 통계
/v1/api/stats/hospital 병원별 통계

v2 - PMPLUS20

동일한 구조의 /v2/api/stats/... 엔드포인트

비교

Endpoint 설명
/api/compare v1 vs v2 비교

쿼리 파라미터

  • from: 시작일 (YYYYMMDD)
  • to: 종료일 (YYYYMMDD)

예: /v1/api/stats?from=20260401&to=20260401

테이블 매핑

역할 PharmIT3000 (v1) PMPLUS20 (v2)
판매 헤더 PM_PRES.PS_MAIN PM_MAIN.TBSIM040_28
판매 상세 PM_PRES.PS_SUB_PHARM PM_MAIN.TBSIM040_29
수납 정보 PM_PRES.CD_SUNAB PM_MAIN.TBSIR000_01
약품 마스터 PM_DRUG.CD_GOODS PM_MAIN.TBSIM040_01

실행

pip install -r requirements.txt
python app.py

서버: http://0.0.0.0:5060

환경변수

PHARMIT_SERVER=192.168.0.4\PM2014
PHARMIT_USER=sa
PHARMIT_PASS=password

PMPLUS_SERVER=192.168.0.4\PM2014
PMPLUS_USER=sa
PMPLUS_PASS=password
Description
QT-POS Stats API
Readme 131 KiB
Languages
Python 69.3%
HTML 30.7%