← 목록
기타 2026-05-27 5KB 읽기 6분

Stage 4 — 비즈니스 미니앱 CDF v2 마이그레이션 어댑터

개요

CrownyDoc 5트랙 중 비즈니스 미니앱(견적서/제안서/도면) 전용 JSON 포맷을 CDF v2 공통 데이터 모델로 양방향 변환하는 어댑터 레이어를 구현했다. 3종 JS 변환 함수 + 한선씨 RPN 검증 파일 5개 = 총 6개 파일 신규 생성.

무엇을 했는지

생성 파일 (6개, 1199줄)

파일줄수역할
견적서/한선씨/견적→cdf.rpn.한선127견적서 → CDF v2 수치 검증 (RPN 정통)
제안서/한선씨/제안→cdf.rpn.한선122제안서 → CDF v2 수치 검증 (RPN 정통)
도면/한선씨/도면→cdf.rpn.한선130도면 → CDF v2 수치 검증 (RPN 정통)
lib/legacy-merge.js6333종 양방향 변환기 (CommonJS + 브라우저 듀얼)
lib/legacy-merge.한선187legacy-merge.js 한선씨 동반 (RPN 정통)
(이 파일) docs/2026-05-27-stage4-cdf-v2-마이그레이션.md작업 문서

변환 규칙 요약

견적서 → CDF v2

  • 공급자/공급받는자 → __bizMeta
  • 공종 N개 → sheet 셀 N개 (공종셀1..N)
  • 특기사항[] → text 셀 (불릿 리스트)
  • 정산결과 → text 셀 (합계셀) + __bizMeta.정산옵션
  • 시냅스: 공종→합계 depend, 합계→특기 reference
  • 광주은광교회 LED 기준: 원가합 18,645,720 → 공급가 18,640,000 → 부가세 1,864,000 → 합계 20,504,000
제안서 → CDF v2
  • 표지(키비주얼/한줄요약/기대효과3) → text 셀 (h1+요약+불릿)
  • 본문[5절] 각 절 → text 셀; 절 내 표/일정 → sheet 셀 embed
  • 총투자비(VAT 포함) 역산: × 100 / 110 → 공급가액 확정
  • 총 셀 8개, 시냅스 7개
도면 → CDF v2
  • 도형 타입 정규화: 사각→rect, 선→line, 원→circle, 텍스트→text
  • 전체 도형/연결/레이어/범례 → diagram 셀 1개
  • BOM 있는 도형 → __bizMeta.BOM[]
  • px→mm 변환: 캔버스 10000×7000mm, LED 3200×900mm (면적 28,800cm²)
  • 참조 견적 링크 → 외부참조 시냅스 (reference)

JS 변환기 API (lib/legacy-merge.js)

javascript// 전방 변환
CrownyLegacyMerge.quoteToCDF(quoteJson)    // 견적서 → CDF v2
CrownyLegacyMerge.proposalToCDF(proposalJson) // 제안서 → CDF v2
CrownyLegacyMerge.diagramToCDF(diagramJson)   // 도면 → CDF v2

// 역방향 변환
CrownyLegacyMerge.cdfToQuote(cdfV2)    // CDF v2 → 견적서
CrownyLegacyMerge.cdfToProposal(cdfV2) // CDF v2 → 제안서
CrownyLegacyMerge.cdfToDiagram(cdfV2)  // CDF v2 → 도면

// 일괄 마이그레이션
CrownyLegacyMerge.migrateAll({ 견적서: [...], 제안서: [...], 도면: [...] })
// → { processed: N, 견적서: M, 제안서: K, 도면: J, errors: [...] }

핵심 기술 이슈 해결

hanseonc_std 자연 반올림 보정: RPN VM은 뱅커스 라운딩(|r|≤|b|/2) 사용 → 절사 단위 1만 원 처리 시 올림 오류 발생. 해법:

원가합 10000 나눠 10000 곱해 →임시
임시 원가합 크다 @보정 만약
; 임시가 크면 한 단위 빼서 내림

도형 타입 정규화: 레거시 JSON의 한국어 타입(사각/선/원)을 CDF v2 영어(rect/line/circle/text)로 양방향 매핑. JS에서 Map 객체로 구현, 한선씨에서 숫자 코드(1=사각/2=선/3=원/4=텍스트)로 표현.

제안서 VAT 역산: 총투자비가 VAT 포함 금액일 때 → × 100 / 110 정수 RPN 연산으로 공급가액 확정.

관련 파일 경로

/Users/ef/CrownyDoc/lib/legacy-merge.js          # JS 3종 양방향 변환기
/Users/ef/CrownyDoc/lib/legacy-merge.한선         # 한선씨 RPN 동반
/Users/ef/CrownyDoc/lib/cdf-v2-spec.md           # CDF v2 스펙 (TypeScript 인터페이스)
/Users/ef/CrownyDoc/견적서/한선씨/견적→cdf.rpn.한선
/Users/ef/CrownyDoc/제안서/한선씨/제안→cdf.rpn.한선
/Users/ef/CrownyDoc/도면/한선씨/도면→cdf.rpn.한선
/Users/ef/CrownyDoc/견적서/data/교회LED표준.json  # 테스트 입력 (6공종, 14항목)
/Users/ef/CrownyDoc/제안서/data/교회LED표준.json  # 테스트 입력 (총투자비 20,504,000)
/Users/ef/CrownyDoc/도면/data/교회LED평면도.json  # 테스트 입력 (4도형, BOM 1개)

잔여 이슈

  1. 한선씨 RPN 컴파일 미검증hanseonc_std.toau 실행 권한 불허로 3개 .rpn.한선 파일 실제 컴파일+실행 미완. 다음 세션에서:
bash   cd /Users/ef/CrownyOS/crownyc
   cat /Users/ef/CrownyDoc/견적서/한선씨/견적→cdf.rpn.한선 \
     | ./crownyc run hanseonc_std.toau > /tmp/견적cdf.toau
   ./crownyc run /tmp/견적cdf.toau
   
  1. server-docs.js 연동 미완GET /api/migrate?type=quote 등 엔드포인트 추가 검토 가능 (다른 세션 담당)
  2. INVENTORY.md 업데이트 필요 — Stage 4 어댑터 레이어 항목 추가 (다음 CrownyDoc 세션에서)
  3. 일괄 마이그레이션 테스트migrateAll() Node.js 통합 테스트 미실행

Stage 현황

Stage파일상태
Stage 0CDF v2 스펙 (lib/cdf-v2-spec.md)✓ 완료
Stage 2도형 라이브러리·레이어·그룹 (서브에이전트)✓ 완료
Stage 3트랙1·2 .cdf v2 호환 어댑터 (서브에이전트)✓ 완료
Stage 4비즈니스 미니앱 CDF v2 어댑터이번 세션