# 품질관리 스토리보드 명세 (D1.9)

> **소스**: SAM_MES_경동기업_품질관리_Storyboard_D1.9_260224 (17 slides)
> **용도**: API 설계 및 기능 구현 시 Claude 참조 문서
> **작성일**: 2026-03-05

---

## 1. 전체 프로세스 플로우

### 1.1 역할 정의

| 역할 | 담당 업무 |
|------|----------|
| 매출 거래처 | 주문(전화/카톡/팩스/메일) |
| 견적/수주 담당자 | 견적 작성 → 수주 전환 → 수주서 작성 → 생산지시 생성 |
| 생산 담당자 | 생산 부서 할당 → 재고/원자재 체크 → 공정 작업 → 중간검사 → 생산 완료 |
| 출고 담당자 | 출고 대기 → 출고 완료 |
| 품질 담당자 | 제품검사 신청(거래처 요청) → 검사원 일정 관리 → 검사원 현장 방문 및 검사 진행 → 합격 여부 판정 → 실적 신고 관리 → 품질 인증 심사 |
| 자재 담당자 | 입고 등록 → 수입검사 |

### 1.2 프로세스 흐름

```
주문 접수 → 견적 작성 → 수주 전환 판단(미완료시 대기)
    → 수주서 작성(견적서 선택) → 생산지시 생성
    → 재고 소요량 충분? → (부족 시) 자재 담당자: 입고등록 → 수입검사
    → 생산 부서 할당 → 재고/원자재 투입 체크 → 공정 작업 진행 → 중간검사 → 생산 완료
    → 출고 대기 → 출고 완료
    → 품질 담당자: 제품검사 신청 → 검사원 일정 관리 → 현장 방문 및 검사 → 합격?
        → (합격) 실적 신고 관리 → 품질 인증 심사
        → (불합격) 재검사 루프 (점선으로 표시)

* 분할 수주/생산/출고는 1차 이후 반복 가능
```

---

## 2. 화면 명세

### 2.1 제품검사 목록 (슬라이드 2-3)

**경로**: 품질관리 > 제품검사관리
**URL 제안**: `/quality/product-inspections`

#### 2.1.1 상단 요약 카드

| 필드 | 타입 | 설명 |
|------|------|------|
| 접수 | number | 접수 상태 건수 |
| 진행중 | number | 진행중 상태 건수 |
| 완료 | number | 완료 상태 건수 |

#### 2.1.2 필터

| 필터 | 타입 | 옵션 | 기본값 |
|------|------|------|--------|
| 기간 | date_range | 시작일~종료일 | 최근 1개월 |
| 상태 바로가기 | button_group | 전체/접수/전점별/진행/미완/어제/오늘 | 전체 |
| 검색 | text | 키워드 검색 | - |

#### 2.1.3 목록 테이블

| 컬럼 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| No. | row_number | - | 자동 번호 |
| 품질관리서 번호 | quality_doc_number | string | 품질관리서 고유번호 |
| 번호 | id | integer | PK |
| 수주처 | client_name | string | 거래처명 |
| 개소 | location_count | integer | 검사 대상 개소 수 |
| 실적신고 필수정보 | required_info_status | string | "3건 누락", "4건 누락" 등 빨간색 표시 |
| 검사기간 | inspection_period | date_range | 시작일~종료일 (여러 줄 가능) |
| 검사자 | inspector_name | string | 검사원 이름 |
| 상태 | status | enum | 접수/진행중/완료 |
| 작성자 | created_by | string | 등록자 |
| 접수일 | received_date | date | 접수 날짜 |

**액션**:
- `제품검사 등록` 버튼 → 제품검사 상세 화면 (신규 생성 모드)
- 행 클릭 → 제품검사 상세 화면 (조회/수정 모드)

#### 2.1.4 검사 스케줄 (캘린더)

목록 하단에 월간 캘린더 표시.

| 항목 | 설명 |
|------|------|
| 뷰 | 월간 캘린더 |
| 필터 | 상태 셀렉트 (전체/진행중/완료), 전체 V 토글 |
| 완료 스케줄 | 회색 바, 텍스트: "홍길동 - 현장명 / 완료" |
| 진행중 스케줄 | 파란 바, 텍스트: "홍길동 - 현장명 / 진행중" |
| 클릭 동작 | 제품검사 상세 화면으로 이동 |
| 표시 기간 | 검사시작일 ~ 검사종료일 기간으로 바 표시 |
| 접수 미표시 | 검사일 미정인 접수 건은 캘린더에 표시하지 않음 |

---

### 2.2 제품검사 상세 (슬라이드 4-6)

**경로**: 품질관리 > 제품검사관리 > 제품검사 상세
**URL 제안**: `/quality/product-inspections/{id}`

#### 2.2.1 기본 정보 섹션

