Making Tax Digital คืออะไรและทำไมคุณต้องรู้
Making Tax Digital (MTD) คือโครงการของรัฐบาลอังกฤษที่บังคับให้คนเสียภาษีต้องเปลี่ยนจากการจดบันทึกด้วยกระดาษ มาใช้ซอฟต์แวร์ในการทำบัญชีแทน คุณลองนึกภาพว่าแทนที่จะต้องมานั่งรวบรวมใบเสร็จกองโตตอนสิ้นปีเพื่อกรอกแบบฟอร์มยาวๆ MTD จะให้เราส่งข้อมูลรายได้และค่าใช้จ่ายเข้าสู่ระบบภาษีเป็นระยะผ่านทางอินเทอร์เน็ตโดยตรง
สำหรับนักพัฒนาซอฟต์แวร์อย่างเรา สิ่งนี้คือโอกาสครับ เพราะธุรกิจขนาดเล็กและคนทำอาชีพอิสระจำนวนมากกำลังมองหาเครื่องมือช่วยจัดการเรื่องนี้ กฎหมายกำหนดให้ผู้มีรายได้ถึงเกณฑ์ต้องใช้ซอฟต์แวร์ที่คุยกับระบบของ HMRC (หน่วยงานดูแลภาษีของอังกฤษ) ได้โดยตรง ซึ่งเกณฑ์รายได้นี้จะค่อยๆ ลดลงจนครอบคลุมคนจำนวนมหาศาลในอนาคต
การคุยกับ HMRC ไม่ใช่การกดปุ่มส่งข้อมูลแบบธรรมดา แต่มันคือการใช้ API (ช่องทางที่ให้ซอฟต์แวร์สองตัวคุยกันได้) เพื่อส่งตัวเลขผ่านโปรโตคอลความปลอดภัยที่เข้มงวด หากคุณอยากเป็นโปรแกรมเมอร์ที่เขียนซอฟต์แวร์ระดับองค์กร การเข้าใจระบบนี้จะทำให้คุณดูเป็นมืออาชีพและเข้าใจมาตรฐานการเชื่อมต่อข้อมูลที่มีความปลอดภัยสูง
ขั้นที่ 1: สร้างแอปพลิเคชันในโหมดทดสอบ
ก่อนจะไปคุยกับข้อมูลภาษีจริง เราต้องมีพื้นที่ปลอดภัยสำหรับลองผิดลองถูกก่อน HMRC มีสิ่งที่เรียกว่า Sandbox (สภาพแวดล้อมจำลองที่เหมือนของจริงทุกอย่างแต่ใช้ข้อมูลปลอม) ไว้ให้เราใช้งาน คุณต้องสมัครสมาชิกที่ HMRC Developer Hub (ศูนย์รวมคู่มือและเครื่องมือสำหรับนักพัฒนาของรัฐ) เพื่อสร้างแอปพลิเคชันของคุณเอง
เมื่อสร้างแอปเสร็จ คุณจะได้ Client ID และ Client Secret มา สองตัวนี้เปรียบเหมือนกุญแจเข้าบ้าน ห้ามทำหายและห้ามเอาไปโพสต์ลงในที่สาธารณะเด็ดขาด ให้เก็บไว้ใน Environment Variable (ตัวแปรเก็บค่าตั้งค่าที่แยกออกจากโค้ดหลักเพื่อความปลอดภัย) เสมอเพื่อป้องกันไม่ให้คนอื่นขโมยกุญแจเราไปใช้
จุดที่มือใหม่พลาดบ่อยคือการลืม Subscribe (การกดสมัครเพื่อขอสิทธิ์ใช้งาน API แต่ละตัว) ครับ แม้คุณจะมีแอปแล้ว แต่คุณต้องเข้าไปกดเลือก API ที่ต้องการใช้ในหน้าเว็บด้วย ถ้าไม่ทำแบบนี้ เวลาคุณยิงคำสั่งไปหา HMRC มันจะตอบกลับมาว่า 403 Forbidden ซึ่งหมายความว่าคุณไม่มีสิทธิ์เข้าถึงนั่นเอง
// ตัวอย่างการตั้งค่า Base URL ในโปรเจกต์
const config = {
sandbox: {
baseUrl: 'https://test-api.service.hmrc.gov.uk', // URL สำหรับทดสอบ
},
production: {
baseUrl: 'https://api.service.hmrc.gov.uk', // URL สำหรับใช้งานจริง
},
};
// แนะนำให้เลือกใช้ผ่านตัวแปรสภาพแวดล้อมแทนการ Hard-code
const currentEnv = process.env.HMRC_BASE_URL || config.sandbox.baseUrl;
โค้ดชุดนี้เป็นการกำหนดเส้นทาง (URL) ที่เราจะส่งข้อมูลไป บรรทัดที่ 2 คือที่อยู่ของระบบจำลอง ส่วนบรรทัดที่ 5 คือที่อยู่ของระบบจริง การเก็บไว้ในตัวแปรแบบนี้ช่วยให้เราสลับโหมดได้ง่ายโดยไม่ต้องไปแก้โค้ดข้างใน ผลลัพธ์ที่ควรเห็นคือโปรแกรมของคุณจะชี้ไปยัง test-api ทำให้คุณทดสอบได้โดยไม่มีผลกระทบต่อภาษีจริง
ขั้นที่ 2: ทำความเข้าใจ OAuth Scopes
OAuth Scopes (ขอบเขตการขออนุญาตเข้าถึงข้อมูล) คือตัวกำหนดว่าแอปของเราขอทำอะไรได้บ้าง เหมือนเวลาคุณติดตั้งแอปในมือถือแล้วมันขอสิทธิ์เข้าถึงรูปภาพหรือที่ตั้งนั่นเอง ในโลกของภาษี เราต้องระบุให้ชัดเจนว่าเราต้องการแค่ "อ่าน" หรือต้องการ "เขียน" ข้อมูลด้วย
สำหรับ MTD เรามักจะใช้ read:self-assessment และ write:self-assessment การระบุขอบเขตให้ถูกต้องเป็นเรื่องสำคัญมาก เพราะ HMRC จะแสดงรายการเหล่านี้ให้ผู้ใช้งานเห็นบนหน้าจอตอนล็อกอิน หากคุณขอสิทธิ์เกินความจำเป็น ผู้ใช้จะไม่ไว้ใจและไม่กดอนุญาตให้แอปของคุณเข้าถึงข้อมูล
จำไว้ว่า OAuth (มาตรฐานการยืนยันตัวตนที่ปลอดภัยโดยไม่ต้องส่งรหัสผ่านให้แอปอื่น) ออกแบบมาเพื่อให้ผู้ใช้ปลอดภัยที่สุด แอปของคุณจะไม่มีทางได้เห็นรหัสผ่านของผู้ใช้เลย คุณจะได้เพียงแค่ Access Token (รหัสผ่านชั่วคราวที่ใช้เข้าถึง API ได้) มาใช้ในการทำงานแทนเท่านั้น ซึ่งเป็นหัวใจสำคัญของการเขียนซอฟต์แวร์ยุคใหม่
ขั้นที่ 3: กระบวนการยืนยันตัวตนแบบ OAuth 2.0
กระบวนการนี้เปรียบเหมือนการเต้นรำ 3 จังหวะ จังหวะแรกคือส่งผู้ใช้ไปที่หน้าเว็บของ HMRC เพื่อล็อกอิน จังหวะที่สองคือ HMRC ส่งผู้ใช้กลับมาพร้อมกับ Code (รหัสชั่วคราวที่ใช้แลก Token) และจังหวะสุดท้ายคือเราเอา Code นั้นไปแลกกับ Token จริงเพื่อเริ่มใช้งาน
สิ่งที่คุณต้องระวังคือค่า state ครับ มันคือตัวเลขสุ่มที่คุณสร้างขึ้นเองเพื่อป้องกันการปลอมแปลง หากมีคนพยายามแอบอ้างสิทธิ์ระหว่างทาง ค่า state ที่คุณเก็บไว้จะไม่ตรงกับที่ส่งกลับมา ทำให้คุณรู้ทันทีว่ามีการบุกรุกและสั่งยกเลิกคำขอนั้นได้ทันที นี่คือวิธีป้องกัน CSRF (การโจมตีที่หลอกให้ผู้ใช้ทำรายการโดยไม่ตั้งใจ) ที่โปรแกรมเมอร์ต้องทำเป็น
เมื่อผู้ใช้ล็อกอินสำเร็จ HMRC จะส่งข้อมูลกลับมาที่ URL ที่คุณตั้งไว้ (Redirect URI) คุณต้องรีบดึง Code ออกมาแล้วส่งไปแลก Token ทันทีผ่านทางหลังบ้าน (Server-side) ห้ามทำขั้นตอนนี้บน Browser ของผู้ใช้เด็ดขาด เพราะ Client Secret ของคุณจะหลุดออกไปทันที
// ตัวอย่างการส่งผู้ใช้ไปล็อกอิน
function getAuthorizationUrl(state) {
const params = new URLSearchParams({
response_type: 'code',
client_id: 'YOUR_CLIENT_ID',
scope: 'read:self-assessment write:self-assessment',
state: state, // ใช้ป้องกันการปลอมแปลง
redirect_uri: 'http://localhost:3000/callback',
});
return 'https://test-api.service.hmrc.gov.uk/oauth/authorize?' + params.toString();
}
โค้ดนี้สร้างลิงก์สำหรับส่งผู้ใช้ไปหน้าล็อกอิน บรรทัดที่ 3 ระบุประเภทการขอคือ code บรรทัดที่ 5 คือขอบเขตสิทธิ์ และบรรทัดที่ 7 คือที่อยู่ที่ต้องส่งกลับมา ผลลัพธ์คือคุณจะได้ URL ยาวๆ ที่เมื่อนำไปเปิดในเบราว์เซอร์ จะพาผู้ใช้ไปยังหน้าล็อกอินของรัฐบาลอังกฤษอย่างถูกต้อง
ขั้นที่ 4: Fraud Prevention Headers ที่ไม่มีใครบอกคุณ
นี่คือจุดที่หลายคนตกม้าตาย เพราะ HMRC บังคับให้เราส่ง Fraud Prevention Headers (ข้อมูลเบื้องหลังเพื่อป้องกันการโกง) ไปพร้อมกับทุกคำสั่ง API ข้อมูลนี้ประกอบด้วยรายละเอียดของอุปกรณ์ที่ผู้ใช้กำลังใช้ เช่น IP Address หรือข้อมูล Browser เพื่อยืนยันว่าคนที่ส่งข้อมูลมาเป็นคนจริงๆ ไม่ใช่บอทที่พยายามแฮกข้อมูล
หากคุณลืมส่งหัวข้อเหล่านี้ หรือส่งข้อมูลไม่ครบ API จะตีกลับทันที HMRC มีคู่มือเฉพาะสำหรับเรื่องนี้โดยตรง คุณต้องอ่านให้ละเอียดเพราะมันเป็นข้อบังคับทางเทคนิคที่ไม่สามารถเลี่ยงได้ ถ้าคุณเขียนโปรแกรมด้วย Node.js ให้ใช้ไลบรารีที่ช่วยดึงข้อมูลเหล่านี้มาใส่ใน Header ของคำสั่ง fetch หรือ axios
การเข้าใจเรื่องนี้จะช่วยให้คุณเก่งขึ้น เพราะมันสอนให้คุณรู้ว่าการคุยกับระบบการเงินระดับประเทศนั้นมีเงื่อนไขที่ละเอียดอ่อนกว่าการทำแอปทั่วไปมาก อย่ามองว่ามันเป็นเรื่องน่ารำคาญ แต่มองว่ามันคือด่านทดสอบความละเอียดรอบคอบของคุณในฐานะโปรแกรมเมอร์
ขั้นที่ 5: การใช้งานจริงและสรุปปิดท้าย
เมื่อคุณได้ Token มาแล้ว และแนบ Fraud Prevention Headers ครบถ้วนแล้ว การคุยกับ HMRC ก็กลายเป็นการส่ง JSON (รูปแบบข้อมูลที่นิยมใช้ส่งผ่านเว็บ) ธรรมดาๆ เหมือน API ทั่วไป คุณสามารถเริ่มดึงข้อมูลภาษี หรือส่งยอดรายได้รายไตรมาสได้ตามเอกสารที่ระบุไว้ใน Developer Hub ได้เลย
ตัวอย่างการนำไปใช้จริง: หากคุณกำลังสร้างแอปช่วยทำบัญชีให้ร้านกาแฟเล็กๆ ขั้นตอนแรกสุดที่คุณต้องเขียนคือการสร้างระบบเชื่อมต่อนี้ เมื่อร้านกาแฟล็อกอินผ่านระบบคุณแล้ว แอปของคุณจะไปดึง "ภาระภาษี" (Obligations) มาแสดงให้เจ้าของร้านเห็นว่าต้องจ่ายเท่าไหร่และเมื่อไหร่ จากนั้นคุณก็สร้างฟังก์ชันให้เขากดส่งยอดรายได้ได้จากในแอปคุณเลย
การเป็นโปรแกรมเมอร์ที่เชื่อมต่อกับระบบจริงแบบนี้ได้ คือทักษะที่ตลาดงานต้องการมากที่สุด อย่าเพิ่งท้อถ้าติดบั๊กตั้งแต่ขั้นแรกๆ เพราะการอ่าน Error และทำความเข้าใจเอกสารเทคนิคคือหัวใจสำคัญของการทำงานสายนี้ ขอให้สนุกกับการเขียนโค้ดและช่วยให้คนทำธุรกิจจัดการภาษีได้ง่ายขึ้นครับ
ที่มา: How to Connect to HMRC's Making Tax Digital API: A Beginner's Guide — freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More