Created
April 13, 2023 04:25
-
-
Save rvalyi/d78d1e309694fb54cef38d938bc41917 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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