Skip to content

계정·워크스페이스·팀·역할·조직 설정 ​

제품 개발 기록 · 인증 · 인사 기록 · 근태·휴가 · 스케줄링

계정·조직·팀·역할의 설정 절차와 권한 관계를 설명합니다. 화면·SDK·API·저장 모델을 대조했으며 실제 실행한 조작과 남은 검증 항목은 아래 영상 기록에서 구분합니다.

이 기능이 관리하는 것 ​

회원 계정 Account는 이메일로 인증하는 사람이고, 직원 Employee는 특정 조직의 인사 기록입니다. 한 계정이 여러 조직의 직원과 연결될 수 있습니다. 워크스페이스는 조직 Organization으로 들어가는 세션 단위이며 팀 Team과 직원 소속 TeamMember, 권한 묶음 Role은 그 안에 있습니다. 팀을 옮기는 것, 역할을 배정하는 것, 다른 워크스페이스로 들어가는 것은 서로 다른 작업입니다.

조직 담당자는 관리자 앱에서 팀·역할·기본 운영 설정을 관리합니다. 일반 비밀번호/OTP 로그인·강제 변경은 인증, 직원 전체 등록·휴퇴직·계약은 인사 기록, 근태 유형/연차 기준은 근태·휴가, 병동은 스케줄링에서 이어집니다.

진입실제 화면접근 전제
/admin/signup회원 정보 입력·인증 메일 발송비로그인, 공개 가입
/admin/signup/verify?token=...메일 인증·비밀번호 재입력유효한 이메일 링크
/admin/invite?token=...직원 계정 초대 수락유효한 초대와 활성 직원
/admin/workspaces소속·초대·지원 조직·조직 생성인증된 Account 세션
인사 관리 → 팀 관리, /admin/#organization조직 트리·전체/팀 구성원team:read, 직원 데이터 조회 권한
인사 관리 → 역할 관리, /admin/#roles역할 목록·권한 선택role:read
설정 → 조직 설정, /admin/#settings/org조직 기본 정보·보안·직원 앱 설정조직 조회, 수정 시 organization:update와 setting:update
설정 → 내 정보, /admin/#settings/myinfo본인 프로필·연락처·계좌·서명·비밀번호본인 직원 세션과 편집 허용 정책
/admin/#parameters글로벌 파라미터setting:read, 쓰기 setting:manage; 현재 LNB에 없음

루트에 해시가 없으면 admin:lastTab에 기록된 마지막 탭을 복원합니다. 명시된 해시가 우선입니다. 직원 관리가 언제나 처음 나온다고 단정하지 않습니다. 등록되지 않은 pathname 직접 진입은 404.html 안내로 이동합니다. 작은 화면의 접힌 LNB/드로어에서도 같은 메뉴를 선택합니다. 역할별 실제 메뉴 가림과 서버 접근 거절은 이번에 실행 검증하지 않았습니다.

조작 목록 ​

ID조작아래 절
OA01~OA03가입 요청, 인증 메일 재발송, 메일 인증가입
OA04~OA06이메일 초대 수락, 허브 초대 수락, 직원 초대 발송초대
OA07~OA10워크스페이스 생성, 소속/소유 조직 입장, 지원 조직 입장, 전환·로그아웃워크스페이스
OA11~OA14트리 선택·접기·너비 조절, 구성원 검색/필터/정렬/페이지, 팀 생성, 팀 수정팀
OA15~OA18팀 삭제, 기존 직원 추가, 개인·일괄 소속 변경, 팀원 제거구성원
OA19~OA21구성원 상태 변경, 팀 내 역할 변경, 명부 다운로드구성원
OA22~OA25역할 조회/검색/펼침, 생성, 수정·권한 선택, 삭제역할
OA26~OA29조직 정보·정책 저장, 로고/직인 등록·삭제, 자기등록 설정, 알림 설정조직 설정
OA30~OA33본인 정보 조회/수정/삭제, 사진 등록·삭제, 서명 등록·삭제, 비밀번호/OTP 설정내 정보
OA34~OA37파라미터 조회/검색, 생성, 수정, 이력/삭제파라미터

조직 삭제·계정 탈퇴·초대 취소·모듈별 활성화 전환은 이 관리자 화면에 있는 조작으로 확인되지 않았습니다. API가 있거나 과거 명세에 있더라도 아래 사용 절차에 추가하지 않습니다.

회원가입과 이메일 인증 ​

  1. 관리자 로그인 화면의 가입 경로에서 성, 이름, 이메일, 비밀번호, 비밀번호 확인을 입력하고 약관에 동의합니다. 예시 계정 정보는 김 / 운영 / operator@example.com처럼 비민감 테스트 데이터를 씁니다. 성·이름은 각각 1~100자, 조직명은 선택 255자 이하, 전화번호도 선택입니다.
  2. 조직명을 입력해도 이 시점에는 조직을 만들지 않습니다. 계정에 pendingOrganizationName으로 보관해 뒤의 조직 생성에 미리 채웁니다. 비밀번호는 아직 병원이 없어 기본 규칙(8자 이상·대문자·소문자·숫자·특수문자, 특수문자는 영문·숫자가 아닌 모든 문자)을 따릅니다. 화면이 일치 여부와 이 규칙을 검사하고, 서버도 복호화 후 같은 함수로 검사해 거절 문구를 한국어로 돌려줍니다. 입력칸 안내도 같은 규칙에서 만듭니다.
  3. 제출하면 미인증 PENDING Account와 인증 토큰을 만들고 발송 안내로 바뀝니다. 이미 인증된 이메일/사용 중인 전화번호는 오류입니다. 미인증 계정의 재요청은 정보를 갱신하는 경로가 있습니다.
  4. 인증 메일 재발송은 화면 60초 대기 뒤 가능합니다. 서버도 60초 1회·시간당 5회로 제한하며 새 토큰 발급 시 기존 활성 인증 토큰을 무효화합니다. 응답이 일반 성공 안내여도 실제 메일 수신을 증명하지 않습니다. 입력을 바꾸려면 입력 정보 수정을 누릅니다.
  5. 메일의 /signup/verify?token=... 링크에서 가입 시 입력한 비밀번호를 다시 입력하고 인증합니다. 토큰 유효기간은 24시간입니다. 누락·만료·사용한 링크는 오류로 표시하며 가입 화면에서 새 메일을 요청해야 합니다. 잘못된 비밀번호는 그 화면에서 다시 입력합니다.
  6. 성공하면 Account를 활성화하고 계정 세션을 발급합니다. 완료 화면의 워크스페이스 만들기 버튼으로 허브에 들어갑니다. 인증된 무소속 계정은 정상 상태이며 아직 직원/급여/팀 데이터가 있는 것은 아닙니다.

이 절차는 관리자 전용 signup.ts 흐름입니다. 공용 레거시 RegisterForm 또는 기존 Employee 비밀번호 로그인과 혼동하지 않습니다. 비밀번호 전송·갱신 상세는 인증을 참고합니다.