| 필드 | 필드명(추정) | 타입 | 필수 | 설명 |
|------|-------------|------|:----:|------|
| 품질관리서 번호 | quality_doc_number | string | Y | 자동 채번 |
| 현장명 | site_name | string | Y | |
| 수주처 | client_name | string | Y | 회사명 드롭다운 |
| 접수일 | received_date | date | Y | |
| 담당자 | manager_name | string | Y | |
| 담당자 연락처 | manager_phone | string | Y | |
| 상태 | status | enum | Y | 접수/진행중/완료 |
| 작성자 | created_by | string | Y | 자동(로그인 사용자) |

#### 2.2.2 건축공사장 정보 (실적 신고 시 필수)

| 필드 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 현장명 | construction_site_name | string | |
| 대지위치 | land_location | string | |
| 지번 | lot_number | string | |

#### 2.2.3 자재유통업자 정보 (실적 신고 시 필수)

| 필드 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 회사명 | material_company_name | string | |
| 회사주소 | material_company_address | string | |
| 대표자명 | material_ceo_name | string | |
| 전화번호 | material_phone | string | |

#### 2.2.4 공사시공자 정보 (실적 신고 시 필수)

| 필드 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 회사명 | contractor_company_name | string | |
| 회사주소 | contractor_company_address | string | |
| 성명 | contractor_name | string | |
| 전화번호 | contractor_phone | string | |

#### 2.2.5 공사감리자 정보 (실적 신고 시 필수)

| 필드 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 사무소명 | supervisor_office_name | string | |
| 사무소주소 | supervisor_office_address | string | |
| 성명 | supervisor_name | string | |
| 전화번호 | supervisor_phone | string | |

#### 2.2.6 검사 정보 섹션

| 필드 | 필드명(추정) | 타입 | 필수 | 설명 |
|------|-------------|------|:----:|------|
| 검사방문요청일 | inspection_request_date | date | Y | |
| 검사시작일 | inspection_start_date | date | Y | 상태가 '검사시작'에 도달하면 진행중으로 변경 |
| 검사종료일 | inspection_end_date | date | Y | |
| 검사자 | inspector_name | string | Y | 검사원 선택 |

#### 2.2.7 현장 주소

| 필드 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 우편번호 | postal_code | string | 우편번호 찾기 버튼으로 검색 |
| 주소 | address | string | 자동 입력 |
| 상세주소 | address_detail | string | 수동 입력 |

#### 2.2.8 수주 설정 정보

**설명**: 납품 규격과 시공 후 규격이 다를 경우 변경사유를 입력하세요. 사이즈가 동일하면 자동으로 동일로 표시합니다.

**수주 선택 버튼** → 수주 선택 팝업 호출

**수주 목록 테이블 (접힌 상태)**:

| 컬럼 | 타입 | 설명 |
|------|------|------|
| 수주번호 | string | |
| 현장명 | string | |
| 납품일 | date | |
| 개소 | integer | 해당 수주의 개소 수 |
| 삭제 | button | 휴지통 아이콘 |

**수주 목록 테이블 (펼친 상태 - 행 클릭 시 아코디언 확장)**:

| 컬럼 | 타입 | 설명 |
|------|------|------|
| 층수 | string | 예: 1층, 2층 |
| 부호 | string | 예: 부호명 |
| 발주 규격 - 가로 | number | mm 단위 |
| 발주 규격 - 세로 | number | mm 단위 |
| 시공후 규격 - 가로 | number | 변경 시 직접 입력 |
| 시공후 규격 - 세로 | number | 변경 시 직접 입력 |
| 변경사유 | string | 규격 변경 시 입력 |
| 검사하기 | button | 제품검사 팝업 호출 |

**하단 집계**:

| 항목 | 설명 |
|------|------|
| 총 개소 | 전체 개소 수 합계 |
| 동일 | 발주 규격 = 시공후 규격인 개소 수 |
| 변경 | 발주 규격 != 시공후 규격인 개소 수 |

#### 2.2.9 하단 액션 버튼

| 버튼 | 동작 | 조건 |
|------|------|------|
| 검사제품요청서 보기 | 검사제품요청서 팝업 호출 | - |
| 제품검사성적서 보기 | 제품검사성적서 팝업 호출 | - |
| 검사 완료 | 상태를 '완료'로 변경 | 모든 개소 검사 완료 시 활성화 |
| 수정 | 정보 저장 | - |

---

### 2.3 수주 선택 팝업 (슬라이드 7)

**호출 위치**: 제품검사 상세 > 수주 선택 버튼

| 항목 | 설명 |
|------|------|
| 검색 | 키워드 검색 |
| 표시 데이터 | 검사등록되지 않은 수주만 표시 |
| 선택 방식 | 체크박스 다중 선택 |
| 표시 정보 | 총 N건, N건 선택 |

**목록 컬럼**:

| 컬럼 | 타입 | 설명 |
|------|------|------|
| 체크박스 | boolean | 다중 선택 |
| 수주번호 | string | |
| 현장명 | string | |
| 납품일 | date | |
| 개소 | integer | |

**액션**:
- `선택` → 팝업 닫힘, 제품검사 상세 화면에 선택된 수주 목록 반영
- `취소` → 팝업 닫힘

