Files
sam-docs/plans/document-system-master.md
권혁성 da2839c4d0 docs: 문서관리 시스템 및 채번규칙 계획 문서 업데이트
- 문서관리 시스템 계획/변경이력/마스터 진행상황 반영
- 중간검사 서식 계획 신규 추가
- 채번규칙 관리 계획 상세화 (1767줄 확장)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 10:02:47 +09:00

444 lines
24 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-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/plans/document-management-system-plan.md` | 이력/설계/5130 이관 |
| 변경 이력 | `docs/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 스킬로 생성되었습니다.*