청춘약국 e674c775b5 docs: 모듈 분리 리팩토링 계획서 추가
2026-04-08 v1 QT-POS 동기화 작업을 통해 드러난 근본 문제 (pharmon-web
과 stats-api 간 통계 로직 중복) 를 해결하기 위한 3단계 리팩토링 로드맵.

주요 내용:
- 현재 구조의 7가지 문제점 (P1~P7) 분석
- 4레이어 목표 아키텍처 (db → core → queries → api)
- pharma-stats-core 공통 패키지 분리 전략 (옵션 A/B/C 비교)
- 1단계: pharmacy-stats-api 내부 정돈 (pharmon-web 손대지 않음)
- 2단계: pharma-stats-core 분리 + pharmon-web 통합
- 3단계: v2 (PMPLUS20) 재동기화 + 선택적 독립 repo
- 리스크 & 완화 방안 (한글 경로 editable install 이슈 등)
- 이번 마이그레이션에서 학습한 설계 근거 (GPPOS 7항 공식,
  CD_SUNAB 1:N 함정, 보훈 세분화 문자열 키 등)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:58:43 +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%