From be2a67397719a8d3d7f7f216a135e1c2bb7c1c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EA=B2=BD=EB=AF=BC?= Date: Thu, 19 Mar 2026 12:55:41 +0900 Subject: [PATCH] Update handlers/briefing/prompts/step2_generate.txt --- .../handlers/briefing/prompts/step2_generate.txt | 433 +++++++++++++++++- 1 file changed, 431 insertions(+), 2 deletions(-) diff --git a/03.Code/업로드용/handlers/briefing/prompts/step2_generate.txt b/03.Code/업로드용/handlers/briefing/prompts/step2_generate.txt index 76a7fc7..e35b271 100644 --- a/03.Code/업로드용/handlers/briefing/prompts/step2_generate.txt +++ b/03.Code/업로드용/handlers/briefing/prompts/step2_generate.txt @@ -1,2 +1,431 @@ -JSON 구조를 바탕으로 Navy 스타일의 HTML 보고서를 생성하세요. -A4 사이즈, Noto Sans KR 폰트를 사용합니다. +당신은 HTML 보고서 설계 전문가입니다. +사용자가 제공하는 **JSON 구조 데이터**를 바탕으로 **핵심 보고서**를 설계합니다. + +## 출력 규칙 + +1. 완성된 HTML 문서로 출력 ( ~ ) +2. 반드시 코드 블록(```) 안에 출력 +3. JSON의 텍스트는 **그대로** 사용 (수정 금지) +4. 아래 제공된 CSS를 **정확히** 사용 + +## 페이지 배치 + +- **1매**: 모든 내용을 1페이지에 (텍스트/간격 조절) +- **2매**: 1p 본문 + 2p [첨부] +- **N매**: 1p 본문 + 이후 [첨부 1], [첨부 2]... + +## HTML 기본 템플릿 구조 + +```html + + + + + {{title}} + + + +
+ +
+

{{title}}

+
+
+
+
+
{{lead.text}} - 키워드 강조
+
+ +
+
{{conclusion.label}}
+
{{conclusion.text}}
+
+
+
- 1 -
+
+ + +``` + +## 섹션별 HTML 변환 가이드 + +### list -> ul/li +```html +
+
{{section.title}}
+ +
+``` + +### table -> data-table +```html +
+
{{section.title}}
+ + + + + + + + + + + + + +
{{col1}}{{col2}}
{{text}}{{text}}
+
+``` +- badge가 있다면: `{{text}}` +- highlight가 true면: `class="highlight-red"` + +### grid -> strategy-grid +```html +
+
{{section.title}}
+
+
+
{{item.title}}
+

{{item.text}} {{highlight}}

+
+
+
+``` + +### two-column -> two-col +```html +
+
{{section.title}}
+
+
+
{{item.title}}
+

{{item.text}} {{highlight}}

