Documentation ¶
Overview ¶
Package mx provides the Mexican tax regime.
Index ¶
- Constants
- Variables
- func Calculate(doc interface{}) error
- func DetermineTaxCodeType(code cbc.Code) cbc.Key
- func New() *tax.Regime
- func Validate(doc interface{}) error
- type FoodVouchers
- type FoodVouchersEmployee
- type FoodVouchersLine
- type FuelAccountBalance
- type FuelAccountItem
- type FuelAccountLine
- type FuelAccountTax
Constants ¶
const ( ExtKeyCFDIFiscalRegime = "mx-cfdi-fiscal-regime" ExtKeyCFDIUse = "mx-cfdi-use" ExtKeyCFDIProdServ = "mx-cfdi-prod-serv" // name from XML field: ClaveProdServ )
Mexican CFDI extension keys required by the SAT (tax authority in Mexico) in all invoices and cannot be determined automatically.
const ( CURPPattern = "" /* 132-byte string literal not displayed */ SocialSecurityPattern = "^[0-9]{11}$" )
Complement's Codes Patterns
const ( FuelAccountInterimPrecision = 3 FuelAccountFinalPrecision = 2 FuelAccountRatePrecision = 6 )
Constants for the precision of complement's amounts
const ( FuelAccountTaxCodeVAT = cbc.Code("IVA") FuelAccountTaxCodeIEPS = cbc.Code("IEPS") )
Constants for the complement's allowed tax codes
const ( KeySATFormaPago cbc.Key = "sat-forma-pago" // for mapping to c_FormaPago’s codes KeySATTipoDeComprobante cbc.Key = "sat-tipo-de-comprobante" // for mapping to c_TipoDeComprobante’s codes KeySATTipoRelacion cbc.Key = "sat-tipo-relacion" // for mapping to c_TipoRelacion’s codes KeySATImpuesto cbc.Key = "sat-impuesto" // for mapping to c_Impuesto’s codes )
Custom keys used typically in meta or codes information.
const ( MeansKeyWallet cbc.Key = "wallet" MeansKeyGroceryVouchers cbc.Key = "grocery-vouchers" MeansKeyInKind cbc.Key = "in-kind" MeansKeySubrogation cbc.Key = "subrogation" MeansKeyConsignment cbc.Key = "consignment" MeansKeyDebtRelief cbc.Key = "debt-relief" MeansKeyNovation cbc.Key = "novation" MeansKeyMerger cbc.Key = "merger" MeansKeyRemission cbc.Key = "remission" MeansKeyExpiration cbc.Key = "expiration" MeansKeySatisfyCreditor cbc.Key = "satisfy-creditor" MeansKeyDebit cbc.Key = "debit" MeansKeyServices cbc.Key = "services" MeansKeyAdvance cbc.Key = "advance" MeansKeyIntermediary cbc.Key = "intermediary" )
Regime Specific Payment Means Extension Keys
const ( TaxCategoryRVAT cbc.Code = "RVAT" // IVA (Retenido) TaxCategoryIEPS cbc.Code = "IEPS" // Impuesto Especial sobre Producción y Servicios TaxCategoryRIEPS cbc.Code = "RIEPS" // Impuesto Especial sobre Producción y Servicios (Retenido) TaxCategoryISR cbc.Code = "ISR" // Impuesto Sobre la Renta )
Local tax categories
const ( TaxIdentityTypePerson cbc.Key = "person" TaxIdentityTypeCompany cbc.Key = "company" )
Tax Identity Type
const ( TaxIdentityPatternPerson = `^([A-ZÑ&]{4})([0-9]{6})([A-Z0-9]{3})$` TaxIdentityPatternCompany = `^([A-ZÑ&]{3})([0-9]{6})([A-Z0-9]{3})$` )
Tax Identity Patterns
const (
FoodVouchersFinalPrecision = 2
)
Constants for the precision of the complement's amounts
const (
StampProviderSATUUID cbc.Key = "sat-uuid" // a.k.a. Folio Fiscal
)
SAT official codes to include in stamps.
const (
TaxIdentityCodeForeign cbc.Code = "XEXX010101000"
)
Constants used to specific tax identity codes.
const (
TaxRateExempt cbc.Key = "exempt"
)
Local tax rates
Variables ¶
var ( CURPRegexp = regexp.MustCompile(CURPPattern) SocialSecurityRegexp = regexp.MustCompile(SocialSecurityPattern) )
Complement's Codes Regexps
var ( TaxIdentityRegexpPerson = regexp.MustCompile(TaxIdentityPatternPerson) TaxIdentityRegexpCompany = regexp.MustCompile(TaxIdentityPatternCompany) )
Tax Identity Regexp
var FuelAccountValidTaxCodes = []interface{}{ FuelAccountTaxCodeVAT, FuelAccountTaxCodeIEPS, }
FuelAccountValidTaxCodes lists of the complement's allowed tax codes
Functions ¶
func Calculate ¶
func Calculate(doc interface{}) error
Calculate performs regime specific calculations.
func DetermineTaxCodeType ¶
DetermineTaxCodeType determines the type of tax code or provides an empty key if it looks invalid.
Types ¶
type FoodVouchers ¶ added in v0.61.0
type FoodVouchers struct { // Customer's employer registration number (maps to `registroPatronal`). EmployerRegistration string `json:"employer_registration,omitempty" jsonschema:"title=Employer Registration"` // Customer's account number (maps to `numeroDeCuenta`). AccountNumber string `json:"account_number" jsonschema:"title=Account Number"` // Sum of all line amounts (calculated, maps to `total`). Total num.Amount `json:"total" jsonschema:"title=Total" jsonschema_extras:"calculated=true"` // List of food vouchers issued to the customer's employees (maps to `Conceptos`). Lines []*FoodVouchersLine `json:"lines" jsonschema:"title=Lines"` }
FoodVouchers carries the data to produce a CFDI's "Complemento de Vales de Despensa" (version 1.0) providing detailed information about food vouchers issued by an e-wallet supplier to its customer's employees.
This struct maps to the `ValesDeDespensa` root node in the CFDI's complement.
func (*FoodVouchers) Calculate ¶ added in v0.61.0
func (fvc *FoodVouchers) Calculate() error
Calculate performs the complement's calculations and normalisations.
func (*FoodVouchers) Validate ¶ added in v0.61.0
func (fvc *FoodVouchers) Validate() error
Validate checks the FoodVouchers data according to the SAT's rules for the "Complemento de Vales de Despensa".
type FoodVouchersEmployee ¶ added in v0.60.0
type FoodVouchersEmployee struct { // Employee's tax identity code (maps to `rfc`). TaxCode cbc.Code `json:"tax_code" jsonschema:"title=Employee's Tax Identity Code"` // Employee's CURP ("Clave Única de Registro de Población", maps to `curp`). CURP cbc.Code `json:"curp" jsonschema:"title=Employee's CURP"` // Employee's name (maps to `nombre`). Name string `json:"name" jsonschema:"title=Employee's Name"` // Employee's Social Security Number (maps to `numSeguridadSocial`). SocialSecurity cbc.Code `json:"social_security,omitempty" jsonschema:"title=Employee's Social Security Number"` }
FoodVouchersEmployee represents an employee that received a food voucher. It groups employee related field that appears under the `Concepto` node in the CFDI's complement.
func (*FoodVouchersEmployee) Validate ¶ added in v0.60.0
func (fve *FoodVouchersEmployee) Validate() error
Validate checks the FoodVouchersEmployee data is valid.
type FoodVouchersLine ¶ added in v0.60.0
type FoodVouchersLine struct { // Identifier of the e-wallet that received the food voucher (maps to `Identificador`). EWalletID cbc.Code `json:"e_wallet_id" jsonschema:"title=E-wallet Identifier"` // Date and time of the food voucher's issue (maps to `Fecha`). IssueDateTime cal.DateTime `json:"issue_date_time" jsonschema:"title=Issue Date and Time"` // Employee that received the food voucher. Employee *FoodVouchersEmployee `json:"employee,omitempty" jsonschema:"title=Employee"` // Amount of the food voucher (maps to `importe`). Amount num.Amount `json:"amount" jsonschema:"title=Amount"` }
FoodVouchersLine represents a single food voucher issued to the e-wallet of one of the customer's employees. It maps to one `Concepto` node in the CFDI's complement.
func (*FoodVouchersLine) Validate ¶ added in v0.60.0
func (fvl *FoodVouchersLine) Validate() error
Validate checks the FoodVouchersLine data is valid.
type FuelAccountBalance ¶ added in v0.60.0
type FuelAccountBalance struct { // Customer's account number (maps to `NumeroDeCuenta`). AccountNumber string `json:"account_number" jsonschema:"title=Account Number"` // Sum of all line totals (i.e. taxes not included) (calculated, maps to `SubTotal`). Subtotal num.Amount `json:"subtotal" jsonschema:"title=Subtotal" jsonschema_extras:"calculated=true"` // Grand total after taxes have been applied (calculated, maps to `Total`). Total num.Amount `json:"total" jsonschema:"title=Total" jsonschema_extras:"calculated=true"` // List of fuel purchases made with the customer's e-wallets (maps to `Conceptos`). Lines []*FuelAccountLine `json:"lines" jsonschema:"title=Lines"` }
FuelAccountBalance carries the data to produce a CFDI's "Complemento de Estado de Cuenta de Combustibles para Monederos Electrónicos" (version 1.2 revision B) providing detailed information about fuel purchases made with electronic wallets. In Mexico, e-wallet suppliers are required to report this complementary information in the invoices they issue to their customers.
This struct maps to the `EstadoDeCuentaCombustible` root node in the CFDI's complement.
func (*FuelAccountBalance) Calculate ¶ added in v0.60.0
func (fab *FuelAccountBalance) Calculate() error
Calculate performs the complement's calculations and normalisations.
func (*FuelAccountBalance) Validate ¶ added in v0.60.0
func (fab *FuelAccountBalance) Validate() error
Validate ensures that the complement's data is valid.
type FuelAccountItem ¶ added in v0.60.0
type FuelAccountItem struct { // Type of fuel (one of `c_ClaveTipoCombustible` codes, maps to `TipoCombustible`). Type cbc.Code `json:"type" jsonschema:"title=Type"` // Reference unit of measure used in the price and the quantity (maps to `Unidad`). Unit org.Unit `json:"unit,omitempty" jsonschema:"title=Unit"` // Name of the fuel (maps to `NombreCombustible`). Name string `json:"name" jsonschema:"title=Name"` // Base price of a single unit of the fuel without taxes (maps to `ValorUnitario`). Price num.Amount `json:"price" jsonschema:"title=Price"` }
FuelAccountItem provides the details of a fuel purchase. Its fields map to attributes of the `ConceptoEstadoDeCuentaCombustible` node in the CFDI's complement.
func (*FuelAccountItem) Validate ¶ added in v0.60.0
func (fai *FuelAccountItem) Validate() error
Validate ensures that the item's data is valid.
type FuelAccountLine ¶ added in v0.60.0
type FuelAccountLine struct { // Identifier of the e-wallet used to make the purchase (maps to `Identificador`). EWalletID cbc.Code `json:"e_wallet_id" jsonschema:"title=E-wallet Identifier"` // Date and time of the purchase (maps to `Fecha`). PurchaseDateTime cal.DateTime `json:"purchase_date_time" jsonschema:"title=Purchase Date and Time"` // Tax Identity Code of the fuel's vendor (maps to `Rfc`) VendorTaxCode cbc.Code `json:"vendor_tax_code" jsonschema:"title=Vendor's Tax Identity Code"` // Code of the service station where the purchase was made (maps to `ClaveEstacion`). ServiceStationCode cbc.Code `json:"service_station_code" jsonschema:"title=Service Station Code"` // Amount of fuel units purchased (maps to `Cantidad`) Quantity num.Amount `json:"quantity" jsonschema:"title=Quantity"` // Details of the fuel purchased. Item *FuelAccountItem `json:"item" jsonschema:"title=Item"` // Identifier of the purchase (maps to `FolioOperacion`). PurchaseCode cbc.Code `json:"purchase_code" jsonschema:"title=Purchase Code"` // Result of quantity multiplied by the unit price (maps to `Importe`). Total num.Amount `json:"total" jsonschema:"title=Total"` // Map of taxes applied to the purchase (maps to `Traslados`). Taxes []*FuelAccountTax `json:"taxes" jsonschema:"title=Taxes"` }
FuelAccountLine represents a single fuel purchase made with an e-wallet issued by the invoice's supplier. It maps to one `ConceptoEstadoDeCuentaCombustible` node in the CFDI's complement.
func (*FuelAccountLine) Validate ¶ added in v0.60.0
func (fal *FuelAccountLine) Validate() error
Validate ensures that the line's data is valid.
type FuelAccountTax ¶ added in v0.60.0
type FuelAccountTax struct { // Code that identifies the tax ("IVA" or "IEPS", maps to `Impuesto`) Code cbc.Code `json:"code" jsonschema:"title=Code"` // Rate applicable to either the line total (tasa) or the line quantity (cuota) (maps to `TasaOCuota`). Rate num.Amount `json:"rate" jsonschema:"title=Rate"` // Total amount of the tax once the rate has been applied (maps to `Importe`). Amount num.Amount `json:"amount" jsonschema:"title=Amount"` }
FuelAccountTax represents a single tax applied to a fuel purchase. It maps to one `Traslado` node in the CFDI's complement.
func (*FuelAccountTax) Validate ¶ added in v0.60.0
func (fat *FuelAccountTax) Validate() error
Validate ensures that the tax's data is valid.