platform
This commit is contained in:
1 parent
e706f7d907
commit
21bcb63440
42 files changed
+5903
No files matched your search
@@ -0,0 +1,56 @@
|
||||
package tax
|
||||
|
||||
// nordicStandardRates maps country code -> default standard VAT rate in basis
|
||||
// points of a percent (2500 = 25%).
|
||||
var nordicStandardRates = map[string]int{
|
||||
"SE": 2500,
|
||||
"NO": 2500,
|
||||
"DK": 2500,
|
||||
"FI": 2550, // 25.5% as of 2024 — exact in basis points, no truncation
|
||||
}
|
||||
|
||||
// Nordic implements Provider for the Nordic countries (SE, NO, DK, FI).
|
||||
// It encodes the standard statutory VAT rates (basis points):
|
||||
//
|
||||
// SE: 25 % (2500)
|
||||
// NO: 25 % (2500)
|
||||
// DK: 25 % (2500)
|
||||
// FI: 25.5 % (2550)
|
||||
//
|
||||
// Rates are integer basis points, so fractional rates (FI 25.5) are represented
|
||||
// exactly — no float, no truncation.
|
||||
//
|
||||
// Nordic does not make network calls — all logic is local math. An external
|
||||
// provider (Avalara, TaxJar) can be added by implementing Provider and
|
||||
// switching on TAX_PROVIDER.
|
||||
type Nordic struct {
|
||||
defaultCountry string
|
||||
}
|
||||
|
||||
// NewNordic returns a Nordic provider. defaultCountry is used when
|
||||
// DefaultTaxRate is called with an empty country code; it defaults to "SE"
|
||||
// if empty.
|
||||
func NewNordic(defaultCountry string) *Nordic {
|
||||
if defaultCountry == "" {
|
||||
defaultCountry = "SE"
|
||||
}
|
||||
return &Nordic{defaultCountry: defaultCountry}
|
||||
}
|
||||
|
||||
var _ Provider = (*Nordic)(nil)
|
||||
|
||||
func (p *Nordic) Name() string { return "nordic" }
|
||||
|
||||
func (p *Nordic) Compute(total int64, taxRate int) int64 {
|
||||
return Compute(total, taxRate)
|
||||
}
|
||||
|
||||
func (p *Nordic) DefaultTaxRate(country string) int {
|
||||
if country == "" {
|
||||
country = p.defaultCountry
|
||||
}
|
||||
if rate, ok := nordicStandardRates[country]; ok {
|
||||
return rate
|
||||
}
|
||||
return nordicStandardRates[p.defaultCountry]
|
||||
}
|
||||
Reference in new issue
Block a user