# Issue #663: 한맥가족 사용자 테넌트 동기화 및 직무/직급 표시 정리

## 개요

adminfront 사용자 관리 화면과 orgfront 조직도/조직 선택기 사이의 한맥가족 사용자 표시 기준을 정리했다.

기존에는 사용자 상세 화면에서 `metadata.hanmacFamily` 값에 의존해 한맥가족 탭을 결정했다. 이 방식은 기존 사용자가 이미 한맥가족 테넌트 트리에 소속되어 있어도 metadata 플래그가 없으면 외부 기업 회원으로 분류될 수 있었다.

## 정책 기준

- `docs/organization-chart-policy.md`에 따라 한맥가족 조직은 `COMPANY_GROUP` 아래의 `COMPANY`/`USER_GROUP` 테넌트 계층으로 판단한다.
- 한맥가족 사용자의 직무/직급은 단일 사용자 필드보다 소속별 `additionalAppointments`를 우선한다.
- orgfront 표시명은 직무가 있으면 `이름(직무) 직급` 형태를 사용한다.

## 구현 요약

- adminfront
  - 한맥가족 root tenant 및 subtree 판정 유틸을 추가했다.
  - 기존 사용자의 `tenant`, `joinedTenants`, `companyCode`, `tenantSlug`를 기준으로 한맥가족 여부를 계산한다.
  - 사용자 상세 초기화 시 한맥가족 subtree 소속이면 `metadata.hanmacFamily`가 없어도 한맥가족 탭을 표시한다.
  - 한맥가족 저장 시 기존 단일 `position`/`jobTitle` payload를 비우고 `additionalAppointments`를 사용한다.
- orgfront
  - 사용자 표시명 공통 유틸을 추가했다.
  - 조직도와 조직 선택기 모두 동일한 표시명 로직을 사용한다.
  - `metadata.additionalAppointments`에 현재 테넌트와 매칭되는 직무/직급이 있으면 이를 우선 사용한다.

## 검증

- RED 확인
  - `adminfront`: 한맥가족 subtree 사용자 판정 유틸 부재로 unit test 실패 확인.
  - `orgfront`: 조직도/조직 선택기에서 `이름(직무) 직급` 표시가 없어 Playwright test 실패 확인.
- GREEN 확인
  - `adminfront`: `npm run test:unit -- src/features/users/orgChartPicker.test.ts`
  - `adminfront`: `npm run test:unit`
  - `adminfront`: `npm run build`
  - `orgfront`: `npm run lint`
  - `orgfront`: `npm run build`
  - `orgfront`: `npx playwright test tests/orgchart-picker.spec.ts tests/orgchart-vector-render.spec.ts --project=chromium`

## 남은 정책/운영 메모

- 이슈는 `한맥가족사 조직도 반영` 마일스톤에 연결했다.
- 해당 마일스톤은 Due Date가 비어 있다. 목표 Due Date를 정해 마일스톤에 반영하는 것이 좋다.
