TaxRate počíta základ, daň a sumu s daňou jedným presným zlomkom a jedným zaokrúhlením na volanie — bez float delenia, bez prevodu na int:
use RoundlyConsulting\Money\Tax\TaxRate;
$vat = TaxRate::fromBasisPoints(2000, 'VAT'); // 20 %
$net = Money::ofMajor('10', 'EUR');
$gross = Money::ofMajor('12', 'EUR');
$vat->taxOnNet($net); // 2.00 EUR
$vat->grossFromNet($net); // 12.00 EUR
$vat->netFromGross($gross); // 10.00 EUR
$vat->taxInGross($gross); // 2.00 EUR
$line = TaxRate::of('19')->breakdownFromGross(Money::ofMajor('10', 'EUR'));
$line->net; // 8.40 EUR
$line->tax; // 1.60 EUR
$line->gross; // 10.00 EUR — net + tax === gross, always
TaxRate::of('8.875', 'Sales tax'); // precise to a thousandth of a percent
TaxRate::zero();- TaxRate::of($percent, ?$label), TaxRate::fromBasisPoints($bp, ?$label), TaxRate::zero().
- taxOnNet() a grossFromNet() — pre ceny bez dane.
- netFromGross() a taxInGross() — pre ceny s daňou.
- breakdownFromNet() zaokrúhli daň a sumu s daňou dopočíta; breakdownFromGross() zaokrúhli základ a daň dopočíta.
V oboch smeroch platí presne základ + daň === suma s daňou: jedna strana sa zaokrúhli, druhá sa dopočíta odčítaním. Balík to overuje property testami na 10 000 náhodných sumách vo všetkých ôsmich režimoch zaokrúhľovania.
Súhrny pre faktúry
use RoundlyConsulting\Money\Tax\TaxSummary;
$vat = TaxRate::of(20, 'VAT');
$reduced = TaxRate::of(10, 'Reduced');
$summary = TaxSummary::of(
$vat->breakdownFromNet(Money::ofMajor('10', 'EUR')),
$vat->breakdownFromNet(Money::ofMajor('25', 'EUR')),
$reduced->breakdownFromNet(Money::ofMajor('8', 'EUR')),
);
$summary->perRate(); // list<TaxBreakdown>, one per rate, sorted by rate:
// 10 %: 8.00 + 0.80 = 8.80 · 20 %: 35.00 + 7.00 = 42.00
$summary->net(); // 43.00 EUR
$summary->tax(); // 7.80 EUR
$summary->gross(); // 50.80 EURTaxSummary agreguje riadky bez opätovného zaokrúhľovania. Či sa daň zaokrúhľuje po riadkoch alebo z celku, je vaše rozhodnutie — preto existujú obe možnosti. Zmiešané meny vyhodia CurrencyMismatch.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.