satcfdi.create.cfd.cce20.Emisor.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 3
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
"""cce20 http://www.sat.gob.mx/ComercioExterior20"""
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 View Code Duplication
class Domicilio(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
11
    """
12
    Nodo requerido para expresar el domicilio del destinatario de la mercancía.
13
    
14
    :param calle: Atributo requerido que sirve para precisar la calle en que está ubicado el domicilio del destinatario de la mercancía.
15
    :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.
16
    :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.
17
    :param codigo_postal: Atributo requerido que sirve para registrar el código postal en donde se encuentra ubicado el domicilio del destinatario de la mercancía.
18
    :param numero_exterior: Atributo opcional que sirve para expresar el número exterior en donde se ubica el domicilio del destinatario de la mercancía.
19
    :param numero_interior: Atributo opcional que sirve para expresar el número interior, en caso de existir, en donde se ubica el domicilio del destinatario de la mercancía.
20
    :param colonia: Atributo opcional que sirve para expresar la colonia o dato análogo en donde se ubica el domicilio del destinatario de la mercancía.
21
    :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.
22
    :param referencia: Atributo opcional para registrar 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.
23
    :param municipio: Atributo opcional que sirve para precisar el municipio, delegación o alcaldía, condado o dato análogo en donde se encuentra ubicado el destinatario de la mercancía.
24
    """
25
    
26
    def __init__(
27
            self,
28
            calle: str,
29
            estado: str,
30
            pais: str,
31
            codigo_postal: str,
32
            numero_exterior: str = None,
33
            numero_interior: str = None,
34
            colonia: str = None,
35
            localidad: str = None,
36
            referencia: str = None,
37
            municipio: str = None,
38
    ): 
39
        super().__init__({
40
            'Calle': calle,
41
            'Estado': estado,
42
            'Pais': pais,
43
            'CodigoPostal': codigo_postal,
44
            'NumeroExterior': numero_exterior,
45
            'NumeroInterior': numero_interior,
46
            'Colonia': colonia,
47
            'Localidad': localidad,
48
            'Referencia': referencia,
49
            'Municipio': municipio,
50
        })
51
        
52
53
class Destinatario(ScalarMap):
54
    """
55
    Nodo opcional para capturar los datos del destinatario de la mercancía cuando éste sea distinto del receptor del CFDI.
56
    
57
    :param domicilio: Nodo requerido para expresar el domicilio del destinatario de la mercancía.
58
    :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.
59
    :param nombre: Atributo opcional para expresar el nombre completo, denominación o razón social del destinatario de la mercancía exportada.
60
    """
61
    
62
    def __init__(
63
            self,
64
            domicilio: Domicilio | dict | Sequence[Domicilio | dict],
65
            num_reg_id_trib: str = None,
66
            nombre: str = None,
67
    ): 
68
        super().__init__({
69
            'Domicilio': domicilio,
70
            'NumRegIdTrib': num_reg_id_trib,
71
            'Nombre': nombre,
72
        })
73
        
74
75
class Receptor(ScalarMap):
76
    """
77
    Nodo condicional para capturar los datos complementarios del receptor del CFDI.
78
    
79
    :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.
80
    :param domicilio: Nodo requerido para expresar el domicilio del receptor del comprobante.
81
    """
82
    
83
    def __init__(
84
            self,
85
            num_reg_id_trib: str = None,
86
            domicilio: Domicilio | dict = None,
87
    ): 
88
        super().__init__({
89
            'NumRegIdTrib': num_reg_id_trib,
90
            'Domicilio': domicilio,
91
        })
92
        
93
94
class Propietario(ScalarMap):
95
    """
96
    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.
97
    
98
    :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.
99
    :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.
100
    """
101
    
102
    def __init__(
103
            self,
104
            num_reg_id_trib: str,
105
            residencia_fiscal: str,
106
    ): 
107
        super().__init__({
108
            'NumRegIdTrib': num_reg_id_trib,
109
            'ResidenciaFiscal': residencia_fiscal,
110
        })
111
        
112
113
class Emisor(ScalarMap):
114
    """
115
    Nodo opcional para capturar los datos complementarios del emisor del comprobante.
116
    
117
    :param domicilio: Nodo requerido para expresar el domicilio del emisor del comprobante.
118
    :param curp: Atributo condicional para expresar la CURP del emisor del CFDI cuando es una persona física.
119
    """
120
    
121
    def __init__(
122
            self,
123
            domicilio: Domicilio | dict,
124
            curp: str = None,
125
    ): 
126
        super().__init__({
127
            'Domicilio': domicilio,
128
            'Curp': curp,
129
        })
130
        
131
132
class DescripcionesEspecificas(ScalarMap):
133
    """
134
    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.
135
    
136
    :param marca: Atributo requerido que indica la marca de la mercancía.
137
    :param modelo: Atributo opcional que indica el modelo de la mercancía.
138
    :param sub_modelo: Atributo opcional que indica el submodelo de la mercancía.
139
    :param numero_serie: Atributo opcional que indica el número de serie de la mercancía.
140
    """
141
    
142
    def __init__(
143
            self,
144
            marca: str,
145
            modelo: str = None,
146
            sub_modelo: str = None,
147
            numero_serie: str = None,
148
    ): 
149
        super().__init__({
150
            'Marca': marca,
151
            'Modelo': modelo,
152
            'SubModelo': sub_modelo,
153
            'NumeroSerie': numero_serie,
154
        })
155
        
156
157 View Code Duplication
class Mercancia(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
158
    """
159
    Nodo requerido para capturar la información de la declaración de cada mercancía exportada.
160
    
161
    :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.
162
    :param valor_dolares: Atributo requerido que indica el valor total en dólares de Estados Unidos de América (USD).
163
    :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. Debe ser conforme al catálogo c_FraccionArancelaria publicado en el Portal del SAT en internet.
164
    :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.
165
    :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 al catálogo c_UnidadAduana publicado en el Portal del SAT en internet.
166
    :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 de América (USD), el cual puede estar registrado hasta con 6 decimales.
167
    :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.
168
    """
169
    
170
    def __init__(
171
            self,
172
            no_identificacion: str,
173
            valor_dolares: Decimal | int,
174
            fraccion_arancelaria: str = None,
175
            cantidad_aduana: Decimal | int = None,
176
            unidad_aduana: str = None,
177
            valor_unitario_aduana: Decimal | int = None,
178
            descripciones_especificas: DescripcionesEspecificas | dict | Sequence[DescripcionesEspecificas | dict] = None,
179
    ): 
180
        super().__init__({
181
            'NoIdentificacion': no_identificacion,
182
            'ValorDolares': valor_dolares,
183
            'FraccionArancelaria': fraccion_arancelaria,
184
            'CantidadAduana': cantidad_aduana,
185
            'UnidadAduana': unidad_aduana,
186
            'ValorUnitarioAduana': valor_unitario_aduana,
187
            'DescripcionesEspecificas': descripciones_especificas,
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 caso de exportación definitiva de mercancías.
194
    
195
    :param clave_de_pedimento: Atributo requerido que indica la clave de pedimento que se haya declarado conforme al catálogo c_ClavePedimento publicado en el Portal del SAT en internet.
196
    :param certificado_origen: Atributo requerido para indicar 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.
197
    :param tipo_cambio_usd: Atributo requerido que indica el número de pesos mexicanos que equivalen a un dólar de Estados Unidos de América, de acuerdo con el artículo 20 del Código Fiscal de la Federación.
198
    :param total_usd: Atributo requerido que indica el importe total del comprobante en dólares de Estados Unidos de América.
199
    :param mercancias: Nodo requerido para capturar la información de la declaración de las mercancías exportadas.
200
    :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.
201
    :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.
202
    :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.
203
    :param incoterm: Atributo condicional que indica la clave del INCOTERM aplicable a la factura, conforme al catálogo c_INCOTERM publicado en el Portal del SAT en internet.
204
    :param observaciones: Atributo opcional para ingresar información adicional, como alguna leyenda que se considere incluir en el CFDI.
205
    :param emisor: Nodo opcional para capturar los datos complementarios del emisor del comprobante.
206
    :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.
207
    :param receptor: Nodo condicional para capturar los datos complementarios del receptor del CFDI.
208
    :param destinatario: Nodo opcional para capturar los datos del destinatario de la mercancía cuando éste sea distinto del receptor del CFDI.
209
    """
210
    
211
    tag = '{http://www.sat.gob.mx/ComercioExterior20}ComercioExterior'
212
    version = '2.0'
213
    
214
    def __init__(
215
            self,
216
            clave_de_pedimento: str,
217
            certificado_origen: int,
218
            tipo_cambio_usd: Decimal | int,
219
            total_usd: Decimal | int,
220
            mercancias: Mercancia | dict | Sequence[Mercancia | dict],
221
            motivo_traslado: str = None,
222
            num_certificado_origen: str = None,
223
            numero_exportador_confiable: str = None,
224
            incoterm: str = None,
225
            observaciones: str = None,
226
            emisor: Emisor | dict = None,
227
            propietario: Propietario | dict | Sequence[Propietario | dict] = None,
228
            receptor: Receptor | dict = None,
229
            destinatario: Destinatario | dict | Sequence[Destinatario | dict] = None,
230
    ): 
231
        super().__init__({
232
            'Version': self.version,
233
            'ClaveDePedimento': clave_de_pedimento,
234
            'CertificadoOrigen': certificado_origen,
235
            'TipoCambioUSD': tipo_cambio_usd,
236
            'TotalUSD': total_usd,
237
            'Mercancias': mercancias,
238
            'MotivoTraslado': motivo_traslado,
239
            'NumCertificadoOrigen': num_certificado_origen,
240
            'NumeroExportadorConfiable': numero_exportador_confiable,
241
            'Incoterm': incoterm,
242
            'Observaciones': observaciones,
243
            'Emisor': emisor,
244
            'Propietario': propietario,
245
            'Receptor': receptor,
246
            'Destinatario': destinatario,
247
        })
248
        
249
250