1 điểm bởi GN⁺ 2024-01-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • Để tự tính các khoản khấu trừ lương tại Canada mà không dùng dịch vụ trả lương bên ngoài, cần triển khai các công thức CPP, EI và thuế thu nhập trong Payroll Deductions Formulas của CRA
  • Năm 2024, Canada Pension Plan không chỉ bao gồm khoản đóng cơ bản và bổ sung mà còn cả second additional premiums, khiến bảng tính cũ phải được viết lại từ đầu
  • Tài liệu của CRA phân tán vị trí tính toán và vị trí sử dụng các giá trị ở nhiều chỗ trước sau, nên tác giả đã tạo biểu đồ phụ thuộc GraphViz để xác định các mục cần tính trước
  • Biểu đồ gồm 79 nút, nối từ các giá trị đầu vào như “Year's Annual Maximum Pensionable Earnings” năm 2024 là $73,200 đến “Total payroll deductions”
  • Không đưa bản thân công thức vào, chỉ ghi lại quan hệ phụ thuộc giữa các giá trị; nhân viên hưởng hoa hồng, người tham gia/rút khỏi CPP, và cư dân Quebec, Nova Scotia, Yukon, Ontario được loại khỏi phạm vi

Độ phức tạp khi tự tính khấu trừ lương của CRA

  • Canada Revenue Agency định kỳ phát hành tài liệu Payroll Deductions Formulas dùng để tính khấu trừ lương; hiện đã đến ấn bản thứ 119
  • Tài liệu này chứa các công thức cần thiết để tính các khoản khấu trừ lương do CRA thu
    • Canada Pension Plan
    • Employment Insurance
    • Income Tax
  • Nếu điều hành một doanh nghiệp nhỏ tại Canada và không muốn dùng nhà cung cấp dịch vụ trả lương bên ngoài, bạn phải tự triển khai các công thức này trong bảng tính
  • Giống như các phần khác của hệ thống thuế, việc tính khấu trừ lương ngày càng phức tạp; năm 2024, CPP được bổ sung second additional premiums, khiến cần viết lại bảng tính

Trình tự tính toán được sắp xếp bằng GraphViz

  • Tài liệu của CRA khó theo dõi ngay được giá trị nào cần tính trước
    • Giá trị cần thiết có thể được tính trước hoặc sau khi nó được sử dụng, khiến phải liên tục nhảy qua lại trong tài liệu
  • Để sắp xếp việc này, tác giả đã tạo biểu đồ phụ thuộc bằng GraphViz
  • Biểu đồ có 79 nút, với luồng tiêu biểu như sau
    • “Year's Annual Maximum Pensionable Earnings”: $73,200 cho năm tính thuế 2024
    • Nút cuối: “Total payroll deductions”
  • Biểu đồ không đưa vào bản thân các công thức, mà chỉ ghi lại mỗi giá trị phụ thuộc vào những giá trị nào khác
  • Để đơn giản hóa phạm vi tính toán, các trường hợp sau được loại trừ
    • Nhân viên hưởng hoa hồng
    • Nhân viên tham gia hoặc rút khỏi Canada Pension Plan
    • Cư dân Quebec, Nova Scotia, Yukon, Ontario
  • Ảnh kích thước đầy đủ được cung cấp tại payroll.png, với kích thước 5627x2033

