satcfdi.create.addendas.dvz11.Emisor.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 20
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.125

Importance

Changes 0
Metric Value
cc 1
eloc 19
nop 9
dl 0
loc 20
ccs 1
cts 2
cp 0.5
crap 1.125
rs 9.45
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
"""dvz http://www.diverza.com/ns/addenda/diverza/1"""
2 1
from decimal import Decimal
3 1
from datetime import datetime, date, time
4 1
from collections.abc import Sequence
5 1
from ...cfdi import CFDI
6 1
from ...xelement import XElement
7 1
from ...utils import ScalarMap
8
9
10 1
class Extra(ScalarMap):
11
    """
12
    Tipo definido para determinar cualquier información útil que se requiera expresar en la versión impresa del Comprobante.
13
    
14
    :param indicador: Atributo opcional para señalar un valor que sea útil para identificar el atributo extra
15
    :param atributo: Atributo opcional para especificar el nombre de un atributo adicional que se desee incluir en la Addenda
16
    :param valor: Dato opcional que especifica el valor del atributo determinado en el elemento extra
17
    :param prefijo: Valor opcional que puede incorporarse como prefijo para una mejor identificación del elemento extra
18
    :param sufijo: Valor opcional que puede incorporarse como sufijo para una mejor identificación del elemento extra
19
    """
20
    
21 1
    def __init__(
22
            self,
23
            indicador: str = None,
24
            atributo: str = None,
25
            valor: str = None,
26
            prefijo: str = None,
27
            sufijo: str = None,
28
    ): 
29
        super().__init__({
30
            'Indicador': indicador,
31
            'Atributo': atributo,
32
            'Valor': valor,
33
            'Prefijo': prefijo,
34
            'Sufijo': sufijo,
35
        })
36
        
37
38 1
class DatosContacto(ScalarMap):
39
    """
40
    Tipo de dato para determinar información de datos de contacto como teléfono, email y otros.
41
    
42
    :param telefono: Atributo opcional para especificar el teléfono de contacto.
43
    :param email_comercial: Atributo opcional para especificar el email comerical que se quiera publicar a los clientes.
44
    :param email_contacto: Atributo opcional para especificar el email de contacto para notificaciones privadas.
45
    :param web: Atributo opcional para especificar la URL del sitio Web.
46
    """
47
    
48 1
    def __init__(
49
            self,
50
            telefono: str = None,
51
            email_comercial: str = None,
52
            email_contacto: str = None,
53
            web: str = None,
54
    ): 
55
        super().__init__({
56
            'Telefono': telefono,
57
            'EmailComercial': email_comercial,
58
            'EmailContacto': email_contacto,
59
            'Web': web,
60
        })
61
        
62
63 1
class Ubicacion(ScalarMap):
64
    """
65
    Tipo definido para expresar domicilios o direcciones
66
    
67
    :param tax_id: Atributo opcional para colocar la clave de identificación fiscal del receptor.
68
    :param codigo_sitio: Elemento opcional para especificar el código de sitio del domicilio.
69
    :param calle: Este atributo opcional sirve para precisar la avenida, calle, camino o carretera donde se da la ubicación.
70
    :param numero: Este atributo opcional sirve para expresar el número particular en donde se da la ubicación sobre una calle dada.
71
    :param colonia: Este atributo opcional sirve para precisar la colonia en donde se da la ubicación cuando se desea ser más específico en casos de ubicaciones urbanas.
72
    :param ciudad: Atributo opcional que sirve para precisar la ciudad o población donde se da la ubicación.
73
    :param municipio: Atributo opcional que sirve para precisar el municipio o delegación (en el caso del Distrito Federal) en donde se da la ubicación.
74
    :param estado: Atributo opcional que sirve para precisar el estado o entidad federativa donde se da la ubicación.
75
    :param pais: Atributo opcional que sirve para precisar el país donde se da la ubicación.
76
    :param codigo_postal: Atributo opcional que sirve para asentar el código postal en donde se da la ubicación.
77
    """
