FeaturesContracts (협약 — 동의 이력·상태)

Contracts — 협약 (본사 동의 이력·협약 상태 조회)

SPEC #127. 운영사가 본사별 약관/개인정보 동의 이력과 협약 상태를 조회하는 read-only 화면. 인터뷰 결정(2026-06-17): 결제 제외 → 협약 = 동의/상태 read 만. PRD Page 20 의 단가·청구·만료 알림(ContractPlan)은 결제 도메인이라 v1 제외(무료 MVP).

Overview

본사 온보딩(#045 HQ 생성·재동의 #onboarding) 시 INSERT 된 HqConsent(약관)·HqPrivacyConsent (개인정보) 동의 이력을 운영사(OPERATOR)가 한 화면에서 조회한다. 신규 엔티티·마이그레이션 0 — 기존 동의 자산 + 본사 HqStatus 를 묶어 read endpoint 만 추가했다. 동의 INSERT 흐름(온보딩)은 불변.

진입점 · 라우팅

  • 라우트 /contracts(apps/admin/.../contracts/page.tsx + contracts-client.tsx). 운영사 사이드바 “협약” 항목(⭐ 표식, FileSignature). 이전 ComingSoon placeholder 를 대체.
  • 본사 선택형 — 페이지 진입 시 useListHqs({id,name} 최소 목록) 로 본사 드롭다운을 채운다(운영자 hq 선택 idiom — playlist 필터·audit 와 동일). 본사 상세 탭이 아니라 독립 화면.
  • 본사 선택 시 useGetHqConsents(hqId) 호출(generated enabled: !!(id) 로 미선택 시 미호출).

화면 구성 (atom-grounded)

본사 전용 시안 부재 — 본사 드롭다운(playlist-list-client idiom)·상태 배지(hq-list-client STATUS_META)·이력 표(audit-store-client <table> idiom)를 미러해 합성. 시안 도착 시 정합 교체.

  • 상태 배지HqConsentsResponse.status(HqStatus) → 활성(success)·온보딩(info)·미납(warn)· 정지(danger). hq-list-client 톤 매핑 미러.
  • 재동의 필요 표기termsReagreeRequired/privacyReagreeRequired 가 true 면 상단 warn 배너
    • 해당 표 헤더에 “재동의 필요” 배지. 현재 유효 문서 버전이 최신 동의보다 높음을 의미.
  • 동의 이력 표 2개(약관·개인정보) — 각 row: 문서 버전(documentVersion) · 동의 시각 (agreedAt, KST) · 서명자(signerName, 없으면 —) · 동의 IP(agreedIp, 없으면 —). 동의 시각 내림차순(BE 정렬). 빈 이력은 표마다 빈 상태.
  • 결제 칸 N/A — PRD Page 20 의 협약 단가·청구·만료 알림은 결제 도입 전까지 미노출(점선 카드로 “결제 미도입(무료 MVP)” 안내만).

계약

범위 밖 (결제 도입 시)

  • ContractPlan 단가·할인·청구·인보이스·만료 알림(PRD FR-20.7~20.13) — 결제 도메인.

References

  • SPEC #127 (협약 = 본사 동의 이력·상태 조회, 비-결제)
  • 계약: getHqConsents · HqConsentsResponse·ConsentRecord
  • BE: application/hq/HqConsentQueryService.kt · api/hq/HqAdminController.getHqConsents · api/hq/HqAdminDto(HqConsentsResponse·ConsentRecord) · 기존 HqConsent·HqPrivacyConsent 엔티티·repository 재사용(마이그레이션 0)
  • FE: apps/admin/.../contracts/page.tsx · contracts-client.tsx