Seu Template de Dados de Processamento de Pagamentos do Contas a Pagar
Seu Template de Dados de Processamento de Pagamentos do Contas a Pagar
- Atributos principais para análise de fornecedores e pagamentos
- Marcos essenciais do processo para o ciclo de pagamento
- Lógica de extração especializada para sistemas SAP S/4HANA
Atributos de Processamento de Pagamentos de Contas a Pagar
| Nome | Descrição | ||
|---|---|---|---|
| Atividade Activity | A tarefa específica ou mudança de status de evento registrada para a fatura. | ||
| Descrição Este atributo representa as etapas distintas do processo que ocorrem durante o ciclo de vida da fatura. Ele captura eventos como criação da fatura, lançamento, bloqueio, aprovação e compensação de pagamento. Os nomes das atividades são derivados de códigos de transação, entradas de log de alteração ou atualizações de status de workflow encontradas no sistema de origem. Para análise, esse campo é crítico para mapear a variante do fluxo do processo. Ele permite que o mecanismo de Process Mining visualize a sequência de etapas, identifique loops de retrabalho e determine onde o processo se desvia do caminho padrão ideal (happy path). É o componente central do Event Log. Por que é importante Define os nós no mapa do processo, permitindo a visualização do workflow e dos gargalos. Onde obter Derivado de Códigos de Transação (TCODE) ou Cabeçalho (CDHDR) e Item (CDPOS) de Documentos de Alteração Exemplos Fatura LançadaBloqueio de Pagamento AplicadoExecução de Pagamento RealizadaFatura Compensada | |||
| Número da fatura InvoiceNumber | O identificador exclusivo da fatura do fornecedor que está sendo processada. | ||
| Descrição O Número da Fatura é a chave primária para rastrear o ciclo de vida de um item a pagar no sistema SAP S/4HANA. Ele se refere especificamente ao número do documento contábil gerado após o lançamento da fatura no razão geral. Na terminologia padrão do SAP, isso corresponde ao Número do Documento (BELNR) encontrado em uma Empresa e Exercício Fiscal específicos. Na análise de processos, esse atributo serve como o Case ID. Ele vincula todas as atividades distintas — desde o recebimento inicial e pré-lançamento da fatura, passando por vários bloqueios de aprovação e modificações, até o pagamento final de compensação. Agrupar eventos por esse identificador permite que os analistas reconstruam o histórico completo de cada obrigação de pagamento. Por que é importante Serve como o ID de Caso definitivo, permitindo a reconstrução de ponta a ponta do fluxo de pagamento. Onde obter Tabela SAP BKPF (Cabeçalho de Documento Contábil) campo BELNR ou campo ACDOCA BELNR Exemplos 1900000523510000289119000006015100003002 | |||
| Tempo do Evento EventTime | O carimbo de data/hora exato de quando a atividade ocorreu. | ||
| Descrição A Hora do Evento registra a data e hora específicas em que uma atividade foi gravada no banco de dados SAP. Fornece a dimensão temporal necessária para ordenar os eventos sequencialmente dentro de um caso. Esse carimbo de data/hora geralmente é construído combinando os campos Data CPU e Hora CPU dos logs do sistema ou cabeçalhos de documentos. Na análise, esse atributo é essencial para calcular tempos de ciclo, duração e throughput. Ele permite medir intervalos de tempo entre etapas, como o tempo gasto entre o recebimento da fatura e a aprovação final, o que é crucial para identificar gargalos e avaliar o desempenho de KPIs como o Tempo Médio de Aprovação de Faturas. Por que é importante Fornece a ordem cronológica dos eventos e é a base para cálculos de performance temporal. Onde obter Tabela SAP BKPF campo CPUDT (Data de Entrada) e CPUTM (Hora de Entrada), ou campos CDHDR UDATE e UTIME Exemplos 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Sistema de Origem SourceSystem | O identificador da instância SAP S/4HANA de onde os dados se originaram. | ||
| Descrição Este atributo identifica a instalação de ERP ou mandante específico de onde os dados do processo foram extraídos. Em cenários com múltiplas instâncias SAP ou sistemas legados rodando em paralelo, esse campo garante que a linhagem dos dados seja mantida e permite comparações entre sistemas. Para análise, esse campo atua como um filtro de alto nível. Ele ajuda os analistas a segregar dados ao comparar o desempenho entre diferentes instalações regionais do sistema ou ao validar a consistência dos dados durante projetos de migração. Garante que quaisquer variações de processo atribuídas à configuração do sistema sejam devidamente contextualizadas. Por que é importante Distingue fontes de dados em ambientes multi-sistema, garantindo segmentação precisa. Onde obter ID do Sistema (SY-SYSID) do contexto de instalação SAP Exemplos SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Última Atualização de Dados LastDataUpdate | O carimbo de data/hora que indica quando o registro foi extraído ou atualizado pela última vez. | ||
| Descrição A Última Atualização de Dados marca o momento em que os dados foram carregados com sucesso na plataforma. Não reflete o evento de negócio, mas a atualidade do dataset. Isso é crucial para a confiança nos dashboards. Ajuda os usuários a entender quão recentes são as informações, sendo vital em análises de tempo real, como na Análise de Bloqueios de Pagamento, garantindo que as decisões reflitam o estado atual do SAP S/4HANA. Por que é importante Informa os usuários sobre a atualização dos dados, sendo crítico para dashboards operacionais. Onde obter Gerado pelo processo de ETL / extração Exemplos 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Código da Empresa CompanyCode | A unidade organizacional para a qual o balanço patrimonial e o DRE são criados. | ||
| Descrição A Empresa (Company Code) representa a entidade contábil independente dentro da organização. É a unidade organizacional central na contabilidade externa e é usada para estruturar os dados financeiros. Cada fatura é atribuída a exatamente uma Empresa. Na análise, esse atributo permite a segmentação de KPIs por entidade legal ou região. É usado em dashboards para comparar a eficiência das equipes de contas a pagar em diferentes subsidiárias. Por exemplo, ajuda a identificar se uma filial específica tem uma taxa maior de bloqueios de pagamento manuais em comparação ao padrão corporativo. Por que é importante Segmenta o processo por entidade legal, facilitando benchmarking interno. Onde obter Tabela SAP BKPF campo BUKRS Exemplos US01DE1010002000 | |||
| Condições de Pagamento PaymentTerms | A chave que representa as condições acordadas para pagamento e descontos. | ||
| Descrição As Condições de Pagamento definem o vencimento de uma fatura e se aplicam descontos financeiros para pagamentos antecipados. Esse código (ex: 'Z001') mapeia regras como 'Líquido em 30' ou '2% em 10, Líquido em 30'. Ele é copiado do Mestre de Fornecedores para a Fatura, mas pode ser alterado manualmente. Na análise, esse atributo é central para os dashboards de Otimização de Descontos por Antecipação e Conformidade de Termos de Pagamento. Ele permite que o sistema calcule a data de vencimento base e identifique se o pagamento foi feito na janela ideal para capturar economias. Por que é importante Dita o cronograma esperado e incentivos financeiros, sendo chave para análise de descontos. Onde obter Tabela SAP BSEG campo ZTERM Exemplos Z001NT300001 | |||
| Data de Compensação ClearingDate | A 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 pagamento ou um lançamento manual. Isso marca efetivamente o fim da obrigação. Na análise, esse atributo é usado para calcular o tempo de ciclo final do processo. É o carimbo de data/hora usado para a atividade 'Pagamento Compensado' e é comparado com a Data de Vencimento Líquida para determinar a Performance de Pagamento no Prazo. Ele alimenta diretamente o dashboard de Eficiência de Compensação de Pagamentos. Por que é importante Marca a conclusão do processo de pagamento e serve para determinar a pontualidade. Onde obter Tabela SAP BSEG ou campo AUGDT AUGDT Exemplos 2023-11-012023-11-15 | |||
| Data de Vencimento Líquida NetDueDate | A data calculada em que a fatura deve ser paga para evitar multas. | ||
| Descrição A Data de Vencimento Líquida é o prazo final para pagamento. É calculada adicionando os dias máximos da condição de pagamento à Data Base. Embora às vezes armazenada explicitamente, costuma ser um campo calculado nas visões de análise. Na análise, este é o principal benchmark para o Rastreador de Pagamentos em Atraso e Multas. Comparar a Data de Compensação real com a Data de Vencimento Líquida 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 é importante É o prazo limite do processo; perdê-lo afeta o rating de crédito e gera custos extras. Onde obter Calculado: Data Base + Dias Máximos do Termo de Pagamento (ZBD1T/ZBD2T/ZBD3T) Exemplos 2023-11-302023-12-01 | |||
| É Pagamento em Atraso IsLatePayment | Um sinalizador booleano indicando se o pagamento foi realizado após a data de vencimento líquida. | ||
| Descrição Este atributo calculado é avaliado como verdadeiro se a Data de Compensação for estritamente superior à Data de Vencimento Líquida. Ele serve como um classificador binário para o desempenho do processo. Na análise, essa sinalização é usada para contar o número de casos não conformes para o KPI de Frequência de Multas por Atraso de Pagamento. Isso simplifica a criação de dashboards, permitindo uma contagem simples de valores 'Verdadeiro' em vez de exigir cálculos de data complexos na camada de visualização. Por que é importante Simplifica o cálculo de KPIs de performance de pontualidade. Onde obter Calculado: Data de Compensação > Data de Vencimento Líquida Exemplos verdadeirofalse | |||
| É Touchless IsTouchless | Um sinalizador booleano indicando se a fatura foi processada sem intervenção manual (touchless). | ||
| Descrição Este atributo é calculado analisando o fluxo de eventos de um caso. Se o caso contiver apenas atividades automatizadas (ex: usuário 'system', TCODES específicos de background) e nenhuma alteração ou bloqueio manual, ele é sinalizado como touchless. Na análise, esta é a métrica principal para o KPI de Taxa de Faturas Touchless. Ela permite que a organização acompanhe o sucesso das iniciativas de automação e identifique quais tipos de casos (ex: por Fornecedor ou Região) estão fluindo com sucesso pelo sistema sem intervenção humana. Por que é importante É a principal medida de automação e eficiência do processo. Onde obter Calculado com base na sequência de atividades e tipos de usuário Exemplos verdadeirofalse | |||
| Nome do Utilizador UserName | O ID do usuário que realizou a atividade específica. | ||
| Descrição O Nome do Usuário captura o ID de login da pessoa ou agente de sistema responsável por executar uma etapa do processo. Pode ser um usuário manual inserindo dados ou um ID de job de background (ex: 'BATCH_USER') realizando tarefas automatizadas. Na análise, esse atributo permite o cálculo da Taxa de Automação de Atividades. Ao distinguir entre usuários humanos e contas de sistema, os analistas podem medir o nível de automação no processo. Também é usado no dashboard de Distribuição de Pontos de Contato Manuais para avaliar a carga de trabalho entre as equipes. Por que é importante Distingue o trabalho manual do automatizado, permitindo o cálculo das taxas de automação. Onde obter Tabela SAP BKPF campo USNAM ou campo CDHDR USERNAME Exemplos BSMITHWF-BATCHRJONES | |||
| Número do fornecedor VendorNumber | O identificador exclusivo do fornecedor associado à fatura. | ||
| Descrição O Número do Fornecedor corresponde à conta credora específica no razão auxiliar do SAP. Ele vincula a fatura aos dados mestres que contêm condições de pagamento, dados bancários e informações de contato. No S/4HANA, isso geralmente está vinculado ao conceito de Parceiro de Negócios (Business Partner), mas mantém o nome de campo legado LIFNR em muitas tabelas. Na análise, esse atributo é fundamental para o dashboard de Conformidade de Termos de Pagamento de Fornecedores. Ele permite que os analistas agreguem o desempenho do processo por fornecedor, identificando parceiros específicos que causam bloqueios, variações de preço ou atrasos de forma consistente. Isso apoia decisões de compras estratégicas e a gestão de relacionamento com fornecedores. Por que é importante Permite agregar a performance por fornecedor, algo crítico para identificar causas raiz de atrasos. Onde obter Tabela SAP BKPF campo LIFNR ou campo ACDOCA LIFNR Exemplos 100050VEND-US-99200400 | |||
| Razão de Bloqueio de Pagamento PaymentBlockReason | O código que indica por que uma fatura está bloqueada para pagamento. | ||
| Descrição Este atributo contém o código de motivo específico aplicado a uma fatura que impede que a rodada de pagamento automático a selecione. Exemplos incluem 'A' para Bloqueado para Pagamento, 'R' para Verificação de Fatura ou bloqueios manuais definidos por usuários. Na análise, esse campo é o principal motor do dashboard de Análise de Bloqueio de Pagamento Manual. Ao agregar a frequência de diferentes motivos de bloqueio, a organização pode diagnosticar problemas sistêmicos, como variações frequentes de preços ou falta de recebimentos de mercadorias, que estão travando o processo de pagamento. Por que é importante Identifica a causa específica de paradas no processo, permitindo análise direcionada da causa raiz. Onde obter Tabela SAP BSEG campo ZLSPR Exemplos ABR * | |||
| Tipo de Documento DocumentType | Classifica o documento contábil (ex: Fatura de Fornecedor, Pagamento, Nota de Crédito). | ||
| Descrição O Tipo de Documento é um código de dois caracteres no SAP que classifica a transação contábil. Tipos comuns incluem 'KR' para Faturas de Fornecedor, 'KZ' para Pagamentos de Fornecedor e 'RE' para Recebimento de Fatura Bruta. Ele dita o intervalo de numeração e o status do campo do documento. Na análise, esse atributo é usado para filtrar o escopo do processo. Por exemplo, um analista pode querer excluir Notas de Crédito para focar apenas na eficiência dos pagamentos de saída. Também ajuda a identificar o mix de tipos de transação processados e alimenta o dashboard de Complexidade de Variantes de Processo. Por que é importante Categoriza o caso (fatura vs. nota de crédito), permitindo análises filtradas. Onde obter Tabela SAP BKPF campo BLART Exemplos KRREKZKG | |||
| Valor da Fatura InvoiceAmount | O valor bruto total da fatura na moeda do documento. | ||
| Descrição Este atributo reflete o valor financeiro da fatura conforme registrado no documento de origem. Representa a obrigação que deve ser liquidada com o fornecedor. No SAP S/4HANA, isso é normalmente armazenado no campo de Valor na Moeda do Documento. Na análise, o Valor da Fatura é usado para priorizar o trabalho. Dashboards como a Distribuição de Pontos de Contato Manuais usam esse campo para destacar se atividades manuais de alto esforço estão sendo desperdiçadas em faturas de baixo valor. Isso permite que a organização foque os esforços de otimização em transações de alto valor, onde falhas de processo acarretam um risco financeiro maior. Por que é importante Fornece o peso financeiro do caso, essencial para priorizar ineficiências de alto valor. Onde obter Tabela SAP BKPF ou campo BSEG WRBTR Exemplos 1500.00250.5010000.00 | |||
| Data Base BaselineDate | A data a partir da qual as condições de pagamento se aplicam e as datas de vencimento são calculadas. | ||
| Descrição A Data Base é o ponto de partida para calcular a data de vencimento líquida e os períodos de desconto financeiro. Geralmente é a data da fatura ou a data do lançamento, dependendo da configuração e dos dados mestres do fornecedor. Na análise, essa data é um pré-requisito técnico para calcular o status 'Atrasado'. Erros na data base geralmente levam a pagamentos antecipados (impacto no fluxo de caixa) ou pagamentos em atraso (impacto de multas). Verificar a precisão dessa data faz parte da análise de Conformidade de Termos de Pagamento de Fornecedores. Por que é importante É o ponto de ancoragem para todos os cálculos de data de vencimento. Onde obter Tabela SAP BSEG campo ZFBDT Exemplos 2023-10-012023-10-15 | |||
| Dias de Desconto 1 CashDiscountDays1 | O número de dias a partir da data base durante os quais o primeiro desconto financeiro está disponível. | ||
| Descrição Este atributo define a janela de tempo para as condições de pagamento mais favoráveis (ex: '10' em '2% 10, Líquido 30'). Ele vem das condições armazenadas no item de linha da fatura. Na análise, isso ajuda a determinar a 'Data Alvo' para a Otimização de Descontos por Antecipação. Se a fatura for compensada dentro dessa janela, o desconto é realizado. Esse campo ajuda a medir o custo de oportunidade de ciclos de processamento lentos. Por que é importante Define a janela de oportunidade para economias financeiras. Onde obter Tabela SAP BSEG campo ZBD1T Exemplos 10140 | |||
| Documento de Compra PurchasingDocument | O número do Pedido de Compra associado à fatura. | ||
| Descrição Este atributo vincula a fatura ao processo de compras anterior. Ele contém o número do Pedido de Compra (PO) com o qual a fatura está sendo conciliada. Nem todas as faturas (ex: despesas diversas) terão uma referência de pedido. Na análise, esse campo é vital para a análise de Taxa de Triangulação (Three-Way Match). Ele permite que os analistas separem faturas baseadas em pedidos de faturas sem pedidos, que geralmente têm workflows de aprovação muito diferentes. Também facilita o Process Mining ponta a ponta, vinculando os dados de Contas a Pagar aos dados de Compras. Por que é importante Conecta o CP ao Suprimentos, permitindo análise de 3-way match e extensão do processo. Onde obter Tabela SAP BSEG campo EBELN Exemplos 45000012344500009876 | |||
| Exercício FiscalYear | O exercício fiscal ao qual a fatura pertence. | ||
| Descrição O Exercício Fiscal é o período de tempo usado para relatórios financeiros. Junto com a Empresa e o Número do Documento, ele forma a chave primária composta para um documento financeiro no SAP. Na análise, essa é uma necessidade técnica para identificar exclusivamente os casos, mas também suporta relatórios comparativos ano a ano. Isso garante que o Case ID do 'Número da Fatura' permaneça exclusivo ao longo de décadas de histórico de dados. Por que é importante Requisito técnico para identificação exclusiva de casos no SAP FI. Onde obter Tabela SAP BKPF campo GJAHR Exemplos 20232024 | |||
| Moeda Currency | O código da moeda associado ao valor da fatura. | ||
| Descrição O atributo Moeda especifica a denominação do Valor da Fatura, como BRL, USD ou EUR. Ele permite a interpretação correta dos valores financeiros e é essencial ao agregar dados entre empresas internacionais. Na análise, esse campo garante que os KPIs financeiros sejam calculados corretamente. É frequentemente usado para normalizar valores em uma moeda de relatório para dashboards globais. Sem esse atributo, métricas agregadas como Gasto Total ou Valor Médio da Fatura não teriam sentido em um ambiente multi-moeda. Por que é importante Fornece contexto para valores financeiros, essencial para relatórios globais precisos. Onde obter Tabela SAP BKPF campo WAERS Exemplos USDEURGBPJPY | |||
| Percentual de Desconto 1 CashDiscountPercentage1 | O percentual de desconto disponível se pago dentro do primeiro período de desconto. | ||
| Descrição Este atributo representa a taxa de incentivo financeiro oferecida pelo fornecedor para pagamento antecipado (ex: '2' em '2% 10'). Na análise, isso é usado para calcular o valor de 'Desconto Financeiro Potencial'. Ao multiplicar esse percentual pelo Valor da Fatura, os dashboards podem visualizar o montante total que está sendo perdido devido a ineficiências de processo, apoiando o business case para automação. Por que é importante Quantifica a taxa de economia potencial, essencial para cálculos de ROI. Onde obter Tabela SAP BSEG campo ZBD1P Exemplos 2.03.00.0 | |||
| Valor de Desconto Perdido DiscountLostAmount | O valor monetário dos descontos financeiros que estavam disponíveis, mas não foram aproveitados. | ||
| Descrição Este atributo calculado representa o 'dinheiro deixado na mesa'. Ele é derivado verificando se o pagamento foi feito após o prazo de desconto e, em caso afirmativo, calculando o valor do percentual de desconto perdido aplicado sobre o valor da fatura. Na análise, esta é uma métrica financeira crítica para o Otimizador de Descontos por Antecipação. Ela quantifica o custo da ineficiência em moeda corrente, fornecendo um business case convincente para melhorias de processo. Por que é importante Quantifica a perda financeira direta devido a atrasos no processo. Onde obter Calculado: Se Data de Compensação > Data de Desconto, então Valor da Fatura * % de Desconto Exemplos 30.000.00150.00 | |||
Atividades de Processamento de Pagamentos de Contas a Pagar
| Atividade | Descrição | ||
|---|---|---|---|
| Bloqueio de Pagamento Aplicado | Indica que um bloqueio de pagamento foi definido no item da fatura, impedindo que ele seja selecionado pela rodada de pagamento. Isso é capturado monitorando alterações no campo ZLSPR na tabela BSEG por meio de documentos de alteração. | ||
| Por que é importante Bloqueios são a principal causa de atrasos e atrito no processo, impactando diretamente o dashboard de Análise de Bloqueio de Pagamento Manual. Onde obter Tabelas CDPOS e CDHDR (Documentos de Alteração), buscando atualizações no campo BSEG-ZLSPR. Captura Registrado quando a CDPOS grava alteração no ZLSPR Tipo de evento explicit | |||
| Bloqueio de Pagamento Removido | Indica que um bloqueio de pagamento anterior foi removido, liberando a fatura. Identificado quando o campo ZLSPR na BSEG muda de um valor para nulo ou vazio. | ||
| Por que é importante Geralmente serve como um substituto para 'Fatura Aprovada' em sistemas sem logs de workflow explícitos, marcando o fim do gargalo. Onde obter Tabelas CDPOS e CDHDR, buscando a alteração do campo BSEG-ZLSPR para vazio. Captura Registrado quando a CDPOS grava a remoção do ZLSPR Tipo de evento explicit | |||
| Documento de Pagamento Criado | A geração do documento contábil que credita o banco e debita o fornecedor. Isso é encontrado na BKPF com um tipo de documento de pagamento (ex: ZP, KZ). | ||
| Por que é importante A realização financeira do pagamento, usada para calcular o Days Payable Outstanding (DPO). Onde obter Tabela BKPF, filtrada pelo Tipo de Documento (BLART) específico de pagamentos. Captura Registrado quando o documento de pagamento BKPF é criado Tipo de evento explicit | |||
| Execução de Pagamento Realizada | Representa a execução da rodada de pagamento onde as instruções de transferência de dinheiro são geradas. Isso é rastreado via atualização de status nas tabelas REGUH ou REGUP. | ||
| Por que é importante O compromisso operacional de pagamento, crítico para analisar a eficiência do processo de loteamento de pagamentos. Onde obter Tabela REGUH, geralmente correlacionada com a data de execução e identificação. Captura Registrado quando o status da Execução de Pagamento atualiza Tipo de evento explicit | |||
| Fatura Lançada | Representa o registro oficial da obrigação no Razão Geral. Essa atividade é derivada do carimbo de data/hora de criação na tabela BKPF ou da data de entrada na tabela ACDOCA. | ||
| Por que é importante Este é o ponto de partida principal para a linha do tempo financeira, estabelecendo a base para datas de vencimento e análise de envelhecimento (aging). Onde obter Tabela BKPF, utilizando CPUDT (Data de Entrada) e CPUTM (Hora de Entrada). Captura Registrado quando o registro BKPF é criado Tipo de evento explicit | |||
| Pagamento Liquidado | Marca a reconciliação final onde o item aberto na conta do fornecedor é compensado. Capturado do campo AUGDT na tabela BSEG. | ||
| Por que é importante O estado final do processo, indicando que o ciclo de vida foi concluído e as contas estão equilibradas. Altas taxas de compensação manual indicam ineficiências na conciliação. Onde obter Tabela BSEG, campo AUGDT (Data de Compensação). Captura Registrado quando o campo AUGDT é preenchido Tipo de evento explicit | |||
| Condições de Pagamento Alteradas | Registra uma atualização nas condições de pagamento de uma fatura aberta, o que altera a data de vencimento ou a elegibilidade ao desconto. Isso é rastreado por meio de logs de alteração no campo ZTERM da tabela BSEG. | ||
| Por que é importante Alterações frequentes sugerem erros em dados mestres ou intervenções manuais que afetam a previsão de fluxo de caixa e a conformidade dos termos de pagamento. Onde obter Tabelas CDPOS e CDHDR, buscando atualizações no campo BSEG-ZTERM. Captura Registrado quando a CDPOS grava alteração no ZTERM Tipo de evento explicit | |||
| Desconto Financeiro Perdido | Um evento calculado que marca a data em que expirou a elegibilidade para um desconto financeiro. Derivado da comparação entre a data de vencimento do desconto e a data atual ou de pagamento. | ||
| Por que é importante Essencial para o Otimizador de Descontos por Antecipação visualizar as oportunidades financeiras perdidas. Onde obter Calculado: BSEG-ZFBDT + BSEG-ZBD1T (Dias de Desconto 1). Captura 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 lançada no Razão (pre-lançamento). Capturado da tabela VBKPF ou identificando documentos na BKPF com status de pré-lançamento. | ||
| Por que é importante O pré-lançamento marca o início da fase de entrada de dados e ajuda a medir o tempo de espera entre o recebimento e a obrigação financeira. Onde obter Tabela VBKPF para dados de cabeçalho de documentos pré-lançados ou BKPF com status de documento específico (BSTAT = V). Captura Registrado quando a entrada VBKPF é criada Tipo de evento explicit | |||
| Fatura Estornada | Indica que o documento da fatura foi estornado ou cancelado. Capturado pelo campo STBLG (Documento de Estorno) na tabela BKPF. | ||
| Por que é importante Representa retrabalho e falha de processo, identificando desperdício e potencial esforço duplicado. Onde obter Tabela BKPF, campo STBLG não está vazio. Captura Registrado quando o campo STBLG é preenchido Tipo de evento explicit | |||
| Proposta de Pagamento Criada | Indica que a fatura foi incluída em uma rodada de proposta de pagamento (F110), a primeira etapa do programa de pagamento automático. Capturado da tabela REGUH, que armazena dados de liquidação. | ||
| Por que é importante Indica que a fatura foi selecionada para pagamento e passou pelas validações do programa de pagamento. Onde obter Carimbo de data/hora de criação da tabela REGUH (chaves LAUFD e LAUFI). Captura Registrado quando o registro REGUH é criado Tipo de evento explicit | |||
| Variação de Preço Detectada | Atividade inferida indicando divergência entre o preço da fatura e do pedido. Derivada da Chave de Bloqueio (geralmente 'R' para verificação de fatura) aplicada no lançamento. | ||
| Por que é importante Identifica as causas raiz do retrabalho manual e apoia a Análise da Taxa de Three-Way Match. Onde obter Inferido do valor 'R' no campo BSEG-ZLSPR (ou configuração específica do sistema) no momento do lançamento. Captura Comparar valor de ZLSPR com 'R' Tipo de evento inferred | |||
| Variação de Quantidade Detectada | Atividade inferida indicando discrepância entre a quantidade faturada e a recebida. Derivada pela observação da Chave de Bloqueio (geralmente 'M' para variação de quantidade). | ||
| Por que é importante Crucial para analisar a eficiência da conciliação e a qualidade dos dados na cadeia de suprimentos. Onde obter Inferido do valor 'M' no campo BSEG-ZLSPR (ou configuração específica do sistema). Captura Comparar valor de ZLSPR com 'M' Tipo de evento inferred | |||
| Vencimento da Fatura | Um timestamp calculado que representa o momento em que a fatura atingiu sua data de vencimento líquido. Derivado da adição dos dias de condição de pagamento à data base encontrada na tabela BSEG. | ||
| Por que é importante Serve como ponto de referência para a Performance de Pagamentos no Prazo e o Rastreador de Multas por Atraso. Onde obter Calculado: BSEG-ZFBDT (Data Base) + BSEG-ZBD1T/ZBD2T/ZBD3T (Dias). Captura Derivado da comparação entre a data atual e a Data de Vencimento Líquida Tipo de evento calculated | |||
Guias de Extração
Etapas
Identificar as CDS Views Necessárias: Confirme a disponibilidade das CDS views padrão do SAP S/4HANA. As principais views necessárias são I_JournalEntry (Cabeçalho), I_OperationalAcctgDocItem (Itens/equivalente a BSEG), I_SupplierInvoice (Logística), I_PaymentProposalItem (F110) e I_ChangeDocument (para logs).
Configurar Permissões de Usuário: Certifique-se de que o usuário do banco de dados ou o usuário de serviço técnico tenha privilégios de SELECT nas views SQL DDL associadas às entidades CDS. Isso geralmente é gerenciado via SAP HANA Studio ou pelas ABAP Eclipse Development Tools (ADT).
Preparar o Ambiente SQL: Abra sua interface SQL (ex: SAP HANA Studio, DBeaver conectado ao HANA ou um conector de Process Mining que aceite SQL). Este método assume acesso SQL direto à camada HANA onde as CDS views são expostas como views.
Definir o Escopo: Determine o Código da Empresa (CompanyCode) e o intervalo do Ano Fiscal para limitar o volume de dados. Isso é crucial para a performance ao consultar a view de Itens de Documentos Contábeis Operacionais.
Implementar a Lógica das Atividades: Copie a consulta SQL fornecida abaixo. Esta query usa UNION ALL para combinar 14 blocos de lógica distintos em uma única estrutura de event log. Cada bloco foca em uma atividade específica (ex: Fatura Lançada, Pagamento Compensado).
Lidar com Documentos de Alteração: A query inclui seções para Alterações de Condições de Pagamento e manipulação de Bloqueios. Elas dependem da view I_ChangeDocument. Se esta view não estiver ativa na sua versão específica do S/4, pode ser necessário envolver as tabelas subjacentes (CDHDR/CDPOS) em uma CDS view customizada.
Tratar Eventos Calculados: Revise a lógica para Vencimento da Fatura e Perda de Desconto de Caixa. Estes são eventos calculados gerados ao adicionar dias à data base encontrada na view de itens operacionais.
Executar a Extração: Execute a query. Para grandes volumes de dados, é altamente recomendável particionar a extração por Ano Fiscal ou Código da Empresa para evitar estouro de memória.
Verificar Formatos de Data: Garanta que a coluna EventTime esteja formatada como AAAA-MM-DD HH:MM:SS. O SAP HANA SQL retorna timestamps que podem precisar de conversão (casting) dependendo da sua aplicação de destino.
Exportar os Dados: Salve o conjunto de resultados como um arquivo CSV ou Parquet. Certifique-se de que os cabeçalhos correspondam às colunas definidas na instrução SELECT final.
Transformar para Upload: Se a sua ferramenta de process mining exigir um formato CSV específico (ex: máscara de data específica), aplique essas transformações em um script de pós-processamento ou dentro do SQL usando funções TO_VARCHAR.
Validação Final: Carregue uma amostra no ProcessMind e verifique se o Case ID (Número da Fatura) agrupa corretamente todas as atividades, desde o lançamento até a compensação.
Configuração
- Filtro de Empresa: Restrinja a consulta a unidades organizacionais específicas (CompanyCode = '1000') para garantir o foco e a performance.
- Intervalo de Datas: Aplique um filtro em PostingDate ou CreationDate (ex: últimos 12 meses) para gerenciar o volume de dados.
- Tipo de Conta: Filtre I_OperationalAcctgDocItem pelo FinancialAccountType = 'K' (Fornecedor) para excluir linhas de Razão Geral (GL) e de Clientes.
- Ativação de CDS Views: Verifique se as views I_JournalEntry, I_OperationalAcctgDocItem e I_PaymentProposalItem estão ativas e liberadas para acesso via SQL.
- Performance do Log de Alterações: Consultar a I_ChangeDocument pode exigir muitos recursos. Limite estas subconsultas pela ObjectClass 'BELEG' e nomes de campos específicos como ZLSPR e ZTERM.
a 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
Identificar as CDS Views Necessárias: Confirme a disponibilidade das CDS views padrão do SAP S/4HANA. As principais views necessárias são I_JournalEntry (Cabeçalho), I_OperationalAcctgDocItem (Itens/equivalente a BSEG), I_SupplierInvoice (Logística), I_PaymentProposalItem (F110) e I_ChangeDocument (para logs).
Configurar Permissões de Usuário: Certifique-se de que o usuário do banco de dados ou o usuário de serviço técnico tenha privilégios de SELECT nas views SQL DDL associadas às entidades CDS. Isso geralmente é gerenciado via SAP HANA Studio ou pelas ABAP Eclipse Development Tools (ADT).
Preparar o Ambiente SQL: Abra sua interface SQL (ex: SAP HANA Studio, DBeaver conectado ao HANA ou um conector de Process Mining que aceite SQL). Este método assume acesso SQL direto à camada HANA onde as CDS views são expostas como views.
Definir o Escopo: Determine o Código da Empresa (CompanyCode) e o intervalo do Ano Fiscal para limitar o volume de dados. Isso é crucial para a performance ao consultar a view de Itens de Documentos Contábeis Operacionais.
Implementar a Lógica das Atividades: Copie a consulta SQL fornecida abaixo. Esta query usa UNION ALL para combinar 14 blocos de lógica distintos em uma única estrutura de event log. Cada bloco foca em uma atividade específica (ex: Fatura Lançada, Pagamento Compensado).
Lidar com Documentos de Alteração: A query inclui seções para Alterações de Condições de Pagamento e manipulação de Bloqueios. Elas dependem da view I_ChangeDocument. Se esta view não estiver ativa na sua versão específica do S/4, pode ser necessário envolver as tabelas subjacentes (CDHDR/CDPOS) em uma CDS view customizada.
Tratar Eventos Calculados: Revise a lógica para Vencimento da Fatura e Perda de Desconto de Caixa. Estes são eventos calculados gerados ao adicionar dias à data base encontrada na view de itens operacionais.
Executar a Extração: Execute a query. Para grandes volumes de dados, é altamente recomendável particionar a extração por Ano Fiscal ou Código da Empresa para evitar estouro de memória.
Verificar Formatos de Data: Garanta que a coluna EventTime esteja formatada como AAAA-MM-DD HH:MM:SS. O SAP HANA SQL retorna timestamps que podem precisar de conversão (casting) dependendo da sua aplicação de destino.
Exportar os Dados: Salve o conjunto de resultados como um arquivo CSV ou Parquet. Certifique-se de que os cabeçalhos correspondam às colunas definidas na instrução SELECT final.
Transformar para Upload: Se a sua ferramenta de process mining exigir um formato CSV específico (ex: máscara de data específica), aplique essas transformações em um script de pós-processamento ou dentro do SQL usando funções TO_VARCHAR.
Validação Final: Carregue uma amostra no ProcessMind e verifique se o Case ID (Número da Fatura) agrupa corretamente todas as atividades, desde o lançamento até a compensação.
Configuração
- Filtro de Empresa: Restrinja a consulta a unidades organizacionais específicas (CompanyCode = '1000') para garantir o foco e a performance.
- Intervalo de Datas: Aplique um filtro em PostingDate ou CreationDate (ex: últimos 12 meses) para gerenciar o volume de dados.
- Tipo de Conta: Filtre I_OperationalAcctgDocItem pelo FinancialAccountType = 'K' (Fornecedor) para excluir linhas de Razão Geral (GL) e de Clientes.
- Ativação de CDS Views: Verifique se as views I_JournalEntry, I_OperationalAcctgDocItem e I_PaymentProposalItem estão ativas e liberadas para acesso via SQL.
- Performance do Log de Alterações: Consultar a I_ChangeDocument pode exigir muitos recursos. Limite estas subconsultas pela ObjectClass 'BELEG' e nomes de campos específicos como ZLSPR e ZTERM.
a 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