Remisiones y factura electrónica paraguaya

13 de junio de 2024 por
Gustavo Orrillo
| Sin comentarios aún
 

Le agregamos un soporte básico a las remisiones (entregas de inventario) a la factura electrónica paraguaya. Aclaro que ese soporte es básico por dos motivos. Solo soporta entrega de mercadería a clientes (no soporta transferencias internas o devoluciones por ejemplo). Y el segundo motivo es que para brindar una solución completa para el soporte de remisiones, se necesita desarrollar módulos para administrar datos maestros extras (como por ejemplo conductores y vehículos) al mismo modo que asegurarnos que hay información extra almacenada en las operaciones (por ejemplo manifiesto, dirección de entrega y salida). 

A diferencia de la factura electrónica argentina y uruguaya, la factura electrónica paraguaya exige una mayor cantidad de datos de las entregas o transferencias internas. En Argentina ni siquiera está contemplado por la factura electrónica (sería lindo, honestamente creo que AFIP le haría un gran beneficio al país discontinuando el remito pre-impreso) o contemplado solo por la provincia de Buenos Aires (lo que requiere otro web-service). Uruguay tiene un soporte más básico. En cuando en Paraguay si bien se pueden remitir mercadería con información acotada, una versión full requiere un desarrollo mayor para implementarla en Odoo.

Bien, habiendo aclarado eso, les paso unos screenshots. Por ejemplo ahora tenemos un par de solapas extras para ingresar información relacionada con el transportista, conductor, vehículo, etc...


Y al momento de clickear el botón "Obtener Remito" (no es el fin del mundo que los usuarios presionen un botón extra) se obtienen los datos de la validación del documento.


Y si se clickea "Obtener PDF" se puede descargar el PDF con la remisión


Honestamente creo tienen que haber dos versiones para el soporte de las remisiones con la factura electrónica paraguaya. La primera debe ser una versión básica, que permita registrar electrónicamente los envíos a clientes y exija un mayor esfuerzo en el ingreso de datos por parte de los usuarios. Y una versión que permita soportar los diferentes tipos de movimiento de mercadería entre sucursales y que brinde soporte a una mayor riqueza en los datos maestros (utilizando posiblemente módulos de OCA, concretamente del repositorio delivery-carrier)

Notas técnicas

Un cambio que se aplicó para las transferencias, es el manejo de errores. Cuando uno comete un error con FacturaSend, este webservice brinda un error muy detallado de los errores como podemos ver aca (cuando hacemos una factura de un guaraní)


Para eso utilizamos este código

response = requests.request("POST", url, headers=headers, data=payload)
if response.status_code < 400:
res = response.json()
rec.response = response.text
self.env.cr.commit()
if res.get('success'):
result = res.get('result')
delist = result.get('deList')
if delist and type(delist) == list:
delist = delist[0]
rec.cdc = delist.get('cdc')
rec.numero = delist.get('numero')
rec.name = rec.numero
rec.estado = delist.get('estado')
rec.respuesta_codigo = delist.get('respuesta_codigo')
rec.respuesta_mensaje = delist.get('respuesta_mensaje')
self.env.cr.commit()
else:
rec.button_draft()
self.env.cr.commit()
raise ValidationError(res.get('error','Error no especificado'))
else:
raise ValidationError('%s %s %s'%(url,headers,response.text))

La respuesta de facturaSend tiene una opción llamada success. Si la misma tiene valor falso, tiene un item de información llamado error que indica el código de error (que es lo que mostramos). Sino, tiene los valores de los distintos documentos electrónicos. Dicha información la encuentran mejor detallada en la documentación de facturaSend.

Gustavo Orrillo 13 de junio de 2024
Compartir
Archivar
Identificarse dejar un comentario