satcfdi.create.cfd.nomina11.Nomina.__init__()   B
last analyzed

Complexity

Conditions 1

Size

Total Lines 55
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 54
nop 26
dl 0
loc 55
rs 8.5054
c 0
b 0
f 0

How to fix   Long Method    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
"""nomina http://www.sat.gob.mx/nomina"""
2
from decimal import Decimal
3
from datetime import datetime, date, time
4
from collections.abc import Sequence
5
from ...cfdi import CFDI
6
from ...xelement import XElement
7
from ...utils import ScalarMap
8
9
10
class HorasExtra(ScalarMap):
11
    """
12
    Nodo opcional para expresar información de las horas extras
13
    
14
    :param dias: Número de días en que el trabajador realizó horas extra en el periodo
15
    :param tipo_horas: Tipo de pago de las horas extra: dobles o triples
16
    :param horas_extra: Número de horas extra trabajadas en el periodo
17
    :param importe_pagado: Importe pagado por las horas extra
18
    """
19
    
20
    def __init__(
21
            self,
22
            dias: int,
23
            tipo_horas: str,
24
            horas_extra: int,
25
            importe_pagado: Decimal | int,
26
    ): 
27
        super().__init__({
28
            'Dias': dias,
29
            'TipoHoras': tipo_horas,
30
            'HorasExtra': horas_extra,
31
            'ImportePagado': importe_pagado,
32
        })
33
        
34
35
class Incapacidad(ScalarMap):
36
    """
37
    Nodo opcional para expresar información de las incapacidades
38
    
39
    :param dias_incapacidad: Número de días que el trabajador se incapacitó en el periodo
40
    :param tipo_incapacidad: Razón de la incapacidad: Catálogo publicado en el portal del SAT en internet
41
    :param descuento: Monto del descuento por la incapacidad
42
    """
43
    
44
    def __init__(
45
            self,
46
            dias_incapacidad: Decimal | int,
47
            tipo_incapacidad: int,
48
            descuento: Decimal | int,
49
    ): 
50
        super().__init__({
51
            'DiasIncapacidad': dias_incapacidad,
52
            'TipoIncapacidad': tipo_incapacidad,
53
            'Descuento': descuento,
54
        })
55
        
56
57
class Deduccion(ScalarMap):
58
    """
59
    Nodo para expresar la información detallada de una deducción
60
    
61
    :param tipo_deduccion: Clave agrupadora. Clasifica la deducción conforme al catálogo publicado en el portal del SAT en internet
62
    :param clave: Atributo requerido para la clave de deducción de nómina propia de la contabilidad de cada patrón, puede conformarse desde 3 hasta 15 caracteres
63
    :param concepto: Atributo requerido para la descripción del concepto de deducción
64
    :param importe_gravado: Atributo requerido, representa el importe gravado de un concepto de deducción
65
    :param importe_exento: Atributo requerido, representa el importe exento de un concepto de deducción
66
    """
67
    
68
    def __init__(
69
            self,
70
            tipo_deduccion: int,
71
            clave: str,
72
            concepto: str,
73
            importe_gravado: Decimal | int,
74
            importe_exento: Decimal | int,
75
    ): 
76
        super().__init__({
77
            'TipoDeduccion': tipo_deduccion,
78
            'Clave': clave,
79
            'Concepto': concepto,
80
            'ImporteGravado': importe_gravado,
81
            'ImporteExento': importe_exento,
82
        })
83
        
84
85
class Deducciones(ScalarMap):
86
    """
87
    Nodo opcional para expresar las deducciones aplicables
88
    
89
    :param total_gravado: Atributo requerido para expresar el total de deducciones gravadas que se relacionan en el comprobante
90
    :param total_exento: Atributo requerido para expresar el total de deducciones exentas que se relacionan en el comprobante
91
    :param deduccion: Nodo para expresar la información detallada de una deducción
92
    """
93
    
94
    def __init__(
95
            self,
96
            total_gravado: Decimal | int,
97
            total_exento: Decimal | int,
98
            deduccion: Deduccion | dict | Sequence[Deduccion | dict],
99
    ): 
100
        super().__init__({
101
            'TotalGravado': total_gravado,
102
            'TotalExento': total_exento,
103
            'Deduccion': deduccion,
104
        })
105
        