---

### 2.4 제품검사 팝업 (슬라이드 8)

**호출 위치**: 제품검사 상세 > 수주 펼침 > 검사하기 버튼

제품 유형에 따라 2가지 검사 폼이 존재:

#### 2.4.1 Type A: 갈모양 검사 (좌측 팝업)

**상단 필드**:

| 필드 | 타입 | 설명 |
|------|------|------|
| 제품명 | text (readonly) | 자동 표시 |
| 규격 | text (readonly) | 자동 표시 |
| 제품 사진 2장 | file_upload | 클릭하여 파일을 찾거나, 마우스로 파일을 끌어오세요 |

**검사 항목 (각각 적합/부적합 토글)**:

| 검사항목 | 필드명(추정) | 입력 방식 |
|---------|-------------|----------|
| 갈모양 가공상태 | galmotype_processing | 적합/부적합 버튼 |
| 갈모양 재봉상태 | galmotype_sewing | 적합/부적합 버튼 |
| 갈모양 조립상태 | galmotype_assembly | 적합/부적합 버튼 |
| 갈모양 연기차단재 | galmotype_smoke_barrier | 적합/부적합 버튼 |
| 갈모양 하단마감재 | galmotype_bottom_finish | 적합/부적합 버튼 |
| 모터 | motor | 적합/부적합 버튼 |

#### 2.4.2 Type B: 치수/성능 검사 (우측 팝업)

**검사 항목**:

| 검사항목 | 필드명(추정) | 입력 방식 | 설명 |
|---------|-------------|----------|------|
| 재질 | material | 적합/부적합 버튼 | |
| 길이 | length | number + 적합/부적합 | 실측값 입력 |
| 높이 | height | number + 적합/부적합 | 실측값 입력 |
| 가이드레일 홈간격 | guide_rail_gap | number + 적합/부적합 | 실측값 입력 |
| 하단마감재 간격 | bottom_finish_gap | number + 적합/부적합 | 실측값 입력 |
| 내화시험, 차연시험, 개폐시험, 내충격시험 | fire_smoke_open_impact_test | 적합/부적합 버튼 | 4가지 시험 통합 |
| 특이사항 | remarks | textarea | 자유 입력 |

**입력 방식 규칙**:
- 디폴트: 적합값 입력/선택 상태 (오렌지=적합, 검정=부적합)
- 특이사항 인포박스 존재

**액션**:
- `취소` → 팝업 닫힘
- `검사 완료` → 검사 결과 저장, 팝업 닫힘

---

### 2.5 검사제품요청서 (슬라이드 9-10)

**호출 위치**: 제품검사 상세 > 검사제품요청서 보기 버튼
**성격**: 인쇄/공유 가능한 공식 문서 (팝업)
**URL 제안**: `/quality/product-inspections/{id}/request-document`

#### 2.5.1 문서 헤더

| 항목 | 설명 |
|------|------|
| 인쇄 버튼 | 브라우저 인쇄 |
| 공유 버튼 | 공유 기능 |
| 닫기 버튼 | 팝업 닫기 |
| 결재란 | 작성 / 승인 / 승인 (3단계) |
| 문서번호 | 예: ABC123 |
| 작성일자 | 예: 2025년 11월 11일 |

#### 2.5.2 기본정보

| 필드 | 소스 |
|------|------|
| 수주처 / 회사명 | 제품검사 상세 > 기본정보 |
| 수주번호 | 수주 설정 정보 |
| 담당자 / 담당자연락처 | 제품검사 상세 > 기본정보 |
| 현장명 / 현장주소 | 제품검사 상세 |
| 납품일 | 수주 정보 |
| 총 개소 | 수주 설정 합계 |
| 접수일 | 제품검사 상세 > 기본정보 |
| 검사방문요청일(현재예정) | 제품검사 상세 > 검사정보 |

#### 2.5.3 입력사항

| 섹션 | 필드 | 소스 |
|------|------|------|
| 건축공사장 | 현장명, 대지위치, 지번 | 제품검사 상세 2.2.2 |
| 자재유통업자 | 성명, 회사명, 회사주소, 전화번호 | 제품검사 상세 2.2.3 |
| 공사시공자 | 성명, 회사명, 회사주소, 전화번호 | 제품검사 상세 2.2.4 |
| 공사감리자 | 성명, 사무소명, 사무소주소, 전화번호 | 제품검사 상세 2.2.5 |

#### 2.5.4 검사 요청 시 참고사항 (빨간 글씨)

```
발주 사이즈와 시공 완료된 사이즈가 다를 시, 실정 변경을 부착하셔야 됩니다.
제품검사를 위한 방문 전까지
변경사유를 고지하셔야 인정마필을 부착할 수 있습니다.
(사전고지를 하지 않으므로 발생하는 문제의 귀책은 신청업체에 있습니다.)
```

#### 2.5.5 검사대상 사전 고지 정보 테이블

