Files
sam-docs/dev/dev_plans/receiving-inspection-integration-plan.md
김보곤 a78d7f3767 docs: [receiving] 입고등록 × 수입검사 연동 계획 작성
- 27종 수입검사 템플릿 ↔ 원자재 매핑 전략 (1:N)
- Phase 1~3 구현 계획 (데이터 매핑 → API 보강 → React 연동)
- 기존 인프라 분석 (DocumentService::resolve, linked_item_ids)
2026-03-17 21:58:07 +09:00

215 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 입고등록 × 수입검사 연동 계획
> **작성일**: 2026-03-17
> **상태**: 설계 중
> **담당**: R&D실 (API) + 프론트엔드 개발자 (React)
---
## 1. 개요
### 1.1 목적
입고등록 시 선택한 품목에 맞는 수입검사 성적서(27종)를 자동 매칭하여 검사를 수행하고, 검사 결과를 입고 데이터에 반영한다.
### 1.2 현재 문제
| 항목 | 현황 |
|------|------|
| 수입검사 정보 섹션 | 검사일/검사결과 **입력 UI 없음** (readOnly 표시만) |
| 수입검사하기 버튼 | 핸들러는 있으나 **화면에 렌더링 안 됨** |
| 검사 등록 (InspectionCreate.tsx) | **API 미연동** (console.log만) |
| 품목 ↔ 템플릿 매핑 | `linked_item_ids` 인프라 있으나 **데이터 미설정** |
---
## 2. 시스템 구조 (기존 인프라)
### 2.1 템플릿 ↔ 품목 매핑
```
MNG 문서양식관리
├─ document_templates (27종 수입검사 양식)
│ ├─ category: '수입검사'
│ ├─ linked_item_ids: [101, 102, 103] ← 이 품목들이 이 검사서 사용
│ └─ sections → section_items (검사항목 N개, 동적)
API DocumentService::resolve()
├─ 입력: { category: 'incoming_inspection', item_id: 101 }
├─ 로직: linked_item_ids에 해당 item_id가 포함된 템플릿 검색
└─ 출력: { template: {...}, is_new: true/false }
```
### 2.2 입고 → 수입검사 흐름 (목표)
```
입고등록
↓ 품목 선택
↓ checkInspectionTemplate(item_id)
├─ 템플릿 있음 → [수입검사하기] 버튼 표시
│ ↓ 클릭
│ ↓ DocumentService::resolve(incoming_inspection, item_id)
│ ↓ 해당 품목의 검사항목 동적 로드
│ ↓ 검사 수행 → Document 저장
│ ↓ 입고의 inspectionDate/inspectionResult 자동 반영
│ └─ 입고 상태: receiving_pending → inspection_pending → receiving_pending
└─ 템플릿 없음 → 수입검사 불필요 (바로 입고처리 가능)
```
---
## 3. 27종 검사서 ↔ 원자재 매핑 전략
### 3.1 매핑 방식: 1:N (한 템플릿 → 여러 품목)
```
수입검사 템플릿 A (SUS 판재)
└─ linked_item_ids: [SUS304 3T, SUS304 2T, SUS316 3T, ...]
수입검사 템플릿 B (GI 도금강판)
└─ linked_item_ids: [GI 0.5T, GI 0.8T, GI 1.0T, ...]
수입검사 템플릿 C (알루미늄)
└─ linked_item_ids: [AL 40x40, AL 30x30, ...]
수입검사 템플릿 D (DC 모터)
└─ linked_item_ids: [DC모터 24V, DC모터 12V, ...]
```
### 3.2 매핑 기준
| 기준 | 설명 |
|------|------|
| **재질 그룹** | SUS, GI, AL, 플라스틱 등 동일 재질은 같은 검사항목 |
| **형태 그룹** | 판재, 코일, 프로파일, 봉강 등 형태별 검사 기준 차이 |
| **부품 유형** | 모터, 전자부품, 볼트/너트, 접착제 등 |
### 3.3 매핑 설정 방법
MNG 문서양식관리에서 각 수입검사 템플릿 수정 시 **연결 품목**을 설정한다.
```
MNG > 문서 > 문서양식관리 > [수입검사 템플릿 선택] > 수정
→ "연결 품목" 영역에서 해당 검사서를 사용할 품목 선택
→ linked_item_ids에 자동 저장
```
> **중복 방지**: 동일 category(수입검사) 내에서 같은 품목을 두 템플릿에 중복 연결 불가 (MNG에서 자동 검증).
### 3.4 매핑 검증
매핑 완료 후 아래 체크:
```
✅ 모든 원자재(RM) 품목이 최소 1개 수입검사 템플릿에 연결됨
✅ 동일 품목이 2개 이상 수입검사 템플릿에 중복 연결되지 않음
✅ 템플릿 없는 품목은 입고 시 수입검사 건너뜀 (정상 동작)
```
---
## 4. 구현 계획
### Phase 1: 데이터 매핑 (MNG 작업, 코드 변경 없음)
MNG 문서양식관리에서 27종 수입검사 템플릿의 `linked_item_ids`에 원자재 품목 연결.
| 작업 | 담당 | 비고 |
|------|------|------|
| 27종 검사서 ↔ 원자재 매핑표 작성 | R&D실 | 재질/형태별 그룹핑 |
| MNG에서 linked_item_ids 설정 | R&D실 | 각 템플릿 수정 |
| 매핑 검증 (누락/중복 체크) | R&D실 | API로 검증 |
### Phase 2: API 보강 (백엔드)
| 작업 | 상태 | 설명 |
|------|:----:|------|
| `DocumentService::resolve()` | ✅ 구현됨 | 품목 → 템플릿 매칭 |
| `ReceivingService::getItemsWithInspectionTemplate()` | ✅ 구현됨 | 입고 목록 필터 |
| 수입검사 결과 → Receiving options 반영 | ⚠️ 보강 필요 | 검사완료 시 inspectionDate/Result 자동 설정 |
| 입고 상태 전이 (inspection_pending) | ⚠️ 보강 필요 | 검사 시작 → 검사대기, 검사완료 → 입고대기 |
### Phase 3: React UI 연동 (프론트엔드)
| 작업 | 설명 |
|------|------|
| 수입검사하기 버튼 표시 | `hasInspectionTemplate` 기반 조건부 렌더링 |
| 수입검사 모달 연동 | `DocumentService::resolve()` → 검사항목 동적 로드 |
| 검사결과 저장 | `POST /api/v1/documents` → Document 생성 |
| 입고 데이터 반영 | 검사완료 → inspectionDate/Result 자동 갱신 |
---
## 5. 관련 API 엔드포인트
### 5.1 기존 (구현 완료)
```
GET /api/v1/documents/resolve
params: { category: 'incoming_inspection', item_id: 101 }
→ 해당 품목의 수입검사 템플릿 + 기존 문서 반환
POST /api/v1/documents
→ 검사 결과 문서 저장
GET /api/v1/items/{id}
→ 응답에 has_inspection_template 포함
```
### 5.2 보강 필요
```
PATCH /api/v1/receivings/{id}/inspection-result (신규)
body: { inspection_date, inspection_result, document_id? }
→ Receiving.options의 검사일/검사결과 업데이트
→ 상태 전이 (inspection_pending → receiving_pending)
```
---
## 6. 입고등록 화면 변경 (프론트엔드)
### 수입검사 정보 섹션 개선
```
현재:
┌─────────────────────────────────────────┐
│ 수입검사 정보 │
│ 검사일: (빈 readOnly) │
│ 검사결과: (빈 readOnly) │
│ 업체 제공 성적서: [파일 업로드] │
└─────────────────────────────────────────┘
변경 후:
┌─────────────────────────────────────────┐
│ 수입검사 정보 [수입검사하기] │ ← 버튼 (템플릿 있을 때만)
│ 검사일: 2026-03-17 (자동) │
│ 검사결과: 합격 (자동) │
│ 업체 제공 성적서: [파일 업로드] │
│ │
│ [수입검사성적서 보기] │ ← 검사 완료 후 표시
└─────────────────────────────────────────┘
```
### 버튼 표시 조건
| 버튼 | 조건 |
|------|------|
| 수입검사하기 | `hasInspectionTemplate === true` && 검사 미완료 |
| 수입검사성적서 보기 | 검사 완료 (inspectionResult 존재) |
---
## 관련 문서
- [수입검사 성적서 연동 계획](incoming-inspection-document-integration-plan.md) — 기존 상세 설계
- [수입검사 템플릿 계획](incoming-inspection-templates-plan.md) — 템플릿 생성 계획
- [채번규칙](../../rules/numbering-rules.md) — 원자재 로트번호 채번
- [입고관리 분석](receiving-management-analysis-plan.md) — 입고 시스템 현황
---
**최종 업데이트**: 2026-03-17