Documentation
¶
Index ¶
- func RegisterRegion(region *Region)
- func ValidateTaxIdentity(tID *org.TaxIdentity) error
- type Category
- type CategoryTotal
- type Combo
- type Error
- type Localities
- type Locality
- type Rate
- type RateTotal
- type RateTotalSurcharge
- type RateValue
- type Region
- type Scheme
- type SchemeKeys
- type Schemes
- type Set
- type TaxableLine
- type Total
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterRegion ¶ added in v0.20.0
func RegisterRegion(region *Region)
RegisterRegion adds a new region to the shared global list of tax regions.
func ValidateTaxIdentity ¶ added in v0.28.0
func ValidateTaxIdentity(tID *org.TaxIdentity) error
ValidateTaxIdentity attempts to find a matching region definition (if available) and runs tax identity validation.
Types ¶
type Category ¶
type Category struct {
Code org.Code `json:"code" jsonschema:"title=Code"`
Name i18n.String `json:"name" jsonschema:"title=Name"`
Desc i18n.String `json:"desc,omitempty" jsonschema:"title=Description"`
// Retained when true implies that the tax amount will be retained
// by the buyer on behalf of the supplier, and thus subtracted from
// the invoice taxable base total. Typically used for taxes related to
// income.
Retained bool `json:"retained,omitempty" jsonschema:"title=Retained"`
// Specific tax definitions inside this category.
Rates []*Rate `json:"rates" jsonschema:"title=Rates"`
}
Category contains the definition of a general type of tax inside a region.
type CategoryTotal ¶
type CategoryTotal struct {
Code org.Code `json:"code" jsonschema:"title=Code"`
Retained bool `json:"retained,omitempty" jsonschema:"title=Retained"`
Rates []*RateTotal `json:"rates" jsonschema:"title=Rates"`
Base num.Amount `json:"base" jsonschema:"title=Base"`
Amount num.Amount `json:"amount" jsonschema:"title=Amount"`
Surcharge *num.Amount `json:"surcharge,omitempty" jsonschema:"title=Surcharge"`
}
CategoryTotal groups together all rates inside a given category.
type Combo ¶ added in v0.21.0
type Combo struct {
// Tax category code from those available inside a region.
Category org.Code `json:"cat" jsonschema:"title=Category"`
// Rate within a category to apply.
Rate org.Key `json:"rate,omitempty" jsonschema:"title=Rate"`
// Percent defines the percentage set manually or determined from the rate key.
Percent num.Percentage `json:"percent" jsonschema:"title=Percent"`
// Some countries require an additional surcharge.
Surcharge *num.Percentage `json:"surcharge,omitempty" jsonschema:"title=Surcharge"`
// contains filtered or unexported fields
}
Combo represents the tax combination of a category code and rate key. The percent and retained attributes will be determined automatically from the Rate key if set during calculation.
type Error ¶ added in v0.22.1
Error is a general wrapper around tax errors produced during run time, typically during calculations. Not to be confused with errors produced from definition validation.
const ( ErrMissingRegion Error = "missing-region" ErrInvalidCategory Error = "invalid-category" ErrInvalidRate Error = "invalid-rate" ErrInvalidDate Error = "invalid-date" ErrInvalidPricesInclude Error = "invalid-prices-include" )
Standard list of tax errors
func (Error) WithMessage ¶ added in v0.22.1
WithMessage wraps around the original error so we can use if for matching and adds a human message.
type Localities ¶ added in v0.27.0
type Localities []Locality
Localities stores an array of locality objects used to describe areas sub-divisions inside a region.
type Locality ¶ added in v0.27.0
type Locality struct {
// Code
Code l10n.Code `json:"code" jsonschema:"title=Code"`
// Name of the locality with local and hopefully international
// translations.
Name i18n.String `json:"name" jsonschema:"title=Name"`
// Any additional information
Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"`
}
Locality represents an area inside a region, like a province or a state, which shares the basic definitions of the region, but may vary in some validation rules.
type Rate ¶
type Rate struct {
// Key identifies this rate within the system
Key org.Key `json:"key" jsonschema:"title=Key"`
Name i18n.String `json:"name" jsonschema:"title=Name"`
Desc i18n.String `json:"desc,omitempty" jsonschema:"title=Description"`
// Values contains a list of Value objects that contain the
// current and historical percentage values for the rate;
// order is important, newer values should come before
// older values.
Values []*RateValue `json:"values" jsonschema:"title=Values"`
}
Rate defines a single rate inside a category
type RateTotal ¶
type RateTotal struct {
Key org.Key `json:"key,omitempty" jsonschema:"title=Key"`
Base num.Amount `json:"base" jsonschema:"title=Base"`
Percent num.Percentage `json:"percent" jsonschema:"title=Percent"`
// Total amount of rate, excluding surcharges
Amount num.Amount `json:"amount" jsonschema:"title=Amount"`
Surcharge *RateTotalSurcharge `json:"surcharge,omitempty" jsonschema:"title=Surcharge"`
}
RateTotal contains a sum of all the tax rates in the document with a matching category and rate. The Key is optional as we may be using the percentage to group rates.
type RateTotalSurcharge ¶ added in v0.25.0
type RateTotalSurcharge struct {
Percent num.Percentage `json:"percent" jsonschema:"title=Percent"`
Amount num.Amount `json:"amount" jsonschema:"title=Amount"`
}
RateTotalSurcharge reflects the sum surcharges inside the rate.
type RateValue ¶ added in v0.20.0
type RateValue struct {
// Date from which this value should be applied.
Since *cal.Date `json:"since,omitempty" jsonschema:"title=Since"`
// Percent rate that should be applied
Percent num.Percentage `json:"percent" jsonschema:"title=Percent"`
// An additional surcharge to apply.
Surcharge *num.Percentage `json:"surcharge,omitempty" jsonschema:"title=Surcharge"`
// When true, this value should no longer be used.
Disabled bool `json:"disabled,omitempty" jsonschema:"title=Disabled"`
}
RateValue contains a percentage rate or fixed amount for a given date range. Fiscal policy changes mean that rates are not static so we need to be able to apply the correct rate for a given period.
type Region ¶
type Region struct {
// Name of the region
Name i18n.String `json:"name" jsonschema:"title=Name"`
// Country code for the region
Country l10n.CountryCode `json:"country" jsonschema:"title=Code"`
// Locality, city, province, county, or similar code inside the country, if needed.
Locality l10n.Code `json:"locality,omitempty" jsonschema:"title=Locality"`
// List of sub-localities inside a region.
Localities Localities `json:"localities,omitempty" jsonschema:"title=Localities"`
// Currency used by the region for tax purposes.
Currency currency.Code `json:"currency" jsonschema:"title=Currency"`
// Set of specific scheme definitions inside the region.
Schemes Schemes `json:"schemes,omitempty" jsonschema:"title=Schemes"`
// List of tax categories.
Categories []*Category `json:"categories" jsonschema:"title=Categories"`
// ValidateDocument is a method to use to validate a document in a given region.
ValidateDocument func(doc interface{}) error `json:"-"`
// ValidateTaxIdentity is a method used to check tax codes for the given
// region.
ValidateTaxIdentity func(tID *org.TaxIdentity) error `json:"-"`
}
Region defines the holding structure for a regions categories and subsequent Rates and Values.
func AllRegions ¶ added in v0.20.0
func AllRegions() []*Region
AllRegions provides an array of all the region codes to definitions.
func RegionFor ¶ added in v0.20.0
func RegionFor(country l10n.CountryCode, locality l10n.Code) *Region
RegionFor returns the region definition for country and locality combination or nil if no match was found.
func (*Region) CurrencyDef ¶ added in v0.20.0
CurrencyDef provides the currency definition object for the region.
type Scheme ¶ added in v0.20.0
type Scheme struct {
// Key used to identify this scheme
Key org.Key `json:"key" jsonschema:"title=Key"`
// Name of this scheme.
Name i18n.String `json:"name" jsonschema:"title=Name"`
// Human details describing what this scheme is used for.
Description i18n.String `json:"description,omitempty" jsonschema:"title=Description"`
// List of tax category codes that can be used when this scheme is
// applied.
Categories []org.Code `json:"categories,omitempty" jsonschema:"title=Category Codes"`
// Notes defines messages that should be added to a document
// when this scheme is used.
Note *org.Note `json:"note,omitempty" jsonschema:"title=Note"`
}
Scheme contains the definition of a scheme that belongs to a region and can be used to simplify validation processes for document contents.
type SchemeKeys ¶ added in v0.20.0
SchemeKeys stores a list of keys that makes it easier to perform matches.
type Schemes ¶ added in v0.20.0
type Schemes []*Scheme
Schemes defines an array of scheme objects with helper functions.
type Set ¶ added in v0.21.0
type Set []*Combo
Set defines a list of tax categories and their rates to be used alongside taxable items.
type TaxableLine ¶
TaxableLine defines what we expect from a line in order to subsequently calculate the taxes that need to be added or retained.
type Total ¶
type Total struct {
// Grouping of all the taxes by their category
Categories []*CategoryTotal `json:"categories,omitempty" jsonschema:"title=Categories"`
// Total value of all the taxes applied.
Sum num.Amount `json:"sum" jsonschema:"title=Sum"`
}
Total contains a set of Category Totals which in turn contain all the accumulated taxes contained in the document. The resulting `sum` is that value that should be added to the payable total.