Commit Graph

114 Commits

Author SHA1 Message Date
thug0bin
2625430ca5 fix: 마이페이지 카카오 로그인 시 계정 머지(연동) 누락 수정
- _handle_mypage_kakao_callback()에서 link_kakao_identity() 호출 추가
- 키오스크(번호) → 알림톡 → 카카오 로그인 시 자동 머지
- "고객" 이름 → 카카오 실명으로 자동 업데이트
- 케이스별 시나리오 문서 추가 (docs/user-identity-merge.md)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:25:46 +09:00
thug0bin
e7c529c22c feat: 알림톡 MILEAGE_CLAIM_V3 템플릿 대응 + 구매품목 요약
- nhn_alimtalk.py: build_item_summary() 추가 ("타이레놀 외 3건" 형식)
- send_mileage_claim_alimtalk()에 items 파라미터 추가, V3 우선 시도
- app.py: kiosk_current_session 클리어 전 items 캡처 버그 수정
- NHN API에 MILEAGE_CLAIM_V3 템플릿 등록 (발송 근거 문구 포함)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:09:39 +09:00
thug0bin
cb927d2207 feat: 어드민 적립내역 클릭 시 품목 상세 모달 + 키오스크 UI 개선
- 어드민 최근 적립 내역에서 행 클릭 시 MSSQL 품목 상세 모달 표시
- transaction_id가 있는 행만 클릭 가능 (돋보기 아이콘 표시)
- 키오스크 품목 목록 표시, 세로 모니터 반응형 레이아웃 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 16:37:50 +09:00
thug0bin
22cbf3d42e fix: 기존 QR 토큰 거래도 키오스크에서 QR 코드 표시
- 기존 토큰의 nonce를 복원할 수 없는 문제 해결
- verify_claim_token이 transaction_id로만 검증하므로 새 nonce로 QR URL 생성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:32:25 +09:00
thug0bin
a4410f5fe0 feat: 키오스크 대기화면 슬라이드쇼 + 브랜딩 + 010 기본입력
- 대기화면: 3장 자동 슬라이드 (동물의약품/건기식/부외품, 30% 한도)
- 브랜딩: AI 에이전트 개발 약국, 복약안내 진심 약사, 모바일 약료 시스템
- 전화번호 010 고정 + 나머지 8자리만 입력
- 다크 배경 대기화면 → 밝은 적립/성공 화면

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:30:07 +09:00
thug0bin
f80c19567a feat: 키오스크 마일리지 적립 시스템 추가
- 키오스크 전체화면 웹 UI (/kiosk) - QR 표시 + 전화번호 숫자패드 입력
- 키오스크 API 4개 (trigger, current, claim, kiosk 페이지)
- POS GUI에 "키오스크 적립" 버튼 추가 (Flask 서버로 HTTP 트리거)
- NHN Cloud 알림톡 발송 모듈 (적립 완료 시 자동 발송)
- Qt 플랫폼 플러그인 경로 자동 설정 (no Qt platform plugin 에러 해결)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 13:08:02 +09:00
thug0bin
a30374cd4a fix: JS SDK authorize에서 scope 제거 - 앱 직접 실행 개선
scope 파라미터가 있으면 웹 동의 페이지를 강제 표시함.
제거하면 개발자 콘솔 동의항목 설정대로 동작하며,
이미 동의한 사용자는 카카오톡 앱에서 바로 인증 완료.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 11:13:54 +09:00
thug0bin
d868a494c2 feat: 카카오 JS SDK 전환 - 앱 직접 실행으로 로그인 UX 개선
- claim_form.html, my_page_login.html 카카오 버튼을 JS SDK Kakao.Auth.authorize()로 전환
- 카카오톡 앱 설치 시 앱으로 직접 전환 (원탭 로그인), 미설치 시 웹 폴백
- JS SDK 로드 실패 시 기존 서버 리다이렉트(/claim/kakao/start) 폴백 유지
- app.py: /claim, /my-page 라우트에서 kakao_state 생성하여 템플릿에 전달
- kakao_client.py: birthyear 스코프 제거 (미승인 → KOE205 에러 방지)
- docs/kakao-oauth-setup.md: 플랫폼 키, JS SDK 비교, 다른 계정 적립 안내, 콘솔 설정 문서화

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 10:55:51 +09:00
thug0bin
f969756caa feat: 생년월일 필드 추가 + 카카오 스코프 확장 + 채널 연동 문서
- signup.html: 수집 목적 안내 카드, 생년월일(선택) 필드, 필수/선택 배지
- app.py: /api/signup에 birthday 처리, get_or_create_user birthday 파라미터
- mileage_schema.sql: users 테이블 birthday 컬럼 추가
- dbsetup.py: 기존 DB 마이그레이션 (ALTER TABLE ADD birthday)
- kakao_client.py: scope에 phone_number,birthday,birthyear 추가
- privacy.html: 항목별 수집 목적 테이블, 필수/선택 구분, 9항 신설
- kakao-phone-request.md: 전화번호+생일 스코프 신청 사유 문서
- kakao-channel-integration.md: 채널 API 분석 및 알림톡 로드맵
- kakao-chanell-rest-api.md: 카카오 채널 REST API 원문 참고 문서

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 10:12:41 +09:00
thug0bin
2b3d8649ba feat: 회원가입 페이지 추가 + 카카오 전화번호 신청 문서
- /signup 회원가입 페이지 (이름 + 전화번호 + 개인정보 동의)
- /api/signup API (get_or_create_user + 세션 저장)
- 카카오 간편 가입 버튼 (카카오 로그인으로 가입)
- 홈 화면에 회원가입 메뉴 추가
- 이미 로그인 시 /signup 접근하면 마이페이지로 리다이렉트
- 카카오 전화번호 수집 신청용 수집 사유 + 시나리오 문서

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 09:34:41 +09:00
thug0bin
c4fa655005 feat: 홈 화면 리뉴얼 - QR 스캐너 + 카카오 로그인 + 세션 상태 표시
- 인라인 HTML → index.html 템플릿으로 전환
- HTML5 QR 코드 스캐너 (html5-qrcode 라이브러리)
- 로그인 상태에 따라 다른 메뉴 표시:
  - 비로그인: 카카오로 시작하기 + 마일리지 조회
  - 로그인: 내 마일리지 + 로그아웃
