CDF 제안서→계약서 변환 + 맞춤 프리필 + 한선씨 동반
작업 내용
1. 제안서 → 계약서 변환 워크플로
POST /api/proposals/:id/to-contract — 제안서 기반 8조 계약서 CDF 자동 생성
제1조 당사자 / 제2조 공급범위 / 제3조 대금 / 제4조 기간(36개월 자동갱신) / 제5조 납기 / 제6조 유지보수 / 제7조 법령 / 제8조 분쟁 / 제9조 서명
signatures 필드: 발주자(갑) + 수주자(을) 2개 서명 슬롯
GET /api/contracts/:id.cdf — 계약서 CDF 다운로드
POST /api/contracts/:id/sign — 역할별 전자서명 (양측 완료 시 status=signed)
GET /api/proposals/:id.cdf — 제안서 CDF 다운로드2. 파트너별 맞춤 CDF 자동생성
GET /api/cdf/brochure?kind=disaster&leadId=...&partnerId=...
- solution.crowny.org에서 기본 소개서 fetch → lead 정보(기관명/지역/담당자) prefill → partner 정보 issuer 삽입
- 결과: "수원시청 맞춤 — 재난경보솔루션 소개서" ✅
- Content-Disposition 한글 인코딩 이슈 해결 (Node.js 25 strict)
3. 한선씨 CDF 렌더러 (.한선 동반)
/Users/ef/crowny-solution/lib/cdf.한선
- cdf.js 동일 로직: CDF생성, 섹션생성, 리스트섹션, 재난경보소개서, 제안서생성, 계약서생성
- 간이해시 함수 (HMAC 대용, VM 제약)
- 테스트: 재난경보 소개서 + 수원시청 제안서 + 수원시청 계약서
E2E 테스트 결과
리드(수원시청, 경기) → 제안서(QUAKEON+재난+화재) → CDF 다운 200 ✅
→ 계약서 변환(제1~9조) → CDF(kind:contract, 수원시청 공급계약서) ✅
→ 발주자 서명(이담당) → 서명기록 ✅
→ 맞춤 브로슈어("수원시청 맞춤 — 재난경보솔루션 소개서") ✅
파일
/Users/ef/crowny-network/lib/cdf.js (신규)
/Users/ef/crowny-network/server.js (CDF 7개 API 추가)
/Users/ef/crowny-solution/lib/cdf.한선 (한선씨 동반)