|
1
|
|
|
"""ventavehiculos http://www.sat.gob.mx/ventavehiculos""" |
|
2
|
|
|
from decimal import Decimal |
|
3
|
|
|
from datetime import datetime, date, time |
|
4
|
|
|
from collections.abc import Sequence |
|
5
|
|
|
from ...cfdi import CFDI |
|
6
|
|
|
from ...xelement import XElement |
|
7
|
|
|
from ...utils import ScalarMap |
|
8
|
|
|
|
|
9
|
|
|
|
|
10
|
|
|
class TInformacionAduanera(ScalarMap): |
|
11
|
|
|
""" |
|
12
|
|
|
Tipo definido para expresar información aduanera |
|
13
|
|
|
|
|
14
|
|
|
:param numero: Atributo requerido para expresar el número del documento aduanero que ampara la importación del bien. |
|
15
|
|
|
:param fecha: Atributo requerido para expresar la fecha de expedición del documento aduanero que ampara la importación del bien. |
|
16
|
|
|
:param aduana: Atributo opcional para precisar la aduana por la que se efectuó la importación del bien. |
|
17
|
|
|
""" |
|
18
|
|
|
|
|
19
|
|
|
def __init__( |
|
20
|
|
|
self, |
|
21
|
|
|
numero: str, |
|
22
|
|
|
fecha: date, |
|
23
|
|
|
aduana: str = None, |
|
24
|
|
|
): |
|
25
|
|
|
super().__init__({ |
|
26
|
|
|
'Numero': numero, |
|
27
|
|
|
'Fecha': fecha, |
|
28
|
|
|
'Aduana': aduana, |
|
29
|
|
|
}) |
|
30
|
|
|
|
|
31
|
|
|
|
|
32
|
|
View Code Duplication |
class Parte(ScalarMap): |
|
|
|
|
|
|
33
|
|
|
""" |
|
34
|
|
|
Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFDI. |
|
35
|
|
|
|
|
36
|
|
|
:param cantidad: Atributo requerido para precisar la cantidad de bienes o servicios del tipo particular definido por la presente parte. |
|
37
|
|
|
:param descripcion: Atributo requerido para precisar la descripción del bien o servicio cubierto por la presente parte. |
|
38
|
|
|
:param unidad: Atributo opcional para precisar la unidad de medida aplicable para la cantidad expresada en la parte. |
|
39
|
|
|
:param no_identificacion: Atributo opcional para expresar el número de serie del bien o identificador del servicio amparado por la presente parte. |
|
40
|
|
|
:param valor_unitario: Atributo opcional para precisar el valor o precio unitario del bien o servicio cubierto por la presente parte. |
|
41
|
|
|
:param 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. |
|
42
|
|
|
:param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de partes o componentes importados vendidos de primera mano. |
|
43
|
|
|
""" |
|
44
|
|
|
|
|
45
|
|
|
def __init__( |
|
46
|
|
|
self, |
|
47
|
|
|
cantidad: Decimal | int, |
|
48
|
|
|
descripcion: str, |
|
49
|
|
|
unidad: str = None, |
|
50
|
|
|
no_identificacion: str = None, |
|
51
|
|
|
valor_unitario: Decimal | int = None, |
|
52
|
|
|
importe: Decimal | int = None, |
|
53
|
|
|
informacion_aduanera: TInformacionAduanera | dict | Sequence[TInformacionAduanera | dict] = None, |
|
54
|
|
|
): |
|
55
|
|
|
super().__init__({ |
|
56
|
|
|
'Cantidad': cantidad, |
|
57
|
|
|
'Descripcion': descripcion, |
|
58
|
|
|
'Unidad': unidad, |
|
59
|
|
|
'NoIdentificacion': no_identificacion, |
|
60
|
|
|
'ValorUnitario': valor_unitario, |
|
61
|
|
|
'Importe': importe, |
|
62
|
|
|
'InformacionAduanera': informacion_aduanera, |
|
63
|
|
|
}) |
|
64
|
|
|
|
|
65
|
|
|
|
|
66
|
|
|
class VentaVehiculos(CFDI): |
|
67
|
|
|
""" |
|
68
|
|
|
Complemento concepto que permite incorporar a los fabricantes, ensambladores o distribuidores autorizados de automóviles nuevos, así como aquéllos que importen automóviles para permanecer en forma definitiva en la franja fronteriza norte del país y en los Estados de Baja California, Baja California Sur y la región parcial del Estado de Sonora, a un Comprobante Fiscal Digital a través de Internet (CFDI) la clave vehicular que corresponda a la versión enajenada y el número de identificación vehicular que corresponda al vehículo enajenado. |
|
69
|
|
|
|
|
70
|
|
|
:param clave_vehicular: Atributo requerido para precisar Clave vehicular que corresponda a la versión del vehículo enajenado. |
|
71
|
|
|
:param niv: Atributo requerido para precisar el número de identificación vehicular que corresponda al vehículo enajenado. |
|
72
|
|
|
:param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas. |
|
73
|
|
|
:param parte: Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFDI. |
|
74
|
|
|
""" |
|
75
|
|
|
|
|
76
|
|
|
tag = '{http://www.sat.gob.mx/ventavehiculos}VentaVehiculos' |
|
77
|
|
|
version = '1.1' |
|
78
|
|
|
|
|
79
|
|
|
def __init__( |
|
80
|
|
|
self, |
|
81
|
|
|
clave_vehicular: str, |
|
82
|
|
|
niv: str, |
|
83
|
|
|
informacion_aduanera: TInformacionAduanera | dict | Sequence[TInformacionAduanera | dict] = None, |
|
84
|
|
|
parte: Parte | dict | Sequence[Parte | dict] = None, |
|
85
|
|
|
): |
|
86
|
|
|
super().__init__({ |
|
87
|
|
|
'Version': self.version, |
|
88
|
|
|
'ClaveVehicular': clave_vehicular, |
|
89
|
|
|
'Niv': niv, |
|
90
|
|
|
'InformacionAduanera': informacion_aduanera, |
|
91
|
|
|
'Parte': parte, |
|
92
|
|
|
}) |
|
93
|
|
|
|
|
94
|
|
|
|
|
95
|
|
|
|