Seu Template de Dados para Order-to-Cash — Faturamento e Emissão de Notas
Seu Template de Dados para Order-to-Cash — Faturamento e Emissão de Notas
- Atributos recomendados para análise abrangente
- Principais etapas e marcos do processo para rastrear
- Orientação prática para extração de dados no SAP ECC
Atributos de Order to Cash - Faturamento e Cobrança
| Nome | Descrição | ||
|---|---|---|---|
| Atividade ActivityName | O nome do evento de negócio ou etapa que ocorreu no ciclo de vida da fatura. | ||
| Descrição Este atributo descreve uma ação específica ou mudança de status no processo de faturamento, como 'Fatura Gerada', 'Fatura Lançada' ou 'Recebimento do Pagamento do Cliente'. Essas atividades são derivadas conceitualmente de vários eventos do sistema, mudanças de status em documentos ou códigos de transação específicos executados pelos usuários. A sequência dessas atividades forma o fluxo do processo, que é a base da análise de Process Mining. Ao examinar as atividades, as organizações podem entender quais etapas são seguidas, em que ordem e com qual frequência, revelando a execução real do processo em comparação com o processo desenhado. Por que é importante Define as etapas no mapa de processos, permitindo a visualização e análise de fluxos, desvios e gargalos. Onde obter Este é um atributo conceitual derivado de múltiplas fontes, como códigos de transação (CDHDR-TCODE), mudanças de status de documentos (VBUK-FKSTK) e lançamentos de documentos contábeis. Exemplos Fatura geradaFatura LançadaLembrete de Pagamento EmitidoFatura Compensada | |||
| Hora de Início EventTime | O timestamp que indica quando uma atividade ou evento específico ocorreu. | ||
| Descrição O Event Time captura a data e a hora precisas de cada atividade no ciclo de vida da fatura. Esse timestamp é fundamental para todas as análises baseadas em tempo no Process Mining, incluindo o cálculo de tempos de ciclo, identificação de gargalos e monitoramento do desempenho do processo em relação a acordos de nível de serviço (SLAs). Este atributo é geralmente construído combinando um campo de data, como Data de Lançamento (BUDAT), com um campo de hora (UZEIT) de várias tabelas SAP que registram alterações ou criação de documentos. Timestamps precisos são cruciais para construir um Event Log confiável e garantir a validade de qualquer análise de desempenho. Por que é importante Este atributo é a base para toda a análise de desempenho, permitindo o cálculo de tempos de ciclo, durações e tempos de espera entre as etapas do processo. Onde obter Construído a partir de vários campos de data e hora em múltiplas tabelas, como BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) e tabelas de log de alterações como CDHDR (UDATE, UTIME). Exemplos 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Número da fatura InvoiceNumber | O identificador exclusivo para o documento de faturamento, servindo como o Case ID principal para o processo de cobrança. | ||
| Descrição O Número da Fatura, conhecido como Número do Documento de Faturamento no SAP, identifica de forma única cada fatura. No Process Mining, ele atua como o CaseId, agrupando todas as atividades relacionadas, como criação, lançamento, envio, pagamento e compensação, em uma única instância de processo de ponta a ponta. Analisar processos pelo Número da Fatura permite uma visão completa do ciclo de vida de cada transação de faturamento, desde o início até a liquidação final. Isso é crucial para calcular indicadores de desempenho como o DSO e o tempo total de ciclo da fatura, fornecendo uma base clara para medição e melhoria de performance. Por que é importante É a chave essencial para rastrear toda a jornada de uma fatura, permitindo a análise de tempos de ciclo, gargalos e variações para cada transação individual de faturamento. Onde obter Tabela SAP ECC: VBRK, Campo: VBELN Exemplos 90001234900012359000123690001237 | |||
| Código da Empresa CompanyCode | O identificador da entidade legal que emitiu a fatura. | ||
| Descrição A Empresa (Company Code) representa uma unidade contábil e jurídica independente no SAP. Todas as transações financeiras, incluindo faturas, são lançadas em uma empresa específica. Este é um elemento fundamental dos dados organizacionais. No contexto de Process Mining, a Empresa é usada para analisar e comparar o desempenho do processo de faturamento entre diferentes entidades legais de uma corporação. Isso ajuda a identificar melhores práticas em uma unidade que podem ser aplicadas a outras, garantindo que a análise respeite a estrutura organizacional da companhia. Por que é importante Permite filtrar e comparar processos entre diferentes entidades legais, o que é fundamental para análises financeiras e benchmarking organizacional. Onde obter Tabela SAP ECC: VBRK, Campo: BUKRS Exemplos 10002000US01DE01 | |||
| Nome do Utilizador UserName | O ID do usuário que executou a atividade ou criou o documento. | ||
| Descrição Este atributo captura o ID do usuário SAP responsável por um determinado evento, como a criação de uma fatura ou o lançamento de um pagamento. É essencial para analisar o elemento humano do processo. Com esses dados, é possível investigar variações de desempenho entre usuários ou equipes, identificar necessidades de treinamento e detectar potenciais problemas de conformidade. Também é usado para diferenciar atividades manuais realizadas por pessoas de etapas automatizadas executadas por usuários de sistema ou em lote (batch), o que é fundamental para calcular as taxas de automação. Por que é importante Permite a análise do desempenho do usuário, distribuição de carga de trabalho e ajuda a distinguir entre atividades manuais e automatizadas, apoiando iniciativas de automação e eficiência. Onde obter Tabela SAP ECC: VBRK, Campo: ERNAM (Criado por) ou BKPF, Campo: USNAM (Nome do usuário) ou CDHDR, Campo: USERNAME (Usuário). Exemplos JSMITHBW_BATCHLROSSIMKUMAR | |||
| Número do cliente CustomerNumber | Um número exclusivo que identifica o cliente para quem a fatura é emitida. | ||
| Descrição O Número do Cliente vincula uma fatura a um cliente ou parceiro de negócios específico. Este atributo é crítico para segmentar e analisar o processo de faturamento com base nas características do cliente. Analistas podem usar este campo para comparar o DSO entre diferentes clientes, identificar quais pagam com atraso frequentemente ou analisar a conformidade com os prazos de pagamento. Entender esses padrões é fundamental para gerenciar o relacionamento com clientes e melhorar as estratégias de cobrança personalizadas para diferentes segmentos. Por que é importante Permite análises centradas no cliente, ajudando a identificar comportamentos de pagamento, avaliar o DSO por cliente e personalizar estratégias de cobrança. Onde obter Tabela SAP ECC: VBRK, Campo: KUNRG (Pagador) ou KUNAG (Emissor da Ordem). Exemplos 100023200541CUST-A487910345 | |||
| Tipo de Documento de Faturamento BillingDocumentType | Um código que categoriza o tipo de documento de faturamento, como uma fatura, nota de crédito ou nota de débito. | ||
| Descrição O Tipo de Documento de Faturamento classifica as transações em categorias distintas com base na sua finalidade comercial. Por exemplo, 'F2' é uma fatura padrão, enquanto 'G2' representa uma nota de crédito. Essa classificação é configurada no SAP para controlar como diferentes documentos são processados. Para o Process Mining, este atributo é essencial para filtrar e comparar diferentes cenários de faturamento. Os analistas podem examinar o processo de faturas padrão separadamente das notas de crédito para entender seus fluxos únicos, tempos de ciclo e desafios, levando a melhorias de processo mais assertivas. Por que é importante Permite a segmentação e análise de diferentes processos de faturamento, como faturas padrão versus notas de crédito, que costumam ter fluxos de processo muito distintos. Onde obter Tabela SAP ECC: VBRK, Campo: FKART Exemplos F2G2L2IV | |||
| Valor Total da Fatura TotalInvoiceAmount | O valor líquido total do documento de faturamento. | ||
| Descrição Este atributo representa o valor líquido total da fatura, excluindo impostos. O valor da fatura é um dado financeiro crítico associado ao processo de faturamento. Ele é usado em várias análises, como a segmentação de faturas em categorias de alto e baixo valor para verificar se seus fluxos de processo diferem. Também pode ser usado para priorizar esforços de cobrança ou investigar por que faturas de alto valor demoram mais para serem aprovadas ou pagas. Esse contexto financeiro adiciona uma camada significativa de profundidade à análise do processo. Por que é importante Oferece um contexto financeiro essencial, permitindo análises baseadas no valor da fatura, como identificar se faturas de alto valor seguem um processo diferente ou demoram mais para serem compensadas. Onde obter Tabela SAP ECC: VBRK, Campo: NETWR Exemplos 1500.7525000.00500.0012345.67 | |||
| C digo de Transa o TransactionCode | O código da transação SAP usado para realizar uma atividade. | ||
| Descrição O Código de Transação, ou T-Code, é um identificador exclusivo para uma função ou programa específico no SAP, como 'VF01' para criar um documento de faturamento. Capturar o T-Code para cada evento fornece uma visão técnica, em nível de sistema, de como um processo foi executado. Essa informação é extremamente valiosa para a análise de causa raiz. Por exemplo, se erros forem comuns, os analistas podem verificar se um código de transação não padronizado está sendo usado. Também ajuda a derivar o nome da atividade e a entender quais funcionalidades do sistema estão sendo empregadas no processo. Por que é importante Fornece contexto técnico sobre como uma atividade foi realizada, permitindo a análise de causa raiz de desvios de processo e ajudando a identificar ações não padronizadas de usuários. Onde obter Tabela SAP ECC: CDHDR, Campo: TCODE Exemplos VF01VF02FB01F-28 | |||
| Condições de Pagamento PaymentTerms | As condições sob as quais um vendedor concluirá uma venda, incluindo o cronograma de pagamento. | ||
| Descrição Os Prazos de Pagamento definem as regras para quando um pagamento vence, como 'Líquido 30' ou 'Líquido 60'. Estes prazos são acordados com o cliente e são um fator determinante para o fluxo de caixa. Analisar o processo por prazos de pagamento pode revelar se certos termos estão associados a ciclos de pagamento mais longos ou maiores taxas de atraso. Esse insight ajuda a empresa a negociar melhores condições ou ajustar seu planejamento financeiro. Também é um dado essencial para calcular a data de vencimento da fatura. Por que é importante Ajuda a analisar o comportamento de pagamento dos clientes e o impacto no fluxo de caixa com base nos prazos negociados, oferecendo insights para otimizar acordos comerciais. Onde obter Tabela SAP ECC: VBRK, Campo: ZTERM Exemplos Z030Z060Z001 | |||
| Data de Compensação ClearingDate | A data em que o pagamento foi recebido e a fatura foi baixada das contas a receber. | ||
| Descrição A Data de Compensação é a data em que um item em aberto, como uma fatura, é marcado como pago ou 'compensado' no sistema financeiro. Essa data representa efetivamente quando o dinheiro é considerado recebido e reconciliado. Esta é uma das datas mais importantes no ciclo de Order to Cash. Ela serve como ponto final para calcular o Days Sales Outstanding (DSO) e o tempo total do ciclo fatura-ao-caixa. Analisar a data de compensação ajuda a medir a eficácia do processo de cobrança. Por que é importante Marca a etapa final do ciclo de vida da fatura, servindo como data final para o cálculo do DSO e do tempo total de ciclo, refletindo a eficiência da arrecadação. Onde obter Tabela SAP ECC: BSAD, Campo: AUGDT Exemplos 2023-05-142023-06-012023-06-25 | |||
| Data de Lançamento PostingDate | A data em que o documento é lançado nos livros contábeis financeiros. | ||
| Descrição A Data de Lançamento determina o período fiscal em que a transação é registrada no Razão Geral. É uma data crítica para a contabilidade e relatórios financeiros. Atrasos entre a data de criação do documento e a data de lançamento podem indicar ineficiências no tratamento interno dos documentos de faturamento. Do ponto de vista do Process Mining, a data de lançamento marca um marco importante no ciclo de vida da fatura. O intervalo de tempo entre a geração da fatura e o lançamento pode ser um indicador chave de desempenho para a eficiência do departamento de faturamento. Por que é importante Marca um marco financeiro importante e é crucial para a contabilidade. O intervalo de tempo entre a criação da fatura e o lançamento é uma medida fundamental da eficiência do processamento interno. Onde obter Tabela SAP ECC: BKPF, Campo: BUDAT Exemplos 2023-04-152023-04-172023-05-21 | |||
| Data de Vencimento da Fatura InvoiceDueDate | A data em que se espera que o cliente realize o pagamento. | ||
| Descrição A Data de Vencimento da Fatura é o prazo final para o pagamento, conforme especificado nos prazos de pagamento. Esta data é fundamental para gerenciar contas a receber e iniciar atividades de cobrança. Este atributo é usado para calcular o KPI de Taxa de Pagamento no Prazo, comparando-o com a data real do pagamento. Analisar as faturas por data de vencimento ajuda na previsão de fluxo de caixa e na priorização de esforços de cobrança para pagamentos próximos ou atrasados. Geralmente é derivado da data base e dos prazos de pagamento. Por que é importante Este é o benchmark para medir o desempenho de pagamentos no prazo e é essencial para gerenciar contas a receber e prever o fluxo de caixa. Onde obter Calculado com base na data base (BSEG-ZFBDT) e nas condições de pagamento (BSEG-ZTERM). Nem sempre é armazenado em um campo direto. Exemplos 2023-05-152023-05-302023-06-20 | |||
| Data do Documento DocumentDate | A data constante no documento original, fornecida pelo fornecedor ou criador. | ||
| Descrição A Data do Documento é a data em que o documento original foi emitido. No faturamento, costuma ser a data de criação da fatura e é frequentemente usada como base para o cálculo do vencimento. Esta data é crucial para relatórios financeiros e para o cálculo de métricas fundamentais como o DSO. Representa o ponto de partida do período de cobrança do ponto de vista do cliente. Analisar discrepâncias entre a data do documento e a data de lançamento pode revelar atrasos internos no processamento de faturas. Por que é importante Serve como base para calcular a idade da fatura e o DSO, fornecendo um ponto de referência crítico para a análise financeira e dos prazos de pagamento. Onde obter Tabela SAP ECC: VBRK, Campo: FKDAT (Data do Faturamento) Exemplos 2023-04-152023-04-162023-05-20 | |||
| É Automatizado IsAutomated | Um sinalizador (flag) indicando se uma atividade foi realizada por um usuário do sistema ou por meio de automação. | ||
| Descrição Este atributo calculado é um sinalizador (flag) booleano que distingue entre atividades manuais e automatizadas. Geralmente é derivado verificando o atributo de Nome do Usuário contra uma lista de IDs de usuários de sistema ou de lote (batch) conhecidos, como 'BATCHUSER' ou 'SAPSYSTEM'. Este sinalizador é essencial para medir o nível de automação no processo de faturamento, que é um objetivo fundamental para muitas organizações que buscam melhorar a eficiência e reduzir custos. O KPI de Taxa de Faturamento Automatizado é calculado diretamente a partir deste atributo, ajudando a acompanhar o progresso das iniciativas de automação. Por que é importante Suporta diretamente o cálculo da taxa de faturamento automatizado, ajudando a medir a eficiência do processo e rastrear o impacto de projetos de automação. Onde obter Derivado do atributo User Name. A lógica seria algo como: SE UserName EM ('BATCH', 'SYSTEM', 'RFCUSER') ENTÃO verdadeiro SENÃO falso. Exemplos verdadeirofalse | |||
| É Retrabalho IsRework | Um sinalizador (flag) indicando se uma atividade é uma etapa de retrabalho ou correção. | ||
| Descrição Este atributo calculado identifica atividades que representam retrabalho, como 'Fatura Corrigida' ou estornos de documentos. Geralmente é um sinalizador (flag) booleano derivado do nome da atividade ou de códigos de transação associados a correções e cancelamentos, como 'VF11' para cancelar um documento de faturamento. No Process Mining, este sinalizador é inestimável para quantificar a quantidade de retrabalho no processo de faturamento. Ele apoia diretamente KPIs como a Taxa de Correção de Faturas e ajuda a visualizar loops de retrabalho no mapa de processos, destacando ineficiências e problemas de qualidade que aumentam os custos operacionais e atrasam os pagamentos. Por que é importante Ajuda a quantificar ineficiências de processo e problemas de qualidade, destacando quanto esforço é gasto na correção de erros e apoiando diretamente os KPIs de retrabalho. Onde obter Derivado do nome da atividade ou do código de transação. Por exemplo: SE ActivityName = 'Fatura Corrigida' OU TransactionCode = 'VF11' ENTÃO verdadeiro SENÃO falso. Exemplos verdadeirofalse | |||
| Moeda Currency | O código da moeda para os valores especificados na fatura. | ||
| Descrição Este atributo indica a moeda da transação, como BRL, USD ou EUR. Ele fornece o contexto necessário para quaisquer valores monetários, como o Valor Total da Fatura. Ao analisar dados de uma organização multinacional, o campo de moeda é essencial para interpretar e converter corretamente os valores financeiros. Ele permite relatórios consistentes e garante que os valores não sejam agregados sem a devida conversão cambial, o que levaria a uma análise financeira incorreta. Por que é importante Fornece o contexto necessário para todos os valores monetários, garantindo uma análise financeira precisa, especialmente em ambientes multimoeda. Onde obter Tabela SAP ECC: VBRK, Campo: WAERK Exemplos USDEURGBPJPY | |||
| Nº do Documento de Vendas SalesDocumentNumber | O identificador do pedido de venda original que gerou a fatura. | ||
| Descrição Este atributo fornece um link direto da fatura de volta ao pedido de venda que iniciou a transação. Essa rastreabilidade é crucial para uma análise completa de ponta a ponta do Order to Cash. Ao conectar o processo de faturamento com o processo de pedido de venda anterior, as organizações podem analisar o tempo total de ciclo, desde o pedido do cliente até o recebimento do caixa. Isso ajuda a identificar se os atrasos no faturamento são causados por problemas nas vendas, no atendimento ou no próprio departamento de faturamento, oferecendo uma visão mais holística do processo. Por que é importante Conecta o processo de faturamento de volta ao pedido de venda, permitindo uma análise real de ponta a ponta do Order to Cash e ajudando a identificar atrasos entre departamentos. Onde obter Tabela SAP ECC: VBRP, Campo: VGBEL Exemplos 100000451000004610000047 | |||
| Organização de vendas SalesOrganization | A unidade organizacional responsável pela venda de produtos ou serviços. | ||
| Descrição A Organização de Vendas é uma unidade organizacional no SAP responsável pela distribuição de bens e serviços e pela negociação de condições de venda. É um campo essencial para estruturar as operações de vendas e distribuição. No Process Mining, este atributo permite analisar o processo de faturamento sob o ponto de vista da estrutura de vendas. Ele possibilita a comparação de desempenho entre diferentes organizações de vendas, ajudando a identificar quais regiões ou linhas de negócio são mais eficientes em seus processos de faturamento e apoiando iniciativas para padronizar as melhores práticas. Por que é importante Permite benchmarking e análise de desempenho entre diferentes divisões de vendas ou regiões, ajudando a identificar melhores práticas e áreas de melhoria. Onde obter Tabela SAP ECC: VBRK, Campo: VKORG Exemplos 1000NA01EU01AP01 | |||
| Sistema de Origem SourceSystem | Identifica o sistema de origem do qual os dados foram extraídos. | ||
| Descrição Este atributo especifica o sistema de registro onde os dados se originaram. Em um ambiente corporativo com múltiplas instâncias de ERP ou sistemas integrados, este campo ajuda a distinguir dados de diferentes fontes. Para o Process Mining, é essencial para a validação de dados e para análises que comparam processos entre diferentes sistemas ou unidades organizacionais. Geralmente é preenchido como um valor estático durante o processo de extração de dados para rotular o dataset. Por que é importante Fornece contexto sobre a origem dos dados, o que é crucial em ambientes com múltiplos sistemas para garantir a integridade dos dados e permitir análises específicas por sistema. Onde obter Este é geralmente um valor estático adicionado durante o processo de extração, transformação e carga (ETL), identificando a instância específica do SAP ECC (ex: 'ECC_PROD_NA'). Exemplos SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Última Atualização de Dados LastDataUpdate | O timestamp da atualização ou extração de dados mais recentes do sistema de origem. | ||
| Descrição Este atributo indica a última vez que o conjunto de dados foi atualizado a partir do sistema de origem. Ele fornece um contexto crucial para qualquer análise, garantindo que os usuários compreendam a atualidade dos dados que estão visualizando. Em dashboards e relatórios, esse timestamp informa as partes interessadas sobre a pontualidade dos dados e ajuda a gerenciar expectativas sobre a visibilidade de transações muito recentes. Geralmente é gerado ao final do processo de extração de dados. Por que é importante Informa os usuários sobre a atualidade dos dados, o que é crítico para tomar decisões operacionais baseadas na análise. Onde obter Gerado e armazenado durante o processo de extração, transformação e carga (ETL) dos dados. Exemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
Atividades de Order to Cash - Faturamento e Cobrança
| Atividade | Descrição | ||
|---|---|---|---|
| Fatura Compensada | O status final de uma fatura paga com sucesso, indicando que o item em aberto foi fechado por um pagamento ou nota de crédito correspondente. A fatura é considerada totalmente liquidada. | ||
| Por que é importante Marca a conclusão bem-sucedida do ciclo de Order to Cash para uma fatura. Este é o principal evento final para medir o Tempo Médio de Ciclo da Fatura. Onde obter Ocorre quando os campos de documento de compensação (AUGBL) e data de compensação (AUGDT) são preenchidos para o item da fatura na tabela BSEG. Captura O evento ocorre na data de compensação (AUGDT) registrada na tabela BSEG para o item de linha da fatura. Tipo de evento explicit | |||
| Fatura enviada ao cliente | Indica que a fatura foi enviada ao cliente por meio de um canal de saída definido, como impressão, e-mail ou EDI. Isso geralmente é capturado nos logs do sistema de gestão de saídas (output management). | ||
| Por que é importante Este evento é um marco fundamental que aciona o cronômetro do prazo de pagamento do cliente. Atrasos aqui impactam diretamente quando um pagamento pode ser esperado e afetam a Eficiência na Cobrança de Pagamentos. Onde obter Pode ser inferido a partir da data e hora de processamento na tabela de status de mensagens (NAST) para o tipo de saída correspondente à fatura. Captura Inferido a partir de uma entrada na tabela NAST com status de processamento '1' (processado com sucesso). Tipo de evento inferred | |||
| Fatura gerada | Marca a criação do documento de faturamento no sistema. Este evento é capturado quando uma nova entrada é criada na tabela de cabeçalho de documentos contábeis (BKPF) com um tipo de documento específico para faturas. | ||
| Por que é importante Este é o ponto de partida para todo o processo de faturamento. Analisar o tempo a partir deste evento ajuda a medir o Tempo de Ciclo de Criação de Faturas e serve como base para o cálculo do Days Sales Outstanding (DSO). Onde obter Registrado na tabela BKPF. A data de criação (CPUDT) e a hora (CPUTM) para um número de documento específico (BELNR) marcam este evento. O tipo de documento (BLART) o identifica como uma fatura. Captura A partir do timestamp de criação (CPUDT) na tabela BKPF para o documento da fatura. Tipo de evento explicit | |||
| Fatura Lançada | A fatura é formalmente registrada no livro auxiliar de Contas a Receber e no Razão Geral. Este evento torna a fatura legalmente vinculativa e reflete a dívida do cliente. | ||
| Por que é importante Este é um marco crítico que inicia oficialmente o prazo de cobrança. O tempo entre a geração e o lançamento pode destacar atrasos no processamento interno que afetam o fluxo de caixa. Onde obter Registrado na tabela BKPF. A data de lançamento (BUDAT) para o número do documento (BELNR) marca este evento. Para documentos pré-editados (parked), este é o momento em que são convertidos em um documento lançado. Captura A partir da data de lançamento (BUDAT) na tabela BKPF para o documento da fatura. Tipo de evento explicit | |||
| Pagamento do cliente recebido | Um pagamento foi recebido do cliente e lançado no sistema como um recebimento de caixa ou depósito bancário. Isso cria um documento de pagamento separado que ainda não foi aplicado à fatura específica. | ||
| Por que é importante Este é um marco importante no ciclo de conversão de caixa. O tempo desde o envio da fatura até o recebimento do pagamento é um componente principal do Days Sales Outstanding (DSO). Onde obter Registrado como um novo documento em BKPF e BSEG, normalmente com um tipo de documento que indica pagamento de cliente, como 'DZ'. A data de lançamento (BUDAT) marca o evento. Captura A partir da data de lançamento do documento de pagamento do cliente na BKPF. Tipo de evento explicit | |||
| Caso de Disputa Criado | Uma disputa formal foi registrada contra a fatura, geralmente devido a reclamações de clientes. Isso é registrado no sistema SAP Dispute Management. | ||
| Por que é importante Identifica faturas com risco de atraso no pagamento e destaca problemas subjacentes que causam insatisfação no cliente. Marca o início de um importante processo de tratamento de exceções. Onde obter Capturado a partir da criação de um caso na tabela de casos de disputa (UDM_CASE) vinculada ao documento contábil da fatura. Captura Registrado quando um usuário cria um caso de disputa via transação UDM_DISPUTE. Tipo de evento explicit | |||
| Data de Vencimento da Fatura Atingida | Um evento calculado que marca o dia em que o pagamento da fatura deve ser oficialmente realizado, de acordo com as condições de pagamento. Não é uma atividade executada por um usuário ou sistema, mas um ponto crítico no tempo. | ||
| Por que é importante Essencial para analisar o comportamento de pagamento e compliance. É a base para determinar pagamentos em dia versus atrasados e calcular o KPI de Taxa de Pagamento no Prazo. Onde obter Derivado da comparação entre a data atual e a data de vencimento líquido. A data de vencimento é encontrada no campo BSEG-ZFBDT ou calculada a partir da data base e das condições de pagamento. Captura Compara a data do sistema com o campo de data de vencimento líquido no item de linha da fatura (BSEG). Tipo de evento calculated | |||
| Fatura Aprovada | Representa a aprovação formal da fatura, permitindo que ela seja lançada ou enviada ao cliente. Isso costuma ser inferido quando um documento pré-editado (parked) é convertido em um documento lançado. | ||
| Por que é importante Rastreia o workflow de aprovação interna, que é uma fonte comum de gargalos. Analisar esta atividade ajuda a alimentar o dashboard de Análise de Fluxo de Aprovação de Faturas, identificando aprovadores lentos. Onde obter Pode ser inferido pela transição de um documento do status de pré-editado (em VBKPF) para o status de lançado (em BKPF). Alternativamente, se um sistema de workflow for utilizado, este pode ser um evento explícito nos logs de workflow. Captura Compara a data de criação do doc. pré-editado (VBKPF) com a data de lançamento do doc. final (BKPF). Tipo de evento inferred | |||
| Fatura Baixada (Write-off) | Um status final alternativo onde a fatura é considerada incobrável e o valor pendente é compensado em uma conta de dívidas não recebíveis. Isso encerra a fatura sem um pagamento do cliente. | ||
| Por que é importante Representa um resultado de processo negativo e perda de receita. O rastreamento desses eventos ajuda a analisar os motivos de inadimplência e a melhorar as políticas de gestão de crédito. Onde obter Inferido pela análise da transação de compensação da fatura. Se o documento de compensação for lançado em uma conta contábil (G/L) específica de despesas com devedores duvidosos, a fatura é considerada baixada (write-off). Captura Inferido quando a transação de compensação envolve um lançamento em uma conta contábil (G/L) designada para devedores duvidosos. Tipo de evento inferred | |||
| Fatura Corrigida | Representa uma atividade de retrabalho onde uma fatura inicial foi considerada incorreta e subsequentemente estornada. Isso é capturado identificando documentos de estorno vinculados à fatura original. | ||
| Por que é importante Destaca ineficiências de processo e problemas de qualidade. Uma alta frequência de correções sinaliza problemas nos dados de vendas ou faturamento upstream, alimentando o dashboard de Retrabalho e Taxas de Erro de Faturas. Onde obter Identificado ao encontrar um documento de estorno onde o campo BKPF-STBLG aponta para o documento original. A criação deste documento de estorno é o evento. Captura Registrado quando um documento de estorno é criado (ex: via FB08). Tipo de evento explicit | |||
| Fatura Estacionada | O documento da fatura foi salvo em um estado preliminar sem ser lançado no razão. Isso é usado frequentemente quando as informações estão incompletas ou exigem revisão antes do lançamento final. | ||
| Por que é importante Rastreia as etapas de pré-lançamento e possíveis atrasos. Uma longa duração no estado pré-editado (parked) pode indicar problemas de qualidade dos dados ou gargalos no processo de pré-aprovação. Onde obter Documentos pré-editados (parked) são armazenados na tabela VBKPF. A criação de um documento aqui, que é posteriormente lançado, sinaliza esta atividade. Captura Registrado ao salvar um documento pré-editado (parked) usando uma transação como a FV70. Tipo de evento explicit | |||
| Lembrete de Pagamento Emitido | O sistema gerou e enviou um aviso de cobrança (dunning) ou lembrete de pagamento ao cliente para uma fatura vencida. Isso é capturado nos logs de histórico de cobrança. | ||
| Por que é importante Ajuda a avaliar a eficácia da estratégia de cobrança. Analisar o tempo decorrido entre o lembrete e o recebimento do pagamento é fundamental para o KPI de Eficácia do Lembrete de Pagamento. Onde obter Registrado nas tabelas de dados de cobrança, especificamente MHNK (Cabeçalho) e MHND (Itens), geradas pela execução de cobrança (Transação F150). Captura Registrado na execução de uma execução de cobrança (F150) para o item em atraso. Tipo de evento explicit | |||
| Pagamento Aplicado à Fatura | O pagamento recebido do cliente foi vinculado e aplicado à fatura em aberto específica, marcando o item para compensação. Esta é a etapa de reconciliação que conecta o pagamento à dívida. | ||
| Por que é importante Esta atividade é crucial para medir o Tempo de Ciclo de Aplicação de Caixa. Atrasos na aplicação do caixa podem distorcer o status real das contas a receber e ocultar o caixa disponível. Onde obter Inferido a partir da transação de compensação (ex: F-32), que preenche os campos de compensação no item da fatura. O timestamp do evento é a data de compensação. Captura Inferido a partir do preenchimento da data de compensação (AUGDT) na tabela de itens de fatura (BSEG). Tipo de evento inferred | |||
Guias de Extração
Etapas
- Acessar o Editor ABAP: Faça login no seu sistema SAP ECC. Acesse o Editor ABAP usando o código de transação
SE38. - Criar o Programa: Insira um nome para o novo programa no campo Programa, por exemplo,
Z_PM_O2C_INVOICE_EXTRACT, e clique no botão Criar. Forneça um título descritivo e defina o Tipo do programa como 'Programa Executável'. - Definir a Tela de Seleção: No código-fonte do programa, defina os parâmetros da tela de seleção. Isso permite que os usuários filtrem os dados para extração. Os parâmetros principais incluem o intervalo de datas de criação do documento (
S_ERDAT), o Código da Empresa (S_BUKRS) e o Tipo de Documento de Faturamento (S_VBTYP). - Definir Estruturas de Dados: Declare uma estrutura de tabela interna que conterá os dados finais do Event Log. Essa estrutura deve incluir campos para
InvoiceNumber,ActivityName,EventTimee atributos recomendados comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeeTotalInvoiceAmount. - Implementar a Lógica de Seleção de Dados: Escreva a lógica ABAP principal para selecionar os dados. Primeiro, selecione os documentos de faturamento primários das tabelas
VBRKeBKPFcom base nas entradas da tela de seleção. Armazene-os em uma tabela interna temporária. - Extrair Atividades: Percorra a lista inicial de documentos de faturamento. Para cada documento, realize seleções subsequentes em várias tabelas para identificar as 13 atividades necessárias. Por exemplo, consulte a tabela
NASTpara eventos de 'Fatura Enviada ao Cliente', aBSEGpara informações de compensação ('Fatura Compensada', 'Pagamento Aplicado') e aMHNKpara dados de cobrança ('Aviso de Cobrança Emitido'). - Construir a Tabela de Event Log: Para cada atividade encontrada na etapa anterior, preencha um novo registro em sua tabela interna final de Event Log. Certifique-se de que o
InvoiceNumber,ActivityName,EventTimee outros atributos estejam mapeados corretamente a partir das tabelas de origem. - Gravar no Servidor de Aplicação: Assim que o loop for concluído e a tabela interna final estiver preenchida, use as instruções
OPEN DATASET,LOOP AT... TRANSFEReCLOSE DATASETpara gravar o conteúdo da tabela interna em um arquivo flat no servidor de aplicação SAP. Especifique um caminho de arquivo lógico que esteja acessível. - Recuperar o Arquivo: Use o código de transação
AL11para navegar pelos diretórios do servidor de aplicação e localizar o arquivo gerado. Coordene com sua equipe de SAP Basis para baixar o arquivo do servidor para sua máquina local ou um local de rede compartilhado. - Formatação Final: Abra o arquivo baixado e confirme se é um arquivo de valores separados por vírgula (CSV) com uma linha de cabeçalho. Certifique-se de que o arquivo seja salvo com codificação UTF-8 para ser compatível com o upload no ProcessMind.
Configuração
- Pré-requisitos: Acesso para criar e executar programas ABAP (transação SE38). Autorização para leitura das tabelas FI e SD, incluindo
VBRK,VBRP,BKPF,BSEG,NAST,MHNKeUDM_CASE_ATTR00(para Gestão de Disputas). - Seleção de Intervalo de Datas: O programa deve ter um parâmetro obrigatório de intervalo de datas, geralmente baseado na data de criação do documento (
ERDATem VBRK/BKPF). Para a extração inicial, recomenda-se um intervalo de 3 a 6 meses para manter o conjunto de dados gerenciável. - Filtros Principais: Sempre filtre por
Empresa(BUKRS) para limitar o escopo da extração. Também é altamente recomendável filtrar pelo Tipo de Documento de Faturamento (VBTYPda VBRK) ou Tipo de Documento Contábil (BLARTda BKPF) para incluir apenas tipos de fatura relevantes, por exemplo, 'RV' para faturas contábeis padrão, e excluir notas de crédito ou outros documentos. - Considerações de Desempenho: Para grandes conjuntos de dados que cobrem mais de alguns meses, o programa deve ser executado como um job de background para evitar timeouts de sessão. A lógica ABAP deve ser otimizada para usar leituras de tabelas indexadas e evitar loops aninhados com seleções de banco de dados dentro deles. Selecionar dados em tabelas internas primeiro para depois processá-los é a abordagem preferida.
- Configuração do Arquivo de Saída: O código ABAP deve especificar o caminho do arquivo de saída no servidor de aplicação e o delimitador para o arquivo CSV, geralmente vírgula ou ponto e vírgula. Certifique-se de que o caminho seja um diretório configurado globalmente e acessível.
a Consulta de Exemplo abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Etapas
- Pré-requisitos e Acesso: Certifique-se de ter um usuário de banco de dados com acesso apenas de leitura às tabelas necessárias do SAP ECC, incluindo VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE e outras especificadas na consulta. Esse nível de acesso é geralmente concedido apenas a administradores de sistema ou equipes específicas de análise de dados.
- Conectar ao Banco de Dados: Use uma ferramenta de cliente SQL padrão, como DBeaver, Oracle SQL Developer ou Microsoft SQL Server Management Studio, para estabelecer uma conexão com o banco de dados do SAP ECC.
- Preparar a Consulta SQL: Copie a consulta SQL completa fornecida na seção 'query' para o editor do seu cliente SQL.
- Personalizar Placeholders: A consulta contém vários espaços reservados que você deve substituir por valores específicos do seu ambiente. Eles incluem:
'YYYYMMDD': Substitua todas as instâncias pelas datas de início e término do período de análise desejado. É crucial filtrar os dados para um intervalo de tempo gerenciável.'XXXX': Substitua pelo(s) código(s) de Empresa específico(s) que deseja analisar.[Seu Tipo de Saída de Fatura]: Especifique o código do tipo de saída usado para enviar faturas aos clientes, por exemplo, 'RD00'.[Sua Conta Contábil de Dívidas Incobráveis]: Insira o número da conta do Razão usada para baixas de faturas não recebíveis.[Seu Atributo de Fatura em Caso de Disputa]: Especifique o nome do atributo usado para armazenar o número da fatura em sua configuração de Gestão de Disputas, por exemplo, 'INVOICE_ID'.
- Revisar Funções de Timestamp: A consulta usa uma sintaxe genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Pode ser necessário ajustar isso para corresponder ao seu sistema de banco de dados específico, por exemplo, usandoTO_TIMESTAMPpara Oracle ouDATETIMEFROMPARTSpara SQL Server. - Executar a Consulta: Execute a consulta modificada. A execução pode levar um tempo considerável, dependendo do tamanho das suas tabelas SAP e do intervalo de datas selecionado.
- Inspecionar os Resultados: Assim que a consulta for concluída, revise a saída para garantir que contenha as colunas esperadas: InvoiceNumber, ActivityName, EventTime e os atributos recomendados. Verifique se há erros ou resultados vazios.
- Exportar para CSV: Exporte o conjunto completo de resultados do seu cliente SQL para um arquivo CSV. Certifique-se de que o arquivo use codificação UTF-8 para evitar problemas com caracteres especiais.
- Preparar para Upload: Antes de carregar em uma ferramenta de Process Mining, confirme se os cabeçalhos das colunas do CSV correspondem exatamente aos nomes de atributos exigidos, por exemplo,
InvoiceNumber,ActivityName,EventTime,UserName.
Configuração
- Conexão com o Banco de Dados: É necessária uma conexão SQL direta, apenas para leitura, com o banco de dados subjacente do SAP ECC. Este método ignora completamente a camada de aplicação SAP.
- Autorização: O usuário do banco de dados deve ter permissões de
SELECTem todas as tabelas usadas na consulta, que abrangem os módulos FI, SD e, possivelmente, FSCM. - Intervalo de Datas: É fundamental filtrar a consulta por um intervalo de datas específico para garantir um desempenho e volume de dados adequados. Recomendamos começar com um período de 3 a 6 meses. Os espaços reservados do filtro de data
'YYYYMMDD'devem ser definidos em várias partes da consulta. - Filtro de Empresa: A consulta foi desenvolvida para ser filtrada por Código da Empresa (
BUKRS). Analisar uma ou poucas empresas por vez é a prática padrão. - Configuração do Tipo de Documento: A lógica para identificar eventos como correções de fatura, baixas (write-offs) ou documentos enviados depende das configurações padrão do SAP. Você pode precisar ajustar a consulta se sua organização utilizar tipos de documento personalizados (
BLART), tipos de saída (KSCHL) ou contas contábeis específicas para esses processos. - Considerações de Desempenho: Executar esta consulta em um sistema SAP de produção pode consumir recursos significativos e impactar o desempenho operacional. Recomendamos fortemente executar grandes extrações em horários de pouco movimento ou em uma réplica de relatório dedicada do banco de dados.
a Consulta de Exemplo sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Etapas
- Pré-requisitos: Certifique-se de ter uma ferramenta de ETL licenciada com um conector SAP certificado (ex: Informatica PowerCenter, Talend, etc.). Verifique se você possui credenciais de usuário SAP com as autorizações necessárias para ler as tabelas financeiras, de vendas e de sistema exigidas (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Estabelecer Conexão SAP: Na sua ferramenta de ETL, crie uma nova conexão com o seu sistema SAP ECC. Configure os detalhes da conexão, incluindo servidor de aplicação, número do sistema, cliente, usuário e senha. Teste a conexão para garantir que seja bem-sucedida.
- Definir Fontes de Dados: Para cada atividade a ser extraída, defina as tabelas SAP correspondentes como fonte de dados no seu job de ETL. Por exemplo, adicione VBRK para geração de faturas, BKPF para eventos de lançamento e NAST para comunicação com o cliente.
- Construir Lógica de Extração para Cada Atividade: Crie um fluxo de dados ou transformação separado para cada uma das 13 atividades exigidas. Em cada fluxo, aplique filtros para selecionar os registros relevantes. Por exemplo, filtre por Código da Empresa (BUKRS), tipo de documento (BLART) e um intervalo de datas específico (ex: data de criação ERDAT).
- Mapear Campos e Transformar Dados: Em cada fluxo de dados, mapeie os campos das tabelas SAP de origem para a estrutura do Event Log de destino: InvoiceNumber, ActivityName, EventTime, UserName e outros atributos recomendados. Use a lógica de transformação para fixar o 'ActivityName' em cada fluxo e formatar corretamente as datas e timestamps.
- Lidar com Atividades Complexas: Para eventos calculados como 'Data de Vencimento da Fatura Atingida', use a Data Base de Pagamento (ZFBDT) e a lógica de condições de pagamento para calcular o vencimento, ou simplesmente extraia a Data de Vencimento Líquida (NETDT) da BSEG. Para eventos derivados de logs de alteração, como 'Fatura Aprovada', pode ser necessário unir tabelas como BKPF e CDHDR/CDPOS com base no número do documento e na data.
- Combinar Dados de Atividades: Use uma transformação de 'Union' ou 'Merge' na sua ferramenta de ETL para combinar as saídas de todos os 13 fluxos de dados individuais em um único conjunto de dados. Certifique-se de que os nomes das colunas e os tipos de dados sejam consistentes em todos os fluxos antes da união.
- Configurar Destino Final: Defina o destino final para o seu Event Log. Pode ser um arquivo flat (CSV), uma tabela de banco de dados ou uma conexão direta com uma área de staging.
- Definir Cronograma de Extração: Configure os parâmetros de intervalo de datas para a extração. Para a carga inicial, você pode extrair de 6 a 12 meses de dados. Para cargas delta subsequentes, configure o job para extrair dados a partir da data da última execução.
- Executar e Exportar: Execute o job de ETL. Uma vez concluído, inspecione o arquivo de saída para garantir que ele atenda ao formato exigido. A saída final deve ser um arquivo CSV único, com cada linha representando um evento exclusivo, pronto para upload no ProcessMind.
Configuração
- Conexão SAP: É necessária uma conexão de servidor de aplicação com o sistema SAP ECC de destino. O usuário SAP precisa de acesso RFC e autorizações para tabelas como VBRK, BKPF, BSEG, NAST e outras especificadas na consulta.
- Licença da Ferramenta ETL: Uma licença válida para a ferramenta de ETL comercial e seu conector SAP específico é obrigatória.
- Intervalo de Datas: Recomenda-se extrair dados de um período de 3 a 6 meses para garantir uma amostra representativa para análise sem causar carga excessiva no sistema. Use um parâmetro configurável para as datas de início e fim.
- Filtros Principais: Sempre filtre por Empresa (BUKRS) para limitar o escopo da extração. Também é fundamental filtrar pelos tipos de documentos de faturamento (VBRK-FKART) e tipos de documentos contábeis (BKPF-BLART) relevantes para incluir apenas faturas padrão e excluir outros tipos de documentos, como notas de crédito ou documentos internos.
- Desempenho: A extração de tabelas grandes como a BSEG pode ser lenta. Use filtros seletivos, evite extrair campos desnecessários e agende a extração para horários de menor movimento para minimizar o impacto no desempenho do sistema SAP de origem.
a Consulta de Exemplo config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off