Documentation
¶
Index ¶
- func NormalizeTaxIdentity(tID *org.TaxIdentity) error
- func RegisterRegion(region *Region)
- func ValidateTaxIdentity(tID *org.TaxIdentity) error
- type Category
- type CategoryTotal
- type Combo
- type Error
- 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 NormalizeTaxIdentity ¶ added in v0.29.1
func NormalizeTaxIdentity(tID *org.TaxIdentity) error
NormalizeTaxIdentity attempts to find a matching region definition (if available) and runs tax identity normalization.
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 (calculated if rate present). Percent num.Percentage `json:"percent" jsonschema:"title=Percent" jsonschema_extras:"calculated=true"` // Some countries require an additional surcharge (calculated if rate present). Surcharge *num.Percentage `json:"surcharge,omitempty" jsonschema:"title=Surcharge" jsonschema_extras:"calculated=true"` // 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 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 []Locality `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:"-"` // NormalizeTaxIdentity is a special method used to normalize the contents // or a local tax identity. Typically this is used as part of the // "Calculate" processes. NormalizeTaxIdentity 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"` // Note defines a message 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.