DetalleMercancia.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 14
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 13
nop 6
dl 0
loc 14
rs 9.75
c 0
b 0
f 0
1
"""cartaporte http://www.sat.gob.mx/CartaPorte"""
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 opcional para registrar el domicilio de la(s) persona(s) a quién(es) se debe notificar de la llegada del medio de transporte con los bienes o mercancías que se trasladan.
13
    
14
    :param calle: Atributo requerido que sirve para precisar la calle en que está ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
15
    :param estado: Atributo requerido para precisar el estado, entidad, región, comunidad, u otra figura análoga en donde se encuentra ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
16
    :param pais: Atributo requerido que sirve para precisar la clave del país en donde se encuentra ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan, conforme al 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 para asentar el código postal (PO, BOX) en donde se encuentra ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
18
    :param numero_exterior: Atributo opcional que sirve para expresar el número exterior en donde se ubica el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
19
    :param numero_interior: Atributo opcional que sirve para expresar el número interior, en caso de existir, en donde se ubica el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
20
    :param colonia: Atributo opcional que sirve para expresar la clave de la colonia o dato análogo en donde se ubica el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
21
    :param localidad: Atributo opcional para precisar la clave de la ciudad, población, distrito u análogo en donde se encuentra ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
22
    :param referencia: Atributo opcional para expresar una referencia geográfica adicional que permita una más fácil o precisa ubicación de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan; por ejemplo, las coordenadas GPS.
23
    :param municipio: Atributo opcional para precisar la clave del municipio, delegación o alcaldía, condado u otro análogo en donde se encuentra ubicado el domicilio de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan.
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 Notificado(ScalarMap):
54
    """
55
    Nodo opcional para indicar los datos de identificación de la(s) persona(s) a quién(es) se debe notificar de la llegada del medio de transporte con los bienes o mercancías que se trasladan.
56
    
57
    :param rfc_notificado: Atributo condicional para registrar el RFC de la persona a la que se debe notificar del arribo del medio de transporte con los bienes o mercancías que se trasladan.
58
    :param nombre_notificado: Atributo opcional para registrar el nombre de la persona a la que se debe notificar del arribo del medio de transporte con los bienes o mercancías que se trasladan.
59
    :param num_reg_id_trib_notificado: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales de la persona notificada del arribo del medio de transporte con los bienes o mercancías que se trasladan, cuando sea residente en el extranjero.
60
    :param residencia_fiscal_notificado: Atributo condicional para registrar la clave del país de residencia para efectos fiscales de la persona notificada del arribo del transporte, 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.
61
    :param domicilio: Nodo opcional para registrar el domicilio de la(s) persona(s) a quién(es) se debe notificar de la llegada del medio de transporte con los bienes o mercancías que se trasladan.
62
    """
63
    
64
    def __init__(
65
            self,
66
            rfc_notificado: str = None,
67
            nombre_notificado: str = None,
68
            num_reg_id_trib_notificado: str = None,
69
            residencia_fiscal_notificado: str = None,
70
            domicilio: Domicilio | dict = None,
71
    ): 
72
        super().__init__({
73
            'RFCNotificado': rfc_notificado,
74
            'NombreNotificado': nombre_notificado,
75
            'NumRegIdTribNotificado': num_reg_id_trib_notificado,
76
            'ResidenciaFiscalNotificado': residencia_fiscal_notificado,
77
            'Domicilio': domicilio,
78
        })
79
        
80
81
class Arrendatario(ScalarMap):
82
    """
83
    Nodo condicional para indicar los datos del (los) arrendatario(s) del medio de transporte, siempre que el emisor del comprobante sea distinto al dueño del transporte.
84
    
85
    :param rfc_arrendatario: Atributo condicional para registrar el RFC del arrendatario del medio de transporte.
86
    :param nombre_arrendatario: Atributo opcional para registrar el nombre del arrendatario del medio de transporte.
87
    :param num_reg_id_trib_arrendatario: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del arrendatario del medio de transporte, cuando sea residente en el extranjero.
88
    :param residencia_fiscal_arrendatario: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del arrendatario del transporte, 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.
89
    :param domicilio: Nodo opcional para registrar el domicilio del arrendatario del transporte.
90
    """
91
    
92
    def __init__(
93
            self,
94
            rfc_arrendatario: str = None,
95
            nombre_arrendatario: str = None,
96
            num_reg_id_trib_arrendatario: str = None,
97
            residencia_fiscal_arrendatario: str = None,
98
            domicilio: Domicilio | dict = None,
99
    ): 
100
        super().__init__({
101
            'RFCArrendatario': rfc_arrendatario,
102
            'NombreArrendatario': nombre_arrendatario,
103
            'NumRegIdTribArrendatario': num_reg_id_trib_arrendatario,
104
            'ResidenciaFiscalArrendatario': residencia_fiscal_arrendatario,
105
            'Domicilio': domicilio,
106
        })
107
        
108
109
class Propietario(ScalarMap):
110
    """
111
    Nodo condicional para indicar los datos del (los) propietario(s) del medio de transporte, siempre que el emisor del comprobante sea distinto al dueño del transporte.
112
    
113
    :param rfc_propietario: Atributo condicional para registrar el RFC del propietario del medio de transporte.
114
    :param nombre_propietario: Atributo opcional para registrar el nombre del propietario del medio de transporte.
115
    :param num_reg_id_trib_propietario: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del propietario del transporte, cuando sea residente en el extranjero.
116
    :param residencia_fiscal_propietario: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del propietario del transporte, 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.
117
    :param domicilio: Nodo opcional para registrar el domicilio del propietario para el traslado de la mercancía.
118
    """
119
    
120
    def __init__(
121
            self,
122
            rfc_propietario: str = None,
123
            nombre_propietario: str = None,
124
            num_reg_id_trib_propietario: str = None,
125
            residencia_fiscal_propietario: str = None,
126
            domicilio: Domicilio | dict = None,
127
    ): 
128
        super().__init__({
129
            'RFCPropietario': rfc_propietario,
130
            'NombrePropietario': nombre_propietario,
131
            'NumRegIdTribPropietario': num_reg_id_trib_propietario,
132
            'ResidenciaFiscalPropietario': residencia_fiscal_propietario,
133
            'Domicilio': domicilio,
134
        })
135
        
