pharmacy-pos-qr-system/docs/member-detail-feature.md
thug0bin a7e96e5efa docs: 회원 상세 기능 구현 계획 문서
- 마일리지 내역 + POS 구매 이력 연동 계획
- 전화번호 기반 통합 조회 전략
- API/UI 설계 초안
2026-02-27 15:00:49 +09:00

5.8 KiB

회원 상세 기능 구현 계획

작성일: 2026-02-27 상태: 계획 중

개요

회원 검색 페이지(/admin/members)에서 "상세" 버튼 클릭 시, 해당 회원의 구매 이력 및 QR 적립 내역을 조회하는 기능.

현재 상태

  • 회원 검색 API (/api/members/search) - 완료
  • 회원 기본정보 조회 (/api/members/<cuscode>) - 완료
  • 회원 구매 이력 조회 - 미구현
  • QR 적립 내역 연동 - 미구현

데이터 소스

1. 마일리지 DB (SQLite)

파일: backend/db/mileage.db
테이블: transactions (적립/사용 내역)

주요 컬럼:
- phone: 전화번호 (010XXXXXXXX)
- points: 적립/사용 포인트
- type: earn (적립) / use (사용)
- amount: 구매금액
- created_at: 거래일시
- receipt_id: 영수증 ID (연동용)

2. POS DB (MSSQL - PM_PRES)

테이블: SALE_MAIN (판매 메인)
테이블: SALE_SUB (판매 상세 - 품목별)

SALE_MAIN:
- SL_NO_order: 거래번호
- SL_NM_custom: 고객명
- SL_CD_custom: 고객코드
- SL_MY_total: 총액
- SL_DT_appl: 거래일자

SALE_SUB:
- SL_NO_order: 거래번호 (FK)
- DrugCode: 상품코드
- QUAN: 수량
- SL_TOTAL_PRICE: 금액

3. 회원 DB (MSSQL - PM_BASE)

테이블: CD_PERSON

주요 컬럼:
- CUSCODE: 고객코드
- PANAME: 이름
- PHONE, TEL_NO, PHONE2: 전화번호 3곳

연동 전략

문제점

  • POS(SALE_MAIN)에는 SL_CD_custom(고객코드) 사용
  • 마일리지 DB에는 phone(전화번호) 사용
  • 전화번호 → 고객코드 또는 고객코드 → 전화번호 매핑 필요

해결 방안

방안 1: 전화번호 기반 통합 (권장)

1. CD_PERSON에서 전화번호로 CUSCODE 조회
2. CUSCODE로 SALE_MAIN 조회
3. 마일리지 DB에서 전화번호로 적립 내역 조회
4. 두 결과 병합하여 표시

방안 2: 마일리지 테이블에 CUSCODE 추가

ALTER TABLE users ADD COLUMN cuscode TEXT;
  • QR 적립 시 POS 고객코드 연동

API 설계

GET /api/members//history

Response:

{
  "success": true,
  "member": {
    "cuscode": "0000012345",
    "name": "김영빈",
    "phone": "01027027390"
  },
  "mileage": {
    "balance": 19005,
    "total_earned": 25000,
    "total_used": 5995,
    "transactions": [
      {
        "date": "2026-02-27 01:29",
        "type": "earn",
        "points": 555,
        "amount": 18500,
        "products": ["투엑스벤포파워", "마데카솔"]
      }
    ]
  },
  "purchases": [
    {
      "date": "20260227",
      "order_no": "20260227001234",
      "total": 18500,
      "items": [
        {"name": "투엑스벤포파워", "qty": 1, "price": 9000},
        {"name": "마데카솔연고", "qty": 1, "price": 9500}
      ]
    }
  ]
}

UI 설계

회원 상세 모달

┌─────────────────────────────────────────────┐
│  👤 김영빈                                  │
│  📱 010-2702-7390                           │
│  💰 잔여 포인트: 19,005P                    │
├─────────────────────────────────────────────┤
│  [QR 적립 내역]  [POS 구매 이력]            │
├─────────────────────────────────────────────┤
│  📅 2026-02-27 01:29                        │
│     +555P (18,500원 구매)                   │
│     └ 투엑스벤포파워, 마데카솔연고          │
│                                             │
│  📅 2026-02-27 01:25                        │
│     +360P (12,000원 구매)                   │
│     └ 벤포파워Z x2                          │
├─────────────────────────────────────────────┤
│  [ 메시지 발송 ]  [ 닫기 ]                  │
└─────────────────────────────────────────────┘

구현 단계

Phase 1: 마일리지 내역 연동 (우선)

  1. /api/members/<phone>/mileage API 추가
  2. SQLite에서 전화번호로 적립/사용 내역 조회
  3. 회원 상세 모달 UI 구현

Phase 2: POS 구매 이력 연동

  1. 전화번호 → CUSCODE 매핑 로직
  2. SALE_MAIN/SALE_SUB 조회 API
  3. 품목 상세 표시

Phase 3: 통합 뷰

  1. 마일리지 + POS 데이터 병합
  2. 타임라인 형태로 통합 표시
  3. 상품 추천 (자주 구매 품목)

예상 쿼리

마일리지 내역 (SQLite)

SELECT 
    t.created_at, t.type, t.points, t.amount,
    u.name, u.phone, u.balance
FROM transactions t
JOIN users u ON t.user_id = u.id
WHERE u.phone = '01027027390'
ORDER BY t.created_at DESC
LIMIT 50;

POS 구매 이력 (MSSQL)

-- 1. 전화번호로 고객코드 조회
SELECT CUSCODE FROM PM_BASE.dbo.CD_PERSON 
WHERE PHONE = '01027027390' OR TEL_NO = '01027027390';

-- 2. 고객코드로 구매 이력 조회
SELECT 
    M.SL_NO_order, M.SL_DT_appl, M.SL_MY_total,
    S.DrugCode, G.GoodsName, S.QUAN, S.SL_TOTAL_PRICE
FROM PM_PRES.dbo.SALE_MAIN M
JOIN PM_PRES.dbo.SALE_SUB S ON M.SL_NO_order = S.SL_NO_order
LEFT JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode
WHERE M.SL_CD_custom = '0000012345'
ORDER BY M.SL_DT_appl DESC;

참고

  • 마일리지 테이블 구조: backend/db/dbsetup.py
  • POS 테이블 가이드: docs/alimipharm-set-product-structure.md
  • 회원 검색 API: backend/app.py/api/members/search

히스토리

날짜 내용
2026-02-27 계획 문서 작성