# SAM API 작업 현황

## TODO - 운영용 작업지시 취소 기능 (Production Work Order Cancellation)

### 배경
- 현재 `revertProductionOrder()`는 **개발/테스트용** (전체 초기화 - work_orders 및 하위 데이터 삭제)
- 운영 환경에서는 **비즈니스 취소** 개념이 필요 (이력 보존 + 역분개)
- 개발용과 운영용이 **별도 공존**해야 함

### 요구사항
1. **상태 변경**: `pending`/`in_progress` → `cancelled` (completed는 취소 거부)
2. **자재 역분개**: 삭제가 아닌 역분개 트랜잭션 생성 (이력 보존)
3. **사유 기록 필수**: `cancelled_at`, `cancelled_by`, `cancel_reason` 필드 추가
4. **단건 처리**: 특정 작업지시 1건 단위로 취소 (전체 초기화와 구분)
5. **감사 추적**: 취소 이력이 감사 로그에 남아야 함

### 영향 범위
- `WorkOrderService.php` - `cancelWorkOrder()` 메서드 신규
- `work_orders` 테이블 - `cancelled_at`, `cancelled_by`, `cancel_reason` (options JSON 활용 가능)
- `stock_transactions` - 역분개 트랜잭션 생성 로직
- 프론트엔드 - 취소 사유 입력 모달 + 취소 버튼 조건부 표시

### 우선순위: 🟡 중간 (Phase 4 이후)

---

## TODO - 건설관리 Backend API 미개발 모듈

| 모듈 | 설명 |
|------|------|
| bidding | 입찰관리 |
| site-briefings | 현장설명회 |
| structure-review | 구조검토 |
| labor-management | 노무관리 (Labor API는 별도 완료) |

---

## 최근 커밋 이력 (참고용)

| 날짜 | 커밋 | 내용 |
|------|------|------|
| 2026-02-21 | `5ecd966` | 견적 converted 상태 데이터 기반 변경 |
| 2026-02-21 | `b0547c4` | FG 수식 산출 입력폼/파싱/폴백 추가 |
| 2026-02-19 | `23029b1` | 작업지시 show() materialInputs eager loading 추가 |
| 2026-02-19 | `316d412` | 슬랫 작업일지 데이터 파이프라인 구축 |