- QR 스캔 → /claim 자동 이동 (로그인 시 자동 적립)
- 디자인 시스템 통일 (Noto Sans KR, 보라색 그라디언트)
- PWA 메타 태그 + 개인정보 처리방침 푸터 링크

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:57:55 +09:00
thug0bin
ed2a3f28bf feat: PWA 세션 유지 자동적립 + 메타 태그 + 설치 유도 배너
- 세션 설정: 90일 유지, SameSite=Lax (QR 스캔 시 쿠키 전송)
- 적립 성공 시 세션에 유저 정보 저장 (3곳)
- /claim 자동적립: 세션에 유저가 있으면 입력 없이 바로 적립
- /logout 라우트 추가, 마이페이지 헤더에 로그아웃 버튼
- /sw.js, /privacy 라우트 추가
- 고객용 템플릿 6개에 PWA 메타 태그 + 서비스 워커 등록
- 적립 성공 화면에 PWA 설치 유도 배너 (iOS/Android 분기)
- session 변수명 충돌 수정 (db_session으로 변경)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:52:19 +09:00
thug0bin
62502c81b3 feat: 개인정보 처리방침 페이지 추가 (/privacy)
- 한국 개인정보보호법 형식의 처리방침 페이지
- 수집 항목, 이용 목적, 보유 기간, 제3자 제공 등 카카오 심사 요건 충족
- claim_form.html 동의 텍스트에 /privacy 링크 연결
- 적립 페이지 하단에 개인정보 처리방침 푸터 링크 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:51:32 +09:00
thug0bin
d1a5964bb7 feat: PWA 기본 설정 (manifest, service worker, 앱 아이콘)
- manifest.json: 앱 이름 "청춘약국 마일리지", standalone 모드, 보라색 테마
- sw.js: 정적 자산 캐싱 (동적 페이지 제외)
- 앱 아이콘 192x192, 512x512 PNG 생성
- /sw.js 루트 라우트로 서비스 워커 scope 허용

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 08:51:23 +09:00
thug0bin
62632cb7b8 feat: name scope 추가 및 에러 페이지에 카카오 마이페이지 버튼 추가
- 카카오 동의항목에서 name이 이미 승인되어 scope에 추가
- 에러 페이지(이미 적립된 영수증 등)에 '내 마일리지 확인하기' 카카오 버튼 추가
- 에러 발생 시에도 자연스럽게 마이페이지로 이동 가능

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 02:54:54 +09:00
thug0bin
eb44701410 feat: 카카오 로그인 마이페이지 조회 + scope/env 수정 + 트러블슈팅 문서
- 마이페이지에 카카오 로그인 조회 기능 추가 (/my-page/kakao/start)
- 콜백 핸들러에 purpose=mypage 분기 추가 (동일 콜백 URL 재사용)
- my_page_login.html에 "카카오로 조회하기" 버튼 추가
- my_page.html 헤더에 카카오 조회 버튼 추가
- OAuth scope에서 name, phone_number 제거 (비즈앱 심사 미완료)
- KOE101/KOE205/KOE320 등 에러별 트러블슈팅 문서 작성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 02:48:04 +09:00
thug0bin
31cf6e3816 feat: 카카오 로그인으로 마일리지 적립 기능 추가
- 카카오 OAuth 2.0 클라이언트 모듈 추가 (services/kakao_client.py)
- 적립 페이지에 "카카오로 적립하기" 버튼 추가
- OAuth 콜백 처리: 전화번호 자동 적립 / 미제공 시 폰 입력 폴백
- state 파라미터로 claim 컨텍스트 보존 + CSRF 보호
- customer_identities 테이블 활용한 카카오 계정 연결
- 마이페이지 헤더 sticky 고정
- 카카오 OAuth 설정 가이드 문서 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 02:27:05 +09:00
thug0bin
82220a4a44 feat: GUI 칼럼 설정 저장, 010 전화번호 UX 개선, 품목 상세 조회
- GUI: SALES_COLUMNS 상수 정의, 칼럼 폭/윈도우 위치 gui_settings.json에 저장
- 전화번호 입력: 적립페이지/마이페이지에서 010 고정 + 뒷번호만 입력
- 적립페이지: MSSQL SALE_SUB에서 구매 품목 조회 및 토글 표시
- 마이페이지: 적립 내역 탭 시 품목 상세 AJAX 조회 (캐시 적용)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 01:17:45 +09:00
774c199c1a docs: IL-1β 식품 GraphRAG 통합 가이드 추가
PubMed 근거 기반 식품-바이오마커 관계 GraphRAG 활용 문서:

