manageitwa / payg-tax
为员工计算PAYG税收扣除金额
Requires
- php: ^7.4|^8.0
- nesbot/carbon: ^2.71.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: 3.*
README
此库允许根据澳大利亚税务局(ATO)的规定计算毛收入所得税。它支持所有标准税率表和最常见的税收抵免和调整,包括老年人及养老金领取者抵免、医疗保险费减免和豁免、学习和培训贷款以及打工度假者。
此库仅支持计算2020年10月13日(FY2020-21税率表发布)之后毛收入的税收。
要求
- PHP 7.4或PHP 8.0及以上。
安装
此库可以通过Composer安装。
composer require manageitwa/payg-tax
用法
通用用法
此库旨在能够插入到大多数PHP软件中。库在src/Entities
目录中发布了一些接口。最低限度,您需要满足以下接口
Payer
:付款人记录。付款人通常是雇主或支付收款人的实体。Payee
:收款人记录。收款人是获得毛收入并需要从其收入中扣除所得税的员工或实体。Earning
:收入记录。收入是支付给收款人的单个毛收入金额,可能是临时支付或作为支付周期的一部分。
通常,您会为这些实体中的每个实体实现这些接口到模型记录中。
<?php namespace Your\App; use ManageIt\PaygTax\Entities\Payee; class Employee implements Payee { // ... }
然后,您需要确保您的模型或类包含接口中指定的所有必需方法。所有接口和库文件都是严格类型的,以确保数据完整性。
一旦您的记录正确实现了实体接口,您可以使用\ManageIt\PaygTax\PaygTax
类作为入口点,提供实体记录作为场景,并计算该场景的税收扣除。
use ManageIt\PaygTax\PaygTax; $payer = new Payer(); $payee = new Payee(); $earning = new Earning(); $tax = PaygTax::new() ->setPayer($payer) ->setPayee($payee) ->setEarning($earning) ->getTaxWithheldAmount();
包括抵免和调整
收款人可能需要将税收抵免、债务和调整应用于其税收扣除金额,以满足对ATO的义务。您需要对Payee
记录应用调整。例如,达到可以申请澳大利亚养老金年龄的收款人可能希望使用老年人及养老金领取者税收抵免。
库不会介意您如何将其实现到模型/系统中,只要Payee
记录有一个返回调整数组的方法getAdjustments()
。
<?php namespace Your\App; use ManageIt\PaygTax\Entities\Payee; class Employee implements Payee { // ... public function getAdjustments(): array { if ($this->medicareLevyReduction) { return [ new \ManageIt\PaygTax\Adjustments\October2020\MedicareLevyReduction(true, 2), ]; } } // ... }
抵免和调整是在计算初始税收扣除金额之后应用的。
自定义调整
如果此软件未涵盖可能应用于税收的特定调整,您可以创建自己的调整并确保它通过Payee
记录的getAdjustments()
方法返回。您可以在自定义调整中使用isEligible()
方法根据付款人、收款人、税率表和场景中应用的收入确定调整的适用性。
<?php namespace Your\App; use ManageIt\PaygTax\Entities\TaxAdjustment; class MyCustomOffset implements TaxAdjustment { // ... public function isEligible( \ManageIt\PaygTax\Entities\Payer $payer, \ManageIt\PaygTax\Entities\Payee $payee, \ManageIt\PaygTax\Entities\TaxScale $taxScale, \ManageIt\PaygTax\Entities\Earning $earning ): bool { return $this->needsCustomOffset; } public function getAdjustmentAmount( \ManageIt\PaygTax\Entities\Payer $payer, \ManageIt\PaygTax\Entities\Payee $payee, \ManageIt\PaygTax\Entities\TaxScale $taxScale, \ManageIt\PaygTax\Entities\Earning $earning ): float { // Take 10 dollars away from the initial withholding return -10; } // ... }
税率分类
默认情况下,库使用税率表和调整适用性方法来确定给定场景中适用的税率表和可应用的调整。这些是在TaxScale
和TaxAdjustment
实体中定义的isEligible()
方法。预计任何给定场景将只适用一个税率表 - 可以应用任何数量的调整。
在某些罕见情况下,这可能导致特定场景没有适用的税率表,或者有多个税率表适用。在这些情况下,分别会抛出 NoTaxScalesException
或 MultipleTaxScalesException
异常。
如果您想更改系统确定税率表适用性的方式,可以选择使用不同的税率表分类器。请注意,getTaxScale()
方法仍然应该在每种场景中返回一个适用的税率表。
免责声明
虽然Manage It Pty Ltd已尽最大努力确保本库中税收扣缴计算的准确性,包括与ATO样本数据匹配的测试用例和静态分析,但它并不涵盖所有可能的抵扣或调整,这些抵扣或调整可能适用于收款人的税收责任,并且不考虑您的个人、财务和税收状况。您应始终与注册税务代理人核实任何计算结果。
Manage It Pty Ltd对通过使用本库导致的计算错误或假设不承担任何责任,这些错误或假设导致您在收入中扣缴过多或过少的税款。
许可证
本库是双许可的。对于非商业用途,本软件可在GNU通用公共许可证(GNU GPL)第3版条款下使用。本许可证的条款包含在本库中的LICENSE
文档中。
对于商业用途 - 例如,但不仅限于,在商业产品中的实现或用于商业服务,请联系Manage It Pty Ltd至info@manageit.com.au或通过电话(+61)08 9380 0271讨论商业许可证。