Standardize all 9 dintel-* skills + shared infrastructure against the new D.intelligence canon (brand-canon, fact-sheet, service-architecture, naming-conventions v1.0) and BRAND-GUIDE v1.3. Term replacements (applied across SKILL.md, CLAUDE.md, scripts, refs): - Slogan: SMART Marketing Clinic -> SMART Marketing Intelligence (Clinic is now an OurDigital asset; split enforced) - Core Values: Scientific/Practical -> Science/Practice - MD category: Marketing Diagnosis -> Measurement Design - Brand Character: 마케팅 주치의 -> 성과중심의 데이터 기반 마케팅 과학자 - Address: 송파테라타워/황새울로 -> 판교글로벌비즈센터 1층 36호 (13449) - External email: contact@ -> info@dintelligence.co.kr - CEO title: D.HIVE CEO & Founder / Senior Advisor -> 대표이사 - Tone keywords: Scientific/Practical/Outcome-oriented -> Science-driven/Practice-oriented/Outcome-focused - Foreign-word literals: 감사 보고서/리포트/결과 -> 진단 ~ (audit->진단) - Adjacent services: removed Courses (transferred to OurDigital Practice) Structural changes: - Insert "v1.3 정합성 - 단일 진실" block citing canon docs in all 9 SKILL.md files (preserves single source of truth at runtime). - Bump version (1.0->1.1 or 1.1->1.2) and add canon_compliance: v1.3 + last_updated: 2026-05-18 to every frontmatter. - Expand brand.py: CORPORATE/LAB dicts (full address, biz reg, CEO), TRANSLATION_STANDARDS, ADJACENT_SERVICES. PROHIBITED_WORDS grew 13 -> 24 entries so Brand Guardian flags legacy phrases at runtime. - Rewrite _dintel-shared/references/dintelligence_brand_guide.md as v1.3 canon mirror; sync brand-editor's local copy (no drift). - Pin design-system reference header to 2026 PPTX v2.0. - Refresh 73-quotation generate_quotation.py (Sheet 1 cover, Sheet 5 terms) and 71-brand-editor generate_credential.py output. - Update audit template title (감사 -> 진단). Verified by 93-check compliance suite covering frontmatter, canon citation, prohibited-term grep, Python compile + runtime imports, and an end-to-end smoke test that generates a quotation .xlsx and inspects cell content for v1.3 strings + absence of legacy strings. Refs: knowledge-base/canon/{brand-canon,fact-sheet,service-architecture,naming-conventions}.md v1.0 02_Brand/BRAND-GUIDE-v1.3.md knowledge-base/TODO-claude-code-skill-rebuild.md knowledge-base/gotcha/01_outdated-facts.md (10 cases) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
512 lines
21 KiB
Python
512 lines
21 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
D.intelligence Company Credential Generator
|
|
Brand-compliant DOCX following the D.intelligence Korean Writing Style Guide.
|
|
Tone: ~합니다 존칭 서술체 (service/company intro style)
|
|
|
|
Agent #71 (dintel-brand-editor) v1.2.0 — D.intelligence Agent Corps
|
|
Canon compliance: v1.3 (2026-05-18)
|
|
Shared brand constants: _dintel-shared/src/dintel/brand.py
|
|
|
|
Authoritative source for credential content: knowledge-base/reference/company/D.intelligence-Company Credential 2026.pptx
|
|
This generator produces a DOCX skeleton — review against the official PPTX before delivery.
|
|
"""
|
|
|
|
from docx import Document
|
|
from docx.shared import Inches, Pt, Cm, RGBColor
|
|
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
|
from docx.enum.table import WD_TABLE_ALIGNMENT
|
|
from docx.oxml.ns import qn
|
|
import os
|
|
|
|
# ── Brand Colors ──────────────────────────────────────
|
|
# See also: _dintel-shared/src/dintel/brand.py for canonical values
|
|
BRAND_DARK = RGBColor(0x1A, 0x1A, 0x2E) # Dark navy
|
|
BRAND_PRIMARY = RGBColor(0x2D, 0x2D, 0x44) # Primary text
|
|
BRAND_ACCENT = RGBColor(0xC8, 0xD6, 0x2C) # Lime/yellow accent
|
|
BRAND_GRAY = RGBColor(0x66, 0x66, 0x66) # Body text gray
|
|
BRAND_LIGHT_BG = RGBColor(0xF5, 0xF5, 0xF0) # Light background
|
|
BRAND_WHITE = RGBColor(0xFF, 0xFF, 0xFF)
|
|
|
|
OUTPUT_PATH = os.path.expanduser("~/Documents/D.intelligence_Company_Credential.docx")
|
|
|
|
|
|
def set_cell_shading(cell, color_hex):
|
|
"""Set cell background color."""
|
|
shading = cell._element.get_or_add_tcPr()
|
|
shading_elem = shading.makeelement(qn('w:shd'), {
|
|
qn('w:fill'): color_hex,
|
|
qn('w:val'): 'clear',
|
|
})
|
|
shading.append(shading_elem)
|
|
|
|
|
|
def add_section_label(doc, label_text):
|
|
"""Add ALL CAPS section label (brand rule: section labels in ALL CAPS)."""
|
|
p = doc.add_paragraph()
|
|
p.space_before = Pt(24)
|
|
p.space_after = Pt(4)
|
|
run = p.add_run(label_text.upper())
|
|
run.font.size = Pt(9)
|
|
run.font.color.rgb = BRAND_ACCENT
|
|
run.font.bold = True
|
|
run.font.name = "Arial"
|
|
|
|
|
|
def add_heading_bilingual(doc, en_title, kr_subtitle=None):
|
|
"""Add bilingual heading: English Title Case + Korean subtitle (brand rule: bilingual layering)."""
|
|
h = doc.add_heading(level=2)
|
|
h.space_before = Pt(4)
|
|
h.space_after = Pt(8)
|
|
run = h.add_run(en_title)
|
|
run.font.size = Pt(16)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Arial"
|
|
|
|
if kr_subtitle:
|
|
p = doc.add_paragraph()
|
|
p.space_before = Pt(0)
|
|
p.space_after = Pt(12)
|
|
run = p.add_run(kr_subtitle)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Malgun Gothic"
|
|
|
|
|
|
def add_body(doc, text, bold_phrases=None):
|
|
"""Add body paragraph in 존칭 서술체 with brand formatting."""
|
|
p = doc.add_paragraph()
|
|
p.space_after = Pt(10)
|
|
p.paragraph_format.line_spacing = Pt(20)
|
|
|
|
if bold_phrases:
|
|
remaining = text
|
|
for phrase in bold_phrases:
|
|
if phrase in remaining:
|
|
before, _, after = remaining.partition(phrase)
|
|
if before:
|
|
run = p.add_run(before)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_PRIMARY
|
|
run.font.name = "Malgun Gothic"
|
|
run = p.add_run(phrase)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_PRIMARY
|
|
run.font.bold = True
|
|
run.font.name = "Malgun Gothic"
|
|
remaining = after
|
|
if remaining:
|
|
run = p.add_run(remaining)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_PRIMARY
|
|
run.font.name = "Malgun Gothic"
|
|
else:
|
|
run = p.add_run(text)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_PRIMARY
|
|
run.font.name = "Malgun Gothic"
|
|
|
|
|
|
def add_service_table(doc, services):
|
|
"""Add service table with brand styling."""
|
|
table = doc.add_table(rows=1, cols=2)
|
|
table.alignment = WD_TABLE_ALIGNMENT.CENTER
|
|
|
|
# Header
|
|
hdr = table.rows[0].cells
|
|
for i, text in enumerate(["Service", "Description"]):
|
|
hdr[i].text = text
|
|
for paragraph in hdr[i].paragraphs:
|
|
for run in paragraph.runs:
|
|
run.font.size = Pt(9)
|
|
run.font.bold = True
|
|
run.font.color.rgb = BRAND_WHITE
|
|
run.font.name = "Arial"
|
|
set_cell_shading(hdr[i], "1A1A2E")
|
|
|
|
# Rows
|
|
for en_name, kr_desc in services:
|
|
row = table.add_row().cells
|
|
# English service name
|
|
p0 = row[0].paragraphs[0]
|
|
run0 = p0.add_run(en_name)
|
|
run0.font.size = Pt(9)
|
|
run0.font.bold = True
|
|
run0.font.color.rgb = BRAND_DARK
|
|
run0.font.name = "Arial"
|
|
# Korean description
|
|
p1 = row[1].paragraphs[0]
|
|
run1 = p1.add_run(kr_desc)
|
|
run1.font.size = Pt(9)
|
|
run1.font.color.rgb = BRAND_GRAY
|
|
run1.font.name = "Malgun Gothic"
|
|
|
|
doc.add_paragraph() # spacer
|
|
|
|
|
|
def build_credential():
|
|
doc = Document()
|
|
|
|
# ── Page setup ──
|
|
section = doc.sections[0]
|
|
section.page_width = Cm(21)
|
|
section.page_height = Cm(29.7)
|
|
section.top_margin = Cm(2.5)
|
|
section.bottom_margin = Cm(2.5)
|
|
section.left_margin = Cm(2.5)
|
|
section.right_margin = Cm(2.5)
|
|
|
|
# ── Default font ──
|
|
style = doc.styles["Normal"]
|
|
font = style.font
|
|
font.name = "Malgun Gothic"
|
|
font.size = Pt(10)
|
|
font.color.rgb = BRAND_PRIMARY
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# COVER PAGE
|
|
# ════════════════════════════════════════════════════
|
|
for _ in range(6):
|
|
doc.add_paragraph()
|
|
|
|
# Brand name
|
|
title = doc.add_paragraph()
|
|
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
run = title.add_run("D.intelligence")
|
|
run.font.size = Pt(36)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Arial"
|
|
|
|
# Slogan
|
|
slogan = doc.add_paragraph()
|
|
slogan.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
slogan.space_before = Pt(8)
|
|
run = slogan.add_run("Think Forward")
|
|
run.font.size = Pt(14)
|
|
run.font.color.rgb = BRAND_ACCENT
|
|
run.font.italic = True
|
|
run.font.name = "Arial"
|
|
|
|
# Tagline
|
|
tagline = doc.add_paragraph()
|
|
tagline.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
tagline.space_before = Pt(24)
|
|
run = tagline.add_run("Analysis, Treatment & Growth")
|
|
run.font.size = Pt(11)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
# Subtitle
|
|
subtitle = doc.add_paragraph()
|
|
subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
subtitle.space_before = Pt(8)
|
|
run = subtitle.add_run("Company Credential")
|
|
run.font.size = Pt(12)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
# Date
|
|
date_p = doc.add_paragraph()
|
|
date_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
date_p.space_before = Pt(36)
|
|
run = date_p.add_run("2026")
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
# ── Page break ──
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# ABOUT D.INTELLIGENCE
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "ABOUT D.INTELLIGENCE")
|
|
add_heading_bilingual(doc, "Brand Overview", "브랜드 소개")
|
|
|
|
add_body(
|
|
doc,
|
|
"D.intelligence는 디지털 마케팅과 데이터 분석의 경계를 허물고, "
|
|
"고객의 지속가능한 성장을 이끄는 Marketing Intelligence 파트너입니다.",
|
|
bold_phrases=["Marketing Intelligence 파트너"]
|
|
)
|
|
|
|
add_body(
|
|
doc,
|
|
"데이터 인텔리전스 기반의 마케팅 전략 진단 및 컨설팅 서비스를 제공하며, "
|
|
"\"SMART Marketing Intelligence\"라는 경험 차원(Experiential dimension) 아래 "
|
|
"데이터 분석, 진단, 처방, 성장 운영 서비스를 일관되게 제공합니다. "
|
|
"이를 통해 과학적 엄정성과 측정 가능한 성과를 핵심 브랜드 가치로 전달합니다.",
|
|
bold_phrases=["SMART Marketing Intelligence"]
|
|
)
|
|
|
|
# Mission & Vision
|
|
add_section_label(doc, "MISSION & VISION")
|
|
add_heading_bilingual(doc, "Mission")
|
|
add_body(
|
|
doc,
|
|
"데이터 기반 의사결정으로 기업의 지속가능한 성장을 실현하는 "
|
|
"Marketing Intelligence 파트너입니다."
|
|
)
|
|
|
|
add_heading_bilingual(doc, "Vision")
|
|
add_body(
|
|
doc,
|
|
"마케팅 과학과 데이터 리터러시의 전도사로서, "
|
|
"대기업 수준의 데이터·AI 역량을 중견기업과 스타트업에 "
|
|
"맞춤 실행력으로 전달합니다."
|
|
)
|
|
|
|
# Core Values
|
|
add_section_label(doc, "CORE VALUES")
|
|
|
|
kw_p = doc.add_paragraph()
|
|
kw_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
kw_p.space_before = Pt(16)
|
|
kw_p.space_after = Pt(16)
|
|
for i, kw in enumerate(["Science", "Practice", "Outcome", "Insights"]):
|
|
run = kw_p.add_run(kw)
|
|
run.font.size = Pt(18)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Arial"
|
|
if i < 3:
|
|
sep = kw_p.add_run(" · ")
|
|
sep.font.size = Pt(18)
|
|
sep.font.color.rgb = BRAND_ACCENT
|
|
sep.font.name = "Arial"
|
|
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# WHAT WE DO — Services
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "WHAT WE DO")
|
|
add_heading_bilingual(
|
|
doc,
|
|
"SMART Marketing Intelligence",
|
|
"Analysis · Treatment · Growth — 3-Phase / 4 Category / 17 Modules"
|
|
)
|
|
|
|
add_body(
|
|
doc,
|
|
"D.intelligence는 데이터 기반의 진단-처방-성장 프레임워크를 통해 "
|
|
"Data Intelligence, Measurement Design, Marketing Performance Optimization, "
|
|
"Brand Visibility Treatment를 일관되게 제공하며, "
|
|
"이를 통해 측정 가능한 성과를 함께 설계하는 Marketing Intelligence 파트너입니다.",
|
|
bold_phrases=["진단-처방-성장 프레임워크", "Marketing Intelligence 파트너"]
|
|
)
|
|
|
|
add_service_table(doc, [
|
|
(
|
|
"Analysis (진단) — A1~A6",
|
|
"비즈니스·브랜드, 고객·소비자, 데이터 분석, 디지털 마케팅, 퍼포먼스 마케팅, "
|
|
"운영·관리 영역의 6개 진단 모듈"
|
|
),
|
|
(
|
|
"Treatment (처방) — T1~T7",
|
|
"브랜드 스토리텔링, 고객 접점, 디지털 자산 통합, 콘텐츠 마케팅, 광고·전환 최적화, "
|
|
"Brand Visibility Treatment ⭐ Signature, 운영 시스템·자동화의 7개 처방 모듈"
|
|
),
|
|
(
|
|
"Growth (성장) — G1~G4",
|
|
"퍼포먼스 마케팅, 콘텐츠 마케팅 대행, 모니터링·이슈관리, 연간 계약·운영의 "
|
|
"4개 성장 모듈 (프로젝트 + 운영 계약 하이브리드)"
|
|
),
|
|
(
|
|
"1Day Clinic (부가 채널)",
|
|
"Analysis Phase 경량 진단 — 6-8시간 1일 진단으로 "
|
|
"Pain Point를 빠르게 식별하는 게이트웨이 서비스"
|
|
),
|
|
(
|
|
"Magazine D. (부가 채널)",
|
|
"데이터·마케팅·인사이트 매거진 — 진단 사례, 프레임워크 해설, "
|
|
"인사이트 시사평을 운영하는 브랜드 미디어"
|
|
),
|
|
(
|
|
"Newsletter (부가 채널)",
|
|
"정기 뉴스레터 — 핵심 수치와 실무 시사점을 큐레이션하여 "
|
|
"리드 너처링과 콘텐츠 유통을 담당"
|
|
),
|
|
])
|
|
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# OUR ROLE — Positioning
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "OUR ROLE")
|
|
add_heading_bilingual(doc, "Brand Character", "성과중심의 데이터 기반 마케팅 과학자")
|
|
|
|
roles = [
|
|
("Outcome-focused Marketing Scientist", "엄밀한 가설 검증, 측정 가능한 KPI, 재현 가능한 방법론으로 마케팅 성과를 설계하는 분석가형 전문가로서, 추측과 일반론 대신 데이터·실험·구조로 의사결정을 지원합니다."),
|
|
("Data-driven Decision Partner", "마케팅·데이터·IT 부서 간 언어 장벽을 해소하여, 각 부서의 요구를 데이터 관점에서 해석하고 비즈니스 의사결정에 직접 연결합니다."),
|
|
("Marketing Intelligence Architect", "Analysis-Treatment-Growth 3-Phase 프레임워크를 통해 진단으로 끝나지 않고 실행과 성장까지 연결하는 통합 운영 파트너 역할을 수행합니다."),
|
|
]
|
|
|
|
for en_title, kr_desc in roles:
|
|
h = doc.add_heading(level=3)
|
|
h.space_before = Pt(16)
|
|
h.space_after = Pt(4)
|
|
run = h.add_run(en_title)
|
|
run.font.size = Pt(12)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Arial"
|
|
add_body(doc, kr_desc)
|
|
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# DATA INTELLIGENCE WORKSHOP
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "DATA INTELLIGENCE WORKSHOP")
|
|
add_heading_bilingual(doc, "Training & Education", "교육 프로그램")
|
|
|
|
add_body(
|
|
doc,
|
|
"D.intelligence는 클라이언트 조직 내 데이터 활용 역량을 강화하는 워크숍 프로그램을 "
|
|
"T4 모듈(콘텐츠 마케팅·역량 트레이닝)의 일부로 운영합니다. "
|
|
"외부 상품화된 정규 코스(OurDigital Practice)와 구분되며, 본 워크숍은 "
|
|
"프로젝트 컨설팅과 연계된 맞춤형 형태로 제공됩니다."
|
|
)
|
|
|
|
programs = [
|
|
("Measurement Design Workshop", "GA4·GTM·BigQuery 환경에서 KPI 설계와 이벤트 구조화를 실습하는 워크숍으로, T3 디지털 자산 통합관리 모듈과 연계 운영됩니다."),
|
|
("Data Literacy Workshop", "조직 구성원의 데이터 해석·의사결정 역량을 강화하는 워크숍으로, 진단 결과를 클라이언트 팀이 자체적으로 활용할 수 있도록 지원합니다."),
|
|
]
|
|
|
|
for name, desc in programs:
|
|
h = doc.add_heading(level=3)
|
|
h.space_before = Pt(12)
|
|
h.space_after = Pt(4)
|
|
run = h.add_run(name)
|
|
run.font.size = Pt(11)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Malgun Gothic"
|
|
add_body(doc, desc)
|
|
|
|
# Approach
|
|
add_section_label(doc, "3 STEP APPROACH")
|
|
|
|
approach_p = doc.add_paragraph()
|
|
approach_p.space_before = Pt(8)
|
|
for i, (step_en, step_kr) in enumerate([
|
|
("Analysis", "현황 진단 및 데이터 분석"),
|
|
("Treatment", "맞춤형 솔루션 설계 및 적용"),
|
|
("Growth", "지속적 성과 관리 및 성장 지원"),
|
|
], 1):
|
|
run = approach_p.add_run(f" {i}. {step_en} ")
|
|
run.font.size = Pt(10)
|
|
run.font.bold = True
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.name = "Arial"
|
|
run = approach_p.add_run(f"— {step_kr}")
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Malgun Gothic"
|
|
if i < 3:
|
|
approach_p.add_run("\n")
|
|
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# WHY D.INTELLIGENCE — Differentiators
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "WHY D.INTELLIGENCE")
|
|
add_heading_bilingual(doc, "Core Differentiators", "핵심 차별화 요소")
|
|
|
|
differentiators = [
|
|
("데이터 기반 의사 결정 체계 수립",
|
|
"단편적인 보고서 제공을 넘어, 고객사의 비즈니스 목표에 부합하는 "
|
|
"핵심 성과 지표(KPI) 설정부터 성과 관리 체계 디자인까지, "
|
|
"데이터 기반 의사 결정의 전 과정을 체계적으로 지원합니다."),
|
|
("마케팅-데이터-IT 간 통합 커뮤니케이션",
|
|
"마케팅 부서의 전략적 요구와 데이터 부서의 기술적 역량, "
|
|
"IT 부서의 인프라 환경을 유기적으로 연결함으로써, "
|
|
"조직 내 데이터 활용의 효율성을 극대화합니다."),
|
|
("실무 중심의 교육 및 역량 강화",
|
|
"이론에 그치지 않는 실무 중심의 교육 커리큘럼을 통해, "
|
|
"마케팅 실무자가 데이터를 직접 분석하고 활용할 수 있는 역량을 구축합니다."),
|
|
("엔드투엔드(End-to-End) 서비스 제공",
|
|
"진단, 컨설팅, 대시보드 구축, 데이터 스토리텔링, 교육에 이르기까지, "
|
|
"마케팅 인텔리전스의 전 영역을 아우르는 통합 서비스를 제공합니다."),
|
|
]
|
|
|
|
for title, desc in differentiators:
|
|
h = doc.add_heading(level=3)
|
|
h.space_before = Pt(12)
|
|
h.space_after = Pt(4)
|
|
run = h.add_run(title)
|
|
run.font.size = Pt(11)
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.bold = True
|
|
run.font.name = "Malgun Gothic"
|
|
add_body(doc, desc)
|
|
|
|
doc.add_page_break()
|
|
|
|
# ════════════════════════════════════════════════════
|
|
# CONTACT — Inquiry
|
|
# ════════════════════════════════════════════════════
|
|
add_section_label(doc, "CONTACT")
|
|
add_heading_bilingual(doc, "상담문의", "Get in Touch")
|
|
|
|
add_body(
|
|
doc,
|
|
"D.intelligence의 서비스에 관심을 가져주셔서 감사합니다. "
|
|
"디지털 마케팅 성과 진단, 데이터 애널리틱스 컨설팅, 대시보드 구축, "
|
|
"데이터 리터러시 교육 등에 관한 문의 사항이나 기대 사항을 남겨주시면, "
|
|
"최선을 다해 구체적이고 명료한 검토의견을 드리도록 하겠습니다."
|
|
)
|
|
|
|
# Contact info — v1.3 정합 (canon/fact-sheet.md)
|
|
doc.add_paragraph()
|
|
contact_items = [
|
|
("Company", "주식회사 디인텔리전스 / D.intelligence Co., Ltd."),
|
|
("CEO", "임명재 (Andrew Yim), 대표이사"),
|
|
("Biz Reg No.", "458-88-01899"),
|
|
("Address", "경기도 성남시 수정구 창업로 43 판교글로벌비즈센터 업무동 1층 36호 (13449)"),
|
|
("Website", "dintelligence.co.kr"),
|
|
("Email", "info@dintelligence.co.kr"),
|
|
]
|
|
for label, value in contact_items:
|
|
p = doc.add_paragraph()
|
|
p.space_after = Pt(4)
|
|
run = p.add_run(f"{label}: ")
|
|
run.font.size = Pt(10)
|
|
run.font.bold = True
|
|
run.font.color.rgb = BRAND_DARK
|
|
run.font.name = "Arial"
|
|
run = p.add_run(value)
|
|
run.font.size = Pt(10)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
# Footer
|
|
doc.add_paragraph()
|
|
doc.add_paragraph()
|
|
footer_p = doc.add_paragraph()
|
|
footer_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
run = footer_p.add_run("D.intelligence")
|
|
run.font.size = Pt(9)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
copyright_p = doc.add_paragraph()
|
|
copyright_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
run = copyright_p.add_run("Copyright 2026 D.intelligence. All rights reserved.")
|
|
run.font.size = Pt(8)
|
|
run.font.color.rgb = BRAND_GRAY
|
|
run.font.name = "Arial"
|
|
|
|
# ── Save ──
|
|
doc.save(OUTPUT_PATH)
|
|
print(f"Credential saved: {OUTPUT_PATH}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
build_credential()
|