| 컬럼 | 설명 |
|------|------|
| No. | 순번 |
| 층수 | 층수 |
| 부호 | 부호 |
| 오픈사이즈 - 발주 규격 (가로/세로) | 발주 시 규격 |
| 오픈사이즈 - 시공후 규격 (가로/세로) | 시공 후 실측 규격 |
| 변경사유 | 규격 변경 사유 |

---

### 2.6 제품검사성적서 (슬라이드 11-12)

**호출 위치**: 제품검사 상세 > 제품검사성적서 보기 버튼
**성격**: 인쇄/공유 가능한 공식 문서 (팝업), 페이지네이션 있음
**URL 제안**: `/quality/product-inspections/{id}/result-document`

#### 2.6.1 문서 헤더

결재란: 작성 / 승인 / 승인 (3단계, 검사요청서와 동일 구조)

#### 2.6.2 기본정보

| 필드 | 설명 |
|------|------|
| 제품명 | |
| 제품코드 | |
| 수주처 | |
| 현장명 | |
| 제품 LOT NO | |
| 로트크기 | |
| 검사일자 | |
| 검사자 | |

#### 2.6.3 제품 사진

좌우 2장의 이미지 표시 영역 (IMG 플레이스홀더)

#### 2.6.4 검사 항목 테이블

| No. | 검사항목 | 세부 | 검사기준 | 검사결과 | 검사주기 | 특징값 | 판정 |
|-----|---------|------|---------|---------|---------|-------|------|
| 1 | 갈모양 | 가공상태 | 사용상 해로운 결함이 없을 것 | 검사결과 | - | 특징값 | 적합/부적합 체크 |
| 1 | 갈모양 | 재봉상태 | 내화실에 의해 견고하게 접합되어야 함 | | | | |
| 1 | 갈모양 | 조립상태 | 엔드바의 견고하게 조립되어야 함 | | | | |
| 1 | 갈모양 | 연기차단재 | 엔드가이드 갈모사이 MV(L), W80, 가이드레일 W50 (홈에 설치) | 판정: 합수량 시 | | | |
| 1 | 갈모양 | 하단마감재 | 내부 부재정렬 삽입 유무 | | | | |
| 2 | 모터 | - | 인장제품과 동일사양 | | | | |
| 3 | 재질 | - | WY-SC780 인쇄상태 확인 | | | | |
| 4 | 치수(오픈사이즈) | 길이 | 수주 치수 +/- 30mm | 실측값 입력 | | | 적합/부적합 |
| 4 | 치수(오픈사이즈) | 높이 | 수주 치수 +/- 30mm | 실측값 입력 | | | |
| 4 | 치수(오픈사이즈) | 가이드레일 홈간격 | 10 +/- 5mm (측정부위: 상·중·하 높이 100 이내) | 측정값 (상+중+하) | | | |
| 4 | 치수(오픈사이즈) | 간격 | 가이드레일과 하단마감재 통싸 25mm 이내 | | | | |
| 5 | 작동테스트 | 개폐성능 | 6mm 균열게이지 관통 +/- 150mm 이동 유무 | | | | |
| 6 | 내화시험 | 비차열 | 25mm 균열게이지 관통 유무 | | | | |
| 7 | 차연시험 | 공기누설량 | 25Pa 일 때 공기누설량 0.9m3/min-m2 이하 | | 기간: 1회/5년 | | 시험 성적서 |
| 8 | 개폐시험 | - | 제품의 원활한 작동 | | | | |
| 8 | 개폐시험 | 평균속도 | 전도개폐 2.5~6.5m/min | | 시험 성적서 | | |
| 8 | 개폐시험 | 자중강하 | 자중강하 3~7m/min | | | | |
| 8 | 개폐시험 | - | 개폐 시 상부 및 하부 끝부분에서 자동정지 | | | | |
| 8 | 개폐시험 | - | 강하 중 일의의 위치에서 자동정지 | | | | |

#### 2.6.5 하단

| 필드 | 설명 |
|------|------|
| 특이사항 | 텍스트 영역 |
| 종합판정 | 합격/불합격 |

#### 2.6.6 페이지네이션

- 개소(제품) 단위로 페이지 구분
- 이전/다음 버튼
- 페이지 번호 직접 입력 이동 (예: 1 / 50)
- 디폴트: 현재 페이지 (수정 가능)

---

### 2.7 실적신고 목록 (슬라이드 13-15)

**경로**: 품질관리 > 실적신고관리
**URL 제안**: `/quality/performance-reports`

#### 2.7.1 탭 구조

| 탭 | 설명 |
|----|------|
| 분기별 실적신고 | 기본 탭 |
| 누락체크 | 누락 건 확인 |

#### 2.7.2 분기별 실적신고 탭

**필터**:

| 필터 | 타입 | 옵션 | 기본값 |
|------|------|------|--------|
| 연도 | select | 연도 목록 | 현재 연도 |
| 분기 | button_group | 전체/1분기/2분기/3분기/4분기 | 전체 |
| 검색 | text | 키워드 | - |

