# ํ๊ตญ 5๊ฐ ์ง์์ฒด AI AX ๊ฑฐ๋ฒ๋์ค ํตํฉ ํ๋ ์์ํฌ
# ์ฐธ์กฐ: ์ฑ๊ฐํฌ๋ฅด IMDA + ๋ฏธ๊ตญ NAIRR ๊ฑฐ๋ฒ๋์ค ๋ชจ๋ธ
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from enum import Enum
import json
class RegionTier(Enum):
# ์ฌ์ ์ฌ๋ ฅ์ ๋ฐ๋ฅธ ์ฐจ๋ฑ ์ง์ ๋ถ๋ฅ
TIER_A = "A" # ๋๋์ (๋๊ตฌ·์ธ์ฐ): ์ ๋ถ60% ๋ฏผ๊ฐ40%
TIER_B = "B" # ์ค๊ฐ (๊ฒฝ๋จ): ์ ๋ถ65% ๋ฏผ๊ฐ35%
TIER_C = "C" # ์ทจ์ฝ (ํธ๋จ·์ ์ฃผ): ์ ๋ถ70% ๋ฏผ๊ฐ30%
SUPPORT_RATIO = {
RegionTier.TIER_A: (0.60, 0.40),
RegionTier.TIER_B: (0.65, 0.35),
RegionTier.TIER_C: (0.70, 0.30),
}
@dataclass
class RegionAXProgram:
name: str
region: str
tier: RegionTier
total_budget_krw: float # ๋จ์: ์ต์
industry_focus: List[str]
governance_members: List[str]
kpi_targets: Dict[str, float]
quarterly_reviews: List[Dict] = field(default_factory=list)
def gov_budget(self) -> float:
gov_ratio, _ = SUPPORT_RATIO[self.tier]
return self.total_budget_krw * gov_ratio
def private_budget(self) -> float:
_, priv_ratio = SUPPORT_RATIO[self.tier]
return self.total_budget_krw * priv_ratio
def add_quarterly_review(self, quarter: str, actuals: Dict[str, float]):
achievement = {}
for kpi, target in self.kpi_targets.items():
actual = actuals.get(kpi, 0)
achievement[kpi] = {
"target": target, "actual": actual,
"rate": round(actual / target * 100, 1)
}
self.quarterly_reviews.append({"quarter": quarter, "achievement": achievement})
# ─── 5๊ฐ ๊ฑฐ์ ํ๋ก๊ทธ๋จ ์ ์ ──────────────────
AX_PROGRAMS = [
RegionAXProgram(
name="ํธ๋จ๊ถ AI ๋์ ํ", region="ํธ๋จ", tier=RegionTier.TIER_C,
total_budget_krw=800,
industry_focus=["๋์
", "๋ฐ์ด์ค", "์ํ"],
governance_members=["์ ๋จ๋", "์ ๋ถ๋", "์ ๋จ๋", "GS์นผํ
์ค"],
kpi_targets={"์ค์๊ธฐ์
๋์
์": 200, "์ผ์๋ฆฌ์ฐฝ์ถ": 500, "๋ถ๋๋ฅ ๊ฐ์์จ": 20.0}
),
RegionAXProgram(
name="๋๊ฒฝ๊ถ AI ๋์ ํ", region="๋๊ฒฝ", tier=RegionTier.TIER_A,
total_budget_krw=750,
industry_focus=["์ฌ์ ", "์ ์", "์๋ฃ๊ธฐ๊ธฐ"],
governance_members=["๋๊ตฌ์", "๊ฒฝ๋ถ๋", "DGIST", "์ผ์ฑSDI"],
kpi_targets={"์ค์๊ธฐ์
๋์
์": 250, "์ผ์๋ฆฌ์ฐฝ์ถ": 600, "์์ฐ์ฑํฅ์์จ": 18.0}
),
RegionAXProgram(
name="๋๋จ๊ถ AI ๋์ ํ", region="๋๋จ", tier=RegionTier.TIER_B,
total_budget_krw=900,
industry_focus=["์๋์ฐจ", "์กฐ์ ", "์์ ํํ"],
governance_members=["์ธ์ฐ์", "๊ฒฝ๋จ๋", "UNIST", "ํ๋์ฐจ"],
kpi_targets={"์ค์๊ธฐ์
๋์
์": 300, "์ผ์๋ฆฌ์ฐฝ์ถ": 700, "์๋์ง์ ๊ฐ์จ": 25.0}
),
]
def generate_governance_report(programs: List[RegionAXProgram]) -> str:
total_budget = sum(p.total_budget_krw for p in programs)
report = {
"์ด์์ฐ_์ต์": total_budget,
"์ง์ญ๋ณํํฉ": [
{"์ง์ญ": p.name, "์ ๋ถ์ง์": p.gov_budget(), "๋ฏผ๊ฐ๋ถ๋ด": p.private_budget()}
for p in programs
]
}
return json.dumps(report, ensure_ascii=False, indent=2)
print(generate_governance_report(AX_PROGRAMS))