직원 계정 초대와 계정 연결 ​

  1. 관리자는 이메일이 있고 아직 실제 Account와 연결되지 않은 직원의 계정 초대를 실행합니다. 대상 확인 대화상자에서 확인하면 employee.sendAccountInvite를 호출하고 발송 완료/실패를 안내합니다. 취소하면 보내지 않습니다. 직원 등록 단계와 계정 연결은 별도입니다.
  2. 직원은 메일 /admin/invite?token=...을 열어 조직명·이름·이메일을 확인합니다. 토큰 없음·만료·이미 계정 연결된 직원은 안내 상태이며 임의 새 계정을 만들지 않습니다.
  3. 기존 계정이 있으면 그 계정 비밀번호를 입력합니다. 신규라면 초대한 병원의 일반 비밀번호 규칙(기본 8자 이상·대문자·소문자·숫자·특수문자)을 따르는 새 비밀번호와 확인 값을 넣습니다. 입력칸 안내도 그 규칙을 보여 줍니다. 기존 계정이 정지되었거나 이미 같은 조직의 다른 직원과 연결되어 있으면 서버가 거절합니다.
  4. 수락 성공 시 해당 Employee의 accountId를 연결합니다. 활성 소속이 하나면 조직 세션을 바로 채택하고, 여러 소속이면 Account 세션으로 허브에서 고릅니다. 단순 메일 열람은 초대 수락이 아닙니다.
  5. 링크를 잃어도 Account 세션의 워크스페이스 허브 → 받은 초대 → 수락으로 자신의 이메일에 발급된 유효 초대를 받을 수 있습니다. 수락 후 소속과 받은 초대를 다시 조회합니다. 처리 중 중복 클릭을 막고 실패하면 오류를 표시합니다.
  6. 조직 세션만 있고 Account가 없는 기존 직원은 공용 내 정보의 계정 연결 동선이 노출된 경우 본인 이메일 인증 메일을 요청해 같은 초대 절차를 사용합니다. 관리자 설정 탭의 실제 노출 여부는 계정 상태에 따라 확인해야 합니다.

가입·초대 메일을 실제 발송하는 QA는 테스트 계정에서 수행해야 합니다. 이 문서 작업에서 발송하지 않았습니다. 계정 연결 후 초대를 반복하면 충돌할 수 있으므로 성공 여부를 허브/직원 정보에서 먼저 확인합니다.

워크스페이스 생성·입장·전환 ​

  1. 허브에서 새 워크스페이스 만들기를 누릅니다. 소속이 없고 가입 때 조직명을 입력했다면 생성 화면으로 바로 들어가 이름을 채웁니다.
  2. 기업 정보를 입력해 주세요 단계에서 기업명(필수 1~255자), 조직 유형, 규모, 국가, 사업자등록번호를 입력합니다. 유형은 의원/병원/종합병원/상급종합병원/요양병원/정신병원/치과병원/한방병원/조산원/기타, 규모는 30병상 미만/30~99/100~299/300 이상입니다. 국가 기본은 대한민국이며 선택 항목은 생략할 수 있습니다.
  3. 다음으로 운영 정보를 입력합니다. 생성 기본값은 지급일 25일, 마감일 20일, 회계연도 시작 1월, 주당 한도 52시간, 하루 기준 8시간입니다. 지급/마감 1~31 정수, 시작 월 1~12, 주당 1~168, 하루 1~24 정수입니다. 이전은 값을 유지하고 앞 단계로 돌아갑니다.
  4. 워크스페이스 생성을 누르면 조직·소유자 직원·관리팀·기본 수당/공제 코드를 구성하고 기본 역할/권한·법정 파라미터를 준비합니다. 첫 직원은 활성 시스템 관리자이며 Account와 연결됩니다. 소유자 이름/이메일은 전자서명·메시지 발신 기본값으로 복사합니다.
  5. 생성 완료 화면의 시작하기에서 조직 세션을 채택합니다. 생성 API 성공과 시작하기는 별도 단계입니다. 실패 시 폼에 오류를 표시하지만 초기 생성 트랜잭션 이후 역할/파라미터 준비가 이어지므로 재시도 전에 허브에서 이미 생성된 조직이 있는지 확인해야 합니다.
  6. 기존 소속은 허브의 워크스페이스 카드로 들어갑니다. 멤버십이 없는 소유 조직은 소유자 입장 경로를, 플랫폼 지원 권한이 있는 계정의 지원 조직 카드는 유효한 grant 입장 경로를 사용합니다. 일반 사용자에게 지원 조직을 생성/수정하는 UI는 없습니다. 만료 grant·소속 없음은 오류입니다.
  7. 조직 화면에서 워크스페이스 전환을 실행하면 toAccountSession 후 /workspaces로 전체 이동해 조직 화면 상태를 초기화합니다. 실제 Account 미연결 직원은 전환을 거절합니다. 허브의 로그아웃은 Account 세션을 종료합니다.

동일 계정/조직의 권한 세션 갱신은 인증, 여러 조직을 오가며 데이터가 섞이지 않는 검증은 재진입 QA 범위입니다.

팀 트리와 팀 정보 ​

팀 추가 모달

팀 추가 화면입니다. 아래 2번은 상위 팀, 3번은 팀명·설명·상태·팀장, 4번은 저장 버튼에 대응합니다. 조직명은 예시이며 저장 후 팀 트리는 이 이미지에 포함되지 않습니다.

  1. 팀 관리의 왼쪽 조직 루트를 누르면 전체 구성원, 개별 팀을 누르면 팀 상세와 구성원이 표시됩니다. 자식이 있는 팀 클릭은 펼침/접기도 수행합니다. 팀 선택 시 composition을 다시 조회합니다. 트리 폭 조절 핸들은 180~480px 범위이며 브라우저에 저장됩니다. 트리 접힘 상태는 해당 탭에 재진입할 때 펼침으로 초기화합니다.

  2. 팀 추가를 누릅니다. 팀을 선택한 상태였다면 상위 팀에 그 팀을 미리 선택합니다. 최상위 생성은 조직 루트를 고릅니다.

  3. 팀명은 필수 1~100자, 설명은 선택 500자 이하, 상태는 기본 활성, 팀장은 선택입니다. 새 팀의 내부 유형은 PERMANENT입니다. 팀장 검색/선택과 팀원 배정은 구분되며 일반 구성원은 생성 후 추가합니다. 팀장은 조직 전체 직원 중에서 여러 명 고를 수 있으며 그 팀의 팀원일 필요가 없고, 지정해도 팀원으로 추가되지 않습니다(2026-10, MED-945·946). 하위 팀 소속이든 다른 팀 소속이든 어느 팀의 팀장도 될 수 있습니다. 첫 번째로 고른 사람이 대표 팀장이며 팀 단톡방의 방장이 됩니다. 공동 팀장도 모두 같은 팀 범위 권한과 결재 알림을 받습니다. 연결 병동은 선택이며 이 팀을 병동과 잇습니다. 병동 하나에는 팀 하나만 연결되므로 이미 다른 팀에 연결된 병동은 고를 수 없고 그 팀 이름을 함께 표시합니다. 부서(하위 팀이 있는 최상위 팀)에는 연결할 수 없습니다. 병동 자체를 만들거나 이름·병상 수·종류를 고치는 것은 병동 관리에서만 하며, 드롭다운 아래 알림이 그 경로를 안내합니다. 병동 축의 규칙은 스케줄링에서 이어집니다.

  4. 저장하면 Team을 생성하고 트리를 재조회합니다. 대소문자만 다른 같은 조직 팀명도 중복 안내로 거절합니다. 조직당 최대 1000팀, 트리 깊이 최대 50단계입니다. 부모/자손 관계 변경에는 깊이 검사가 있습니다.

  5. 트리 우클릭 수정/삭제, 또는 상세 헤더 팀 편집/팀 삭제를 사용할 수 있습니다. 수정은 이름·설명·상위팀·활성·팀장을 바꿉니다. 현재 팀장의 표시를 위해 구성원 목록을 추가 조회합니다. 저장 성공 알림 뒤 최신 팀을 확인합니다.

  6. 팀 삭제 → 확인은 하위 팀이나 구성원이 없는 경우에만 논리 삭제합니다. 남아 있으면 **하위 팀 또는 팀원이 있어서 삭제할 수 없어요.**로 차단합니다. 먼저 소속을 정리하고 다시 삭제합니다. 취소하면 유지됩니다. 복원 UI는 없습니다.

  7. 트리는 모든 단계에 인원 배지를 표시합니다. 숫자는 자기 팀과 하위 팀 전체의 재직+휴직이며 여러 팀에 속한 직원은 한 번만 셉니다. 펼침/접기는 팀명 앞 셰브론에서만 동작하고 팀명을 누르면 선택만 합니다.

  8. 병동이 연결된 팀은 그 아래 첫 줄에 병동 줄이 하위 항목으로 붙습니다. 병동 줄을 누르면 오른쪽이 병동 화면으로 바뀝니다. 어느 팀에도 연결되지 않은 운영 중 병동은 트리 맨 아래 미연결 병동 묶음에 모이며, 누르면 연결할 팀을 설정하라는 확인창이 뜨고 병동 설정이 병동 관리에서 그 병동을 수정 상태로 엽니다.

  9. 연결 병동이 없는 팀의 상세 헤더에는 병동 설정 텍스트 버튼이 있습니다. 누르면 팀 수정 창이 열리고 연결 병동 칸으로 화면이 이동해 포커스가 잡힙니다. 부서에는 병동을 연결할 수 없으므로 이 버튼을 두지 않습니다.

