다크모드
계약 문서 신뢰 체인 프론트엔드 핸드오프
위치와 컴포넌트
계약 상세 3xl sheet의 READ 모드 연결 컬렉션으로 표시한다.
text
ContractManagementMainOrg
└─ 계약 문서·증명 disclosure
└─ ContractDocumentTrustMol
├─ 4단계 evidence card grid
├─ SHA-256·증명 시각 table
├─ preview 3xl sheet
└─ 생성·재시도·다운로드 actions연결 컬렉션이므로 계약 속성 전체 편집 중에는 표시하지 않는다. 계약 저장과 문서 요청은 한 transaction이나 한 버튼으로 묶지 않는다. 계약관리는 문서 처리 실패와 무관하게 동작해야 한다.
데이터 흐름
contractDocument.js: 현재 계약 aggregate를contract-document.v1snapshot으로 projection하고 안전하게 escape한 EDS print HTML을 만든다.documentTrustRepo.js: generic source RPC·normalization·private Storage signed URL을 소유한다.useDocumentTrust.js: source별 list, create/retry upsert와 loading/error를 관리한다.ContractDocumentTrustMol.vue: source를contract-management / contract / contract.id / currentVersion으로 전달한다.
한 계약이 새 버전으로 수정되면 sourceRevision이 바뀌므로 이전 request를 덮어쓰지 않는다. 현재 버전 문서가 없을 때만 PDF·증명 생성을 노출한다.
상태 표현
4개 단계는 계약 버전 → PDF·해시 → 타임스탬프 → 전자문서 보관 순서다.
- 완료:
badge-success-moderate - 처리 중:
badge-info-moderate - 대기:
badge-neutral-subtle - 미요청:
badge-neutral-minimal - 오류:
badge-destructive-subtle
색만으로 상태를 전달하지 않고 항상 상태 텍스트를 함께 표시한다. 외부 사업자명은 상태·도움말·오류에 노출하지 않는다.
미리보기와 다운로드
미리보기는 3xl 오른쪽 sheet이며 SSOT의 .print, .print-document, .print-a4-content를 그대로 소비한다. 로컬 scoped CSS나 page override는 없다.
- 원본 PDF·타임스탬프 증명: Supabase backend이고 storage key가 있을 때만 표시한다.
- signed URL 유효시간: 60초, download filename 지정.
- 검증정보: backend 종류와 무관하게 브라우저에서 JSON Blob으로 생성한다.
- local mock은 완결 상태를 보여주지만 저장된 원본 파일 다운로드는 제공하지 않는다.
보안과 확장
v-html에는 contractDocumentBodyHtml()이 모든 source text를 escape한 결과만 전달한다. 임의 HTML이나 server HTML을 직접 넣지 않는다.
다른 상품이 연결할 때 이 컴포넌트를 복사하지 않고 원본 상품 전용 snapshot builder, 공용 repo/composable, 도메인 용어에 맞는 thin UI adapter로 분리한다.
전자서명은 현재 체인에 포함하지 않는다. 이후 서명자 본인확인·의사표시·서명 완료본을 별도 aggregate로 설계한 뒤, 완료본 PDF를 새 trust request로 보관한다.
테스트
ContractDocumentTrustUi.spec.js: 단계명, EDS 어휘, preview/retry/download, 공급사명 비노출contractDocument.spec.js: snapshot과 HTML escapingdocumentTrustRepo.spec.js: RPC mapping, mock evidence chain, 오류 문구