에픽 · 유저스토리

02-requirements/epics-stories.html · LogiNippon · PRD · 2026-06-13 · 신뢰도 라벨 확인/추정/설계

이 페이지는 LogiNippon 제품의 에픽 11종과 그 자식 유저스토리를 소유한다(EPIC-*·US-* 네임스페이스). 각 에픽은 진술·페르소나·우선순위·단계·구현상태·TRD 링크를 담은 요구사항 카드(div.req)이고, 각 유저스토리는 As-a/I-want/so-that 진술 + Given/When/Then 수용기준 + 메타(우선순위·단계·구현상태·TRD FR 링크·JTBD 링크)를 담은 .story 카드다. 수용기준은 라이브 console/server의 as-built 사실로 구체화했다 — DONE 에픽은 이미 충족된 동작을, STUB 에픽은 목표 동작을 기술하고 STUB로 표시한다. 기술 상세는 중복하지 않고 TRD 기능 요구사항으로 교차링크한다. 모든 KPI/SLO 목표 수치는 설계(진입 단계 초기 목표, 달성치 아님)다.

에픽 요약 (11종)

정규 키워드: 반드시(MUST)/권장(SHOULD)/선택(MAY). 구현상태 라벨은 as-built 사실 기준 — DONE/PARTIAL/STUB.

EPIC이름페르소나P단계상태스토리핵심 TRD FR/RR
EPIC-CONTROL-TOWER컨트롤 타워·실시간 가시성(FleetMap+화물목록)PRS-SHIPPERP0P1DONEUS-CT-01..04FR-DLV-WS-001·FR-INGEST-001/002/003·FR-GEO-001/002/003·FR-DLV-TRACK-001
EPIC-REGULATORY규제=킬러앱: 荷待ち/NIMACHI·実運送体制管理簿·拘束時間PRS-SHIPPERP0P1P2PARTIALUS-REG-01..04FR-RPT-NIMACHI-001·RR-NIMACHI-001·FR-RPT-JITSUUNSO-001·RR-LEGAL-001
EPIC-ONBOARDING0→1 온보딩·cold-start(ShipmentFactory+초대코드)PRS-PLATFORMP0P0/1DONEUS-ONB-01..04FR-AUTH-005·FR-PROV-001/002·GATE-P0·FR-AUTH-001/004
EPIC-CARRIER-OPS캐리어 자산·일정 관리(CarrierManager)PRS-PLATFORMP1P1P2DONEUS-CAR-01..03FR-PROV-001/002·FR-GEO-CRUD-001·FR-AUTH-005
EPIC-CONSIGNEE컨사이니 경험: inbound 큐+캐리어 비교 대시보드PRS-CONSIGNEEP0P1DONEUS-CON-01..03FR-GEO-003·FR-RPT-ANALYTICS-001·KPI-DWELL-001·KPI-OTD-001
EPIC-DRIVER-APP드라이버 앱: 잡 라이프사이클+배경 위치(1차 데이터원)PRS-DRIVERP0P1STUB 최대 갭US-DRV-01..04FR-ACQ-AUTOSHARE-001·FR-ACQ-GPS-001·FR-ACQ-CONSENT-001·FR-ACQ-OFFLINE-001·FR-ACQ-API-001
EPIC-TRACKING-ENGINE트래킹 엔진: ETA·예외 감지·Tracking Rate 정직PRS-SHIPPERP1P1P2PARTIALUS-ENG-01..03FR-ENG-ETA-001/002·FR-ENG-EXC-001..006·KPI-TRACK-001·KPI-ETA-001
EPIC-NOTIFY-EXC알림·예외 분류(LINE 1순위+커스텀 규칙)PRS-CARRIERP1P1STUBUS-NTF-01..02FR-DLV-NOTIFY-001·FR-ENG-EXC-001/002/003·SLO-S3
EPIC-AUTH-TENANCY인증·역할/스코프 게이트·테넌트 격리(셀프가입 없음)PRS-PLATFORMP0P1DONEUS-AUTH-01..03FR-AUTH-001/002/003/004/005
EPIC-INTEGRATIONS퍼블릭 API·웹훅·3PL 멀티테넌시(overlay)PRS-3PLP2P2STUBUS-INT-01..03FR-DLV-WH-001·FR-DLV-WS-001·FR-RPT-ANALYTICS-001·SLO-S3
EPIC-CONSENT-PRIVACYAPPI 동의·드라이버 위치 프라이버시·受取人 마스킹PRS-LEGALP0P1PARTIAL ingest 갭US-PRV-01..03FR-ACQ-CONSENT-001·FR-DLV-TRACK-001·RR-LEGAL-001·FR-AUTH-004

DONE 라이브 console/server에서 검증됨 · PARTIAL 일부 동작만 구현(나머지 STUB) · STUB scaffold만 존재(목표 동작 기술). 페르소나 상세는 personas.html, 여정은 journeys.html, JTBD는 jobs-to-be-done.html.

EPIC-CONTROL-TOWER · 컨트롤 타워·실시간 가시성

에픽 진술. 荷主 컨트롤타워 운영자로서 多重下請け(元請→下請→孫請)를 관통한 실제 운송 차량의 위치·상태·도착 예정을 한 화면(地図 / FleetMap)에서 보고, 화물 목록(輸送一覧)에서 개별 건으로 drill-down 하고 싶다 — 전화·FAX 없이 "지금 어디"를 안다.

페르소나 PRS-SHIPPER(SHIPPER_ADMIN/VIEWER) · CARRIER_OPS·SUPPORT(자사 화물만) · 우선순위 P0 · 단계 Phase 1 · 구현상태 DONE(FleetMap never-empty + ShipmentsTable, /shipments/tracking 6초 폴링).

TRD FR/RR FR-DLV-WS-001 · FR-INGEST-001 · FR-INGEST-002 · FR-INGEST-003 · FR-GEO-001 · FR-GEO-002 · FR-GEO-003 · FR-DLV-TRACK-001 · SLO-S6

US-CT-01실시간 화물 지도(FleetMap) P0Phase 1DONE

荷主 운영자로서 다단계 하청을 관통한 실시간 화물 위치를 한 지도에서 보고 싶다, 그래야 전화 없이 전체 상태를 한눈에 파악한다.

수용기준

  • Given 위치 핑이 인제스트된 운송이 있을 때, When 운영자가 地図를 열면, Then 차량 아이콘이 상태색(IN_TRANSIT/EXCEPTION/DELIVERED 등)으로 표시되고 WebSocket으로 이동을 반드시 갱신한다.
  • Given 아직 핑이 0건일 때, When 지도를 열면, Then 화면은 반드시 비어 있지 않다(never-empty) — 운송 경로(stop pin·route)와 位置データを受信していません 상태를 보여준다.
  • Given WebSocket이 끊겼을 때, When 재연결 중이면, Then 接続エラー(再試行中)를 표시하고 권장 자동 재시도한다.
