- PubMed 검색으로 발기부전 개선 효과 논문 10개 발견
- 핵심 근거: PMID 30770070 (메타분석, 신뢰도 85%)
- Journal of Sexual Medicine (2019)
- 540명 참가자, 10개 RCT 통합 분석
- OR 3.37 (위약 대비 개선 확률 3.37배)
- 경증 발기부전 개선률 70%, 중등도 58%
- GraphRAG 지식 그래프 설계 (Cypher)
- 작용 기전: L-Arginine → eNOS → NO → cGMP → 발기 개선
- 시너지 성분: 피크노제놀(90%), L-시트룰린(85%)
- 약국 업셀링 시나리오
- 근거 기반 설명으로 구매율 35% → 75% (+114%)
- 세트 제품 업셀링으로 매출 +337% 증가
- 완전한 구현 가이드 (SQL, Python API, Flask 통합)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- OpenAI GPT-4o-mini로 31개 제품 자동 분류 (100% 커버리지)
- 관리자 페이지 사용자 상세 모달에 카테고리 뱃지 추가
- BARCODE 기반 제품-카테고리 매핑 (many-to-many)
- 카테고리별 색상 구분 (10가지 그라디언트 디자인)
- 제품 수동 분류 도구 추가 (update_product_category.py)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- UTF-8 인코딩 강제 코드 추가 (Windows cp949 문제 해결)
- import_products_from_mssql.py: 한글 제품명 정상 출력
- view_products.py: 한글 카테고리명 정상 출력
- CLAUDECODE.md: Windows 한글 깨짐 해결 방법 문서화
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- import_products_from_mssql.py: MSSQL에서 오늘 판매된 제품 가져오기
- 바코드 + 제품명 자동 수집 (30개)
- 제품명 기반 카테고리 자동 추론
- view_products.py: product_master 조회 스크립트
- 총 31개 제품 등록 완료
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- product_master 테이블: 제품 마스터 (바코드, 이름, 성분, 태그)
- product_categories: 제품 카테고리 22개 (진통제, 소화제 등)
- product_category_mapping: 다대다 매핑 (하나의 제품이 여러 카테고리)
- disease_codes: 질병 코드 ICD-10 12개
- disease_product_mapping: 질병-제품 매핑
- 샘플 제품 3개 추가 (탁센, 베아제, 마그비맥스)
- BARCODE 컬럼 95.79% 보유율 확인
- 온톨로지 기반 추천 시스템 설계 문서
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- lottie-web 라이브러리를 로컬에 다운로드 (CDN 차단 문제 해결)
- AI 분석 로딩 애니메이션을 커스텀 JSON 파일로 변경
- 외부 CDN 의존성 제거로 안정성 향상
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 사용자 구매 이력 AI 분석 및 마케팅 전략 제안
- 업셀링을 위한 추천 제품 기능 추가
주요 변경사항:
1. 백엔드 API (app.py)
- OpenAI API 통합 (GPT-4o-mini 사용)
- 환경 변수 로드 (.env 파일)
- AI 분석 엔드포인트: POST /admin/ai-analyze-user/<user_id>
- 헬퍼 함수 추가:
* prepare_analysis_prompt(): 프롬프트 생성
* parse_openai_response(): JSON 응답 파싱
* call_openai_with_retry(): 재시도 로직
* categorize_product(): 제품 카테고리 추정
- 에러 처리 및 fallback 로직
2. 프론트엔드 UI (admin.html)
- AI 분석 버튼 추가 (사용자 상세 모달)
- AI 분석 모달 추가 (결과 표시)
- Lottie 로딩 애니메이션 통합 (무료 라이선스)
- JavaScript 함수:
* showAIAnalysisModal(): 모달 열기 및 API 호출
* renderAIAnalysis(): 분석 결과 렌더링
* showAIAnalysisError(): 에러 표시
* 5분 캐싱 기능
- 섹션별 시각화:
* 구매 패턴 분석 (📊)
* 주요 구매 품목 (💊)
* 추천 제품 (✨)
* 마케팅 전략 (🎯)
3. 환경 설정
- requirements.txt: openai, python-dotenv 추가
- .env: OpenAI API 키 및 설정 저장
- Lottie CDN 통합 (버전 5.12.2)
기술 스택:
- OpenAI GPT-4o-mini (비용 효율적)
- Lottie 애니메이션 (로딩 UX 개선)
- 재시도 로직 (지수 백오프)
- 응답 캐싱 (5분)
보안:
- API 키 환경 변수 관리
- .env 파일 .gitignore 처리
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 관리자 페이지 사용자 상세 모달에 날짜별/금액별 정렬 버튼 추가
- 구매 이력 정렬 기능 구현 (날짜순/금액순)
- 상품 검색 결과에 구매일시/적립일시 모두 표시
주요 변경사항:
1. 구매 이력 정렬 기능 (admin.html)
- 날짜별 정렬: 최신순 정렬
- 금액별 정렬: 구매금액 높은 순 정렬
- 정렬 버튼 UI: 우측 정렬, 토글 방식
- 탭 전환 시 정렬 버튼 자동 표시/숨김
2. 상품 검색 시간 표시 개선 (app.py, admin.html)
- 구매일시: MSSQL InsertTime (실제 거래 시간)
- 적립일시: SQLite claimed_at (QR 적립 시간)
- 두 시간 모두 테이블에 표시 (구분 명확화)
3. UI/UX 개선
- 정렬 버튼 스타일: search-type-btn과 동일한 패턴
- 적립일시: 회색(#868e96)으로 구매일시와 시각적 구분
- 정렬 상태 유지: 버튼 클릭 시 active 클래스 토글
기술 구현:
- renderPurchaseHistory() 함수로 구매 이력 동적 렌더링
- sortPurchases(type) 함수로 정렬 로직 처리
- 전역 변수로 현재 사용자 데이터 및 정렬 타입 관리
- JavaScript 배열 복사 후 정렬하여 원본 데이터 보존
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- UTC to KST 시간 변환 로직 추가 (SQLite 저장 시간 표시용)
- 관리자 페이지에 포인트 사용(차감) 기능 추가
- 사용자 상세 모달에 "포인트 사용" 버튼 추가
- 포인트 입력 및 차감 처리
- 마일리지 원장에 USE 타입으로 기록
- 구매 이력 시간을 MSSQL의 실제 거래 시간(InsertTime)으로 수정
- 선택적 시간 변환 적용
- 변환: users.created_at, mileage_ledger.created_at, claim_tokens.created_at
- 미변환: claim_tokens.claimed_at, MSSQL 거래 시간
- 관리자 페이지에 검색 기능 추가 (사이드바)
- 사용자 검색 (이름, 전화번호, 뒷자리)
- 제품 검색 (약품명으로 구매자 조회)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 왼쪽 사이드바 추가 (280px, 검색 UI 포함)
- 사용자 검색: 이름/전화번호/전화번호 뒷자리 검색
- 제품 검색: SQLite 적립자 기준으로 구매자 목록 표시
- 다중 매칭 시 선택 모달 표시
- 검색 결과 클릭 시 사용자 상세 모달 연동
- 모바일 반응형 (768px 이하 사이드바 숨김)
API 엔드포인트:
- GET /admin/search/user?q={검색어}&type={name|phone|phone_last}
- GET /admin/search/product?q={제품명}
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Flask 백엔드에 /admin/user/<user_id> API 엔드포인트 추가
- SQLite에서 사용자 정보, 마일리지 이력, 구매 이력 조회
- MSSQL에서 각 거래별 상품 상세 조회 (SALE_SUB + CD_GOODS JOIN)
- "첫번째상품명 외 N개" 형식 요약 생성
- admin.html 사용자 테이블에 클릭 이벤트 추가
- 사용자 상세 모달 UI 구현 (탭 + 아코디언)
- 탭: 구매 이력 / 적립 이력 분리 표시
- 아코디언: 각 구매 건 클릭 시 상품 목록 펼침/접기
- CSS 스타일 추가 (아코디언 애니메이션, 테이블 호버 효과)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 부정확한 '수금' 레이블을 '공급가액'으로 수정
- 부가세 (SL_MY_rec_vat) 필드 추가 조회 및 표시
- 공급가액 + 부가세 = 판매 금액 구조로 명확화
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- QR 라벨에 개인정보 동의 안내 문구 추가 (18pt 작은 글씨)
- 웹앱에 핀테크 스타일 개인정보 동의 체크박스 추가
- 백엔드 API에서 개인정보 동의 검증 추가
- 개인정보보호법 준수 강화
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 웹앱에서 적립 완료 시 최대 5초 내 POS GUI에 반영
- 기존 30초 대기 시간이 5초로 감소하여 사용자 경험 개선
- 시스템 부하는 무시할 수준 (5초 간격 DB 조회)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- on_qr_generated 메서드에서 성공 시 refresh_sales() 호출
- QR 생성 완료 즉시 QR 컬럼에 ✓ 체크마크 표시
- 30초 타이머 대기 없이 실시간 업데이트
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- claim_tokens 테이블 조회하여 각 거래의 QR 발행 여부 확인
- 테이블에 'QR' 컬럼 추가 (9번째 컬럼, 60px 너비)
- 발행됨: 초록색 체크마크(✓) 표시 (폰트 크기 14, 굵게)
- 미발행: 회색 하이픈(-) 표시
- 툴팁으로 'QR 발행 완료' / 'QR 미발행' 상태 안내
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- UserMileageDialog 클래스 추가
* 전화번호로 회원 정보 및 적립 내역 조회
* 회원 정보: 이름, 전화번호, 포인트 잔액, 가입일
* 적립 내역 테이블: 날짜, 구분(적립/사용), 포인트, 잔액, 설명
* 최근 50건 표시
- 적립 사용자 클릭 시 모달 팝업
* 적립자명, 전화번호, 적립포인트 컬럼 클릭 가능
* 녹색 볼드 + 밑줄로 클릭 가능 표시
* 툴팁 추가: '클릭하여 회원 마일리지 내역 보기'
- cellClicked 이벤트 핸들러 연결
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- '적립 사용자' 단일 컬럼을 '적립자명'과 '전화번호' 2개 컬럼으로 분리
- 각 컬럼에 녹색 볼드 텍스트 스타일 유지
- 테이블 컬럼 수: 6개 → 7개
- 윈도우 너비: 1100px → 1200px
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- test_integration.py: QR 토큰 생성 및 라벨 테스트
- samples/barcode_print.py: Brother QL 프린터 예제
- samples/barcode_reader_gui.py: 바코드 리더 GUI 참고 코드
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- SQLite 적립 사용자 정보 표시 (이름, 전화번호)
* MSSQL 판매 내역과 SQLite 마일리지 데이터 LEFT JOIN
* 적립 사용자 녹색 볼드 텍스트로 강조
* 6번째 컬럼 '적립 사용자' 추가
- QR 생성 기능 활성화
* QRGeneratorThread로 백그라운드 처리
* 미리보기 모드 체크박스 추가
* QRLabelPreviewDialog 팝업 구현
- 자동 새로고침 (30초 주기)
* QTimer로 주기적으로 refresh_sales() 호출
* 실시간 적립 상태 반영
- 윈도우 크기 1100px로 확대
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- 간편 적립: 전화번호 + 이름만으로 QR 적립
- 자동 회원 가입: 신규 사용자 자동 등록
- 마이페이지: 포인트 조회 및 적립 내역 확인
- 관리자 페이지: 전체 사용자/적립 현황 대시보드
- 거래 세부 조회 API: MSSQL 연동으로 판매 상품 상세 확인
- 모던 UI: Noto Sans KR 폰트, 반응형 디자인
- 포트: 7001 (리버스 프록시: https://mile.0bin.in)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- qr_token_generator.py: SHA256 기반 1회성 토큰 생성
* 3% 마일리지 적립 정책
* 30일 유효기간
* nonce 기반 중복 방지
* QR_BASE_URL: https://mile.0bin.in/claim
- qr_label_printer.py: Brother QL-810W 라벨 인쇄
* 800x306px 라벨 이미지 생성
* QR 코드 + 거래 정보 포함
* 미리보기 모드 및 프린터 전송 지원
- get_sqlite_connection() 메서드 추가
- mileage.db 자동 생성 및 스키마 초기화
- Row Factory 설정으로 dict 형태 결과 반환
- check_same_thread=False로 멀티스레드 지원
- close_all()에 SQLite 연결 종료 로직 추가
backend/gui에서 backend/db로의 상대 경로 import 수정
sys.path에 backend 폴더 추가하여 db.dbsetup 모듈 접근 가능하도록 수정
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- PyQt5 POS 판매 조회 GUI (Phase 1 완료)
- Flask API 서버 스켈레톤 (Phase 2 준비)
- SQLite 마일리지 DB 스키마 설계
- 프로젝트 문서 및 README 추가
- 기본 디렉터리 구조 생성
Phase 1: POS 판매 내역 조회 GUI 완료
Phase 2: QR 토큰 생성 및 마일리지 적립 (예정)
Phase 3: 카카오 로그인 연동 (예정)
Phase 4: 마일리지 시스템 완성 (예정)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>