ComercioExterior.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 33
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 32
nop 15
dl 0
loc 33
rs 9.112
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
"""cce http://www.sat.gob.mx/ComercioExterior"""
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 DescripcionesEspecificas(ScalarMap):
11
    """
12
    Nodo opcional que indica la lista de descripciones específicas de la mercancía. Una mercancía puede tener más de una descripción específica.
13
    
14
    :param marca: Atributo requerido que indica la marca de la mercancía.
15
    :param modelo: Atributo opcional que indica el modelo de la mercancía.
16
    :param sub_modelo: Atributo opcional que indica el submodelo de la mercancía.
17
    :param numero_serie: Atributo opcional que indica el número de serie de la mercancía.
18
    """
19
    
20
    def __init__(
21
            self,
22
            marca: str,
23
            modelo: str = None,
24
            sub_modelo: str = None,
25
            numero_serie: str = None,
26
    ): 
27
        super().__init__({
28
            'Marca': marca,
29
            'Modelo': modelo,
30
            'SubModelo': sub_modelo,
31
            'NumeroSerie': numero_serie,
32
        })
33
        
34
35 View Code Duplication
class Mercancia(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
36
    """
37
    Nodo requerido para capturar la información de la declaración de cada mercancía exportada.
38
    
39
    :param no_identificacion: Atributo requerido que sirve para expresar el número de parte, la clave de identificación que asigna la empresa o el número de serie de la mercancía exportada.
40
    :param valor_dolares: Atributo requerido que indica el valor total en dólares de Estados Unidos.
41
    :param fraccion_arancelaria: Atributo opcional que sirve para expresar la fracción arancelaria correspondiente a la descripción de la mercancía exportada, este dato se vuelve requerido cuando se cuente con él o se esté obligado legalmente a contar con él.
42
    :param cantidad_aduana: Atributo opcional para precisar la cantidad de bienes en la aduana conforme a la UnidadAduana cuando en el nodo Comprobante:Conceptos:Concepto se hubiera registrado información comercial.
43
    :param unidad_aduana: Atributo opcional para precisar la unidad de medida aplicable para la cantidad expresada en la mercancía en la aduana.
44
    :param valor_unitario_aduana: Atributo opcional para precisar el valor o precio unitario del bien en la aduana. Se expresa en dólares de Estados Unidos (USD).
45
    :param descripciones_especificas: Nodo opcional que indica la lista de descripciones específicas de la mercancía. Una mercancía puede tener más de una descripción específica.
46
    """
47
    
48
    def __init__(
49
            self,
50
            no_identificacion: str,
51
            valor_dolares: Decimal | int,
52
            fraccion_arancelaria: str = None,
53
            cantidad_aduana: Decimal | int = None,
54
            unidad_aduana: str = None,
55
            valor_unitario_aduana: Decimal | int = None,
56
            descripciones_especificas: DescripcionesEspecificas | dict | Sequence[DescripcionesEspecificas | dict] = None,
57
    ): 
58
        super().__init__({
59
            'NoIdentificacion': no_identificacion,
60
            'ValorDolares': valor_dolares,
61
            'FraccionArancelaria': fraccion_arancelaria,
62
            'CantidadAduana': cantidad_aduana,
63
            'UnidadAduana': unidad_aduana,
64
            'ValorUnitarioAduana': valor_unitario_aduana,
65
            'DescripcionesEspecificas': descripciones_especificas,
66
        })
67
        
68
69 View Code Duplication
class Domicilio(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
70
    """
71
    Nodo requerido para expresar el domicilio del destinatario de la mercancía.
72
    
73
    :param calle: Atributo requerido sirve para precisar la calle en que está ubicado el domicilio del destinatario de la mercancía.
74
    :param estado: Atributo requerido para señalar el estado, entidad, región, comunidad u otra figura análoga en donde se encuentra ubicado el domicilio del destinatario de la mercancía. El catálogo se publicará en el portal del SAT y será conforme con la especificación ISO 3166-2.
75
    :param pais: Atributo requerido que sirve para precisar el país donde se encuentra ubicado el destinatario de la mercancía. El catálogo se publicará en el portal del SAT y será conforme con la especificación ISO 3166-1.
76
    :param codigo_postal: Atributo requerido que sirve para asentar el código postal (PO, BOX) en donde se encuentra ubicado el domicilio del destinatario de la mercancía.
77
    :param numero_exterior: Atributo opcional sirve para expresar el número exterior en donde se ubica el domicilio del destinatario de la mercancía.
78
    :param numero_interior: Atributo opcional sirve para expresar el número interior, en caso de existir, en donde se ubica el domicilio del destinatario de la mercancía.
79
    :param colonia: Atributo opcional sirve para expresar la colonia o dato análogo en donde se ubica el domicilio del destinatario de la mercancía.
80
    :param localidad: Atributo opcional que sirve para precisar la ciudad, población, distrito u otro análogo en donde se ubica el domicilio del destinatario de la mercancía.
81
    :param referencia: Atributo opcional para expresar una referencia geográfica adicional que permita una más fácil o precisa ubicación del domicilio del destinatario de la mercancía, por ejemplo las coordenadas GPS.
82
    :param municipio: Atributo opcional que sirve para precisar el municipio, delegación, condado u otro análogo en donde se encuentra ubicado el destinatario de la mercancía.
83
    """
84
    
85
    def __init__(
86
            self,
87
            calle: str,
88
            estado: str,
89
            pais: str,
90
            codigo_postal: str,
91
            numero_exterior: str = None,
92
            numero_interior: str = None,
93
            colonia: str = None,
94
            localidad: str = None,
95
            referencia: str = None,
96
            municipio: str = None,
97
    ): 
98
        super().__init__({
99
            'Calle': calle,
100
            'Estado': estado,
101
            'Pais': pais,
102
            'CodigoPostal': codigo_postal,
103
            'NumeroExterior': numero_exterior,
104
            'NumeroInterior': numero_interior,
105
            'Colonia': colonia,
106
            'Localidad': localidad,
107
            'Referencia': referencia,
108
            'Municipio': municipio,
109
        })
110
        
111
112
class Destinatario(ScalarMap):
113
    """
114
    Nodo opcional para capturar los datos del destinatario de la mercancía cuando éste sea distinto del receptor del CFDI.
115
    
116
    :param domicilio: Nodo requerido para expresar el domicilio del destinatario de la mercancía.
117
    :param num_reg_id_trib: Atributo opcional para incorporar el número de identificación o registro fiscal del país de residencia para efectos fiscales del destinatario de la mercancía exportada.
118
    :param rfc: Atributo opcional para expresar el RFC del destinatario de la mercancía exportada.
119
    :param curp: Atributo opcional para expresar la CURP del destinatario de la mercancía cuando es persona física.
120
    :param nombre: Atributo opcional para expresar el nombre completo, denominación o razón social del destinatario de la mercancía exportada.
121
    """
122
    
123
    def __init__(
124
            self,
125
            domicilio: Domicilio | dict,
126
            num_reg_id_trib: str = None,
127
            rfc: str = None,
128
            curp: str = None,
129
            nombre: str = None,
130
    ): 
131
        super().__init__({
132
            'Domicilio': domicilio,
133
            'NumRegIdTrib': num_reg_id_trib,
134
            'Rfc': rfc,
135
            'Curp': curp,
136
            'Nombre': nombre,
137
        })
138
        
139
140
class Emisor(ScalarMap):
141
    """
142
    Nodo opcional para capturar los datos complementarios del emisor del comprobante.
143
    
144
    :param curp: Atributo opcional para expresar la CURP del emisor del CFDI cuando es una persona física.
145
    """
146
    
147
    def __init__(
148
            self,
149
            curp: str = None,
150
    ): 
151
        super().__init__({
152
            'Curp': curp,
153
        })
154
        
155
156
class Receptor(ScalarMap):
157
    """
158
    Nodo requerido para capturar los datos complementarios del receptor del CFDI.
159
    
160
    :param num_reg_id_trib: Atributo requerido para incorporar el número de identificación o registro fiscal del país de residencia para efectos fiscales del receptor del CFDI.
161
    :param curp: Atributo opcional para expresar la CURP del receptor del CFDI cuando es una persona física.
162
    """
163
    
164
    def __init__(
165
            self,
166
            num_reg_id_trib: str,
167
            curp: str = None,
168
    ): 
169
        super().__init__({
170
            'NumRegIdTrib': num_reg_id_trib,
171
            'Curp': curp,
172
        })
173
        
174
175
class ComercioExterior(CFDI):
176
    """
177
    Complemento para incorporar la información en el caso de Exportación de Mercancías en definitiva.
178
    
179
    :param tipo_operacion: Atributo requerido que indica el tipo de operación de comercio exterior que se realiza, puede ser importación o exportación, A = exportación de servicios. 2 = exportación.
180
    :param receptor: Nodo requerido para capturar los datos complementarios del receptor del CFDI.
181
    :param clave_de_pedimento: Atributo que indica la clave de pedimento que se haya declarado conforme al apéndice 2 del anexo 22 de las reglas generales de comercio exterior.
182
    :param certificado_origen: Atributo derivado de la excepción de certificados de Origen de los Tratados de Libre Comercio que ha celebrado México con diversos países. 0 = No Funge como certificado de origen 1 = Funge como certificado de origen.
183
    :param num_certificado_origen: Atributo opcional para expresar el folio del certificado de origen o el folio fiscal del CFDI con el que se pagó la expedición del certificado de origen.
184
    :param numero_exportador_confiable: Atributo opcional que indica el número de exportador confiable, conforme al artículo 22 del Anexo 1 del Tratado de Libre Comercio con la Asociación Europea y a la Decisión de la Comunidad Europea.
185
    :param incoterm: Atributo que indica la clave del INCOTERM aplicable a la factura.
186
    :param subdivision: Atributo que indica si la factura tiene o no subdivisión. Valores posibles:0 - no tiene subdivisión,1 - si tiene subdivisión.
187
    :param observaciones: Atributo opcional en caso de ingresar alguna información adicional, como alguna leyenda que debe incluir el CFDI.
188
    :param tipo_cambio_usd: Atributo que indica el número de pesos mexicanos que equivalen a un dólar de Estados Unidos, de acuerdo al artículo 20 del Código Fiscal de la Federación.
189
    :param total_usd: Atributo que indica el importe total del comprobante en dólares de Estados Unidos.
190
    :param emisor: Nodo opcional para capturar los datos complementarios del emisor del comprobante.
191
    :param destinatario: Nodo opcional para capturar los datos del destinatario de la mercancía cuando éste sea distinto del receptor del CFDI.
192
    :param mercancias: Nodo opcional para capturar la información de la declaración de las mercancías exportadas.
193
    """
194
    
195
    tag = '{http://www.sat.gob.mx/ComercioExterior}ComercioExterior'
196
    version = '1.0'
197
    
198
    def __init__(
199
            self,
200
            tipo_operacion: str,
201
            receptor: Receptor | dict,
202
            clave_de_pedimento: str = None,
203
            certificado_origen: int = None,
204
            num_certificado_origen: str = None,
205
            numero_exportador_confiable: str = None,
206
            incoterm: str = None,
207
            subdivision: int = None,
208
            observaciones: str = None,
209
            tipo_cambio_usd: Decimal | int = None,
210
            total_usd: Decimal | int = None,
211
            emisor: Emisor | dict = None,
212
            destinatario: Destinatario | dict = None,
213
            mercancias: Mercancia | dict | Sequence[Mercancia | dict] = None,
214
    ): 
215
        super().__init__({
216
            'Version': self.version,
217
            'TipoOperacion': tipo_operacion,
218
            'Receptor': receptor,
219
            'ClaveDePedimento': clave_de_pedimento,
220
            'CertificadoOrigen': certificado_origen,
221
            'NumCertificadoOrigen': num_certificado_origen,
222
            'NumeroExportadorConfiable': numero_exportador_confiable,
223
            'Incoterm': incoterm,
224
            'Subdivision': subdivision,
225
            'Observaciones': observaciones,
226
            'TipoCambioUSD': tipo_cambio_usd,
227
            'TotalUSD': total_usd,
228
            'Emisor': emisor,
229
            'Destinatario': destinatario,
230
            'Mercancias': mercancias,
231
        })
232
        
233
234