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.