fix(base.cfdi): evita que se pierda la fecha de emisión de un documento
Cuando un documento fiscal se genera el SAT valida tres elementos para saber si el documento ya se generó con aterioridad o es un documento nuevo:
- Los RFC's del emisor y del receptor
- El total del documento
- La fecha de emisión del documento
En el flujo de trabajo que se tenía implementado hasta el momento, la fecha de emisión del documento se crea al momento de emitir/validar el documento fiscal. Si por alguna razón el proceso de validación falla, entonces el rollback generado por la excepción en la base de datos ocasiona que toda la transacción se revierta y por lo tanto la fecha de emisión asignada al documento no se guarde. El efecto que esto genera es que cuando se vuelve a intentar la emisión/validación del documento, se genera una nueva fecha para el documento y por lo tanto el SAT considera que el CFDI que se está enviando es uno completamente nuevo.
Cuando el error es un error de validación interna no hay problema porque no se guarde esta fecha, pero cuando el error sucede después de que se envío el documento a timbrar con el PAC, es posible que este documento se timbre pero no se guarde el timbrado en el sistema.
Esto ocasionaba que en ciertas circunstancias se pudieran tener varios documentos timbrados en el SAT y que el dicho documento solo existiera en una ocasión en el sistema.
Para prevenir esta falla se agrega un savepoint en la transacción que evita que se borre la información en el caso de que el archivo XML se haya generado correctamente después de la validación interna.
cc @OpenPymeMx
closes #114 (closed)