---
template: policy-doc@1
doc_id: 08-b2c-insurance
title: B2C 보험 도메인 — 별도 상태 어휘 · 관리자 전용 입구 · 노출 토글과 담당자 배정 · 열람 토큰 경로 · 자동차 자료 서명 게이팅 미배포
config: ../_meta/template-config.yaml
last_verified: 4d798f55
policies:
  - id: B2C_STATE_VOCAB
    status: active-prod
    evidence: [S-constant, S-schema]
    limitations:
      - B2C 주문상세가 일반 축과 다른 상태 어휘를 갖는다는 것까지가 관측이다. 두 어휘 사이에 대응 관계가 있는지는 이 문서가 대조하지 않았다
      - 상태 사이의 허용 전이는 총론 상태 축이 지며 이 문서가 다시 쓰지 않는다
    anchors:
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.dto.ts:24
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:19
  - id: B2C_ADMIN_ONLY_ENTRY
    status: active-prod
    evidence: [S-roles, S-route]
    limitations:
      - B2C 축의 조회·수정 입구가 관리자 한 종류로 좁혀져 있다는 것까지가 관측이다. 영업·기업 측 주체가 다른 경로로 닿는지는 전수로 세지 않았다
      - 사용자 쪽 입구가 이 모듈에 없다는 것은 관측이되 다른 모듈에 있는지는 이 문서가 판정하지 않는다
    anchors:
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:19
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:27
  - id: B2C_EXPOSURE_AND_ASSIGN
    status: active-prod
    evidence: [S-route, S-contract]
    limitations:
      - 노출 토글과 담당자 배정이 각각 자기 입구를 갖는다는 것까지가 관측이다. 배정이 알림으로 이어지는지는 이 문서가 추적하지 않았다
      - 배정 대상 후보를 대리점 단위로 되묻는 자리는 열되 그 후보 산출의 조건은 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:100
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:117
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:229
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:216
  - id: B2C_VIEW_TOKEN_ENTRY
    status: active-prod
    evidence: [S-guard, S-route]
    limitations:
      - 열람 토큰 전용 입구가 따로 있다는 것까지가 관측이다. 토큰의 발급 조건과 대상 결박은 총론 권한 축이 지며 이 문서가 다시 쓰지 않는다
      - 이 입구가 관리자 입구와 같은 자료를 되돌리는지는 대조하지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin-view.controller.ts:38
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin-view.controller.ts:50
  - id: B2C_CAR_SIGNED_GATE
    status: staged-only
    evidence: [S-guard, A-release]
    limitations:
      - 미도달 판정의 근거는 이 앵커 행의 최종 변경 커밋 하나다. 그 행이 뒤에 다른 커밋으로 밀리면 같은 규칙이 도달로 뒤집힐 수 있다
      - 서명에 실리는 값의 집합은 총론 권한 축이 지며 이 문서는 그 값이 이 도메인 내려받기에 걸리는 사실만 낸다
    anchors:
      - insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:59
---

# B2C 보험 도메인 — 별도 상태 어휘 · 관리자 전용 입구 · 노출 토글과 담당자 배정 · 열람 토큰 경로 · 자동차 자료 서명 게이팅 미배포

**개인 대상 보상 찾기 축이 일반 축과 어디서 갈리는가**를 다룬다. B2C 전용 상태 어휘, 관리자 한 종류로 좁혀진 입구, 노출 토글과 담당자 배정, 열람 토큰 전용 경로가 여기 있다.

**여기 없는 것** — 일반 분석의 결과 축은 `01-analysis.md` 가, B2C 경로의 수집 로그는 `02-treat.md` 가 진다. 열람 토큰의 발급·결박 계약과 권한 층의 정의는 총론 소관이며 이 문서는 그 층이 이 도메인 입구에 결선된 사실만 낸다.

**모듈 배정** — 이 문서가 지는 서버 모듈은 하나다. 그 하나가 자기 상태 어휘·입구·자료를 따로 갖기 때문에 일반 축에 접지 않고 별도 문서로 두었다. 근거는 `.claude/notes/insuniverse-docs-50-domain-m8.md` §모듈 배정 원장 에 있다.

## 정책 (기획)

### B2C_STATE_VOCAB

**B2C 주문상세는 일반 주문상세와 다른 상태 어휘를 쓴다.** 인증 요청 중, 자료 수집 실패, 자료 분석 중, 분석 완료, 분석 실패가 각각 자기 코드값이며 일반 축의 어휘와 문자열이 다르다.

### B2C_ADMIN_ONLY_ENTRY

**이 축의 조회와 수정은 관리자 한 종류만 연다.** 목록·상세·내려받기가 모두 같은 역할 판정 뒤에 있고, 이 모듈에 사용자 쪽 입구가 없다.

### B2C_EXPOSURE_AND_ASSIGN

**건마다 노출 여부를 켜고 끄는 자리와 담당자를 배정하는 자리가 따로 있다.** 배정 대상 후보는 대리점 단위로 되묻고, 노출 토글은 부분 수정 형태로 열린다.

### B2C_VIEW_TOKEN_ENTRY

**열람 토큰으로만 열리는 별도 입구가 있다.** 관리자 로그인 입구와 다른 자리이며, 자격이 토큰 하나로 판정된다.

## 강제 지점 (개발)

### B2C_STATE_VOCAB

상태 어휘는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.dto.ts:24` 의 열거형이고, 목록 조회 처리기는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:19` 다.