106
107
class Percepcion(ScalarMap):
108
    """
109
    Nodo para expresar la información detallada de una percepción
110
    
111
    :param tipo_percepcion: Clave agrupadora. Clasifica la percepción conforme al catálogo publicado en el portal del SAT en internet
112
    :param clave: Atributo requerido, representa la clave de percepción de nómina propia de la contabilidad de cada patrón, puede conformarse desde 3 hasta 15 caracteres
113
    :param concepto: Atributo requerido para la descripción del concepto de percepción
114
    :param importe_gravado: Atributo requerido, representa el importe gravado de un concepto de percepción
115
    :param importe_exento: Atributo requerido, representa el importe exento de un concepto de percepción
116
    """
117
    
118
    def __init__(
119
            self,
120
            tipo_percepcion: int,
121
            clave: str,
122
            concepto: str,
123
            importe_gravado: Decimal | int,
124
            importe_exento: Decimal | int,
125
    ): 
126
        super().__init__({
127
            'TipoPercepcion': tipo_percepcion,
128
            'Clave': clave,
129
            'Concepto': concepto,
130
            'ImporteGravado': importe_gravado,
131
            'ImporteExento': importe_exento,
132
        })
133
        
134
135
class Percepciones(ScalarMap):
136
    """
137
    Nodo opcional para expresar las percepciones aplicables
138
    
139
    :param total_gravado: Atributo requerido para expresar el total de percepciones gravadas que se relacionan en el comprobante
140
    :param total_exento: Atributo requerido para expresar el total de percepciones exentas que se relacionan en el comprobante
141
    :param percepcion: Nodo para expresar la información detallada de una percepción
142
    """
143
    
144
    def __init__(
145
            self,
146
            total_gravado: Decimal | int,
147
            total_exento: Decimal | int,
148
            percepcion: Percepcion | dict | Sequence[Percepcion | dict],
149
    ): 
150
        super().__init__({
151
            'TotalGravado': total_gravado,
152
            'TotalExento': total_exento,
153
            'Percepcion': percepcion,
154
        })
155
        
156
157
class Nomina(CFDI):
158
    """
159
    Complemento al Comprobante Fiscal Digital a través de Internet (CFDI) para el manejo de datos de Nómina.
160
    
161
    :param num_empleado: Atributo requerido para expresar el número de empleado de 1 a 15 posiciones
162
    :param curp: Atributo requerido para la expresión de la CURP del trabajador
163
    :param tipo_regimen: Atributo requerido para la expresión de la clave del régimen por el cual se tiene contratado al trabajador, conforme al catálogo publicado en el portal del SAT en internet
164
    :param fecha_pago: Atributo requerido para la expresión de la fecha efectiva de erogación del gasto. Se expresa en la forma aaaa-mm-dd, de acuerdo con la especificación ISO 8601.
165
    :param fecha_inicial_pago: Atributo requerido para la expresión de la fecha inicial del pago. Se expresa en la forma aaaa-mm-dd, de acuerdo con la especificación ISO 8601.
166
    :param fecha_final_pago: Atributo requerido para la expresión de la fecha final del pago. Se expresa en la forma aaaa-mm-dd, de acuerdo con la especificación ISO 8601.
167
    :param num_dias_pagados: Atributo requerido para la expresión del número de días pagados
168
    :param periodicidad_pago: Forma en que se establece el pago del salario: diario, semanal, quincenal, catorcenal mensual, bimestral, unidad de obra, comisión, precio alzado, etc.
169
    :param registro_patronal: Atributo opcional para expresar el registro patronal a 20 posiciones máximo
170
    :param num_seguridad_social: Atributo opcional para la expresión del número de seguridad social aplicable al trabajador
171
    :param departamento: Atributo opcional para la expresión del departamento o área a la que pertenece el trabajador
172
    :param clabe: Atributo opcional para la expresión de la CLABE
173
    :param banco: Atributo opcional para la expresión del Banco conforme al catálogo, donde se realiza un depósito de nómina
174
    :param fecha_inicio_rel_laboral: Atributo opcional para expresar la fecha de inicio de la relación laboral entre el empleador y el empleado
175
    :param antiguedad: Número de semanas que el empleado ha mantenido relación laboral con el empleador
176
    :param puesto: Puesto asignado al empleado o actividad que realiza
177
    :param tipo_contrato: Tipo de contrato que tiene el trabajador: Base, Eventual, Confianza, Sindicalizado, a prueba, etc.
178
    :param tipo_jornada: Tipo de jornada que cubre el trabajador: Diurna, nocturna, mixta, por hora, reducida, continuada, partida, por turnos, etc.
179
    :param salario_base_cot_apor: Retribución otorgada al trabajador, que se integra por los pagos hechos en efectivo por cuota diaria, gratificaciones, percepciones, alimentación, habitación, primas, comisiones, prestaciones en especie y cualquiera otra cantidad o prestación que se entregue al trabajador por su trabajo, sin considerar los conceptos que se excluyen de conformidad con el Artículo 27 de la Ley del Seguro Social. (Se emplea para pagar las cuotas y aportaciones de Seguridad Social).
180
    :param riesgo_puesto: Clave conforme a la Clase en que deben inscribirse los patrones, de acuerdo a las actividades que desempeñan sus trabajadores, según lo previsto en el artículo 196 del Reglamento en Materia de Afiliación Clasificación de Empresas, Recaudación y Fiscalización. Catálogo publicado en el portal del SAT en internet
181
    :param salario_diario_integrado: El salario se integra con los pagos hechos en efectivo por cuota diaria, gratificaciones, percepciones, habitación, primas, comisiones, prestaciones en especie y cualquiera otra cantidad o prestación que se entregue al trabajador por su trabajo, de conformidad con el Art. 84 de la Ley Federal del Trabajo. (Se utiliza para el cálculo de las indemnizaciones).
182
    :param percepciones: Nodo opcional para expresar las percepciones aplicables
183
    :param deducciones: Nodo opcional para expresar las deducciones aplicables
184
    :param incapacidades: Nodo opcional para expresar las incapacidades aplicables
185
    :param horas_extras: Nodo opcional para expresar las horas extras aplicables
186
    """
