# 전자결재 (슬라이드 47-59)

## 1. 개요

전자결재 모듈은 기안함, 결재함, 참조함으로 구성되며, 품의서, 지출결의서, 지출 예상 내역서 등의 문서를 처리합니다.

## 2. 기안함 (슬라이드 48-54)

### 2.1 문서 상태
| 상태 | 설명 |
|------|------|
| 임시저장 | 문서 작성 중, 임시저장된 상태 |
| 진행 | 모든 결재자 중 일부 승인된 상태, 결재 요청을 받은 상태 |
| 결재요청 | 결재 요청을 받은 상태 |
| 반려 | 결재자 중 반려한 사람이 있는 상태 |

### 2.2 기안함 현황 카드
| 항목 | 설명 |
|------|------|
| 진행 | 진행 중인 문서 수 |
| 전체 | 전체 문서 수 |
| 반려 | 반려된 문서 수 |
| 임시 저장 | 임시저장 문서 수 |

### 2.3 문서 작성 버튼
- 클릭: 문서 작성 화면으로 이동

### 2.4 상세 버튼
- 클릭: 문서 상세 팝업 표시

### 2.5 삭제 버튼
- 클릭:
  1) 임시저장 상태일 경우: "정말 이(1)건을 삭제 처리하시겠습니까?" 확인 Alert 표시, 확인 시 해당 문서 삭제 처리
  2) 임시저장 상태가 아닐 경우: "임시저장 상태만 삭제가 가능합니다." 알림 Alert 표시

### 2.6 수정 버튼
- 클릭:
  1) 임시저장 상태일 경우: 문서 작성 화면으로 이동
  2) 임시저장 상태가 아닐 경우: 문서 상세 팝업 표시

### 2.7 필터 셀렉트 박스
- 종류: 전체, 임시저장, 진행, 완료, 반려
- 디폴트: 전체

### 2.8 정렬 셀렉트 박스
- 종류: 최신순, 등록순
- 디폴트: 최신순

## 3. 문서 작성 (슬라이드 49-54)

### 3.1 상세 버튼
- 클릭: 문서 상세 팝업 표시

### 3.2 문서 유형 셀렉트 박스, 검색
- 종류: 품의서, 지출결의서, 지출 예상 내역서
- 선택한 문서 유형의 화면으로 변경 표시

### 3.3 결재자 셀렉트 박스, 검색&다중 선택
- 항목: 부서명, 직책명, 사원명 표시
- 종류: 전체, 모든 사원 목록
- 디폴트: 전체

### 3.4 참조자 셀렉트 박스, 검색&다중 선택
- 항목: 부서명, 직책명, 사원명 표시
- 종류: 전체, 모든 사원 목록
- 디폴트: 전체

### 3.5 버튼 영역
| 버튼 | 설명 |
|------|------|
| 상세 | 문서 상세 팝업 표시 |
| 삭제 | 임시저장 상태만 삭제 가능 |
| 삼신 | 결재선 마감 경우 숨김 |
| 임시저장 | 임시저장 처리 |

## 4. 품의서 (슬라이드 50)

### 4.1 구매처 정보
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 구매처 | Y | |
| 구매처 결제일 | Y | |

### 4.2 품의서 정보
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 제목 | Y | |
| 품의 내역 | Y | 녹음 버튼: 마이크 사용 가능할 경우에만 버튼 활성화, 녹음 중지 버튼으로 변경, 음성 내용을 텍스트로 변경하여 (1-1) 인풋박스 영역에 표시 |
| 품의 사유 | Y | |
| 예상 비용 | Y | |

### 4.3 참고 이미지 정보
- 첨부파일 찾기

## 5. 지출결의서 (슬라이드 51-52)

### 5.1 지출 정보
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 지출 요청일 | Y | |
| 결제일 | Y | |

### 5.2 지출결의서 정보
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 적요 | Y | |
| 금액 | Y | |
| 비고 | N | |

### 5.3 결제 정보
| 필드명 | 필수 | 설명 |
|--------|------|------|
| 카드 | Y | 종류: 등록된 카드 목록, 디폴트: 첫번째 카드 |
| 총 비용 | - | 지출결의서 정보의 금액 합계 표시 |

### 5.4 참고 이미지 정보
- 첨부파일 찾기

## 6. 지출 예상 내역서 (슬라이드 53-54)

### 6.1 지출 예상 내역서 목록
- 체크 설정/해제 토글
- 1) 지출 예상 내역서 화면에서 찾을 경우: 설정된 체크 상태 유지
- 2) 문서 작성 화면에서 설정했을 경우: 모든 체크 항목 설정된 상태

### 6.2 항목
| 필드명 | 설명 |
|--------|------|
| 예상 지급일 | |
| 품목 | |
| 지출금액 | |
| 거래처 | |
| 계좌 | |

### 6.3 합계
| 항목 | 설명 |
|------|------|
| 지출 합계 | |
| 계좌 잔액 | |
| 최종 차액 | |

## 7. 결재함 (슬라이드 55-58)