팀 생성·변경은 팀 대화방 구성과 연결됩니다. 대화방 자동 구성/참여 처리 실패는 로그로 남는 별도 경로이므로 팀 저장 성공과 메시지 참여 성공은 따로 확인합니다.

시스템 관리자 플래그는 권한 검사를 건너뛰는 힘일 뿐, 권한 설정만으로도 같은 일을 할 수 있습니다(2026-10, MED-1000). 예전에 플래그로만 열리던 권한 미리보기, 대화 복구, 다른 사람의 비공개 시트 관리는 각각 「권한 미리보기」「대화 복구 관리」「모든 시트 관리」 권한 행이 되었고, 관리자 앱 전체 입장·팀장 앱의 전 팀 관할·결재선 관리·팀장 없는 단톡방 입장 승인도 조직 전체 범위 권한으로 판정합니다. 역할 관리의 「시스템 관리(관리자 전체)」 묶음을 더하면 그 역할은 시스템 관리자와 같은 일을 합니다. 관리자 알림(권한 요청·근무시간 초과·AI 예산·예약 변경)도 역할 이름이 아니라 그 일을 맡는 권한을 가진 사람에게 갑니다.

팀장 지정이 권한 범위의 1차 소스입니다(2026-10, MED-945). 팀장(대표·공동 모두)으로 지정되면 직책(역할)이 대리·사원이어도 그 팀과 하위 팀 전체의 팀원 명부·근태·휴가·초과근무·외근·인센티브·스케줄·급여·문서·자격증·교육을 팀 범위로 보고, 근태·휴가·초과근무·외근·인센티브를 결재할 수 있습니다. 이 「팀장 권한 묶음」은 시스템이 정하며 기본 역할 「팀장」의 팀 범위 권한과 같습니다. 판정은 역할 권한과 팀장 묶음의 합집합이고 역할의 전체 범위는 그대로 더 넓습니다. 소속과 팀장 지정 모두 하위 팀을 항상 포함합니다 — 소속별 「하위 팀 포함」 설정은 없어졌고, 팀 관리의 「하위 팀 포함」 체크는 팀원 목록 표시 필터(기본 꺼짐)일 뿐입니다. 한 직원이 여러 팀에 속하면 각 소속 역할의 권한을 합집합으로 가지며(가장 넓은 범위 우선), 팀 범위의 팀 집합도 모든 소속 팀과 이끄는 팀을 합친 것입니다.

총괄 팀장(2026-10, MED-946)은 조직 전체의 팀장입니다. 팀 관리의 워크스페이스(조직 이름) 헤더에 「총괄 팀장 A, B」로 보이고, 그 옆 연필 버튼으로 여러 명을 지정합니다(퇴사자는 불가). 총괄 팀장은 모든 팀의 팀장과 같아서 직책과 무관하게 위의 팀장 권한 묶음을 조직 전체 범위로 얻고(역할의 전체 권한과 거의 같지만 팀·직책·설정 같은 관리 권한은 역할이 줍니다), 팀장 앱에서는 모든 활성 팀을 관할하며 팀장 묶음 리소스의 결재 알림을 조직 전체에서 받습니다. 명단에는 「총괄 팀장」 배지가 붙습니다. 퇴사 처리는 총괄 지정도 함께 풉니다.

퇴사 처리는 팀 소속을 끝내지 않습니다. 이끄는 팀의 팀장 지정을 풀고 팀 대화방에서 나가게 할 뿐이며, 소속을 끝내면 증명서 부서명·팀장 앱 결재 범위·팀별 인건비에서 퇴사자가 빠지기 때문입니다. 인원과 결재 알림에서 제외하는 것은 직원 상태로 판단합니다.

팀 이동과 표시 순서 ​

조작시작 위치입력·저장·결과취소·제한
직원의 팀 이동팀원 행의 「팀 이동」출발 소속·도착 팀·직책·사유를 확인하고 실행. 소속과 자동 승인된 인사발령 이력을 함께 확인제출 전 취소는 변경하지 않음. 겸직 추가와 구별. 연결 병동·팀 대화방 반영은 따로 확인
조직도 순서 변경왼쪽 팀 트리같은 상위 팀의 행 앞뒤로 드래그하면 즉시 저장. 새로고침 후 유지 확인최상위 팀끼리도 가능. 다른 부모로의 이동은 팀 편집에서 수행

근거는 #1058·#1088·#1091과 apps/admin/src/views/modals/team-move.html입니다. 새 권한 표의 팀 근태 조회 선택·저장·재열람은 예제 조직에서 촬영했고, 다른 권한 조합과 다중 팀 이동의 예외는 별도 검증 대상입니다.

