@@ 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 |
@@ 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 |