satcfdi.create.cfd.cce11.Domicilio.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 24
Code Lines 23

Duplication

Lines 24
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
eloc 23
nop 11
dl 24
loc 24
rs 9.328
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
"""cce11 http://www.sat.gob.mx/ComercioExterior11"""
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 (USD).
41
    :param fraccion_arancelaria: Atributo condicional que sirve para expresar la clave de 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.Debe ser conforme con el catálogo c_FraccionArancelaria publicado en el portal del SAT en internet.
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 condicional para precisar la clave de la unidad de medida aplicable para la cantidad expresada en la mercancía en la aduana, conforme con el catálogo c_UnidadAduana publicado en el portal del SAT en internet.
44
    :param valor_unitario_aduana: Atributo condicional para precisar el valor o precio unitario del bien en la aduana. Se expresa en dólares de Estados Unidos (USD), el cual puede estar registrado hasta centésimas.
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 publica en el portal del SAT en internet y es conforme con la especificación ISO 3166-2.
75
    :param pais: Atributo requerido que sirve para precisar la clave del país donde se encuentra ubicado el destinatario de la mercancía, conforme con el catálogo c_Pais publicado en el portal del SAT en internet que está basado en 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 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 nombre: Atributo opcional para expresar el nombre completo, denominación o razón social del destinatario de la mercancía exportada.
119
    """
120
    
121
    def __init__(
122
            self,
123
            domicilio: Domicilio | dict | Sequence[Domicilio | dict],
124
            num_reg_id_trib: str = None,
125
            nombre: str = None,
126
    ): 
127
        super().__init__({
128
            'Domicilio': domicilio,
129
            'NumRegIdTrib': num_reg_id_trib,
130
            'Nombre': nombre,
131
        })
132
        
133
134
class Receptor(ScalarMap):
135
    """
136
    Nodo condicional para capturar los datos complementarios del receptor del CFDI.
137
    
138
    :param num_reg_id_trib: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para efectos fiscales del receptor del CFDI.
139
    :param domicilio: Nodo requerido para expresar el domicilio del receptor del comprobante.
140
    """
141
    
142
    def __init__(
143
            self,
144
            num_reg_id_trib: str = None,
145
            domicilio: Domicilio | dict = None,
146
    ): 
147
        super().__init__({
148
            'NumRegIdTrib': num_reg_id_trib,
149
            'Domicilio': domicilio,
150
        })
151
        
152
153
class Propietario(ScalarMap):
154
    """
155
    Nodo condicional para capturar los datos del o los propietarios de la mercancía que se traslada y ésta no sea objeto de enajenación o siéndolo sea a título gratuito, cuando el emisor del CFDI es un tercero.
156
    
157
    :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 propietario de la mercancía trasladada.
158
    :param residencia_fiscal: Atributo requerido para registrar la clave del país de residencia para efectos fiscales del propietario de la mercancía, conforme con el catálogo c_Pais publicado en el portal del SAT en internet que está basado en la especificación ISO 3166-1.
159
    """
160
    
161
    def __init__(
162
            self,
163
            num_reg_id_trib: str,
164
            residencia_fiscal: str,
165
    ): 
166
        super().__init__({
167
            'NumRegIdTrib': num_reg_id_trib,
168
            'ResidenciaFiscal': residencia_fiscal,
169
        })
170
        
171
172
class Emisor(ScalarMap):
173
    """
174
    Nodo opcional para capturar los datos complementarios del emisor del comprobante.
175
    
176
    :param curp: Atributo condicional para expresar la CURP del emisor del CFDI cuando es una persona física.
177
    :param domicilio: Nodo condicional para expresar el domicilio del emisor del comprobante, es requerido cuando el complemento se registre en un CFDI 4.0.
178
    """
179
    
180
    def __init__(
181
            self,
182
            curp: str = None,
183
            domicilio: Domicilio | dict = None,
184
    ): 
185
        super().__init__({
186
            'Curp': curp,
187
            'Domicilio': domicilio,
188
        })
189
        
190
191 View Code Duplication
class ComercioExterior(CFDI):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
192
    """
193
    Complemento para incorporar la información en el caso de Exportación de Mercancías en definitiva.
194
    
