Files
sam-docs/projects/legacy-5130/06_QUALITY.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

326 lines
8.2 KiB
Markdown

# 품질/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 컬럼 포함)