136
137
class Operador(ScalarMap):
138
    """
139
    Nodo requerido para indicar los datos del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
140
    
141
    :param rfc_operador: Atributo condicional para registrar el RFC del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
142
    :param num_licencia: Atributo condicional para expresar el número de folio de la licencia o el permiso otorgado al operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
143
    :param nombre_operador: Atributo opcional para registrar el nombre del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
144
    :param num_reg_id_trib_operador: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías, cuando sea residente en el extranjero.
145
    :param residencia_fiscal_operador: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías, 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.
146
    :param domicilio: Nodo opcional para registrar la información del domicilio del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
147
    """
148
    
149
    def __init__(
150
            self,
151
            rfc_operador: str = None,
152
            num_licencia: str = None,
153
            nombre_operador: str = None,
154
            num_reg_id_trib_operador: str = None,
155
            residencia_fiscal_operador: str = None,
156
            domicilio: Domicilio | dict = None,
157
    ): 
158
        super().__init__({
159
            'RFCOperador': rfc_operador,
160
            'NumLicencia': num_licencia,
161
            'NombreOperador': nombre_operador,
162
            'NumRegIdTribOperador': num_reg_id_trib_operador,
163
            'ResidenciaFiscalOperador': residencia_fiscal_operador,
164
            'Domicilio': domicilio,
165
        })
166
        
167
168
class Operadores(ScalarMap):
169
    """
170
    Nodo condicional para indicar los datos del(los) operador(es) del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
171
    
172
    :param operador: Nodo requerido para indicar los datos del operador del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
173
    """
174
    
175
    def __init__(
176
            self,
177
            operador: Operador | dict | Sequence[Operador | dict],
178
    ): 
179
        super().__init__({
180
            'Operador': operador,
181
        })
182
        
183
184
class FiguraTransporte(ScalarMap):
185
    """
186
    Nodo opcional para indicar los datos de la figura del transporte que interviene en el traslado de los bienes o mercancías, cuando el dueño del medio de transporte es diferente del emisor del comprobante con el complemento carta porte.
187
    
188
    :param cve_transporte: Atributo requerido para expresar la clave que identifica el medio por el cual se transportan los bienes o mercancías.
189
    :param operadores: Nodo condicional para indicar los datos del(los) operador(es) del autotransporte de carga federal en el que se trasladan los bienes o mercancías.
190
    :param propietario: Nodo condicional para indicar los datos del (los) propietario(s) del medio de transporte, siempre que el emisor del comprobante sea distinto al dueño del transporte.
191
    :param arrendatario: Nodo condicional para indicar los datos del (los) arrendatario(s) del medio de transporte, siempre que el emisor del comprobante sea distinto al dueño del transporte.
192
    :param notificado: Nodo opcional para indicar los datos de identificación de la(s) persona(s) a quién(es) se debe notificar de la llegada del medio de transporte con los bienes o mercancías que se trasladan.
193
    """
194
    
195
    def __init__(
196
            self,
197
            cve_transporte: str,
198
            operadores: Operadores | dict | Sequence[Operadores | dict] = None,
199
            propietario: Propietario | dict | Sequence[Propietario | dict] = None,
200
            arrendatario: Arrendatario | dict | Sequence[Arrendatario | dict] = None,
201
            notificado: Notificado | dict | Sequence[Notificado | dict] = None,
202
    ): 
203
        super().__init__({
204
            'CveTransporte': cve_transporte,
205
            'Operadores': operadores,
206
            'Propietario': propietario,
207
            'Arrendatario': arrendatario,
208
            'Notificado': notificado,
209
        })
210
        
211
212
class DerechosDePaso(ScalarMap):
213
    """
214
    Nodo opcional para registrar los tipos de derechos de paso cubiertos por el transportista en las vías férreas de las cuales no es concesionario o asignatario, así como la distancia establecida en kilómetros.
215
    
216
    :param tipo_derecho_de_paso: Atributo requerido para registrar el valor de la clave del derecho de paso pagado por el transportista en las vías férreas de las cuales no es concesionario o asignatario.
217
    :param kilometraje_pagado: Atributo requerido para registrar el total de kilómetros pagados por el transportista en las vías férreas de las cuales no es concesionario o asignatario con el derecho de paso.
218
    """
219
    
220
    def __init__(
221
            self,
222
            tipo_derecho_de_paso: str,
223
            kilometraje_pagado: Decimal | int,
224
    ): 
225
        super().__init__({
226
            'TipoDerechoDePaso': tipo_derecho_de_paso,
227
            'KilometrajePagado': kilometraje_pagado,
228
        })
229
        
230
231
class Contenedor(ScalarMap):
232
    """
233
    Nodo opcional para especificar el tipo de contenedor o vagón en el que se trasladan los bienes o mercancías vía férrea.
234
    
235
    :param tipo_contenedor: Atributo requerido para registrar la clave con las que se identifica el tipo de contenedor o vagón en el que se traslada los bienes o mercancías.
236
    :param peso_contenedor_vacio: Atributo requerido para registrar el peso en kilogramos del contenedor vacío en el que se trasladan los bienes o mercancías.
237
    :param peso_neto_mercancia: Atributo requerido para registrar el peso neto en kilogramos de los bienes o mercancías que trasladan en el contenedor.
238
    """
239
    
240
    def __init__(
241
            self,
242
            tipo_contenedor: str,
243
            peso_contenedor_vacio: Decimal | int,
244
            peso_neto_mercancia: Decimal | int,
245
    ): 
246
        super().__init__({
247
            'TipoContenedor': tipo_contenedor,
248
            'PesoContenedorVacio': peso_contenedor_vacio,
249
            'PesoNetoMercancia': peso_neto_mercancia,
250
        })
251
        
