HBGA220_반복 업무 관리
(Hereby) 총무 > 반복 업무 관리
| 앱 | 총무 (HBGA) |
| 대상 사용자 | 조건1 [GA_ADMIN] / 조건2 [SUPER_ADMIN] |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_반복업무관리]] |
| Status | review |
| Owner | 카나 (PM) |
개요
- 사이드바 "관리" 메뉴 = 반복 점검업무 정의 관리(recurring_tasks).
- 시설/안전/소방 등 정기 점검업무를 정의하고 체크리스트(task_checklist_items)와 실행내역(recurring_task_executions)을 연결한다.
- 카테고리 탭 9종 + "업무명 검색..." + "+ 업무 추가" + 7컬럼 그리드로 구성한다.
- row action = "실행내역" / "수정" / "삭제"(컨펌 "이 업무를 삭제하시겠습니까?"). "실행내역"은 인라인 서브뷰.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 + 확정 스타일 |
| 2026-07-21 | 카나 | PM | TC 크로스체크 확정분 반영 (🟡) |
Data I/O
Server → Client
| 변수 | 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | recurring_tasks[] (title/category/frequency/assignedTo/isActive) | 목록 0건 (Empty 처리) | 7컬럼 그리드 소스 |
| $ | task_checklist_items count | 0개 | 업무별 "체크항목" 수 (예 "2개") |
| $ | recurring_task_executions[] (예정일/상태/완료일/완료자/비고) | 실행내역 서브뷰 목록 | 서브뷰 소스 |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 업무 추가 | title, category, frequency, assignedTo, dueDay, description, isActive, checklistItems[] {title, isRequired, sortOrder} | generalAffairs.task.create() (TC 확정: 05:5.4) | GA_ADMIN |
| 업무 수정 | 상동 + taskId | generalAffairs.task.update() | GA_ADMIN |
| 업무 삭제 | taskId | generalAffairs.task.delete() | GA_ADMIN |
| 실행 생성 | recurringTaskId | generalAffairs.task.createExecution() (TC 확정: 05:5.4) — 생성 시 업무의 checklistItems가 completion 행으로 fan-out | GA_ADMIN |
| 실행 수정 | executionId, {status:"in_progress", checklistCompletions:[{taskChecklistItemId, isCompleted, notes}]} | generalAffairs.task.updateExecution() (TC 확정: 05:5.4) | GA_ADMIN |
화면 플로우
반복 업무 관리 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | 사이드바 "관리" 메뉴 클릭 시 /general-affairs/tasks 진입. 조건1 [GA_ADMIN] 이상 | [[HBGA100_Shell·사이드바]] | 메뉴 라벨 "관리"=반복 업무 관리 |
| 01 | 초기 상태 | - | 카테고리 탭 "전체" 활성 + 검색 비어있음 + 7컬럼 목록 노출 | ||
| 10 | 카테고리 탭 | Tab | • 카테고리별로 업무 목록을 거르는 탭 9종 "전체" / "시설관리" / "안전점검" / "소방" / "위생" / "장비" / "문서" / "규정준수" / "기타" • 클릭 시: 해당 카테고리로 목록 필터 전환 - CASE01 ["전체"]: 전 카테고리 노출 - CASE02 [특정 카테고리]: 일치 업무만 노출 | recurring_tasks.category | 9종 |
| 20 | 검색 | Search | • 업무명으로 목록을 거르는 입력 • 입력 시: 일치 업무만 표시(client/server filter) - CASE01 [결과 없음]: "데이터가 없어요." | client/server filter | placeholder "업무명 검색..." |
| 30 | 업무 추가 | Button | • 신규 반복 업무를 생성하는 진입 버튼 • 클릭 시: "업무 추가" 모달 오픈 (필드는 하단 모달 사양표) | recurring_tasks create · 업무 추가 모달 사양표 | mutation |
| 40 | 업무 목록 | Table | • 반복 업무를 7컬럼으로 나열하는 그리드 "업무명 / 카테고리 / 주기 / 담당자 / 체크항목 / 상태 / 관리" | recurring_tasks | |
| ㄴ41 | row 예시 | ListItem | • 목록 행 표기 예시 "소방시설 점검 / 시설관리 / 매월 / 김소방 / 2개 / 활성" | ||
| ㄴ42 | row action — 실행내역 | Button | • 해당 업무의 실행내역으로 이동하는 버튼 • 클릭 시: 실행내역 인라인 서브뷰 전환 (하단 실행내역 서브뷰 사양표) | recurring_task_executions | |
| ㄴ43 | row action — 수정 | Button | • 업무 정의를 수정하는 버튼 • 클릭 시: "업무 수정" 모달 오픈 (기존 값 채움) | task update | mutation |
| ㄴ44 | row action — 삭제 | Button | • 업무 정의를 삭제하는 버튼 • 클릭 시: 컨펌 "이 업무를 삭제하시겠습니까?" → 삭제 실행 | task delete | mutation, 컨펌 |
| 50 | 페이지네이션 | Pagination | • 목록 페이지 이동 컨트롤 "« ‹ 1 › »" • 클릭 시: 해당 페이지 목록 로드 | "총 2건 중 1-2건" |
업무 추가 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | "+ 업무 추가" 클릭 시 모달 오픈 | 반복 업무 관리 사양표 30 | |
| 10 | 제목 | Text | • 모달 헤더 "업무 추가" | ||
| ㄴ11 | 업무명 | Input | • 업무명 입력 "업무명 *" (placeholder "업무명을 입력하세요...") — 저장 활성화 필수 필드 • 입력 시: 저장 버튼 disabled 해제 조건 충족 | title | 필수 |
| ㄴ12 | 카테고리 | Dropdown | • 카테고리 선택 "카테고리" | category | |
| ㄴ13 | 실행주기 | Dropdown | • 실행주기 선택 "실행주기" (매월 등) | frequency | |
| ㄴ14 | 담당자 | Input/Dropdown | • 담당자 입력·선택 "담당자" | assignedTo | |
| ㄴ15 | 실행일 (일) | Input | • 실행 예정일(일자) 입력 "실행일 (일)" | dueDay | |
| ㄴ16 | 설명 | Input Box | • 업무 설명 입력 "설명" | description | |
| ㄴ17 | 활성 | Checkbox | • 활성 여부 토글 "활성" 체크 • 클릭 시: isActive on/off | isActive | |
| ㄴ18 | 체크리스트 항목 | Repeater | • 점검 체크리스트 항목을 배열로 정의하는 필드 checklistItems[]• 각 항목 = {title, isRequired, sortOrder}• 저장 시: generalAffairs.task.create 인자로 전달되어 task_checklist_items로 저장 | task_checklist_items / checklistItems[] | 신규 명시 (TC 확정: 05:5.4) |
| 20 | 취소 | Button | • 모달을 닫는 버튼 • 클릭 시: 모달 닫기 (변경 없음) | ||
| 30 | 저장 | Button | • 입력값(checklistItems[] 포함)으로 업무를 생성하는 버튼 • 클릭 시: generalAffairs.task.create 실행 (필수 입력 전 disabled)- STEP1 업무명 입력 전 disabled - STEP2 저장 성공 시 목록 갱신 | recurring_tasks create · task_checklist_items | mutation, 사람 저장 (TC 확정: 05:5.4) |
실행내역 서브뷰 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | 업무 row "실행내역" 선택 시 인라인 서브뷰로 전환 | recurring_task_executions | |
| 01 | 초기 상태 | - | 백링크 + 제목 + "+ 실행 생성" + 실행 목록 노출 | ||
| 10 | 목록 복귀 | Button | • 업무 목록으로 돌아가는 백링크 • 클릭 시: "← 목록" → 업무 목록 복귀 | 반복 업무 관리 사양표 | |
| 20 | 제목 | Text | • 대상 업무명을 표기하는 헤더 "{업무명} - 실행내역" | recurring_tasks.title | |
| 30 | 실행 생성 | Button | • 신규 실행내역을 생성하는 버튼 • 클릭 시: generalAffairs.task.createExecution({recurringTaskId}) 실행 → 업무의 checklistItems가 completion 행으로 fan-out됨 | taskExecution create · checklist_completions | mutation (TC 확정: 05:5.4) |
| 40 | 실행 목록 | Table | • 실행내역을 6컬럼으로 나열하는 그리드 "예정일 / 상태 / 완료일 / 완료자 / 비고 / 관리" | recurring_task_executions | |
| ㄴ41 | 상태 | Text | • 실행 상태 표기. status enum에 in_progress 확정 ("대기"/in_progress/완료 등) | status enum (in_progress 확정) | TC 확정: 05:5.4 |
| ㄴ42 | 관리 — 수정 | Button | • 실행내역과 체크리스트 완료를 갱신하는 버튼 • 클릭 시: generalAffairs.task.updateExecution({status:"in_progress", checklistCompletions:[{taskChecklistItemId, isCompleted, notes}]}) — 체크리스트 완료가 completion 행 단위로 처리됨 | execution update · checklist_completions | mutation (TC 확정: 05:5.4) |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
조건1 [GA_ADMIN] | "관리" 메뉴 진입 | 반복 업무 목록 노출 | |
CASE01 [업무 추가] | "+ 업무 추가" → 저장 | 업무 정의 생성 → 목록 갱신 | 업무명 전 저장 disabled |
CASE02 [삭제] | row "삭제" 클릭 | 컨펌 "이 업무를 삭제하시겠습니까?" → 삭제 실행 | kana-test 생성→삭제 검증 완료 |
CASE03 [검색 무결과] | "업무명 검색..." 무결과 | "데이터가 없어요." |
Open Question
체크리스트 완료 UI(task_checklist_items 완료 처리) 라이브 미확인 = TBU→ 해소: 실행 생성(createExecution) 시 업무의 checklistItems가 completion 행으로 fan-out되고,updateExecution({status:"in_progress", checklistCompletions:[{taskChecklistItemId, isCompleted, notes}]})로 항목별 완료 처리됨 (TC 확정: 05:5.4)- 실행내역 사진/첨부/서명 라이브 미확인 = TBU
- 실행 생성 폼 필드 구성 라이브 미확인 = TBU
- 대상 사용자 token 내부 key([GA_ADMIN]/[SUPER_ADMIN]) 미확정 = TBU
- tRPC procedure/권한 토큰 추정 — 사람 확정 필요 = TBU