구성원 조회·배정·제거·내보내기 ​

  1. 전체 또는 팀 상세에서 이름 / 이메일 / 사번을 검색하고 상태를 복수 선택합니다. 헤더를 눌러 사번·이름·이메일·팀·입사일·상태를 정렬하고 30건 단위 페이지를 이동합니다. 하위 팀 포함은 하위 팀 구성원까지 합쳐 보여 주는 표시 필터(기본 꺼짐 = 직속 팀원만)이며 선택 행과 페이지를 초기화합니다. 권한 범위와는 무관합니다. 팀의 직접 인원과 하위 포함 인원은 다를 수 있습니다.
  2. 팀 상세의 기존 멤버를 팀에 추가 버튼에서 활성 직원 목록을 불러옵니다. 검색·정렬 후 여러 직원을 선택해 저장합니다. 이미 그 팀 소속인 직원은 선택할 수 없습니다. 성공자는 세션 중 신규 표시를 받고 팀·직원 목록이 갱신됩니다. 일부 실패는 성공/실패 수와 대상자를 안내하며 실패자만 확인해 재시도합니다. 창에는 직무·팀 필터가 있고 선택지는 후보에게 실제로 있는 값만 나옵니다. 거를 값이 없는 축은 드롭다운 자체를 감추므로 조직에 따라 한쪽만 보이거나 둘 다 보이지 않을 수 있습니다. 어떤 정렬에서도 고를 수 있는 행이 위로, 이미 소속·배정된 행이 아래로 모입니다.
  3. 신규 멤버를 팀에 추가는 공용 직원 등록을 팀 미리 선택 상태로 열고, 전체 구성원의 신규 추가는 직원 등록을 엽니다. 필수 인사·계약·등록 흐름은 인사 기록에서 수행합니다.
  4. 행 팀 관리에서 현재 소속의 제거 표시와 새 팀 추가를 고르고 저장합니다. 기존 소속 제거 후 새 소속 추가를 순서대로 호출하므로 실패하면 일부 반영될 수 있습니다. 목록을 다시 열어 확인합니다. 직원 정보 자체를 고치려면 행 직원 정보 수정을 사용합니다.
  5. 여러 행 선택 후 팀 관리는 선택한 팀에 추가 배정만 합니다. 기존 팀은 유지합니다. 팀 배정 드롭다운도 같은 가산 의미입니다. 일부 일괄 경로는 직원별 오류를 무시하고 요청한 인원수로 완료 알림을 내므로 알림 숫자만으로 모두 성공했다고 판단하지 않습니다.
  6. 상태 변경 → 적용 → 확인은 선택 행의 Employee 상태를 수정합니다. 이는 팀 소속 활성만 바꾸는 조작이 아니며 다른 인사·근태 화면에 영향을 줍니다. 역할 변경 → 적용 → 확인은 해당 팀 멤버십의 roleId를 변경합니다. 역할을 만든 것만으로 직원에게 자동 배정되지는 않습니다.
  7. 행 팀원 제거 또는 선택 후 일괄 제거에서 확인하면 해당 멤버십을 제거/비활성 처리합니다. 직원 자체를 삭제하지 않습니다. 팀이 없어진 직원은 미소속에 나타날 수 있습니다. 하위 팀 포함 상태에서도 각 행의 실제 소속 팀에 역할 변경·제거를 적용합니다. 같은 직원의 다른 팀 소속까지 제거하는 기능은 아닙니다. 일부 실패가 안내되면 실패 대상만 확인합니다.
  8. 직원명부 다운로드 버튼에서 사번·성명·팀·직무·병동·상태·입사일·이메일·전화번호·근무형태 중 최소 한 개를 선택하고 다운로드합니다. 기본은 모두 선택입니다. 팀 화면은 해당 팀과 상태 조건을 전달하고 전체 구성원 버튼은 현재 호출에서 별도 상태 인자를 넘기지 않습니다. 이름 검색·선택 행·하위팀 포함이 그대로 출력 필터라는 뜻은 아닙니다. 서버 xlsx를 받은 뒤 모달이 닫힙니다. 취소/X/Esc는 출력하지 않으며 다음 진입 시 모든 열을 다시 선택합니다.
  9. 트리에서 병동 줄을 고르면 병동 화면이 열립니다. 헤더와 명단은 팀 소속이 아니라 병동 배정을 기준으로 세므로 다른 팀 소속 겸임 인원도 포함되고, 같은 이름의 팀 배지와 숫자가 다를 수 있습니다. 요약 카드는 인원·직군 구성·교대 형태·병동 정보 네 개이며 명단에는 교대 형태 열이 붙습니다.
  10. 병동 화면의 신규 직원 추가는 직원 등록을 열면서 연결 팀을 소속에 미리 채웁니다. 저장하면 서버가 병동 배정도 만듭니다. 기존 직원 추가는 같은 팀 멤버 추가 창을 병동 모드로 엽니다. 후보는 퇴사자만 제외한 재직·휴직이고, 입사일 자리에 지금 병동 배정이 보이며, 이미 이 병동에 배정된 직원은 선택할 수 없습니다. 연결 팀에도 추가 체크는 기본 켜짐이고, 끄면 병동 배정만 만듭니다. 새 배정은 그 병동의 기본 스케줄러로 들어가며, 「이미 배정」은 이 병동의 어느 스케줄러에든 배정된 직원입니다.
  11. 병동 배정을 직접 만드는 경로에는 간호 스케줄 등록 권한이 필요합니다. 권한이 없으면 연결 팀에도 추가를 끌 수 없고, 연결 팀이 없는 병동에서는 기존 직원 추가 버튼이 보이지 않습니다. 또한 이미 연결 팀원이면서 병동 배정이 없는 직원은 팀 합류로 넣을 수 없으므로 그 행만 선택이 잠기고 권한이 필요하다고 표시됩니다.

역할과 권한 선택 ​

역할 추가와 권한 선택

역할 추가 화면입니다. 아래 2번 역할 정보, 3번 권한 체크, 4번 저장 순서로 사용합니다. 전체 권한 목록과 저장 결과는 이 이미지에 포함되지 않습니다.

  1. 역할 관리는 기본으로 활성 역할을 보여 줍니다. 전체 상태/활성/비활성과 역할명 검색을 사용합니다. 카드 헤더/펼침으로 전체 카탈로그 중 선택된 권한과 흐리게 표시된 미선택 권한을 봅니다. 역할은 전 페이지를 로드한 뒤 필터합니다.
  2. 역할 추가에서 역할명(필수 1~100자), 설명(선택 500자 이하), 상태(기본 활성)를 입력합니다. 권한이 없는 역할도 만들 수 있습니다. 내부 코드는 일반 UI에서 직접 입력하는 필드가 아닙니다. 부서와 팀(병동) 은 선택이며 여러 개를 지정할 수 있습니다. 이는 역할 목록을 거르기 위한 분류일 뿐 권한 범위나 결재선과는 무관합니다. 부서를 바꾸면 그 부서 밖의 팀 선택은 빠집니다.
  3. 권한 표는 업무를 행, 조회·등록·수정·삭제·승인 같은 동작을 열로 보여 줍니다. 각 칸에서 없음/본인/팀/전체 중 하나를 선택합니다. 제공하지 않는 범위는 비활성이고 동작 자체가 없으면 **—**입니다. 업무명 검색·업무/범위 필터·선택만 보기로 좁히고 다른 직책과 차이를 비교할 수 있습니다. 비교는 복사가 아닙니다. 행의 모두 전체는 제공되는 가장 넓은 범위, 해제는 해당 행의 권한을 없앱니다. 표시 필터를 바꾸는 것만으로 권한이 지워지지는 않습니다. 실제 저장 값은 resource:action.scope에 해당하는 권한 ID 목록입니다. 표 위 기능별 필수 권한 줄(2026-10, MED-989)은 메신저 · 앱 결재 신청/승인 · 드라이브 · 급여 시트 · 직원 관리 같은 기능(메뉴)을 쓰는 데 필요한 최소 권한 묶음입니다. 버튼마다 충족 · 일부 · 없음 상태가 보이고, 누르면 모자란 칸만 그 범위로 올리며 이미 더 넓은 칸은 그대로 둡니다. 툴팁에 필요한 권한과 아직 모자란 권한이 나열되므로 메뉴별 필수 권한을 따로 외울 필요가 없습니다. 묶음은 서버 권한 게이트에서 읽은 정의이며, 팀장 앱 묶음은 참고용입니다(팀장 지정이 같은 범위를 줍니다).
  4. 저장은 역할 기본정보를 먼저 저장하고 권한 ID 목록을 별도 API로 저장합니다. 실패하면 역할만 만들어졌거나 기본정보만 바뀔 수 있으므로 목록을 다시 불러와 기존 역할을 수정합니다. 전체 원자 저장이라고 설명하지 않습니다.
  5. 기존 역할 수정에서 정보·권한을 바꾸어 저장합니다. 변경이 없는 저장은 비활성입니다. SUPER_ADMIN은 비활성화와 삭제가 제한됩니다. 실제 사용자의 역할은 팀 구성원의 역할 변경 또는 직원 정보 수정에서 배정합니다.
  6. 삭제 → 확인은 배정 직원/멤버십이 없는 역할만 논리 삭제합니다. 배정이 있으면 삭제 불가 안내가 나오므로 먼저 다른 역할로 배정합니다. 역할 삭제 취소는 변경하지 않습니다. 기존 로그인 사용자의 권한 반영 시점은 토큰·권한 갱신을 포함해 재로그인으로 확인해야 합니다.

