# 품질/AS (Quality/After-Service) 분석 ## 개요 - **디렉토리**: `/as/` - **DB 테이블**: `work` (공사 테이블 내 AS 컬럼 사용) - **주요 기능**: AS 접수, 처리 추적, 클레임 관리, 보증 관리 ## 디렉토리 구조 ``` /as/ ├── list.php # AS 목록 (54KB) ├── view.php # AS 상세 (56KB) ├── write_form.php # AS 등록/수정 폼 (54KB) ├── func.php # 공통 함수 ├── delete.php # AS 삭제 ├── delete_ripple.php # 연관 삭제 ├── print_area.php # 인쇄 영역 ├── print_aslist.php # AS 목록 인쇄 ├── outputlist.php # 출력 목록 └── outputview.php # 출력 뷰 ``` ## DB 스키마 ### work 테이블 - AS 관련 컬럼 ```sql -- AS는 별도 테이블이 아닌 work 테이블의 컬럼으로 관리 -- work 테이블에 AS 관련 필드 포함 -- AS 기본 정보 as_check TINYINT, -- AS 체크 (1: AS 대상) as_state VARCHAR(50), -- AS 상태 (미접수, 접수완료, 처리예약, 세팅예약, 처리완료) as_step VARCHAR(50), -- AS 단계 -- AS 일정 정보 asday DATE, -- AS 접수일 asproday DATE, -- AS 처리예정일 setdate DATE, -- 세팅예정일 asendday DATE, -- AS 완료일 -- AS 담당자 정보 asman VARCHAR(50), -- AS 담당자 aswriter VARCHAR(50), -- AS 등록자 asorderman VARCHAR(50), -- AS 의뢰자 asordermantel VARCHAR(20), -- AS 의뢰자 연락처 -- AS 내용 aslist TEXT, -- AS 내역 asresult TEXT, -- AS 결과 ashistory TEXT, -- AS 이력 as_refer TEXT, -- AS 참조 -- AS 비용 asfee TINYINT, -- AS 유/무상 (0: 무상, 1: 유상) asfee_estimate INT, -- AS 유상금액 -- AS 체크박스 as_checkboxvalue1 CHAR(1), -- AS 체크1 as_checkboxvalue2 CHAR(1), -- AS 체크2 as_checkboxvalue3 CHAR(1), -- AS 체크3 as_checkboxvalue4 CHAR(1), -- AS 체크4 ``` ### 클레임 관련 컬럼 ```sql -- work 테이블 내 클레임 필드 claimperson VARCHAR(50), -- 클레임 담당자 claimtel VARCHAR(20), -- 클레임 연락처 claimList TEXT, -- 클레임 리스트 (JSON) sum_claimamount DECIMAL(15,0), -- 클레임금액 ``` ### 보증 관련 컬럼 ```sql -- work 테이블 내 보증 필드 warrantyFromDate DATE, -- 보증 시작일 warrantyToDate DATE, -- 보증 종료일 warrantyPeriod VARCHAR(50), -- 보증 기간 warrantyMemo TEXT, -- 보증 메모 ``` ### 인정검사 관련 컬럼 ```sql -- work 테이블 내 인정검사 필드 certifiedInspector VARCHAR(50), -- 인정검사원 certifiedLabelAttachedDate DATE, -- 인정라벨 부착일 ``` ## AS 상태 흐름 ### as_state 상태값 | 상태 | 설명 | 조건 | |------|------|------| | 미접수 | 초기 상태 | as_check = 1, asday 미입력 | | 접수완료 | AS 접수됨 | asday 입력 | | 처리예약 | 처리 예정 | asproday 입력 | | 세팅예약 | 세팅 예정 | setdate 입력 | | 처리완료 | AS 완료 | asendday 입력 | ### 상태 전이 다이어그램 ``` [미접수] → [접수완료] → [처리예약] → [처리완료] ↘ [세팅예약] ↗ ``` ## 비즈니스 로직 ### AS 목록 조회 (as/list.php) ```php // AS 대상 조회 조건 $a = "(as_check = '1') or (asday <> '0000-00-00') order by num desc"; // 상태별 필터링 if($asprocess == "전체") { $sql = "SELECT * FROM chandj.work WHERE " . $a; } elseif($asprocess == "미접수") { $sql = "SELECT * FROM chandj.work WHERE (as_state LIKE '%$asprocess%') AND (as_check = '1') ORDER BY num DESC"; } else { $sql = "SELECT * FROM chandj.work WHERE (as_state LIKE '%$asprocess%') ORDER BY num DESC"; } ``` ### AS 등록 조건 - `as_check = 1`: 해당 공사를 AS 대상으로 지정 - `asday` 입력 시: 자동으로 "접수완료" 상태로 변경 - work 테이블에 직접 UPDATE ### 유/무상 판단 ```php // asfee 값에 따른 유/무상 구분 if ($asfee == 0) { // 무상 AS } else { // 유상 AS - asfee_estimate 금액 적용 } ``` ## JSON 데이터 구조 ### claimList (클레임 리스트) ```json [ { "seq": 1, "claim_date": "2025-01-15", "claim_type": "품질불량", "description": "표면 스크래치", "status": "처리완료", "result": "교체 완료" } ] ``` ### ashistory (AS 이력) ```json [ { "date": "2025-01-15", "action": "접수", "handler": "홍길동", "note": "고객 불만 접수" }, { "date": "2025-01-20", "action": "처리완료", "handler": "김철수", "note": "부품 교체 완료" } ] ``` ## 관련 뷰 파일 ### 목록 뷰 - `list.php` - AS 전체 목록 (상태별 필터링) - `print_aslist.php` - AS 목록 인쇄 ### 상세 뷰 - `view.php` - AS 상세 정보 - `outputview.php` - 출력용 뷰 ### 등록/수정 뷰 - `write_form.php` - AS 등록/수정 폼 ## SAM 마이그레이션 포인트 ### 1. AS 테이블 분리 ```sql -- SAM: AS 독립 테이블 after_services ( id, tenant_id, project_id, -- work → projects 참조 as_number, -- AS 번호 (자동생성) status, -- pending, received, scheduled, completed -- 접수 정보 received_date, received_by, requester_name, requester_phone, -- 처리 정보 scheduled_date, setting_date, completed_date, handler_id, -- 비용 fee_type, -- free, paid fee_amount, -- 내용 issue_description, result_description, created_at, updated_at ) ``` ### 2. AS 이력 테이블 ```sql -- SAM: AS 상태 이력 after_service_histories ( id, after_service_id, from_status, to_status, action, -- received, scheduled, completed, reopened handler_id, note, created_at ) ``` ### 3. 클레임 테이블 분리 ```sql -- SAM: 클레임 관리 claims ( id, tenant_id, project_id, after_service_id, -- AS와 연결 (선택) claim_number, claim_type, -- quality, delivery, etc. claim_date, description, status, -- open, investigating, resolved, closed resolution, claimed_amount, approved_amount, created_at, resolved_at ) ``` ### 4. 보증 테이블 분리 ```sql -- SAM: 보증 관리 warranties ( id, tenant_id, project_id, warranty_number, start_date, end_date, period_months, coverage_type, -- full, limited, parts_only terms TEXT, is_active, created_at ) ``` ### 5. 인정검사 이력 ```sql -- SAM: 인정검사 이력 (output 테이블 ACI와 연계) certifications ( id, tenant_id, project_id, shipment_id, -- output → shipments 참조 inspector_name, inspection_date, label_attached_date, certificate_number, result, -- passed, failed, conditional documents JSON, created_at ) ``` ## 특이사항 ### work 테이블 통합 구조 5130에서 AS는 별도 테이블이 아닌 `work` (공사) 테이블에 통합: - 장점: 공사-AS 데이터 일체화로 조회 용이 - 단점: 하나의 공사에 다수 AS 발생 시 관리 어려움 - SAM에서는 1:N 관계로 분리 권장 ### 상태 관리 - 상태값이 한글 문자열로 저장 (`미접수`, `접수완료` 등) - SAM에서는 enum 또는 상수 테이블로 정규화 권장 ### 클레임-AS 관계 - 현재 구조에서 클레임과 AS가 명확히 구분되지 않음 - SAM에서는 claims와 after_services 테이블로 분리하되 연결 가능하도록 설계 ## 참고 파일 - `/as/list.php` - AS 목록 쿼리 및 상태 필터링 (54KB) - `/as/view.php` - AS 상세 표시 (56KB) - `/work/_request.php` - AS 관련 91개 변수 정의 - `/work/insert.php` - work 테이블 저장 (AS 컬럼 포함)