# 문서관리 시스템 - 마스터 진행 관리

> **작성일**: 2026-02-10
> **목적**: mng에서 문서양식(템플릿)을 관리하고, SAM(react)에서 JSON으로 소비하는 문서관리 시스템. 수입검사/중간검사/제품검사/작업일지 폼을 지원한다.
> **상태**: Phase 1~3 ✅, Phase 4 🔄, Phase 5.0 ✅, Phase 5.1 🔄, Phase 5.2 ✅, Phase 5.3 🔄 (5.3.1~3 ✅, 5.3.4 ⏳, mng 상세보기 완료)

---

## 🚀 새 세션 시작 가이드

> **이 문서만 보고 작업을 시작할 수 있도록 작성되었습니다.**

### 프로젝트 정보

| 항목 | 내용 |
|------|------|
| **SAM 루트** | `/Users/kent/Works/@KD_SAM/SAM/` (Git 저장소 아님) |
| **mng** | `/Users/kent/Works/@KD_SAM/SAM/mng/` — Laravel 12 + Blade + DaisyUI + HTMX + Alpine.js |
| **api** | `/Users/kent/Works/@KD_SAM/SAM/api/` — Laravel 12 REST API |
| **react** | `/Users/kent/Works/@KD_SAM/SAM/react/` — Next.js 15 프론트엔드 |
| **5130** | `/Users/kent/Works/@KD_SAM/SAM/5130/` — 레거시 (참조 전용) |
| **docs** | `/Users/kent/Works/@KD_SAM/SAM/docs/` — 기술 문서 |
| **mng URL** | `https://mng.sam.kr` (Docker 로컬, `admin.sam.kr` 동일) |
| **react URL** | `https://dev.sam.kr` (Docker 로컬) |
| **api URL** | `https://api.sam.kr` (Docker 로컬) |

> **Git**: api/, mng/, react/ 각각 독립 Git 저장소

### 세션 시작 체크리스트

```
1. 이 문서를 읽는다 (📍 현재 진행 상태 확인)
2. 다음 작업할 Phase의 상세 문서를 읽는다 (섹션 1 링크)
3. 해당 프로젝트의 CLAUDE.md를 읽는다 (mng/CLAUDE.md 또는 api/CLAUDE.md)
4. 작업 시작 전 사용자에게 확인
```

---

## 📍 현재 진행 상태

| 항목 | 내용 |
|------|------|
| **마지막 완료** | Phase 5.2 제품검사(FQC) 폼 구현 ✅ (5.2.1~5.2.5 전체 완료) (2026-02-12) |
| **미완료** | Phase 4.4 - 프론트엔드 담당자 협의 후 react 전환 결정 |
| **현재 작업** | Phase 5.1.6 (결재 워크플로우 보류), Phase 5.3.4 (React 전환 대기) |
| **진행률** | Phase 1~3 ✅, Phase 4 (3/4), Phase 5.0 ✅, Phase 5.1 (5/6), **Phase 5.2 ✅**, Phase 5.3 (3/4+α, mng ✅) |
| **마지막 업데이트** | 2026-02-12 |

---

## 1. 전체 진행 현황