역할은 직원이 아니라 팀 소속마다 붙습니다. 한 직원이 여러 팀에 속하면 팀마다 다른 역할을 가질 수 있고, 팀에 넣는 것만으로 역할이 따라붙지 않습니다. 비활성 역할은 배정할 수 없으며(권한이 0이 되기 때문입니다), 역할을 고르거나 비우려면 역할 관리 권한이 필요합니다. 팀 수정이나 직원 관리 권한만으로 더 높은 역할을 붙여 권한을 올리지 못하게 하는 규칙이며, 기본 역할(일반 직원)로 붙이는 경로만 예외입니다. 역할을 비우는 것은 예외가 아닙니다.

이 권한 문서는 사용자 동선을 설명합니다. role.update, delete, updatePermissions의 대상 조회에는 ID만 사용한 경로가 남아 있으므로 조직 격리를 검증 완료했다고 주장하지 않습니다. 다른 조직 ID를 사용하는 서버 거절 검증은 별도 미완료입니다.

권한 미리보기 (직원 권한으로 보기) ​

역할·권한 설정이 직원마다 뜻대로 동작하는지 확인하려면 그 직원으로 실제 화면을 봐야 합니다. 조직의 시스템 관리자는 관리자 앱 안에서 특정 직원의 권한을 그대로 불러와 네 앱(관리자 · 급여 · 팀 관리 · 직원 앱)을 그 직원으로 볼 수 있습니다. 테스트 계정을 만들거나 비밀번호를 받을 필요가 없습니다.

  1. 직원 관리 행의 눈 아이콘 「권한 미리보기」 또는 직원 수정 › 계정·보안 하단 「이 직원 권한으로 보기」로 시작 모달을 엽니다. 시스템 관리자 세션에서만 보이고 본인·퇴직 직원·이미 미리보기 중이면 비활성입니다.
  2. 모달은 대상 요약(이름·사번·역할·유효 권한 수·시스템 관리자 여부·관리자 앱 접근 가능 여부)을 보여 주고, 유지 시간(30/60/120/240분, 기본 60)·사유(선택)·시작 화면을 고릅니다. 대상이 관리자 앱에 못 들어가는 직원이면 「병원 설정」은 고를 수 없습니다.
  3. 시작하면 서버가 시간 제한 세션을 발급하고(impersonation.start, 행위자당 유효 1건 — 이전 미리보기는 자동 종료), 브라우저는 원래 관리자 세션을 hereby_impersonation_return에 보관한 뒤 새 세션으로 바꿔 고른 앱으로 이동합니다. 네 앱은 같은 오리진에서 세션을 공유하므로 모두 그 직원으로 보입니다.
  4. 보는 동안 모든 앱 상단에 주황 배너 「권한 미리보기 — 홍길동(간호사) 님으로 보는 중 · 남은 시간 · 시작: 관리자A」와 [종료]가 뜹니다(관리자 임베드 화면 안에서는 중복 표시하지 않음). 관리자 앱은 대상 직원 그대로 판정하므로 일반 직원을 보는 중에는 「접근 불가」 화면이 그대로 보입니다. 플랫폼 지원 세션의 파란 배너와는 별개입니다.
  5. 저장·삭제 등 쓰기 동작은 실제로 반영되고, 이 세션의 모든 요청은 감사 로그에 행위자(관리자 계정)와 유효 신원(대상 직원)이 함께 기록됩니다. 비밀번호 변경·재설정, 계정 초대처럼 대상 직원 명의로 메일이 나가는 작업은 서버가 거부합니다.
  6. **[종료]**를 누르면 서버가 세션을 회수하고 원래 관리자 세션으로 돌아와 직원 관리로 이동합니다. 유지 시간이 지나 세션이 만료되면 다음 요청에서 자동으로 원래 세션으로 복귀하며 「미리보기가 만료되어 원래 세션으로 돌아왔어요」 안내가 뜹니다. 플랫폼 운영자는 system-admin 콘솔에서 이 세션(origin=ORG_DEBUG)을 강제 회수할 수 있습니다.

조직 정보·운영 정책·직원 앱 설정 ​

관리자 조직 설정 조회 화면

관리자 조직 설정 화면입니다. 1번 상단 조직 설정 탭, 2번 기본 정보 오른쪽 수정 버튼을 찾은 뒤 필요한 설정 구역으로 이동합니다. 하단 정책 설정은 이 이미지에 포함되지 않습니다.

  1. 설정 → 조직 설정에서 저장된 정보를 읽고 수정을 누릅니다. 이름·법인명·사업자번호·대표자명·대표전화·이메일·팩스·웹사이트와 로고·직인, 급여/근무 한도, 발신자, 출근 방식, 보안, 셀프서비스, 직원 첫화면, 용어 표시를 편집합니다.
  2. 아래 필드를 입력한 뒤 저장합니다. 취소는 편집 모드를 닫고 다음 수정 진입 때 저장된 값을 다시 채웁니다. 저장 중 비활성 표시가 있습니다.
