Initial commit

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dsyoon
2026-02-25 17:58:49 +09:00
commit b0a2b0eec4
31 changed files with 4683 additions and 0 deletions

View File

@@ -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'<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}')