**상태 카운트**:

| 상태 | 설명 |
|------|------|
| 확정 | 실적신고 확정 건수 |
| 미확정 | 미확정 건수 |
| 신고완료 | 신고 완료 건수 |
| 미신고 | 미신고 건수 |

**목록 테이블**:

| 컬럼 | 필드명(추정) | 타입 | 설명 |
|------|-------------|------|------|
| 체크박스 | selected | boolean | 다중 선택 |
| 품질관리서 번호 | quality_doc_number | string | |
| 작성일 | created_date | date | |
| 현장명 | site_name | string | |
| 수주처 | client_name | string | |
| 개소 | location_count | integer | |
| 필수정보 | required_info_status | string | "3건 누락", "4건 누락" 빨간색 표시 |
| 확정상태 | confirmation_status | enum | 확정/미확정 |
| 확정일 | confirmed_date | date | 확정 시 날짜 |
| 메모 | memo | string | |

**액션 버튼**:

| 버튼 | 동작 | 설명 |
|------|------|------|
| 선택 확정 | 선택한 목록을 확정 상태로 변경 | 체크박스 선택 필요 |
| 확정 해제 | 선택한 목록을 미확정으로 변경 | 체크박스 선택 필요 |
| 메모 | 메모 팝업 호출 | 체크박스 선택 필요 |
| 확정건 엑셀다운로드 | 확정된 건만 엑셀 다운로드 | |

**필터 상태 셀렉트**: 전체/확정/미확정 (디폴트: 전체)

#### 2.7.3 메모 팝업 (슬라이드 14)

| 항목 | 설명 |
|------|------|
| 표시 정보 | 품질관리서 N건, 총 N 개소 |
| 메모 | textarea 입력 |
| 작성 버튼 | 클릭 시 선택된 목록의 메모에 일괄 적용 |
| 취소 버튼 | 팝업 닫힘 |

#### 2.7.4 누락체크 탭 (슬라이드 15)

**설명 문구**:
```
실적신고 누락 체크
납품 완료된 수주건 중 제품검사 미등록 건 확인합니다.

누락 발생 원인
- 품질관리서 발행일 기준 분기에 포함되어야 하나, 공사 미완료로 다음 분기로 이월 시 누락
- 수주등록 시 다른 현장명으로 등록되어 제품검사 매핑 시 누락
- 납품 후 제품검사 등록이 누락된 경우
```

**목록 테이블**:

| 컬럼 | 타입 | 설명 |
|------|------|------|
| 품질관리서 번호 | string | |
| 현장명 | string | |
| 수주처 | string | |
| 개소 | integer | |
| 제품검사완료일 | date | |
| 메모 | string | |

**비즈니스 로직**: 납품 완료(출고 완료)되었으나 제품검사가 미등록이거나 기간이 지났지만 확정이 안된 목록

---

### 2.8 품질인정심사 - 기준/매뉴얼 심사 (슬라이드 16)

**경로**: 품질관리 > 품질인정심사
**URL 제안**: `/quality/certification-audit`

#### 2.8.1 탭 구조

| 탭 | 진행률 | 설명 |
|----|--------|------|
| 기준/매뉴얼 심사 | 2/15 | 기준 문서 및 매뉴얼 확인 |
| 로트 추적 심사 | 7/12 | 제품 로트 추적 확인 |

**전체 심사 진행률**: 9/27 (기준/매뉴얼 + 로트추적 합계)

- 기준/매뉴얼: N/N
- 로트추적: N/N

#### 2.8.2 필터

| 필터 | 타입 | 옵션 |
|------|------|------|
| 연도 | select | 연도 목록 |
| 분기 | button_group | 전체/1분기/2분기/3분기/4분기 |
| 검색 | text | 키워드 |

#### 2.8.3 좌측: 점검표 항목

트리 구조:

```
> 1. 제목
    [v] 1. 항목 --- 완료
    [v] 2. 항목 --- 완료
    [ ] 3. 항목
> 2. 제목
    [ ] 1. 항목
    [ ] 2. 항목
    [ ] 3. 항목
```

- 각 항목에 완료 체크 표시
- 항목 클릭 시 우측에 상세 표시
- 진행률: 완료 항목 수 / 전체 항목 수

#### 2.8.4 우측 상단: 기준 문서화

| 항목 | 설명 |
|------|------|
| 항목명 | 선택된 점검표 항목명 |
| 소거 | 해당 없음 시 소거 처리 |
| 관련 기준 문서 | 연결된 문서명 + 다운로드 아이콘 |

#### 2.8.5 우측 하단: 문서명

| 항목 | 설명 |
|------|------|
| 문서명 | 파일명 표시 |
| 미리보기 | 문서 미리보기 (이미지/PDF) |
| 페이지 정보 | 예: 파일명.pdf, 1 / 1 페이지 |

#### 2.8.6 완료 체크 박스

- 디폴트: 열림 상태
- 클릭: 완료 설정/해제 토글

#### 2.8.7 기준/매뉴얼 확인 버튼

