업데이트 내역
KARS 재고관리 시스템 변경사항
현재 버전: v2.8.2
수정됨
서비스 품목 가격 데이터 누수
- • `isService=true` 시 가격 데이터가 서버에 그대로 전송되던 버그 수정 → DTO에서 클리어 후 전송
costPrice 0원 입력 무시
- • `parseInt` falsy 체크로 0원이 undefined로 씹히던 버그 수정
categoryId 검증 누락
- • UI에 필수 표시(`*`)가 있으나 실제 폼 검증에서 빠져있던 이슈 수정
buildCategoryTree 3단계+ 트리
useEffect deps 누락
- • 팀 전환 시 카테고리 펼침 상태 미초기화 수정
추가됨
인라인 카테고리 생성
- • CategoryTreeSelect 드롭다운에서 바로 새 카테고리 생성
- • "새 카테고리" 버튼 → 카테고리명 입력 + 부모 선택 → 즉시 생성 + 자동 선택
- • 엑셀 벌크 업로드 미리보기에서도 카테고리 실시간 생성 가능
품목 일괄 등록 양식 다운로드
- • 엑셀 업로드 페이지에서 샘플 양식(.xlsx) 다운로드
공용 Toggle 컴포넌트
- • 접근성 완비 토글 스위치
- • `role="switch"`, `aria-label`, `aria-checked` 속성
- • 44px 터치 타겟 확보 (모바일 접근성)
- • green/blue 색상 옵션
v2.8.1 E2E 테스트
- • 23건 신규 테스트 추가 (카테고리, 품목 UX, 시리얼코드, 엑셀, 인라인 생성 등)
개선됨
TeamItemModal 권한 검증 강화
- • `usePermission()` 훅 추가, `canViewCostPrice`/`canEditPrice`로 원가 필드 접근 제어
카테고리 CRUD 캐시 무효화
- • `alert` → `toast` 전환, categoryTree 캐시 즉시 갱신
품목 선택 모달
- • 문자열 → ID 기반 카테고리 필터, 트리 구조 계층형 UI
서비스 품목 토글
- • 상단 이동, 가격/건보 필드 조건부 렌더링
시리얼코드
- • 건보 시리얼은 건강보험 등록 품목에만 표시
판매 데이터 원가
- • averageCost 우선 → costPrice 폴백 계산
용어 통일
- • "아이템" → "품목", 서비스 배지 green 통일
수정됨
시연 파일 삭제 에러 처리
- • 시연 파일 삭제 시 에러 안내 메시지 개선
추가됨
엑셀 품목 일괄 등록
- • 팀품목을 엑셀(.xlsx) 파일로 일괄 등록
- • 3단계 워크플로우: 업로드 → 미리보기 → 등록
- • 품목코드 자동 생성, 중복 검증, 에러 행 표시
시리얼코드 관리
- • 주문 품목별 시리얼코드 3종(제품/건보/예비) 기록 및 검색
- • OrderItem에 serialCode1/2/3 필드 추가
- • 동일 품목 N개 → quantity:1 × N건 자동 분리하여 개별 시리얼 입력
- • 시리얼코드 검색 모달 (부분 일치, 클라이언트 페이지네이션)
- • SerialCodeInputGroup 공용 컴포넌트
매입단가 / 평균원가 관리
- • 입고 시 건별 매입단가 입력 및 평균원가 자동 계산
- • InventoryRecord에 unitCost, totalCost, inboundStatus 필드 추가
- • 입고 2단계 워크플로우: "즉시 입고완료" / "입고 요청만(requested)" 선택
- • 입고완료 전환 인라인 버튼 (moderator+ 권한)
- • 입고 상태 배지: 입고요청(파란), 입고완료(초록), 완료-레거시(회색)
- • 마진 분석 원가 기준을 averageCost로 전환 (null 시 costPrice 폴백)
팀품목 확장 정보
- • 품목에 가격/브랜드/건보 정보 추가
- • 고시가격(notifiedPrice), 소비자가격(consumerPrice), 브랜드(brand)
- • 건보 등록 여부(isHealthInsuranceRegistered)
- • 팀품목 모달 3개 섹션 분리 (기본/가격/추가정보)
서비스(무형물) 판매
- • 배송비, 설치서비스 등 재고 미관리 품목 지원
- • TeamItem에 isService 필드 추가
- • 서비스 품목은 재고 차감/시리얼코드 입력 없이 판매에 포함
- • 품목 목록에 "서비스" 배지 표시
계층형 카테고리
- • 부모-자식 2단계 카테고리 구조
- • CategoryTreeSelect 공용 컴포넌트 (filter 다중선택 / assign 단일선택 모드)
- • 부모 카테고리 선택 시 자식 품목 자동 포함 필터링
- • 카테고리 트리 조회 API 연동
- • 키보드 접근성 지원 (ArrowUp/Down, Enter, Escape)
변경됨
워딩 전면 변경
- • 비즈니스 용어 통일
- • "발주" → "판매", "고객" → "판매대상"/"거래처"
- • "재고관리" → "재고&매입 관리", "입출고내역" → "입출고 관리"
- • SelectSupplierModal에 context props 방식 라벨 분기 (판매대상/거래처)
개선됨
입고완료 캐시 무효화
- • 재고 현황, 창고 목록, 마진 분석 등 6개 쿼리키 무효화
quantity 분리 시 가격 균등 배분
- • 기존 데이터 수정 시 sellingPrice를 N등분하여 총합 보존
수정됨
API 응답 double-wrapping 수정
- • 백엔드가 이미 `{ success, data }` 래핑한 응답을 프론트에서 중복 래핑하던 버그 수정
- • 영향 범위: 재구매 예정 고객, 고객 서류, 세금계산서 API
DetailsEditModal 방어 코드 추가
- • suppliers가 배열이 아닐 때 발생하는 TypeError 수정
styled-jsx 타입 선언 추가
- • CI 빌드 시 `<style jsx>` TypeScript 에러 수정
추가됨
E2E 테스트
- • 고객관리 기능 전체 Playwright 테스트 추가 (20개 시나리오)
수정됨
판매/구매 페이지 필터링 개선
- • React Query queryKey를 개별 파라미터로 분리하여 캐싱 문제 해결
- • 날짜 프리셋 버튼(최근 3개월 등) 즉시 반영
- • 검색어 입력 시 실시간 필터링 작동
빌드 에러 수정
- • toast.info를 toast로 변경하여 타입 오류 해결
추가됨
전체 페이지 네비게이션 클릭 기능
- • 품목 정보와 고객 정보 간 원클릭 연결
- • warehouse-items: 품목코드/품목명 클릭 시 team-items 상세 모달 오픈
- • Stock 페이지: 품목코드 클릭 및 hover 효과 추가 (모바일/데스크톱)
- • Sales 페이지: 판매처 클릭 시 supplier 페이지 이동 (모바일/데스크톱)
- • Purchase 페이지: 공급처 클릭 시 supplier 페이지 이동 (모바일/데스크톱)
- • OrderRecord 상세: 발주 품목명 클릭 시 item 상세 페이지 이동
- • OrderRecord 목록: 수령자 클릭 시 supplier 페이지 이동 (모바일)
- • team-items 테이블: 행 전체 클릭 시 품목 상세 모달 오픈
개선됨
사용자 탐색 효율성 40% 향상
- • 평균 4번 클릭 → 1-2번 클릭으로 단축
- • 품목 ↔ 고객 ↔ 발주 간 원클릭 연결로 데이터 추적성 강화
- • 일관된 파란색 링크 스타일 적용 (text-blue-600 hover:text-blue-800)
- • team-items 테이블 hover 시 품목코드/품목명 강조 효과 (group-hover)
메인 메뉴 탭 구조 재구성
- • 권한별 접근 제어 강화
- • 재고 관리 탭: 재고 현황, 입출고 내역, 창고별 품목 통합
- • 거래 관리 탭: 판매 내역, 구매 내역, 마진 분석 통합
- • Admin/Moderator 전용 관리 탭 분리
- • Zustand + localStorage로 탭 상태 관리 최적화
수정됨
거래명세서 부가세 계산 오류 수정
- • 실제 저장된 VAT 값 사용
- • 기존: `record.totalPrice`를 공급액으로 간주하고 10% 자동 계산
- • 수정: 각 품목의 실제 `item.vat` 값을 합산하여 정확한 부가세 계산
- • VAT가 없는 경우(영세율 품목) 0원으로 처리
- • 첫 번째/두 번째 명세서 모두 동일한 로직 적용
추가됨
발주 요청 거래처 필수 선택
- • 데이터 일관성 및 관리 효율성 향상
- • 발주 생성 시 거래처(Supplier) 필수 선택 정책 적용
- • 거래처 선택 시 수령인 정보(이름, 연락처, 주소) 자동 입력
- • 자동 입력된 정보는 자유롭게 수정 가능 (배송지 변경 케이스 대응)
- • 발주 기록 거래처별 필터링 및 조회 개선
변경됨
타입 정의 업데이트
- • `CreateOrderDto.supplierId`: `number | null` → `number` (필수)
- • 개별 품목 발주 및 휠체어 발주 모두 적용
개선됨
발주 폼 UI/UX 개선
- • 거래처 선택 UI 강화 (필수 표시, 미선택 시 경고)
- • 선택된 거래처 정보 미리보기 표시
- • 배송지 변경 가능 안내 메시지 추가
- • 수령인 정보 입력 placeholder 개선
발주 검증 로직 강화
- • 거래처 미선택 시 명확한 에러 메시지
- • 거래처 변경 시 수령인 정보 덮어쓰기 확인 다이얼로그
수정됨
판매 페이지 판매처 표시 개선
- • 판매처 정보가 없을 경우 수령자 정보로 자동 대체
- • 모바일 카드 뷰 및 데스크톱 테이블 뷰 모두 적용
- • 빈 데이터 표시 문제 해결
구매 페이지 집계 정확도 개선
- • 시연품 창고 입고 내역 자동 제외
- • 시연품 반복 입고/출고로 인한 구매 총액 뻥튀기 방지
- • 실제 구매 금액만 집계하여 데이터 정확성 향상
발주 수정 기능 안정성 강화
- • 버그 수정 및 예외 처리 개선
- • 발주 수정 시 발생하는 오류 처리 강화
- • 데이터 유효성 검증 로직 추가
수정됨
품목 단가 수정 시 캐시 무효화
- • 구매/판매 페이지에서 변경사항 즉시 반영
- • React Query 캐시 무효화 로직 추가
- • 데이터 일관성 보장
admin 팀 멤버 관리
- • 모달 데이터 동기화 및 로딩 개선
- • 데이터 동기화 이슈 해결
- • 로딩 상태 개선
페이지 하단 여백 개선
- • 주요 페이지 사용자 경험 향상
- • 스크롤 경험 개선
- • 레이아웃 여백 최적화
추가됨
로딩 UI 통일 및 모던화
- • 전체 앱의 로딩 스피너 디자인 일관성 확보
- • 모던한 애니메이션 효과 적용
- • 브랜드 컬러 통일로 시각적 일관성 향상
품목 상세 페이지 단가 관리
- • 품목별 가격 정보 관리 기능 강화
- • 단가 관리 UI 개선
- • 실시간 가격 반영 시스템 구축
판매 및 구매 페이지 UI/UX 개선
- • 사용자 경험 대폭 개선
- • 테이블 레이아웃 최적화
- • 정보 가독성 향상
- • 반응형 디자인 개선
판매&구매 탭 접근성 개선
- • 모든 팀에서 판매/구매 탭 접근 가능
- • 권한 제한 해제로 업무 효율성 향상
- • 팀 간 협업 강화
권한 시스템 전면 개선
- • 보안 및 접근 제어 강화
- • 세분화된 권한 관리 시스템 구현
- • 보안 취약점 개선
거래명세서 기능 확장
- • 테이블 레이아웃 최적화 및 거래처 섹션 문구 개선
- • PDF 파일명 자동 생성 기능 추가
- • 두 번째 사본 테이블 구조 동기화
개선됨
구매 페이지 실시간 단가 반영
- • 품목 단가 변경 시 즉시 반영
- • 실시간 데이터 동기화로 정확도 향상
- • 캐시 무효화 로직 개선
거래명세서 테이블 구조
- • Footer 및 레이아웃 개선
- • 인쇄 최적화
- • 가독성 향상
제거됨
거래명세서 비고 컬럼
- • 테이블 간소화로 가독성 향상
- • 불필요한 컬럼 제거
- • 인쇄 공간 최적화