Microsoft Dynamics 365 Supply Chain Management & Others

EXPENSE AGENT EN D365 FnO (PREVIEW)

Hasta ahora, la gestión de gastos de viaje en Dynamics 365 FnO incluía la posibilidad de extraer información de tickets escaneados, pero esta funcionalidad nunca llegó a ser lo suficientemente precisa ni práctica como para convertirse en una herramienta habitual. Con la llegada del nuevo Agente de Gastos, todo cambia: el proceso se vuelve más intuitivo y simple, ya que basta con enviar un correo electrónico o subir un recibo para que el informe de gasto se genere automáticamente. Y, por las pruebas que he realizado, la extracción de datos desde tickets escaneados es ahora mucho más eficiente y fiable.

Microsoft ha liberado esta capacidad como vista previa lista para producción, con un enfoque de automatización e IA que integra Copilot Studio, Power Automate, Dataverse y conectores de Outlook/Teams para reducir la intervención manual en el ciclo de gestión de gastos en FnO, lo que significa que está solución es extensible y permite usarla como base de soluciones más específicas.

¿Qué es Expense Agent y por qué es relevante?

Expense Agent automatiza el flujo de gastos de extremo a extremo: recepciona los recibos (por email o subida en FnO), extrae los datos con IA, genera líneas de gasto y compone informes listos para revisión. Se apoya en:

– Microsoft Copilot Studio para la extracción de datos del recibo.

– Power Automate para la orquestación de procesos.

– Dataverse y virtual entities para integrar con FnO.

– Conectores de Outlook y Teams para captar recibos y permitir la revisión con tarjetas adaptativas.

¿Cómo funciona?

La solución se articula alrededor de tres flujos orquestadores en Power Automate:

1. Process Emails: escanea de forma programada una carpeta del buzón compartido y guarda los adjuntos como recibos no vinculados en FnO.

2. Extract Receipt IDs: invoca al agente para extraer los datos del recibo y generar líneas de gasto no adjuntas.

3. Process Expense Report: agrupa las líneas y compone los informes según la configuración (por viaje o por proyecto) para su revisión.

Si tienes habilitada la integración con Microsoft Teams, la revisión/confirmación del informe se realiza mediante tarjetas adaptativas antes de enviarlo a aprobación.

Requisitos previos

– Versión mínima de FnO: 10.0.44.

– Roles: System Administrator (FnO y Power Platform), Exchange Administrator (buzón) y Teams Administrator si habilitas Teams.

– Licencias: Dynamics 365 Teams Members, Microsoft 365 (con Outlook/Teams) y Power Apps Premium.

Pasos para configurarlo

1. Instalar “Copilot for finance and operations apps” desde Power Platform Admin Center.

2. Activar funcionalidades en FnO: en Feature Management, habilita Agent Management e Immersive Home.

3. Configurar parámetros en Expense Management > Setup > Expense Management parameters, pestaña Expense Entry Agent (frecuencia y criterio de agrupación).

4. Crear el usuario del agente (identidad dedicada en Microsoft Entra ID) y asignar licencias/roles.

5. Configurar el buzón compartido (carpeta de entrada de recibos) y conexiones en Power Automate.

6. (Opcional) Habilitar Teams para revisar y confirmar informes mediante tarjetas adaptativas.

Casos de uso

Una vez configurado, el Expense Agent ofrece dos formas muy prácticas de trabajar:

En ambos casos y con Teams habilitado, el usuario recibe una tarjeta adaptativa para confirmar antes de enviar:

Problemas durante la instalación:

Script de instalación:

Durante la instalación encontré errores en el script oficial a la hora de conectar con Azure. Como los errores eran confusos le pasé a Copilot el script y los errores y conseguí después de un par de intentos corregirlo para mi Tenant. Obviamente esto depende mucho de como tienes configurada la seguridad y dependerá de cada uno, pero en mi caso finalmente solo tuve que añadirle -AuthScope «$DataverseUrl» a Connect-AzAccount y modificar la función Get-AccessToken De esto:

$accessToken = (Get-AzAccessToken -ResourceUrl «$DataverseUrl» -AsSecureString).Token

Write-Host «Access token for $userId retrieved successfully.»

return $accessToken

A esto:

$psToken = (Get-AzAccessToken -ResourceUrl $DataverseUrl).Token  

if (-not $psToken) { throw «No se pudo obtener el token…» }