- 클릭: 확인 완료 스티커로 변경 표시

---

### 2.9 품질인정심사 - 로트 추적 심사 (슬라이드 17)

**경로**: 품질관리 > 품질인정심사 > 로트 추적 심사 탭
**URL 제안**: `/quality/certification-audit` (같은 페이지, 탭 전환)

#### 2.9.1 좌측: 품질관리서 목록

**표시 조건**: 해당 분기로 실적신고 확정된 품질관리서

| 항목 | 설명 |
|------|------|
| 품질관리서 번호 | 예: KD-SS-2024- |
| 해당 분기 | 예: 2025년 3분기 |
| 현장명 | |
| 인정등록 | 인정등록 정보 |
| 수주코드 건수 | 예: 수주코드 2건 |
| 개소수 | |
| 진행률 | 예: 14% (완료/전체) |

클릭 시 → 우측에 수주코드 목록 표시

#### 2.9.2 중앙: 수주코드 목록

**표시 조건**: 해당 품질관리서에 연결된 수주코드 목록

| 항목 | 설명 |
|------|------|
| 수주코드 번호 | 예: KD-SS-240921-19 |
| 수주처 | |
| 수주일 | |
| 개소 수 | |
| 현장 | |
| 개소별 제품코드 확인 | 완료 수 / 전체 개소 수 (예: 0건 확인) |

클릭 시 → 우측에 해당 수주코드의 개소별 제품코드 목록 표시

#### 2.9.3 우측 상단: 개소별 제품코드 목록

| 컬럼 | 설명 |
|------|------|
| 수주코드 | |
| 일련번호 | |
| 확인 버튼 | 확인/완료 토글 |

#### 2.9.4 우측 하단: 확인 서류 목록

| 서류 종류 | 설명 |
|----------|------|
| 수입검사 성적서 | |
| 수주서 | |
| 수주서, 작업일지 | |
| 중간검사 성적서 | |
| 납품확인서, 출고증, 제품검사 성적서, 품질관리서 | |

- 각 서류 클릭 시 → 해당 문서 영역 열림/닫힘 토글
- 문서 미리보기 기능 제공 (이미지/PDF)

#### 2.9.5 확인 서류 구조 (계층)

```
품질관리서
└── 수주코드
    └── 개소별 제품코드
        └── 확인 서류
            ├── 수입검사 성적서
            ├── 수주서
            ├── 작업일지
            ├── 중간검사 성적서
            ├── 납품확인서
            ├── 출고증
            ├── 제품검사 성적서
            └── 품질관리서
```

---

## 3. 데이터 모델 관계

### 3.1 핵심 엔티티 관계도

```
[품질관리서 quality_documents]
├── 1:N → [품질관리서_수주 quality_document_orders] → N:1 [수주 orders]
│         └── 1:N → [수주_개소 order_locations]
│                    ├── 발주규격 (가로/세로)
│                    ├── 시공후규격 (가로/세로)
│                    ├── 변경사유
│                    └── 1:1 → [제품검사결과 inspection_results]
│                               ├── 검사항목별 적합/부적합
│                               ├── 실측값
│                               ├── 사진 2장
│                               └── 특이사항
├── 건축공사장 정보 (JSON options 또는 별도 섹션)
├── 자재유통업자 정보
├── 공사시공자 정보
├── 공사감리자 정보
├── 검사정보 (요청일, 시작일, 종료일, 검사자)
└── 현장주소

[실적신고 performance_reports]
├── quality_document_id → FK [품질관리서]
├── 분기 (year, quarter)
├── 확정상태
├── 확정일
└── 메모

[품질인정심사 certification_audits]
├── 기준/매뉴얼 심사 항목
│   ├── 점검표 항목 (트리 구조)
│   ├── 기준 문서 연결
│   └── 완료 상태
└── 로트 추적 심사
    ├── 품질관리서 → 수주코드 → 개소별 제품코드
    └── 확인 서류 목록
```

### 3.2 options JSON 활용 후보

SAM 프로젝트 컬럼 추가 정책(FK/조인키만 컬럼, 나머지 options JSON)에 따라:

| 엔티티 | options에 저장할 필드 |
|--------|---------------------|
| 품질관리서 | 건축공사장 정보, 자재유통업자 정보, 공사시공자 정보, 공사감리자 정보, 현장주소 |
| 수주_개소 검사결과 | 검사항목별 결과(적합/부적합), 실측값, 특이사항 |
| 실적신고 | 메모 |
| 품질인정심사 항목 | 소거 여부, 기준문서 연결 정보 |

---

## 4. 비즈니스 규칙

### 4.1 상태 머신

#### 제품검사 상태

```
접수 → 진행중 → 완료
         ↑         |
         └─────────┘ (재검사 시)
```

| 상태 | 트리거 | 조건 |
|------|--------|------|
| 접수 | 제품검사 등록 시 | 초기 상태 |
| 진행중 | 검사시작일 도달 또는 첫 검사 진행 시 | 검사자, 검사시작일 입력 완료 |
| 완료 | 검사 완료 버튼 클릭 | 모든 개소의 검사가 완료되어야 함 |