입력 묶음기본·검증·실제 영향
기본 정보이름/법인명 최대 200, 이메일/URL 형식, 대표자 최대 100. 기관코드는 읽기 값. 빈 일반 텍스트는 전송에서 빠지므로 “기존 값을 비워 삭제”와 다름
직인·병원 로고이미지 파일, 최대 500KiB. 선택 시 data URI 미리보기, 저장 시 Organization에 기록. 삭제 버튼은 값을 비운 뒤 저장할 때 null로 지움. 로고는 LNB 공동 표시, 직인은 문서 생성의 원천
급여 지급일·마감일1~31. 조회 값이 없을 때 수정폼 기본 25/21. 신규 워크스페이스 생성 기본 25/20과 다름
신규 입사자 시트 자동 추가기본 꺼짐. 켜면 직원 등록(단건·엑셀 대량 추가) 직후 직원 기준(rowBasis=employee) 수동 시트 가운데 이번 달 이후 · 상시이고 잠기지 않았고 작업 완료가 아닌 시트에 그 직원의 수동 행이 자동으로 들어감(이미 행이 있으면 건너뜀, 그 달 이후 입사자는 입사일 가드로 제외). 자동 채움 규칙이 있는 시트는 원래대로 새로고침 때 채워짐. 켜져 있으면 직원 추가 패널의 검토 단계에 「저장하면 다음 시트에 추가돼요: …」 미리보기가, 등록 완료 화면에 실제로 행이 들어간 시트 목록이 보임. 온보딩 9/17 결정으로 병원이 시트에 익숙해진 뒤 켠다
주당 한도·하루 기준기본 52/8시간. 조직 설정 API 주당 1~80, 하루 1~24. 생성 마법사 주당 상한 168과 차이 있음. 주당 초과 알림 기본 켜짐
출근 기록 방식앱(Web/Mobile) 기본, 지문 단말기(Secom), 관리자 수동 입력. 직원별 “조직 기본값”이 이 설정을 상속. IP는 한 줄 한 개, 공란이면 제한 목록 없음
전자서명 / 메시지 발신선택 이름 최대 100, 이메일 형식 최대 255. 발신 표시 메타데이터이며 SMTP 로그인 정보가 아님. 발송 순간 복사된 기존 메시지는 나중 설정 변경으로 바뀌지 않음
비밀번호 찾기 허용기본 꺼짐. 직원 셀프 재설정 진입 정책
임시 비밀번호기본 혼합 8자. 숫자/소문자+숫자/혼합/고정. 자동 길이 4~20, 고정값 4~20자. 일반 비밀번호 정책과 별개
일반 비밀번호기본 최소 8자, 대문자·소문자·숫자·특수문자 요구. 최소 길이 4~20. 첫 로그인 변경·내 정보 비밀번호 변경·초대 수락의 검증과 화면 안내에 연결(관리자 직접 설정은 최소 길이만)
직접 수정 허용 항목기본 프로필 사진·주소·비상연락처 허용, 전화·계좌 비허용. 직원 내 정보의 항목별 편집을 제어
직원 앱 첫화면기본 생일/입사기념일/공지 모두 표시, 축하 다음 공지, 공지 3건. 최대 표시 1~10, 위/아래 버튼으로 순서 이동. 출퇴근 현재 상태는 맨 위 고정. 내용 없거나 공지 권한 없으면 카드 숨김
메신저 연락처 공개직원 앱 메신저의 동료 연락처 프로필에 사진·소속·역할·직무·직군·직위·이메일은 늘 보이고, 전화번호만 체크박스(「전화번호를 동료에게 공개」)로 고름. 기본 꺼짐. 켜면 번호가 등록된 직원의 프로필에 전화번호 줄과 「전화하기」가 보임. settings.contactSharing.phone, 병원 일괄 적용
용어 표시기본 「역할」. 병원이 부르는 낱말(예: 직책, 최대 20자)을 적으면 관리자 메뉴(역할 관리)·직원 표 머리글·안내문과 직원 앱·팀 관리 앱의 같은 낱말이 함께 바뀜. 조사(이/가·을/를·으로/로)는 낱말의 받침에 맞춰 자동으로 붙음. 역할 데이터·권한 코드는 그대로이며, 비우고 저장하면 기본으로 복귀. 표·안내문은 저장 즉시, 왼쪽 메뉴 이름은 새로 고침 후 반영. 로그인 응답의 organizationTerminology로 모든 앱에 내려감
  1. 저장은 organization.update 뒤 organization.updateSettings를 순차 호출합니다. 성공 시 편집을 닫고 재조회합니다. 중간 실패하면 기본 정보만 저장되었을 수 있습니다. 전체 폼이 한 트랜잭션이라고 설명하지 않습니다. 설정은 Organization.settings의 JSONB이며 최상위 키 병합으로 저장하므로 같은 하위 묶음을 여러 곳에서 수정할 때 덮어쓰기 가능성을 검증해야 합니다.
  2. 인센티브 → 직원앱 인센티브 자기 등록은 이 저장 버튼과 독립 토글입니다. 기본 꺼짐이며 조회 완료 전 비활성입니다. 켜고 끌 때 incentive.self_registration 조직 파라미터를 즉시 생성/수정하고 변경 사유를 기록합니다. 실패하면 토글을 되돌립니다. 직원 앱 등록 메뉴·서버 SELF 등록을 제어하며 관리자·시트 경로는 유지됩니다.
  3. 알림 설정의 앱 푸시 알림, 전체 알림 받기, 음소거된 사람 해제는 로그인 사용자별 설정을 즉시 저장합니다. 조직 설정 화면 안에 있어도 조직 전체 직원의 알림 스위치가 아닙니다. 푸시를 꺼도 앱 알림함은 유지됩니다. 전체 알림을 다시 켜면 전체/유형별 음소거 규칙을 제거합니다. 실패는 이전 토글 또는 오류 안내로 처리합니다. 상세는 알림입니다.

근무 유형·연차 정책·공휴일은 이 기본 정보 폼이 아니라 근태·휴가의 근태 설정에서 관리합니다. 문서 양식은 문서 결재 그룹, 급여 계산은 급여 시트, 임포트는 가져오기, 공유 파일은 드라이브에서 처리합니다.

내 정보·사진·서명 ​

  1. 설정 → 내 정보에서 프로필 이름/이메일, 사번·팀·생년월일을 읽습니다. 자기 직원 레코드를 조회하며 기본 인사정보는 이 화면에서 마음대로 바꾸지 않습니다.
  2. 허용된 연락처·주소·비상연락처·계좌의 편집 아이콘/입력 버튼을 누릅니다. 전화는 전화번호, 주소는 검색 결과와 상세주소, 비상연락처는 이름·관계·전화, 계좌는 은행·계좌번호·예금주를 넣습니다. 각 편집 모달 저장은 해당 항목만 Employee에 반영합니다. 빈 값을 허용하는 항목의 삭제 컨트롤로 비울 수 있습니다. 전화/연락처/계좌 검증 실패는 폼을 유지합니다.
  3. 항목 편집 취소/X/Esc는 변경이 있으면 계속 편집 또는 닫기 확인을 엽니다. 닫으면 서버를 재조회해 미저장 값을 되돌립니다. 조직 설정이 편집을 금지한 항목은 편집 버튼이 없거나 동작을 제한합니다.
  4. 사진을 눌러 JPEG/PNG 5MiB 이하를 선택하면 업로드해 반영합니다. 사진 삭제는 확인 후 제거하고 이니셜로 돌아갑니다. 조직의 로고/직인 500KiB 제한과 다릅니다.
  5. 서명/도장에서 PNG/JPG/WebP 5MiB 이하를 등록하면 서버의 본인 서명 이미지로 저장합니다. 교체/삭제도 제공합니다. 이 이미지는 증명서 승인 문서의 서명 원천이며, 파일 선택만으로 별도 전자계약을 체결하는 것은 아닙니다.
  6. 근무시간 선택이 노출되면 현재/추천 근무형태를 확인하고 선택·저장합니다. 추천만 보았다고 근무시간이 변경되지는 않습니다. 휴대폰 OTP 토글과 비밀번호 변경(현재 비밀번호 확인 후 새 비밀번호·확인)은 인증의 검증을 따릅니다.

실제 공유 컴포넌트는 MyInfoForm입니다. 사진·서명 업로드 실패는 각 오류를 표시하고, 일부 최초/재조회 실패는 이전 값 또는 빈 값을 유지합니다. 완료 판단에는 다시 열어 확인하는 절차가 필요합니다.

글로벌 파라미터와 모듈 활성화 경계 ​

  1. 현재 LNB에 없는 유지보수 경로 /admin/#parameters를 열면 글로벌 파라미터가 namespace별로 나옵니다. namespace / key / 라벨 검색으로 좁힙니다. 조회 setting:read, 변경 setting:manage입니다.
  2. + 새 파라미터에서 namespace(1~64자, 소문자·숫자·밑줄과 점 구분), key(1~64자 소문자·숫자·밑줄), type(number 기본/string/boolean), 값, 라벨(1~200자)을 입력합니다. 설명·사유는 최대 2000자, 단위는 최대 16자 선택입니다. 예: 테스트용 namespace example, key display_limit, number 3, 라벨 예시 표시 수.
  3. 저장하면 현재 조직의 (namespace,key)와 형식에 맞게 값이 저장되고 이력이 남습니다. number는 유한 숫자로 변환하고 boolean은 true/false 또는 1/0을 받습니다. 빈 number는 자바스크립트 변환상 0이 될 수 있어 입력을 확인합니다.
  4. 행 편집에서는 식별 namespace/key/type을 바꿀 수 없고 값·라벨·설명·단위·사유를 수정합니다. 이력은 최신 100건을 조회합니다. 삭제 → 확인은 현재 값 삭제와 이력 보존이며 취소하면 유지합니다. 오류 시 저장 폼을 유지하거나 조회 목록을 빈 배열로 처리합니다.
  5. 일반 조직 설정 전체가 이 저장소에 들어가는 것은 아닙니다. 직원 인센티브 자기등록처럼 명시적으로 연결된 설정만 이 파라미터를 사용합니다. 코드 모듈/시트가 실제로 읽는 키만 계산에 영향을 줍니다. 임의 키 추가만으로 기능이 활성화되지 않습니다.

