# 단가관리 분석 결과 > 분석 일시: 2024-12-18 > 분석 대상: design/mes기획서_리액트 (디자인팀 기획 사이트) ## 분석 목적 디자인팀에서 제작한 기획 사이트의 단가관리 기능을 분석하여 API 개발에 필요한 스펙을 추출합니다. --- ## UI 스크린샷 ### 1. 단가 목록 페이지 ![단가 목록](screenshots/01-price-list.png) **주요 요소:** **상단 요약 카드 (4개):** | 항목 | 값 | 설명 | |------|-----|------| | 전체 품목 | 70 | 등록된 총 품목 수 | | 활성 단가 | 70 | 활성 상태인 단가 수 | | 거래처그룹 | 4 | 거래처 그룹 수 | | 품목유형 | 5 | 품목 유형 수 | **탭 필터 (품목유형별):** | 탭 | 건수 | |-----|------| | 전체 | 70 | | 제품 | 0 | | 부품 | 36 | | 부자재 | 0 | | 원자재 | 15 | | 소모품 | 0 | **테이블 컬럼:** | 컬럼 | 설명 | |------|------| | 번호 | 순번 | | 품목유형 | 서비스, 원자재, 부품, 반제품 등 | | 품목코드 | 품목 식별 코드 | | 품목명 | 품목 이름 | | 규격 | 규격 정보 | | 단위 | EA, SET, KG, M 등 | | 매입단가 | 구매 단가 | | 가공비 | 가공 비용 | | LOSS(%) | 손실률 | | 판매단가 | 판매 가격 | | 마진율 | (판매단가-매입단가)/판매단가 * 100 | | 적용일 | 단가 적용 시작일 | | 상태 | 활성/비활성 | --- ## 데이터 분석 (캡처된 품목 기준) ### 품목유형별 분포 | 품목유형 | 건수 | 주요 품목 | |----------|------|-----------| | 서비스 | 1 | 검사비 | | 원자재 | 15 | 하부BASE, 상부덮개, 마구리, 평철, 엘바, 하장바, 각파이프, 조인트바, 환봉 | | 부품 | 36 | 받침용앵글, 브라켓, 감기샤프트, 연동제어기, 전동개폐기 | | 반제품 | 18 | 연기차단재, 하단마감재, 케이스, 가이드레일 | ### 대표 품목 예시 **원자재:** | 품목코드 | 품목명 | 규격 | 단위 | 매입단가 | 판매단가 | 마진율 | |----------|--------|------|------|----------|----------|--------| | 하부BASE-코너형 | 하부BASE(코너형) | - | SET | 30,000 | 45,000 | 50% | | 각파이프-30×30L6000 | 각파이프 30×30 L:6000 | 30×30 | EA | 15,000 | 22,500 | 50% | **부품:** | 품목코드 | 품목명 | 규격 | 단위 | 매입단가 | 판매단가 | 마진율 | |----------|--------|------|------|----------|----------|--------| | 전동개폐기-220V300KG유선 | 전동개폐기 300KG 220V 유선 | 300 | EA | 350,000 | 480,000 | 37% | | 감기샤프트-76.3×2.8TL3000 | 감기샤프트 76.3×2.8T L:3000 | 76 | EA | 55,000 | 80,000 | 45% | **반제품:** | 품목코드 | 품목명 | 규격 | 단위 | 매입단가 | 판매단가 | 마진율 | |----------|--------|------|------|----------|----------|--------| | RC30 | 가이드레일(벽면형) C형 3000 | 3000 | EA | 18,000 | 27,000 | 50% | | CB30 | 케이스(후면코너부) 3000 | 3000 | EA | 20,000 | 30,000 | 50% | --- ## 데이터 스키마 ### Price (단가) ``` prices ├── id (PK) ├── tenant_id (FK) ├── item_type - 품목유형 (제품, 부품, 부자재, 원자재, 소모품, 서비스, 반제품) ├── item_code (UNIQUE) - 품목코드 ├── item_name - 품목명 ├── specification - 규격 ├── unit - 단위 (EA, SET, KG, M, ㎡ 등) ├── purchase_price - 매입단가 ├── processing_cost - 가공비 ├── loss_rate - 손실률 (%) ├── selling_price - 판매단가 ├── margin_rate - 마진율 (%) - 자동계산 ├── effective_date - 적용일 ├── status - 상태 (활성/비활성) ├── customer_group_id - 거래처그룹 (특별단가용) ├── note - 비고 ├── created_at ├── updated_at └── deleted_at ``` ### PriceHistory (단가 변경이력) ``` price_histories ├── id (PK) ├── price_id (FK) ├── previous_purchase_price ├── previous_selling_price ├── new_purchase_price ├── new_selling_price ├── changed_by ├── changed_at └── reason - 변경사유 ``` --- ## 품목유형 (item_type) | 유형 | 설명 | 예시 | |------|------|------| | 제품 | 완성품 | 방화스크린셔터, 방화슬랫셔터 | | 부품 | 조립 부품 | 전동개폐기, 감기샤프트, 브라켓 | | 반제품 | 중간 가공품 | 가이드레일, 케이스, 하단마감재 | | 원자재 | 원재료 | 철판, 파이프, 볼트 | | 부자재 | 보조재료 | 나사, 패킹, 접착제 | | 소모품 | 소모성 재료 | 장갑, 테이프, 라벨 | | 서비스 | 용역 | 검사비, 운송비, 설치비 | --- ## 단위 코드 | 단위 | 설명 | 사용 품목 | |------|------|-----------| | EA | 개 | 개별 품목 | | SET | 세트 | 세트 품목 | | KG | 킬로그램 | 중량 기준 | | M | 미터 | 길이 기준 | | ㎡ | 제곱미터 | 면적 기준 | | BOX | 박스 | 박스 단위 | --- ## 자동 계산 ### 마진율 계산 ```javascript margin_rate = ((selling_price - purchase_price) / selling_price) * 100 // 가공비와 손실률 포함 시 total_cost = purchase_price + processing_cost adjusted_cost = total_cost * (1 + loss_rate / 100) margin_rate = ((selling_price - adjusted_cost) / selling_price) * 100 ``` ### 손실률 적용 ```javascript // 실제 필요량 계산 required_qty = order_qty * (1 + loss_rate / 100) // 예: 100개 주문, 손실률 5% // required_qty = 100 * 1.05 = 105개 ``` --- ## API 스펙 ### 단가 CRUD ``` GET /api/prices - 단가 목록 GET /api/prices/{id} - 단가 상세 POST /api/prices - 단가 등록 PUT /api/prices/{id} - 단가 수정 DELETE /api/prices/{id} - 단가 삭제 DELETE /api/prices - 단가 일괄 삭제 ``` ### 단가 조회 (견적/수주용) ``` GET /api/prices/lookup - 품목코드로 단가 조회 ``` **Query Parameters:** | 파라미터 | 타입 | 설명 | |----------|------|------| | item_code | string | 품목코드 | | customer_group_id | number | 거래처그룹 (특별단가 적용) | ### 단가 이력 ``` GET /api/prices/{id}/history - 단가 변경 이력 ``` ### 목록 조회 Query Parameters | 파라미터 | 타입 | 설명 | |----------|------|------| | item_type | string | 품목유형 필터 | | status | string | 상태 필터 | | search | string | 검색어 (품목코드, 품목명, 규격) | | page | number | 페이지 번호 | | per_page | number | 페이지당 개수 | --- ## 거래처그룹 단가 ``` customer_group_prices ├── id (PK) ├── price_id (FK) ├── customer_group_id (FK) ├── special_price - 특별단가 ├── discount_rate - 할인율 (%) ├── effective_from - 적용 시작일 ├── effective_to - 적용 종료일 ├── status └── created_at ``` **특별단가 적용 우선순위:** 1. 거래처별 특별단가 2. 거래처그룹 특별단가 3. 기본 판매단가 --- ## 품목코드 규칙 ``` {품목명약어}-{규격} 예시: - 전동개폐기-220V300KG유선 - 감기샤프트-76.3×2.8TL3000 - RC30 (가이드레일 C형 3000) - CB30 (케이스 후면코너부 3000) ``` --- ## 통계 정보 | 항목 | 계산식 | |------|--------| | 전체 품목 | COUNT(*) | | 활성 단가 | COUNT(*) WHERE status = '활성' | | 거래처그룹 | COUNT(DISTINCT customer_group_id) | | 품목유형 | COUNT(DISTINCT item_type) | | 평균 마진율 | AVG(margin_rate) |