HBEA510_내 정보·근무 설정
(Hereby) 직원 앱 > 더보기 > 내 정보·근무 설정
| 앱 | 직원 앱 (Employee App, 포트 4002) |
| 대상 사용자 | 조건1 [EMPLOYEE] (self scope) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_더보기개편]] (FIG 정책 more.md) · [[POL_RBAC권한모델]] |
| Status | review |
| Owner | 카나 |
개요
- 더보기 탭 메뉴 "내 정보" / "근무 설정"에서 진입하는 self scope 조회·수정 표면. 부모 화면은 [[HBEA500_더보기]].
- 두 메뉴는 각각 독립 모달로 열린다. ① 내 정보 모달 = 프로필 필드 + 근무시간 선택 + "휴대폰 인증 로그인 허용" 토글 + 알림 설정 + "비밀번호 재설정" / "저장". ② 근무 설정 모달 = 내 정보의 근무시간 섹션만 독립적으로 연 "근무 설정" / "근무시간" 모달.
- 프로필 수정 허용 항목은 Admin "직원 본인 수정 허용 항목"([[HBAD270_설정 (조직 설정·내 정보)]])에 연동된다.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 (내 정보 상세·근무 설정 독립 모달) |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
| 2026-07-22 | 카나 | PM | 코드 변경 반영(d7bd3f4) |
| 2026-10-02 | 카나 | PM | 비밀번호 재설정 새 비밀번호 안내·검사를 병원 설정(userPasswordPolicy)으로(ㄴ51)·1단계 판정 결함 수정(ㄴ52)(c6347029, #995) — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM |
| 2026-10-08 | 카나 | PM | (10/7 머지분) PR #1090(ef18fa36) 반영: 내 정보 화면 = 조직 「화면 캡처 제한」 보호 대상(90 신설, 정본 HBEA110 50) — 커밋 근거, 라이브 실사 이월(TBU) |
| 2026-10-13 | 카나 | PM | (10/10~11 머지분) PR #1144·#1154(MED-969) 반영: 근무 시간 설정 선택지 = 배정 그룹(주∪부 소속) ∪ 팀·개인 「허용 근무 유형」(선택 범위 Rule 보강) · PR #1149(MED-956) 내 정보 저장 버튼·프로필 사진 수정 — 커밋 근거, 실사 TBU |
| 2026-10-14 | 카나 | PM | (10/13 머지분, #1227 6675103) 내 정보 안의 「인증/보안 설정」 진입 줄 제거(사용자 지시 — 진입은 프로필 시트·더보기만) · 비밀번호 변경·기기 로그인·2단계 인증은 신규 「인증/보안 설정」 화면(HBEA520 가칭, 채번 제안)으로 집약 — 내 정보 모달의 「비밀번호 재설정」(50)과의 병존 여부 실사 필요(TBU) - 카나/PM |
Data I/O
Server → Client
| 변수 | DB 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
${profile} | Employee.{name,employeeNo,email,teamName,birthDate,phone,address,emergencyContact,bankAccount} (self) | 빈 필드 "-" 표시 (라이브: "팀 -", "생년월일 -", "계좌정보 -") | census 필드 |
${editable_fields} | Admin "직원 본인 수정 허용 항목" 집합 | 미허용 필드는 읽기 전용 | HBAD270 종속 |
${work_types} | WorkType[] (근무 유형 목록) | "— 근무시간 선택 —" placeholder | HBAD261 원천 · (10/10~11 머지, #1144·#1154, MED-969) 선택지 = 선택 범위(SelectableShiftScope) — 배정 근무 그룹(주 소속 ∪ 부 소속)의 근무 ∪ 소속 팀들의 「허용 근무 유형」(teams.allowedShiftIds) ∪ 본인 허용 유형(employees.allowedShiftIds). 종전엔 주 소속 그룹 하나뿐이라 3교대 직원에게 3개만 노출. 저장 검증도 같은 판정(isShiftSelectable, shift.setMyShift) — 허용 유형 저장 시 그 근무의 그룹이 함께 배정, 급여 근로형태(workPatternId)는 불변. 아무 배정 없는 직원만 조직 전체에서 선택(마이그레이션 1971). 허용 목록 관리는 [[HBAD210_팀 관리]] 팀 수정·[[HBAD201_직원 추가·수정 모달]] |
${work_type_recommended} | 최근 출근 기록 기반 짐작값 | 기록 0회 시 추천 산정 불가 | 안내 문구에 회수 노출 |
${notification_settings} | NotificationSetting.{push,receiveAll} (self) | 기본값(추정 ON) | 푸시 알림 / 전체 알림 받기 |
${phone_auth_login_allowed} | Employee.phoneAuthLoginAllowed (self) | OFF (라이브 관찰) | 토글 상태 |
${signature_image} | Employee.signatureImage (self, data URI) | 미등록 시 미리보기 미표시 | 서명 조회 엔드포인트 (코드 반영: d7bd3f4) |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 본인정보 수정 | 허용 필드 patch | sdk.employee.updateSelf() (추정) | employee:write.self |
| 근무시간 저장 | workTypeId | sdk.employee.updateSelf() (추정) | employee:write.self |
| 휴대폰 인증 로그인 허용 | boolean | sdk.employee.updateSelf() (추정) | employee:write.self |
| 본인 서명 업로드 | 서명 이미지 (data URI) | 직원 서명 업로드 엔드포인트 (Employee.signatureImage migration) | employee:write.self (추정) |
| 알림 설정 | 푸시 / 전체 boolean | sdk.notification.updateSelf() (추정) | notification:write.self |
| 비밀번호 재설정 | — | 재설정 플로우 진입 | (본인 계정) |
외부 통합 (cross-app)
| 외부 시스템 | 데이터 | 동기/비동기 | 비고 |
|---|---|---|---|
| Admin 유형 설정 ([[HBAD261_유형 설정 (연장근무·외근·휴가)]]) | 근무 유형 목록 원천 | 동기 (모달 로드 시) | select 옵션 |
| Admin 조직 설정 ([[HBAD270_설정 (조직 설정·내 정보)]]) | "직원 본인 수정 허용 항목" 원천 | 동기 | 수정 가능 필드 결정 |
화면 플로우 (내 정보 · 근무 설정 독립 모달)
(a) 내 정보 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [EMPLOYEE] 인증 · 더보기 "내 정보" 선택 시 모달 노출 | 인증 세션 (self) | |
| 01 | 초기 상태 | Output | ${profile} 로드하여 프로필 필드 채움. 값 없는 필드는 "-" 표시 | self | |
| 10 | 프로필 필드 | Form | 이름 / 사번 / 이메일 / 팀 / 생년월일 / 전화번호 / 주소 / 비상연락처 / 계좌정보 | sdk.employee.updateSelf() | census 필드 |
| ㄴ | 값 표시 (라이브) | Output | 상단 "최콸 FIRMA005", "이름 최콸", "이메일 djcola814@gmail.com", "전화번호 010-2955-7354" | census 원문 | |
| ㄴ | 값 없음 처리 | Output | 라이브(7/10) 빈 값은 "-": "팀 -" / "생년월일 -" / "계좌정보 -". 주소·비상연락처는 값 없이 라벨만 | census 관찰 | |
| ㄴ | 수정 가능 필드 | Input | ${editable_fields} 허용 필드만 편집. 나머지 읽기 전용 | [[HBAD270_설정 (조직 설정·내 정보)]] | Admin 종속 |
| ㄴ | 정책(예정) | - | 수정 불가[성명·사번·이메일·부서/팀] / 수정 가능[전화번호·비상연락처]. 생년월일·계좌정보·주소 필드 제거(주소는 직원 등록 시로 이동). 순서[성명·사번·이메일·부서/팀·전화번호·비상연락처·비밀번호 수정] | [[POL_더보기개편]] | 정책 vs 라이브 (출처: FIG 정책 more.md) |
| ㄴ | 정책(예정) 자물쇠 | - | 잠금 필드 자물쇠 호버·터치 시 "변경을 원하시면 관리자에게 문의해 주세요." 안내 | [[POL_더보기개편]] | 정책 원문 |
| ㄴ | 라이브(현행) | Output | 7/10 라이브는 생년월일·주소·계좌정보 필드 여전히 노출 + 자물쇠 안내 미확인 | 정책 미적용 | |
| 20 | 근무시간 선택 | Select | • 본인 근무시간 지정. placeholder "— 근무시간 선택 —" • 선택 → 근무 유형 반영 | 근무 유형([[HBAD261_유형 설정 (연장근무·외근·휴가)]]) | census 원문 |
| ㄴ | 옵션 (라이브) | ListItem | "스케줄 근무 (00:00-12:00)" / "3교대 주간 (07:00-15:00)" / "3교대 오후 (15:00-23:00)" / "3교대 야간 (23:00-07:00)" / "일반근무 (09:00-18:00)" 등 | census 원문 (junk 옵션 "sdfsfsd" 등 혼입) | |
| ㄴ | 추천 안내 | Info | "'추천'은 최근 출근 기록(0회)으로 짐작한 값이에요. 실제 근무시간과 다르면 본인 근무시간을 직접 선택해 주세요." | 최근 출근 기록 | census 원문 (라이브 0회) |
| ㄴ | 값 없음 처리 | Output | 미선택 시 "— 근무시간 선택 —" 유지. 출근 기록 0회 → 추천값 부재 | ||
| 30 | 휴대폰 인증 로그인 허용 | Toggle | • SMS 인증번호 로그인 허용 on/off. 설명 "직원이 SMS 인증번호로 로그인할 수 있도록 허용해요". 라이브 기본 "OFF" • 토글 → 허용 상태 전환 | 본인 로그인 옵션 | census 원문 |
| 40 | 알림 설정 | Toggle | • 푸시/전체 알림 on/off. 항목 "푸시 알림" / "전체 알림 받기", 설명 "끄면 모든 유형의 알림이 일시중지돼요." • 토글 → 알림 설정 전환 | ${notification_settings} | census 원문 |
| 45 | 본인 서명 이미지 | Upload | • MyInfoForm에 본인 서명 이미지 업로드 + 미리보기 추가. 서명 이미지 업로드 후 미리보기 표시 • 업로드 → data URI로 저장( Employee.signatureImage). 서버: 직원 서명 업로드/조회 엔드포인트• 문서 결재 양식(승인 폼)에 서명 자동 삽입 연동 - CASE01 [미등록]: 미리보기 미표시 | sdk.employee.updateSelf() (추정) · Employee.signatureImage · [[HBAD270_설정 (조직 설정·내 정보)]] | 신설 · migration 컬럼 추가 · 결재 양식 서명 삽입(코드 반영: d7bd3f4) |
| 50 | 비밀번호 재설정 | Button | • 본인 계정 비밀번호 재설정 진입 • 클릭 → 재설정 플로우 진입 | 본인 계정 | TBU: 재설정 동선 |
| ㄴ51 | 새 비밀번호 (2단계 「새 비밀번호 설정」) | Input | • 새 비밀번호 칸 placeholder가 **병원 설정(일반 비밀번호 규칙)**을 따름 — 예: 기본 "8자 이상, 대문자·소문자·숫자·특수문자 포함" / 병원이 4자·필수 문자 해제 시 "4자 이상" • 제출 시: 같은 규칙으로 화면에서 먼저 검사 → 서버( auth.changePassword)도 같은 함수로 검사, 거절 문구는 한국어 해요체- CASE01 [길이 미달]: "비밀번호는 {min}자 이상이어야 해요." - CASE02 [필수 문자 누락]: "비밀번호에 {누락 종류}를 포함해야 해요." | Organization.settings.userPasswordPolicy · [[HBAD270_설정 (조직 설정·내 정보)]] ㄴ51 | 변경 (코드 반영: c6347029, #995) · 구버전은 안내·검사 8자 고정 · TBU: 라이브 실사 이월 |
| ㄴ52 | 현재 비밀번호 확인 (1단계) | Rule | • 1단계 판정을 서버 오류 코드로 구분 — 규칙 오류(BAD_REQUEST)와 틀린 비밀번호(UNAUTHORIZED)를 나눠, 맞는 현재 비밀번호가 규칙에 안 맞을 때 "비밀번호를 다시 확인해 주세요."가 잘못 뜨던 결함 수정 | auth.changePassword | 결함 수정 (코드 반영: c6347029, #995) · TBU: 라이브 실사 이월 |
| 60 | 저장 | Button | • 허용 필드 변경 확정 • 클릭 → 즉시 실행(컨펌 없음), 성공: 허용 필드 patch 반영 | sdk.employee.updateSelf() (추정) | TBU: 저장 실패 UI(토스트/무반응, 버그 후보 판단 보류) |
| 90 | 화면 캡처 제한 (민감 화면) | Rule | • (10/8, #1090 ef18fa36) 조직 「화면 캡처 제한」(기본 켬)이 켜져 있으면 내 정보 화면(2depth 종류 my-info)이 캡처 보호 대상 — 네이티브 앱에서 스크린샷·화면 녹화·미러링 시 내용 가림, 스크린샷 시 토스트 "화면이 캡처되었어요."- CASE01 [설정 꺼짐 또는 웹 브라우저]: 보호·안내 없음 • 상세 규칙(판정·1초 유예·플랫폼별 동작) 정본 = [[HBEA110_Shell·탭바·알림]] 50 | settings.screenCaptureProtection · [[HBAD270_설정 (조직 설정·내 정보)]] ㄴ45-1 | 신설 (#1090) · TBU: 실기기 확인(실사 대기) |
(b) 근무 설정 독립 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [EMPLOYEE] 인증 · 더보기 "근무 설정" 선택 시 독립 모달 노출 | 인증 세션 (self) | |
| 01 | 초기 상태 | Output | 내 정보의 근무시간 섹션만 독립적으로 연 모달. 제목 "근무 설정" + "근무시간" 라벨 | self | census 원문 |
| 10 | 근무시간 선택 | Select | • 본인 근무시간 지정(내 정보 모달 20과 동일 섹션). placeholder "— 근무시간 선택 —" • 선택 → 근무 유형 반영 | 근무 유형([[HBAD261_유형 설정 (연장근무·외근·휴가)]]) | census 원문 |
| ㄴ | 옵션 (라이브) | ListItem | 내 정보 모달과 동일 근무 유형 목록 | census 원문 | |
| ㄴ | 추천 안내 | Info | "'추천'은 최근 출근 기록(0회)으로 짐작한 값이에요. 실제 근무시간과 다르면 본인 근무시간을 직접 선택해 주세요." | 최근 출근 기록 | census 원문 |
| ㄴ | 값 없음 처리 | Output | 미선택 시 "— 근무시간 선택 —" 유지 | ||
| 20 | 근무시간 저장 | Button | • 선택한 근무시간 확정 저장 • 클릭 → 본인 근무시간 저장. 근무시간 미선택 시 disabled | 본인 근무시간 저장 | census 관찰. TBU: 저장 실패 UI |
| 30 | 정책(예정) | - | FIG 정책 more.md: "근무 설정 빼기" — 더보기 메뉴에서 근무 설정 항목 제거 방향. 라이브(7/10)는 근무 설정 독립 모달 + 근무시간 선택 여전히 노출 | [[POL_더보기개편]] | 정책 vs 라이브 차이 (출처: FIG 정책 more.md) |
연동·플로우
- 내 정보 수정은 Admin이 허용한 필드([[HBAD270_설정 (조직 설정·내 정보)]] "직원 본인 수정 허용 항목")에 한해 self scope로 "저장" 반영. self < team < full 권한 트리([[POL_RBAC권한모델]]) 계승.
- 근무시간은 근무 유형 목록에서 본인이 직접 선택("추천"은 최근 출근 기록 짐작값). 내 정보 모달 근무시간 섹션 또는 "근무 설정" 독립 모달 어느 쪽에서든 저장 가능.
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
CASE01 [수정 허용 필드] | ${editable_fields} 포함 필드 | 편집 가능 → 저장 시 patch | Admin 종속 |
CASE02 [읽기 전용 필드] | ${editable_fields} 미포함 | 읽기 전용 (정책상 자물쇠 안내 예정) | 정책 vs 라이브 |
CASE03 [근무시간 미선택] | 근무 설정 모달 | "근무시간 저장" disabled | |
조건1 [EMPLOYEE] | self scope | 본인 정보만 조회/수정 |
Open Question
| # | 항목 | 상태 |
|---|---|---|
| 1 | "직원 본인 수정 허용 항목" 기본 집합(연락처만 vs 전체) 및 항목별 잠금 UI | TBU — 정책은 수정 불가/가능 구분·자물쇠 안내 정의(출처: FIG 정책 more.md), 라이브 미적용 |
| 2 | "추천" 근무시간 산정 기준(최근 출근 기록 n회) 구체 알고리즘 | TBU |
| 3 | 프로필 필드 개편(생년월일·계좌·주소 제거, 순서 재배치, 이름 아래 사번·이메일) 적용 시점 | TBU / 정책(예정) — 정의는 [[POL_더보기개편]] 참조 |
| 4 | 근무 설정 모달 제거 방향 적용 시점 | TBU / 정책(예정) |
| 5 | 내 정보·근무 설정 저장 실패 시 UI 동작(토스트/무반응) | TBU |