Write-Host «Access token retrieved successfully for $((Get-AzContext).Account.Id).»

return $psToken  

FLOWS

Una vez instalado, por más que enviaba mails al buzón, nada ocurría. Sin embargo, al subir el ticket directamente a FO el proceso se ejecutaba correctamente. Así que investigando los flujos de trabajo descubrí lo siguiente:

La solución crea los siguientes flujos:

Nombre del flujoPropósitoDependencias
expense entry retry checkReintenta la creación de entradas de gasto que fallaron previamente.Dataverse
expense configurationConfigura variables y parámetros necesarios para el agente.Dataverse
get expense outlook folderLocaliza la carpeta de Outlook donde se buscarán correos con recibos.Outlook
generate expense reportGenera un informe de gastos a partir de las líneas capturadas.Dataverse
send expense report adaptive cardEnvía una tarjeta adaptativa a Teams para revisión/aprobación del informe.Microsoft Teams, Adaptive Cards
process emailsProcesa correos electrónicos para extraer recibos y datos relevantes.Outlook
extract unattached receipt ids for copilot invocationIdentifica recibos no asociados a informes para que Copilot los procese.Dataverse, Copilot
extract unattached receipt output using dataverse pluginUsa un plugin de Dataverse para extraer datos de recibos no vinculados.Dataverse
generate expense lineCrea líneas de gasto a partir de la información procesada.Dataverse
generate expense line without project id and status idVariante para generar líneas cuando faltan datos de proyecto o estado.Dataverse
identify project idsBusca y asigna IDs de proyecto a las líneas de gasto.Dataverse
user calender eventsConsulta eventos del calendario del usuario para sugerir gastos relacionados.Outlook Calendar
process expense report using copilotInvoca a Copilot para procesar y completar el informe de gastos.Copilot, Dataverse

Estos flujos son los que utiliza el Agente de Gastos:

Y yo tenía problemas con 3 de ellos:

process emails

Este flujo se encarga de validar que el usuario exista, obtener el buzón y la configuración necesaria antes de procesar los correos. Sin embargo, hay un detalle que la documentación no menciona: si el empleado pertenece a varias empresas, el sistema siempre selecciona la empresa predeterminada, incluso aunque en el cuerpo del correo se indique explícitamente la empresa y el proyecto.
En mi caso, esto provocaba errores porque el flujo ignoraba la empresa indicada en el email y usaba la que estaba marcada como predeterminada en FnO.

user calender events

Este flujo es especialmente interesante: consulta el calendario del usuario y, con esa información, la IA deduce a qué viaje corresponde el gasto y en qué proyecto se debe imputar.
Esto significa que, si quieres que el sistema asigne automáticamente el proyecto, debes incluirlo en la agenda. La logica que sigue el Agente es la siguiente:

El inconveniente es que para que esto funcione, el calendario debe estar compartido con la cuenta del agente. Si el agente está configurado como un buzón compartido, esto no es posible.
La solución fue cambiar el buzón del agente a uno estándar de Exchange, lo que permitió que el flujo accediera al calendario y la IA pudiera hacer su trabajo.

generate expense line with or out project id and status id

Este flujo aplica a ambos procesos de generación de líneas. En mi caso, me encontré con un error que al principio no entendía: el problema no era el flujo, sino la falta de tipo de cambio para la fecha del ticket entre la moneda de la sociedad y la del recibo. Esto me pasó por hacer pruebas con gastos en pesos colombianos…
Lo negativo es que el error solo aparece en el flujo de Power Automate, no se notifica por Teams ni por ningún otro canal.
Sería muy recomendable que, en escenarios reales, se implementara un mecanismo para enviar alertas al usuario cuando FnO devuelve errores estándar. Dado que el flujo devuelve esta información al Agente, bastaría con modificar ligeramente el flujo y el Prompt del agente para que lo hiciera.

Conclusión

Expense Agent transforma la gestión de gastos en FnO en un modelo “asistido por IA”, donde el usuario solo revisa y confirma, reduciendo tareas repetitivas y mejorando la calidad de los datos. Si ya trabajas con Expense Management, esta funcionalidad es la evolución natural para ganar eficiencia y control. Además, puede convertirse en la base perfecta para construir soluciones personalizadas con automatismos más avanzados adaptados a las necesidades de cada cliente.

¡Muchas gracias por leerme!

Deja un comentario