- 동물약 뱃지 클릭 시 약품 정보 모달 표시
- APC 코드로 PostgreSQL 조회 (효능효과, 용법용량, 주의사항)
- HTML 태그 파싱하여 텍스트 표시
- ESC/POS 인쇄 API 준비 (프린터 연결 시 활성화)
- 미리보기 API: /api/animal-drug-info/preview
- 인쇄 API: /api/animal-drug-info/print
화면 표시:
- 대표바코드 옆 빨간 뱃지로 단위바코드 갯수 표시 (카톡 스타일)
- APC 없어도 단위바코드 있으면 POS 판매 가능함을 표시
QR 인쇄 우선순위:
1. 대표바코드 (있으면)
2. 단위바코드 첫 번째 (대표 없으면)
3. drug_code (fallback)
쿼리 추가:
- UNIT_FIRST: 단위바코드 첫 번째 (조건 없이)
- UNIT_CNT: 단위바코드 갯수
API:
- GET /api/locations - 모든 위치 목록 (461개)
- PUT /api/drugs/<code>/location - 위치 업데이트/삭제
UI:
- 위치 있음: 노란색 뱃지 (클릭 가능)
- 위치 없음: '미지정' 회색 점선 뱃지
- 클릭 시 위치 설정 모달 열림
- 드롭다운 선택 또는 직접 입력
- person-lookup-web-local 참고하여 구현
- app.py: /api/sales-detail에서 product_images.db 조회하여 thumbnail 반환
- admin_sales_pos.html: 거래별/목록 뷰에 36x36 썸네일 표시
- 이미지 없는 제품은 📦 플레이스홀더 표시
- barcode 우선, drug_code 폴백으로 이미지 매칭
- 사용자 상세 모달에 특이사항 표시 (생일 옆 칸)
- 인라인 수정 UI (수정 버튼 → textarea → 저장/취소)
- PUT /api/members/{cuscode}/cusetc API 추가
- CD_PERSON.CUSETC 직접 UPDATE
Docs: MEMBER_MEMO_SYSTEM.md 문서 추가
- DB 구조, API 명세, 구현 현황 정리
- HTML5 getUserMedia로 카메라 촬영 지원 (모바일 후면 카메라 기본)
- 1:1 가이드 박스 UI로 정사각형 크롭 안내
- 백엔드: PIL로 800x800 리사이즈 + 썸네일 생성
- 기존 URL 교체 기능과 탭 방식으로 통합
버그 수정:
- closeReplaceModal() 호출 전 변수 복사로 null 전송 문제 해결
- None 값 방어 코드 추가
Docs: TROUBLESHOOTING-CAMERA-UPLOAD.md 추가
크롤러 (utils/yakkok_crawler.py):
- yakkok.com에서 제품 검색 및 이미지 추출
- MSSQL 오늘 판매 품목 자동 조회
- base64 변환 후 SQLite 저장
- CLI 지원 (--today, --product)
DB (product_images.db):
- 바코드, 제품명, 이미지(base64), 상태 저장
- 크롤링 로그 테이블
어드민 페이지 (/admin/product-images):
- 이미지 목록/검색/필터
- 통계 (성공/실패/대기)
- 상세 보기/삭제
- 오늘 판매 제품 일괄 크롤링
API:
- GET /api/admin/product-images
- GET /api/admin/product-images/<barcode>
- POST /api/admin/product-images/crawl-today
- DELETE /api/admin/product-images/<barcode>
POS 상세 패널:
- 품목 목록에 💊 인쇄 버튼 추가
- 프리셋 있으면 → 바로 인쇄
- 프리셋 없으면 → 새 창으로 등록 페이지 열기
API:
- /api/admin/pos-live/detail에 barcode 필드 추가
OTC 라벨 관리 페이지:
- URL 파라미터(barcode, name) 자동 처리
- POS에서 넘어올 때 자동으로 해당 약품 로드
DB:
- otc_label_presets 테이블 추가 (SQLite)
- 바코드 기준 오버라이드 데이터 저장
Backend:
- utils/otc_label_printer.py: 라벨 이미지 생성 + Brother QL-810W 출력
- API: CRUD + 미리보기 렌더링 + MSSQL 약품 검색
Frontend:
- /admin/otc-labels: 관리 페이지
- 실시간 미리보기
- 저장된 프리셋 목록
- 바코드/이름 검색 → 프리셋 편집 → 인쇄
API:
- /api/admin/pos-live에 pets 배열 추가
- 적립된 회원의 반려동물 정보 조회 (이름, 종류, 품종, 사진)
테이블 (바깥):
- 적립 열에 반려동물 아이콘 표시 (🐕🐈)
상세 패널:
- 반려동물 카드 섹션 추가
- 사진 + 이름 + 품종 표시
- 노란색 그라데이션 카드 스타일
- POST /api/admin/qr/generate: QR 토큰 생성 + 미리보기
- POST /api/admin/qr/print: Brother QL / POS 프린터 출력
- 프론트: QR 발행 버튼, 프린터 선택 모달
- 기존 qr_token_generator, qr_label_printer 모듈 활용
- pets 테이블 추가 (이름, 종류, 품종, 사진 등)
- 반려동물 CRUD API (/api/pets)
- 확장 마이페이지 (/mypage) - 카카오 로그인 기반
- 기존 마이페이지에 퀵 메뉴 추가 (반려동물/쿠폰/구매내역/내정보)
- 카카오 로그인 시 세션에 user_id 저장
- 동물약 APC 매핑 가이드 문서 추가
- /api/members/history/<phone>: 통합 이력 조회 API
- 마일리지 적립/사용 내역 (SQLite)
- POS 구매 이력 (MSSQL - 전화번호→고객코드 매핑)
- 세련된 UI: 탭 전환, 거래 카드, 구매 카드
- 상세에서 바로 메시지 발송 가능
- /admin/members: 회원 검색 페이지 (팜IT3000 CD_PERSON)
- /api/members/search: 이름/전화번호 검색 API (TEL_NO, PHONE, PHONE2)
- /api/members/<cuscode>: 회원 상세 + 메모 조회 API
- /api/message/send: 알림톡/SMS 발송 API (테스트 모드)
- 대시보드 헤더에 회원검색 탭 추가
- 다중 선택 + 일괄 발송 UI
- /admin/products: 전체 제품 검색 페이지 (OTC)
- /api/products: 제품 검색 API (세트상품 바코드 포함)
- qr_printer.py: Brother QL-710W 프린터 연동
- /api/qr-print, /api/qr-preview: QR 라벨 인쇄/미리보기 API
- 판매상세 페이지에 QR 인쇄 버튼 추가
- 수량 선택 UI (+/- 버튼, 최대 10장)
- 세트상품 제조사 표시 개선
- 대시보드 헤더에 제품검색/판매조회 탭 추가
- generate_upsell_real(): MSSQL 최근 30일 판매 TOP 40 제품 목록을 AI에 제공
- AI가 실제 약국 보유 제품 중에서만 선택하여 추천
- 실데이터 실패 시 기존 자유 생성(generate_upsell) fallback
- 기존 generate_upsell은 그대로 보존
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- /admin/ai-crm: AI 업셀링 추천 생성 현황 대시보드 (통계 카드 + 로그 테이블 + 아코디언 상세)
- 마이페이지 바텀시트: 터치 드래그로 닫기 기능 추가 (80px 임계값)
- Windows 콘솔 UTF-8 인코딩 강제 (app.py, clawdbot_client.py)
- admin.html 헤더에 AI CRM 네비 링크 추가
- docs: ai-upselling-crm.md, windows-utf8-encoding.md 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
키오스크 적립 시 Clawdbot Gateway(Claude Max)를 통해 구매 이력 기반
맞춤 제품 추천을 생성하고, 마이페이지 방문 시 바텀시트 팝업으로 표시.
- ai_recommendations SQLite 테이블 추가 (스키마 + 마이그레이션)
- clawdbot_client.py: Gateway WebSocket 프로토콜 v3 Python 클라이언트
- app.py: 추천 생성 + GET/POST API 엔드포인트
- my_page.html: 바텀시트 UI (슬라이드업 애니메이션, 1.5초 후 자동 표시)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- _handle_mypage_kakao_callback()에서 link_kakao_identity() 호출 추가
- 키오스크(번호) → 알림톡 → 카카오 로그인 시 자동 머지
- "고객" 이름 → 카카오 실명으로 자동 업데이트
- 케이스별 시나리오 문서 추가 (docs/user-identity-merge.md)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 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>
- 어드민 최근 적립 내역에서 행 클릭 시 MSSQL 품목 상세 모달 표시
- transaction_id가 있는 행만 클릭 가능 (돋보기 아이콘 표시)
- 키오스크 품목 목록 표시, 세로 모니터 반응형 레이아웃 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 키오스크 전체화면 웹 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>
- 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>
- 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>
- /signup 회원가입 페이지 (이름 + 전화번호 + 개인정보 동의)
- /api/signup API (get_or_create_user + 세션 저장)
- 카카오 간편 가입 버튼 (카카오 로그인으로 가입)
- 홈 화면에 회원가입 메뉴 추가
- 이미 로그인 시 /signup 접근하면 마이페이지로 리다이렉트
- 카카오 전화번호 수집 신청용 수집 사유 + 시나리오 문서
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 인라인 HTML → index.html 템플릿으로 전환
- HTML5 QR 코드 스캐너 (html5-qrcode 라이브러리)
- 로그인 상태에 따라 다른 메뉴 표시:
- 비로그인: 카카오로 시작하기 + 마일리지 조회
- 로그인: 내 마일리지 + 로그아웃
- QR 스캔 → /claim 자동 이동 (로그인 시 자동 적립)
- 디자인 시스템 통일 (Noto Sans KR, 보라색 그라디언트)
- PWA 메타 태그 + 개인정보 처리방침 푸터 링크
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 세션 설정: 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>