Code Duplication    Length = 34-34 lines in 2 locations

satcfdi/create/cfd/cfdi40.py 2 locations

@@ 157-190 (lines=34) @@
154
        )
155
156
157
class Retencion(ScalarMap):
158
    """
159
    Nodo requerido para la información detallada de un traslado de impuesto específico.
160
161
    :param base: Atributo requerido para señalar la suma de los atributos Base de los conceptos del impuesto trasladado. No se permiten valores negativos.
162
    :param impuesto: Atributo requerido para señalar la clave del tipo de impuesto retencion.
163
    :param tipo_factor: Atributo requerido para señalar la clave del tipo de factor que se aplica a la base del impuesto.
164
    :param tasa_o_cuota: Atributo condicional para señalar el valor de la tasa o cuota del impuesto que se traslada por los conceptos amparados en el comprobante.
165
    :param importe: Atributo condicional para señalar la suma del importe del impuesto trasladado, agrupado por impuesto, TipoFactor y TasaOCuota. No se permiten valores negativos.
166
    """
167
168
    def __init__(
169
            self,
170
            impuesto: str,
171
            tipo_factor: str,
172
            tasa_o_cuota: Decimal | int = None,
173
            importe: Decimal | int = None,
174
            base: Decimal | int = None,
175
    ):
176
        super().__init__({
177
            'Base': base,
178
            'Impuesto': CatImpuesto.get(impuesto, impuesto),
179
            'TipoFactor': tipo_factor,
180
            'TasaOCuota': tasa_o_cuota,
181
            'Importe': importe,
182
        })
183
184
    @classmethod  # obsolete
185
    def parse(cls, impuesto: str):
186
        parts = impuesto.split("|")
187
        return cls(
188
            impuesto=parts[0],
189
            tipo_factor=parts[1],
190
            tasa_o_cuota=Decimal(parts[2]) if len(parts) > 2 else None,
191
        )
192
193
@@ 120-153 (lines=34) @@
117
        })
118
119
120
class Traslado(ScalarMap):
121
    """
122
    Nodo requerido para la información detallada de un traslado de impuesto específico.
123
124
    :param base: Atributo requerido para señalar la suma de los atributos Base de los conceptos del impuesto trasladado. No se permiten valores negativos.
125
    :param impuesto: Atributo requerido para señalar la clave del tipo de impuesto retencion.
126
    :param tipo_factor: Atributo requerido para señalar la clave del tipo de factor que se aplica a la base del impuesto.
127
    :param tasa_o_cuota: Atributo condicional para señalar el valor de la tasa o cuota del impuesto que se traslada por los conceptos amparados en el comprobante.
128
    :param importe: Atributo condicional para señalar la suma del importe del impuesto trasladado, agrupado por impuesto, TipoFactor y TasaOCuota. No se permiten valores negativos.
129
    """
130
131
    def __init__(
132
            self,
133
            impuesto: str,
134
            tipo_factor: str,
135
            tasa_o_cuota: Decimal | int = None,
136
            importe: Decimal | int = None,
137
            base: Decimal | int = None,
138
    ):
139
        super().__init__({
140
            'Base': base,
141
            'Impuesto': CatImpuesto.get(impuesto, impuesto),
142
            'TipoFactor': tipo_factor,
143
            'TasaOCuota': tasa_o_cuota,
144
            'Importe': importe,
145
        })
146
147
    @classmethod  # obsolete
148
    def parse(cls, impuesto: str):
149
        parts = impuesto.split("|")
150
        return cls(
151
            impuesto=parts[0],
152
            tipo_factor=parts[1],
153
            tasa_o_cuota=Decimal(parts[2]) if len(parts) > 2 else None,
154
        )
155
156