HBSA220_Attendance Review (크로스-org 근태)
(Hereby) 시스템 관리 > [[HBSA200]] > Attendance
| 앱 | System Admin (포트 4100) |
| 부모 화면 | [[HBSA200]] |
| 대상 사용자 | 플랫폼 운영자(OPERATOR) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_권한(RBAC)]] |
| Status | draft (코드 기반 — 라이브 실사 불가: dev 라우트 AccessDenied 격리, 2026-08-25 확인) |
| Owner | 카나 |
개요
조직·기간·사번 필터로 특정 조직의 근태 기록을 조회하는 뷰어(읽기 전용). 조직 선택 필수 — 조직을 고르면 그 엔드포인트로 ?endpoint= 라우팅되어 systemOrgAttendance(필터·페이지네이션)를 호출한다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-08-25 | 카나 | 콸 | 최초 작성 (redesign PR #583 코드 census 기반, 라이브 미실사) |
Data I/O
Client → Server
| 액션 | 전달 값 | 콘솔 REST | systemProcedure |
|---|---|---|---|
| SEARCH | { organizationId, from, to, employeeNumber?, page } | GET /api/organizations/:orgId/attendance (?endpoint=) | systemOrgAttendance |
Server → Client
| 변수 | 소스 | 값 없을 때 | 비고 |
|---|---|---|---|
attendanceRecords[] | systemOrgAttendance | Empty(초기 안내) | date/emp#/name/status/checkIn/checkOut/regular/overtime/total/notes |
attendanceTotal / attendancePage / attendanceTotalPages | 페이지네이션 | 0 |
코드 근거: tabs/attendance.html, server/routes/attendance.ts.
화면 플로우
Attendance 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | activeTab === 'attendance' | - | |
| 01 | 초기 상태 | Output | 결과 없음: "Select an organization and date range, then click SEARCH" | - | |
| 10 | 필터 바 | - | ORGANIZATION / FROM(date) / TO(date) / EMPLOYEE #(placeholder "optional") / SEARCH | - | |
| 11 | ㄴ ORGANIZATION | Dropdown | "-- select --" + 전 조직(code — name) | attendanceOrgId | 선택 시 endpoint 라우팅 |
| 12 | ㄴ SEARCH | Button | "SEARCH" → searchAttendance(1). !attendanceOrgId 시 disabled. 로딩 중 "loading..." | systemOrgAttendance | org 필수 |
| 20 | 결과 요약 | Output | "Total: {n}" + "page {p} / {tp}" + prev/next | - | |
| 21 | ㄴ prev/next | Button | 페이지 이동. 경계에서 disabled | searchAttendance(p±1) | |
| 30 | 근태 테이블 | List | [List] 컬럼 date/emp #/name/status/check in/check out/regular/overtime/total/notes | attendanceRecords | date=orange, total=bold |
| 31 | ㄴ status 배지 | Badge | checked_out=green / checked_in=orange / absent=red / late=yellow / 그 외 gray | - | status enum 일부만 코드 노출 |
| 30-E | ㄴ Empty | Text | 0건 시 안내 문구(01) 유지 | - | |
| 40 | 값 없음 처리 | - | regular/overtime/total 없으면 "0", notes 없으면 "—", checkIn/Out은 fmtTime | - | |
| 50 | 에러·실패 | - | 로드 실패 → tabError 배너. 실측 TBU | - | |
| 60 | 권한별 차이 | - | OPERATOR 전 org / SUPPORT 발급 grant org만 조회 가능 추정 | [[POL_권한(RBAC)]] | 읽기 전용(mutation 없음) |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
case01 [org 미선택] | 진입 | SEARCH 비활성 | |
case02 [정상 조회] | org+SEARCH | 테이블 + 페이지네이션 | design 라이브: BESTRH 6908건 |
case03 [0건] | 결과 없음 | 빈 안내 |
OQ
- status enum 전체 값 = 코드에 4종만 매핑, 나머지 gray fallback TBU
- from/to 미입력 시 기본 기간 = TBU