모바일 앱 스펙
개요
Simple HR 프로젝트의 모바일 앱에 대한 수정 및 개선 요청사항을 정리한 페이지입니다. 2026년 06월 10일자 수정 요청사항(fix-task-0610.md), 2026년 07월 02일자 우선 수정사항(fix-taskNew-0702), 및 2026년 07월 06일자 우선 수정사항(fix-taskNew-0706), 2026년 07월 20일자 수정완료 사항(fix0720.md), 2026년 07월 23일자 수정사항(0723 수정사항), 2026년 07월 29일자 RN 앱 ↔ 웹모바일뷰 기능 격차 감사(RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729))을 기준으로 작성되었습니다.
기본 원칙: 기업 사용자(직원)는 모바일 중점, 기업 관리자는 PC 중점으로 개발합니다. fix-taskNew-0702 (26년 07월 02일 우선수정사항)
근로계약서 안내 배너
근로계약서 스펙의 활성화 토글 로직에 따라 모바일 앱에 다음과 같이 안내 배너를 표시해야 합니다.
MobileDashboard (대시보드)
- 조건: SOFT 게이트 (계약시작일 < 입사일)
- 표시: 황색(노란색) 배너 표시
- 참고: 근로계약서 활성화 토글 재수정
MobileProfile (프로필)
- HARD 게이트: 빨강(Err) 배너 표시 (계약시작일 >= 입사일)
- hard_pending 상태: 파란색 배너 표시
- 현재는 모바일에서 아무런 안내가 없어 PC와 일관성이 없음
휴일 근로 신청 연동
휴가 관리 스펙에서 APPROVED 상태의 OT_HOLIDAY(휴일근로) 신청이 존재할 경우 모바일 출근 화면 로직을 다음과 같이 개선해야 합니다.
출근하기 버튼 제어
- 휴일/연차일 경우: 기본적으로 출근하기 버튼 비활성화
- APPROVED OT_HOLIDAY 존재 시: 버튼 활성화 (휴일이어도 출근 허용)
- check_in 프로세스에서 OT_HOLIDAY 승인 여부를 확인하고 차단/허용 분기 처리
출근 상태 표시
- 기존: "오늘 출근 전이에요"
- 개선: 휴일/연차 시 "오늘은 [휴일명/휴가명]이에요" 표시
- APPROVED OT_HOLIDAY 상태도 함께 반영
대시보드 및 UI 개선
수정 현황
| 항목 | 상태 | 참고 |
|---|---|---|
| 근로계약서 안내 배너 (MobileDashboard SOFT) | ✅ 완료 | |
| 근로계약서 안내 배너 (MobileProfile HARD/hard_pending) | ✅ 완료 | |
| 휴일 근로 신청 시 출근 버튼 활성화 | ✅ 완료 | |
| 출근 상태 메시지 개선 ("오늘은 [휴일명]이에요") | ✅ 완료 | |
| 일정 캘린더 연속일정 끊김 수정 | ✅ 완료 | |
| 일정 카테고리 필터 (개인/회의/출장/업무) | ✅ 완료 | |
| 임시휴일 휴무 표시 및 출근 비활성화 | ✅ 완료 | |
| 근로정책 인정시간 — 기존(당시) 정책 반영 | ✅ 완료 | 과거 데이터는 변경 전 정책 기준 유지 fix0720.md |
| 근로정책 변경 후 미체크일 '정책시간 자동인정' 처리 시 당시 정책 반영 | ✅ 완료 | 변경 전 근로정책 기준으로 인정 처리 fix0720.md |
| 인정근로시간 수정 시 표시 및 연동 | ✅ 완료 | 관리자가 출·퇴근 시각 수정 시 인정근로시간 자동 변경; 당일 근로 정책 시간 vs 실제 인정근로시간 구분 표기 fix0720.md |
| PC 출퇴근 불가 (위치 권한) | ✅ 완료 | 위치 권한 미허용 시 안내 문구 및 [위치 권한 요청]·[허용 방법 보기] 버튼 표시; 차단 시 단계별 허용 안내창 추가 fix0720.md |
| 근로정책 변경 시 사용자·모바일 모드 기존 정책 유지 | 🔄 구현 중 | 관리자 모드(기존 정책 유지+변경일 기준)처럼 사용자·모바일도 동일 적용 예정 fix0720.md |
| 근로시간 직접 입력 방법 개선 (미체크 시 인정출근/연차대체/결근 확인 클릭) | 🔄 검토 중 | 직접 입력 구현 완료; 확인 클릭 마무리 방식은 검토 후 구현 예정 fix0720.md |
| 모바일 결재 근태/서류 탭 KPI 카드 → 필터 칩 전환 | ✅ 완료 | MobileApprovalList.tsx: 대기/승인/반려 KPI 카운터 카드를 전체 탭과 동일한 필터 칩(전체/대기/완료/반려)으로 교체; STATUS_FILTERS 상수 + StatusFilterChips 컴포넌트 추출 0723 수정사항 (fix-task 2026-07-23) |
| 모바일 결재 근로유형 영어 노출 → 한글화 | ✅ 완료 | OT_EXTEND/OT_NIGHT/OT_HOLIDAY enum 원문이 노출되던 문제 수정; OT_TYPE_LABEL에 OT_EXTEND 키 추가 + 두 상세 시트 valueLabels에 overtime_type 매핑 → 연장근로/야간근로/휴일근로로 렌더 0723 수정사항 (fix-task 2026-07-23) |
07월 06일 우선 수정사항 (모바일 관련)
07월 23일 수정사항 (모바일 관련)
0723 수정사항 (fix-task 2026-07-23)
결재 목록 (MobileApprovalList)
| 항목 | 상태 | 비고 |
|---|---|---|
| 근태/서류 결재 탭 KPI 카드 → 필터 칩 전환 | ✅ 완료 | 대기/승인/반려 KPI 카운터 카드를 전체 탭과 동일한 필터 칩(전체/대기/완료/반려)으로 교체; 세 탭 공용 STATUS_FILTERS 상수 + StatusFilterChips 컴포넌트 추출. 순수 프론트, DB/API 무관. |
| 근로유형 영어 enum 노출 → 한글화 | ✅ 완료 | 상세 시트의 '근로 유형'이 OT_EXTEND/OT_NIGHT/OT_HOLIDAY 원문으로 표시되던 버그 수정; OT_TYPE_LABEL에 OT_EXTEND 키 추가 + valueLabels에 overtime_type 매핑 → 연장근로/야간근로/휴일근로로 렌더. |
07월 20일 수정완료 사항
fix0720.md
근로정책 인정시간
| 항목 | 상태 | 비고 |
|---|---|---|
| 근로정책 인정시간 — 기존(당시) 정책 반영 | ✅ 완료 | 과거 데이터는 변경 전 근로정책 기준 유지 |
| 미체크일 '정책시간 자동인정' 처리 시 당시 정책 기준 적용 | ✅ 완료 | 변경 전 근로정책 기준으로 인정 처리 |
| 인정근로시간 수정 연동 | ✅ 완료 | 관리자가 출·퇴근 시각 직접 수정 시 인정근로시간 자동 변경; 근태 화면에서 당일 근로 정책 시간 / 인정근로시간(실제) 구분 표기 |
| 근로정책 변경 시 사용자·모바일 모드 기존 정책 유지 | 🔄 구현 중 | 관리자 모드(기존 정책 유지+변경일 기준)와 동일하게 사용자·모바일도 적용 예정 |
| 근로시간 직접 입력 개선 (확인 클릭 방식) | 🔄 검토 중 | 직접 입력 구현 완료; 미체크 시 인정출근/연차대체/결근 확인 클릭 마무리 방식은 검토 후 구현 예정 |
⚠️ 출퇴근관리 > 직원 상세에서 연장시간이 당일 근로정책에 맞춰 계산되어 올바르지 않게 보일 수 있습니다. 현재 수정 중입니다. fix0720.md
PC 출퇴근 (위치 권한)
GPS 출퇴근 스펙 참고
- 위치 권한이 허용되지 않았을 때 안내 문구와 [위치 권한 요청] · [허용 방법 보기] 버튼 항상 표시
- 권한이 차단된 경우 허용 방법을 단계별로 알려주는 안내창 추가
- 브라우저 특성상 한 번 차단한 위치 권한은 자동으로 되돌릴 수 없어 사용자가 직접 허용하도록 안내
fix-taskNew-0706 (26년 07월 06일 우선수정사항)
신청서 / 기안서
| 항목 | 상태 | 비고 |
|---|---|---|
| 모바일 신청서 첨부파일 제출 구현 | ✅ 완료 | MobileFormSubmitSheet에 UPLOAD 타입 파일 선택 UI 및 업로드 로직 추가 |
| 신청서/기안서 신규 작성 시 문서 종류 선택 단계 제거 | ✅ 완료 | 불필요한 선택 단계 제거 |
| 근태 결재 신청 페이지에 결재선 선택 UI 추가 | ✅ 완료 | 결재선 드롭다운, 선택 시 결재 흐름 프리뷰, 미선택 시 자동 결재선 프리뷰, submit 시 approval_line_id 전달 |
| 근태결재 신청 제목 형식 통일 | ✅ 완료 | [출장], [휴가], [특별휴가] 등 대괄호 형식으로 통일 |
| 사용자 결재 페이지 위임하기 버튼 제거 | ✅ 완료 | 우측 상단 "위임 설정" 버튼 제거 |
출퇴근 드로어
| 항목 | 상태 | 비고 |
|---|---|---|
| 출퇴근 요청 드로어 본문 통일 | ✅ 완료 | 근태 신청(출장/외출/조퇴) 기안서도 테이블 형식으로 통일, 요청 시각·근무지·요청 위치(gps_address) 표시 추가 |
휴가
| 항목 | 상태 | 비고 |
|---|---|---|
| 경조사 휴가 신청 시 사유 선택란 추가 | ✅ 완료 | PC·모바일 모두 경조사(FAMILY_EVENT) 선택 시 sub_reasons 드롭다운 표시 |
미완료 (GPS·출장)
| 항목 | 상태 | 비고 |
|---|---|---|
| 출장 잦은 직원 GPS 출근 위치 저장 | ⬜ 미완료 | GPS로 출근 가능하되 출근하기 버튼 클릭 시 현재 위치 저장 — gps-attendance-spec |
07월 02일 우선 수정사항 (모바일 관련)
fix-taskNew-0702 (26년 07월 02일 우선수정사항)
사용자 모바일 — 신청서/기안서
| 항목 | 상태 | 비고 |
|---|---|---|
| 신청서 - 제출방식: 첨부파일 첨부 기능 구현 | ✅ 완료 | MobileFormSubmitSheet에 UPLOAD 타입 파일 선택 UI 및 업로드 로직 추가 fix-taskNew-0706 (26년 07월 06일 우선수정사항) |
| 신규 신청서/기안서 작성 시 문서 종류 선택 UI 제거 | ✅ 완료 | 불필요한 선택 단계 제거 fix-taskNew-0706 (26년 07월 06일 우선수정사항) |
| 신청 결재 > 서류 작성 탭 이름 → 기안서 신청 으로 수정 | ✅ 완료 |
출퇴근 (GPS)
| 항목 | 상태 | 비고 |
|---|---|---|
| 브라우저 위치 허용 팝업 띄우기 (GPS 출퇴근 사용 시) | ✅ 완료 | 중요 — gps-attendance-spec |
| 출장 중 GPS 출근: 출근하기 누르면 현재 위치 저장되도록 | ⬜ 미완료 | GPS로 출근 가능하되, 출근하기 버튼 클릭 시 현재 위치 저장 구현 필요 — business-trip-management-spec |
근태 결재
| 항목 | 상태 | 비고 |
|---|---|---|
| 근태결재 관리 배지 오작동 수정 (알림 존재하나 리스트에 서류 미표시 등) | ✅ 완료 | 신청 알림은 존재하나 대응 서류가 목록에 미표시되는 문제 해결 fix-taskNew-0706 (26년 07월 06일 우선수정사항) — approval-management-spec |
| 관리자 출퇴근 요청 승인 시 해당 직원 근로 정책 시간을 기본값으로 표시 | ✅ 완료 | fix-taskNew-0706 (26년 07월 06일 우선수정사항) — work-policy-spec |
관련 페이지
- Simple HR 프로젝트 개요
- 근로계약서 스펙 — 활성화 토글 및 모바일 안내 로직
- 휴가 관리 스펙 — 휴일 근로(OT_HOLIDAY), 임시휴일 연동
- 근태 관리 스펙 — 근무 탭 및 휴일 근로 시간 집계
- 모바일 UI/UX 개선 작업 (기업 사용자)
- 액션 아이템
- 의사결정 로그
- fix-task-0610.md — 원본 수정 요청사항- fix-taskNew-0702 (26년 07월 02일 우선수정사항) — 07월 02일 우선 수정사항
- GPS 출퇴근 스펙 — 브라우저 위치 허용 및 좌표 저장 로직
- 출장 관리 스펙 — 출장 중 GPS 출근 처리
- 결재 관리 스펙 — 근태결재 배지 및 신청서 처리
- 양식 편집기(폼 빌더) 스펙 — 신청서/기안서 양식 구성
- fix-taskNew-0706 (26년 07월 06일 우선수정사항) — 07월 06일 우선 수정사항
- fix0720.md — 07월 20일 수정완료 사항
- 0723 수정사항 (fix-task 2026-07-23) — 07월 23일 수정사항
- RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729) — 07월 29일 RN 앱 기능 격차 감사
- 연차촉진 스펙 — RN 촉진 응답 누락 관련
- 근무 정책 스펙 — 근로정책 인정시간 및 정책 변경 연동
RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (2026-07-29)
RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729) RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
기업 모바일은 RN 앱(mobile/src) + 웹 모바일뷰(frontend/src/components/user/mobile/MobileXXX.tsx) 이중 구조로 운영됩니다. 현장 피드백에서 웹모바일은 정상 동작하나 RN 앱에서 안 되는 기능이 많다는 문제가 제기되어, 12개 도메인을 웹모바일 기준으로 RN과 1:1 코드 대조 감사를 실시했습니다.
총평: RN 이식이 웹모바일보다 후속으로 진행되며 최근/핵심 기능이 미반영. 특히 출퇴근 인증방식(QR·IP) 과 휴가 촉진 응답이 RN에 통째로 빠져 실사용을 직접 차단.
종합 현황
| 도메인 | 판정 | 누락 | 부분 | 최고 심각도 |
|---|---|---|---|---|
| 급여(payroll) | ✅ OK | 0 | 0 | — |
| 대시보드(홈) | ⚠️ GAPS | 4 | 4 | 🔴 |
| 출퇴근(attendance) | ⚠️ GAPS | 4 | 3 | 🔴 |
| 휴가(vacation) | ⚠️ GAPS | 4 | 0 | 🔴 |
| 조직도(directory) | ⚠️ GAPS | 2 | 1 | 🔴 |
| 프로필/내정보(profile) | ⚠️ GAPS | 3 | 1 | 🔴 |
| 신청서/서류(applications) | ⚠️ GAPS | 1 | 3 | 🟠 |
| 결재(approval) | ⚠️ GAPS | 2 | 3 | 🟠 |
| 메시지(messages) | ⚠️ GAPS | 1 | 2 | 🟡 |
| 공지(notices) | ⚠️ GAPS | 0 | 1 | 🟡 |
| 연장근로(overtime) | ⚠️ GAPS | 0 | 1 | 🟡 |
| 근무표/일정(schedule) | ⚠️ GAPS | 1 | 0 | 🟡 |
🔴 실사용 차단 (HIGH) — 우선 처리
1. 출퇴근 QR·IP 방식이 RN에 전무
RN CheckInSheet.tsx:161은 check_in_method:'GPS'만 하드코딩되어 있어 QR 스캔·사내망 IP 출퇴근 경로가 전혀 없음. 웹모바일은 GPS/QR/IP 방식 선택을 모두 지원. → QR 전용·IP 전용 근무지 직원은 앱으로 출퇴근 불가. GPS 출퇴근 스펙 참고.
2. 휴가 연차촉진 응답이 RN에 전무
웹모바일 MobileVacation.tsx에는 근기법 61조 촉진 응답(배너·1차 응답·2차 응답)이 완비되어 있으나 RN vacation에는 전무. 연차촉진 스펙 참고.
3. 조직도 부서 칩 필터 누락
웹 MobileDirectory.tsx의 distinct 부서 칩 필터가 RN DirectoryScreen.tsx에 없음(서버 페이지네이션 이유로 의도적 제거). → 부서 기준 직원 탐색 수단 소실.
4. 프로필 필수서류 제출·조회 누락
웹 MobileProfile.tsx:376-505의 필수서류 아코디언(UPLOAD/PASTE/SIGN 처리, 재제출/취소, 상태 배지)이 RN에 전무. RN ProfileScreen.tsx는 PC 안내만 표시.
🟠 MEDIUM — 보조/완결성
- 휴가 촉진 응답 이력 섹션 — RN에 신청 이력만 있고 촉진 응답 이력 없음
- 결재 '전체' 통합 탭(근태+서류 날짜순 합본) — RN은 근태/서류 2탭만
- 결재 서류 본문 리치 렌더 — RN은 하드코딩 ~15개 라벨 key-value 표로 대체, 커스텀 폼은 raw key 노출
- 조직도 임직원 상세 '메시지 보내기' — RN 미구현
- 대시보드 허용시간 밖(EARLY/LATE) → 출퇴근요청 폴백 분기 — RN은 권한거부/반경밖만 폴백
- 대시보드 계약 미서명(ATT_CONTRACT_UNSIGNED) '날인하러가기' 액션 — RN 토스트에 액션 버튼 미지원
- 출퇴근 인증방식 선택 드롭다운 + 마지막 방식 기억 — RN 단일 GPS
- 출퇴근 폴백 요청 시 GPS 주소(역지오코딩) 첨부 — RN은 좌표만, 결재자에게 주소 미노출
- 신청서 서명/도장 입력 — RN은 'PC에서 작성' 안내만
- 신청서 리치 붙여넣기(PASTE) — RN은 plain 텍스트만, 서식·표 유실
- 프로필 서류함(계약서/보관함/제증명서) + 계약서 보기·PDF·서명 — RN 전무
- 프로필 자격증·면허 목록 + 만료/임박 배지 — RN 전무
- 프로필 계약 게이트 배너 상태별 구분(hard/hard_pending) — RN은 단일 카드로 축소
🟡 LOW — 소소한 격차
- 공지 본문 하이퍼링크 — RN
logic.ts:127이 인라인 태그 제거해 href 소실 - 연장근로 사유 입력 maxLength=500(RN) vs 웹 무제한 — 긴 사유 RN 잘림
- 근무표 개인화 헤드라인('{이름}님의 이번 주 근무') — 웹만, RN은 고정 타이틀
- 출퇴근 개인화 헤더 H1, GPS 지속추적/수동 재조회 — RN은 1회 측정
- 대시보드 위치권한 사전경고 배너, 위치 수동 재조회, 최근 공지 딥링크 — RN 축소
- 메시지 새 대화 picker 부서 계층 트리(웹) vs 평면 칩(RN), 프로필 사진(웹) vs 이니셜(RN)
- 결재 상세 '~님 결재중' 대기 결재자 표시 — RN 상세 시트 미표시
착수 권장 순서
- 1.출퇴근 QR·IP (RN) — 실사용 직접 차단. RN
CheckInSheet에 인증방식 선택 + QR 스캔·IP 경로 추가. 최우선. - 2.휴가 촉진 응답 (RN) —
vacation/api.ts에 promotion 래퍼 2개 + 배너 + 응답 시트(1차/2차) + 내역. - 3.프로필 필수서류·서류함·자격증 (RN) — UPLOAD·PASTE 제출, 계약서/서류/제증명서 조회, 자격증 목록.
- 4.신청서 서명·붙여넣기·본문 리치 렌더 (RN) — TemplatePreview 엔진 이관 규모 검토.
- 5.결재 통합탭 / 조직도 필터·메시지 / 대시보드 폴백·계약 액션 — 완결성.