Seu Template de dados para processamento de pagamentos de contas a pagar
Seu Template de dados para processamento de pagamentos de contas a pagar
- Atributos específicos do processo para análise financeira
- Marcos essenciais das atividades para acompanhar pagamentos
- Instruções detalhadas para extrair dados do Dynamics 365
Atributos do processamento de pagamentos de contas a pagar
| Nome | Descrição | ||
|---|---|---|---|
| Atividade Activity | A tarefa específica ou a mudança de status que ocorreu. | ||
| Descrição Este atributo descreve o evento ou a etapa realizada no processo, como 'Fatura criada', 'Fatura aprovada' ou 'Pagamento lançado'. Ele transforma tipos de transação técnicos e mudanças de status do fluxo de trabalho em eventos de negócio fáceis de entender. No Dynamics 365, essas atividades costumam ser derivadas de uma combinação de inserções em tabelas, como um novo registro em Por que isso importa Define o fluxo do processo e a sequência de eventos no mapa de processo. Onde encontrar Derivado de várias tabelas de transações e logs do histórico do fluxo de trabalho Exemplos Fatura criadaFatura aprovadaPagamento gerado | |||
| Horário do evento EventTime | A data e hora em que a atividade ocorreu. | ||
| Descrição Este atributo registra a data e hora exatas em que uma atividade específica ocorreu. Ele é usado para ordenar os eventos cronologicamente e calcular a duração entre as etapas. No Dynamics 365, esse dado geralmente vem de Por que isso importa Essencial para calcular tempos de ciclo e de atravessamento e identificar gargalos. Onde encontrar 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 | Identificador exclusivo atribuído à fatura do fornecedor. | ||
| Descrição O número da fatura é o identificador definitivo do caso nesta visualização do processo. Ele agrupa de forma exclusiva todos os eventos relacionados a uma única fatura de fornecedor, permitindo analisar todo o percurso, do recebimento à liquidação. No Microsoft Dynamics 365, geralmente corresponde ao campo Por que isso importa É a chave fundamental para reunir atividades de contas a pagar desconectadas em uma única instância do processo. Onde encontrar Tabela: VendInvoiceJour, campo: InvoiceId Exemplos INV-2023-00198223344ACME-OCT-22 | |||
| Sistema de origem SourceSystem | O nome do sistema de onde os dados vieram. | ||
| Descrição Identifica o software ou ambiente de origem de onde os dados do processo foram extraídos. Neste caso, indicará sempre a instância do Microsoft Dynamics 365. Esse atributo é especialmente útil em ambientes com vários sistemas, nos quais os dados podem vir de ERPs e soluções externas de digitalização. Por que isso importa Garante a linhagem e a rastreabilidade dos dados em análises que envolvem vários sistemas. Onde encontrar Definido diretamente no código ou configurado durante a extração Exemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última atualização dos dados LastDataUpdate | A 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 você a entender se está consultando dados em tempo real ou um instantâneo de um período anterior. Esse dado geralmente é gerado pelo processo de ETL (extração, transformação e carregamento), e não por um campo do próprio Dynamics 365. Por que isso importa Essencial para estabelecer confiança nos Dashboards e KPIs. Onde encontrar Gerado pelo script de extração Exemplos 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Código da empresa CompanyCode | Identificador da entidade legal ou subsidiária. | ||
| Descrição Representa a entidade legal da organização em que a fatura está sendo processada. No Microsoft Dynamics 365, esse dado é definido pelo campo de sistema Esse atributo é essencial para a 'Análise do tempo de atravessamento de ponta a ponta', pois permite 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 encontrar Tabela: VendInvoiceJour, campo: DataAreaId Exemplos USMFDEMFGBSI | |||
| Conta do fornecedor VendorAccount | O número exclusivo da conta do fornecedor. | ||
| Descrição Identificador exclusivo do fornecedor envolvido na transação. No Dynamics 365, corresponde ao campo Esse atributo é fundamental para a 'Visualização da complexidade das relações com fornecedores', que permite analisar a performance e os pontos de atrito de cada relação com fornecedores. Por que isso importa Permite segmentar a performance do processo por fornecedor. Onde encontrar Tabela: VendInvoiceJour, campo: InvoiceAccount ou OrderAccount Exemplos US-101V000452001 | |||
| Data da fatura InvoiceDate | Data do documento indicada na fatura. | ||
| Descrição Data impressa na fatura do fornecedor. No Dynamics 365, esse é o campo É usada na análise “Prazo total do início ao fim” para medir o ciclo completo pela perspectiva do fornecedor. Por que isso importa Define o início do período de envelhecimento da fatura. Onde encontrar Tabela: VendInvoiceJour, campo: InvoiceDate Exemplos 2023-10-012023-10-15 | |||
| Data de vencimento DueDate | A data limite para pagar a fatura. | ||
| Descrição A data contratual limite para quitar o pagamento e evitar multas. No Dynamics 365, ela fica armazenada como É a principal referência para o KPI “Taxa de pagamentos em dia” e ajuda a priorizar o trabalho na visualização “Fluxo e volume do processo de contas a pagar”. Por que isso importa Referência para medir o desempenho dos pagamentos em dia. Onde encontrar Tabela: VendInvoiceJour ou VendTrans, campo: DueDate Exemplos 2023-11-302023-12-15 | |||
| Departamento Department | Departamento responsável pelo custo. | ||
| Descrição Dimensão financeira que indica o departamento interno. No Dynamics 365, as dimensões são armazenadas dinamicamente, geralmente em Esse atributo é usado na visualização “Complexidade do relacionamento com fornecedores” para identificar quais departamentos internos geram o maior volume de contas a pagar. Por que isso importa Permite aprofundar a análise por área da organização e avaliar responsabilidades. Onde encontrar Tabela: VendInvoiceJour, campo: DefaultDimension (requer a visualização DimensionAttributeLevelValue) Exemplos TIFinançasOperações | |||
| ID do usuário UserId | Identificador do usuário que realizou a atividade. | ||
| Descrição Identifica o usuário do sistema responsável por uma atividade específica, como aprovar uma fatura ou registrar um pagamento. Os dados vêm dos campos A análise “Bloqueios de pagamento e pontos de atrito” usa esse dado para mostrar se determinados responsáveis pelo processamento geram mais bloqueios que outros. Por que isso importa Permite analisar o comportamento dos responsáveis e a segregação de funções. Onde encontrar Campos do sistema CreatedBy/ModifiedBy nas tabelas de transações e histórico Exemplos jdoeadminworkflow_sys | |||
| Nome do fornecedor VendorName | Nome da organização fornecedora. | ||
| Descrição O nome descritivo do fornecedor. No D365, a conta do fornecedor funciona como chave estrangeira para o catálogo global de endereços ( Nomes fáceis de entender facilitam a análise na 'Vendor Relationship Complexity View' e tornam os dashboards mais acessíveis para as áreas de negócio. Por que isso importa Complementa o número da conta do fornecedor. Onde encontrar Tabela: DirPartyTable (por meio de VendTable), campo: Name (Nome) Exemplos Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Número do pedido de compra PurchaseOrderNumber | Número de referência do pedido de compra associado. | ||
| Descrição Vincula a fatura ao documento de compra original. No Dynamics 365, esse é o campo Esse atributo ajuda no Dashboard “Tendências de correspondência e divergências de pedidos de compra”, distinguindo faturas vinculadas a pedidos de compra das que não estão vinculadas. Por que isso importa Essencial para analisar a taxa de correspondência entre compras e pagamentos. Onde encontrar 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, esse dado aparece em campos como É usado no Dashboard de 'Detecção de risco de pagamentos duplicados' para relacionar valores e dados de fornecedores. Por que isso importa Essencial para analisar o volume de gastos e o risco financeiro. Onde encontrar Tabela: VendInvoiceJour, campo: InvoiceAmount Exemplos 1500.00245.5010000.00 | |||
| Condições de pagamento PaymentTerms | Código que representa as condições de pagamento acordadas. | ||
| Descrição Código de configuração que determina os vencimentos e descontos, como Net30. No Dynamics 365, esse é o campo A análise desse dado junto ao “Tempo de ciclo” mostra se os atrasos do processo estão descumprindo as condições acordadas. Por que isso importa Ajuda a entender o cálculo da data de vencimento. Onde encontrar Tabela: VendInvoiceJour, campo: PaymTermId Exemplos Net302%10Net30COD | |||
| Data limite para desconto à vista CashDiscountDate | Data limite para efetuar o pagamento e obter um desconto. | ||
| Descrição Prazo para aproveitar os incentivos de pagamento antecipado. No Dynamics 365, esse dado corresponde a Esse atributo alimenta o Dashboard “Desempenho na obtenção de descontos à vista”, permitindo quantificar as oportunidades de economia perdidas. Por que isso importa Afeta diretamente o KPI de eficiência financeira do processo. Onde encontrar Tabela: VendInvoiceJour ou VendTrans, campo: CashDiscDate Exemplos 2023-10-102023-10-20 | |||
| Método de pagamento PaymentMethod | Método usado para pagar a fatura (por exemplo, cheque, transferência bancária ou transferência eletrônica de fundos). | ||
| Descrição Define como os valores são transferidos ao fornecedor. No Dynamics 365, esse é o campo Esse atributo é usado no Dashboard “Prazos de execução de pagamentos” para avaliar a eficiência dos diferentes tipos de lotes de pagamento. Por que isso importa Ajuda a explicar as variações na etapa de execução do pagamento. Onde encontrar Tabela: VendInvoiceJour (com junção aos dados de PaymMode) ou VendTrans Exemplos CHEQUEACHTRANSFERÊNCIA | |||
| Moeda Currency | Código da moeda da fatura. | ||
| Descrição Código ISO da moeda em que a fatura foi emitida. No Dynamics 365, esse é o campo É importante para padronizar valores no mapeamento “Valor da atividade” quando for necessário normalizar várias moedas. Por que isso importa Contexto necessário para interpretar valores financeiros. Onde encontrar Tabela: VendInvoiceJour, campo: CurrencyCode Exemplos USDEURGBP | |||
| Número do comprovante contábil VoucherNumber | Número do comprovante contábil associado à transação. | ||
| Descrição Identificador interno do lançamento no razão geral. No Dynamics 365, o campo Embora seja um dado técnico, ele ajuda na análise “Caminho do processo e auditoria de conformidade” a rastrear lançamentos até o razão geral para fazer a conciliação. Por que isso importa Essencial para auditorias financeiras e conciliações. Onde encontrar Tabela: VendInvoiceJour, campo: LedgerVoucher Exemplos VOU-10023INV-ACC-992 | |||
| Pagamento bloqueado? IsPaymentBlocked | Indicador que informa se a fatura está bloqueada para pagamento. | ||
| Descrição Indicador booleano que informa se a fatura está retida. No Dynamics 365, esse dado costuma ser derivado do status É o principal fator da análise “Bloqueios de pagamento e pontos de atrito”, que destaca interrupções no processo. Por que isso importa Identifica pontos de atrito imediatos e intervenções manuais. Onde encontrar Tabela: VendTrans, campo: Approved (invertido) ou campos específicos de retenção Exemplos truefalse | |||
Atividades do processamento de pagamentos de contas a pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Diário de pagamento criado | A fatura é selecionada e adicionada a uma linha do diário de pagamento. Isso indica a intenção de pagar e geralmente inicia o fluxo de trabalho de revisão do pagamento. | ||
| Por que isso importa Marca a transição da obrigação financeira para o processamento do desembolso. É usado para medir os tempos de atravessamento da execução do pagamento. Onde encontrar LedgerJournalTrans.CreatedDateTime. A fatura é vinculada pelo campo MarkedInvoice ou pelas tabelas de liquidação. Coleta Registrado quando o registro é criado em LedgerJournalTrans Tipo de evento explicit | |||
| Fatura aprovada | A instância do fluxo de trabalho da fatura pendente chega ao status de concluída ou aprovada. Agora, a fatura está pronta para ser lançada no razão. | ||
| Por que isso importa Calcula o tempo médio de atravessamento da aprovação. Atrasos nessa etapa afetam diretamente a possibilidade de aproveitar descontos por pagamento antecipado. Onde encontrar WorkflowTrackingStatusTable.CreatedDateTime, em que TrackingStatus é Completed. Como alternativa, VendInvoiceInfoTable.RequestStatus é igual a Approved. Coleta Registrado quando a instância do fluxo de trabalho é concluída Tipo de evento explicit | |||
| Fatura conciliada com pedido de compra | O sistema vincula corretamente a linha da fatura a um pedido de compra ou recebimento de produto. Essa atividade indica que a fatura foi validada em relação ao pedido de compra. | ||
| Por que isso importa Essencial para o KPI de taxa de conciliação de pedidos de compra na primeira tentativa. Diferencia o processamento sem intervenção manual das faturas que exigem intervenção manual. Onde encontrar VendInvoiceInfoLine.PurchId e VendInvoiceInfoTable.MatchStatus. Inferido quando MatchStatus muda para Passed. Coleta Compare o campo MatchStatus antes e depois Tipo de evento inferred | |||
| Fatura criada | Criação inicial de um registro de fatura de fornecedor pendente no sistema. Esse evento marca a entrada da fatura no fluxo de trabalho do Dynamics 365, manualmente ou por meio da importação de uma entidade de dados. | ||
| Por que isso importa Define o horário de início usado nos cálculos do tempo de atravessamento do processo. Permite que as organizações meçam quanto tempo as faturas permanecem no sistema antes de serem processadas ou lançadas. Onde encontrar Timestamp de criação de VendInvoiceInfoTable.CreatedDateTime ou VendInvoiceInfoTable.RecId. Representa o cabeçalho da fatura pendente do fornecedor. Coleta 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 financeira 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 contábil da dívida. Essa atividade permite selecionar a fatura para pagamento. Onde encontrar Criação de registro em VendInvoiceJour e VendTrans. TransDate representa a data do lançamento. Coleta 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 entre aprovação e execução. Confirma que a instrução de pagamento foi gerada. Onde encontrar LedgerJournalTrans.PaymentStatus muda para Sent/Recieved. Muitas vezes, isso é inferido a partir das atualizações da linha. Coleta Compare o campo PaymentStatus antes e depois Tipo de evento inferred | |||
| Pagamento lançado | O diário de pagamento é 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 usada para calcular o tempo médio de ciclo entre a fatura e o pagamento. Confirma que os lançamentos contábeis da redução de caixa foram finalizados. Onde encontrar LedgerJournalTrans é lançado. VendTrans é atualizado para indicar a liquidação. O evento real é o lançamento do diário. Coleta Registrado quando a transação X é executada Tipo de evento explicit | |||
| Bloqueio de pagamento aplicado | Uma restrição é aplicada à transação do fornecedor, impedindo que ela seja selecionada em uma proposta de pagamento. Isso costuma ser feito manualmente em caso de divergências. | ||
| Por que isso importa Dá suporte à análise de bloqueios de pagamento e pontos de atrito. Revela intervenções manuais que atrasam as saídas de caixa. Onde encontrar O sinalizador VendTrans.Approved é definido como No ou campos específicos de status OnHold são preenchidos. É necessário acompanhar as atualizações de VendTrans. Coleta Compare o campo de status antes e depois Tipo de evento inferred | |||
| Diário de pagamento aprovado | O fluxo de trabalho do diário de pagamento é aprovado, autorizando a geração dos pagamentos. Essa é a última verificação antes de preparar a transferência dos fundos. | ||
| Por que isso importa Separa a preparação administrativa dos pagamentos do gargalo de autorização. Onde encontrar WorkflowTrackingStatusTable vinculado ao ID de LedgerJournalTable (cabeçalho). O status é Completed. Coleta Registrado quando a instância do fluxo de trabalho é concluída Tipo de evento explicit | |||
| Falha na conciliação da fatura | A conciliação identifica uma divergência entre a fatura e o pedido de compra ou recebimento, como diferença de preço ou quantidade. Muitas vezes, o processo fica parado até que o problema seja resolvido. | ||
| Por que isso importa Identifica pontos de atrito específicos na conciliação. Dá suporte ao Dashboard de conciliação de pedidos de compra e tendências de divergências. Onde encontrar VendInvoiceInfoTable.MatchStatus muda para Failed ou Discrepancy. As divergências de conciliação também aparecem em VendInvoiceInfoLine. Coleta Compare o campo MatchStatus antes e depois Tipo de evento inferred | |||
| Fatura atualizada | Registra alterações feitas no cabeçalho ou nas linhas da fatura antes do lançamento. Atualizações frequentes podem indicar problemas na extração de dados ou correções manuais necessárias durante a validação. | ||
| Por que isso importa Uma frequência alta de atualizações pode indicar ciclos de retrabalho ou baixa qualidade dos dados de origem, por exemplo, erros de OCR. Esse dado alimenta o monitor de retrabalho e precisão dos dados. Onde encontrar Log do banco de dados (SysDatabaseLog) em VendInvoiceInfoTable, se estiver habilitado, ou inferido a partir de alterações em ModifiedDateTime quando a frequência de consulta é alta. Coleta Compare ModifiedDateTime em extrações consecutivas Tipo de evento inferred | |||
| Fatura enviada para aprovação | A fatura pendente é enviada ao mecanismo de fluxo de trabalho para revisão. Esse evento marca a transição do lançamento e da conciliação de dados para a etapa 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 encontrar WorkflowTrackingStatusTable.CreatedDateTime, em que ContextTableId corresponde ao ID de VendInvoiceInfoTable e Status é Submitted. Coleta Registrado quando a instância do fluxo de trabalho é iniciada Tipo de evento explicit | |||
Guias de extração
Etapas
Acesse o espaço de trabalho Data Management: Entre no seu ambiente do Microsoft Dynamics 365 Finance. Acesse Workspaces e selecione Data Management. Esse é o local 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 (por exemplo, Azure SQL DB para BYOD ou CSV para exportação em arquivo).
Adicione entidades de dados: Adicione ao projeto, uma por uma, as seguintes entidades de dados padrão: 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 disponível para exportação.
Configure os filtros das entidades: Para cada entidade, clique no ícone Filter. Aplique filtros para limitar os dados à CompanyInfo relevante (DataAreaId) e defina um intervalo de datas nos campos CreatedDateTime ou InvoiceDate para extrair somente os dados do período de análise desejado (por exemplo, os últimos 12 meses).
Configure exportações recorrentes: Para manter o Event Log atualizado, crie um trabalho de dados recorrente. Defina a frequência (por exemplo, diária ou de hora em hora) e habilite Incremental push, quando disponível. Assim, o sistema exporta somente os registros alterados e reduz a carga.
Execute a exportação inicial: Na primeira vez, execute o projeto manualmente clicando em Export now. Acompanhe o resumo da execução para confirmar que todos os registros foram exportados sem erros.
Transforme os dados: Depois de exportar os dados para o destino (Azure SQL ou arquivos), use o script SQL fornecido na seção Query para combinar essas tabelas. Essa transformação reúne registros de entidades distintas em um único Event Log cronológico.
Mapeie os atributos: Verifique se o conjunto de dados resultante mapeia InvoiceNumber para ID do caso, EventTime para data e hora e Activity para Atividade, conforme os requisitos da ferramenta de Process Mining.
Valide e carregue os dados: Execute as verificações de validação abaixo para confirmar a precisão dos dados. Depois de validar, exporte o resultado final como arquivo CSV ou Parquet e carregue-o no 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 pagamentos.
- Incremental Push: Habilite esta configuração no projeto Data Management para exportar somente registros novos ou alterados após a carga completa inicial. Isso é essencial para a performance.
- Intervalos de datas: Filtre por InvoiceDate >= [Data de início]. Evite exportações sem limite de datas, que podem exceder o tempo limite.
- Filtro por empresa: O D365 é um sistema com várias entidades. Sempre filtre por DataAreaId para evitar misturar dados de entidades legais diferentes, a menos que a análise entre empresas seja intencional.
- Histórico do fluxo de trabalho: As entidades padrão do histórico do fluxo de trabalho podem gerar muitos dados. Exporte somente o histórico relacionado aos tipos VendInvoice para manter o volume sob controle.
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 do BYOD: Confirme se o SQL Server Management Studio (SSMS) ou uma ferramenta semelhante está instalado e se você consegue se conectar ao Azure SQL Database configurado como destino Bring Your Own Database (BYOD) do seu ambiente Dynamics 365 Finance & Operations.
Confirme a exportação das entidades: Acesse o espaço de trabalho Data Management no Dynamics 365. Verifique se as entidades a seguir (ou as tabelas correspondentes) 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 fluxo de trabalho).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. Selecione Incremental Push para manter os dados sincronizados sem 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 no início a seção de declaração de variáveis. Atualize as variáveis
@StartDatee@EndDatepara definir o período que você quer analisar. Se precisar filtrar por 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 único formato padronizado de Event Log.Valide os dados: Verifique se há valores nulos nas colunas
InvoiceNumberouEventTime. Confirme se as faturas lançadas (deVendInvoiceJour) e as pendentes (deVendInvoiceInfoTable) aparecem nos resultados.Exporte o resultado: Clique com o botão direito na grade de resultados do SSMS e selecione Save Results As.... Salve o arquivo no formato CSV (delimitado por vírgulas).
Prepare o arquivo para carregamento: Abra o CSV no Excel ou em um editor de texto para confirmar que os formatos de data seguem a norma ISO 8601 (YYYY-MM-DD HH:MM:SS), caso o ProcessMind exija. Se o script tiver sido executado corretamente, não será necessário fazer outras transformações.
Carregue os dados no ProcessMind: Importe o arquivo CSV no ProcessMind e mapeie as colunas
InvoiceNumberpara ID do caso,Activitypara Atividade eEventTimepara data e hora.
Configuração
- Estratégia de exportação: Use Incremental Push em tabelas com grande volume, como
LedgerJournalTranseVendTrans, para reduzir a carga no BYOD. Use Full Push somente se houver suspeita de inconsistências nos dados. - Fuso horário: O Dynamics 365 armazena os dados em UTC. O script considera UTC. Se a análise exigir o horário local, aplique um ajuste
DATEADDno script ou durante a importação para o ProcessMind. - Filtro por 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 fluxo de trabalho: A tabela
WorkflowTrackingStatusTableé essencial para registrar data e hora das aprovações. Inclua essa tabela na configuração de exportação BYOD, pois muitas vezes ela não é incluída por padrão. - Retenção de dados: Verifique se as rotinas de limpeza do D365 podem excluir o histórico de fluxos de trabalho concluídos ou as linhas de diário lançadas, pois isso limita o período histórico disponível para a análise de Process Mining.
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 fluxos de trabalho de pagamento hoje mesmo. Nossa equipe pode ajudar você a mapear as tabelas específicas do seu Dynamics 365.
Otimize agora o processamento de pagamentos de contas a pagar
Reduza o tempo de ciclo em 30% e elimine atrasos no D365.
Não é necessário informar o cartão de crédito. Configuração em cinco minutos.