## 주요 내용

1. 시스템 구조
   - PostgreSQL + Apache AGE 하이브리드 DB
   - Food → Biomarker → Disease 관계 그래프
   - PubMed 논문 근거 연결

2. 데이터 모델
   - foods 테이블 (염증 유발/항염증 식품)
   - biomarkers 테이블 (IL-1β, CRP 등)
   - food_biomarker_effects (증가/감소 관계)
   - disease_biomarker_association (질병 연관성)

3. Cypher 쿼리 예시 (5가지)
   - IL-1β 증가시키는 모든 식품 조회
   - 고지방식 → IL-1β → NAFLD 경로 탐색
   - NAFLD 환자가 피해야 할 식품 목록
   - 항염증 식품 추천
   - 복합 경로: 다중 질병 연결

4. API 설계
   - POST /api/nutrition/avoid-foods (질병별 피해야 할 식품)
   - GET /api/nutrition/biomarker-foods/{name} (바이오마커별 식품)

5. 약국 활용 시나리오 (3가지)
   - NAFLD 환자 영양 상담
   - 관절염 환자 항염증 식이
   - 건강검진 후 염증 지표 개선 프로그램

## 핵심 가치

 근거 기반: 모든 추천에 PubMed PMID 포함
 맞춤형: 질병별 개인화 식이 지도
 업셀링: 항염증 보충제 (오메가-3, 커큐민) 자연스럽게 연결
 신뢰도: 과학적 근거로 고객 신뢰 향상

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 17:21:11 +09:00
37821fefdb feat: IL-1β 식품 GraphRAG 스키마 확장 및 데이터 파이프라인
PostgreSQL + Apache AGE에 식품-바이오마커 관계 추가:

