Seu Template de Dados para Processamento de Devoluções e Reembolsos
Seu Template de Dados para Processamento de Devoluções e Reembolsos
- Atributos recomendados para coletar
- Atividades-chave a monitorizar
- Orientação para Extração
Atributos de Processamento de Devoluções e Reembolsos
| Nome | Descrição | ||
|---|---|---|---|
| ID do Caso de Devolução ReturnCaseId | O identificador exclusivo da solicitação de devolução, que vincula todas as atividades e documentos relacionados. | ||
| Descrição O ID do Caso de Devolução é a chave primária para rastrear todo o ciclo de vida, da solicitação ao encerramento. Cada ID refere-se a uma devolução específica, agrupando eventos como criação da ordem, entrega, inspeção e emissão da nota de crédito. Na análise de processos, esse atributo é a base para construir o mapa do fluxo. Ele permite agrupar eventos isolados em jornadas completas, facilitando a análise de variantes, tempos de ciclo e gargalos em cada caso individual. Por que é importante Este é o identificador de caso essencial que une todas as etapas da devolução, permitindo analisar o fluxo e o desempenho do processo de ponta a ponta. Onde obter Geralmente é o número da Ordem de Devolução (módulo SD). Fica na tabela VBAK (campo VBELN), onde a categoria do documento (VBTYP) é 'H'. Exemplos 600001236000045660000789 | |||
| Nome da Atividade ActivityName | O nome da etapa ou evento de negócio específico ocorrido no fluxo de devolução. | ||
| Descrição Este atributo descreve uma ação ou mudança de status (ex: 'Ordem de Devolução Criada' ou 'Nota de Crédito Criada'). Essas atividades são os pilares do seu mapa de processo. Analisar a sequência e a frequência desses eventos revela os caminhos mais comuns, desvios e loops de retrabalho. É fundamental para entender a ordem dos fatos em cada caso, servindo de base para toda a análise de Process Mining. Por que é importante Atividades definem as etapas do processo. Analisar sua sequência, duração e frequência é a base do Process Mining e revela como o trabalho é feito na prática. Onde obter Derivado de mudanças de status (VBUK/VBUP), criação de documentos (VBAK, LIKP, VBRK) ou logs de modificação (CDHDR/CDPOS). Exemplos Ordem de Devolução CriadaEntrada de mercadorias lançadaNota de Crédito CriadaItem da Ordem de Devolução Concluído | |||
| Tempo do Evento EventTime | A data e hora exatas em que a atividade ocorreu. | ||
| Descrição Registra o exato momento em que um evento ocorreu. É marcado em cada atividade, gerando a sequência cronológica do caso. O Event Time é crucial para análises de tempo: cálculo de ciclos, identificação de gargalos de espera e medição da duração total. Com ele, você analisa a performance e valida o cumprimento dos SLAs. Por que é importante Este timestamp é vital para calcular prazos, analisar a performance, localizar gargalos e entender a cronologia de cada devolução. Onde obter Extraído de diversos campos de data e hora nas tabelas do SAP. Para eventos de criação, utiliza-se frequentemente os campos ERDAT e ERZET (ex: na VBAK). Para eventos de alteração, os dados vêm de UDATE e UTIME na tabela CDHDR. Exemplos 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| Sistema de Origem SourceSystem | O sistema do qual os dados foram extraídos. | ||
| Descrição Este atributo identifica a origem dos dados, algo vital em ambientes com vários sistemas, garantindo integridade e contexto. Na análise, serve para segmentar ou filtrar dados ao cruzar processos de origens distintas, confirmando que os eventos pertencem à aplicação correta, como o SAP ECC. Por que é importante Identifica a origem dos dados, fundamental para governança e análises que cruzam diferentes sistemas corporativos. Onde obter Valor estático definido na extração para identificar a instância do SAP ECC (ex: 'ECC_PROD_100'). Exemplos SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| Última Atualização de Dados LastDataUpdate | O carimbo de data/hora indicando quando os dados deste processo foram atualizados pela última vez. | ||
| Descrição Registra a data e hora da última extração ou atualização, garantindo transparência sobre a atualidade dos dados analisados. Isso é crucial para entender o frescor dos insights. Saber quão recentes são os dados impacta a relevância das descobertas, especialmente ao monitorar operações em tempo real. Por que é importante Indica a atualização dos dados, permitindo que os usuários saibam quão recente é a análise e quando será a próxima carga. Onde obter Atributo de metadados preenchido com o timestamp da execução da extração de dados. Exemplos 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Agente de Processamento ProcessingAgent | O ID de usuário do colaborador que executou a atividade. | ||
| Descrição Este atributo captura o usuário responsável por uma etapa, como criar a ordem de devolução ou lançar a entrada de mercadorias (campos 'Criado por' ou 'Alterado por'). Analisar o Agente de Processamento é essencial para gerir o desempenho e os recursos. Ajuda a identificar os melhores resultados, necessidades de treinamento e a balancear a carga de trabalho, sendo usado em dashboards de performance para comparar tempos de ciclo e produtividade. Por que é importante Monitora a participação dos usuários, permitindo analisar a performance do time, distribuir tarefas e identificar necessidades de treinamento ou melhores práticas. Onde obter Geralmente nos campos ERNAM ou AENAM nas tabelas VBAK, LIKP ou VBRK. Para alterações, use USERNAME na CDHDR. Exemplos CBURNSDSCRANTONJHALPERT | |||
| Canal de Devolução ReturnChannel | O canal por onde a devolução começou, como portal online, loja física ou central de atendimento. | ||
| Descrição Define a origem da solicitação (ex: portal web, loja física ou call center). Segmentar por Canal é vital para entender diferenças operacionais e alocar recursos. Devoluções em loja podem ter inspeções mais rápidas, mas documentações diferentes das online. É uma dimensão essencial para o dashboard de tendências de produtividade. Por que é importante Distingue o canal de origem da devolução, o que impacta o fluxo, recursos necessários e tempos de ciclo. Onde obter Geralmente não é um campo padrão e pode vir de campos customizados ou ser inferido via Organização de Vendas (VKORG) ou Canal de Distribuição (VTWEG). Consulte sua documentação SAP. Exemplos Portal OnlineNa lojaCall Center | |||
| Motivo da devolução ReturnReason | O código do motivo informado pelo cliente para a devolução. | ||
| Descrição Indica o motivo da devolução usando códigos predefinidos no SAP (ex: 'Dano no transporte' ou 'Item incorreto'). É uma dimensão vital para a análise de causa raiz. Ao filtrar o mapa ou KPIs por Motivo, você descobre se certas causas geram atrasos, falhas na inspeção ou desvios. Isso orienta melhorias na qualidade do produto, na logística ou nas vendas. Por que é importante Explica o porquê das devoluções, permitindo atacar a causa raiz (qualidade, logística ou descrição) para reduzir as taxas de retorno. Onde obter Encontrado no item do documento de vendas (VBAP), campo ABGRU (motivo de recusa). Exemplos 001 - Produto danificado002 - Produto incorreto005 - Atraso na entrega | |||
| Número do Material MaterialNumber | O identificador exclusivo do produto que está sendo devolvido. | ||
| Descrição O Material Number (SKU) especifica o item exato devolvido, permitindo análises detalhadas por produto. Ao analisar devoluções por Material, as empresas podem identificar produtos com altas taxas de retorno, o que pode indicar falhas de qualidade, descrições incorretas ou defeitos de fabricação. É um dado essencial para dashboards de impacto em estoque e para entender o fluxo de diferentes categorias de produto. Por que é importante Identifica quais produtos são devolvidos, sinalizando falhas de qualidade ou descrições incorretas no site. Onde obter Encontrado no item do documento de vendas (VBAP), campo MATNR. Exemplos RM-1025FG-2050-BACC-5591 | |||
| Valor do Reembolso Solicitado RequestedRefundAmount | O valor previsto do reembolso, geralmente baseado no valor líquido dos itens devolvidos. | ||
| Descrição Representa o valor monetário inicial da devolução na ordem. Serve como base para análise e conciliação. Esse valor é comparado ao 'Valor Real do Reembolso' para rastrear divergências. Analisá-lo ajuda a monitorar o impacto financeiro das devoluções e identificar falhas na precificação ou no cálculo de créditos. Por que é importante Estabelece o valor financeiro inicial da devolução, fundamental para rastrear discrepâncias e entender o montante total de mercadorias devolvidas. Onde obter Geralmente é o valor líquido do item na ordem. Fica na tabela VBAP (campo NETWR). Exemplos 150.0049,991250.75 | |||
| Valor real reembolsado ActualRefundAmount | O valor final creditado ao cliente, conforme lançado nos registros financeiros. | ||
| Descrição Este é o valor final de reembolso confirmado e lançado na contabilidade. Ele pode diferir do solicitado devido a taxas, ajustes de condição do item ou outras políticas. É um atributo-chave para monitorar divergências de valor. Comparar o valor real com o solicitado ajuda a identificar falhas sistêmicas no cálculo e na aprovação, garantindo a precisão das finanças. Por que é importante Representa o resultado financeiro final da devolução. A comparação com o valor solicitado ajuda a garantir a precisão e a identificar perdas financeiras. Onde obter Extraído do documento financeiro associado à nota de crédito. Geralmente encontrado na tabela BSEG (Segmento de Documento Contábil), campo WRBTR (Montante em moeda do documento), para o lançamento contábil correspondente. Exemplos 150.0045.001200,75 | |||
| Adesão à Política de Devolução ReturnPolicyAdherence | Indicador que mostra se a devolução cumpre todas as regras de negócio e políticas definidas. | ||
| Descrição Este atributo booleano indica se o caso seguiu as políticas padrão da empresa (ex: prazo de início, motivo válido ou aprovação necessária). Ele alimenta o dashboard de conformidade, permitindo medir a taxa de adesão e identificar quais regras são mais ignoradas, o que orienta melhorias no processo ou treinamentos focados. Por que é importante Mede a conformidade com as regras de negócio, ajudando a aplicar políticas de forma consistente e a sinalizar casos críticos. Onde obter Atributo derivado de regras de negócio. Ex: (Data de Início - Data da Compra) <= 30 dias E Motivo da Devolução não é nulo. Exemplos verdadeirofalse | |||
| Centro Plant | O local físico ou instalação onde o item devolvido é recebido e processado. | ||
| Descrição O Plant (Centro) no SAP representa um local físico, como um armazém ou CD. Nas devoluções, costuma ser o local de recepção e inspeção. Analisar o processo por Centro ajuda a identificar variações de desempenho entre as unidades. Isso revela quais armazéns são mais ágeis na inspeção, alimentando dashboards de eficiência e produtividade logística. Por que é importante Identifica o local físico que processa a devolução, permitindo comparar o desempenho entre diferentes centros de distribuição. Onde obter Encontrado no nível de item do pedido, tabela VBAP, campo WERKS. Exemplos PL01WH02DC05 | |||
| Código da Empresa CompanyCode | A entidade legal ou empresa responsável pela transação. | ||
| Descrição O Company Code (Empresa) representa uma unidade contábil independente no SAP. Todas as transações financeiras são lançadas em um código de empresa específico. Este atributo é essencial para relatórios financeiros e para segmentar o processo em organizações com múltiplas entidades. Analisar por Empresa permite comparar o desempenho das devoluções entre as diferentes entidades legais da corporação. Por que é importante Permite filtrar e comparar processos entre diferentes entidades legais (empresas), essencial para análise financeira. Onde obter Encontrado no cabeçalho do documento de vendas (VBAK), campo BUKRS_VF (empresa para faturamento). Exemplos 10002000US01 | |||
| Data Limite do SLA de Reembolso RefundSLATargetDate | A data prevista para o processamento do reembolso, de acordo com os acordos de nível de serviço (SLA). | ||
| Descrição Este atributo define o prazo para concluir o reembolso (ex: '5 dias úteis após a entrada da mercadoria'). Essa data-alvo é a referência para medir o desempenho real. É a base do dashboard de conformidade de SLA, permitindo monitorar o cumprimento das promessas aos clientes e identificar casos com risco de atraso. Por que é importante Define a meta de desempenho para o processamento de reembolsos, permitindo medir e reportar a conformidade com o SLA e priorizar casos atrasados. Onde obter Geralmente não é padrão SAP; deve ser derivado de regras de negócio (ex: data de entrada da MKPF mais um prazo definido). Verifique seus requisitos de negócio. Exemplos 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Divergência no Valor do Reembolso RefundAmountDiscrepancy | A diferença calculada entre o valor de reembolso real e o solicitado. | ||
| Descrição Métrica que quantifica a diferença entre o valor solicitado na ordem e o valor emitido na nota de crédito. Valores positivos podem indicar reembolsos parciais, enquanto negativos podem sugerir pagamentos excedentes. É a medida central para rastrear divergências financeiras. Ajuda a identificar rapidamente casos com desvios (por condição do item, taxas ou erros), garantindo maior controle financeiro e adesão às normas. Por que é importante Mede desvios financeiros no reembolso, ajudando a identificar erros de processamento, não conformidade com políticas ou vazamento de capital. Onde obter Campo calculado: Valor Real Reembolsado - Valor Solicitado. Exemplos 0.00-4.99-50.00 | |||
| Documento de Vendas Original OriginalSalesDocument | O número da ordem de venda original que gerou a devolução. | ||
| Descrição Fornece um link direto para a compra original, conectando a devolução aos detalhes da transação inicial. Esse vínculo é valioso para análises profundas: permite investigar por que certas ordens geram devoluções, conferir preços originais e entender o ciclo completo do pedido à devolução. Ajuda a descobrir se campanhas ou canais específicos têm taxas de retorno mais altas. Por que é importante Vincula a devolução à venda original, permitindo uma visão completa da transação e uma análise profunda de causa raiz. Onde obter Referência guardada no nível de item da ordem. Fica na tabela VBAP (campo VGBEL). Exemplos 100034561000987110012345 | |||
| Está em Conformidade com o SLA IsSLACompliant | Indicador que sinaliza se o reembolso foi processado dentro do prazo acordado (SLA). | ||
| Descrição Atributo booleano que compara a data real da atividade 'Reembolso Processado' com a 'Data Limite do SLA'. Resulta em 'verdadeiro' se o prazo foi cumprido e 'falso' caso contrário. Ele simplifica relatórios ao dar um resultado direto sobre o SLA de cada caso. Serve para calcular a taxa geral de conformidade e facilita o filtro para analisar apenas os casos que fugiram do padrão. Por que é importante Oferece um indicador binário claro do desempenho do SLA para cada caso, simplificando o monitoramento da conformidade e a geração de relatórios. Onde obter Atributo calculado. Lógica: 'Reembolso Processado' EventTime <= RefundSLATargetDate. Exemplos verdadeirofalse | |||
| ID do Cliente CustomerId | O identificador exclusivo do cliente que iniciou a devolução. | ||
| Descrição Identifica o cliente (Emissor da Ordem no SAP) que está devolvendo o produto, vinculando a transação aos dados mestres. Analisar por ID do Cliente revela quem devolve com frequência, o que pode indicar insatisfação ou uso indevido das políticas. Também permite cruzar dados de segmentação para entender se diferentes perfis de clientes têm comportamentos ou experiências distintas no processo. Por que é importante Vincula devoluções a clientes específicos, permitindo analisar comportamento, identificar usuários recorrentes e medir o impacto na fidelidade. Onde obter Encontrado no cabeçalho do documento de vendas (VBAK), campo KUNNR (emissor da ordem). Exemplos CUST-100432CUST-203991CUST-831102 | |||
| Número da Nota de Crédito CreditMemoNumber | O identificador exclusivo do documento de nota de crédito emitido para o reembolso. | ||
| Descrição A Nota de Crédito é o documento de faturamento oficial no SAP que formaliza o valor a ser pago ao cliente. Esse número identifica exclusivamente esse documento financeiro. Este atributo é fundamental para a conciliação financeira e para o rastreamento do fluxo, da devolução operacional até a liquidação contábil. Funciona como um marco no processo e é usado para localizar documentos relacionados a atributos como 'Valor Real do Reembolso'. Por que é importante Fornece um link direto para o documento financeiro que autoriza o reembolso ao cliente, sendo essencial para auditoria financeira e conciliação. Onde obter A nota de crédito é um documento de faturamento. Seu número está na tabela VBRK (Cabeçalho de Faturamento), campo VBELN. O vínculo é estabelecido via fluxo de documentos da ordem de devolução. Exemplos 900011229000334490005566 | |||
| Status da Ordem de Devolução ReturnOrderStatus | O status geral de processamento do caso da ordem de devolução. | ||
| Descrição Oferece uma visão do estado atual do caso ('Aberto', 'Em Processamento' ou 'Concluído'), com base nos status de cabeçalho ou item do documento. Na análise, serve para filtrar casos ativos ou encerrados. Ajuda a monitorar a carga de trabalho geral e o progresso das pendências, fornecendo um panorama rápido do desfecho de cada jornada. Por que é importante Oferece uma visão de alto nível de onde um caso está em seu ciclo de vida, permitindo filtrar e analisar devoluções abertas, em andamento ou encerradas. Onde obter Extraído dos campos de status nas tabelas VBUK (Cabeçalho) e VBUP (Item). Por exemplo, VBUK-GBSTK indica o status geral do processamento. Exemplos AbertoEm ProcessamentoConcluído | |||
| Tempo de Ciclo Ponta a Ponta EndToEndCycleTime | O tempo total decorrido da primeira à última atividade do caso de devolução. | ||
| Descrição Métrica de caso calculada como o intervalo entre o primeiro evento (ex: 'Ordem Criada') e o último (ex: 'Nota de Crédito Compensada'). Indica o tempo total da devolução no fluxo. É o principal KPI de eficiência. Usado em análises de tendência para medir melhorias, ajuda a entender quais fatores (como tipo de produto ou motivo) estão ligados a resoluções mais lentas ou rápidas. Por que é importante Mede a duração total da devolução, sendo o principal indicador de eficiência e satisfação do cliente. Onde obter Métrica calculada: timestamp da última atividade do caso menos o timestamp da primeira. Exemplos 5 dias e 4 horas12 dias e 8 horas3 dias e 2 horas | |||
Atividades de Processamento de Devoluções e Reembolsos
| Atividade | Descrição | ||
|---|---|---|---|
| Decisão de uso registrada | Após a inspeção, uma decisão formal é tomada sobre a condição do item. Isso define o destino: retorno ao estoque, sucata ou reparo. | ||
| Por que é importante Esta atividade é vital para entender a eficiência da inspeção. A decisão tomada aqui impacta diretamente o valor a reembolsar e a gestão do estoque. Onde obter Se o SAP QM for utilizado, este evento é capturado na tabela QAVE (decisão de utilização). A data da decisão está em QAVE-VDATUM. O vínculo com a remessa está na QALS. Captura Use a data de decisão de utilização (VDATUM) da tabela QAVE, via lote de inspeção (QALS-PRUEFLOS). Tipo de evento explicit | |||
| Entrada de mercadorias lançada | Esta atividade ocorre na recepção física do item no armazém. É capturada pelo lançamento de um documento de movimentação de mercadorias vinculado à remessa de devolução. | ||
| Por que é importante Marco que indica que a empresa recebeu o item devolvido. Inicia a inspeção física e impacta a precisão do estoque. Onde obter Pode ser inferido pelo status de movimento de mercadorias do item na tabela VBUP (ex: WBSTA = 'C'). O timestamp exato fica no cabeçalho do documento de material (MKPF-BUDAT) do recebimento correspondente. Captura Busque a data de lançamento (BUDAT) na tabela MKPF para o documento de material vinculado à remessa de devolução. Tipo de evento inferred | |||
| Nota de Crédito Criada | Geração do documento de faturamento (nota de crédito) para autorizar o crédito ao cliente. É o documento financeiro oficial que formaliza o valor do reembolso. | ||
| Por que é importante Marco financeiro importante. Analisar o tempo para criar a nota de crédito ajuda a identificar atrasos no financeiro após a recepção e inspeção dos itens. Onde obter Evento explícito na tabela VBRK (Cabeçalho de Faturamento). A data de criação é VBRK-ERDAT. A nota de crédito é vinculada à ordem ou solicitação no fluxo de documentos. Captura Use o timestamp de criação (ERDAT) da tabela VBRK para o faturamento correspondente. Tipo de evento explicit | |||
| Nota de Crédito Lançada em FI | A nota de crédito é liberada para a contabilidade financeira, tornando-se um lançamento oficial. Essa etapa dispara o processo de pagamento real do reembolso ao cliente. | ||
| Por que é importante Esta atividade marca o reconhecimento financeiro do reembolso. Atrasos entre a criação da nota de crédito e o seu lançamento podem retardar o pagamento real ao cliente. Onde obter Evento inferido quando o status de lançamento no faturamento (VBRK-RFBSK) muda para 'C' (Documento criado). A data real de criação contábil fica na tabela BKPF. Captura Identifique o timestamp de quando VBRK-RFBSK muda para 'C' ou use a data de criação (CPUDT) do documento contábil vinculado (BKPF). Tipo de evento inferred | |||
| Ordem de Devolução Concluída | Esta atividade marca o fim do processo sob o ponto de vista de Vendas e Distribuição (SD). Ocorre quando todos os itens da ordem de devolução estão processados e encerrados. | ||
| Por que é importante Evento final principal do processo. Medir o tempo desde a 'Ordem de Devolução Criada' até aqui fornece o tempo de ciclo total do caso. Onde obter Evento inferido das tabelas de status. Capturado quando o status geral do cabeçalho (VBUK-GBSTK) muda para 'C' (Totalmente processado). Captura Identifique o timestamp nas tabelas CDHDR/CDPOS de quando o campo VBUK-GBSTK (status do cabeçalho) muda para 'C'. Tipo de evento inferred | |||
| Ordem de Devolução Criada | Esta atividade marca o início da devolução após a solicitação do cliente. É capturada na criação de um novo documento de vendas do tipo 'Devolução' (ex: RE) no SAP ECC. | ||
| Por que é importante Evento inicial principal. Analisar o tempo desta etapa para as seguintes ajuda a medir o ciclo total e identificar atrasos no início do processamento. Onde obter Evento explícito na tabela VBAK (Cabeçalho de Vendas). O timestamp de criação está nos campos ERDAT e ERZET para o documento correspondente com tipo de ordem 'RE'. Captura Use o timestamp de criação (ERDAT, ERZET) da tabela VBAK para documentos tipo 'RE'. Tipo de evento explicit | |||
| Bloqueio da Ordem de Devolução Removido | Representa a aprovação da solicitação de devolução, permitindo que ela avance no fluxo. Isso geralmente é capturado por uma alteração no status do documento ou pela remoção de um bloqueio de remessa ou faturamento. | ||
| Por que é importante Esta atividade é um marco de aprovação. Medir o tempo até este passo ajuda a identificar gargalos na autorização e no fluxo de aprovação das devoluções. Onde obter Evento inferido via logs de alteração. Verifique as tabelas CDHDR e CDPOS para mudanças em campos de bloqueio ou status na VBAK, VBAP, VBUK ou VBUP. Captura Identifique o timestamp nas tabelas de modificação (CDHDR/CDPOS) de quando o status de bloqueio foi removido. Tipo de evento inferred | |||
| Entrega de Devolução Criada | Criação da remessa para gerenciar o recebimento físico dos bens devolvidos, marcando o início da etapa logística. | ||
| Por que é importante Mapeia a transição do fluxo administrativo para a logística. Atrasos aqui afetam o planejamento do armazém e o ciclo total da devolução. Onde obter Evento explícito na tabela LIKP (Cabeçalho de Remessa). O timestamp de criação está em LIKP-ERDAT. O vínculo com a ordem de devolução fica na tabela LIPS (LIPS-VGBEL). Captura Use o timestamp de criação (ERDAT) da tabela LIKP para a remessa da ordem de devolução. Tipo de evento explicit | |||
| Item da Ordem de Devolução Concluído | Um item do pedido é marcado como processado. Geralmente ocorre após a conclusão de todos os documentos logísticos e financeiros vinculados. | ||
| Por que é importante Rastrear por item ajuda a ver quais produtos ou motivos causam mais atrasos, dando uma visão detalhada da conclusão do processo. Onde obter Evento inferido das tabelas de status. Capturado quando o status geral do item (VBUP-GBSTK) muda para 'C' (Totalmente processado). Captura Identifique o timestamp nas tabelas CDHDR/CDPOS de quando o campo VBUP-GBSTK (status do item) muda para 'C'. Tipo de evento inferred | |||
| Item da Ordem de Devolução Rejeitado | Um item específico do pedido é rejeitado na revisão ou após inspeção, encerrando o processo de reembolso para esse item. | ||
| Por que é importante Analisar as rejeições ajuda a identificar solicitações inválidas e a ajustar a comunicação das políticas ao cliente. É um caminho crítico que não resulta em reembolso. Onde obter Evento inferido. Capturado por um código de 'Motivo de Rejeição' no item (tabela VBAP-ABGRU). O timestamp deve vir dos logs de alteração. Captura Identifique o timestamp nas tabelas CDHDR/CDPOS de quando o campo VBAP-ABGRU (motivo de recusa) é preenchido. Tipo de evento inferred | |||
| Nota de Crédito Compensada | O item de crédito em aberto é compensado, geralmente via pagamento ao cliente. Esse evento marca o encerramento financeiro final do reembolso. | ||
| Por que é importante Esta atividade confirma a saída do dinheiro e encerra o lado financeiro. É o desfecho real da jornada de reembolso sob a ótica do cliente. Onde obter Evento explícito do módulo FI. A data de compensação do documento contábil fica na tabela BSEG (campo AUGDT) para o item correspondente do cliente. Captura Use a data de compensação (AUGDT) das tabelas BSEG ou BSAD para o documento contábil da nota de crédito. Tipo de evento explicit | |||
| Solicitação de Nota de Crédito Criada | Criação da solicitação de nota de crédito. Em muitas configurações, o próprio pedido de devolução atua como a solicitação de nota de crédito. | ||
| Por que é importante Início formal da liquidação financeira. Serve como gatilho para aprovações financeiras e criação de documentos. Onde obter Pode ser um evento explícito na VBAK para um documento 'Solicitação de Nota de Crédito' (ex: CR), ou o mesmo evento de 'Ordem de Devolução Criada' se o faturamento for relacionado à ordem. Captura Use o timestamp de criação (ERDAT) da VBAK para documentos 'CR' ou repita o evento da ordem. Tipo de evento explicit | |||
Guias de Extração
Etapas
- Criar Programa ABAP: Use a transação
SE38para criar um novo programa ABAP executável (ex:Z_PM_RETURN_EXTRACTION). Atribua um título descritivo e salve como objeto local ou em um pacote de desenvolvimento. - Definir Tela de Seleção: No programa, defina uma tela de seleção para filtros. Os principais são o intervalo de datas de criação dos pedidos (
S_ERDAT), o tipo de documento de vendas para devoluções (S_AUART, ex: 'RE') e a empresa (P_BUKRS). - Definir Estruturas de Dados: Crie um tipo de estrutura local que siga o formato do event log. Inclua campos como
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReason, entre outros. - Implementar Lógica de Seleção: Escreva a lógica para selecionar os dados das 12 atividades requeridas, consultando tabelas como VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR e CDPOS. Use a tabela de fluxo de documentos (VBFA) para vincular remessas e notas de crédito ao pedido original.
- Extrair 'Pedido de Devolução Criado': Selecione os registros das tabelas
VBAKeVBAPconforme os filtros. O número do documento de vendas (VBAK-VBELN) será oReturnCaseId. - Extrair Mudanças de Status e Eventos: Para atividades como 'Bloqueio de Pedido Removido' ou 'Item de Devolução Rejeitado', consulte as tabelas de modificação (
CDHDR,CDPOS) ou campos de status como oABGRUnaVBAP. Para atividades logísticas e financeiras, utilizeLIKP,MKPF,VBRKeBKPF, vinculando-as viaVBFA. - Popular a Tabela do Event Log: Para cada atividade, crie um registro na tabela interna mapeando os campos do SAP para a estrutura final (ex: mapeie
VBAK-ERNAMparaProcessingAgente a combinação deVBAK-ERDATeVBAK-ERZETparaEventTime). - Consolidar Atividades: Garanta que cada comando SELECT anexe os resultados em uma única tabela interna mestre. Isso criará a estrutura flat onde cada linha representa um evento.
- Tratar Timestamps e Sistema: Utilize os campos de sistema
SY-DATUMeSY-UZEITpara o campoLastDataUpdateeSY-SYSIDpara oSourceSystem. - Implementar Saída (ALV): Adicione a funcionalidade de exibir os resultados em um grid ALV usando funções como
REUSE_ALV_GRID_DISPLAY. Inclua a opção de baixar a tabela interna como arquivo CSV ou texto para a máquina local. - Executar e Exportar: Rode o programa via
SE38, insira os critérios e execute. Após a exibição, use a função de exportação para salvar o arquivo do event log, preferencialmente no formato CSV com cabeçalho.
Configuração
- Intervalo de Datas: Na tela de seleção, especifique o intervalo para a data de criação do pedido de devolução. Recomendamos de 3 a 6 meses para uma análise inicial, equilibrando volume de dados e profundidade de insights.
- Tipo de Documento de Devolução: Filtre pelo tipo de documento de vendas específico para devoluções, como 'RE' (Devoluções) ou 'CR' (Solicitação de Nota de Crédito). Este filtro é essencial para isolar o processo correto. Insira esses valores na opção de seleção
S_AUART. - Empresa (Company Code): Especifique a empresa (
P_BUKRS) para limitar os dados a uma entidade legal específica. Isso é fundamental em ambientes com múltiplas empresas. - Pré-requisitos: O usuário que executará o programa precisa de autorização para a transação
SE38(execução de programas) e acesso às tabelas base de SD, MM e FI (ex: VBAK, LIKP, VBRK, BKPF, CDHDR). O desenvolvimento exige a função de desenvolvedor ABAP. - Desempenho: Para conjuntos de dados muito grandes, o programa pode demorar para rodar. Considere executá-lo como um job de background (
SM36) e gravar a saída no sistema de arquivos do servidor de aplicação em vez de visualizá-la online.
a Consulta de Exemplo abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Etapas
- Pré-requisitos: Use um usuário de banco de dados com acesso de leitura às tabelas do SAP ECC (módulos SD, MM e FI). Utilize uma ferramenta como DBeaver, SAP HANA Studio ou Oracle SQL Developer.
- Identificar Particularidades: Identifique os tipos de documentos de devolução usados na sua empresa. A query possui o marcador
[YOUR_RETURN_ORDER_TYPES], que deve ser substituído por valores como 'RE'. - Preparar a Query: Copie a consulta SQL completa fornecida na seção 'query' para o seu cliente SQL.
- Configurar Parâmetros: Localize o CTE
BaseReturnOrdersno início da query. NoWHERE, altere os campos[START_DATE]e[END_DATE]para o período desejado. Ajuste a lista de tipos de pedidos e, se necessário, o código da empresa (BUKRS_VF). - Executar a Consulta: Rode a query no banco de dados do SAP ECC. O tempo de resposta depende do volume de dados do período selecionado.
- Revisar Dados Brutos: Verifique se as colunas
ReturnCaseId,ActivityNameeEventTimeestão preenchidas corretamente e se há diversidade de atividades nos resultados. - Exportar para CSV: Exporte o resultado para um arquivo CSV utilizando codificação UTF-8 para evitar problemas com caracteres especiais.
- Validar Cabeçalhos: Abra o CSV e confirme se os nomes das colunas batem com os requisitos:
ReturnCaseId,ActivityName,EventTime,SourceSystem, etc. Corrija se o exportador do SQL tiver alterado os nomes. - Upload Final: Carregue o arquivo CSV finalizado na plataforma ProcessMind para análise.
Configuração
- Tipos de Documentos de Devolução: A consulta deve ser configurada com os tipos de documentos de vendas que representam devoluções no seu SAP. Substitua o marcador
[YOUR_RETURN_ORDER_TYPES]pelos valores reais (ex: 'RE' ou tipos 'Z' customizados). - Intervalo de Datas: É crucial definir um período adequado. Recomendamos extrair de 3 a 6 meses de dados para a análise inicial. Configure isso nos marcadores
[START_DATE]e[END_DATE]no formato 'AAAAMMDD'. - Empresa (Company Code): Em organizações com várias empresas, filtre os dados para focar a análise. Adicione um filtro como
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'no CTE inicial. - Dialeto do Banco de Dados: A query utiliza funções SQL comuns. Contudo, conversões de data/hora como
TO_TIMESTAMPe concatenações (CONCAT) podem exigir ajustes de sintaxe dependendo do seu banco (ex: Oracle, HANA, DB2). - Autorizações Necessárias: O usuário do banco precisa de acesso de leitura às tabelas: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR e CDPOS.
a Consulta de Exemplo sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR;