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

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1.125

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 3
dl 0
loc 8
ccs 1
cts 2
cp 0.5
crap 1.125
rs 10
c 0
b 0
f 0
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