1. schema_food_biomarker.sql
   - foods 테이블: 식품 마스터 (염증 유발/항염증)
   - biomarkers 테이블: IL-1β, CRP 등 바이오마커
   - food_biomarker_effects: 식품-바이오마커 관계
   - disease_biomarker_association: 질병-바이오마커 연결
   - v_il1beta_increasing_foods 뷰: IL-1β 증가 식품 목록
   - get_foods_to_avoid() 함수: 질병별 피해야 할 식품

2. age_food_graph.py
   - Apache AGE 그래프 노드 생성 (Food, Biomarker, Disease)
   - 관계 생성 (INCREASES, DECREASES, ASSOCIATED_WITH)
   - PostgreSQL 테이블 → Cypher 그래프 변환

3. import_il1beta_foods.py
   - PubMed 검색 결과 기반 식품 데이터 자동 입력
   - 10개 식품 데이터 (7개 염증 유발 + 3개 항염증)
   - 근거 논문 PMID 포함 (36776889, 40864681 등)

4. il1beta_proinflammatory_foods_research.py
   - PubMed 검색: 고지방, 고당, 가공육, 적색육, 알코올
   - 24개 논문 분석
   - 카테고리별 분류 및 메커니즘 분석

활용:
- NAFLD 환자 식이 지도 (고지방식 금지)
- 관절염 환자 항염증 식단 (오메가-3 권장)
- 근거 기반 영양 상담 (PubMed PMID 제시)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 17:20:53 +09:00
1e904000c7 feat: python-escpos 라이브러리를 사용한 QR 테스트 추가
python-escpos: 가장 안정적인 ESC/POS Python 라이브러리
- escpos.qr() - 프린터 내장 QR 사용
- escpos.image() - QR을 이미지로 변환하여 인쇄
- 다양한 size 테스트 (3, 4, 6, 8)
- 완전한 영수증 예제 포함

설치: pip install python-escpos
실행: python backend/test_qr_with_escpos_lib.py

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:16:00 +09:00
a4cfcb6bde feat: QR 테스트 v2 - 더 많은 변형 (크기, 밀도, 파라미터) 2026-01-29 20:15:13 +09:00
161f826380 feat: 실험 파일 영수증에 방법 번호 표시 추가
각 영수증에 "*** 방법 1 ***" 형식으로 번호 표시
어떤 방법이 QR을 성공적으로 인쇄했는지 쉽게 확인 가능