78
    
79 1
    def __init__(
80
            self,
81
            tax_id: str = None,
82
            codigo_sitio: str = None,
83
            calle: str = None,
84
            numero: str = None,
85
            colonia: str = None,
86
            ciudad: str = None,
87
            municipio: str = None,
88
            estado: str = None,
89
            pais: str = None,
90
            codigo_postal: str = None,
91
    ): 
92
        super().__init__({
93
            'TaxID': tax_id,
94
            'CodigoSitio': codigo_sitio,
95
            'Calle': calle,
96
            'Numero': numero,
97
            'Colonia': colonia,
98
            'Ciudad': ciudad,
99
            'Municipio': municipio,
100
            'Estado': estado,
101
            'Pais': pais,
102
            'CodigoPostal': codigo_postal,
103
        })
104
        
105
106 1
class Concepto(ScalarMap):
107
    """
108
    Nodo de información para especificar información adicional a un concepto del Comprobante
109
    
110
    :param indicador: Atributo opcional para definir un identificador básico que relacione la información de la Addenda con los nodos Concepto del Comprobante
111
    :param identificador1: Atributo opcional para especificar un identificador especial útil al Concepto
112
    :param identificador2: Atributo opcional para especificar otro identificador especial útil al Concepto
113
    :param descripcion_extranjera: Valor opcional si se requeire agregar información descripriva del Concepto en un idioma diferente al español
114
    :param valor_unitario_moneda_extranjera: Atributo opcional para determinar el Valor Unitario en alguna moneada extranjera
115
    :param importe_moneda_extranjera: Atributo opcional para determinar el importe total del concepto en una moneda extranjera
116
    :param mensaje: Atributo opcional para especificar cualquier mensaje de tipo comercial relacionado al Concepto
117
    :param unidad_medida: Atributo opcional para determinar alguna unidad de medida adicional que se desee especificar en el Concepto
118
    :param codigo_ean: Atributo opcional para especificar si se desea el código de barras EAN (European Article Number)
119
    :param sku: Atributo opcional para especificar el 'Stock-keeping unit' o SKU registrado internamente por el negocio
120
    :param nombre_transportista_c: Atributo opcional para proporcionar el nombre o clave del servicio de transporte usado para el traslado del atrículo definido en el Concepto
121
    :param numero_entrega_c: Atributo opcional para determinar el número de registro originado en el momento de entrega del producto relacionado al Concepto facturado
122
    :param fecha_entrega_c: Atributo opcional para indicar la fecha de entrega del producto relacionado al concepto facturado
123
    :param datos_extra_c: Elemento para determinar datos adicionales que no están contemplados en el esquema pero que se desean especificar en el Comprobante
124
    """
125
    
126 1
    def __init__(
127
            self,
128
            indicador: str = None,
129
            identificador1: str = None,
130
            identificador2: str = None,
131
            descripcion_extranjera: str = None,
132
            valor_unitario_moneda_extranjera: Decimal | int = None,
133
            importe_moneda_extranjera: Decimal | int = None,
134
            mensaje: str = None,
135
            unidad_medida: str = None,
136
            codigo_ean: str = None,
137
            sku: str = None,
138
            nombre_transportista_c: str = None,
139
            numero_entrega_c: str = None,
140
            fecha_entrega_c: date = None,
141
            datos_extra_c: Extra | dict | Sequence[Extra | dict] = None,
142
    ): 
143
        super().__init__({
144
            'Indicador': indicador,
145
            'Identificador1': identificador1,
146
            'Identificador2': identificador2,
147
            'DescripcionExtranjera': descripcion_extranjera,
148
            'ValorUnitarioMonedaExtranjera': valor_unitario_moneda_extranjera,
149
            'ImporteMonedaExtranjera': importe_moneda_extranjera,
150
            'Mensaje': mensaje,
151
            'UnidadMedida': unidad_medida,
152
            'CodigoEAN': codigo_ean,
153
            'Sku': sku,
154
            'NombreTransportistaC': nombre_transportista_c,
155
            'NumeroEntregaC': numero_entrega_c,
156
            'FechaEntregaC': fecha_entrega_c,
157
            'DatosExtraC': datos_extra_c,
158
        })