구현 console FleetMap DONE · TRD FR-DLV-WS-001, FR-DLV-TRACK-001, SLO-S6 · JTBD JTBD-01 · 여정 JRN-MONITOR
US-CT-02화물 목록 drill-down(輸送一覧) P0Phase 1DONE

荷主 운영자로서 전체 화물을 목록(輸送一覧)으로 보고 특정 건을 골라 지도·상세로 내려가고 싶다, 그래야 "이 PO 지금 어디"를 즉시 확인한다.

수용기준

  • Given 자사 화물이 여러 건일 때, When 輸送 탭을 열면, Then 운송ID·화주참조(荷主参照)·상태·배달ETA 열을 가진 목록을 반드시 보여준다.
  • Given 목록에서 한 행을 클릭할 때, When 행을 선택하면, Then 해당 화물로 지도 포커스가 이동하고 상태·최신 위치를 반드시 표시한다.
  • Given 자사 화물이 없을 때, When 목록을 열면, Then 輸送はありません 빈 상태를 반드시 명시한다(오류 아님).
구현 console ShipmentsTable DONE · TRD FR-DLV-TRACK-001 · JTBD JTBD-01
US-CT-03정직한 ETA·추적률 노출 P1Phase 1PARTIAL

荷主 운영자로서 화면의 ETA가 추정치인지·마지막 핑이 얼마나 오래됐는지 명확히 보고 싶다, 그래야 데이터를 과신하지 않고 의사결정한다.

수용기준

  • Given 룰 기반 ETA가 추정치(eta_is_estimate=true)일 때, When 운송 상세를 보면, Then UI는 (推定) 라벨을 반드시 붙인다(달성치로 위장 금지).
  • Given 트래킹 데이터에 staleness/tracking_rate가 있을 때, When 화물을 보면, Then 마지막 핑 경과·추적 커버리지를 권장 정직하게 노출한다.
구현 console common.est(推定) 라벨 DONE · 룰 ETA 서버 산출 STUB(handleEtaBatch ack-only) → 에픽 합산 PARTIAL · TRD FR-DLV-TRACK-001, KPI-TRACK-001 · JTBD JTBD-01
US-CT-04하청 관통 — 실운송 차량 식별 P1Phase 1PARTIAL

荷主 운영자로서 元請이 아닌 실제로 운반 중인 孫請(실운송) 차량을 위치로 식별해 보고 싶다, 그래야 계약상의 캐리어가 아니라 진짜 운송 주체를 안다(해자=네트워크).

수용기준

  • Given 화물에 元請(carrier)과 실운송(actual_carrier)이 다를 때, When 화물 상세를 보면, Then 실시간 위치로 검증된 실운송 차량의 캐리어 계층을 권장 구분 표시한다.
  • Given 캐리어 개인정보(드라이버 실명·番号板)일 때, When 화주 스코프로 조회하면, Then 마스킹 규칙(display_name·plate 부분 마스킹)을 반드시 적용한다.
구현 데이터 모델·tier/actual_carrier 존재, 콘솔 전용 하청-계층 UI는 부분 PARTIAL · TRD FR-DLV-TRACK-001, SR-MASK-001 · JTBD JTBD-01, JTBD-02

EPIC-REGULATORY · 규제 = 킬러앱

에픽 진술. 荷主 운영자로서 規制 의무(荷待ち 2시간·実運送体制管理簿·拘束時間)를 수기 작성·행정지도·벌금 없이 자동 생성하고 싶다 — "안 하면 벌금"인 의무를 도입 명분으로 삼아, 규제 출력을 시장이 외부에서 만들어 주는 진입 쐐기로 쓴다. 유일하게 end-to-end 완성된 킬러 기능은 荷待ち/NIMACHI CSV이며, 実運送体制管理簿·拘束時間은 후속 단계다.

페르소나 PRS-SHIPPER(SHIPPER_ADMIN/VIEWER, 規制 탭) · 우선순위 P0 · 단계 P1(NIMACHI DONE)P2(JITSUUNSO) · 구현상태 PARTIAL.

RR-LEGAL-001 주의. 공식 컬럼셋·인코딩(Shift_JIS vs UTF-8 BOM)이 미확정이다. RR-LEGAL-001 서명 전까지 "官庁 제출 가능"으로 광고하지 않는다. 법령 사실(2025.4 実運送体制管理簿 의무화·2026.4 荷待ち 2시간·2024년 문제 960h)은 확인.

TRD FR/RR FR-RPT-NIMACHI-001 · RR-NIMACHI-001 · FR-RPT-JITSUUNSO-001 · RR-JITSUUNSO-001 · FR-RPT-KOSOKU-001 · RR-KOSOKU-001 · FR-RPT-RANGE-001 · RR-CSV-001 · RR-LIFECYCLE-001 · RR-PROV-001 · RR-LEGAL-001 · KPI-DWELL-001

US-REG-01荷待ち 기록 CSV 출력(NIMACHI) P0Phase 1DONE

荷主 운영자로서 지정 기간의 荷待ち(체류) 시간을 집계해 CSV로 내보내고 싶다, 그래야 수기 작성 없이 監督官庁 제출·납품처 개선 협상 근거를 쥔다.

수용기준

  • Given 운영자가 規制의 開始日/終了日을 고를 때, When レポート生成을 누르면, Then 거점별·운송별 dwell을 집계하고 법정 2시간 초과 건반드시 표시한다.
  • Given 리포트가 생성됐을 때, When 결과를 보면, Then 행수({n}件)·리포트ID(report_id)·생성 시각(JST)을 반드시 보여준다.
  • Given 운영자가 CSVダウンロード를 누를 때, When 파일을 받으면, Then 監督官庁용으로 UTF-8 BOM CSV를 반드시 내려준다.
구현 console 荷待ち 기록(規制 레포트) + server NIMACHI CSV end-to-end DONE (유일 완성 킬러) · TRD FR-RPT-NIMACHI-001, RR-NIMACHI-001, RR-CSV-001 · JTBD JTBD-02 · 여정 JRN-NIMACHI
US-REG-02기간 검증 — JST·92일 한도 P0Phase 1DONE

荷主 운영자로서 리포트 기간이 항상 올바른 범위(JST 기준·≤92일)로 강제되길 원한다, 그래야 무효한 산출물이나 과도한 D1 스캔을 막는다.

수용기준

  • Given 開始日 ≥ 終了日 이거나 92일을 초과할 때, When 생성하려 하면, Then 期間が正しくありません(開始日 < 終了日、92日以内) 오류를 반드시 보여주고 생성을 막는다.
  • Given 유효한 기간일 때, When 리포트를 생성하면, Then 모든 타임스탬프를 JST반드시 표기한다(監督官庁 일관성).
구현 console 검증 + server 기간 게이트 DONE · TRD FR-RPT-RANGE-001, RR-LIFECYCLE-001 · JTBD JTBD-02
US-REG-03納品처별 荷待ち 측정 ROI P0Phase 1DONE

