제안서·도면 모듈 신규 통합 — docs.crowny.org 문서 허브 확장
개요
CrownyDoc 견적서 모듈(v2.0)에 이어 제안서(v1.0) + 도면(v1.0) 모듈을 새로 구축. docs.crowny.org 가 견적서·제안서·도면 3대 문서 작성·연동 허브로 자리잡음.
- 견적서: 가로형 A4 — 재료비/노무비/경비 3분 표준 양식 (이전 작업)
- 제안서: 세로형 A4 — 표지(키비주얼·기대효과3) + 5절(배경/솔루션/일정/ROI/보증)
- 도면: SVG 평면도 — 사각·선·원·텍스트 + 축척 mm/㎡ 자동 + BOM→견적 변환
무엇을 했는지
P1. 데이터 모델 (정통 한글 식별자)
제안서/data/교회LED표준.json— 광주은광교회 LED 제안 (총투자비 20,504,000원, 일정 8일)제안서/data/표준템플릿.json— 빈 양식도면/data/교회LED평면도.json— 본당 9×6m 평면, LED 3200×900mm 도형 (BOM 자동 연동)도면/data/표준템플릿.json— 빈 평면도
P2. HTML 6종 (외부 의존성 0건, 시스템 폰트만)
| 파일 | 줄수 | 역할 |
|---|---|---|
제안서/제안서출력.html | 551 | A4 세로 출력 렌더러, @media print portrait |
제안서/제안편집기.html | 1001 | 인라인 편집기, 표지·5절 본문·일정·표·첨부 편집 |
제안서/목록.html | 398 | 저장 목록, 신규/복제/삭제 |
도면/도면출력.html | 397 | SVG 출력 + 그리드 + 범례 + 축척 |
도면/도면편집기.html | 1195 | SVG 드로잉, 도구 패널, 속성 패널, BOM 입력, undo |
도면/목록.html | 441 | 도면 저장 목록 |
- CSS 변수 동일 (
--accent: #3a6ee8,--ink,--line,--soft,--fill,--fill2) - 툴바·인쇄 CSS·표 테두리 패턴 일치
- 한글 식별자/UI 그대로
P3. 한선씨 RPN 정통 엔진 (헌법 9조 준수)
| 파일 | RPN 정통 | 검증 |
|---|---|---|
제안서/한선씨/제안엔진.rpn.한선 | ✓ | 일정 8일, 총투자 20,504,000, 손익분기 11년차 |
제안서/한선씨/제안저장소.rpn.한선 | ✓ | ID 검증 + 정렬 비교 |
도면/한선씨/도면엔진.rpn.한선 | ✓ | 본당 9000×6000mm, LED 2.88㎡ 자동 산출 |
제안서/한선씨/제안서뷰어.한선 | (고수준) | JSON→HTML 변환기 (서브에이전트 보너스) |
P4. 서버 라우트 (server-docs.js +200줄)
/제안서 → 제안편집기.html
/제안서/api/list → 저장 목록 JSON
/제안서/api/load?id=<id> → 단일 로드
/제안서/api/save POST → 저장 (자동 ID 'p' + timestamp36)
/제안서/api/delete?id=<id> → 삭제
/도면 → 도면편집기.html
/도면/api/list → 저장 목록 JSON (도형수 포함)
/도면/api/load?id=<id> → 단일 로드
/도면/api/save POST → 저장 (자동 ID 'd' + timestamp36)
/도면/api/delete?id=<id> → 삭제
/도면/api/to-quote POST → 도면 BOM 도형 → 가로형견적서 자동 변환
도면 → 견적 변환 로직: 도형 중 BOM 객체가 있는 것만 추출, 축척 적용해 mm 치수 산출,
수량_자동: true 면 면적 ㎡ 자동, 아니면 1식. 단가는 0 으로 두고 사용자가 채우게 한다.
P5. 허브 통합 (홈.html)
- 상단 nav:
/제안서/도면링크 추가 - 통계:
v1.0 제안서·도면 NEW추가 - 카드 2개 신규 (제안서, 도면) — 견적서 카드와 동일 디자인 톤
- API 엔드포인트 카드:
/제안서/api/*/도면/api/*노출
E2E 검증 결과
=== 제안서 === POST save → {"ok":true,"id":"pmpnj95joll9k"}
list → 제안번호 PROP-LED-20260527-001 / 총투자비 20504000 / 발주처 광주은광교회
=== 도면 === POST save → {"ok":true,"id":"dmpnj95kej3m0"}
list → 도면번호 DWG-LED-20260527-001 / 도형수 4 / 참조견적 EST-LED-20260527-001
to-quote → led-1(LED P1.86) BOM 자동 추출 + 면적 2.88㎡ 자동
=== 라우트 === / 200, /제안서 200, /도면 200, /제안서/api/list 200, /도면/api/list 200, /도면/api/to-quote 200
관련 파일
CrownyDoc/제안서/
제안서출력.html 제안편집기.html 목록.html
data/교회LED표준.json data/표준템플릿.json data/저장/
한선씨/제안엔진.rpn.한선 한선씨/제안저장소.rpn.한선 한선씨/제안서뷰어.한선
CrownyDoc/도면/
도면출력.html 도면편집기.html 목록.html
data/교회LED평면도.json data/표준템플릿.json data/저장/
한선씨/도면엔진.rpn.한선
CrownyDoc/server-docs.js +200줄 (라인 ~1756 직후)
CrownyDoc/홈.html nav + 카드 + 통계 갱신
접속:
docs.crowny.org/제안서— 편집기docs.crowny.org/제안서/제안서출력.html— 출력 샘플docs.crowny.org/도면— 편집기docs.crowny.org/도면/도면출력.html— 출력 샘플
잔여 이슈 / 다음 고도화
- 견적서 ↔ 제안서 양방향 첨부 동기화 (현재 제안서 → 견적서 참조만 단방향)
- 도면 → 견적서 자동 단가 채움 (표준단가표.json 참조)
- 도면 다중 페이지 / 단면도 / 입면도 양식 확장
- PDF 직접 생성 (현재 print 의존)
- 443/80 인스턴스 코드 동기화 (현재 4100 만 갱신)
- 한선씨 정통 뷰어: 도면 SVG 생성기 한선씨 버전 (
도면뷰어.한선) - 작업장(현장) 사진 첨부·도면 매핑
학습 패턴 등록
~/.claude/scripts/crownycode-learn.sh add 제안엔진_정통RPN ... → 등록
~/.claude/scripts/crownycode-learn.sh add 도면엔진_정통RPN ... → 등록
~/.claude/scripts/crownycode-learn.sh add 제안저장소_정통RPN ... → 등록
크라우니코드 비중:
- 직접매칭: 0 (신규 도메인)
- 규칙변환: 4 (견적서 라우트·CSS 변수·저장소 API·정통RPN 패턴 재사용)
- 클로드/에이전트 생성: 11 (HTML 6 + RPN 3 + JSON 4 + 라우트 1)
- 약 30% 크라우니코드 비중 (다음 동일 도메인 작업 시 50%+ 예상)