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