flowchart TD Start([법인 관리자가 사용자 초대 시작]) --> CheckUser{가입된 사용자인가?} CheckUser -->|아니오| Error1[에러: 가입된 사용자만 초대 가능] CheckUser -->|예| CheckRole{이미 법인 사용자인가?} CheckRole -->|예| Error2[에러: 이미 기관에 등록된 사용자] CheckRole -->|아니오 ROLE_USER| CreateInvitation[8글자 토큰 생성
UserInvitation 저장
상태: PENDING] CreateInvitation --> SendEmail[이메일 발송
UserInvitationEvent] SendEmail --> UserReceive{사용자가 토큰 받음} UserReceive -->|폐쇄망| ManualInput[8글자 토큰 직접 입력
예: K7MNPQ2R] UserReceive -->|이메일 링크| EmailLink[Base64 인코딩된
링크 클릭] ManualInput --> DecodeToken[토큰 디코딩
decodeInvitationToken] EmailLink --> DecodeToken DecodeToken --> ValidateToken{토큰 유효성 검증} ValidateToken -->|무효| Error3[에러: 유효하지 않은 초대] ValidateToken -->|유효 & PENDING| ShowDecision[약관 동의 페이지
/signup/decision] ShowDecision --> UserDecision{사용자 선택} UserDecision -->|수락| ProcessAccept[processInvitation: accept] UserDecision -->|거절| ProcessReject[processInvitation: reject] ProcessAccept --> UpdateUser[1. PortalOrg 변경
2. ROLE_CORP_USER로 전환
3. 약관 재동의 PRIVACY_COLLECT_ORG] UpdateUser --> CompleteInvitation[Invitation 상태:
COMPLETED + completeDate] CompleteInvitation --> Success([초대 수락 완료
로그아웃 후 재로그인]) ProcessReject --> RejectInvitation[Invitation 상태:
REJECTED + completeDate] RejectInvitation --> End([초대 거절 완료]) style Start fill:#e1f5e1 style Success fill:#c8e6c9 style End fill:#fff9c4 style Error1 fill:#ffcdd2 style Error2 fill:#ffcdd2 style Error3 fill:#ffcdd2 style CreateInvitation fill:#bbdefb style UpdateUser fill:#c5cae9