Skip to content

Instantly share code, notes, and snippets.

@rvalyi
Created April 13, 2023 04:25
Show Gist options
  • Save rvalyi/d78d1e309694fb54cef38d938bc41917 to your computer and use it in GitHub Desktop.
Save rvalyi/d78d1e309694fb54cef38d938bc41917 to your computer and use it in GitHub Desktop.
from dataclasses import dataclass, field
from decimal import Decimal
from typing import List, Optional
__NAMESPACE__ = "http://www.sat.gob.mx/cfd/4"
@dataclass
class Comprobante:
"""
Estándar de Comprobante Fiscal Digital por Internet.
:ivar InformacionGlobal: Nodo condicional para precisar la
información relacionada con el comprobante global.
:ivar CfdiRelacionados: Nodo opcional para precisar la información
de los comprobantes relacionados.
:ivar Emisor: Nodo requerido para expresar la información del
contribuyente emisor del comprobante.
:ivar Receptor: Nodo requerido para precisar la información del
contribuyente receptor del comprobante.
:ivar Conceptos: Nodo requerido para listar los conceptos cubiertos
por el comprobante.
:ivar Impuestos: Nodo condicional para expresar el resumen de los
impuestos aplicables.
:ivar Complemento: Nodo opcional donde se incluye el complemento
Timbre Fiscal Digital de manera obligatoria y los nodos
complementarios determinados por el SAT, de acuerdo con las
disposiciones particulares para un sector o actividad
específica.
:ivar Addenda: Nodo opcional para recibir las extensiones al
presente formato que sean de utilidad al contribuyente. Para las
reglas de uso del mismo, referirse al formato origen.
:ivar Version: Atributo requerido con valor prefijado a 4.0 que
indica la versión del estándar bajo el que se encuentra
expresado el comprobante.
:ivar Serie: Atributo opcional para precisar la serie para control
interno del contribuyente. Este atributo acepta una cadena de
caracteres.
:ivar Folio: Atributo opcional para control interno del
contribuyente que expresa el folio del comprobante, acepta una
cadena de caracteres.
:ivar Fecha: Atributo requerido para la expresión de la fecha y hora
de expedición del Comprobante Fiscal Digital por Internet. Se
expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con
la hora local donde se expide el comprobante.
:ivar Sello: Atributo requerido para contener el sello digital del
comprobante fiscal, al que hacen referencia las reglas de
resolución miscelánea vigente. El sello debe ser expresado como
una cadena de texto en formato Base 64.
:ivar FormaPago: Atributo condicional para expresar la clave de la
forma de pago de los bienes o servicios amparados por el
comprobante.
:ivar NoCertificado: Atributo requerido para expresar el número de
serie del certificado de sello digital que ampara al
comprobante, de acuerdo con el acuse correspondiente a 20
posiciones otorgado por el sistema del SAT.
:ivar Certificado: Atributo requerido que sirve para incorporar el
certificado de sello digital que ampara al comprobante, como
texto en formato base 64.
:ivar CondicionesDePago: Atributo condicional para expresar las
condiciones comerciales aplicables para el pago del comprobante
fiscal digital por Internet. Este atributo puede ser
condicionado mediante atributos o complementos.
:ivar SubTotal: Atributo requerido para representar la suma de los
importes de los conceptos antes de descuentos e impuesto. No se
permiten valores negativos.
:ivar Descuento: Atributo condicional para representar el importe
total de los descuentos aplicables antes de impuestos. No se
permiten valores negativos. Se debe registrar cuando existan
conceptos con descuento.
:ivar Moneda: Atributo requerido para identificar la clave de la
moneda utilizada para expresar los montos, cuando se usa moneda
nacional se registra MXN. Conforme con la especificación ISO
4217.
:ivar TipoCambio: Atributo condicional para representar el tipo de
cambio FIX conforme con la moneda usada. Es requerido cuando la
clave de moneda es distinta de MXN y de XXX. El valor debe
reflejar el número de pesos mexicanos que equivalen a una unidad
de la divisa señalada en el atributo moneda. Si el valor está
fuera del porcentaje aplicable a la moneda tomado del catálogo
c_Moneda, el emisor debe obtener del PAC que vaya a timbrar el
CFDI, de manera no automática, una clave de confirmación para
ratificar que el valor es correcto e integrar dicha clave en el
atributo Confirmacion.
:ivar Total: Atributo requerido para representar la suma del
subtotal, menos los descuentos aplicables, más las
contribuciones recibidas (impuestos trasladados - federales y/o
locales, derechos, productos, aprovechamientos, aportaciones de
seguridad social, contribuciones de mejoras) menos los impuestos
retenidos federales y/o locales. Si el valor es superior al
límite que establezca el SAT en la Resolución Miscelánea Fiscal
vigente, el emisor debe obtener del PAC que vaya a timbrar el
CFDI, de manera no automática, una clave de confirmación para
ratificar que el valor es correcto e integrar dicha clave en el
atributo Confirmacion. No se permiten valores negativos.
:ivar TipoDeComprobante: Atributo requerido para expresar la clave
del efecto del comprobante fiscal para el contribuyente emisor.
:ivar Exportacion: Atributo requerido para expresar si el
comprobante ampara una operación de exportación.
:ivar MetodoPago: Atributo condicional para precisar la clave del
método de pago que aplica para este comprobante fiscal digital
por Internet, conforme al Artículo 29-A fracción VII incisos a y
b del CFF.
:ivar LugarExpedicion: Atributo requerido para incorporar el código
postal del lugar de expedición del comprobante (domicilio de la
matriz o de la sucursal).
:ivar Confirmacion: Atributo condicional para registrar la clave de
confirmación que entregue el PAC para expedir el comprobante con
importes grandes, con un tipo de cambio fuera del rango
establecido o con ambos casos. Es requerido cuando se registra
un tipo de cambio o un total fuera del rango establecido.
"""
class Meta:
namespace = "http://www.sat.gob.mx/cfd/4"
InformacionGlobal: Optional["Comprobante.InformacionGlobal"] = field(
default=None,
metadata={
"type": "Element",
}
)
CfdiRelacionados: List["Comprobante.CfdiRelacionados"] = field(
default_factory=list,
metadata={
"type": "Element",
}
)
Emisor: Optional["Comprobante.Emisor"] = field(
default=None,
metadata={
"type": "Element",
"required": True,
}
)
Receptor: Optional["Comprobante.Receptor"] = field(
default=None,
metadata={
"type": "Element",
"required": True,
}
)
Conceptos: Optional["Comprobante.Conceptos"] = field(
default=None,
metadata={
"type": "Element",
"required": True,
}
)
Impuestos: Optional["Comprobante.Impuestos"] = field(
default=None,
metadata={
"type": "Element",
}
)
Complemento: Optional["Comprobante.Complemento"] = field(
default=None,
metadata={
"type": "Element",
}
)
Addenda: Optional["Comprobante.Addenda"] = field(
default=None,
metadata={
"type": "Element",
}
)
Version: str = field(
init=False,
default="4.0",
metadata={
"type": "Attribute",
"required": True,
"white_space": "collapse",
}
)
Serie: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 25,
"white_space": "collapse",
"pattern": r"[^|]{1,25}",
}
)
Folio: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 40,
"white_space": "collapse",
"pattern": r"[^|]{1,40}",
}
)
Fecha: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"white_space": "collapse",
"pattern": r"(20[1-9][0-9])-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])",
}
)
Sello: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"white_space": "collapse",
}
)
FormaPago: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
}
)
NoCertificado: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 20,
"white_space": "collapse",
"pattern": r"[0-9]{20}",
}
)
Certificado: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"white_space": "collapse",
}
)
CondicionesDePago: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 1000,
"white_space": "collapse",
"pattern": r"[^|]{1,1000}",
}
)
SubTotal: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Descuento: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Moneda: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TipoCambio: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": Decimal("0.000001"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Total: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
TipoDeComprobante: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Exportacion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
MetodoPago: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
}
)
LugarExpedicion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Confirmacion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"length": 5,
"white_space": "collapse",
"pattern": r"[0-9a-zA-Z]{5}",
}
)
@dataclass
class InformacionGlobal:
"""
:ivar Periodicidad: Atributo requerido para expresar el período
al que corresponde la información del comprobante global.
:ivar Meses: Atributo requerido para expresar el mes o los meses
al que corresponde la información del comprobante global.
:ivar Año: Atributo requerido para expresar el año al que
corresponde la información del comprobante global.
"""
Periodicidad: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Meses: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Año: Optional[int] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": 2021,
"white_space": "collapse",
}
)
@dataclass
class CfdiRelacionados:
"""
:ivar CfdiRelacionado: Nodo requerido para precisar la
información de los comprobantes relacionados.
:ivar TipoRelacion: Atributo requerido para indicar la clave de
la relación que existe entre éste que se está generando y el
o los CFDI previos.
"""
CfdiRelacionado: List["Comprobante.CfdiRelacionados.CfdiRelacionado"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
TipoRelacion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
@dataclass
class CfdiRelacionado:
"""
:ivar UUID: Atributo requerido para registrar el folio
fiscal (UUID) de un CFDI relacionado con el presente
comprobante, por ejemplo: Si el CFDI relacionado es un
comprobante de traslado que sirve para registrar el
movimiento de la mercancía. Si este comprobante se usa
como nota de crédito o nota de débito del comprobante
relacionado. Si este comprobante es una devolución sobre
el comprobante relacionado. Si éste sustituye a una
factura cancelada.
"""
UUID: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 36,
"white_space": "collapse",
"pattern": r"[a-f0-9A-F]{8}-[a-f0-9A-F]{4}-[a-f0-9A-F]{4}-[a-f0-9A-F]{4}-[a-f0-9A-F]{12}",
}
)
@dataclass
class Emisor:
"""
:ivar Rfc: Atributo requerido para registrar la Clave del
Registro Federal de Contribuyentes correspondiente al
contribuyente emisor del comprobante.
:ivar Nombre: Atributo requerido para registrar el nombre,
denominación o razón social del contribuyente inscrito en el
RFC, del emisor del comprobante.
:ivar RegimenFiscal: Atributo requerido para incorporar la clave
del régimen del contribuyente emisor al que aplicará el
efecto fiscal de este comprobante.
:ivar FacAtrAdquirente: Atributo condicional para expresar el
número de operación proporcionado por el SAT cuando se trate
de un comprobante a través de un PCECFDI o un PCGCFDISP.
"""
Rfc: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 12,
"max_length": 13,
"white_space": "collapse",
"pattern": r"[A-Z&Ñ]{3,4}[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]",
}
)
Nombre: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 300,
"white_space": "collapse",
"pattern": r"[^|]{1,300}",
}
)
RegimenFiscal: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
FacAtrAdquirente: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"length": 10,
"white_space": "collapse",
"pattern": r"[0-9]{10}",
}
)
@dataclass
class Receptor:
"""
:ivar Rfc: Atributo requerido para registrar la Clave del
Registro Federal de Contribuyentes correspondiente al
contribuyente receptor del comprobante.
:ivar Nombre: Atributo requerido para registrar el nombre(s),
primer apellido, segundo apellido, según corresponda,
denominación o razón social del contribuyente, inscrito en
el RFC, del receptor del comprobante.
:ivar DomicilioFiscalReceptor: Atributo requerido para registrar
el código postal del domicilio fiscal del receptor del
comprobante.
:ivar ResidenciaFiscal: Atributo condicional para registrar la
clave del país de residencia para efectos fiscales del
receptor del comprobante, cuando se trate de un extranjero,
y que es conforme con la especificación ISO 3166-1 alpha-3.
Es requerido cuando se incluya el complemento de comercio
exterior o se registre el atributo NumRegIdTrib.
:ivar NumRegIdTrib: Atributo condicional para expresar el número
de registro de identidad fiscal del receptor cuando sea
residente en el extranjero. Es requerido cuando se incluya
el complemento de comercio exterior.
:ivar RegimenFiscalReceptor: Atributo requerido para incorporar
la clave del régimen fiscal del contribuyente receptor al
que aplicará el efecto fiscal de este comprobante.
:ivar UsoCFDI: Atributo requerido para expresar la clave del uso
que dará a esta factura el receptor del CFDI.
"""
Rfc: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 12,
"max_length": 13,
"white_space": "collapse",
"pattern": r"[A-Z&Ñ]{3,4}[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]",
}
)
Nombre: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 300,
"white_space": "collapse",
"pattern": r"[^|]{1,300}",
}
)
DomicilioFiscalReceptor: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 5,
"white_space": "collapse",
"pattern": r"[0-9]{5}",
}
)
ResidenciaFiscal: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
}
)
NumRegIdTrib: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 40,
"white_space": "collapse",
}
)
RegimenFiscalReceptor: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
UsoCFDI: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
@dataclass
class Conceptos:
"""
:ivar Concepto: Nodo requerido para registrar la información
detallada de un bien o servicio amparado en el comprobante.
"""
Concepto: List["Comprobante.Conceptos.Concepto"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
@dataclass
class Concepto:
"""
:ivar Impuestos: Nodo condicional para capturar los
impuestos aplicables al presente concepto.
:ivar ACuentaTerceros: Nodo opcional para registrar
información del contribuyente Tercero, a cuenta del que
se realiza la operación.
:ivar InformacionAduanera: Nodo opcional para introducir la
información aduanera aplicable cuando se trate de ventas
de primera mano de mercancías importadas o se trate de
operaciones de comercio exterior con bienes o servicios.
:ivar CuentaPredial: Nodo opcional para asentar el número de
cuenta predial con el que fue registrado el inmueble, en
el sistema catastral de la entidad federativa de que
trate, o bien para incorporar los datos de
identificación del certificado de participación
inmobiliaria no amortizable.
:ivar ComplementoConcepto: Nodo opcional donde se incluyen
los nodos complementarios de extensión al concepto
definidos por el SAT, de acuerdo con las disposiciones
particulares para un sector o actividad específica.
:ivar Parte: Nodo opcional para expresar las partes o
componentes que integran la totalidad del concepto
expresado en el comprobante fiscal digital por Internet.
:ivar ClaveProdServ: Atributo requerido para expresar la
clave del producto o del servicio amparado por el
presente concepto. Es requerido y deben utilizar las
claves del catálogo de productos y servicios, cuando los
conceptos que registren por sus actividades correspondan
con dichos conceptos.
:ivar NoIdentificacion: Atributo opcional para expresar el
número de parte, identificador del producto o del
servicio, la clave de producto o servicio, SKU o
equivalente, propia de la operación del emisor, amparado
por el presente concepto. Opcionalmente se puede
utilizar claves del estándar GTIN.
:ivar Cantidad: Atributo requerido para precisar la cantidad
de bienes o servicios del tipo particular definido por
el presente concepto.
:ivar ClaveUnidad: Atributo requerido para precisar la clave
de unidad de medida estandarizada aplicable para la
cantidad expresada en el concepto. La unidad debe
corresponder con la descripción del concepto.
:ivar Unidad: Atributo opcional para precisar la unidad de
medida propia de la operación del emisor, aplicable para
la cantidad expresada en el concepto. La unidad debe
corresponder con la descripción del concepto.
:ivar Descripcion: Atributo requerido para precisar la
descripción del bien o servicio cubierto por el presente
concepto.
:ivar ValorUnitario: Atributo requerido para precisar el
valor o precio unitario del bien o servicio cubierto por
el presente concepto.
:ivar Importe: Atributo requerido para precisar el importe
total de los bienes o servicios del presente concepto.
Debe ser equivalente al resultado de multiplicar la
cantidad por el valor unitario expresado en el concepto.
No se permiten valores negativos.
:ivar Descuento: Atributo opcional para representar el
importe de los descuentos aplicables al concepto. No se
permiten valores negativos.
:ivar ObjetoImp: Atributo requerido para expresar si la
operación comercial es objeto o no de impuesto.
"""
Impuestos: Optional["Comprobante.Conceptos.Concepto.Impuestos"] = field(
default=None,
metadata={
"type": "Element",
}
)
ACuentaTerceros: Optional["Comprobante.Conceptos.Concepto.AcuentaTerceros"] = field(
default=None,
metadata={
"type": "Element",
}
)
InformacionAduanera: List["Comprobante.Conceptos.Concepto.InformacionAduanera"] = field(
default_factory=list,
metadata={
"type": "Element",
}
)
CuentaPredial: List["Comprobante.Conceptos.Concepto.CuentaPredial"] = field(
default_factory=list,
metadata={
"type": "Element",
}
)
ComplementoConcepto: Optional["Comprobante.Conceptos.Concepto.ComplementoConcepto"] = field(
default=None,
metadata={
"type": "Element",
}
)
Parte: List["Comprobante.Conceptos.Concepto.Parte"] = field(
default_factory=list,
metadata={
"type": "Element",
}
)
ClaveProdServ: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
NoIdentificacion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 100,
"white_space": "collapse",
"pattern": r"[^|]{1,100}",
}
)
Cantidad: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": Decimal("0.000001"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
ClaveUnidad: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Unidad: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 20,
"white_space": "collapse",
"pattern": r"[^|]{1,20}",
}
)
Descripcion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 1000,
"white_space": "collapse",
"pattern": r"[^|]{1,1000}",
}
)
ValorUnitario: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Descuento: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
ObjetoImp: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
@dataclass
class Impuestos:
"""
:ivar Traslados: Nodo opcional para asentar los
impuestos trasladados aplicables al presente
concepto.
:ivar Retenciones: Nodo opcional para asentar los
impuestos retenidos aplicables al presente concepto.
"""
Traslados: Optional["Comprobante.Conceptos.Concepto.Impuestos.Traslados"] = field(
default=None,
metadata={
"type": "Element",
}
)
Retenciones: Optional["Comprobante.Conceptos.Concepto.Impuestos.Retenciones"] = field(
default=None,
metadata={
"type": "Element",
}
)
@dataclass
class Traslados:
"""
:ivar Traslado: Nodo requerido para asentar la
información detallada de un traslado de
impuestos aplicable al presente concepto.
"""
Traslado: List["Comprobante.Conceptos.Concepto.Impuestos.Traslados.Traslado"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
@dataclass
class Traslado:
"""
:ivar Base: Atributo requerido para señalar la
base para el cálculo del impuesto, la
determinación de la base se realiza de
acuerdo con las disposiciones fiscales
vigentes. No se permiten valores negativos.
:ivar Impuesto: Atributo requerido para señalar
la clave del tipo de impuesto trasladado
aplicable al concepto.
:ivar TipoFactor: Atributo requerido para
señalar la clave del tipo de factor que se
aplica a la base del impuesto.
:ivar TasaOCuota: Atributo condicional para
señalar el valor de la tasa o cuota del
impuesto que se traslada para el presente
concepto. Es requerido cuando el atributo
TipoFactor tenga una clave que corresponda a
Tasa o Cuota.
:ivar Importe: Atributo condicional para señalar
el importe del impuesto trasladado que
aplica al concepto. No se permiten valores
negativos. Es requerido cuando TipoFactor
sea Tasa o Cuota.
"""
Base: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": Decimal("0.000001"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Impuesto: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TipoFactor: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TasaOCuota: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": Decimal("0.000000"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class Retenciones:
"""
:ivar Retencion: Nodo requerido para asentar la
información detallada de una retención de
impuestos aplicable al presente concepto.
"""
Retencion: List["Comprobante.Conceptos.Concepto.Impuestos.Retenciones.Retencion"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
@dataclass
class Retencion:
"""
:ivar Base: Atributo requerido para señalar la
base para el cálculo de la retención, la
determinación de la base se realiza de
acuerdo con las disposiciones fiscales
vigentes. No se permiten valores negativos.
:ivar Impuesto: Atributo requerido para señalar
la clave del tipo de impuesto retenido
aplicable al concepto.
:ivar TipoFactor: Atributo requerido para
señalar la clave del tipo de factor que se
aplica a la base del impuesto.
:ivar TasaOCuota: Atributo requerido para
señalar la tasa o cuota del impuesto que se
retiene para el presente concepto.
:ivar Importe: Atributo requerido para señalar
el importe del impuesto retenido que aplica
al concepto. No se permiten valores
negativos.
"""
Base: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": Decimal("0.000001"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Impuesto: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TipoFactor: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TasaOCuota: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": Decimal("0.000000"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class AcuentaTerceros:
"""
:ivar RfcACuentaTerceros: Atributo requerido para
registrar la Clave del Registro Federal de
Contribuyentes del contribuyente Tercero, a cuenta
del que se realiza la operación.
:ivar NombreACuentaTerceros: Atributo requerido para
registrar el nombre, denominación o razón social del
contribuyente Tercero correspondiente con el Rfc, a
cuenta del que se realiza la operación.
:ivar RegimenFiscalACuentaTerceros: Atributo requerido
para incorporar la clave del régimen del
contribuyente Tercero, a cuenta del que se realiza
la operación.
:ivar DomicilioFiscalACuentaTerceros: Atributo requerido
para incorporar el código postal del domicilio
fiscal del Tercero, a cuenta del que se realiza la
operación.
"""
RfcACuentaTerceros: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 12,
"max_length": 13,
"white_space": "collapse",
"pattern": r"[A-Z&Ñ]{3,4}[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[A-Z0-9]{2}[0-9A]",
}
)
NombreACuentaTerceros: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 300,
"white_space": "collapse",
"pattern": r"[^|]{1,300}",
}
)
RegimenFiscalACuentaTerceros: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
DomicilioFiscalACuentaTerceros: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 5,
"white_space": "collapse",
"pattern": r"[0-9]{5}",
}
)
@dataclass
class InformacionAduanera:
"""
:ivar NumeroPedimento: Atributo requerido para expresar
el número del pedimento que ampara la importación
del bien que se expresa en el siguiente formato:
últimos 2 dígitos del año de validación seguidos por
dos espacios, 2 dígitos de la aduana de despacho
seguidos por dos espacios, 4 dígitos del número de
la patente seguidos por dos espacios, 1 dígito que
corresponde al último dígito del año en curso, salvo
que se trate de un pedimento consolidado iniciado en
el año inmediato anterior o del pedimento original
de una rectificación, seguido de 6 dígitos de la
numeración progresiva por aduana.
"""
NumeroPedimento: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 21,
"pattern": r"[0-9]{2} [0-9]{2} [0-9]{4} [0-9]{7}",
}
)
@dataclass
class CuentaPredial:
"""
:ivar Numero: Atributo requerido para precisar el número
de la cuenta predial del inmueble cubierto por el
presente concepto, o bien para incorporar los datos
de identificación del certificado de participación
inmobiliaria no amortizable, tratándose de
arrendamiento.
"""
Numero: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 150,
"white_space": "collapse",
"pattern": r"[0-9a-zA-Z]{1,150}",
}
)
@dataclass
class ComplementoConcepto:
any_element: List[object] = field(
default_factory=list,
metadata={
"type": "Wildcard",
"namespace": "##any",
}
)
@dataclass
class Parte:
"""
:ivar InformacionAduanera: Nodo opcional para introducir
la información aduanera aplicable cuando se trate de
ventas de primera mano de mercancías importadas o se
trate de operaciones de comercio exterior con bienes
o servicios.
:ivar ClaveProdServ: Atributo requerido para expresar la
clave del producto o del servicio amparado por la
presente parte. Es requerido y deben utilizar las
claves del catálogo de productos y servicios, cuando
los conceptos que registren por sus actividades
correspondan con dichos conceptos.
:ivar NoIdentificacion: Atributo opcional para expresar
el número de serie, número de parte del bien o
identificador del producto o del servicio amparado
por la presente parte. Opcionalmente se puede
utilizar claves del estándar GTIN.
:ivar Cantidad: Atributo requerido para precisar la
cantidad de bienes o servicios del tipo particular
definido por la presente parte.
:ivar Unidad: Atributo opcional para precisar la unidad
de medida propia de la operación del emisor,
aplicable para la cantidad expresada en la parte. La
unidad debe corresponder con la descripción de la
parte.
:ivar Descripcion: Atributo requerido para precisar la
descripción del bien o servicio cubierto por la
presente parte.
:ivar ValorUnitario: Atributo opcional para precisar el
valor o precio unitario del bien o servicio cubierto
por la presente parte. No se permiten valores
negativos.
:ivar Importe: Atributo opcional para precisar el
importe total de los bienes o servicios de la
presente parte. Debe ser equivalente al resultado de
multiplicar la cantidad por el valor unitario
expresado en la parte. No se permiten valores
negativos.
"""
InformacionAduanera: List["Comprobante.Conceptos.Concepto.Parte.InformacionAduanera"] = field(
default_factory=list,
metadata={
"type": "Element",
}
)
ClaveProdServ: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
NoIdentificacion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 100,
"white_space": "collapse",
"pattern": r"[^|]{1,100}",
}
)
Cantidad: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": Decimal("0.000001"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Unidad: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_length": 1,
"max_length": 20,
"white_space": "collapse",
"pattern": r"[^|]{1,20}",
}
)
Descripcion: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_length": 1,
"max_length": 1000,
"white_space": "collapse",
"pattern": r"[^|]{1,1000}",
}
)
ValorUnitario: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class InformacionAduanera:
"""
:ivar NumeroPedimento: Atributo requerido para
expresar el número del pedimento que ampara la
importación del bien que se expresa en el
siguiente formato: últimos 2 dígitos del año de
validación seguidos por dos espacios, 2 dígitos
de la aduana de despacho seguidos por dos
espacios, 4 dígitos del número de la patente
seguidos por dos espacios, 1 dígito que
corresponde al último dígito del año en curso,
salvo que se trate de un pedimento consolidado
iniciado en el año inmediato anterior o del
pedimento original de una rectificación, seguido
de 6 dígitos de la numeración progresiva por
aduana.
"""
NumeroPedimento: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"length": 21,
"pattern": r"[0-9]{2} [0-9]{2} [0-9]{4} [0-9]{7}",
}
)
@dataclass
class Impuestos:
"""
:ivar Retenciones: Nodo condicional para capturar los impuestos
retenidos aplicables. Es requerido cuando en los conceptos
se registre algún impuesto retenido.
:ivar Traslados: Nodo condicional para capturar los impuestos
trasladados aplicables. Es requerido cuando en los conceptos
se registre un impuesto trasladado.
:ivar TotalImpuestosRetenidos: Atributo condicional para
expresar el total de los impuestos retenidos que se
desprenden de los conceptos expresados en el comprobante
fiscal digital por Internet. No se permiten valores
negativos. Es requerido cuando en los conceptos se registren
impuestos retenidos.
:ivar TotalImpuestosTrasladados: Atributo condicional para
expresar el total de los impuestos trasladados que se
desprenden de los conceptos expresados en el comprobante
fiscal digital por Internet. No se permiten valores
negativos. Es requerido cuando en los conceptos se registren
impuestos trasladados.
"""
Retenciones: Optional["Comprobante.Impuestos.Retenciones"] = field(
default=None,
metadata={
"type": "Element",
}
)
Traslados: Optional["Comprobante.Impuestos.Traslados"] = field(
default=None,
metadata={
"type": "Element",
}
)
TotalImpuestosRetenidos: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
TotalImpuestosTrasladados: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class Retenciones:
"""
:ivar Retencion: Nodo requerido para la información
detallada de una retención de impuesto específico.
"""
Retencion: List["Comprobante.Impuestos.Retenciones.Retencion"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
@dataclass
class Retencion:
"""
:ivar Impuesto: Atributo requerido para señalar la clave
del tipo de impuesto retenido.
:ivar Importe: Atributo requerido para señalar el monto
del impuesto retenido. No se permiten valores
negativos.
"""
Impuesto: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class Traslados:
"""
:ivar Traslado: Nodo requerido para la información detallada
de un traslado de impuesto específico.
"""
Traslado: List["Comprobante.Impuestos.Traslados.Traslado"] = field(
default_factory=list,
metadata={
"type": "Element",
"min_occurs": 1,
}
)
@dataclass
class Traslado:
"""
:ivar Base: Atributo requerido para señalar la suma de
los atributos Base de los conceptos del impuesto
trasladado. No se permiten valores negativos.
:ivar Impuesto: Atributo requerido para señalar la clave
del tipo de impuesto trasladado.
:ivar TipoFactor: Atributo requerido para señalar la
clave del tipo de factor que se aplica a la base del
impuesto.
:ivar TasaOCuota: Atributo condicional para señalar el
valor de la tasa o cuota del impuesto que se
traslada por los conceptos amparados en el
comprobante.
:ivar Importe: Atributo condicional para señalar la suma
del importe del impuesto trasladado, agrupado por
impuesto, TipoFactor y TasaOCuota. No se permiten
valores negativos.
"""
Base: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
Impuesto: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TipoFactor: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"required": True,
}
)
TasaOCuota: Optional[Decimal] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": Decimal("0.000000"),
"fraction_digits": 6,
"white_space": "collapse",
}
)
Importe: Optional[str] = field(
default=None,
metadata={
"type": "Attribute",
"min_inclusive": "0.000000",
"fraction_digits": 6,
"white_space": "collapse",
"pattern": r"[0-9]{1,18}(.[0-9]{1,6})?",
}
)
@dataclass
class Complemento:
any_element: List[object] = field(
default_factory=list,
metadata={
"type": "Wildcard",
"namespace": "##any",
}
)
@dataclass
class Addenda:
any_element: List[object] = field(
default_factory=list,
metadata={
"type": "Wildcard",
"namespace": "##any",
}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment