Code Duplication    Length = 61-65 lines in 2 locations

satcfdi/create/retencion/retenciones20.py 1 location

@@ 235-299 (lines=65) @@
232
        })
233
234
235
class Retenciones(CFDI):
236
    """
237
    Estándar del Comprobante Fiscal Digital por Internet que ampara retenciones e información de pagos. Los importes se expresan en la moneda de pesos mexicanos (MXN).
238
    """
239
    tag = '{http://www.sat.gob.mx/esquemas/retencionpago/2}Retenciones'
240
    version = '2.0'
241
242
    def __init__(
243
            self,
244
            lugar_exp_retenc: str,
245
            cve_retenc: str,
246
            emisor: Emisor | dict,
247
            receptor: Receptor | dict,
248
            periodo: Periodo | dict,
249
            totales: Totales | dict,
250
            folio_int: str = None,
251
            desc_retenc: str = None,
252
            cfdi_reten_relacionados: CfdiRetenRelacionados | dict = None,
253
            complemento: XElement | Sequence[XElement] = None,
254
            addenda: XElement | Sequence[XElement] = None,
255
            fecha_exp: datetime = None,
256
    ):
257
        """
258
        Estándar del Comprobante Fiscal Digital por Internet que ampara retenciones e información de pagos. Los importes se expresan en la moneda de pesos mexicanos (MXN).
259
260
        :param sello: Atributo requerido para contener el sello digital del comprobante que ampara retenciones e información de pagos, al que hacen referencia las reglas de resolución miscelánea vigente. El sello debe ser expresado como una cadena de texto en formato Base 64.
261
        :param no_certificado: Atributo requerido para expresar el número de serie del certificado de sello digital que ampara al comprobante de retención e información de pagos, de acuerdo con el acuse correspondiente a 20 posiciones otorgado por el sistema del SAT.
262
        :param certificado: Atributo requerido que sirve para incorporar el certificado de sello digital que ampara el comprobante de retención e información de pagos. El certificado debe ser expresado como una cadena de texto en formato Base 64.
263
        :param fecha_exp: Atributo requerido para la expresión de la fecha y hora de expedición del comprobante que ampara retenciones e información de pagos. Se expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con la hora local donde se expide el comprobante.
264
        :param lugar_exp_retenc: Atributo requerido para incorporar el código postal del lugar de expedición del comprobante que ampara retenciones e información de pagos.
265
        :param cve_retenc: Atributo requerido para expresar la clave de la retención e información de pagos de acuerdo al catálogo publicado en internet por el SAT.
266
        :param emisor: Nodo requerido para expresar la información del contribuyente emisor del comprobante que ampara retenciones e información de pagos.
267
        :param receptor: Nodo requerido para expresar la información del contribuyente receptor del comprobante que ampara retenciones e información de pagos.
268
        :param periodo: Nodo requerido para expresar el período que corresponde al comprobante que ampara retenciones e información de pagos.
269
        :param totales: Nodo requerido para expresar el total de las retenciones e información de los pagos efectuados en el período que ampara el comprobante.
270
        :param folio_int: Atributo opcional para control interno del contribuyente que expresa el folio del comprobante que ampara retenciones e información de pagos. Permite números y/o letras.
271
        :param desc_retenc: Atributo condicional que expresa la descripción de la retención e información de pagos.
272
        :param cfdi_reten_relacionados: Nodo opcional para precisar la información de los comprobantes relacionados.
273
        :param complemento: Nodo opcional donde se incluirá el complemento Timbre Fiscal Digital de manera obligatoria y los nodos complementarios determinados por el SAT, de acuerdo a las disposiciones particulares a un sector o actividad específica.
274
        :param addenda: Nodo opcional para recibir las extensiones al formato que sean de utilidad al contribuyente. Para las reglas de uso del mismo, referirse al formato de origen.
275
        """
276
277
        fecha_exp = fecha_exp or datetime.now(tz=get_timezone(lugar_exp_retenc)).replace(tzinfo=None)
278
        super().__init__({
279
            'Version': self.version,
280
            'Sello': '',
281
            'FechaExp': fecha_exp,
282
            'LugarExpRetenc': lugar_exp_retenc,
283
            'CveRetenc': cve_retenc,
284
            'FolioInt': folio_int,
285
            'DescRetenc': desc_retenc,
286
            'CfdiRetenRelacionados': cfdi_reten_relacionados,
287
            'Emisor': emisor,
288
            'Receptor': receptor,
289
            'Periodo': periodo,
290
            'Totales': totales,
291
            'Complemento': complemento,
292
            'Addenda': addenda,
293
        })
