직원 정보와 개인 설정
직원은 hereby Works의 더보기에서 본인 정보, 프로필 사진·서명, 근무시간, 근무 형태 변경 신청과 글자 크기를 관리합니다. 근무 시간 설정은 직접 저장이고 근무 형태 변경은 간호 프로필에 대한 승인 요청입니다.
직원 정보의 조회·편집과 관련 인사 자료를 설명합니다. 실제 실행한 조작과 미확인 항목은 아래 검증 기록에 구분합니다.
진입·역할·지원 작업
직원 앱 하단 더보기는 카드 세 묶음입니다 — 업무(공지 / 서명/도장 / 드라이브 / 근무 형태 변경 / 근무 시간 설정 / 급여명세서), 앱 설정·도움(화면 설정 / 불편·기능 신고 / 사용 안내 다시 보기 / 사용 분석 설정 / 휴대폰 알림 설정), 로그아웃. 공지·드라이브는 권한이 있을 때만, 사용 분석 설정은 제공될 때만 보이고, 공지에는 미확인 점이 붙습니다. 급여명세서는 현재 「준비 중」 라벨이 붙고 열리지 않습니다. 별도 「내 정보」 줄은 없고 맨 위 프로필 카드(이름·사번·소속/역할)를 누르면 내 정보가 열립니다. AI 어시스턴트도 더보기 목록이 아니라 하단 탭 오른쪽 버튼에서 엽니다(AI 어시스턴트). 세부 화면은 상단 뒤로 버튼이 있는 페이지이며 하단 내비게이션을 숨깁니다.
| 작업 | 진입 | 제한 |
|---|---|---|
| 본인 정보 조회·주소/비상연락처/계좌 수정·빈 객체 제거 | 내 정보(더보기 프로필 카드) | 조직 selfEditableFields가 허용한 필드만 편집. 전화는 현재 직원 UI에서 읽기 전용 |
| 사진 등록·교체 | 내 정보 사진의 카메라 배지 | 사진 자기 수정 허용 시 사진 선택·자르기 사용. 직원 페이지에 사진 삭제 버튼은 없음 |
| 서명 이미지 조회·등록·교체·삭제 | 서명/도장 | 본인 서명. 전자계약 서명 완료와 별개 |
| 비밀번호 재설정·휴대폰 인증 로그인 상태 조회 | 내 정보 | OTP는 ON/OFF 읽기 전용. 변경은 관리자 경로; 인증 |
| 시프트 선택·직접 저장 | 근무 시간 설정 | 배정 그룹과 팀·개인의 선택 가능 근무 유형에 속한 활성 근무시간 |
| 간호 근무 형태 신청·이력·대기 취소 | 근무 형태 변경 | 본인 간호 프로필, 변경할 다른 형태, 사유 |
| 글자 크기 변경·재진입 유지 | 화면 설정 | 이 기기의 로컬 설정 |
| 알림/급여명세서/신고/로그아웃 | 각 메뉴 | 알림, 명세서 배포, 인증의 절차 |
조직 설정이 없거나 빈 객체이면 기본 자기 편집 허용 필드는 주소·비상연락처·프로필 사진입니다. 계좌가 무조건 수정 가능한 것이 아니며, 전화는 허용 설정과 별개로 현재 직원 페이지에서 읽기 전용입니다. 더 많은 항목이 필요한 경우 조직과 접근 권한의 자기 수정 설정과 인사 기록의 관리자 원본을 함께 확인합니다.
내 정보 조회·저장
- 더보기 맨 위 프로필 카드를 눌러 내 정보를 엽니다. 이름·사번·이메일·소속/직위 등 조회 항목과 직접 수정 가능한 항목을 구분합니다. 값을 불러오기 전 표시는 저장된 빈 값의 증거가 아닙니다.
- 허용된 주소·비상연락처·계좌를 편집합니다. 직원 주소 폼은 도로명 주소·도시·우편번호를 직접 입력합니다. 우편번호는 입력한다면 5자리이며 비워 둘 수 있습니다. 공유 데스크톱 폼의 주소 검색/상세주소·전화 편집은 직원 페이지와 별도 UI입니다. 전화 편집을 노출하는 공유 화면의 검증은 숫자 기준 10~11자입니다.
- 비상연락처를 일부라도 적었다면 이름·전화를 모두 채워야 합니다. 관계는 선택입니다. 은행 계좌를 일부라도 적었다면 은행명·계좌번호·예금주 세 항목이 모두 필요합니다. 예: 비상연락처 이름 보호자, 연락처와 선택 관계 가족.
- 변경 후 저장을 누릅니다. 직원 앱의 전체 저장은 로드 시 기준값과 비교해 바뀌고 편집 가능한 섹션만 Employee 업데이트에 보냅니다. 주소·비상연락처·계좌를 모두 비우면 해당 섹션은 null로 삭제합니다. 빈 선택 하위 값은 payload에서 생략합니다.
- 성공 시 편집 화면을 닫습니다. 다시 내 정보를 열어 값이 서버에서 복원되는지 확인합니다. 현재 직원 앱 전체 저장과 공유 컴포넌트의 섹션별 수정 창은 표시 방식이 다릅니다. 섹션형 화면의 삭제는 삭제 확인 후 저장하고 실패하면 서버값으로 다시 로드합니다.
- 저장 실패는 저장 중 오류 등 일반 메시지로 나타날 수 있습니다. 폼 값이 유효한지 확인하고 재시도합니다. 취소/뒤로 이동 전에 저장하지 않은 값은 서버 반영이 아닙니다. 편집 모달의 변경 확인에서 돌아가면 계속 입력할 수 있습니다.
공유 데스크톱 폼에서 전화 빈 값은 현재 직렬화가 undefined를 사용하므로 주소·연락처 객체의 null 삭제와 동일하게 취급하지 않습니다. 전화 전체 삭제가 실제로 저장되었는지는 재조회로 확인해야 합니다. 직원 정보와 시프트를 한 번에 바꾸는 공유 저장 경로는 Employee 저장 뒤 Shift 저장을 따로 실행하므로 두 번째 호출 실패 시 직원 정보만 이미 반영될 수 있습니다.
비상연락처·계좌 null을 서버가 거부하던 스키마를 정합화했고, 변경하지 않은 과거 데이터가 전체 저장을 막지 않도록 바뀐 섹션만 전송하는 구조를 반영했습니다. 기존 수정 설명의 코드/테스트 근거이며 이번 새 실서비스 저장 성공을 뜻하지 않습니다.
프로필 사진과 서명
- 더보기 프로필 카드를 눌러 내 정보를 열고, 위쪽 사진의 카메라 배지를 눌러 사진 선택·자르기 창을 엽니다. 배지는 사진 자기 수정 허용 시 표시됩니다. 파일 선택을 취소하면 기존 사진을 유지합니다.
- 직원 앱은
app-profile-photo이벤트로profile.ts의 사진 선택·자르기 경로를 사용합니다. 자르기 결과를 확인하고 적용합니다. 공용 데스크톱 사진 업로드는prepareProfilePhoto가 큰 사진과 지원 가능한 다른 이미지 형식을 긴 변 1024px 이하 JPEG로 변환하고, 결과가 5MiB를 넘거나 해독할 수 없으면 거절합니다. 직원 앱 자르기 경로와 데스크톱 직접 업로드를 혼동하지 않습니다. - 성공 시 프로필 캐시를 갱신해 사진을 표시합니다. 교체는 같은 절차입니다. 직원 페이지에는 사진 삭제 버튼이 없으며 공유 데스크톱 폼의 삭제 기능과 구분합니다. 사진 업로드와 직원 사진 연결은 두 단계라 중간 실패 시 표시된 기존 사진을 기준으로 다시 확인합니다.
- 더보기 → 서명/도장에서 서명 미리보기를 확인하고 PNG/JPG/WebP를 선택합니다. 서명은 5MiB 초과를 거부하며 작은 PNG data URI로 변환해
setMySignature로 저장합니다. 서명과 프로필의 파일 크기 제한은 다릅니다. - 교체는 새 서명 파일 선택, 삭제는 삭제로 null 저장입니다. 삭제 후 결재문서 서명란은 빈칸/(인)으로 출력됩니다. 서명 파일을 고르는 순간 저장되는 경로이므로 일반 내 정보 저장을 별도로 기다리는 작업으로 설명하지 않습니다.
등록한 서명은 결재 문서의 서식 렌더링에 사용합니다. 연차 사용촉진의 외부 Sign 서명이나 급여명세서의 전자서명을 이 이미지 등록으로 완료한 것으로 취급하지 않습니다. 조회 실패 시 서명 미리보기를 빈 값으로 바꾸는 경로가 있으므로 실패 후 화면이 비었다고 삭제되었다고 단정하지 않습니다.
비밀번호와 로그인 방식
비밀번호·휴대폰 인증 로그인·2단계 인증·패스키·로그인한 기기는 인증/보안 설정에서 관리합니다. 직원 앱은 더보기, 웹 앱은 프로필 메뉴에서 엽니다. 내 정보에서 보안 설정을 찾도록 안내하지 않습니다.
비밀번호는 현재 비밀번호 확인과 새 비밀번호 입력을 거쳐 저장하며 취소하면 변경하지 않습니다. 휴대폰 인증 로그인은 이 설정 화면의 스위치로 바꿉니다. 단계별 등록·취소·해제·기기 로그아웃은 인증·보안 설정에 연결합니다.
근무시간 직접 선택
- 더보기 → 근무 시간 설정에서 현재 근무시간과 변경할 근무시간 목록을 확인합니다. 현재값이 없으면 아직 설정되지 않았어요를 표시합니다.
- 이름과 시작/종료 시각을 확인해 실제 근무시간을 선택합니다. 추천은 최근 출근 기록 N회로 추론한 값이며 저장을 대신하지 않습니다. 현재 선택이 없으면 추천값이 기본 선택될 수 있습니다.
- 다른 유효 값을 고르고 근무시간 저장을 누릅니다. 미선택·현재값과 동일·저장 중에는 버튼이 비활성입니다. 성공 시 **근무시간이 저장되었습니다.**와 현재 표시를 갱신합니다.
- 뒤로 이동 후 재진입하여 현재값을 확인하고 근무 탭 상태를 새로고침합니다. 옵션이 없거나 로딩 실패하면 **선택할 수 있는 근무시간이 없어요.**가 표시됩니다. 저장 실패는 오류 토스트이고 선택값을 고쳐 재시도합니다.
선택 목록은 주·추가 소속의 근무 그룹에 속한 유형과 소속 팀·직원에게 개별 허용된 유형의 합집합입니다. 그룹과 허용 목록이 모두 없을 때만 조직 전체 활성 유형을 엽니다. shift.setMyShift는 본인 Employee.shiftId를 갱신하며 다른 그룹 유형을 선택하면 소속 근무 그룹 연결도 함께 맞춥니다. 급여 계산용 근로형태를 이 선택으로 변경하지 않습니다. 추천값이 자동 승인되거나 새로운 근무표 셀이 만들어지는 기능이 아닙니다. 스케줄러 배정·조직 시프트 매핑·최근 출근자료와의 관계는 스케줄러, 출퇴근에 설명합니다.
간호 근무 형태 변경 신청
- 더보기 → 근무 형태 변경을 엽니다. 간호 프로필이 없으면 **간호 프로필이 등록되어 있지 않아 근무 형태 변경은 신청할 수 없어요.**를 표시합니다. 프로필 조회 실패도 동일한 빈 경로로 보일 수 있습니다.
- 현재 근무 형태와 신청 내역을 확인합니다. 승인 대기 건이 있으면 새 폼을 숨기고 기존 신청을 취소한 뒤 새로 신청하라는 안내를 보여 줍니다. 더보기 메뉴에는 진행중 배지가 표시될 수 있습니다.
- 변경할 근무 형태에서 현재와 다른 3교대·야간전담·데이전담·이브닝전담을 선택합니다. 필수 사유와 선택 희망 적용일을 입력하고 변경 신청합니다. 예: 3교대에서 데이전담, 사유 근무 조정 요청.
- 성공하면 입력을 비우고 대기 이력을 다시 읽습니다. 서버도 간호 프로필·다른 형태·이미 대기 요청이 없는지 검사합니다. 중복 신청 실패는 목록을 재조회합니다.
- 대기 이력의 취소를 누르고 확인하면 취소됩니다. 취소 후 다시 신청할 수 있습니다. 반려는 사유를 확인하고 새로 신청합니다. 이미 승인된 건에는 대기 취소 버튼이 없습니다.
- 관리자 승인 시 NurseProfile의 근무 형태를 바꾸고 신청 승인자/시각을 기록하며 알림을 생성합니다. 현재 승인 API는 입력된 희망 적용일을 미래 실행 예약으로 기다리지 않고 프로필을 업데이트하므로 날짜가 미래라도 자동 예약을 보장하지 않습니다.
관리자 처리 권한은 nurse-scheduler:update를 사용하는 API와 실제 노출 화면을 확인해야 합니다. 팀 관리자 앱에 별도의 근무 형태 요청 처리 UI가 없는 상태에서 근무시간 자기선택 요청 처리를 현재 메뉴로 소개하지 않습니다. 직접 시프트 저장과 간호 형태 신청/관리자 직접 변경은 다른 작업입니다.
글자 크기와 다른 설정
- 더보기 → 화면 설정을 엽니다. 현재 기능은 글자 크기이며 테마/다크 모드 선택 화면이 아닙니다.
- 작게(1.0) / 기본(1.2) / 크게(1.4) 중에서 읽기 편한 크기를 누릅니다. 앱 전체와 이 화면의 예시 문구가 즉시 바뀌고 선택 체크가 표시됩니다. 별도 완료/저장 버튼 없이 뒤로 나갑니다.
- 같은 기기 재진입 때 선택을 확인합니다. 최초/잘못된 저장값의 기본은 1.2입니다. 로컬 저장소 쓰기 실패는 흡수되어 당장 화면만 바뀔 수 있습니다. 설정은 기기의 로컬 저장소를 사용하므로 다른 기기 자동 동기화를 전제로 하지 않습니다.
휴대폰 알림 설정은 알림의 이벤트·채널·음소거와 연결되고, 상단 종의 알림 읽기는 수신 설정과 다릅니다. 직원 전체 화면 알림에는 데스크톱 공용 종 패널의 모두 읽음 버튼이 없습니다. 급여명세서는 명세서 배포, 불편·기능 신고는 해당 문의/신고 기록의 절차를 따릅니다.
근거·정정·남은 확인
- 직원 프로필 액션, 공용 내 정보 폼, 프로필 사진 처리, 화면 설정.
- EmployeeService, 직원 API, 시프트 API, 간호 형태 API.
- 기존 가이드의 화면 설정을 다크/표시 모드로 설명한 부분, 근무 형태 변경을 선택적 승인으로 설명한 부분, 직원 알림 모두 읽음 설명을 정정합니다. 기존
ea-11.png의 더보기 메뉴를 열어 확인했으나 참고 이미지이며 저장 결과 검증으로 사용하지 않았습니다. - 미확인 실행: 권한별 읽기/쓰기·빈 섹션 제거와 재조회, 전화 빈 값 처리, 직원/시프트 일부 성공, 사진 크롭/업로드/삭제와 서명 서식 반영, 비밀번호/OTP 토글 오류, 형태 신청의 권한·승인 적용 시점, 글자 크기 재실행 유지. 안전한 테스트 개인정보를 사용한 번호 주석 화면과 크롭/뒤로 이동 영상이 필요합니다.
기능별 직원 가이드 영상
더보기 메뉴에서 이름·사번·소속과 메뉴 위치를 확인하고 「내 정보」 진입 및 뒤로 이동을 촬영했습니다. 화면·알림 설정은 글자 크기를 크게 바꾼 뒤 기본으로 복원하고, 전체 알림 받기를 껐다가 켠 뒤 재진입해 상태를 확인했습니다. 캡처는 390×844의 브라우저와 예제 조직 관리자 계정이며 실제 휴대폰의 시스템 알림 권한·푸시 수신은 확인하지 않았습니다.
앱 개요 영상과 별도로 각 절에 영상을 배치했습니다. 영상 자막과 아래 번호별 설명은 같은 조작을 가리키며, 프로필 개인정보 수정·비밀번호 변경·서명 등록의 완료 증거로 이 메뉴 영상을 사용하지 않습니다.
직원 등록·배치·재직 전환 촬영
신규 직원 등록은 직원 관리에서 신규 직원 등록을 열고 기본정보·인사정보·자격증/면허·근로계약 네 카테고리를 입력하는 별도 영상입니다. 예제 홍영상의 수동 사번 DOC002, 입사일 2026-09-11, 간호사 자격증 유형, 정규직·월급제·기본급 3,000,000원을 입력하고 계약 미리보기를 닫은 다음 등록했습니다. 등록 완료 창 뒤에 직원 목록에서 비활성 상태를 다시 확인했습니다. 임시 비밀번호 영역은 캡처 전에 흐림 처리했으며 전화·이메일을 비워 문자나 초대 메일을 발송하지 않았습니다. 자격증 유형 선택은 원본 파일 제출·승인과 구분합니다.
팀·역할 배정은 DOC002를 검색하고 편집 → 인사정보 → 소속 추가 → 온보딩 운영팀 → 일반 직원 → 저장 순서입니다. 저장 후 목록에서 팀·역할을 확인했습니다. 기존 팀 생성 영상에 이 배치 영상을 추가했으며 역할 권한은 역할 관리의 정의를 따릅니다.
재직 전환과 근무 유형은 같은 직원의 인사정보에서 상태를 재직으로 바꾸고 영상 교대 실습 그룹·실습 주간 유형을 선택해 저장한 뒤 목록의 재직·근무 유형을 대조했습니다. 휴직·퇴직의 사유/일자와 휴직 복귀는 이 영상의 범위에 포함하지 않습니다.
직원 본인 근무시간은 더보기 → 근무 시간 설정에서 실습 주간 09:00–18:00을 저장하고 재진입해 현재값을 확인하는 영상입니다. 촬영 끝에는 예제 계정의 원래 주간 07:00–15:00으로 복원했습니다. 관리자 근무 유형 정의와 직원의 선택값이 연결되며 간호 근무 형태 변경 신청과는 별도입니다.
수정·등록 폼의 구현은 packages/components/html/add-employee-panel.html, edit-employee-panel.html과 각 AddEmployeePanel.ts, EditEmployeePanel.ts입니다. 전체 권한별 등록 제한, 원본 자격증 업로드, 실사용자 초대·임시 비밀번호 전달, 실제 급여 계산은 별도 확인 대상입니다.
직원명부 다운로드 영상
직원 명부 다운로드는 직원 관리 → 직원명부 다운로드 → 포함할 열 선택 → 다운로드의 독립 영상입니다. 예제에서는 기본 7개 열 중 이메일·전화번호를 해제했습니다. 로컬 브라우저가 받은 직원명부_2026-09-11.xlsx의 실제 XLSX 내용을 열어 사번·성명·상태·입사일·근무형태 5개 열, 예제 직원 21행, DOC002 포함을 확인했습니다. 적어도 한 항목을 선택해야 다운로드가 활성화됩니다.
confirmRosterExport()는 직원 관리 진입 시 상태 필터를, 팀 관리 진입 시 전달받은 팀·상태 범위를 employee.exportRoster에 보냅니다. 화면의 모든 검색 조건이 자동으로 동일하게 적용된다고 안내하지 않습니다. 팀의 명단 다운로드 역시 항목 선택 창을 통과하도록 기존 가이드 문구를 정정했습니다. 촬영은 직원 관리 진입 경로이며 팀 다운로드의 별도 실행 검증은 남아 있습니다.
직원 주소 변경 영상
직원 가이드의 내 정보에 5단계 영상을 연결했습니다. Codex가 예제 EMP001의 「더보기」 → 「내 정보」에서 수정 가능한 상세 주소를 「예제 교육로 12」로 입력하고 페이지 하단 「저장」을 눌렀습니다. 더보기로 복귀한 뒤 내 정보를 다시 열어 같은 주소를 확인하고 원래 주소로 복원·저장했습니다.
별도 주소 편집 팝업을 여는 방식이 아니라 직원 앱의 modals/my-info.html에서 직접 수정하는 방식입니다. MyInfoForm.ts의 saveAll은 조직의 편집 허용 정책과 입력 검증을 거쳐 변경 항목을 저장합니다. 관리자 인사 정보와 연결되지만 이 영상에서 관리자 화면의 재조회까지 수행하지 않았습니다. 비밀번호 재설정과 사진·서명 파일 업로드는 같은 절의 별도 조작으로 남겨 둡니다.
관리자 내 정보의 주소 편집 영상
관리자 가이드의 4단계 영상은 설정 → 내 정보 → 주소 편집에서 상세 주소 「교육실 201호」를 입력·저장하고 편집창을 다시 열어 보존을 확인한 과정입니다. 촬영 후 기존 상세 주소로 복원해 저장했습니다. 기본 주소 검색, 사진·서명 파일, 비밀번호 변경은 이 영상에 포함하지 않았습니다.
관리자 예제 계정 EMP001에서 확인했습니다. 직원 앱의 내 정보와 같은 직원 자료를 사용하지만 입력 화면과 진입 경로가 다릅니다. 다른 직원의 주소는 직원 관리에서 변경하므로 본인 정보 영상으로 대신하지 않습니다.
사용 분석 동의와 철회
| 대상 | 설정을 여는 위치 |
|---|---|
| 관리자 웹 | 계정 메뉴 또는 설정의 내 정보 |
| 직원 앱 | 더보기의 사용 분석 설정 |
| 독립 업무 앱 | 내 정보 또는 상단 사용 분석 버튼. 상위 화면이 관리하는 내장 화면은 중복 진입점을 숨깁니다. |
| 문서·랜딩 | 하단의 사용 분석 설정 |
직원 더보기 가이드와 관리자 조직 설정 가이드에 현재 선택 확인, 동의·거부, 닫기와 재선택을 설명했습니다. 기능이 꺼져 있으면 진입점을 표시하지 않습니다. 선택 후 안내 전체가 숨겨지며 설정에서 다시 엽니다. 거부는 제품 사용이나 푸시 수신을 막지 않습니다.
웹은 origin·제품·정책 버전, 네이티브는 기기 앱·Firebase 프로젝트·정책 범위로 저장합니다. 로그인·로그아웃·조직 전환이 선택을 지우지는 않으며, 이전 작업의 측정 핸들은 무효화합니다. 이전 선택 전의 이벤트를 동의 뒤에 재전송하지 않습니다. 저장 오류는 동의 성공으로 해석하지 않고 다시 설정 상태를 확인합니다.
PR #753·#784와 packages/components/src/analytics/consent-ui.ts, consent.ts, apps/employee-app/src/native-analytics-controller.ts를 대조했습니다. 이번 작업은 Google 수신이나 네이티브 실기기 확인을 수행하지 않았습니다. 동의·거부·철회 재촬영도 대기 중입니다.
PC 주소와 앱 정보
| 작업 | 시작 위치 | 결과·예외 |
|---|---|---|
| 주소 복사·열기 | 더보기 → PC 웹사이트 | 관리자/결재 권한에 맞는 주소 표시. 주소 제공은 권한 부여가 아니며 웹은 새 탭, 앱은 외부 브라우저로 열기 |
| 본인 대화에 보내기 | 같은 영역의 나에게 메신저로 보내기 | 본인 대화방에 실제 메시지 저장. 잠금 조직은 기기 키가 없으면 전송을 막고 키 가져오기 안내 |
| 정보 확인·복사 | 더보기 → 앱 정보 | 플랫폼별 버전·조직·사번. 웹은 실제 현재 페이지 주소 사용. 복사 성공/실패 확인 후 문의에 필요한 내용만 전달 |
| 업데이트 확인·적용 | 앱 정보의 업데이트 확인 / 지금 업데이트 | 웹은 진입 스크립트 비교 후 새로고침, 네이티브는 배포 번들 정책 확인 후 적용. 스토어 업데이트 필요·확인 불가를 최신 상태와 구분 |
사용자 절차·취소·오류 안내는 직원 가이드에 연결합니다. profile/pc-web-links.ts, profile/app-info.ts, profile/app-update.ts, profile.ts를 함께 유지합니다. 앱 정보는 읽기 전용이고 복사·신고 창 열기는 문의 전송 완료가 아닙니다. PC 링크는 현재 환경의 주소를 사용하므로 분리된 로컬 Vite 포트에서 다른 앱 경로가 열리는 것까지 보장하지 않습니다.
이번 실제 영상은 웹의 최신 상태 확인·정보 복사 및 PC 주소의 복사·자기 대화 전송까지입니다. 새 배포를 받아 적용, 외부 PC 로그인, 네이티브 업데이트와 잠금 조직 전송은 미촬영입니다. 근거: #1146, #1149, #1155, #1158, #1162, #1166, #1172, #1173.