159
        
160
161 1
class Conceptos(ScalarMap):
162
    """
163
    
164
    :param concepto: Nodo de información para especificar información adicional a un concepto del Comprobante
165
    :param numero_conceptos: Atributo opcional definido para especificar el número de líneas de concepto presentes en el documento.
166
    """
167
    
168 1
    def __init__(
169
            self,
170
            concepto: Concepto | dict | Sequence[Concepto | dict],
171
            numero_conceptos: int = None,
172
    ): 
173
        super().__init__({
174
            'Concepto': concepto,
175
            'NumeroConceptos': numero_conceptos,
176
        })
177
        
178
179 1
class Receptor(ScalarMap):
180
    """
181
    Nodo opcional para agregar información relacionada al receptor del documento.
182
    
183
    :param comprador: Atributo opcional para colocar la clave ó código del comprador.
184
    :param num_cliente: Atributo opcional para colocar la clave o número de cliente asignado al receptor por parte del emisor del documento.
185
    :param datos_contacto_r: Elemento opcional para agregar datos de contacto del receptor.
186
    :param domicilio_fiscal_r: Elemento opcional para especificar la información del domicilio del receptor.
187
    :param destino:
188
    """
189
    
190 1
    def __init__(
191
            self,
192
            comprador: str = None,
193
            num_cliente: str = None,
194
            datos_contacto_r: DatosContacto | dict = None,
195
            domicilio_fiscal_r: Ubicacion | dict = None,
196
            destino: Ubicacion | dict | Sequence[Ubicacion | dict] = None,
197
    ): 
198
        super().__init__({
199
            'Comprador': comprador,
200
            'NumCliente': num_cliente,
201
            'DatosContactoR': datos_contacto_r,
202
            'DomicilioFiscalR': domicilio_fiscal_r,
203
            'Destino': destino,
204
        })
205
        
206
207 1
class SucursalE(ScalarMap):
208
    """
209
    Nodo opcional para agregar información de la sucursal en la que fue expedido el documento
210
    
211
    :param alias: Atributo opcional para especificar el nombre o clave de la sucursal en la que fue expedido el documento
212
    :param domicilio_sucursal: Elemento opcional para especificar la información del domicilio de la sucursal en la que fue expedido el documento
213
    :param datos_contacto: Elemento opcional para especificar datos de contacto de la sucursal en la que fue expedido el documento
214
    """
215
    
216 1
    def __init__(
217
            self,
218
            alias: str = None,
219
            domicilio_sucursal: Ubicacion | dict = None,
220
            datos_contacto: DatosContacto | dict = None,
221
    ): 
222
        super().__init__({
223
            'Alias': alias,
224
            'DomicilioSucursal': domicilio_sucursal,
225
            'DatosContacto': datos_contacto,
226
        })
227
        
228
229 1
class Emisor(ScalarMap):
230
    """
231
    Nodo opcional para proporcionar información adicional relacionada al emisor.
232
    
233
    :param vendedor: Atributo opcional para indicar el nombre o clave del Agente de Ventas relacionado con el documento
234
    :param numero_proveedor: Atributo opcional para colocar la clave o número de proveedor que el emisor tiene asignado por su cliente.
235
    :param tipo_proveedor: Atributo opcional para colocar el tipo de proveedor que el emisor tiene asignado por su cliente.
236
    :param gln: Atributo opcional para colocar el número GLN del proveedor.
237
    :param datos_contacto_e: Nodo opcional para agregar información de contacto del emisor
238
    :param domicilio_fiscal_e: Nodo opcional para agregar información del domicilo fiscal del emisor
239
    :param domicilio_origen_e: Elemento opcional para especificar la información del domicilio de origen de envío de la mercancía.
240
    :param sucursal_e: Nodo opcional para agregar información de la sucursal en la que fue expedido el documento
241
    """
