แผนภาพการพึ่งพากันของการคำนวณเงินเดือนในแคนาดา
(daemonology.net)- หากต้องการคำนวณรายการหักเงินเดือนด้วยตนเองในแคนาดาโดยไม่ใช้บริการเงินเดือนภายนอก จำเป็นต้องนำสูตร CPP, EI และภาษีเงินได้จาก Payroll Deductions Formulas ของ CRA ไปใช้งาน
- ในปี 2024 มีการเพิ่ม second additional premiums เข้าไปใน Canada Pension Plan นอกเหนือจากเบี้ยประกันพื้นฐานและส่วนเพิ่มเดิม ทำให้ต้องเขียนสเปรดชีตเดิมใหม่ทั้งหมดตั้งแต่ต้น
- เอกสารของ CRA กระจายทั้งตำแหน่งที่คำนวณค่าและตำแหน่งที่นำค่าไปใช้ไว้คนละส่วน จึงได้สร้าง แผนภาพการพึ่งพากันด้วย GraphViz เพื่อดูว่าต้องคำนวณอะไรบ้างก่อน
- แผนภาพประกอบด้วย 79 โหนด ตั้งแต่ค่าป้อนเข้าอย่าง “Year's Annual Maximum Pensionable Earnings” $73,200 ในปี 2024 ไปจนถึง “Total payroll deductions”
- แผนภาพบันทึกเฉพาะความสัมพันธ์การพึ่งพากันระหว่างค่าต่าง ๆ โดยไม่รวมตัวสูตร และตัดกรณีพนักงานค่าคอม ผู้เข้าร่วมหรือถอนตัวจาก CPP และผู้พำนักใน Quebec, Nova Scotia, Yukon, Ontario ออกจากขอบเขต
ความซับซ้อนของการคำนวณรายการหักเงินเดือนจาก CRA ด้วยตนเอง
- Canada Revenue Agency เผยแพร่เอกสาร Payroll Deductions Formulas สำหรับการคำนวณรายการหักเงินเดือนเป็นประจำ และปัจจุบันออกมาถึงฉบับที่ 119 แล้ว
- เอกสารนี้รวบรวมสูตรที่จำเป็นสำหรับการคำนวณรายการหักเงินเดือนที่ CRA จัดเก็บ
- Canada Pension Plan
- Employment Insurance
- Income Tax
- หากทำธุรกิจขนาดเล็กในแคนาดาและไม่ต้องการใช้ผู้ให้บริการเงินเดือนภายนอก ก็ต้อง นำสูตรเหล่านี้ไปทำในสเปรดชีตเอง
- เช่นเดียวกับส่วนอื่น ๆ ของระบบภาษี การคำนวณรายการหักเงินเดือนก็ซับซ้อนขึ้นเรื่อย ๆ และในปี 2024 มีการเพิ่ม second additional premiums เข้าไปใน CPP จนจำเป็นต้องเขียนสเปรดชีตใหม่
ลำดับการคำนวณที่จัดระเบียบด้วย GraphViz
- เอกสารของ CRA ทำให้ติดตามได้ยากว่าแต่ละค่าควรถูกคำนวณก่อนหลังอย่างไร
- ค่าที่จำเป็นอาจถูกคำนวณก่อนหรือหลังจุดที่นำไปใช้ ทำให้ต้องเปิดย้อนเอกสารไปมาอยู่ตลอด
- เพื่อจัดระเบียบเรื่องนี้ จึงได้สร้างแผนภาพการพึ่งพากันด้วย GraphViz
- แผนภาพมีทั้งหมด 79 โหนด โดยลำดับตัวอย่างมีดังนี้
- “Year's Annual Maximum Pensionable Earnings”: $73,200 สำหรับปีภาษี 2024
- โหนดสุดท้าย: “Total payroll deductions”
- ในแผนภาพไม่ได้ใส่ตัวสูตรเอง แต่บันทึกเพียงว่าค่าแต่ละค่าพึ่งพาค่าใดบ้าง
- เพื่อให้ขอบเขตการคำนวณเรียบง่ายขึ้น จึงยกเว้นกรณีต่อไปนี้
- พนักงานที่ได้รับค่าคอมมิชชัน
- พนักงานที่เข้าร่วมหรือถอนตัวจาก Canada Pension Plan
- ผู้พำนักใน Quebec, Nova Scotia, Yukon, Ontario
- ภาพขนาดเต็มมีให้ที่ payroll.png และมีขนาด 5627x2033
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
น่าเสียดายที่รัฐบาลไม่ได้จัดทำ สูตรสาธารณะ ในรูปแบบโค้ดให้ใช้
เท่าที่รู้ วิธีจัดการอย่างน่าเชื่อถือมีเพียงการใช้เว็บฟอร์มที่ CRA จัดให้: https://www.canada.ca/en/revenue-agency/services/e-services/...
ถ้าคำนวณด้วยมือจะทรมานและผิดพลาดได้ง่าย
เช่น TD Canada ไม่ได้บอกทุกครั้งว่าในยอดผ่อนชำระนั้น ส่วนไหนถูกนำไปตัดเงินต้นบ้าง ผมคิดว่าคำนวณเองได้ถูกแล้ว แต่บ่อยครั้งยอดคงเหลือที่ธนาคารแสดงหลังชำระเงินต่างกันหลายสิบดอลลาร์
ในแคนาดา การไม่มี API สำหรับดึงรายละเอียดบัญชีและใบแจ้งยอดก็เป็นเรื่องน่าหงุดหงิดเช่นกัน
การทำแบบนั้นเท่ากับมอบเครื่องมือให้รัฐบาลทำให้มันซับซ้อนได้มากที่สุดเท่าที่จะเป็นไปได้ ภาษีควรเรียบง่ายพอที่ผู้จ่ายภาษีจะเข้าใจได้อย่างสมบูรณ์
การที่รัฐบาลล้มเหลวในการทำให้งบประมาณสมดุล ไม่ควรทำให้เรื่องพื้นฐานอย่างการหักเงินจากค่าจ้างกลายเป็นสิ่งที่จำเป็นต้องใช้ซอฟต์แวร์
ถ้าการคำนวณด้วยมือทรมานและผิดพลาดบ่อย ปัญหาที่ใหญ่กว่าคือไม่มี กฎหมายที่บังคับให้รัฐบาลต้องทำให้มันคำนวณด้วยมือได้
แบบนั้นจะเห็นได้อย่างรวดเร็วว่ามีกฎหมายที่ขัดแย้งกันหรือไม่สอดคล้องกันอยู่มากแค่ไหน
จากมุมมองของคนที่เคยทำงานเกี่ยวกับกฎหมายภาษีมาบ้าง ผมคิดว่า วงจรความซับซ้อนของภาษี โดยคร่าว ๆ เป็นแบบนี้
กฎหมายภาษีถูกผ่านออกมา จากนั้นนักบัญชีและทนายภาษีที่เก่ง ๆ ก็หาวิธีลดภาษีอย่างถูกกฎหมาย แล้วหน่วยงานภาษีก็ออกข้อกำหนดเพื่อปิดช่องว่างเหล่านั้น
เมื่อรัฐบาลเปลี่ยน ก็จะลดภาษีบางส่วนหรือเพิ่มการลดหย่อนเพื่อเรียกคะแนนเสียงและปรับทิศทางเศรษฐกิจ ส่วนรัฐบาลชุดถัดมาก็เลือกย้อนนโยบายของชุดก่อนหน้าบางส่วนด้วยเหตุผลทางการเมือง
ถ้าเป็นภาษีระหว่างประเทศ ก็จะมีเทคนิคประหยัดภาษีที่ข้ามหลายเขตอำนาจศาล แรงจูงใจของแต่ละประเทศเพื่อดึงดูดบริษัทข้ามชาติ ความพยายามของ OECD ในการทำให้เป็นมาตรฐาน และสนธิสัญญาภาษีทวิภาคีเข้ามาเพิ่มอีก
ตัวอย่าง: Double Irish With a Dutch Sandwich https://www.investopedia.com/terms/d/double-irish-with-a-dut...
แคนาดามีเครดิตภาษี “personal amount” มานานแล้ว แต่แทนที่จะพูดว่า “รายได้ $X แรกไม่ต้องเสียภาษี” กลับทำเป็นเครดิตภาษีแบบขอคืนไม่ได้ในจำนวนเท่ากับอัตราภาษีขั้นต่ำ × $X
ต่อมาเมื่อกลายเป็นว่า “เพิ่ม personal amount โดยหลีกเลี่ยงไม่ให้เป็นการลดภาษีให้กลุ่มรายได้สูงสุด 1%” ตอนนี้จึงมี personal amount ที่เปลี่ยนไปตามรายได้
“BC Tax Reduction” ของรัฐ BC ก็มีโครงสร้างที่ให้เครดิตภาษีเพิ่มเติมแก่ผู้มีรายได้ประมาณ $22k~$36k ทั้งสองอย่างจริง ๆ แล้วสามารถทำผ่านช่วงอัตราภาษีได้ แต่ผู้มีสิทธิเลือกตั้งตอบสนองต่อชื่อ “Tax Reduction” มากกว่าช่วงอัตราภาษีใหม่
ต้องยกเลิกข้อยกเว้นอย่างการให้สิทธิพิเศษรายได้จากการลงทุน สิทธิพิเศษอสังหาริมทรัพย์ สิทธิพิเศษบริษัท หรือสิทธิพิเศษสำหรับนางฟ้าสามขาที่อยู่ในพื้นที่น้ำท่วม
แบบนั้นตลาดจะจัดสรรความพยายามของมนุษย์ไปยังงานที่มีคุณค่ามากที่สุดได้
ผลิตภาพที่สูญเปล่าไปกับเรื่องนี้ช่างไร้เหตุผล มีคนหลายล้านทุ่มเทไปกับการสร้าง แก้ และบิดเกมปริศนาซับซ้อนนี้ ทั้งที่ไม่มีหลักฐานว่าความซับซ้อนนั้นเป็นประโยชน์
รายการเหล่านี้มักถูกตั้งใจให้ใช้เพื่อหลีกเลี่ยงการถูกเก็บภาษีอยู่แล้ว กลุ่ม บุคคล และองค์กรต่าง ๆ ล็อบบี้รัฐบาลให้ใส่เรื่องที่ตนสนใจเป็นข้อยกเว้น การหักลดหย่อน หรือเครดิตภาษี
การที่นักบัญชีหรือทนายภาษีนำสิ่งเหล่านี้มาใช้ได้อย่างถูกต้อง ไม่ใช่การ “เลี่ยงภาษีอย่างถูกกฎหมาย” แต่เป็นภาษีที่ตั้งแต่แรกก็ไม่ควรต้องจ่ายอยู่แล้ว
หากจะเรียกการจ่ายเฉพาะภาษีที่ค้างชำระอย่างถูกต้องตามกฎหมายว่า “เลี่ยงภาษีผ่านช่องโหว่” ก็ต้องตั้งสมมติฐานว่ารายได้ทั้งหมดเป็นของรัฐบาล ซึ่งเป็นสมมติฐานที่ยอมรับไม่ได้
เคยบริหารบริษัทประมวลผลเงินเดือนขนาดเล็กในแคนาดา และสร้างทั้งหมดด้วย Rails
ทุกครั้งที่กฎเปลี่ยน ก็จะสแครปเครื่องคิดเลขของ CRA เพื่อคำนวณหลายมณฑลและหลายช่วงเงินเดือน แล้วให้พิมพ์ผลลัพธ์ด้วย
rspecจากนั้นก็ทดสอบได้ว่าเราได้สะท้อนกฎระเบียบอย่างถูกต้องหรือไม่ หรือพลาดกฎไหนไป หรือใส่ค่าผิดหรือเปล่า
เมื่อหลายปีก่อนเคยทำสิ่งคล้าย ๆ กันสำหรับ IRS: https://nampas.github.io/tax-map/
และก็สงสัยด้วยว่าทุกเส้นเชื่อมเป็นทิศทางเดียวทั้งหมดหรือมีเส้นเชื่อมสองทิศทางด้วย หวังว่าจะไม่มีแบบสองทิศทางนะ
แผนภาพแบบนี้แหละคือเหตุผลที่มี ผู้ให้บริการประมวลผลเงินเดือน
ดูบทความที่เกี่ยวข้องจาก Bits About Money ได้ที่ https://www.bitsaboutmoney.com/archive/payroll-providers-pow...
ดังนั้นรัฐบาลก็ควรสามารถจัดทำ มาตรฐาน นั้นให้ได้
ขอปรบมือให้ผู้เขียน
ถึงจุดนี้ CRA ควรเปิดเผย implementation อ้างอิง ของสูตรทั้งหมด เพื่อให้ธุรกิจขนาดเล็กนำไปใช้ได้
ต่อให้ไม่เปิดเผยต่อสาธารณะ อย่างน้อยทำไว้ใช้ภายในก็น่าจะดี ถ้าพวกเขาต้องอ่านเอกสารเองโดยตรง เอกสารก็มีแนวโน้มจะถูกเขียนให้ดีขึ้นมาก
อาจเสียรายได้จากค่าปรับไปไม่น้อยด้วย
สมัยมหาวิทยาลัย ผมเป็นผู้ดูแลหอพัก เลยได้ที่พักและอาหาร “ฟรี” ตอนอายุ 20 ยื่นภาษีแคนาดาครั้งแรก แล้วรายงานรายได้ขาดไปประมาณ $1,000 ในตอนนั้นผมเป็นพลเมืองสหรัฐฯ และเป็นการยื่นภาษีแคนาดาครั้งแรก
ไม่กี่ปีต่อมาก็โดนค่าปรับประมาณ $5,500 ซึ่งเป็นเงินก้อนใหญ่มากสำหรับนักศึกษาที่ทำงานพาร์ตไทม์ ตอนนั้นถึงได้รู้ว่า BC สามารถคิดค่าปรับเท่ากับของ CRA ได้เลย
มองย้อนกลับไป อาจจะดีกว่าถ้าไม่รับงานนั้นด้วยซ้ำ ช่วงเวลาที่เหลือที่อยู่ในแคนาดาผมจ้าง CPA ตลอด
เทียบกันแล้ว IRS ดูอบอุ่นนุ่มนวลไปเลย อย่างน้อยถ้าทำผิดพลาด ค่าปรับก็จะสัมพันธ์กับจำนวนที่รายงานขาดไป ตราบใดที่คุณไม่ใช่อภิมหาเศรษฐี
ดูเหมือนจะไม่ใช่ชีตที่ดาวน์โหลดได้ แต่ก็ยังมีอะไรให้ใช้บ้าง
ในฝรั่งเศส กฎแบบนี้มีให้ในรูปแบบเว็บไซต์, API, แพ็กเกจ NPM และกฎดิบในภาษา https://publi.codes
https://mon-entreprise.urssaf.fr/développeur
[https://www.canada.ca/en/revenue-agency/services/e-services/...](<https://canada.ca/en/revenue-agency/…;)หรือจะใช้เวอร์ชันของควิเบกก็มี
[https://www.revenuquebec.ca/en/online-services/tools/webras/](<https://www.revenuquebec.ca/en/online-services/tools/webras/>)แนวคิดที่รัฐบาลสนับสนุนการเผยแพร่กฎประเภทนี้ในรูปแบบ ที่เครื่องอ่านได้ ถือว่ายอดเยี่ยมมาก
ผู้ใช้ต้องตรวจคำนวณผลลัพธ์เองต่างหาก และมันเป็นแค่เครื่องมืออำนวยความสะดวก ไม่ใช่ มาตรฐานที่มีอำนาจอ้างอิง ใช่ไหม
“Calculations are indicative. They are not a substitute for actual statements from Urssaf, the tax authorities or any other organization.”
[1] https://mycompanyinfrance.urssaf.fr/developer/iframe?module=...
บอกว่า “ไม่รวมผู้อยู่อาศัยในควิเบก โนวาสโกเชีย ยูคอน และออนแทรีโอ” นี่ก็คือ 75% ของแคนาดา แทบจะทั้งนั้น
แค่ผมอยู่ใน BC เลยไม่อยากไปใส่ใจถึงตรงนั้น
ควิเบกเป็นคนละเรื่องกันเลย ที่นั่นการคำนวณหักเงินเดือนซับซ้อนกว่ามาก
มีกฎและข้อกำหนดด้าน HR แปลก ๆ จำนวนมากที่ใช้เฉพาะใน QC เท่านั้น
แม้จะอยู่ในสหรัฐฯ แต่พูดได้แน่นอนว่าสิ่งเหล่านี้เป็นเหตุผลประมาณครึ่งหนึ่งที่ทำให้ LLC ของผมไม่จ้างพนักงาน
ต่อให้อยากจ้าง จริง ๆ ก็เท่ากับต้องจ้างนักบัญชีมาด้วย
บางรัฐน่าปวดหัวจริง ๆ เช่น NJ, CA, NY, OH
ถ้าลงทะเบียนในรัฐใดรัฐหนึ่งแล้ว แม้พนักงานคนนั้นจะย้ายไปทำงานที่อื่นในภายหลัง บริษัทก็อาจยังถูกติดตามต่อไปจากเรื่องการไม่ปฏิบัติตามข้อกำหนดสารพัดที่รัฐนั้นรับรู้ไว้
เช่น อาจโดนปรับหนักเพียงเพราะไม่ได้ยื่นแจ้งว่าบริษัทไม่มีพนักงานในรัฐนั้นแล้ว
รัฐที่รับมือได้ค่อนข้างดีคือ ID, TN, TX
โดยทั่วไป ด้วยเหตุผลเหล่านี้ จึงควรจ้างเฉพาะพนักงานในรัฐของตัวเอง ถ้าไม่จำเป็นจริง ๆ ก็คงไม่จ้าง
เพราะต้องตัดจำหน่ายค่าใช้จ่ายนักพัฒนาเป็นเวลา 5 ปี ทำให้อาจได้รับใบเรียกเก็บภาษีก้อนใหญ่ ไม่ว่าจะเป็นพนักงานหรือผู้รับเหมาก็ตาม
ถ้ายกเลิกได้ก็คงดี แต่ถ้าไม่ได้ ตามคำพูดของ Senator Wyden มันเป็นบทบัญญัติที่ “stupid” ทั้งที่ไม่มีใครคาดคิดว่าจะยังมีอยู่
https://www.law.cornell.edu/uscode/text/26/174
แก้ไข: คงไม่ถูกยกเลิก แต่สามารถออกกฎหมายให้ละเว้นได้จนถึงวันที่กำหนดบางวันในอนาคต พอถูกบันทึกไว้ในบัญชีแล้ว การเอากฎหมายภาษีออกทำได้ยากมากเพราะการจัดการทางบัญชี
เช่น บริษัทขนาดเล็กถึงกลางจำนวนมากที่ผมรู้จักใช้ Gusto เพราะมันทำให้เพิ่มผู้รับเหมาหรือพนักงานได้ง่าย
ไม่ได้ตั้งใจจะโปรโมต Gusto โดยเฉพาะ ถ้าค้นหาก็มีบริการคู่แข่งอีกมาก ไม่ได้ฟรี แต่ข้อดีคือเป็นโมเดล SaaS เริ่มจากค่าใช้จ่ายต่อพนักงาน และขยายไปพร้อมกับบริษัทได้
เฉพาะกรณีที่พนักงานเป็นแบบเงินเดือนประจำหรือทำงานในฐานะผู้รับเหมาอิสระเท่านั้น แต่ในกรณีนั้นก็ไม่ใช่พนักงานจริง ๆ
Employer of Record จะรับประกันการปฏิบัติตามกฎหมายท้องถิ่น และเรียกเก็บเงินในลักษณะบวกค่าบริการเข้าไปกับต้นทุนรวมของพนักงาน
มีบริษัทบริการ payroll นับไม่ถ้วนที่คำนวณและนำส่งให้ในราคา $30~$50 ต่อเดือนต่อพนักงาน 1 คน การทำ payroll ทั่วไปไม่จำเป็นต้องมีนักบัญชีเสมอไป
นี่แสดงให้เห็นว่า อัลกอริทึม แบบหนึ่งทำงานอย่างไร ไม่ว่าจะเป็นซอฟต์แวร์หรือไม่ก็ตาม
เริ่มจากสิ่งที่พึงประสงค์หรือจำเป็น แล้วค่อย ๆ เพิ่มความซับซ้อนเข้าไปเรื่อย ๆ สุดท้ายก็ไปถึงความยุ่งเหยิงที่สร้างผลลัพธ์ตามอำเภอใจ ทำให้คนนอกแทบเป็นบ้า และถ้าอ่านเหมือนคาถาก็อาจอัญเชิญปีศาจชั้นต่ำออกมาได้ด้วย
ทางแก้ที่นึกถึงได้แน่นอนคือการ refactor งานแบบที่นักการเมืองให้สัญญาตอนหาเสียง และ junior developer เรียกร้องเมื่อเจอ codebase ใหม่
แต่ในความเป็นจริงแทบไม่เคยเกิดขึ้น เพราะไม่มีใครแยกได้ชัดเจนว่าฟีเจอร์และความซับซ้อนส่วนใดไม่จำเป็น และส่วนใดเป็นสิ่งที่ตั้งใจไว้
ทางแก้ที่สองคือการนำไปทำให้สะอาดในกรอบที่เป็นทางการมากขึ้น เช่น ภาษาที่มี static type หรือ theorem prover แต่ถ้าตัวระบบเองมีความขัดแย้งอยู่แล้ว ความพยายามนี้ก็มักล้มเหลวเช่นกัน
โชคดีที่ไม่มีใครสนใจ “edge case แปลก ๆ” และปล่อยไว้อย่างนั้นจนกว่าจะมีใครหอบเงินสักล้านดอลลาร์หนีไป
เมื่อ 10~15 ปีก่อน มีเครดิตภาษีพิเศษสารพัดกองพะเนินเพื่อซื้อเสียง
ทุกวันนี้ ถ้าไม่มีเรื่องอย่างการทำธุรกิจส่วนตัวหรือการลงทุนต่างประเทศ และเป็นมนุษย์เงินเดือนทั่วไป การยื่นภาษีก็เป็นเรื่องเล็กน้อยและเกือบอัตโนมัติแล้ว
ความซับซ้อนส่วนใหญ่ในกราฟข้างต้นน่าจะมาจากการที่แคนาดาเป็นประเทศ สหพันธรัฐ ที่เข้มแข็ง จึงมีอำนาจและข้อยกเว้นที่เกี่ยวข้องแตกต่างกันไปตามแต่ละมณฑล และยังมีระบบประกันการจ้างงานกับระบบบำนาญของรัฐบาลกลางเข้ามาเพิ่มอีก