# 전자결재 (슬라이드 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 # 카카오톡 공유 ```