294
295
    def sign(self, signer: Signer):
296
        self['NoCertificado'] = signer.certificate_number,
297
        self['Certificado'] = signer.certificate_base64(),
298
        self['Sello'] = signer.sign_sha256(
299
            self.cadena_original().encode()
300
        )
301

satcfdi/create/retencion/retenciones10.py 1 location

@@ 195-255 (lines=61) @@
192
        })
193
194
195
class Retenciones(CFDI):
196
    """
197
    Estándar de Documento Electrónico Retenciones e Información de Pagos.
198
    """
199
    tag = '{http://www.sat.gob.mx/esquemas/retencionpago/1}Retenciones'
200
    version = '1.0'
201
202
    def __init__(
203
            self,
204
            cve_retenc: str,
205
            emisor: Emisor | dict,
206
            receptor: Receptor | dict,
207
            periodo: Periodo | dict,
208
            totales: Totales | dict,
209
            folio_int: str = None,
210
            desc_retenc: str = None,
211
            complemento: XElement | Sequence[XElement] = None,
212
            addenda: XElement | Sequence[XElement] = None,
213
            fecha_exp: datetime = None,
214
    ):
215
        """
216
        Estándar de Documento Electrónico Retenciones e Información de Pagos.
217
218
        :param sello: Atributo requerido para contener el sello digital del documento de retención e información de pagos. El sello deberá ser expresado como una cadena de texto en formato base 64.
219
        :param num_cert: Atributo requerido para expresar el número de serie del certificado de sello digital con el que se selló digitalmente el documento de la retención e información de pagos.
220
        :param cert: Atributo requerido que sirve para incorporar el certificado de sello digital que ampara el documento de retención e información de pagos como texto, en formato base 64.
221
        :param fecha_exp: Atributo requerido para la expresión de la fecha y hora de expedición del documento de retención e información de pagos. Se expresa en la forma yyyy-mm-ddThh:mm:ssTZD-6, de acuerdo con la especificación ISO 8601.
222
        :param cve_retenc: Atributo requerido para expresar la clave de la retención e información de pagos de acuerdo al catálogo publicado en internet por el SAT.
223
        :param emisor: Nodo requerido para expresar la información del contribuyente emisor del documento electrónico de retenciones e información de pagos.
224
        :param receptor: Nodo requerido para expresar la información del contribuyente receptor del documento electrónico de retenciones e información de pagos.
225
        :param periodo: Nodo requerido para expresar el periodo que ampara el documento de retenciones e información de pagos
226
        :param totales: Nodo requerido para expresar el total de las retenciones e información de pagos efectuados en el período que ampara el documento.
227
        :param folio_int: Atributo opcional para control interno del contribuyente que expresa el folio del documento que ampara la retención e información de pagos. Permite números y/o letras.
228
        :param desc_retenc: Atributo opcional que expresa la descripción de la retención e información de pagos en caso de que en el atributo CveRetenc se haya elegido el valor para 'otro tipo de retenciones'
229
        :param complemento: Nodo opcional donde se incluirá el complemento Timbre Fiscal Digital de manera obligatoria y los nodos complementarios determinados por el SAT, de acuerdo a las disposiciones particulares a un sector o actividad específica.
230
        :param addenda: Nodo opcional para recibir las extensiones al formato que sean de utilidad al contribuyente. Para las reglas de uso del mismo, referirse al formato de origen.
231
        """
232
233
        fecha_exp = fecha_exp or datetime.now(tz=timezone(timedelta(hours=-6)))
234
        super().__init__({
235
            'Version': self.version,
236
            'Sello': '',
237
            'NumCert': '',
238
            'Cert':  '',
239
            'FechaExp': fecha_exp,
240
            'CveRetenc': cve_retenc,
241
            'FolioInt': folio_int,
242
            'DescRetenc': desc_retenc,
243
            'Emisor': emisor,
244
            'Receptor': receptor,
245
            'Periodo': periodo,
246
            'Totales': totales,
247
            'Complemento': complemento,
248
            'Addenda': addenda,
249
        })
250
251
    def sign(self, signer: Signer):
252
        self['NumCert'] = signer.certificate_number
253
        self['Cert'] = signer.certificate_base64()
254
        self['Sello'] = signer.sign_sha1(
255
            self.cadena_original().encode()
256
        )
257