Documentation
¶
Index ¶
- Variables
- type Charge
- type Charges
- type CorrectionKey
- type CorrectionMethodKey
- type Delivery
- type Discount
- type Discounts
- type Invoice
- type Line
- type LineCharge
- type LineDiscount
- type Lines
- type Ordering
- type Outlay
- type Outlays
- type Payment
- type Preceding
- type Tax
- type TaxScheme
- type Totals
- type TypeKey
Constants ¶
This section is empty.
Variables ¶
var CorrectionKeyList = []CorrectionKey{ CodeCorrectionKey, SeriesCorrectionKey, IssueDateCorrectionKey, SupplierCorrectionKey, CustomerCorrectionKey, SupplierNameCorrectionKey, CustomerNameCorrectionKey, SupplierTaxIDCorrectionKey, CustomerTaxIDCorrectionKey, SupplierAddressCorrectionKey, CustomerAddressCorrectionKey, LineCorrectionKey, PeriodCorrectionKey, TypeCorrectionKey, LegalDetailsCorrectionKey, TaxRateCorrectionKey, TaxAmountCorrectionKey, TaxBaseCorrectionKey, TaxCorrectionKey, TaxRetainedCorrectionKey, RefundCorrectionKey, DiscountCorrectionKey, JudicialCorrectionKey, InsolvencyCorrectionKey, }
CorrectionKeyList provides a fixed list of all the correction codes that are currently supported by GOBL.
var CorrectionMethodKeyList = []CorrectionMethodKey{ CompleteCorrectionMethodKey, PartialCorrectionMethodKey, DiscountCorrectionMethodKey, AuthorizedCorrectionMethodKey, }
CorrectionMethodKeyList provides a fixed list of codes for validation purposes.
var UNTDID1001TypeKeyMap = map[TypeKey]string{ TypeKeyProforma: "325", TypeKeyPartial: "326", TypeKeyCommercial: "380", TypeKeySimplified: "380", TypeKeyCorrected: "384", TypeKeyCreditNote: "381", TypeKeySelfBilled: "389", }
UNTDID1001TypeKeyMap offers a way to convert the GOBL invoice type code into one supported by our subset of the UNTDID 1001 official list.
Functions ¶
This section is empty.
Types ¶
type Charge ¶ added in v0.13.0
type Charge struct { // Unique identifying for the discount entry UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Line number inside the list of discounts Index int `json:"i" jsonschema:"title=Index"` // Code to used to refer to the this charge Ref string `json:"ref,omitempty" jsonschema:"title=Reference"` // Base represents the value used as a base for percent calculations. // If not already provided, we'll take the invoices sum before // discounts. Base *num.Amount `json:"base,omitempty" jsonschema:"title=Base"` // Percentage to apply to the invoice's Sum Percent *num.Percentage `json:"percent,omitempty" jsonschema:"title=Percent"` // Amount to apply Amount num.Amount `json:"amount" jsonschema:"title=Amount"` // List of taxes to apply to the charge Taxes tax.Set `json:"taxes,omitempty" jsonschema:"title=Taxes"` // Code for why was this charge applied? Code string `json:"code,omitempty" jsonschema:"title=Reason Code"` // Text description as to why the charge was applied Reason string `json:"reason,omitempty" jsonschema:"title=Reason"` // Additional semi-structured information. Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"` }
Charge represents a surchange applied to the complete document independent from the individual lines.
func (*Charge) GetTaxes ¶ added in v0.20.0
GetTaxes responds with the array of tax rates applied to this line.
type Charges ¶ added in v0.13.0
type Charges []*Charge
Charges represents an array of charge objects
type CorrectionKey ¶ added in v0.20.0
type CorrectionKey string
CorrectionKey helps identify from a set of reasons why this correction is happening
const ( CodeCorrectionKey CorrectionKey = "code" // Invoice Code SeriesCorrectionKey CorrectionKey = "series" // Invoice series number IssueDateCorrectionKey CorrectionKey = "issue-date" // Issue Date SupplierCorrectionKey CorrectionKey = "supplier" // General supplier details CustomerCorrectionKey CorrectionKey = "customer" // General customer details SupplierNameCorrectionKey CorrectionKey = "supplier-name" CustomerNameCorrectionKey CorrectionKey = "customer-name" SupplierTaxIDCorrectionKey CorrectionKey = "supplier-tax-id" CustomerTaxIDCorrectionKey CorrectionKey = "customer-tax-id" SupplierAddressCorrectionKey CorrectionKey = "supplier-addr" CustomerAddressCorrectionKey CorrectionKey = "customer-addr" LineCorrectionKey CorrectionKey = "line" PeriodCorrectionKey CorrectionKey = "period" TypeCorrectionKey CorrectionKey = "type" LegalDetailsCorrectionKey CorrectionKey = "legal-details" TaxRateCorrectionKey CorrectionKey = "tax-rate" TaxAmountCorrectionKey CorrectionKey = "tax-amount" TaxBaseCorrectionKey CorrectionKey = "tax-base" TaxCorrectionKey CorrectionKey = "tax" // General issue with tax calculations TaxRetainedCorrectionKey CorrectionKey = "tax-retained" // Error in retained tax calculations RefundCorrectionKey CorrectionKey = "refund" // Goods or materials have been returned to supplier DiscountCorrectionKey CorrectionKey = "discount" // New discounts or rebates added JudicialCorrectionKey CorrectionKey = "judicial" // Court ruling or administrative decision InsolvencyCorrectionKey CorrectionKey = "insolvency" // the customer is insolvent and cannot pay )
List of currently supported correction codes. These are determined by local needs and could be increased as new regions are added with local requirements.
func (CorrectionKey) Validate ¶ added in v0.20.0
func (cc CorrectionKey) Validate() error
Validate ensures the correction code is part of the accepted list
type CorrectionMethodKey ¶ added in v0.20.0
type CorrectionMethodKey string
CorrectionMethodKey identifies that type of correction being applied.
const ( CompleteCorrectionMethodKey CorrectionMethodKey = "complete" // everything has changed PartialCorrectionMethodKey CorrectionMethodKey = "partial" // only differences corrected DiscountCorrectionMethodKey CorrectionMethodKey = "discount" // deducted from future invoices AuthorizedCorrectionMethodKey CorrectionMethodKey = "authorized" // Permitted by tax agency )
Defined list of correction methods
func (CorrectionMethodKey) Validate ¶ added in v0.20.0
func (cc CorrectionMethodKey) Validate() error
Validate ensures the correction code is part of the accepted list
type Delivery ¶
type Delivery struct { // The party who will receive delivery of the goods defined in the invoice and is not responsible for taxes. Receiver *org.Party `json:"receiver,omitempty" jsonschema:"title=Receiver"` // When the goods should be expected Date *cal.Date `json:"date,omitempty" jsonschema:"title=Date"` // Start of a n invoicing or delivery period StartDate *cal.Date `json:"start_date,omitempty" jsonschema:"title=Start Date"` // End of a n invoicing or delivery period EndDate *cal.Date `json:"end_date,omitempty" jsonschema:"title=End Date"` }
Delivery covers the details of the destination for the products described in the invoice body.
type Discount ¶ added in v0.13.0
type Discount struct { // Unique identifying for the discount entry UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Line number inside the list of discounts Index int `json:"i" jsonschema:"title=Index"` // Reference or ID for this Discount Ref string `json:"ref,omitempty" jsonschema:"title=Reference"` // Base represents the value used as a base for percent calculations. // If not already provided, we'll take the invoices sum. Base *num.Amount `json:"base,omitempty" jsonschema:"title=Base"` // Percentage to apply to the invoice's Sum Percent *num.Percentage `json:"percent,omitempty" jsonschema:"title=Percent"` // Amount to apply Amount num.Amount `json:"amount" jsonschema:"title=Amount"` // List of taxes to apply to the discount Taxes tax.Set `json:"taxes,omitempty" jsonschema:"title=Taxes"` // Code for the reason this discount applied Code string `json:"code,omitempty" jsonschema:"title=Reason Code"` // Text description as to why the discount was applied Reason string `json:"reason,omitempty" jsonschema:"title=Reason"` // Additional semi-structured information. Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"` }
Discount represents an allowance applied to the complete document independent from the individual lines. These have more in common with Invoice Lines than anything else, as each discount must have the correct taxes defined.
func (*Discount) GetTaxes ¶ added in v0.20.0
GetTaxes responds with the array of tax rates applied to this line.
type Discounts ¶ added in v0.13.0
type Discounts []*Discount
Discounts represents an array of discounts.
type Invoice ¶
type Invoice struct { // Unique document ID. Not required, but always recommended in addition to the Code. UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Sequential code used to identify this invoice in tax declarations. Code string `json:"code" jsonschema:"title=Code"` // Used in addition to the Code in some regions. Series string `json:"series,omitempty" jsonschema:"title=Series"` // Functional type of the invoice, default is always 'commercial'. TypeKey TypeKey `json:"type_key,omitempty" jsonschema:"title=Type Key"` // Currency for all invoice totals. Currency currency.Code `json:"currency" jsonschema:"title=Currency"` // Exchange rates to be used when converting the invoices monetary values into other currencies. ExchangeRates currency.ExchangeRates `json:"exchange_rates,omitempty" jsonschema:"title=Exchange Rates"` // Special tax configuration for billing. Tax *Tax `json:"tax,omitempty" jsonschema:"title=Tax"` // Key information regarding a previous invoice and potentially details as to why it // was corrected. Preceding *Preceding `json:"preceding,omitempty" jsonschema:"title=Preceding Details"` // When the invoice was created. IssueDate cal.Date `json:"issue_date" jsonschema:"title=Issue Date"` // Date when the operation defined by the invoice became effective. OperationDate *cal.Date `json:"op_date,omitempty" jsonschema:"title=Operation Date"` // When the taxes of this invoice become accountable, if none set, the issue date is used. ValueDate *cal.Date `json:"value_date,omitempty" jsonschema:"title=Value Date"` // The taxable entity supplying the goods or services. Supplier *org.Party `json:"supplier" jsonschema:"title=Supplier"` // Legal entity receiving the goods or services, may be empty in certain circumstances such as simplified invoices. Customer *org.Party `json:"customer,omitempty" jsonschema:"title=Customer"` // List of invoice lines representing each of the items sold to the customer. Lines Lines `json:"lines,omitempty" jsonschema:"title=Lines"` // Discounts or allowances applied to the complete invoice Discounts Discounts `json:"discounts,omitempty" jsonschema:"title=Discounts"` // Charges or surcharges applied to the complete invoice Charges Charges `json:"charges,omitempty" jsonschema:"title=Charges"` // Expenses paid for by the supplier but invoiced directly to the customer. Outlays Outlays `json:"outlays,omitempty" jsonschema:"title=Outlays"` Ordering *Ordering `json:"ordering,omitempty" jsonschema:"title=Ordering Details"` Payment *Payment `json:"payment,omitempty" jsonschema:"title=Payment Details"` Delivery *Delivery `json:"delivery,omitempty" jsonschema:"title=Delivery Details"` // Summary of all the invoice totals, including taxes. Totals *Totals `json:"totals" jsonschema:"title=Totals"` // Unstructured information that is relevant to the invoice, such as correction or additional // legal details. Notes org.Notes `json:"notes,omitempty" jsonschema:"title=Notes"` // Additional semi-structured data that doesn't fit into the body of the invoice. Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"` }
Invoice represents a payment claim for goods or services supplied under conditions agreed between the supplier and the customer. In most cases the resulting document describes the actual financial commitment of goods or services ordered from the supplier.
func (*Invoice) Calculate ¶
Calculate performs all the calculations required for the invoice totals and taxes. If the original invoice only includes partial calculations, this will figure out what's missing.
func (*Invoice) RemoveIncludedTaxes ¶ added in v0.25.2
RemoveIncludedTaxes is a special function that will go through all prices which may include the tax included in the invoice, and remove them. The accuracy parameter is used to determine the additional exponent that will be added to prices before calculation with the aim of reducing rounding errors. An accuracy value of 2 is recommended.
A new invoice object is returned, leaving the original objects untouched.
type Line ¶
type Line struct { // Unique identifier for this line UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Line number inside the parent Index int `json:"i" jsonschema:"title=Index"` // Number of items Quantity num.Amount `json:"quantity" jsonschema:"title=Quantity"` // Details about what is being sold Item *org.Item `json:"item" jsonschema:"title=Item"` // Result of quantity multiplied by the item's price Sum num.Amount `json:"sum" jsonschema:"title=Sum"` // Discounts applied to this line Discounts []*LineDiscount `json:"discounts,omitempty" jsonschema:"title=Discounts"` // Charges applied to this line Charges []*LineCharge `json:"charges,omitempty" jsonschema:"title=Charges"` // Map of taxes to be applied and used in the invoice totals Taxes tax.Set `json:"taxes,omitempty" jsonschema:"title=Taxes"` // Total line amount after applying discounts to the sum. Total num.Amount `json:"total" jsonschema:"title=Total"` // Set of specific notes for this line that may be required for // clarification. Notes org.Notes `json:"notes,omitempty" jsonschema:"title=Notes"` }
Line is a single row in an invoice.
func (*Line) GetTaxes ¶ added in v0.20.0
GetTaxes responds with the array of tax rates applied to this line.
type LineCharge ¶ added in v0.13.0
type LineCharge struct { // Percentage if fixed amount not applied Percent *num.Percentage `json:"percent,omitempty" jsonschema:"title=Percent"` // Fixed or resulting charge amount to apply Amount num.Amount `json:"amount" jsonschema:"title=Amount"` // Reference code. Code string `json:"code,omitempty" jsonschema:"title=Code"` // Text description as to why the charge was applied Reason string `json:"reason,omitempty" jsonschema:"title=Reason"` }
LineCharge represents an amount added to the line, and will be applied before taxes. TODO: use UNTDID 7161 code list
func (*LineCharge) Validate ¶ added in v0.13.0
func (lc *LineCharge) Validate() error
Validate checks the line charge's fields.
type LineDiscount ¶ added in v0.13.0
type LineDiscount struct { // Percentage if fixed amount not applied Percent *num.Percentage `json:"percent,omitempty" jsonschema:"title=Percent"` // Fixed discount amount to apply Amount num.Amount `json:"amount" jsonschema:"title=Value"` // Reason code. Code string `json:"code,omitempty" jsonschema:"title=Code"` // Text description as to why the discount was applied Reason string `json:"reason,omitempty" jsonschema:"title=Reason"` }
LineDiscount represents an amount deducted from the line, and will be applied before taxes. TODO: use UNTDID 5189 code list
func (*LineDiscount) Validate ¶ added in v0.13.0
func (ld *LineDiscount) Validate() error
Validate checks the line discount's fields.
type Ordering ¶
type Ordering struct { // Party who is selling the goods and is not responsible for taxes Seller *org.Party `json:"seller,omitempty" jsonschema:"title=Seller"` }
Ordering allows additional order details to be appended
type Outlay ¶
type Outlay struct { // Unique identity for this outlay. UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Outlay number index inside the invoice for ordering. Index int `json:"i" jsonschema:"title=Index"` // When was the outlay made. Date *cal.Date `json:"date,omitempty" jsonschema:"title=Date"` // Invoice number or other reference detail used to identify the outlay. Code string `json:"code,omitempty" jsonschema:"title=Code"` // Series of the outlay invoice. Series string `json:"series,omitempty" jsonschema:"title=Series"` // Details on what the outlay was. Description string `json:"desc" jsonschema:"title=Description"` // Who was the supplier of the outlay Supplier *org.Party `json:"supplier,omitempty" jsonschema:"title=Supplier"` // Amount paid by the supplier. Amount num.Amount `json:"amount" jsonschema:"title=Amount"` }
Outlay represents a reimbursable expense that was paid for by the supplier and invoiced separately by the third party directly to the customer. Most suppliers will want to include the expenses of their providers as part of their own operational costs. However, outlays are common in countries like Spain where it is typical for an accountant or lawyer to pay for notary fees, but forward the invoice to the customer.
type Outlays ¶
type Outlays []*Outlay
Outlays holds an array of Outlay objects used inside a billing document.
type Payment ¶
type Payment struct { // The party responsible for paying for the invoice, if not the customer. Payer *org.Party `json:"payer,omitempty" jsonschema:"title=Payer"` // Payment terms or conditions. Terms *pay.Terms `json:"terms,omitempty" jsonschema:"title=Terms"` // Any amounts that have been paid in advance and should be deducted from the amount due. Advances pay.Advances `json:"advances,omitempty" jsonschema:"title=Advances"` // Details on how payment should be made. Instructions *pay.Instructions `json:"instructions,omitempty" jsonschema:"title=Instructions"` }
Payment contains details as to how the invoice should be paid.
type Preceding ¶
type Preceding struct { // Preceding document's UUID if available can be useful for tracing. UUID *uuid.UUID `json:"uuid,omitempty" jsonschema:"title=UUID"` // Identity code of the previous invoice. Code string `json:"code" jsonschema:"title=Code"` // Additional identification details Series string `json:"series,omitempty" jsonschema:"title=Series"` // When the preceding invoice was issued. IssueDate cal.Date `json:"issue_date" jsonschema:"title=Issue Date"` // Tax period in which the previous invoice has an effect. Period *cal.Period `json:"period,omitempty" jsonschema:"title=Period"` // Specific codes for the corrections made. Corrections []CorrectionKey `json:"corrections,omitempty" jsonschema:"title=Corrections"` // How has the previous invoice been corrected? CorrectionMethod CorrectionMethodKey `json:"correction_method,omitempty" jsonschema:"title=Correction Method"` // Additional details regarding preceding invoice Notes string `json:"notes,omitempty" jsonschema:"title=Notes"` // Additional semi-structured data that may be useful in specific regions Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"` }
Preceding allows for information to be provided about a previous invoice that this one will replace or subtract from. If this is used, the invoice type code will most likely need to be set to `corrected` or `credit-note`.
type Tax ¶ added in v0.20.0
type Tax struct { // Category of the tax already included in the line item prices, especially // useful for B2C retailers with customers who prefer final prices inclusive of // tax. PricesInclude org.Code `json:"prices_include,omitempty" jsonschema:"title=Prices Include"` // Special tax schemes that apply to this invoice according to local requirements. Schemes tax.SchemeKeys `json:"schemes,omitempty" jsonschema:"title=Schemes"` // Any additional data that may be required for processing, but should never // be relied upon by recipients. Meta org.Meta `json:"meta,omitempty" jsonschema:"title=Meta"` }
Tax defines a summary of the taxes which may be applied to an invoice.
type TaxScheme ¶ added in v0.20.0
type TaxScheme string
TaxScheme allows for defining a specific or special scheme that applies to the billing document. Schemes are defined as needed for each region.
type Totals ¶
type Totals struct { // Sum of all line item sums Sum num.Amount `json:"sum" jsonschema:"title=Sum"` // Sum of all document level discounts Discount *num.Amount `json:"discount,omitempty" jsonschema:"title=Discount"` // Sum of all document level charges Charge *num.Amount `json:"charge,omitempty" jsonschema:"title=Charge"` // If prices include tax, this is the total tax included in the price. TaxIncluded *num.Amount `json:"tax_included,omitempty" jsonschema:"title=Tax Included"` // Sum of all line sums minus the discounts, plus the charges, without tax. Total num.Amount `json:"total" jsonschema:"title=Total"` // Summary of all the taxes included in the invoice. Taxes *tax.Total `json:"taxes,omitempty" jsonschema:"title=Tax Totals"` // Total amount of tax to apply to the invoice. Tax num.Amount `json:"tax,omitempty" jsonschema:"title=Tax"` // Grand total after all taxes have been applied. TotalWithTax num.Amount `json:"total_with_tax" jsonschema:"title=Total with Tax"` // Total paid in outlays that need to be reimbursed Outlays *num.Amount `json:"outlays,omitempty" jsonschema:"title=Outlay Totals"` // Total amount to be paid after applying taxes and outlays. Payable num.Amount `json:"payable" jsonschema:"title=Payable"` // Total amount already paid in advance. Advances *num.Amount `json:"advance,omitempty" jsonschema:"title=Advance"` // How much actually needs to be paid now. Due *num.Amount `json:"due,omitempty" jsonschema:"title=Due"` }
Totals contains the summaries of all calculations for the invoice.
type TypeKey ¶ added in v0.20.0
type TypeKey string
TypeKey defines the type of invoice document according to a subset of the UNTDID 1001 standard list.
const ( TypeKeyCommercial TypeKey = "" // Commercial Invoice, default TypeKeyProforma TypeKey = "proforma" // Proforma invoice TypeKeySimplified TypeKey = "simplified" // Simplified Invoice TypeKeyPartial TypeKey = "partial" // Partial Invoice TypeKeyCorrected TypeKey = "corrected" // Corrected Invoice TypeKeyCreditNote TypeKey = "credit-note" // Credit Note TypeKeySelfBilled TypeKey = "self-billed" // Self Billed Invoice )
Predefined list of the invoice type codes officially supported.
func (TypeKey) UNTDID1001 ¶ added in v0.20.0
UNTDID1001 provides the official code number assigned to the type.