Resolución de Error 'can only concatenate str (not "NoneType") to str' en Facturación Electrónica por Credenciales de Hacienda Inválidas
Este artículo detalla la resolución de un error crítico en la generación de facturas electrónicas en Odoo 17.0, manifestado como can only concatenate str (not "NoneType") to str, que fue causado por credenciales de API de Hacienda inválidas para una compañía específica y un bug en el botón de prueba de token de Odoo.
Problema
Los usuarios reportaron que las facturas electrónicas generadas en Odoo 17.0 para la compañía 'Inversiones Andavglo ADG S.A.' en la instancia https://farmaciaspanacea.logosoftla.com/ estaban fallando con el estado 'Error'. El mensaje de error específico observado en los logs y la interfaz de Odoo era:
Warning!. Error in generate_and_send_invoice: can only concatenate str (not "NoneType") to str
Este problema afectaba únicamente a esta razón social y sus sucursales (Playa Potrero y Brasilito), mientras que otras compañías en la misma instancia (como Farmacias Panacea y sus sucursales) facturaban correctamente. Adicionalmente, el botón "Probar a obtener token" en la configuración de facturación electrónica de Odoo mostraba "Token Correcto" incluso cuando se estaba configurando la compañía afectada, lo que era contradictorio con el error de las facturas.
Causa Raíz
La investigación reveló dos causas principales:
-
Credenciales de Hacienda Inválidas: La causa principal del fallo en la generación de facturas fue que las credenciales de API (usuario, contraseña, llave criptográfica
.p12y PIN) configuradas en Odoo para la compañía 'INVERSIONES ANDAVGLO ADG S.A.' (cédula jurídica 3-101-683130) eran inválidas o habían expirado en el sistema de Hacienda (ATV) de Costa Rica. Al intentar obtener un token de autenticación con estas credenciales, Hacienda respondía con un error:
El mensaje de error en Odoo (HTTP 401 - invalid_grant: "Invalid user credentials"can only concatenate str (not "NoneType") to str) era una consecuencia de que el proceso de generación de facturas intentaba operar con un token nulo o inválido debido a la falla de autenticación con Hacienda. - Bug en el Botón "Probar a obtener token": Se identificó un bug en el botón "Probar a obtener token" del módulo de facturación electrónica de Odoo. Este botón validaba las credenciales de la compañía por defecto del usuario logueado en lugar de la compañía actualmente seleccionada en la interfaz. Esto generaba un diagnóstico incorrecto de "Token Correcto" para 'Inversiones Andavglo' si el usuario tenía como compañía por defecto a 'Farmacias Panacea' (cuyas credenciales sí eran válidas).
Solución
La resolución del problema se llevó a cabo en los siguientes pasos:
-
Acceso SSH y Diagnóstico: El equipo de soporte solicitó y obtuvo acceso SSH al servidor (
86.48.21.171, ruta/opt/odoo-docker/farmaciaspanacea) para realizar un diagnóstico profundo. -
Identificación de la Causa Raíz: Se determinó que el problema no era una actualización de base de datos pendiente, sino credenciales de Hacienda inválidas para 'Inversiones Andavglo ADG S.A.', confirmando la respuesta
HTTP 401de Hacienda. - Corrección del Bug en Odoo: Se aplicó una corrección al código del botón "Probar a obtener token" en la instancia de Odoo para que validara correctamente las credenciales de la compañía activa. Tras la corrección, el botón mostraba "Datos Incorrectos" para 'Inversiones Andavglo' y "Token Correcto" para 'Farmacias Panacea'.
-
Acción del Cliente: Regenerar Credenciales de Hacienda: Se instruyó al cliente a regenerar o confirmar las credenciales de API en el portal ATV de Hacienda para la cédula jurídica
3-101-683130(INVERSIONES ANDAVGLO ADG S.A.). Esto incluye:- Ingresar al portal de Hacienda: https://www.hacienda.go.cr/ATV/Login.aspx
- Validar o regenerar el usuario/contraseña del ambiente de Producción.
- Confirmar que la llave criptográfica (archivo
.p12) y su PIN sigan vigentes y correspondan a esta misma cédula.
- Actualización de Credenciales en Odoo y Reenvío de Facturas: Una vez que el cliente proporcionó las nuevas credenciales válidas (a través de un canal seguro), el equipo de soporte las actualizó en la configuración de Odoo y procedió a reenviar las facturas que habían quedado en estado de error (documentos 86, 95, 98, 99 y 106).
Prevención
Para evitar la recurrencia de este tipo de problemas, se recomienda:
-
Revisión Periódica de Credenciales: Establecer un proceso de revisión periódica (ej. trimestral o semestral) de la vigencia y validez de las credenciales de API de Hacienda para todas las compañías configuradas en Odoo, especialmente la llave criptográfica
.p12que tiene una fecha de vencimiento. - Mantenimiento de Módulos: Mantener los módulos de facturación electrónica de Odoo actualizados para beneficiarse de correcciones de bugs y mejoras, como la aplicada al botón de prueba de token.
- Validación de Compañía Activa: Al configurar o probar credenciales, asegurarse de que la compañía activa en Odoo sea la correcta para la cual se están gestionando las credenciales.
- Uso de Canales Seguros: Utilizar siempre canales seguros para el intercambio de credenciales sensibles con el equipo de soporte.
Errores Relacionados
Warning!. Error in generate_and_send_invoice: can only concatenate str (not "NoneType") to strHTTP 401 - invalid_grant: "Invalid user credentials"(Respuesta directa de la API de Hacienda)