Su Plantilla de Datos para el Procesamiento de Pagos de Cuentas por Pagar
Su Plantilla 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 actividad para el seguimiento de pagos
- Instrucciones detalladas de extracción para Dynamics 365
Atributos del Procesamiento de Pagos a Proveedores
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad Activity | La tarea específica o el cambio de estado que ocurrió. | ||
| Descripción Este atributo describe el evento o paso realizado en el proceso, como 'Factura Creada', 'Factura Aprobada' o 'Pago Contabilizado'. Transforma los tipos de transacción técnicos y los cambios de estado del flujo de trabajo en eventos de negocio legibles. En Dynamics 365, estas actividades a menudo se derivan de una combinación de inserciones en tablas (ej., un nuevo registro en Por qué es importante Define el flujo del proceso y la secuencia de eventos para el mapa de procesos. Dónde obtener Derivado de varias tablas de transacciones y registros de historial de Ejemplos Factura CreadaFactura AprobadaPago Generado | |||
| Hora del Evento EventTime | La marca de tiempo cuando ocurrió la actividad. | ||
| Descripción Este atributo registra la fecha y hora exactas en que tuvo lugar una actividad específica. Se utiliza para secuenciar eventos cronológicamente y calcular duraciones entre pasos. Para Dynamics 365, esto suele obtenerse de Por qué es importante Esencial para calcular tiempos de ciclo, plazos de entrega e identificar cuellos de botella. Dónde obtener Campos de sistema CreatedDateTime o ModifiedDateTime en 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 El Número de Factura sirve como identificador de caso definitivo para esta vista de proceso. Agrupa de forma única todos los eventos relacionados con una única factura de proveedor, permitiendo un análisis exhaustivo de su recorrido desde la recepción hasta la liquidación. En Microsoft Dynamics 365, esto corresponde típicamente al campo Por qué es importante Es la clave fundamental para vincular actividades de Cuentas por Pagar inconexas en una única instancia de proceso. Dónde obtener Tabla: VendInvoiceJour, Campo: InvoiceId Ejemplos INV-2023-00198223344ACME-OCT-22 | |||
| Source System SourceSystem | El nombre del sistema donde se originaron los datos. | ||
| Descripción Identifica el software o entorno de origen desde el cual se extrajeron los datos del proceso. En este contexto, indicará consistentemente la instancia de Microsoft Dynamics 365. Esto es particularmente útil en entornos multi-sistema donde los datos pueden mezclarse desde ERPs y soluciones de escaneo externas. Por qué es importante Asegura la trazabilidad y el linaje de los datos en análisis multi-sistema. Dónde obtener Codificado o configurado durante la extracción Ejemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo cuando se extrajeron o actualizaron los datos. | ||
| Descripción Indica la frescura de los datos utilizados para el análisis. Ayuda a los usuarios a comprender si están viendo datos en tiempo real o una instantánea de un período anterior. Esto es típicamente generado por el proceso ETL (Extracción, Transformación, Carga) en lugar de ser un campo dentro de Dynamics 365. Por qué es importante Crítico para establecer confianza en los Dónde obtener Generado por el script de extracción Ejemplos 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Cuenta de proveedor VendorAccount | El número de cuenta único del proveedor. | ||
| Descripción El identificador único del proveedor involucrado en la transacción. En Dynamics 365, esto corresponde al campo Este atributo es central para la 'Vista de Complejidad de la Relación con el Proveedor', permitiendo el análisis del rendimiento y la fricción por cada relación específica con el proveedor. Por qué es importante Permite la segmentación del rendimiento del proceso por proveedor. Dónde obtener 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 dinámicamente (a menudo en Este atributo se utiliza en la 'Vista de Complejidad de la Relación con el Proveedor' para ver qué departamentos internos generan el mayor volumen de Cuentas por Pagar. Por qué es importante Permite el desglose organizacional y el análisis de la rendición de cuentas. Dónde obtener Tabla: VendInvoiceJour, Campo: DefaultDimension (Requiere 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, este es el campo Utilizado en el 'Análisis del Tiempo de Entrega de Extremo a Extremo' para medir el ciclo de vida total desde la perspectiva del proveedor. Por qué es importante Define el inicio del período de vencimiento de la factura. Dónde obtener Tabla: VendInvoiceJour, Campo: InvoiceDate Ejemplos 2023-10-012023-10-15 | |||
| Fecha de Vencimiento DueDate | La fecha en la que debe pagarse la factura. | ||
| Descripción La fecha contractual en la que el pago debe ser liquidado para evitar penalizaciones. En Dynamics 365, esto se almacena como Es la línea base principal para el KPI de 'Tasa de Pago a Tiempo' y ayuda a priorizar el trabajo en la vista de 'Rendimiento y Volumen del Proceso de Cuentas por Pagar'. Por qué es importante El punto de referencia para medir el rendimiento de pago a tiempo. Dónde obtener 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 específica, como aprobar una factura o registrar un pago. Obtenido de los campos Utilizado en el 'Análisis de bloqueo de pagos y fricción' para ver si procesadores específicos desencadenan más bloqueos que otros. Por qué es importante Permite el análisis del comportamiento de los recursos y la segregación de funciones. Dónde obtener Campos de sistema CreatedBy/ModifiedBy en tablas de transacciones/historial Ejemplos jdoeadminworkflow_sys | |||
| Importe de 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, esto se encuentra en campos como Utilizado en el Por qué es importante Crítico para analizar el volumen de gasto y el riesgo financiero. Dónde obtener Tabla: VendInvoiceJour, Campo: InvoiceAmount Ejemplos 1500.00245.5010000.00 | |||
| Nombre de Proveedor VendorName | El nombre de la organización del proveedor. | ||
| Descripción El nombre descriptivo del proveedor. En D365, la cuenta del proveedor actúa como clave externa para la Libreta de Direcciones Global ( Proporcionar nombres legibles para humanos facilita la 'Vista de Complejidad de la Relación con el Proveedor' y hace que los Por qué es importante Proporciona contexto para el número de cuenta del Proveedor. Dónde obtener Tabla: DirPartyTable (vía VendTable), Campo: Name Ejemplos Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Purchase Order Number PurchaseOrderNumber | El número de referencia de la orden de compra asociada. | ||
| Descripción Vincula la factura al documento de compra original. En Dynamics 365, este es el campo Este atributo soporta el Por qué es importante Esencial para analizar la tasa de conciliación Dónde obtener Tabla: VendInvoiceJour, Campo: PurchId Ejemplos PO-000455000342PO-22-998 | |||
| Sociedad CompanyCode | El identificador de la entidad legal o subsidiaria. | ||
| Descripción Representa la entidad legal dentro de la organización donde se está procesando la factura. En Microsoft Dynamics 365, esto se aplica estrictamente a través del campo del sistema Este atributo es esencial para el 'Análisis del Tiempo de Entrega de Extremo a Extremo', permitiendo comparaciones entre diferentes subsidiarias o unidades geográficas. Por qué es importante Permite un análisis comparativo entre diferentes unidades de negocio o países. Dónde obtener Tabla: VendInvoiceJour, Campo: DataAreaId Ejemplos USMFDEMFGBSI | |||
| ¿Pago bloqueado? IsPaymentBlocked | Indicador que señala si la factura está actualmente bloqueada para el pago. | ||
| Descripción Un indicador booleano que identifica si la factura está en espera. En Dynamics 365, esto a menudo se deriva del estado Este es el motor principal del 'Análisis de bloqueo de pagos y fricción', destacando las interrupciones del proceso. Por qué es importante Identifica puntos de fricción inmediatos e intervenciones manuales. Dónde obtener Tabla: VendTrans, Campo: Approved (invertido) o campos de Retención especializados 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 dicta las fechas de vencimiento y los descuentos (ej., Net30). En Dynamics 365, este es el Se analiza junto con el 'Tiempo de Ciclo' para ver si los retrasos del proceso están violando los términos acordados. Por qué es importante Proporciona contexto para el cálculo de la Fecha de Vencimiento. Dónde obtener Tabla: VendInvoiceJour, Campo: PaymTermId Ejemplos Net302%10Net30COD | |||
| Fecha de descuento por pronto pago CashDiscountDate | La fecha en la que debe realizarse el pago para recibir un descuento. | ||
| Descripción La fecha límite para capturar incentivos de pronto pago. En Dynamics 365, este es el Este atributo impulsa el Por qué es importante Impacta directamente en el KPI de eficiencia financiera del proceso. Dónde obtener 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 (ej., Cheque, Transferencia, EFT). | ||
| Descripción Define cómo se transfieren los fondos al proveedor. En Dynamics 365, este es el campo Este atributo se utiliza en el Por qué es importante Explica las variaciones en la fase de ejecución del pago. Dónde obtener Tabla: VendInvoiceJour (unida a información de PaymMode) o VendTrans Ejemplos CHECKACHWIRE | |||
| 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, este es el campo Importante para estandarizar los montos en la asignación de 'Monto de Actividad' si se requiere normalización de múltiples monedas. Por qué es importante Contexto necesario para interpretar valores financieros. Dónde obtener Tabla: VendInvoiceJour, Campo: CurrencyCode Ejemplos USDEURGBP | |||
| Número de Comprobante VoucherNumber | El número de asiento contable asociado a la transacción. | ||
| Descripción El identificador interno del Libro Mayor General para el asiento contable. En Dynamics 365, el campo Aunque técnico, es útil para el 'Camino del Proceso y Auditoría de Cumplimiento' rastrear las entradas hasta el GL para su conciliación. Por qué es importante Clave para la auditoría financiera y la conciliación. Dónde obtener Tabla: VendInvoiceJour, Campo: LedgerVoucher Ejemplos VOU-10023INV-ACC-992 | |||
Actividades del Procesamiento de Pagos a Proveedores
| 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 usualmente inicia el flujo de trabajo de revisión de pagos. | ||
| 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 Entrega de Ejecución de Pagos. Dónde obtener LedgerJournalTrans.CreatedDateTime. La factura se vincula a través del campo MarkedInvoice o de las tablas de liquidación. Capturar Registrado cuando se crea un registro en LedgerJournalTrans Tipo de evento explicit | |||
| Factura Aprobada | La instancia del flujo de trabajo para la factura pendiente alcanza un estado completado o aprobado. La factura ya está lista para ser contabilizada en el libro mayor. | ||
| Por qué es importante Calcula el tiempo medio de aprobación. Los retrasos aquí impactan directamente la capacidad de aprovechar los descuentos por pronto pago. Dónde obtener WorkflowTrackingStatusTable.CreatedDateTime donde TrackingStatus es Completed. Alternativamente, VendInvoiceInfoTable.RequestStatus es igual a Approved. Capturar Registrado cuando la instancia de Tipo de evento explicit | |||
| Factura Contabilizada | La factura se contabiliza en el Libro Mayor General, creando una obligación en el sistema. El registro se mueve de las tablas 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 que la factura sea seleccionada para el pago. Dónde obtener Creación de registro en VendInvoiceJour y VendTrans. La TransDate representa la fecha de registro. Capturar Registrado cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Factura Cotejada con la Orden de Compra | El sistema vincula con éxito la línea de factura a una Orden de Compra o Recibo de Producto. Esta actividad significa la validación de la factura contra la orden de adquisición. | ||
| Por qué es importante Crítico para el KPI de tasa de conciliación de OC en primera pasada. Diferencia entre el procesamiento sin intervención manual y las facturas que requieren intervención manual. Dónde obtener VendInvoiceInfoLine.PurchId y VendInvoiceInfoTable.MatchStatus. Inferido cuando MatchStatus cambia a Passed. Capturar Comparar el campo MatchStatus antes/después Tipo de evento inferred | |||
| Factura Creada | La creación inicial de un registro de factura de proveedor pendiente en el sistema. Esto marca la entrada de la factura en el flujo de trabajo de Dynamics 365, ya sea manualmente o mediante importación de entidades de datos. | ||
| Por qué es importante Establece el tiempo de inicio para los cálculos del plazo de entrega del proceso. Permite a las organizaciones medir cuánto tiempo permanecen las facturas en el sistema antes de ser procesadas o registradas. Dónde obtener VendInvoiceInfoTable.CreatedDateTime o la marca de tiempo de creación de VendInvoiceInfoTable.RecId. Esto representa el encabezado de la Factura de Proveedor Pendiente. Capturar Registrado cuando se crea un registro en VendInvoiceInfoTable Tipo de evento explicit | |||
| Pago Contabilizado | El Diario de Pagos se contabiliza en el Libro Mayor General, liquidando la factura y compensando el saldo del proveedor. Esto completa el proceso financiero. | ||
| Por qué es importante La actividad final para el Tiempo de Ciclo Promedio de Factura a Pago. Confirma que los asientos contables para la reducción de efectivo están finalizados. Dónde obtener LedgerJournalTrans se ha registrado. Actualiza VendTrans para mostrar la liquidación. El evento real es la contabilización del diario. Capturar Registrado cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Pago Generado | El sistema genera el archivo de pago (EFT, ISO20022) o imprime cheques. El estado del pago en la línea del diario se actualiza a Enviado o Generado. | ||
| Por qué es importante Soporta el KPI de Tiempo de Retraso de Aprobado a Ejecutado. Confirma que la instrucción de pago ha sido generada. Dónde obtener LedgerJournalTrans.PaymentStatus cambia a Enviado/Recibido. A menudo se infiere de las actualizaciones de la línea. Capturar Comparar el campo PaymentStatus antes/después Tipo de evento inferred | |||
| Bloqueo de Pago Aplicado | Se aplica una retención a la transacción del proveedor, impidiendo que sea seleccionada en una propuesta de pago. Esto se hace a menudo manualmente para disputas. | ||
| Por qué es importante Apoya el Análisis de Bloqueos de Pago y Fricción. Revela intervenciones manuales que retrasan la salida de efectivo. Dónde obtener La bandera VendTrans.Approved se establece en No, o se completan campos de estado OnHold específicos. Requiere seguimiento de actualizaciones en VendTrans. Capturar Comparar el campo de estado antes/después Tipo de evento inferred | |||
| Conciliación de factura fallida | El proceso de conciliación identifica una discrepancia entre la factura y la OC/Recibo (variación de precio o cantidad). Esto a menudo detiene el proceso hasta que se resuelve. | ||
| Por qué es importante Identifica puntos de fricción específicos en el proceso de conciliación. Soporta el Dónde obtener VendInvoiceInfoTable.MatchStatus cambia a Failed o Discrepancy. También visible en las variaciones de conciliación de VendInvoiceInfoLine. Capturar Comparar el campo MatchStatus antes/después Tipo de evento inferred | |||
| Diario de Pagos Aprobado | El flujo de trabajo del Diario de Pagos es aprobado, autorizando la generación de pagos. Esta es la verificación final antes de que los fondos se preparen para la transferencia. | ||
| Por qué es importante Separa la preparación administrativa de los pagos del Dónde obtener WorkflowTrackingStatusTable vinculando al ID de LedgerJournalTable (Encabezado). El estado es Completed. Capturar Registrado cuando la instancia de Tipo de evento explicit | |||
| Factura actualizada | Registra los cambios realizados en el encabezado o las líneas de la factura antes de su contabilización. Las actualizaciones frecuentes pueden indicar problemas de extracción de datos o correcciones manuales requeridas durante la validación. | ||
| Por qué es importante La alta frecuencia de actualizaciones sugiere bucles de reelaboración o mala calidad de datos desde la fuente (por ejemplo, errores de OCR). Esto apoya el Monitor de Reelaboración y Precisión de Datos. Dónde obtener Registro de base de datos (SysDatabaseLog) en VendInvoiceInfoTable si está habilitado, o inferido de los cambios de ModifiedDateTime si la frecuencia de sondeo es alta. Capturar Comparar ModifiedDateTime en extracciones subsiguientes Tipo de evento inferred | |||
| Factura enviada para aprobación | La factura pendiente se envía al motor de flujo de trabajo para su revisión. Esto marca la transición de la entrada/conciliación de datos a la fase de autorización. | ||
| Por qué es importante Marca el inicio del tiempo del ciclo de aprobación. Es esencial para analizar la eficiencia de las jerarquías internas. Dónde obtener WorkflowTrackingStatusTable.CreatedDateTime donde ContextTableId es igual al ID de VendInvoiceInfoTable y el estado es Submitted. Capturar Registrado cuando la instancia de Tipo de evento explicit | |||
Guías de Extracción
Pasos
Acceder al espacio de trabajo de Gestión de Datos: Inicie sesión en su entorno de Microsoft Dynamics 365 Finance. Navegue a
Workspacesy seleccioneData Management. Este es el centro neurálgico para configurar proyectos de exportación de datos.Crear proyecto de exportación: Haga clic en el mosaico
Exportpara crear un nuevo proyecto de datos. Asigne un nombre claro al proyecto, por ejemplo, ProcessMining_AP_Export. En el campoTarget data format, seleccione el formato de destino (por ejemplo,Azure SQL DBpara BYOD o CSV para exportación basada en archivos).Añadir entidades de datos: Añada las siguientes entidades de datos estándar al proyecto una por una: VendorInvoiceHeaderEntity (para facturas pendientes), VendorInvoiceLineEntity (para líneas de factura), VendorInvoiceJournalHeaderEntity (para facturas registradas), VendorPaymentJournalLineEntity (para pagos) y WorkflowHistoryEntity (para registros de aprobación). Si WorkflowHistoryEntity no está disponible por defecto, es posible que deba habilitar una entidad personalizada o una entidad de sistema específica expuesta para la exportación.
Configurar filtros de entidad: Para cada entidad, haga clic en el icono
Filter. Aplique filtros para restringir los datos a la CompanyInfo (DataAreaId) relevante y establezca un rango de fechas en los campos CreatedDateTime o InvoiceDate para extraer datos solo para el período de análisis deseado (por ejemplo, los últimos 12 meses).Configurar exportación recurrente: Para asegurarse de que el registro de eventos se mantenga actualizado, cree un trabajo de datos recurrente. Defina la frecuencia de recurrencia (por ejemplo, diaria u horaria) y habilite la carga incremental donde sea compatible. Esto reduce la carga del sistema al exportar solo los registros modificados.
Ejecutar exportación inicial: Ejecute el proyecto manualmente por primera vez haciendo clic en
Export now. Supervise el resumen de ejecución para asegurarse de que todos los registros se exporten correctamente sin errores.Transformar datos: Una vez que los datos se exportan a su destino (
Azure SQLo archivos), use el script SQL proporcionado en la secciónQuerypara unir estas tablas. Esta lógica de transformación convierte los registros de entidades dispares en un único registro de eventos cronológico.Mapear atributos: Asegúrese de que el conjunto de datos resultante mapee el InvoiceNumber a
Case ID, EventTime aTimestampy Activity aActivity Namesegún los requisitos de la herramienta de Process Mining.Validar y cargar: Ejecute las comprobaciones de validación que se enumeran a continuación para confirmar la precisión de los datos. Una vez verificados, exporte el resultado final como un archivo CSV o Parquet y cárguelo en ProcessMind.
Configuración
- Selección de entidades: Utilice VendorInvoiceHeaderEntity y VendorInvoiceLineEntity para los pasos del proceso previos al registro. Use VendorInvoiceJournalHeaderEntity para el documento legal registrado. Emplee VendorPaymentJournalLineEntity para el seguimiento de pagos.
- Carga incremental: Habilite esta configuración en el proyecto de Gestión de Datos para exportar solo registros nuevos o modificados después de la carga completa inicial. Esto es fundamental para el rendimiento.
- Rangos de fechas: Filtre por InvoiceDate >= [Fecha de inicio]. Evite las exportaciones sin límites, que pueden agotar el tiempo de espera.
- Filtro de compañía: D365 es un sistema multi-entidad. Filtre siempre por DataAreaId para evitar mezclar datos de diferentes entidades legales, a menos que se pretenda un análisis entre compañías.
- Historial de
workflow: Las entidades estándar para el historial deworkflowpueden ser pesadas. Asegúrese de exportar solo el historial relacionado con los tipos de VendInvoice para mantener el volumen manejable.
a Consulta de ejemplo config
/*
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
Verificar conectividad 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.Confirmar exportación de entidades: Navegue al espacio de trabajo Data Management en Dynamics 365. Verifique que las siguientes entidades (o sus tablas subyacentes) estén configuradas para exportar a la base de datos BYOD:
VendInvoiceInfoTable(Facturas pendientes),VendInvoiceInfoLine(Líneas pendientes),VendInvoiceJour(Facturas registradas),VendTrans(Transacciones de proveedores),LedgerJournalTrans(Líneas de diario),LedgerJournalTable(Encabezados de diario) yWorkflowTrackingStatusTable(Historial deworkflow).Configurar trabajo de exportación: Si estas tablas no se están exportando actualmente, cree un nuevo trabajo de exportación. Establezca el Target Data Format en su base de datos SQL BYOD. Elija Incremental Push para mantener los datos sincronizados sin reexportaciones completas. Ejecute el trabajo para poblar las tablas.
Preparar el entorno SQL: Abra SSMS y conéctese a la base de datos Azure SQL BYOD. Abra una nueva ventana de consulta.
Establecer parámetros: En el script que se proporciona 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 período que desea analizar. Si necesita filtrar por una entidad legal específica, actualice las condiciones de filtroDATAAREAID.Ejecutar el script: Ejecute el script T-SQL completo. Este script utiliza
UNION ALLpara combinar datos de múltiples tablas en un único formato de registro de eventos estandarizado.Validar datos: Verifique los resultados en busca de valores nulos en las columnas
InvoiceNumberoEventTime. Asegúrese de que aparezcan tanto las facturas registradas (deVendInvoiceJour) como las facturas pendientes (deVendInvoiceInfoTable).Exportar el resultado: Haga clic derecho en la cuadrícula de resultados en SSMS y seleccione Save Results As.... Guarde el archivo como un archivo CSV (delimitado por comas).
Formatear para cargar: Abra el CSV en Excel o un editor de texto para asegurarse de que los formatos de fecha cumplen con la norma ISO 8601 (AAAA-MM-DD HH:MM:SS) si lo requiere ProcessMind. No se debería necesitar ninguna otra transformación si el script se ejecutó correctamente.
Cargar en ProcessMind: Importe el archivo CSV en ProcessMind, mapeando las columnas
InvoiceNumberaCase ID,ActivityaActivity NameyEventTimeaTimestamp.
Configuración
- Estrategia de exportación: Utilice la carga incremental para tablas de alto volumen como
LedgerJournalTransyVendTranspara minimizar la carga de BYOD. Use la carga completa solo si se sospechan inconsistencias en los datos. - Manejo de zonas horarias: Dynamics 365 almacena los datos en UTC. El script asume UTC. Si su análisis requiere la hora local, aplique un ajuste
DATEADDen el script o durante la importación a ProcessMind. - Filtrado por compañía: La columna
DataAreaIdrepresenta la Entidad Legal. El script extrae datos para todas las entidades por defecto. AgregueWHERE DataAreaId = 'usmf'(ejemplo) para filtrar por una subsidiaria específica. - Historial de
workflow: La tablaWorkflowTrackingStatusTablees fundamental para los registros de tiempo de aprobación. Asegúrese de que esta tabla esté incluida en su configuración de exportación de BYOD, ya que a menudo se omite por defecto. - Retención de datos: Tenga en cuenta cualquier rutina de limpieza en D365 que pueda eliminar el historial de
workflowcompletado o las líneas de diario registradas, ya que esto limitará 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;