252
253 View Code Duplication
class Carro(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
254
    """
255
    Nodo requerido para registrar la información que permite identificar los carros en los que se trasladan los bienes o mercancías vía férrea.
256
    
257
    :param tipo_carro: Atributo requerido para registrar la clave del tipo de carro utilizado para el traslado de los bienes o mercancías vía férrea.
258
    :param matricula_carro: Atributo requerido para expresar el número de contenedor, carro de ferrocarril o número económico del vehículo en el que se trasladan los bienes o mercancías vía férrea.
259
    :param guia_carro: Atributo requerido para expresar el número de guía asignado al contenedor, carro de ferrocarril o vehículo en el que se trasladan los bienes o mercancías vía férrea.
260
    :param toneladas_netas_carro: Atributo requerido para registrar la cantidad de las toneladas netas contenidas en el contenedor, carro de ferrocarril o vehículo en el que se trasladan los bienes o mercancías vía férrea.
261
    :param contenedor: Nodo opcional para especificar el tipo de contenedor o vagón en el que se trasladan los bienes o mercancías vía férrea.
262
    """
263
    
264
    def __init__(
265
            self,
266
            tipo_carro: str,
267
            matricula_carro: str,
268
            guia_carro: str,
269
            toneladas_netas_carro: Decimal | int,
270
            contenedor: Contenedor | dict | Sequence[Contenedor | dict] = None,
271
    ): 
272
        super().__init__({
273
            'TipoCarro': tipo_carro,
274
            'MatriculaCarro': matricula_carro,
275
            'GuiaCarro': guia_carro,
276
            'ToneladasNetasCarro': toneladas_netas_carro,
277
            'Contenedor': contenedor,
278
        })
279
        
280
281 View Code Duplication
class TransporteFerroviario(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
282
    """
283
    Nodo condicional para registrar la información que permita la identificación del carro o contenedor en el que se transportan los bienes o mercancías vía férrea.
284
    
285
    :param tipo_de_servicio: Atributo requerido para registrar la clave del tipo de servicio proporcionado para el traslado de los bienes o mercancías vía férrea.
286
    :param carro: Nodo requerido para registrar la información que permite identificar los carros en los que se trasladan los bienes o mercancías vía férrea.
287
    :param nombre_aseg: Atributo opcional para expresar el nombre de la aseguradora que cubre los riesgos para el traslado de los bienes o mercancías vía férrea.
288
    :param num_poliza_seguro: Atributo opcional para registrar el número de póliza asignado por la aseguradora para la protección e indemnización por responsabilidad civil para el traslado de los bienes o mercancías vía férrea.
289
    :param concesionario: Atributo condicional para registrar la clave del RFC del concesionario o asignatario del transporte, siempre que el traslado de la mercancía se efectúe por un concesionario diferente al emisor del comprobante.
290
    :param derechos_de_paso: Nodo opcional para registrar los tipos de derechos de paso cubiertos por el transportista en las vías férreas de las cuales no es concesionario o asignatario, así como la distancia establecida en kilómetros.
291
    """
292
    
293
    def __init__(
294
            self,
295
            tipo_de_servicio: str,
296
            carro: Carro | dict | Sequence[Carro | dict],
297
            nombre_aseg: str = None,
298
            num_poliza_seguro: str = None,
299
            concesionario: str = None,
300
            derechos_de_paso: DerechosDePaso | dict | Sequence[DerechosDePaso | dict] = None,
301
    ): 
302
        super().__init__({
303
            'TipoDeServicio': tipo_de_servicio,
304
            'Carro': carro,
305
            'NombreAseg': nombre_aseg,
306
            'NumPolizaSeguro': num_poliza_seguro,
307
            'Concesionario': concesionario,
308
            'DerechosDePaso': derechos_de_paso,
309
        })
310
        
311
312
class TransporteAereo(ScalarMap):
313
    """
314
    Nodo condicional para registrar la información que permita la identificación del transporte aéreo por medio del cual se trasladan los bienes o mercancías.
315
    
316
    :param perm_sct: Atributo requerido para precisar la clave del tipo de permiso proporcionado por la SCT o la autoridad análoga, para el transporte de bienes o mercancías vía aérea.
317
    :param num_permiso_sct: Atributo requerido para precisar el número de permiso o algún valor análogo proporcionado por la SCT o la autoridad análoga, para el transporte de bienes o mercancías vía aérea.
318
    :param matricula_aeronave: Atributo requerido para registrar el número de matrícula de la aeronave que opera en territorio nacional y que se compone de valores alfanuméricos más el carácter especial de guion medio “-“, con una longitud de 10 posiciones.
319
    :param numero_guia: Atributo requerido para registrar el número de guía aérea con el que se trasladan los bienes o mercancías.
320
    :param codigo_transportista: Atributo requerido para precisar el valor del código que tiene asignado el transportista y debe contener una clave válida del catálogo “catCartaPorte:c_CodigoTransporteAereo”.
321
    :param nombre_aseg: Atributo opcional para expresar el nombre de la aseguradora que cubre los riesgos del medio que transporta los bienes o mercancías.
322
    :param num_poliza_seguro: Atributo opcional para registrar el número de póliza asignado por la aseguradora para la protección e indemnización por responsabilidad civil de la aeronave que transporta los bienes o mercancías.
323
    :param lugar_contrato: Atributo opcional para registrar el lugar, entidad, región, localidad o análoga, donde se celebró el contrato para el traslado de los bienes o mercancías.
324
    :param rfc_transportista: Atributo opcional para registrar el RFC del transportista de los bienes o mercancías, en caso de que sea diferente del emisor del CFDI.
325
    :param num_reg_id_trib_transpor: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del transportista, cuando sea residente en el extranjero.
326
    :param residencia_fiscal_transpor: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del transportista, 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.
327
    :param nombre_transportista: Atributo opcional para registrar el nombre del transportista ya sea nacional o extranjero.
328
    :param rfc_embarcador: Atributo opcional para registrar el RFC del embarcador de los bienes o mercancías que se trasladan y debe estar en la lista de contribuyentes inscritos no cancelados del SAT (l_RFC).
329
    :param num_reg_id_trib_embarc: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del embarcador de los bienes o mercancías que se trasladan, cuando sea residente en el extranjero.
330
    :param residencia_fiscal_embarc: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del embarcador de los bienes o mercancías, 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.
331
    :param nombre_embarcador: Atributo opcional para registrar el nombre del embarcador de los bienes o mercancías que se trasladan, ya sea nacional o extranjero.
332
    """
333
    
334
    def __init__(
335
            self,
336
            perm_sct: str,
337
            num_permiso_sct: str,
338
            matricula_aeronave: str,
339
            numero_guia: str,
340
            codigo_transportista: str,
341
            nombre_aseg: str = None,
342
            num_poliza_seguro: str = None,
343
            lugar_contrato: str = None,
344
            rfc_transportista: str = None,
345
            num_reg_id_trib_transpor: str = None,
346
            residencia_fiscal_transpor: str = None,
347
            nombre_transportista: str = None,
348
            rfc_embarcador: str = None,
349
            num_reg_id_trib_embarc: str = None,
350
            residencia_fiscal_embarc: str = None,
351
            nombre_embarcador: str = None,
352
    ): 
353
        super().__init__({
354
            'PermSCT': perm_sct,
355
            'NumPermisoSCT': num_permiso_sct,
356
            'MatriculaAeronave': matricula_aeronave,
357
            'NumeroGuia': numero_guia,
358
            'CodigoTransportista': codigo_transportista,
359
            'NombreAseg': nombre_aseg,
360
            'NumPolizaSeguro': num_poliza_seguro,
361
            'LugarContrato': lugar_contrato,
362
            'RFCTransportista': rfc_transportista,
363
            'NumRegIdTribTranspor': num_reg_id_trib_transpor,
364
            'ResidenciaFiscalTranspor': residencia_fiscal_transpor,
365
            'NombreTransportista': nombre_transportista,
366
            'RFCEmbarcador': rfc_embarcador,
367
            'NumRegIdTribEmbarc': num_reg_id_trib_embarc,
368
            'ResidenciaFiscalEmbarc': residencia_fiscal_embarc,
369
            'NombreEmbarcador': nombre_embarcador,
370
        })
371
        
372
373 View Code Duplication
class TransporteMaritimo(ScalarMap):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
374
    """
375
    Nodo condicional para registrar la información que permita la identificación de la embarcación por medio del cual se transportan los bienes o mercancías, vía marítima.
376
    
377
    :param tipo_embarcacion: Atributo requerido para registrar la clave de identificación del transporte del tipo de embarcación que es utilizado para trasladar los bienes o mercancías.
378
    :param matricula: Atributo requerido para registrar el número de la matrícula o registro de la embarcación que es utilizada para transportar los bienes o mercancías.
379
    :param numero_omi: Atributo requerido para registrar el número de identificación asignado por la Organización Marítima Internacional a la embarcación encargada de transportar los bienes o mercancías.
380
    :param nacionalidad_embarc: Atributo requerido para expresar el país correspondiente a la nacionalidad de la embarcación que transporta los bienes o mercancías.
381
    :param unidades_de_arq_bruto: Atributo requerido para registrar el valor de las unidades de arqueo bruto conforme a las medidas internacionales definidas por el ITC para cada tipo de buque o embarcación en la que se transportan los bienes o mercancías.
382
    :param tipo_carga: Atributo requerido para especificar el tipo de carga bajo el cual se tipifican los bienes o mercancías que se transportan en la embarcación.
383
    :param num_cert_itc: Atributo requerido para registrar el número del certificado emitido por la ITC para la embarcación o buque que transporta los bienes o mercancías.
384
    :param nombre_agente_naviero: Atributo requerido para registrar el nombre del agente naviero autorizado para gestionar el traslado de los bienes o mercancías vía marítima.
385
    :param num_autorizacion_naviero: Atributo requerido para expresar el número de registro de autorización como agente naviero consignatario emitido por la SCT.
386
    :param contenedor: Nodo requerido para registrar los datos del contenedor en el que transportan los bienes o mercancías.
387
    :param perm_sct: Atributo opcional para precisar la clave del tipo de permiso proporcionado por la SCT, el cual debe corresponder a la navegación que se está utilizando para el traslado de los bienes o mercancías registrado en el catálogo catCartaPorte:c_TipoPermiso.
388
    :param num_permiso_sct: Atributo opcional para precisar el número de permiso proporcionado por la SCT para la navegación.
389
    :param nombre_aseg: Atributo opcional para expresar el nombre de la aseguradora que cubre el seguro de protección e indemnización por responsabilidad civil de la embarcación.
390
    :param num_poliza_seguro: Atributo opcional para registrar el número de póliza asignado por la aseguradora para la protección e indemnización por responsabilidad civil de la embarcación.
391
    :param anio_embarcacion: Atributo opcional para expresar el año de la embarcación en la que se transportan los bienes o mercancías.
392
    :param nombre_embarc: Atributo opcional para expresar el nombre de la embarcación en la que se transportan los bienes o mercancías.
393
    :param eslora: Atributo opcional para registrar la longitud de eslora, definida en pies, con la que cuenta la embarcación o buque en el que se transportan los bienes o mercancías.
394
    :param manga: Atributo opcional para registrar la longitud de manga, definida en pies, con la que cuenta la embarcación o buque en el que se transportan los bienes o mercancías.
395
    :param calado: Atributo opcional para registrar la longitud del calado, definida en pies, con la que cuenta la embarcación o buque en el que se transportan los bienes o mercancías.
396
    :param linea_naviera: Atributo opcional para expresar el nombre de la línea naviera autorizada de gestionar el traslado de los bienes o mercancías vía marítima.
397
    :param num_viaje: Atributo opcional para expresar el número del viaje con el que se identifica el traslado de los bienes o mercancías en el buque o embarcación.
398
    :param num_conoc_embarc: Atributo opcional para expresar el número de conocimiento de embarque que identifica el traslado de los bienes o mercancías.
399
    """
400
    
401
    def __init__(
402
            self,
403
            tipo_embarcacion: str,
404
            matricula: str,
405
            numero_omi: str,
406
            nacionalidad_embarc: str,
407
            unidades_de_arq_bruto: Decimal | int,
408
            tipo_carga: str,
409
            num_cert_itc: str,
410
            nombre_agente_naviero: str,
411
            num_autorizacion_naviero: str,
412
            contenedor: Contenedor | dict | Sequence[Contenedor | dict],
413
            perm_sct: str = None,
414
            num_permiso_sct: str = None,
415
            nombre_aseg: str = None,
416
            num_poliza_seguro: str = None,
417
            anio_embarcacion: int = None,
418
            nombre_embarc: str = None,
419
            eslora: Decimal | int = None,
420
            manga: Decimal | int = None,
421
            calado: Decimal | int = None,
422
            linea_naviera: str = None,
423
            num_viaje: str = None,
424
            num_conoc_embarc: str = None,
425
    ): 
426
        super().__init__({
427
            'TipoEmbarcacion': tipo_embarcacion,
428
            'Matricula': matricula,
429
            'NumeroOMI': numero_omi,
430
            'NacionalidadEmbarc': nacionalidad_embarc,
431
            'UnidadesDeArqBruto': unidades_de_arq_bruto,
432
            'TipoCarga': tipo_carga,
433
            'NumCertITC': num_cert_itc,
434
            'NombreAgenteNaviero': nombre_agente_naviero,
435
            'NumAutorizacionNaviero': num_autorizacion_naviero,
436
            'Contenedor': contenedor,
437
            'PermSCT': perm_sct,
438
            'NumPermisoSCT': num_permiso_sct,
439
            'NombreAseg': nombre_aseg,
440
            'NumPolizaSeguro': num_poliza_seguro,
441
            'AnioEmbarcacion': anio_embarcacion,
442
            'NombreEmbarc': nombre_embarc,
443
            'Eslora': eslora,
444
            'Manga': manga,
445
            'Calado': calado,
446
            'LineaNaviera': linea_naviera,
447
            'NumViaje': num_viaje,
448
            'NumConocEmbarc': num_conoc_embarc,
449
        })
450
        
451
452
class Remolque(ScalarMap):
453
    """
454
    Nodo requerido para expresar la información del remolque o semirremolques que se emplean con el autotransporte para el traslado de los bienes o mercancías.
455
    
456
    :param sub_tipo_rem: Atributo requerido para expresar la clave del subtipo de remolque o semirremolques que se emplean con el autotransporte para el traslado de los bienes o mercancías.
457
    :param placa: Atributo requerido para registrar el valor de la placa vehicular del remolque o semirremolque que es utilizado para transportar los bienes o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.
458
    """
459
    
460
    def __init__(
461
            self,
462
            sub_tipo_rem: str,
463
            placa: str,
464
    ): 
465
        super().__init__({
466
            'SubTipoRem': sub_tipo_rem,
467
            'Placa': placa,
468
        })
469
        
470
471
class IdentificacionVehicular(ScalarMap):
472
    """
473
    Nodo requerido para registrar los datos de identificación del autotransporte en el que se trasladan los bienes o mercancías.
474
    
475
    :param config_vehicular: Atributo requerido para expresar la clave de nomenclatura del autotransporte que es utilizado para transportar los bienes o mercancías.
476
    :param placa_vm: Atributo requerido para registrar el valor de la placa vehicular del autotransporte que es utilizado para transportar los bienes o mercancías, se deben registrar solo los caracteres alfanuméricos, sin guiones y espacios.
477
    :param anio_modelo_vm: Atributo requerido para registrar el año del autotransporte que es utilizado para transportar los bienes o mercancías.
478
    """
479
    
480
    def __init__(
481
            self,
482
            config_vehicular: str,
483
            placa_vm: str,
484
            anio_modelo_vm: int,
485
    ): 
486
        super().__init__({
487
            'ConfigVehicular': config_vehicular,
488
            'PlacaVM': placa_vm,
489
            'AnioModeloVM': anio_modelo_vm,
490
        })
491
        
492
493
class AutotransporteFederal(ScalarMap):
494
    """
495
    Nodo condicional para registrar la información que permita la identificación del autotransporte de carga federal, por medio del cual se transportan los bienes o mercancías, que transitan a través de las carreteras federales del territorio nacional.
496
    
497
    :param perm_sct: Atributo requerido para precisar la clave del tipo de permiso proporcionado por la SCT, el cual debe corresponder de acuerdo al tipo de autotransporte utilizado para el traslado de los bienes o mercancías registrado en el catálogo catCartaPorte:c_TipoPermiso.
498
    :param num_permiso_sct: Atributo requerido para precisar el número del permiso otorgado por la SCT, el cual se debe capturar de acuerdo al tipo de autotransporte utilizado para el traslado de los bienes o mercancías.
499
    :param nombre_aseg: Atributo requerido para expresar el nombre de la aseguradora que cubre los riesgos del autotransporte utilizado para el traslado de los bienes o mercancías.
500
    :param num_poliza_seguro: Atributo requerido para registrar el número de póliza asignado por la aseguradora, que cubre los riesgos del autotransporte utilizado para el traslado de los bienes o mercancías.
501
    :param identificacion_vehicular: Nodo requerido para registrar los datos de identificación del autotransporte en el que se trasladan los bienes o mercancías.
502
    :param remolques: Nodo opcional para registrar los datos del (los) remolque(s) o semirremolque(s) que se emplean con el autotransporte para el traslado de los bienes o mercancías.
503
    """
504
    
505
    def __init__(
506
            self,
507
            perm_sct: str,
508
            num_permiso_sct: str,
509
            nombre_aseg: str,
510
            num_poliza_seguro: str,
511
            identificacion_vehicular: IdentificacionVehicular | dict,
512
            remolques: Remolque | dict | Sequence[Remolque | dict] = None,
513
    ): 
514
        super().__init__({
515
            'PermSCT': perm_sct,
516
            'NumPermisoSCT': num_permiso_sct,
517
            'NombreAseg': nombre_aseg,
518
            'NumPolizaSeguro': num_poliza_seguro,
519
            'IdentificacionVehicular': identificacion_vehicular,
520
            'Remolques': remolques,
521
        })
522
        
523
524
class DetalleMercancia(ScalarMap):
525
    """
526
    Nodo condicional para registrar mayor detalle de los bienes o mercancías que se transportan y será requerido cuando el traslado sea vía marítima.
527
    
528
    :param unidad_peso: Atributo requerido para expresar la clave de unidad de medida estandarizada del peso de los bienes o mercancías que se trasladan.
529
    :param peso_bruto: Atributo requerido para expresar el peso total bruto de los bienes o mercancías que se trasladan.
530
    :param peso_neto: Atributo requerido para expresar el peso total neto de los bienes o mercancías que se trasladan.
531
    :param peso_tara: Atributo requerido para expresar el peso bruto, menos el peso neto de las mercancías que se trasladan.
532
    :param num_piezas: Atributo opcional para registrar el número de piezas de los bienes o mercancías que se trasladan.
533
    """
534
    
535
    def __init__(
536
            self,
537
            unidad_peso: str,
538
            peso_bruto: Decimal | int,
539
            peso_neto: Decimal | int,
540
            peso_tara: Decimal | int,
541
            num_piezas: int = None,
542
    ): 
543
        super().__init__({
544
            'UnidadPeso': unidad_peso,
545
            'PesoBruto': peso_bruto,
546
            'PesoNeto': peso_neto,
547
            'PesoTara': peso_tara,
548
            'NumPiezas': num_piezas,
549
        })
550
        
551
552
class CantidadTransporta(ScalarMap):
553
    """
554
    Nodo condicional para registrar la cantidad de los bienes o mercancías que se trasladan en los distintos medios de transporte, que será distribuida o captada en distintos puntos, a fin de identificar el punto de origen y destino de dichos bienes o mercancías, y se podrá registrar este nodo tantas veces sea necesario.
555
    
556
    :param cantidad: Atributo requerido para expresar el número de bienes o mercancías que se trasladan en los distintos medios de transporte.
557
    :param id_origen: Atributo requerido para expresar la clave del identificador del origen de los bienes o mercancías que se trasladan por los distintos medios de transporte, de acuerdo al valor registrado en el nodo “Origen”, del elemento “Ubicacion”.
558
    :param id_destino: Atributo requerido para expresar la clave del identificador del destino de los bienes o mercancías que se trasladan por los distintos medios de transporte, de acuerdo al valor registrado en el nodo “Origen”, del elemento “Ubicacion”.
559
    :param cves_transporte: Atributo condicional para expresar la clave que identifica el medio por el cual se transportan los bienes o mercancías, dicha clave debe ser distinta a “05” que corresponde a “Ducto”.
560
    """
561
    
562
    def __init__(
563
            self,
564
            cantidad: Decimal | int,
565
            id_origen: str,
566
            id_destino: str,
567
            cves_transporte: str = None,
568
    ): 
569
        super().__init__({
570
            'Cantidad': cantidad,
571
            'IDOrigen': id_origen,
572
            'IDDestino': id_destino,
573
            'CvesTransporte': cves_transporte,
574
        })
575
        
576
577
class Mercancia(ScalarMap):
578
    """
579
    Nodo requerido para registrar información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
580
    
581
    :param peso_en_kg: Atributo requerido para indicar el peso en kilogramos de los bienes o mercancías que se trasladan en los distintos medios de transporte.
582
    :param bienes_transp: Atributo condicional para expresar la clave de producto de los bienes o mercancías que se trasladan en los distintos medios de transporte.
583
    :param clave_stcc: Atributo opcional para expresar la clave de producto conforme al catálogo de la STCC cuando el medio de transporte es ferroviario.
584
    :param descripcion: Atributo condicional para describir los bienes o mercancías que se trasladan en los distintos medios de transporte.
585
    :param cantidad: Atributo condicional para expresar la cantidad de los bienes o mercancías que se trasladan en los distintos medios de transporte.
586
    :param clave_unidad: Atributo condicional para precisar la clave de unidad de medida estandarizada aplicable para la cantidad de los bienes o mercancías que se trasladan en los distintos medios de transporte. La unidad debe corresponder con la descripción de los bienes o mercancías registrados.
587
    :param unidad: Atributo opcional para precisar la unidad de medida propia de los bienes o mercancías que se trasladan en los distintos medios de transporte, aplicable para la cantidad. La unidad debe corresponder con la descripción de los bienes o mercancías.
588
    :param dimensiones: Atributo opcional para expresar las medidas del empaque de los bienes o mercancías que se trasladan vía aérea. Se debe registrar la longitud, la altura y la anchura en centímetros o en pulgadas separados dichos valores por una diagonal, i.e. 30/40/30cm
589
    :param material_peligroso: Atributo condicional para precisar si los bienes o mercancías que se trasladan son considerados material peligroso.
590
    :param cve_material_peligroso: Atributo condicional para precisar la clave del tipo de material peligroso que se transporta.
591
    :param embalaje: Atributo condicional para precisar la clave del tipo de embalaje que se requiere para transportar el material o residuo peligroso.
592
    :param descrip_embalaje: Atributo opcional para expresar la descripción del embalaje en el que se transporta los bienes o mercancías que se consideran material o residuo peligroso.
593
    :param valor_mercancia: Atributo condicional para expresar el monto del valor de los bienes o mercancías que se trasladan en los distintos medios de transporte, de acuerdo al valor mercado, el valor pactado en la contraprestación o al valor estimado que determine el contribuyente.
594
    :param moneda: Atributo condicional para identificar la clave de la moneda utilizada para expresar el valor de los bienes o mercancías que se trasladan en los distintos medios de transporte, cuando se usa moneda nacional se registra MXN, conforme con la especificación ISO 4217.
595
    :param fraccion_arancelaria: Atributo condicional que sirve para expresar la clave de la fracción arancelaria correspondiente a la descripción de los bienes o mercancías que se trasladan en los distintos medios de transporte como importación o exportación, este dato se vuelve requerido cuando el atributo “EntradaSalidaMerc” contenga información. Debe ser conforme con el catálogo c_FraccionArancelaria publicado en el portal del SAT en Internet.
596
    :param uuid_comercio_ext: Atributo condicional para expresar el folio fiscal o UUID del comprobante de comercio exterior que se relaciona, este dato se vuelve requerido cuando el atributo “EntradaSalidaMerc” contenga el valor “Salida”.
597
    :param cantidad_transporta: Nodo condicional para registrar la cantidad de los bienes o mercancías que se trasladan en los distintos medios de transporte, que será distribuida o captada en distintos puntos, a fin de identificar el punto de origen y destino de dichos bienes o mercancías, y se podrá registrar este nodo tantas veces sea necesario.
598
    :param detalle_mercancia: Nodo condicional para registrar mayor detalle de los bienes o mercancías que se transportan y será requerido cuando el traslado sea vía marítima.
599
    """
600
    
601
    def __init__(
602
            self,
603
            peso_en_kg: Decimal | int,
604
            bienes_transp: str = None,
605
            clave_stcc: str = None,
606
            descripcion: str = None,
607
            cantidad: Decimal | int = None,
608
            clave_unidad: str = None,
609
            unidad: str = None,
610
            dimensiones: str = None,
611
            material_peligroso: str = None,
612
            cve_material_peligroso: str = None,
613
            embalaje: str = None,
614
            descrip_embalaje: str = None,
615
            valor_mercancia: Decimal | int = None,
616
            moneda: str = None,
617
            fraccion_arancelaria: str = None,
618
            uuid_comercio_ext: str = None,
619
            cantidad_transporta: CantidadTransporta | dict | Sequence[CantidadTransporta | dict] = None,
620
            detalle_mercancia: DetalleMercancia | dict = None,
621
    ): 
622
        super().__init__({
623
            'PesoEnKg': peso_en_kg,
624
            'BienesTransp': bienes_transp,
625
            'ClaveSTCC': clave_stcc,
626
            'Descripcion': descripcion,
627
            'Cantidad': cantidad,
628
            'ClaveUnidad': clave_unidad,
629
            'Unidad': unidad,
630
            'Dimensiones': dimensiones,
631
            'MaterialPeligroso': material_peligroso,
632
            'CveMaterialPeligroso': cve_material_peligroso,
633
            'Embalaje': embalaje,
634
            'DescripEmbalaje': descrip_embalaje,
635
            'ValorMercancia': valor_mercancia,
636
            'Moneda': moneda,
637
            'FraccionArancelaria': fraccion_arancelaria,
638
            'UUIDComercioExt': uuid_comercio_ext,
639
            'CantidadTransporta': cantidad_transporta,
640
            'DetalleMercancia': detalle_mercancia,
641
        })
642
        
643
644
class Mercancias(ScalarMap):
645
    """
646
    Nodo requerido para registrar la información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
647
    
648
    :param num_total_mercancias: Atributo requerido para expresar el número total de los bienes o mercancías que se trasladan en los distintos medios de transporte, identificándose por cada nodo "Mercancia" registrado en el complemento.
649
    :param mercancia: Nodo requerido para registrar información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
650
    :param peso_bruto_total: Atributo condicional para expresar la suma del peso bruto total de los bienes o mercancías que se trasladan por transporte ferroviario y aéreo.
651
    :param unidad_peso: Atributo condicional para expresar la clave de unidad de medida estandarizada del peso de los bienes o mercancías que se trasladan vía férrea y aérea.
652
    :param peso_neto_total: Atributo condicional para registrar la suma de los valores registrados en el atributo “PesoNeto” del nodo “DetalleMercancia” del elemento “Mercancia”.
653
    :param cargo_por_tasacion: Atributo opcional para expresar el importe pagado por la tasación de los bienes o mercancías que se trasladan vía aérea.
654
    :param autotransporte_federal: Nodo condicional para registrar la información que permita la identificación del autotransporte de carga federal, por medio del cual se transportan los bienes o mercancías, que transitan a través de las carreteras federales del territorio nacional.
655
    :param transporte_maritimo: Nodo condicional para registrar la información que permita la identificación de la embarcación por medio del cual se transportan los bienes o mercancías, vía marítima.
656
    :param transporte_aereo: Nodo condicional para registrar la información que permita la identificación del transporte aéreo por medio del cual se trasladan los bienes o mercancías.
657
    :param transporte_ferroviario: Nodo condicional para registrar la información que permita la identificación del carro o contenedor en el que se transportan los bienes o mercancías vía férrea.
658
    """
659
    
660
    def __init__(
661
            self,
662
            num_total_mercancias: int,
663
            mercancia: Mercancia | dict | Sequence[Mercancia | dict],
664
            peso_bruto_total: Decimal | int = None,
665
            unidad_peso: str = None,
666
            peso_neto_total: Decimal | int = None,
667
            cargo_por_tasacion: Decimal | int = None,
668
            autotransporte_federal: AutotransporteFederal | dict = None,
669
            transporte_maritimo: TransporteMaritimo | dict = None,
670
            transporte_aereo: TransporteAereo | dict = None,
671
            transporte_ferroviario: TransporteFerroviario | dict = None,
672
    ): 
673
        super().__init__({
674
            'NumTotalMercancias': num_total_mercancias,
675
            'Mercancia': mercancia,
676
            'PesoBrutoTotal': peso_bruto_total,
677
            'UnidadPeso': unidad_peso,
678
            'PesoNetoTotal': peso_neto_total,
679
            'CargoPorTasacion': cargo_por_tasacion,
680
            'AutotransporteFederal': autotransporte_federal,
681
            'TransporteMaritimo': transporte_maritimo,
682
            'TransporteAereo': transporte_aereo,
683
            'TransporteFerroviario': transporte_ferroviario,
684
        })
685
        
686
687
class Destino(ScalarMap):
688
    """
689
    Nodo condicional para registrar la información detallada del Destino de los bienes o mercancías que se trasladan.
690
    
691
    :param fecha_hora_prog_llegada: Atributo requerido para la expresión de la fecha y hora en la que estima arriben a su destino los bienes o mercancías. Se expresa en la forma AAAA-MM-DDThh:mm:ss.
692
    :param id_destino: Atributo condicional para registrar una clave que sirva para identificar el punto de llegada de los bienes o mercancías que se trasladan por los distintos medios de transporte, mediante un folio, el cual estará compuesto de la siguiente forma: el acrónimo “DE” seguido de 6 dígitos numéricos asignados por el contribuyente que emite el comprobante para su identificación.
693
    :param rfc_destinatario: Atributo condicional para registrar el RFC del destinatario al que se le entregarán los bienes o mercancías que se trasladan.
694
    :param nombre_destinatario: Atributo opcional para registrar el nombre del destinatario de los bienes o mercancías que se trasladan.
695
    :param num_reg_id_trib: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del destinatario de los bienes o mercancías que se trasladan, cuando sea residente en el extranjero.
696
    :param residencia_fiscal: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del destinatario de los bienes o mercancías, 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.
697
    :param num_estacion: Atributo condicional para registrar la clave del número de la estación de llegada por la que se trasladan los bienes o mercancías en los distintos medios de transporte, esto de acuerdo al valor de la columna Clave identificación que permite asociarla al tipo de transporte.
698
    :param nombre_estacion: Atributo condicional para registrar el nombre de la estación por la que se trasladan los bienes o mercancías en los distintos medios de transporte.
699
    :param navegacion_trafico: Atributo condicional para registrar el tipo de puerto por el que se documentan los bienes o mercancías vía marítima.
700
    """
701
    
702
    def __init__(
703
            self,
704
            fecha_hora_prog_llegada: datetime,
705
            id_destino: str = None,
706
            rfc_destinatario: str = None,
707
            nombre_destinatario: str = None,
708
            num_reg_id_trib: str = None,
709
            residencia_fiscal: str = None,
710
            num_estacion: str = None,
711
            nombre_estacion: str = None,
712
            navegacion_trafico: str = None,
713
    ): 
714
        super().__init__({
715
            'FechaHoraProgLlegada': fecha_hora_prog_llegada,
716
            'IDDestino': id_destino,
717
            'RFCDestinatario': rfc_destinatario,
718
            'NombreDestinatario': nombre_destinatario,
719
            'NumRegIdTrib': num_reg_id_trib,
720
            'ResidenciaFiscal': residencia_fiscal,
721
            'NumEstacion': num_estacion,
722
            'NombreEstacion': nombre_estacion,
723
            'NavegacionTrafico': navegacion_trafico,
724
        })
725
        
726
727
class Origen(ScalarMap):
728
    """
729
    Nodo condicional para registrar la información detallada del Origen de los bienes o mercancías que se trasladan.
730
    
731
    :param fecha_hora_salida: Atributo requerido para la expresión de la fecha y hora estimada en la que salen los bienes o mercancías del origen. Se expresa en la forma AAAA-MM-DDThh:mm:ss.
732
    :param id_origen: Atributo condicional para registrar una clave que sirva para identificar el punto de salida de los bienes o mercancías que se trasladan por los distintos medios de transporte, mediante un folio, el cual estará compuesto de la siguiente forma: el acrónimo “OR” seguido de 6 dígitos numéricos asignados por el contribuyente que emite el comprobante para su identificación.
733
    :param rfc_remitente: Atributo condicional para registrar el RFC del remitente de los bienes o mercancías que se trasladan.
734
    :param nombre_remitente: Atributo opcional para registrar el nombre del remitente de los bienes o mercancías que se trasladan.
735
    :param num_reg_id_trib: Atributo condicional para incorporar el número de identificación o registro fiscal del país de residencia para los efectos fiscales del remitente de los bienes o mercancías que se trasladan, cuando sea residente en el extranjero.
736
    :param residencia_fiscal: Atributo condicional para registrar la clave del país de residencia para efectos fiscales del remitente de los bienes o mercancías, 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.
737
    :param num_estacion: Atributo condicional para registrar la clave del número de la estación de salida por la que se trasladan los bienes o mercancías en los distintos medios de transporte, esto de acuerdo al valor de la columna Clave identificación que permite asociarla al tipo de transporte.
738
    :param nombre_estacion: Atributo condicional para registrar el nombre de la estación por la que se trasladan los bienes o mercancías en los distintos medios de transporte.
739
    :param navegacion_trafico: Atributo condicional para registrar el tipo de puerto por el que se documentan los bienes o mercancías vía marítima.
740
    """
741
    
742
    def __init__(
743
            self,
744
            fecha_hora_salida: datetime,
745
            id_origen: str = None,
746
            rfc_remitente: str = None,
747
            nombre_remitente: str = None,
748
            num_reg_id_trib: str = None,
749
            residencia_fiscal: str = None,
750
            num_estacion: str = None,
751
            nombre_estacion: str = None,
752
            navegacion_trafico: str = None,
753
    ): 
754
        super().__init__({
755
            'FechaHoraSalida': fecha_hora_salida,
756
            'IDOrigen': id_origen,
757
            'RFCRemitente': rfc_remitente,
758
            'NombreRemitente': nombre_remitente,
759
            'NumRegIdTrib': num_reg_id_trib,
760
            'ResidenciaFiscal': residencia_fiscal,
761
            'NumEstacion': num_estacion,
762
            'NombreEstacion': nombre_estacion,
763
            'NavegacionTrafico': navegacion_trafico,
764
        })
765
        
766
767
class Ubicacion(ScalarMap):
768
    """
769
    Nodo requerido para registrar la ubicación que sirve para reflejar el domicilio del origen y/o destino parcial o final que tienen los bienes o mercancías que se trasladan por distintos medios de transporte.
770
    
771
    :param tipo_estacion: Atributo condicional para precisar el tipo de estación por el que pasan los bienes o mercancías durante su traslado en los distintos medios de transporte.
772
    :param distancia_recorrida: Atributo condicional para registrar la distancia recorrida en kilómetros de la ubicación de Origen a la de Destino parcial o final, de los distintos medios de transporte que trasladan los bienes o mercancías.
773
    :param origen: Nodo condicional para registrar la información detallada del Origen de los bienes o mercancías que se trasladan.
774
    :param destino: Nodo condicional para registrar la información detallada del Destino de los bienes o mercancías que se trasladan.
775
    :param domicilio: Nodo condicional para registrar información del domicilio de origen y/o destino de los bienes o mercancías que se trasladan en los distintos medios de transporte.
776
    """
777
    
778
    def __init__(
779
            self,
780
            tipo_estacion: str = None,
781
            distancia_recorrida: Decimal | int = None,
782
            origen: Origen | dict = None,
783
            destino: Destino | dict = None,
784
            domicilio: Domicilio | dict = None,
785
    ): 
786
        super().__init__({
787
            'TipoEstacion': tipo_estacion,
788
            'DistanciaRecorrida': distancia_recorrida,
789
            'Origen': origen,
790
            'Destino': destino,
791
            'Domicilio': domicilio,
792
        })
793
        
794
795 View Code Duplication
class CartaPorte(CFDI):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
796
    """
797
    Complemento para incorporar al Comprobante Fiscal Digital por Internet (CFDI), la información relacionada a los bienes o mercancías, ubicaciones de origen, puntos intermedios y destino, así como lo referente al medio por el que se transportan; ya sea por vía terrestre (carretera federal o líneas férreas), aérea, marítima o fluvial; además de incluir el traslado de Hidrocarburos y Petrolíferos.
798
    
799
    :param transp_internac: Atributo requerido para expresar si los bienes o mercancías que son transportadas ingresan o salen del territorio nacional.
800
    :param ubicaciones: Nodo requerido para registrar las distintas ubicaciones que sirven para reflejar el domicilio del origen y/o destino que tienen los bienes o mercancías que se trasladan por distintos medios de transporte.
801
    :param mercancias: Nodo requerido para registrar la información de los bienes o mercancías que se trasladan en los distintos medios de transporte.
802
    :param entrada_salida_merc: Atributo condicional para precisar si los bienes o mercancías ingresan o salen del territorio nacional.
803
    :param via_entrada_salida: Atributo condicional para precisar la vía de ingreso o salida de los bienes o mercancías en territorio nacional.
804
    :param total_dist_rec: Atributo condicional para registrar la suma de las distancias recorridas en kilómetros, registradas en el atributo “Ubicaciones:Ubicacion:DistanciaRecorrida” para el traslado de los bienes o mercancías.
805
    :param figura_transporte: Nodo opcional para indicar los datos de la figura del transporte que interviene en el traslado de los bienes o mercancías, cuando el dueño del medio de transporte es diferente del emisor del comprobante con el complemento carta porte.
806
    """
807
    
808
    tag = '{http://www.sat.gob.mx/CartaPorte}CartaPorte'
809
    version = '1.0'
810
    
811
    def __init__(
812
            self,
813
            transp_internac: str,
814
            ubicaciones: Ubicacion | dict | Sequence[Ubicacion | dict],
815
            mercancias: Mercancias | dict,
816
            entrada_salida_merc: str = None,
817
            via_entrada_salida: str = None,
818
            total_dist_rec: Decimal | int = None,
819
            figura_transporte: FiguraTransporte | dict = None,
820
    ): 
821
        super().__init__({
822
            'Version': self.version,
823
            'TranspInternac': transp_internac,
824
            'Ubicaciones': ubicaciones,
825
            'Mercancias': mercancias,
826
            'EntradaSalidaMerc': entrada_salida_merc,
827
            'ViaEntradaSalida': via_entrada_salida,
828
            'TotalDistRec': total_dist_rec,
829
            'FiguraTransporte': figura_transporte,
830
        })
831
        
832
833