242
    
243 1
    def __init__(
244
            self,
245
            vendedor: str = None,
246
            numero_proveedor: str = None,
247
            tipo_proveedor: str = None,
248
            gln: str = None,
249
            datos_contacto_e: DatosContacto | dict = None,
250
            domicilio_fiscal_e: Ubicacion | dict = None,
251
            domicilio_origen_e: Ubicacion | dict = None,
252
            sucursal_e: SucursalE | dict = None,
253
    ): 
254
        super().__init__({
255
            'Vendedor': vendedor,
256
            'NumeroProveedor': numero_proveedor,
257
            'TipoProveedor': tipo_proveedor,
258
            'Gln': gln,
259
            'DatosContactoE': datos_contacto_e,
260
            'DomicilioFiscalE': domicilio_fiscal_e,
261
            'DomicilioOrigenE': domicilio_origen_e,
262
            'SucursalE': sucursal_e,
263
        })
264
        
265
266 1
class ClavesDescripcion(ScalarMap):
267
    """
268
    Nodo opcional para expresar las descripciones de los valores del Comprobante que tienen un catálogo oficial SAT relacionado.
269
    
270
    :param c_forma_pago: Atributo opcional para expresar la descripción de la clave del atributo FormaPago del Comprobante conforme al catálogo c_FormaPago.
271
    :param c_moneda: Atributo opcional para expresar la descripción de la clave del atributo Moneda del Comprobante conforme al catálogo c_Moneda.
272
    :param c_tipo_de_comprobante: Atributo opcional para expresar la descripción de la clave del atributo TipoDeComprobante del Comprobante conforme al catálogo c_TipoDeComprobante.
273
    :param c_metodo_pago: Atributo opcional para expresar la descripción de la clave del atributo MetodoPago del Comprobante conforme al catálogo c_MetodoPago.
274
    :param c_lugar_expedicion: Atributo opcional para expresar la Ciudad y Estado al que corresponda el Código Postal señalado en el atributo LugarExpedicion del Comprobante conforme al catálogo c_CodigoPostal.
275
    :param c_tipo_relacion: Atributo opcional para expresar la descripción que corresponda a la clave del Tipo de Relación entre CFDIs señalado en el atributo TipoRelacion del nodo CfdiRelacionados del Comprobante conforme al catálogo c_TipoRelacion.
276
    :param c_regimen_fiscal: Atributo opcional para expresar la descripción que corresponda a la clave del Régimen Fiscal del nodo Emisor del Comprobante conforme al catálogo c_RegimenFiscal.
277
    :param c_residencia_fiscal: Atributo opcional para expresar la descripción que corresponda a la clave del País del atributo ResidenciaFiscal del nodo Receptor del Comprobante cuando este sea extranjero y conforme al catálogo c_Pais.
278
    :param c_uso_cfdi: Atributo opcional para expresar la descripción que corresponda a la clave del Uso del CFDI del atributo UsoCFDI del nodo Receptor del Comprobante conforme al catálogo c_UsoCFDI.
279
    """
280
    
281 1
    def __init__(
282
            self,
283
            c_forma_pago: str = None,
284
            c_moneda: str = None,
285
            c_tipo_de_comprobante: str = None,
286
            c_metodo_pago: str = None,
287
            c_lugar_expedicion: str = None,
288
            c_tipo_relacion: str = None,
289
            c_regimen_fiscal: str = None,
290
            c_residencia_fiscal: str = None,
291
            c_uso_cfdi: str = None,
292
    ): 
293
        super().__init__({
294
            'CFormaPago': c_forma_pago,
295
            'CMoneda': c_moneda,
296
            'CTipoDeComprobante': c_tipo_de_comprobante,
297
            'CMetodoPago': c_metodo_pago,
298
            'CLugarExpedicion': c_lugar_expedicion,
299
            'CTipoRelacion': c_tipo_relacion,
300
            'CRegimenFiscal': c_regimen_fiscal,
301
            'CResidenciaFiscal': c_residencia_fiscal,
302
            'CUsoCFDI': c_uso_cfdi,
303
        })
