Seu Template de Dados para Processamento de Pagamentos de CP
Seu Template de Dados para Processamento de Pagamentos de CP
- Atributos específicos do processo para análise financeira
- Marcos de atividades críticos para o rastreio de pagamentos
- Instruções detalhadas de extração para o Dynamics 365
Atributos de Processamento de Pagamento de Contas a Pagar
| Nome | Descrição | ||
|---|---|---|---|
| Atividade Activity | A tarefa específica ou mudança de status que ocorreu. | ||
| Descrição Este atributo descreve o evento ou etapa realizada no processo, como 'Fatura Criada', 'Fatura Aprovada' ou 'Pagamento Postado'. Ele transforma tipos de transação técnicos e mudanças de status de workflow em eventos de negócio legíveis. No Dynamics 365, essas atividades geralmente derivam de uma combinação de inserções em tabelas (ex: novo registro em Por que é importante Define o fluxo do processo e a sequência de eventos para o mapa de processos. Onde obter Derivado de várias tabelas de transação e logs de histórico de workflow Exemplos Fatura CriadaFatura AprovadaPagamento Gerado | |||
| Número da fatura InvoiceNumber | O identificador exclusivo atribuído à fatura do fornecedor. | ||
| Descrição O Número da Fatura serve como o identificador de caso (Case ID) definitivo para esta visão do processo. Ele agrupa todos os eventos de uma única fatura, permitindo uma análise completa desde o recebimento até a liquidação. No Microsoft Dynamics 365, isso geralmente corresponde ao campo Por que é importante É a chave fundamental para unir atividades isoladas de Contas a Pagar em uma única instância de processo. Onde obter Tabela: VendInvoiceJour, Campo: InvoiceId Exemplos INV-2023-00198223344ACME-OCT-22 | |||
| Tempo do Evento EventTime | O carimbo de data/hora de quando a atividade ocorreu. | ||
| Descrição Este atributo registra a data e hora exata em que uma atividade ocorreu. É usado para sequenciar eventos cronologicamente e calcular durações entre etapas. Para o Dynamics 365, geralmente é extraído de Por que é importante Essencial para calcular tempos de ciclo, lead times e identificar gargalos. Onde obter Campos de sistema CreatedDateTime ou ModifiedDateTime nas tabelas de transação Exemplos 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Sistema de Origem SourceSystem | O nome do sistema de onde os dados se originaram. | ||
| Descrição Identifica o software ou ambiente de origem de onde os dados do processo foram extraídos. Neste contexto, indicará consistentemente a instância do Microsoft Dynamics 365. Isso é particularmente útil em ecossistemas multissistema, onde dados podem ser mesclados de ERPs e soluções externas de digitalização. Por que é importante Garante a linhagem dos dados e a rastreabilidade em análises multissistema. Onde obter Hardcoded ou configurado durante a extração Exemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última Atualização de Dados LastDataUpdate | O carimbo de data/hora de quando os dados foram extraídos ou atualizados. | ||
| Descrição Indica o quão atualizados estão os dados usados na análise. Ajuda os usuários a entenderem se estão vendo dados em tempo real ou um recorte de um período anterior. Normalmente, este dado é gerado pelo processo de ETL, e não por um campo específico dentro do Dynamics 365. Por que é importante Crítico 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 dentro da organização onde a fatura está sendo processada. No Microsoft Dynamics 365, isso é obrigatório através do campo de sistema Este atributo é essencial para a 'Análise de Lead Time de Ponta a Ponta', permitindo comparações entre diferentes subsidiárias ou unidades geográficas. Por que é importante Permite análise comparativa entre diferentes unidades de negócio ou países. Onde obter Tabela: VendInvoiceJour, Campo: DataAreaId Exemplos USMFDEMFGBSI | |||
| Conta de Fornecedor VendorAccount | O número único da conta do fornecedor. | ||
| Descrição O identificador exclusivo para o fornecedor envolvido na transação. No Dynamics 365, corresponde ao campo Este atributo é central para a 'Visão de Complexidade de Relacionamento com Fornecedor', permitindo a análise de performance e fricção por fornecedor específico. Por que é importante Permite a segmentação da performance do processo por fornecedor. Onde obter Tabela: VendInvoiceJour, Campo: InvoiceAccount ou OrderAccount Exemplos US-101V000452001 | |||
| Data da Fatura InvoiceDate | A data do documento declarada na fatura. | ||
| Descrição A data impressa na fatura do fornecedor. No Dynamics 365, este é o campo Usado na 'Análise de Lead Time de Ponta a Ponta' para medir o ciclo de vida total sob a perspectiva do fornecedor. Por que é importante 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 multas. No Dynamics 365, isso é armazenado como É a base principal para o KPI de 'Taxa de Pagamento em Dia' e ajuda a priorizar o trabalho na visão de 'Volume e Vazão do Processo de CP'. Por que é importante O benchmark para medir a performance de pagamentos em dia. 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 indicando o departamento interno. No Dynamics 365, as dimensões são armazenadas dinamicamente (geralmente em Este atributo é usado na 'Visão de Complexidade de Relacionamento com Fornecedor' para ver quais departamentos internos geram maior volume de CP. Por que é importante Permite detalhamento organizacional e análise de responsabilidade. Onde obter Tabela: VendInvoiceJour, Campo: DefaultDimension (Requer visão DimensionAttributeLevelValue) Exemplos TIFinançasOperações | |||
| ID do usuário UserId | O 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 postar um pagamento. Extraído dos campos Usado na 'Análise de Bloqueios e Atritos de Pagamento' para verificar se operadores específicos geram mais bloqueios que outros. Por que é importante Permite análise do comportamento dos recursos e segregação de funções. Onde obter Campos de sistema CreatedBy/ModifiedBy nas tabelas de transação/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 atua como chave estrangeira para o Global Address Book ( Fornecer nomes legíveis facilita a 'Visão de Complexidade de Relacionamento com Fornecedor' e torna os dashboards acessíveis para usuários de negócio. Por que é importante 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 compra original. No Dynamics 365, este é o campo Este atributo alimenta o dashboard 'Tendências de Conciliação de PO e Discrepâncias', diferenciando faturas com ordem de compra daquelas sem vínculo (non-PO). Por que é importante Essencial para analisar a taxa de conciliação do processo de compras ao pagamento (P2P). 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, isso é encontrado em campos como Usado no dashboard de 'Detecção de Risco de Pagamento Duplicado' para correlacionar valores com detalhes do fornecedor. Por que é importante Crítico 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 os termos de pagamento acordados. | ||
| Descrição O código de configuração que determina datas de vencimento e descontos (ex: Net30). No Dynamics 365, este é o Analisado junto com o 'Tempo de Ciclo' para ver se atrasos no processo estão violando os termos acordados. Por que é importante Fornece contexto para o cálculo da Data de Vencimento. Onde obter Tabela: VendInvoiceJour, Campo: PaymTermId Exemplos Net302%10Net30COD | |||
| Data do Desconto Financeiro CashDiscountDate | A data até a qual o pagamento deve ocorrer para receber o desconto. | ||
| Descrição O prazo para obter incentivos de pagamento antecipado. No Dynamics 365, este é o Este atributo alimenta o dashboard de 'Performance de Captura de Desconto de Caixa', permitindo quantificar oportunidades de economia perdidas. Por que é importante 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 (ex: Cheque, TED, Boleto, EFT). | ||
| Descrição Define como os fundos são transferidos para o fornecedor. No Dynamics 365, este é o campo Este atributo é usado no dashboard 'Tempos de Espera para Execução de Pagamento' para avaliar a eficiência de diferentes tipos de lotes de pagamento. Por que é importante Explica as variações na fase de execução do pagamento. Onde obter Tabela: VendInvoiceJour (vinculada à info PaymMode) ou VendTrans Exemplos CHEQUEACHWIRE | |||
| 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, este é o campo Importante para padronizar valores no mapeamento de 'Activity Amount' caso seja necessária a normalização multimoeda. Por que é importante Contexto necessário para interpretar valores financeiros. Onde obter Tabela: VendInvoiceJour, Campo: CurrencyCode Exemplos USDEURGBP | |||
| Número do Voucher VoucherNumber | O número do voucher do razão associado à transação. | ||
| Descrição O identificador interno do Razão Geral para o lançamento contábil. No Dynamics 365, o campo Embora técnico, é útil para a 'Auditoria de Conformidade e Caminho do Processo' para rastrear entradas até o GL para conciliação. Por que é importante Chave para auditoria financeira e conciliação. Onde obter Tabela: VendInvoiceJour, Campo: LedgerVoucher Exemplos VOU-10023INV-ACC-992 | |||
| Pagamento Bloqueado? IsPaymentBlocked | Sinalizador indicando se a fatura está atualmente bloqueada para pagamento. | ||
| Descrição Um indicador booleano que identifica se a fatura está retida. No Dynamics 365, isso geralmente é derivado do status Este é o principal propulsor para a 'Análise de Bloqueios e Atritos de Pagamento', destacando interrupções no processo. Por que é importante Identifica pontos de atrito imediatos e intervenções manuais. Onde obter Tabela: VendTrans, Campo: Approved (invertido) ou campos Hold especializados Exemplos verdadeirofalse | |||
Atividades de Processamento de Pagamento de Contas a Pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Diário de Pagamento Criado | A fatura é selecionada e adicionada a uma linha de Diário de Pagamento. Isso indica a intenção de pagar e geralmente inicia o workflow de revisão de pagamento. | ||
| Por que é importante Marca a transição da responsabilidade para o processamento do desembolso de caixa. Utilizado para medir os Lead Times de execução de pagamento. Onde obter LedgerJournalTrans.CreatedDateTime. A fatura é vinculada via campo MarkedInvoice ou tabelas de liquidação. Captura Registrado quando o registro é criado em LedgerJournalTrans Tipo de evento explicit | |||
| Fatura Aprovada | A instância de workflow da fatura pendente atinge o status concluído ou aprovado. A fatura está pronta para ser postada no razão. | ||
| Por que é importante Calcula o tempo médio de espera para aprovação. Atrasos aqui impactam diretamente a capacidade de aproveitar descontos por pagamento antecipado. Onde obter WorkflowTrackingStatusTable.CreatedDateTime onde TrackingStatus é Completed. Alternativamente, VendInvoiceInfoTable.RequestStatus é igual a Approved. Captura Registrado quando a instância do workflow é concluída Tipo de evento explicit | |||
| Fatura Correspondida ao PO | O sistema vincula com sucesso a linha da fatura a um Pedido de Compra ou Recebimento de Produto. Esta atividade significa a validação da fatura contra o pedido de suprimentos. | ||
| Por que é importante Crítico para o KPI de Taxa de Conciliação de PO em Primeira Passagem. Diferencia entre o processamento sem toque e faturas que exigem intervenção manual. Onde obter VendInvoiceInfoLine.PurchId e VendInvoiceInfoTable.MatchStatus. Inferido quando o MatchStatus muda para Passed. Captura Comparar campo MatchStatus antes/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, seja manualmente ou via importação. | ||
| Por que é importante Estabelece o tempo inicial para os cálculos de lead time do processo. Permite medir quanto tempo as faturas ficam paradas no sistema antes de serem processadas ou postadas. Onde obter VendInvoiceInfoTable.CreatedDateTime ou carimbo de data/hora de criação do VendInvoiceInfoTable.RecId. 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 é postada no Razão Geral, criando uma responsabilidade no sistema. O registro sai das tabelas pendentes para as tabelas de transação postadas. | ||
| Por que é importante Um marco importante que indica o reconhecimento financeiro da dívida. Esta atividade habilita a fatura para ser selecionada para pagamento. Onde obter Criação de registro em VendInvoiceJour e VendTrans. O TransDate representa a data de postagem. 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 cheques. O status de pagamento na linha do diário muda para Enviado ou Gerado. | ||
| Por que é importante Suporta o KPI de atraso entre aprovação e execução. Confirma que a instrução de pagamento foi gerada. Onde obter LedgerJournalTrans.PaymentStatus muda para Enviado/Recebido. Geralmente inferido de atualizações na linha. Captura Comparar campo PaymentStatus antes/depois Tipo de evento inferred | |||
| Pagamento Lançado | O Diário de Pagamento é postado no Razão Geral, liquidando a fatura e baixando o saldo do fornecedor. Isso conclui o processo financeiro. | ||
| Por que é importante A atividade final para o tempo médio de ciclo da fatura ao pagamento. Confirma que os lançamentos contábeis de saída de caixa foram finalizados. Onde obter LedgerJournalTrans postado. Atualiza VendTrans para mostrar a liquidação. O evento real é a postagem do diário. Captura Registrado quando a transação X é executada Tipo de evento explicit | |||
| Bloqueio de Pagamento Aplicado | Uma retenção é colocada na transação do fornecedor, impedindo que ela seja selecionada em uma proposta de pagamento. Isso costuma ser feito manualmente em casos de disputa. | ||
| Por que é importante Suporta a análise de bloqueio de pagamento e fricção. Revela intervenções manuais que atrasam a saída de caixa. Onde obter A flag VendTrans.Approved é definida como No, ou campos específicos de status OnHold são preenchidos. Requer o rastreamento de atualizações na VendTrans. Captura Comparar campo de status antes/depois Tipo de evento inferred | |||
| Diário de Pagamento Aprovado | O workflow do Diário de Pagamento é aprovado, autorizando a geração dos pagamentos. Este é o check final antes da preparação dos fundos para transferência. | ||
| Por que é importante Separa a preparação administrativa dos pagamentos do gargalo de autorização. Onde obter WorkflowTrackingStatusTable vinculado ao ID LedgerJournalTable (Cabeçalho). O 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 discrepância entre a fatura e o Pedido de Compra/Recebimento (variância de preço ou quantidade). Isso geralmente interrompe o processo até ser resolvido. | ||
| Por que é importante Identifica pontos de atrito específicos no processo de conciliação. Alimenta o dashboard 'Tendências de Conciliação de PO e Discrepâncias'. Onde obter VendInvoiceInfoTable.MatchStatus muda para Failed ou Discrepancy. Também visível nas variâncias de conciliação de VendInvoiceInfoLine. Captura Comparar campo MatchStatus antes/depois Tipo de evento inferred | |||
| Fatura Atualizada | Registra alterações feitas no cabeçalho ou nas linhas da fatura antes da postagem. Atualizações frequentes podem indicar problemas na extração de dados ou correções manuais necessárias na validação. | ||
| Por que é importante Uma alta frequência de atualizações sugere loops de retrabalho ou baixa qualidade dos dados de origem (ex: erros de OCR). Isso alimenta o Monitor de Retrabalho e Precisão de Dados. Onde obter Log do banco de dados (SysDatabaseLog) na VendInvoiceInfoTable, se habilitado, ou inferido por alterações no ModifiedDateTime se a frequência de varredura for alta. Captura Comparar ModifiedDateTime em extrações subsequentes Tipo de evento inferred | |||
| Fatura Enviada para Aprovação | A fatura pendente é enviada ao motor de workflow para revisão. Isso marca a transição da entrada/conciliação de dados para a fase de autorização. | ||
| Por que é importante Marca o início do tempo do ciclo de aprovação. Essencial para analisar a eficiência das hierarquias internas. Onde obter WorkflowTrackingStatusTable.CreatedDateTime onde ContextTableId é igual ao ID VendInvoiceInfoTable e o status é Submitted. Captura Registrado quando a instância do workflow é iniciada Tipo de evento explicit | |||
Guias de Extração
Etapas
Acessar o Workspace de Gestão de Dados: Faça login no ambiente do Microsoft Dynamics 365 Finance. Navegue até Workspaces e selecione Gestão de Dados (Data Management). Este é o hub central para configurar projetos de exportação de dados.
Criar Projeto de Exportação: Clique no bloco Exportar para criar um novo projeto. Dê um nome claro, por exemplo, ProcessMining_AP_Export. No campo Formato de dados de destino, selecione o destino (ex: Azure SQL DB para BYOD ou CSV para exportação baseada em arquivos).
Adicionar Entidades de Dados: Adicione as seguintes entidades padrão uma a uma: VendorInvoiceHeaderEntity (faturas pendentes), VendorInvoiceLineEntity (linhas da fatura), VendorInvoiceJournalHeaderEntity (faturas postadas), VendorPaymentJournalLineEntity (pagamentos) e WorkflowHistoryEntity (logs de aprovação). Se a WorkflowHistoryEntity não estiver disponível, pode ser necessário habilitar uma entidade customizada ou uma entidade de sistema específica exposta para exportação.
Configurar Filtros de Entidade: Para cada entidade, clique no ícone de Filtro. Aplique filtros para restringir os dados à CompanyInfo (DataAreaId) relevante e defina um intervalo de datas nos campos CreatedDateTime ou InvoiceDate para extrair apenas o período de análise desejado (ex: últimos 12 meses).
Configurar Exportação Recorrente: Para manter o log de eventos atualizado, crie um job de dados recorrente. Defina a frequência (ex: diária ou horária) e habilite o Push Incremental onde for suportado. Isso reduz a carga no sistema ao exportar apenas registros alterados.
Executar Exportação Inicial: Execute o projeto manualmente pela primeira vez clicando em Exportar agora. Monitore o Resumo da execução para garantir que todos os registros foram exportados com sucesso.
Transformar os Dados: Após a exportação para o destino (Azure SQL ou arquivos), use o script SQL fornecido na seção de Consulta para unir as tabelas. Esta lógica de transformação converte os registros das diferentes entidades em um único log de eventos cronológico.
Mapear Atributos: Certifique-se de que o dataset resultante mapeie o InvoiceNumber como Case ID, EventTime como Timestamp e Activity como Activity Name, conforme os requisitos da ferramenta de Process Mining.
Validar e Carregar: Execute as verificações de validação listadas abaixo para confirmar a precisão dos dados. Uma vez verificado, exporte o resultado final como um arquivo CSV ou Parquet e faça o upload para o ProcessMind.
Configuração
- Seleção de Entidades: Use VendorInvoiceHeaderEntity e VendorInvoiceLineEntity para etapas do processo anteriores à contabilização. Use VendorInvoiceJournalHeaderEntity para o documento fiscal contabilizado. Use VendorPaymentJournalLineEntity para o rastreio de pagamentos.
- Push Incremental: Ative esta configuração no projeto de Data Management para exportar apenas registros novos ou modificados após a carga inicial completa. Isso é fundamental para a performance.
- Intervalos de Datas: Filtre por InvoiceDate >= [Data Inicial]. Evite exportações sem limites que podem causar timeout.
- Filtro de Empresa: O D365 é um sistema multientidade. Sempre filtre por DataAreaId para evitar a mistura de dados de diferentes entidades legais, a menos que uma análise consolidada seja o objetivo.
- Histórico de Workflow: Entidades padrão de histórico de workflow podem ser pesadas. Garanta a exportação apenas do histórico relacionado aos tipos VendInvoice para manter o volume sob controle.
a Consulta de Exemplo 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' Etapas
Verificar Conectividade BYOD: Certifique-se de ter o SQL Server Management Studio (SSMS) instalado e acesso ao Banco de Dados Azure SQL configurado como destino Bring Your Own Database (BYOD) do seu Dynamics 365.
Confirmar Exportação de Entidades: No workspace de Gestão de Dados do D365, verifique se estas entidades (ou suas tabelas subjacentes) estão configuradas para exportação:
VendInvoiceInfoTable(Faturas Pendentes),VendInvoiceInfoLine(Linhas Pendentes),VendInvoiceJour(Faturas Postadas),VendTrans(Transações de Fornecedor),LedgerJournalTrans(Linhas de Diário),LedgerJournalTable(Cabeçalhos de Diário) eWorkflowTrackingStatusTable(Histórico de Workflow).Configurar Job de Exportação: Caso não estejam sendo exportadas, crie um novo job de exportação. Defina o Formato de Dados de Destino para seu banco SQL BYOD. Escolha Push Incremental para manter a sincronização sem precisar de re-exportações totais. Execute o job.
Preparar o Ambiente SQL: No SSMS, conecte-se ao banco de dados Azure SQL do BYOD e abra uma nova janela de consulta.
Definir Parâmetros: No script fornecido abaixo, localize a declaração de variáveis no topo. Atualize
@StartDatee@EndDatecom o período desejado. Caso precise filtrar por uma entidade legal específica, ajuste as condições de filtro deDATAAREAID.Executar o Script: Execute o script T-SQL completo. Ele utiliza
UNION ALLpara consolidar dados de várias tabelas em um formato de log de eventos padronizado.Validar os Dados: Verifique se há valores nulos nas colunas
InvoiceNumberouEventTime. Garanta que tanto as faturas postadas (VendInvoiceJour) quanto as pendentes (VendInvoiceInfoTable) estejam presentes.Exportar o Resultado: Clique com o botão direito na grade de resultados no SSMS e selecione Save Results As.... Salve como um arquivo CSV (Delimitado por vírgulas).
Formatar para Upload: Abra o CSV para garantir que os formatos de data sigam o padrão ISO 8601 (AAAA-MM-DD HH:MM:SS). Se o script rodou com sucesso, nenhuma transformação adicional deve ser necessária.
Upload para o ProcessMind: Importe o arquivo CSV no ProcessMind, mapeando as colunas
InvoiceNumberpara Case ID,Activitypara Activity Name eEventTimepara Timestamp.
Configuração
- Estratégia de Exportação: Use o Push Incremental para tabelas de alto volume como
LedgerJournalTranseVendTranspara minimizar a carga no BYOD. Use Full Push apenas se houver suspeita de inconsistência nos dados. - Tratamento de Fuso Horário: O Dynamics 365 armazena dados em UTC. O script assume o padrão UTC. Se sua análise exigir o horário local, aplique um ajuste de
DATEADDno script ou durante a importação no ProcessMind. - Filtragem de Empresa: A coluna
DataAreaIdrepresenta a Entidade Legal. O script extrai dados de todas as entidades por padrão. AdicioneWHERE DataAreaId = 'usmf'(exemplo) para filtrar uma subsidiária específica. - Histórico de Workflow: A tabela
WorkflowTrackingStatusTableé crucial para os timestamps de aprovação. Certifique-se de que esta tabela esteja incluída na sua 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 de workflow concluídos ou linhas de diários postados, o que limitaria 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;