#### 실적신고 확정 상태

```
미확정 → 확정 → 신고완료
          ↑       |
          └───────┘ (해제 시)
```

| 상태 | 트리거 | 조건 |
|------|--------|------|
| 미확정 | 제품검사 완료 시 자동 생성 | |
| 확정 | 선택 확정 버튼 | 실적신고 필수정보(건축공사장/자재유통업자/공사시공자/공사감리자) 모두 입력 |
| 신고완료 | 외부 신고 처리 후 | |

### 4.2 실적신고 필수정보 검증

실적신고를 확정하려면 제품검사 상세의 다음 정보가 모두 입력되어야 함:
- 건축공사장 정보 (현장명, 대지위치, 지번)
- 자재유통업자 정보 (회사명, 회사주소, 대표자명, 전화번호)
- 공사시공자 정보 (회사명, 회사주소, 성명, 전화번호)
- 공사감리자 정보 (사무소명, 사무소주소, 성명, 전화번호)

**누락 표시**: 목록에서 "3건 누락", "4건 누락" 등 빨간색으로 표시 → 실적신고 시점에서는 반드시 입력해야 함

### 4.3 규격 변경 로직

- 발주 규격(가로/세로)과 시공후 규격(가로/세로) 비교
- 동일하면 자동으로 "동일" 분류
- 다르면 "변경" 분류 + 변경사유 필수 입력
- 하단 집계: 총 개소, 동일, 변경 카운트 표시

### 4.4 검사 항목 판정 기준

| No. | 항목 | 합격 기준 |
|-----|------|----------|
| 1 | 갈모양 - 가공상태 | 사용상 해로운 결함 없을 것 |
| 1 | 갈모양 - 재봉상태 | 내화실에 의해 견고하게 접합 |
| 1 | 갈모양 - 조립상태 | 엔드바 견고하게 조립 |
| 1 | 갈모양 - 연기차단재 | MV(L) W80, 가이드레일 W50 홈에 설치 |
| 1 | 갈모양 - 하단마감재 | 내부 부재정렬 삽입 유무 |
| 2 | 모터 | 인장제품과 동일사양 |
| 3 | 재질 | WY-SC780 인쇄상태 확인 |
| 4 | 길이 | 수주 치수 +/- 30mm |
| 4 | 높이 | 수주 치수 +/- 30mm |
| 4 | 가이드레일 홈간격 | 10 +/- 5mm (상중하 높이 100 이내) |
| 4 | 간격 | 가이드레일과 하단마감재 통싸 25mm 이내 |
| 5 | 개폐성능 | 6mm 균열게이지 관통 +/- 150mm 이동 유무 |
| 6 | 내화시험 | 25mm 균열게이지 관통 유무 |
| 7 | 차연시험 | 25Pa 시 공기누설량 0.9m3/min-m2 이하 |
| 8 | 개폐시험 - 평균속도 | 전도개폐 2.5~6.5m/min |
| 8 | 개폐시험 - 자중강하 | 3~7m/min |
| 8 | 개폐시험 - 자동정지 | 상부/하부 끝, 임의위치 자동정지 |

### 4.5 누락체크 로직

납품 완료(출고 완료)되었으나 제품검사가 미등록인 건을 자동 감지:
- 품질관리서 발행일 기준 분기 포함 여부
- 공사 미완료로 다음 분기 이월 시 누락
- 수주등록 시 다른 현장명으로 등록되어 매핑 누락
- 납품 후 제품검사 등록 자체 누락

### 4.6 품질인정심사 로직

#### 기준/매뉴얼 심사
- 점검표 항목을 트리 구조로 관리
- 각 항목별 기준 문서 연결
- 항목별 완료 체크
- 전체 진행률 = 완료 항목 / 전체 항목

#### 로트 추적 심사
- 해당 분기 실적신고 확정 건 기준
- 품질관리서 → 수주코드 → 개소별 제품코드 3단계 드릴다운
- 각 제품코드별 확인 서류 8종 검증
- 확인 서류: 수입검사 성적서, 수주서, 작업일지, 중간검사 성적서, 납품확인서, 출고증, 제품검사 성적서, 품질관리서

---

## 5. API 엔드포인트 설계 (후보)

### 5.1 제품검사관리