| Phase | 이름 | 진행률 | 상태 | 상세 문서 |
|-------|------|--------|:----:|----------|
| 1 | mng 양식 관리 (수입검사) | 5/5 | ✅ | [Phase 1~4 아카이브](#9-phase-14-아카이브-요약) |
| 2 | mng 문서 생성/관리 | 4/5 | ✅ | [Phase 1~4 아카이브](#9-phase-14-아카이브-요약) |
| 3 | 중간검사 양식 추가 (시더/이관설계) | 4/4 | ✅ | [Phase 1~4 아카이브](#9-phase-14-아카이브-요약) |
| 4 | API 연동 및 mng JSON | 3/4 | 🔄 | [Phase 1~4 아카이브](#9-phase-14-아카이브-요약) |
| **5.0** | **공통: 검사기준서↔컬럼 연동 (방안1)** | 3/3 | ✅ | [섹션 7.5](#75-방안1-columns-자동-파생-설계) |
| **5.1** | **중간검사(PQC) 폼 구현** | 5/6 | 🔄 | [**document-system-mid-inspection.md**](./document-system-mid-inspection.md) |
| **5.2** | **제품검사(FQC) 폼 구현** | 5/5 | ✅ | [**document-system-product-inspection.md**](./document-system-product-inspection.md) |
| **5.3** | **작업일지 폼 구현** | 3/4+α (mng ✅) | 🔄 | [**document-system-work-log.md**](./document-system-work-log.md) |
| 5.4 | 기타문서 확장 | - | ⏭️ | 추후 정의 |

### Phase 4.4 (미완료)

- **내용**: 프론트엔드 담당자와 협의하여 react 기존 하드코딩 컴포넌트를 양식 JSON 기반으로 전환할지 결정
- **영향**: Phase 5의 React 작업 방향에 영향. 협의 전까지 mng/api 작업 우선 진행 가능

---

## 2. 핵심 결정사항

| # | 항목 | 결정 | 날짜 |
|---|------|------|------|
| 1 | 조인트바 처리 | 슬랫 공정 하위 유지 (별도 공정 등록 안함) | 2026-02-10 |
| 2 | 제품검사 단위 | 개소별 1문서 (수주 50개소 = Document 50건) | 2026-02-10 |
| 3 | 작업일지 방식 | 하이브리드 (양식 정의는 mng 템플릿, 전용 UI/로직은 별도) | 2026-02-10 |
| 4 | 기타문서 범위 | 나중에 정의 (검사 관련만 먼저 진행) | 2026-02-10 |
| 5 | 제품검사 = 품질검사 | 동일 개념, "제품검사(FQC)"로 통일 | 2026-02-10 |
| 6 | PDF 생성 | 추후 고려 (react에 html2pdf.js 기존 구현) | 2026-01-31 |
| 7 | 판정 로직 | 프론트에서 입력, 결과만 저장 (별도 판정 엔진 없음) | 2026-01-31 |
| 8 | react 기존 컴포넌트 | mng 완성 후 프론트 담당자와 협의하여 전환 여부 결정 | 2026-01-31 |
| 11 | **자재 LOT 처리** | **개소별 품목 = 작업내역 테이블, 공용 자재(내화실 등) = 자재 투입(MaterialInput) 시스템으로 조회. 예외 필드 없이 기존 시스템 역할 분리** | 2026-02-11 |
| 12 | **중간검사 데이터 정규화** | **document_data를 section_id/column_id/field_key 기반 정규화 형식으로 저장. 레거시(section_X_item_Y) 자동 변환 지원** | 2026-02-11 |
| 13 | **mng 작업일지 bf_ backfill 분기** | **작업일지(섹션 없음)=label 기반 매핑, 검사 문서(섹션 있음)=field_key 기반 매핑. resolveAndBackfillBasicFields에서 자동 판별** | 2026-02-12 |
| 14 | **개소별 투입자재 LOT** | **work_order_material_inputs 테이블 기반 개소별(work_order_item_id) LOT 매핑. 입고 LOT NO 컬럼에 표시** | 2026-02-12 |
| 15 | **취소 트랜잭션 상쇄** | **stock_transactions에서 work_order_input(OUT) + work_order_input_cancel(IN) 합산으로 순수 투입량 계산** | 2026-02-12 |
| 16 | **자재 투입 방식 변경 (요청)** | **수량 입력 → 필요수량 기반 LOT 선택 방식으로 변경 요청됨. 미착수** | 2026-02-12 |
| 9 | **검사기준서↔테이블컬럼 연동** | **방안1: items.measurement_type → columns 자동 파생. 테이블 컬럼 탭은 "자동 생성 결과 확인/미세조정"용** | 2026-02-10 |
| 10 | section_fields 필수화 | 모든 시더에 section_fields 생성 포함. 없으면 검사 기준서 탭 렌더링 불가 | 2026-02-10 |

---

## 3. 검사 유형별 데이터 연동 구조

```
┌─────────────────────────────────────────────────────────────────┐
│ 검사 유형        연동 대상              단위        linkable     │
├─────────────────────────────────────────────────────────────────┤
│ 수입검사(IQC)    Material + Lot         아이템별    Material     │
│ 중간검사(PQC)    WorkOrder + Process    개소별      WorkOrder    │
│ 제품검사(FQC)    Order + OrderItem      개소별      OrderItem    │
│ 작업일지         WorkOrder + Process    작업지시별   WorkOrder    │
└─────────────────────────────────────────────────────────────────┘
```

### 3.1 개소(Location) 관리 체계

```
Order (수주)
├─ OrderItem[0]: floor_code="1F", symbol_code="A", quantity=2
├─ OrderItem[1]: floor_code="2F", symbol_code="B", quantity=4
└─ OrderItem[N]: ...
    ↓
WorkOrder (작업지시)
├─ WorkOrderItem[0] → OrderItem[0] (source_order_item_id)
├─ WorkOrderItem[1] → OrderItem[1]
└─ ...
    ↓
Document (검사문서)
├─ 중간검사: WorkOrder 단위, 내부에 개소별 행(row)
└─ 제품검사: OrderItem(개소) 단위, 개소당 1문서
```

---

## 4. DB 테이블 관계

### 4.1 문서 시스템 테이블

```
document_templates (양식 마스터)
├── document_template_approval_lines  (결재라인: 작성/검토/승인)
├── document_template_basic_fields    (기본필드: 품명, LOT NO 등)
├── document_template_sections        (섹션: 검사기준서)
│   └── document_template_section_items (검사항목: 겉모양, 치수 등)
├── document_template_columns         (테이블 컬럼: text/check/complex/select)
├── document_template_section_fields  (동적 필드 정의)
├── document_template_links           (외부 키 매핑)
└── document_template_field_presets   (필드 프리셋)

documents (문서 인스턴스)
├── document_approvals   (결재: PENDING/APPROVED/REJECTED)
├── document_data        (EAV: section_id, column_id, row_index, field_key, field_value)
├── document_attachments (첨부파일)
└── document_links       (외부 엔티티 연결)

process_steps
└── document_template_id (FK) → 공정별 검사 양식 매핑
└── needs_inspection (bool) → 검사 필요 단계 표시
```

### 4.2 모델 관계 (코드 참조)

```php
// DocumentTemplate.php
class DocumentTemplate extends Model {
    use BelongsToTenant, SoftDeletes;
    public function approvalLines()  // hasMany, sort_order
    public function basicFields()    // hasMany, sort_order
    public function sections()       // hasMany → section.items()
    public function columns()        // hasMany, sort_order
}

// Document.php
class Document extends Model {
    use BelongsToTenant, SoftDeletes;
    // status: DRAFT → PENDING → APPROVED/REJECTED/CANCELLED
    public function template()    // belongsTo DocumentTemplate
    public function approvals()   // hasMany DocumentApproval
    public function data()        // hasMany DocumentData (EAV)
    public function linkable()    // morphTo (Order, WorkOrder, OrderItem, Material 등)
}
```

### 4.3 현재 양식 시더 (mng)

| ID | 양식명 | 카테고리 | 시더 |
|----|--------|---------|------|
| 7 | EGI 1.55T 수입검사 | 품질/수입검사 | IncomingInspectionTemplateSeeder |
| 8 | SUS Plate 수입검사 | 품질/수입검사 | IncomingInspectionTemplateSeeder |
| 10 | 조인트바 중간검사 | 품질/중간검사 | MidInspectionTemplateSeeder |
| 11 | 슬랫 중간검사 | 품질/중간검사 | MidInspectionTemplateSeeder |
| 12 | 스크린 중간검사 | 품질/중간검사 | MidInspectionTemplateSeeder |
| 13 | 절곡품 중간검사 | 품질/중간검사 | MidInspectionTemplateSeeder |
| 62 | 스크린 작업일지 | 생산/작업일지 | WorkLogTemplateSeeder |
| 63 | 슬랫 작업일지 | 생산/작업일지 | WorkLogTemplateSeeder |
| 64 | 절곡 작업일지 | 생산/작업일지 | WorkLogTemplateSeeder |

---

## 5. 핵심 파일 경로

### 5.1 mng (양식 관리)

| 파일 | 설명 |
|------|------|
| `mng/resources/views/document-templates/edit.blade.php` | 양식 편집 UI (44.5KB, 4개 탭) |
| `mng/resources/views/documents/show.blade.php` | 문서 조회 (검사문서+작업일지 동적 렌더링, 재단 알고리즘 포함) |
| `mng/resources/views/documents/print.blade.php` | 문서 인쇄 (성적서 양식) |
| `mng/app/Http/Controllers/DocumentTemplateController.php` | 양식 CRUD |
| `mng/app/Http/Controllers/DocumentController.php` | 문서 CRUD + 결재 + bf_ backfill (작업일지/검사 분기) |
| `mng/app/Models/DocumentTemplate.php` | 양식 모델 |
| `mng/app/Models/Documents/Document.php` | 문서 모델 |
| `mng/database/seeders/IncomingInspectionTemplateSeeder.php` | 수입검사 시더 |
| `mng/database/seeders/MidInspectionTemplateSeeder.php` | 중간검사 시더 |
| `mng/database/seeders/WorkLogTemplateSeeder.php` | 작업일지 시더 |
| `mng/routes/web.php` (340-353줄) | 양식/문서 라우트 |

### 5.2 api (REST API)

| 파일 | 설명 |
|------|------|
| `api/app/Http/Controllers/V1/DocumentTemplateController.php` | 양식 조회 API |
| `api/app/Http/Controllers/V1/DocumentController.php` | 문서 CRUD + 결재 API |
| `api/app/Models/Documents/Document.php` | 문서 모델 |
| `api/app/Models/Order.php` | 수주 모델 (OrderItem 관계) |
| `api/app/Models/WorkOrder.php` | 작업지시 모델 |
| `api/app/Models/Process.php` | 공정 모델 (ProcessStep 관계) |
| `api/app/Services/WorkOrderService.php` | 작업지시 서비스 (검사, 작업일지, materialInputLots) |
| `api/app/Services/DocumentService.php` | 문서 서비스 (create, update, formatTemplateForReact) |
| `api/app/Console/Commands/NormalizeDocumentData.php` | 문서 데이터 정규화 커맨드 |
| `api/routes/api/v1/production.php` | 작업지시/작업일지 라우트 |

### 5.3 react (프론트엔드)

| 파일 | 설명 |
|------|------|
| `react/src/components/document-system/viewer/DocumentViewer.tsx` | 문서 뷰어 (zoom, drag, print) |
| `react/src/components/document-system/components/DocumentHeader.tsx` | 문서 헤더 (로고, 결재라인) |
| `react/src/components/production/WorkOrders/documents/InspectionReportModal.tsx` | 중간검사 모달 (~900행) |
| `react/src/components/production/WorkOrders/documents/inspection-shared.tsx` | 검사 공유 유틸 |
| `react/src/components/production/WorkOrders/documents/Screen|Slat|Bending*.tsx` | 공정별 검사 Content |
| `react/src/components/production/WorkerScreen/InspectionInputModal.tsx` | 검사 입력 모달 (~950행) |
| `react/src/components/production/WorkerScreen/WorkLogModal.tsx` | 작업일지 모달 (공정관리 양식 연동) |
| `react/src/components/production/WorkerScreen/WorkLogContent.tsx` | 작업일지 범용 (~280행) |
| `react/src/app/[locale]/(protected)/quality/qms/components/documents/ProductInspectionDocument.tsx` | 제품검사 (하드코딩) |
| `react/src/app/[locale]/(protected)/quality/inspections/` | 품질검사 페이지 라우트 |

### 5.4 확인 URL

| URL | 내용 |
|-----|------|
| `https://mng.sam.kr/document-templates` | 양식 관리 |
| `https://mng.sam.kr/document-templates/51/edit` | 양식 편집 (검사기준서 탭) |
| `https://mng.sam.kr/documents` | 문서 관리 |
| `https://dev.sam.kr/production/worker-screen` | 작업자 화면 (중간검사/작업일지 모달) |
| `https://dev.sam.kr/quality/inspections/1?mode=view` | 제품검사 요청서/모달 |

---

## 6. 작업 우선순위

```
Phase 5.0 공통 기반 ✅ ──→ Phase 5.1 중간검사 (5/6) ──→ Phase 5.2 제품검사
(완료: columns 자동파생,     (결재 워크플로우만 남음)       (중간검사 패턴 재사용)
 section_fields 필수화)

Phase 5.3 작업일지 ──→ 5.0과 독립 (검사기준서/columns 자동파생 해당 없음)
(하이브리드 방식,        시더 ✅, 양식연동 ✅, 편집검증 ✅, API ✅, mng상세 ✅ → React 전환 남음)
 섹션 없음)
```

### Phase 5.0 작업 항목 (✅ 완료)

| # | 작업 | 상태 | 완료 기준 | 구현 위치 |
|---|------|:----:|----------|----------|
| 5.0.1 | `generateColumnsFromItems()` JS 함수 구현 | ✅ | items의 measurement_type 분석 → 정적+동적 columns 자동 생성 | edit.blade.php line 1040-1139 |
| 5.0.2 | 시더에 section_fields 생성 추가 | ✅ | MidInspectionTemplateSeeder(7필드), IncomingInspectionTemplateSeeder(6필드) 모두 section_fields 포함 | 각 시더 createSectionFields() |
| 5.0.3 | 테이블 컬럼 탭 "자동 생성 + 미세조정" 모드 전환 | ✅ | "기준서에서 자동 생성" 버튼 + `_auto` 플래그 + 수동 편집 병행 | edit.blade.php line 259-1299 |

### Phase 5.1 작업 항목 (🔄 5/6)

| # | 작업 | 상태 | 완료 기준 | 비고 |
|---|------|:----:|----------|------|
| 5.1.1 | section_fields 생성 | ✅ | Phase 5.0.2에서 해결됨 | MidInspection 7필드, IncomingInspection 6필드 |
| 5.1.2 | mng 양식 편집/미리보기 검증 | ✅ | 4종 양식 edit/미리보기/저장 정상 동작 | edit.blade.php 4탭 CRUD |
| 5.1.3 | API 중간검사 문서 생성 연동 | ✅ | `createInspectionDocument()` 완전 구현. 정규화+레거시 형식 지원 | WorkOrderService line 1810+ |
| 5.1.4 | React 중간검사 모달 → 양식 기반 전환 | ✅ | TemplateInspectionContent 동적 렌더링 구현 | 템플릿/레거시 모드 병행 |
| 5.1.5 | 개소별 검사 데이터 저장/조회 | ✅ | getInspectionData, saveInspectionDocument 구현 | 정규화 레코드 형식 |
| 5.1.6 | 결재 워크플로우 연동 | ⏳ | 작성→검토→승인 3단계 결재 | API ready, 프론트 연동 필요 |

---

## 7. 알려진 이슈

### 7.1 ~~스키마 불일치~~ → 해결됨 (2026-02-10 분석)
- `document_template_section_items` 테이블에 `tolerance`, `standard_criteria`, `measurement_type`, `frequency_n`, `frequency_c`, `field_values` 컬럼 **모두 존재** (마이그레이션 순차 추가됨)
- Controller line 174-188은 `field_values` JSON 우선, 직접 컬럼 fallback으로 정상 동작
- **실제 문제**: 중간검사 템플릿에 `section_fields` 레코드 누락 → 검사 기준서 탭이 빈 테이블로 렌더링됨
- **해결**: 결정사항 #10에 따라 모든 시더에 section_fields 생성 추가

### 7.2 검사기준서 ↔ 테이블컬럼 분리 문제 → 방안1 채택 (2026-02-10)
- **현상**: 두 탭이 완전 독립. 검사 항목 추가해도 컬럼 자동 반영 안됨
- **해결**: 결정사항 #9에 따라 `items.measurement_type → columns 자동 파생` 구현
- 상세: [아래 섹션 7.5 참조](#75-방안1-columns-자동-파생-설계)

### 7.3 절곡품 동적 구성
- 제품코드(KSS01/KSS02/KWE01) + 마감유형(S1/S2/S3)에 따라 검사항목 변경
- 기본 양식에 구성품 목록 정의 → 문서 생성 시 동적 행 구성 (권장)

### 7.4 절곡 재공품 양식 미존재
- React `BendingWipInspectionContent`에 대응하는 mng 양식 없음
- 신규 시더 추가 필요

### 7.5 방안1: columns 자동 파생 설계

#### 아키텍처 개요

```
현재:  section_items ─── ✕ ─── columns  (독립, 불일치 가능)

방안1: section_items.measurement_type ──→ columns 자동 파생 (Single Source of Truth)
```

#### 기존 매핑 로직 (edit.blade.php:684, 이미 존재)

```javascript
// 검사방식 → 측정유형 자동 매핑
METHOD_TO_MEASUREMENT = {
    'visual': 'checkbox',       // → check 컬럼
    'check': 'numeric',         // → complex 컬럼 (n1,n2,n3...)
    'mill_sheet': 'single_value', // → text 컬럼
    'certified_agency': 'single_value',
    'substitute_cert': 'substitute',
    'other': 'text'
};
```

#### columns 자동 파생 규칙

```
Step 1: 정적 컬럼 (항상 포함)
├── NO (text, 40px) → 행 번호
├── 검사항목 (text, 120px) → item.item 속성 매핑
└── 검사기준 (text, 150px) → item.standard 속성 매핑

Step 2: 동적 컬럼 (items의 measurement_type에서 파생)
├── checkbox 존재 → check 컬럼 추가 (OK/NG 체크, 50px)
├── numeric 존재 → complex 컬럼 추가 (sub_labels: n1~n{max(frequency_n)})
├── single_value 존재 → text 컬럼 추가 (단일값 입력)
└── 공통 → select 컬럼 추가 (판정: 적합/부적합)

Step 3: 부가 컬럼 (옵션)
├── 검사방식 (text) → item.method가 다양하면 포함
└── 비고 (text) → 항상 포함
```

#### 구현 위치

| 항목 | 위치 | 변경 내용 |
|------|------|----------|
| 자동 파생 로직 | `edit.blade.php` JS `generateColumnsFromItems()` | items 분석 → columns 생성 |
| 트리거 | 검사 기준서 탭에서 항목 추가/삭제/수정 시 | 테이블 컬럼 탭 자동 갱신 |
| 수동 override | 테이블 컬럼 탭에서 미세조정 가능 | 자동 생성 + 수동 편집 공존 |
| 시더 변경 | 모든 시더에 section_fields 생성 추가 | columns 정의는 자동 파생으로 생략 가능 |
| 저장 로직 | `saveTemplate()` JS | sections + columns 함께 저장 |

#### 시더 변경 영향

```php
// Before: items + columns 각각 정의 (불일치 위험)
'items' => [...],
'columns' => [...],  // 수동 정의 필요

// After: items만 정의, columns는 자동 파생 (또는 명시적 override)
'items' => [...],
'section_fields' => [...],  // 필수 추가
// columns 생략 가능 → 저장 시 자동 생성
```

---

## 8. 변경 이력

| 날짜 | 내용 |
|------|------|
| 2026-02-10 | 마스터 문서 신규 생성. Phase 5 하위 문서 3개 분리 |
| 2026-02-10 | 핵심 결정사항 5건 확정 |
| 2026-02-10 | 새 세션 가이드, 핵심 파일 경로, 알려진 이슈 보강 |
| 2026-02-10 | 방안1 채택: items.measurement_type → columns 자동 파생. Phase 5.0 신설, 결정사항 #9/#10 추가 |
| 2026-02-11 | Phase 5.3.1: WorkLogTemplateSeeder 3종 생성 (스크린ID:62, 슬랫ID:63, 절곡ID:64). 범용(ID:61) 삭제. 공정별 React 코드 기준 구조 반영 |
| 2026-02-11 | React: WorkLogModal 공정관리 양식 연동 (workLogTemplateId/Name prop, resolveProcessTypeFromTemplate) |
| 2026-02-11 | React: ScreenWorkLogContent 자재 LOT 동적화 (하드코딩 "내화실" → materialLots item_name별 그룹핑) |
| 2026-02-11 | API: materialInputLots 엔드포인트 추가 (stock_transactions 기반 투입 LOT 조회) |
| 2026-02-11 | API: 중간검사 document_data 정규화 형식 지원 (section_id/column_id/field_key). 레거시 자동 변환 |
| 2026-02-11 | MNG: 문서 양식 편집 개선 (이미지 업로드 API 연동, 미리보기 모달) |
| 2026-02-11 | 결정사항 #11(자재 LOT 역할 분리), #12(중간검사 정규화) 추가 |
| 2026-02-11 | Phase 5.0/5.1/5.3 상태 분석 및 문서 동기화: 5.0 ✅완료(3/3), 5.1 🔄(5/6), 5.3 🔄(1/4+α) |
| 2026-02-12 | Phase 5.3.2 완료: mng 작업일지 양식 편집/미리보기 코드 레벨 검증 (정상 동작 확인) |
| 2026-02-12 | Phase 5.3.3 완료: API 작업일지 생성/조회 구현 (getWorkLogTemplate, getWorkLog, createWorkLog). 라우트 3개, i18n 추가 |
| 2026-02-12 | WorkOrder 모델에 documents() MorphMany 관계 추가 |
| 2026-02-12 | MNG: DocumentController resolveAndBackfillBasicFields 확장 — 작업일지(label 기반) vs 검사 문서(field_key 기반) 분기. buildWorkLogResolveMap, buildInspectionResolveMap 추가 |
| 2026-02-12 | MNG: show.blade.php 작업일지 전용 섹션 추가 — 템플릿 컬럼 기반 동적 테이블, PHP 재단 알고리즘(calculateCutSize), 작업통계, 투입 자재 LOT, 비고 |
| 2026-02-12 | MNG: 개소별 투입자재 LOT 매핑 (work_order_material_inputs → stock_lots JOIN, work_order_item_id별 lot_no 조회) |
| 2026-02-12 | MNG: 투입자재 취소 트랜잭션 상쇄 처리 (work_order_input + work_order_input_cancel 합산, 순수 투입량 계산) |
| 2026-02-12 | MNG: show() 메서드에 workOrder, salesOrder, materialInputLots, itemLotMap 변수 추가 |
| 2026-02-12 | 결정사항 #13~#16 추가 (bf_ 분기, 개소별 LOT, 취소 상쇄, 자재 투입 방식 변경 요청) |

> 상세 변경 이력: [`document-management-system-changelog.md`](./document-management-system-changelog.md)

---

## 9. Phase 1~4 아카이브 요약

> **상세 문서**: [`document-management-system-plan.md`](./document-management-system-plan.md) (Phase 1~4 전체 설계/이력)
> **5130 이관 설계**: 같은 문서 섹션 5.2~5.3 (JSON→EAV 매핑, 데이터 변환 규칙)

### 완료된 Phase 요약

| Phase | 내용 | 주요 산출물 |
|-------|------|-----------|
| **1** (수입검사 양식) | edit.blade.php 5개 탭 CRUD, 시더 2종(EGI/SUS), 미리보기, 복제 | IncomingInspectionTemplateSeeder |
| **2** (문서 생성/관리) | 문서 생성(IQC prefix), EAV 입력/저장, 결재(submit/approve/reject), 목록/필터 | DocumentController, edit/show.blade |
| **3** (중간검사 양식) | 4종 구조 설계, JSON→EAV 이관 설계, 시더 4종, 이미지 27개 이관 | MidInspectionTemplateSeeder, 이미지 |
| **4** (API 연동) | Template 조회 API 6모델+Swagger, Document 결재 4 API, mng show.blade JSON 렌더링 | api 컨트롤러, Swagger |

### Phase 1~4 문서를 다시 봐야 하는 경우

| 상황 | 참조 섹션 |
|------|----------|
| 5130 중간검사 데이터 이관 작업 시 | 섹션 5.3 (JSON→EAV 매핑, 변환 규칙, 6단계 프로세스) |
| 수입검사 자재별 양식 추가 시 | 섹션 5.1 (23개 자재 목록), 섹션 11.3 (시더 생성 절차) |
| 기존 양식 편집 UI 구조 파악 시 | 섹션 11.1 (edit.blade.php 분석 절차) |
| API JSON 응답 구조 확인 시 | 섹션 4.2~4.3 (양식/문서 JSON 스키마) |

---

## 10. 참고 문서

| 문서 | 경로 | 용도 |
|------|------|------|
| Phase 1~4 상세 | `docs/dev_plans/document-management-system-plan.md` | 이력/설계/5130 이관 |
| 변경 이력 | `docs/dev_plans/document-management-system-changelog.md` | 전체 변경 로그 |
| DB 스키마 | `docs/specs/database-schema.md` | 테이블 구조 |
| API 규칙 | `docs/standards/api-rules.md` | Service-First, FormRequest |
| 품질 체크리스트 | `docs/standards/quality-checklist.md` | 코드 품질 기준 |
| mng 규칙 | `mng/CLAUDE.md` | mng 프로젝트 규칙 |

---

*이 문서는 /plan 스킬로 생성되었습니다.*