### B2C_ADMIN_ONLY_ENTRY

허용 역할은 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:19` 가 선언하고, 목록 입구는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:27` 이다.

### B2C_EXPOSURE_AND_ASSIGN

노출 토글 입구는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:100`, 담당자 배정 입구는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:117` 이다. 처리기는 각각 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:229` 와 후보 되묻기 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:216` 이다.

### B2C_VIEW_TOKEN_ENTRY

입구의 결선 자격은 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin-view.controller.ts:38`, 조회 자리는 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin-view.controller.ts:50` 이다. 토큰 전달 경로 자체는 `../02-access/05-admin-view-token.md#VIEW_TOKEN_DELIVERY` 가 진다.

### B2C_CAR_SIGNED_GATE

자동차 자료를 함께 내려받을지가 `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:59` 의 인자로 갈린다. 그 행의 최종 변경 커밋이 릴리스 인덱스의 미도달 집합에 있다. 서명에 실리는 값의 집합은 `../02-access/05-admin-view-token.md#VIEW_TOKEN_BINDING` 이 진다.

## 적용 범위 (actor × 서비스)

| 정책 id | server | site | admin |
|---|---|---|---|
| B2C_STATE_VOCAB | 상태 어휘 · 목록 처리기 | — | 목록의 상태 열 |
| B2C_ADMIN_ONLY_ENTRY | 역할 선언 · 목록 입구 | — | B2C 관리 화면 |
| B2C_EXPOSURE_AND_ASSIGN | 두 입구 · 처리기 · 후보 되묻기 | — | 노출·배정 화면 |
| B2C_VIEW_TOKEN_ENTRY | 토큰 자격 결선 · 조회 자리 | 열람 화면이 이 입구를 부른다 | 발급 호출 |
| B2C_CAR_SIGNED_GATE | 자동차 포함 여부 인자 | — | 서명 값이 이 판정의 입력이다 |

`—` = 그 서비스가 이 정책의 경로에 등장하지 않음.

이 표의 열은 서비스 3종이며 actor 는 열이 아니다. 이 문서의 축은 B2C 자원에 걸리는 판정이라 actor 를 열로 두면 서버 한 칸만 차는 표가 된다. 열 이름 집합과 순서는 `../_meta/template-config.yaml` 의 `services` 를 그대로 따른다.

## 예외·폴백

| 정책 id | 예외 조건 | 폴백 동작 | 확인 근거 |
|---|---|---|---|
| B2C_STATE_VOCAB | 일반 축의 상태값을 B2C 건에 실을 때 | 어휘가 다르므로 입력 검증에서 거부된다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.dto.ts:24` |
| B2C_ADMIN_ONLY_ENTRY | 관리자가 아닌 주체가 이 축에 닿을 때 | 역할 판정에서 거부된다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.controller.ts:19` |
| B2C_EXPOSURE_AND_ASSIGN | 배정 후보가 없는 대리점을 지정할 때 | 되묻기가 빈 목록을 되돌린다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:216` |
| B2C_EXPOSURE_AND_ASSIGN | 노출 토글만 바꾸려 할 때 | 부분 수정 입구가 따로 있어 다른 열을 건드리지 않는다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:229` |
| B2C_VIEW_TOKEN_ENTRY | 토큰 없이 이 입구를 쓸 때 | 결선 자격에서 거부된다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin-view.controller.ts:38` |
| B2C_CAR_SIGNED_GATE | 이 규칙이 배포에 도달하지 않은 환경일 때 | 자동차 자료 포함 여부가 서명 값에 걸리지 않는다 | `insuniverse-server/apps/api/src/modules/b2c/analyze/b2c-analyze-admin.service.ts:59` |

## 부록

이 절의 정책은 **앵커 행의 최종 변경 커밋이 릴리스 인덱스의 미도달 집합에 있어 현행 배포를 판정하지 못한다.** 배치의 정본은 `../_meta/template-config.yaml` 의 `statuses` 이며, 도달이 확인되면 상태가 바뀌고 배치도 함께 옮긴다.

### B2C_CAR_SIGNED_GATE

**자동차 자료를 함께 내려받을 수 있는가가 서명된 값으로 갈린다.** 이 판정이 도달한 환경에서는 서명이 허용하지 않은 요청이 자동차 자료를 받지 못하고, 도달하지 않은 환경에서는 그 결박이 없다.

## 연혁

릴리스 태그가 존재하지 않는다. 릴리스 열은 `—` 로 두고 커밋 SHA 로 추적한다.

| 릴리스 | 날짜 | SHA | 변경 요약 |
|---|---|---|---|
| — | 2025-12-12 | `70873a63` | B2C 자료 적재 경로 신설 |
| — | 2025-12-15 | `5772ed22` | B2C 자료에서 식별값을 빼고 사용자 정보를 더함 |
| — | 2025-12-16 | `3636e9c1` | B2C 분석 상세 화면 경로 정리 |
| — | 2025-12-17 | `8569557c` | B2C 보상 찾기 축 정리 |
| — | 2025-12-24 | `e8c96766` | B2C 전용 상태 어휘와 관리자 입구 신설 |
| — | 2026-07-01 | `55c4eaac` | B2C 분석에 열람 토큰 전용 입구 신설 |
| — | 2026-07-20 | `f0038eb9` | 자동차 자료 내려받기가 서명된 값으로 갈림 |