| Method | Endpoint | 설명 |
|--------|----------|------|
| GET | `/api/quality/inspections` | 제품검사 목록 (필터: status, date_range, search) |
| GET | `/api/quality/inspections/stats` | 상태별 카운트 (접수/진행중/완료) |
| GET | `/api/quality/inspections/schedule` | 캘린더 스케줄 (필터: year, month, status) |
| POST | `/api/quality/inspections` | 제품검사 등록 |
| GET | `/api/quality/inspections/{id}` | 제품검사 상세 |
| PUT | `/api/quality/inspections/{id}` | 제품검사 수정 |
| PUT | `/api/quality/inspections/{id}/complete` | 검사 완료 처리 |
| GET | `/api/quality/inspections/{id}/orders` | 연결된 수주 목록 |
| POST | `/api/quality/inspections/{id}/orders` | 수주 연결 추가 |
| DELETE | `/api/quality/inspections/{id}/orders/{orderId}` | 수주 연결 삭제 |
| GET | `/api/quality/inspections/available-orders` | 검사 미등록 수주 목록 (수주선택 팝업용) |
| POST | `/api/quality/inspections/{id}/orders/{orderId}/locations/{locationId}/inspect` | 개소별 검사 결과 저장 |
| GET | `/api/quality/inspections/{id}/request-document` | 검사제품요청서 데이터 |
| GET | `/api/quality/inspections/{id}/result-document` | 제품검사성적서 데이터 (페이지네이션) |

### 5.2 실적신고관리

| Method | Endpoint | 설명 |
|--------|----------|------|
| GET | `/api/quality/performance-reports` | 실적신고 목록 (필터: year, quarter, status, search) |
| GET | `/api/quality/performance-reports/stats` | 상태별 카운트 |
| PUT | `/api/quality/performance-reports/confirm` | 일괄 확정 (body: ids[]) |
| PUT | `/api/quality/performance-reports/unconfirm` | 일괄 확정 해제 (body: ids[]) |
| PUT | `/api/quality/performance-reports/memo` | 일괄 메모 작성 (body: ids[], memo) |
| GET | `/api/quality/performance-reports/missing` | 누락체크 목록 |
| GET | `/api/quality/performance-reports/export` | 확정건 엑셀 다운로드 |

### 5.3 품질인정심사

| Method | Endpoint | 설명 |
|--------|----------|------|
| GET | `/api/quality/certification-audit/summary` | 심사 진행률 요약 |
| GET | `/api/quality/certification-audit/standards` | 기준/매뉴얼 심사 점검표 |
| PUT | `/api/quality/certification-audit/standards/{itemId}` | 항목 완료/해제 토글 |
| GET | `/api/quality/certification-audit/standards/{itemId}/documents` | 항목 기준 문서 |
| GET | `/api/quality/certification-audit/lot-tracking` | 로트추적 품질관리서 목록 |
| GET | `/api/quality/certification-audit/lot-tracking/{docId}/orders` | 수주코드 목록 |
| GET | `/api/quality/certification-audit/lot-tracking/{docId}/orders/{orderId}/products` | 개소별 제품코드 |
| PUT | `/api/quality/certification-audit/lot-tracking/{docId}/orders/{orderId}/products/{productId}/verify` | 제품코드 확인 처리 |
| GET | `/api/quality/certification-audit/lot-tracking/{docId}/orders/{orderId}/products/{productId}/documents` | 확인 서류 목록 |

---

## 6. 메뉴 구조

```
품질관리
├── 제품검사관리        ← 슬라이드 2~12
│   ├── 제품검사 목록    (목록 + 캘린더)
│   └── 제품검사 상세    (상세 + 검사팝업 + 요청서 + 성적서)
├── 실적신고관리        ← 슬라이드 13~15
│   ├── 분기별 실적신고  (목록 + 메모팝업)
│   └── 누락체크        (목록)
└── 품질인정심사        ← 슬라이드 16~17
    ├── 기준/매뉴얼 심사 (점검표 + 문서확인)
    └── 로트 추적 심사   (3단계 드릴다운 + 서류확인)
```

---

## 7. 슬라이드-화면 매핑 (빠른 참조)

| 슬라이드 | 화면 | 섹션 |
|---------|------|------|
| 1 | 전체 프로세스 플로우 | 1장 |
| 2 | 제품검사 목록 (테이블) | 2.1 |
| 3 | 제품검사 목록 (캘린더) | 2.1.4 |
| 4 | 제품검사 상세 (기본정보 ~ 공사시공자) | 2.2.1~2.2.4 |
| 5 | 제품검사 상세 (공사감리자 ~ 수주설정 ~ 하단버튼) | 2.2.5~2.2.9 |
| 6 | 제품검사 상세 (수주 펼침 - 규격 비교) | 2.2.8 |
| 7 | 수주 선택 팝업 | 2.3 |
| 8 | 제품검사 팝업 (갈모양/치수) | 2.4 |
| 9 | 검사제품요청서 (상단) | 2.5 |
| 10 | 검사제품요청서 (하단 테이블) | 2.5 |
| 11 | 제품검사성적서 (상단 + 검사항목) | 2.6 |
| 12 | 제품검사성적서 (검사항목 계속 + 종합판정) | 2.6 |
| 13 | 실적신고 목록 (분기별) | 2.7 |
| 14 | 실적신고 메모 팝업 | 2.7.3 |
| 15 | 실적신고 누락체크 | 2.7.4 |
| 16 | 품질인정심사 (기준/매뉴얼) | 2.8 |
| 17 | 품질인정심사 (로트추적) | 2.9 |