Su Template de datos para el procesamiento de pagos de cuentas por pagar
Su Template de datos para el procesamiento de pagos de cuentas por pagar
- Atributos específicos del proceso para el análisis financiero
- Hitos críticos de las actividades para el seguimiento de pagos
- Instrucciones detalladas de extracción para Dynamics 365
Atributos del procesamiento de pagos de cuentas por pagar
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad Activity | La tarea específica o el cambio de estado que se produjo. | ||
| Descripción Este atributo describe el evento o paso realizado en el proceso, como «Invoice Created», «Invoice Approved» o «Payment Posted». Convierte los tipos de transacción técnicos y los cambios de estado del Workflow en eventos empresariales legibles. En Dynamics 365, estas actividades suelen derivarse de una combinación de inserciones en tablas, por ejemplo, un nuevo registro en Por qué es importante Define el flujo del proceso y la secuencia de eventos del mapa de procesos. Dónde obtenerlo Derivada de varias tablas de transacciones y registros del historial del Workflow Ejemplos Factura creadaFactura aprobadaPago generado | |||
| Hora del evento EventTime | La marca de tiempo en la que se produjo la actividad. | ||
| Descripción Este atributo registra la fecha y hora exactas en las que tuvo lugar una actividad concreta. Se utiliza para ordenar cronológicamente los eventos y calcular la duración entre pasos. En Dynamics 365, normalmente procede de Por qué es importante Esencial para calcular tiempos de ciclo y de proceso, así como para identificar cuellos de botella. Dónde obtenerlo Campos del sistema CreatedDateTime o ModifiedDateTime en las tablas de transacciones Ejemplos 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Número de factura InvoiceNumber | El identificador único asignado a la factura del proveedor. | ||
| Descripción Invoice Number actúa como identificador definitivo del caso para esta vista del proceso. Agrupa de forma única todos los eventos relacionados con una sola factura de proveedor, lo que permite analizar de principio a fin su recorrido, desde la recepción hasta la liquidación. En Microsoft Dynamics 365, normalmente corresponde al campo Por qué es importante Es la clave fundamental para vincular actividades de cuentas por pagar desconectadas en una única instancia del proceso. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceId Ejemplos INV-2023-00198223344ACME-OCT-22 | |||
| Sistema de origen SourceSystem | El nombre del sistema del que proceden los datos. | ||
| Descripción Identifica el software o entorno de origen del que se extrajeron los datos del proceso. En este contexto, indicará siempre la instancia de Microsoft Dynamics 365. Es especialmente útil en entornos con varios sistemas, donde los datos pueden combinarse a partir de ERP y soluciones externas de escaneo. Por qué es importante Garantiza la trazabilidad y el linaje de los datos en análisis con varios sistemas. Dónde obtenerlo Codificado o configurado durante la extracción Ejemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo en la que se extrajeron o actualizaron los datos. | ||
| Descripción Indica la actualidad de los datos utilizados para el análisis. Ayuda a comprender si se están consultando datos en tiempo real o una instantánea de un periodo anterior. Normalmente lo genera el proceso ETL (Extract, Transform, Load), no un campo propio de Dynamics 365. Por qué es importante Es fundamental para generar confianza en los Dashboard y los KPI. Dónde obtenerlo Generado por el script de extracción Ejemplos 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Código de empresa CompanyCode | El identificador de la entidad jurídica o filial. | ||
| Descripción Representa la entidad jurídica de la organización en la que se procesa la factura. En Microsoft Dynamics 365, se aplica estrictamente mediante el campo del sistema Este atributo es esencial para el «Análisis del tiempo de proceso de principio a fin», ya que permite comparar distintas filiales o unidades geográficas. Por qué es importante Permite realizar análisis comparativos entre distintas unidades de negocio o países. Dónde obtenerlo Tabla: VendInvoiceJour, campo: DataAreaId Ejemplos USMFDEMFGBSI | |||
| Cuenta del proveedor VendorAccount | El número de cuenta único del proveedor. | ||
| Descripción El identificador único del proveedor que participa en la transacción. En Dynamics 365, corresponde al campo Este atributo es fundamental para la «Vista de complejidad de las relaciones con proveedores», que permite analizar el rendimiento y la fricción de cada relación con un proveedor. Por qué es importante Permite segmentar el rendimiento del proceso por proveedor. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceAccount u OrderAccount Ejemplos US-101V000452001 | |||
| Departamento Department | El departamento responsable del costo. | ||
| Descripción La dimensión financiera que indica el departamento interno. En Dynamics 365, las dimensiones se almacenan de forma dinámica, normalmente en Este atributo se utiliza en la «Vendor Relationship Complexity View» para identificar qué departamentos internos generan el mayor volumen de cuentas por pagar. Por qué es importante Permite analizar la organización con mayor detalle y determinar responsabilidades. Dónde obtenerlo Tabla: VendInvoiceJour, campo: DefaultDimension (requiere la vista DimensionAttributeLevelValue) Ejemplos TIFinanzasOperaciones | |||
| Fecha de factura InvoiceDate | La fecha del documento indicada en la factura. | ||
| Descripción La fecha impresa en la factura del proveedor. En Dynamics 365, corresponde al campo Se utiliza en «End to End Lead Time Analysis» para medir el ciclo de vida total desde la perspectiva del proveedor. Por qué es importante Define el inicio del periodo de antigüedad de la factura. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceDate Ejemplos 2023-10-012023-10-15 | |||
| Fecha de vencimiento DueDate | La fecha límite en la que debe pagarse la factura. | ||
| Descripción La fecha contractual en la que debe liquidarse el pago para evitar penalizaciones. En Dynamics 365, se almacena como Es la referencia principal para el KPI de tasa de pagos puntuales y ayuda a priorizar el trabajo en la vista de rendimiento y volumen del proceso de cuentas por pagar. Por qué es importante La referencia para medir el rendimiento de los pagos puntuales. Dónde obtenerlo Tabla: VendInvoiceJour o VendTrans, campo: DueDate Ejemplos 2023-11-302023-12-15 | |||
| ID de usuario UserId | El identificador del usuario que realizó la actividad. | ||
| Descripción Identifica al usuario del sistema responsable de una actividad concreta, como aprobar una factura o contabilizar un pago. Procede de los campos Se utiliza en el «Análisis de bloqueos de pago y fricciones» para comprobar si determinados procesadores generan más bloqueos que otros. Por qué es importante Permite analizar el comportamiento de los recursos y la segregación de funciones. Dónde obtenerlo Campos del sistema CreatedBy/ModifiedBy en tablas de transacciones e historial Ejemplos jdoeadminworkflow_sys | |||
| Importe de la factura InvoiceAmount | El valor monetario total de la factura. | ||
| Descripción El valor total de la factura en la moneda de la transacción. En Dynamics 365, se encuentra en campos como Se utiliza en el Dashboard de «Detección del riesgo de pagos duplicados» para relacionar los importes con los datos de los proveedores. Por qué es importante Esencial para analizar el volumen de gasto y el riesgo financiero. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceAmount Ejemplos 1500.00245.5010000.00 | |||
| Nombre del proveedor VendorName | El nombre de la organización proveedora. | ||
| Descripción El nombre descriptivo del proveedor. En D365, la cuenta del proveedor actúa como clave externa de la libreta global de direcciones ( Proporcionar nombres fáciles de interpretar facilita la 'Vista de complejidad de las relaciones con proveedores' y hace que los Dashboards sean accesibles para los usuarios de negocio. Por qué es importante Proporciona contexto para el número de cuenta del proveedor. Dónde obtenerlo Tabla: DirPartyTable (a través de VendTable), campo: Name Ejemplos Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Número de orden de compra PurchaseOrderNumber | El número de referencia de la orden de compra asociada. | ||
| Descripción Vincula la factura con el documento de compra original. En Dynamics 365, corresponde al campo Este atributo respalda el Dashboard de «Conciliación de órdenes de compra y tendencias de discrepancias», ya que distingue entre facturas respaldadas por una orden de compra y facturas sin orden de compra. Por qué es importante Esencial para analizar la tasa de conciliación del proceso de compra a pago. Dónde obtenerlo Tabla: VendInvoiceJour, campo: PurchId Ejemplos PO-000455000342PO-22-998 | |||
| ¿El pago está bloqueado? IsPaymentBlocked | Indicador que señala si la factura está bloqueada actualmente para el pago. | ||
| Descripción Indicador booleano que identifica si la factura está retenida. En Dynamics 365, suele derivarse del estado Es el factor principal del «Payment Block and Friction Analysis», que permite destacar las interrupciones del proceso. Por qué es importante Identifica los puntos de fricción inmediatos y las intervenciones manuales. Dónde obtenerlo Tabla: VendTrans, campo: Approved (invertido) o campos especializados de retención Ejemplos truefalse | |||
| Condiciones de pago PaymentTerms | El código que representa las condiciones de pago acordadas. | ||
| Descripción El código de configuración que determina las fechas de vencimiento y los descuentos, por ejemplo, Net30. En Dynamics 365, corresponde a Se analiza junto con «Cycle Time» para comprobar si los retrasos del proceso incumplen las condiciones acordadas. Por qué es importante Proporciona contexto para calcular la fecha de vencimiento. Dónde obtenerlo Tabla: VendInvoiceJour, campo: PaymTermId Ejemplos Net302%10Net30COD | |||
| Fecha del descuento por pronto pago CashDiscountDate | La fecha límite en la que debe efectuarse el pago para obtener un descuento. | ||
| Descripción El plazo para aprovechar los incentivos por pronto pago. En Dynamics 365, corresponde a Este atributo alimenta el Dashboard «Cash Discount Capture Performance», que permite cuantificar las oportunidades de ahorro no aprovechadas. Por qué es importante Afecta directamente al KPI de eficiencia financiera del proceso. Dónde obtenerlo Tabla: VendInvoiceJour o VendTrans, campo: CashDiscDate Ejemplos 2023-10-102023-10-20 | |||
| Método de pago PaymentMethod | El método utilizado para pagar la factura, por ejemplo, cheque, transferencia bancaria o EFT. | ||
| Descripción Define cómo se transfieren los fondos al proveedor. En Dynamics 365, corresponde al campo Este atributo se utiliza en el Dashboard «Payment Execution Lead Times» para evaluar la eficiencia de los distintos tipos de lotes de pago. Por qué es importante Explica las variaciones en la fase de ejecución del pago. Dónde obtenerlo Tabla: VendInvoiceJour (unida a la información de PaymMode) o VendTrans Ejemplos CHEQUEACHTRANSFERENCIA | |||
| Moneda Currency | El código de moneda de la factura. | ||
| Descripción El código ISO de la moneda en la que se emitió la factura. En Dynamics 365, corresponde al campo Es importante para estandarizar los importes en la asignación «Activity Amount» cuando se requiere normalizar varias monedas. Por qué es importante Contexto necesario para interpretar los valores financieros. Dónde obtenerlo Tabla: VendInvoiceJour, campo: CurrencyCode Ejemplos USDEURGBP | |||
| Número de comprobante VoucherNumber | El número de comprobante del libro mayor asociado a la transacción. | ||
| Descripción El identificador interno del libro mayor general para el asiento contable. En Dynamics 365, el campo Aunque es un dato técnico, resulta útil para la «Process Path and Compliance Audit», ya que permite rastrear los asientos hasta el libro mayor general para su conciliación. Por qué es importante Elemento clave para la auditoría financiera y la conciliación. Dónde obtenerlo Tabla: VendInvoiceJour, campo: LedgerVoucher Ejemplos VOU-10023INV-ACC-992 | |||
Actividades del procesamiento de pagos de cuentas por pagar
| Actividad | Descripción | ||
|---|---|---|---|
| Diario de pagos creado | La factura se selecciona y se añade a una línea del diario de pagos. Esto indica la intención de pagar y normalmente inicia el Workflow de revisión del pago. | ||
| Por qué es importante Marca la transición de la obligación al procesamiento del desembolso de efectivo. Se utiliza para medir los tiempos de ejecución de pagos. Dónde obtenerlo LedgerJournalTrans.CreatedDateTime. La factura se vincula mediante el campo MarkedInvoice o las tablas de liquidación. Recopilar Se registra cuando se crea el registro en LedgerJournalTrans Tipo de evento explicit | |||
| Factura aprobada | La instancia de Workflow de la factura pendiente alcanza el estado completado o aprobado. La factura ya está lista para contabilizarse en el libro mayor. | ||
| Por qué es importante Calcula el tiempo medio de proceso de aprobación. Los retrasos en esta etapa afectan directamente a la posibilidad de aprovechar descuentos por pronto pago. Dónde obtenerlo WorkflowTrackingStatusTable.CreatedDateTime, donde TrackingStatus es Completed. Como alternativa, VendInvoiceInfoTable.RequestStatus es igual a Approved. Recopilar Se registra cuando finaliza la instancia de Workflow Tipo de evento explicit | |||
| Factura conciliada con la orden de compra | El sistema vincula correctamente la línea de factura con una orden de compra o un recibo de producto. Esta actividad indica la validación de la factura frente a la orden de compra. | ||
| Por qué es importante Es fundamental para el KPI de tasa de conciliación de órdenes de compra en el primer intento. Distingue entre el procesamiento sin intervención manual y las facturas que requieren intervención manual. Dónde obtenerlo VendInvoiceInfoLine.PurchId y VendInvoiceInfoTable.MatchStatus. Se infiere cuando MatchStatus cambia a Passed. Recopilar Comparar el campo MatchStatus antes y después Tipo de evento inferred | |||
| Factura contabilizada | La factura se contabiliza en el libro mayor, lo que crea una obligación en el sistema. El registro pasa de las tablas de pendientes a las tablas de transacciones contabilizadas. | ||
| Por qué es importante Un hito importante que indica el reconocimiento financiero de la deuda. Esta actividad permite seleccionar la factura para el pago. Dónde obtenerlo Creación del registro en VendInvoiceJour y VendTrans. TransDate representa la fecha de contabilización. Recopilar Se registra cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Factura creada | Creación inicial de un registro de factura de proveedor pendiente en el sistema. Esto marca la entrada de la factura en el Workflow de Dynamics 365, ya sea manualmente o mediante la importación de una entidad de datos. | ||
| Por qué es importante Establece la hora de inicio para calcular el tiempo de proceso. Permite a las organizaciones medir cuánto tiempo permanecen las facturas en el sistema antes de procesarse o contabilizarse. Dónde obtenerlo Marca de tiempo de creación de VendInvoiceInfoTable.CreatedDateTime o de VendInvoiceInfoTable.RecId. Representa la cabecera de la factura de proveedor pendiente. Recopilar Se registra cuando se crea el registro en VendInvoiceInfoTable Tipo de evento explicit | |||
| Pago contabilizado | El diario de pagos se contabiliza en el libro mayor, liquida la factura y salda el balance del proveedor. Esto completa el proceso financiero. | ||
| Por qué es importante La actividad final para calcular el tiempo medio de ciclo entre factura y pago. Confirma que se han finalizado los asientos contables correspondientes a la reducción de efectivo. Dónde obtenerlo LedgerJournalTrans se contabiliza. VendTrans se actualiza para mostrar la liquidación. El evento real es la contabilización del diario. Recopilar Se registra cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Pago generado | El sistema genera el archivo de pago (EFT, ISO20022) o imprime los cheques. El estado del pago en la línea del diario se actualiza a Sent o Generated. | ||
| Por qué es importante Respalda el KPI de tiempo de retraso entre aprobación y ejecución. Confirma que se ha generado la instrucción de pago. Dónde obtenerlo LedgerJournalTrans.PaymentStatus cambia a Sent/Recieved. A menudo se infiere a partir de las actualizaciones de la línea. Recopilar Comparar el campo PaymentStatus antes y después Tipo de evento inferred | |||
| Bloqueo de pago aplicado | Se aplica una retención a la transacción del proveedor para impedir que se seleccione en una propuesta de pago. Esto suele hacerse manualmente debido a una disputa. | ||
| Por qué es importante Respalda el análisis de bloqueos de pago y fricciones. Revela intervenciones manuales que retrasan la salida de efectivo. Dónde obtenerlo El indicador VendTrans.Approved se establece en No o se rellenan campos de estado específicos de retención. Requiere realizar un seguimiento de las actualizaciones de VendTrans. Recopilar Comparar el campo de estado antes y después Tipo de evento inferred | |||
| Diario de pagos aprobado | Se aprueba el Workflow del diario de pagos, lo que autoriza la generación de pagos. Esta es la última comprobación antes de preparar los fondos para la transferencia. | ||
| Por qué es importante Separa la preparación administrativa de los pagos del cuello de botella de autorización. Dónde obtenerlo WorkflowTrackingStatusTable vinculado al ID de LedgerJournalTable (cabecera). El estado es Completed. Recopilar Se registra cuando finaliza la instancia de Workflow Tipo de evento explicit | |||
| Factura actualizada | Registra los cambios realizados en la cabecera o las líneas de la factura antes de contabilizarla. Las actualizaciones frecuentes pueden indicar problemas de extracción de datos o correcciones manuales necesarias durante la validación. | ||
| Por qué es importante Una alta frecuencia de actualizaciones sugiere ciclos de retrabajo o una calidad deficiente de los datos de origen, por ejemplo, errores de OCR. Esto respalda el monitor de retrabajo y precisión de datos. Dónde obtenerlo Registro de base de datos (SysDatabaseLog) en VendInvoiceInfoTable, si está habilitado, o inferido a partir de cambios en ModifiedDateTime cuando la frecuencia de consulta es alta. Recopilar Comparar ModifiedDateTime en extracciones posteriores Tipo de evento inferred | |||
| Factura enviada para aprobación | La factura pendiente se envía al motor de Workflow para su revisión. Esto marca la transición del registro de datos y la conciliación a la fase de autorización. | ||
| Por qué es importante Marca el inicio del tiempo de ciclo de aprobación. Es esencial para analizar la eficiencia de las jerarquías internas. Dónde obtenerlo WorkflowTrackingStatusTable.CreatedDateTime, donde ContextTableId es igual al ID de VendInvoiceInfoTable y Status es Submitted. Recopilar Se registra cuando se inicia la instancia de Workflow Tipo de evento explicit | |||
| Falló la conciliación de la factura | El proceso de conciliación identifica una discrepancia entre la factura y la orden de compra o el recibo, ya sea por una variación de precio o de cantidad. Esto suele detener el proceso hasta que se resuelve. | ||
| Por qué es importante Identifica puntos de fricción concretos en el proceso de conciliación. Respaldar el Dashboard de conciliación de órdenes de compra y tendencias de discrepancias. Dónde obtenerlo VendInvoiceInfoTable.MatchStatus cambia a Failed o Discrepancy. También es visible en las variaciones de conciliación de VendInvoiceInfoLine. Recopilar Comparar el campo MatchStatus antes y después Tipo de evento inferred | |||
Guías de extracción
Pasos
Acceda al espacio de trabajo Data Management: Inicie sesión en su entorno de Microsoft Dynamics 365 Finance. Vaya a Workspaces y seleccione Data Management. Este es el centro principal para configurar proyectos de exportación de datos.
Cree un proyecto de exportación: Haga clic en el mosaico Export para crear un nuevo proyecto de datos. Asigne al proyecto un nombre claro, por ejemplo, ProcessMining_AP_Export. En el campo Target data format, seleccione el formato de destino, por ejemplo, Azure SQL DB para BYOD o CSV para una exportación basada en archivos.
Añada entidades de datos: Añada al proyecto, una por una, las siguientes entidades de datos estándar: VendorInvoiceHeaderEntity (para facturas pendientes), VendorInvoiceLineEntity (para líneas de factura), VendorInvoiceJournalHeaderEntity (para facturas contabilizadas), VendorPaymentJournalLineEntity (para pagos) y WorkflowHistoryEntity (para registros de aprobación). Si WorkflowHistoryEntity no está disponible de forma predeterminada, puede que deba habilitar una entidad personalizada o una entidad del sistema específica expuesta para la exportación.
Configure los filtros de las entidades: En cada entidad, haga clic en el icono Filter. Aplique filtros para limitar los datos a la CompanyInfo pertinente (DataAreaId) y establezca un intervalo de fechas en los campos CreatedDateTime o InvoiceDate para extraer únicamente los datos del periodo de análisis deseado, por ejemplo, los últimos 12 meses.
Configure una exportación recurrente: Para mantener actualizado el registro de eventos, cree un trabajo de datos recurrente. Defina la frecuencia, por ejemplo, diaria o cada hora, y habilite Incremental push cuando sea compatible. Esto reduce la carga del sistema, ya que solo exporta los registros modificados.
Ejecute la exportación inicial: Ejecute manualmente el proyecto por primera vez haciendo clic en Export now. Supervise el resumen de ejecución para comprobar que todos los registros se exporten correctamente y sin errores.
Transforme los datos: Una vez exportados los datos a su destino, Azure SQL o archivos, utilice el script SQL proporcionado en la sección Query para unir estas tablas. Esta lógica de transformación convierte los registros de entidades independientes en un único registro de eventos cronológico.
Mapee los atributos: Asegúrese de que el conjunto de datos resultante asigne InvoiceNumber a Case ID, EventTime a Timestamp y Activity a Activity Name, según los requisitos de la herramienta de Process Mining.
Valide y cargue los datos: Ejecute las comprobaciones de validación que se indican a continuación para confirmar la exactitud de los datos. Una vez verificados, exporte el resultado final como archivo CSV o Parquet y cárguelo en ProcessMind.
Configuración
- Selección de entidades: Utilice VendorInvoiceHeaderEntity y VendorInvoiceLineEntity para los pasos del proceso anteriores a la contabilización. Utilice VendorInvoiceJournalHeaderEntity para el documento legal contabilizado. Utilice VendorPaymentJournalLineEntity para el seguimiento de pagos.
- Incremental Push: Habilite esta opción en el proyecto de Data Management para exportar únicamente los registros nuevos o modificados después de la carga completa inicial. Es fundamental para el rendimiento.
- Intervalos de fechas: Filtre por InvoiceDate >= [Start Date]. Evite las exportaciones sin límites, ya que pueden agotar el tiempo de espera.
- Filtro de empresa: D365 es un sistema multiempresa. Filtre siempre por DataAreaId para evitar mezclar datos de distintas entidades legales, salvo que necesite realizar un análisis entre empresas.
- Historial de Workflow: Las entidades estándar del historial de Workflow pueden generar un volumen elevado de datos. Asegúrese de exportar únicamente el historial relacionado con tipos VendInvoice para mantener un volumen manejable.
a Consulta de ejemplo sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' Pasos
Verifique la conectividad de BYOD: Asegúrese de tener instalado SQL Server Management Studio (SSMS) o una herramienta similar y de poder conectarse a la base de datos Azure SQL configurada como destino Bring Your Own Database (BYOD) para su entorno de Dynamics 365 Finance & Operations.
Confirme la exportación de entidades: Vaya al espacio de trabajo Data Management en Dynamics 365. Verifique que las siguientes entidades, o sus tablas subyacentes, estén configuradas para exportarse a la base de datos BYOD:
VendInvoiceInfoTable(facturas pendientes),VendInvoiceInfoLine(líneas pendientes),VendInvoiceJour(facturas contabilizadas),VendTrans(transacciones de proveedores),LedgerJournalTrans(líneas de diario),LedgerJournalTable(cabeceras de diario) yWorkflowTrackingStatusTable(historial del flujo de trabajo).Configure el trabajo de exportación: Si estas tablas no se exportan actualmente, cree un nuevo trabajo de exportación. Establezca Target Data Format en su base de datos SQL de BYOD. Seleccione Incremental Push para mantener los datos sincronizados sin realizar exportaciones completas. Ejecute el trabajo para rellenar las tablas.
Prepare el entorno SQL: Abra SSMS y conéctese a la base de datos Azure SQL de BYOD. Abra una ventana de consulta nueva.
Establezca los parámetros: En el script que aparece a continuación, localice la sección de declaración de variables en la parte superior. Actualice las variables
@StartDatey@EndDatepara que coincidan con el periodo que desea analizar. Si necesita filtrar por una entidad jurídica específica, actualice las condiciones de filtro deDATAAREAID.Ejecute el script: Ejecute el script T-SQL completo. Este script utiliza
UNION ALLpara combinar datos de varias tablas en un único formato estandarizado de registro de eventos.Valide los datos: Compruebe si hay valores nulos en las columnas
InvoiceNumberoEventTime. Asegúrese de que aparezcan tanto las facturas contabilizadas, procedentes deVendInvoiceJour, como las facturas pendientes, procedentes deVendInvoiceInfoTable.Exporte el resultado: Haga clic con el botón derecho en la cuadrícula de resultados de SSMS y seleccione Save Results As.... Guarde el archivo como CSV (delimitado por comas).
Prepare el formato para la carga: Abra el CSV en Excel o en un editor de texto para comprobar que los formatos de fecha cumplen la norma ISO 8601 (YYYY-MM-DD HH:MM:SS), si ProcessMind lo requiere. Si el script se ejecutó correctamente, no debería ser necesaria ninguna transformación adicional.
Cargue los datos en ProcessMind: Importe el archivo CSV en ProcessMind y asigne la columna
InvoiceNumbera Id. del caso,Actividada Nombre de la actividad yEventTimea Marca de tiempo.
Configuración
- Estrategia de exportación: Utilice Incremental Push para tablas de gran volumen como
LedgerJournalTransyVendTrans, con el fin de minimizar la carga de BYOD. Use Full Push únicamente si sospecha que existen incoherencias en los datos. - Gestión de zonas horarias: Dynamics 365 almacena los datos en UTC. El script presupone UTC. Si su análisis requiere la hora local, aplique un ajuste
DATEADDen el script o durante la importación en ProcessMind. - Filtrado por empresa: La columna
DataAreaIdrepresenta la entidad legal. De forma predeterminada, el script extrae datos de todas las entidades. AñadaWHERE DataAreaId = 'usmf', por ejemplo, para filtrar una filial específica. - Historial de Workflow: La tabla
WorkflowTrackingStatusTablees fundamental para las marcas de tiempo de las aprobaciones. Asegúrese de incluir esta tabla en la configuración de exportación de BYOD, ya que a menudo se omite de forma predeterminada. - Retención de datos: Tenga en cuenta las rutinas de limpieza de D365 que podrían eliminar el historial de Workflow completado o las líneas de diario contabilizadas, ya que esto limitaría la profundidad histórica del análisis de Process Mining.
a Consulta de ejemplo sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; ¿Listo para comenzar?
Utilice esta plantilla para crear una base de datos sólida y comenzar hoy mismo a optimizar sus flujos de trabajo de pagos. Nuestro equipo está disponible para ayudarle a mapear sus tablas específicas de Dynamics 365 si lo necesita.
Optimice ahora el procesamiento de pagos de cuentas por pagar
Reduzca los tiempos de ciclo un 30 % y elimine los retrasos de D365.
No necesita tarjeta de crédito. Configuración en cinco minutos.