# 현장관리 분석 결과 > 분석 일시: 2024-12-18 > 분석 대상: design/mes기획서_리액트 (디자인팀 기획 사이트) ## 분석 목적 디자인팀에서 제작한 기획 사이트의 현장관리 기능을 분석하여 API 개발에 필요한 스펙을 추출합니다. --- ## UI 스크린샷 ### 1. 현장 목록 페이지 ![현장 목록](screenshots/01-site-list.png) **주요 요소:** - 테이블 컬럼: 번호, 현장코드, 현장명, 거래처, 주소, 등록일 - 검색 기능 - 현장 등록 버튼 --- ### 2. 현장 상세 페이지 ![현장 상세](screenshots/02-site-detail.png) **주요 섹션:** **기본 정보:** | 필드 | 설명 | |------|------| | 현장코드 | 자동 생성 | | 현장명 | 현장 이름 | | 진행상태 | 수주확정, 생산중, 출하대기, 설치중, 설치완료 | | 거래처 | 연결된 거래처 | | 설치예정일 | 예정 날짜 | | 진행률 | 0~100% | | 현장주소 | 주소 | | 현장연락처 | 연락처 | | 설치담당자 | 담당자명 | | 담당자 연락처 | 담당자 연락처 | | 특이사항 | 메모 | **수주내역:** - 연결된 수주 목록 표시 - 수주번호, 품목, 수량, 금액 등 **출고내역:** - 출고된 품목 목록 - 출고일, 수량, 상태 등 **변경이력:** - 상태 변경 이력 - 변경일, 변경내용, 변경자 **헤더 버튼:** - 목록 - 수정 - 삭제 --- ### 3. 현장 등록 폼 ![현장 등록](screenshots/03-site-create.png) **입력 섹션:** **현장 정보:** | 필드명 | 타입 | 필수 | 비고 | |--------|------|------|------| | 현장명 | text | ✅ | | | 거래처 | select/search | ✅ | 거래처 선택 | | 현장주소 | text | | 우편번호 검색 | | 현장연락처 | text | | | | 진행상태 | select | | 기본: 수주확정 | **설치 담당자:** | 필드명 | 타입 | 필수 | 비고 | |--------|------|------|------| | 담당자명 | text | | | | 연락처 | text | | | | 설치예정일 | date | | | | 설치완료일 | date | | | | 특이사항 | textarea | | | --- ## 데이터 스키마 ### Site (현장) ``` sites ├── id (PK) ├── tenant_id (FK) ├── site_code (UNIQUE) - 자동 채번 ├── name - 현장명 ├── customer_id (FK) - 거래처 ├── customer_name - 거래처명 (스냅샷) ├── status - 진행상태 ├── progress_rate - 진행률 (0-100) ├── address - 현장주소 ├── address_detail - 상세주소 ├── phone - 현장연락처 ├── installer_name - 설치담당자 ├── installer_phone - 담당자 연락처 ├── scheduled_date - 설치예정일 ├── completed_date - 설치완료일 ├── note - 특이사항 ├── created_at ├── updated_at └── deleted_at ``` ### SiteHistory (현장 변경이력) ``` site_histories ├── id (PK) ├── site_id (FK) ├── changed_field - 변경 필드 ├── old_value - 이전 값 ├── new_value - 변경 값 ├── changed_by - 변경자 ├── changed_at - 변경일시 └── note - 비고 ``` --- ## 상태 흐름 ``` 수주확정 → 생산중 → 출하대기 → 설치중 → 설치완료 ``` | 상태 | 설명 | 진행률 범위 | |------|------|-------------| | 수주확정 | 수주 완료, 생산 대기 | 0-10% | | 생산중 | 제품 생산 진행 | 10-50% | | 출하대기 | 생산 완료, 출하 대기 | 50-70% | | 설치중 | 현장 설치 진행 | 70-90% | | 설치완료 | 설치 완료 | 100% | --- ## API 스펙 ### 현장 CRUD ``` GET /api/sites - 현장 목록 GET /api/sites/{id} - 현장 상세 POST /api/sites - 현장 등록 PUT /api/sites/{id} - 현장 수정 DELETE /api/sites/{id} - 현장 삭제 DELETE /api/sites - 현장 일괄 삭제 ``` ### 현장 관련 조회 ``` GET /api/sites/{id}/orders - 현장별 수주 내역 GET /api/sites/{id}/shipments - 현장별 출고 내역 GET /api/sites/{id}/history - 현장 변경 이력 ``` ### 현장 상태 변경 ``` POST /api/sites/{id}/status - 상태 변경 ``` **Request Body:** ```json { "status": "생산중", "note": "생산 시작" } ``` ### 목록 조회 Query Parameters | 파라미터 | 타입 | 설명 | |----------|------|------| | status | string | 진행상태 필터 | | customer_id | number | 거래처 필터 | | search | string | 검색어 (현장코드, 현장명) | | page | number | 페이지 번호 | | per_page | number | 페이지당 개수 | --- ## 채번 규칙 ``` 현장코드: S-{연도2자리}{월2자리}-{순번3자리} 예시: S-2412-001, S-2412-002 ``` --- ## 연관 관계 ### 현장과 수주 연결 ``` sites 1:N orders (site_id) - 하나의 현장에 여러 수주가 연결될 수 있음 - 수주 생성 시 현장 자동 생성 또는 기존 현장 선택 ``` ### 현장과 거래처 연결 ``` customers 1:N sites (customer_id) - 하나의 거래처가 여러 현장을 가질 수 있음 ``` --- ## 진행률 자동 계산 ```javascript // 수주 품목 기준 진행률 계산 progress_rate = (완료_품목_수 / 전체_품목_수) * 100 // 또는 상태별 기본 진행률 status_progress = { '수주확정': 10, '생산중': 30, '출하대기': 60, '설치중': 80, '설치완료': 100 } ```