import { useState } from “react”;
import {
BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend,
PieChart, Pie, Cell, ResponsiveContainer, RadarChart, Radar,
PolarGrid, PolarAngleAxis, PolarRadiusAxis, Treemap
} from “recharts”;

const COLORS = [“#C0392B”,”#E74C3C”,”#E67E22″,”#F39C12″,”#27AE60″,”#1ABC9C”,”#2980B9″,”#3498DB”,”#8E44AD”,”#9B59B6″,”#2C3E50″,”#7F8C8D”];

const rawData = [
{ name: “ส่งเสริมนโยบายรัฐบาล”, short: “นโยบายรัฐ”, original: 527280400, extra: 1116405304.07, total: 1643685704.07 },
{ name: “เจ้าภาพจัดการแข่งขันนานาชาติ”, short: “เจ้าภาพ”, original: 314056160, extra: 2000000, total: 316056160 },
{ name: “จัดการแข่งขันกีฬาอาชีพ”, short: “กีฬาอาชีพ”, original: 200000000, extra: 23989196, total: 223989196 },
{ name: “กำกับดูแลกีฬามวยไทย”, short: “มวยไทย”, original: 130000000, extra: 54920600, total: 184920600 },
{ name: “สร้างกระแสการแข่งขันกีฬา”, short: “สร้างกระแส”, original: 40000000, extra: 210000000, total: 250000000 },
{ name: “พัฒนานักกีฬาสู่ความเป็นเลิศ”, short: “นักกีฬาเลิศ”, original: 1028606008, extra: 7623937.32, total: 1036229945.32 },
{ name: “นำวิทยาศาสตร์การกีฬา”, short: “วิทย์กีฬา”, original: 161914919.85, extra: 1880250, total: 163795169.85 },
{ name: “ทุนการศึกษา”, short: “ทุนศึกษา”, original: 80000000, extra: 25497913.25, total: 105497913.25 },
{ name: “ระบบจัดสวัสดิการ”, short: “สวัสดิการ”, original: 30000000, extra: 0, total: 30000000 },
{ name: “สนับสนุนเงินรางวัล”, short: “เงินรางวัล”, original: 612802500, extra: 0, total: 612802500 },
{ name: “พัฒนาบุคลากรกีฬา”, short: “บุคลากร”, original: 57000000, extra: 958918.91, total: 57958918.91 },
{ name: “การบริหาร”, short: “บริหาร”, original: 164500000, extra: 30427414.68, total: 194927414.68 },
];

const grandTotal = 4819863522.08;
const originalTotal = 3346159987.85;
const extraTotal = 1473703534.23;

const fmt = (v) => {
if (v >= 1e9) return `${(v / 1e9).toFixed(2)}B`;
if (v >= 1e6) return `${(v / 1e6).toFixed(1)}M`;
return `${(v / 1e3).toFixed(0)}K`;
};

const fmtFull = (v) =>
v.toLocaleString(“th-TH”, { minimumFractionDigits: 2, maximumFractionDigits: 2 });

const overrunPct = (d) =>
d.original > 0 ? ((d.extra / d.original) * 100).toFixed(1) : “∞”;

const riskData = rawData.map((d) => ({
…d,
pct: ((d.total / grandTotal) * 100).toFixed(2),
overrun: parseFloat(overrunPct(d)),
riskLevel:
d.extra / d.original > 2 ? “สูงมาก” :
d.extra / d.original > 0.5 ? “สูง” :
d.extra / d.original > 0.1 ? “ปานกลาง” : “ต่ำ”,
riskColor:
d.extra / d.original > 2 ? “#C0392B” :
d.extra / d.original > 0.5 ? “#E67E22” :
d.extra / d.original > 0.1 ? “#F39C12” : “#27AE60”,
}));

const radarData = [
{ subject: “นโยบายรัฐ”, value: 34 },
{ subject: “นักกีฬาเลิศ”, value: 21 },
{ subject: “เงินรางวัล”, value: 13 },
{ subject: “เจ้าภาพ”, value: 7 },
{ subject: “สร้างกระแส”, value: 5 },
{ subject: “กีฬาอาชีพ”, value: 5 },
];

const CustomTooltip = ({ active, payload, label }) => {
if (!active || !payload?.length) return null;
return (

{label}

{payload.map((p, i) => (

{p.name}: ฿{fmt(p.value)}

))}

);
};

const PieTooltip = ({ active, payload }) => {
if (!active || !payload?.length) return null;
const d = payload[0];
return (

{d.name}

฿{fmt(d.value)}

{((d.value / grandTotal) * 100).toFixed(1)}%

);
};

const MetricCard = ({ label, value, sub, accent, icon }) => (

{icon}
{label}
{value}

{sub &&

{sub}

}

);

const RiskBadge = ({ level, color }) => (
{level}
);

const TABS = [“ภาพรวม”, “การกระจายงบ”, “ความเสี่ยง”, “บทวิเคราะห์”];

export default function App() {
const [tab, setTab] = useState(0);

const pieData = rawData.map((d, i) => ({ name: d.short, value: d.total, fill: COLORS[i] }));

return (

{/* HEADER */}

{/* METRICS ROW */}

{/* TABS */}

{TABS.map((t, i) => (

))}

{/* TAB 0 – OVERVIEW */}
{tab === 0 && (

{/* Bar Chart */}

📊 งบประมาณรายกิจกรรม (ตั้งต้น vs เพิ่มเติม)

} />

{/* Pie */}

🥧 สัดส่วนงบประมาณรวมแต่ละกิจกรรม

{pieData.map((entry, i) => (

))}
} />

{rawData.map((d, i) => (

{d.short}

))}

{/* Budget overrun highlight */}

⚠️ กิจกรรมที่มีการปรับงบสูงสุด (% ของงบตั้งต้น)

{riskData
.filter(d => d.extra > 0)
.sort((a, b) => b.overrun – a.overrun)
.slice(0, 5)
.map((d, i) => (

{d.name}

+{d.overrun}%

))}

)}

{/* TAB 1 – DISTRIBUTION */}
{tab === 1 && (

🎯 การจัดสรรตามกลุ่มยุทธศาสตร์

 

📐 สัดส่วนงบตั้งต้น vs เพิ่มเติม

{[
{ label: “งบตั้งต้น”, value: originalTotal, pct: 69.4, color: “#2980B9” },
{ label: “งบเพิ่มเติม”, value: extraTotal, pct: 30.6, color: “#E74C3C” }
].map((item, i) => (

{item.label}
{item.pct}%

))}

⚠️ งบเพิ่มเติมสูงถึง 44% ของงบตั้งต้น

สะท้อนการวางแผนที่อาจต้องปรับปรุง

{/* Table */}

📋 ตารางงบประมาณครบถ้วน

{[“กิจกรรม”, “งบตั้งต้น (บาท)”, “งบเพิ่มเติม (บาท)”, “รวมทั้งสิ้น (บาท)”, “% รวม”, “ความเสี่ยง”].map((h, i) => ())}
{riskData.map((d, i) => ())}

{h}
{d.name} {fmtFull(d.original)} 0 ? “#E67E22” : “#475569”, fontFamily: “monospace” }}>
{d.extra > 0 ? fmtFull(d.extra) : “-“}
{fmtFull(d.total)} {d.pct}%
Grand Total {fmtFull(originalTotal)} {fmtFull(extraTotal)} {fmtFull(grandTotal)} 100%

)}

{/* TAB 2 – RISK */}
{tab === 2 && (

{[
{ level: “สูงมาก”, color: “#C0392B”, icon: “🔴”, desc: “งบเพิ่มเติม > 200% ของงบตั้งต้น”, items: riskData.filter(d => d.overrun > 200) },
{ level: “สูง”, color: “#E67E22”, icon: “🟠”, desc: “งบเพิ่มเติม 50-200% ของงบตั้งต้น”, items: riskData.filter(d => d.overrun > 50 && d.overrun <= 200) }, { level: “ปานกลาง”, color: “#F39C12”, icon: “🟡”, desc: “งบเพิ่มเติม 10-50% ของงบตั้งต้น”, items: riskData.filter(d => d.overrun > 10 && d.overrun <= 50) }, { level: “ต่ำ”, color: “#27AE60”, icon: “🟢”, desc: “งบเพิ่มเติมน้อยกว่า 10%”, items: riskData.filter(d => d.overrun <= 10) }, ].map((r, i) => (

{r.icon}
ความเสี่ยง{r.level}
{r.items.length} รายการ

{r.desc}

{r.items.map((item, j) => (

{item.short}
เพิ่มเติม {item.overrun > 0 ? `+${item.overrun}%` : “0%”} · ฿{fmt(item.extra)}

))}

))}

🚨 ประเด็นความเสี่ยงสำคัญ

{[
{
title: “การสร้างกระแสการแข่งขันกีฬา: งบเพิ่ม +525%”,
desc: “งบตั้งต้นเพียง 40M บาท แต่ได้รับงบเพิ่มเติมสูงถึง 210M บาท แสดงถึงการประเมินค่าใช้จ่ายต่ำเกินไปอย่างมีนัยสำคัญ หรืออาจมีการเปลี่ยนแปลงขอบเขตงานกลางปี”,
color: “#C0392B”
},
{
title: “ส่งเสริมนโยบายรัฐบาล: งบเพิ่ม +211.8% (1.1B บาท)”,
desc: “เป็นกิจกรรมที่มีงบเพิ่มเติมสูงที่สุดในเชิงมูลค่า การอนุมัติงบเพิ่มกว่า 1 พันล้านบาทโดยไม่มีรายละเอียดชัดเจน อาจส่งสัญญาณความเสี่ยงด้านความโปร่งใส”,
color: “#C0392B”
},
{
title: “กำกับดูแลมวยไทย: งบเพิ่ม +42.2%”,
desc: “อาจสะท้อนปัญหาการบังคับใช้กฎหมายที่ซับซ้อนกว่าที่วางแผนไว้ ต้องติดตามผลลัพธ์ในการกำกับดูแล”,
color: “#E67E22”
},
{
title: “สนับสนุนเงินรางวัล: 612M บาท ไม่มีงบเพิ่มเติม”,
desc: “แม้ไม่มีงบเพิ่มเติม แต่ขนาดงบสูงเป็นอันดับ 3 การจ่ายเงินรางวัลควรมีเกณฑ์และ KPI ชัดเจน เพื่อป้องกันการใช้งบประมาณโดยไม่สร้างผลลัพธ์ที่วัดได้”,
color: “#F39C12”
}
].map((item, i) => (

{item.title}
{item.desc}

))}

)}

{/* TAB 3 – ANALYSIS */}
{tab === 3 && (

{[
{
icon: “🔍”, title: “บทสรุปผู้บริหาร (Executive Summary)”, color: “#3498DB”,
content: `กองทุนพัฒนาการกีฬาแห่งชาติมีงบประมาณรวมทั้งสิ้น 4,819,863,522 บาท สำหรับปีงบประมาณ 2569 โดยมีการเบิกจ่ายใน 12 กิจกรรมหลัก น่าสังเกตว่างบเพิ่มเติมสูงถึง 1,473 ล้านบาท หรือ 44% ของงบตั้งต้น ซึ่งสูงมากเมื่อเทียบกับมาตรฐานการบริหารงบประมาณภาครัฐทั่วไปที่ควรอยู่ในระดับไม่เกิน 10-15%`
},
{
icon: “🎯”, title: “การจัดลำดับความสำคัญ”, color: “#27AE60”,
content: `งบประมาณกระจุกตัวใน 3 กิจกรรมหลักคิดเป็น 68.6% ของงบรวม ได้แก่ (1) ส่งเสริมนโยบายรัฐบาล 34.1%, (2) พัฒนานักกีฬาสู่ความเป็นเลิศ 21.5%, และ (3) สนับสนุนเงินรางวัล 12.7% สะท้อนแนวทางที่เน้นความเป็นเลิศและนโยบายระดับชาติ แต่อาจขาดสมดุลในด้านการพัฒนาฐานราก เนื่องจากงบทุนการศึกษาและสวัสดิการมีสัดส่วนต่ำเพียง 2.8%`
},
{
icon: “⚠️”, title: “ความเสี่ยงด้านการบริหารงบประมาณ”, color: “#E67E22”,
content: `มีความเสี่ยง 4 ประการหลัก: (1) ความเสี่ยงด้านการวางแผน – งบ 4 รายการมีงบเพิ่มเติมสูงกว่า 40% แสดงถึงการประมาณการที่ขาดความแม่นยำ (2) ความเสี่ยงด้านความโปร่งใส – งบ “ส่งเสริมนโยบายรัฐบาล” มีการปรับเพิ่มมากกว่า 1,116 ล้านบาทโดยไม่ระบุรายละเอียด (3) ความเสี่ยงด้านการกำกับดูแล – กิจกรรมมวยไทยที่ต้องการงบเพิ่ม 42% อาจสะท้อนความท้าทายเชิงโครงสร้าง (4) ความเสี่ยงด้านผลลัพธ์ – งบเงินรางวัล 612 ล้านควรเชื่อมโยงกับ KPI ที่วัดได้ชัดเจน`
},
{
icon: “💡”, title: “ข้อเสนอแนะเชิงนโยบาย”, color: “#9B59B6”,
content: `(1) นำระบบ Zero-Based Budgeting มาใช้ เพื่อตรวจสอบความจำเป็นของทุกรายการก่อนตั้งงบ (2) กำหนด KPI และตัวชี้วัดผลสำเร็จให้ชัดเจนในทุกกิจกรรม โดยเฉพาะกิจกรรมที่ใช้งบสูง (3) สร้างระบบ Early Warning ที่แจ้งเตือนเมื่องบเพิ่มเติมเกิน 20% เพื่อให้คณะกรรมการ review ก่อนอนุมัติ (4) ปรับสมดุลงบประมาณโดยเพิ่มสัดส่วนด้านการพัฒนาฐานราก เช่น ทุนการศึกษา บุคลากร และสวัสดิการ (5) เพิ่มความโปร่งใสในการรายงานผลการดำเนินงานรายไตรมาสต่อสาธารณะ`
},
{
icon: “📌”, title: “จุดแข็งของการบริหาร”, color: “#1ABC9C”,
content: `(1) การจัดสรรงบด้านพัฒนานักกีฬาสู่ความเป็นเลิศ (1,036M) สะท้อนความมุ่งมั่นสู่เวทีนานาชาติ (2) การลงทุนด้านวิทยาศาสตร์การกีฬา (163M) แสดงถึงการใช้นวัตกรรมในการพัฒนาประสิทธิภาพ (3) งบ 5 รายการไม่มีงบเพิ่มเติมหรือมีน้อยมาก แสดงว่าบางกิจกรรมมีการวางแผนที่ดี (4) การครอบคลุม 12 กิจกรรมใน 4 มิติหลัก ตั้งแต่ฐานรากถึงความเป็นเลิศ`
}
].map((section, i) => (

{section.icon}

{section.title}

{section.content}

))}

⚡ สรุปคำแนะนำเร่งด่วน: งบเพิ่มเติม 44% ถือเป็นสัญญาณเตือนที่ไม่ควรมองข้าม
แนะนำให้คณะกรรมการทบทวนกระบวนการตั้งงบและระบบกำกับดูแลภายในโดยด่วน

)}

กองทุนพัฒนาการกีฬาแห่งชาติ · วิเคราะห์โดย Financial & Policy Analytics · ข้อมูล ณ 27 มกราคม 2569

);
}

Share:

Related Post

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *