commit b0a2b0eec4d883e89443c4ee77298a569a45e434 Author: dsyoon Date: Wed Feb 25 17:58:49 2026 +0900 Initial commit Co-authored-by: Cursor diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/AI로 일하는 방법/extract_ai_work_source_images.py b/AI로 일하는 방법/extract_ai_work_source_images.py new file mode 100644 index 0000000..d5d131d --- /dev/null +++ b/AI로 일하는 방법/extract_ai_work_source_images.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from pathlib import Path + +from pptx import Presentation +from pptx.enum.shapes import MSO_SHAPE_TYPE + + +def main() -> None: + base_dir = Path(__file__).resolve().parent + src = base_dir / "resources" / "inputs" / "ai_work_source.pptx" + out_dir = base_dir / "resources" / "assets" / "ai_work_source_assets" + out_dir.mkdir(parents=True, exist_ok=True) + + prs = Presentation(str(src)) + for idx, slide in enumerate(prs.slides, start=1): + pics = [sh for sh in slide.shapes if sh.shape_type == MSO_SHAPE_TYPE.PICTURE] + if not pics: + continue + if len(pics) != 1: + print(f"Slide {idx}: pictures={len(pics)} (expected 1). Extracting all.") + + for j, pic in enumerate(pics, start=1): + image = pic.image + ext = image.ext or "bin" + out = out_dir / f"slide{idx:02d}_img{j:02d}.{ext}" + out.write_bytes(image.blob) + print(f"wrote {out} ({len(image.blob):,} bytes)") + + +if __name__ == "__main__": + main() + diff --git a/AI로 일하는 방법/generate_ai_work_ppt.py b/AI로 일하는 방법/generate_ai_work_ppt.py new file mode 100644 index 0000000..c20d15b --- /dev/null +++ b/AI로 일하는 방법/generate_ai_work_ppt.py @@ -0,0 +1,1209 @@ +from __future__ import annotations + +from dataclasses import dataclass +from pathlib import Path +from typing import Iterable, Sequence + +from pptx import Presentation +from pptx.dml.color import RGBColor +from pptx.enum.shapes import MSO_AUTO_SHAPE_TYPE +from pptx.enum.text import PP_ALIGN +from pptx.util import Inches, Pt + + +@dataclass(frozen=True) +class Theme: + navy: RGBColor + navy_2: RGBColor + bg: RGBColor + white: RGBColor + text: RGBColor + muted: RGBColor + line: RGBColor + accent_yellow: RGBColor + accent_blue: RGBColor + accent_red: RGBColor + accent_green: RGBColor + + font: str + font_bold: str + + +T = Theme( + navy=RGBColor(0x10, 0x1D, 0x2E), + navy_2=RGBColor(0x14, 0x2A, 0x45), + bg=RGBColor(0xF6, 0xF7, 0xFB), + white=RGBColor(0xFF, 0xFF, 0xFF), + text=RGBColor(0x1F, 0x29, 0x37), + muted=RGBColor(0x6B, 0x72, 0x80), + line=RGBColor(0xE5, 0xE7, 0xEB), + accent_yellow=RGBColor(0xF0, 0xB4, 0x3B), + accent_blue=RGBColor(0x3B, 0x82, 0xF6), + accent_red=RGBColor(0xEF, 0x44, 0x44), + accent_green=RGBColor(0x22, 0xC5, 0x5E), + font="Apple SD Gothic Neo", + font_bold="Apple SD Gothic Neo", +) + + +SLIDE_W = Inches(13.333) +SLIDE_H = Inches(7.5) + + +def _rgb(hex6: str) -> RGBColor: + h = hex6.lstrip("#") + return RGBColor(int(h[0:2], 16), int(h[2:4], 16), int(h[4:6], 16)) + + +def set_slide_bg(slide, color: RGBColor) -> None: + fill = slide.background.fill + fill.solid() + fill.fore_color.rgb = color + + +def add_rect(slide, x, y, w, h, *, fill: RGBColor | None, line: RGBColor | None, radius: bool = False): + shape_type = MSO_AUTO_SHAPE_TYPE.ROUNDED_RECTANGLE if radius else MSO_AUTO_SHAPE_TYPE.RECTANGLE + shp = slide.shapes.add_shape(shape_type, x, y, w, h) + if fill is None: + shp.fill.background() + else: + shp.fill.solid() + shp.fill.fore_color.rgb = fill + if line is None: + shp.line.fill.background() + else: + shp.line.color.rgb = line + shp.line.width = Pt(1) + return shp + + +def add_textbox( + slide, + x, + y, + w, + h, + text: str, + *, + size: int, + bold: bool = False, + color: RGBColor | None = None, + align: int = PP_ALIGN.LEFT, + line_spacing: float | None = None, +): + tb = slide.shapes.add_textbox(x, y, w, h) + tf = tb.text_frame + tf.clear() + p = tf.paragraphs[0] + run = p.add_run() + run.text = text + f = run.font + f.name = T.font_bold if bold else T.font + f.size = Pt(size) + f.bold = bold + f.color.rgb = color or T.text + p.alignment = align + if line_spacing is not None: + p.line_spacing = line_spacing + return tb + + +def add_bullets( + slide, + x, + y, + w, + h, + bullets: Sequence[str], + *, + size: int = 18, + color: RGBColor | None = None, + bullet_color: RGBColor | None = None, + line_spacing: float = 1.15, +): + tb = slide.shapes.add_textbox(x, y, w, h) + tf = tb.text_frame + tf.clear() + tf.word_wrap = True + for i, b in enumerate(bullets): + p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() + p.text = b + p.level = 0 + p.font.name = T.font + p.font.size = Pt(size) + p.font.color.rgb = color or T.text + p.line_spacing = line_spacing + p.space_after = Pt(6) + p.bullet = True + if bullet_color is not None: + # python-pptx doesn't support bullet color directly; keep as text color. + pass + return tb + + +def add_pill(slide, x, y, w, h, text: str, *, fill: RGBColor, fg: RGBColor): + pill = add_rect(slide, x, y, w, h, fill=fill, line=None, radius=True) + tf = pill.text_frame + tf.clear() + p = tf.paragraphs[0] + p.alignment = PP_ALIGN.CENTER + run = p.add_run() + run.text = text + run.font.name = T.font + run.font.size = Pt(12) + run.font.color.rgb = fg + return pill + + +def add_footer(slide, slide_no: int, *, dark: bool) -> None: + y = SLIDE_H - Inches(0.35) + add_rect(slide, Inches(0), y, SLIDE_W, Inches(0.35), fill=(T.navy if dark else T.bg), line=None, radius=False) + fg = _rgb("#D1D5DB") if dark else T.muted + add_textbox( + slide, + Inches(0.5), + y + Inches(0.06), + Inches(6), + Inches(0.25), + "윤도상 | 2026.03", + size=11, + bold=False, + color=fg, + align=PP_ALIGN.LEFT, + ) + add_textbox( + slide, + SLIDE_W - Inches(2.0), + y + Inches(0.06), + Inches(1.5), + Inches(0.25), + f"Slide {slide_no:02d}" if dark else f"{slide_no:02d}", + size=11, + bold=False, + color=fg, + align=PP_ALIGN.RIGHT, + ) + + +def add_title_block( + slide, + title: str, + subtitle: str | None = None, + *, + dark: bool, + y: float = 0.6, + pretitle: str | None = None, +): + fg = T.white if dark else T.text + if pretitle: + add_textbox( + slide, + Inches(0.7), + Inches(y), + Inches(12), + Inches(0.3), + pretitle, + size=14, + bold=True, + color=T.accent_yellow if dark else T.accent_yellow, + ) + y += 0.35 + add_textbox( + slide, + Inches(0.7), + Inches(y), + Inches(12), + Inches(0.8), + title, + size=40 if len(title) <= 18 else 34, + bold=True, + color=fg, + ) + if subtitle: + add_textbox( + slide, + Inches(0.7), + Inches(y + 0.85), + Inches(12), + Inches(0.4), + subtitle, + size=18, + bold=True, + color=T.accent_yellow if dark else T.muted, + ) + + +def add_card( + slide, + x, + y, + w, + h, + *, + title: str, + body: Sequence[str], + accent: RGBColor, + dark_text: bool = True, +): + add_rect(slide, x, y, w, h, fill=T.white, line=T.line, radius=True) + add_rect(slide, x, y, w, Inches(0.08), fill=accent, line=None, radius=False) + add_textbox( + slide, + x + Inches(0.25), + y + Inches(0.4), + w - Inches(0.5), + Inches(0.4), + title, + size=18, + bold=True, + color=T.text if dark_text else T.white, + ) + add_bullets( + slide, + x + Inches(0.25), + y + Inches(0.9), + w - Inches(0.5), + h - Inches(1.1), + list(body), + size=14, + color=T.muted, + line_spacing=1.2, + ) + + +def slide_01_cover(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.navy) + add_pill( + s, + Inches(4.2), + Inches(0.35), + Inches(4.9), + Inches(0.42), + "LLM AI 툴 활용 교육", + fill=_rgb("#24364D"), + fg=_rgb("#E5E7EB"), + ) + add_textbox(s, Inches(3.6), Inches(2.1), Inches(6.2), Inches(0.9), "AI에게", size=54, bold=True, color=T.white, align=PP_ALIGN.CENTER) + add_textbox(s, Inches(2.9), Inches(3.05), Inches(7.6), Inches(0.9), "잘 시키는 법", size=54, bold=True, color=T.white, align=PP_ALIGN.CENTER) + add_rect(s, Inches(6.1), Inches(4.1), Inches(1.2), Inches(0.05), fill=T.accent_yellow, line=None) + add_textbox( + s, + Inches(2.4), + Inches(4.35), + Inches(8.6), + Inches(0.5), + "실무자를 위한 LLM 프롬프트 & 워크플로우 완전 가이드", + size=18, + bold=True, + color=T.accent_yellow, + align=PP_ALIGN.CENTER, + ) + add_footer(s, 1, dark=True) + + +def slide_02_core_assumptions(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "AI 활용의 핵심 전제 3가지", size=14, bold=True, color=T.accent_yellow) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "이것만 알아도 80%다", size=40, bold=True, color=T.text) + add_pill(s, Inches(10.1), Inches(1.1), Inches(2.6), Inches(0.38), "Chapter 1. AI는 어떻게 생각하는가?", fill=_rgb("#EEF2F7"), fg=T.muted) + + cw = Inches(3.95) + ch = Inches(2.7) + y = Inches(2.05) + gap = Inches(0.4) + x1 = Inches(0.7) + add_card( + s, + x1, + y, + cw, + ch, + title="AI는 당신이 준\n정보만큼 답한다", + body=["입력(Prompt)의 질이 곧", "출력(Output)의 질을 결정합니다.", "맥락이 없으면 답도 없습니다."], + accent=T.accent_blue, + ) + add_card( + s, + x1 + cw + gap, + y, + cw, + ch, + title="AI는 틀린 답을\n자신 있게 말한다", + body=["환각(Hallucination) 현상은", "AI의 구조적 특성입니다.", "절대 맹신하지 마세요."], + accent=T.accent_red, + ) + add_card( + s, + x1 + (cw + gap) * 2, + y, + cw, + ch, + title="AI는 도구이지,\n판단자가 아니다", + body=["결과물에 대한 최종 검증과", "책임은 항상 사람(나)에게", "있습니다."], + accent=T.accent_green, + ) + + bar_y = Inches(5.55) + add_rect(s, Inches(0.7), bar_y, Inches(11.93), Inches(0.85), fill=T.navy_2, line=None, radius=True) + add_pill(s, Inches(0.95), bar_y + Inches(0.18), Inches(1.15), Inches(0.42), "실제 사례", fill=T.accent_yellow, fg=T.navy) + add_pill(s, Inches(2.2), bar_y + Inches(0.18), Inches(3.1), Inches(0.42), "\"세차장에 갑니다\" (중의적)", fill=_rgb("#2B3E59"), fg=_rgb("#E5E7EB")) + add_textbox(s, Inches(5.35), bar_y + Inches(0.18), Inches(0.4), Inches(0.42), "→", size=22, bold=True, color=T.accent_yellow, align=PP_ALIGN.CENTER) + add_pill(s, Inches(5.7), bar_y + Inches(0.18), Inches(3.2), Inches(0.42), "\"세차하러 갑니다\" (명확)", fill=_rgb("#2B3E59"), fg=_rgb("#E5E7EB")) + add_textbox( + s, + Inches(9.1), + bar_y + Inches(0.18), + Inches(3.3), + Inches(0.42), + "정보 단 하나(목적) 차이로\nAI의 답변 품질이 완전히 달라집니다!", + size=12, + bold=True, + color=_rgb("#E5E7EB"), + align=PP_ALIGN.RIGHT, + ) + add_footer(s, 2, dark=False) + + +def slide_03_llm(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.navy) + add_title_block(s, "LLM이란 무엇인가?", "Large Language Model — 대규모 언어 모델", dark=True, y=0.5) + add_pill(s, Inches(11.5), Inches(0.6), Inches(1.4), Inches(0.38), "Chapter 1", fill=_rgb("#24364D"), fg=_rgb("#E5E7EB")) + + x = Inches(0.7) + y = Inches(2.0) + w = Inches(4.8) + h = Inches(1.05) + gap = Inches(0.35) + + def left_item(yy, title, desc): + add_rect(s, x, yy, w, h, fill=_rgb("#1B2A3F"), line=_rgb("#2B3E59"), radius=True) + add_textbox(s, x + Inches(0.3), yy + Inches(0.2), w - Inches(0.6), Inches(0.35), title, size=18, bold=True, color=T.white) + add_textbox(s, x + Inches(0.3), yy + Inches(0.55), w - Inches(0.6), Inches(0.45), desc, size=13, bold=False, color=_rgb("#D1D5DB")) + + left_item(y, "확률 기반 언어 예측", "다음에 올 단어를 통계적으로\n예측하는 '확률 기계'입니다.") + left_item(y + h + gap, "\"지식\"이 아닌 \"패턴\"", "사전처럼 정답을 저장한 것이 아니라,\n수많은 문장의 패턴을 학습했습니다.") + left_item(y + (h + gap) * 2, "확률적 답변 생성", "같은 질문에도 매번 확률적으로\n가장 자연스러운 답을 생성합니다.") + + # Right diagram card + rx = Inches(5.8) + ry = Inches(2.05) + rw = Inches(7.0) + rh = Inches(4.25) + add_rect(s, rx, ry, rw, rh, fill=_rgb("#1B2A3F"), line=_rgb("#2B3E59"), radius=True) + add_textbox(s, rx + Inches(0.35), ry + Inches(0.25), Inches(4), Inches(0.35), "LLM 작동 프로세스 예시", size=13, bold=True, color=_rgb("#9CA3AF")) + + # INPUT box + add_textbox(s, rx + Inches(0.55), ry + Inches(0.8), Inches(1.5), Inches(0.3), "INPUT (입력)", size=11, bold=True, color=_rgb("#9CA3AF")) + add_rect(s, rx + Inches(0.55), ry + Inches(1.15), Inches(2.2), Inches(0.85), fill=_rgb("#132236"), line=_rgb("#2B3E59"), radius=True) + add_textbox( + s, + rx + Inches(0.7), + ry + Inches(1.28), + Inches(1.9), + Inches(0.55), + "\"대한민국의\n수도는\"", + size=16, + bold=True, + color=T.white, + align=PP_ALIGN.CENTER, + ) + # Prediction circle + add_textbox(s, rx + Inches(3.0), ry + Inches(0.8), Inches(2.5), Inches(0.3), "PREDICTION (예측)", size=11, bold=True, color=T.accent_yellow, align=PP_ALIGN.CENTER) + circ = s.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.OVAL, rx + Inches(3.2), ry + Inches(1.05), Inches(2.55), Inches(2.55)) + circ.fill.background() + circ.line.color.rgb = T.accent_yellow + circ.line.width = Pt(2) + # Prob bars inside + add_textbox(s, rx + Inches(3.35), ry + Inches(1.45), Inches(2.25), Inches(0.25), "서울 92%", size=11, bold=True, color=_rgb("#E5E7EB")) + add_rect(s, rx + Inches(3.35), ry + Inches(1.72), Inches(2.1), Inches(0.08), fill=T.accent_yellow, line=None) + add_textbox(s, rx + Inches(3.35), ry + Inches(1.95), Inches(2.25), Inches(0.25), "부산 5%", size=11, bold=False, color=_rgb("#9CA3AF")) + add_rect(s, rx + Inches(3.35), ry + Inches(2.22), Inches(0.55), Inches(0.08), fill=_rgb("#64748B"), line=None) + add_textbox(s, rx + Inches(3.35), ry + Inches(2.45), Inches(2.25), Inches(0.25), "평양 1%", size=11, bold=False, color=_rgb("#9CA3AF")) + add_rect(s, rx + Inches(3.35), ry + Inches(2.72), Inches(0.25), Inches(0.08), fill=_rgb("#64748B"), line=None) + + # OUTPUT box + add_textbox(s, rx + Inches(5.85), ry + Inches(0.8), Inches(1.5), Inches(0.3), "OUTPUT (출력)", size=11, bold=True, color=_rgb("#9CA3AF"), align=PP_ALIGN.RIGHT) + add_rect(s, rx + Inches(5.6), ry + Inches(1.25), Inches(2.15), Inches(0.85), fill=_rgb("#0F2C2A"), line=_rgb("#34D399"), radius=True) + add_textbox( + s, + rx + Inches(5.75), + ry + Inches(1.38), + Inches(1.85), + Inches(0.55), + "\"서울입니다.\"", + size=18, + bold=True, + color=_rgb("#A7F3D0"), + align=PP_ALIGN.CENTER, + ) + + # Arrows + add_textbox(s, rx + Inches(2.85), ry + Inches(1.45), Inches(0.3), Inches(0.3), "›", size=28, bold=True, color=_rgb("#9CA3AF"), align=PP_ALIGN.CENTER) + add_textbox(s, rx + Inches(5.45), ry + Inches(1.45), Inches(0.3), Inches(0.3), "›", size=28, bold=True, color=_rgb("#9CA3AF"), align=PP_ALIGN.CENTER) + + add_rect(s, rx + Inches(0.45), ry + Inches(3.8), rw - Inches(0.9), Inches(0.55), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox( + s, + rx + Inches(0.7), + ry + Inches(3.92), + rw - Inches(1.4), + Inches(0.3), + "ChatGPT, Claude, Gemini 등은 모두 이와 같은 원리로 작동합니다.", + size=12, + bold=True, + color=_rgb("#D1D5DB"), + align=PP_ALIGN.CENTER, + ) + add_footer(s, 3, dark=True) + + +def slide_04_good_vs_bad(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "효율적인 AI 활용을 위한 첫걸음", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AI가 잘하는 것 vs 못하는 것", size=40, bold=True, color=T.text) + add_pill(s, Inches(9.9), Inches(1.1), Inches(2.95), Inches(0.38), "Chapter 1. AI의 본질 이해", fill=_rgb("#EEF2F7"), fg=T.muted) + + left_x = Inches(0.8) + col_y = Inches(2.0) + col_w = Inches(6.05) + col_h = Inches(4.25) + right_x = Inches(6.45) + + add_rect(s, left_x, col_y, col_w, col_h, fill=_rgb("#E9FBF1"), line=None, radius=True) + add_rect(s, right_x, col_y, col_w, col_h, fill=_rgb("#FDECEC"), line=None, radius=True) + add_textbox(s, left_x + Inches(0.35), col_y + Inches(0.3), col_w - Inches(0.7), Inches(0.35), "✓ AI가 잘하는 것", size=20, bold=True, color=_rgb("#15803D")) + add_textbox(s, right_x + Inches(0.35), col_y + Inches(0.3), col_w - Inches(0.7), Inches(0.35), "✕ AI가 못하는 것 / 주의", size=20, bold=True, color=_rgb("#B91C1C")) + + good = [ + "구조화된 글 작성 및 요약", + "번역 및 언어 변환", + "패턴 인식 및 분류", + "코드 생성 및 디버깅", + "반복 업무 자동화", + "대용량 문서 핵심 추출", + ] + bad = [ + "최신 실시간 정보 확인 (검색 미연동 시)", + "복잡한 수학 계산·논리적 검증", + "사용자의 숨겨진 의도 자동 파악", + "사실 여부 100% 보장 (환각 위험)", + "인간적 감각·경험 기반의 판단", + "결과물에 대한 법적 책임", + ] + + add_bullets(s, left_x + Inches(0.55), col_y + Inches(0.9), col_w - Inches(1.1), col_h - Inches(1.2), good, size=16, color=T.text) + add_bullets(s, right_x + Inches(0.55), col_y + Inches(0.9), col_w - Inches(1.1), col_h - Inches(1.2), bad, size=16, color=T.text) + + # Center VS bubble + vs = s.shapes.add_shape(MSO_AUTO_SHAPE_TYPE.OVAL, Inches(6.1), Inches(3.8), Inches(0.7), Inches(0.7)) + vs.fill.solid() + vs.fill.fore_color.rgb = _rgb("#EEF2F7") + vs.line.color.rgb = T.line + vs.text_frame.text = "VS" + vs.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER + vs.text_frame.paragraphs[0].runs[0].font.name = T.font_bold + vs.text_frame.paragraphs[0].runs[0].font.bold = True + vs.text_frame.paragraphs[0].runs[0].font.size = Pt(14) + vs.text_frame.paragraphs[0].runs[0].font.color.rgb = T.muted + + # Bottom callout + add_rect(s, Inches(0.7), Inches(6.55), Inches(11.93), Inches(0.65), fill=T.navy_2, line=None, radius=True) + add_textbox( + s, + Inches(0.95), + Inches(6.66), + Inches(11.4), + Inches(0.42), + "AI를 \"잘 쓴다\"는 것은, AI가 못하는 영역을 사람이 보완한다는 뜻입니다.", + size=16, + bold=True, + color=_rgb("#E5E7EB"), + align=PP_ALIGN.CENTER, + ) + add_footer(s, 4, dark=False) + + +def slide_05_hallucination(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "⚠ 왜 AI는 그럴듯하게 거짓말하는가?", size=14, bold=True, color=T.accent_red) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AI의 환각(Hallucination) 현상", size=40, bold=True, color=T.text) + add_pill(s, Inches(11.2), Inches(1.05), Inches(1.55), Inches(0.4), "Critical Issue", fill=_rgb("#FEE2E2"), fg=_rgb("#B91C1C")) + + # Definition box + add_rect(s, Inches(0.7), Inches(1.9), Inches(11.93), Inches(1.0), fill=_rgb("#F3F4F6"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(2.05), Inches(11.3), Inches(0.3), "환각(Hallucination)이란?", size=16, bold=True, color=T.text) + add_textbox( + s, + Inches(1.0), + Inches(2.35), + Inches(11.3), + Inches(0.5), + "AI가 사실이 아닌 내용을 마치 사실인 것처럼 자신 있게 답하는 현상입니다.\n" + "AI는 확률적으로 '자연스러운 문장'을 생성하는 과정에서 거짓 정보를 유창하게 만들어낼 수 있습니다.", + size=13, + bold=False, + color=T.muted, + line_spacing=1.2, + ) + + # Risk cards + x = Inches(0.7) + y = Inches(3.1) + w = Inches(3.82) + h = Inches(1.55) + g = Inches(0.35) + + def risk(xx, title, bullets): + add_rect(s, xx, y, w, h, fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_textbox(s, xx + Inches(0.25), y + Inches(0.2), w - Inches(0.5), Inches(0.3), title, size=14, bold=True, color=_rgb("#B91C1C")) + add_bullets(s, xx + Inches(0.25), y + Inches(0.55), w - Inches(0.5), h - Inches(0.6), bullets, size=12, color=_rgb("#7F1D1D")) + + risk(x, "가짜 정보 생성 사례", ["존재하지 않는 논문·자료 인용", "역사적 사실을 왜곡하여 설명", "없는 기능을 가진 것처럼 설명"]) + risk(x + w + g, "수치 오류 사례", ["틀린 계산 결과를 정확한 척 제시", "단위(원, 달러) 혼동하여 표기", "최신 통계가 아닌 과거 데이터 인용"]) + risk(x + (w + g) * 2, "법적/규정 위험 사례", ["개정 전 법률이나 규정을 답변", "저작권/라이선스 규정을 무시한 활용", "개인정보 보호 규정을 위반하는 제안"]) + + add_textbox(s, Inches(0.7), Inches(4.85), Inches(12), Inches(0.3), "✅ 환각을 피하는 3가지 습관", size=16, bold=True, color=_rgb("#15803D")) + + # Habits + hy = Inches(5.2) + hw = Inches(3.82) + hh = Inches(1.1) + + def habit(xx, title, desc): + add_rect(s, xx, hy, hw, hh, fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, xx + Inches(0.25), hy + Inches(0.25), hw - Inches(0.5), Inches(0.25), title, size=14, bold=True, color=_rgb("#15803D"), align=PP_ALIGN.CENTER) + add_textbox(s, xx + Inches(0.25), hy + Inches(0.55), hw - Inches(0.5), Inches(0.4), desc, size=12, bold=False, color=_rgb("#166534"), align=PP_ALIGN.CENTER, line_spacing=1.2) + + habit(Inches(0.7), "원문 대조 확인", "중요한 수치·법률·사실 관계는\n반드시 원문 문서와 대조하세요.") + habit(Inches(0.7) + hw + g, "출처 요청하기", "\"이 정보의 출처(URL)를 알려줘\"라고\n요청하여 근거를 확인하세요.") + habit(Inches(0.7) + (hw + g) * 2, "'초안'으로만 활용", "AI 답변은 최종 결과물이 아닌\n'검토가 필요한 초안'으로 대하세요.") + + add_footer(s, 5, dark=False) + + +def slide_06_prompt_definition(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 입력의 질이 출력의 질을 결정한다", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "프롬프트란 무엇인가?", size=40, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "AI와 소통하는 \"언어\" — 목적·상황·제약·형식을 한 번에 전달하는 지시서", size=16, bold=True, color=T.muted) + + add_textbox(s, Inches(0.7), Inches(2.1), Inches(12), Inches(0.3), "나쁜 프롬프트 vs 좋은 프롬프트 (예시 3가지)", size=16, bold=True, color=T.text) + rows = [ + ("보고서 써줘", "대상(누가 읽는지), 목적(왜), 형식(목차/분량)을 포함해서\n\"임원 보고용 1페이지 요약\"으로 작성해줘."), + ("요약해줘", "\"다음 글을 3줄 요약 + 핵심 키워드 5개\" 형식으로 요약해줘."), + ("분석해줘", "\"표로 정리(열: 문제, 원인, 영향, 개선안)\" 하고,\n결론을 먼저 제시한 뒤 근거를 번호로 달아줘."), + ] + y = Inches(2.5) + for i, (bad, good) in enumerate(rows): + yy = y + Inches(1.25) * i + add_rect(s, Inches(0.7), yy, Inches(5.9), Inches(1.05), fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_rect(s, Inches(6.75), yy, Inches(5.88), Inches(1.05), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(0.95), yy + Inches(0.2), Inches(5.4), Inches(0.25), "❌ 나쁜 프롬프트", size=12, bold=True, color=_rgb("#B91C1C")) + add_textbox(s, Inches(7.0), yy + Inches(0.2), Inches(5.4), Inches(0.25), "✅ 좋은 프롬프트", size=12, bold=True, color=_rgb("#15803D")) + add_textbox(s, Inches(0.95), yy + Inches(0.5), Inches(5.4), Inches(0.5), bad, size=18, bold=True, color=_rgb("#7F1D1D")) + add_textbox(s, Inches(7.0), yy + Inches(0.5), Inches(5.4), Inches(0.6), good, size=14, bold=False, color=_rgb("#166534"), line_spacing=1.15) + + add_footer(s, 6, dark=False) + + +def slide_07_language(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 프롬프트 설계 원칙", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "[사례 1] 언어 선택: 한국어 vs 영어", size=34, bold=True, color=T.text) + + add_rect(s, Inches(0.7), Inches(1.9), Inches(11.93), Inches(2.3), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.15), Inches(11.3), Inches(0.3), "왜 영어 입력이 더 정확한 경우가 있는가?", size=18, bold=True, color=T.text) + add_bullets( + s, + Inches(1.0), + Inches(2.55), + Inches(11.3), + Inches(1.4), + ["학습 데이터 불균형 (영어 데이터가 압도적으로 많음)", "전문 용어·기술 용어의 영어 표현이 더 풍부", "일부 모델/도구는 영어 지시에서 더 안정적으로 동작"], + size=16, + color=T.text, + ) + add_rect(s, Inches(0.7), Inches(4.45), Inches(11.93), Inches(1.35), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.62), Inches(5.8), Inches(0.3), "실무 팁", size=14, bold=True, color=T.accent_yellow) + add_textbox(s, Inches(1.0), Inches(4.92), Inches(6.6), Inches(0.7), "영어로 묻고, 한국어로 출력 요청하기\n예) \"Answer in Korean, and format as a table.\"", size=14, bold=True, color=_rgb("#E5E7EB"), line_spacing=1.2) + add_textbox(s, Inches(8.0), Inches(4.75), Inches(4.4), Inches(0.9), "실습\n동일 질문 한/영 비교 결과 시연", size=16, bold=True, color=_rgb("#E5E7EB"), align=PP_ALIGN.CENTER, line_spacing=1.2) + add_footer(s, 7, dark=False) + + +def slide_08_context(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 프롬프트 설계 원칙", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "[사례 2] 정보의 완전성 — 맥락이 없으면 중의성이 생긴다", size=28, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "핵심 원리: \"목적 + 상황 + 제약 조건\"을 모두 포함하라", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(1.9), fill=T.white, line=T.line, radius=True) + add_rect(s, Inches(0.7), Inches(2.05), Inches(5.8), Inches(1.9), fill=_rgb("#FFF1F2"), line=None, radius=True) + add_rect(s, Inches(6.83), Inches(2.05), Inches(5.8), Inches(1.9), fill=_rgb("#E9FBF1"), line=None, radius=True) + add_textbox(s, Inches(1.05), Inches(2.25), Inches(5.2), Inches(0.3), "❌ 중의적", size=14, bold=True, color=_rgb("#B91C1C")) + add_textbox(s, Inches(7.15), Inches(2.25), Inches(5.2), Inches(0.3), "✅ 명확", size=14, bold=True, color=_rgb("#15803D")) + add_textbox(s, Inches(1.05), Inches(2.65), Inches(5.2), Inches(0.8), "\"세차장에 갑니다. 걸어갈까요?\"", size=22, bold=True, color=_rgb("#7F1D1D"), line_spacing=1.1) + add_textbox(s, Inches(7.15), Inches(2.65), Inches(5.2), Inches(0.8), "\"세차하러 갑니다. 걸어갈까요?\"", size=22, bold=True, color=_rgb("#166534"), line_spacing=1.1) + add_textbox(s, Inches(1.05), Inches(3.35), Inches(5.2), Inches(0.4), "목적이 빠지면 해석이 여러 개로 갈립니다.", size=14, bold=False, color=_rgb("#7F1D1D")) + add_textbox(s, Inches(7.15), Inches(3.35), Inches(5.2), Inches(0.4), "목적을 넣으면 AI도 명확히 답합니다.", size=14, bold=False, color=_rgb("#166534")) + + add_rect(s, Inches(0.7), Inches(4.2), Inches(11.93), Inches(1.85), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.35), Inches(11.3), Inches(0.3), "실무 적용", size=14, bold=True, color=T.accent_yellow) + add_bullets( + s, + Inches(1.0), + Inches(4.7), + Inches(11.3), + Inches(1.2), + ["보고서/기획서 요청 시: \"누가 읽는지\"(대상) + \"목적\" + \"형식(분량/목차)\"을 함께 제공", "제약 조건(기간/데이터 범위/금지사항)을 명시하면 결과가 안정적으로 개선"], + size=15, + color=_rgb("#E5E7EB"), + ) + add_footer(s, 8, dark=False) + + +def slide_09_5w1h(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 프롬프트 설계 원칙", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "5W1H 프롬프트 프레임", size=40, bold=True, color=T.text) + + frame = [ + ("Who", "역할 설정", "예: \"너는 제약업계 10년 경력의 마케터야\""), + ("What", "원하는 산출물", "예: \"임원 보고용 1페이지 요약\""), + ("Why", "목적·배경", "예: \"AX 과제 선정 회의 자료로 사용할 거야\""), + ("When/Where", "상황·컨텍스트", "예: \"지난 분기 데이터 기준, 국내 시장\""), + ("How", "출력 형식", "예: \"표(열: 항목, 근거, 리스크) + 결론 먼저\""), + ] + y = Inches(2.0) + row_h = Inches(0.95) + for i, (k, t, ex) in enumerate(frame): + yy = y + row_h * i + add_rect(s, Inches(0.7), yy, Inches(11.93), row_h - Inches(0.12), fill=T.white, line=T.line, radius=True) + add_rect(s, Inches(0.7), yy, Inches(1.6), row_h - Inches(0.12), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(0.7), yy + Inches(0.18), Inches(1.6), Inches(0.3), k, size=16, bold=True, color=T.accent_yellow, align=PP_ALIGN.CENTER) + add_textbox(s, Inches(2.45), yy + Inches(0.18), Inches(3.2), Inches(0.3), t, size=18, bold=True, color=T.text) + add_textbox(s, Inches(2.45), yy + Inches(0.5), Inches(9.9), Inches(0.35), ex, size=14, bold=False, color=T.muted) + add_footer(s, 9, dark=False) + + +def slide_10_format(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 프롬프트 설계 원칙", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "출력 형식을 지정하라", size=40, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "형식을 안 주면 AI가 알아서 결정 → 원하는 형태가 아닐 수 있음", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(5.9), Inches(3.0), fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_rect(s, Inches(6.75), Inches(2.05), Inches(5.88), Inches(3.0), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(0.95), Inches(2.25), Inches(5.4), Inches(0.3), "Before", size=14, bold=True, color=_rgb("#B91C1C")) + add_textbox(s, Inches(7.0), Inches(2.25), Inches(5.4), Inches(0.3), "After", size=14, bold=True, color=_rgb("#15803D")) + add_textbox(s, Inches(0.95), Inches(2.65), Inches(5.4), Inches(1.0), "\"이 자료 분석해줘\"", size=22, bold=True, color=_rgb("#7F1D1D")) + add_textbox( + s, + Inches(7.0), + Inches(2.65), + Inches(5.4), + Inches(1.4), + "\"표로 만들어줘 (열: 항목명, 장점, 단점)\"\n\"3줄 요약으로\"\n\"결론 먼저, 근거는 번호 순으로\"", + size=16, + bold=True, + color=_rgb("#166534"), + line_spacing=1.2, + ) + add_rect(s, Inches(0.7), Inches(5.25), Inches(11.93), Inches(1.1), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox( + s, + Inches(1.0), + Inches(5.4), + Inches(11.3), + Inches(0.8), + "체크포인트\n- 형식(표/글머리/단계)\n- 분량(3줄/1페이지)\n- 순서(결론 먼저)\n- 톤(전문/간결/친절)", + size=14, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.15, + ) + add_footer(s, 10, dark=False) + + +def slide_11_role(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 2. 프롬프트 설계 원칙", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "역할 부여(Role Prompting) 기법", size=36, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "\"너는 ○○이야\" 선언의 효과: 관점·깊이·어조를 통제", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(2.1), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.25), Inches(11.3), Inches(0.3), "예시", size=14, bold=True, color=T.muted) + add_rect(s, Inches(1.0), Inches(2.6), Inches(11.3), Inches(1.35), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox( + s, + Inches(1.3), + Inches(2.75), + Inches(10.7), + Inches(1.0), + "너는 대웅제약 CFO야.\n다음 데이터를 분석해줘. (목표: 비용 절감 관점, 리스크 포함, 1페이지 요약)", + size=18, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.2, + ) + + add_rect(s, Inches(0.7), Inches(4.35), Inches(11.93), Inches(2.0), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(1.0), Inches(4.55), Inches(11.3), Inches(0.3), "실습", size=14, bold=True, color=_rgb("#15803D")) + add_bullets( + s, + Inches(1.0), + Inches(4.9), + Inches(11.3), + Inches(1.3), + ["동일 데이터를 영업팀장 / 재무팀장 / CEO 역할로 각각 분석", "출력의 관점·강조점·결론이 어떻게 달라지는지 비교"], + size=16, + color=_rgb("#166534"), + ) + add_footer(s, 11, dark=False) + + +def slide_12_steps(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 3. AI를 더 똑똑하게 쓰는 고급 기법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "단계적 사고 유도", size=40, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "복잡한 문제일수록 절차(단계)를 나눠서 요청하면 결과가 좋아집니다.", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.0), Inches(11.93), Inches(1.8), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.2), Inches(11.3), Inches(0.3), "좋은 요청 방식", size=14, bold=True, color=T.muted) + add_bullets( + s, + Inches(1.0), + Inches(2.55), + Inches(11.3), + Inches(1.1), + ["\"문제를 단계별로 해결 절차로 나눠서 제시해줘\"", "\"각 단계마다 체크리스트를 만들고, 누락된 정보를 질문해줘\"", "\"최종 답변은 마지막에 요약해줘\""], + size=16, + color=T.text, + ) + add_rect(s, Inches(0.7), Inches(4.05), Inches(11.93), Inches(2.3), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.25), Inches(11.3), Inches(0.3), "예시 (AX 과제 선정 기준 적용)", size=14, bold=True, color=T.accent_yellow) + add_textbox( + s, + Inches(1.0), + Inches(4.55), + Inches(11.3), + Inches(1.6), + "과제 후보 3개를 아래 체크리스트 7개 기준으로 하나씩 평가해줘.\n" + "1) 목표 명확성 2) 데이터 확보 가능성 3) 기대효과(정량/정성)\n" + "4) 구현 난이도 5) 리스크(보안/규정) 6) 확장성 7) 일정 적합성\n" + "출력: 표(열: 기준, 평가, 근거, 리스크) + 결론(우선순위) 먼저", + size=15, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.2, + ) + add_footer(s, 12, dark=False) + + +def slide_13_fewshot(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 3. 고급 기법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "예시 제공 (Few‑Shot Prompting)", size=34, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "\"이런 식으로 해줘\" — 예시 1~3개의 위력", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.0), Inches(11.93), Inches(2.25), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.2), Inches(11.3), Inches(0.3), "효과", size=14, bold=True, color=T.muted) + add_bullets(s, Inches(1.0), Inches(2.55), Inches(11.3), Inches(1.5), ["출력 형식, 어조, 수준을 예시로 통제", "모호한 요구를 '정답 샘플'로 명확히 전달", "팀 내 산출물 스타일을 표준화"], size=16, color=T.text) + + add_rect(s, Inches(0.7), Inches(4.45), Inches(11.93), Inches(1.9), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(1.0), Inches(4.65), Inches(11.3), Inches(0.3), "[사례 3] 응용", size=14, bold=True, color=_rgb("#15803D")) + add_textbox( + s, + Inches(1.0), + Inches(4.95), + Inches(11.3), + Inches(1.2), + "`20260223_report_10.doc`를 예시로 제공 → 동일 형식의 보고서를 자동 생성\n" + "프롬프트에 \"예시 문서의 목차/톤/표현을 유지\" 조건을 포함", + size=16, + bold=True, + color=_rgb("#166534"), + line_spacing=1.2, + ) + add_footer(s, 13, dark=False) + + +def slide_14_context_window(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 3. 고급 기법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "맥락 누적 활용 (Context Window 관리)", size=30, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "대화가 길어질수록 앞 조건을 잊을 수 있으니, 핵심 조건을 관리해야 합니다.", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(1.8), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.25), Inches(11.3), Inches(0.3), "실무 습관", size=14, bold=True, color=T.muted) + add_bullets( + s, + Inches(1.0), + Inches(2.6), + Inches(11.3), + Inches(1.2), + ["중요한 조건은 대화 앞부분에 배치", "새 대화 시작 시 \"지금까지 정한 것\" 요약을 먼저 붙여넣기", "긴 문서는 분할(Chunk) + 요약 누적 전략 사용"], + size=16, + color=T.text, + ) + + add_rect(s, Inches(0.7), Inches(4.05), Inches(11.93), Inches(2.3), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.25), Inches(11.3), Inches(0.3), "분할 전략 예시", size=14, bold=True, color=T.accent_yellow) + add_textbox( + s, + Inches(1.0), + Inches(4.55), + Inches(11.3), + Inches(1.6), + "1) 문서를 3~5페이지 단위로 나눠 요약 요청\n" + "2) 각 요약을 '핵심 포인트/결정사항/숫자' 위주로 정리\n" + "3) 마지막에 모든 요약을 합쳐 최종 보고서 작성 요청", + size=16, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.2, + ) + add_footer(s, 14, dark=False) + + +def slide_15_iterative(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 3. 고급 기법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "반복 정제 (Iterative Refinement)", size=34, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "첫 번째 답이 완벽할 필요는 없습니다. 초안 → 피드백 → 확정", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(2.0), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.25), Inches(11.3), Inches(0.3), "자주 쓰는 후속 프롬프트", size=14, bold=True, color=T.muted) + add_bullets( + s, + Inches(1.0), + Inches(2.6), + Inches(11.3), + Inches(1.3), + ["\"더 간결하게\"", "\"3번 항목을 더 구체적으로\"", "\"전문적 어조로 바꿔줘\"", "\"표로 재구성해줘\"", "\"리스크/반론도 함께 제시해줘\""], + size=16, + color=T.text, + ) + + add_rect(s, Inches(0.7), Inches(4.25), Inches(11.93), Inches(2.1), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(1.0), Inches(4.45), Inches(11.3), Inches(0.3), "실무 비유", size=14, bold=True, color=_rgb("#15803D")) + add_textbox( + s, + Inches(1.0), + Inches(4.75), + Inches(11.3), + Inches(1.4), + "AI는 탁월한 \"초안 작성자\"입니다.\n" + "사람은 검토자(Reviewer)로서 방향을 잡고, 근거·수치·규정을 확인해 완성도를 올립니다.", + size=18, + bold=True, + color=_rgb("#166534"), + line_spacing=1.2, + ) + add_footer(s, 15, dark=False) + + +def slide_16_files(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 3. 고급 기법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "파일·데이터 연동 활용", size=40, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "CSV, Excel, Word, PDF 등 정형/반정형 데이터를 먹이면 성능이 크게 개선됩니다.", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(2.35), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.25), Inches(11.3), Inches(0.3), "실무 예시", size=14, bold=True, color=T.muted) + add_bullets( + s, + Inches(1.0), + Inches(2.6), + Inches(11.3), + Inches(1.7), + ["채용: 지원서(CSV) + 평가 기준(문서) → 자동 평가 코멘트 생성", "과제 선정: 신청 양식 + 프로세스 문서 → 기준별 점수/근거 표 생성", "성과 평가: KPI 테이블 + 코멘트 → 요약 및 이슈 탐지"], + size=16, + color=T.text, + ) + + add_rect(s, Inches(0.7), Inches(4.6), Inches(11.93), Inches(1.75), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.8), Inches(11.3), Inches(0.3), "포인트: 데이터 구조화", size=14, bold=True, color=T.accent_yellow) + add_textbox( + s, + Inches(1.0), + Inches(5.1), + Inches(11.3), + Inches(1.1), + "AI는 정형 데이터(표/필드)를 더 잘 처리합니다.\n" + "입력 데이터에 컬럼명, 단위, 기간, 정의를 명시하면 오류가 크게 줄어듭니다.", + size=16, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.2, + ) + add_footer(s, 16, dark=False) + + +def slide_17_trust(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 4. 실수하지 않는 AI 활용법", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AI를 믿어야 할 때 vs 검증해야 할 때", size=28, bold=True, color=T.text) + + add_rect(s, Inches(0.7), Inches(1.9), Inches(5.9), Inches(4.45), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_rect(s, Inches(6.75), Inches(1.9), Inches(5.88), Inches(4.45), fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_textbox(s, Inches(0.95), Inches(2.15), Inches(5.4), Inches(0.35), "믿어도 되는 경우", size=18, bold=True, color=_rgb("#15803D")) + add_textbox(s, Inches(7.0), Inches(2.15), Inches(5.4), Inches(0.35), "반드시 검증", size=18, bold=True, color=_rgb("#B91C1C")) + add_bullets(s, Inches(0.95), Inches(2.6), Inches(5.4), Inches(3.6), ["형식 작업(문장 다듬기, 문서 구성)", "요약, 번역", "초안 작성(메일/보고서)", "코드 생성(단, 테스트/리뷰 필수)"], size=16, color=_rgb("#166534")) + add_bullets(s, Inches(7.0), Inches(2.6), Inches(5.4), Inches(3.6), ["수치·통계", "법률·규정", "최신 정보", "사람 이름/조직명", "의사결정에 영향을 주는 사실"], size=16, color=_rgb("#7F1D1D")) + + add_rect(s, Inches(0.7), Inches(6.55), Inches(11.93), Inches(0.65), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(6.68), Inches(11.3), Inches(0.4), "\"AI가 틀렸다\"가 아니라 \"내가 확인하지 않았다\"", size=18, bold=True, color=_rgb("#E5E7EB"), align=PP_ALIGN.CENTER) + add_footer(s, 17, dark=False) + + +def slide_18_security(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 4. 보안과 개인정보", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "무엇을 넣으면 안 되는가", size=40, bold=True, color=T.text) + add_rect(s, Inches(0.7), Inches(1.9), Inches(11.93), Inches(2.45), fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_textbox(s, Inches(1.0), Inches(2.1), Inches(11.3), Inches(0.3), "입력 금지", size=16, bold=True, color=_rgb("#B91C1C")) + add_bullets(s, Inches(1.0), Inches(2.45), Inches(11.3), Inches(1.8), ["사내 기밀 데이터", "개인식별정보(PII): 이름/주민번호/연락처/계좌/주소 등", "고객·환자·직원 데이터 원문", "계약서/특허 등 민감 문서의 원문"], size=16, color=_rgb("#7F1D1D")) + + add_rect(s, Inches(0.7), Inches(4.55), Inches(11.93), Inches(1.8), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(1.0), Inches(4.75), Inches(11.3), Inches(0.3), "대안", size=16, bold=True, color=_rgb("#15803D")) + add_bullets(s, Inches(1.0), Inches(5.1), Inches(11.3), Inches(1.1), ["가명화/익명화 후 활용 (ID 치환, 숫자 범위화)", "내부/사내 AI 툴 사용 여부 확인", "필요 최소 정보만 제공 + 출력은 요약 중심"], size=16, color=_rgb("#166534")) + add_footer(s, 18, dark=False) + + +def slide_19_copyright(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 4. 저작권과 책임", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AI 결과물의 저작권과 책임", size=36, bold=True, color=T.text) + add_rect(s, Inches(0.7), Inches(1.9), Inches(11.93), Inches(4.45), fill=T.white, line=T.line, radius=True) + add_bullets( + s, + Inches(1.0), + Inches(2.2), + Inches(11.3), + Inches(3.8), + ["AI 생성물의 법적 지위는 국가/시점/정책에 따라 달라질 수 있음", "출처 표기와 사실 확인의 의무는 사용자에게 있음", "최종 결과물에 대한 책임은 항상 사람에게", "사내 가이드라인(대웅그룹 AI 활용 가이드라인)과 연계해 준수"], + size=18, + color=T.text, + ) + add_footer(s, 19, dark=False) + + +def slide_20_skills(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 4. 역량 재정의", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AI 환경에서의 직무 역량 재정의", size=30, bold=True, color=T.text) + add_rect(s, Inches(0.7), Inches(1.9), Inches(5.9), Inches(4.45), fill=_rgb("#FFF1F2"), line=_rgb("#FECACA"), radius=True) + add_rect(s, Inches(6.75), Inches(1.9), Inches(5.88), Inches(4.45), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(0.95), Inches(2.15), Inches(5.4), Inches(0.35), "상대적으로 약해지는 역량", size=16, bold=True, color=_rgb("#B91C1C")) + add_textbox(s, Inches(7.0), Inches(2.15), Inches(5.4), Inches(0.35), "더 중요해지는 역량", size=16, bold=True, color=_rgb("#15803D")) + add_bullets(s, Inches(0.95), Inches(2.55), Inches(5.4), Inches(3.7), ["단순 요약/정리", "반복 문서 작성", "기본 번역", "정형 보고서 초안"], size=16, color=_rgb("#7F1D1D")) + add_bullets(s, Inches(7.0), Inches(2.55), Inches(5.4), Inches(3.7), ["문제 정의와 목표 설정", "좋은 질문(프롬프트) 설계", "검증·리스크 관리", "의사결정과 책임", "업무 프로세스 설계(워크플로우)"], size=16, color=_rgb("#166534")) + add_rect(s, Inches(0.7), Inches(6.55), Inches(11.93), Inches(0.65), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(6.68), Inches(11.3), Inches(0.4), "\"AI에게 좋은 질문을 하는 능력\" = 새로운 핵심 역량", size=18, bold=True, color=_rgb("#E5E7EB"), align=PP_ALIGN.CENTER) + add_footer(s, 20, dark=False) + + +def slide_21_scenarios(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 5. 실전 적용 — 대웅 AX 과제와 연결", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "부서별 AI 활용 시나리오 맵", size=40, bold=True, color=T.text) + + cards = [ + ("영업", ["채권 현황 조회", "인사이트 자동 생성"], T.accent_blue), + ("마케팅", ["대시보드 결산 자동 작성", "기사/콘텐츠 초안 생성"], T.accent_yellow), + ("재무/회계", ["지출 증빙 검토 자동화", "이상 지출 탐지"], T.accent_green), + ("연구개발", ["특허·논문 요약", "보고서 초안"], _rgb("#A855F7")), + ("HR", ["면접 분석", "교육 콘텐츠 생성"], T.accent_red), + ] + x0 = Inches(0.7) + y0 = Inches(2.0) + w = Inches(3.82) + h = Inches(1.75) + g = Inches(0.35) + positions = [ + (x0, y0), + (x0 + w + g, y0), + (x0 + (w + g) * 2, y0), + (x0 + w / 2 + g / 2, y0 + h + g), + (x0 + (w + g) * 1.5, y0 + h + g), + ] + for (title, lines, accent), (xx, yy) in zip(cards, positions, strict=True): + add_rect(s, xx, yy, w, h, fill=T.white, line=T.line, radius=True) + add_rect(s, xx, yy, w, Inches(0.08), fill=accent, line=None) + add_textbox(s, xx + Inches(0.25), yy + Inches(0.35), w - Inches(0.5), Inches(0.3), title, size=18, bold=True, color=T.text) + add_bullets(s, xx + Inches(0.25), yy + Inches(0.75), w - Inches(0.5), Inches(0.9), lines, size=14, color=T.muted) + add_footer(s, 21, dark=False) + + +def slide_22_ax_application(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 5. 실전 적용", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "AX 과제 신청 단계에서의 AI 활용", size=32, bold=True, color=T.text) + add_textbox(s, Inches(0.7), Inches(1.55), Inches(12), Inches(0.35), "신청서 작성 → 자기검토 → 평가 기준 정렬까지 한 번에", size=16, bold=True, color=T.muted) + + add_rect(s, Inches(0.7), Inches(2.05), Inches(11.93), Inches(2.25), fill=T.white, line=T.line, radius=True) + add_textbox(s, Inches(1.0), Inches(2.25), Inches(11.3), Inches(0.3), "활용 포인트", size=14, bold=True, color=T.muted) + add_bullets( + s, + Inches(1.0), + Inches(2.6), + Inches(11.3), + Inches(1.6), + ["신청서 작성 시 AI 도움받기: As‑Is → To‑Be 구조화", "과제 평가 기준에 맞는 자기검토(누락 항목 질문하도록)", "정량 효과/리스크(보안·규정)까지 포함해 완성도 향상"], + size=16, + color=T.text, + ) + add_rect(s, Inches(0.7), Inches(4.55), Inches(11.93), Inches(1.8), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(1.0), Inches(4.75), Inches(11.3), Inches(0.3), "데모 데이터", size=14, bold=True, color=T.accent_yellow) + add_textbox( + s, + Inches(1.0), + Inches(5.05), + Inches(11.3), + Inches(1.2), + "`20260223.csv` + `AX추진프로세스.docx` → 자동 평가 보고서 생성 시연", + size=18, + bold=True, + color=_rgb("#E5E7EB"), + line_spacing=1.2, + ) + add_footer(s, 22, dark=False) + + +def slide_23_routine(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.bg) + add_textbox(s, Inches(0.7), Inches(0.55), Inches(12), Inches(0.3), "PART 5. 실전 적용", size=14, bold=True, color=T.muted) + add_textbox(s, Inches(0.7), Inches(0.9), Inches(12), Inches(0.7), "나만의 AI 활용 루틴 만들기", size=40, bold=True, color=T.text) + + cards = [ + ("Daily", "AI 초안 작성 → 내가 검토·수정", T.accent_blue), + ("Weekly", "반복 업무 프롬프트 템플릿화", T.accent_green), + ("Monthly", "AI 활용 성과 측정 (시간 절감, 품질)", T.accent_yellow), + ] + x = Inches(0.7) + y = Inches(2.05) + w = Inches(3.82) + h = Inches(2.0) + g = Inches(0.35) + for i, (t, d, a) in enumerate(cards): + xx = x + (w + g) * i + add_rect(s, xx, y, w, h, fill=T.white, line=T.line, radius=True) + add_rect(s, xx, y, w, Inches(0.08), fill=a, line=None) + add_textbox(s, xx + Inches(0.25), y + Inches(0.45), w - Inches(0.5), Inches(0.3), t, size=18, bold=True, color=T.text) + add_textbox(s, xx + Inches(0.25), y + Inches(0.85), w - Inches(0.5), Inches(0.9), d, size=16, bold=True, color=T.muted, line_spacing=1.2) + + add_rect(s, Inches(0.7), Inches(4.35), Inches(11.93), Inches(2.0), fill=_rgb("#E9FBF1"), line=_rgb("#BBF7D0"), radius=True) + add_textbox(s, Inches(1.0), Inches(4.55), Inches(11.3), Inches(0.3), "권장", size=14, bold=True, color=_rgb("#15803D")) + add_textbox(s, Inches(1.0), Inches(4.85), Inches(11.3), Inches(1.2), "프롬프트 라이브러리를 구축하세요.\n(업무별 템플릿 + 예시 + 검증 체크리스트)", size=20, bold=True, color=_rgb("#166534"), line_spacing=1.2) + add_footer(s, 23, dark=False) + + +def slide_24_closing(prs: Presentation) -> None: + s = prs.slides.add_slide(prs.slide_layouts[6]) + set_slide_bg(s, T.navy) + add_textbox(s, Inches(0.7), Inches(0.7), Inches(12), Inches(0.4), "PART 5. 마무리", size=14, bold=True, color=_rgb("#D1D5DB")) + add_textbox(s, Inches(0.7), Inches(1.1), Inches(12), Inches(0.9), "AI와 함께 일하는 미래", size=46, bold=True, color=T.white) + add_rect(s, Inches(0.7), Inches(2.15), Inches(11.93), Inches(0.05), fill=T.accent_yellow, line=None) + add_textbox(s, Inches(0.7), Inches(2.35), Inches(12), Inches(0.6), "AI는 대체자가 아닌 증폭기(Amplifier)", size=28, bold=True, color=T.accent_yellow) + add_bullets( + s, + Inches(0.9), + Inches(3.2), + Inches(12), + Inches(2.0), + ["잘 쓰는 사람과 못 쓰는 사람의 격차는 계속 벌어진다", "지금 시작하는 것이 가장 빠른 것", "핵심은: 목적·맥락·제약·형식 + 검증"], + size=20, + color=_rgb("#E5E7EB"), + ) + add_rect(s, Inches(0.7), Inches(5.7), Inches(11.93), Inches(0.9), fill=_rgb("#24364D"), line=None, radius=True) + add_textbox(s, Inches(0.7), Inches(5.9), Inches(11.93), Inches(0.5), "Q&A / 다음 학습 자원 안내", size=26, bold=True, color=T.white, align=PP_ALIGN.CENTER) + add_footer(s, 24, dark=True) + + +def build_ppt() -> Presentation: + prs = Presentation() + prs.slide_width = SLIDE_W + prs.slide_height = SLIDE_H + + # Slides 1-5 (re-created as editable) + slide_01_cover(prs) + slide_02_core_assumptions(prs) + slide_03_llm(prs) + slide_04_good_vs_bad(prs) + slide_05_hallucination(prs) + + # Slides 6-24 per outline + slide_06_prompt_definition(prs) + slide_07_language(prs) + slide_08_context(prs) + slide_09_5w1h(prs) + slide_10_format(prs) + slide_11_role(prs) + slide_12_steps(prs) + slide_13_fewshot(prs) + slide_14_context_window(prs) + slide_15_iterative(prs) + slide_16_files(prs) + slide_17_trust(prs) + slide_18_security(prs) + slide_19_copyright(prs) + slide_20_skills(prs) + slide_21_scenarios(prs) + slide_22_ax_application(prs) + slide_23_routine(prs) + slide_24_closing(prs) + + return prs + + +def validate(prs: Presentation) -> None: + if len(prs.slides) != 24: + raise ValueError(f"expected 24 slides, got {len(prs.slides)}") + # Ensure no full-slide raster images are used (editable requirement) + from pptx.enum.shapes import MSO_SHAPE_TYPE + + pics = 0 + for slide in prs.slides: + for sh in slide.shapes: + if sh.shape_type == MSO_SHAPE_TYPE.PICTURE: + pics += 1 + if pics != 0: + raise ValueError(f"expected 0 picture shapes, got {pics}") + + +def main() -> None: + base_dir = Path(__file__).resolve().parent + out = base_dir / "outputs" / "ai_work.pptx" + out.parent.mkdir(parents=True, exist_ok=True) + prs = build_ppt() + validate(prs) + prs.save(str(out)) + print(f"wrote {out} ({out.stat().st_size:,} bytes)") + + +if __name__ == "__main__": + main() + diff --git a/AI로 일하는 방법/inspect_ai_work_source.py b/AI로 일하는 방법/inspect_ai_work_source.py new file mode 100644 index 0000000..af1c586 --- /dev/null +++ b/AI로 일하는 방법/inspect_ai_work_source.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from collections import Counter +from pathlib import Path + +from pptx import Presentation +from pptx.enum.shapes import MSO_SHAPE_TYPE + + +def main() -> None: + base_dir = Path(__file__).resolve().parent + src = base_dir / "resources" / "inputs" / "ai_work_source.pptx" + if not src.exists(): + raise FileNotFoundError(src) + + prs = Presentation(str(src)) + print(f"file={src} slides={len(prs.slides)}") + + for idx, slide in enumerate(prs.slides, start=1): + types = Counter() + text_shapes = 0 + picture_shapes = 0 + tables = 0 + for sh in slide.shapes: + types[sh.shape_type] += 1 + if sh.shape_type == MSO_SHAPE_TYPE.PICTURE: + picture_shapes += 1 + if getattr(sh, "has_table", False): + tables += 1 + if getattr(sh, "has_text_frame", False) and sh.text_frame.text.strip(): + text_shapes += 1 + + print( + f"Slide {idx:02d}: shapes={len(slide.shapes)} " + f"textShapes={text_shapes} pictures={picture_shapes} tables={tables} " + f"typeCounts={dict(types)}" + ) + + # Print a short preview of actual text content (if any) + previews: list[str] = [] + for sh in slide.shapes: + if getattr(sh, "has_text_frame", False): + t = sh.text_frame.text.strip() + if t: + previews.append(t.replace("\n", " / ")) + if previews: + for t in previews[:8]: + print(f" - {t[:160]}") + + +if __name__ == "__main__": + main() + diff --git a/AI로 일하는 방법/outputs/ai_work.pptx b/AI로 일하는 방법/outputs/ai_work.pptx new file mode 100644 index 0000000..59bc1c0 Binary files /dev/null and b/AI로 일하는 방법/outputs/ai_work.pptx differ diff --git a/AI로 일하는 방법/prompt/PROMPT_ai_work_source b/AI로 일하는 방법/prompt/PROMPT_ai_work_source new file mode 100644 index 0000000..3aee99a --- /dev/null +++ b/AI로 일하는 방법/prompt/PROMPT_ai_work_source @@ -0,0 +1,140 @@ +다음과 같은 내용으로 교육 자료를 작성 중에 있습니다. +resources/ai_work_source.pptx는 Slide1~5까지 작성이 된 것입니다. +1) 이미지로 되어 있는 Slide1~5는 PPT 형색으로 작성해주세요. +2) 목차와 Slide1~5까지를 참조하여 Slide6부터 전체 Slide를 작성햊세요. +3) 작성 슬라이드는 resources/ai_work.pptx로 저장해주세요. + +📋 LLM AI 툴 활용 교육 슬라이드 목차 설계안 +부제: "AI에게 잘 시키는 법 — 실무자를 위한 프롬프트 & 워크플로우 완전 가이드" +🗂️ PART 0. 오프닝 (Slides 1~2) +Slide 1 — 표지 / 과정 소개 +교육 목적: "AI를 쓰는 것"이 아니라 "AI가 일하게 만드는 것" +대상: 전 직책자 및 AX 과제 수행 인원 +구성 개요 (5 Part / 총 N슬라이드) +Slide 2 — 이것만 알아도 80%다: 핵심 전제 3가지 +AI는 당신이 준 정보만큼 답한다 +AI는 틀린 답을 자신 있게 말한다 +AI는 도구이지, 판단자가 아니다 +세차장 사례 (첫 번째 이미지) 인용 — "목적이 빠지면 답이 달라진다" + +🗂️ PART 1. AI는 어떻게 생각하는가? — LLM 작동 원리 이해 (Slides 3~5) +Slide 3 — LLM이란 무엇인가? +확률 기반 언어 예측 모델 (다음 단어를 예측하는 기계) +"지식"이 아니라 "패턴"을 학습 +왜 같은 질문도 다르게 답하는가? +Slide 4 — AI가 잘하는 것 vs 못하는 것 +잘하는 것 ✅ 못하는 것 ❌ +구조화된 글 작성 최신 실시간 정보 +요약·번역·분류 수학 계산(복잡한 것) +패턴 인식 나의 의도를 알아서 읽기 +코드 생성 사실 여부 보장 +Slide 5 — AI의 "환각(Hallucination)" 현상 이해 +왜 AI는 그럴듯하게 거짓말하는가? +사실 기반 질문과 창의 기반 질문의 차이 +검증의 의무는 항상 사람에게 있다 +🗂️ PART 2. 입력의 질이 출력의 질을 결정한다 — 프롬프트 설계 원칙 (Slides 6~11) +Slide 6 — 프롬프트란 무엇인가? +AI와 소통하는 "언어" +나쁜 프롬프트 vs 좋은 프롬프트 비교 예시 3가지 +Slide 7 — [사례 1] 언어 선택: 한국어 vs 영어 +왜 영어 입력이 더 정확한 경우가 있는가? +학습 데이터 불균형 (영어 데이터 압도적) +전문 용어·기술 용어의 영어 표현 풍부 +실무 팁: 영어로 묻고, 한국어로 출력 요청 +실습: 동일 질문 한/영 비교 결과 시연 +Slide 8 — [사례 2] 정보의 완전성 — 맥락이 없으면 중의성이 생긴다 +핵심 원리: "목적 + 상황 + 제약 조건"을 모두 포함하라 +❌ "세차장에 갑니다. 걸어갈까요?" → 해석이 여러 개 +✅ "세차하러 갑니다. 걸어갈까요?" → 명확한 답 +실무 적용: 보고서 요청 시 "누가 읽는지", "어떤 포맷인지" 포함 +Slide 9 — 5W1H 프롬프트 프레임 +Who: 역할 설정 (예: "너는 제약업계 10년 경력의 마케터야") +What: 원하는 산출물 명시 +Why: 목적·배경 설명 +When/Where: 상황·컨텍스트 제공 +How: 출력 형식 지정 (표, 글머리, 단계별 등) +Slide 10 — 출력 형식을 지정하라 +형식을 안 주면 AI가 알아서 → 원하는 형태가 아닐 수 있음 +형식 지정 예시: +"표로 만들어줘 (열: 항목명, 장점, 단점)" +"3줄 요약으로" +"결론 먼저, 근거는 번호 순으로" +Before/After 비교 슬라이드 +Slide 11 — 역할 부여(Role Prompting) 기법 +"너는 ○○이야" 선언의 효과 +예: "너는 대웅제약 CFO야. 다음 데이터를 분석해줘" +역할에 따라 관점·깊이·어조가 달라짐 +실습: 동일 데이터를 영업팀장 / 재무팀장 / CEO 역할로 분석 +🗂️ PART 3. AI를 더 똑똑하게 쓰는 고급 기법 (Slides 12~16) +Slide 12 — 단계적 사고 유도 (Chain of Thought) +"단계별로 생각해줘 (Let's think step by step)" 의 마법 +복잡한 문제일수록 단계를 나눠서 질문 +예: 과제 선정 기준 적용 → 체크리스트 7개를 하나씩 순서대로 +Slide 13 — 예시 제공 (Few-Shot Prompting) +"이런 식으로 해줘" — 예시 1~3개의 위력 +출력 형식, 어조, 수준을 예시로 통제 +[사례 3] 응용: 20260223_report_10.doc를 예시로 주면 → 동일 형식의 보고서 자동 생성 +Slide 14 — 맥락 누적 활용 (Context Window 관리) +대화 길어질수록 앞 내용을 AI가 잊는다 +중요한 조건은 대화 앞부분에 배치 +새 대화 시작 시 "지금까지 정한 것" 요약 붙여넣기 습관 +긴 문서 처리 시 분할 전략 +Slide 15 — 반복 정제 (Iterative Refinement) +첫 번째 답이 완벽할 필요 없다 +"더 간결하게", "3번 항목을 더 구체적으로", "전문적 어조로 바꿔줘" +AI와 대화는 초안 → 수정 → 확정 프로세스 +실무 비유: AI는 탁월한 초안 작성자 +Slide 16 — 파일·데이터 연동 활용 +CSV, Excel, Word, PDF를 AI에게 먹이는 방법 +[사례 3] 심화: 입력(신청 양식) + 기준(프로세스 문서) → 자동 평가 보고서 +데이터 구조화의 중요성 (AI는 정형 데이터를 더 잘 처리) +실무 예시: 채용/과제 선정/성과 평가 자동화 +🗂️ PART 4. 실수하지 않는 AI 활용법 — 신뢰·보안·윤리 (Slides 17~20) +Slide 17 — AI를 믿어야 할 때 vs 검증해야 할 때 +믿어도 되는 경우: 형식 작업, 요약, 번역, 코드 생성 +반드시 검증: 수치·통계, 법률·규정, 최신 정보, 사람 이름 +"AI가 틀렸다"가 아니라 "내가 확인하지 않았다" +Slide 18 — 보안과 개인정보 — 무엇을 넣으면 안 되는가 +사내 기밀 데이터, 개인식별정보(PII) 입력 금지 +외부 AI 툴 vs 내부/사내 AI 툴 구분 +가명화·익명화 후 활용 방법 +실제 사고 사례 (삼성 반도체 등 타사 사례) +Slide 19 — AI 결과물의 저작권과 책임 +AI 생성물의 법적 지위 (현재 기준) +출처 표기와 사실 확인의 의무 +최종 결과물에 대한 책임은 항상 사람에게 +대웅그룹 AI 활용 가이드라인 연계 +Slide 20 — AI 환경에서의 직무 역량 재정의 +AI 시대에 사라지는 역량 vs 더 중요해지는 역량 +"AI에게 좋은 질문을 하는 능력" = 새로운 핵심 역량 +프롬프트 엔지니어링은 선택이 아닌 기본기 +🗂️ PART 5. 실전 적용 — 대웅 AX 과제와 연결 (Slides 21~24) +Slide 21 — 부서별 AI 활용 시나리오 맵 +영업: 채권 현황 조회, 인사이트 자동 생성 +마케팅: 대시보드 결산 자동 작성, 기사 초안 생성 +재무/회계: 지출 증빙 검토 자동화 +연구개발: 특허·논문 요약, 보고서 초안 +HR: 채용 면접 분석, 교육 콘텐츠 생성 +Slide 22 — AX 과제 신청 단계에서의 AI 활용 +신청서 작성 시 AI 도움받기 (As-Is → To-Be 구조화) +과제 평가 기준에 맞는 자기검토 활용 +실제 20260223.csv + AX추진프로세스.docx → 보고서 자동 생성 시연 +Slide 23 — 나만의 AI 활용 루틴 만들기 +Daily: AI 초안 작성 → 내가 검토·수정 +Weekly: 반복 업무 프롬프트 템플릿화 +Monthly: AI 활용 성과 측정 (시간 절감, 품질) +프롬프트 라이브러리 구축 권장 +Slide 24 — 마무리: AI와 함께 일하는 미래 +AI는 대체자가 아닌 증폭기(Amplifier) +잘 쓰는 사람과 못 쓰는 사람의 격차는 계속 벌어진다 +지금 시작하는 것이 가장 빠른 것 +Q&A / 다음 학습 자원 안내 +📌 전체 구조 요약 +Part 주제 슬라이드 수 +0 오프닝 & 핵심 전제 2장 +1 LLM 작동 원리 이해 3장 +2 프롬프트 설계 원칙 (사례 1·2 포함) 6장 +3 고급 활용 기법 (사례 3 포함) 5장 +4 신뢰·보안·윤리 4장 +5 실전 AX 적용 4장 +합계 24장 \ No newline at end of file diff --git a/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide01_img01.png b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide01_img01.png new file mode 100644 index 0000000..507483e Binary files /dev/null and b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide01_img01.png differ diff --git a/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide02_img01.png b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide02_img01.png new file mode 100644 index 0000000..dd922b9 Binary files /dev/null and b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide02_img01.png differ diff --git a/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide03_img01.png b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide03_img01.png new file mode 100644 index 0000000..86e2a42 Binary files /dev/null and b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide03_img01.png differ diff --git a/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide04_img01.png b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide04_img01.png new file mode 100644 index 0000000..130e72f Binary files /dev/null and b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide04_img01.png differ diff --git a/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide05_img01.png b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide05_img01.png new file mode 100644 index 0000000..161d568 Binary files /dev/null and b/AI로 일하는 방법/resources/assets/ai_work_source_assets/slide05_img01.png differ diff --git a/AI로 일하는 방법/resources/inputs/ai_work_source.pptx b/AI로 일하는 방법/resources/inputs/ai_work_source.pptx new file mode 100644 index 0000000..fc19749 Binary files /dev/null and b/AI로 일하는 방법/resources/inputs/ai_work_source.pptx differ diff --git a/AI로 일하는 방법/validate_ai_work_ppt.py b/AI로 일하는 방법/validate_ai_work_ppt.py new file mode 100644 index 0000000..13dd3cb --- /dev/null +++ b/AI로 일하는 방법/validate_ai_work_ppt.py @@ -0,0 +1,29 @@ +from __future__ import annotations + +from itertools import islice +from pathlib import Path + +from pptx import Presentation +from pptx.enum.shapes import MSO_SHAPE_TYPE + + +def main() -> None: + base_dir = Path(__file__).resolve().parent + path = base_dir / "outputs" / "ai_work.pptx" + prs = Presentation(str(path)) + + pics = sum( + 1 + for slide in prs.slides + for sh in slide.shapes + if sh.shape_type == MSO_SHAPE_TYPE.PICTURE + ) + first5_shapes = [len(s.shapes) for s in islice(prs.slides, 5)] + + print(f"file={path}") + print(f"slides={len(prs.slides)} pictures={pics} first5_shapes={first5_shapes}") + + +if __name__ == "__main__": + main() + diff --git a/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 b/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 new file mode 100644 index 0000000..dfa32ca --- /dev/null +++ b/AX 과제 - 1/AI 리터러시 기초/PROMPT_AI 리터러시 기초 @@ -0,0 +1,65 @@ +당신은 비기술 직군도 이해할 수 있는 “생성형 AI 기초(리터러시)” 30분 교육을 설계하고, PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `AI 리터러시 기초.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./AI 리터러시 기초.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 22~28장) +- 각 슬라이드 구성(반드시 포함): + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(실제 질문/답변/작업 예시)** +- 예시는 “실무에서 바로 써먹을 수 있는” 형태(프롬프트 문장 포함) +- 언어: 한국어 + +## 1) 슬라이드 작성 스타일 가이드(필수) +- 슬라이드 레이아웃 통일: + - 상단: 제목 + - 좌측: 핵심 개념(3~5불릿) + - 우측: 예시(프롬프트/결과/주의점) +- 예시는 항상 “Before/After” 또는 “나쁜 입력/좋은 입력” 비교를 포함. +- 각 슬라이드의 불릿은 한 줄 18~22자 내, 5개 이하. + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +다음 주제를 자연스럽게 연결: +- 생성형 AI/LLM 개념 +- 잘하는 것 vs 못하는 것 +- 환각(오류)와 검증 방법 +- 대표 툴(예: ChatGPT, 이미지 생성 도구)의 쓰임새 +- 안전/보안/저작권 기본 +- “오늘부터 바로 쓰는” 5가지 루틴 + +형식: +1. (Slide 1) ... +... + +## 3) 슬라이드별 상세 원고 +목차에 나온 슬라이드 번호/제목을 그대로 사용하여 아래 템플릿으로 작성하세요. + +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(프롬프트/결과)**: + - **상황**: ... + - **나쁜 입력**: "..." + - **좋은 입력**: "..." + - **기대 결과(요약)**: ... + - **주의/검증 포인트**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 예시 세트(누락 금지) +아래 6개는 반드시 각각 1장 이상으로 다루세요. +- 이메일 답장 초안 만들기(톤/목적 지정) +- 회의록 요약 및 액션아이템 추출 +- 표 형태로 비교/정리(열 정의) +- 정책/규정 텍스트에서 체크리스트 만들기 +- 이미지 생성 시 요구사항을 구체화하는 법(스타일/구도/금지 요소) +- “검증 질문” 템플릿(근거/출처/불확실성 표시) + +## 5) 마무리 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 예시 프롬프트 문장이 실제로 복붙 가능한지 + diff --git a/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 b/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 new file mode 100644 index 0000000..672ca41 --- /dev/null +++ b/AX 과제 - 1/AI 보안 및 리스크 관리/PROMPT_AI 보안 및 리스크 관리 @@ -0,0 +1,57 @@ +당신은 기업 환경에서의 “AI 보안 및 리스크 관리” 30분 교육을 설계하고, 정책/사례 중심으로 PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `AI 보안 및 리스크 관리.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./AI 보안 및 리스크 관리.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 22~30장) +- 각 슬라이드 필수: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(사고/위반/모범사례/체크리스트)** +- 언어: 한국어 + +## 1) 슬라이드 스타일 가이드(필수) +- 레이아웃 통일: + - 상단: 제목/서브타이틀 + - 중앙: 핵심 리스크/원칙(3~5불릿) + - 하단: 예시(사례) 박스 + “대응 체크리스트” 3~5개 +- “허용/금지/조건부 허용”을 표로 자주 표현(시각적 명확성). + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +필수 흐름: +- 왜 AI 보안이 기존 보안과 다른가(데이터 유출/재학습/로그) +- 입력 금지 데이터(PII/기밀/계약/재무 등)와 예외 처리 +- 저작권/라이선스/출처 표기 기본 +- 모델 환각/오답 리스크와 검증 프로세스 +- 공급망 리스크(플러그인/확장/외부 API) +- 운영 통제: 승인/감사/기록/모니터링 +- 실무 Do/Don’t + 신고/대응 절차 + +## 3) 슬라이드별 상세 원고(템플릿) +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(사례/체크리스트)**: + - **사례 제목**: ... + - **상황**: ... + - **문제(리스크)**: + - ... + - **올바른 대응**: + - ... + - **체크리스트(3~5)**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 표/체크리스트(누락 금지) +- “입력 금지 데이터” 표(데이터 유형 / 예시 / 대체 방법) +- “출처/저작권 체크리스트”(이미지/문장/코드 각각) +- “AI 결과물 검증 체크리스트”(수치/법무/정책/최신정보) +- “외부 도구 사용 승인 체크”(플러그인/업로드/공유) + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 정책 문구가 “현업이 바로 지킬 수 있는 수준의 구체성”인지 + diff --git a/AX 과제 - 1/PROMPT.txt b/AX 과제 - 1/PROMPT.txt new file mode 100644 index 0000000..8b3065e --- /dev/null +++ b/AX 과제 - 1/PROMPT.txt @@ -0,0 +1,27 @@ +각 교육 커리큘럼에 대해서 목차 설계 및 슬라이드 작성을 위해서 필요한 프롬프트를 작성해줘. + +# 프롬프트 설계 방법 +* 각 교육 커리큘럼별로 폴더를 만들어줘. (폴더이름은 한글 과제명으로 할 것) +* 각 폴더 안에 한글 과제명 앞에 PROMPT_ prefix를 붙여서 프롬프트를 작성해줘. +* 목차에 대해서 설명과 이해가 쉽도록 예시 위주의 작성하도록 해줘. +* 프롬프트 내용의 산출물은 해당 폴더 내 과제명.pptx 파워포인트를 작성하는 거야. +* 슬라이드는 슬라이드 제목, 서브타이틀, 예시 순으로 간격과 라인이 잘 맞도록 신경써서 작성합니다. + + +# 진행 방법 +* 먼저 성공적인 AX(AI Transformation) 전환을 위해 리더십부터 실무자까지 왜 이 주제가 필요한지 이해하세요. +* 주제에 맞는 목차를 상세하고 세분화해서 설계하세요. +** 내용은 설명하고 이해하기 쉽도록 목차가 설계되어야 합니다. +* 각 커리큘럼 별 최소 20페이지 아상 슬라이드가 만들어 지도록 슬라이드 제목을 목차에 맞추어 생성해줘. +* 교육시간은 30분정도로 진행될 수 있도록 내용 구성해주세요. + + +# AX 전환 교육 커리큘럼 리스트 +* 전사 리더십 교육: AX 비전 및 전략 수립, AI 거버넌스 및 윤리 가이드라인 구축 +* AI 리터러시 기초: 생성형 AI 개념 이해, 주요 AI 툴(ChatGPT, Midjourney 등) 기본 활용법 +* 프롬프트 엔지니어링 실무: 효과적인 지시문 작성법 및 업무 생산성 향상 기법 +* 직무별 맞춤화 교육: 마케팅(콘텐츠 자동 생성), 영업(고객 응대 자동화), 기획(데이터 분석 및 리포트) 등 +* 데이터 전략 및 인프라 교육: 데이터 정제 및 관리 기술, AI 아키텍처 이해 +* 변화 관리 및 조직 문화: AI 도입에 따른 일하는 방식의 변화, 심리적 안전감 및 협업 문화 조성 +* AI 보안 및 리스크 관리: 기업 데이터 보안 정책, 저작권 및 규제 대응 방안 +* PoC 기반 실전 워크숍: 현업 Pain Point 기반의 AI 솔루션 프로토타입 제작 및 검증 \ No newline at end of file diff --git a/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 b/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 new file mode 100644 index 0000000..1d0f34b --- /dev/null +++ b/AX 과제 - 1/PoC 기반 실전 워크숍/PROMPT_PoC 기반 실전 워크숍 @@ -0,0 +1,56 @@ +당신은 “PoC 기반 실전 워크숍” 30분 교육(또는 워크숍 오리엔테이션)을 설계하고, 참가자가 바로 실행할 수 있도록 PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `PoC 기반 실전 워크숍.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./PoC 기반 실전 워크숍.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 22~30장) +- 각 슬라이드 필수: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(현업 Pain Point → PoC로 바꾸는 과정)** +- 언어: 한국어 + +## 1) 슬라이드 스타일 가이드(필수) +- 레이아웃 통일: + - 상단: 제목/서브타이틀 + - 중앙: 단계/체크리스트(3~6스텝) + - 하단: 예시(미니 케이스) 박스 +- 모든 단계 슬라이드는 “입력/출력/성공 기준”을 한 줄씩 포함. + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +반드시 포함할 흐름: +- PoC의 정의: 무엇을 검증하고 무엇을 버릴지 +- 문제 정의(As-Is) → 목표(To-Be) → 지표(KPI)로 변환 +- 데이터/권한/보안 체크 +- 프롬프트/워크플로우 설계(반복/검증/로그) +- MVP 범위 자르기(스코프 컷) +- 데모/검증 계획(사용자 테스트) +- 산출물 패키징: 문서/프롬프트/운영 가이드 + +## 3) 슬라이드별 상세 원고(템플릿) +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 단계/체크(3~6)**: + - ... +- **예시(미니 케이스)**: + - **Pain Point**: ... + - **PoC 목표**: ... + - **입력(데이터/문서)**: ... + - **출력(형식)**: ... + - **성공 기준(KPI)**: ... + - **리스크/가드레일**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 미니 케이스 3개(누락 금지) +각 케이스는 최소 2장(문제정의 1장 + 설계/검증 1장) 이상으로 구성. +- 케이스 A: 신청서/양식 기반 자동 평가 보고서(체크리스트/루브릭) +- 케이스 B: 회의록 요약 + 액션아이템 자동화(검증 포함) +- 케이스 C: 규정/정책 준수 점검(금칙/조건부 허용 포함) + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- “참가자가 바로 실행할 수 있는 체크리스트”가 충분히 포함됐는지 + diff --git a/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 b/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 new file mode 100644 index 0000000..dd0b10e --- /dev/null +++ b/AX 과제 - 1/데이터 전략 및 인프라 교육/PROMPT_데이터 전략 및 인프라 교육 @@ -0,0 +1,55 @@ +당신은 “데이터 전략 및 인프라 교육” 30분 강의를 설계하고, 비기술/준기술 청중이 이해할 수 있도록 PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `데이터 전략 및 인프라 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./데이터 전략 및 인프라 교육.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 22~28장) +- 각 슬라이드 필수: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(현업 데이터 사례 + 전/후 비교 또는 체크리스트)** +- 언어: 한국어 + +## 1) 슬라이드 스타일 가이드(필수) +- 레이아웃 통일: + - 상단: 제목/서브타이틀 + - 중앙: 핵심 개념(3~5불릿) + - 하단: 예시(표 또는 체크리스트) — 반드시 “구체 데이터 항목” 포함 +- 어려운 용어는 슬라이드 하단에 “한 줄 정의(괄호)”로 즉시 해설. + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +반드시 포함할 큰 흐름: +- 데이터가 왜 AX의 병목이 되는가(사례) +- 데이터 품질(정확/완전/일관/적시/유일)과 실무 체크 +- 정제/표준화/메타데이터(정의서) 필요성 +- 데이터 파이프라인 개념(수집→저장→가공→서빙) +- 거버넌스/권한/보안(최소 기준) +- “작게 시작→확장” 실행 로드맵(30/60/90일) + +## 3) 슬라이드별 상세 원고(템플릿) +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(전/후 또는 체크리스트)**: + - **상황**: ... + - **예시 데이터(샘플)**: (열 3~6개 정도의 작은 표를 텍스트로 제시) + - **문제점**: (2~4불릿) + - **개선 후(정의/규칙)**: (2~4불릿) + - **검증 체크(2~4)**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 예시 주제(누락 금지) +- 코드/명명 규칙 불일치로 생기는 분석 오류(예: 제품코드/지역코드) +- 결측치/중복/이상치가 KPI를 왜곡하는 사례 +- 데이터 정의서(메타데이터) 한 장 예시(필드명/정의/단위/예시/소유자) +- 권한/보안: “누가 무엇에 접근 가능한가” 매트릭스 예시 +- 파이프라인 장애 시 영향도(보고서/대시보드/업무) 예시 + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 예시가 “현업이 납득할 만큼 구체적”인지 + diff --git a/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 b/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 new file mode 100644 index 0000000..fd8279a --- /dev/null +++ b/AX 과제 - 1/변화 관리 및 조직 문화/PROMPT_변화 관리 및 조직 문화 @@ -0,0 +1,58 @@ +당신은 “AX 도입을 위한 변화 관리 및 조직 문화” 30분 교육을 설계하고, 설득력 있는 PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `변화 관리 및 조직 문화.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./변화 관리 및 조직 문화.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 22~28장) +- 각 슬라이드 필수: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(현업 대화/상황극/케이스)** +- 언어: 한국어 + +## 1) 슬라이드 스타일 가이드(필수) +- 레이아웃 통일: + - 상단: 제목/서브타이틀 + - 중앙: 핵심 메시지(3~5불릿) + - 하단: 예시(상황극) 박스 +- 예시 박스는 항상 “등장인물/상황/대응 문장(스크립트)”를 포함. +- 메시지는 “심리적 안전감 + 생산성 + 공정성(평가/보상)” 3축으로 정리. + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +필수 흐름: +- 왜 도구 도입만으로 실패하는가(사례) +- 저항의 유형(불안/통제감 상실/평가 우려/윤리·보안) +- 심리적 안전감 설계(질문/실험/실수 허용의 경계) +- 업무 재설계: 역할/역량/업무 분장 변화 +- 커뮤니케이션: 리더 메시지/FAQ/원칙 +- 운영 체계: 교육/코칭/커뮤니티/사례 공유 +- 성과 측정/보상: 무엇을 측정하고 어떻게 인정할지 + +## 3) 슬라이드별 상세 원고(템플릿) +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(상황극 박스)**: + - **등장인물**: (예: 팀장, 실무자, 보안담당) + - **상황**: ... + - **대응 스크립트(좋은 예)**: + - "..." + - **대응 스크립트(나쁜 예)**: + - "..." + - **정리(원칙 1~2줄)**: ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 예시(누락 금지) +- “AI 쓰면 평가에 불리할까?” 우려를 다루는 대화 스크립트 +- “보안 때문에 아무것도 못 한다” 갈등을 푸는 합의 예시(원칙/프로세스) +- “AI가 내 일을 빼앗는다” 불안을 “업무 재설계”로 전환하는 예시 +- “실험해도 되는 범위”를 정하는 경계(Do/Don’t) 예시 +- 사례 공유 문화(Weekly demo / prompt library) 정착 예시 + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 예시가 “실제 조직에서 벌어질 법한 말”로 작성됐는지 + diff --git a/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 b/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 new file mode 100644 index 0000000..ce476d1 --- /dev/null +++ b/AX 과제 - 1/전사 리더십 교육/PROMPT_전사 리더십 교육 @@ -0,0 +1,72 @@ +당신은 기업 AX(AI Transformation) 교육 콘텐츠 기획자이자 PPT 슬라이드 작가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `전사 리더십 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./전사 리더십 교육.pptx` +- 교육시간: 30분 (리더십 대상, 메시지 밀도 높게) +- 슬라이드 수: 최소 20장(권장 22~26장) +- 각 슬라이드는 다음 순서를 반드시 포함: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(사례/비유/미니 케이스)** +- 톤: 간결/결정지향/리스크 인지/ROI 관점 +- 언어: 한국어 + +## 1) 슬라이드 작성 스타일 가이드(필수) +- 모든 슬라이드는 “제목(상단) / 본문(중앙) / 예시 박스(하단)” 3영역으로 통일. +- 본문은 3~5개 핵심 불릿(한 줄 18~22자 내)로 제한. +- 예시 박스는 항상 다음 템플릿: + - **예시 제목**: (짧게) + - **상황**: (1~2문장) + - **대응/결정 포인트**: (2~3불릿) +- 정렬/간격: + - 제목과 본문 사이 여백 충분히(시각적으로 “숨 쉴 공간”) + - 불릿 간 간격 균일 + - 표/박스는 좌우 정렬선 맞추기(그리드) + +## 2) 목차 설계(먼저 제시) +아래 형식으로 “목차(슬라이드 번호 포함)”를 먼저 작성하세요. +- Part와 목적을 명시하고, 슬라이드 제목이 교육 흐름을 자연스럽게 만들도록 구성하세요. + +형식: +1. (Slide 1) ... +2. (Slide 2) ... +... + +## 3) 슬라이드별 상세 원고(목차 다음에) +목차에 나온 슬라이드 번호/제목을 그대로 사용하여, 슬라이드별로 아래를 모두 작성하세요. + +슬라이드 템플릿(반드시 준수): +### Slide N. <제목> +- **서브타이틀**: ... +- **본문 포인트(3~5)**: + - ... +- **예시(박스)**: + - **예시 제목**: ... + - **상황**: ... + - **대응/결정 포인트**: + - ... +- **발화 스크립트(20~40초 분량)**: (강의자가 읽을 수 있게 자연어로) + +## 4) 필수 포함 주제(누락 금지) +- AX 비전/전략: “왜 지금 AX인가” + 경쟁우위 구조 +- 리더십 역할: 방향 제시/우선순위/의사결정/장애 제거 +- 가치-사례-지표: 생산성/품질/리스크/컴플라이언스 관점 KPI +- 거버넌스: 역할과 책임(R&R), 승인 체계, 데이터/모델 관리 +- 윤리/보안/저작권: 리더십이 반드시 결정해야 하는 최소 기준 +- 도입 로드맵: 30/60/90일 실행안(예: PoC → Pilot → Scale) +- 조직 변화관리: 저항/역량/보상/커뮤니케이션 + +## 5) 예시 요구사항(예시 중심으로) +예시는 “실제 회사에서 일어날 법한” 형태로 작성하세요. +- 예시 카테고리 최소 4종: + - (A) 보고서/문서 자동화 + - (B) 고객 대응/영업 지원 + - (C) 규정/컴플라이언스 점검 + - (D) 교육/지식관리(FAQ/가이드 자동화) + +## 6) 마지막 출력 체크(자체 점검 후 반영) +- 슬라이드 수가 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 30분 진행이 가능한 흐름(도입→핵심→실행→리스크→마무리)인지 + diff --git a/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 b/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 new file mode 100644 index 0000000..daf58cd --- /dev/null +++ b/AX 과제 - 1/직무별 맞춤화 교육/PROMPT_직무별 맞춤화 교육 @@ -0,0 +1,63 @@ +당신은 “직무별 맞춤화 교육(마케팅/영업/기획 중심)” 30분 교육 커리큘럼과 PPT 슬라이드를 설계하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `직무별 맞춤화 교육.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./직무별 맞춤화 교육.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 24~32장) +- 각 슬라이드 필수: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(직무 상황 + 프롬프트 + 기대 산출물)** +- 언어: 한국어 + +## 1) 슬라이드 스타일 가이드(필수) +- 파트별 색상/아이콘만 다르게, 그리드는 통일. +- 예시 영역은 “입력(자료) → 프롬프트 → 출력(형식)” 3칸 구조로 통일. +- 출력 형식은 표/불릿/체크리스트 중 하나로 고정해 예시를 명확히. + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +다음 파트 구성을 반드시 포함: +- 공통: 직무 맞춤 프롬프트 구성 요소(역할/목표/지표/제약/형식) +- 마케팅: 콘텐츠 자동 생성(캠페인/카피/QA), 브랜드 톤 가이드 +- 영업: 고객 응대 자동화(FAQ/반론처리), 미팅 준비/요약 +- 기획: 데이터 분석/리포트(가정/지표/인사이트), 의사결정 문서 +- 각 파트마다 “실패 사례(나쁜 프롬프트)” 1장 이상 포함 + +## 3) 슬라이드별 상세 원고(템플릿) +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(입력→프롬프트→출력)**: + - **입력(자료)**: (예: 제품 특징 3개, 고객 페르소나 1개, 데이터 표 5행 등) + - **프롬프트**: + "..." + - **기대 출력(형식 고정)**: + - (표/불릿/체크리스트로 구체 예시) + - **주의/검증 포인트**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 직무 예시 목록(누락 금지) +- 마케팅(최소 4장): + - 캠페인 목표/타깃/채널별 카피 생성(표) + - 브랜드 톤 가이드 적용/금칙어 + - 콘텐츠 캘린더(주간) 자동 생성 + - 경쟁사 비교 요약(근거/불확실성 표시) +- 영업(최소 4장): + - 고객 이메일 답장(정책 준수) + - 반론처리 스크립트(상황별 3가지) + - 미팅 전 브리핑(고객/이슈/질문) + - 통화/미팅 요약 + 다음 액션 +- 기획(최소 4장): + - KPI 대시보드 요약(결론→근거) + - 데이터 품질 체크리스트 생성 + - 리스크/의존성/결정사항 정리 + - 1페이지 보고서(원페이지) 구조화 + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 예시가 “직무별로 정말 다른 프롬프트”가 되도록 차별화됐는지 + diff --git a/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 b/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 new file mode 100644 index 0000000..62b1ab7 --- /dev/null +++ b/AX 과제 - 1/프롬프트 엔지니어링 실무/PROMPT_프롬프트 엔지니어링 실무 @@ -0,0 +1,67 @@ +당신은 “프롬프트 엔지니어링 실무” 30분 교육을 설계하고, PPT 슬라이드를 작성하는 전문가입니다. +목표: 이 프롬프트의 결과물로, 현재 폴더에 `프롬프트 엔지니어링 실무.pptx`를 제작할 수 있을 정도로 “슬라이드별 원고/레이아웃 지시/예시”가 완성된 설계 문서를 작성하세요. + +## 0) 산출물/형식 요구사항(필수) +- 산출물 목표 파일: `./프롬프트 엔지니어링 실무.pptx` +- 교육시간: 30분 +- 슬라이드 수: 최소 20장(권장 24~30장) +- 각 슬라이드는 반드시 포함: + 1) **슬라이드 제목** + 2) **서브타이틀(1문장)** + 3) **예시(프롬프트 템플릿 + 결과 요약 + 개선 포인트)** +- 언어: 한국어 + +## 1) 슬라이드 작성 스타일 가이드(필수) +- 일관된 3단 구성: + - 상단: 제목/서브타이틀 + - 중앙: “원칙/패턴” (3~5불릿) + - 하단: “예시(프롬프트)” 박스 (코드블록처럼 보여도 됨) +- 예시는 항상 “초안 → 개선(2단계 이상)”의 반복 정제를 보여줄 것. +- 출력 형식/제약을 명시하는 사례를 반드시 포함(표/JSON/체크리스트 등). + +## 2) 목차(슬라이드 번호 포함)를 먼저 제시 +다음 흐름을 포함: +- 프롬프트의 목적: 통제/재현성/검증가능성 +- 역할(Role)·목적(Why)·상황(Context)·형식(Format)·제약(Constraints) +- Few-shot / Template / Rubric +- 단계화(Plan → Execute), 자기검증(Checks), 반례/에지케이스 +- 업무별 템플릿 라이브러리화/버전관리 + +형식: +1. (Slide 1) ... +... + +## 3) 슬라이드별 상세 원고 +아래 템플릿으로 작성하세요. + +### Slide N. <제목> +- **서브타이틀**: ... +- **핵심 포인트(3~5)**: + - ... +- **예시(프롬프트 박스)**: + - **업무 상황**: ... + - **초안 프롬프트**: + "..." + - **개선 프롬프트(버전 2)**: + "..." + - **개선 프롬프트(버전 3, 선택)**: + "..." + - **기대 출력(요약)**: ... + - **검증 체크(2~4)**: + - ... +- **발화 스크립트(20~40초)**: ... + +## 4) 필수 포함 “실무 예시” (누락 금지) +각 항목은 최소 1장 이상으로 다루세요. +- 보고서/문서: “결론 먼저 + 근거 번호” 형식 통제 +- 표/정리: “열 정의 + 단위 + 빈값 처리” 포함 +- 평가/심사: 루브릭(기준표) 기반 판정(✓/△/✗) + 근거 +- 고객응대: 톤/금칙어/정책 준수 조건 포함 +- 데이터 분석: 가정/한계/추가 질문 먼저 받기 +- 프롬프트 템플릿: 재사용 가능한 변수 자리표시자({목표}, {대상}, {제약}) + +## 5) 마지막 체크 +- 20장 이상인지 +- 모든 슬라이드에 제목/서브타이틀/예시가 있는지 +- 예시 프롬프트가 “복붙 가능 + 재현성”을 갖는지 + diff --git a/과제 평가 방법/generate_chairman_report.py b/과제 평가 방법/generate_chairman_report.py new file mode 100644 index 0000000..4b64355 --- /dev/null +++ b/과제 평가 방법/generate_chairman_report.py @@ -0,0 +1,957 @@ +from docx import Document +from docx.shared import Pt, Cm, RGBColor, Emu +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL +from docx.enum.section import WD_ORIENT +from docx.oxml.ns import qn, nsdecls +from docx.oxml import parse_xml +import os + +doc = Document() + +# ── A3 Landscape ── +for section in doc.sections: + section.orientation = WD_ORIENT.LANDSCAPE + section.page_width = Cm(42.0) + section.page_height = Cm(29.7) + section.top_margin = Cm(1.5) + section.bottom_margin = Cm(1.5) + section.left_margin = Cm(2.0) + section.right_margin = Cm(2.0) + +style = doc.styles['Normal'] +font = style.font +font.name = '맑은 고딕' +font.size = Pt(9) +style.element.rPr.rFonts.set(qn('w:eastAsia'), '맑은 고딕') +style.paragraph_format.space_after = Pt(3) +style.paragraph_format.space_before = Pt(1) + +NAVY = '1B3A5C' +ACCENT = '2E75B6' +LIGHT_ACCENT = 'D6E4F0' +GREEN_BG = 'E2EFDA' +YELLOW_BG = 'FFF2CC' +RED_BG = 'FCE4EC' +GRAY_BG = 'F2F2F2' +WHITE = 'FFFFFF' + + +def shade(cell, color): + cell._tc.get_or_add_tcPr().append( + parse_xml(f'')) + + +def set_cell_border(cell, **kwargs): + tc = cell._tc + tcPr = tc.get_or_add_tcPr() + tcBorders = parse_xml(f'') + for edge, val in kwargs.items(): + element = parse_xml( + f'') + tcBorders.append(element) + tcPr.append(tcBorders) + + +def styled_run(para, text, size=9, bold=False, color=None, font_name=None): + r = para.add_run(text) + r.font.size = Pt(size) + r.bold = bold + if color: + r.font.color.rgb = RGBColor.from_string(color) + if font_name: + r.font.name = font_name + r.element.rPr.rFonts.set(qn('w:eastAsia'), font_name) + return r + + +def add_section_break(doc): + from docx.oxml import OxmlElement + p = doc.add_paragraph() + run = p.add_run() + br = OxmlElement('w:br') + br.set(qn('w:type'), 'page') + run._element.append(br) + + +def make_header_cell(cell, text, sz=9): + cell.text = '' + shade(cell, ACCENT) + p = cell.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r = p.add_run(text) + r.bold = True + r.font.size = Pt(sz) + r.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) + + +def cell_text(cell, text, sz=9, bold=False, align=None, bg=None): + cell.text = '' + p = cell.paragraphs[0] + if align: + p.alignment = align + cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r = p.add_run(text) + r.font.size = Pt(sz) + r.bold = bold + if bg: + shade(cell, bg) + + +# ============================================================ +# COVER / TITLE +# ============================================================ +for _ in range(4): + doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, 'AX 과제 신청 현황 및 선정 평가 보고', size=28, bold=True, color=NAVY) + +doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, '2026년 2월 23일', size=14, color='666666') + +doc.add_paragraph() +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, 'AX추진팀', size=14, color=ACCENT) + +for _ in range(6): + doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, '본 보고서는 2026년 2월 19~20일 접수된 8건의 AX 과제 신청에 대해\n' + '과제 선정 기준 체크리스트(7개 항목) 기반으로 평가한 결과를 정리한 것입니다.', + size=11, color='888888') + + +# ============================================================ +# CHAPTER 1 — 신청 과제 요약 +# ============================================================ +add_section_break(doc) + +p = doc.add_paragraph() +styled_run(p, '1', size=22, bold=True, color=ACCENT) +styled_run(p, ' 신청 과제 요약', size=22, bold=True, color=NAVY) + +doc.add_paragraph() + +p = doc.add_paragraph() +styled_run(p, '2026년 2월 19~20일 접수 기간 동안 총 ', size=10) +styled_run(p, '4개 조직', size=10, bold=True, color=ACCENT) +styled_run(p, '에서 ', size=10) +styled_run(p, '8건', size=10, bold=True, color=ACCENT) +styled_run(p, '의 AX 전환 과제가 신청되었습니다. ' + '신청 과제는 대시보드 구축, 데이터 자동화, 증빙 검토, 기사 제작 등 다양한 영역에 걸쳐 있으며, ' + '대부분 반복적 수작업 업무의 자동화·효율화를 목표로 하고 있습니다.', size=10) + +doc.add_paragraph() + +# Summary table +sum_tbl = doc.add_table(rows=9, cols=8) +sum_tbl.style = 'Table Grid' +sum_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + +h = ['No.', '과제명', '소속', '신청자', '접수일', '참여 가능 시간', '데이터 형태', '핵심 키워드'] +for i, t in enumerate(h): + make_header_cell(sum_tbl.rows[0].cells[i], t, 8) + +data = [ + ['1', 'ETC마케팅본부\n목표 달성 DashBoard', + '대웅제약\nETC마케팅본부\n마케팅기획팀', '박미경', '2.19', + '하루 4시간 이상\n(적극 참여)', 'Excel / CSV', + 'BI 대시보드\nLLM 결산 자동작성'], + ['2', 'MR 거래처 채권현황\n실시간 조회 웹앱', + '한올\n마케팅기획본부\n영업관리팀', '김희영', '2.19', + '본부내 자체 진행\n(AX특공대 불필요)', '웹앱', + 'SAP 연동\n모바일 웹앱'], + ['3', 'CPS 지출보고\n증빙 검토·승인 자동화', + '대웅제약\n영업기획실\n영업지원팀', '김지숙', '2.19', + '하루 4시간 이상\n(적극 참여)', 'Excel/CSV\n이미지/스캔', + 'OCR · LLM\n이상탐지 자동화'], + ['4', 'ETC 로컬 스타\n산출 자동화', + '대웅제약\n영업기획실\n영업지원팀', '박지현', '2.19', + '하루 2~3시간\n(제한적 참여)', 'Excel / CSV', + '엑셀 자동화\nVLOOKUP 대체'], + ['5', 'Emma 메일링\n업그레이드', + '엠서클\n하이닥사업부\n하이닥팀', '김진우\n(정신영)', '2.20', + '팀장 논의 후\n시간 조정 예정', 'Excel/CSV\n텍스트/정형DB', + 'LLM 기사선별\n크롤링·메일링'], + ['6', '최신연구 논문\n기사 제작 자동화', + '엠서클\n하이닥사업부\n하이닥팀', '김진우\n(정신영)', '2.20', + '팀장 논의 후\n시간 조정 예정', '텍스트\n정형 DB', + 'LLM 기사작성\n논문 크롤링'], + ['7', '처방마감자료 생성\n및 메일 발송 자동화', + '대웅제약\n영업기획실\n영업지원팀', '이승민', '2.20', + '하루 2~3시간\n(제한적 참여)', 'Excel/CSV\n사내시스템', + '대용량 매핑\n메일 자동발송'], + ['8', '매출 대시보드 제작\n(통합 데이터 시각화)', + '디엔컴퍼니\n재무기획실\n전략기획팀', '백송이', '2.20', + '하루 4시간 이상\n(적극 참여)', 'Excel / CSV', + 'BI 대시보드\n데이터 통합'], +] + +for ri, row in enumerate(data, 1): + for ci, val in enumerate(row): + c = sum_tbl.rows[ri].cells[ci] + c.text = '' + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER if ci in (0, 3, 4) else WD_ALIGN_PARAGRAPH.LEFT + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r = p.add_run(val) + r.font.size = Pt(8) + if ci == 0: + r.bold = True + if ri % 2 == 0: + shade(c, GRAY_BG) + +doc.add_paragraph() + +# 접수 현황 요약 박스 +box_tbl = doc.add_table(rows=1, cols=4) +box_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER +labels = ['총 신청 과제', '신청 조직', '접수 기간', '데이터 즉시 가능'] +values = ['8건', '4개 조직', '2.19 ~ 2.20', '8건 (100%)'] +colors = [ACCENT, '27AE60', 'E67E22', '8E44AD'] +for i in range(4): + c = box_tbl.rows[0].cells[i] + c.text = '' + shade(c, colors[i]) + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + styled_run(p, labels[i] + '\n', size=9, bold=True, color=WHITE) + styled_run(p, values[i], size=16, bold=True, color=WHITE) + + +# ============================================================ +# CHAPTER 2 — 신청 과제 상세 (8 projects × 2 sub-sections each) +# ============================================================ + +projects = [ + { + 'num': 1, + 'title': 'ETC마케팅본부 목표 달성 DashBoard', + 'dept': '대웅제약 ETC마케팅본부 마케팅기획팀', + 'applicant': '박미경', + 'empno': '2190270', + 'date': '2026.02.19', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '주 3~5시간 (데이터 검수시간 포함)', + 'collab': 'SF CRM팀 (데이터 자동화 연계 시)', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '1개 파일, 10개 이상 시트 연동', + 'privacy': '미포함', + 'asis': ( + '마케팅 PM의 본질업무인 \'사업기 목표달성, MBO시스템, 성공모델 확산/파생사례, 검증4단계\' 4가지 항목을 ' + '주 1회(주차별/월 마감 시) 데이터를 수기로 업데이트하고, ' + '사업팀/품목/PM별 필터링이 가능한 엑셀 대시보드 형태로 공유하고 있음.' + ), + 'pain': ( + '① 데이터 RAW 수기 업데이트·검수에 주 1회 2~3시간 소요, 수치 불일치 시 추가 검토 시간 발생\n' + '② 사업부장/사업팀장/PM이 수기로 목표 달성 현황을 작성하여 보고 편의성 부족\n' + '③ 수년간 누적 데이터로 용량 방대, 대시보드 로딩시간 3~5초 소요' + ), + 'tobe': ( + '- 사업부/사업팀/품목/PM 선택 시 결산보고를 AI가 자동으로 작성\n' + '- 집중품목 자동 선별, 핵심 성과 상단 자동 정리\n' + '- 데이터 각 사이트별 자동 연동으로 수기 업데이트 자동화\n' + '- 선택한 데이터 내 순위(사업팀/PM/품목) 자동 제공' + ), + 'result_form': '대시보드, 챗봇', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 명확', + '사업기 목표달성 등 4가지 항목의 데이터를 주 1회 업데이트하고 사업팀/품목/PM별 필터링하여 ' + '대시보드로 공유하는 명확한 프로세스가 존재함.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 선정 기준(매일 6시간)에 다소 부족하나 적극적 의지 확인됨.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태 보유. 즉시 제공 가능. 다만 SF CRM 데이터 연계 시 타부서 협업 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ BI 대시보드 ☑ LLM (결산 자동 작성) ☑ 노코드 워크플로우 n8n (데이터 자동 업데이트)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '주 3~5시간 수기 작업 → 자동화 단축 / 대시보드 로딩 3~5초 → 개선 / AI 결산 자동 작성'), + ('⑥ 예상 효과', '높음', + '[정량] 주 3~5시간 수작업 절감, 데이터 검수 시간 단축\n' + '[정성] 데이터 정확성 향상, 보고 편의성 대폭 개선, 의사결정 속도 향상'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 외부 시스템 연동: SF CRM팀 협업·권한 조율 필요\n' + '☐ 누적 데이터 용량으로 인한 성능 이슈 가능'), + ] + }, + { + 'num': 2, + 'title': 'MR 거래처 채권현황 실시간 조회 웹앱', + 'dept': '한올 마케팅기획본부 영업관리팀', + 'applicant': '김희영', + 'empno': '200056', + 'date': '2026.02.19', + 'avail': '본부내 자체적으로 진행 (AX특공대 불필요)', + 'time_spent': '건당 10분, 매일 평균 5건(50분), 주 250분', + 'collab': '없음', + 'data_type': '웹앱', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '건당 처리', + 'privacy': '미포함', + 'asis': ( + 'MR의 거래처 채권현황(회전일 150일 이상)에 대한 실시간 문의가 발생하면, ' + '유관부서에서 SAP 확인을 통해 실시간 응대하는 구조.' + ), + 'pain': ( + 'MR이 영업현장에서 필요한 실시간 데이터를 유관부서를 통해야만 확인 가능\n' + '(영업부 SAP 사용 불가, 현장 PC 사용 곤란)\n' + '→ 내근/외근 모두 본질업무 집중 환경 부재, 업무효율성 저하' + ), + 'tobe': ( + '개발된 웹앱을 통해 MR이 영업현장에서 직접 모바일로 ' + '간편하게 본인 거래처에 대한 채권 확인이 가능하도록 전환' + ), + 'result_form': '웹앱', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 명확', + 'SAP 데이터 기반 채권현황(회전일 150일 이상) 조회 → 웹앱으로 MR에게 제공하는 명확한 요구사항.'), + ('② 현업 참여 의지', '✗ 불확실', + '"본부내 자체 진행(AX특공대 불필요)" 선택. AX팀과의 적극적 소통·검증 참여 의지 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + '웹앱 형태 요청. 즉시 제공 가능. 단, SAP 시스템 접근·연동이 핵심 전제조건.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 웹앱 개발 (모바일) ☑ 상용 API / 사내 서버 (SAP 연동)\n' + '※ AI 요소보다 IT 시스템 개발·연동 성격이 강함'), + ('⑤ 목표 달성 기준', '✓ 명확', + '건당 10분 문의 → 모바일 즉시 조회 전환, 주 250분 절감'), + ('⑥ 예상 효과', '중간', + '[정량] 주 250분(약 4.2시간) 절감, 유관부서 문의 건수 제로화\n' + '[정성] MR 현장 편의성 향상, 본질업무 집중도 개선'), + ('⑦ 리스크·제약사항', '✗ 높음', + '☑ 외부 시스템 연동: SAP 연동 필수이나 영업부 SAP 사용 불가 환경\n' + '☑ AI 활용 요소 미약 → IT 개발 과제 성격\n' + '☐ 참여 의지 불확실로 과제 진행 리스크'), + ] + }, + { + 'num': 3, + 'title': 'CPS 지출보고 증빙 검토·승인 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '김지숙', + 'empno': '2190153', + 'date': '2026.02.19', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '매일 7시간, 주 35시간 (비주기적)', + 'collab': '없음', + 'data_type': 'Excel / CSV, 이미지 / 스캔 파일', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '일 평균 1,500건, 월 30,000건 이상 (건당 이미지 1~3개)', + 'privacy': '포함 (주의 필요)', + 'asis': ( + '26년 2월 말부터 CPS 지출보고 시스템 내 영업부 법인카드(방문디테일) 사용내역 최종 검토·승인 역할 신규 수행 예정.\n' + '영업부 상신 문서에 대해 증빙 적정성 및 CP 규정 준수 여부 확인 후 승인/반려 처리.\n' + '(CPS 접속 → 결재요구함 → 상신문서 조회 → JPG 증빙파일 다운로드·확인 → 승인/반려)' + ), + 'pain': ( + '① 수작업 기반 검수: 문서당 증빙 이미지(1~3개) 건별 다운로드 후 개별 확인, 미리보기·자동 판독 기능 부재\n' + '② 업무 시간 과다: 단순 다운로드/확인에 검수 시간 대부분 소모, 승인 지연 시 영업 지급 일정 영향\n' + '③ 오류 탐지 효율 저하: 촬영일자 불일치, 참석인원 대비 수량 과다/미달, 간이영수증 미확인 등' + ), + 'tobe': ( + '- 수작업 중심 → 자동화 구조로 전환\n' + '- 증빙 이미지 인식(OCR)으로 일괄 확인, 다운로드 작업 최소화\n' + '- 이상 문서 자동 선별 → 검수 집중도 향상 및 승인 처리 속도 개선' + ), + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '증빙 적정성·CP 규정 준수 확인의 명확한 검토 프로세스. ' + '오류 판단 기준(촬영일자, 참석인원 대비 수량, 간이영수증 등)도 구체적.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 매일 7시간 해당 업무 투입 중으로 높은 참여 동기.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 및 이미지/스캔 파일 형태. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ OCR (증빙 이미지 인식·판독) ☑ LLM (이상 문서 자동 선별·규정 검증)\n' + '☑ 노코드 워크플로우 n8n (일괄 처리 자동화)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '일 1,500건 × 건당 3분 → 자동 인식·선별로 대폭 단축\n' + '매일 7시간 → 이상 문서만 집중 검토로 80%+ 절감 기대'), + ('⑥ 예상 효과', '매우 높음', + '[정량] 일 7시간 → 1~2시간 (70~85% 절감), 월 30,000건 처리속도 대폭 향상\n' + '[정성] 오류 탐지 정확도 향상, 승인 지연 리스크 감소, 지급 일정 안정화'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 개인정보 규제: 민감 개인정보 포함\n' + '☑ 외부 시스템 연동: CPS 시스템 연동 필요 가능\n' + '☐ 증빙 이미지 품질에 따른 OCR 정확도 변동'), + ] + }, + { + 'num': 4, + 'title': 'ETC 로컬 스타 산출 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '박지현', + 'empno': '2230551', + 'date': '2026.02.19', + 'avail': '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + 'time_spent': '1일 기준 8시간 소요', + 'collab': '인사팀 (영업부 담당자별 배치일자 확인)', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '1파일 당 10,237여개 데이터 (로컬부 한정)', + 'privacy': '영업부 담당자별 배치일자 확인 필요', + 'asis': ( + '매월 약 10개 엑셀 파일을 활용하여 ETC 로컬 스타를 산출하는 반복 작업 수행.\n' + '4단계 프로세스: ①실적 데이터 기초 작업(필터링·제외) → ②스타 파일 반영·검증(VLOOKUP/SUMIFS) → ' + '③예외·소급 금액 반영 → ④대상자 확정·최종 리스트업' + ), + 'pain': ( + '당월 스타 산출 시 직전 3개월 \'최종실적\' 각 파일에 동일한 작업을 수행해야 하므로 불필요한 수작업 발생.\n' + '1일 기준 8시간이 소요되는 반복 작업.' + ), + 'tobe': ( + '원클릭 자동화를 통해 각 파일별 수작업 시간을 획기적으로 축소' + ), + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '4단계 프로세스가 매우 구체적. VLOOKUP/SUMIFS 등 엑셀 함수 기반 로직이 명확히 정의됨.'), + ('② 현업 참여 의지', '△ 제한적', + '하루 2~3시간, 제한적 참여. 선정 기준(매일 6시간)에 크게 미달. 참여 시간 확대 협의 필요.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태. 즉시 제공 가능. 인사팀(배치일자) 협업 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 노코드 워크플로우 n8n (엑셀 자동 가공·매핑)\n' + '※ AI보다 RPA/자동화 성격이 강함'), + ('⑤ 목표 달성 기준', '✓ 명확', + '1일 8시간 수작업 → 원클릭 자동화로 획기적 단축, 3개월 반복 작업 제거'), + ('⑥ 예상 효과', '높음', + '[정량] 월 8시간+ 수작업 절감, 파일 간 반복 작업 제거\n' + '[정성] 수기 작업 오류 감소, 담당자 변경 시 업무 연속성 확보'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 타부서 협업: 인사팀 데이터 필요\n' + '☐ 참여 시간 제한(2~3시간)으로 일정 지연 리스크'), + ] + }, + { + 'num': 5, + 'title': 'Emma 메일링 업그레이드 (해외 매체 기사 솔팅·발송)', + 'dept': '엠서클 하이닥사업부 하이닥팀', + 'applicant': '김진우(정신영)', + 'empno': '01534', + 'date': '2026.02.20', + 'avail': '진행 상황에 따라 팀장님과 논의 후 시간 조정 예정', + 'time_spent': '각 기자당 약 30분 (메일링 발송 시 5분 이내 기대)', + 'collab': 'IT 추진팀 (기존 emma 개발팀)', + 'data_type': 'Excel/CSV, 텍스트, 정형 DB', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '기사 스크롤링 약 1,000여개 예상', + 'privacy': '미포함', + 'asis': ( + 'Emma 메일링 시스템을 통해 해외 매체 약 20여개 기사를 솔팅 후 이메일 발송하는 업무.' + ), + 'pain': ( + '① 주요 매체 추가 필요\n' + '② 현재 단순 크롤링 방식 → 선정 기준에 따른 기사 선별·UI 개편·기사 요약 기능 부재' + ), + 'tobe': ( + '선정 기준에 따른 기사 선별 후 발송 / UI 개편 / 기사 요약 기능 추가.\n' + '닥터빌 홈페이지 내 페이지 제작도 고려 중.' + ), + 'result_form': '파일 형태: Excel/CSV/Word, 메일링/닥터빌 내 페이지', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '기사 솔팅·발송이라는 큰 틀은 있으나, "선정 기준에 따른 기사 선별" 기준이 구체적이지 않음.'), + ('② 현업 참여 의지', '△ 불확실', + '"팀장님과 논의 후 시간 조정 예정" 기재. 선정 기준(매일 6시간) 충족 가능성 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 텍스트, 정형 DB 형태. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (기사 선별·요약) ☑ 노코드 워크플로우 n8n (크롤링·메일링)\n' + '☑ 상용 API (크롤링, 이메일 발송)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '기자당 30분 → 5분 이내 (약 83% 단축), 기사 1,000여개 자동 처리'), + ('⑥ 예상 효과', '중간', + '[정량] 기자당 25분 절감, 1,000여개 기사 자동 스크리닝\n' + '[정성] 기사 선별 품질 향상, UI 개편으로 사용자 경험 개선'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 외부 시스템 연동: 기존 emma 시스템(IT 추진팀) 연동·개편 필요\n' + '☐ 기사 선별 기준 명확화 필요, 범위 확대 리스크'), + ] + }, + { + 'num': 6, + 'title': '최신연구 논문 기사 제작 자동화', + 'dept': '엠서클 하이닥사업부 하이닥팀', + 'applicant': '김진우(정신영)', + 'empno': '01534', + 'date': '2026.02.20', + 'avail': '진행사항 확인 후 팀장님과 논의하여 시간 조정 예정', + 'time_spent': '기사 1건당 약 4시간 → AI 툴 시 1시간 이내 예상', + 'collab': '없음', + 'data_type': '텍스트, 정형 DB', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '최신연구 논문 최근 1주일 내 100여개 이상 크롤링', + 'privacy': '미포함', + 'asis': ( + '최신연구 논문을 기반으로 기사를 제작하는 업무.\n' + '과거 1차 제작 후 사용하다가 업그레이드 추진 중 관련 AI 추진팀 담당자 퇴사로 홀딩 상태.' + ), + 'pain': ( + '기사 한 건 당 약 4시간 소요.\n' + '기존 시스템 담당자 퇴사로 업그레이드가 중단된 상태.' + ), + 'tobe': ( + '최신연구 논문 기사 발행 자동화.\n' + '하이닥 CMS 내 기사 발행 연동.' + ), + 'result_form': '대시보드, 하이닥 CMS 내 기사 발행', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '과거 1차 제작 경험이 있으나 담당자 퇴사로 홀딩. 업그레이드 요건이 구체적이지 않음.'), + ('② 현업 참여 의지', '△ 불확실', + '"팀장님과 논의하여 시간 조정 예정" 기재. 선정 기준(매일 6시간) 충족 가능성 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + '텍스트, 정형 DB 형태. 논문 크롤링 데이터 100여개 이상. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (논문 요약·기사 작성) ☑ 상용 API (논문 크롤링)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '기사 1건당 4시간 → 1시간 이내 (75% 단축), 1주일 내 100여개 논문 자동 크롤링·선별'), + ('⑥ 예상 효과', '중간', + '[정량] 건당 3시간 절감, 기사 발행 속도·발행량 증가\n' + '[정성] 최신 연구 트렌드 신속 반영, 기사 품질 일관성 확보'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 기존 담당자 퇴사로 기술 인수인계 이슈\n' + '☑ 하이닥 CMS 연동 필요\n' + '☐ AI 생성 기사의 의료정보 정확성 검증 체계 필요'), + ] + }, + { + 'num': 7, + 'title': '처방마감자료 생성 및 메일 발송 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '이승민', + 'empno': '2240556', + 'date': '2026.02.20', + 'avail': '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + 'time_spent': '월 1회, 약 4시간 이상', + 'collab': '없음', + 'data_type': 'Excel / CSV, 사내 시스템', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '처방마감자료 25만행+, 회전관리장 20만행 이하', + 'privacy': '개인정보 포함 (MR 사번)', + 'asis': ( + '[처방마감자료 생성] ①영업 DCM 데이터 다운로드·검증 → ②처방약호 기준 약가목록집 VLOOKUP(3단계) → ' + '③KEY 기준 회전관리장 조직 VLOOKUP → ④N/A 건 정리·신규처 요청 메일 → ⑤재매핑 → ⑥자동 메일 발송\n' + '[BIO 중복제외리스트] 처방마감자료 완성 후 특정 품목 파일 생성 → BIO 담당자 메일 발송' + ), + 'pain': ( + '① 대용량 VLOOKUP 매핑에 최소 1시간+, PC 자원 점유로 다른 업무 병행 불가\n' + '② 신규 거래처 반영 후 재매핑 포함 시 2시간+ 소요\n' + '③ 처방마감·DCM 마감 동시 시 병목 발생, 양쪽 일정 지연 가능' + ), + 'tobe': ( + '처방마감자료에 영업부 조직·기준품명·단가를 자동 매핑하고, ' + '담당자들에게 자동 메일 발송' + ), + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '6단계 프로세스가 상세하게 기술됨. VLOOKUP 3단계, KEY 기준 매핑, 메일 발송까지 모두 명확.'), + ('② 현업 참여 의지', '△ 제한적', + '하루 2~3시간, 제한적 참여. 월 1회 업무이므로 집중 기간 조율 가능성은 있음.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 사내 시스템 데이터. 25만행+ 대용량. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 노코드 워크플로우 n8n (데이터 매핑·메일 발송)\n' + '※ AI보다 RPA/자동화 성격이 강함, 대용량 처리 서버 필요 가능'), + ('⑤ 목표 달성 기준', '✓ 명확', + '월 4시간+ → 자동 매핑·메일 발송 단축, VLOOKUP 1시간+ → 수분 이내'), + ('⑥ 예상 효과', '높음', + '[정량] 월 4시간+ 절감, 매핑 시간 90%+ 단축, PC 자원 점유 해소\n' + '[정성] 처방마감 정확성 확보, 마감 병목 해소, 재작업 최소화'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 개인정보 규제: MR 사번 포함\n' + '☑ 사내 시스템 연동: DCM, 약가목록집, 회전관리장 접근 필요\n' + '☐ 참여 시간 제한(2~3시간) 일정 지연 가능'), + ] + }, + { + 'num': 8, + 'title': '매출 대시보드 제작 (통합 데이터 시각화)', + 'dept': '디엔컴퍼니 재무기획실 전략기획팀', + 'applicant': '백송이', + 'empno': '2500685', + 'date': '2026.02.20', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '주 약 12시간, 일 평균 2.5시간', + 'collab': '영업부, ME팀 등 다부서', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '다부서 데이터 통합', + 'privacy': '미포함', + 'asis': ( + '매출·마케팅 관련 자료를 영업부, ME팀, 전략기획팀에서 개별 관리 중.\n' + '조직별 관리 목적·포맷이 상이하여 통합 대시보드 구조가 없는 상태.\n' + '각 팀 자료 개별 수령 후 매월 재정렬·재가공하여 차트·테이블 생성.' + ), + 'pain': ( + '① 데이터 취합·정합성 검증에 과도한 시간: 조직별 포맷·기준 상이, 매월 수작업 재가공\n' + '② 지표 정의 일관성 부족: 네트워크 진입률, 신규처 기준, D2D 성장률 등 매월 재정의 필요\n' + '③ 반복 업무 구조적 고착화: 동일 취합·정리·차트 작성 반복, 담당자 의존적' + ), + 'tobe': ( + 'AI가 자동으로 취합·정합성 검증·지표 산출·시각화까지 수행하는 ' + '통합 매출 대시보드 체계 구축' + ), + 'result_form': '파일 형태: Excel/CSV/Word, 대시보드', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '"아직 정형화된 틀이 없는 상태, 신규 구축 계획". 방향성은 있으나 지표 정의·구조 등 구체화 필요.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 주 12시간 업무 투입 중으로 높은 참여 동기.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태. 제공 가능. 다만 조직별 포맷 상이로 데이터 표준화 선행 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ BI 대시보드 (매출 시각화) ☑ LLM (정합성 검증·지표 산출)\n' + '☑ 노코드 워크플로우 n8n (데이터 자동 취합·가공)'), + ('⑤ 목표 달성 기준', '△ 구체화 필요', + '주 12시간 → 자동화 단축 (구체적 목표 수치 미기재). 신규 구축으로 단계적 목표 설정 필요.'), + ('⑥ 예상 효과', '높음', + '[정량] 주 12시간 취합·가공 시간 절감, 보고 속도 단축\n' + '[정성] 지표 일관성 확보, 담당자 의존도 감소, 통합 데이터 의사결정 체계'), + ('⑦ 리스크·제약사항', '△ 일부', + '☐ 다부서 데이터 통합 필요 (조직별 포맷 상이)\n' + '☐ 요구사항 미확정 → 범위 확대(scope creep) 리스크\n' + '☐ 신규 구축으로 기대 수준 조율 필요'), + ] + }, +] + + +for proj in projects: + add_section_break(doc) + + # Chapter 2 header + p = doc.add_paragraph() + styled_run(p, '2', size=20, bold=True, color=ACCENT) + styled_run(p, f'.{proj["num"]}', size=20, bold=True, color=ACCENT) + styled_run(p, f' {proj["title"]}', size=20, bold=True, color=NAVY) + + # ── 2.x.1 기본정보, As-Is, To-Be ── + p = doc.add_paragraph() + styled_run(p, f'2.{proj["num"]}.1 ', size=12, bold=True, color=ACCENT) + styled_run(p, '과제 기본정보 · 현재 업무 · 희망 결과', size=12, bold=True, color=NAVY) + + doc.add_paragraph() + + # -- 기본정보 테이블 (2 cols layout) -- + info_tbl = doc.add_table(rows=5, cols=4) + info_tbl.style = 'Table Grid' + info_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + info_items = [ + ('소속', proj['dept'], '신청자 / 사번', f'{proj["applicant"]} / {proj["empno"]}'), + ('접수일', proj['date'], '참여 가능 시간', proj['avail']), + ('현재 업무 소요시간', proj['time_spent'], '협업 부서', proj['collab']), + ('데이터 형태', proj['data_type'], '데이터 준비 상태', proj['data_ready']), + ('데이터 처리 규모', proj['data_volume'], '개인정보 포함', proj['privacy']), + ] + + for ri, (l1, v1, l2, v2) in enumerate(info_items): + for ci, (label, val) in enumerate([(l1, v1), (l2, v2)]): + lc = info_tbl.rows[ri].cells[ci * 2] + vc = info_tbl.rows[ri].cells[ci * 2 + 1] + lc.text = '' + vc.text = '' + shade(lc, LIGHT_ACCENT) + lc.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + vc.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + rl = lc.paragraphs[0].add_run(label) + rl.bold = True + rl.font.size = Pt(8) + rv = vc.paragraphs[0].add_run(val) + rv.font.size = Pt(8) + + doc.add_paragraph() + + # -- As-Is / Pain / To-Be 3 column layout -- + apt_tbl = doc.add_table(rows=2, cols=3) + apt_tbl.style = 'Table Grid' + apt_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + for ci, title in enumerate(['As-Is : 현재 업무', 'Pain Point : 문제점', 'To-Be : 희망 결과']): + make_header_cell(apt_tbl.rows[0].cells[ci], title, 9) + + contents = [proj['asis'], proj['pain'], proj['tobe']] + for ci, txt in enumerate(contents): + c = apt_tbl.rows[1].cells[ci] + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.TOP + p = c.paragraphs[0] + r = p.add_run(txt) + r.font.size = Pt(8) + + doc.add_paragraph() + p = doc.add_paragraph() + styled_run(p, '결과 형태: ', size=8, bold=True, color=ACCENT) + styled_run(p, proj['result_form'], size=8) + + doc.add_paragraph() + + # ── 2.x.2 과제 선정 기준 체크리스트 평가 ── + p = doc.add_paragraph() + styled_run(p, f'2.{proj["num"]}.2 ', size=12, bold=True, color=ACCENT) + styled_run(p, '과제 선정 기준 체크리스트 평가', size=12, bold=True, color=NAVY) + + doc.add_paragraph() + + eval_tbl = doc.add_table(rows=len(proj['eval']) + 1, cols=3) + eval_tbl.style = 'Table Grid' + eval_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + make_header_cell(eval_tbl.rows[0].cells[0], '선정 기준', 9) + make_header_cell(eval_tbl.rows[0].cells[1], '판정', 9) + make_header_cell(eval_tbl.rows[0].cells[2], '평가 내용', 9) + + for ri, (criteria, status, detail) in enumerate(proj['eval'], 1): + c0 = eval_tbl.rows[ri].cells[0] + c1 = eval_tbl.rows[ri].cells[1] + c2 = eval_tbl.rows[ri].cells[2] + + c0.text = '' + c0.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r0 = c0.paragraphs[0].add_run(criteria) + r0.font.size = Pt(8) + r0.bold = True + + c1.text = '' + c1.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + c1.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r1 = c1.paragraphs[0].add_run(status) + r1.font.size = Pt(9) + r1.bold = True + + if '✓' in status or '매우' in status: + shade(c1, GREEN_BG) + elif '△' in status or status == '해당' or '중간' in status: + shade(c1, YELLOW_BG) + elif '✗' in status: + shade(c1, RED_BG) + elif '높음' in status: + shade(c1, GREEN_BG) + + c2.text = '' + c2.vertical_alignment = WD_ALIGN_VERTICAL.TOP + r2 = c2.paragraphs[0].add_run(detail) + r2.font.size = Pt(8) + + +# ============================================================ +# CHAPTER 3 — 선정 적합도 순위 +# ============================================================ +add_section_break(doc) + +p = doc.add_paragraph() +styled_run(p, '3', size=22, bold=True, color=ACCENT) +styled_run(p, ' 선정 적합도 순위 및 최종 정리', size=22, bold=True, color=NAVY) + +doc.add_paragraph() + +# -- 종합 평가 매트릭스 -- +p = doc.add_paragraph() +styled_run(p, '■ 종합 평가 매트릭스', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +mx = doc.add_table(rows=9, cols=9) +mx.style = 'Table Grid' +mx.alignment = WD_TABLE_ALIGNMENT.CENTER + +mh = ['과제', '① 규칙\n명확성', '② 참여\n의지', '③ 데이터\n준비', '④ AI\nTool', '⑤ 목표\n기준', '⑥ 예상\n효과', '⑦ 리스크', '종합\n적합도'] +for i, t in enumerate(mh): + make_header_cell(mx.rows[0].cells[i], t, 8) + +mx_data = [ + ['3. 김지숙\nCPS 증빙 검토 자동화', '✓', '✓', '✓', 'OCR/LLM\nn8n', '✓', '매우 높음', '△', '★★★★★'], + ['1. 박미경\n목표 달성 DashBoard', '✓', '✓', '✓', 'BI/LLM\nn8n', '✓', '높음', '△', '★★★★☆'], + ['4. 박지현\n로컬 스타 산출', '✓', '△', '✓', 'n8n\nRPA', '✓', '높음', '△', '★★★★☆'], + ['7. 이승민\n처방마감자료 자동화', '✓', '△', '✓', 'n8n\nRPA', '✓', '높음', '△', '★★★★☆'], + ['8. 백송이\n매출 대시보드', '△', '✓', '✓', 'BI/LLM\nn8n', '△', '높음', '△', '★★★☆☆'], + ['5. 김진우\nEmma 메일링', '△', '△', '✓', 'LLM/n8n\nAPI', '✓', '중간', '△', '★★★☆☆'], + ['6. 김진우\n논문 기사 자동화', '△', '△', '✓', 'LLM\nAPI', '✓', '중간', '△', '★★★☆☆'], + ['2. 김희영\n채권현황 조회', '✓', '✗', '✓', '웹앱\nAPI', '✓', '중간', '✗', '★★☆☆☆'], +] + +for ri, row in enumerate(mx_data, 1): + for ci, val in enumerate(row): + c = mx.rows[ri].cells[ci] + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + r = p.add_run(val) + r.font.size = Pt(8) + if ci == 0: + r.bold = True + p.alignment = WD_ALIGN_PARAGRAPH.LEFT + elif ci == 8: + r.bold = True + r.font.color.rgb = RGBColor.from_string(ACCENT) + else: + if val in ('✓', '매우 높음'): + shade(c, GREEN_BG) + elif val in ('△', '중간', '해당'): + shade(c, YELLOW_BG) + elif val == '✗': + shade(c, RED_BG) + elif '높음' in val: + shade(c, GREEN_BG) + + if ri <= 1: + for ci in range(9): + c = mx.rows[ri].cells[ci] + existing = c._tc.get_or_add_tcPr() + +doc.add_paragraph() +doc.add_paragraph() + +# -- 선정 적합도 순위 상세 -- +p = doc.add_paragraph() +styled_run(p, '■ 선정 적합도 순위 (상세 의견)', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +rankings = [ + ('1순위', '★★★★★', '과제 3', 'CPS 지출보고 증빙 검토·승인 자동화 (김지숙)', + '선정 강력 권장', + '가장 높은 선정 적합도. 업무 규칙이 매우 명확하고, 신청자의 적극적 참여 의지가 확인됨. ' + 'OCR과 LLM을 결합한 AI 활용 가치가 매우 높으며, 일 1,500건/월 30,000건의 대량 처리로 ' + '자동화 효과가 극대화됨. 개인정보 포함 데이터에 대한 보안 대책 수립이 선행 필요.', + GREEN_BG), + ('2순위', '★★★★☆', '과제 1', 'ETC마케팅본부 목표 달성 DashBoard (박미경)', + '선정 권장', + '명확한 프로세스와 적극적 참여 의지. BI 대시보드 + LLM 결산 자동 작성의 조합으로 ' + 'AI 활용 가치가 높음. SF CRM 연동 범위를 사전에 확정하여 착수 시 지연을 방지할 필요가 있음.', + GREEN_BG), + ('3순위', '★★★★☆', '과제 4 / 과제 7', + '로컬 스타 산출 (박지현) / 처방마감자료 자동화 (이승민)', + '조건부 선정 (참여 시간 확대 협의 필요)', + '두 과제 모두 업무 로직이 매우 명확하여 자동화에 매우 적합함. ' + '다만 참여 시간(2~3시간)이 기준(6시간)에 크게 미달하므로, 참여 시간 확대를 협의한 후 선정을 권장. ' + '과제 7은 개인정보(MR 사번) 보안 대책 수립 필요.', + YELLOW_BG), + ('4순위', '★★★☆☆', '과제 8', '매출 대시보드 제작 (백송이)', + '요건 정의 후 선정', + '적극적 참여 의지와 높은 효과가 기대되나, 요구사항이 아직 미확정 상태. ' + '신규 구축 특성상 범위 관리가 매우 중요하므로, 요건 정의 워크숍을 선행한 후 착수할 것을 권장.', + YELLOW_BG), + ('5순위', '★★★☆☆', '과제 5 / 과제 6', + 'Emma 메일링 업그레이드 / 논문 기사 자동화 (김진우)', + '재검토 필요', + '두 과제 모두 LLM 활용 가치는 있으나, 참여 의지가 불확실하고 요구사항 구체화가 필요. ' + '과제 6은 기존 시스템 상태 파악이 선행되어야 함. 참여 시간·요건 확정 후 재검토를 권장.', + YELLOW_BG), + ('6순위', '★★☆☆☆', '과제 2', 'MR 거래처 채권현황 실시간 조회 (김희영)', + 'AX 과제 부적합 → IT 개발 과제로 검토', + '참여 의지가 불확실(AX특공대 불필요 기재)하고, AI 활용 요소가 미약하며(IT 시스템 개발 성격), ' + 'SAP 연동 제약 등으로 AX 과제 선정에 부적합. IT 개발 과제로 별도 검토할 것을 권장.', + RED_BG), +] + +rank_tbl = doc.add_table(rows=len(rankings) + 1, cols=6) +rank_tbl.style = 'Table Grid' +rank_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + +rh = ['순위', '과제', '과제명', '판정', '종합 의견', ''] +rh_actual = ['순위', '과제', '과제명', '판정', '종합 의견'] +for i in range(5): + make_header_cell(rank_tbl.rows[0].cells[i], rh_actual[i], 9) +make_header_cell(rank_tbl.rows[0].cells[5], '', 9) + +# merge last two cols header +rank_tbl.rows[0].cells[4].merge(rank_tbl.rows[0].cells[5]) + +for ri, (rank, stars, pno, pname, verdict, opinion, bg) in enumerate(rankings, 1): + c0 = rank_tbl.rows[ri].cells[0] + c1 = rank_tbl.rows[ri].cells[1] + c2 = rank_tbl.rows[ri].cells[2] + c3 = rank_tbl.rows[ri].cells[3] + c45 = rank_tbl.rows[ri].cells[4] + c45.merge(rank_tbl.rows[ri].cells[5]) + + for c in [c0, c1, c2, c3, c45]: + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + + c0.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c0.paragraphs[0].add_run(f'{rank}\n{stars}') + r.font.size = Pt(8) + r.bold = True + shade(c0, bg) + + c1.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c1.paragraphs[0].add_run(pno) + r.font.size = Pt(8) + r.bold = True + + r = c2.paragraphs[0].add_run(pname) + r.font.size = Pt(8) + + c3.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c3.paragraphs[0].add_run(verdict) + r.font.size = Pt(8) + r.bold = True + if '강력' in verdict: + r.font.color.rgb = RGBColor.from_string('27AE60') + elif '권장' in verdict and '부적합' not in verdict: + r.font.color.rgb = RGBColor.from_string(ACCENT) + elif '부적합' in verdict: + r.font.color.rgb = RGBColor.from_string('E74C3C') + + r = c45.paragraphs[0].add_run(opinion) + r.font.size = Pt(8) + + +doc.add_paragraph() +doc.add_paragraph() + +# -- 핵심 메시지 -- +p = doc.add_paragraph() +styled_run(p, '■ 핵심 요약', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +key_tbl = doc.add_table(rows=1, cols=1) +key_tbl.style = 'Table Grid' +key_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER +kc = key_tbl.rows[0].cells[0] +kc.text = '' +shade(kc, LIGHT_ACCENT) + +lines = [ + ('총 접수 과제: ', '4개 조직, 8건 (2026.02.19~20 접수)'), + ('즉시 착수 가능: ', '8건 모두 데이터 디지털화 완료 (100%)'), + ('선정 강력 권장: ', '과제 3 (CPS 증빙 검토 자동화) — OCR·LLM 활용, 일 1,500건 대량 처리, 70~85% 시간 절감 기대'), + ('선정 권장: ', '과제 1 (DashBoard) — BI+LLM 조합, 높은 AI 활용 가치'), + ('조건부 선정: ', '과제 4, 7 (참여 시간 확대 협의 필요) / 과제 8 (요건 정의 선행 필요)'), + ('재검토 필요: ', '과제 5, 6 (참여 의지·요건 구체화 필요)'), + ('AX 부적합: ', '과제 2 (IT 개발 과제 성격, 별도 검토 권장)'), +] + +for label, value in lines: + p = kc.add_paragraph() + p.paragraph_format.space_before = Pt(2) + p.paragraph_format.space_after = Pt(2) + styled_run(p, f' ▸ {label}', size=10, bold=True, color=NAVY) + styled_run(p, value, size=10) + + +# ── Save ── +base_dir = os.path.dirname(os.path.abspath(__file__)) +output_path = os.path.join(base_dir, 'outputs', '20260223_report.doc') +os.makedirs(os.path.dirname(output_path), exist_ok=True) +doc.save(output_path) +print(f'Report saved: {output_path}') diff --git a/과제 평가 방법/generate_chairman_report_10.py b/과제 평가 방법/generate_chairman_report_10.py new file mode 100644 index 0000000..5052fff --- /dev/null +++ b/과제 평가 방법/generate_chairman_report_10.py @@ -0,0 +1,969 @@ +from docx import Document +from docx.shared import Pt, Cm, RGBColor, Emu +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL +from docx.enum.section import WD_ORIENT +from docx.oxml.ns import qn, nsdecls +from docx.oxml import parse_xml +import os + +doc = Document() + +for section in doc.sections: + section.orientation = WD_ORIENT.LANDSCAPE + section.page_width = Cm(42.0) + section.page_height = Cm(29.7) + section.top_margin = Cm(1.5) + section.bottom_margin = Cm(1.5) + section.left_margin = Cm(2.0) + section.right_margin = Cm(2.0) + +style = doc.styles['Normal'] +font = style.font +font.name = '맑은 고딕' +font.size = Pt(9) +style.element.rPr.rFonts.set(qn('w:eastAsia'), '맑은 고딕') +style.paragraph_format.space_after = Pt(3) +style.paragraph_format.space_before = Pt(1) + +NAVY = '1B3A5C' +ACCENT = '2E75B6' +LIGHT_ACCENT = 'D6E4F0' +GREEN_BG = 'E2EFDA' +YELLOW_BG = 'FFF2CC' +RED_BG = 'FCE4EC' +GRAY_BG = 'F2F2F2' +WHITE = 'FFFFFF' + + +def shade(cell, color): + cell._tc.get_or_add_tcPr().append( + parse_xml(f'')) + + +def styled_run(para, text, size=9, bold=False, color=None, font_name=None): + r = para.add_run(text) + r.font.size = Pt(size) + r.bold = bold + if color: + r.font.color.rgb = RGBColor.from_string(color) + if font_name: + r.font.name = font_name + r.element.rPr.rFonts.set(qn('w:eastAsia'), font_name) + return r + + +def add_section_break(doc): + from docx.oxml import OxmlElement + p = doc.add_paragraph() + run = p.add_run() + br = OxmlElement('w:br') + br.set(qn('w:type'), 'page') + run._element.append(br) + + +def make_header_cell(cell, text, sz=9): + cell.text = '' + shade(cell, ACCENT) + p = cell.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r = p.add_run(text) + r.bold = True + r.font.size = Pt(sz) + r.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) + + +# ============================================================ +# COVER +# ============================================================ +for _ in range(4): + doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, 'AX 과제 신청 현황 및 선정 평가 보고', size=28, bold=True, color=NAVY) + +doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, '2026년 2월 23일', size=14, color='666666') + +doc.add_paragraph() +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, 'AX추진팀', size=14, color=ACCENT) + +for _ in range(6): + doc.add_paragraph() + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.CENTER +styled_run(p, '본 보고서는 2026년 2월 19~23일 접수된 10건의 AX 과제 신청에 대해\n' + '과제 선정 기준 체크리스트(7개 항목) 기반으로 평가한 결과를 정리한 것입니다.', + size=11, color='888888') + + +# ============================================================ +# CHAPTER 1 — 신청 과제 요약 +# ============================================================ +add_section_break(doc) + +p = doc.add_paragraph() +styled_run(p, '1', size=22, bold=True, color=ACCENT) +styled_run(p, ' 신청 과제 요약', size=22, bold=True, color=NAVY) + +doc.add_paragraph() + +p = doc.add_paragraph() +styled_run(p, '2026년 2월 19~23일 접수 기간 동안 총 ', size=10) +styled_run(p, '5개 조직', size=10, bold=True, color=ACCENT) +styled_run(p, '에서 ', size=10) +styled_run(p, '10건', size=10, bold=True, color=ACCENT) +styled_run(p, '의 AX 전환 과제가 신청되었습니다. ' + '신청 과제는 대시보드 구축, 데이터 자동화, 증빙 검토, 기사 제작, 영업 인사이트 자동 생성 등 ' + '다양한 영역에 걸쳐 있으며, 대부분 반복적 수작업 업무의 자동화·효율화를 목표로 하고 있습니다.', size=10) + +doc.add_paragraph() + +sum_tbl = doc.add_table(rows=11, cols=8) +sum_tbl.style = 'Table Grid' +sum_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + +h = ['No.', '과제명', '소속', '신청자', '접수일', '참여 가능 시간', '데이터 형태', '핵심 키워드'] +for i, t in enumerate(h): + make_header_cell(sum_tbl.rows[0].cells[i], t, 8) + +data = [ + ['1', 'ETC마케팅본부\n목표 달성 DashBoard', + '대웅제약\nETC마케팅본부\n마케팅기획팀', '박미경', '2.19', + '하루 4시간 이상\n(적극 참여)', 'Excel / CSV', + 'BI 대시보드\nLLM 결산 자동작성'], + ['2', 'MR 거래처 채권현황\n실시간 조회 웹앱', + '한올\n마케팅기획본부\n영업관리팀', '김희영', '2.19', + '본부내 자체 진행\n(AX특공대 불필요)', '웹앱', + 'SAP 연동\n모바일 웹앱'], + ['3', 'CPS 지출보고\n증빙 검토·승인 자동화', + '대웅제약\n영업기획실\n영업지원팀', '김지숙', '2.19', + '하루 4시간 이상\n(적극 참여)', 'Excel/CSV\n이미지/스캔', + 'OCR · LLM\n이상탐지 자동화'], + ['4', 'ETC 로컬 스타\n산출 자동화', + '대웅제약\n영업기획실\n영업지원팀', '박지현', '2.19', + '하루 2~3시간\n(제한적 참여)', 'Excel / CSV', + '엑셀 자동화\nVLOOKUP 대체'], + ['5', 'Emma 메일링\n업그레이드', + '엠서클\n하이닥사업부\n하이닥팀', '김진우\n(정신영)', '2.20', + '팀장 논의 후\n시간 조정 예정', 'Excel/CSV\n텍스트/정형DB', + 'LLM 기사선별\n크롤링·메일링'], + ['6', '최신연구 논문\n기사 제작 자동화', + '엠서클\n하이닥사업부\n하이닥팀', '김진우\n(정신영)', '2.20', + '팀장 논의 후\n시간 조정 예정', '텍스트\n정형 DB', + 'LLM 기사작성\n논문 크롤링'], + ['7', '처방마감자료 생성\n및 메일 발송 자동화', + '대웅제약\n영업기획실\n영업지원팀', '이승민', '2.20', + '하루 2~3시간\n(제한적 참여)', 'Excel/CSV\n사내시스템', + '대용량 매핑\n메일 자동발송'], + ['8', '매출 대시보드 제작\n(통합 데이터 시각화)', + '디엔컴퍼니\n재무기획실\n전략기획팀', '백송이', '2.20', + '하루 4시간 이상\n(적극 참여)', 'Excel / CSV', + 'BI 대시보드\n데이터 통합'], + ['9', 'ETC병원본부 영업 데이터\n자동 취합·인사이트 리포트', + '대웅\nETC병원본부', '금예빈', '2.23', + '대리 신청 건', 'Excel/CSV\n텍스트', + 'LLM 인사이트\n데이터 자동취합'], + ['10', '정책·업계 시황 기반\n영업 실행 인사이트 자동 생성', + '대웅\nETC병원본부', '금예빈', '2.23', + '대리 신청 건', 'Excel/CSV\n텍스트', + 'LLM 기사수집\n전략 인사이트'], +] + +for ri, row in enumerate(data, 1): + for ci, val in enumerate(row): + c = sum_tbl.rows[ri].cells[ci] + c.text = '' + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER if ci in (0, 3, 4) else WD_ALIGN_PARAGRAPH.LEFT + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r = p.add_run(val) + r.font.size = Pt(8) + if ci == 0: + r.bold = True + if ri % 2 == 0: + shade(c, GRAY_BG) + +doc.add_paragraph() + +box_tbl = doc.add_table(rows=1, cols=4) +box_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER +labels = ['총 신청 과제', '신청 조직', '접수 기간', '데이터 즉시 가능'] +values = ['10건', '5개 조직', '2.19 ~ 2.23', '10건 (100%)'] +colors = [ACCENT, '27AE60', 'E67E22', '8E44AD'] +for i in range(4): + c = box_tbl.rows[0].cells[i] + c.text = '' + shade(c, colors[i]) + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + styled_run(p, labels[i] + '\n', size=9, bold=True, color=WHITE) + styled_run(p, values[i], size=16, bold=True, color=WHITE) + + +# ============================================================ +# CHAPTER 2 — 신청 과제 상세 (10 projects) +# ============================================================ + +projects = [ + { + 'num': 1, + 'title': 'ETC마케팅본부 목표 달성 DashBoard', + 'dept': '대웅제약 ETC마케팅본부 마케팅기획팀', + 'applicant': '박미경', + 'empno': '2190270', + 'date': '2026.02.19', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '주 3~5시간 (데이터 검수시간 포함)', + 'collab': 'SF CRM팀 (데이터 자동화 연계 시)', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '1개 파일, 10개 이상 시트 연동', + 'privacy': '미포함', + 'asis': ( + '마케팅 PM의 본질업무인 \'사업기 목표달성, MBO시스템, 성공모델 확산/파생사례, 검증4단계\' 4가지 항목을 ' + '주 1회(주차별/월 마감 시) 데이터를 수기로 업데이트하고, ' + '사업팀/품목/PM별 필터링이 가능한 엑셀 대시보드 형태로 공유하고 있음.' + ), + 'pain': ( + '① 데이터 RAW 수기 업데이트·검수에 주 1회 2~3시간 소요, 수치 불일치 시 추가 검토 시간 발생\n' + '② 사업부장/사업팀장/PM이 수기로 목표 달성 현황을 작성하여 보고 편의성 부족\n' + '③ 수년간 누적 데이터로 용량 방대, 대시보드 로딩시간 3~5초 소요' + ), + 'tobe': ( + '- 사업부/사업팀/품목/PM 선택 시 결산보고를 AI가 자동으로 작성\n' + '- 집중품목 자동 선별, 핵심 성과 상단 자동 정리\n' + '- 데이터 각 사이트별 자동 연동으로 수기 업데이트 자동화\n' + '- 선택한 데이터 내 순위(사업팀/PM/품목) 자동 제공' + ), + 'result_form': '대시보드, 챗봇', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 명확', + '사업기 목표달성 등 4가지 항목의 데이터를 주 1회 업데이트하고 사업팀/품목/PM별 필터링하여 ' + '대시보드로 공유하는 명확한 프로세스가 존재함.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 선정 기준(매일 6시간)에 다소 부족하나 적극적 의지 확인됨.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태 보유. 즉시 제공 가능. 다만 SF CRM 데이터 연계 시 타부서 협업 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ BI 대시보드 ☑ LLM (결산 자동 작성) ☑ 노코드 워크플로우 n8n (데이터 자동 업데이트)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '주 3~5시간 수기 작업 → 자동화 단축 / 대시보드 로딩 3~5초 → 개선 / AI 결산 자동 작성'), + ('⑥ 예상 효과', '높음', + '[정량] 주 3~5시간 수작업 절감, 데이터 검수 시간 단축\n' + '[정성] 데이터 정확성 향상, 보고 편의성 대폭 개선, 의사결정 속도 향상'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 외부 시스템 연동: SF CRM팀 협업·권한 조율 필요\n' + '☐ 누적 데이터 용량으로 인한 성능 이슈 가능'), + ] + }, + { + 'num': 2, + 'title': 'MR 거래처 채권현황 실시간 조회 웹앱', + 'dept': '한올 마케팅기획본부 영업관리팀', + 'applicant': '김희영', + 'empno': '200056', + 'date': '2026.02.19', + 'avail': '본부내 자체적으로 진행 (AX특공대 불필요)', + 'time_spent': '건당 10분, 매일 평균 5건(50분), 주 250분', + 'collab': '없음', + 'data_type': '웹앱', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '건당 처리', + 'privacy': '미포함', + 'asis': 'MR의 거래처 채권현황(회전일 150일 이상)에 대한 실시간 문의가 발생하면, 유관부서에서 SAP 확인을 통해 실시간 응대하는 구조.', + 'pain': 'MR이 영업현장에서 필요한 실시간 데이터를 유관부서를 통해야만 확인 가능\n(영업부 SAP 사용 불가, 현장 PC 사용 곤란)\n→ 내근/외근 모두 본질업무 집중 환경 부재, 업무효율성 저하', + 'tobe': '개발된 웹앱을 통해 MR이 영업현장에서 직접 모바일로 간편하게 본인 거래처에 대한 채권 확인이 가능하도록 전환', + 'result_form': '웹앱', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 명확', + 'SAP 데이터 기반 채권현황(회전일 150일 이상) 조회 → 웹앱으로 MR에게 제공하는 명확한 요구사항.'), + ('② 현업 참여 의지', '✗ 불확실', + '"본부내 자체 진행(AX특공대 불필요)" 선택. AX팀과의 적극적 소통·검증 참여 의지 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + '웹앱 형태 요청. 즉시 제공 가능. 단, SAP 시스템 접근·연동이 핵심 전제조건.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 웹앱 개발 (모바일) ☑ 상용 API / 사내 서버 (SAP 연동)\n※ AI 요소보다 IT 시스템 개발·연동 성격이 강함'), + ('⑤ 목표 달성 기준', '✓ 명확', + '건당 10분 문의 → 모바일 즉시 조회 전환, 주 250분 절감'), + ('⑥ 예상 효과', '중간', + '[정량] 주 250분(약 4.2시간) 절감, 유관부서 문의 건수 제로화\n[정성] MR 현장 편의성 향상, 본질업무 집중도 개선'), + ('⑦ 리스크·제약사항', '✗ 높음', + '☑ 외부 시스템 연동: SAP 연동 필수이나 영업부 SAP 사용 불가 환경\n☑ AI 활용 요소 미약 → IT 개발 과제 성격\n☐ 참여 의지 불확실로 과제 진행 리스크'), + ] + }, + { + 'num': 3, + 'title': 'CPS 지출보고 증빙 검토·승인 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '김지숙', + 'empno': '2190153', + 'date': '2026.02.19', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '매일 7시간, 주 35시간 (비주기적)', + 'collab': '없음', + 'data_type': 'Excel / CSV, 이미지 / 스캔 파일', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '일 평균 1,500건, 월 30,000건 이상 (건당 이미지 1~3개)', + 'privacy': '포함 (주의 필요)', + 'asis': '26년 2월 말부터 CPS 지출보고 시스템 내 영업부 법인카드(방문디테일) 사용내역 최종 검토·승인 역할 신규 수행 예정.\n영업부 상신 문서에 대해 증빙 적정성 및 CP 규정 준수 여부 확인 후 승인/반려 처리.\n(CPS 접속 → 결재요구함 → 상신문서 조회 → JPG 증빙파일 다운로드·확인 → 승인/반려)', + 'pain': '① 수작업 기반 검수: 문서당 증빙 이미지(1~3개) 건별 다운로드 후 개별 확인, 미리보기·자동 판독 기능 부재\n② 업무 시간 과다: 단순 다운로드/확인에 검수 시간 대부분 소모, 승인 지연 시 영업 지급 일정 영향\n③ 오류 탐지 효율 저하: 촬영일자 불일치, 참석인원 대비 수량 과다/미달, 간이영수증 미확인 등', + 'tobe': '- 수작업 중심 → 자동화 구조로 전환\n- 증빙 이미지 인식(OCR)으로 일괄 확인, 다운로드 작업 최소화\n- 이상 문서 자동 선별 → 검수 집중도 향상 및 승인 처리 속도 개선', + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '증빙 적정성·CP 규정 준수 확인의 명확한 검토 프로세스. 오류 판단 기준(촬영일자, 참석인원 대비 수량, 간이영수증 등)도 구체적.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 매일 7시간 해당 업무 투입 중으로 높은 참여 동기.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 및 이미지/스캔 파일 형태. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ OCR (증빙 이미지 인식·판독) ☑ LLM (이상 문서 자동 선별·규정 검증)\n☑ 노코드 워크플로우 n8n (일괄 처리 자동화)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '일 1,500건 × 건당 3분 → 자동 인식·선별로 대폭 단축\n매일 7시간 → 이상 문서만 집중 검토로 80%+ 절감 기대'), + ('⑥ 예상 효과', '매우 높음', + '[정량] 일 7시간 → 1~2시간 (70~85% 절감), 월 30,000건 처리속도 대폭 향상\n[정성] 오류 탐지 정확도 향상, 승인 지연 리스크 감소, 지급 일정 안정화'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 개인정보 규제: 민감 개인정보 포함\n☑ 외부 시스템 연동: CPS 시스템 연동 필요 가능\n☐ 증빙 이미지 품질에 따른 OCR 정확도 변동'), + ] + }, + { + 'num': 4, + 'title': 'ETC 로컬 스타 산출 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '박지현', + 'empno': '2230551', + 'date': '2026.02.19', + 'avail': '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + 'time_spent': '1일 기준 8시간 소요', + 'collab': '인사팀 (영업부 담당자별 배치일자 확인)', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '1파일 당 10,237여개 데이터 (로컬부 한정)', + 'privacy': '영업부 담당자별 배치일자 확인 필요', + 'asis': '매월 약 10개 엑셀 파일을 활용하여 ETC 로컬 스타를 산출하는 반복 작업 수행.\n4단계 프로세스: ①실적 데이터 기초 작업(필터링·제외) → ②스타 파일 반영·검증(VLOOKUP/SUMIFS) → ③예외·소급 금액 반영 → ④대상자 확정·최종 리스트업', + 'pain': '당월 스타 산출 시 직전 3개월 \'최종실적\' 각 파일에 동일한 작업을 수행해야 하므로 불필요한 수작업 발생.\n1일 기준 8시간이 소요되는 반복 작업.', + 'tobe': '원클릭 자동화를 통해 각 파일별 수작업 시간을 획기적으로 축소', + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '4단계 프로세스가 매우 구체적. VLOOKUP/SUMIFS 등 엑셀 함수 기반 로직이 명확히 정의됨.'), + ('② 현업 참여 의지', '△ 제한적', + '하루 2~3시간, 제한적 참여. 선정 기준(매일 6시간)에 크게 미달. 참여 시간 확대 협의 필요.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태. 즉시 제공 가능. 인사팀(배치일자) 협업 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 노코드 워크플로우 n8n (엑셀 자동 가공·매핑)\n※ AI보다 RPA/자동화 성격이 강함'), + ('⑤ 목표 달성 기준', '✓ 명확', + '1일 8시간 수작업 → 원클릭 자동화로 획기적 단축, 3개월 반복 작업 제거'), + ('⑥ 예상 효과', '높음', + '[정량] 월 8시간+ 수작업 절감, 파일 간 반복 작업 제거\n[정성] 수기 작업 오류 감소, 담당자 변경 시 업무 연속성 확보'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 타부서 협업: 인사팀 데이터 필요\n☐ 참여 시간 제한(2~3시간)으로 일정 지연 리스크'), + ] + }, + { + 'num': 5, + 'title': 'Emma 메일링 업그레이드 (해외 매체 기사 솔팅·발송)', + 'dept': '엠서클 하이닥사업부 하이닥팀', + 'applicant': '김진우(정신영)', + 'empno': '01534', + 'date': '2026.02.20', + 'avail': '진행 상황에 따라 팀장님과 논의 후 시간 조정 예정', + 'time_spent': '각 기자당 약 30분 (메일링 발송 시 5분 이내 기대)', + 'collab': 'IT 추진팀 (기존 emma 개발팀)', + 'data_type': 'Excel/CSV, 텍스트, 정형 DB', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '기사 스크롤링 약 1,000여개 예상', + 'privacy': '미포함', + 'asis': 'Emma 메일링 시스템을 통해 해외 매체 약 20여개 기사를 솔팅 후 이메일 발송하는 업무.', + 'pain': '① 주요 매체 추가 필요\n② 현재 단순 크롤링 방식 → 선정 기준에 따른 기사 선별·UI 개편·기사 요약 기능 부재', + 'tobe': '선정 기준에 따른 기사 선별 후 발송 / UI 개편 / 기사 요약 기능 추가.\n닥터빌 홈페이지 내 페이지 제작도 고려 중.', + 'result_form': '파일 형태: Excel/CSV/Word, 메일링/닥터빌 내 페이지', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '기사 솔팅·발송이라는 큰 틀은 있으나, "선정 기준에 따른 기사 선별" 기준이 구체적이지 않음.'), + ('② 현업 참여 의지', '△ 불확실', + '"팀장님과 논의 후 시간 조정 예정" 기재. 선정 기준(매일 6시간) 충족 가능성 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 텍스트, 정형 DB 형태. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (기사 선별·요약) ☑ 노코드 워크플로우 n8n (크롤링·메일링)\n☑ 상용 API (크롤링, 이메일 발송)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '기자당 30분 → 5분 이내 (약 83% 단축), 기사 1,000여개 자동 처리'), + ('⑥ 예상 효과', '중간', + '[정량] 기자당 25분 절감, 1,000여개 기사 자동 스크리닝\n[정성] 기사 선별 품질 향상, UI 개편으로 사용자 경험 개선'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 외부 시스템 연동: 기존 emma 시스템(IT 추진팀) 연동·개편 필요\n☐ 기사 선별 기준 명확화 필요, 범위 확대 리스크'), + ] + }, + { + 'num': 6, + 'title': '최신연구 논문 기사 제작 자동화', + 'dept': '엠서클 하이닥사업부 하이닥팀', + 'applicant': '김진우(정신영)', + 'empno': '01534', + 'date': '2026.02.20', + 'avail': '진행사항 확인 후 팀장님과 논의하여 시간 조정 예정', + 'time_spent': '기사 1건당 약 4시간 → AI 툴 시 1시간 이내 예상', + 'collab': '없음', + 'data_type': '텍스트, 정형 DB', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '최신연구 논문 최근 1주일 내 100여개 이상 크롤링', + 'privacy': '미포함', + 'asis': '최신연구 논문을 기반으로 기사를 제작하는 업무.\n과거 1차 제작 후 사용하다가 업그레이드 추진 중 관련 AI 추진팀 담당자 퇴사로 홀딩 상태.', + 'pain': '기사 한 건 당 약 4시간 소요.\n기존 시스템 담당자 퇴사로 업그레이드가 중단된 상태.', + 'tobe': '최신연구 논문 기사 발행 자동화.\n하이닥 CMS 내 기사 발행 연동.', + 'result_form': '대시보드, 하이닥 CMS 내 기사 발행', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '과거 1차 제작 경험이 있으나 담당자 퇴사로 홀딩. 업그레이드 요건이 구체적이지 않음.'), + ('② 현업 참여 의지', '△ 불확실', + '"팀장님과 논의하여 시간 조정 예정" 기재. 선정 기준(매일 6시간) 충족 가능성 불확실.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + '텍스트, 정형 DB 형태. 논문 크롤링 데이터 100여개 이상. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (논문 요약·기사 작성) ☑ 상용 API (논문 크롤링)'), + ('⑤ 목표 달성 기준', '✓ 명확', + '기사 1건당 4시간 → 1시간 이내 (75% 단축), 1주일 내 100여개 논문 자동 크롤링·선별'), + ('⑥ 예상 효과', '중간', + '[정량] 건당 3시간 절감, 기사 발행 속도·발행량 증가\n[정성] 최신 연구 트렌드 신속 반영, 기사 품질 일관성 확보'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 기존 담당자 퇴사로 기술 인수인계 이슈\n☑ 하이닥 CMS 연동 필요\n☐ AI 생성 기사의 의료정보 정확성 검증 체계 필요'), + ] + }, + { + 'num': 7, + 'title': '처방마감자료 생성 및 메일 발송 자동화', + 'dept': '대웅제약 영업기획실 영업지원팀', + 'applicant': '이승민', + 'empno': '2240556', + 'date': '2026.02.20', + 'avail': '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + 'time_spent': '월 1회, 약 4시간 이상', + 'collab': '없음', + 'data_type': 'Excel / CSV, 사내 시스템', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '처방마감자료 25만행+, 회전관리장 20만행 이하', + 'privacy': '개인정보 포함 (MR 사번)', + 'asis': '[처방마감자료 생성] ①영업 DCM 데이터 다운로드·검증 → ②처방약호 기준 약가목록집 VLOOKUP(3단계) → ③KEY 기준 회전관리장 조직 VLOOKUP → ④N/A 건 정리·신규처 요청 메일 → ⑤재매핑 → ⑥자동 메일 발송\n[BIO 중복제외리스트] 처방마감자료 완성 후 특정 품목 파일 생성 → BIO 담당자 메일 발송', + 'pain': '① 대용량 VLOOKUP 매핑에 최소 1시간+, PC 자원 점유로 다른 업무 병행 불가\n② 신규 거래처 반영 후 재매핑 포함 시 2시간+ 소요\n③ 처방마감·DCM 마감 동시 시 병목 발생, 양쪽 일정 지연 가능', + 'tobe': '처방마감자료에 영업부 조직·기준품명·단가를 자동 매핑하고, 담당자들에게 자동 메일 발송', + 'result_form': '파일 형태: Excel, CSV, Word 등', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✓ 매우 명확', + '6단계 프로세스가 상세하게 기술됨. VLOOKUP 3단계, KEY 기준 매핑, 메일 발송까지 모두 명확.'), + ('② 현업 참여 의지', '△ 제한적', + '하루 2~3시간, 제한적 참여. 월 1회 업무이므로 집중 기간 조율 가능성은 있음.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 사내 시스템 데이터. 25만행+ 대용량. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ 노코드 워크플로우 n8n (데이터 매핑·메일 발송)\n※ AI보다 RPA/자동화 성격이 강함, 대용량 처리 서버 필요 가능'), + ('⑤ 목표 달성 기준', '✓ 명확', + '월 4시간+ → 자동 매핑·메일 발송 단축, VLOOKUP 1시간+ → 수분 이내'), + ('⑥ 예상 효과', '높음', + '[정량] 월 4시간+ 절감, 매핑 시간 90%+ 단축, PC 자원 점유 해소\n[정성] 처방마감 정확성 확보, 마감 병목 해소, 재작업 최소화'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 개인정보 규제: MR 사번 포함\n☑ 사내 시스템 연동: DCM, 약가목록집, 회전관리장 접근 필요\n☐ 참여 시간 제한(2~3시간) 일정 지연 가능'), + ] + }, + { + 'num': 8, + 'title': '매출 대시보드 제작 (통합 데이터 시각화)', + 'dept': '디엔컴퍼니 재무기획실 전략기획팀', + 'applicant': '백송이', + 'empno': '2500685', + 'date': '2026.02.20', + 'avail': '하루 4시간 이상 (적극 참여)', + 'time_spent': '주 약 12시간, 일 평균 2.5시간', + 'collab': '영업부, ME팀 등 다부서', + 'data_type': 'Excel / CSV', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '다부서 데이터 통합', + 'privacy': '미포함', + 'asis': '매출·마케팅 관련 자료를 영업부, ME팀, 전략기획팀에서 개별 관리 중.\n조직별 관리 목적·포맷이 상이하여 통합 대시보드 구조가 없는 상태.\n각 팀 자료 개별 수령 후 매월 재정렬·재가공하여 차트·테이블 생성.', + 'pain': '① 데이터 취합·정합성 검증에 과도한 시간: 조직별 포맷·기준 상이, 매월 수작업 재가공\n② 지표 정의 일관성 부족: 네트워크 진입률, 신규처 기준, D2D 성장률 등 매월 재정의 필요\n③ 반복 업무 구조적 고착화: 동일 취합·정리·차트 작성 반복, 담당자 의존적', + 'tobe': 'AI가 자동으로 취합·정합성 검증·지표 산출·시각화까지 수행하는 통합 매출 대시보드 체계 구축', + 'result_form': '파일 형태: Excel/CSV/Word, 대시보드', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '"아직 정형화된 틀이 없는 상태, 신규 구축 계획". 방향성은 있으나 지표 정의·구조 등 구체화 필요.'), + ('② 현업 참여 의지', '✓ 적극 참여', + '하루 4시간 이상 적극 참여 가능. 주 12시간 업무 투입 중으로 높은 참여 동기.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV 형태. 제공 가능. 다만 조직별 포맷 상이로 데이터 표준화 선행 필요.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ BI 대시보드 (매출 시각화) ☑ LLM (정합성 검증·지표 산출)\n☑ 노코드 워크플로우 n8n (데이터 자동 취합·가공)'), + ('⑤ 목표 달성 기준', '△ 구체화 필요', + '주 12시간 → 자동화 단축 (구체적 목표 수치 미기재). 신규 구축으로 단계적 목표 설정 필요.'), + ('⑥ 예상 효과', '높음', + '[정량] 주 12시간 취합·가공 시간 절감, 보고 속도 단축\n[정성] 지표 일관성 확보, 담당자 의존도 감소, 통합 데이터 의사결정 체계'), + ('⑦ 리스크·제약사항', '△ 일부', + '☐ 다부서 데이터 통합 필요 (조직별 포맷 상이)\n☐ 요구사항 미확정 → 범위 확대(scope creep) 리스크\n☐ 신규 구축으로 기대 수준 조율 필요'), + ] + }, + # ── 신규 과제 9 ── + { + 'num': 9, + 'title': 'ETC병원본부 영업 데이터 자동 취합·인사이트 리포트 생성', + 'dept': '대웅 ETC병원본부', + 'applicant': '금예빈', + 'empno': '2025013', + 'date': '2026.02.23', + 'avail': '대리 신청 건', + 'time_spent': '구체적 시간 정보 미제공', + 'collab': '직책자 보고 체계 (소장/사업부장 단위)', + 'data_type': 'Excel / CSV, 텍스트', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '사무소별 Google Sheets + Salesforce 데이터', + 'privacy': '확인 필요', + 'asis': ( + 'ETC병원본부에서 사업부 관리·목표 설정, 영업 활동 데이터 확인, 사무소 단위 현황 관리, ' + '정기 리포트 작성, 직책자 대상 주간/월간 보고 수행 중.\n' + 'Salesforce에 동일 형식으로 데이터 입력되나, 실제 라이브 운영·추가 관리 데이터는 ' + 'Google Sheets 등 별도 자료로 분산 관리. 일부 사무소는 LLM/Genspark 등 자체 활용 중.' + ), + 'pain': ( + '① 사무소별 데이터 관리 방식 비표준화 → 동일 데이터가 서로 다른 방식으로 관리\n' + '② 보고 자료가 여러 소스에 분산 → 취합 번거로움\n' + '③ 직책자가 핵심 변화를 한눈에 파악하기 어려움\n' + '④ "무엇이 중요한 변화인지", "한 일/할 일" 빠르게 확인 곤란\n' + '⑤ 데이터 확인·요약이 수동, 보고 자료의 양과 범위가 방대함' + ), + 'tobe': ( + '- 사무소별 Google Sheets 데이터를 자동으로 취합·표준화\n' + '- 주간 영업 데이터를 자동 요약하여 직책자 관점 인사이트 리포트 생성\n' + '- "한 일 / 할 일 / 주요 변화 / 리스크" 자동 구조화\n' + '- 사업부/사무소 단위 성과 비교·이상 징후 자동 감지\n' + '- 수동 취합 없이 보고용 자료 자동 생성\n' + '- 향후 Salesforce 데이터와 연계 가능성 확보' + ), + 'result_form': '파일(Excel/CSV/Word), 대시보드, 직책자용 주간 인사이트 리포트', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '△ 일부 애매', + '"대리 신청 건"으로, 과제 수행 주체와 세부 업무 프로세스가 명확히 기술되지 않음. ' + '방향성(데이터 취합→요약→인사이트→보고서)은 존재하나, 구체적 데이터 가공 규칙·인사이트 판단 기준은 추가 정의 필요.'), + ('② 현업 참여 의지', '△ 불확실', + '"대리 신청 건"으로 기재. 실제 과제 수행 담당자의 참여 의지·가용 시간이 불확실. ' + '선정 기준(매일 6시간) 충족 여부 확인 필요.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 텍스트 형태. Salesforce + Google Sheets에 데이터 존재. 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (데이터 요약·인사이트 생성) ☑ BI 대시보드 (성과 시각화)\n' + '☑ 노코드 워크플로우 n8n (Google Sheets 자동 취합·표준화)'), + ('⑤ 목표 달성 기준', '△ 구체화 필요', + '구체적 시간·수치 미기재. 현재 업무 소요 시간 정보도 없어 정량적 개선 목표 설정이 어려움.'), + ('⑥ 예상 효과', '중간', + '[정량] 수동 데이터 취합·정리 시간 절감 (구체적 수치 미확인)\n' + '[정성] 직책자 보고 품질 향상, 사무소 간 데이터 표준화, 이상 징후 조기 감지'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 개인정보 규제: 확인 필요 (영업 활동 데이터 내 개인정보 여부)\n' + '☑ 외부 시스템 연동: Salesforce·Google Sheets 연동 필요\n' + '☐ 사무소별 비표준 데이터 구조 → 표준화 작업 선행 필요\n' + '☐ 대리 신청으로 실제 수행 주체 확인 필요'), + ] + }, + # ── 신규 과제 10 ── + { + 'num': 10, + 'title': '정책·업계 시황 기반 영업 실행 인사이트 자동 생성', + 'dept': '대웅 ETC병원본부', + 'applicant': '금예빈', + 'empno': '2025013', + 'date': '2026.02.23', + 'avail': '대리 신청 건', + 'time_spent': '구체적 시간 정보 미제공', + 'collab': '본부장/사업부장/팀장 단위 니즈 존재', + 'data_type': 'Excel / CSV, 텍스트', + 'data_ready': '예 (과제 선발 후 샘플 데이터 즉시 제공 가능)', + 'data_volume': '외부 정책·업계 기사 (규모 미상)', + 'privacy': '확인 필요', + 'asis': ( + '영업 전략 방향 설정, 정책·업계 시황 모니터링, 영업 조직 가이드 제공 업무.\n' + '현재 업무 흐름: 정책·업계 기사 확인 → 외부 환경 변화 정리 → 내부 영업 조직에 가이드 전달.\n' + '(기사 확인 도구, 정리 방식 등 구체 정보 없음)' + ), + 'pain': ( + '① 정책/업계 시황 정보를 영업 실행과 연결하기 어려움\n' + '② 외부 정보를 실무 관점으로 해석하는 데 시간 소요\n' + '③ 조직 차원의 기준으로 정리된 가이드 형태의 인사이트 부족\n' + '④ 영업 관점에서 실행 가능한 인사이트 체계 부재' + ), + 'tobe': ( + '- 정책/업계 기사 자동 수집 및 요약\n' + '- 단순 요약이 아닌 "영업 관점 실행 인사이트" 자동 생성\n' + '- 대웅 내부 기준과 연결된 해석 제공\n' + '- 정책 변화 → 영향 영역 → 대응 전략까지 구조화\n' + '→ 외부 정보 → 내부 전략 연결 → 실행 가이드 자동 생성 체계' + ), + 'result_form': '파일(Excel/CSV/Word), 대시보드', + 'eval': [ + ('① 업무 규칙·요구사항 명확성', '✗ 애매', + '"대리 신청 건"이며, 기사 확인 도구·정리 방식 등 구체 정보 없음. ' + '외부 정보를 "영업 관점 실행 인사이트"로 변환하는 과정은 담당자의 "감"과 노하우에 크게 의존하는 영역. ' + '명확한 규칙 기반 개발보다 AI 모델 학습이 필요한 유형.'), + ('② 현업 참여 의지', '△ 불확실', + '"대리 신청 건"으로 기재. 실제 수행자의 참여 의지·가용 시간 불확실. ' + '본부장/사업부장/팀장 단위 니즈가 있으나 실무 참여자 특정 안됨.'), + ('③ 데이터 디지털화', '✓ 즉시 가능', + 'Excel/CSV, 텍스트 형태. 외부 기사·정책 데이터는 크롤링으로 확보 가능.'), + ('④ 예상 AI Tool·인프라', '해당', + '☑ LLM (기사 수집·요약·인사이트 생성) ☑ 상용 API (뉴스 크롤링)\n' + '☑ 노코드 워크플로우 n8n (자동 수집·발송)'), + ('⑤ 목표 달성 기준', '✗ 불명확', + '구체적 시간·수치 정보 전혀 없음. 현재 업무 소요 시간도 미제공. ' + '정량적 개선 목표 수립이 현 단계에서 불가.'), + ('⑥ 예상 효과', '중간', + '[정량] 기사 수집·정리 시간 절감 (구체적 수치 미확인)\n' + '[정성] 외부 환경 변화 대응 속도 향상, 영업 조직 가이드 품질 일관성 확보'), + ('⑦ 리스크·제약사항', '△ 일부', + '☑ 업무 규칙 불명확: "영업 관점 실행 인사이트"의 판단 기준이 담당자 노하우에 의존\n' + '☐ 대리 신청으로 실제 수행 주체 확인 필요\n' + '☐ AI 생성 인사이트의 품질 검증 체계 구축 필요\n' + '☐ 내부 전략과의 연결은 구조화가 매우 어려운 영역'), + ] + }, +] + + +for proj in projects: + add_section_break(doc) + + p = doc.add_paragraph() + styled_run(p, '2', size=20, bold=True, color=ACCENT) + styled_run(p, f'.{proj["num"]}', size=20, bold=True, color=ACCENT) + styled_run(p, f' {proj["title"]}', size=20, bold=True, color=NAVY) + + p = doc.add_paragraph() + styled_run(p, f'2.{proj["num"]}.1 ', size=12, bold=True, color=ACCENT) + styled_run(p, '과제 기본정보 · 현재 업무 · 희망 결과', size=12, bold=True, color=NAVY) + + doc.add_paragraph() + + info_tbl = doc.add_table(rows=5, cols=4) + info_tbl.style = 'Table Grid' + info_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + info_items = [ + ('소속', proj['dept'], '신청자 / 사번', f'{proj["applicant"]} / {proj["empno"]}'), + ('접수일', proj['date'], '참여 가능 시간', proj['avail']), + ('현재 업무 소요시간', proj['time_spent'], '협업 부서', proj['collab']), + ('데이터 형태', proj['data_type'], '데이터 준비 상태', proj['data_ready']), + ('데이터 처리 규모', proj['data_volume'], '개인정보 포함', proj['privacy']), + ] + + for ri, (l1, v1, l2, v2) in enumerate(info_items): + for ci, (label, val) in enumerate([(l1, v1), (l2, v2)]): + lc = info_tbl.rows[ri].cells[ci * 2] + vc = info_tbl.rows[ri].cells[ci * 2 + 1] + lc.text = '' + vc.text = '' + shade(lc, LIGHT_ACCENT) + lc.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + vc.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + rl = lc.paragraphs[0].add_run(label) + rl.bold = True + rl.font.size = Pt(8) + rv = vc.paragraphs[0].add_run(val) + rv.font.size = Pt(8) + + doc.add_paragraph() + + apt_tbl = doc.add_table(rows=2, cols=3) + apt_tbl.style = 'Table Grid' + apt_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + for ci, title in enumerate(['As-Is : 현재 업무', 'Pain Point : 문제점', 'To-Be : 희망 결과']): + make_header_cell(apt_tbl.rows[0].cells[ci], title, 9) + + contents = [proj['asis'], proj['pain'], proj['tobe']] + for ci, txt in enumerate(contents): + c = apt_tbl.rows[1].cells[ci] + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.TOP + p = c.paragraphs[0] + r = p.add_run(txt) + r.font.size = Pt(8) + + doc.add_paragraph() + p = doc.add_paragraph() + styled_run(p, '결과 형태: ', size=8, bold=True, color=ACCENT) + styled_run(p, proj['result_form'], size=8) + + doc.add_paragraph() + + p = doc.add_paragraph() + styled_run(p, f'2.{proj["num"]}.2 ', size=12, bold=True, color=ACCENT) + styled_run(p, '과제 선정 기준 체크리스트 평가', size=12, bold=True, color=NAVY) + + doc.add_paragraph() + + eval_tbl = doc.add_table(rows=len(proj['eval']) + 1, cols=3) + eval_tbl.style = 'Table Grid' + eval_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + + make_header_cell(eval_tbl.rows[0].cells[0], '선정 기준', 9) + make_header_cell(eval_tbl.rows[0].cells[1], '판정', 9) + make_header_cell(eval_tbl.rows[0].cells[2], '평가 내용', 9) + + for ri, (criteria, status, detail) in enumerate(proj['eval'], 1): + c0 = eval_tbl.rows[ri].cells[0] + c1 = eval_tbl.rows[ri].cells[1] + c2 = eval_tbl.rows[ri].cells[2] + + c0.text = '' + c0.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + r0 = c0.paragraphs[0].add_run(criteria) + r0.font.size = Pt(8) + r0.bold = True + + c1.text = '' + c1.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + c1.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r1 = c1.paragraphs[0].add_run(status) + r1.font.size = Pt(9) + r1.bold = True + + if '✓' in status or '매우' in status: + shade(c1, GREEN_BG) + elif '△' in status or status == '해당' or '중간' in status: + shade(c1, YELLOW_BG) + elif '✗' in status: + shade(c1, RED_BG) + elif '높음' in status: + shade(c1, GREEN_BG) + + c2.text = '' + c2.vertical_alignment = WD_ALIGN_VERTICAL.TOP + r2 = c2.paragraphs[0].add_run(detail) + r2.font.size = Pt(8) + + +# ============================================================ +# CHAPTER 3 — 선정 적합도 순위 +# ============================================================ +add_section_break(doc) + +p = doc.add_paragraph() +styled_run(p, '3', size=22, bold=True, color=ACCENT) +styled_run(p, ' 선정 적합도 순위 및 최종 정리', size=22, bold=True, color=NAVY) + +doc.add_paragraph() + +p = doc.add_paragraph() +styled_run(p, '■ 종합 평가 매트릭스', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +mx = doc.add_table(rows=11, cols=9) +mx.style = 'Table Grid' +mx.alignment = WD_TABLE_ALIGNMENT.CENTER + +mh = ['과제', '① 규칙\n명확성', '② 참여\n의지', '③ 데이터\n준비', '④ AI\nTool', '⑤ 목표\n기준', '⑥ 예상\n효과', '⑦ 리스크', '종합\n적합도'] +for i, t in enumerate(mh): + make_header_cell(mx.rows[0].cells[i], t, 8) + +mx_data = [ + ['3. 김지숙\nCPS 증빙 검토 자동화', '✓', '✓', '✓', 'OCR/LLM\nn8n', '✓', '매우 높음', '△', '★★★★★'], + ['1. 박미경\n목표 달성 DashBoard', '✓', '✓', '✓', 'BI/LLM\nn8n', '✓', '높음', '△', '★★★★☆'], + ['4. 박지현\n로컬 스타 산출', '✓', '△', '✓', 'n8n\nRPA', '✓', '높음', '△', '★★★★☆'], + ['7. 이승민\n처방마감자료 자동화', '✓', '△', '✓', 'n8n\nRPA', '✓', '높음', '△', '★★★★☆'], + ['8. 백송이\n매출 대시보드', '△', '✓', '✓', 'BI/LLM\nn8n', '△', '높음', '△', '★★★☆☆'], + ['9. 금예빈\n영업 인사이트 리포트', '△', '△', '✓', 'LLM/BI\nn8n', '△', '중간', '△', '★★★☆☆'], + ['5. 김진우\nEmma 메일링', '△', '△', '✓', 'LLM/n8n\nAPI', '✓', '중간', '△', '★★★☆☆'], + ['6. 김진우\n논문 기사 자동화', '△', '△', '✓', 'LLM\nAPI', '✓', '중간', '△', '★★★☆☆'], + ['10. 금예빈\n정책 인사이트 생성', '✗', '△', '✓', 'LLM\nAPI', '✗', '중간', '△', '★★☆☆☆'], + ['2. 김희영\n채권현황 조회', '✓', '✗', '✓', '웹앱\nAPI', '✓', '중간', '✗', '★★☆☆☆'], +] + +for ri, row in enumerate(mx_data, 1): + for ci, val in enumerate(row): + c = mx.rows[ri].cells[ci] + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + p = c.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + r = p.add_run(val) + r.font.size = Pt(8) + if ci == 0: + r.bold = True + p.alignment = WD_ALIGN_PARAGRAPH.LEFT + elif ci == 8: + r.bold = True + r.font.color.rgb = RGBColor.from_string(ACCENT) + else: + if val in ('✓', '매우 높음'): + shade(c, GREEN_BG) + elif val in ('△', '중간', '해당'): + shade(c, YELLOW_BG) + elif val == '✗': + shade(c, RED_BG) + elif '높음' in val: + shade(c, GREEN_BG) + +doc.add_paragraph() +doc.add_paragraph() + +p = doc.add_paragraph() +styled_run(p, '■ 선정 적합도 순위 (상세 의견)', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +rankings = [ + ('1순위', '★★★★★', '과제 3', 'CPS 지출보고 증빙 검토·승인 자동화 (김지숙)', + '선정 강력 권장', + '가장 높은 선정 적합도. 업무 규칙이 매우 명확하고, 신청자의 적극적 참여 의지가 확인됨. ' + 'OCR과 LLM을 결합한 AI 활용 가치가 매우 높으며, 일 1,500건/월 30,000건의 대량 처리로 ' + '자동화 효과가 극대화됨. 개인정보 포함 데이터에 대한 보안 대책 수립이 선행 필요.', + GREEN_BG), + ('2순위', '★★★★☆', '과제 1', 'ETC마케팅본부 목표 달성 DashBoard (박미경)', + '선정 권장', + '명확한 프로세스와 적극적 참여 의지. BI 대시보드 + LLM 결산 자동 작성의 조합으로 ' + 'AI 활용 가치가 높음. SF CRM 연동 범위를 사전에 확정하여 착수 시 지연을 방지할 필요가 있음.', + GREEN_BG), + ('3순위', '★★★★☆', '과제 4', 'ETC 로컬 스타 산출 자동화 (박지현)', + '조건부 선정\n(참여 시간 확대 협의)', + '4단계 프로세스(VLOOKUP/SUMIFS 기반)가 매우 구체적으로 정의되어 자동화에 매우 적합함. ' + '다만 참여 시간(2~3시간)이 기준(6시간)에 크게 미달하므로, 참여 시간 확대를 협의한 후 선정을 권장. ' + '인사팀(배치일자) 협업도 사전 조율 필요.', + YELLOW_BG), + ('4순위', '★★★★☆', '과제 7', '처방마감자료 생성 및 메일 발송 자동화 (이승민)', + '조건부 선정\n(참여 시간 확대 협의)', + '6단계 프로세스가 상세하게 기술되어 자동화에 매우 적합함. 25만행+ 대용량 VLOOKUP 매핑의 자동화 효과가 큼. ' + '참여 시간(2~3시간)이 기준 미달이나, 월 1회 업무이므로 집중 기간 조율 가능. ' + '개인정보(MR 사번) 보안 대책 수립 필요.', + YELLOW_BG), + ('5순위', '★★★☆☆', '과제 8', '매출 대시보드 제작 (백송이)', + '요건 정의 후 선정', + '적극적 참여 의지와 높은 효과가 기대되나, 요구사항이 아직 미확정 상태("정형화된 틀이 없는 신규 구축"). ' + '신규 구축 특성상 범위 관리가 매우 중요하므로, 요건 정의 워크숍을 선행한 후 착수할 것을 권장.', + YELLOW_BG), + ('6순위', '★★★☆☆', '과제 9', 'ETC병원본부 영업 데이터 인사이트 리포트 (금예빈)', + '요건 정의·수행 주체\n확인 후 검토', + '"대리 신청 건"으로 실제 수행 주체와 참여 시간이 불확실. LLM 기반 데이터 자동 요약·인사이트 생성은 ' + 'AI 활용 가치가 있으나, 사무소별 비표준 데이터 구조 표준화 및 Salesforce 연동이 선행 필요. ' + '실제 수행 담당자 확정 및 요건 구체화 후 재검토 권장.', + YELLOW_BG), + ('7순위', '★★★☆☆', '과제 5', 'Emma 메일링 업그레이드 (김진우/정신영)', + '재검토 필요', + 'LLM 기반 기사 선별·요약 기능의 AI 활용 가치는 있으나, 참여 의지가 불확실하고 ' + '"선정 기준에 따른 기사 선별" 기준이 구체적이지 않음. IT 추진팀(기존 emma 개발팀) 연동·개편이 필요. ' + '참여 시간·요건 확정 후 재검토를 권장.', + YELLOW_BG), + ('8순위', '★★★☆☆', '과제 6', '최신연구 논문 기사 제작 자동화 (김진우/정신영)', + '재검토 필요', + '과거 1차 제작 경험이 있어 기술적 기반은 있으나, 담당자 퇴사로 홀딩된 상태로 기존 시스템 파악이 선행 필요. ' + '참여 의지가 불확실하고 업그레이드 요건이 구체적이지 않음. ' + 'AI 생성 기사의 의료정보 정확성 검증 체계도 필요. 참여 시간·요건 확정 후 재검토를 권장.', + YELLOW_BG), + ('9순위', '★★☆☆☆', '과제 10', '정책·업계 시황 인사이트 자동 생성 (금예빈)', + 'AX 과제 부적합\n→ AI 모델 학습 검토', + '"대리 신청 건"이며, 외부 정보를 영업 실행 인사이트로 변환하는 과정은 담당자의 "감"과 노하우에 ' + '크게 의존하는 영역으로, 명확한 규칙 기반 개발이 어려움. 구체적 시간·수치 정보도 전혀 없어 ' + '목표 설정이 불가. AI 모델 학습(RAG 등) 관점에서 별도 검토 필요.', + RED_BG), + ('10순위', '★★☆☆☆', '과제 2', 'MR 거래처 채권현황 실시간 조회 (김희영)', + 'AX 과제 부적합\n→ IT 개발 과제 검토', + '참여 의지가 불확실(AX특공대 불필요 기재)하고, AI 활용 요소가 미약하며(IT 시스템 개발 성격), ' + 'SAP 연동 제약 등으로 AX 과제 선정에 부적합. IT 개발 과제로 별도 검토할 것을 권장.', + RED_BG), +] + +rank_tbl = doc.add_table(rows=len(rankings) + 1, cols=6) +rank_tbl.style = 'Table Grid' +rank_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER + +rh_actual = ['순위', '과제', '과제명', '판정', '종합 의견'] +for i in range(5): + make_header_cell(rank_tbl.rows[0].cells[i], rh_actual[i], 9) +make_header_cell(rank_tbl.rows[0].cells[5], '', 9) +rank_tbl.rows[0].cells[4].merge(rank_tbl.rows[0].cells[5]) + +for ri, (rank, stars, pno, pname, verdict, opinion, bg) in enumerate(rankings, 1): + c0 = rank_tbl.rows[ri].cells[0] + c1 = rank_tbl.rows[ri].cells[1] + c2 = rank_tbl.rows[ri].cells[2] + c3 = rank_tbl.rows[ri].cells[3] + c45 = rank_tbl.rows[ri].cells[4] + c45.merge(rank_tbl.rows[ri].cells[5]) + + for c in [c0, c1, c2, c3, c45]: + c.text = '' + c.vertical_alignment = WD_ALIGN_VERTICAL.CENTER + + c0.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c0.paragraphs[0].add_run(f'{rank}\n{stars}') + r.font.size = Pt(8) + r.bold = True + shade(c0, bg) + + c1.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c1.paragraphs[0].add_run(pno) + r.font.size = Pt(8) + r.bold = True + + r = c2.paragraphs[0].add_run(pname) + r.font.size = Pt(8) + + c3.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + r = c3.paragraphs[0].add_run(verdict) + r.font.size = Pt(8) + r.bold = True + if '강력' in verdict: + r.font.color.rgb = RGBColor.from_string('27AE60') + elif '권장' in verdict and '부적합' not in verdict: + r.font.color.rgb = RGBColor.from_string(ACCENT) + elif '부적합' in verdict: + r.font.color.rgb = RGBColor.from_string('E74C3C') + + r = c45.paragraphs[0].add_run(opinion) + r.font.size = Pt(8) + + +doc.add_paragraph() +doc.add_paragraph() + +p = doc.add_paragraph() +styled_run(p, '■ 핵심 요약', size=12, bold=True, color=NAVY) + +doc.add_paragraph() + +key_tbl = doc.add_table(rows=1, cols=1) +key_tbl.style = 'Table Grid' +key_tbl.alignment = WD_TABLE_ALIGNMENT.CENTER +kc = key_tbl.rows[0].cells[0] +kc.text = '' +shade(kc, LIGHT_ACCENT) + +lines = [ + ('총 접수 과제: ', '5개 조직, 10건 (2026.02.19~23 접수)'), + ('즉시 착수 가능: ', '10건 모두 데이터 디지털화 완료 (100%)'), + ('선정 강력 권장: ', '과제 3 (CPS 증빙 검토 자동화) — OCR·LLM 활용, 일 1,500건 대량 처리, 70~85% 시간 절감 기대'), + ('선정 권장: ', '과제 1 (DashBoard) — BI+LLM 조합, 높은 AI 활용 가치'), + ('조건부 선정: ', '과제 4, 7 (참여 시간 확대 협의 필요) / 과제 8 (요건 정의 선행 필요)'), + ('요건 정의 후 검토: ', '과제 9 (대리 신청, 수행 주체·요건 확정 필요)'), + ('재검토 필요: ', '과제 5, 6 (참여 의지·요건 구체화 필요)'), + ('AX 부적합: ', '과제 10 (규칙 불명확, AI 모델 학습 관점 별도 검토) / 과제 2 (IT 개발 과제 성격, 별도 검토 권장)'), +] + +for label, value in lines: + p = kc.add_paragraph() + p.paragraph_format.space_before = Pt(2) + p.paragraph_format.space_after = Pt(2) + styled_run(p, f' ▸ {label}', size=10, bold=True, color=NAVY) + styled_run(p, value, size=10) + + +base_dir = os.path.dirname(os.path.abspath(__file__)) +output_path = os.path.join(base_dir, 'outputs', '20260223_report_10.doc') +os.makedirs(os.path.dirname(output_path), exist_ok=True) +doc.save(output_path) +print(f'Report saved: {output_path}') diff --git a/과제 평가 방법/generate_report.py b/과제 평가 방법/generate_report.py new file mode 100644 index 0000000..bd1e1a6 --- /dev/null +++ b/과제 평가 방법/generate_report.py @@ -0,0 +1,540 @@ +from docx import Document +from docx.shared import Pt, Inches, Cm, RGBColor +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.table import WD_TABLE_ALIGNMENT +from docx.oxml.ns import qn, nsdecls +from docx.oxml import parse_xml +import os + +doc = Document() + +style = doc.styles['Normal'] +font = style.font +font.name = '맑은 고딕' +font.size = Pt(10) +style.element.rPr.rFonts.set(qn('w:eastAsia'), '맑은 고딕') + +sections = doc.sections +for section in sections: + section.top_margin = Cm(2) + section.bottom_margin = Cm(2) + section.left_margin = Cm(2) + section.right_margin = Cm(2) + +# ── Title ── +title = doc.add_heading('AX 과제 선정 기준 체크리스트 평가 보고서', level=0) +title.alignment = WD_ALIGN_PARAGRAPH.CENTER + +p = doc.add_paragraph() +p.alignment = WD_ALIGN_PARAGRAPH.RIGHT +run = p.add_run('평가일: 2026년 2월 23일') +run.font.size = Pt(9) +run.font.color.rgb = RGBColor(0x66, 0x66, 0x66) + +doc.add_paragraph() + + +def set_cell_shading(cell, color): + shading = parse_xml(f'') + cell._tc.get_or_add_tcPr().append(shading) + + +def add_eval_section(doc, num, title_text, dept, applicant, empno, summary, evaluations): + """evaluations: list of (criteria_title, status_icon, detail_text)""" + heading = doc.add_heading(f'과제 {num}. {title_text}', level=1) + + info_table = doc.add_table(rows=1, cols=4) + info_table.alignment = WD_TABLE_ALIGNMENT.LEFT + info_table.style = 'Light Grid Accent 1' + + headers = ['소속', '신청자', '사번', '참여 가능 시간'] + values = [dept, applicant, empno, summary] + for i, (h, v) in enumerate(zip(headers, values)): + cell = info_table.rows[0].cells[i] + cell.text = '' + p = cell.paragraphs[0] + run_h = p.add_run(f'{h}: ') + run_h.bold = True + run_h.font.size = Pt(9) + run_v = p.add_run(v) + run_v.font.size = Pt(9) + + doc.add_paragraph() + + eval_table = doc.add_table(rows=len(evaluations) + 1, cols=3) + eval_table.style = 'Light Grid Accent 1' + eval_table.alignment = WD_TABLE_ALIGNMENT.LEFT + + hdr_cells = eval_table.rows[0].cells + hdr_texts = ['선정 기준', '판정', '평가 내용'] + col_widths = [Cm(5), Cm(2), Cm(10)] + for i, (txt, w) in enumerate(zip(hdr_texts, col_widths)): + hdr_cells[i].text = '' + hdr_cells[i].width = w + p = hdr_cells[i].paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run(txt) + run.bold = True + run.font.size = Pt(9) + set_cell_shading(hdr_cells[i], '2E75B6') + run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) + + for row_idx, (criteria, status, detail) in enumerate(evaluations, 1): + cells = eval_table.rows[row_idx].cells + cells[0].width = col_widths[0] + cells[1].width = col_widths[1] + cells[2].width = col_widths[2] + + p0 = cells[0].paragraphs[0] + r0 = p0.add_run(criteria) + r0.font.size = Pt(9) + r0.bold = True + + p1 = cells[1].paragraphs[0] + p1.alignment = WD_ALIGN_PARAGRAPH.CENTER + r1 = p1.add_run(status) + r1.font.size = Pt(10) + r1.bold = True + if '✓' in status: + set_cell_shading(cells[1], 'E2EFDA') + elif '△' in status: + set_cell_shading(cells[1], 'FFF2CC') + elif '✗' in status: + set_cell_shading(cells[1], 'FCE4EC') + + p2 = cells[2].paragraphs[0] + r2 = p2.add_run(detail) + r2.font.size = Pt(9) + + doc.add_paragraph() + + +# ───────────────────────────────────────────── +# 과제 1: 박미경 +# ───────────────────────────────────────────── +add_eval_section( + doc, 1, + 'ETC마케팅본부 목표 달성 DashBoard', + '대웅제약_ETC마케팅본부_마케팅기획팀', '박미경', '2190270', + '하루 4시간 이상 (적극 참여)', + [ + ('① 업무 규칙·요구사항 명확성', + '✓ 명확', + '사업기 목표달성, MBO시스템, 성공모델 확산/파생사례, 검증4단계 등 4가지 항목의 데이터를 주 1회 업데이트하고 ' + '사업팀/품목/PM별 필터링하여 대시보드로 공유하는 명확한 프로세스가 존재함.'), + ('② 현업 참여 의지', + '✓ 적극', + '하루 4시간 이상 적극 참여 가능으로 선택. 선정 기준(1주일 매일 6시간)에는 다소 부족하나, 적극적 의지 확인됨.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV 형태로 데이터 보유. 과제 선발 후 샘플 데이터 즉시 제공 가능. ' + '다만 SF CRM 데이터 자동 연계 시 SF CRM팀과의 협업 필요.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ BI 대시보드 (시각화 대시보드 구현)\n' + '☑ LLM (결산 보고서 자동 작성)\n' + '☑ 노코드 워크플로우 n8n (데이터 자동 업데이트)\n' + '☐ SF CRM 연동 시 사내 서버/클라우드 필요 가능'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 주 3~5시간 수기 업데이트·검수 시간 → 자동화로 대폭 단축\n' + '- 대시보드 로딩시간 3~5초 → 개선\n' + '- AI 기반 결산 자동 작성으로 보고 편의성 증대'), + ('⑥ 예상 효과', + '—', + '[정량적] 주 3~5시간 수작업 절감, 데이터 검수 시간 단축\n' + '[정성적] 데이터 정확성 향상, 사업부장/사업팀장/PM 보고 편의성 대폭 개선, 의사결정 속도 향상'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 외부 시스템 연동 제한: SF CRM 데이터 자동 연계 시 SF CRM팀과의 협업 및 권한 조율 필요\n' + '☐ 방대한 누적 데이터 용량으로 인한 성능 이슈 가능'), + ] +) + +# ───────────────────────────────────────────── +# 과제 2: 김희영 +# ───────────────────────────────────────────── +add_eval_section( + doc, 2, + 'MR 거래처 채권현황 실시간 조회 웹앱', + '한올_마케팅기획본부_영업관리팀', '김희영', '200056', + '본부내 자체적으로 진행 (AX특공대 불필요)', + [ + ('① 업무 규칙·요구사항 명확성', + '✓ 명확', + 'SAP 데이터 기반 채권현황(회전일 150일 이상) 조회 → 웹앱으로 MR에게 제공하는 명확한 요구사항.'), + ('② 현업 참여 의지', + '✗ 불확실', + '"본부내 자체적으로 진행(AX특공대 불필요)"로 선택. ' + 'AX팀과의 적극적 소통·검증 참여 의지가 불확실함. 선정 기준(1주일 매일 6시간) 충족 어려움.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + '웹앱 형태 요청. 과제 선발 후 샘플 데이터 즉시 제공 가능. ' + '다만 SAP 시스템 접근 및 데이터 연동이 핵심 전제조건임.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ 웹앱 개발 (모바일 대응)\n' + '☑ 상용 API / 사내 서버 필요 (SAP 데이터 연동)\n' + '☐ AI 요소보다 시스템 개발·연동 성격이 강함'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 건당 10분 유관부서 문의 → 모바일 즉시 조회로 전환\n' + '- 매일 평균 5건 × 10분 = 50분/일, 주 250분 절감\n' + '- MR 및 내근직 본질업무 집중 환경 구축'), + ('⑥ 예상 효과', + '—', + '[정량적] 주 250분(약 4.2시간) 업무시간 절감, 유관부서 문의 건수 제로화\n' + '[정성적] MR 영업현장 편의성 대폭 향상, 내근/외근 본질업무 집중도 개선'), + ('⑦ 리스크·제약사항', + '✗ 높음', + '☑ 외부 시스템 연동 제한: SAP 시스템 연동이 필수이나, 영업부 SAP 사용 불가 환경\n' + '☑ AX 과제보다 IT 시스템 개발 과제에 가까움 (AI 활용 요소 미약)\n' + '☐ 참여 의지 불확실로 과제 진행 리스크'), + ] +) + +# ───────────────────────────────────────────── +# 과제 3: 김지숙 +# ───────────────────────────────────────────── +add_eval_section( + doc, 3, + 'CPS 지출보고 증빙 검토·승인 자동화', + '대웅제약_영업기획실_영업지원팀', '김지숙', '2190153', + '하루 4시간 이상 (적극 참여)', + [ + ('① 업무 규칙·요구사항 명확성', + '✓ 명확', + 'CPS 시스템 내 상신문서 조회 → JPG 증빙파일 다운로드 → 증빙 적정성·CP 규정 준수 확인 → 승인/반려의 ' + '명확한 검토 프로세스. 오류 판단 기준(촬영일자, 참석인원 대비 수량, 간이영수증 등)도 구체적.'), + ('② 현업 참여 의지', + '✓ 적극', + '하루 4시간 이상 적극 참여 가능. 매일 7시간 해당 업무에 투입 중이므로 높은 참여 동기 확인됨.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV 및 이미지/스캔 파일 형태. 과제 선발 후 샘플 데이터 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ OCR (증빙 이미지 인식·판독)\n' + '☑ LLM (이상 문서 자동 선별·규정 준수 검증)\n' + '☑ 노코드 워크플로우 n8n (일괄 처리 자동화)\n' + '☐ CPS 시스템 연동 필요 시 사내 서버 필요'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 일 1,500건 × 건당 3분 수작업 → 자동 인식·선별로 대폭 단축\n' + '- 매일 7시간 → 이상 문서만 집중 검토로 업무시간 80%+ 절감 기대\n' + '- 오류 탐지율 향상 (사람 육안 → AI 자동 탐지)'), + ('⑥ 예상 효과', + '—', + '[정량적] 일 7시간 → 1~2시간으로 단축 (약 70~85% 절감), 월 30,000건 처리 속도 대폭 향상\n' + '[정성적] 오류 탐지 정확도 향상, 승인 지연 리스크 감소, 영업현장 지급 일정 안정화'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 개인정보 규제: 민감한 개인정보 포함 데이터 (주의 필요)\n' + '☑ 외부 시스템 연동 제한: CPS 시스템과의 연동이 필요할 수 있음\n' + '☐ 증빙 이미지 품질에 따른 OCR 정확도 변동 가능'), + ] +) + +# ───────────────────────────────────────────── +# 과제 4: 박지현 +# ───────────────────────────────────────────── +add_eval_section( + doc, 4, + 'ETC 로컬 스타 산출 자동화', + '대웅제약_영업기획실_영업지원팀', '박지현', '2230551', + '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + [ + ('① 업무 규칙·요구사항 명확성', + '✓ 매우 명확', + '4단계 프로세스(실적 데이터 기초 작업 → 스타 파일 반영·검증 → 예외·소급 금액 반영 → 대상자 확정·리스트업)가 ' + '매우 구체적. VLOOKUP/SUMIFS 등 엑셀 함수 기반 로직이 명확하게 정의되어 있음.'), + ('② 현업 참여 의지', + '△ 제한적', + '"하루 2~3시간, 다른 업무 병행, 제한적 참여" 선택. ' + '선정 기준(1주일 매일 6시간)에 크게 미달. 과제 진행 시 소통 시간 확보 협의 필요.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV 형태. 과제 선발 후 샘플 데이터 즉시 제공 가능. ' + '다만 인사팀(영업부 담당자별 배치일자)과의 협업 필요.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ 노코드 워크플로우 n8n (엑셀 자동 가공·매핑)\n' + '☐ AI 요소보다 RPA/자동화 성격이 강함\n' + '☐ 복잡한 엑셀 로직의 프로그래밍 전환 필요'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 1일 8시간 수작업 → 원클릭 자동화로 획기적 단축\n' + '- 직전 3개월 파일 반복 작업 제거\n' + '- 10개 엑셀 파일 연동 자동화'), + ('⑥ 예상 효과', + '—', + '[정량적] 월 8시간+ 수작업 시간 절감, 파일 간 반복 작업 제거\n' + '[정성적] 수기 작업 오류 감소, 담당자 변경 시 업무 연속성 확보'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 타부서 협업: 인사팀 데이터(영업부 담당자별 배치일자) 확인 필요\n' + '☐ 참여 시간 제한적(2~3시간)으로 과제 일정 지연 리스크\n' + '☐ 복잡한 엑셀 로직 자동화 시 예외 케이스 처리 필요'), + ] +) + +# ───────────────────────────────────────────── +# 과제 5: 김진우(정신영) - Emma 메일링 +# ───────────────────────────────────────────── +add_eval_section( + doc, 5, + 'Emma 메일링 업그레이드 (해외 매체 기사 솔팅·발송)', + '엠서클_하이닥사업부_하이닥팀', '김진우(정신영)', '01534', + '진행 상황에 따라 팀장님과 논의 후 시간 조정 예정', + [ + ('① 업무 규칙·요구사항 명확성', + '△ 일부 애매', + '해외 매체 약 20여개 기사 솔팅 후 이메일 발송이라는 큰 틀은 있으나, ' + '"선정 기준에 따른 기사 선별" 기준이 구체적이지 않음. 기사 선별 기준, UI 개편 범위 등 추가 정의 필요.'), + ('② 현업 참여 의지', + '△ 불확실', + '"진행 상황에 따라 팀장님과 논의 후 시간 조정 예정"으로 기재. ' + '선정 기준(1주일 매일 6시간) 충족 가능성 불확실. 사전에 AI팀 팀장님께 공유한 점은 긍정적.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV, 텍스트, 정형 DB 형태. 과제 선발 후 샘플 데이터 즉시 제공 가능.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ LLM (기사 선별·요약·번역)\n' + '☑ 노코드 워크플로우 n8n (크롤링·메일링 자동화)\n' + '☑ 상용 API (크롤링, 이메일 발송)\n' + '☐ IT 추진팀(기존 emma 개발팀) 협업 필요'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 기자당 약 30분 → 메일링 발송 시 5분 이내 (약 83% 단축)\n' + '- 기사 스크롤링 약 1,000여개 자동 처리'), + ('⑥ 예상 효과', + '—', + '[정량적] 기자당 25분 절감, 기사 1,000여개 자동 스크리닝·솔팅\n' + '[정성적] 기사 선별 품질 향상, UI 개편으로 사용자 경험 개선'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 외부 시스템 연동 제한: 기존 emma 시스템(IT 추진팀 개발)과의 연동·개편 필요\n' + '☐ 기사 선별 기준의 명확한 정의 필요 (담당자 "감"에 의존 가능성)\n' + '☐ 닥터빌 홈페이지 내 페이지 제작 옵션 → 범위 확대 리스크'), + ] +) + +# ───────────────────────────────────────────── +# 과제 6: 김진우(정신영) - 논문 기사 자동화 +# ───────────────────────────────────────────── +add_eval_section( + doc, 6, + '최신연구 논문 기사 제작 자동화', + '엠서클_하이닥사업부_하이닥팀', '김진우(정신영)', '01534', + '진행사항 확인 후 팀장님과 논의하여 시간 조정 예정', + [ + ('① 업무 규칙·요구사항 명확성', + '△ 일부 애매', + '과거 1차 제작 경험이 있으나, 담당자 퇴사로 홀딩 상태. ' + '업그레이드 요건이 구체적이지 않으며, 기존 시스템 상태 파악이 선행되어야 함.'), + ('② 현업 참여 의지', + '△ 불확실', + '"진행사항 확인 후 팀장님과 논의하여 시간 조정 예정"으로 기재. ' + '선정 기준(1주일 매일 6시간) 충족 가능성 불확실.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + '텍스트, 정형 DB 형태. 과제 선발 후 샘플 데이터 즉시 제공 가능. 논문 크롤링 데이터 100여개 이상.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ LLM (논문 요약·기사 작성)\n' + '☑ 상용 API (논문 크롤링)\n' + '☐ 하이닥 CMS 연동 필요'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 기사 1건당 4시간 → 1시간 이내 (75% 단축)\n' + '- 최신연구 논문 최근 1주일 내 100여개 이상 자동 크롤링·선별'), + ('⑥ 예상 효과', + '—', + '[정량적] 건당 3시간 절감, 기사 발행 속도 및 발행량 대폭 증가\n' + '[정성적] 최신 연구 트렌드 신속 반영, 기사 품질 일관성 확보'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 기존 담당자 퇴사로 기술 인수인계 이슈 (기존 시스템 상태 파악 필요)\n' + '☑ 외부 시스템 연동: 하이닥 CMS 내 기사 발행 연동 필요\n' + '☐ AI 생성 기사의 의료 정보 정확성 검증 체계 필요'), + ] +) + +# ───────────────────────────────────────────── +# 과제 7: 이승민 +# ───────────────────────────────────────────── +add_eval_section( + doc, 7, + '처방마감자료 생성 및 메일 발송 자동화', + '대웅제약_영업기획실_영업지원팀', '이승민', '2240556', + '하루 2~3시간 (다른 업무 병행, 제한적 참여)', + [ + ('① 업무 규칙·요구사항 명확성', + '✓ 매우 명확', + '6단계 프로세스가 상세하게 기술됨: DCM 데이터 다운로드·검증 → 약가목록집 VLOOKUP(3차) → ' + '회전관리장 조직 VLOOKUP → N/A 건 정리·메일 발송 → 재매핑 → 자동 메일 발송. ' + 'BIO 중복제외리스트 생성도 명확.'), + ('② 현업 참여 의지', + '△ 제한적', + '"하루 2~3시간, 다른 업무 병행, 제한적 참여" 선택. ' + '선정 기준(1주일 매일 6시간)에 크게 미달. 월 1회 업무이므로 집중 참여 기간 조율 가능성은 있음.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV, 사내 시스템 데이터. 과제 선발 후 샘플 데이터 즉시 제공 가능. ' + '처방마감자료 25만행+, 회전관리장 20만행 이하의 대용량 데이터.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ 노코드 워크플로우 n8n (데이터 매핑·메일 발송 자동화)\n' + '☐ AI 요소보다 RPA/자동화 성격이 강함 (VLOOKUP 자동화, 메일 발송)\n' + '☐ 대용량 데이터 처리를 위한 서버 필요 가능'), + ('⑤ 목표 달성 기준', + '✓ 명확', + '- 월 4시간+ 수작업 → 자동 매핑·메일 발송으로 대폭 단축\n' + '- VLOOKUP 1시간+ → 자동 매핑으로 수분 이내 처리\n' + '- 신규처 요청 메일 자동화, BIO 중복제외리스트 자동 생성'), + ('⑥ 예상 효과', + '—', + '[정량적] 월 4시간+ 절감, VLOOKUP 매핑 시간 90%+ 단축, PC 자원 점유 해소\n' + '[정성적] 처방마감자료 정확성 확보, 처방·DCM 마감 동시 진행 시 병목 해소, 재작업 최소화'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☑ 개인정보 규제: MR 사번 등 개인정보 포함\n' + '☑ 사내 시스템 연동: 영업 DCM, 약가목록집, 회전관리장 등 사내 시스템 데이터 접근 필요\n' + '☐ 참여 시간 제한적(2~3시간)으로 과제 일정 지연 가능'), + ] +) + +# ───────────────────────────────────────────── +# 과제 8: 백송이 +# ───────────────────────────────────────────── +add_eval_section( + doc, 8, + '매출 대시보드 제작 (통합 데이터 시각화)', + '디엔컴퍼니_재무기획실_전략기획팀', '백송이', '2500685', + '하루 4시간 이상 (적극 참여)', + [ + ('① 업무 규칙·요구사항 명확성', + '△ 일부 애매', + '"아직 정형화된 틀이 없는 상태로 신규 구축을 계획"이라고 명시. ' + '각 팀(전략기획팀, RPM, ME)의 데이터 취합·시각화라는 방향은 있으나, ' + '지표 정의·대시보드 구조 등 구체적 요구사항 정의가 선행되어야 함.'), + ('② 현업 참여 의지', + '✓ 적극', + '하루 4시간 이상 적극 참여 가능. 주 12시간을 해당 업무에 투입 중이므로 높은 참여 동기 확인됨.'), + ('③ 데이터 디지털화 여부', + '✓ 즉시 가능', + 'Excel/CSV 형태. 과제 선발 후 관리 파일 및 예상 결과 폼 공유 예정. ' + '다만 조직별 포맷·기준이 상이하여 데이터 표준화 작업이 선행 필요.'), + ('④ 예상 AI Tool·인프라', + '—', + '☑ BI 대시보드 (매출 데이터 시각화)\n' + '☑ LLM (데이터 정합성 검증·지표 자동 산출)\n' + '☑ 노코드 워크플로우 n8n (데이터 자동 취합·가공)'), + ('⑤ 목표 달성 기준', + '△ 구체화 필요', + '- 주 12시간 수작업 취합·가공 → 자동화로 단축 (구체적 목표 수치 미기재)\n' + '- 지표 정의 일관성 확보\n' + '- 신규 구축이므로 단계적 목표 설정 필요'), + ('⑥ 예상 효과', + '—', + '[정량적] 주 12시간 데이터 취합·가공 시간 절감, 보고 속도 단축\n' + '[정성적] 지표 일관성 확보, 담당자 의존도 감소, 실행 전환 속도 향상, 통합 데이터 기반 의사결정 체계 구축'), + ('⑦ 리스크·제약사항', + '△ 일부', + '☐ 다부서 데이터 통합 필요 (영업부, ME팀, 전략기획팀 등 조직별 포맷 상이)\n' + '☐ 요구사항 미확정 상태에서 범위 확대 리스크 (scope creep)\n' + '☐ 신규 구축이므로 기대 수준 조율 필요'), + ] +) + +# ── 종합 요약 테이블 ── +doc.add_page_break() +doc.add_heading('종합 평가 요약', level=1) + +summary_table = doc.add_table(rows=9, cols=9) +summary_table.style = 'Light Grid Accent 1' +summary_table.alignment = WD_TABLE_ALIGNMENT.CENTER + +headers = ['과제', '① 규칙 명확성', '② 참여 의지', '③ 데이터 준비', '④ AI Tool', '⑤ 목표 기준', '⑥ 예상 효과', '⑦ 리스크'] +for i, h in enumerate(headers): + cell = summary_table.rows[0].cells[i] + cell.text = '' + p = cell.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run(h) + run.bold = True + run.font.size = Pt(8) + set_cell_shading(cell, '2E75B6') + run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) + +summary_data = [ + ['1. 박미경\nDashBoard', '✓', '✓', '✓', 'BI/LLM/n8n', '✓', '높음', '△'], + ['2. 김희영\n채권조회', '✓', '✗', '✓', '웹앱/API', '✓', '중간', '✗'], + ['3. 김지숙\n증빙검토', '✓', '✓', '✓', 'OCR/LLM/n8n', '✓', '매우 높음', '△'], + ['4. 박지현\n스타산출', '✓', '△', '✓', 'n8n/RPA', '✓', '높음', '△'], + ['5. 김진우\n메일링', '△', '△', '✓', 'LLM/n8n/API', '✓', '중간', '△'], + ['6. 김진우\n논문기사', '△', '△', '✓', 'LLM/API', '✓', '중간', '△'], + ['7. 이승민\n처방마감', '✓', '△', '✓', 'n8n/RPA', '✓', '높음', '△'], + ['8. 백송이\n매출대시보드', '△', '✓', '✓', 'BI/LLM/n8n', '△', '높음', '△'], +] + +for row_idx, row_data in enumerate(summary_data, 1): + for col_idx, val in enumerate(row_data): + cell = summary_table.rows[row_idx].cells[col_idx] + cell.text = '' + p = cell.paragraphs[0] + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run(val) + run.font.size = Pt(8) + if col_idx > 0: + if val == '✓' or val == '매우 높음': + set_cell_shading(cell, 'E2EFDA') + elif val in ('△', '중간'): + set_cell_shading(cell, 'FFF2CC') + elif val == '✗': + set_cell_shading(cell, 'FCE4EC') + elif val == '높음': + set_cell_shading(cell, 'E2EFDA') + +# ── 종합 의견 ── +doc.add_paragraph() +doc.add_heading('종합 의견', level=2) + +opinions = [ + ('과제 3 (김지숙 - 증빙 검토 자동화)', + '가장 높은 선정 적합도. 업무 규칙 명확, 적극적 참여 의지, OCR·LLM 등 AI 활용도 높음, ' + '일 1,500건 대량 처리로 효과가 극대화됨. 개인정보 포함에 대한 보안 대책 수립 필요.'), + ('과제 1 (박미경 - 목표 달성 DashBoard)', + '높은 선정 적합도. 명확한 프로세스와 적극적 참여 의지. BI 대시보드 + LLM 결산 자동 작성 조합으로 AI 활용 가치 높음. ' + 'SF CRM 연동 범위 사전 확정 필요.'), + ('과제 4 (박지현 - 로컬 스타 산출)', + '업무 로직이 매우 명확하여 자동화 적합. 다만 참여 시간(2~3시간) 제한적이며, AI보다 RPA 성격이 강함. ' + '참여 시간 확대 협의 후 선정 권장.'), + ('과제 7 (이승민 - 처방마감자료)', + '업무 로직 매우 명확, 대용량 데이터 처리 자동화 효과 큼. 참여 시간 제한적(2~3시간)이나 월 1회 업무이므로 ' + '집중 기간 조율 가능. 개인정보 보안 대책 수립 필요.'), + ('과제 8 (백송이 - 매출 대시보드)', + '적극적 참여 의지와 높은 효과 기대. 다만 요구사항이 아직 미확정 상태이므로 ' + '요건 정의 워크숍 후 착수 권장. 신규 구축 특성상 범위 관리 중요.'), + ('과제 5, 6 (김진우 - 메일링/논문기사)', + '두 과제 모두 LLM 활용 가치는 있으나, 참여 의지가 불확실하고 요구사항 구체화 필요. ' + '과제 6은 기존 시스템 상태 파악이 선행되어야 함. 참여 시간·요건 확정 후 재검토 권장.'), + ('과제 2 (김희영 - 채권현황 조회)', + '참여 의지 불확실(AX특공대 불필요 기재), AI 활용 요소 미약(IT 시스템 개발 성격), ' + 'SAP 연동 제약 등으로 AX 과제 선정 부적합. IT 개발 과제로 별도 검토 권장.'), +] + +for title, opinion in opinions: + p = doc.add_paragraph() + run_t = p.add_run(f'■ {title}: ') + run_t.bold = True + run_t.font.size = Pt(10) + run_o = p.add_run(opinion) + run_o.font.size = Pt(10) + +base_dir = os.path.dirname(os.path.abspath(__file__)) +output_path = os.path.join(base_dir, 'outputs', '20260223.doc') +os.makedirs(os.path.dirname(output_path), exist_ok=True) +doc.save(output_path) +print(f'Report saved: {output_path}') diff --git a/과제 평가 방법/outputs/20260223.doc b/과제 평가 방법/outputs/20260223.doc new file mode 100644 index 0000000..b01f44d Binary files /dev/null and b/과제 평가 방법/outputs/20260223.doc differ diff --git a/과제 평가 방법/outputs/20260223_report.doc b/과제 평가 방법/outputs/20260223_report.doc new file mode 100644 index 0000000..fcd5225 Binary files /dev/null and b/과제 평가 방법/outputs/20260223_report.doc differ diff --git a/과제 평가 방법/outputs/20260223_report_10.doc b/과제 평가 방법/outputs/20260223_report_10.doc new file mode 100644 index 0000000..401e70f Binary files /dev/null and b/과제 평가 방법/outputs/20260223_report_10.doc differ diff --git a/과제 평가 방법/outputs/20260223_report_10.docx b/과제 평가 방법/outputs/20260223_report_10.docx new file mode 100644 index 0000000..00c2e62 Binary files /dev/null and b/과제 평가 방법/outputs/20260223_report_10.docx differ diff --git a/과제 평가 방법/prompt/PROMPT_20260223 b/과제 평가 방법/prompt/PROMPT_20260223 new file mode 100644 index 0000000..82c422c --- /dev/null +++ b/과제 평가 방법/prompt/PROMPT_20260223 @@ -0,0 +1,60 @@ +## **4) 과제 선정 기준 체크리스트** + +접수된 과제는 아래 7가지 기준으로 선정 여부를 판단합니다. + +### **① 업무 규칙과 요구사항이 명확한가?** + +**✓ 명확함 :** 명확한 로직이 있어 개발 가능 + +**✗ 애매함 :** 담당자의 "감"이나 노하우가 중요함 (반려 또는 AI 모델 학습 필요) + +### **② 현업의 참여 의지가 있는가?** + +※ 선정 시 1주일간 매일 6시간 이상 AX팀과 소통하며 결과물을 함께 검증해야 합니다. + +**✓ 적극 참여 가능**   /   **✗ 적극 참여 불가능** + +### **③ 데이터가 디지털화되어 있어 즉시 착수 가능한가?** + +**✓ 예 :** 데이터 바로 사용 가능 + +**✗ 아니요 :** 데이터 보안, 접근 권한 등의 문제로 타부서와 소통 필요 및 시간 지연 + +### **④ 예상되는 사용 AI Tool · 인프라는 무엇인가?** + +☐ 노코드 워크플로우 (n8n)       ☐ NotebookLM + +☐ 상용 API 사용                     ☐ LLM + +☐ OCR                                 ☐ 음성인식 + +☐ 예측 모델                          ☐ BI 대시보드 + +☐ 클라우드 필요                     ☐ 사내 서버 필요 + +### **⑤ AX 전환 후 목표 달성 기준이 명확한가?** + +**예시 수치 :** + +- 업무시간 30% 단축 +- 오류율 10% → 3% 감소 +- 월 처리량 2배 증가 +- 비용 30% 감소 +- 응답시간 2분 → 30초 + +### **⑥ 성공 시 예상되는 효과 (정량 · 정성적)는 무엇인가?** + +| **구분** | **항목** | +| --- | --- | +| **정량적 효과** | 연간 절감 비용 (원 단위) / 인력 대체 시간 / 매출 증가 예상 | +| **정성적 효과** | 고객 만족도 향상 / 내부 만족도 개선 / 리스크 감소 / 컴플라이언스 대응 | + +### **⑦ 리스크 및 제약사항이 있는가?** + +☐ 개인정보 규제 + +☐ 법적 이슈 + +☐ 외부 시스템 연동 제한 + +☐ 예산 제한 \ No newline at end of file diff --git a/과제 평가 방법/resources/inputs/20260223.csv b/과제 평가 방법/resources/inputs/20260223.csv new file mode 100644 index 0000000..11a98a3 --- /dev/null +++ b/과제 평가 방법/resources/inputs/20260223.csv @@ -0,0 +1,172 @@ +타임스탬프,소속,신청자 이름,사번,과제 수행 기간 중 할애 가능한 시간을 선택해주세요.,(As-Is) 해결하고자 하는 현재 업무에 대해 설명해주세요. ,현재 업무에서 문제점(Pain Point)은 무엇인가요?,하루 평균 할애하는 소요 시간을 알려주세요.,업무 진행 중 협업이 필요한 부서가 있나요? (선택사항),필요한 데이터는 어떤 형태인가요?,필요한 데이터가 준비되어 있는지 선택해주세요.,샘플 데이터가 있다면 파일을 첨부해주세요. (선택사항) ,1회 작업 시 처리되는 데이터 건수를 작성해주세요.,활용할 데이터에 민감한 개인정보가 포함되어 있나요?,(To-Be) AX 전환 후 희망하는 결과를 작성해주세요.,결과의 원하는 형태를 선택해주세요.,예상 결과에 대해 화면 제공이 가능한 경우는 파일을 첨부해주세요. (선택사항),추가로 요청하고 싶은 사항이 있다면 자유롭게 작성해주세요. (선택사항) +2.19.2026 10:11:08,대웅제약_ETC마케팅본부_마케팅기획팀,박미경,2190270,하루 4시간 이상 (적극 참여),"[ETC마케팅본부 목표 달성 DashBoard] +1. 마케팅 PM의 본질업무자 마케팅의 작동원리인 + '사업기 목표달성, MBO시스템, 성공모델 확산/파생사례, 검증4단계(성공모델)' 4가지 항목을 +2. 주 1회(주차별/월 마감 시) 데이터 수기 업데이트 중이며, +3. 이를 사업팀/품목/PM별 필터링하여 현황파악하실 수 있도록 엑셀 대시보드 형태로 공유드리고 있습니다.","1. 작업 시간 단축의 필요성 +데이터 RAW를 수기로 업데이트하고 검수하다보니 주 1회 2-3시간의 공수가 들고 있습니다. +또한 수기로 확인한 데이터와 대시보드의 수치가 상이할 경우, 이를 검토하는 시간도 추가적으로 소요됩니다. + +2. 사용자 보고 편리성 증대 +현재는 필요한 데이터를 선택하면, 가공된 양식 틀에 데이터 수치가 반영되는 형태로 조회됩니다. +이를 보고 사업부장/사업팀장/PM이 수기로 목표 달성 현황을 작성중인지라, +AI가 대신 결산을 작성해주는 자동화의 필요성도 느끼고 있습니다. + +3. 방대한 데이터 간소화 +몇개년치의 데이터를 누적관리중인지라 용량이 상당히 방대합니다. +이에 따라 대시보드 업데이트 시 로딩시간이 3-5초 정도 소요됩니다.",주 3-5시간 (데이터 검수시간 포함),SF CRM 데이터 자동화 연계 시 - SF CRM팀,Excel / CSV,예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),https://drive.google.com/open?id=1q1zXK4JRDhdhFV4jCgh_zJM6lXloA7Z5,"1개 파일, 10개 이상 시트 연동 (파일 첨부)",미포함,"- 사업부/사업팀/품목(복수선택)/PM 선택 시 결산보고를 자동으로 작성 +- 사업부/사업팀 결산 시 집중품목을 자동으로 선별하여 상단에 핵심 성과 자동 정리 +- 데이터를 각 사이트별 자동으로 연동하여 수기 업데이트 자동화 +- 평가 결과를 종합하여 선택한 데이터 내 순위(사업팀/PM/품목) 제공","대시보드, 챗봇",https://drive.google.com/open?id=1chWZgQB8qk2LVlo7Af8gy3CX-6p6Tjp8,"선택한 데이터의 핵심성과 상단에 도출되고 +잘한점/개선할 점이 자동으로 작성되도록, +그 아래에 수치적인 결과들이 시각화되도록 구현하고 싶습니다.." +2.19.2026 14:03:44,한올_마케팅기획본부_영업관리팀,김희영,200056,본부내 자체적으로 진행(AX특공대 불필요)," MR의 거래처 채권현황(회전일 150일이상) 실시간 문의에 대하여 + ▶ 유관부서에서 SAP확인을 통한 실시간응대","MR이 영업현장에서 필요한 실시간 데이터들을 유관부서를 통해야만 확인이 가능함(영업부는 SAP사용이 불가능하고, 영업현장에서 PC사용이 용이하지 못함) 이로인해 내근/외근 모두 본질업무에 집중할수 있는 환경이 안되어 업무효율성이 떨어짐.","건당 10분, 매일 평균 5건(50분), 1주일 총 250분",없음,웹앱,예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,.,미포함,개발된 웹앱을 통하여 MR이 영업현장에서 직접 모바일로 간편하게 본인거래처 들에 대한 채권확인이 가능,웹앱,, +2.19.2026 17:22:41,대웅제약_영업기획실_영업지원팀,김지숙,2190153,하루 4시간 이상 (적극 참여),"26년 2월 말부터 CPS 지출보고 시스템 내 +영업부 법인카드(방문디테일) 사용내역 최종 검토·승인 역할을 신규 수행 예정임. + +영업부에서 상신한 문서에 대해 +증빙 적정성 및 CP 규정 준수 여부를 확인 후 승인 또는 반려 처리함 +(CPS 접속 → 결재요구함 → 상신문서 조회 → JPG 증빙파일 다운로드 및 확인 → 승인/반려) + +예상 검토 규모는 일 평균 약 1,500건 / 월 평균 약 30,000건 이상이며 +문서 1건당 첨부된 증빙 이미지(jpg, 1~3개)를 +건별 다운로드 후 개별 확인하는 과정에서 가장 많은 시간이 소요되고 있음. (건당 약 3분 소요)","1.수작업 기반 검수 구조 + - 1개 문서당 첨부된 증빙 이미지(jpg, 최소 1~최대 3개)를 건별 다운로드 후 개별 확인 + - 시스템 내 미리보기·자동 판독 기능 부재 + +2. 업무 시간 과다 소요 + - 단순 다운로드/확인 작업에 검수 시간 상당 부분 소모 + - 승인 지연 시 영업 현장 지급 일정 영향 가능 + +3. 오류 탐지 효율 저하 + - 사람이 일일이 확인하는 구조 → 오류를 자동 탐지하지 못함 + ▸ 촬영일자 불일치 + ▸ 참석인원 대비 수량 과다 또는 미달 + ▸ 세부내역이 확인되지 않는 간이영수증 첨부 여부","매일 7시간, 1주일 총 35시간 소요 (비용 마감일정에 따라 비주기적)",,"Excel / CSV, 이미지 / 스캔 파일",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,1회 처리시 이미자파일 최소 1개-최대3개 ,포함,"- 수작업 중심 구조에서 자동화 구조로 전환 +- 증빙 이미지 인식하여 일괄 확인 기능 구현으로 다운로드 작업 최소화 +- 이상 문서 자동 선별을 통해 검수 집중도 향상 및 승인 처리 속도 개선","파일 형태: Excel, CSV, Word 등",, +2.19.2026 17:47:00,대웅제약_영업기획실_영업지원팀,박지현,2230551,"하루 2~3시간 (다른 업무 병행, 제한적 참여)","매월 대략 10개 엑셀 파일을 활용하여 같은 작업을 반복적으로 하고 있음. +하기 구체적인 프로세스 공유 드립니다. + + + +1. 실적 데이터 기초 작업 (필터링 및 제외) +제외 품목 분류: 실적 파일에서 '원내 제외 품목' 및 '구분3(1, 6, 7, 8번 데이터)'을 추출하여 별도 시트 구성. +담당자별/사무소별 제외 품목 합계 산출: 합계: (원내 + 시지/메디웰 + 수금) +최종 실적: 위 합계에서 '원내 제외 품목' 실적을 차감하여 산출 (ex.AG = AE - AF) +과거 데이터 작업: 최근 2개월치 파일도 위와 동일한 방식으로 작업 진행 + +2. 스타 파일 반영 및 검증 +실적 매칭: 사번 기준(VLOOKUP/SUMIFS)으로 당월 및 전월/전전월 최종 실적을 스타 파일에 반영 +데이터 검증: 담당자 퇴사 등으로 인한 불일치를 방지하기 위해 사번 기준 합계 금액 재확인 +기준점 조정: 원내 제외 품목만큼 기존 '기준점'에서 해당 금액을 차감하여 최종 반영 기준점 확정 + +3. 예외 및 소급 금액 반영 +당월 예외: 처방실적 파일에서 특정 품목(렉사프로, 한올 등) 데이터를 취합 후, '스타 제외 품목'을 걸러낸 순수 간납가 합계를 산출하여 반영 +이전월 소급: 과거 예외년월 데이터를 추출하여 동일한 방식으로 제외 품목 필터링 후, 사번별 간납가 합계를 소급분으로 반영 + +4. 대상자 확정 및 최종 리스트업 +대상자 구분: '주요항목관리장'의 로컬 소장 명단과 대조 +명단에 있으면 '3.제외', 없으면 '1.대상'으로 분류 +데이터 정렬: 대상자 여부 → 순위 → 점수 순으로 정렬 후 제외자는 서식(회색) 처리 +최종 결과: 수상이력을 비고란에 반영하고, 상위 5명을 추출하여 [출력] 시트에 작성","예를 들어 당월 스타를 산출하게 될 경우, 직전 3개월 '최종실적' 각 파일에 동일한 작업을 수행해야 하므로, 불필요한 수작업이 발생함.",1일 기준 8시간 소요,인사팀(영업부 담당자별 배치일자 확인 필요),Excel / CSV,예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),https://drive.google.com/open?id=17V9yzJS6JRBKxQzqqKWkj774uinwxQN0,"로컬부에 한하여, 1파일 당 10,237여개 데이터(ex.거래처별 실적) 활용",영업부 담당자별 배치일자 확인이 필요합니다.,원클릭 자동화를 통해 각 파일별로 수작업 해야 하는 시간을 획기적으로 축소,"파일 형태: Excel, CSV, Word 등",, +2.20.2026 9:00:04,엠서클_하이닥사업부_하이닥팀,김진우(정신영),01534,진행 상황에 따라 팀장님과 논의 후 시간 조정 예정,Emma 메일링 업그레이드: 해외 매체 약 20여개 기사 솔팅 후 이메일 발송,"1. 주요 매체 추가 필요 +2. 현재 방식 : 단순 크롤링 + 개선 방식 : 선정 기준에 따른 기사 선별 후 발송 / UI 개편 / 기사 요약",각 기자당 약 30분(메일링 발송 시 5분 내 종료 기대),IT 추진팀: 기존 emma 개발팀,"Excel / CSV, 텍스트, 정형 DB, 이메일이 아닌 닥터빌 홈페이지 내 페이지 제작으로도 고려 중",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,기사 스크롤링 약 1000여 개 예상,미포함,https://docs.google.com/spreadsheets/d/1P2x7G68q_62icx-rPFbnk0JP2SIMt4MNwxQFw-FvMWc/edit?gid=1273546951#gid=1273546951,"파일 형태: Excel, CSV, Word 등, 메일링/닥터빌 내 페이지",,하이닥 정신영 팀장님이 AI 팀장님 및 박대희님께 사전 공유드린 내용입니다. +2.20.2026 9:16:03,엠서클_하이닥사업부_하이닥팀,김진우(정신영),01534,진행사항 확인 후 팀장님과 논의 하여 시간 조정 예정,최신연구 논문 기사 제작 자동화,"과거 1차 제작 후, 사용하다가 업그레이드 추진 중 관련 AI 추진팀 담당자 퇴사로 홀딩",기사 한 건 당 약 4시간 소요 > AI 툴 제작 시 1시간 이내 예상,,"텍스트, 정형 DB",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),https://drive.google.com/open?id=1HVQrUYblzpFpLtOP7L4w9Jz-C6BvzYZU,최신연구 논문 최근 1주일 내 100여 개 이상 크롤링,미포함,최신연구 논문 기사 발행 ,"대시보드, 하이닥 CMS 내 기사 발행",https://drive.google.com/open?id=1FZYmLVDHID0LZJBe3X7VJCNBNK0PCKY3,이미 기존에 진행되었던 내용으로 업그레이드가 필요한 상황입니다. 하이닥 정신영 팀장님이 AI 추진팀 팀장님께 1차로 말씀드렸다고 전달 받았습니다. +2.20.2026 10:44:01,대웅제약_영업기획실_영업지원팀,이승민,2240556,"하루 2~3시간 (다른 업무 병행, 제한적 참여)","[처방마감자료 생성 및 메일 발송] +1. 영업 DCM 데이터 다운로드 후 검증 (검증 방법 명확함) +2. 처방약호 기준으로 약가목록집에서 기준품명과 단가 VLOOKUP (1차: 제약 약가목록집_평가시트 / 2차: BIO 약가목록집 / 3차: 제약 약가목록집_비평가시트) +3. KEY(판매처코드&시퀀스) 기준으로 회전관리장에서 조직 VLOOKUP (구분, 사업부, 사무소, 사번, 담당자, 사업자번호) + * 해당 단계에서 많은 시간 소요 (약 1시간 이상) +4. #N/A 뜨는 건 엑셀 정리하여 회전관리장 담당자에게 신규처 요청 (메일 발송) +5. 최종 회전관리장이 공유되면 다시 3번 작업 수행 + * 해당 단계에서 많은 시간 소요 (약 1시간 이상) +6. 자동 메일 발송 + +[BIO 중복제외리스트 생성 및 메일 발송] +1. 처방마감자료가 완성되면 베아제F 품목과 베아렌, 레보플록사신 품목 각각 파일을 생성 + - 처방약호 기준으로 VLOOKUP 하여 각 파일에 붙여넣기 +2. BIO 담당자들에게 메일 발송","어렵거나 복잡한 업무는 아니지만 엑셀 가공 과정에서 시간이 과도하게 소요되는 업무입니다. + +KEY 기준으로 조직을 매핑하는 과정에서 방대한 데이터를 VLOOKUP으로 처리하다 보니 최소 1시간 이상이 소요되며, 작업이 완료될 때까지 PC 자원이 점유되어 다른 업무를 병행하기 어렵습니다. 또한 신규 거래처 반영 후 재매핑까지 포함하면 전체 소요 시간이 2시간 이상으로 증가합니다. + +처방마감자료는 평가자료 및 BIO 실적 반영에 직결되는 핵심 데이터로, 정확성이 반드시 확보되어야 하며 처리 속도 또한 빠를수록 업무 효율 측면에서 유리합니다. + +특히 처방마감과 DCM(도매) 마감이 겹치는 경우, 해당 작업이 병목이 되어 두 업무 모두 일정 지연 가능성이 높습니다. 따라서 반복·대량 매핑 업무의 자동화/AI 적용을 통해 처리 시간을 단축하고, 재작업을 최소화할 필요가 있습니다.","월 1회, 약 4시간 이상",,"Excel / CSV, 사내 시스템",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,1. 처방마감자료 : 25만행 이상 / 2. 회전관리장 : 20만행 이하,개인정보 (MR 사번),"처방마감자료에 영업부 조직 및 기준품명, 단가를 자동으로 매핑하고, 담당자들에게 자동 메일 발송","파일 형태: Excel, CSV, Word 등",https://drive.google.com/open?id=1MSrodgYxKSjbARACbHki4uAme5pWYEy7, +2.20.2026 15:49:34,디엔컴퍼니_재무기획실_전략기획팀,백송이,2500685,하루 4시간 이상 (적극 참여),"매출 대시보드 제작과 관련된 업무를 진행하고 싶습니다. +현재 매출 및 마케팅 관련 자료는 영업부, ME팀, 전략기획팀에서 개별적으로 관리하고 있으며, +조직별로 관리 목적과 포맷이 상이하여 통합된 대시보드 구조가 없는 상태입니다. + +* 각 팀 관리 자료 개별 수령 + - 전략기획팀 : 매출현황, 품목별 매출 현황 분석표, 신규오픈처 + - RPM : 매출현황, 소규모 세미나 내역 등 + - ME : D2D 유효성 데이터(세미나 전/후 거래처 매출비교), 브랜드별/품목별 구분 재정리","현재는 통합 데이터 구조가 없어 매월 각 팀에서 재정렬 및 재 가공한 후 개별 차트 및 테이블을 생성하는 방식으로 운영되고 있습니다. + +1. 데이터 취합 및 정합성 검증에 과도한 시간 소요 + - 조직별로 포맷과 기준이 상이하여 매월 수작업 정렬 및 재가공이 필요 + - RAW DATA의 양식 기준이 달라 기준 별 재산정 등 반복 검증 발생 + +2. 지표 정의의 일관성 부족 + - 네트워크 진입률, 신규처 기준, D2D 성장률 계산 방식이 파일마다 달라 매월 재정의 및 수동 계산이 필요 + - 동일 데이터를 여러 번 가공하는 비효율 구조 + +3. 반복 업무의 구조적 고착화 + - 매월 동일한 데이터 취합·정리·차트 작성 업무가 반복됨 + - 업무 숙련도에 의존적이며, 담당자 변경 시 리스크 발생 가능 + +현재 각 사업부에서 다양한 데이터 기반 관리 요구가 증가하고 있고, +통합 대시보드 및 시각화된 자료의 부재로 매월 매출 분석 시 데이터 취합, 정리, 재가공에 상당한 시간이 소요되고 있습니다. +이에 따라 보고 속도 및 실행 전환 속도를 단축할 수 있는 구조 개선이 시급한 상황입니다.","전략기획팀 기준 1주일 약 12시간, 일 평균 2.5시간 소요",,Excel / CSV,예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,,미포함,AX 전환을 통해 각 조직에서 분산 관리 중인 매출·행사·네트워크 데이터를 AI가 자동으로 취합·정합성 검증·지표 산출·시각화까지 수행하는 통합 매출 대시보드 체계를 구축하고자 합니다.,"파일 형태: Excel, CSV, Word 등, 대시보드",,"현재 매출 대시보드를 구축하고자 합니다. +해당 대시보드는 매출 데이터를 기반으로 주요 지표를 시각화하는 레포트 형태이며, +아직 정형화된 틀이 없는 상태로 신규 구축을 계획하고 있습니다. +선정 후 관리되고 있는 파일 및 예상 결과에 대한 폼을 함께 공유드리겠습니다. +감사합니다." +2.23.2026 9:22:34,대웅_ETC병원본부,금예빈,2025013,대리 신청 건,"현재 ETC병원본부에서는 다음과 같은 업무를 수행하고 있음: +- 사업부 관리 및 목표 설정 +- 영업 활동 데이터 확인 +- 사업부/사무소 단위 현황 관리 +- 정기 리포트 작성 및 피드백 +- 직책자 대상 정기(주간/월간) 보고 + +영업 데이터는 Salesforce에 동일한 형식으로 입력되고 있으나, +실제 라이브 운영 상황 및 추가 관리 데이터는 Google Sheets 등 별도 자료로 관리되고 있음. +또한 사무소별로 데이터 관리 방식이 상이하며, +일부 사무소는 LLM/Genspark 등을 활용해 자체 요약본을 제작하여 공유하고 있음.","- 사무소별 데이터 관리 방식이 표준화되어 있지 않음 +- 동일 데이터가 서로 다른 방식으로 관리됨 +- 일부 사무소는 LLM 등을 활용해 요약하나 표준 체계는 없음 +- 보고 자료가 여러 소스에 분산되어 있어 취합이 번거로움 +- 직책자가 핵심 변화를 한눈에 파악하기 어려움 +- “무엇이 중요한 변화인지”, “한 일/할 일”을 빠르게 확인하기 어려움 +- 데이터 확인과 요약이 수동으로 이루어짐 +- 보고 자료의 양과 범위가 방대함",제공된 내용에 구체적인 시간 정보는 없음.,"명시적 부서 협업 언급은 없음. 다만 직책자 보고가 포함되어 있으며, 소장/사업부장 단위 보고 체계가 존재함.","Excel / CSV, 텍스트",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,,확인 필요,"- 사무소별로 상이한 Google Sheets 데이터를 자동으로 취합·표준화 +- 주간 영업 데이터를 자동 요약하여 직책자 관점 인사이트 리포트 생성 +- “한 일 / 할 일 / 주요 변화 / 리스크”를 자동 구조화 +- 사업부/사무소 단위 성과 비교 및 이상 징후 자동 감지 +- 수동 취합 없이 보고용 자료 자동 생성 +- 향후 Salesforce 데이터와 연계 가능성 확보 + +즉, +데이터 취합 → 요약 → 해석 → 보고 자료 생성까지 자동화된 인사이트 체계 구축","파일 형태: Excel, CSV, Word 등, 대시보드, (보조적으로) 직책자용 주간 인사이트 리포트 자동 생성 파일",, +2.23.2026 9:24:34,ETC병원본부,금예빈,2025013,대리 신청 건,"- 영업 전략 방향 설정 +- 정책 및 업계 시황 모니터링 +- 영업 조직 가이드 제공 + +외부 정책 및 업계 기사를 검토하고 이를 내부 영업 실행 전략과 연결하려는 업무임. + +현재 업무 흐름은 다음과 같음: +- 정책 및 업계 기사 확인 +- 외부 환경 변화 정리 +- 내부 영업 조직에 가이드 전달 + +(기사 확인 도구, 정리 방식 등 구체 정보 없음)","- 정책/업계 시황 정보를 영업 실행과 연결하기 어려움 +- 외부 정보를 실무 관점으로 해석하는 데 시간 소요 +- 조직 차원의 기준으로 정리된 가이드 형태의 인사이트 부족 +- 영업 관점에서 실행 가능한 인사이트 체계 부재",제공된 정보 없음,명확한 협업 부서 언급은 없음. 다만 본부장/사업부장/팀장 단위 니즈가 있었음.,"Excel / CSV, 텍스트",예 (과제 선발 후 샘플 데이터 즉시 제공 및 활용 가능),,,확인 필요,"- 정책/업계 기사 자동 수집 및 요약 +- 단순 요약이 아닌 “영업 관점 실행 인사이트” 자동 생성 +- 대웅 내부 기준과 연결된 해석 제공 +- 정책 변화 → 영향 영역 → 대응 전략까지 구조화 + +즉, +외부 정보 → 내부 전략 연결 → 실행 가이드 자동 생성 체계","파일 형태: Excel, CSV, Word 등, 대시보드",, \ No newline at end of file