Code Duplication    Length = 62-68 lines in 2 locations

satcfdi/create/retencion/retenciones10.py 1 location

@@ 171-232 (lines=62) @@
168
        })
169
170
171
class Retenciones(CFDI):
172
    """
173
    Estándar de Documento Electrónico Retenciones e Información de Pagos.
174
    """
175
    tag = '{http://www.sat.gob.mx/esquemas/retencionpago/1}Retenciones'
176
    version = '1.0'
177
178
    def __init__(
179
            self,
180
            cve_retenc: str,
181
            emisor: Issuer | dict,
182
            receptor: Receptor | dict,
183
            periodo: Periodo | dict,
184
            totales: Totales | dict,
185
            folio_int: str = None,
186
            desc_retenc: str = None,
187
            complemento: XElement | Sequence[XElement] = None,
188
            addenda: XElement | Sequence[XElement] = None,
189
            fecha_exp: datetime = None,
190
    ):
191
        """
192
        Estándar de Documento Electrónico Retenciones e Información de Pagos.
193
194
        :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.
195
        :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.
196
        :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.
197
        :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.
198
        :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.
199
        :param emisor: Nodo requerido para expresar la información del contribuyente emisor del documento electrónico de retenciones e información de pagos.
200
        :param receptor: Nodo requerido para expresar la información del contribuyente receptor del documento electrónico de retenciones e información de pagos.
201
        :param periodo: Nodo requerido para expresar el periodo que ampara el documento de retenciones e información de pagos
202
        :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.
203
        :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.
204
        :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'
205
        :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.
206
        :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.
207
        """
208
209
        fecha_exp = fecha_exp or datetime.now(tz=timezone(timedelta(hours=-6)))
210
        super().__init__({
211
            'Version': self.version,
212
            'Sello': '',
213
            'NumCert': emisor.certificate_number,
214
            'Cert':  emisor.signer.certificate_base64(),
215
            'FechaExp': fecha_exp,
216
            'CveRetenc': cve_retenc,
217
            'FolioInt': folio_int,
218
            'DescRetenc': desc_retenc,
219
            'Emisor': {
220
                "RFCEmisor": emisor.rfc,
221
                "NomDenRazSocE": emisor.legal_name,
222
                "CURPE": None
223
            },
224
            'Receptor': receptor,
225
            'Periodo': periodo,
226
            'Totales': totales,
227
            'Complemento': complemento,
228
            'Addenda': addenda,
229
        })
230
        if emisor.signer:
231
            self['Sello'] = emisor.signer.sign_sha1(
232
                self.cadena_original().encode()
233
            )
234

satcfdi/create/retencion/retenciones20.py 1 location

@@ 211-278 (lines=68) @@
208
        })
209
210
211
class Retenciones(CFDI):
212
    """
213
    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).
214
    """
215
    tag = '{http://www.sat.gob.mx/esquemas/retencionpago/2}Retenciones'
216
    version = '2.0'
217
218
    def __init__(
219
            self,
220
            lugar_exp_retenc: str,
221
            cve_retenc: str,
222
            emisor: Issuer | dict,
223
            receptor: Receptor | dict,
224
            periodo: Periodo | dict,
225
            totales: Totales | dict,
226
            folio_int: str = None,
227
            desc_retenc: str = None,
228
            cfdi_reten_relacionados: CfdiRetenRelacionados | dict = None,
229
            complemento: XElement | Sequence[XElement] = None,
230
            addenda: XElement | Sequence[XElement] = None,
231
            fecha_exp: datetime = None,
232
    ):
233
        """
234
        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).
235
236
        :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.
237
        :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.
238
        :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.
239
        :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.
240
        :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.
241
        :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.
242
        :param emisor: Nodo requerido para expresar la información del contribuyente emisor del comprobante que ampara retenciones e información de pagos.
243
        :param receptor: Nodo requerido para expresar la información del contribuyente receptor del comprobante que ampara retenciones e información de pagos.
244
        :param periodo: Nodo requerido para expresar el período que corresponde al comprobante que ampara retenciones e información de pagos.
245
        :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.
246
        :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.
247
        :param desc_retenc: Atributo condicional que expresa la descripción de la retención e información de pagos.
248
        :param cfdi_reten_relacionados: Nodo opcional para precisar la información de los comprobantes relacionados.
249
        :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.
250
        :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.
251
        """
252
253
        fecha_exp = fecha_exp or datetime.now(tz=get_timezone(lugar_exp_retenc)).replace(tzinfo=None)
254
        super().__init__({
255
            'Version': self.version,
256
            'Sello': '',
257
            'NoCertificado': emisor.certificate_number,
258
            'Certificado': emisor.signer.certificate_base64(),
259
            'FechaExp': fecha_exp,
260
            'LugarExpRetenc': lugar_exp_retenc,
261
            'CveRetenc': cve_retenc,
262
            'FolioInt': folio_int,
263
            'DescRetenc': desc_retenc,
264
            'CfdiRetenRelacionados': cfdi_reten_relacionados,
265
            'Emisor': {
266
                "RfcE": emisor.rfc,
267
                "NomDenRazSocE": emisor.legal_name,
268
                "RegimenFiscalE": emisor.tax_system
269
            },
270
            'Receptor': receptor,
271
            'Periodo': periodo,
272
            'Totales': totales,
273
            'Complemento': complemento,
274
            'Addenda': addenda,
275
        })
276
        if emisor.signer:
277
            self['Sello'] = emisor.signer.sign_sha256(
278
                self.cadena_original().encode()
279
            )
280