187
    
188
    tag = '{http://www.sat.gob.mx/nomina}Nomina'
189
    version = '1.1'
190
    
191
    def __init__(
192
            self,
193
            num_empleado: str,
194
            curp: str,
195
            tipo_regimen: int,
196
            fecha_pago: date,
197
            fecha_inicial_pago: date,
198
            fecha_final_pago: date,
199
            num_dias_pagados: Decimal | int,
200
            periodicidad_pago: str,
201
            registro_patronal: str = None,
202
            num_seguridad_social: str = None,
203
            departamento: str = None,
204
            clabe: int = None,
205
            banco: int = None,
206
            fecha_inicio_rel_laboral: date = None,
207
            antiguedad: int = None,
208
            puesto: str = None,
209
            tipo_contrato: str = None,
210
            tipo_jornada: str = None,
211
            salario_base_cot_apor: Decimal | int = None,
212
            riesgo_puesto: int = None,
213
            salario_diario_integrado: Decimal | int = None,
214
            percepciones: Percepciones | dict = None,
215
            deducciones: Deducciones | dict = None,
216
            incapacidades: Incapacidad | dict | Sequence[Incapacidad | dict] = None,
217
            horas_extras: HorasExtra | dict | Sequence[HorasExtra | dict] = None,
218
    ): 
219
        super().__init__({
220
            'Version': self.version,
221
            'NumEmpleado': num_empleado,
222
            'CURP': curp,
223
            'TipoRegimen': tipo_regimen,
224
            'FechaPago': fecha_pago,
225
            'FechaInicialPago': fecha_inicial_pago,
226
            'FechaFinalPago': fecha_final_pago,
227
            'NumDiasPagados': num_dias_pagados,
228
            'PeriodicidadPago': periodicidad_pago,
229
            'RegistroPatronal': registro_patronal,
230
            'NumSeguridadSocial': num_seguridad_social,
231
            'Departamento': departamento,
232
            'CLABE': clabe,
233
            'Banco': banco,
234
            'FechaInicioRelLaboral': fecha_inicio_rel_laboral,
235
            'Antiguedad': antiguedad,
236
            'Puesto': puesto,
237
            'TipoContrato': tipo_contrato,
238
            'TipoJornada': tipo_jornada,
239
            'SalarioBaseCotApor': salario_base_cot_apor,
240
            'RiesgoPuesto': riesgo_puesto,
241
            'SalarioDiarioIntegrado': salario_diario_integrado,
242
            'Percepciones': percepciones,
243
            'Deducciones': deducciones,
244
            'Incapacidades': incapacidades,
245
            'HorasExtras': horas_extras,
246
        })
247
        
248
249