satcfdi.create.cfd.ventavehiculos11   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 92
Duplicated Lines 38.04 %

Importance

Changes 0
Metric Value
eloc 50
dl 35
loc 92
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A TInformacionAduanera.__init__() 0 10 1
A Parte.__init__() 18 18 1
A VentaVehiculos.__init__() 0 13 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
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