관리자 앱에는 앱별 모듈 활성화/비활성화 관리 UI가 없습니다. 준비중 메뉴는 LNB 설정이며 권한 토큰·조직 설정·모듈 등록과 같은 개념이 아닙니다. 모듈 관리는 계산기 I/O 레지스트리와 급여 계산 도구이며 활성화 경로로 안내하지 않습니다. 플랫폼 운영자의 AI 사용·로그인 방법 설정은 시스템 관리자 콘솔의 별도 경로입니다.

데이터 연결·기존 기록 정합화 ​

근거는 관리자 UI/상태, 가입·허브, signup 스키마, 워크스페이스 생성 서비스, team API, role API, organization API입니다. SDK의 AccountService, SignupService, InviteService, TeamService, RoleService, OrganizationService, OrganizationParameterService가 각 화면 요청을 전달합니다.

HBAD 명세의 Shell·팀·역할·조직 설정·공지 연결, 앱 소개, HTML 가이드를 대조했습니다. 앱 소개의 시스템 관리자 전용/과거 병원설정 탭/팀 표·트리 전환/권한 매트릭스 표현을 현재 구조로 정정합니다. HBAD270의 일반 설정 정본 organization_parameters 설명은 실제 Organization과 settings JSONB로 구분했습니다. 기존 가이드의 “알림은 조직 전체 적용”도 사용자별 설정으로 정정합니다. 동기화 명세와 생성 Markdown은 직접 수정하지 않습니다.

검증 공백은 계정 가입·메일 인증 24시간/재발송, 신규·기존 계정 초대/중복 소속, 생성 완료 전 이탈·복구, 소유자/grant 입장, 동일 팀명·50단계·1000팀, 다중팀 부분 실패, 팀 방 참여, 역할 저장 중간 실패·다른 조직 거절, 조직 저장 부분 성공, 로고/직인 삭제 후 재진입, 사용자별 알림, 자기등록 on/off의 직원 앱 반영, 파라미터 버전 조회입니다. 이 경로는 코드로 확인했고 새 실행·영상·다른 기기 확인은 없습니다. 아래 영상으로 팀 저장 전후를 추가 확인했습니다. 가입/초대/허브·권한 거절·설정 저장 후·내 정보 항목별 편집의 번호 표시 화면은 아직 필요합니다.

관리자 패널 사용 영상 ​

38초 · 소리 없음 · 화면 안의 번호와 강조 위치를 따라 보세요. 전체화면으로 확대할 수 있어요.

처음에는 재생 버튼을, 다시 볼 때는 아래 동작 번호를 누르세요.

  1. 팀 추가 열기

    관리자의 「팀 관리」에서 「팀 추가」를 누릅니다. 팀 생성 권한이 필요합니다. 자세히 따라 하기

  2. 팀 정보 입력

    상위 팀을 확인하고 팀명 ‘온보딩 운영팀’과 설명을 입력합니다. 팀명은 필수이며 예제에서는 활성 상태를 유지합니다. 자세히 따라 하기

  3. 팀 저장

    「저장」을 누릅니다. 입력 창이 닫히고 새 팀이 왼쪽 목록에 나타나는지 확인합니다. 자세히 따라 하기

  4. 생성한 팀 확인

    생성한 팀을 선택합니다. 팀원 0명으로 시작하며, 실제 직원 배정은 「팀 멤버 추가」에서 이어서 진행합니다. 자세히 따라 하기

교육용 예제 조직에서 촬영했어요. 이름·금액·날짜는 교육용 예시이며, 사용 중인 조직의 자료를 확인하세요.

관리자 패널 소개와 사용자 교육에서 실제 누르는 위치와 결과를 따라갈 수 있도록 번호 자막·강조 표시를 붙여 촬영했습니다. 별도 DB의 로컬 예제 조직·관리자 테스트 계정을 사용했습니다. 화면 크기는 1440×900입니다. 직원 배정·초대 메일·다른 역할의 접근·조직 전환은 이 영상에 포함하지 않았습니다.

앱 소개 · 영상 목록과 교육 범위 · 촬영·검증 기록

기능별 가이드 영상 검증 ​

로컬 예제 조직의 관리자 계정으로 사이드바, 헤더, 인원 요약, 역할 등록, 병동 등록을 각각 촬영했습니다. 각 절의 동작 번호에 진입 버튼, 입력·선택, 저장 결과를 연결했습니다.

역할 「영상 근태 조회 담당」에 「근태 조회 (본인)」을 선택해 저장하고 목록에서 확인했습니다. 병동 「영상 실습 병동」은 일반 병동·활성으로 등록했습니다. 역할 생성은 직원에게 역할을 배정하거나 권한별 접근을 검증한 결과가 아니며, 병동 생성은 간호 인력·환자 수의 입력을 대신하지 않습니다. 사이드바 전환과 헤더 새로고침·알림·계정 메뉴는 조회 조작을 확인했습니다. API·저장 관계는 이 문서의 역할·병동 절과 연결됩니다.

조직 설정 저장 영상 ​

직원 홈 구성 변경 이력의 남은 확인 ​

직원 홈 구성 설정은 소스 커밋 1bdab45c325fc8d1a2cd6a3e884d37365e74d80b과 관리자 조직 설정·직원 홈 사용법을 대조해 이력 원본 docs/product-changes/organization-access/employee-home-layout.json에 등록했습니다. 고객 적용일·배포 근거는 확인되지 않아 공개 이력으로 표시하지 않습니다. 이번 확인은 코드와 문서 대조이며 기능의 새 실행 검증이 아닙니다.

조직 설정의 기존 영상은 홈페이지 값 저장과 인센티브 자기 등록 설정을, 직원 홈 영상은 출퇴근 조작을 다룹니다. 홈에 보일 생일·기념일·공지의 표시 여부·순서·개수를 설정하고 직원 홈에 반영된 결과를 확인하는 장면은 별도 촬영이 필요합니다. 영상 검토 상태를 대기로 남기고, 실제 적용과 해당 촬영을 확인한 뒤 공개 절차에 따라 갱신합니다.

기본정보와 인센티브 영상의 확인 범위 ​

조직 설정 가이드에 기본정보 수정과 직원 인센티브 자기 등록 허용을 각각 별도 영상으로 연결했습니다. 기본정보는 설정 → 수정 → 홈페이지 입력 → 저장 → 내 정보/조직 설정 탭 재진입 → 수정에서 저장값 확인 → 원래 값 복원까지 실행했습니다. 예제 주소 https://example.hereby.test를 사용했으며 실제 웹사이트 개설·외부 요청은 하지 않았습니다.

인센티브 카드는 「직원앱 인센티브 자기 등록」을 켠 뒤 탭을 다시 열어 켜짐을 확인했습니다. 이 설정은 기본정보 카드의 저장 버튼과 별개로 즉시 저장되며 organizationParameter의 incentive.self_registration을 사용합니다. 직원 직접 등록의 진입점과 서버 허용 조건에 연결됩니다. 로고·직인 업로드, 전자서명 계정 연결, 실제 메일·문자 발신 확인은 해당 영상 범위 밖입니다.