### 7.1 상태
| 상태 | 설명 |
|------|------|
| 진행 | 결재 하위 상태 |
| 예정 | 결재 순번에 의한 대기 |
| 결재요청 | 결재 요청을 받은 상태 |

### 7.2 결재함 현황 카드
| 항목 | 설명 |
|------|------|
| 결재 요청 | 결재 요청 문서 수 |
| 완료 | 완료 문서 수 |
| 반려 | 반려 문서 수 |
| 예정 | 예정 문서 수 |

### 7.3 승인 버튼
- 클릭: "정말 (1)건을 승인하시겠습니까?" 확인 Alert 표시
- 확인 버튼 클릭 시 "승인이 완료되었습니다." 알림 Alert 표시

### 7.4 반려 버튼
- 클릭: "정말 (1)건을 반려하시겠습니까?" 확인 Alert 표시
- 확인 버튼 클릭 시 "반려가 완료되었습니다." 알림 Alert 표시

### 7.5 필터 셀렉트 박스
- 종류: 전체, 결재 요청, 예정, 완료, 반려
- 1/3 완료: 결재선 승인 진행도에 따라 표시
- 디폴트: 전체

### 7.6 수정 버튼
- 클릭: 문서 상세 팝업 표시

## 8. 참조함 (슬라이드 59)

### 8.1 열람 버튼
- 클릭: "정말 (1)건을 열람 처리하시겠습니까?" 확인 Alert 표시
- 확인 버튼 클릭 시 "열람 처리가 완료되었습니다." 알림 Alert 표시

### 8.2 미열람 버튼
- 클릭: "정말 (1)건을 미열람 처리하시겠습니까?" 확인 Alert 표시
- 확인 버튼 클릭 시 "미열람 처리가 완료되었습니다." 알림 Alert 표시

### 8.3 필터 셀렉트 박스
- 종류: 전체, 열람, 미열람
- 디폴트: 전체

## 9. 문서 상세 팝업 (슬라이드 56-58)

### 9.1 버튼 영역
| 버튼 | 설명 |
|------|------|
| 복제 | 문서 작성 화면으로 이동 (새글) |
| 수정 | 결재선 중에서는 누구나 수정 가능, 해당 문서 작성 화면으로 이동 |
| 반려 | 결재선 마감 경우 숨김 |
| 승인 | 결재선 마감 경우 숨김 |
| 인쇄 | |
| 공유 | (5-1) 팝업 표시 |
| 닫기 | |

### 9.2 결재선 영역
- 승인/반려 시 해당 아이콘 표시

### 9.3 공유 버튼
| 공유 방식 | 설명 |
|-----------|------|
| PDF | |
| 이메일 | |
| 카카오톡 | |

---

## 데이터 모델

### ApprovalDocument (결재 문서)
```
- id: bigint
- tenant_id: bigint (FK)
- document_number: string
- document_type: enum('request', 'expense', 'expense_estimate')
- title: string
- status: enum('draft', 'pending', 'in_progress', 'approved', 'rejected')
- drafter_id: bigint (FK) # 기안자
- content: json # 문서 내용
- attachments: json
- created_at: timestamp
- submitted_at: timestamp
```

### ApprovalLine (결재선)
```
- id: bigint
- document_id: bigint (FK)
- approver_id: bigint (FK)
- order: int
- status: enum('pending', 'approved', 'rejected')
- comment: text
- approved_at: timestamp
```

### ApprovalReference (참조자)
```
- id: bigint
- document_id: bigint (FK)
- referee_id: bigint (FK)
- is_read: boolean
- read_at: timestamp
```

### ExpenseItem (지출 항목)
```
- id: bigint
- document_id: bigint (FK)
- description: string
- amount: decimal
- note: text
```

---

## API 도출

### 기안함 API
```
GET    /api/approvals/drafts             # 기안 목록
POST   /api/approvals                    # 문서 작성
PUT    /api/approvals/{id}               # 문서 수정
DELETE /api/approvals/{id}               # 문서 삭제
POST   /api/approvals/{id}/submit        # 문서 제출 (결재 요청)
POST   /api/approvals/{id}/save-draft    # 임시저장
GET    /api/approvals/{id}               # 문서 상세
GET    /api/approvals/drafts/summary     # 기안함 현황
```

### 결재함 API
```
GET    /api/approvals/inbox              # 결재함 목록
POST   /api/approvals/{id}/approve       # 승인
POST   /api/approvals/{id}/reject        # 반려
GET    /api/approvals/inbox/summary      # 결재함 현황
```

### 참조함 API
```
GET    /api/approvals/references         # 참조함 목록
POST   /api/approvals/{id}/mark-read     # 열람 처리
POST   /api/approvals/{id}/mark-unread   # 미열람 처리
```

### 문서 공유 API
```
GET    /api/approvals/{id}/pdf           # PDF 다운로드
POST   /api/approvals/{id}/share/email   # 이메일 공유
POST   /api/approvals/{id}/share/kakao   # 카카오톡 공유
```