satcfdi.create.cfd.terceros11   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 232
Duplicated Lines 34.05 %

Importance

Changes 0
Metric Value
eloc 116
dl 79
loc 232
rs 10
c 0
b 0
f 0
wmc 9

9 Methods

Rating   Name   Duplication   Size   Complexity  
A Traslado.__init__() 0 10 1
A Parte.__init__() 18 18 1
A TInformacionAduanera.__init__() 0 10 1
A InformacionFiscalTercero.__init__() 0 5 1
A TUbicacionFiscal.__init__() 24 24 1
A PorCuentadeTerceros.__init__() 0 19 1
A InformacionAduanera.__init__() 0 5 1
A Impuestos.__init__() 0 8 1
A Retencion.__init__() 0 8 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
"""terceros http://www.sat.gob.mx/terceros"""
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 TUbicacionFiscal(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
33
    """
34
    Tipo definido para expresar domicilios o direcciones
35
    
36
    :param calle: Este atributo requerido sirve para precisar la avenida, calle, camino o carretera donde se da la ubicación.
37
    :param municipio: Atributo requerido que sirve para precisar el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación.
38
    :param estado: Atributo requerido que sirve para precisar el estado o entidad federativa donde se da la ubicación.
39
    :param pais: Atributo requerido que sirve para precisar el país donde se da la ubicación.
40
    :param codigo_postal: Atributo requerido que sirve para asentar el código postal en donde se da la ubicación.
41
    :param no_exterior: Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.
42
    :param no_interior: Este atributo opcional sirve para expresar información adicional para especificar la ubicación cuando calle y número exterior (noExterior) no resulten suficientes para determinar la ubicación de forma precisa.
43
    :param colonia: Este atributo opcional sirve para precisar la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas.
44
    :param localidad: Atributo opcional que sirve para precisar la ciudad o población donde se da la ubicación.
45
    :param referencia: Atributo opcional para expresar una referencia de ubicación adicional.
46
    """
47
    
48
    def __init__(
49
            self,
50
            calle: str,
51
            municipio: str,
52
            estado: str,
53
            pais: str,
54
            codigo_postal: str,
55
            no_exterior: str = None,
56
            no_interior: str = None,
57
            colonia: str = None,
58
            localidad: str = None,
59
            referencia: str = None,
60
    ): 
61
        super().__init__({
62
            'Calle': calle,
63
            'Municipio': municipio,
64
            'Estado': estado,
65
            'Pais': pais,
66
            'CodigoPostal': codigo_postal,
67
            'NoExterior': no_exterior,
68
            'NoInterior': no_interior,
69
            'Colonia': colonia,
70
            'Localidad': localidad,
71
            'Referencia': referencia,
72
        })
73
        
74
75 View Code Duplication
class Parte(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
76
    """
77
    Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFD o CFDI
78
    
79
    :param cantidad: Atributo requerido para precisar la cantidad de bienes o servicios del tipo particular definido por la presente parte.
80
    :param descripcion: Atributo requerido para precisar la descripción del bien o servicio cubierto por la presente parte.
81
    :param unidad: Atributo opcional para precisar la unidad de medida aplicable para la cantidad expresada en la parte.
82
    :param no_identificacion: Atributo opcional para expresar el número de serie del bien o identificador del servicio amparado por la presente parte.
83
    :param valor_unitario: Atributo opcional para precisar el valor o precio unitario del bien o servicio cubierto por la presente parte.
84
    :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.
85
    :param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de partes o componentes importados vendidos de primera mano.
86
    """
87
    
88
    def __init__(
89
            self,
90
            cantidad: Decimal | int,
91
            descripcion: str,
92
            unidad: str = None,
93
            no_identificacion: str = None,
94
            valor_unitario: Decimal | int = None,
95
            importe: Decimal | int = None,
96
            informacion_aduanera: TInformacionAduanera | dict | Sequence[TInformacionAduanera | dict] = None,
97
    ): 
98
        super().__init__({
99
            'Cantidad': cantidad,
100
            'Descripcion': descripcion,
101
            'Unidad': unidad,
102
            'NoIdentificacion': no_identificacion,
103
            'ValorUnitario': valor_unitario,
104
            'Importe': importe,
105
            'InformacionAduanera': informacion_aduanera,
106
        })
107
        
108
109
class InformacionAduanera(ScalarMap):
110
    """
111
    Nodo opcional para introducir la información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas.
112
    
113
    """
114
    
115
    def __init__(
116
            self,
117
            hello_there_super: TInformacionAduanera | dict
118
    ): 
119
        super().__init__({
120
        })
121
        
122
123
class InformacionFiscalTercero(ScalarMap):
124
    """
125
    Nodo opcional para expresar información fiscal de terceros
126
    
127
    """
128
    
129
    def __init__(
130
            self,
131
            hello_there_super: TUbicacionFiscal | dict
132
    ): 
133
        super().__init__({
134
        })
135
        
136
137
class Traslado(ScalarMap):
138
    """
139
    Nodo para la información detallada de un traslado de impuesto específico
140
    
141
    :param impuesto: Atributo requerido para señalar el tipo de impuesto trasladado
142
    :param tasa: Atributo requerido para señalar la tasa del impuesto que se traslada por cada concepto amparado en el comprobante
143
    :param importe: Atributo requerido para señalar el importe del impuesto trasladado
144
    """
145
    
146
    def __init__(
147
            self,
148
            impuesto: str,
149
            tasa: Decimal | int,
150
            importe: Decimal | int,
151
    ): 
152
        super().__init__({
153
            'Impuesto': impuesto,
154
            'Tasa': tasa,
155
            'Importe': importe,
156
        })
157
        
158
159
class Retencion(ScalarMap):
160
    """
161
    Nodo para la información detallada de una retención de impuesto específico
162
    
163
    :param impuesto: Atributo requerido para señalar el tipo de impuesto retenido
164
    :param importe: Atributo requerido para señalar el importe o monto del impuesto retenido
165
    """
166
    
167
    def __init__(
168
            self,
169
            impuesto: str,
170
            importe: Decimal | int,
171
    ): 
172
        super().__init__({
173
            'Impuesto': impuesto,
174
            'Importe': importe,
175
        })
176
        
177
178
class Impuestos(ScalarMap):
179
    """
180
    Nodo requerido para capturar los impuestos aplicables.
181
    
182
    :param retenciones: Nodo opcional para capturar los impuestos retenidos aplicables
183
    :param traslados: Nodo opcional para asentar o referir los impuestos trasladados aplicables
184
    """
185
    
186
    def __init__(
187
            self,
188
            retenciones: Retencion | dict | Sequence[Retencion | dict] = None,
189
            traslados: Traslado | dict | Sequence[Traslado | dict] = None,
190
    ): 
191
        super().__init__({
192
            'Retenciones': retenciones,
193
            'Traslados': traslados,
194
        })
195
        
196
197
class PorCuentadeTerceros(CFDI):
198
    """
199
    Complemento concepto para la emisión de Comprobante Fiscal Digital (CFD) y Comprobante Fiscal Digital a través de Internet (CFDI) por orden y cuenta de terceros.
200
    
201
    :param rfc: Atributo requerido para la Clave del Registro Federal de Contribuyentes correspondiente al contribuyente emisor del comprobante sin guiones o espacios.
202
    :param impuestos: Nodo requerido para capturar los impuestos aplicables.
203
    :param nombre: Atributo opcional para el nombre o razón social del contribuyente emisor del comprobante.
204
    :param informacion_fiscal_tercero: Nodo opcional para expresar información fiscal de terceros
205
    :param informacion_aduanera: Nodo opcional para introducir la información aduanera aplicable cuando se trate de ventas de primera mano de mercancías importadas.
206
    :param parte: Nodo opcional para expresar las partes o componentes que integran la totalidad del concepto expresado en el CFD o CFDI
207
    :param cuenta_predial: 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.
208
    """
209
    
210
    tag = '{http://www.sat.gob.mx/terceros}PorCuentadeTerceros'
211
    version = '1.1'
212
    
213
    def __init__(
214
            self,
215
            rfc: str,
216
            impuestos: Impuestos | dict,
217
            nombre: str = None,
218
            informacion_fiscal_tercero: InformacionFiscalTercero | dict = None,
219
            informacion_aduanera: InformacionAduanera | dict = None,
220
            parte: Parte | dict | Sequence[Parte | dict] = None,
221
            cuenta_predial: str = None,
222
    ): 
223
        super().__init__({
224
            'Version': self.version,
225
            'Rfc': rfc,
226
            'Impuestos': impuestos,
227
            'Nombre': nombre,
228
            'InformacionFiscalTercero': informacion_fiscal_tercero,
229
            'InformacionAduanera': informacion_aduanera,
230
            'Parte': parte,
231
            'CuentaPredial': cuenta_predial,
232
        })
233
        
234
235