HBEA421_보고서 제출
(Hereby) 직원 앱 > 결재 허브([[HBEA400_결재 허브]]) > 근무([[HBEA420_근무 신청 (연장·휴일/외근)]]) > 보고서 제출
| 앱 | 직원 앱 (Hereby Works, 포트 4002) |
| 대상 사용자 | 조건3 [EMPLOYEE] (self scope 인증 세션) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_결재워크플로우]] · mobile/approval (연장근무) |
| Status | review |
| Owner | 카나 |
개요
보고서 제출은 근무 신청([[HBEA420_근무 신청 (연장·휴일/외근)]]) "근무" 서브탭 요약의 보고서 카운트에 대응하는 근무 보고서(외근·연장 후속 보고) 제출 표면이다. 트리거는 승인된 외근(연장) 내역 행에 노출되는 "외근 보고서 작성" 버튼으로, 팀장이 외근 신청을 승인([[HBTM220_근무 관리 (연장·휴일/외근)]])하면 신청자 화면 해당 행에 버튼이 등장한다. 보고서 폼 제출은 2026-07-12 dev 실행으로 검증되었다 — 제출 후 요약 카운트 증가, 내역 행 "실제 외근 시간: {n}h" + 보고 내용 표시, "외근 보고서 작성" 버튼 소멸, 상태 "보고서 대기"로 전이한다. 공통 서브탭 골격은 [[HBEA400_결재 허브]]을 참조한다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-12 | 카나 | PM | 실행 검증 반영 (콸 승인) |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | 보고서 제출·승인 건수 집계 | "보고서 0건 (승인 0)" | 근무 요약 카드 소비([[HBEA420_근무 신청 (연장·휴일/외근)]]) |
| $ | offsite_work_records.report / overtime_records.report (jsonb, self, 추정) | 근무 필터 "보고서" 0건 시 근무 내역 Empty | 상세 구조 TBU |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 보고서 제출 ("제출") | recordId·시작·종료시간·유형·reportBody | sdk.*.submitReport() (추정) | self |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| 팀결재 [[HBTM220_근무 관리 (연장·휴일/외근)]] | 승인 → "외근 보고서 작성" 버튼 노출 트리거 / 보고서 대기 → 승인·반려 | 비동기 | 팀장 결재 소관 |
화면 플로우 (Mermaid 의무)
보고서 제출 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | • 조건1 [직원 인증] · 승인된 외근(연장) 내역 행의 "외근 보고서 작성" 버튼으로 폼 진입 • 클릭 시: 보고서 폼 진입 - CASE01 [승인 전]: 버튼 미노출 - CASE02 [승인]: 버튼 노출 | 인증 세션 (self) · [[HBTM220_근무 관리 (연장·휴일/외근)]] | 승인 후 트리거 (검증) |
| 01 | 초기 상태 | Output | • 근무 서브탭 요약 카드 "보고서 {n}건 (승인 {m})" - CASE01 [미제출]: "보고서 0건 (승인 0)" (census) | $ | census 관측 |
| 10 | 보고서 요약 | Output | • 근무 요약 카드에서 "보고서 {n}건 (승인 {m})" 노출. 보고서 제출 시 건수 증가 - 검증: 제출 후 "보고서 1건 (승인 0)" | [[HBEA420_근무 신청 (연장·휴일/외근)]] | 제출 시 카운트 증가 (검증) |
| 20 | 보고서 목록 | List | • 근무 내역 필터 "보고서" 종속 행. 상태 배지 노출 | offsite_work_records.report / overtime_records.report (추정) | 값없음: ${reports} 부재 → "보고서" 필터 결과 비움 · ${report_count} 부재 → "보고서 0건 (승인 0)" 기본 · TBU: 목록 로드 실패 동작 미검증, 무반응이면 버그 후보 |
| ㄴ21 | ㄴ 제출 완료 행 | - | CASE01 [제출 완료] → 행에 "실제 외근 시간: {n}h" + 보고 내용 표시, "외근 보고서 작성" 버튼 소멸, 상태 "보고서 대기" | 전부 검증 (2026-07-12) | |
| ㄴ22 | 상태 배지 | Badge | CASE01 [제출 직후] → "보고서 대기" (검증). 이후 승인/반려 전이는 [[HBTM220_근무 관리 (연장·휴일/외근)]] 참조 | record status (추정) | TBU: 승인/반려 전이 |
| ㄴ20-E | Empty | Text | 근무 내역 0건 → "근무 신청 내역이 없습니다" (원문 카피, 근무 서브탭 공통) | census 원문 | |
| 30 | 외근 보고서 작성 버튼 | Button | • 승인된 외근(연장) 내역 행에서 보고서 폼을 여는 버튼 • 클릭 시: "외근 보고서" 폼 모달 오픈 | 외근 보고서 폼 · [[HBTM220_근무 관리 (연장·휴일/외근)]] | 승인 트리거 (검증) |
| ㄴ31 | ㄴ 제출 후 상태 | - | CASE01 [제출됨] → 버튼 소멸(검증) |
서브 화면 / 모달 사양표
외근 보고서 폼 (모달) 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 진입 조건 | - | 승인된 외근 내역 행 "외근 보고서 작성" 클릭 시 모달 오픈. 제목 "외근 보고서" | 30 버튼 | |
| 01 | 초기 상태 | - | 신청서 값 프리필. 근무일 수정불가 / 시작·종료 시간·사유 수정가능. "취소" / "제출" 노출 | 대상 offsite_work_records | policy mobile/approval §3.2 |
| 10 | 외근일(근무일) | Output | 신청서와 동일, 수정 불가 | offsite_work_records.workDate | policy: 수정 불가 |
| 20 | 시작 시간 | Input (time) | • 외근 시작 시각 필드. 신청서와 동일, 수정 가능 • 입력 시: 외근 시간 재계산 트리거 | 계산 입력 | policy: 수정 가능 |
| 30 | 종료 시간 | Input (time) | • 외근 종료 시각 필드. 신청서와 동일, 수정 가능 • 입력 시: 외근 시간 재계산 트리거 | 계산 입력 | policy: 수정 가능 |
| 40 | 외근 시간 (자동 계산) | Output | • 시작·종료로 외근 시간을 자동 계산해 "외근 시간: n시간" 표시 - CASE01 [시간 수정]: 재계산 | 계산값 (종료 − 시작) | policy: 자동 계산 |
| 50 | 유형 | Select | • 외근/연장 유형을 선택하는 필드. 시간에 따라 자동 설정 후 직접 설정 가능(policy) • 클릭 시: 유형 드롭다운 | Admin 외근/연장 유형 | policy §3.2 |
| 60 | 보고 내용 | Textarea | • 보고 내용을 입력하는 필드. placeholder "외근 중 수행한 업무를 작성해주세요..." • 입력 시: reportBody 채움 | reportBody | |
| ㄴ61 | 사유 프리셋 | Button group | 클릭 → 보고 내용/사유 채움(자유입력 병행). 5종 원문 "거래처 방문" / "외부 미팅" / "교육·세미나" / "관공서 업무" / "물품 구매" | reason | 외근 신청 폼과 동일 프리셋 |
| 70 | 취소 | Button | • 보고서 작성을 중단하는 버튼 • 클릭 시: 폼 모달 닫힘(제출 없음), 내역 행 버튼 유지 | ||
| 80 | 제출 | Button | • 보고서를 제출하는 버튼 • 클릭 시: 즉시 제출(컨펌 없음), 성공: 하위 결과(ㄴ81) → 대상 record report(jsonb) 반영(추정) → [[HBTM220_근무 관리 (연장·휴일/외근)]] 결재 큐 인입 | mutation (self) · [[HBTM220_근무 관리 (연장·휴일/외근)]] | TBU: 제출 실패 동작 미검증(무반응이면 버그 후보) · 보고 내용·시간 미입력 시 제출 차단 여부 미검증 |
| ㄴ81 | ㄴ 제출 성공 결과 | - | 요약 "보고서 1건 (승인 0)" 카운트 증가 + 내역 행 "실제 외근 시간: {n}h" + 보고 내용 표시 + "외근 보고서 작성" 버튼 소멸 + 상태 "보고서 대기" | 전부 검증 (2026-07-12) |
연동·플로우
- 외근·연장 근무 STEP1 [승인 후] "외근 보고서 작성" → STEP2 [보고서작성] 외근 보고서 폼(시작·종료 시간 수정 → 외근 시간 자동 계산) → STEP3 [제출] "제출" → 요약 "보고서 1건 (승인 0)" 증가, 내역 행에 "실제 외근 시간: {n}h" + 보고 내용 표시, 버튼 소멸, STEP4 [보고서대기] 상태 "보고서 대기" → 대상 record의 report(jsonb)에 반영(추정) → 팀장 결재([[HBTM220_근무 관리 (연장·휴일/외근)]])에서 보고서 대기/승인/반려.
- 외근 내역 행 "취소"(컨펌 없이 즉시, 대기→취소, 버튼 소멸)는 승인 전 신청 취소 경로로 [[HBEA420_근무 신청 (연장·휴일/외근)]] 소관이며, 본 흐름(승인 후 보고서)과 별개다.
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
| CASE01 [승인 전] | 외근 신청 대기 | "외근 보고서 작성" 버튼 미노출 | HBEA420 소관 취소 가능 |
| CASE02 [승인] | 팀장 승인 (HBTM220) | 내역 행 "외근 보고서 작성" 버튼 노출 | 검증 |
| CASE03 [보고서 제출] | 폼 "제출" | 카운트 증가 + "실제 외근 시간: {n}h" + 버튼 소멸 + 상태 "보고서 대기" | 검증 (2026-07-12) |
| CASE04 [보고서 승인/반려] | 팀장 결재 | 상태 "보고서 승인" / "보고서 반려" | [[HBTM220_근무 관리 (연장·휴일/외근)]] 참조, 상세 TBU |
| 조건3 [EMPLOYEE] | self scope | 작성·제출만, 결재 mutation 없음 | HBTM220 소관 |
Open Question
- 제출 후 상태 "보고서 대기"까지 검증됨. 이후 팀장 결재의 보고서 승인/반려 전이 상세는 [[HBTM220_근무 관리 (연장·휴일/외근)]] 참조.
- 보고서가 연장/외근 각각의 report jsonb에 저장되는지, 별도 Report 엔티티인지. ERD 미확인. TBU.
- 보고서 상태 enum 및 제출 필수 여부(승인 조건인지 선택 후속인지). TBU.
- 제출 실패·필수값 미입력 시 폼 동작. 라이브 미검증. TBU.