문서관리 시스템 - 마스터 진행 관리
작성일: 2026-02-10
목적: mng에서 문서양식(템플릿)을 관리하고, SAM(react)에서 JSON으로 소비하는 문서관리 시스템. 수입검사/중간검사/제품검사/작업일지 폼을 지원한다.
상태: Phase 13 ✅, Phase 4 🔄, Phase 5.0 ✅, Phase 5.1 🔄, Phase 5.2 ✅, Phase 5.3 🔄 (5.3.13 ✅, 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 저장소
세션 시작 체크리스트
📍 현재 진행 상태
| 항목 |
내용 |
| 마지막 완료 |
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 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. 검사 유형별 데이터 연동 구조
3.1 개소(Location) 관리 체계
4. DB 테이블 관계
4.1 문서 시스템 테이블
4.2 모델 관계 (코드 참조)
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 |
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 작업 항목 (✅ 완료)
| # |
작업 |
상태 |
완료 기준 |
구현 위치 |
| 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 참조
7.3 절곡품 동적 구성
- 제품코드(KSS01/KSS02/KWE01) + 마감유형(S1/S2/S3)에 따라 검사항목 변경
- 기본 양식에 구성품 목록 정의 → 문서 생성 시 동적 행 구성 (권장)
7.4 절곡 재공품 양식 미존재
- React
BendingWipInspectionContent에 대응하는 mng 양식 없음
- 신규 시더 추가 필요
7.5 방안1: columns 자동 파생 설계
아키텍처 개요
기존 매핑 로직 (edit.blade.php:684, 이미 존재)
columns 자동 파생 규칙
구현 위치
| 항목 |
위치 |
변경 내용 |
| 자동 파생 로직 |
edit.blade.php JS generateColumnsFromItems() |
items 분석 → columns 생성 |
| 트리거 |
검사 기준서 탭에서 항목 추가/삭제/수정 시 |
테이블 컬럼 탭 자동 갱신 |
| 수동 override |
테이블 컬럼 탭에서 미세조정 가능 |
자동 생성 + 수동 편집 공존 |
| 시더 변경 |
모든 시더에 section_fields 생성 추가 |
columns 정의는 자동 파생으로 생략 가능 |
| 저장 로직 |
saveTemplate() JS |
sections + 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
9. Phase 1~4 아카이브 요약
상세 문서: document-management-system-plan.md (Phase 14 전체 설계/이력)
5130 이관 설계: 같은 문서 섹션 5.25.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 스킬로 생성되었습니다.