ADR 0046 — 형사 사건 portal PII 노출 정책
Status: Proposed — Pack 6 형사 사건 portal 노출 정책 미정 잔여 작업 (retro #23 다음 세션 후보 #5).
배경
Pack 6 ADR 0045 가 형사 도메인 5 종 (사기·횡령·폭행·마약·교통치사상) 을 ship 했지만 의뢰인 portal 에 어떤 사건 정보를 어떻게 노출할지 가 미정. 민사 사건은 청구금액·당사자명·기일 등 모두 의뢰인이 알 권리가 있는 정보이지만 형사 사건은:
- 피의자·피고인 보호: 의뢰인 자신의 죄명·송치·기소·구속 사실은 의뢰인 본인이 알 권리. 그러나 portal 토큰이 의뢰인 가족·지인에게 노출되면 사회적 낙인.
- 피해자 PII: 형사 사건 핵심 사실 (
criminalCoreFacts) 에 피해자 이름·관계 등 별도 PII 가 포함됨. 의뢰인 (피의자) 이 자기 portal 에서 피해자 정보를 직접 보는 건 합의 협상 도구이지만 동시에 피해자 2 차 가해 가능성. - 법정 비공개: 일부 형사 사건은 미공개 (성범죄·소년·가정 폭력) 이며 portal 이 외부에 유출되면 법원의 비공개 결정과 충돌.
현재 상태 (ship 미정)
CriminalInfoSection의 9 형사 필드는 사무소 내부 (변호인·사무장) 에만 노출portalTokens컬렉션 + 4자리 코드 인증 portal (apps/web/app/(portal)/) 에 형사 사건 정보를 노출하는 코드 없음- 의뢰인 portal 에서 형사 사건은 "사건 진행 중" 추상 표시만 (활동 로그 항목 hide)
결정 (제안)
Policy A — 기본 noportal (recoveryType ∈ criminal-* → portal 노출 금지)
가장 보수적 접근. 형사 사건은 의뢰인 portal 에서 자체 보이지 않음.
- portal 토큰 발급 시 사건 유형이 형사면 silent 거부 + 변호인에게 사유 표시
- 사건 목록·상세에서 portal 관련 UI 자체 hide
장점: 피의자·피해자 PII 노출 위험 0, 비공개 사건 호환 단점: 의뢰인 (피의자) 이 자기 사건 진행 상황 자체 조회 불가 → 변호인에게 직접 문의 필요
Policy B — Redacted portal (criminal-* 도 portal 노출 허용, 필드 redact)
형사 사건도 portal 노출하되 핵심 PII 는 마스킹.
CriminalInfoSection의 portal 변환 시:- 노출: phaseLabel, chargeName, court 단계, indictmentDate
- 마스킹: criminalCoreFacts (전체 hide), criminalAggravated (hide), criminalDetained (hide)
- 부분 마스킹: 피해자 이름 등은
criminalCoreFacts본문 자체를 client-side regex 로 redact
장점: 의뢰인이 자기 사건 단계 확인 가능 (변호인 부담 감소) 단점: redact 로직 복잡성, 누출 위험 잔존
Policy C — opt-in portal (변호인이 case-by-case 토글)
caseData.criminalPortalEnabled?: boolean 새 필드. 변호인이 사건 별로 opt-in 시만 portal 노출.
장점: 변호인 책임 명시 + 사건별 유연성 단점: 변호인 운영 부담 (각 사건 토글 결정), default 가 모호
권장
Policy A (기본 noportal) 를 Pack 6.10 first slice 로 ship. 사용자 피드백 후 Policy B/C 로 점진 확장.
근거:
- 형사 사건의 PII 위험은 민사보다 압도적으로 큼 (수형 기록·전과·범죄 사실)
- 의뢰인 (피의자) 가 자기 사건 단계를 자체 조회할 가치보다 PII 누출 사고 비용이 훨씬 큼
- portal 의 4자리 코드 인증은 형사 사건의 비공개 결정에 적합한 보안 수준이 아님
- 의뢰인은 변호인 사무실 방문·전화 등 1:1 채널이 형사 사건 흐름에 더 적합
결정 후 작업 (Pack 6.10)
createPortalTokenAction(또는 신규 토큰 발급) 에recoveryType ∈ criminal-*거부 분기- portal 사이드바에서 형사 사건 자체 hide (목록 + 상세 라우트 404 처리)
apps/docs/content/operations/portal-message-notification-runbook.md갱신- 변호인 UI 에 "형사 사건은 의뢰인 포털 노출 비대상" 안내 (PortalLinkDialog 분기)
- e2e — recoveryType=criminal-fraud 인 사건의 portal 토큰 발급 시도 거부 검증
후속 확장 (별도 ADR)
Policy B (redacted) 또는 C (opt-in) 채택은 production 운영 6 개월 + 사용자 피드백 후 별도 ADR.
한 줄 본질 정합
"사무소가 자기 데이터로 자기 AI 학습·활용" 의 데이터 영역에 형사 사건이 포함되더라도, 의뢰인 portal 은 사무소 내부 학습과 별도 채널.
formal portal 노출 정책의 부재는 형사 사건 도메인 ship 의 무결성 위험. 본 ADR 이 closure 되어야 Pack 6 도메인이 production-safe.