페르소나 · 역할/스코프 매트릭스
이 페이지는 LogiNippon의 정규 페르소나(PRS-*)와 코드 기준 역할/스코프 매트릭스를 소유한다. 역할명·권한·화면 분기는 라이브 console의 src/lib/auth.ts(역할 디코드·게이트 헬퍼)와 src/components/ConsoleApp.svelte의 navForRole()를 글자 그대로 인용했다. 제품은 원래 3-페르소나(荷主/運送会社/ドライバー)에서 7역할 role-gated 컨트롤 타워로 진화했으며, 그 진화의 두 축인 PLATFORM_ADMIN(온보딩/운영)과 CONSIGNEE_*(受取人 중심 IA)는 as-built 사실이다(아래 callout). 모든 KPI/SLO 수치는 진입 단계 초기 설계 목표이며 달성치가 아니다.
auth.ts L4 주석: "role 디코드는 UI 게이팅용일 뿐, 인가는 서버가 강제한다"). 권한의 규범 정의는 TRD FR-AUTH-004(역할/스코프 게이트)·SR-AUTHZ-001(인가)이 소유한다.
1. 페르소나 카드 (PRS-* 7종)
각 카드는 콘솔 역할·맥락·목표·페인을 담는다. PRS-SHIPPER가 지불 고객이고, PRS-DRIVER가 1차 위치 센서다. PRS-PLATFORM과 PRS-CONSIGNEE는 as-built 진화의 산물이다.
荷主 컨트롤타워 운영자 (大企業 物流팀 / 미래 CLO)
- 맥락
- 화물·규제 부담의 주인. 元請→下請→孫請 다단계 하청 구간은 데이터가 깜깜하다. 改正物流法상 実運送体制管理簿(2025.4 의무)와 荷待ち ≤2h 목표(2026.4)의 책임 주체 — 일정 규모 이상은 CLO(물流総括管理者) 설치 의무. 확인
- 목표
- 다단계를 관통한 실시간 화물 위치·체류·도착 예정을 한 화면(
FleetMap+ShipmentsTable)에서 보고, 荷待ち를 측정·단축해 납품처 협상의 ROI 근거를 쥐며, 규제 산출물을 버튼 한 번으로 출력한다. - 페인
- "트래킹"이 아니라 荷待ち 단축·배차 효율·규제 대응에 지불한다(H1 부분검증 추정). 수기 작성·행정지도/벌금 리스크. 지불 고객.
플랫폼 운영/온보딩 관리자 (최강 스코프)
- 맥락
- cold-start(PR-01·#1 리스크)를 직접 수행하는 LogiNippon 내부 역할. 캐리어가 FAX·전화·수기 관행의 중소이고, 실 GPS가 0인 상태에서 데모/실증을 만들어야 한다.
- 목표
AdminPanel로 캐리어·컨사이니·거점(지오펜스) 셋업, 일회용DRIVER초대코드(max_uses 1·ttl 30d) 발급,ShipmentFactory4스텝으로 드라이버 앱·실 GPS 전에 픽업→도착→대시보드 전 과정을 end-to-end 실증.- 페인
- 제휴 미서명 시 Phase 1 전체가 보류(GATE-P0 하드 게이트). 거점 폴리곤 100~200 선구축 등 수작업 온보딩 부담.
受取人(도착 거점) 운영자
- 맥락
- 자기 도크로 들어오는 화물을 받는 거점 운영자. 원 리서치에 없던 방향으로, 컨사이니 중심 IA는 as-built 진화다(아래 callout). bottom-up land-and-expand의 축.
- 목표
- 자기 도크로 오는 전 캐리어 inbound를 라이브 큐(
InboundView)로 보고, 라이브 ETA로 도크 인력을 계획하며,Dashboard로 캐리어를 객관 성과(건수·평균 dwell·정시%·ETA MAE)로 비교·랭킹한다. - 페인
- 도착 시각을 모른 채 도크 인력을 대기시킨다. 어느 캐리어를 계속 쓸지 객관 근거가 없다.
運送会社 운영/配車 담당
- 맥락
- 일본 6만+ 사업자 대다수가 중소·영세. FAX·전화·수기 관행이 두텁고, 온보딩은 "기술보다 사람을 설득"하는 비용이 크다. 확인
- 목표
- 자사 라이브 차량을 보고(맵 never-empty), 실제 배달했음을 증명해 화주 거래를 유지한다. 캐리어 셀프서비스 콘솔은 Phase 2(현재는
map+ships최소 노출). - 페인
- 가시성이 마진을 노출(다단계 하청에서 조직 저항·R4/R5 추정). 자사 차량·실적을 증명할 표준 식별자가 없다.
ドライバー (実運送자)
- 맥락
- 대형 트럭 기사 평균 연령 50세 초과. 확인 고령 현장 드라이버도 쓸 수 있는 대형 버튼·최소 탭 플로우가 필수. 스마트폰 GPS가 1차 데이터원.
- 목표
- 案件을 받아 큰 버튼 한 번으로 수락, 잡 기간 동안만 위치 자동 공유, 지오펜스 ENTER/EXIT 서버 자동 도출, 完了報告+증빙사진 — 추가 조작 없이.
- 페인
- 수기 보고·전화 응대. 터널/오프라인 단절. 배터리·프라이버시 우려. 1차 위치 센서이나 Flutter 앱은 scaffold STUB(최대 갭). STUB
3PL / 물류 중개업자
- 맥락
- 다 화주·다 캐리어를 오케스트레이션하는 위임 계층. 코어 역할 모델에는 아직 별도 역할이 없고 Phase 2에서 세분 공유 스코프로 분화한다.
- 목표
- 위임 범위 내 다 화주/캐리어 오케스트레이션, 정산 근거 산출, 멀티테넌트 분리. 퍼블릭 API·웹훅으로 자사 TMS에 overlay(ERP 대체 아님).
- 페인
- API·웹훅 전달·멀티테넌시는 현재 STUB. STUB
法務 / 컴플라이언스 (거버넌스 페르소나)
- 맥락
- 콘솔 로그인 역할이 아니다. 공식 규제 포맷·APPI(個人情報保護法) 동의 설계의 서명권자로서 출시 게이트를 관장한다.
- 목표
- "官庁 제출가능" 광고 전 공식 컬럼셋·인코딩(Shift_JIS vs UTF-8 BOM) 확정, ingest
consentGate배선 확인, 受取人 위치 마스킹·토큰 거버넌스 승인. - 페인
consentGateingest 미배선(APPI 노출·R9), 공식 포맷 미확정(R10), 토큰 localStorage(R12). PARTIAL
2. 정규 역할/스코프 매트릭스 (코드 기준)
아래 역할·헬퍼·화면 분기는 console/src/lib/auth.ts와 ConsoleApp.svelte 기준이다(임의 변형 없음). isAdmin 역할은 다크 사이드바 콘솔을, 비-admin(SHIPPER_VIEWER 단독 등 self-track)은 CustomerTrack 뷰를 본다.
| 역할(코드) | 페르소나 | auth.ts 게이트 | 핵심 권한 / 책임 | 주 화면(navForRole) |
|---|---|---|---|---|
PLATFORM_ADMIN |
PRS-PLATFORM | isPlatformAdmin · isAdmin |
최강 스코프. 캐리어·컨사이니 CRUD, 거점/지오펜스, 일회용 코드 발급, ShipmentFactory 실증. | map · admin · carriers · factory · ships |
CONSIGNEE_ADMIN |
PRS-CONSIGNEE | isConsignee · isAdmin |
자기 facility 인입 운송 관제·대시보드 운영(관리). | map · inbound · dashboard |
CONSIGNEE_VIEWER |
PRS-CONSIGNEE | isConsignee · isAdmin |
인입 큐·대시보드 읽기(컨사이니 콘솔, 읽기 의도). | map · inbound · dashboard |
SHIPPER_ADMIN |
PRS-SHIPPER | isShipperAdmin · isAdmin |
화주 컨트롤타워 관리. 화물 목록·규제(NIMACHI) 리포트·발급(stub). | map · ships · reports · issue |
SHIPPER_VIEWER |
PRS-SHIPPER | isShipperAdmin * |
화주 읽기. * 코드 주의: isShipperAdmin은 SHIPPER_VIEWER도 true로 본다(아래 callout). 단, isAdmin에는 SHIPPER_VIEWER가 빠져 self-track으로 분기. |
CustomerTrack(self-track) |
CARRIER_OPS |
PRS-CARRIER | isAdmin(별도 헬퍼 없음) |
최소 콘솔(지도+운송 목록). reports/issue는 화주 책임이라 미노출. 셀프서비스 Phase 2. | map · ships |
SUPPORT |
PRS-CARRIER 계열 | isAdmin(별도 헬퍼 없음) |
최소 콘솔(지도+운송 목록), CARRIER_OPS와 동일 분기(그 외 admin role). | map · ships |
DRIVER |
PRS-DRIVER | (콘솔 역할 아님 — Flutter 앱) | 案件 수락·잡 기간 위치 자동 공유·完了報告. 1차 위치 센서. 앱 STUB. STUB | Flutter 드라이버 앱(콘솔 외) |
isShipperAdmin(role)는 이름과 달리 SHIPPER_ADMIN 또는 SHIPPER_VIEWER를 모두 true로 반환한다(auth.ts L73–74). 반면 isAdmin은 SHIPPER_VIEWER를 포함하지 않아, viewer는 콘솔(다크 사이드바)이 아닌 CustomerTrack self-track 뷰로 분기한다. 이 명세가 canonical 역할/스코프 매트릭스를 고정하며, 규범 인가는 TRD FR-AUTH-004가 소유한다.
3. 역할 → 화면 IA (navForRole 인용)
ConsoleApp.svelte의 navForRole()는 공통 탭(map)에 역할별 탭을 더한다. 실제 분기 순서를 그대로 인용한다(session.isPlatform → isConsignee → isShipper → 그 외 admin). 화면 본문·UX 원칙은 experience-ux.html이 소유한다.
- PLATFORM_ADMIN
map(FleetMap) ·admin(AdminPanel) ·carriers(CarrierManager) ·factory(ShipmentFactory) ·ships(ShipmentsTable) - CONSIGNEE_ADMIN CONSIGNEE_VIEWER
map·inbound(InboundView다캐리어 라이브 큐) ·dashboard(Dashboard캐리어 비교) - SHIPPER_ADMIN
map·ships·reports(規制 NIMACHI) ·issue(발급, stub) - CARRIER_OPS SUPPORT "그 외 admin role" 분기 →
map·ships최소 권한(reports/issue는 화주 책임이라 미노출, 셀프서비스 Phase 2) - SHIPPER_VIEWER 등 비-admin
session.isAdmin이 false → 사이드바 콘솔 대신CustomerTrackself-track 뷰
4. 受取人 최종 수령인 — 경량 서브페르소나
受取人 최종 수령인은 PRS-CONSIGNEE의 경량 서브-페르소나다(별도 PRS-ID 없음). 거점 운영자가 아니라 화물을 받는 개인/현장 담당으로, 다음만 본다.
- 로그인 없는 추적 링크. 공유 URL로 진입, 인증 없음.
- ETA만 노출. 도착 예정 시각·완료 알림(SMS/메일). ETA는 "추정치" 정직 라벨(eta_is_estimate)과 staleness/tracking_rate 정직 노출.
- 차량 위치 비노출. 個人情報保護法(APPI)상 드라이버 위치는 개인정보일 수 있어 이 surface에서 생략(마스킹).
관련 잡은 JTBD-13(차량 위치 없이 도착 시각만), 여정은 JRN-RECIPIENT이다. 마스킹·트래킹 정직 노출 규범은 TRD FR-DLV-TRACK-001·SR-AUTHZ-001이 소유한다.
5. PRS-LEGAL 거버넌스 (UI 역할 아님)
PRS-LEGAL은 콘솔 로그인 역할이 아니라 출시 게이트를 관장하는 거버넌스 페르소나다. 핵심은 RR-LEGAL-001 게이트 — 공식 규제 포맷·APPI 동의 설계가 서명되기 전까지 다음을 막는다.
- "官庁 제출가능" 광고 금지. 공식 컬럼셋·인코딩(Shift_JIS vs UTF-8 BOM 미확정·R10) 서명 전. 현재 NIMACHI CSV는 UTF-8 BOM으로 end-to-end DONE이나, 공식 포맷 확정은 미서명 추정.
- APPI ingest 동의 게이트.
consentGate가 ingest에서 미호출(R9) — MVP exit(GATE-P1)를 막는 5개 STUB 중 하나. STUB - 토큰 거버넌스. 토큰 localStorage 저장(
auth.tsL2 주석: 후속에 httpOnly 쿠키+짧은 수명/회전으로 강화·R12).
이 게이트가 거는 잡·여정·에픽은 JTBD-13 및 EPIC-CONSENT-PRIVACY(epics-stories.html)이며, 규범 규제 명세는 TRD RR-LEGAL-001·인가는 FR-AUTH-004가 소유한다. 제품 리스크는 risks-open-questions.html(PR-06·PR-07·PR-10).
근거·상호참조
- 코드 기준(역할·게이트 헬퍼):
console/src/lib/auth.ts—isAdmin/isPlatformAdmin/isConsignee/isShipperAdmin,decodeClaims(role/tenant_id/carrier_id). github.com/LogiNippon/console - 역할→화면 IA:
console/src/components/ConsoleApp.svelte—navForRole()분기(session.isPlatform→isConsignee→isShipper→그 외 admin),session.isAdmin콘솔 vsCustomerTrack. - 제품 맥락·타겟 사용자:
techspec/00-overview/vision.md(荷主/運送会社/ドライバー·受取人·3PL, 페인 우선, 위치 프라이버시). - 마스터 스펙 §4(정규 페르소나·역할/스코프 매트릭스)·§14(as-built 사실)·§0(제품 한 문단).
- PRD 교차참조: jobs-to-be-done.html(JTBD-13) · journeys.html(JRN-RECIPIENT) · epics-stories.html(EPIC-CONSENT-PRIVACY) · experience-ux.html(화면 UX) · risks-open-questions.html(PR-06/07/10).
- TRD 교차참조: FR-AUTH-004(역할/스코프 게이트) · SR-AUTHZ-001(인가) · FR-DLV-TRACK-001(트래킹/마스킹) · RR-LEGAL-001(규제 포맷 게이트).