304
        
305
306 1
class Generales(ScalarMap):
307
    """
308
    Nodo opcional para proporcionar información general que aplique al documento.
309
    
310
    :param tipo_documento: Atributo opcional para indicar el nombre comercial del CFDI descrito en letra. Por ejemplo: Factura, Nota de Crédito, Recibo de Arrendamiento, etc.
311
    :param total_con_letra: Atributo opcional para indicar el importe total del CFDI descrito en letra.
312
    :param observaciones: Atributo opcional para agregar cualquier información de texto que sea útil para el CFDI
313
    :param numero_orden: Atributo opcional para identificar el número de orden comercial relacionado con el documento
314
    :param nombre_transportista: Atributo opcional para especificar el nombre o identificador del servico de transporte de la mercancía que ampara el documento..
315
    :param embarque: Atributo opcional para especificar el dato o código de embarque.
316
    :param numero_entrega: Atributo opcional para identificar el número de la orden de entrega de la mercancía que ampara el documento.
317
    :param terminos_pago: Atributo opcional para identificar los terminos de Pago del documento.
318
    :param fecha_entrega: Atributo opcional para identificar la fecha de entrega de la mercancía que ampara el documento.
319
    :param fecha_tipo_cambio: Atributo opcional para identificar la fecha del tipo de cambio aplicado en el atributo TipoCambio del nodo Comprobante del CFDI cuando la Moneda corresponda a un valor diferente a Pesos Mexicanos.
320
    """
321
    
322 1
    def __init__(
323
            self,
324
            tipo_documento: str = None,
325
            total_con_letra: str = None,
326
            observaciones: str = None,
327
            numero_orden: str = None,
328
            nombre_transportista: str = None,
329
            embarque: str = None,
330
            numero_entrega: str = None,
331
            terminos_pago: str = None,
332
            fecha_entrega: date = None,
333
            fecha_tipo_cambio: date = None,
334
    ): 
335 1
        super().__init__({
336
            'TipoDocumento': tipo_documento,
337
            'TotalConLetra': total_con_letra,
338
            'Observaciones': observaciones,
339
            'NumeroOrden': numero_orden,
340
            'NombreTransportista': nombre_transportista,
341
            'Embarque': embarque,
342
            'NumeroEntrega': numero_entrega,
343
            'TerminosPago': terminos_pago,
344
            'FechaEntrega': fecha_entrega,
345
            'FechaTipoCambio': fecha_tipo_cambio,
346
        })
347
        
348
349 1
class Diverza(CFDI):
350
    """
351
    
352
    :param generales: Nodo opcional para proporcionar información general que aplique al documento.
353
    :param claves_descripcion: Nodo opcional para expresar las descripciones de los valores del Comprobante que tienen un catálogo oficial SAT relacionado.
354
    :param emisor: Nodo opcional para proporcionar información adicional relacionada al emisor.
355
    :param receptor: Nodo opcional para agregar información relacionada al receptor del documento.
356
    :param conceptos:
357
    :param complemento:
358
    """
359
    
360 1
    tag = '{http://www.diverza.com/ns/addenda/diverza/1}diverza'
361 1
    version = '1.1'
362
    
363 1
    def __init__(
364
            self,
365
            generales: Generales | dict = None,
366
            claves_descripcion: ClavesDescripcion | dict = None,
367
            emisor: Emisor | dict = None,
368
            receptor: Receptor | dict = None,
369
            conceptos: Conceptos | dict = None,
370
            complemento: Extra | dict | Sequence[Extra | dict] = None,
371
    ): 
372 1
        super().__init__({
373
            'Version': self.version,
374
            'Generales': generales,
375
            'ClavesDescripcion': claves_descripcion,
376
            'Emisor': emisor,
377
            'Receptor': receptor,
378
            'Conceptos': conceptos,
379
            'Complemento': complemento,
380
        })
381
        
382
383