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 essenciais para analisar fornecedores e pagamentos
- Marcos essenciais do ciclo de pagamentos
- Lógica de extração específica para sistemas SAP S/4HANA
Atributos do processamento de pagamentos de contas a pagar
| Nome | Descrição | ||
|---|---|---|---|
| Atividade Activity | A tarefa específica ou a alteração de status do evento registrada para a fatura. | ||
| Descrição Esse atributo representa as etapas distintas do processo ao longo do ciclo de vida da fatura. Ele registra eventos como criação, lançamento, bloqueio e aprovação da fatura, além da compensação do pagamento. Os nomes das atividades são derivados de códigos de transação, registros de alterações ou atualizações de status do fluxo de trabalho no sistema de origem. Na análise, esse campo é essencial para mapear as variantes do fluxo do processo. Ele permite que o mecanismo de Process Mining visualize a sequência de etapas, identifique ciclos de retrabalho e determine onde o processo se desvia do caminho ideal padrão. É um componente central do Event Log. Por que isso importa Ele define os nós no mapa do processo, permitindo visualizar o fluxo de trabalho e os gargalos. Onde encontrar Derivado de códigos de transação (TCODE) ou do cabeçalho (CDHDR) e dos itens (CDPOS) do documento de alteração Exemplos Fatura lançadaBloqueio de pagamento aplicadoExecução da rodada de pagamentosFatura compensada | |||
| Horário do evento EventTime | A data e hora exatas em que a atividade ocorreu. | ||
| Descrição O horário do evento registra a data e a hora específicas em que uma atividade foi gravada no banco de dados do SAP. Ele fornece a dimensão temporal necessária para ordenar os eventos em sequência dentro de um caso. Em geral, esse horário é formado pela combinação dos campos de data e hora da CPU nos registros do sistema ou nos cabeçalhos dos documentos. Na análise, esse atributo é essencial para calcular tempos de ciclo, duração e vazão. Ele permite medir os intervalos entre etapas, como o tempo entre o recebimento da fatura e a aprovação final, o que é fundamental para identificar gargalos e avaliar indicadores de performance, como o tempo médio de aprovação de faturas. Por que isso importa Ele estabelece a ordem cronológica dos eventos e serve de base para todos os cálculos de performance relacionados ao tempo. Onde encontrar Tabela SAP BKPF, campos CPUDT (data de entrada) e CPUTM (hora de entrada), ou campos UDATE e UTIME da CDHDR Exemplos 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Número da fatura InvoiceNumber | Identificador exclusivo da fatura do fornecedor que está sendo processada. | ||
| Descrição O número da fatura é a chave principal para acompanhar o ciclo de vida de um item a pagar no SAP S/4HANA. Ele corresponde especificamente ao número do documento contábil gerado quando a fatura é lançada no razão geral. Na terminologia padrão do SAP, esse número é o número do documento (BELNR), associado a um código da empresa e a um exercício fiscal específicos. Na análise de processos, esse atributo funciona como ID do caso. Ele conecta todas as atividades, desde o recebimento e o estacionamento inicial da fatura até os diversos bloqueios e alterações de aprovação e a compensação final do pagamento. Agrupar os eventos por esse identificador permite reconstruir todo o histórico de cada obrigação de pagamento, do início ao fim. Por que isso importa Ele funciona como o ID definitivo do caso e permite reconstruir o fluxo do processo de pagamento de ponta a ponta. Onde encontrar Tabela SAP BKPF (cabeçalho do documento contábil), campo BELNR, ou campo BELNR da ACDOCA Exemplos 1900000523510000289119000006015100003002 | |||
| Sistema de origem SourceSystem | Identificador da instância do SAP S/4HANA de onde os dados vieram. | ||
| Descrição Esse atributo identifica a instalação ou o cliente específico do ERP de onde os dados do processo foram extraídos. Em ambientes com várias instâncias SAP ou sistemas legados em paralelo, esse campo mantém a linhagem dos dados e permite comparações entre sistemas. Na análise, esse campo funciona como um filtro de alto nível. Ele ajuda os analistas a separar os dados ao comparar a performance de instalações regionais diferentes ou ao validar a consistência dos dados durante projetos de migração de sistemas. Assim, as variações do processo atribuídas à configuração do sistema são analisadas no contexto adequado. Por que isso importa Ele diferencia as fontes de dados em ambientes com vários sistemas, permitindo uma segmentação precisa. Onde encontrar ID do sistema (SY-SYSID) no contexto da instalação SAP Exemplos SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Última atualização dos dados LastDataUpdate | Data e hora da última extração ou atualização do registro. | ||
| Descrição A última atualização dos dados indica quando eles foram carregados com sucesso na plataforma de Process Mining. Ela não corresponde ao horário do evento de negócio, mas à atualização do conjunto de dados. Isso é fundamental para manter a confiança nos dashboards de análise. Na análise, esse atributo ajuda você a entender o quão atualizadas estão as informações exibidas. Ele é especialmente importante ao monitorar dashboards quase em tempo real, como o de análise de bloqueios de pagamento, para garantir que as decisões considerem o estado mais recente do sistema SAP S/4HANA. Por que isso importa Ele informa se os dados estão atualizados, algo essencial para os dashboards operacionais. Onde encontrar Gerado pelo processo de ETL/extração Exemplos 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Código da empresa CompanyCode | Unidade organizacional para a qual são elaborados o balanço patrimonial e a demonstração de resultados. | ||
| Descrição O código da empresa representa a entidade contábil independente dentro da organização. É a unidade organizacional central da contabilidade externa e serve para estruturar os dados financeiros. Cada fatura é atribuída a um único código da empresa. Na análise, esse atributo permite segmentar os KPIs por entidade jurídica ou região. Ele é usado em dashboards para comparar a eficiência das equipes de contas a pagar de diferentes subsidiárias. Por exemplo, ajuda a identificar se uma filial tem uma taxa maior de bloqueios manuais de pagamento do que o padrão corporativo. Por que isso importa Ele segmenta o processo por entidade jurídica e facilita as comparações internas. Onde encontrar Tabela SAP BKPF, campo BUKRS Exemplos US01DE1010002000 | |||
| Condições de pagamento PaymentTerms | Código que representa as condições acordadas para pagamentos e descontos. | ||
| Descrição As condições de pagamento definem quando uma fatura vence e se há descontos para pagamento antecipado. Esse código (por exemplo, 'Z001') corresponde a regras como 'líquido em 30 dias' ou '2% em 10 dias, líquido em 30 dias'. Ele é copiado dos dados mestres do fornecedor para a fatura, mas pode ser alterado manualmente. Na análise, esse atributo é central para os dashboards de otimização de descontos por pagamento antecipado e de conformidade das condições de pagamento de fornecedores. Ele permite que o sistema calcule a data-base de vencimento e identifique se o pagamento foi feito no período ideal para aproveitar a economia. Por que isso importa Ele determina o prazo esperado e os incentivos financeiros, essenciais para analisar descontos. Onde encontrar Tabela SAP BSEG, campo ZTERM Exemplos Z001NT300001 | |||
| Data de compensação ClearingDate | Data em que a fatura foi compensada pelo pagamento. | ||
| Descrição A data de compensação registra quando o item em aberto no razão de contas a pagar foi liquidado, geralmente por uma rodada de pagamentos ou por um lançamento manual de pagamento. Isso marca o fim do passivo. Na análise, esse atributo é usado para calcular o tempo de ciclo final do processo. É a data e hora usadas para a atividade 'Pagamento compensado' e é comparada à data líquida de vencimento para determinar a performance dos pagamentos no prazo. Esse dado alimenta diretamente o Dashboard de eficiência da compensação de pagamentos. Por que isso importa Ela marca a conclusão do processo de pagamento e é usada para determinar se o pagamento foi feito no prazo. Onde encontrar Tabela SAP BSEG ou campo AUGDT da AUGDT Exemplos 2023-11-012023-11-15 | |||
| Data líquida de vencimento NetDueDate | Data calculada até a qual a fatura deve ser paga para evitar multas. | ||
| Descrição A data líquida de vencimento é o prazo final para o pagamento. Ela é calculada somando-se o número máximo de dias das condições de pagamento à data-base. Embora às vezes seja armazenada explicitamente, muitas vezes é calculada nas visualizações de análise. Na análise, essa é a principal referência do monitor de pagamentos atrasados e multas. Comparar a data real de compensação com a data líquida de vencimento gera a métrica 'Dias de atraso no pagamento', que ajuda a quantificar a eficiência da equipe de contas a pagar e o risco de atritos com fornecedores. Por que isso importa Ela é o prazo-alvo do processo. Não cumpri-lo pode afetar a classificação de crédito e gerar custos. Onde encontrar Calculada: data-base + número máximo de dias das condições de pagamento (ZBD1T/ZBD2T/ZBD3T) Exemplos 2023-11-302023-12-01 | |||
| Motivo do bloqueio de pagamento PaymentBlockReason | Código que indica por que uma fatura está bloqueada para pagamento. | ||
| Descrição Esse atributo contém o código do motivo específico aplicado a uma fatura que impede sua inclusão automática na rodada de pagamentos. Alguns exemplos são 'A' para bloqueio de pagamento, 'R' para verificação da fatura ou bloqueios manuais definidos por usuários. Na análise, esse campo é o principal indicador do Dashboard de análise de bloqueios manuais de pagamento. Ao agregar a frequência dos diferentes motivos de bloqueio, a organização pode diagnosticar problemas sistêmicos, como variações frequentes de preço ou falta de registros de recebimento de mercadorias, que atrasam o processo de pagamento. Por que isso importa Ele identifica a causa específica das interrupções do processo e permite direcionar a análise de causa raiz. Onde encontrar Tabela SAP BSEG, campo ZLSPR Exemplos ABR* | |||
| Nome de usuário UserName | ID do usuário que realizou a atividade específica. | ||
| Descrição O nome de usuário registra o ID de login da pessoa ou do agente do sistema responsável por executar uma etapa do processo. Pode ser um usuário que insere dados manualmente ou o ID de uma tarefa em segundo plano (por exemplo, 'BATCH_USER') que executa tarefas automatizadas. Na análise, esse atributo permite calcular a taxa de automação das atividades. Ao diferenciar usuários humanos de contas do sistema, os analistas podem medir o nível de automação do processo. Ele também é usado no Dashboard de distribuição dos pontos de intervenção manual para avaliar a carga de trabalho das equipes. Por que isso importa Ele diferencia o trabalho manual do automatizado e permite calcular a taxa de automação. Onde encontrar Tabela SAP BKPF, campo USNAM, ou CDHDR, campo USERNAME Exemplos BSMITHWF-BATCHRJONES | |||
| Número do fornecedor VendorNumber | Identificador exclusivo do fornecedor associado à fatura. | ||
| Descrição O número do fornecedor corresponde à conta específica do credor no razão auxiliar do SAP. Ele vincula a fatura aos dados mestres que contêm as condições de pagamento, os dados bancários e as informações de contato. No S/4HANA, esse número costuma estar associado ao conceito de parceiro de negócios, mas o nome do campo legado LIFNR ainda é usado em muitas tabelas. Na análise, esse atributo é fundamental para o Dashboard de conformidade das condições de pagamento de fornecedores. Ele permite que os analistas agreguem a performance do processo por fornecedor e identifiquem aqueles que causam bloqueios, variações de preço ou atrasos com frequência. Também apoia decisões estratégicas de compras e a gestão do relacionamento com fornecedores. Por que isso importa Ele permite agregar a performance por fornecedor, o que é essencial para identificar as causas raiz dos atrasos. Onde encontrar Tabela SAP BKPF, campo LIFNR, ou ACDOCA, campo LIFNR Exemplos 100050VEND-US-99200400 | |||
| Pagamento atrasado IsLatePayment | Indicador booleano que informa se o pagamento foi feito após a data de vencimento líquido. | ||
| Descrição Este atributo calculado retorna verdadeiro quando a data de compensação é posterior à data de vencimento líquido. Ele funciona como um classificador binário da performance do processo. Na análise, esse indicador é usado para contar os casos fora de conformidade no KPI de frequência de multas por atraso no pagamento. Ele simplifica a criação de dashboards, permitindo contar os valores verdadeiros sem exigir cálculos complexos de datas na camada de visualização. Por que isso importa Ele simplifica o cálculo dos KPIs de pagamentos em dia. Onde encontrar Calculado: Data de compensação > Data de vencimento líquido Exemplos truefalse | |||
| Sem intervenção manual IsTouchless | Indicador booleano que informa se a fatura foi processada sem intervenção manual. | ||
| Descrição Este atributo é calculado pela análise do fluxo de eventos de um caso. Se o caso contiver apenas atividades automatizadas (por exemplo, usuário "system" ou códigos de transação específicos executados em segundo plano) e nenhuma alteração ou bloqueio manual, ele será classificado como processado sem intervenção manual. Na análise, essa é a métrica principal do KPI de taxa de faturas processadas sem intervenção manual. Ela permite acompanhar o sucesso das iniciativas de automação e identificar quais tipos de caso (por exemplo, por fornecedor ou região) percorrem o sistema sem intervenção humana. Por que isso importa É a principal medida de automação e eficiência do processo. Onde encontrar Calculado com base na sequência de atividades e nos tipos de usuário Exemplos truefalse | |||
| Tipo de documento DocumentType | Classifica o documento contábil (por exemplo, fatura de fornecedor, pagamento, nota de crédito). | ||
| Descrição No SAP, o tipo de documento é um código de dois caracteres que classifica a transação contábil. Entre os tipos comuns estão 'KR' para faturas de fornecedores, 'KZ' para pagamentos a fornecedores e 'RE' para recebimento bruto de fatura. Ele determina o intervalo de numeração e o status dos campos do documento. Na análise, esse atributo é usado para filtrar o escopo do processo. Por exemplo, um analista pode excluir notas de crédito para se concentrar apenas na eficiência dos pagamentos enviados. Ele também ajuda a identificar a composição dos tipos de transação processados e dá suporte ao Dashboard de complexidade das variantes do processo. Por que isso importa Ele categoriza o caso (fatura ou nota de crédito) e permite filtrar a análise. Onde encontrar Tabela SAP BKPF, campo BLART Exemplos KRREKZKG | |||
| Valor da fatura InvoiceAmount | Valor bruto total da fatura na moeda do documento. | ||
| Descrição Esse atributo representa o valor financeiro da fatura registrado no documento de origem. Ele corresponde ao passivo que deve ser liquidado com o fornecedor. No SAP S/4HANA, costuma ser armazenado no campo de valor na moeda do documento. Na análise, o valor da fatura ajuda a priorizar o trabalho. Dashboards como o de distribuição dos pontos de intervenção manual usam esse campo para mostrar se atividades manuais que exigem muito esforço estão sendo dedicadas a faturas de baixo valor. Assim, a organização pode concentrar os esforços de otimização em transações de alto valor, nas quais as falhas do processo representam um risco financeiro maior. Por que isso importa Ele indica o peso financeiro do caso e é essencial para priorizar ineficiências em processos de alto valor. Onde encontrar Tabela SAP BKPF ou BSEG, campo WRBTR Exemplos 1500.00250.5010000.00 | |||
| Data-base BaselineDate | Data a partir da qual as condições de pagamento se aplicam e os vencimentos são calculados. | ||
| Descrição A data-base é o ponto de partida para calcular a data líquida de vencimento e os períodos de desconto por pagamento antecipado. Em geral, ela corresponde à data da fatura ou à data de lançamento, dependendo da configuração e dos dados mestres do fornecedor. Na análise, essa data é um requisito técnico para calcular o status 'Está atrasado'. Erros na data-base podem levar a pagamentos antecipados (com impacto no fluxo de caixa) ou atrasados (com impacto em multas). Verificar a precisão dessa data faz parte da análise de conformidade das condições de pagamento de fornecedores. Por que isso importa Ela é a referência para todos os cálculos de vencimento. Onde encontrar Tabela SAP BSEG, campo ZFBDT Exemplos 2023-10-012023-10-15 | |||
| Dias para desconto à vista 1 CashDiscountDays1 | Número de dias a partir da data-base em que o primeiro desconto à vista fica disponível. | ||
| Descrição Esse atributo define o período das condições de pagamento mais vantajosas (por exemplo, '10' em '2% em 10 dias, líquido em 30 dias'). Ele vem das condições registradas no item de linha da fatura. Na análise, ele ajuda a determinar a 'Data-alvo' do otimizador de descontos por pagamento antecipado. Se a fatura for compensada dentro desse período, o desconto é aproveitado. Esse campo ajuda a medir o custo de oportunidade de ciclos de processamento lentos. Por que isso importa Ele define o período em que é possível obter economia financeira. Onde encontrar Tabela SAP BSEG, campo ZBD1T Exemplos 10140 | |||
| Documento de compras PurchasingDocument | Número do pedido de compra associado à fatura. | ||
| Descrição Esse atributo vincula a fatura ao processo de compras anterior. Ele contém o número do pedido de compra (PO) usado na conferência da fatura. Nem todas as faturas, como as de despesas diversas, terão uma referência a um pedido de compra. Na análise, esse campo é essencial para analisar a taxa de conferência em três vias. Ele permite que os analistas separem as faturas vinculadas a pedidos de compra das que não têm essa referência, que geralmente seguem fluxos de aprovação bem diferentes. Também facilita a mineração de processos de ponta a ponta, conectando os dados de contas a pagar aos dados de compras. Por que isso importa Ele conecta contas a pagar a compras, permitindo analisar a conferência em três vias e ampliar a análise do processo. Onde encontrar Tabela SAP BSEG, campo EBELN Exemplos 45000012344500009876 | |||
| Exercício fiscal FiscalYear | Exercício financeiro ao qual a fatura pertence. | ||
| Descrição O exercício fiscal é um período usado para relatórios financeiros. Junto com o código da empresa e o número do documento, ele compõe a chave primária de um documento financeiro no SAP. Na análise, esse dado é necessário para identificar casos de forma exclusiva e também permite comparar resultados entre anos. Ele garante que o ID do caso 'Número da fatura' continue exclusivo mesmo em históricos de dados de várias décadas. Por que isso importa Requisito técnico para identificar casos de forma exclusiva no SAP FI. Onde encontrar Tabela SAP BKPF, campo GJAHR Exemplos 20232024 | |||
| Moeda Currency | Código da moeda associada ao valor da fatura. | ||
| Descrição O atributo de moeda especifica a denominação do valor da fatura, como USD, EUR ou GBP. Ele permite interpretar corretamente os valores financeiros e é essencial para agregar dados de diferentes códigos de empresa internacionais. Na análise, esse campo garante o cálculo correto dos KPIs financeiros. Ele costuma ser usado para converter valores para uma moeda de relatório nos dashboards globais. Sem esse atributo, métricas agregadas como gastos totais ou valor médio das faturas não teriam significado em um ambiente com várias moedas. Por que isso importa Ele contextualiza os valores financeiros e é essencial para gerar relatórios globais precisos. Onde encontrar Tabela SAP BKPF, campo WAERS Exemplos USDEURGBPJPY | |||
| Percentual do primeiro desconto à vista CashDiscountPercentage1 | Percentual de desconto disponível para pagamentos feitos dentro do primeiro período de desconto. | ||
| Descrição Esse atributo representa o incentivo financeiro oferecido pelo fornecedor para pagamentos antecipados (por exemplo, '2' em '2% em 10 dias'). Na análise, ele é usado para calcular o valor do 'Desconto à vista potencial'. Ao multiplicar esse percentual pelo valor da fatura, os dashboards mostram o total que deixou de ser economizado devido a ineficiências do processo, ajudando a justificar a automação. Por que isso importa Ele quantifica a economia potencial e é essencial para calcular o ROI. Onde encontrar Tabela SAP BSEG, campo ZBD1P Exemplos 2.03.00.0 | |||
| Valor do desconto perdido DiscountLostAmount | Valor monetário dos descontos por pagamento à vista disponíveis, mas não aproveitados. | ||
| Descrição Este atributo calculado representa o valor que deixou de ser economizado. Ele é obtido verificando se o pagamento foi feito após o prazo para obter o desconto e, nesse caso, calculando o valor do desconto perdido, com base no percentual aplicado ao valor da fatura. Na análise, essa é uma métrica financeira essencial para o otimizador de descontos por pagamento antecipado. Ela quantifica em valores monetários o custo da ineficiência e ajuda a justificar melhorias no processo. Por que isso importa Ele quantifica a perda financeira direta causada por atrasos no processo. Onde encontrar Calculado: se a data de compensação > data do desconto, então valor da fatura * percentual de desconto Exemplos 30.000.00150.00 | |||
Atividades do processamento de pagamentos de contas a pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Bloqueio de pagamento aplicado | Indica que foi aplicado um bloqueio de pagamento ao item de linha da fatura, impedindo sua inclusão na execução dos pagamentos. Isso é registrado pelo monitoramento das alterações no campo ZLSPR da tabela BSEG por meio dos documentos de alteração. | ||
| Por que isso importa Os bloqueios são a principal causa de pagamentos atrasados e atritos no processo, e afetam diretamente o Dashboard de análise de bloqueios manuais de pagamento. Onde encontrar Tabelas CDPOS e CDHDR (documentos de alteração), para identificar atualizações no campo BSEG-ZLSPR. Coleta Registrado quando os registros da CDPOS são alterados em ZLSPR Tipo de evento explicit | |||
| Bloqueio de pagamento removido | Indica que um bloqueio de pagamento aplicado anteriormente foi removido, liberando a fatura para pagamento. Isso é identificado quando o campo ZLSPR da tabela BSEG muda de um valor para nulo ou vazio. | ||
| Por que isso importa Muitas vezes, funciona como indicador de 'fatura aprovada' em sistemas sem registros explícitos de fluxo de trabalho e marca o fim do período de gargalo. Onde encontrar Tabelas CDPOS e CDHDR, para identificar quando BSEG-ZLSPR fica vazio. Coleta Registrado quando os registros da CDPOS indicam a remoção de ZLSPR Tipo de evento explicit | |||
| Documento de pagamento criado | Geração do documento contábil que credita o banco e debita o fornecedor. Essa informação está na BKPF, com um tipo de documento de pagamento (por exemplo, ZP, KZ). | ||
| Por que isso importa A efetivação financeira do pagamento, usada para calcular os Dias de Contas a Pagar em Aberto (DPO). Onde encontrar Tabela BKPF, filtrada pelo tipo de documento (BLART) específico para pagamentos. Coleta Registrado quando o documento de pagamento é criado na BKPF Tipo de evento explicit | |||
| Execução da rodada de pagamentos | Representa a execução da rodada de pagamentos, que gera as instruções de transferência de valores. Isso é acompanhado pela atualização de status nas tabelas REGUH ou REGUP. | ||
| Por que isso importa O compromisso operacional de pagar, essencial para analisar a eficiência do processo de agrupamento de pagamentos. Onde encontrar Tabela REGUH, geralmente correlacionada à data e à identificação da rodada. Coleta Registrado quando o status da rodada de pagamentos é atualizado Tipo de evento explicit | |||
| Fatura lançada | Representa o registro oficial do passivo no razão geral. Essa atividade é identificada pela data e hora de criação na tabela BKPF ou pela data de lançamento na tabela ACDOCA. | ||
| Por que isso importa Este é o principal ponto de partida da linha do tempo financeira e define a referência para as datas de vencimento e a análise de envelhecimento. Onde encontrar Tabela BKPF, usando CPUDT (data de entrada) e CPUTM (hora de entrada). Coleta Registrado quando o registro na BKPF é criado Tipo de evento explicit | |||
| Pagamento compensado | Marca a conciliação final, quando o item em aberto na conta do fornecedor é compensado com o pagamento. Registrado no campo AUGDT (data de compensação) da tabela BSEG. | ||
| Por que isso importa Estado final do processo, indicando que o ciclo foi concluído e os livros contábeis estão equilibrados. Uma alta taxa de compensações manuais indica ineficiências na conciliação. Onde encontrar Tabela BSEG, campo AUGDT (data de compensação). Coleta Registrado quando o campo AUGDT é preenchido Tipo de evento explicit | |||
| Condições de pagamento alteradas | Registra uma atualização das condições de pagamento de uma fatura em aberto, que altera a data de vencimento ou a elegibilidade para descontos. Essa alteração é acompanhada pelos registros de mudança no campo ZTERM da tabela BSEG. | ||
| Por que isso importa Alterações frequentes podem indicar erros nos dados mestres ou substituições manuais que afetam a previsão do fluxo de caixa e a Conformidade com as condições de pagamento dos fornecedores. Onde encontrar Tabelas CDPOS e CDHDR, para identificar atualizações no campo BSEG-ZTERM. Coleta Registrado quando os registros da CDPOS são alterados em ZTERM Tipo de evento explicit | |||
| Desconto financeiro perdido | Evento calculado que marca a data em que expirou o prazo para obter um desconto financeiro. É identificado pela comparação entre a data de vencimento do desconto e a data atual ou a data do pagamento. | ||
| Por que isso importa Essencial para o otimizador de descontos por pagamento antecipado, pois mostra oportunidades financeiras perdidas. Onde encontrar Calculado: BSEG-ZFBDT + BSEG-ZBD1T (dias do desconto 1). Coleta Derivado da comparação entre a data e a data de vencimento do desconto Tipo de evento calculated | |||
| Fatura estacionada | Indica que uma fatura foi inserida no SAP, mas ainda não foi lançada no razão geral. Essa etapa costuma ser usada para a entrada preliminar de dados. Ela é registrada diretamente na tabela VBKPF ou pela identificação de documentos na BKPF com status estacionado antes do lançamento. | ||
| Por que isso importa O estacionamento da fatura marca o início da etapa de entrada de dados e ajuda a medir o tempo entre o recebimento e o reconhecimento da obrigação financeira. Onde encontrar Tabela VBKPF para dados de cabeçalho de documentos estacionados ou tabela BKPF com status específico do documento (BSTAT = V). Coleta Registrado quando a entrada na VBKPF é criada Tipo de evento explicit | |||
| Fatura estornada | Indica que o documento da fatura foi estornado ou cancelado. Identificado pela verificação do campo STBLG (documento de estorno) na tabela BKPF. | ||
| Por que isso importa Representa retrabalho e falhas no processo, identificando desperdícios e possíveis esforços duplicados. Onde encontrar Tabela BKPF, campo STBLG preenchido. Coleta Registrado quando o campo STBLG é preenchido Tipo de evento explicit | |||
| Fatura vencida | Data e hora calculadas que representam o momento em que a fatura atingiu a data de vencimento líquido. O cálculo soma os dias das condições de pagamento à data-base registrada na tabela BSEG. | ||
| Por que isso importa Serve como referência para a performance de pagamentos no prazo e o acompanhamento de multas por atraso. Onde encontrar Calculado: BSEG-ZFBDT (data-base) + BSEG-ZBD1T/ZBD2T/ZBD3T (dias). Coleta Derivado da comparação entre a data atual e a data de vencimento líquido Tipo de evento calculated | |||
| Proposta de pagamento criada | Indica que a fatura foi incluída em uma execução de proposta de pagamento (F110), a primeira etapa do programa automatizado de pagamentos. O registro é obtido da tabela REGUH, que armazena dados de liquidação. | ||
| Por que isso importa Indica que a fatura foi selecionada para pagamento e passou pelas verificações de validação do programa de pagamentos. Onde encontrar Data e hora de criação da tabela REGUH (chaves LAUFD e LAUFI). Coleta Registrado quando o registro REGUH é criado Tipo de evento explicit | |||
| Variação de preço detectada | Atividade inferida que indica uma divergência entre o preço da fatura e o preço do pedido de compra. Ela é identificada pela aplicação automática de uma chave específica de bloqueio de pagamento, geralmente 'R' para verificação de fatura, no momento do lançamento. | ||
| Por que isso importa Ajuda a identificar as causas raiz do retrabalho manual e dá suporte à análise da taxa de conciliação tripla. Onde encontrar Inferido do valor 'R' de BSEG-ZLSPR (ou da configuração específica do sistema para bloqueios de preço) no momento do lançamento. Coleta Compare o valor de ZLSPR com 'R' Tipo de evento inferred | |||
| Variação de quantidade detectada | Atividade inferida que indica uma divergência entre a quantidade faturada e a quantidade recebida. Ela é identificada pela aplicação de uma chave específica de bloqueio de pagamento, geralmente 'M' para variação de quantidade, ao item de linha. | ||
| Por que isso importa Essencial para analisar a eficiência da conciliação e a qualidade dos dados da cadeia de suprimentos. Onde encontrar Inferido do valor 'M' de BSEG-ZLSPR (ou da configuração específica do sistema para bloqueios por quantidade). Coleta Compare o valor de ZLSPR com 'M' Tipo de evento inferred | |||
Guias de extração
Etapas
Identifique as visualizações CDS necessárias: confirme se as visualizações CDS padrão do SAP S/4HANA estão disponíveis. As principais são I_JournalEntry (cabeçalho), I_OperationalAcctgDocItem (itens, equivalente a BSEG), I_SupplierInvoice (logística), I_PaymentProposalItem (F110) e I_ChangeDocument (para registros).
Configure as permissões do usuário: verifique se o usuário do banco de dados ou o usuário técnico de serviço tem privilégios SELECT nas visualizações DDL SQL associadas às entidades CDS. Normalmente, isso é gerenciado pelo SAP HANA Studio ou pelo ABAP Development Tools para Eclipse (ADT).
Prepare o ambiente SQL: abra sua interface SQL, como SAP HANA Studio, DBeaver conectado ao HANA ou um conector de Process Mining compatível com SQL. Este método pressupõe acesso SQL direto à camada HANA, onde as visualizações CDS são disponibilizadas como views.
Defina o escopo: determine o código da empresa (CompanyCode) e o intervalo de exercícios fiscais para limitar o volume de dados. Isso é essencial para manter a performance ao consultar a visualização de itens de documentos contábeis operacionais.
Implemente a lógica das atividades: copie a consulta SQL fornecida abaixo. Ela usa UNION ALL para combinar 14 blocos de lógica distintos em uma única estrutura de Event Log. Cada bloco corresponde a uma atividade específica, como fatura lançada ou pagamento compensado.
Trate os documentos de alteração: a consulta inclui seções sobre alterações nas condições de pagamento e manipulação de bloqueios. Elas dependem da visualização I_ChangeDocument. Se essa visualização não estiver ativa na sua versão do S/4, talvez seja necessário encapsular as tabelas subjacentes (CDHDR/CDPOS) em uma visualização CDS personalizada.
Considere os eventos calculados: revise a lógica de vencimento da fatura e de perda do desconto por pagamento à vista. Esses eventos são calculados com base na adição de dias à data-base encontrada na visualização de itens operacionais.
Execute a extração: rode a consulta. Para conjuntos de dados grandes, recomendamos dividir a extração por exercício fiscal ou código da empresa para evitar estouro de memória.
Verifique os formatos de data: confirme se a coluna EventTime está no formato YYYY-MM-DD HH:MM:SS. O SAP HANA SQL retorna datas e horas que talvez precisem ser convertidas, dependendo do aplicativo de destino.
Exporte os dados: salve o resultado em um arquivo CSV ou Parquet. Verifique se os cabeçalhos correspondem às colunas definidas na instrução SELECT final.
Prepare os dados para carregamento: se sua ferramenta de Process Mining exigir um formato CSV específico, como uma máscara de data específica, aplique essas transformações em um script de pós-processamento ou na consulta SQL usando funções TO_VARCHAR.
Faça a validação final: carregue uma amostra no ProcessMind e confirme se o ID do caso (número da fatura) agrupa corretamente todas as atividades, do lançamento à compensação.
Configuração
- Filtro por código da empresa: restrinja a consulta a unidades organizacionais específicas (CompanyCode = '1000') para manter o contexto e a performance.
- Intervalo de datas: aplique um filtro em PostingDate ou CreationDate, por exemplo, para os últimos 12 meses, a fim de controlar o volume de dados.
- Tipo de conta: filtre I_OperationalAcctgDocItem por FinancialAccountType = 'K' (fornecedor) para excluir linhas do razão geral e de clientes.
- Ativação das visualizações CDS: verifique se as visualizações I_JournalEntry, I_OperationalAcctgDocItem e I_PaymentProposalItem estão ativas e liberadas para acesso SQL.
- Performance do registro de alterações: consultar I_ChangeDocument pode consumir muitos recursos. Limite essas subconsultas pela classe de objeto 'BELEG' e por nomes de campos específicos, como ZLSPR e ZTERM.
Consulta de exemplo sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL Etapas
- Confirme se há acesso SQL direto ao esquema SAP HANA que contém ACDOCA, BKPF, BSEG, VBKPF, REGUH, REGUP e as tabelas de documentos de alteração aplicáveis. Substitua [Your SAP HANA schema] e os dados de conexão pelos valores aprovados para seu sistema.
- Confirme o conjunto de faturas e o período de relatório. Defina [Start date] e [End date] no formato YYYYMMDD e configure [Company code filter] como um predicado SQL válido, por exemplo, BUKRS IN ('1000','2000').
- Valide a versão do SAP e a configuração local de documentos estacionados, campos de status do programa de pagamentos, tipos de documento de pagamento e armazenamento de documentos de alteração. A consulta usa objetos de origem documentados e mapeamentos conservadores de campos, mas é necessário verificar as extensões locais e diferenças entre versões antes de usar em produção.
- Execute a consulta no SAP HANA com um cliente SQL ou serviço de extração aprovado. A consulta cria uma linha de evento para cada atividade extraída explicitamente. O ProcessMind não inferirá atividades ausentes do resultado.
- Revise os dados de origem e ajuste os predicados de configuração indicados para status de documentos estacionados, tipos de documento de pagamento, status de propostas e execuções de pagamento e classes de objeto dos documentos de alteração. Não amplie esses predicados sem verificar se há documentos contábeis duplicados ou não relacionados.
- Valide as junções usando InvoiceNumber, CompanyCode, exercício fiscal, número do documento contábil, número do fornecedor e item, quando aplicável. Confirme se os números dos documentos de fatura são representados de forma consistente em BKPF, BSEG, ACDOCA, REGUH e REGUP no sistema de destino.
- Confira os eventos calculados. O evento de vencimento da fatura é gerado na data de vencimento líquido calculada, e o evento de perda do desconto por pagamento à vista é gerado no primeiro prazo de desconto aplicável sem que tenha ocorrido um pagamento antes dele. Essas linhas são derivadas e devem ser diferenciadas claramente dos eventos provenientes dos registros de origem.
- Exporte o resultado como CSV UTF-8 sem formatação ou em outro formato tabular compatível com o ProcessMind. Preserve exatamente os nomes das colunas InvoiceNumber, Activity, EventTime, SourceSystem e LastDataUpdate. Mantenha uma linha por evento e não agregue atividades por fatura.
- Carregue o Event Log no ProcessMind e mapeie InvoiceNumber como identificador do caso, Activity como nome da atividade e EventTime como data e hora do evento. Mapeie as demais colunas como atributos de evento ou de caso, conforme a configuração de importação do ProcessMind.
Configuração
- Intervalo de datas: use um período móvel de 3 a 6 meses na extração inicial. Aplique de forma consistente os predicados de data de lançamento, data de alteração e data do programa de pagamentos. Amplie o período ao validar condições de pagamento mais longas.
- Esquema: substitua [Your SAP HANA schema] pelo esquema que contém os objetos SAP. Confirme se o ambiente disponibiliza objetos dependentes do cliente por meio do esquema selecionado ou se exige um predicado explícito de cliente.
- Filtro por empresa: configure [Company code filter] para restringir BUKRS aos códigos de empresa necessários. Aplique o mesmo escopo a BKPF, BSEG, ACDOCA, REGUH, REGUP e às fontes de documentos de alteração, quando esses campos estiverem disponíveis.
- Filtro por documento: revise os predicados de tipo de documento de fatura e de pagamento. A consulta inclui exemplos comuns, mas os tipos de documento são configuráveis e devem corresponder ao sistema de destino.
- Faturas estacionadas: confirme como o status de documento estacionado é representado em VBKPF ou BKPF. A consulta usa um predicado configurável, pois a codificação desse status pode variar conforme a versão e a implementação.
- Alterações de pagamento: confirme a classe de objeto, o nome da tabela, os nomes dos campos e a representação dos valores de BSEG-ZLSPR e BSEG-ZTERM nos documentos de alteração. Verifique como esses documentos são armazenados e como os campos são nomeados no sistema de destino.
- Programa de pagamentos: confirme os campos de REGUH e REGUP usados para o status da proposta e da execução, a data da execução, o identificador da execução e a vinculação ao documento contábil. A configuração local do programa de pagamentos pode afetar os valores de status disponíveis.
- Performance: restrinja o intervalo de datas e os códigos de empresa, selecione apenas as colunas necessárias e aplique os filtros específicos de cada fonte antes das junções. Para conjuntos de dados grandes, materialize subconjuntos filtrados das fontes ou use uma visualização de cálculo HANA ou um esquema de extração aprovado.
- Autorizações: o acesso necessário inclui autorização de leitura aos objetos do esquema SAP HANA relevante e a quaisquer visualizações que disponibilizem dados contábeis, do programa de pagamentos e de documentos de alteração. Alinhe esse acesso com as equipes de segurança SAP e governança de dados.
- Pré-requisitos funcionais: as funcionalidades relevantes de contabilidade financeira, contas a pagar, programa de pagamentos e documentos de alteração devem estar ativas e com dados. Se uma tabela de origem não for usada na implementação, configure uma substituição aprovada com base no desenho do sistema.
- Tratamento de data e hora: BKPF e BSEG geralmente fornecem datas e horários em campos separados. A consulta os combina em uma data e hora. Confirme o fuso horário do sistema de origem e aplique a conversão necessária antes de carregar os dados no ProcessMind.
- Proteção de dados: limite os dados de fornecedores e contabilidade ao escopo aprovado e aplique as políticas de retenção, mascaramento e acesso da organização.
Consulta de exemplo sql
WITH
params AS (
SELECT
TO_DATE('[Start date]', 'YYYYMMDD') AS start_date,
TO_DATE('[End date]', 'YYYYMMDD') AS end_date,
'[Source system identifier]' AS source_system
FROM DUMMY
),
base_bkpf AS (
SELECT
b.MANDT,
b.BUKRS,
b.BELNR,
b.GJAHR,
b.BLART,
b.BLDAT,
b.BUDAT,
b.CPUDT,
b.CPUTM,
b.USNAM,
b.STBLG,
b.STJAH,
b.XBLNR,
b.WAERS,
b.BKTXT,
p.source_system,
p.start_date,
p.end_date
FROM [Your SAP HANA schema].BKPF b
CROSS JOIN params p
WHERE b.BUDAT BETWEEN TO_VARCHAR(p.start_date, 'YYYYMMDD') AND TO_VARCHAR(p.end_date, 'YYYYMMDD')
AND [Company code filter]
),
invoice_bseg AS (
SELECT
k.MANDT,
k.BUKRS,
k.BELNR,
k.GJAHR,
k.BLART,
k.BLDAT,
k.BUDAT,
k.CPUDT,
k.CPUTM,
k.USNAM,
k.STBLG,
k.STJAH,
k.XBLNR,
k.WAERS,
k.BKTXT,
k.source_system,
s.BUZEI,
s.LIFNR,
s.WRBTR,
s.DMBTR,
s.ZTERM,
s.ZLSPR,
s.ZFBDT,
s.ZBD1T,
s.ZBD2T,
s.ZBD3T,
s.AUGDT,
s.AUGBL,
s.SHKZG,
s.SGTXT,
s.XREF1,
s.XREF2,
s.XREF3
FROM base_bkpf k
INNER JOIN [Your SAP HANA schema].BSEG s
ON s.MANDT = k.MANDT
AND s.BUKRS = k.BUKRS
AND s.BELNR = k.BELNR
AND s.GJAHR = k.GJAHR
WHERE s.LIFNR IS NOT NULL
AND s.LIFNR <> ''
),
acdoca_invoice AS (
SELECT
a.RCLNT AS MANDT,
a.RBUKRS AS BUKRS,
a.BELNR,
a.GJAHR,
a.BUZEI,
a.RACCT,
a.HSL,
a.WSL,
a.RWCUR,
a.BUDAT,
a.BLDAT,
a.AUGDT,
a.AUGBL
FROM [Your SAP HANA schema].ACDOCA a
WHERE a.BUDAT BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
AND [ACDOCA company code filter]
),
invoice_cases AS (
SELECT DISTINCT
i.MANDT,
i.BUKRS,
i.BELNR,
i.GJAHR,
i.BUZEI,
i.LIFNR,
i.WRBTR,
i.ZTERM,
i.ZLSPR,
i.ZFBDT,
i.ZBD1T,
i.ZBD2T,
i.ZBD3T,
i.AUGDT,
i.AUGBL,
i.BLART,
i.BLDAT,
i.BUDAT,
i.CPUDT,
i.CPUTM,
i.USNAM,
i.STBLG,
i.STJAH,
i.XBLNR,
i.WAERS,
i.source_system,
COALESCE(NULLIF(i.XBLNR, ''), i.BELNR) AS InvoiceNumber,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD3T, '')), 0)) AS NetDueDate,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD1T, '')), 0)) AS DiscountDueDate1,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD2T, '')), 0)) AS DiscountDueDate2
FROM invoice_bseg i
LEFT JOIN acdoca_invoice a
ON a.MANDT = i.MANDT
AND a.BUKRS = i.BUKRS
AND a.BELNR = i.BELNR
AND a.GJAHR = i.GJAHR
AND a.BUZEI = i.BUZEI
),
change_events AS (
SELECT
c.MANDT,
c.OBJECTID,
c.TABKEY,
c.FNAME,
c.VALUE_OLD,
c.VALUE_NEW,
c.UDATE,
c.UTIME,
c.USERNAME
FROM [Your SAP HANA schema].[Your change document item table name] c
WHERE c.TABNAME = 'BSEG'
AND c.FNAME IN ('ZLSPR', 'ZTERM')
AND c.UDATE BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
AND [Change document object class filter]
),
reguh_events AS (
SELECT
r.MANDT,
r.LAUFD,
r.LAUFI,
r.XVORL,
r.ZBUKR,
r.LIFNR,
r.VBLNR,
r.AUSFD,
r.AUSDT,
r.LAUFD AS RunDate,
r.ZALDT,
r.RZAWE,
r.XEINZ,
r.XPGRO,
r.XAVIS,
r.XVORL AS ProposalIndicator
FROM [Your SAP HANA schema].REGUH r
WHERE r.LAUFD BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
),
regup_events AS (
SELECT
u.MANDT,
u.LAUFD,
u.LAUFI,
u.ZBUKR,
u.LIFNR,
u.VBLNR,
u.BUKRS,
u.BELNR,
u.GJAHR,
u.BUZEI,
u.XVORL,
u.AUGBL,
u.AUGDT
FROM [Your SAP HANA schema].REGUP u
WHERE u.LAUFD BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
),
events AS (
SELECT
i.InvoiceNumber,
'Invoice Parked' AS Activity,
TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS') AS EventTime,
i.source_system AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
i.LIFNR AS VendorNumber,
i.BUKRS AS CompanyCode,
i.WRBTR AS InvoiceAmount,
i.BLART AS DocumentType,
i.ZTERM AS PaymentTerms,
i.ZLSPR AS PaymentBlockReason,
i.USNAM AS UserName,
i.AUGDT AS ClearingDate,
i.NetDueDate,
CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END AS IsLatePayment,
FALSE AS IsTouchless
FROM invoice_cases i
INNER JOIN [Your SAP HANA schema].VBKPF v
ON v.MANDT = i.MANDT
AND v.BUKRS = i.BUKRS
AND v.BELNR = i.BELNR
AND v.GJAHR = i.GJAHR
WHERE [VBKPF parked status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Posted', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i
UNION ALL
SELECT i.InvoiceNumber, 'Payment Block Applied', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, c.VALUE_NEW, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZLSPR' AND COALESCE(c.VALUE_OLD, '') = '' AND COALESCE(c.VALUE_NEW, '') <> ''
UNION ALL
SELECT i.InvoiceNumber, 'Price Variance Detected', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.ZLSPR = 'R'
UNION ALL
SELECT i.InvoiceNumber, 'Quantity Variance Detected', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.ZLSPR = 'M'
UNION ALL
SELECT i.InvoiceNumber, 'Payment Terms Changed', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, c.VALUE_NEW, i.ZLSPR, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZTERM'
UNION ALL
SELECT i.InvoiceNumber, 'Payment Block Removed', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, c.VALUE_OLD, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZLSPR' AND COALESCE(c.VALUE_OLD, '') <> '' AND COALESCE(c.VALUE_NEW, '') = ''
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Due', TO_TIMESTAMP(TO_VARCHAR(i.NetDueDate, 'YYYYMMDD') || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.NetDueDate IS NOT NULL
UNION ALL
SELECT i.InvoiceNumber, 'Cash Discount Lost', TO_TIMESTAMP(TO_VARCHAR(CASE WHEN i.DiscountDueDate1 <= i.DiscountDueDate2 THEN i.DiscountDueDate1 ELSE i.DiscountDueDate2 END, 'YYYYMMDD') || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.AUGDT IS NULL OR i.AUGDT > CASE WHEN i.DiscountDueDate1 <= i.DiscountDueDate2 THEN i.DiscountDueDate1 ELSE i.DiscountDueDate2 END
UNION ALL
SELECT i.InvoiceNumber, 'Payment Proposal Created', TO_TIMESTAMP(r.RunDate || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN regup_events u ON u.BUKRS = i.BUKRS AND u.BELNR = i.BELNR AND u.GJAHR = i.GJAHR AND u.BUZEI = i.BUZEI INNER JOIN reguh_events r ON r.MANDT = u.MANDT AND r.LAUFD = u.LAUFD AND r.LAUFI = u.LAUFI AND r.LIFNR = u.LIFNR WHERE [Payment proposal status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Payment Run Executed', TO_TIMESTAMP(r.RunDate || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN regup_events u ON u.BUKRS = i.BUKRS AND u.BELNR = i.BELNR AND u.GJAHR = i.GJAHR AND u.BUZEI = i.BUZEI INNER JOIN reguh_events r ON r.MANDT = u.MANDT AND r.LAUFD = u.LAUFD AND r.LAUFI = u.LAUFI AND r.LIFNR = u.LIFNR WHERE [Payment run executed status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Payment Document Created', TO_TIMESTAMP(p.CPUDT || LPAD(COALESCE(p.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, p.BLART, i.ZTERM, i.ZLSPR, p.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN [Your SAP HANA schema].BKPF p ON p.MANDT = i.MANDT AND p.BUKRS = i.BUKRS AND p.BELNR = i.AUGBL AND p.GJAHR = i.GJAHR WHERE p.BLART IN ('ZP', 'KZ')
UNION ALL
SELECT i.InvoiceNumber, 'Payment Cleared', TO_TIMESTAMP(i.AUGDT || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.AUGDT IS NOT NULL
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Reversed', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.STBLG IS NOT NULL AND i.STBLG <> ''
)
SELECT
InvoiceNumber,
Activity,
EventTime,
SourceSystem,
LastDataUpdate,
VendorNumber,
CompanyCode,
InvoiceAmount,
DocumentType,
PaymentTerms,
PaymentBlockReason,
UserName,
ClearingDate,
NetDueDate,
IsLatePayment,
IsTouchless
FROM events
WHERE EventTime IS NOT NULL
ORDER BY InvoiceNumber, EventTime, Activity; Pronto para começar?
Transforme seus dados financeiros em insights acionáveis e comece a otimizar seus ciclos de pagamento hoje. Nossa equipe está à disposição para apoiar você em cada etapa da jornada de Process Mining.
Otimize o processamento de pagamentos de contas a pagar no SAP S/4HANA
Elimine gargalos e reduza seu tempo de ciclo em 30%.
Não é necessário cartão de crédito. Configuração em 5 minutos.