Files
ax_document/과제 평가 방법/generate_chairman_report_10.py
dsyoon b0a2b0eec4 Initial commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-25 17:58:49 +09:00

970 lines
55 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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'<w:shd {nsdecls("w")} w:fill="{color}"/>'))
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}')