Seu Template de dados para processamento de pagamentos do Contas a Pagar
Seu Template de dados para processamento de pagamentos do Contas a Pagar
- Atributos específicos do processo para análise financeira
- Marcos críticos das atividades para acompanhar pagamentos
- Instruções detalhadas de extração para o Dynamics 365
Atributos do processamento de pagamentos do Contas a Pagar
| Nome | Descrição | ||
|---|---|---|---|
| Atividade Activity | A tarefa específica ou alteração de status que ocorreu. | ||
| Descrição Esse atributo descreve o evento ou a etapa executada no processo, como 'Invoice Created', 'Invoice Approved' ou 'Payment Posted'. Ele transforma tipos técnicos de transação e alterações de status do Workflow em eventos de negócio fáceis de entender. No Dynamics 365, essas atividades geralmente são derivadas de uma combinação de inserções em tabelas, como um novo registro em Por que isso importa Ele define o fluxo do processo e a sequência de eventos do mapa de processo. Onde obter Derivado de várias tabelas de transações e logs do histórico do Workflow Exemplos Fatura criadaFatura aprovadaPagamento gerado | |||
| Horário do evento EventTime | O carimbo de data e hora em que a atividade ocorreu. | ||
| Descrição Esse atributo registra a data e a hora exatas em que uma atividade específica ocorreu. Ele é usado para ordenar os eventos cronologicamente e calcular as durações entre as etapas. No Dynamics 365, geralmente é obtido de Por que isso importa É essencial para calcular tempos de ciclo, lead times e identificar gargalos. Onde obter Campos do sistema CreatedDateTime ou ModifiedDateTime nas tabelas de transações Exemplos 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Número da fatura InvoiceNumber | O identificador exclusivo atribuído à fatura do fornecedor. | ||
| Descrição O Invoice Number é o identificador definitivo do caso nesta visão do processo. Ele agrupa exclusivamente todos os eventos relacionados a uma única fatura de fornecedor, permitindo uma análise completa da sua jornada, do recebimento à liquidação. No Microsoft Dynamics 365, ele normalmente corresponde ao campo Por que isso importa É a chave fundamental para vincular atividades de contas a pagar desconectadas em uma única instância do processo. Onde obter Tabela: VendInvoiceJour, Campo: InvoiceId Exemplos INV-2023-00198223344ACME-OCT-22 | |||
| Sistema de origem SourceSystem | O nome do sistema de onde os dados foram originados. | ||
| Descrição Identifica o software ou ambiente de origem do qual os dados do processo foram extraídos. Neste contexto, indicará consistentemente a instância do Microsoft Dynamics 365. Isso é especialmente útil em ambientes com vários sistemas, nos quais os dados podem ser combinados a partir de ERPs e soluções externas de digitalização. Por que isso importa Garante a linhagem e a rastreabilidade dos dados em análises com vários sistemas. Onde obter Definido diretamente no código ou configurado durante a extração Exemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última atualização dos dados LastDataUpdate | O carimbo de data e hora em que os dados foram extraídos ou atualizados. | ||
| Descrição Indica o nível de atualização dos dados usados na análise. Ajuda os usuários a entender se estão analisando dados em tempo real ou uma fotografia de um período anterior. Normalmente, é gerado pelo processo de ETL (Extract, Transform, Load), e não por um campo do próprio Dynamics 365. Por que isso importa É fundamental para estabelecer confiança nos Dashboards e KPIs. Onde obter Gerado pelo script de extração Exemplos 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Código da empresa CompanyCode | O identificador da entidade legal ou subsidiária. | ||
| Descrição Representa a entidade legal da organização na qual a fatura está sendo processada. No Microsoft Dynamics 365, isso é aplicado rigorosamente por meio do campo de sistema Esse atributo é essencial para a 'Análise do lead time de ponta a ponta', permitindo comparar diferentes subsidiárias ou unidades geográficas. Por que isso importa Permite fazer análises comparativas entre diferentes unidades de negócio ou países. Onde obter Tabela: VendInvoiceJour, Campo: DataAreaId Exemplos USMFDEMFGBSI | |||
| Conta do fornecedor VendorAccount | O número exclusivo da conta do fornecedor. | ||
| Descrição O identificador exclusivo do fornecedor envolvido na transação. No Dynamics 365, corresponde ao campo Esse atributo é central para a 'Visão da complexidade das relações com fornecedores', permitindo analisar a performance e os pontos de atrito de cada relação específica com fornecedores. Por que isso importa Permite segmentar a performance do processo por fornecedor. Onde obter Tabela: VendInvoiceJour, Campo: InvoiceAccount ou OrderAccount Exemplos US-101V000452001 | |||
| Data da fatura InvoiceDate | A data do documento informada na fatura. | ||
| Descrição A data impressa na fatura do fornecedor. No Dynamics 365, esse é o campo Usada na 'End to End Lead Time Analysis' para medir o ciclo de vida total sob a perspectiva do fornecedor. Por que isso importa Define o início do período de aging da fatura. Onde obter Tabela: VendInvoiceJour, campo: InvoiceDate Exemplos 2023-10-012023-10-15 | |||
| Data de vencimento DueDate | A data até a qual a fatura deve ser paga. | ||
| Descrição A data contratual até a qual o pagamento deve ser liquidado para evitar penalidades. No Dynamics 365, ela é armazenada como É a principal referência para o KPI de 'Taxa de pagamentos no prazo' e ajuda a priorizar o trabalho na visão de 'Volume e throughput do processo de contas a pagar'. Por que isso importa A referência para medir a performance dos pagamentos no prazo. Onde obter Tabela: VendInvoiceJour ou VendTrans, Campo: DueDate Exemplos 2023-11-302023-12-15 | |||
| Departamento Department | O departamento responsável pelo custo. | ||
| Descrição A dimensão financeira que indica o departamento interno. No Dynamics 365, as dimensões são armazenadas dinamicamente, geralmente em Esse atributo é usado na 'Vendor Relationship Complexity View' para identificar quais departamentos internos geram o maior volume de contas a pagar. Por que isso importa Permite detalhar a análise por estrutura organizacional e responsabilidade. Onde obter Tabela: VendInvoiceJour, campo: DefaultDimension (requer a visualização DimensionAttributeLevelValue) Exemplos TIFinançasOperações | |||
| ID do usuário UserId | O identificador do usuário que executou a atividade. | ||
| Descrição Identifica o usuário do sistema responsável por uma atividade específica, como aprovar uma fatura ou lançar um pagamento. É obtido dos campos É usado na 'Análise de bloqueios e atritos de pagamento' para verificar se determinados processadores geram mais bloqueios do que outros. Por que isso importa Permite analisar o comportamento dos recursos e a segregação de funções. Onde obter Campos do sistema CreatedBy/ModifiedBy nas tabelas de transações e histórico Exemplos jdoeadminworkflow_sys | |||
| Nome do fornecedor VendorName | O nome da organização fornecedora. | ||
| Descrição O nome descritivo do fornecedor. No D365, a conta do fornecedor funciona como uma chave estrangeira para o catálogo de endereços global ( Fornecer nomes legíveis facilita a 'Vendor Relationship Complexity View' e torna os Dashboards acessíveis aos usuários de negócio. Por que isso importa Fornece contexto para o número da conta do fornecedor. Onde obter Tabela: DirPartyTable (via VendTable), campo: Name Exemplos Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Número do pedido de compra PurchaseOrderNumber | O número de referência do pedido de compra associado. | ||
| Descrição Vincula a fatura ao documento de compras original. No Dynamics 365, esse é o campo Esse atributo dá suporte ao Dashboard de 'Tendências de conciliação e divergências de pedidos de compra', distinguindo faturas vinculadas a pedidos de compra de faturas sem pedido de compra. Por que isso importa É essencial para analisar a taxa de conciliação do processo de compras ao pagamento. Onde obter Tabela: VendInvoiceJour, Campo: PurchId Exemplos PO-000455000342PO-22-998 | |||
| Valor da fatura InvoiceAmount | O valor monetário total da fatura. | ||
| Descrição O valor total da fatura na moeda da transação. No Dynamics 365, ele é encontrado em campos como É usado no Dashboard de 'Detecção do risco de pagamentos duplicados' para relacionar os valores aos dados dos fornecedores. Por que isso importa É fundamental para analisar o volume de gastos e o risco financeiro. Onde obter Tabela: VendInvoiceJour, Campo: InvoiceAmount Exemplos 1500.00245.5010000.00 | |||
| Condições de pagamento PaymentTerms | O código que representa as condições de pagamento acordadas. | ||
| Descrição O código de configuração que define as datas de vencimento e os descontos, como Net30. No Dynamics 365, esse é o Analisado junto com 'Cycle Time' para verificar se os atrasos do processo estão descumprindo as condições acordadas. Por que isso importa Fornece contexto para o cálculo da data de vencimento. Onde obter Tabela: VendInvoiceJour, campo: PaymTermId Exemplos 30 dias líquidos2% em 10 dias, 30 dias líquidosCOD | |||
| Data do desconto à vista CashDiscountDate | A data limite para realizar o pagamento e obter um desconto. | ||
| Descrição O prazo para aproveitar incentivos de pagamento antecipado. No Dynamics 365, esse é o Esse atributo alimenta o Dashboard 'Cash Discount Capture Performance', permitindo que a organização quantifique oportunidades de economia perdidas. Por que isso importa Impacta diretamente o KPI de eficiência financeira do processo. Onde obter Tabela: VendInvoiceJour ou VendTrans, campo: CashDiscDate Exemplos 2023-10-102023-10-20 | |||
| Método de pagamento PaymentMethod | O método usado para pagar a fatura, como cheque, transferência bancária ou EFT. | ||
| Descrição Define como os recursos são transferidos para o fornecedor. No Dynamics 365, esse é o campo Esse atributo é usado no Dashboard 'Payment Execution Lead Times' para avaliar a eficiência de diferentes tipos de lotes de pagamento. Por que isso importa Explica as variações na etapa de execução do pagamento. Onde obter Tabela: VendInvoiceJour (unida às informações de PaymMode) ou VendTrans Exemplos CHEQUEACHTRANSFERÊNCIA | |||
| Moeda Currency | O código da moeda da fatura. | ||
| Descrição O código ISO da moeda em que a fatura foi emitida. No Dynamics 365, esse é o campo É importante para padronizar os valores no mapeamento 'Activity Amount' quando for necessária a normalização de múltiplas moedas. Por que isso importa Contexto necessário para interpretar os valores financeiros. Onde obter Tabela: VendInvoiceJour, campo: CurrencyCode Exemplos USDEURGBP | |||
| Número do comprovante VoucherNumber | O número do comprovante contábil associado à transação. | ||
| Descrição O identificador interno do General Ledger para o lançamento contábil. No Dynamics 365, o campo Embora seja técnico, ele é útil para a 'Process Path and Compliance Audit', permitindo rastrear os lançamentos até o GL para fins de conciliação. Por que isso importa Essencial para auditoria financeira e conciliação. Onde obter Tabela: VendInvoiceJour, campo: LedgerVoucher Exemplos VOU-10023INV-ACC-992 | |||
| Pagamento bloqueado IsPaymentBlocked | Indicador que mostra se a fatura está atualmente bloqueada para pagamento. | ||
| Descrição Indicador booleano que identifica se a fatura está retida. No Dynamics 365, ele costuma ser derivado do status Esse é o principal fator da 'Payment Block and Friction Analysis', destacando interrupções no processo. Por que isso importa Identifica pontos imediatos de atrito e intervenções manuais. Onde obter Tabela: VendTrans, campo: Approved (invertido) ou campos específicos de retenção Exemplos truefalse | |||
Atividades do processamento de pagamentos do Contas a Pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Diário de pagamentos criado | A fatura é selecionada e adicionada a uma linha do diário de pagamentos. Isso indica a intenção de pagar e geralmente inicia o Workflow de revisão do pagamento. | ||
| Por que isso importa Marca a transição da obrigação para o processamento do desembolso de caixa. É usado para medir os lead times de execução de pagamentos. Onde obter LedgerJournalTrans.CreatedDateTime. A fatura é vinculada por meio do campo MarkedInvoice ou das tabelas de liquidação. Captura Registrado quando o registro é criado em LedgerJournalTrans Tipo de evento explicit | |||
| Fatura aprovada | A instância do Workflow da fatura pendente chega ao status concluído ou aprovado. A fatura agora está pronta para ser lançada no razão. | ||
| Por que isso importa Calcula o lead time médio de aprovação. Atrasos nessa etapa afetam diretamente a capacidade de aproveitar descontos por pagamento antecipado. Onde obter WorkflowTrackingStatusTable.CreatedDateTime, quando TrackingStatus é Completed. Como alternativa, VendInvoiceInfoTable.RequestStatus é igual a Approved. Captura Registrado quando a instância do Workflow é concluída Tipo de evento explicit | |||
| Fatura conciliada com pedido de compra | O sistema vincula com sucesso a linha da fatura a um pedido de compra ou recebimento de produto. Essa atividade representa a validação da fatura em relação ao pedido de compras. | ||
| Por que isso importa É essencial para o KPI da taxa de conciliação de pedidos de compra na primeira tentativa. Ele diferencia o processamento sem intervenção manual das faturas que exigem intervenção manual. Onde obter VendInvoiceInfoLine.PurchId e VendInvoiceInfoTable.MatchStatus. Inferido quando MatchStatus muda para Passed. Captura Comparar o campo MatchStatus antes e depois Tipo de evento inferred | |||
| Fatura criada | A criação inicial de um registro de fatura de fornecedor pendente no sistema. Isso marca a entrada da fatura no Workflow do Dynamics 365, manualmente ou por meio da importação de uma entidade de dados. | ||
| Por que isso importa Estabelece o horário de início dos cálculos de lead time do processo. Permite que as organizações meçam quanto tempo as faturas permanecem no sistema antes de serem processadas ou lançadas. Onde obter Carimbo de data e hora de VendInvoiceInfoTable.CreatedDateTime ou da criação de VendInvoiceInfoTable.RecId. Isso representa o cabeçalho da fatura de fornecedor pendente. Captura Registrado quando o registro é criado em VendInvoiceInfoTable Tipo de evento explicit | |||
| Fatura lançada | A fatura é lançada no razão geral, criando uma obrigação no sistema. O registro passa das tabelas de pendências para as tabelas de transações lançadas. | ||
| Por que isso importa Um marco importante que indica o reconhecimento financeiro da dívida. Essa atividade permite selecionar a fatura para pagamento. Onde obter Criação de um registro em VendInvoiceJour e VendTrans. TransDate representa a data do lançamento. Captura Registrado quando a transação X é executada Tipo de evento explicit | |||
| Pagamento gerado | O sistema gera o arquivo de pagamento (EFT, ISO20022) ou imprime os cheques. O status do pagamento na linha do diário é atualizado para Sent ou Generated. | ||
| Por que isso importa Dá suporte ao KPI de tempo de atraso entre aprovação e execução. Confirma que a instrução de pagamento foi gerada. Onde obter LedgerJournalTrans.PaymentStatus muda para Sent/Recieved. Geralmente é inferido a partir das atualizações na linha. Captura Comparar o campo PaymentStatus antes e depois Tipo de evento inferred | |||
| Pagamento lançado | O diário de pagamentos é lançado no razão geral, liquidando a fatura e zerando o saldo do fornecedor. Isso conclui o processo financeiro. | ||
| Por que isso importa A atividade final do tempo médio de ciclo entre fatura e pagamento. Confirma que os lançamentos contábeis referentes à redução de caixa foram finalizados. Onde obter LedgerJournalTrans é lançado. VendTrans é atualizado para indicar a liquidação. O evento real é o lançamento do diário. Captura Registrado quando a transação X é executada Tipo de evento explicit | |||
| Bloqueio de pagamento aplicado | É aplicada uma retenção à transação do fornecedor, impedindo que ela seja selecionada em uma proposta de pagamento. Isso geralmente é feito manualmente em caso de disputas. | ||
| Por que isso importa Dá suporte à análise de bloqueios e atritos de pagamento. Revela intervenções manuais que atrasam a saída de caixa. Onde obter O indicador VendTrans.Approved é definido como No ou campos de status específicos de retenção são preenchidos. É necessário acompanhar as atualizações em VendTrans. Captura Comparar o campo de status antes e depois Tipo de evento inferred | |||
| Diário de pagamentos aprovado | O Workflow do diário de pagamentos é aprovado, autorizando a geração dos pagamentos. Essa é a última verificação antes de os recursos serem preparados para transferência. | ||
| Por que isso importa Separa a preparação administrativa dos pagamentos do gargalo de autorização. Onde obter WorkflowTrackingStatusTable vinculada ao ID da LedgerJournalTable (cabeçalho). Status é Completed. Captura Registrado quando a instância do Workflow é concluída Tipo de evento explicit | |||
| Falha na conciliação da fatura | O processo de conciliação identifica uma divergência entre a fatura e o pedido de compra ou recebimento, como variação de preço ou quantidade. Isso geralmente interrompe o processo até que o problema seja resolvido. | ||
| Por que isso importa Identifica pontos de atrito específicos no processo de conciliação. Dá suporte ao Dashboard de tendências de conciliação e divergências de pedidos de compra. Onde obter VendInvoiceInfoTable.MatchStatus muda para Failed ou Discrepancy. Também fica visível nas variações de conciliação de VendInvoiceInfoLine. Captura Comparar o campo MatchStatus antes e depois Tipo de evento inferred | |||
| Fatura atualizada | Registra as alterações feitas no cabeçalho ou nas linhas da fatura antes do lançamento. Atualizações frequentes podem indicar problemas de extração de dados ou correções manuais necessárias durante a validação. | ||
| Por que isso importa Uma alta frequência de atualizações sugere ciclos de retrabalho ou baixa qualidade dos dados na origem, como erros de OCR. Isso dá suporte ao monitor de retrabalho e precisão dos dados. Onde obter Log do banco de dados (SysDatabaseLog) em VendInvoiceInfoTable, quando habilitado, ou inferido a partir das alterações em ModifiedDateTime se a frequência de consulta for alta. Captura Comparar ModifiedDateTime nas extrações subsequentes Tipo de evento inferred | |||
| Fatura enviada para aprovação | A fatura pendente é enviada ao mecanismo de Workflow para revisão. Isso marca a transição da entrada e conciliação de dados para a fase de autorização. | ||
| Por que isso importa Marca o início do tempo de ciclo de aprovação. É essencial para analisar a eficiência das hierarquias internas. Onde obter WorkflowTrackingStatusTable.CreatedDateTime, quando ContextTableId é igual ao ID de VendInvoiceInfoTable e Status é Submitted. Captura Registrado quando a instância do Workflow é iniciada Tipo de evento explicit | |||
Guias de extração
Etapas
Acesse o Data Management Workspace: faça login no seu ambiente do Microsoft Dynamics 365 Finance. Acesse Workspaces e selecione Data Management. Esse é o hub central para configurar projetos de exportação de dados.
Crie um projeto de exportação: clique no bloco Export para criar um novo projeto de dados. Dê um nome claro ao projeto, por exemplo, ProcessMining_AP_Export. No campo Target data format, selecione o formato de destino, como Azure SQL DB para BYOD ou CSV para uma exportação baseada em arquivo.
Adicione as entidades de dados: adicione uma a uma as seguintes entidades de dados padrão ao projeto: VendorInvoiceHeaderEntity (para faturas pendentes), VendorInvoiceLineEntity (para linhas de fatura), VendorInvoiceJournalHeaderEntity (para faturas lançadas), VendorPaymentJournalLineEntity (para pagamentos) e WorkflowHistoryEntity (para registros de aprovação). Se WorkflowHistoryEntity não estiver disponível por padrão, talvez seja necessário habilitar uma entidade personalizada ou uma entidade específica do sistema disponibilizada para exportação.
Configure os filtros das entidades: em cada entidade, clique no ícone Filter. Aplique filtros para restringir os dados à CompanyInfo relevante (DataAreaId) e defina um intervalo de datas nos campos CreatedDateTime ou InvoiceDate para extrair dados somente do período desejado, como os últimos 12 meses.
Configure a exportação recorrente: para manter o Event Log atualizado, crie um trabalho de dados recorrente. Defina a frequência, como diária ou horária, e habilite Incremental push quando disponível. Isso reduz a carga no sistema ao exportar somente os registros alterados.
Execute a exportação inicial: execute o projeto manualmente pela primeira vez clicando em Export now. Monitore o Execution summary para garantir que todos os registros sejam exportados com sucesso e sem erros.
Transforme os dados: depois que os dados forem exportados para o destino, Azure SQL ou arquivos, use o script SQL fornecido na seção Query para unir essas tabelas. Essa lógica de transformação converte os registros de entidades distintas em um único Event Log cronológico.
Mapeie os atributos: garanta que o conjunto de dados resultante mapeie InvoiceNumber para Case ID, EventTime para Timestamp e Activity para Activity Name, conforme os requisitos da ferramenta de Process Mining.
Valide e faça o upload: execute as verificações de validação listadas abaixo para confirmar a precisão dos dados. Depois de verificar os resultados, exporte o arquivo final como CSV ou Parquet e faça o upload para o ProcessMind.
Configuração
- Seleção de entidades: use VendorInvoiceHeaderEntity e VendorInvoiceLineEntity para as etapas do processo anteriores ao lançamento. Use VendorInvoiceJournalHeaderEntity para o documento legal lançado. Use VendorPaymentJournalLineEntity para acompanhar os pagamentos.
- Incremental Push: habilite esta configuração no projeto do Data Management para exportar somente registros novos ou modificados após a carga completa inicial. Isso é fundamental para a performance.
- Intervalos de datas: filtre por InvoiceDate >= [Start Date]. Evite exportações sem limite, pois elas podem atingir o tempo limite.
- Filtro de empresa: o D365 é um sistema com várias entidades. Sempre filtre por DataAreaId para evitar misturar dados de diferentes entidades legais, a menos que a análise entre empresas seja intencional.
- Histórico do Workflow: as entidades padrão do histórico do Workflow podem gerar um volume elevado de dados. Exporte somente o histórico relacionado aos tipos VendInvoice para manter o volume sob controle.
a Consulta de exemplo 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' Etapas
Verifique a conectividade com o BYOD: confirme se o SQL Server Management Studio (SSMS) ou uma ferramenta semelhante está instalado e se você consegue se conectar ao banco de dados Azure SQL configurado como destino Bring Your Own Database (BYOD) do seu ambiente Dynamics 365 Finance & Operations.
Confirme a exportação das entidades: acesse o workspace Data Management no Dynamics 365. Verifique se as seguintes entidades, ou suas tabelas subjacentes, estão configuradas para exportação ao banco de dados BYOD:
VendInvoiceInfoTable(faturas pendentes),VendInvoiceInfoLine(linhas pendentes),VendInvoiceJour(faturas lançadas),VendTrans(transações de fornecedores),LedgerJournalTrans(linhas de diário),LedgerJournalTable(cabeçalhos de diário) eWorkflowTrackingStatusTable(histórico do Workflow).Configure o trabalho de exportação: se essas tabelas ainda não estiverem sendo exportadas, crie um novo trabalho de exportação. Defina Target Data Format como seu banco de dados SQL BYOD. Escolha Incremental Push para manter os dados sincronizados sem realizar novas exportações completas. Execute o trabalho para preencher as tabelas.
Prepare o ambiente SQL: abra o SSMS e conecte-se ao banco de dados Azure SQL BYOD. Abra uma nova janela de consulta.
Defina os parâmetros: no script fornecido abaixo, localize a seção de declaração de variáveis no início. Atualize as variáveis
@StartDatee@EndDatepara corresponder ao período que você deseja analisar. Se precisar filtrar uma entidade legal específica, atualize as condições de filtroDATAAREAID.Execute o script: execute o script T-SQL completo. Ele usa
UNION ALLpara combinar dados de várias tabelas em um formato único e padronizado de Event Log.Valide os dados: verifique se há valores nulos nas colunas
InvoiceNumberouEventTime. Confirme se as faturas lançadas, provenientes deVendInvoiceJour, e as faturas pendentes, provenientes deVendInvoiceInfoTable, estão aparecendo.Exporte o resultado: clique com o botão direito na grade de resultados do SSMS e selecione Save Results As.... Salve o arquivo como CSV (Comma Delimited).
Formate para o upload: abra o CSV no Excel ou em um editor de texto para garantir que os formatos de data estejam em conformidade com a ISO 8601 (YYYY-MM-DD HH:MM:SS), se isso for exigido pelo ProcessMind. Nenhuma transformação adicional deverá ser necessária se o script tiver sido executado com sucesso.
Faça o upload para o ProcessMind: importe o arquivo CSV para o ProcessMind, mapeando as colunas
InvoiceNumberpara Case ID,Activitypara Activity Name eEventTimepara Timestamp.
Configuração
- Estratégia de exportação: use Incremental Push para tabelas de alto volume, como
LedgerJournalTranseVendTrans, a fim de minimizar a carga no BYOD. Use Full Push somente se houver suspeita de inconsistências nos dados. - Tratamento de fuso horário: o Dynamics 365 armazena os dados em UTC. O script pressupõe UTC. Se a análise exigir o horário local, aplique um ajuste
DATEADDno script ou durante a importação para o ProcessMind. - Filtro de empresa: a coluna
DataAreaIdrepresenta a entidade legal. Por padrão, o script extrai dados de todas as entidades. AdicioneWHERE DataAreaId = 'usmf', por exemplo, para filtrar uma subsidiária específica. - Histórico do Workflow: a tabela
WorkflowTrackingStatusTableé fundamental para os registros de data e hora das aprovações. Garanta que essa tabela esteja incluída na configuração de exportação do BYOD, pois ela costuma ser omitida por padrão. - Retenção de dados: fique atento às rotinas de limpeza do D365 que podem excluir históricos concluídos do Workflow ou linhas de diário lançadas, pois isso limitará a profundidade histórica da análise de Process Mining.
a Consulta de exemplo 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; Pronto para começar?
Use este Template para criar uma base de dados sólida e começar a otimizar seus Workflows de pagamento hoje mesmo. Nossa equipe está à disposição para ajudar você a mapear suas tabelas específicas do Dynamics 365.
Otimize agora o processamento de pagamentos do Contas a Pagar
Reduza os tempos de ciclo em 30% e elimine os atrasos do D365.
Não é necessário cartão de crédito. Configuração em cinco minutos.