출력 예:
================================
     *** 방법 1 ***
  내장 QR (GS ( k)
================================

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:12:54 +09:00
6b5c98b4f0 feat: ESC/POS QR 인쇄 방식 테스트 실험 파일 추가
4가지 QR 인쇄 방식을 한 번에 테스트:
1. 프린터 내장 QR (GS ( k) - Model 2
2. Raster Bitmap (GS v 0)
3. Bit Image (ESC * 24-dot)
4. 텍스트만 (비교용)

IP/포트 하드코딩 (192.168.0.174:9100)
짧은 테스트 URL 사용
각 방법별 성공/실패 확인 가능

실행: python backend/test_qr_methods.py

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:12:05 +09:00
f4f7e8b1b4 feat: ESC/POS QR 비트맵 인쇄 활성화 (텍스트 검증 완료)
- QR 비트맵 인쇄 재활성화 (image_to_raster_esc_star)
- 에러 처리 강화: traceback 출력으로 디버깅 정보 제공
- QR 실패 시 URL 텍스트로 자동 폴백
- 텍스트 인쇄 검증 완료 (청춘약국, 거래정보, 금액 등)

ESC * 방식 (24-dot double-density) 사용

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:06:16 +09:00
9a24c8659f fix: ESC/POS 명령어 단순화 - 폰트 명령어 호환성 문제 해결
- 폰트 크기 명령어 제거 (ESC ! x10, x08, x00)
  → 일부 프린터에서 "@a!" 같은 이상한 문자 출력 문제 해결
- 중앙 정렬 명령어 변경: ESC a\x01 → ESC a [1]
- QR 비트맵 임시 비활성화 → URL 텍스트로 대체
- 용지 커트: Full cut (V\x00) → Partial cut (V\x01)
- 텍스트만으로 레이아웃 구성 (더 안전)

테스트 용지는 인쇄되지만 QR 포함 시 "@a!청춘약국" 같은
문자가 나오는 문제 해결

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:04:48 +09:00
3413211c49 fix: ESC/POS QR 인쇄 호환성 개선 (ESC * 방식)
- QR 크기 축소: 150x150px → 100x100px (안정성 향상)
- ESC * 명령어 사용 (24-dot double-density) - 더 많은 프린터 지원
- image_to_raster_esc_star() 함수 추가
- 디버깅 로그 추가 (각 단계 print)
- QR 비트맵 실패 시 URL 텍스트로 폴백

GS v 0 방식은 일부 프린터에서 미지원 → ESC * 방식으로 변경

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:03:13 +09:00
2ec73dd73d feat: QR 프린터 선택 기능 추가 (Zebra + ESC/POS)
- ESC/POS QR 영수증 인쇄 함수 추가 (pos_qr_printer.py)
  - QR 코드 이미지를 ESC/POS 비트맵 래스터로 변환
  - 150x150px QR 코드 + 거래 정보 텍스트 인쇄
  - EUC-KR 인코딩으로 한글 지원
  - TCP 소켓으로 프린터 전송

- POS GUI에 프린터 선택 토글 버튼 추가
  - 🖨️ Zebra 라벨 ⇄ 🖨️ POS 영수증 전환
  - POS 모드 시 설정 버튼 표시 (IP/포트 설정)
  - 미리보기 모드는 Zebra 전용

- POSSettingsDialog 재사용 (pos_thermal.py 연동)
  - config.json에 POS 프린터 설정 저장
  - 테스트 인쇄 기능 활용

- QRGeneratorThread 프린터 모드 지원
  - printer_mode 매개변수 추가 ('zebra' or 'pos')
  - pos_config 설정 전달
  - 프린터별 분기 처리

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 20:00:42 +09:00
5339204fca docs: 프로젝트 README 업데이트 - Flask app.py 및 API 문서 추가
- 프로젝트 구조에 app.py 명시
- Phase 2 완료 상태로 업데이트 (QR 토큰 생성, Flask API)
- 시스템 구성 및 연계 구조 설명 추가
- Flask API 엔드포인트 11개 문서화 (고객용 4개, 관리자용 7개)
- 전체 시스템 실행 방법 상세 가이드 추가
- backend/gui/README.md에 app.py 연동 관계 추가
- OpenAI 기반 AI 분석 기능 안내 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 12:09:07 +09:00
834747cc0b docs: PubMed GraphRAG 샘플 README 추가
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-25 12:06:47 +09:00
032795c0fa docs: GraphRAG 및 그래프 DB 전환 기획 문서 추가
약국 POS 시스템의 GraphRAG 기반 추천 시스템 구축 관련 문서:

## 핵심 설계 문서

1. 질병코드기반 제품추천.md
   - ICD-10 질병 코드 활용 추천 시스템 설계
   - 계층 구조 (질병 → 질병군 → 제품군 → 개별 제품)
   - 처방전 기반 추천 알고리즘

2. complex-product-graph-modeling.md
   - 복합제(비맥스제트 등) 그래프 모델링
   - 성분 간 시너지 효과 표현
   - 복합 증상 매칭 쿼리 예시

3. pubmed-graphrag-workflow.md
   - PubMed → GraphRAG 전체 워크플로우 (5단계)
   - 논문 검색, 근거 추출, 지식 그래프 구축
   - MCP Server 개발 가이드

## 그래프 DB 비교 및 평가

4. sqlite-graph-evaluation.md
   - SQLite vs SQLite-Graph vs Neo4j 비교
   - 현 시점(2026-01) 평가: 기존 SQL 유지 권장
   - 6개월 후 재평가 계획

5. opensource-graph-db-comparison.md
   - 오픈소스 그래프 DB 비교 (Neo4j, ArangoDB 등)

6. 온톨로지로전환.md
   - 관계형 DB → 온톨로지 구조 전환 가이드
   - PubMed RAG 활용 방안
   - 추론 규칙 설계

## PubMed GraphRAG 활용

7. pycnogenol-multi-indication-graphrag.md
   - 피크노제놀 다중 적응증 GraphRAG 구축 사례
   - 7가지 적응증별 근거 수준

8. grpahrag_아쉬아간다.md
   - Ashwagandha GraphRAG 구축 사례

9. pubdmed이용ai.md
   - PubMed + AI 통합 활용 가이드

## 추가 워크플로우

10. pubmed-graphrag-workflow_next.md
    - 다음 단계 워크플로우

11. PostgresGRAPH전환.md
    - PostgreSQL + Apache AGE 전환 가이드

모든 문서는 한국어로 작성되었으며, 코드 예시는 영어로 포함.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-24 21:04:56 +09:00
97cf89a9c2 feat: PubMed 기반 GraphRAG 연구 스크립트 추가
근거 기반 약물 추천을 위한 PubMed 논문 검색 및 분석 스크립트:

1. pubmed_search.py
   - PubMed 논문 검색 기본 템플릿
   - Biopython Entrez API 활용
   - 3가지 주제 검색 예시 포함

2. fetch_paper_abstract.py
   - PMID로 논문 초록 가져오기
   - 특정 논문 상세 정보 조회

3. analyze_statin_myopathy.py
   - Statin 근육병증과 CoQ10 보충 연구 분석
   - CK(Creatine Kinase) 측정의 의미 설명

4. ashwagandha_sleep_research.py
   - Ashwagandha의 수면 개선 효과 연구
   - 작용 메커니즘 분석 (코르티솔, GABA)
   - 다른 수면 보조제와 비교

5. naproxen_advantages_research.py
   - Naproxen의 심혈관 안전성 연구
   - NSAID 간 비교 분석
   - 약동학 및 업셀링 시나리오

6. pycnogenol_multi_indication_research.py
   - 피크노제놀의 7가지 적응증 연구
   - 발기부전, 당뇨망막병증, 정맥기능부전 등
   - 우선순위 점수화

7. pycnogenol_womens_health_research.py
   - 피크노제놀의 여성 건강 효능
   - 갱년기, 생리통, 피부 미용

8. sqlite_graph_example.py
   - SQLite 그래프 쿼리 예제
   - Cypher 스타일 추론 시연
   - GraphRAG 개념 실습

각 스크립트는 Windows 한글 인코딩 처리 포함.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-24 21:04:33 +09:00
de5b49d862 feat: 아르기닌 5000mg 남성건강 효능 PubMed GraphRAG 구축
- 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>
2026-01-24 09:05:20 +09:00
70d18a1954 feat: AI 기반 제품 카테고리 자동 태깅 및 UI 표시
- 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>
2026-01-23 23:56:28 +09:00
6026f0aae8 fix: Windows 한글 깨짐 해결 및 문서화
- 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>
2026-01-23 23:32:56 +09:00
5cab3229db feat: MSSQL에서 오늘 판매 제품 자동 import
- import_products_from_mssql.py: MSSQL에서 오늘 판매된 제품 가져오기
- 바코드 + 제품명 자동 수집 (30개)
- 제품명 기반 카테고리 자동 추론
- view_products.py: product_master 조회 스크립트
- 총 31개 제품 등록 완료

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 23:31:49 +09:00
39539639b7 feat: 바코드 기반 제품 태깅 시스템 구축
- 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>
2026-01-23 23:28:59 +09:00
a3252f7f17 feat: Lottie 애니메이션 라이브러리 로컬 통합
- lottie-web 라이브러리를 로컬에 다운로드 (CDN 차단 문제 해결)
- AI 분석 로딩 애니메이션을 커스텀 JSON 파일로 변경
- 외부 CDN 의존성 제거로 안정성 향상

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 22:30:16 +09:00
914bc08c6c feat: AI 구매 패턴 분석 기능 추가 (OpenAI GPT 통합)
- 사용자 구매 이력 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>
2026-01-23 22:23:45 +09:00
d715b630fe feat: 구매이력 정렬 기능 및 상품검색 시간 표시 개선
- 관리자 페이지 사용자 상세 모달에 날짜별/금액별 정렬 버튼 추가
- 구매 이력 정렬 기능 구현 (날짜순/금액순)
- 상품 검색 결과에 구매일시/적립일시 모두 표시

주요 변경사항:

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>
2026-01-23 22:06:47 +09:00
59a33cc249 feat: 포인트 사용 기능 및 시간 표시 개선
- 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>
2026-01-23 21:54:12 +09:00
7627efbdfb feat: 관리자 페이지 사이드바 및 검색 기능 추가
- 왼쪽 사이드바 추가 (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>
2026-01-23 21:19:35 +09:00
a652d54ad3 feat: 관리자 페이지 사용자 상세 이력 조회 기능 추가
- 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>
2026-01-23 19:27:10 +09:00
622a143e19 fix: 거래 세부 내역 '수금' 필드를 '공급가액'으로 변경 및 부가세 표시 추가
- 부정확한 '수금' 레이블을 '공급가액'으로 수정
- 부가세 (SL_MY_rec_vat) 필드 추가 조회 및 표시
- 공급가액 + 부가세 = 판매 금액 구조로 명확화

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 19:13:31 +09:00
aa222eec3a fix: 거래 세부 내역의 단가 컬럼 매핑 수정
- SL_INPUT_PRICE → SL_NM_cost_a로 변경
- SL_INPUT_PRICE는 합계 금액이었음 (잘못된 매핑)
- SL_NM_cost_a가 실제 개당 단가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 19:05:33 +09:00
10087cac5f fix: QR 라벨 개인정보 문구가 라벨 영역 내 표시되도록 간격 조정
- 포인트/안내 문구 간격 축소로 306px 라벨 내 수용
- y 최종 위치: 약 303px (라벨 높이 306px)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 18:55:43 +09:00
1717f4c6c2 feat: 개인정보 수집·이용 동의 프로세스 추가
- QR 라벨에 개인정보 동의 안내 문구 추가 (18pt 작은 글씨)
- 웹앱에 핀테크 스타일 개인정보 동의 체크박스 추가
- 백엔드 API에서 개인정보 동의 검증 추가
- 개인정보보호법 준수 강화

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 18:51:20 +09:00
d2ad64ebd8 perf: 자동 새로고침 주기를 30초에서 5초로 단축
- 웹앱에서 적립 완료 시 최대 5초 내 POS GUI에 반영
- 기존 30초 대기 시간이 5초로 감소하여 사용자 경험 개선
- 시스템 부하는 무시할 수준 (5초 간격 DB 조회)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 18:26:45 +09:00
c0dcd8cd1f fix: QR 생성 후 즉시 테이블 새로고침하여 발행 상태 실시간 반영
- on_qr_generated 메서드에서 성공 시 refresh_sales() 호출
- QR 생성 완료 즉시 QR 컬럼에 ✓ 체크마크 표시
- 30초 타이머 대기 없이 실시간 업데이트

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 18:13:50 +09:00
77c82f395e feat: POS GUI에 QR 발행 여부 시각적 표시 추가
- claim_tokens 테이블 조회하여 각 거래의 QR 발행 여부 확인
- 테이블에 'QR' 컬럼 추가 (9번째 컬럼, 60px 너비)
- 발행됨: 초록색 체크마크(✓) 표시 (폰트 크기 14, 굵게)
- 미발행: 회색 하이픈(-) 표시
- 툴팁으로 'QR 발행 완료' / 'QR 미발행' 상태 안내

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 17:13:22 +09:00