195
    :param tipo_operacion: Atributo requerido que indica la clave del tipo de operación de Comercio Exterior que se realiza, conforme con el catálogo c_TipoOperacion publicado en el portal del SAT en internet.
196
    :param motivo_traslado: Atributo condicional que indica la clave del motivo por el cual en la exportación definitiva de mercancías con clave de pedimento A1, éstas no son objeto de enajenación o siéndolo sean a título gratuito, desde el domicilio del emisor hacia el domicilio del receptor o del destinatario. La clave del motivo es conforme con el catálogo c_MotivoTraslado publicado en el portal del SAT en internet.
197
    :param clave_de_pedimento: Atributo condicional que indica la clave de pedimento que se haya declarado conforme con el catálogo c_ClavePedimento publicado en el portal del SAT en internet.
198
    :param certificado_origen: Atributo condicional 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.
199
    :param num_certificado_origen: Atributo condicional 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.
200
    :param numero_exportador_confiable: Atributo condicional 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.
201
    :param incoterm: Atributo condicional que indica la clave del INCOTERM aplicable a la factura, conforme con el catálogo c_INCOTERM publicado en el portal del SAT en internet.
202
    :param subdivision: Atributo condicional que indica si la factura tiene o no subdivisión. Valores posibles: 0 - no tiene subdivisión,1 - si tiene subdivisión.
203
    :param observaciones: Atributo opcional en caso de ingresar alguna información adicional, como alguna leyenda que debe incluir en el CFDI.
204
    :param tipo_cambio_usd: Atributo condicional 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.
205
    :param total_usd: Atributo condicional que indica el importe total del comprobante en dólares de Estados Unidos.
206
    :param emisor: Nodo opcional para capturar los datos complementarios del emisor del comprobante.
207
    :param propietario: Nodo condicional para capturar los datos del o los propietarios de la mercancía que se traslada y ésta no sea objeto de enajenación o siéndolo sea a título gratuito, cuando el emisor del CFDI es un tercero.
208
    :param receptor: Nodo condicional para capturar los datos complementarios del receptor del CFDI.
209
    :param destinatario: Nodo opcional para capturar los datos del destinatario de la mercancía cuando éste sea distinto del receptor del CFDI.
210
    :param mercancias: Nodo condicional para capturar la información de la declaración de las mercancías exportadas.
211
    """
212
    
213
    tag = '{http://www.sat.gob.mx/ComercioExterior11}ComercioExterior'
214
    version = '1.1'
215
    
216
    def __init__(
217
            self,
218
            tipo_operacion: str,
219
            motivo_traslado: str = None,
220
            clave_de_pedimento: str = None,
221
            certificado_origen: int = None,
222
            num_certificado_origen: str = None,
223
            numero_exportador_confiable: str = None,
224
            incoterm: str = None,
225
            subdivision: int = None,
226
            observaciones: str = None,
227
            tipo_cambio_usd: Decimal | int = None,
228
            total_usd: Decimal | int = None,
229
            emisor: Emisor | dict = None,
230
            propietario: Propietario | dict | Sequence[Propietario | dict] = None,
231
            receptor: Receptor | dict = None,
232
            destinatario: Destinatario | dict | Sequence[Destinatario | dict] = None,
233
            mercancias: Mercancia | dict | Sequence[Mercancia | dict] = None,
234
    ): 
235
        super().__init__({
236
            'Version': self.version,
237
            'TipoOperacion': tipo_operacion,
238
            'MotivoTraslado': motivo_traslado,
239
            'ClaveDePedimento': clave_de_pedimento,
240
            'CertificadoOrigen': certificado_origen,
241
            'NumCertificadoOrigen': num_certificado_origen,
242
            'NumeroExportadorConfiable': numero_exportador_confiable,
243
            'Incoterm': incoterm,
244
            'Subdivision': subdivision,
245
            'Observaciones': observaciones,
246
            'TipoCambioUSD': tipo_cambio_usd,
247
            'TotalUSD': total_usd,
248
            'Emisor': emisor,
249
            'Propietario': propietario,
250
            'Receptor': receptor,
251
            'Destinatario': destinatario,
252
            'Mercancias': mercancias,
253
        })
254
        
255
256