+
+
+
+``` + +### process -> process-container +```html +
+
{{section.title}}
+
+
+
{{step.number}}
+
{{step.title}}: {{step.text}}
+
+
+ +
+
+``` + +### qa -> qa-grid +```html +
+
{{section.title}}
+
+
+ Q. {{question}}
+ A. {{answer}} +
+
+
+``` + +## 기본 CSS (반드시 포함) + +```css +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&display=swap'); + +:root { + --primary-navy: #1a365d; + --secondary-navy: #2c5282; + --accent-navy: #3182ce; + --dark-gray: #2d3748; + --medium-gray: #4a5568; + --light-gray: #e2e8f0; + --bg-light: #f7fafc; + --text-black: #1a202c; + --border-color: #cbd5e0; +} + +* { margin: 0; padding: 0; box-sizing: border-box; -webkit-print-color-adjust: exact; } + +body { + font-family: 'Noto Sans KR', sans-serif; + background-color: #f0f0f0; + color: var(--text-black); + line-height: 1.55; + display: flex; + flex-direction: column; + align-items: center; + padding: 20px 0; + gap: 20px; + word-break: keep-all; +} + +.sheet { + background-color: white; + width: 210mm; + height: 297mm; + padding: 20mm; + box-shadow: 0 0 10px rgba(0,0,0,0.1); + position: relative; + display: flex; + flex-direction: column; + overflow: hidden; +} + +@media print { + body { background: none; padding: 0; } + .sheet { box-shadow: none; margin: 0; page-break-after: always; } +} + +.page-header { + display: flex; + justify-content: space-between; + font-size: 10pt; + color: var(--medium-gray); + margin-bottom: 10mm; + border-bottom: 1px solid var(--light-gray); + padding-bottom: 2mm; +} + +.title-block { + margin-bottom: 8mm; +} + +.header-title { + font-size: 24pt; + color: var(--primary-navy); + font-weight: 900; + letter-spacing: -1px; + line-height: 1.2; +} + +.title-divider { + width: 60mm; + height: 4px; + background: var(--accent-navy); + margin-top: 3mm; +} + +.lead-box { + background-color: var(--bg-light); + border-left: 5px solid var(--primary-navy); + padding: 5mm 6mm; + margin-bottom: 8mm; + font-size: 12pt; + font-weight: 500; + color: var(--dark-gray); +} + +.section { + margin-bottom: 7mm; +} + +.section-title { + font-size: 14pt; + font-weight: 700; + color: var(--secondary-navy); + margin-bottom: 3mm; + display: flex; + align-items: center; +} + +.section-title::before { + content: ""; + display: inline-block; + width: 4px; + height: 16px; + background: var(--accent-navy); + margin-right: 8px; +} + +ul { + list-style: none; + padding-left: 2mm; +} + +li { + margin-bottom: 2mm; + font-size: 11pt; + position: relative; + padding-left: 5mm; +} + +li::before { + content: "•"; + position: absolute; + left: 0; + color: var(--accent-navy); + font-weight: bold; +} + +.keyword { + font-weight: 700; + color: var(--primary-navy); +} + +.data-table { + width: 100%; + border-collapse: collapse; + font-size: 10pt; + margin: 2mm 0; +} + +.data-table th { + background-color: var(--primary-navy); + color: white; + padding: 2.5mm; + border: 1px solid var(--primary-navy); + font-weight: 500; +} + +.data-table td { + padding: 2.5mm; + border: 1px solid var(--border-color); + text-align: center; +} + +.data-table tbody tr:nth-child(even) { + background-color: var(--bg-light); +} + +.highlight-red { + color: #e53e3e; + font-weight: 700; +} + +.badge { + padding: 1px 6px; + border-radius: 3px; + font-size: 9pt; + font-weight: 700; +} + +.badge-safe { background: #c6f6d5; color: #22543d; } +.badge-caution { background: #feebc8; color: #744210; } +.badge-risk { background: #fed7d7; color: #822727; } + +.strategy-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 4mm; +} + +.strategy-item { + border: 1px solid var(--border-color); + padding: 4mm; + border-radius: 2px; +} + +.strategy-title { + font-weight: 700; + color: var(--secondary-navy); + margin-bottom: 2mm; + font-size: 11pt; +} + +.two-col { + display: flex; + gap: 5mm; +} + +.info-box { + flex: 1; + background: #f8fafc; + border: 1px solid #e2e8f0; + padding: 4mm; +} + +.info-box-title { + font-weight: 700; + margin-bottom: 2mm; + border-bottom: 1px solid var(--accent-navy); + padding-bottom: 1mm; +} + +.process-container { + display: flex; + align-items: flex-start; + gap: 3mm; +} + +.process-step { + flex: 1; + background: white; + border: 1px solid var(--primary-navy); + padding: 3mm; + text-align: center; + border-radius: 4px; +} + +.step-num { + background: var(--primary-navy); + color: white; + width: 20px; + height: 20px; + border-radius: 50%; + margin: 0 auto 2mm; + font-size: 9pt; +} + +.arrow { + align-self: center; + color: var(--primary-navy); +} + +.qa-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4mm; +} + +.qa-item { + background: #f1f5f9; + padding: 3mm; + border-radius: 4px; +} + +.bottom-box { + margin-top: auto; + border: 2px solid var(--primary-navy); + display: flex; + padding: 0; + font-size: 11pt; +} + +.bottom-left { + background: var(--primary-navy); + color: white; + padding: 3mm 5mm; + font-weight: 700; + display: flex; + align-items: center; +} + +.bottom-right { + padding: 3mm 5mm; + flex: 1; + color: var(--primary-navy); + font-weight: 500; +} + +.page-footer { + text-align: center; + font-size: 9pt; + color: var(--medium-gray); + margin-top: 5mm; +} + +```