하위 팀을 포함한 일괄 변경 확인 ​

관리자 팀 가이드의 일괄 변경 절차를 따릅니다. PR #755의 resolveMemberRefs는 행이 속한 실제 팀을 찾아 역할·제거 요청을 보냅니다. PR #786은 상태 변경 후 관련 팀 명단도 다시 읽어 상태 배지와 인원 수를 갱신합니다. 일부 실패를 전체 성공으로 기록하지 않으며 다른 팀의 같은 직원 행과 소속이 유지되는지도 대조해야 합니다. 이 예외 조작의 새 영상은 아직 없습니다.

조직 표시 용어와 계약 값 기준 ​

조직 설정 사용법에 역할 표시 이름과 근로계약 기준 변경을 추가했습니다. 역할 명칭 변경은 표시 용어를 바꾸며 기존 권한을 변경하지 않습니다. 계약 기준은 급여 시트의 기간별 계약 선택에 영향을 줍니다. 저장 후 설정값 재조회와 영향을 받는 화면을 확인합니다. PR #807·#873의 조직 설정 화면과 저장 경로를 대조했습니다.

직원 소속 선택은 활성 팀·역할 검색을 사용합니다(PR #809). 목록에 없으면 비활성 여부와 검색 조건을 확인하고, 선택 후 저장·직원 목록 재조회로 반영 여부를 확인합니다. 근무 설정 진입은 직원 관리와 팀 관리에 추가됐으며(PR #806), 같은 근무 기준 화면을 엽니다.

직원 앱 도입·권한 미리보기·병동 연결 ​

직원 앱 도입은 안내 발송·이용 현황·직원 첫 사용 안내를 연결합니다. 완료 이후에는 설정에서 다시 엽니다. 회사 코드는 조직 연결 정보와 동기화되며 직접 지정한 값이 우선합니다.

조직 시스템 관리자는 직원 권한 미리보기에서 해당 직원이 접근할 수 있는 화면을 확인하고 상단 종료로 관리자 화면에 복귀합니다. 미리보기 중 비밀번호 변경 요구나 실제 직원의 앱 설치·튜토리얼 기록을 남기는 경로를 일반 로그인과 구분합니다. 관리자 메뉴가 보이는 것만으로 선택 직원의 권한을 판단하지 않습니다.

팀 관리에서 연결된 병동의 명단·근무표 미리보기를 열고 선택 팀과 병동을 확인합니다. 팀을 바꾸면 이전 팝업이 닫힙니다. 병동 배정과 팀 소속은 연결 조건을 따르며, 상세 편집·저장 후 팀 명단과 병동 명단을 각각 다시 확인합니다. PR #833·#892·#910·#932·#936·#941·#946을 대조했으며 권한별 쓰기·배정 충돌은 추가 실행 확인이 필요합니다.

팀·직원별 선택 가능 근무 유형 ​

항목안내
대상팀 또는 직원 정보를 수정할 수 있는 담당자
팀 설정팀 관리 → 대상 팀 → 팀 편집 → 허용 근무 유형에서 복수 선택 후 수정
직원 설정직원 편집의 허용 근무 유형에서 해당 직원에게 추가 허용 후 저장
적용 위치직원 앱 더보기 → 근무 시간 설정의 선택지. 이미 배정된 주·추가 근무 그룹의 유형도 함께 유지

체크만 바꾸면 편집 중 상태이며 저장 후 다시 열어 유지 여부를 확인합니다. 취소는 저장하지 않은 변경을 반영하지 않습니다. 체크를 해제해도 다른 소속 그룹·팀·개인 설정으로 허용된 유형은 계속 선택할 수 있습니다. 팀 대표 근무는 신규 등록 기본값이고 이 목록은 추가 선택 범위이므로 두 설정을 구분합니다. 선택 가능 유형을 저장하는 것은 기존 팀원의 근무·급여 근로형태를 일괄 변경하는 작업이 아닙니다.

동일 조직의 유형인지 저장 시 확인하며 삭제된 유형·권한·저장 오류가 있으면 안내를 읽고 목록을 새로 확인합니다. API 정본은 utils/allowed-shifts.ts, routers/shift.router.ts이며 직원 근무시간 선택과 연결합니다. 근거: #1144, #1154.

기능별 필수 권한을 추가하고 저장하기 ​

항목안내
사용자직책과 권한을 관리하는 담당자
시작 위치관리자 > 직책 관리 > 직책 추가 또는 수정 > 기능별 필수 권한
조건직책 관리 권한이 있어야 하며, 직책 저장과 직원에게 배정하는 절차는 별개입니다.
  1. 직책 이름을 입력하거나 수정할 직책을 엽니다. 기능 버튼의 충족/일부/없음과 도움말을 확인합니다.
  2. 메신저 등 필요한 기능을 누르면 부족한 권한만 최소 범위로 추가합니다. 이미 더 넓게 지정한 범위는 유지합니다. 버튼을 누르는 것만으로 저장되지는 않습니다.
  3. 권한 표를 확인한 뒤 저장합니다. 저장 전에 취소하면 이번 편집을 버립니다. 다시 열어 선택이 유지되는지 확인합니다.
  4. 직원에게 실제 적용하려면 해당 직원의 팀 소속에 직책을 배정합니다. 팀 관리자 기능 묶음 선택은 특정 팀의 팀장 지정과 같지 않습니다. 실제 담당 팀과 접근 범위도 확인합니다.

PR #1216의 권한 묶음과 저장 경로를 대조하고, 예제 직책에 메신저 권한을 추가·저장·재열람하는 영상을 촬영했습니다. 전체 권한 조합과 조직 간 접근 거절을 모두 실행한 것은 아닙니다.

내부 결재 앱의 메뉴와 조회 범위 ​

내부 결재에 직접 로그인하면 왼쪽 메뉴에서 권한이 있는 업무를 선택합니다. 좁은 화면은 메뉴 버튼으로 목록을 열고, 항목 선택 또는 바깥 클릭으로 닫습니다. 관리자 안에 포함된 화면에서는 관리자 메뉴를 사용합니다. 팀 관리자 가이드에 앱별 진입 위치를 표로 연결했습니다.

PR #1213의 메뉴별 권한 검사와 PR #1197의 하위 팀 포함 조회를 구분합니다. 하위 팀 포함 선택은 조회 범위 설정이며 팀 구성원·직책을 변경하지 않습니다. 하위 팀 포함을 켠 상태에서 팀을 바꿔도 선택은 유지되며, 권한 밖 직원까지 조회할 수 있게 되지는 않습니다.

조직의 2단계 인증과 키 전용 로그인 복구 ​

관리자는 조직 설정의 편집에서 보안 · 셀프서비스의 2단계 인증 필수 항목을 바꾸고 저장합니다. 저장 전 취소하면 유지됩니다. 미등록 직원은 등록 안내를 받고 필수 정책이 적용된 동안 해제할 수 없습니다. 패스키·기기 키 로그인은 별도 인증 앱 번호를 다시 요구하지 않습니다.

로그인 키를 잃은 직원의 키 전용 제한 해제는 직원 수정의 로그인 설정에서 선택 후 저장합니다. 해제 대기 상태를 되돌리거나 직원 편집을 취소하면 변경하지 않습니다. 본인 확인과 조직의 계정 복구 절차를 거친 뒤 처리하며 이 동작이 비밀번호를 자동 발급하는 것은 아닙니다. PR #1227·#1231의 입력·저장 경로를 코드로 대조했고 실제 정책 강제·계정 복구 실행은 미검증입니다.