荷主 운영자로서 납품처별 평균 荷待ち·법정 초과 건을 측정해 비교하고 싶다, 그래야 개선 협상의 측정가능 ROI 근거(예: 3-4h→1-2h 단축)를 손에 쥔다.

수용기준

  • Given 집계 기간이 지정될 때, When 리포트를 보면, Then 거점/납품처 단위로 평균 체류·>120분 건수를 반드시 분해해 보여준다.
  • Given 협상에 사용할 산출물일 때, When 다운받으면, Then 동일 report_id로 반복 출력이 권장 가능하다(R2 egress 무료).
구현 console+server 거점별 집계 DONE · TRD KPI-DWELL-001, RR-PROV-001 · JTBD JTBD-03
US-REG-04実運送体制管理簿·拘束時間 출력 P2Phase 2STUB

荷主(元請) 운영자로서 청부 체인(元請→下請→孫請)과 실시간 위치로 검증된 실운송 차량을 결합한 実運送体制管理簿를 자동 생성하고, 운행·체류 타임스탬프를 拘束時間 산정의 보조 데이터로 내보내고 싶다.

수용기준

  • Given 화물의 청부 계층(tier·parent_carrier_id)과 검증된 실운송 차량이 있을 때, When 운영자가 実運送体制管理簿를 요청하면, Then 실운송 사업자 명칭·청부 계층 리포트를 반드시 생성한다(목표 동작). STUB — 현재 GET /v1/reports/jitsuunso501이다.
  • Given 공식 포맷이 미확정일 때, When 산출물을 광고하면, Then RR-LEGAL-001 서명 전까지 "官庁 제출 가능" 표기를 반드시 금지한다.
  • Given 운행·체류 타임스탬프가 있을 때, When 拘束時間 보조 export를 요청하면, Then 보조 데이터로만(전용 노무관리 대체 아님) 제공함을 반드시 명시한다.
구현 server 実運送体制管理簿 STUB(501), 拘束時間 export ABSENT · TRD FR-RPT-JITSUUNSO-001, RR-JITSUUNSO-001, FR-RPT-KOSOKU-001, RR-LEGAL-001 · JTBD JTBD-02

EPIC-ONBOARDING · 0→1 온보딩·cold-start

