Seu Template de Dados de Processamento de Devoluções e Reembolsos
Seu Template de Dados de Processamento de Devoluções e Reembolsos
- Campos de dados recomendados para coleta
- Etapas principais para rastrear
- Orientações para extração de dados
Atributos do Processamento de Devoluções e Reembolsos
| Nome | Descrição | ||
|---|---|---|---|
| ID do caso de devolução ReturnCaseId | O identificador exclusivo do caso de devolução e reembolso, vinculando todas as atividades relacionadas. | ||
| Descrição O ID do Caso de Devolução serve como o identificador principal de cada instância do processo. Ele vincula todas as atividades associadas a uma solicitação de devolução ou reembolso, desde a criação inicial até o fechamento. Na análise de processos, esse ID é fundamental para reconstruir a jornada ponta a ponta de cada devolução, permitindo medir tempos de ciclo total e analisar variações. Todos os eventos e métricas são agregados usando este identificador. Por que é importante Este é o identificador essencial do caso que conecta todas as etapas, permitindo rastrear e analisar cada devolução do início ao fim. Onde obter Normalmente é o número da Autorização de Devolução (RMA) ou o número da Ordem de Venda do tipo 'Pedido Devolvido' no módulo de 'Vendas e Marketing'. Encontrado em tabelas como 'SalesTable'. Exemplos RMA-001234RMA-001235RMA-001236 | |||
| Tempo do Evento EventTime | O timestamp que indica quando uma atividade ou evento específico ocorreu. | ||
| Descrição O Event Time, ou timestamp, registra a data e hora exata em que uma atividade ocorreu. Cada atividade no log de eventos possui um timestamp correspondente, o que fornece a ordem cronológica dos eventos. Este atributo é fundamental para toda análise de Process Mining baseada em tempo. Ele é usado para calcular tempos de ciclo entre atividades, identificar tempos de espera e gargalos, medir a duração total do caso e verificar o cumprimento de SLAs. A precisão dos timestamps impacta diretamente a confiabilidade de qualquer análise de desempenho. Por que é importante Este timestamp é essencial para calcular todas as métricas baseadas em duração, como tempos de ciclo e de espera, fundamentais para a análise de desempenho. Onde obter Corresponde aos campos de data de criação ou modificação em várias tabelas, como 'SalesTable.createdDateTime' para criação de pedidos ou 'WMSJournalTrans.createdDateTime' para diários de armazém. Exemplos 2023-10-26T10:00:00Z2023-10-26T14:30:15Z2023-10-27T09:05:42Z | |||
| Nome da Atividade ActivityName | O nome do evento de negócio ou tarefa específica que ocorreu no processo de devolução e reembolso. | ||
| Descrição Este atributo descreve uma etapa ou evento específico no ciclo de devolução, como 'Pedido Criado' ou 'Nota de Crédito Lançada'. Cada atividade é um ponto distinto registrado no sistema. Analisar a sequência e frequência dessas atividades é a base do Process Mining. Isso permite visualizar mapas de processo, identificar gargalos e descobrir variantes comuns ou raras. O conjunto de atividades define o escopo do que está sendo analisado. Por que é importante Define as etapas do processo, permitindo visualizar o fluxo e identificar gargalos, retrabalhos e desvios. Onde obter Este é um atributo conceitual derivado de eventos do sistema. Pode ser gerado mapeando mudanças de status em tabelas como 'SalesTable' e 'WMSJournalTable' para nomes mais amigáveis. Exemplos Pedido de devolução criadoItem recebidoCódigo de Disposição AplicadoNota de Crédito Lançada | |||
| Canal de devolução ReturnChannel | O método ou canal pelo qual o cliente iniciou a devolução. | ||
| Descrição Este atributo especifica o canal usado para iniciar a devolução, como 'Portal Online', 'Loja Física', 'Central de Atendimento' ou 'Correio'. Segmentar a análise por canal ajuda a avaliar o desempenho e a eficiência de cada um. A empresa pode comparar tempos de ciclo, custos e satisfação do cliente entre canais para identificar melhores práticas e áreas que precisam de investimento. É o ponto central do dashboard de 'Desempenho de Utilização de Canais de Devolução'. Por que é importante Permite comparar o desempenho entre diferentes canais de devolução, ajudando a focar nos mais eficientes e econômicos. Onde obter Esta informação pode estar no cabeçalho do pedido de devolução ('SalesTable') ou ser derivada do usuário que criou o pedido. Pode exigir uma lógica customizada ou um campo específico. Exemplos Portal WebQuiosque em LojaSuporte ao Cliente | |||
| Código de Desfecho DispositionCode | Um código que indica o resultado da inspeção do item e a próxima ação a ser tomada. | ||
| Descrição O Código de Disposição é atribuído durante a inspeção de qualidade de um item devolvido. Ele define o próximo passo do processo, como 'Crédito', 'Substituição', 'Sucata' ou 'Devolver ao Cliente'. Este atributo é um ponto de decisão crítico. Analisá-lo permite que a empresa entenda os resultados das devoluções, acompanhe o impacto financeiro de descartar itens e avalie a eficiência de diferentes caminhos de resolução. Por que é importante Este código define o caminho que um caso de devolução seguirá após a inspeção, sendo crucial para analisar as variantes do processo e seus resultados de negócio. Onde obter Este é um campo essencial no módulo de gestão de qualidade, associado ao processamento de Ordens de Qualidade ou Inspeção. Exemplos CRDTREPL-DSucata (Scrap)RTV | |||
| Código do motivo da devolução ReturnReasonCode | O motivo fornecido pelo cliente para devolver o item. | ||
| Descrição O Código do Motivo da Devolução captura o motivo declarado pelo cliente, como 'Item Defeituoso', 'Tamanho Errado' ou 'Não condiz com a descrição'. Analisar esses motivos é vital para identificar a causa raiz de problemas de qualidade, marketing ou logística. Os insights obtidos ajudam a melhorar o design do produto e as operações da cadeia de suprimentos, reduzindo devoluções futuras. Por que é importante Fornece insights críticos sobre por que as devoluções ocorrem, permitindo análises de causa raiz para reduzir taxas de retorno. Onde obter Isso geralmente é armazenado no nível da linha do pedido de devolução. Procure pelos campos de código de motivo na tabela 'SalesLine'. Exemplos DEFEITOITEM_ERRADONAO_DESEJA_MAISDANIFICADO_EM_TRANSITO | |||
| ID do Produto ProductId | O identificador exclusivo do produto que está sendo devolvido. | ||
| Descrição O ID do Produto, frequentemente o SKU, identifica o item específico que está sendo devolvido. Cada linha de pedido de devolução está associada a um ID de Produto. Analisar devoluções por produto é essencial para identificar itens com altas taxas de devolução, o que pode indicar problemas de qualidade, descrições imprecisas ou defeitos de fabricação. Essa análise ajuda a priorizar investigações e melhorias nos produtos. Por que é importante Permite analisar devoluções por produto, ajudando a identificar itens com problemas de qualidade ou alto volume de retorno. Onde obter Isso corresponde ao campo 'ItemId' na tabela 'SalesLine' para o pedido de devolução. Exemplos SKU-A-123SKU-B-456SKU-C-789 | |||
| Usuário Responsável ResponsibleUser | O usuário ou funcionário que realizou ou é responsável por uma atividade específica. | ||
| Descrição Este atributo identifica o usuário responsável por executar uma etapa. Pode ser o funcionário do depósito, o inspetor de qualidade ou o analista financeiro. Analisar o processo por usuário ajuda a entender a distribuição de carga de trabalho, identificar os melhores desempenhos e necessidades de treinamento. Também serve para investigar casos tratados por equipes específicas e garantir a segregação de funções. Por que é importante Permite analisar a distribuição de carga de trabalho, o desempenho individual ou por equipe e identificar necessidades de treinamento ou alocação. Onde obter Encontrado nos campos 'criado por' ou 'modificado por' nos registros de transação, como 'SalesTable.createdBy' ou IDs de usuário vinculados. Exemplos Alice.WBob.JChris.P | |||
| Adere à Política IsPolicyAdherent | Um sinalizador indicando se a aprovação da devolução cumpre as políticas de devolução estabelecidas. | ||
| Descrição Este atributo booleano indica se uma devolução cumpre os critérios da política da empresa, como prazo, condição do item ou motivo. Ele alimenta o dashboard de 'Visão Geral de Conformidade de Aprovação' e o KPI de 'Taxa de Devoluções em Conformidade'. Isso permite quantificar a conformidade, identificar exceções aprovadas e analisar sua frequência e motivos, o que é vital para governança e controle de custos. Por que é importante Mede diretamente a conformidade com as regras de negócio, ajudando a reduzir aprovações indevidas que causam perda de receita. Onde obter Este é um atributo derivado. A lógica deve ser construída comparando dados da devolução (ex: data da devolução vs data da compra) com as regras de negócio predefinidas. Exemplos verdadeirofalse | |||
| Data Limite de SLA de Reembolso RefundSlaTargetDate | A data prevista para que o caso de devolução e reembolso seja totalmente resolvido. | ||
| Descrição Este atributo define o prazo do SLA para resolver um caso de devolução. É a data em que o cliente deve ter a solução final, como o reembolso lançado ou a substituição enviada. Essa data-alvo é essencial para monitorar o cumprimento de prazos. Ela alimenta o KPI de 'Taxa de Adesão ao SLA de Resolução' e o dashboard correspondente. Comparar esta data com a conclusão real ajuda a identificar violações de SLA e gerenciar casos pendentes. Por que é importante É o referencial de desempenho, permitindo rastrear o cumprimento de SLAs e identificar casos atrasados. Onde obter Este pode não ser um campo padrão. Geralmente é calculado com base na data de criação mais o período de SLA (ex: 14 dias), podendo estar em um campo customizado. Exemplos 2023-11-10T23:59:59Z2023-11-15T23:59:59Z | |||
| End Time EndTime | O carimbo de data/hora (timestamp) que indica quando uma atividade específica foi concluída. | ||
| Descrição O End Time (Hora de Término) representa o timestamp de conclusão de uma atividade. Enquanto o StartTime marca o início, o EndTime marca o fim, permitindo calcular o tempo de processamento da tarefa. Este atributo é vital para análises detalhadas de performance, especialmente em tarefas com duração mensurável, como a 'Inspeção de Item'. Ao comparar os dois tempos, os analistas podem medir com precisão o tempo ativo de trabalho, distinguindo-o do tempo de espera. Isso ajuda a localizar ineficiências dentro de atividades específicas. Por que é importante Possibilita o cálculo do tempo de processamento ativo de cada atividade, diferenciando o tempo de espera do trabalho real. Onde obter Muitas vezes precisa ser derivado. Pode ser, por exemplo, o 'modifiedDateTime' de uma mudança de status que encerra uma atividade ou o StartTime da atividade seguinte. Exemplos 2023-10-26T10:15:00Z2023-10-26T14:45:20Z2023-10-27T09:55:12Z | |||
| ID da Nota de Crédito CreditNoteId | O identificador exclusivo do documento de nota de crédito gerado para um reembolso. | ||
| Descrição Quando um reembolso é processado, uma nota de crédito é gerada. Este atributo armazena o ID exclusivo desse documento. Esse ID vincula o processo operacional aos registros financeiros no sistema contábil. É útil para auditoria e análises profundas de discrepâncias financeiras, permitindo rastrear o caso de devolução até a transação financeira que o liquidou. Por que é importante Vincula o processo operacional de devolução à transação financeira, o que é vital para auditoria e conciliação. Onde obter O número da nota de crédito geralmente é encontrado no campo 'InvoiceId' da tabela 'CustInvoiceJour', onde o tipo de transação é 'Nota de crédito'. Isso pode ser vinculado ao pedido de devolução. Exemplos CN-10056CN-10057CN-10058 | |||
| ID do Armazém WarehouseId | O identificador do depósito ou local onde o item devolvido foi recebido. | ||
| Descrição Este atributo identifica o depósito físico ou centro de devolução que processa o item. Unidades diferentes podem ter processos e níveis de desempenho distintos. Analisar por depósito permite comparar o desempenho entre locais (benchmarking). Isso ajuda a identificar as unidades mais eficientes, destacar gargalos regionais e embasar decisões sobre alocação de recursos e padronização de processos na rede logística. Por que é importante Permite comparar o desempenho entre diferentes armazéns ou centros de devolução, identificando gargalos regionais ou melhores práticas. Onde obter Esta informação é armazenada no campo 'InventLocationId' em transações de estoque, como o Diário de Chegada ('WMSJournalTable') ou na 'SalesLine'. Exemplos WH-EASTWH-WESTCENTRAL-DC | |||
| ID do Cliente CustomerId | O identificador exclusivo do cliente que iniciou a devolução. | ||
| Descrição O ID do Cliente é o identificador exclusivo da conta do cliente associada à devolução. Isso vincula a transação de retorno a um cliente específico no CRM ou banco de dados. Analisar devoluções por cliente permite identificar atividades incomuns que podem indicar fraude ou insatisfação crônica. Também serve para segmentar clientes, permitindo, por exemplo, oferecer serviços de devolução premium para clientes de alto valor. Por que é importante Vincula a devolução a um cliente específico, permitindo analisar padrões de retorno ou possíveis fraudes no nível do cliente. Onde obter Este é o campo 'CustAccount' na 'SalesTable' para o pedido de devolução. Exemplos CUST-00045CUST-00192CUST-00315 | |||
| Sistema de Origem SourceSystem | O sistema de informação de onde os dados do evento foram extraídos. | ||
| Descrição Este atributo identifica o sistema de origem dos dados. Neste contexto, será principalmente o 'Microsoft Dynamics 365'. Em grandes empresas, um processo pode passar por vários sistemas. Especificar a origem de cada evento é crucial para a governança de dados, solução de problemas de extração e entendimento do cenário tecnológico, confirmando a procedência do que está sendo analisado. Por que é importante Fornece contexto vital sobre a origem dos dados, essencial para governança, validação e compreensão do ecossistema do processo. Onde obter Geralmente é um valor estático adicionado durante o processo de extração, transformação e carga (ETL) para rotular a origem do conjunto de dados. Exemplos Microsoft Dynamics 365 F&OD365-PROD | |||
| Status do pedido de devolução ReturnOrderStatus | O status geral do pedido de devolução no momento do evento. | ||
| Descrição Este atributo indica o status atual do cabeçalho do pedido de devolução, como 'Aberto', 'Faturado' ou 'Cancelado'. Ele oferece uma visão macro do ciclo de vida do caso. Enquanto as atividades dão detalhes granulares, o status geral é útil para filtrar casos. Por exemplo, um analista pode focar apenas em casos 'Abertos' para entender a carga de trabalho atual ou analisar o fluxo de casos que acabaram sendo 'Cancelados'. Por que é importante Fornece um resumo de alto nível do estado do caso, útil para filtrar e entender resultados como cancelamentos. Onde obter Esta informação está localizada nos campos 'SalesStatus' ou 'DocumentStatus' da 'SalesTable'. Exemplos Ordem em abertoEntregueFaturadoCancelado | |||
| Status do SLA SlaStatus | Indica se o caso foi resolvido dentro da meta do Acordo de Nível de Serviço (SLA). | ||
| Descrição Este atributo calculado fornece um status simples de conformidade com o SLA, como 'No Prazo' ou 'Atrasado'. Ele é definido comparando a data da atividade final com a 'RefundSlaTargetDate' (data-alvo de reembolso). Isso simplifica os relatórios nos dashboards de SLA. Em vez de o usuário ter que comparar datas manualmente, ele já vê o status direto, o que permite filtros rápidos para calcular a 'Taxa de Adesão ao SLA de Resolução' geral. Por que é importante Oferece um indicador visual simples de conformidade com o SLA, facilitando o filtro de casos atrasados para análise das causas. Onde obter Este é um atributo derivado, calculado comparando o timestamp da resolução final com o atributo 'RefundSlaTargetDate'. Exemplos No PrazoAtrasado | |||
| Tipo de devolução ReturnType | Categoriza a devolução com base no resultado esperado, como Reembolso ou Substituição. | ||
| Descrição Este atributo classifica o caso de devolução com base na resolução buscada. Tipos comuns incluem 'Reembolso' monetário, troca por um item de 'Substituição' ou 'Conserto'. Essa categorização é útil para analisar caminhos diferentes do processo. O fluxo para emitir um reembolso é bem diferente do envio de uma substituição. Segmentar por Tipo de Devolução permite uma análise mais precisa dos tempos de ciclo e gargalos de cada caminho. Por que é importante Permite segmentar a análise conforme o resultado desejado, já que processos de reembolso e substituição possuem etapas e ciclos distintos. Onde obter Isso pode ser um campo personalizado no cabeçalho ou derivado com base no código de disposição ou transações posteriores, como a criação de um pedido de substituição. Exemplos ReembolsoSubstituiçãoCrédito na loja | |||
| Última Atualização de Dados LastDataUpdate | O timestamp que indica a última vez que os dados do processo foram atualizados. | ||
| Descrição Este atributo registra a data e hora da última extração de dados do sistema de origem para a ferramenta de Process Mining. É o ponto de referência para saber quão atualizados estão os dados. Saber o horário da última atualização é fundamental para interpretar corretamente os dashboards e KPIs, entendendo se você está vendo dados quase em tempo real ou uma imagem de um momento específico, o que é essencial para o monitoramento operacional. Por que é importante Indica a atualização dos dados, garantindo que os analistas saibam quão recentes são os insights do processo. Onde obter Este é um atributo de metadados gerado durante a ingestão de dados, representando o timestamp de conclusão do processo de ETL. Exemplos 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| Valor de reembolso solicitado RequestedRefundAmount | O valor monetário total do reembolso solicitado pelo cliente. | ||
| Descrição Este atributo representa o valor inicial de reembolso solicitado ou esperado, geralmente baseado no preço original de compra. Ele serve como base para a 'Análise de Discrepância de Reembolso'. Ao comparar o valor solicitado com o valor pago, a empresa identifica diferenças causadas por taxas de reposição, reembolsos parciais ou outros ajustes. Isso ajuda a monitorar a precisão financeira e a adesão às políticas. Por que é importante Serve como base para medir a precisão financeira, comparando com o valor real do reembolso processado. Onde obter Geralmente é o valor da linha ou o valor total da linha original da ordem de venda que está sendo devolvida, encontrado em 'SalesLine.LineAmount'. Exemplos 99.99150.0024.50 | |||
| Valor Real do Reembolso ActualRefundAmount | O valor monetário final do reembolso emitido para o cliente. | ||
| Descrição Este atributo é o valor final confirmado que foi reembolsado ao cliente, registrado quando a nota de crédito é lançada. É um atributo crítico para análise financeira, usado no dashboard de 'Análise de Discrepância de Reembolso' e no KPI de 'Taxa de Precisão do Valor de Reembolso'. Analisar esses dados ajuda a entender o impacto financeiro das devoluções e quaisquer ajustes feitos durante o processo. Por que é importante Isso representa o impacto financeiro real da devolução e é crucial para calcular a precisão do reembolso e entender os resultados financeiros. Onde obter Este valor pode ser encontrado nos detalhes da transação da nota de crédito lançada, relacionada às tabelas 'CustTrans' e 'CustInvoiceJour'. Exemplos 99.99135.000.00 | |||
Atividades do Processamento de Devoluções e Reembolsos
| Atividade | Descrição | ||
|---|---|---|---|
| Código de Disposição Aplicado | Esta atividade representa a conclusão da inspeção e a decisão sobre o que fazer com o item. Um código de disposição, como 'Crédito', 'Sucata' ou 'Troca', é atribuído à linha de devolução. | ||
| Por que é importante Este é um ponto de decisão fundamental que define o próximo passo: reembolso, troca ou rejeição. Atrasos aqui impactam significativamente o tempo total de resolução. Onde obter Este evento é capturado quando o campo DispositionCode é preenchido na transação de estoque da linha do pedido de devolução ou em diário relacionado. Captura O evento de atualização de quando um Código de Disposição (DispositionCode) é definido para a linha do pedido de devolução. Tipo de evento explicit | |||
| Item recebido | Marca o recebimento físico do item no depósito. Capturado quando o diário de chegada associado à ordem de devolução é lançado. | ||
| Por que é importante Este é um marco crítico que muda o foco da ação do cliente para o processamento interno. É o ponto de partida para calcular todos os tempos de manuseio interno, como inspeção e disposição. Onde obter O timestamp do lançamento do Diário WMS ou Diário de Chegada de Itens associado à linha do ReturnOrder. Isso atualiza as transações de estoque para o status 'Registrado' ou 'Recebido'. Captura Evento de lançamento do Diário de Chegada de Item vinculado à linha da ordem de devolução. Tipo de evento explicit | |||
| Nota de Crédito Lançada | A nota de crédito é oficialmente lançada nos livros fiscais, disponibilizando o crédito ao cliente. Isso marca a conclusão da ação de reembolso sob a perspectiva da empresa. | ||
| Por que é importante Este é um marco financeiro crucial, confirmando que o reembolso foi processado no sistema. É uma atividade-chave para medir a conformidade com o SLA de reembolso. Onde obter O timestamp do lançamento do diário de faturas para o pedido de devolução, que finaliza a nota de crédito. O status do pedido muda para 'Faturado'. Captura Lançamento do diário de fatura da ordem de devolução. Tipo de evento explicit | |||
| Pedido de devolução criado | Esta atividade marca o início do processo de devolução, onde uma Autorização de Devolução de Mercadoria (RMA) ou Pedido de Devolução é criado. É um evento explícito capturado na criação de um novo registro de ReturnOrder no Dynamics 365. | ||
| Por que é importante Este é o evento de início principal de todo o processo. Analisar o tempo desta atividade até as demais revela o lead time geral e ajuda a identificar gargalos logo no começo. Onde obter Este evento é capturado do timestamp de criação do cabeçalho do ReturnOrder. Geralmente é encontrado na SalesTable onde o SalesType é 'Returned Order'. Captura Evento de criação do registro SalesTable com SalesType = 'Returned Order'. Tipo de evento explicit | |||
| Pedido de devolução fechado | O pedido de devolução atingiu seu estado final, ou seja, todas as transações físicas e financeiras foram concluídas. Isso geralmente ocorre após o lançamento da nota de crédito ou o envio da substituição. | ||
| Por que é importante Este é o principal evento de encerramento para um processo concluído com sucesso. A duração entre a criação e este ponto representa o tempo total de ciclo do caso. Onde obter Inferido pela alteração do status da ReturnOrder para seu valor terminal, como 'Faturado' ou 'Fechado'. Captura Alteração do campo SalesTable.Status ou SalesTable.DocumentStatus para um estado final. Tipo de evento inferred | |||
| Diário de Chegada Criado | Esta atividade sinaliza que o depósito está aguardando a chegada do item. É a criação de um diário de chegada, que prepara o sistema para o recebimento físico das mercadorias. | ||
| Por que é importante Esta etapa separa a preparação logística do recebimento físico. Ajuda a analisar a prontidão do depósito e o planejamento para as devoluções que estão chegando. Onde obter Criação de um registro na WMSJournalTable com JournalType 'Arrival'. O diário está vinculado à linha da ordem de devolução. Captura Timestamp de criação do registro na WMSJournalTable para a devolução. Tipo de evento explicit | |||
| Item de Substituição Enviado | A guia de remessa do item de substituição é lançada, indicando que ele foi enviado ao cliente. Isso marca a conclusão do processo de troca. | ||
| Por que é importante Este é um marco importante na variante de troca, representando o cumprimento da obrigação da empresa com o cliente. É vital para monitorar o tempo de ciclo das trocas. Onde obter A data de lançamento da guia de remessa para a ordem de venda de substituição. Isso altera o status do pedido para 'Entregue'. Captura Lançamento da guia de remessa para a ordem de venda de substituição. Tipo de evento explicit | |||
| Nota de Crédito Criada | Uma nota de crédito é gerada com base em uma disposição de 'Crédito', autorizando o reembolso ao cliente. Este é o início formal da liquidação financeira do processo. | ||
| Por que é importante Esta atividade marca a aprovação do reembolso financeiro. O tempo entre a disposição e a criação da nota de crédito revela atrasos administrativos no início do reembolso. Onde obter Isso pode ser inferido pela criação de um novo registro na SalesTable com valor negativo, vinculado ao pedido original, ou pela execução do job em lote 'Criar nota de crédito'. Captura Criação de uma nota de crédito, geralmente pelo lançamento da fatura da ordem de devolução. Tipo de evento explicit | |||
| Ordem de Qualidade Gerada | Uma ordem de qualidade formal é criada, indicando que o item devolvido deve passar por uma inspeção estruturada. Comum em cenários que exigem testes detalhados ou verificações de padrões de qualidade. | ||
| Por que é importante Esta atividade marca o início de um processo formal de inspeção. O rastreamento a partir deste ponto ajuda a medir a eficiência e a duração do fluxo de garantia de qualidade. Onde obter Timestamp de criação do registro na InventQualityOrderTable vinculado à ordem de devolução. Captura Criação de um registro na InventQualityOrderTable. Tipo de evento explicit | |||
| Pedido de devolução cancelado | O pedido de devolução é cancelado antes da conclusão. Isso pode ocorrer por solicitação do cliente ou se o item nunca foi enviado de volta. | ||
| Por que é importante Representa um fim alternativo e sem sucesso para o processo. Analisar por que as devoluções são canceladas traz insights sobre o comportamento do cliente ou falhas operacionais. Onde obter Inferido pela alteração do status da ReturnOrder para 'Cancelado'. É um estado terminal distinto de um pedido fechado com sucesso. Captura Alteração do campo SalesTable.Status para 'Cancelado'. Tipo de evento inferred | |||
| Pedido de devolução confirmado | Representa a confirmação formal do pedido de devolução no sistema, geralmente acionando lógicas subsequentes. Isso é tipicamente capturado como uma ação explícita ou uma mudança de status no cabeçalho da Ordem de Devolução (ReturnOrder). | ||
| Por que é importante A confirmação é uma etapa fundamental antes do início da logística. Atrasos entre a criação e a confirmação podem indicar acúmulos administrativos ou problemas no sistema. Onde obter Isso pode ser identificado pelo lançamento do diário de 'Confirmação' para o pedido de devolução ou por uma alteração no campo DocumentStatus na SalesTable. Captura Execução da função 'Confirmar ordem de venda' para a ordem de devolução. Tipo de evento explicit | |||
| Pedido de substituição criado | Uma nova ordem de venda é criada para enviar um item de substituição ao cliente. Ocorre quando a ação de disposição é 'Substituir e Creditar' ou 'Substituir e Descartar'. | ||
| Por que é importante Esta atividade inicia a variante do processo de troca. Monitorar este caminho separadamente do reembolso é essencial para entender os custos e a complexidade das trocas. Onde obter A criação de um novo registro na SalesTable para o item de substituição, geralmente gerado de forma automática e vinculado ao pedido de devolução original. Captura Criação de uma nova Ordem de Venda vinculada à Ordem de Devolução através da ação de disposição. Tipo de evento explicit | |||
Guias de Extração
Etapas
- Pré-requisito: Registrar Aplicativo no Azure Active Directory. Antes de conectar à API do Dynamics 365, registre um aplicativo no seu locatário Azure AD. Conceda permissões delegadas para acessar o Dynamics 365 Finance & Operations, como
Financials.ReadWrite.Allou permissões personalizadas. - Configurar ID do Aplicativo no Dynamics 365. No Dynamics 365, vá em Administração do sistema > Configuração > Aplicativos do Azure Active Directory. Adicione o ID do Cliente do registro do app Azure AD e associe-o a um usuário com as funções de segurança necessárias para ler as entidades de dados.
- Obter Token de Acesso OAuth 2.0. Crie um script (em PowerShell ou Python) para autenticação no endpoint da plataforma de identidade da Microsoft. Use as credenciais do app (ID do cliente e segredo) para solicitar o token de acesso para a URL do Dynamics 365.
- Identificar a URL do seu Ambiente Dynamics 365. Localize a URL base. O endpoint da Web API geralmente segue o padrão:
https://[SuaURLD365FinanceAndOps].dynamics.com/data. - Construir e Executar Requisições de API OData. Para cada uma das 12 atividades, crie uma URL de requisição GET OData. Use
$selectpara trazer apenas as colunas necessárias e$filterpara o período e status. O token obtido no passo 3 deve ser enviado como Bearer token no cabeçalho de autorização. - Desenvolver Script de Extração. Crie um script que percorra a lista de requisições OData. Ele deve lidar com a autenticação, executar os GETs e armazenar o JSON. Respeite os limites da API e implemente pausas se necessário.
- Lidar com Paginação da API. O Dynamics 365 pagina resultados grandes. O script deve verificar a propriedade
@odata.nextLink. Se existir, ele deve fazer a próxima requisição para essa URL até que não haja mais links. - Transformar e Unificar os Dados. Processe o JSON das 12 chamadas. Para cada atividade, crie um registro padrão com
ReturnCaseId,ActivityName,EventTime, etc. Por exemplo, para 'Return Order Created', mapeieReturnOrderNumberparaReturnCaseId, definaActivityNamecomo 'Return Order Created' ecreatedDateTimeparaEventTime. Una tudo em uma tabela única. - Limpar e Padronizar Timestamps. Garanta que todos os valores de
EventTimeestejam em formato consistente, preferencialmente UTC (ex:YYYY-MM-DDTHH:MM:SSZ). Trate registros com timestamps inválidos ou ausentes. - Exportar o Event Log Final. Com os dados unificados, exporte para um arquivo CSV. Garanta que os cabeçalhos das colunas atendam aos requisitos do ProcessMind:
ReturnCaseId,ActivityName,EventTime,ResponsibleUser,DispositionCode, etc. O arquivo está pronto para upload.
Configuração
- URL do Endpoint da API: A URL base da sua instância do Dynamics 365 Finance & Operations. Segue o formato
https://[YourEnvironmentName].dynamics.com/data. - Aplicativo Azure AD: O aplicativo deve ser registrado no Azure AD com um ID de cliente e segredo. Requer permissões de API para acessar as entidades de dados do Dynamics 365.
- Filtragem por Intervalo de Datas: É fundamental aplicar um filtro de data em cada chamada de API usando o parâmetro OData
$filterem um campo de data relevante, comocreatedDateTimeoumodifiedDateTime. Um intervalo inicial comum são os últimos 3 a 6 meses de dados para manter a extração sob controle. - Filtro de Empresa: Para extrair dados de uma entidade legal específica, inclua o parâmetro de consulta
cross-company=truee use$filterno campodataAreaId. Por exemplo:?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]'. - Preferência de Paginação: Utilize o cabeçalho
Prefer: odata.maxpagesize=[value]em suas requisições para controlar o número de registros retornados por página. Valores entre1000e5000são comuns, ajudando a evitar timeouts da API em entidades grandes. - Limitação de API (Throttling): Esteja atento aos limites de proteção do serviço de API do Dynamics 365. O script de extração deve incluir lógica para lidar com respostas
429 (Too Many Requests), geralmente implementando um backoff exponencial ou um mecanismo simples de pausa e tentativa.
a Consulta de Exemplo graphql
/*
This is a conceptual guide representing multiple, distinct OData API calls.
You will need a script (e.g., Python, PowerShell) to execute these calls sequentially,
authenticate with a bearer token, handle pagination, and union the results into a single file.
Replace [YourD365URL], [StartDate], [EndDate], and [YourCompanyCode] with your specific values.
*/
// Base URL for all requests
const string BaseUrl = "https://[YourD365URL].dynamics.com/data";
const string CompanyFilter = "?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]' and ";
const string DateFilterCreated = "createdDateTime ge [StartDate]T00:00:00Z and createdDateTime le [EndDate]T23:59:59Z";
const string DateFilterModified = "modifiedDateTime ge [StartDate]T00:00:00Z and modifiedDateTime le [EndDate]T23:59:59Z";
// 1. Return Order Created
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}{DateFilterCreated}&$select=ReturnOrderNumber,createdDateTime,createdby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser, ReturnReasonCodeId -> ReturnReasonCode
// 2. Return Order Confirmed
// This often updates the header status. We look for a modification time on confirmed orders.
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Confirmed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnReasonCodeId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Confirmed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 3. Arrival Journal Created
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}{DateFilterCreated}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,createdDateTime,createdby
// Note: This requires post-processing to link JournalNumber to a ReturnCaseId via InventTransactionId.
// Mapping: Link via InventTrans -> ReturnCaseId, 'Arrival Journal Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 4. Item Received (Arrival Journal Posted)
GET {BaseUrl}/WarehouseArrivalJournalHeaders{CompanyFilter}JournalPosted eq 'Yes' and {DateFilterModified}&$expand=WarehouseArrivalJournalLines($select=InventTransactionId)&$select=JournalNumber,modifiedDateTime,modifiedby
// Mapping: Link via InventTrans -> ReturnCaseId, 'Item Received' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 5. Quality Order Generated
GET {BaseUrl}/InventQualityOrders{CompanyFilter}{DateFilterCreated}&$select=QualityOrderId,InventTransId,createdDateTime,CreatedByUserId,ItemId
// Mapping: Link via InventTransId -> ReturnCaseId, 'Quality Order Generated' -> ActivityName, createdDateTime -> EventTime, CreatedByUserId -> ResponsibleUser, ItemId -> ProductId
// 6. Disposition Code Applied
// This is a status change on the return line.
GET {BaseUrl}/ReturnOrderLines{CompanyFilter}ReturnDispositionCodeId ne '' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby,ReturnDispositionCodeId,ItemId
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Disposition Code Applied' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser, ReturnDispositionCodeId -> DispositionCode, ItemId -> ProductId
// 7. Credit Note Created
// Look for sales orders with type 'Returned Order' that are not yet invoiced.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderProcessingStatus eq 'Open' and SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 8. Credit Note Posted
// Look for posted invoice journals linked to a return order.
GET {BaseUrl}/SalesInvoiceJournalHeaders{CompanyFilter}SalesOrderType eq 'ReturnedOrder' and {DateFilterCreated}&$select=SalesOrderNumber,InvoiceDate,createdby
// Mapping: SalesOrderNumber -> ReturnCaseId, 'Credit Note Posted' -> ActivityName, InvoiceDate -> EventTime, createdby -> ResponsibleUser
// 9. Replacement Order Created
// Disposition code on the return line triggers a replacement order.
GET {BaseUrl}/SalesOrderHeadersV2{CompanyFilter}SalesOrderOriginType eq 'ReturnOrder' and {DateFilterCreated}&$select=SalesOrderNumber,createdDateTime,createdby,ReturnOrderNumber
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Replacement Order Created' -> ActivityName, createdDateTime -> EventTime, createdby -> ResponsibleUser
// 10. Replacement Item Shipped
// Check for posted packing slips related to the replacement sales order.
GET {BaseUrl}/SalesPackingSlipJournals{CompanyFilter}{DateFilterCreated}&$select=SalesOrderNumber,DeliveryDate,createdby
// Note: This requires linking SalesOrderNumber back to the original ReturnOrderNumber for the ReturnCaseId.
// Mapping: Link SalesOrderNumber -> ReturnCaseId, 'Replacement Item Shipped' -> ActivityName, DeliveryDate -> EventTime, createdby -> ResponsibleUser
// 11. Return Order Closed
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Closed' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Closed' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser
// 12. Return Order Cancelled
GET {BaseUrl}/ReturnOrderHeaders{CompanyFilter}ReturnOrderStatus eq 'Canceled' and {DateFilterModified}&$select=ReturnOrderNumber,modifiedDateTime,modifiedby
// Mapping: ReturnOrderNumber -> ReturnCaseId, 'Return Order Cancelled' -> ActivityName, modifiedDateTime -> EventTime, modifiedby -> ResponsibleUser Etapas
- Habilitar Endpoint TDS: Certifique-se de que o endpoint Tabular Data Stream (TDS) esteja habilitado no seu ambiente Dynamics 365 Dataverse. Um administrador do sistema pode ativar isso no centro de administração da Power Platform em Ambiente > Configurações > Recursos.
- Identificar a URL do Ambiente: Localize a URL do seu ambiente. Geralmente se parece com
suaempresa.crm.dynamics.com. O nome do servidor do endpoint TDS será essa URL com a porta 5558, por exemplo:suaempresa.crm.dynamics.com,5558. - Conectar via Cliente SQL: Utilize um cliente SQL compatível com TDS, como o SQL Server Management Studio (SSMS) ou o Azure Data Studio.
- Autenticar: Conecte-se ao servidor usando sua conta do Azure Active Directory que possua as permissões adequadas, geralmente Administrador ou Personalizador do Sistema, no ambiente Dataverse.
- Preparar a Consulta: Copie a consulta SQL completa fornecida na seção
querydeste documento em uma nova janela de consulta no seu cliente SQL. - Definir Parâmetros: Localize os espaços reservados na consulta. Substitua
'{StartDate}'e'{EndDate}'pelo intervalo de datas desejado para a extração (ex:'2023-01-01'e'2023-12-31'). Atualize também os valores para códigos de status ou disposição conforme a sua configuração específica do Dynamics 365. - Executar a Consulta: Rode a consulta modificada no banco de dados do Dataverse. O tempo de execução varia conforme o volume de dados e o período selecionado.
- Revisar Resultados: Após a conclusão, verifique se o conjunto de dados retornado contém as colunas esperadas:
ReturnCaseId,ActivityName,EventTimee os atributos recomendados. - Exportar o Event Log: Exporte os resultados para um arquivo CSV. A maioria dos clientes SQL possui função nativa para salvar resultados em arquivo. Certifique-se de salvar com codificação UTF-8.
- Fazer Upload para o ProcessMind: O arquivo CSV exportado está pronto para ser enviado ao ProcessMind como um novo event log para análise de Process Mining.
Configuração
- Pré-requisitos: Você deve ter uma conta de usuário com, no mínimo, acesso de leitura às tabelas relevantes do Dataverse (ex: SalesTable, SalesLine, CustInvoiceJour). As permissões geralmente são gerenciadas via funções de segurança, como Administrador do Sistema ou uma função personalizada com permissões de tabela suficientes.
- Endpoint TDS: O endpoint TDS do Dataverse deve estar habilitado para o ambiente. Este recurso permite consultas SQL diretas e somente leitura no banco de dados do Dataverse.
- Intervalo de Datas: A consulta inclui os espaços reservados
'{StartDate}'e'{EndDate}'. Para uma análise inicial, recomendamos um intervalo de 3 a 6 meses para obter um conjunto de dados representativo sem causar problemas de performance. - Filtro de Empresa: A consulta, conforme escrita, será executada em todas as entidades legais (empresas) às quais o usuário tem acesso. Para analisar uma única empresa, remova o comentário e adicione uma cláusula
WHEREfiltrando o campoDATAAREAIDem cada parte da instruçãoUNION ALL, por exemplo:AND st.DATAAREAID = '[YourCompanyID]'. - Espaços para Lógica Personalizada: A consulta contém campos como
[YourReplaceCode1]para códigos de disposição e notas sobre a vinculação de pedidos de substituição. Eles devem ser configurados com base no seu processo de negócio específico e na configuração do seu Dynamics 365. - Performance: Consultas diretas ao endpoint TDS para grandes conjuntos de dados podem ser lentas. A conexão é otimizada para consultas analíticas, mas junções complexas em milhões de linhas podem causar timeout. Recomendamos aplicar filtros de data rigorosos.
a Consulta de Exemplo sql
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Created' AS ActivityName,
st.CREATEDDATETIME AS EventTime,
st.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Confirmed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.DOCUMENTSTATUS = 1 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Arrival Journal Created' AS ActivityName,
wjt.CREATEDDATETIME AS EventTime,
wjt.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Item Received' AS ActivityName,
wjt.POSTEDDATETIME AS EventTime,
wjt.POSTEDUSERID AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN WMSJOURNALTABLE wjt ON st.SALESID = wjt.ORDERID AND st.DATAAREAID = wjt.DATAAREAID
WHERE st.SALESTYPE = 3 AND wjt.JOURNALTYPE = 4 AND wjt.POSTEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Quality Order Generated' AS ActivityName,
iqot.CREATEDDATETIME AS EventTime,
iqot.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Disposition Code Applied' AS ActivityName,
iqot.VALIDATEDDATETIME AS EventTime,
iqot.VALIDATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
iqot.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN INVENTQUALITYORDERTABLE iqot ON sl.INVENTTRANSID = iqot.INVENTTRANSID AND sl.DATAAREAID = iqot.DATAAREAID
WHERE st.SALESTYPE = 3 AND iqot.VALIDATEDDATETIME IS NOT NULL AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Created' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Credit Note Posted' AS ActivityName,
cij.CREATEDDATETIME AS EventTime,
cij.CREATEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
JOIN CUSTINVOICEJOUR cij ON st.SALESID = cij.SALESID AND st.DATAAREAID = cij.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Order Created' AS ActivityName,
replacement_so.CREATEDDATETIME AS EventTime,
replacement_so.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
replacement_sl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN SALESLINE replacement_sl ON replacement_so.SALESID = replacement_sl.SALESID AND replacement_so.DATAAREAID = replacement_sl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
ro.RETURNITEMNUM AS ReturnCaseId,
'Replacement Item Shipped' AS ActivityName,
cpsj.CREATEDDATETIME AS EventTime,
cpsj.CREATEDBY AS ResponsibleUser,
NULL AS DispositionCode,
NULL AS ReturnReasonCode,
replacement_so.SALESORIGINID AS ReturnChannel,
cpsl.ITEMID AS ProductId
FROM SALESTABLE ro
JOIN SALESLINE rol ON ro.SALESID = rol.SALESID AND ro.DATAAREAID = rol.DATAAREAID
JOIN SALESTABLE replacement_so ON ro.CUSTACCOUNT = replacement_so.CUSTACCOUNT AND ro.DATAAREAID = replacement_so.DATAAREAID
JOIN CUSTPACKINGSLIPJOUR cpsj ON replacement_so.SALESID = cpsj.SALESID AND replacement_so.DATAAREAID = cpsj.DATAAREAID
JOIN CUSTPACKINGSLIPTRANS cpsl ON cpsj.PACKINGSLIPID = cpsl.PACKINGSLIPID AND cpsj.SALESID = cpsl.SALESID AND cpsj.DATAAREAID = cpsl.DATAAREAID
WHERE ro.SALESTYPE = 3
AND rol.RETURNDISPOSITIONCODEID IN ('[YourReplaceCode1]', '[YourReplaceCode2]')
AND replacement_so.SALESTYPE = 1
AND replacement_so.CREATEDDATETIME > ro.CREATEDDATETIME
-- The join above is a basic example and must be replaced with your system's specific logic for linking returns to replacements.
AND ro.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Closed' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 3 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}'
UNION ALL
SELECT
st.RETURNITEMNUM AS ReturnCaseId,
'Return Order Cancelled' AS ActivityName,
st.MODIFIEDDATETIME AS EventTime,
st.MODIFIEDBY AS ResponsibleUser,
sl.RETURNDISPOSITIONCODEID AS DispositionCode,
sl.RETURNREASONCODEID AS ReturnReasonCode,
st.SALESORIGINID AS ReturnChannel,
sl.ITEMID AS ProductId
FROM SALESTABLE st
JOIN SALESLINE sl ON st.SALESID = sl.SALESID AND st.DATAAREAID = sl.DATAAREAID
WHERE st.SALESTYPE = 3 AND st.SALESSTATUS = 4 AND st.CREATEDDATETIME BETWEEN '{StartDate}' AND '{EndDate}';