1 bình luận

 
GN⁺ 2024-01-04
Ý kiến trên Hacker News
  • Thật tiếc là chính phủ không cung cấp công thức công khai dưới dạng mã
    Theo tôi biết, cách duy nhất để xử lý đáng tin cậy là dùng biểu mẫu web do CRA cung cấp: https://www.canada.ca/en/revenue-agency/services/e-services/...
    Tính tay thì khổ sở và dễ sai

    • Đức từ lâu, ít nhất là từ thập niên 1970, đã công bố lưu đồ chuẩn cho tính lương với các biến được đặt tên và công thức: https://www.bundesfinanzministerium.de/Content/DE/Downloads/...
    • Ước gì tính khoản vay thế chấp cũng có thứ tương tự
      Ví dụ TD Canada không cho biết mỗi kỳ trả nợ thì bao nhiêu tiền đi vào gốc. Tôi nghĩ mình tự tính đúng, nhưng sau khi thanh toán, số dư ngân hàng hiển thị thường lệch vài chục đô la
      Ở Canada, việc không thể dùng API để lấy chi tiết tài khoản và sao kê cũng gây bực bội
    • Tôi hoàn toàn không đồng ý rằng chính phủ nên đưa ra công thức công khai dưới dạng mã
      Làm vậy chẳng khác nào trao cho chính phủ phương tiện để khiến nó phức tạp hết mức có thể. Thuế phải đủ đơn giản để người nộp có thể hiểu hoàn toàn
      Việc chính phủ thất bại trong cân bằng ngân sách không có nghĩa là những thứ cơ bản như khấu trừ lương lại nhất thiết phải cần phần mềm mới tính ra được
      Nếu tính tay đau khổ và hay sai, vấn đề lớn hơn là không có luật buộc chính phủ phải thiết kế sao cho có thể tính bằng tay
    • Pháp thậm chí còn tạo DSL riêng cho thuế: https://github.com/MLanguage/mlang
    • Mọi luật đều nên được biểu diễn bằng mã
      Khi đó sẽ nhanh chóng lộ ra có bao nhiêu luật mâu thuẫn hoặc thiếu nhất quán với nhau
  • Từ góc nhìn từng xử lý một chút về luật thuế, tôi nghĩ vòng lặp phức tạp của thuế đại khái như sau
    Luật thuế được thông qua, các kế toán viên và luật sư thuế thông minh tìm cách giảm thuế hợp pháp, rồi cơ quan thuế ban hành quy định để bịt các lỗ hổng đó
    Khi chính quyền thay đổi, họ hạ một số loại thuế hoặc thêm miễn giảm để lấy phiếu và điều tiết nền kinh tế, rồi chính quyền tiếp theo vì lý do chính trị lại chọn lọc đảo ngược chính sách của chính quyền trước
    Nếu là thuế quốc tế thì còn thêm các kỹ thuật tiết thuế đi qua nhiều khu vực tài phán, ưu đãi của các nước để thu hút tập đoàn đa quốc gia, nỗ lực chuẩn hóa của OECD, và cả các hiệp định thuế song phương
    Ví dụ: Double Irish With a Dutch Sandwich https://www.investopedia.com/terms/d/double-irish-with-a-dut...

    • Sự phức tạp này không phải do cố bịt lỗ hổng thuế mà sinh ra. Phần lớn là do các chính trị gia thích đặt tên
      Canada từ lâu đã có khoản tín dụng thuế “personal amount”, nhưng thay vì nói “$X thu nhập đầu tiên không bị đánh thuế”, họ xử lý bằng khoản tín dụng thuế không hoàn lại bằng thuế suất thấp nhất × $X
      Rồi khi thành “hãy tăng personal amount nhưng tránh giảm thuế cho nhóm 1% thu nhập cao nhất”, giờ đã xuất hiện personal amount thay đổi theo thu nhập
      “BC Tax Reduction” của BC cũng có cấu trúc đại khái là cho thêm tín dụng thuế với người có thu nhập khoảng $22k~$36k. Cả hai đều có thể được triển khai đơn giản bằng các bậc thuế suất, nhưng cử tri phản ứng với cái tên “Tax Reduction” hơn là một bậc thuế mới
    • Nếu dừng ở bước 1 với thuế suất đơn nhất thì có thể ngăn được các vấn đề này. Chỉ cần áp dụng như nhau cho mọi thứ
      Cần loại bỏ các ngoại lệ như ưu đãi thu nhập đầu tư, ưu đãi bất động sản, ưu đãi doanh nghiệp, ưu đãi cho tiên ba chân sống ở vùng lũ
      Khi đó thị trường có thể phân bổ nỗ lực của con người vào những việc có giá trị nhất
      Năng suất bị lãng phí vào chủ đề này thật vô lý. Hàng triệu người bám vào việc tạo ra, giải và thao túng những câu đố phức tạp, trong khi không có bằng chứng nào cho thấy sự phức tạp đó có lợi
    • Có vấn đề trong việc gọi các ngoại lệ rõ ràng, các mục được chỉ định, các khoản khấu trừ và tín dụng thuế là “lỗ hổng
      Những mục này thường được dự định để dùng nhằm tránh bị đánh thuế. Các nhóm, cá nhân và tổ chức vận động chính phủ đưa những hạng mục họ quan tâm vào dưới dạng ngoại lệ, khấu trừ hoặc tín dụng thuế
      Việc kế toán viên hay luật sư thuế tận dụng đúng các mục đó không phải là “né thuế hợp pháp”, mà ngay từ đầu đó vốn không phải là khoản thuế phải nộp
      Muốn gọi việc chỉ nộp đúng số thuế owed tax theo luật là “né thuế bằng lỗ hổng” thì phải mặc định rằng mọi thu nhập đều thuộc về chính phủ, và tiền đề đó là không thể chấp nhận
  • Tôi từng vận hành một công ty xử lý lương nhỏ ở Canada, và đã làm toàn bộ bằng Rails
    Mỗi khi quy tắc thay đổi, tôi scrape máy tính của CRA để tính cho nhiều tỉnh và dải lương, rồi cho xuất kết quả bằng rspec
    Nhờ đó có thể kiểm thử xem mình đã phản ánh đúng quy định chưa, có bỏ sót quy tắc hay nhập sai giá trị không

  • Vài năm trước tôi từng làm một thứ tương tự cho IRS: https://nampas.github.io/tax-map/

    • Tôi tò mò không biết có thuật ngữ nào để gọi đồ thị có hướng bố trí theo dạng vòng tròn không
      Cũng tò mò liệu tất cả các cạnh đều một chiều, hay có cả cạnh hai chiều. Mong là không có cạnh hai chiều
  • Những sơ đồ như thế này chính là lý do nhà cung cấp xử lý lương tồn tại
    Xem bài liên quan trên Bits About Money: https://www.bitsaboutmoney.com/archive/payroll-providers-pow...

    • Nhưng rốt cuộc thì đó vẫn là toán học, và chính phủ cũng xác minh việc chuẩn hóa để kiểm tra nội dung nhà cung cấp xử lý lương nộp có đúng không
      Vậy thì chính phủ phải có khả năng cung cấp chuẩn đó
  • Vỗ tay cho tác giả
    Đến mức này thì CRA nên công bố triển khai tham chiếu cho mọi công thức để các doanh nghiệp nhỏ có thể dùng

    • Sẽ thật tuyệt nếu họ công bố một bảng tính LibreOffice
      Dù không công khai, cũng nên thử làm nội bộ. Nếu chính họ phải đọc tài liệu, nhiều khả năng tài liệu cũng sẽ được viết tốt hơn nhiều
    • Tại sao họ lại làm vậy? Nếu công khai hết, mọi người sẽ tìm ra lỗi và vấn đề, rồi CRA phải xử lý
      Họ cũng có thể mất nhiều khoản thu từ tiền phạt
      Hồi đại học tôi là quản lý ký túc xá nên được ăn ở “miễn phí”, và khi lần đầu khai thuế Canada ở tuổi 20, tôi đã khai thiếu khoảng $1.000. Khi đó tôi là công dân Mỹ lần đầu khai thuế Canada
      Vài năm sau tôi bị phạt khoảng $5.500, một khoản khổng lồ với một sinh viên đang làm bán thời gian. Lúc đó tôi mới biết BC có thể áp phạt tương ứng đúng bằng mức phạt của CRA
      Nhìn lại thì có lẽ không làm công việc đó còn tốt hơn. Trong quãng thời gian còn lại sống ở Canada, tôi đã thuê CPA
      So ra thì IRS ấm áp và dễ chịu hơn nhiều. Ít nhất nếu mắc lỗi, tiền phạt sẽ tỷ lệ với số tiền khai thiếu. Trừ khi bạn là siêu giàu
    • CRA sẽ không làm đâu. Họ không có nghĩa vụ phải cung cấp câu trả lời rõ ràng
    • Một trả lời khác đã chỉ đến biểu mẫu web này: https://news.ycombinator.com/item?id=38843556
      Có vẻ không phải là bảng có thể tải xuống, nhưng dù sao cũng có thứ gì đó
  • Ở Pháp, các quy tắc kiểu này được cung cấp dưới dạng website, API, gói NPM, và các quy tắc thô bằng ngôn ngữ https://publi.codes
    https://mon-entreprise.urssaf.fr/développeur

  • “Không bao gồm cư dân Québec, Nova Scotia, Yukon, Ontario” — như vậy thực tế là 75% Canada rồi

    • Công bằng mà nói, Nova Scotia, Yukon, Ontario mỗi nơi chỉ cần thêm vài node nữa là được
      Chỉ là tôi ở BC nên không muốn bận tâm đến tận đó
      Québec là một vấn đề hoàn toàn khác. Ở đó việc tính khấu trừ lương phức tạp hơn nhiều
    • Québec gần như là một quốc gia riêng
      Có rất nhiều quy tắc và yêu cầu nhân sự kỳ lạ chỉ áp dụng cho QC
  • Dù ở Mỹ, tôi có thể nói chắc rằng những thứ như thế này chiếm khoảng một nửa lý do khiến tôi không tuyển nhân viên cho LLC của mình
    Ngay cả khi muốn tuyển, về thực chất cũng giống như phải tuyển kèm cả một kế toán

    • Xét đến xu hướng làm việc từ xa, cần xem mối quan hệ giữa bang nơi bạn muốn tuyển nhân viên và bang nơi công ty đặt trụ sở là rất quan trọng
      Một số bang thật sự rất phiền phức. Ví dụ như NJ, CA, NY, OH
      Khi đăng ký ở một bang nào đó, ngay cả sau khi nhân viên đó rời sang công ty khác, công ty vẫn có thể tiếp tục bị bang đó theo dõi vì đủ loại vấn đề không tuân thủ mà bang ghi nhận
      Chẳng hạn, bạn có thể bị phạt nặng chỉ vì không khai báo rằng mình không còn nhân viên nào ở bang đó
      Những bang dễ làm việc hơn là ID, TN, TX
      Nói chung vì những lý do này, tốt nhất chỉ nên tuyển nhân viên trong bang của mình. Nếu không thật sự cần thiết thì tôi sẽ không tuyển
    • Nếu định tuyển lập trình viên hoặc người tham gia nghiên cứu/thử nghiệm, cần tìm hiểu kỹ Section 174
      Chi phí cho lập trình viên phải được khấu hao trong 5 năm, nên bạn có thể nhận một hóa đơn thuế rất lớn. Dù là nhân viên hay nhà thầu cũng như nhau
      Sẽ tốt nếu điều khoản này bị bãi bỏ, nhưng nếu không, thì đúng như cách Senator Wyden nói, đây là một điều khoản “stupid” đến mức chẳng ai ngờ nó lại còn tồn tại
      https://www.law.cornell.edu/uscode/text/26/174
      Sửa: Nó sẽ không bị bãi bỏ. Tuy nhiên có thể ban hành luật để bỏ qua điều khoản này cho đến một ngày nhất định trong tương lai. Một khi đã đưa vào sổ sách, vì xử lý kế toán nên việc loại bỏ luật thuế trở nên rất khó
    • Như các phản hồi khác đã nói, các công ty xử lý bảng lương tồn tại là có lý do, và ngày nay có nhiều dịch vụ còn giúp việc tuân thủ quy định trở nên dễ dàng
      Ví dụ, nhiều doanh nghiệp vừa và nhỏ mà tôi biết dùng Gusto, vì dịch vụ này giúp thêm nhà thầu hoặc nhân viên dễ dàng
      Tôi không có ý quảng bá riêng Gusto; nếu tìm kiếm sẽ thấy nhiều dịch vụ cạnh tranh. Chúng không miễn phí, nhưng vì là mô hình SaaS nên có ưu điểm là bắt đầu với chi phí tính theo từng nhân viên và có thể mở rộng cùng công ty
    • Nếu vấn đề không phải là độ phức tạp kế toán do chi phí phát sinh, mà là tính lương, thì ngay cả tuyển dụng trong nước cũng có thể thực hiện thông qua remote.com hoặc deel.com
      Chỉ áp dụng khi nhân viên nhận lương cố định hoặc làm việc với tư cách nhà thầu độc lập. Tuy nhiên trong trường hợp đó, họ không phải là nhân viên thực sự
      Employer of Record bảo đảm tuân thủ luật địa phương và tính phí bằng cách cộng phí dịch vụ vào tổng chi phí của nhân viên
    • Nếu vấn đề là tính và chuyển tiền lương cho các cơ quan liên bang và từng bang, thì điều đó hoàn toàn không cần trở thành rào cản
      Có vô số công ty dịch vụ bảng lương tính toán và chuyển tiền với chi phí $30~$50 mỗi tháng cho mỗi nhân viên. Với xử lý bảng lương thông thường, không nhất thiết phải có kế toán
  • Điều này cho thấy cách một thuật toán vận hành, bất kể có phải phần mềm hay không
    Bắt đầu từ những thứ đáng mong muốn hoặc cần thiết rồi liên tục thêm độ phức tạp, cuối cùng bạn sẽ đi đến một mớ hỗn độn tạo ra kết quả tùy tiện, khiến người ngoài phát điên, và nếu đọc như bùa chú thì còn có thể triệu hồi cả một con quỷ cấp thấp
    Giải pháp hiển nhiên xuất hiện trong đầu là refactoring. Đó là việc các chính trị gia hứa khi tranh cử, và các lập trình viên junior đòi làm khi gặp một codebase mới
    Nhưng trên thực tế hầu như không làm được. Vì không ai phân biệt rõ được chức năng và độ phức tạp nào là không cần thiết, cái nào là có chủ đích
    Giải pháp thứ hai là triển khai sạch sẽ trong một khung hình thức hơn, như ngôn ngữ kiểu tĩnh hoặc trình chứng minh định lý. Nhưng nếu bản thân hệ thống đã mâu thuẫn, nỗ lực này cũng thường thất bại
    May mắn là chẳng ai quan tâm đến “các trường hợp biên kỳ lạ”, và mọi thứ cứ được để nguyên cho đến khi có ai đó ôm khoảng một triệu đô la bỏ trốn

    • Trên thực tế, CRA và các chính phủ liên bang gần đây đã nỗ lực rất nhiều để đơn giản hóa thuế Canada. Ngày nay đơn giản hơn nhiều. Tất nhiên phần bảng lương này là ngoại lệ
      10~15 năm trước từng có cả núi khoản khấu trừ đặc biệt đủ loại để mua phiếu bầu
      Ngày nay, nếu không có những thứ như tự kinh doanh hay đầu tư nước ngoài và chỉ là người làm công ăn lương thông thường, việc khai thuế rất đơn giản và gần như đã được tự động hóa
      Phần lớn độ phức tạp trong biểu đồ trên có vẻ là do Canada là một quốc gia liên bang mạnh, nên mỗi tỉnh bang đều có thẩm quyền và ngoại lệ liên quan riêng. Thêm vào đó còn có bảo hiểm việc làm và hệ thống lương hưu liên bang