HBSA211_Provision New Organization (모달)
(Hereby) 시스템 관리 > [[HBSA200]] > [[HBSA210]] > Provision Modal
| 앱 | System Admin (포트 4100) |
| 부모 화면 | [[HBSA210]] |
| 대상 사용자 | 플랫폼 운영자(OPERATOR) |
| 프로토타입 | TBU |
| 관련 정책 | [[POL_권한(RBAC)]] |
| Status | draft (코드 기반 — 라이브 실사 불가: dev 라우트 AccessDenied 격리, 2026-08-25 확인) |
| Owner | 카나 |
개요
신규 병원(조직)을 한 번에 프로비저닝하는 모달. 조직 정보 + 근무/급여 설정 + 초기 관리자 계정을 입력하면 조직·권한·역할·관리자를 원샷 생성한다. redesign에서 raw SQL 사본을 버리고 회원가입 경로의 provisionWorkspace 서비스를 재사용 — 법정공제 요율 시드·알림 기본값·SUPER_ADMIN 배정까지 가입 경로와 동일.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-08-25 | 카나 | 콸 | 최초 작성 (redesign PR #583 코드 census 기반, 라이브 미실사) |
| 2026-10-02 | 카나 | PM | 첫 관리자 PASSWORD 라벨·검사를 기본 비밀번호 규칙으로 통일(min 8 → 공용 규칙), 첫 로그인 비밀번호 변경 강제(c6347029·382eec17, #995) — 커밋 근거, 라이브 실사 이월(TBU) - 카나/PM |
Data I/O
Client → Server
| 액션 | 전달 값 | 콘솔 REST | systemProcedure |
|---|---|---|---|
| 프로비저닝 | { organization{name,code,legalName,type,size,medicalField,timezone,fiscalYearStart,settings{workHours,payroll}}, admin{email,password,firstName,lastName,employeeNumber,phone,createOwnerAccount} } | POST /api/provision/organization (?endpoint=) | provisionWorkspace 재사용 (원문 비번 TLS → API bcrypt) |
| 미리보기 | - | GET /api/provision/preview | systemProvisionPreview |
Server → Client
| 변수 | 소스 | 비고 |
|---|---|---|
provisionResult.organization | 생성 결과 | name/code |
provisionResult.admin | 생성 결과 | email/employeeNumber |
provisionResult.permissions.total | 생성 결과 | 표준 51 |
provisionResult.roles[] | 생성 결과 | 6 roles code |
provisionError | 실패 메시지 | 중복 409 등 |
코드 근거: modals/provision.html, server/routes/provision.ts.
화면 플로우
Provision 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | showProvisionModal. [[HBSA210]] "+ New Organization" 클릭 시 | openProvisionModal() | |
| 01 | 초기 상태 | Output | 폼 뷰(!provisionResult.success). 타이틀 "Provision New Organization" + "close" | - | |
| 10 | Organization 섹션 | Input Box | "NAME *"(placeholder "베스트재활의원") / "CODE *"(placeholder "BESTRH") / "LEGAL NAME"(placeholder "의료법인 베스트재활의원") | provisionForm | |
| 11 | ㄴ 종류 | Dropdown | 의원/병원/종합병원/상급종합병원/요양병원/정신병원/치과병원/한방병원/조산원/기타 | orgType | |
| 12 | ㄴ 병상 수 | Dropdown | 30미만/30~99/100~299/300이상 | orgSize | |
| 13 | ㄴ 진료 분야 | Input Box | placeholder "재활 전문, 노인 요양 중심 등" | orgMedicalField | |
| 14 | ㄴ 로케일 | Input Box | "TIMEZONE"(placeholder "Asia/Seoul") / "FISCAL YEAR START (month)"(1-12) | - | |
| 20 | Work & Payroll Settings 섹션 | Input Box | "WEEKLY LIMIT (h)" / "DAILY STANDARD (h)" / "PAY DAY"(1-31) / "CUTOFF DAY"(1-31) | settings.workHours/payroll | |
| 30 | Admin Account 섹션 | Input Box | "LAST NAME (성) *"(placeholder "김") / "FIRST NAME (이름) *"(placeholder "관리자") / "EMAIL *"(placeholder "admin@hospital.com") / "EMPLOYEE NUMBER *"(placeholder "ADMIN001") / "PASSWORD * — 8자 이상, 대문자·소문자·숫자·특수문자 포함" / "PHONE"(placeholder "010-0000-0000") • 새 병원은 아직 비밀번호 설정이 없어 PASSWORD는 기본 규칙으로 안내·제출 전 검사(위반 시 provisionError 배너, 예: "비밀번호는 8자 이상이어야 해요.") · 첫 관리자는 첫 로그인 때 비밀번호 변경 강제 | admin* | 갱신 (코드 반영: c6347029·382eec17, #995) · minlength=8 제거 · TBU: 라이브 실사 이월 |
| 31 | ㄴ Create owner account | Checkbox | "Create owner account — admin을 owner 회원(Account)으로 생성해 조직에 연결합니다. (회원가입 경로와 동일: owner 보호 가드 + 멀티 워크스페이스. 이메일이 이미 회원이면 실패)" | createOwnerAccount | |
| 40 | This will create 요약 | Info | "1 Organization with settings" / "51 Permissions (standard RBAC set)" / "6 Roles: SUPER_ADMIN, HR_ADMIN, PAYROLL_ADMIN, GENERAL_AFFAIRS_ADMIN, TEAM_LEADER, EMPLOYEE" / "1 Admin account (isSystemAdmin=true, mustChangePassword=true)" | - | 첫 로그인 비번 변경 강제 |
| 50 | 제출 | Button | "PROVISION ORGANIZATION" → doProvision(). 진행 중 "provisioning...". 실패 시 provisionError red 배너 | provisionWorkspace | 중복 code/이메일 409 |
| 50-1 | ㄴ Cancel | Button | "Cancel" → closeProvisionModal() | - | |
| 60 | 성공 화면 | Output | provisionResult.success 시 green 박스: "Organization provisioned successfully" + Organization/Admin/Permissions/Roles 요약 + "Roles created:" 배지 목록 | - | |
| 61 | ㄴ Done / Create Another | Button | "Done" → 닫기+목록 갱신 / "Create Another" → resetProvisionForm() | - | |
| 70 | 에러·실패 | - | 중복 등 4xx 시 provisionError 문구 배너. 실측 문구 TBU(라이브 격리) | - |
권한 / 상태 요약
| 시나리오 | 트리거 | 결과 | 비고 |
|---|---|---|---|
case01 [정상] | 필수 입력 후 제출 | 조직+51권한+6역할+admin 생성, 성공 화면 | audit 기록 |
case02 [중복 code/email] | 기존 값 | 409 provisionError | |
case03 [owner 이메일 기존회원] | createOwnerAccount + 기존 이메일 | 실패 | |
case04 [멀티 엔드포인트] | ?endpoint= 대상 | 지정 엔드포인트에 생성 | 단일 등록 시 자동 |
OQ
- 51 Permissions / 6 Roles는 UI 요약 문구 기준 — 실제 시드 카탈로그 수량은
systemProvisionPreview실측 필요(design 로그엔 "preview 106/6" 언급, 권한 수 불일치 가능) TBU - 성공 후 목록 자동 리프레시 동작 실측 = TBU