From b29d78aeca1d3d2672c338fb386d2d863c6f5120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sun, 15 Mar 2026 11:11:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[pricing]=20=EB=AC=B4=EB=A3=8C=20?= =?UTF-8?q?=EC=B2=B4=ED=97=98=20=EA=B8=B0=EA=B0=84=EC=9D=84=201=EC=A3=BC?= =?UTF-8?q?=EC=9D=BC(7=EC=9D=BC)=EB=A1=9C=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 슬라이드 8: 무료 체험 설명 1/2/3/6개월 → 1주일(7일) - 슬라이드 9: 1년차 비용 계산 예시 반영 (무료 3개월 → 1주일) - 슬라이드 12: 영업 팁, 고객 FAQ 무료 체험 기간 수정 --- guides/generate-pricing-guide.cjs | 713 ++++++++++++++++++++++++++++++ 1 file changed, 713 insertions(+) create mode 100644 guides/generate-pricing-guide.cjs diff --git a/guides/generate-pricing-guide.cjs b/guides/generate-pricing-guide.cjs new file mode 100644 index 0000000..a500887 --- /dev/null +++ b/guides/generate-pricing-guide.cjs @@ -0,0 +1,713 @@ +const path = require('path'); +module.paths.unshift(path.join(require('os').homedir(), '.claude/skills/pptx-skill/scripts/node_modules')); + +const PptxGenJS = require('pptxgenjs'); + +async function main() { + const pres = new PptxGenJS(); + pres.defineLayout({ name: 'CUSTOM_16x9', width: 10, height: 5.625 }); + pres.layout = 'CUSTOM_16x9'; + + // ─── 브랜드 컬러 ─── + const C = { + dark: '0D1B2A', + navy: '1B2838', + green: '2E7D32', + greenLight: '4CAF50', + greenBg: 'E8F5E9', + greenBorder: 'C8E6C9', + blue: '1565C0', + blueBg: 'E3F2FD', + blueBorder: 'BBDEFB', + orange: 'E65100', + orangeBg: 'FFF3E0', + orangeBorder: 'FFE0B2', + red: 'C62828', + redBg: 'FFEBEE', + white: 'FFFFFF', + gray50: 'FAFAFA', + gray100: 'F5F5F5', + gray200: 'EEEEEE', + gray400: 'BDBDBD', + gray600: '757575', + gray800: '424242', + text: '212121', + textSub: '616161', + }; + + // ─── 공통 함수 ─── + function addFooter(slide) { + slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.25, w: 10, h: 0.375, fill: { color: C.dark } }); + slide.addText('SAM 가격정책 안내서 | (주)코드브릿지엑스', { + x: 0.5, y: 5.25, w: 9, h: 0.375, + fontSize: 7, color: '8899AA', fontFace: 'Arial' + }); + } + + function addPageTitle(slide, title, subtitle) { + // 왼쪽 액센트 바 + slide.addShape(pres.ShapeType.rect, { x: 0.5, y: 0.35, w: 0.06, h: 0.4, fill: { color: C.greenLight } }); + slide.addText(title, { + x: 0.72, y: 0.3, w: 7, h: 0.5, + fontSize: 20, bold: true, color: C.text, fontFace: 'Arial' + }); + if (subtitle) { + slide.addText(subtitle, { + x: 0.72, y: 0.75, w: 7, h: 0.3, + fontSize: 10, color: C.textSub, fontFace: 'Arial' + }); + } + } + + function addSlideNumber(slide, num, total) { + slide.addText(`${num} / ${total}`, { + x: 8.5, y: 5.25, w: 1, h: 0.375, + fontSize: 7, color: '8899AA', align: 'right', fontFace: 'Arial' + }); + } + + const TOTAL = 13; + + // ═══════════════════════════════════════════════════════ + // 슬라이드 1: 표지 + // ═══════════════════════════════════════════════════════ + const s1 = pres.addSlide(); + s1.background = { fill: C.dark }; + + // 상단 그린 라인 + s1.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.greenLight } }); + + // SAM 로고 영역 + s1.addShape(pres.ShapeType.roundRect, { x: 0.7, y: 1.2, w: 1.4, h: 0.5, rectRadius: 0.08, fill: { color: C.greenLight } }); + s1.addText('SAM', { x: 0.7, y: 1.2, w: 1.4, h: 0.5, fontSize: 22, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // 메인 타이틀 + s1.addText('가격정책 쉬운 안내서', { + x: 0.7, y: 2.0, w: 8.6, h: 0.8, + fontSize: 36, bold: true, color: C.white, fontFace: 'Arial' + }); + s1.addText('영업파트너를 위한 SAM 서비스 요금 및 수당 가이드', { + x: 0.7, y: 2.8, w: 8.6, h: 0.5, + fontSize: 14, color: '8899AA', fontFace: 'Arial' + }); + + // 하단 정보 + s1.addShape(pres.ShapeType.rect, { x: 0.7, y: 3.8, w: 8.6, h: 0.01, fill: { color: '2A3A4A' } }); + s1.addText('(주)코드브릿지엑스 | Smart Automation Management | 2026', { + x: 0.7, y: 4.0, w: 8.6, h: 0.4, + fontSize: 10, color: '667788', fontFace: 'Arial' + }); + + // 하단 키워드 뱃지 + const badges = ['개발비 + 구독료', '수당 체계', '할인 정책', '시뮬레이터']; + badges.forEach((b, i) => { + const bx = 0.7 + i * 2.2; + s1.addShape(pres.ShapeType.roundRect, { x: bx, y: 4.55, w: 2, h: 0.35, rectRadius: 0.06, fill: { color: '1B2838' }, line: { color: '2A3A4A', width: 0.5 } }); + s1.addText(b, { x: bx, y: 4.55, w: 2, h: 0.35, fontSize: 9, color: C.greenLight, align: 'center', valign: 'middle', fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 2: 요금 구조 한눈에 + // ═══════════════════════════════════════════════════════ + const s2 = pres.addSlide(); + s2.background = { fill: C.white }; + addFooter(s2); + addPageTitle(s2, '요금 구조 한눈에 보기', '고객이 내는 돈은 딱 2가지뿐'); + addSlideNumber(s2, 2, TOTAL); + + // 개발비 카드 + s2.addShape(pres.ShapeType.roundRect, { x: 0.8, y: 1.4, w: 4, h: 3.2, rectRadius: 0.15, fill: { color: C.greenBg }, line: { color: C.greenBorder, width: 1.5 } }); + s2.addShape(pres.ShapeType.ellipse, { x: 2.3, y: 1.7, w: 1, h: 1, fill: { color: C.green } }); + s2.addText('1', { x: 2.3, y: 1.7, w: 1, h: 1, fontSize: 36, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s2.addText('개발비', { x: 0.8, y: 2.85, w: 4, h: 0.5, fontSize: 22, bold: true, color: C.green, align: 'center', fontFace: 'Arial' }); + s2.addText('처음 한 번만 내는 돈', { x: 0.8, y: 3.3, w: 4, h: 0.35, fontSize: 13, color: C.text, align: 'center', fontFace: 'Arial' }); + // 비유 박스 + s2.addShape(pres.ShapeType.roundRect, { x: 1.4, y: 3.85, w: 2.8, h: 0.5, rectRadius: 0.08, fill: { color: C.white } }); + s2.addText('비유: 집을 짓는 비용', { x: 1.4, y: 3.85, w: 2.8, h: 0.5, fontSize: 11, color: C.green, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // 구독료 카드 + s2.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 1.4, w: 4, h: 3.2, rectRadius: 0.15, fill: { color: C.blueBg }, line: { color: C.blueBorder, width: 1.5 } }); + s2.addShape(pres.ShapeType.ellipse, { x: 6.7, y: 1.7, w: 1, h: 1, fill: { color: C.blue } }); + s2.addText('2', { x: 6.7, y: 1.7, w: 1, h: 1, fontSize: 36, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s2.addText('구독료', { x: 5.2, y: 2.85, w: 4, h: 0.5, fontSize: 22, bold: true, color: C.blue, align: 'center', fontFace: 'Arial' }); + s2.addText('매달 내는 돈', { x: 5.2, y: 3.3, w: 4, h: 0.35, fontSize: 13, color: C.text, align: 'center', fontFace: 'Arial' }); + s2.addShape(pres.ShapeType.roundRect, { x: 5.8, y: 3.85, w: 2.8, h: 0.5, rectRadius: 0.08, fill: { color: C.white } }); + s2.addText('비유: 매달 내는 관리비', { x: 5.8, y: 3.85, w: 2.8, h: 0.5, fontSize: 11, color: C.blue, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // VAT 안내 + s2.addText('※ 모든 금액은 부가세(VAT) 별도', { x: 0.8, y: 4.8, w: 8.4, h: 0.3, fontSize: 9, color: C.gray600, align: 'center', fontFace: 'Arial' }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 3: 기본 상품 가격표 + // ═══════════════════════════════════════════════════════ + const s3 = pres.addSlide(); + s3.background = { fill: C.white }; + addFooter(s3); + addPageTitle(s3, '기본 상품 가격표'); + addSlideNumber(s3, 3, TOTAL); + + // 제조업 기본 패키지 - 메인 카드 + s3.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 1.2, w: 9, h: 1.5, rectRadius: 0.12, fill: { color: C.green } }); + s3.addText([ + { text: '★ ', options: { fontSize: 14, color: 'FFD700' } }, + { text: '제조업 기본 패키지', options: { fontSize: 18, bold: true, color: C.white } }, + { text: ' (가장 많이 팔리는 상품)', options: { fontSize: 11, color: 'B9F6CA' } } + ], { x: 0.8, y: 1.25, w: 5.5, h: 0.45, fontFace: 'Arial' }); + s3.addText('품목관리 → 견적 → 수주 → 생산 → 출하 + ERP(인사/회계) 무료', { + x: 0.8, y: 1.7, w: 5.5, h: 0.35, fontSize: 10, color: 'C8E6C9', fontFace: 'Arial' + }); + // 가격 + s3.addShape(pres.ShapeType.roundRect, { x: 6.5, y: 1.35, w: 2.7, h: 1.1, rectRadius: 0.08, fill: { color: '1B5E20' } }); + s3.addText([ + { text: '개발비 ', options: { fontSize: 9, color: 'A5D6A7' } }, + { text: '2,000만원', options: { fontSize: 18, bold: true, color: C.white } }, + { text: '\n구독료 ', options: { fontSize: 9, color: 'A5D6A7' } }, + { text: '50만원/월', options: { fontSize: 15, bold: true, color: 'B9F6CA' } } + ], { x: 6.5, y: 1.35, w: 2.7, h: 1.1, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // 개별 모듈 테이블 + s3.addText('개별 모듈 (필요한 것만 추가)', { x: 0.5, y: 2.9, w: 4, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + + const modules = [ + ['QR코드 관리', '1,020만원', '5만원'], + ['사진/출하 관리', '1,920만원', '10만원'], + ['검사/토큰 적용', '1,020만원', '5만원'], + ['이카운트 연동', '1,920만원', '10만원'], + ]; + + // 테이블 헤더 + s3.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 3.3, w: 9, h: 0.35, rectRadius: 0.06, fill: { color: C.gray200 } }); + s3.addText('모듈명', { x: 0.7, y: 3.3, w: 3, h: 0.35, fontSize: 9, bold: true, color: C.gray600, fontFace: 'Arial' }); + s3.addText('개발비', { x: 4.5, y: 3.3, w: 2, h: 0.35, fontSize: 9, bold: true, color: C.gray600, align: 'center', fontFace: 'Arial' }); + s3.addText('구독료/월', { x: 7, y: 3.3, w: 2, h: 0.35, fontSize: 9, bold: true, color: C.gray600, align: 'center', fontFace: 'Arial' }); + + modules.forEach((m, i) => { + const ry = 3.7 + i * 0.38; + if (i % 2 === 0) s3.addShape(pres.ShapeType.rect, { x: 0.5, y: ry, w: 9, h: 0.38, fill: { color: C.gray50 } }); + s3.addText(m[0], { x: 0.7, y: ry, w: 3, h: 0.38, fontSize: 10, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s3.addText(m[1], { x: 4.5, y: ry, w: 2, h: 0.38, fontSize: 10, bold: true, color: C.green, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s3.addText(m[2], { x: 7, y: ry, w: 2, h: 0.38, fontSize: 10, color: C.blue, align: 'center', valign: 'middle', fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 4: 대형 패키지 + 추가 옵션 + // ═══════════════════════════════════════════════════════ + const s4 = pres.addSlide(); + s4.background = { fill: C.white }; + addFooter(s4); + addPageTitle(s4, '대형 패키지 & 추가 옵션'); + addSlideNumber(s4, 4, TOTAL); + + // 대형 패키지 + s4.addText('대형 패키지', { x: 0.5, y: 1.15, w: 4, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + + const bigPkgs = [ + ['공사관리 패키지', '4,000만원', '20만원/월', '시공 현장 관리'], + ['공정/정부지원사업', '8,000만원', '40만원/월', '정부지원 + 전체 공정'], + ]; + bigPkgs.forEach((p, i) => { + const bx = 0.5 + i * 4.6; + s4.addShape(pres.ShapeType.roundRect, { x: bx, y: 1.55, w: 4.3, h: 1.3, rectRadius: 0.1, fill: { color: C.navy } }); + s4.addText(p[0], { x: bx + 0.2, y: 1.6, w: 3.9, h: 0.35, fontSize: 13, bold: true, color: C.white, fontFace: 'Arial' }); + s4.addText(p[3], { x: bx + 0.2, y: 1.9, w: 3.9, h: 0.25, fontSize: 9, color: '8899AA', fontFace: 'Arial' }); + s4.addText([ + { text: '개발비 ', options: { fontSize: 9, color: '8899AA' } }, + { text: p[1], options: { fontSize: 14, bold: true, color: C.greenLight } }, + ], { x: bx + 0.2, y: 2.25, w: 2, h: 0.35, fontFace: 'Arial' }); + s4.addText([ + { text: '구독료 ', options: { fontSize: 9, color: '8899AA' } }, + { text: p[2], options: { fontSize: 12, bold: true, color: '64B5F6' } }, + ], { x: bx + 2.2, y: 2.25, w: 2, h: 0.35, fontFace: 'Arial' }); + }); + + // 추가 옵션 + s4.addText('추가 옵션 (선택 사항)', { x: 0.5, y: 3.1, w: 4, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + + const options = [ + ['생산공정 1개 추가', '+500만원', '+10만원'], + ['품질관리 (인정검사)', '+2,000만원', '+50만원'], + ['사진 등록', '-', '+10만원'], + ['챗봇 / 녹음 / 업무일지', '-', '각 +20만원'], + ['연구소 연구노트', '-', '+5만원'], + ]; + + s4.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 3.5, w: 9, h: 0.3, rectRadius: 0.05, fill: { color: C.gray200 } }); + s4.addText('옵션명', { x: 0.7, y: 3.5, w: 3.5, h: 0.3, fontSize: 8, bold: true, color: C.gray600, fontFace: 'Arial' }); + s4.addText('개발비 추가', { x: 4.5, y: 3.5, w: 2, h: 0.3, fontSize: 8, bold: true, color: C.gray600, align: 'center', fontFace: 'Arial' }); + s4.addText('구독료 추가/월', { x: 7, y: 3.5, w: 2, h: 0.3, fontSize: 8, bold: true, color: C.gray600, align: 'center', fontFace: 'Arial' }); + + options.forEach((o, i) => { + const ry = 3.83 + i * 0.3; + if (i % 2 === 0) s4.addShape(pres.ShapeType.rect, { x: 0.5, y: ry, w: 9, h: 0.3, fill: { color: C.gray50 } }); + s4.addText(o[0], { x: 0.7, y: ry, w: 3.5, h: 0.3, fontSize: 9, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s4.addText(o[1], { x: 4.5, y: ry, w: 2, h: 0.3, fontSize: 9, bold: true, color: o[1] === '-' ? C.gray400 : C.green, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s4.addText(o[2], { x: 7, y: ry, w: 2, h: 0.3, fontSize: 9, color: C.blue, align: 'center', valign: 'middle', fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 5: 수당 핵심 공식 + // ═══════════════════════════════════════════════════════ + const s5 = pres.addSlide(); + s5.background = { fill: C.white }; + addFooter(s5); + addPageTitle(s5, '내 수당은 얼마인가?', '핵심 공식 — 이것만 기억하면 된다'); + addSlideNumber(s5, 5, TOTAL); + + // 공식 박스 + s5.addShape(pres.ShapeType.roundRect, { x: 1, y: 1.3, w: 8, h: 1.2, rectRadius: 0.15, fill: { color: C.dark } }); + s5.addText([ + { text: '내 수당', options: { fontSize: 28, bold: true, color: C.greenLight } }, + { text: ' = ', options: { fontSize: 28, color: C.white } }, + { text: '최종 개발비', options: { fontSize: 28, bold: true, color: '64B5F6' } }, + { text: ' × ', options: { fontSize: 28, color: C.white } }, + { text: '수당률', options: { fontSize: 28, bold: true, color: 'FFB74D' } }, + ], { x: 1, y: 1.35, w: 8, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + s5.addText([ + { text: '※ 구독료는 수당 계산에 포함 안 됨! ', options: { fontSize: 10, color: 'FF8A80' } }, + { text: '※ 할인 적용 후 개발비가 기준!', options: { fontSize: 10, color: 'FF8A80' } }, + ], { x: 1, y: 2.05, w: 8, h: 0.35, align: 'center', fontFace: 'Arial' }); + + // 개인 vs 단체 + // 개인 + s5.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 2.85, w: 4.3, h: 2.1, rectRadius: 0.12, fill: { color: C.greenBg }, line: { color: C.greenBorder, width: 1 } }); + s5.addText('개인 가입', { x: 0.5, y: 2.85, w: 4.3, h: 0.45, fontSize: 14, bold: true, color: C.green, align: 'center', valign: 'middle', fontFace: 'Arial' }); + const personalItems = [ + ['파트너 수당', '20%', C.green], + ['매니저 수당', '5%', C.blue], + ['유치자 수당', '3%', C.gray600], + ]; + personalItems.forEach((item, i) => { + const iy = 3.4 + i * 0.45; + s5.addShape(pres.ShapeType.roundRect, { x: 0.8, y: iy, w: 3.7, h: 0.38, rectRadius: 0.06, fill: { color: C.white } }); + s5.addText(item[0], { x: 0.95, y: iy, w: 2, h: 0.38, fontSize: 11, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s5.addText(item[1], { x: 3, y: iy, w: 1.3, h: 0.38, fontSize: 14, bold: true, color: item[2], align: 'right', valign: 'middle', fontFace: 'Arial' }); + }); + + // 단체 + s5.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 2.85, w: 4.3, h: 2.1, rectRadius: 0.12, fill: { color: C.orangeBg }, line: { color: C.orangeBorder, width: 1 } }); + s5.addText('단체 가입', { x: 5.2, y: 2.85, w: 4.3, h: 0.45, fontSize: 14, bold: true, color: C.orange, align: 'center', valign: 'middle', fontFace: 'Arial' }); + const groupItems = [ + ['단체 수당', '30%', C.orange], + ['매니저 수당', '0%', C.gray400], + ['유치자 수당', '3%', C.gray600], + ]; + groupItems.forEach((item, i) => { + const iy = 3.4 + i * 0.45; + s5.addShape(pres.ShapeType.roundRect, { x: 5.5, y: iy, w: 3.7, h: 0.38, rectRadius: 0.06, fill: { color: C.white } }); + s5.addText(item[0], { x: 5.65, y: iy, w: 2, h: 0.38, fontSize: 11, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s5.addText(item[1], { x: 7.7, y: iy, w: 1.3, h: 0.38, fontSize: 14, bold: true, color: item[2], align: 'right', valign: 'middle', fontFace: 'Arial' }); + }); + + // 합계 뱃지 + s5.addShape(pres.ShapeType.roundRect, { x: 1.5, y: 4.7, w: 2, h: 0.35, rectRadius: 0.06, fill: { color: C.green } }); + s5.addText('합계 28%', { x: 1.5, y: 4.7, w: 2, h: 0.35, fontSize: 11, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s5.addShape(pres.ShapeType.roundRect, { x: 6.2, y: 4.7, w: 2, h: 0.35, rectRadius: 0.06, fill: { color: C.orange } }); + s5.addText('합계 33%', { x: 6.2, y: 4.7, w: 2, h: 0.35, fontSize: 11, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 6: 수당 계산 예시 + // ═══════════════════════════════════════════════════════ + const s6 = pres.addSlide(); + s6.background = { fill: C.white }; + addFooter(s6); + addPageTitle(s6, '수당 계산 예시', '제조업 기본 패키지 (개발비 2,000만원) 기준'); + addSlideNumber(s6, 6, TOTAL); + + // 정가 판매 + s6.addText('정가(2,000만원) 판매 시', { x: 0.5, y: 1.15, w: 4.3, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + s6.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 1.55, w: 4.3, h: 1.6, rectRadius: 0.1, fill: { color: C.gray50 }, line: { color: C.gray200, width: 0.5 } }); + + const fullPriceData = [ + ['', '개인 가입', '단체 가입'], + ['파트너/단체', '400만원', '600만원'], + ['매니저', '100만원', '0원'], + ['유치자', '60만원', '60만원'], + ]; + fullPriceData.forEach((row, i) => { + const ry = 1.6 + i * 0.38; + const isHeader = i === 0; + s6.addText(row[0], { x: 0.7, y: ry, w: 1.4, h: 0.35, fontSize: isHeader ? 8 : 10, bold: isHeader, color: isHeader ? C.gray600 : C.text, fontFace: 'Arial' }); + s6.addText(row[1], { x: 2.1, y: ry, w: 1.2, h: 0.35, fontSize: isHeader ? 8 : 12, bold: !isHeader, color: isHeader ? C.gray600 : C.green, align: 'center', fontFace: 'Arial' }); + s6.addText(row[2], { x: 3.4, y: ry, w: 1.2, h: 0.35, fontSize: isHeader ? 8 : 12, bold: !isHeader, color: isHeader ? C.gray600 : C.orange, align: 'center', fontFace: 'Arial' }); + }); + + // 10% 할인 판매 + s6.addText('10% 할인(1,800만원) 판매 시', { x: 5.2, y: 1.15, w: 4.3, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + s6.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 1.55, w: 4.3, h: 1.6, rectRadius: 0.1, fill: { color: C.gray50 }, line: { color: C.gray200, width: 0.5 } }); + + const discountData = [ + ['', '개인 가입', '단체 가입'], + ['파트너/단체', '360만원', '540만원'], + ['매니저', '90만원', '0원'], + ['유치자', '54만원', '54만원'], + ]; + discountData.forEach((row, i) => { + const ry = 1.6 + i * 0.38; + const isHeader = i === 0; + s6.addText(row[0], { x: 5.4, y: ry, w: 1.4, h: 0.35, fontSize: isHeader ? 8 : 10, bold: isHeader, color: isHeader ? C.gray600 : C.text, fontFace: 'Arial' }); + s6.addText(row[1], { x: 6.8, y: ry, w: 1.2, h: 0.35, fontSize: isHeader ? 8 : 12, bold: !isHeader, color: isHeader ? C.gray600 : C.green, align: 'center', fontFace: 'Arial' }); + s6.addText(row[2], { x: 8.1, y: ry, w: 1.2, h: 0.35, fontSize: isHeader ? 8 : 12, bold: !isHeader, color: isHeader ? C.gray600 : C.orange, align: 'center', fontFace: 'Arial' }); + }); + + // 팁 + s6.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 3.4, w: 9, h: 0.5, rectRadius: 0.08, fill: { color: 'FFF8E1' }, line: { color: 'FFE082', width: 0.5 } }); + s6.addText('💡 할인하면 내 수당도 줄어든다. 정가에 가깝게 팔수록 수당이 크다!', { + x: 0.7, y: 3.4, w: 8.6, h: 0.5, fontSize: 11, bold: true, color: 'F57F17', valign: 'middle', fontFace: 'Arial' + }); + + // 조견표 + s6.addText('수당 빠른 조견표', { x: 0.5, y: 4.05, w: 4, h: 0.3, fontSize: 11, bold: true, color: C.text, fontFace: 'Arial' }); + const quickRef = [ + ['2,000만원', '400만원', '600만원'], + ['1,800만원', '360만원', '540만원'], + ['1,500만원', '300만원', '450만원'], + ['1,000만원', '200만원', '300만원'], + ]; + // 헤더 + s6.addText('최종 개발비', { x: 0.5, y: 4.35, w: 2.5, h: 0.25, fontSize: 8, bold: true, color: C.gray600, fontFace: 'Arial' }); + s6.addText('개인(20%)', { x: 3.2, y: 4.35, w: 1.8, h: 0.25, fontSize: 8, bold: true, color: C.green, align: 'center', fontFace: 'Arial' }); + s6.addText('단체(30%)', { x: 5.2, y: 4.35, w: 1.8, h: 0.25, fontSize: 8, bold: true, color: C.orange, align: 'center', fontFace: 'Arial' }); + + quickRef.forEach((r, i) => { + const ry = 4.6 + i * 0.22; + s6.addText(r[0], { x: 0.7, y: ry, w: 2.3, h: 0.22, fontSize: 9, color: C.text, fontFace: 'Arial' }); + s6.addText(r[1], { x: 3.2, y: ry, w: 1.8, h: 0.22, fontSize: 9, bold: true, color: C.green, align: 'center', fontFace: 'Arial' }); + s6.addText(r[2], { x: 5.2, y: ry, w: 1.8, h: 0.22, fontSize: 9, bold: true, color: C.orange, align: 'center', fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 7: 수당 지급 시점 + // ═══════════════════════════════════════════════════════ + const s7 = pres.addSlide(); + s7.background = { fill: C.white }; + addFooter(s7); + addPageTitle(s7, '수당은 언제 받나?', '고객이 2번에 나눠 내면, 수당도 2번에 나눠 받는다'); + addSlideNumber(s7, 7, TOTAL); + + // 플로우 + // 1차 + s7.addShape(pres.ShapeType.roundRect, { x: 0.8, y: 1.5, w: 3.5, h: 1.6, rectRadius: 0.12, fill: { color: C.greenBg }, line: { color: C.greenBorder, width: 1 } }); + s7.addShape(pres.ShapeType.ellipse, { x: 1.0, y: 1.6, w: 0.5, h: 0.5, fill: { color: C.green } }); + s7.addText('1', { x: 1.0, y: 1.6, w: 0.5, h: 0.5, fontSize: 18, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s7.addText('1차 납입 (계약금)', { x: 1.6, y: 1.6, w: 2.5, h: 0.5, fontSize: 13, bold: true, color: C.green, valign: 'middle', fontFace: 'Arial' }); + s7.addShape(pres.ShapeType.rect, { x: 1.0, y: 2.2, w: 3.1, h: 0.01, fill: { color: C.greenBorder } }); + s7.addText('익월 10일', { x: 1.0, y: 2.3, w: 1.5, h: 0.3, fontSize: 10, color: C.textSub, fontFace: 'Arial' }); + s7.addText('수당 50% 지급', { x: 2.3, y: 2.3, w: 1.8, h: 0.3, fontSize: 12, bold: true, color: C.green, align: 'right', fontFace: 'Arial' }); + s7.addText('예) 200만원', { x: 1.0, y: 2.65, w: 3.1, h: 0.3, fontSize: 10, color: C.gray600, fontFace: 'Arial' }); + + // 화살표 + s7.addText('→', { x: 4.4, y: 2.0, w: 0.6, h: 0.5, fontSize: 24, color: C.gray400, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // 2차 + s7.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 1.5, w: 3.5, h: 1.6, rectRadius: 0.12, fill: { color: C.blueBg }, line: { color: C.blueBorder, width: 1 } }); + s7.addShape(pres.ShapeType.ellipse, { x: 5.4, y: 1.6, w: 0.5, h: 0.5, fill: { color: C.blue } }); + s7.addText('2', { x: 5.4, y: 1.6, w: 0.5, h: 0.5, fontSize: 18, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s7.addText('2차 납입 (잔금)', { x: 6.0, y: 1.6, w: 2.5, h: 0.5, fontSize: 13, bold: true, color: C.blue, valign: 'middle', fontFace: 'Arial' }); + s7.addShape(pres.ShapeType.rect, { x: 5.4, y: 2.2, w: 3.1, h: 0.01, fill: { color: C.blueBorder } }); + s7.addText('익월 10일', { x: 5.4, y: 2.3, w: 1.5, h: 0.3, fontSize: 10, color: C.textSub, fontFace: 'Arial' }); + s7.addText('수당 50% 지급', { x: 6.7, y: 2.3, w: 1.8, h: 0.3, fontSize: 12, bold: true, color: C.blue, align: 'right', fontFace: 'Arial' }); + s7.addText('예) 200만원', { x: 5.4, y: 2.65, w: 3.1, h: 0.3, fontSize: 10, color: C.gray600, fontFace: 'Arial' }); + + // 합계 박스 + s7.addShape(pres.ShapeType.roundRect, { x: 2, y: 3.5, w: 6, h: 0.8, rectRadius: 0.1, fill: { color: C.dark } }); + s7.addText([ + { text: '예시: 파트너 수당 400만원 → ', options: { fontSize: 12, color: '8899AA' } }, + { text: '200만원', options: { fontSize: 14, bold: true, color: C.greenLight } }, + { text: ' + ', options: { fontSize: 12, color: '8899AA' } }, + { text: '200만원', options: { fontSize: 14, bold: true, color: '64B5F6' } }, + { text: ' = ', options: { fontSize: 12, color: '8899AA' } }, + { text: '400만원', options: { fontSize: 16, bold: true, color: 'FFB74D' } }, + ], { x: 2, y: 3.5, w: 6, h: 0.8, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 8: 할인 4가지 + // ═══════════════════════════════════════════════════════ + const s8 = pres.addSlide(); + s8.background = { fill: C.white }; + addFooter(s8); + addPageTitle(s8, '고객에게 제안할 수 있는 할인 4가지'); + addSlideNumber(s8, 8, TOTAL); + + const discounts = [ + { title: '개발비 할인', desc: '%, 정액, 전액면제', impact: '수당 영향 있음', impactColor: C.red, bg: C.redBg, border: 'FFCDD2', color: C.red, icon: '1' }, + { title: '구독료 할인', desc: '최대 50%까지', impact: '수당 영향 없음', impactColor: C.green, bg: C.greenBg, border: C.greenBorder, color: C.green, icon: '2' }, + { title: '무료 체험', desc: '1주일(7일)', impact: '수당 영향 없음', impactColor: C.green, bg: C.blueBg, border: C.blueBorder, color: C.blue, icon: '3' }, + { title: '개발비-구독료 연동', desc: 'ON/OFF 선택', impact: '개발비 변동 시 영향', impactColor: 'F57F17', bg: C.orangeBg, border: C.orangeBorder, color: C.orange, icon: '4' }, + ]; + + discounts.forEach((d, i) => { + const cx = 0.5 + i * 2.32; + const cw = 2.12; + s8.addShape(pres.ShapeType.roundRect, { x: cx, y: 1.2, w: cw, h: 2.8, rectRadius: 0.1, fill: { color: d.bg }, line: { color: d.border, width: 1 } }); + // 넘버 + s8.addShape(pres.ShapeType.ellipse, { x: cx + 0.75, y: 1.35, w: 0.55, h: 0.55, fill: { color: d.color } }); + s8.addText(d.icon, { x: cx + 0.75, y: 1.35, w: 0.55, h: 0.55, fontSize: 18, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + // 제목 + s8.addText(d.title, { x: cx + 0.1, y: 2.0, w: cw - 0.2, h: 0.4, fontSize: 12, bold: true, color: d.color, align: 'center', fontFace: 'Arial' }); + // 설명 + s8.addText(d.desc, { x: cx + 0.1, y: 2.4, w: cw - 0.2, h: 0.3, fontSize: 10, color: C.textSub, align: 'center', fontFace: 'Arial' }); + // 수당 영향 + s8.addShape(pres.ShapeType.roundRect, { x: cx + 0.15, y: 3.1, w: cw - 0.3, h: 0.6, rectRadius: 0.06, fill: { color: C.white } }); + s8.addText('수당 영향', { x: cx + 0.15, y: 3.1, w: cw - 0.3, h: 0.25, fontSize: 8, color: C.gray600, align: 'center', fontFace: 'Arial' }); + s8.addText(d.impact, { x: cx + 0.15, y: 3.35, w: cw - 0.3, h: 0.3, fontSize: 10, bold: true, color: d.impactColor, align: 'center', fontFace: 'Arial' }); + }); + + // 팁 + s8.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 4.3, w: 9, h: 0.6, rectRadius: 0.08, fill: { color: 'E8F5E9' }, line: { color: 'A5D6A7', width: 0.5 } }); + s8.addText([ + { text: '💡 영업 팁: ', options: { fontSize: 11, bold: true, color: C.green } }, + { text: '구독료 할인 + 무료 체험은 고객에게 혜택을 주면서 내 수당은 안 줄어드는 좋은 전략!', options: { fontSize: 11, color: '1B5E20' } }, + ], { x: 0.7, y: 4.3, w: 8.6, h: 0.6, valign: 'middle', fontFace: 'Arial' }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 9: 1년차 총 비용 계산 + // ═══════════════════════════════════════════════════════ + const s9 = pres.addSlide(); + s9.background = { fill: C.white }; + addFooter(s9); + addPageTitle(s9, '1년차 총 비용 계산법'); + addSlideNumber(s9, 9, TOTAL); + + // 공식 + s9.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 1.2, w: 9, h: 0.7, rectRadius: 0.1, fill: { color: C.dark } }); + s9.addText([ + { text: '1년차', options: { fontSize: 16, bold: true, color: 'FFB74D' } }, + { text: ' = ', options: { fontSize: 16, color: C.white } }, + { text: '개발비', options: { fontSize: 16, bold: true, color: C.greenLight } }, + { text: ' + ( ', options: { fontSize: 16, color: C.white } }, + { text: '월 구독료', options: { fontSize: 16, bold: true, color: '64B5F6' } }, + { text: ' × ', options: { fontSize: 16, color: C.white } }, + { text: '유료 개월수', options: { fontSize: 16, bold: true, color: 'CE93D8' } }, + { text: ' )', options: { fontSize: 16, color: C.white } }, + ], { x: 0.5, y: 1.2, w: 9, h: 0.7, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + // 실전 예시 + s9.addText('실전 예시: 제조업 기본 패키지, 10% 할인, 무료 체험 1주일', { + x: 0.5, y: 2.1, w: 9, h: 0.35, fontSize: 11, bold: true, color: C.text, fontFace: 'Arial' + }); + + const calcData = [ + ['개발비 (정가)', '', '2,000만원', C.text], + ['개발비 할인 10%', '2,000 × 10%', '-200만원', C.red], + ['최종 개발비', '', '1,800만원', C.green], + ['월 구독료', '', '50만원', C.blue], + ['유료 개월수', '12 - 7일(무료)', '약 11.77개월', 'CE93D8'], + ['연간 구독료', '50 × 11.77', '약 588만원', C.blue], + ['1년차 총 비용', '1,800 + 588', '2,388만원', C.orange], + ]; + + calcData.forEach((row, i) => { + const ry = 2.55 + i * 0.35; + const isTotal = i === 2 || i === 6; + if (isTotal) { + s9.addShape(pres.ShapeType.roundRect, { x: 0.5, y: ry, w: 9, h: 0.35, rectRadius: 0.04, fill: { color: isTotal && i === 6 ? C.dark : C.gray100 } }); + } else if (i % 2 === 0) { + s9.addShape(pres.ShapeType.rect, { x: 0.5, y: ry, w: 9, h: 0.35, fill: { color: C.gray50 } }); + } + const txtColor = isTotal && i === 6 ? C.white : C.text; + s9.addText(row[0], { x: 0.7, y: ry, w: 3, h: 0.35, fontSize: isTotal ? 10 : 9, bold: isTotal, color: txtColor, valign: 'middle', fontFace: 'Arial' }); + s9.addText(row[1], { x: 3.7, y: ry, w: 2.5, h: 0.35, fontSize: 9, color: isTotal && i === 6 ? '8899AA' : C.gray600, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s9.addText(row[2], { x: 6.5, y: ry, w: 2.8, h: 0.35, fontSize: isTotal ? 13 : 10, bold: isTotal, color: isTotal && i === 6 ? 'FFB74D' : row[3], align: 'right', valign: 'middle', fontFace: 'Arial' }); + }); + + // 2년차 안내 + s9.addShape(pres.ShapeType.roundRect, { x: 0.5, y: 4.4, w: 9, h: 0.6, rectRadius: 0.08, fill: { color: C.blueBg }, line: { color: C.blueBorder, width: 0.5 } }); + s9.addText([ + { text: '2년차부터: ', options: { fontSize: 11, bold: true, color: C.blue } }, + { text: '50만원 × 12 = ', options: { fontSize: 11, color: C.text } }, + { text: '연 600만원만', options: { fontSize: 13, bold: true, color: C.blue } }, + { text: ' 내면 된다 (개발비 없음!)', options: { fontSize: 11, color: C.text } }, + ], { x: 0.7, y: 4.4, w: 8.6, h: 0.6, valign: 'middle', fontFace: 'Arial' }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 10: 사용량 과금 + 바로빌 + // ═══════════════════════════════════════════════════════ + const s10 = pres.addSlide(); + s10.background = { fill: C.white }; + addFooter(s10); + addPageTitle(s10, '사용량 과금 & 바로빌 부가 서비스', '대부분의 중소기업은 기본 제공량으로 충분하다'); + addSlideNumber(s10, 10, TOTAL); + + // 사용량 + s10.addText('기본 제공량', { x: 0.5, y: 1.2, w: 4, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + + const usageItems = [ + ['파일 저장 공간', '100GB', '100GB당 5만원/월'], + ['AI 토큰', '월 100만 개', '실비 과금'], + ]; + usageItems.forEach((u, i) => { + const uy = 1.65 + i * 0.75; + s10.addShape(pres.ShapeType.roundRect, { x: 0.5, y: uy, w: 4.3, h: 0.6, rectRadius: 0.08, fill: { color: C.gray50 }, line: { color: C.gray200, width: 0.5 } }); + s10.addText(u[0], { x: 0.7, y: uy, w: 1.5, h: 0.6, fontSize: 10, bold: true, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s10.addText(u[1], { x: 2.2, y: uy, w: 1.2, h: 0.3, fontSize: 12, bold: true, color: C.green, valign: 'middle', fontFace: 'Arial' }); + s10.addText('초과: ' + u[2], { x: 2.2, y: uy + 0.3, w: 2.4, h: 0.25, fontSize: 8, color: C.gray600, fontFace: 'Arial' }); + }); + + // 바로빌 + s10.addText('바로빌 부가 서비스', { x: 5.2, y: 1.2, w: 4.3, h: 0.35, fontSize: 12, bold: true, color: C.text, fontFace: 'Arial' }); + + const barobillItems = [ + ['계좌조회', '1만원/월', C.text], + ['카드내역', '1만원/월', C.text], + ['홈택스 매입/매출', '무료!', C.green], + ['세금계산서', '100건 기본 무료', C.text], + ]; + barobillItems.forEach((b, i) => { + const by = 1.65 + i * 0.55; + s10.addShape(pres.ShapeType.roundRect, { x: 5.2, y: by, w: 4.3, h: 0.45, rectRadius: 0.06, fill: { color: i === 2 ? C.greenBg : C.gray50 }, line: { color: i === 2 ? C.greenBorder : C.gray200, width: 0.5 } }); + s10.addText(b[0], { x: 5.4, y: by, w: 2, h: 0.45, fontSize: 10, color: C.text, valign: 'middle', fontFace: 'Arial' }); + s10.addText(b[1], { x: 7.5, y: by, w: 1.8, h: 0.45, fontSize: 10, bold: true, color: b[2], align: 'right', valign: 'middle', fontFace: 'Arial' }); + }); + + // AI 토큰 활용 + s10.addText('AI 토큰 100만 개로 할 수 있는 일', { x: 0.5, y: 3.5, w: 9, h: 0.3, fontSize: 10, bold: true, color: C.text, fontFace: 'Arial' }); + const aiUsage = [ + ['회의 녹음 요약', '약 8시간 30분'], + ['문서 정리', 'A4 약 300~400장'], + ['이메일/노트 분류', '약 1,500~2,000건'], + ]; + aiUsage.forEach((a, i) => { + const ax = 0.5 + i * 3.1; + s10.addShape(pres.ShapeType.roundRect, { x: ax, y: 3.9, w: 2.9, h: 0.55, rectRadius: 0.06, fill: { color: 'F3E5F5' }, line: { color: 'CE93D8', width: 0.5 } }); + s10.addText(a[0], { x: ax + 0.1, y: 3.9, w: 2.7, h: 0.25, fontSize: 8, color: C.gray600, align: 'center', fontFace: 'Arial' }); + s10.addText(a[1], { x: ax + 0.1, y: 4.15, w: 2.7, h: 0.25, fontSize: 10, bold: true, color: '7B1FA2', align: 'center', fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 11: 가격 시뮬레이터 + // ═══════════════════════════════════════════════════════ + const s11 = pres.addSlide(); + s11.background = { fill: C.white }; + addFooter(s11); + addPageTitle(s11, '가격 시뮬레이터', '고객에게 제안하기 전에 미리 비용과 수당을 확인하는 도구'); + addSlideNumber(s11, 11, TOTAL); + + // 4 Steps + const steps = [ + { num: '1', title: '상품 고르기', desc: '필수 상품 자동체크\n추가 상품 선택', color: C.green, bg: C.greenBg }, + { num: '2', title: '할인 설정', desc: '개발비/구독료 할인\n무료 체험 기간', color: C.blue, bg: C.blueBg }, + { num: '3', title: '가입유형 선택', desc: '개인 가입\n단체 가입', color: C.orange, bg: C.orangeBg }, + { num: '4', title: '결과 확인!', desc: '최종 비용\n내 수당', color: '7B1FA2', bg: 'F3E5F5' }, + ]; + + steps.forEach((st, i) => { + const sx = 0.5 + i * 2.35; + const sw = 2.15; + s11.addShape(pres.ShapeType.roundRect, { x: sx, y: 1.2, w: sw, h: 1.8, rectRadius: 0.1, fill: { color: st.bg } }); + // Step 번호 + s11.addShape(pres.ShapeType.ellipse, { x: sx + 0.75, y: 1.3, w: 0.6, h: 0.6, fill: { color: st.color } }); + s11.addText(st.num, { x: sx + 0.75, y: 1.3, w: 0.6, h: 0.6, fontSize: 20, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s11.addText(st.title, { x: sx + 0.1, y: 2.0, w: sw - 0.2, h: 0.35, fontSize: 12, bold: true, color: st.color, align: 'center', fontFace: 'Arial' }); + s11.addText(st.desc, { x: sx + 0.1, y: 2.35, w: sw - 0.2, h: 0.55, fontSize: 9, color: C.textSub, align: 'center', valign: 'top', fontFace: 'Arial' }); + + // 화살표 + if (i < 3) { + s11.addText('→', { x: sx + sw - 0.05, y: 1.8, w: 0.3, h: 0.5, fontSize: 18, color: C.gray400, align: 'center', valign: 'middle', fontFace: 'Arial' }); + } + }); + + // 상품 유형 표 + s11.addText('상품 선택 화면에서 알아야 할 것', { x: 0.5, y: 3.3, w: 9, h: 0.35, fontSize: 11, bold: true, color: C.text, fontFace: 'Arial' }); + + const types = [ + { label: '필수', desc: '기본 포함, 해제 불가', color: C.red, bg: C.redBg }, + { label: '재량권', desc: '슬라이더로 개발비 조정 가능', color: C.orange, bg: C.orangeBg }, + { label: '선택', desc: '자유롭게 체크/해제', color: C.green, bg: C.greenBg }, + ]; + types.forEach((t, i) => { + const tx = 0.5 + i * 3.1; + s11.addShape(pres.ShapeType.roundRect, { x: tx, y: 3.75, w: 2.9, h: 0.7, rectRadius: 0.08, fill: { color: t.bg } }); + s11.addShape(pres.ShapeType.roundRect, { x: tx + 0.15, y: 3.85, w: 0.8, h: 0.25, rectRadius: 0.04, fill: { color: t.color } }); + s11.addText(t.label, { x: tx + 0.15, y: 3.85, w: 0.8, h: 0.25, fontSize: 9, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + s11.addText(t.desc, { x: tx + 0.15, y: 4.15, w: 2.6, h: 0.25, fontSize: 9, color: C.textSub, fontFace: 'Arial' }); + }); + + // 주의 + s11.addText('※ 시뮬레이터 결과는 참고용이다. 실제 계약 금액은 고객과 별도 협의한다.', { + x: 0.5, y: 4.7, w: 9, h: 0.3, fontSize: 9, color: C.gray600, align: 'center', fontFace: 'Arial' + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 12: 영업 실전 팁 + // ═══════════════════════════════════════════════════════ + const s12 = pres.addSlide(); + s12.background = { fill: C.white }; + addFooter(s12); + addPageTitle(s12, '영업 실전 팁', '고객 유형별 추천 전략'); + addSlideNumber(s12, 12, TOTAL); + + const tips = [ + { situation: '초기 비용 부담이 클 때', strategy: '개발비 할인 + 무료 체험 1주일', color: C.green, bg: C.greenBg }, + { situation: '매달 비용이 부담될 때', strategy: '구독료 할인 (최대 50%)', color: C.blue, bg: C.blueBg }, + { situation: '기존 시스템이 있을 때', strategy: '이카운트 연동 모듈 추천', color: C.orange, bg: C.orangeBg }, + { situation: '대형 제조업체', strategy: '기본 패키지 + 공정관리 + 품질관리', color: '7B1FA2', bg: 'F3E5F5' }, + { situation: '여러 업체를 묶을 수 있을 때', strategy: '단체 가입 (수당률 30%로 UP!)', color: C.red, bg: C.redBg }, + ]; + + tips.forEach((t, i) => { + const ty = 1.2 + i * 0.6; + s12.addShape(pres.ShapeType.roundRect, { x: 0.5, y: ty, w: 9, h: 0.5, rectRadius: 0.08, fill: { color: t.bg } }); + s12.addShape(pres.ShapeType.rect, { x: 0.5, y: ty, w: 0.08, h: 0.5, fill: { color: t.color } }); + s12.addText(t.situation, { x: 0.8, y: ty, w: 3.5, h: 0.5, fontSize: 10, bold: true, color: t.color, valign: 'middle', fontFace: 'Arial' }); + s12.addText('→ ' + t.strategy, { x: 4.5, y: ty, w: 4.8, h: 0.5, fontSize: 10, color: C.text, valign: 'middle', fontFace: 'Arial' }); + }); + + // 고객 FAQ + s12.addText('고객이 자주 하는 질문', { x: 0.5, y: 4.15, w: 5, h: 0.3, fontSize: 11, bold: true, color: C.text, fontFace: 'Arial' }); + + const faqs = [ + ['"왜 비싸요?"', '기존 ERP 5천만~1억 vs SAM 2천만원 + AI 포함'], + ['"구독료가 아까운데?"', '자체 서버 월 200만+ vs SAM 월 50만원'], + ['"무료 체험 안 돼요?"', '1주일(7일) 무료 체험 가능!'], + ]; + faqs.forEach((f, i) => { + const fy = 4.5 + i * 0.3; + s12.addText(f[0], { x: 0.7, y: fy, w: 2.5, h: 0.28, fontSize: 9, bold: true, color: C.blue, fontFace: 'Arial' }); + s12.addText(f[1], { x: 3.2, y: fy, w: 6.3, h: 0.28, fontSize: 9, color: C.textSub, fontFace: 'Arial' }); + }); + + // ═══════════════════════════════════════════════════════ + // 슬라이드 13: 마무리 + // ═══════════════════════════════════════════════════════ + const s13 = pres.addSlide(); + s13.background = { fill: C.dark }; + + s13.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.greenLight } }); + + s13.addShape(pres.ShapeType.roundRect, { x: 3.8, y: 1.2, w: 2.4, h: 0.65, rectRadius: 0.1, fill: { color: C.greenLight } }); + s13.addText('SAM', { x: 3.8, y: 1.2, w: 2.4, h: 0.65, fontSize: 28, bold: true, color: C.white, align: 'center', valign: 'middle', fontFace: 'Arial' }); + + s13.addText('Smart Automation Management', { + x: 1, y: 2.1, w: 8, h: 0.5, + fontSize: 14, color: '667788', align: 'center', fontFace: 'Arial' + }); + + s13.addShape(pres.ShapeType.rect, { x: 3, y: 2.9, w: 4, h: 0.01, fill: { color: '2A3A4A' } }); + + s13.addText('(주)코드브릿지엑스', { + x: 1, y: 3.1, w: 8, h: 0.5, + fontSize: 16, bold: true, color: C.white, align: 'center', fontFace: 'Arial' + }); + + // 핵심 기억 포인트 + const keyPoints = [ + '개발비 = 한 번 | 구독료 = 매달', + '수당 = 최종 개발비 × 수당률', + '구독료 할인/무료 체험 → 수당 영향 없음', + ]; + keyPoints.forEach((kp, i) => { + s13.addShape(pres.ShapeType.roundRect, { x: 2, y: 3.85 + i * 0.42, w: 6, h: 0.35, rectRadius: 0.06, fill: { color: '1B2838' }, line: { color: '2A3A4A', width: 0.5 } }); + s13.addText([ + { text: '✓ ', options: { fontSize: 10, color: C.greenLight } }, + { text: kp, options: { fontSize: 10, color: 'AABBCC' } }, + ], { x: 2.2, y: 3.85 + i * 0.42, w: 5.6, h: 0.35, valign: 'middle', fontFace: 'Arial' }); + }); + + // ─── 저장 ─── + const outputPath = path.join(__dirname, 'sam-pricing-simple-guide.pptx'); + await pres.writeFile({ fileName: outputPath }); + console.log('PPTX created:', outputPath); +} + +main().catch(console.error);