에픽 진술. PLATFORM_ADMIN(LogiNippon 운영)으로서 신규 캐리어·컨사이니·거점을 셋업하고, 일회용 드라이버 초대코드를 발급하고, 실 GPS 한 건 전에 픽업→도착→대시보드 전 과정을 ShipmentFactory로 실증하고 싶다 — cold-start(검증된 #1 장벽 H3)를 수행하고 데모로 도입을 견인한다.

페르소나 PRS-PLATFORM(PLATFORM_ADMIN, 최강 역할; 管理/運送登録(factory) 탭) · 우선순위 P0 · 단계 Phase 0/1 · 구현상태 DONE.

GATE-P0(제휴 하드 게이트). Phase 0 파트너 미서명 시 Phase 1이 보류된다. 게이트 DoD는 TRD GATE-P0 소유 — 제품 리스크는 risks-open-questions.html.

TRD FR FR-AUTH-005 · FR-PROV-001 · FR-PROV-002 · FR-AUTH-001 · FR-AUTH-004 · GATE-P0

US-ONB-01캐리어·컨사이니·거점 셋업(AdminPanel) P0Phase 1DONE

PLATFORM_ADMIN으로서 운송사업자(運送事業者)·도착지(consignee)·물리 거점(facility)·지오펜스를 管理 탭에서 만들고 싶다, 그래야 신규 파트너를 빠르게 온보딩한다.

수용기준

  • Given PLATFORM_ADMIN으로 로그인했을 때, When 運送事業者の管理에서 사업자명을 입력하면, Then 캐리어를 반드시 생성하고 목록에 표시한다.
  • Given 도착지를 만든 뒤, When 그 하위에 拠点(facility)를 주소와 함께 추가하면, Then 거점과 지오펜스를 반드시 생성한다.
  • Given 비-admin 역할로 접근할 때, When 管理 탭을 시도하면, Then 역할 게이트로 반드시 차단한다.
구현 console AdminPanel(캐리어/컨사이니/거점/지오펜스) DONE · TRD FR-PROV-001, FR-PROV-002 · JTBD JTBD-06 · 여정 JRN-COLDSTART
US-ONB-02일회용 드라이버 초대코드 발급 P0Phase 1DONE

PLATFORM_ADMIN으로서 캐리어별로 1회용 드라이버 초대코드를 발급하고 싶다, 그래야 셀프가입 없이도 드라이버가 안전하게 자동 등록할 입구를 만든다.

수용기준

  • Given 캐리어를 선택했을 때, When コードを発行을 누르면, Then max_uses=1·ttl=30d 초대코드를 반드시 발급한다.
  • Given 코드가 발급된 직후, When 화면에 표시될 때, Then 코드는 1회만 표시되고(必ずコピーしてドライバーへ伝達) 재표시되지 않음을 반드시 경고한다.
  • Given 발급된 코드가 미사용 상태일 때, When admin이 無効化를 누르면, Then 해당 코드를 반드시 즉시 무효화한다.
구현 console AdminPanel 초대코드(max_uses1/ttl30d·copy·revoke) DONE · TRD FR-AUTH-005 · JTBD JTBD-06 · 미해결 초대코드 소비 핸드셰이크(드라이버 앱)
US-ONB-03ShipmentFactory 전 과정 실증(데모) P0Phase 1DONE

PLATFORM_ADMIN으로서 실 트럭·GPS 없이 캐리어·도착지·드라이버·차량·운송을 만들고 위치를 시뮬레이션해 픽업→도착→대시보드 전 흐름을 검증하고 싶다, 그래야 cold-start 데모로 도입 가치를 증명한다.

수용기준

  • Given 運送登録(factory) 4스텝에서, When ①사업자·도착지 ②차량·드라이버 ③멀티스톱 운송 ④위치 시뮬을 진행하면, Then 시뮬 위치를 반드시 ingest로 전송한다.
  • Given 멀티스톱을 정의할 때, When stop을 추가하면, Then ≥1 PICKUP·≥1 DROPOFF·마지막=DROPOFF 규칙을 반드시 강제한다(milk-run/LTL 지원).
  • Given 위치를 시뮬레이트한 뒤, When 지도/Inbound/대시보드를 보면, Then 동일 화물이 전 화면에 반영됨을 반드시 확인할 수 있다.
구현 console ShipmentFactory(4스텝·stop 검증·sim ingest) DONE · TRD FR-INGEST-001, FR-PROV-002 · JTBD JTBD-07 · 여정 JRN-FACTORY
US-ONB-04드라이버 셀프등록(초대코드 소비) P1Phase 1STUB

드라이버로서 발급받은 1회용 코드로 앱에서 셀프등록(비번≥8·APPI 동의)하고 싶다, 그래야 관리자 개입 없이 案件 수신을 시작한다.

수용기준

  • Given 유효한 미사용 코드를 입력할 때, When 드라이버가 등록을 완료하면, Then 비번(≥8자)·APPI 동의와 함께 계정을 반드시 생성하고 코드를 소비(use)한다(목표 동작).
  • Given 이미 사용/만료/무효화된 코드일 때, When 등록을 시도하면, Then 반드시 거부한다.
구현 코드 발급은 DONE이나 드라이버 앱 소비 핸드셰이크 STUB(Flutter scaffold) STUB · TRD FR-AUTH-005, FR-ACQ-CONSENT-001 · JTBD JTBD-06

EPIC-CARRIER-OPS · 캐리어 자산·일정 관리

에픽 진술. PLATFORM_ADMIN(현재 운영 주체)으로서 캐리어별 드라이버·차량을 CRUD 하고, 비밀번호를 리셋하고, 운송 일정과 정류점을 관리하고 싶다 — 라이브 console 事業者・ドライバー・車両 管理(CarrierManager)로 캐리어 자산을 시간에 걸쳐 운영한다. Phase 2에 CARRIER_OPS 셀프서비스로 이양 예정(현재 플랫폼 운영).

페르소나 PRS-PLATFORM(PLATFORM_ADMIN, 事業者管理 탭) → Phase 2 PRS-CARRIER(CARRIER_OPS 셀프) · 우선순위 P1 · 단계 P1(플랫폼 운영)P2(캐리어 셀프) · 구현상태 DONE.

TRD FR FR-PROV-001 · FR-PROV-002 · FR-GEO-CRUD-001 · FR-AUTH-005

US-CAR-01드라이버·차량 CRUD + 비번 리셋 P1Phase 1DONE

PLATFORM_ADMIN으로서 캐리어를 선택하고 그 드라이버(氏名/パスワード/APPI 동의)와 차량(ナンバープレート)을 생성·수정·비번 리셋하고 싶다, 그래야 캐리어 인적·차량 자산을 정확히 유지한다.

수용기준

  • Given 캐리어를 선택했을 때, When 신규 드라이버를 추가하면, Then 氏名(선택)·비번(8자 이상)·APPI 동의를 받아 반드시 생성한다.
  • Given 비번이 8자 미만일 때, When 저장하려 하면, Then パスワードは8文字以上 오류로 반드시 막는다.
  • Given 기존 드라이버를 편집할 때, When 새 비번(선택)을 입력하면, Then 비번을 반드시 리셋하고, 차량은 번호판으로 반드시 생성·수정한다.
구현 console CarrierManager(드라이버/차량 CRUD·비번리셋) DONE · TRD FR-PROV-002, FR-AUTH-005 · JTBD JTBD-08
US-CAR-02운송 일정·정류점(inline stop) P1Phase 1DONE

PLATFORM_ADMIN으로서 드라이버별 운송 일정(어디서→어디로·시각)을 보고, 정류점을 inline으로 추가·수정·삭제하고 싶다, 그래야 멀티스톱 운송을 정확히 배차·조정한다.

수용기준

  • Given 드라이버를 펼쳤을 때, When 運送日程을 열면, Then 出発/到着 시각과 함께 담당 운송 목록을 반드시 보여주고, 없으면 担当運送がありません를 표시한다.
  • Given 운송의 정류점을 편집할 때, When 경유지(経由地を追加)·주소를 바꾸면, Then 추가/수정/삭제를 반드시 반영한다(삭제는 확인 후).
  • Given 일정 행에서, When 地図で見る를 누르면, Then 해당 운송으로 지도 포커스를 권장 이동한다.
구현 console CarrierManager(일정·inline stop) DONE · TRD FR-GEO-CRUD-001, FR-PROV-002 · JTBD JTBD-08
US-CAR-03운송 히스토리(진행 중/완료) P1Phase 1DONE

PLATFORM_ADMIN(미래 CARRIER_OPS)으로서 캐리어의 진행 중/완료 운송을 구분해 보고 싶다, 그래야 자사 실적을 증명하고 화주 거래를 유지한다.

수용기준

  • Given 캐리어 운송 히스토리를 열 때, When 運送履歴를 보면, Then 進行中完了 운송을 반드시 구분 표시한다.
  • Given 해당 운송이 없을 때, When 목록을 보면, Then 該当運送がありません 빈 상태를 반드시 명시한다.
구현 console CarrierManager(active/history) DONE · TRD FR-PROV-001 · JTBD JTBD-11

EPIC-CONSIGNEE · 컨사이니 경험

에픽 진술. 受取人/荷受け拠点 운영자로서 자기 도크로 오는 전 캐리어 inbound를 한 화면(到着便)에서 라이브로 보고, 라이브 ETA로 도크 인력을 계획하고, 캐리어를 객관 성과로 비교(事業者比較ダッシュボード)하고 싶다 — 원 리서치에 없던 컨사이니 중심 IA이자 bottom-up land-and-expand 동력.

페르소나 PRS-CONSIGNEE(CONSIGNEE_ADMIN/VIEWER; 地図/到着便/ダッシュボード 탭) · 우선순위 P0 · 단계 Phase 1 · 구현상태 DONE(화주向 스코어카드 FR-RPT-ANALYTICS-001은 ABSENT, 컨사이니 Dashboard에 병렬 뷰 존재).

TRD FR/KPI FR-GEO-003 · FR-RPT-ANALYTICS-001 · KPI-DWELL-001 · KPI-OTD-001 · KPI-OTP-001 · KPI-ETA-001

US-CON-01다캐리어 inbound 라이브 큐(到着便) P0Phase 1DONE

受取人 운영자로서 자사 시설로 오는 모든 운송을 여러 운송사 횡단으로 한 라이브 목록에서 보고 싶다, 그래야 도크 인력·접안을 미리 계획한다.

수용기준

  • Given 자사 시설로 향하는 운송이 있을 때, When 到着便(ライブ)를 열면, Then 운송ID·事業者(캐리어)·到着拠点·상태·ETA(추정 플래그 포함)를 반드시 횡단 표시한다.
  • Given 도착 예정 운송이 없을 때, When 목록을 보면, Then 現在到着予定の運送はありません 빈 상태를 반드시 명시한다.
  • Given 한 행을 선택할 때, When 클릭하면, Then 지도로 포커스를 권장 이동한다.
구현 console InboundView(다캐리어 라이브 큐) DONE · TRD FR-GEO-003, FR-DLV-WS-001 · JTBD JTBD-04 · 여정 JRN-CONSIGNEE
US-CON-02캐리어 비교 대시보드(事業者比較) P1Phase 1DONE

受取人 운영자로서 기간 내 도착 운송을 운송사별로 집계해 件数·평균 荷待ち·定時率·ETA 오차(MAE)로 비교하고 싶다, 그래야 어느 캐리어를 계속 쓸지 객관 근거로 결정한다.

수용기준

  • Given 집계 기간이 지정될 때, When 事業者比較(集計)를 열면, Then 운송사별 件数·平均荷待ち·定時率·ETA誤差(MAE)반드시 한 표로 비교 표시한다.
  • Given 대상 기간에 데이터가 없을 때, When 대시보드를 보면, Then 対象期間にデータがありません반드시 표시한다.
  • Given 데이터를 새로 받을 때, When 更新을 누르면, Then 집계를 반드시 갱신한다.
구현 console Dashboard(건수·평균dwell·정시%·ETA MAE) DONE · TRD KPI-DWELL-001, KPI-OTD-001, KPI-ETA-001 · JTBD JTBD-05
US-CON-03화주向 캐리어 스코어카드(병렬) P2Phase 2ABSENT

荷主 운영자로서 컨사이니가 보는 것과 동등한 캐리어 스코어카드(OTD·dwell·tracking rate·예외율·CO₂)를 화주 관점에서 받고 싶다, 그래야 특정 제1종 荷主의 효율화 의무를 데이터로 증명한다.

수용기준

  • Given 화주가 캐리어 성과를 요청할 때, When 스코어카드를 조회하면, Then 캐리어별·레인별 OTD·체류·추적 품질·예외율·CO₂ 추정을 반드시 제공한다(목표 동작).
  • Given 컨사이니 Dashboard에 병렬 뷰가 이미 있을 때, When 화주向 뷰를 추가하면, Then 동일 집계를 화주 스코프로 권장 재사용한다.
구현 화주向 스코어카드(FR-RPT-ANALYTICS-001) ABSENT(컨사이니 Dashboard에만 병렬 존재) · TRD FR-RPT-ANALYTICS-001 · JTBD JTBD-05 · 미해결 화주도 비교 대시보드를 받나(컨사이니 전용?)

EPIC-DRIVER-APP · 드라이버 앱(1차 데이터원)

에픽 진술. ドライバー(実운송자)로서 案件을 받아 큰 버튼 한 번으로 수락하고, 잡 중에만 배경 위치를 자동 공유하고(공유 버튼 없는 자동화), 터널/오프라인에서도 도착·완료를 증빙하고 싶다 — 스마트폰 GPS가 1차 위치 센서다.

최대 갭(STUB). Flutter 드라이버 앱은 scaffold STUB이다 — 배경 위치(TransistorLocationService) 주석처리, hasConsent→false·token→null, _refreshToken UnimplementedError, JobsRepository [], 푸시·증빙·l10n 미배선. GPS가 1차 데이터원이라 이 에픽이 MVP exit를 막는 #1 갭이다. 제품 리스크 PR-02.

페르소나 PRS-DRIVER(DRIVER, Flutter 앱; 고령 평균 50+) · 우선순위 P0 · 단계 Phase 1 · 구현상태 STUB(최대 갭).

TRD FR FR-ACQ-AUTOSHARE-001 · FR-ACQ-GPS-001 · FR-ACQ-CONSENT-001 · FR-ACQ-OFFLINE-001 · FR-ACQ-API-001 · FR-DLV-WS-001

US-DRV-01案件 수신·큰 버튼 수락 P0Phase 1STUB

드라이버로서 배정된 案件을 푸시로 받아 큰 버튼 한 번으로 受託(수락)하고 싶다, 그래야 복잡한 조작 없이 업무를 시작한다(고령·최소 탭).

수용기준

  • Given 案件이 배정될 때, When 드라이버에게 푸시(FCM/APNs)가 도착하면, Then 출발지→도착지·시각을 큰 글자로 반드시 보여준다(목표 동작).
  • Given 案件을 확인할 때, When 큰 수락 버튼을 누르면, Then 상태를 ACCEPTED(受託)반드시 전이한다.
구현 STUB Flutter scaffold(JobsRepository []·푸시 미배선) · 드라이버 案件 API(목록/수락/완료) techspec 미기재 미해결 · TRD FR-ACQ-API-001 · JTBD JTBD-09 · 여정 JRN-DRIVER
US-DRV-02잡 중에만 자동 위치 공유 P0Phase 1STUB

드라이버로서 수락하면 위치 공유가 자동으로 켜지고 완료하면 자동으로 꺼지길 원한다, 그래야 공유 버튼을 누를 필요 없이(자동화), 잡 외에는 추적되지 않는다(프라이버시).

수용기준

  • Given 案件을 수락할 때, When 상태가 ACCEPTED가 되면, Then 배경 위치 공유를 반드시 자동 ON 한다(공유 버튼 없음).
  • Given 주행 중일 때, When 위치를 수집하면, Then 적응 샘플링으로 배터리 예산을 권장 지키며 ingest로 전송한다.
  • Given 완료 보고를 마칠 때, When 案件이 종료되면, Then 공유를 반드시 자동 OFF 한다.
구현 STUB TransistorLocationService 주석처리 — 최대 갭 · TRD FR-ACQ-AUTOSHARE-001, FR-ACQ-GPS-001 · JTBD JTBD-09
US-DRV-03오프라인 버퍼·서버 지오펜스 이벤트 P0Phase 1STUB

드라이버로서 터널·전파 음영에서도 위치가 버퍼링됐다가 복구 시 올라가고, 도착/이탈은 서버가 자동 도출하길 원한다, 그래야 수기 보고 없이 도착이 증명되고 추적이 유지된다.

수용기준

  • Given 오프라인 구간일 때, When 위치를 수집하면, Then 로컬 버퍼에 쌓았다가 복구 시 반드시 순서대로 전송한다(목표 동작).
  • Given 위치가 거점 지오펜스에 진입/이탈할 때, When 서버가 핑을 받으면, Then ENTER/EXIT·dwell 이벤트를 반드시 자동 도출한다(드라이버 수기 입력 없음 — 서버측 DONE).
구현 서버 H3 지오펜스 enter/exit/dwell 히스테리시스 엔진 DONE · 앱 오프라인 버퍼 STUB → 에픽 합산 STUB · TRD FR-ACQ-OFFLINE-001, FR-GEO-001 · JTBD JTBD-10
US-DRV-04完了報告 + 증빙 사진 P0Phase 1STUB

드라이버로서 배달지 도착 후 완료 보고와 증빙 사진을 큰 버튼으로 올리고 싶다, 그래야 배달 사실을 증명하고 案件을 닫는다.

수용기준

  • Given 배달지(DROPOFF)에 도착했을 때, When 完了報告 버튼을 누르면, Then 상태를 DELIVERED(配達完了)반드시 전이한다(목표 동작).
  • Given 증빙 사진을 첨부할 때, When 업로드하면, Then 사진을 반드시 R2에 저장한다(egress 무료).
구현 STUB 증빙·완료 보고 미배선(R2 버킷은 서버 측 존재) · TRD FR-ACQ-API-001, FR-DLV-WS-001 · JTBD JTBD-10

EPIC-TRACKING-ENGINE · 트래킹 엔진

에픽 진술. 荷主 운영자로서 도착 예정(ETA)·예외(지연·荷待ち 초과·추적 손실·이탈·정차·픽업)를 자동으로 받고, 추적률(Tracking Rate)이 정직하게 노출되길 원한다 — "얼마나 보이는가"를 숨기지 않는다. North Star = Tracking Rate.

페르소나 PRS-SHIPPER · 우선순위 P1 · 단계 P1(PARTIAL)P2(ML ETA) · 구현상태 PARTIAL(지오펜스·dwell·예외 도출 DONE, 룰 ETA·SLI 측정 STUB).

모든 ETA/Tracking 목표 수치는 설계(MVP exit floor Tracking Rate ≥85%·정상 ≥92%·ETA MAPE 룰≤25%→ML≤15%) — 달성치 아님. SLI 측정은 OBS-METRICS-001(writeDataPoint) 선결.

TRD FR/KPI/SLO FR-ENG-ETA-001 · FR-ENG-ETA-002 · FR-ENG-EXC-001..006 · KPI-TRACK-001 · KPI-ETA-001 · SLO-S7

US-ENG-01룰 기반 ETA(추정 플래그) P1Phase 1STUB

荷主 운영자로서 다음 stop의 도착 예정 시각을 룰 기반으로 받고, 그것이 추정치임을 명확히 알고 싶다, 그래야 약속 시각(promised) 대비 지연을 판단한다.

수용기준

  • Given 운송이 진행 중일 때, When 서버가 위치 배치를 처리하면, Then 룰 기반 다음 stop ETA를 반드시 산출하고 eta_is_estimate=true반드시 표시한다(목표 동작).
  • Given 룰 ETA MAPE 목표일 때, When 정확도를 측정하면, Then 룰 ≤25%(설계)를 기준으로 하고 달성치로 위장하지 않는다.
구현 STUB handleEtaBatch ack-only(룰 ETA 미산출) · console (推定) 라벨은 DONE · TRD FR-ENG-ETA-001, KPI-ETA-001, SLO-S7 · JTBD JTBD-01
US-ENG-02예외 자동 감지·분류 P1Phase 1PARTIAL

荷主·運送会社 운영자로서 지연·荷待ち 초과·추적 손실·이탈·정차·픽업 같은 예외를 자동으로 분류해 받고 싶다, 그래야 "지금 처리할 것"에 집중한다.

수용기준

  • Given 거점 체류가 임계(120분)를 초과할 때, When 엔진이 평가하면, Then DWELL_THRESHOLD_EXCEEDED 荷待ち 예외를 반드시 생성한다.
  • Given 예측 ETA가 약속을 초과하거나 핑이 끊길 때, When 엔진이 평가하면, Then 지연·추적 손실 등 canonical 예외를 반드시 심각도와 함께 분류한다.
  • Given 추적 손실이 일정 시간 지속될 때, When 스윕 cron이 돌면, Then 추적 손실 예외를 반드시 표시한다. STUB — 현재 tracking-loss sweep cron은 비어 있다.
구현 지오펜스/dwell·예외 도출 엔진 DONE · tracking-loss sweep cron STUB → 합산 PARTIAL · TRD FR-ENG-EXC-001..006 · JTBD JTBD-01
US-ENG-03Tracking Rate 정직 노출(North Star) P1Phase 1STUB

荷主 운영자로서 화물별·전체 추적 커버리지(Tracking Rate)와 마지막 핑 경과(staleness)를 정직하게 보고 싶다, 그래야 스마트폰 GPS 한계를 알고도 신뢰한다.

수용기준

  • Given 28일 창에서, When Tracking Rate(received_pings/expected_pings)를 계산하면, Then 100%로 위장하지 않고 실측치를 반드시 노출한다(목표 동작).
  • Given SLI를 측정하려 할 때, When 메트릭을 기록하면, Then writeDataPoint(OBS-METRICS-001) 배선이 반드시 선결된다. STUB — 현재 METRICS.writeDataPoint는 TODO다.
구현 STUB SLI 미측정(OBS-METRICS-001 선결) · TRD KPI-TRACK-001, SLO-S4 · JTBD JTBD-01 · 지표 success-metrics-kpi.html

EPIC-NOTIFY-EXC · 알림·예외 분류

에픽 진술. 運送会社·荷主 운영팀으로서 예외를 LINE/LINE Works(1순위)·이메일·웹훅으로 즉시 받고, "지연 30분 초과 시 이메일" 같은 커스텀 규칙을 정의하고 싶다 — 일본 B2B 현장에 즉각 반응을 주는 채널 우선순위.

페르소나 PRS-CARRIER(운영팀) · PRS-SHIPPER · 우선순위 P1 · 단계 Phase 1 · 구현상태 STUB(예외 도출은 엔진에서 되나 전달이 미배선).

STUB. handleNotifyBatch가 ack-only(전달 안 함). MVP exit(GATE-P1)가 요구하는 5개 STUB 중 하나 — 웹훅/알림 전달.

TRD FR/SLO FR-DLV-NOTIFY-001 · FR-ENG-EXC-001 · FR-ENG-EXC-002 · FR-ENG-EXC-003 · SLO-S3

US-NTF-01LINE 1순위 예외 알림 P1Phase 1STUB

運送会社 운영팀으로서 예외(지연·荷待ち 초과 등)를 LINE/LINE Works로 즉시 받고 싶다, 그래야 이메일보다 빠르게 현장 대응한다.

수용기준

  • Given 예외 이벤트가 발생할 때, When 알림이 전달되면, Then LINE/LINE Works를 1순위 채널로 반드시 사용한다(이메일·웹훅 병행)(목표 동작).
  • Given 예외 큐를 볼 때, When 심각도·시간순으로 정렬하면, Then "지금 처리할 것" vs "모니터링"을 권장 구분한다.
구현 STUB handleNotifyBatch ack-only(전달 미구현) · TRD FR-DLV-NOTIFY-001, SLO-S3 · JTBD JTBD-11 · 여정 JRN-MONITOR
US-NTF-02화주 커스텀 알림 규칙 P2Phase 2STUB

荷主 운영자로서 "지연 30분 초과 시 이메일" 같은 알림 규칙을 직접 정의하고 싶다, 그래야 내 운영 기준에 맞춰 잡음을 줄인다.

수용기준

  • Given 운영자가 임계·채널을 설정할 때, When 규칙을 저장하면, Then 조건 충족 시 지정 채널로 반드시 알린다(목표 동작).
  • Given 규칙이 없을 때, When 예외가 발생하면, Then 기본 심각도 정책으로 권장 분류한다.
구현 STUB 커스텀 규칙 엔진 미배선 · TRD FR-ENG-EXC-002, FR-DLV-NOTIFY-001 · JTBD JTBD-01

EPIC-AUTH-TENANCY · 인증·역할·테넌트 격리

에픽 진술. PLATFORM_ADMIN/모든 역할로서 발급된 강력한 자격으로 로그인하고(셀프가입 없음, ADR-0001), 역할/스코프 게이트로 화면이 결정되며, 테넌트가 엄격히 격리되길 원한다 — 화주 A는 화주 B 화물을 볼 수 없다(404로 존재 비노출).

페르소나 전 역할(SHIPPER_ADMIN/VIEWER·CARRIER_OPS·SUPPORT·PLATFORM_ADMIN·CONSIGNEE_ADMIN/VIEWER·DRIVER) · 우선순위 P0 · 단계 Phase 1 · 구현상태 DONE.

역할 모델 canonical. 코드의 7역할(+DRIVER)이 정규다 — 원 3-페르소나 안과의 드리프트는 PRD가 canonical 역할/스코프 매트릭스로 고정한다(personas.html, 제품 리스크 PR-10). 토큰 localStorage 하드닝은 Later(R12).

TRD FR FR-AUTH-001 · FR-AUTH-002 · FR-AUTH-003 · FR-AUTH-004 · FR-AUTH-005

US-AUTH-01발급 자격 로그인(셀프가입 없음) P0Phase 1DONE

운영자/드라이버로서 관리자가 발급한 ID·비밀번호로 로그인하고 싶다, 그래야 셀프가입 없이도(ADR-0001) 안전하게 접근한다.

수용기준

  • Given 발급된 자격(ID(発行された資格)·비번)일 때, When 로그인하면, Then 액세스·리프레시 토큰을 반드시 발급한다(POST /v1/auth/token).
  • Given 자격이 틀릴 때, When 로그인하면, Then ログインに失敗しました반드시 보여준다.
  • Given 셀프가입 경로일 때, When 사용자가 가입을 시도하면, Then 경로는 반드시 존재하지 않는다(관리자 발급만).
구현 console 로그인 + server Auth(JWT) DONE · 화면의 資格の発行 탭은 안내(POST /v1/admin/drivers 미구현, 시드 대체)이며 발급은 factory/AdminPanel이 담당 · TRD FR-AUTH-001, FR-AUTH-005 · JTBD JTBD-06
US-AUTH-02역할/스코프 화면 게이트(navForRole) P0Phase 1DONE

모든 역할 사용자로서 내 역할에 맞는 화면만 보고 싶다, 그래야 권한 밖 기능에 접근하지 않는다(admin은 다크 사이드바 콘솔, 비-admin은 self-track 뷰).

수용기준

  • Given PLATFORM_ADMIN일 때, When 콘솔을 열면, Then 地図/管理/事業者管理/運送登録/輸送 탭을 반드시 노출한다.
  • Given CONSIGNEE_ADMIN/VIEWER 역할일 때, When 콘솔을 열면, Then 地図/到着便/ダッシュボード를, SHIPPER_ADMIN/VIEWER는 地図/輸送/規制/発行반드시 노출한다.
  • Given 비-admin 역할일 때, When 접근하면, Then CustomerTrack(self-track) 뷰로 반드시 제한한다.
구현 console navForRole(역할→화면 IA) DONE · TRD FR-AUTH-003, FR-AUTH-004 · JTBD JTBD-04 · UX experience-ux.html
US-AUTH-03테넌트 격리·토큰 리프레시 P0Phase 1DONE

화주/캐리어로서 내 테넌트 리소스만 보이고, 세션이 만료돼도 매끄럽게 갱신되길 원한다, 그래야 데이터가 새지 않고 작업이 끊기지 않는다.

수용기준

  • Given 타 테넌트 리소스를 조회할 때, When 요청하면, Then 반드시 404로 응답한다(존재 비노출).
  • Given 액세스 토큰이 만료될 때, When 리프레시 토큰이 유효하면, Then 토큰을 반드시 갱신한다. 만료/무효 시 セッション期限切れ — 再ログインしてください반드시 보여준다.
구현 server 테넌트 격리(404)·refresh + 테넌트 격리 회귀 테스트 DONE · TRD FR-AUTH-002, FR-AUTH-004, SR-TENANT-001 · JTBD JTBD-01

EPIC-INTEGRATIONS · 퍼블릭 API·웹훅·3PL

에픽 진술. 3PL/물류 중개업자·화주 시스템으로서 LogiNippon 데이터를 자사 TMS/WMS/ERP에서 소비하고(REST 폴링·HMAC 서명 웹훅), 위임 범위 내 다 화주/캐리어를 멀티테넌트로 오케스트레이션하고 싶다 — ERP 대체가 아니라 위에 얹는 overlay다. REST+웹훅이 외부 연동, WebSocket은 UI 전용.

페르소나 PRS-3PL(Phase 2 세분 스코프) · PRS-SHIPPER · 우선순위 P2 · 단계 Phase 2 · 구현상태 STUB(웹훅 CRUD 501·POST /v1/shipments 500·rate limit 없음).

TRD FR/SLO FR-DLV-WH-001 · FR-DLV-WS-001 · FR-RPT-ANALYTICS-001 · SLO-S3

US-INT-01REST 폴링으로 화물 소비 P2Phase 2STUB

3PL/화주 시스템으로서 API Key→토큰 교환 후 화물 목록·상태·트래킹을 REST로 폴링하고 싶다, 그래야 자사 TMS에서 화물을 본다.

수용기준

  • Given 유효한 API Key·스코프(shipments:read)일 때, When GET /v1/shipments를 호출하면, Then 테넌트 스코프로 필터된 커서 페이지를 반드시 반환한다(목표 동작).
  • Given 테넌트별 한도를 둘 때, When 과도 호출하면, Then RateLimit-* 헤더와 429반드시 노출한다. STUB — 현재 rate limit 미구현.
구현 STUB rate limit 없음(GATE-P1 5개 STUB 중 하나) · 읽기 계약은 TRD 고정 · TRD FR-DLV-WS-001, IR-SHIPMENTS-001 · JTBD JTBD-14 · 여정 JRN-INTEGRATE
US-INT-02HMAC 서명 웹훅 구독·전달 P2Phase 2STUB

3PL/화주 시스템으로서 이벤트 타입을 골라 웹훅을 구독하고, HMAC 서명된 이벤트를 멱등하게 받고 싶다, 그래야 폴링 없이 푸시로 상태를 반영한다.

수용기준

  • Given 구독을 등록할 때, When POST /v1/webhooks를 호출하면, Then 이벤트 타입(SHIPMENT_EXCEPTION·DWELL_THRESHOLD_EXCEEDED 등)을 선택해 반드시 구독한다(목표 동작). STUB — 현재 웹훅 CRUD는 501.
  • Given 이벤트가 발생할 때, When 전달되면, Then X-LogiNippon-Signature(HMAC-SHA256)·X-LogiNippon-Event-Id를 붙이고 at-least-once로 반드시 전달한다(수신자는 서명 검증·id 멱등 처리).
  • Given 수신자가 5초 내 2xx를 못 줄 때, When 실패하면, Then 지수 백오프(1m→5m→…→최대 24h)로 반드시 재시도한다.
구현 STUB 웹훅 CRUD 501·전달 미배선 · TRD FR-DLV-WH-001, SLO-S3 · JTBD JTBD-12
US-INT-033PL 멀티테넌트 오버레이 P2Phase 2STUB

3PL 중개업자로서 위임 범위 내 다 화주/캐리어를 멀티테넌트로 분리해 오케스트레이션하고 정산 근거를 산출하고 싶다, 그래야 ERP를 대체하지 않고 위에 얹는다.

수용기준

  • Given 다 화주/캐리어를 위탁받을 때, When 데이터를 조회하면, Then 위탁 범위 내로만 반드시 스코프된다(테넌트 격리).
  • Given 캐리어가 공개 범위를 정할 때, When "누구에게·언제·무엇을" 제어하면, Then 그 범위를 권장 준수한다(MVP 단순 스코프 → Phase 2 세분).
구현 STUB 세분 멀티테넌시·정산 근거 미구현(Phase 2) · TRD FR-RPT-ANALYTICS-001, FR-AUTH-004 · JTBD JTBD-12
US-PRV-01APPI 동의 하드 게이트(ingest) P0Phase 1STUB

法務/컴플라이언스로서 드라이버 위치 수집이 APPI 동의(driver.consent_at) 없이는 절대 인제스트되지 않길 원한다, 그래야 個人情報保護法 노출을 없앤다.

수용기준

  • Given 드라이버 동의가 없을 때, When 위치가 ingest로 들어오면, Then consentGate반드시 차단한다(목표 동작). STUB — 현재 ingest가 consentGate를 호출하지 않는다(APPI 갭·R9).
  • Given 드라이버 생성 시(factory/CarrierManager), When APPI 동의 체크 없이 생성하려 하면, Then 동의를 반드시 받는다(位置情報の収集に同意する(APPI) — 콘솔 단 DONE).
구현 콘솔 동의 수집 DONE · ingest consentGate 배선 STUB → 합산 PARTIAL · TRD FR-ACQ-CONSENT-001 · JTBD JTBD-09 · 리스크 PR-06
US-PRV-02受取人 ETA-only(위치 마스킹) P0Phase 1DONE

受取人(최종 수령인)으로서 로그인 없이 추적 링크로 배달 ETA만 보고 싶다, 그래야 몇 시에 오는지 알되 차량 실시간 위치(個人情報)는 노출되지 않는다.

수용기준

  • Given 受取人 스코프로 트래킹을 조회할 때, When GET /v1/shipments/{id}/tracking을 부르면, Then position반드시 생략되고 ETA만 노출된다(個人情報保護法).
  • Given 화주/운송사 스코프일 때, When 같은 트래킹을 조회하면, Then position반드시 채워진다(스코프별 차등).
구현 受取人 ETA-only·위치 마스킹 DONE(console CustomerTrack 비-admin self-track) · TRD FR-DLV-TRACK-001, SR-MASK-001 · JTBD JTBD-13 · 여정 JRN-RECIPIENT
US-PRV-03캐리어 개인정보 마스킹·공유 범위 P1Phase 1PARTIAL

法務/캐리어로서 화주 스코프에서 드라이버 실명·番号板이 마스킹되고, 캐리어가 화주에게 공개할 범위를 계약으로 제어하길 원한다, 그래야 가시성이 마진을 무차별 노출하지 않는다(R4).

수용기준

  • Given 화주 스코프로 화물을 볼 때, When 드라이버·차량 정보를 조회하면, Then 실명(display_name)·plate를 반드시 부분 마스킹한다.
  • Given 캐리어가 데이터 공유 범위를 정할 때, When "누구에게·언제·무엇을" 설정하면, Then 계약 명시 범위를 권장 따른다(MVP 단순 → Phase 2 세분).
구현 화주 스코프 마스킹 정책 존재, 캐리어 셀프 공유 제어는 Phase 2 PARTIAL · TRD FR-AUTH-004, SR-MASK-001 · JTBD JTBD-11 · 리스크 PR-05

근거·상호참조

  • PRD 마스터 스펙 §5(에픽→스토리→TRD FR 매핑)·§13(PRD→TRD 링크 규칙)·§14(as-built 사실)·§3(ID 네임스페이스 — 본 페이지 EPIC-*·US-* 소유).
  • 라이브 console 역할/화면 라벨 — console/src/lib/i18n.ts(ja/en/ko: 地図/輸送/規制/管理/事業者管理/運送登録/到着便/ダッシュボード, FleetMap·ShipmentsTable·CarrierManager·ShipmentFactory·AdminPanel·InboundView·Dashboard·荷待ち 규제 레포트·자격 발급·canonical status 라벨).
  • server README + 전달 계층 techspecserver/README.md(Cloudflare Workers·Hono·D1/KV/R2/Queues/DO·시드 자격), techspec/05-delivery-layer/delivery.md(REST/웹훅 계약·HMAC 서명·멱등·재시도·규제 출력 킬러 피처·LINE 1순위·受取人 ETA-only·NIMACHI/実運送体制管理簿·Tracking Rate 정직).
  • 구현 상태 라벨 — DONE: FleetMap/ShipmentsTable·NIMACHI CSV·AdminPanel/초대코드·ShipmentFactory·CarrierManager·InboundView/Dashboard·Auth/테넌트 격리·H3 지오펜스/dwell·WebSocket. STUB/ABSENT: Flutter 드라이버 앱(최대 갭)·handleNotifyBatch/handleEtaBatch ack-only·tracking-loss sweep cron·POST /v1/shipments 500·웹훅 CRUD/GET /v1/reports/jitsuunso 501·rate limit 없음·METRICS.writeDataPoint TODO·ingest consentGate 미호출·FR-RPT-ANALYTICS-001 ABSENT.
  • TRD(외부 레포, 배포됨)기능 요구사항(FR-*) · 규제(RR-*) · North Star·KPI · SLO 카탈로그 · 단계 게이트(GATE-P0/P1) · 보안·프라이버시(SR-*).
  • PRD 교차 페이지personas.html(PRS-*·역할 매트릭스) · jobs-to-be-done.html(JTBD-01..14) · journeys.html(JRN-*) · experience-ux.html(역할→화면 IA·UX 원칙) · scope-nongoals.html(범위·게이트) · success-metrics-kpi.html · risks-open-questions.html(PR-*/OQ-*) · traceability.html(PRD↔TRD 매트릭스).
  • 신뢰도 라벨 — 법령 사실(2025.4 実運送体制管理簿 의무화·2026.4 荷待ち 2시간·2024년 문제 960h) 확인. 모든 KPI/SLO 목표(Tracking Rate ≥85%·ETA MAPE 등) 설계(진입 단계 초기 목표, 달성치 아님). 공식 규제 포맷 미확정 RR-LEGAL-001.