Votre modèle de données pour le traitement des retours et des remboursements
Votre modèle de données pour le traitement des retours et des remboursements
- Champs de données recommandés à collecter
- Principales étapes du processus à suivre
- Instructions pour l’extraction des données
Attributs du traitement des retours et des remboursements
| Nom | Description | ||
|---|---|---|---|
| Heure de l’événement EventTime | Horodatage indiquant le moment où une activité ou un événement précis s’est produit. | ||
| Description L’heure de l’événement, ou son horodatage, indique la date et l’heure exactes auxquelles une activité a eu lieu. Chaque activité du journal d’événements est associée à un horodatage, qui établit l’ordre chronologique des événements. Cet attribut est indispensable à toute analyse du processus fondée sur le temps. Il sert à calculer les temps de cycle entre les activités, à repérer les temps d’attente et les goulots d’étranglement, à mesurer la durée totale des dossiers et à vérifier le respect des accords de niveau de service (SLA). La fiabilité de toute analyse des performances dépend directement de la précision des horodatages. Pourquoi est-ce important ? Cet horodatage est indispensable au calcul des indicateurs de durée, comme les temps de cycle et les temps d’attente, qui sont essentiels à l’analyse des performances. Où trouver ces données Correspond aux champs de date de création ou de modification de différentes tables, par exemple « SalesTable.createdDateTime » pour la création d’une commande ou « WMSJournalTrans.createdDateTime » pour les journaux d’entrepôt. Exemples 2023-10-26T10:00:00Z2023-10-26T14:30:15Z2023-10-27T09:05:42Z | |||
| Identifiant du dossier de retour ReturnCaseId | Identifiant unique du dossier de retour et de remboursement d’un client, qui relie toutes les activités associées. | ||
| Description L’identifiant du dossier de retour est l’identifiant principal de chaque instance de processus de retour. Il relie toutes les activités associées à un retour ou à une demande de remboursement spécifique, depuis la création initiale de la commande de retour jusqu’à sa clôture. Dans l’analyse des processus, cet identifiant est indispensable pour reconstituer le parcours complet de chaque retour. Il permet de suivre tout le cycle de vie, de mesurer les temps de cycle totaux et d’analyser les différences entre les dossiers. Tous les événements, les données et les indicateurs sont regroupés et mis en relation à l’aide de cet identifiant. Pourquoi est-ce important ? Cet identifiant de dossier essentiel relie toutes les étapes du processus et permet de suivre et d’analyser chaque retour du début à la fin. Où trouver ces données Il s’agit généralement du numéro d’autorisation de retour de marchandise (RMA) ou du numéro de commande client de type « Returned Order » dans le module « Sales and marketing ». Il se trouve dans des tables comme « SalesTable », où « SalesType » correspond à « Returned Order ». Exemples RMA-001234RMA-001235RMA-001236 | |||
| Nom de l’activité ActivityName | Nom de l’événement métier ou de la tâche qui s’est produit dans le processus de retour et de remboursement. | ||
| Description Cet attribut décrit une étape ou un événement précis du cycle de vie d’un retour et d’un remboursement, par exemple « Commande de retour créée », « Article reçu » ou « Note de crédit validée ». Chaque activité correspond à une étape distincte du processus, enregistrée dans le système. L’analyse de l’ordre et de la fréquence de ces activités est au cœur du Process Mining. Elle permet de représenter les processus, de repérer les goulots d’étranglement entre les étapes et de découvrir les variantes courantes ou inhabituelles. L’ensemble des activités délimite le périmètre du processus analysé. Pourquoi est-ce important ? Il définit les étapes du processus et permet d’en représenter le déroulement, ainsi que de repérer les goulots d’étranglement, les reprises et les écarts. Où trouver ces données Il s’agit d’un attribut conceptuel déduit des événements du système. Il peut être généré en associant les changements de statut dans des tables comme « SalesTable » et « WMSJournalTable », ou des journaux d’événements spécifiques, à des noms faciles à comprendre. Exemples Commande de retour crééeArticle reçuCode de décision appliquéNote de crédit validée | |||
| Canal de retour ReturnChannel | Méthode ou canal utilisé par le client pour demander le retour. | ||
| Description Cet attribut indique le canal utilisé par le client pour lancer le processus de retour, par exemple « Portail en ligne », « En magasin », « Appel au service client » ou « Courrier postal ». L’analyse du processus par canal de retour permet d’évaluer les performances et l’efficacité de chacun. Une entreprise peut comparer les temps de cycle, les coûts et la satisfaction client entre les différents canaux afin de repérer les bonnes pratiques et les domaines où investir ou apporter des améliorations. Cet attribut est essentiel au Dashboard « Performance d’utilisation des canaux de retour ». Pourquoi est-ce important ? Permet de comparer les performances des différents canaux de retour et de repérer ceux qui sont les plus efficaces et les plus économiques. Où trouver ces données Cette information peut être enregistrée dans l’en-tête de la commande de retour (« SalesTable ») ou déduite de l’utilisateur qui a créé la commande. Une logique personnalisée ou un champ dédié peut être nécessaire. Exemples Portail webBorne en magasinService client | |||
| Code de décision DispositionCode | Code indiquant le résultat de l’inspection de l’article et l’étape suivante à effectuer. | ||
| Description Le code de décision est attribué lors du contrôle qualité d’un article retourné. Il détermine l’étape suivante du processus, par exemple « Credit », « Replace », « Scrap » ou « Return to Customer ». Cet attribut correspond à un point de décision important dans le processus de retour. L’analyse par code de décision permet aux entreprises de comprendre l’issue des retours, de suivre les conséquences financières de la mise au rebut des articles et d’évaluer l’efficacité des différentes options de résolution, comme le remplacement ou le remboursement. Pourquoi est-ce important ? Ce code détermine le parcours suivi par un dossier de retour après inspection. Il est donc essentiel pour analyser les variantes du processus et leurs conséquences pour l’entreprise. Où trouver ces données Ce champ joue un rôle clé dans le module de gestion de la qualité. Il est associé au traitement des ordres de qualité ou d’inspection. Exemples CRDTREPL-DSCRAPRTV | |||
| Code du motif de retour ReturnReasonCode | Motif indiqué par le client pour retourner l’article. | ||
| Description Le code du motif de retour enregistre la raison invoquée par le client, par exemple « Article défectueux », « Taille incorrecte », « Non conforme à la description » ou « N’est plus nécessaire ». Cette information est généralement recueillie au moment où le retour est demandé. L’analyse des motifs de retour est essentielle pour en déterminer les causes profondes. Elle aide les entreprises à repérer les problèmes de qualité des produits, les descriptions inexactes ou les erreurs logistiques. Ces données peuvent orienter les améliorations de la conception des produits, du marketing et de la chaîne d’approvisionnement afin de réduire les retours à l’avenir. Pourquoi est-ce important ? Permet de comprendre les raisons des retours et d’en rechercher les causes profondes afin de réduire leur fréquence et d’améliorer la satisfaction client. Où trouver ces données Cette information est généralement enregistrée au niveau de la ligne de commande de retour. Recherchez les champs de code de motif dans la table « SalesLine » des commandes de retour. Exemples DÉFECTUEUXARTICLE_INCORRECTPLUS_SOUHAITÉENDOMMAGÉ_PENDANT_LE_TRANSPORT | |||
| ID du produit ProductId | Identifiant unique du produit retourné. | ||
| Description L’ID du produit, souvent appelé unité de gestion des stocks (SKU), identifie précisément l’article retourné par le client. Chaque ligne de commande de retour est associée à un ID de produit. L’analyse des retours par produit est essentielle pour repérer les articles dont le taux de retour est élevé. Cela peut révéler des problèmes de contrôle qualité, des descriptions inexactes ou des défauts de fabrication. Cette analyse aide à prioriser les enquêtes et les améliorations liées aux produits. Pourquoi est-ce important ? Permet d’analyser les retours par produit et de repérer les articles présentant des problèmes de qualité ou un volume élevé de retours. Où trouver ces données Correspond au champ « ItemId » de la table « SalesLine » pour la commande de retour. Exemples SKU-A-123SKU-B-456SKU-C-789 | |||
| Utilisateur responsable ResponsibleUser | Utilisateur ou employé qui a effectué une activité précise ou qui en est responsable. | ||
| Description Cet attribut identifie la personne responsable de l’exécution d’une étape du processus. Il peut s’agir de l’employé de l’entrepôt qui a réceptionné l’article, de l’inspecteur qualité ou du comptable qui a validé la note de crédit. L’analyse du processus par utilisateur permet de comprendre la répartition de la charge de travail, de repérer les personnes les plus performantes et de détecter les besoins de formation. Elle peut également servir à examiner les dossiers traités par certaines personnes ou équipes et à vérifier la séparation des tâches. Pourquoi est-ce important ? Il permet d’analyser la répartition de la charge de travail et les performances par personne ou par équipe, ainsi que de repérer les besoins de formation et les possibilités de réaffectation des ressources. Où trouver ces données Ces informations figurent dans les champs « created by » ou « modified by » des enregistrements de transaction, par exemple « SalesTable.createdBy » ou les identifiants utilisateur associés dans les tables de journaux. Exemples Alice.WBob.JChris.P | |||
| Conforme à la politique IsPolicyAdherent | Indique si l’approbation du retour respecte les règles de retour établies. | ||
| Description Cet attribut booléen calculé indique si un retour respecte tous les critères définis dans la politique de retour de l’entreprise. Il peut tenir compte de facteurs tels que le délai de retour, l’état de l’article ou le motif du retour. Cet attribut alimente directement le Dashboard « Vue d’ensemble de la conformité des approbations de retour » et l’indicateur de performance clé « Taux d’approbation des retours conformes ». Il permet à l’entreprise de mesurer le respect des règles, de repérer les dossiers approuvés à titre exceptionnel et d’analyser les motifs et la fréquence de ces exceptions. Il est essentiel à la gouvernance et à la maîtrise des coûts. Pourquoi est-ce important ? Mesure directement le respect des règles de l’entreprise et aide à repérer et à réduire les approbations de retour non conformes, susceptibles d’entraîner une perte de revenus. Où trouver ces données Il s’agit d’un attribut dérivé. Sa logique doit comparer les attributs du retour, par exemple la date de retour par rapport à la date d’achat ou le motif du retour, aux règles métier prédéfinies. Exemples truefalse | |||
| Date cible du SLA de remboursement RefundSlaTargetDate | Date à laquelle le dossier de retour et de remboursement doit être entièrement résolu. | ||
| Description Cet attribut définit l’échéance de l’accord de niveau de service (SLA) pour la résolution d’un dossier de retour. À cette date, le client doit avoir obtenu une réponse définitive, par exemple un remboursement validé ou l’expédition d’un article de remplacement. Cette date cible est essentielle au suivi des engagements de service. Elle sert à calculer l’indicateur de performance clé « Taux de respect du SLA de résolution » et alimente le Dashboard « Performance du SLA de résolution des remboursements ». En comparant cette date à la date réelle de fin du processus, l’entreprise peut repérer les dépassements de SLA et prendre en charge de manière proactive les dossiers en attente depuis longtemps. Pourquoi est-ce important ? Sert de référence pour mesurer les performances du processus, suivre le respect du SLA et repérer les dossiers en retard. Où trouver ces données Il ne s’agit pas nécessairement d’un champ standard. Cette date est souvent calculée en ajoutant une période de SLA prédéfinie à la date de création du retour, par exemple 14 jours. Elle peut être enregistrée dans un champ personnalisé. Exemples 2023-11-10T23:59:59Z2023-11-15T23:59:59Z | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage indiquant la dernière actualisation des données du processus. | ||
| Description Cet attribut indique la date et l’heure de la dernière extraction des données du système source et de leur mise à jour dans l’outil de Process Mining. Il permet de savoir à quel moment les données analysées étaient à jour. Connaître la date de la dernière mise à jour aide à évaluer l’actualité de l’analyse. Les utilisateurs peuvent ainsi interpréter correctement les Dashboards et les KPI, en sachant s’ils consultent des données en temps réel ou un instantané datant d’un moment précis. C’est essentiel au suivi opérationnel. Pourquoi est-ce important ? Indique si les données sont à jour et permet aux analystes de savoir à quel point leurs analyses du processus sont récentes. Où trouver ces données Il s’agit d’un attribut de métadonnées généré et stocké pendant le processus d’intégration des données. Il correspond généralement à l’horodatage de fin du traitement ETL. Exemples 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| Heure de fin EndTime | Horodatage indiquant le moment où une activité précise a été achevée. | ||
| Description L’heure de fin correspond à l’horodatage d’achèvement d’une activité. Alors que StartTime indique le début, EndTime marque la fin et permet de calculer la durée de traitement de la tâche concernée. Cet attribut est essentiel à l’analyse détaillée des performances, en particulier pour les tâches dont la durée peut être mesurée, comme « Inspection de l’article ». En comparant StartTime et EndTime, les analystes peuvent mesurer précisément le temps de traitement actif des tâches et le distinguer du temps d’attente entre les tâches. Ils peuvent ainsi repérer les inefficacités au sein d’activités précises, et pas seulement entre elles. Pourquoi est-ce important ? Il permet de calculer le temps de traitement actif de chaque activité et de distinguer le temps d’attente du temps de travail effectif. Où trouver ces données Cette valeur doit souvent être déduite. Il peut s’agir, par exemple, du champ « modifiedDateTime » correspondant au changement de statut qui clôt une activité, ou de StartTime pour l’activité suivante. Exemples 2023-10-26T10:15:00Z2023-10-26T14:45:20Z2023-10-27T09:55:12Z | |||
| ID de l’avoir CreditNoteId | Identifiant unique du document d’avoir créé pour un remboursement. | ||
| Description Lorsqu’un remboursement est traité, un document financier appelé avoir est généré. Cet attribut enregistre l’identifiant unique de ce document. Cet identifiant relie directement le processus opérationnel de retour aux écritures financières du système comptable. Il est utile pour les audits et l’examen détaillé des écarts financiers : l’analyste peut suivre un dossier de retour jusqu’à la transaction financière précise qui l’a réglé. Pourquoi est-ce important ? Relie le processus opérationnel de retour à la transaction financière correspondante, ce qui est essentiel pour les audits et le rapprochement financier. Où trouver ces données Le numéro de l’avoir figure généralement dans le champ « InvoiceId » de la table « CustInvoiceJour », lorsque le type de transaction est « Credit note ». Il peut être relié à la commande de retour. Exemples CN-10056CN-10057CN-10058 | |||
| ID de l’entrepôt WarehouseId | Identifiant de l’entrepôt ou du site où l’article retourné est réceptionné. | ||
| Description Cet attribut identifie l’entrepôt physique ou le centre de retour qui traite l’article retourné. Les processus, les ressources et les niveaux de performance peuvent varier d’un site à l’autre. L’analyse du processus par entrepôt permet de comparer les performances des différents sites. Elle peut aider à repérer les installations qui traitent les retours le plus efficacement, à mettre en évidence les goulots d’étranglement régionaux et à orienter les décisions concernant la répartition des ressources et la standardisation des processus dans le réseau logistique. Pourquoi est-ce important ? Permet de comparer les performances des entrepôts et des centres de retour, et de repérer les goulots d’étranglement régionaux ou les bonnes pratiques. Où trouver ces données Cette information est enregistrée dans le champ « InventLocationId » des transactions liées aux stocks, par exemple dans le journal de réception (« WMSJournalTable ») ou dans « SalesLine ». Exemples WH-EASTWH-WESTCENTRAL-DC | |||
| ID du client CustomerId | Identifiant unique du client à l’origine du retour. | ||
| Description L’ID du client est l’identifiant unique du compte client associé au retour. Il relie la transaction de retour à un client précis dans le CRM ou la base de données clients. L’analyse des retours par client permet de repérer ceux qui retournent des articles à une fréquence inhabituelle, ce qui peut signaler un comportement frauduleux ou une insatisfaction récurrente. Elle peut également servir à segmenter la clientèle, par exemple pour proposer des services de retour premium aux clients à forte valeur. Pourquoi est-ce important ? Relie le processus de retour à un client précis, ce qui permet d’analyser les retours par client et de repérer des tendances ou une fraude potentielle. Où trouver ces données Il s’agit du champ « CustAccount » de la table « SalesTable » pour la commande de retour. Exemples CUST-00045CUST-00192CUST-00315 | |||
| Montant du remboursement demandé RequestedRefundAmount | Montant total du remboursement demandé par le client. | ||
| Description Cet attribut correspond au montant initial du remboursement demandé ou prévu au début du processus de retour. Il est généralement calculé à partir du prix d’achat initial des articles retournés. Cette valeur sert de référence pour l’analyse des écarts de remboursement. En la comparant au montant effectivement remboursé, l’entreprise peut repérer les écarts dus aux frais de remise en stock, aux remboursements partiels d’articles endommagés ou à d’autres ajustements. Cela permet de suivre l’exactitude financière et le respect des règles. Pourquoi est-ce important ? Sert de référence pour évaluer l’exactitude financière en le comparant au montant effectivement remboursé. Où trouver ces données Il s’agit généralement du montant de la ligne ou du montant total de la ligne de commande de vente d’origine correspondant à l’article retourné. Cette valeur figure dans « SalesLine.LineAmount ». Exemples 99.99150.0024.50 | |||
| Montant réel du remboursement ActualRefundAmount | Montant final versé au client au titre du remboursement. | ||
| Description Cet attribut correspond au montant final confirmé et remboursé au client. Il est enregistré lors de la création et de la validation de l’avoir. Cet attribut est essentiel à l’analyse financière. Il est utilisé directement dans le Dashboard « Analyse des écarts de remboursement » et dans l’indicateur de performance clé « Taux d’exactitude des remboursements ». Son analyse permet de comprendre l’incidence financière des retours et les ajustements effectués au cours du processus. Pourquoi est-ce important ? Représente l’incidence financière réelle du retour. Il est essentiel pour calculer l’exactitude des remboursements et comprendre les résultats financiers. Où trouver ces données Cette valeur figure dans les détails de la transaction de l’avoir validé. Elle est liée aux tables « CustTrans » et « CustInvoiceJour » de l’avoir. Exemples 99.99135.000.00 | |||
| Statut de la commande de retour ReturnOrderStatus | Statut général de la commande de retour au moment de l’événement. | ||
| Description Cet attribut indique le statut actuel de l’en-tête de la commande de retour, par exemple « Ouverte », « Facturée » ou « Annulée ». Il donne une vue d’ensemble de l’étape à laquelle se trouve le dossier. Les activités décrivent les étapes détaillées du processus, tandis que le statut général facilite le filtrage et la segmentation des dossiers. Un analyste peut, par exemple, se concentrer sur les dossiers « Ouverts » pour comprendre la charge de travail actuelle, ou étudier le parcours des dossiers finalement « Annulés ». Pourquoi est-ce important ? Donne une vue d’ensemble de l’état du dossier, utile pour filtrer les dossiers et comprendre les résultats, notamment les annulations. Où trouver ces données Cette information se trouve dans le champ « SalesStatus » ou « DocumentStatus » de la table « SalesTable ». Exemples Commande ouverteLivréeFacturéeAnnulée | |||
| Statut du SLA SlaStatus | Indique si le dossier a été résolu dans le délai prévu par l’accord de niveau de service. | ||
| Description Cet attribut calculé indique simplement si le SLA a été respecté, généralement par les valeurs « Dans les délais » ou « En retard ». Il est déterminé en comparant l’horodatage de la dernière activité, par exemple « Commande de retour clôturée », à l’attribut « RefundSlaTargetDate ». Cet attribut simplifie le suivi des performances dans des Dashboards comme « Performance du SLA de résolution des remboursements ». Au lieu de devoir comparer les dates, les utilisateurs disposent d’un statut direct et facile à comprendre. Ils peuvent ainsi filtrer et regrouper rapidement les dossiers pour calculer le « Taux de respect du SLA de résolution » global. Pourquoi est-ce important ? Fournit une indication immédiate du respect du SLA, ce qui facilite le filtrage des dossiers en retard et l’analyse des causes profondes des délais. Où trouver ces données Il s’agit d’un attribut dérivé, calculé en comparant l’horodatage de l’activité de résolution finale à l’attribut « RefundSlaTargetDate ». Exemples Dans les délaisEn retard | |||
| Système source SourceSystem | Système d’information dont proviennent les données d’événement extraites. | ||
| Description Cet attribut identifie le système d’information source des données. Dans ce contexte, il s’agira principalement de « Microsoft Dynamics 365 ». Dans les grandes organisations, un processus peut s’étendre sur plusieurs systèmes. Préciser le système source de chaque événement est essentiel à la gouvernance des données, au diagnostic des problèmes d’extraction et à la compréhension de l’environnement technologique du processus. Cela permet de confirmer l’origine des données analysées. Pourquoi est-ce important ? Il précise l’origine des données, un contexte essentiel à leur gouvernance et à leur validation, ainsi qu’à la compréhension des systèmes utilisés dans le processus. Où trouver ces données Il s’agit généralement d’une valeur statique ajoutée lors du processus d’extraction, de transformation et de chargement des données (ETL) pour indiquer l’origine du jeu de données. Exemples Microsoft Dynamics 365 F&OD365-PROD | |||
| Type de retour ReturnType | Classe le retour selon le résultat attendu, par exemple un remboursement ou un remplacement. | ||
| Description Cet attribut classe le dossier de retour selon le type de résolution demandé par le client ou proposé par l’entreprise. Les types courants comprennent le remboursement, l’échange contre un article de remplacement ou la réparation. Cette classification permet d’analyser les différents parcours du processus. Le traitement d’un remboursement diffère sensiblement de l’expédition d’un article de remplacement. La segmentation par type de retour permet d’analyser plus précisément les temps de cycle et les goulots d’étranglement propres à chaque parcours de résolution. Pourquoi est-ce important ? Permet de segmenter l’analyse selon le résultat prévu, car les processus de remboursement et de remplacement comportent des étapes et des temps de cycle différents. Où trouver ces données Il peut s’agir d’un champ personnalisé de l’en-tête de la commande de retour, ou d’une valeur déduite du code de disposition ou de transactions ultérieures, comme la création d’une commande de vente de remplacement. Exemples RemboursementRemplacementAvoir en magasin | |||
Activités du traitement des retours et des remboursements
| Activité | Description | ||
|---|---|---|---|
| Article reçu | Cette activité marque la réception physique de l’article retourné dans l’entrepôt ou au centre de retour désigné. Elle est enregistrée lors de la validation du journal d’arrivée associé à la commande de retour. | ||
| Pourquoi est-ce important ? Cette étape importante fait passer le processus de l’action du client au traitement interne. Elle sert de point de départ au calcul des délais de traitement internes, notamment pour l’inspection et la décision sur le sort de l’article. Où trouver ces données Horodatage de validation du journal WMS ou du journal d’arrivée de l’article associé à la ligne ReturnOrder. Les transactions de stock passent alors au statut « Registered » ou « Received ». Données à recueillir Événement de validation du journal d’arrivée de l’article associé à la ligne de commande de retour. Type d’événement explicit | |||
| Code de décision appliqué | Cette activité marque la fin de l’inspection et la décision concernant le sort de l’article retourné. Un code de décision, tel que « Credit », « Scrap » ou « Replace », est attribué à la ligne de retour. | ||
| Pourquoi est-ce important ? Il s’agit d’un point de décision important qui détermine la suite du processus : remboursement, échange ou rejet. Tout retard à cette étape peut allonger considérablement le délai global de résolution. Où trouver ces données Cet événement est enregistré lorsque le champ DispositionCode est renseigné dans la transaction de stock de la ligne de commande de retour ou dans le journal associé. Données à recueillir Événement de mise à jour lors de l’attribution d’une valeur à DispositionCode pour la ligne de commande de retour. Type d’événement explicit | |||
| Commande de retour clôturée | La commande de retour est arrivée à son terme : toutes les opérations physiques et financières sont terminées. Cela se produit généralement après la validation de la note de crédit ou l’expédition de l’article de remplacement. | ||
| Pourquoi est-ce important ? Il s’agit de l’événement de fin principal d’un processus de retour mené à bien. Le délai entre la création et cette étape correspond au temps de cycle total du dossier. Où trouver ces données Cette étape est déduite du passage du champ de statut ReturnOrder à une valeur finale, telle que « Invoiced » ou « Closed ». Elle indique qu’aucun autre traitement n’est prévu. Données à recueillir Modification du champ SalesTable.Status ou SalesTable.DocumentStatus vers un statut final. Type d’événement inferred | |||
| Commande de retour créée | Cette activité marque le début du processus de retour : une autorisation de retour de marchandise (RMA) ou une commande de retour est créée dans le système. Il s’agit d’un événement explicite enregistré lors de la création d’un nouvel enregistrement ReturnOrder dans Dynamics 365. | ||
| Pourquoi est-ce important ? Il s’agit de l’événement de début principal du processus de retour. L’analyse du délai entre cette activité et les suivantes révèle le délai global du processus et aide à repérer les goulots d’étranglement dès les premières étapes. Où trouver ces données Cet événement est enregistré à partir de l’horodatage de création de l’en-tête ReturnOrder. Il se trouve généralement dans SalesTable, où SalesType correspond à « Returned Order ». Données à recueillir Événement de création de l’enregistrement SalesTable avec SalesType = « Returned Order ». Type d’événement explicit | |||
| Note de crédit validée | La note de crédit est officiellement comptabilisée dans les livres financiers et le crédit est mis à la disposition du client. Du point de vue de l’entreprise, cette étape marque la fin du remboursement. | ||
| Pourquoi est-ce important ? Cette étape financière importante confirme que le remboursement a été traité dans le système. Elle sert souvent à mesurer le respect des SLA de remboursement. Où trouver ces données Horodatage de validation du journal de facture de la commande de retour, qui finalise la note de crédit. Le statut de la commande de retour passe à « Invoiced ». Données à recueillir Validation du journal de facture de la commande de retour. Type d’événement explicit | |||
| Article de remplacement expédié | Le bon de livraison de l’article de remplacement est validé, ce qui indique que l’article a été expédié au client. Cette étape marque la fin du traitement de l’échange. | ||
| Pourquoi est-ce important ? Cette étape importante de la variante avec échange représente l’exécution de l’engagement de l’entreprise envers le client. Elle est essentielle au suivi du temps de cycle des échanges. Où trouver ces données Date de validation du journal de bon de livraison de la commande client de remplacement. Le statut de la commande passe alors à « Delivered ». Données à recueillir Validation du bon de livraison de la commande client de remplacement. Type d’événement explicit | |||
| Commande de remplacement créée | Une nouvelle commande client est créée pour envoyer un article de remplacement au client. Cette activité a lieu lorsque la décision est « Replace and Credit » ou « Replace and Scrap ». | ||
| Pourquoi est-ce important ? Cette activité lance la variante du processus correspondant à un échange. Le suivi de ce parcours séparément de celui du remboursement est essentiel pour comprendre la complexité et le coût des échanges. Où trouver ces données Création d’un nouvel enregistrement SalesTable pour l’article de remplacement, souvent généré automatiquement et associé à la commande de retour initiale. Données à recueillir Création d’une nouvelle commande client associée à la commande de retour par l’intermédiaire de la décision prise. Type d’événement explicit | |||
| Commande de retour annulée | La commande de retour est annulée avant son achèvement, à la demande du client ou parce que l’article n’a jamais été retourné. | ||
| Pourquoi est-ce important ? Il s’agit d’une issue alternative qui marque l’échec du processus. L’analyse des motifs d’annulation peut éclairer le comportement des clients ou révéler des problèmes dans le processus. Où trouver ces données Cette étape est déduite du passage du champ de statut ReturnOrder à « Cancelled ». Il s’agit d’un état final distinct de la clôture normale d’une commande. Données à recueillir Modification du champ SalesTable.Status vers « Cancelled ». Type d’événement inferred | |||
| Commande de retour confirmée | Cette activité correspond à la confirmation officielle de la commande de retour dans le système, qui déclenche souvent les traitements suivants. Elle est généralement enregistrée comme une action explicite ou un changement de statut sur l’en-tête ReturnOrder. | ||
| Pourquoi est-ce important ? La confirmation est une étape importante avant le début des opérations logistiques. Un délai entre la création et la confirmation peut signaler un retard administratif ou un engorgement du système. Où trouver ces données Cette étape peut être repérée grâce à la validation du journal « Confirmation » de la commande de retour ou à un changement du champ DocumentStatus dans SalesTable. Données à recueillir Exécution de la fonction « Confirm sales order » pour la commande de retour. Type d’événement explicit | |||
| Journal d’arrivée créé | Cette activité indique que l’entrepôt s’attend à recevoir l’article retourné. Elle correspond à la création d’un journal d’arrivée, qui prépare le système à la réception physique des marchandises. | ||
| Pourquoi est-ce important ? Cette étape distingue la préparation logistique de la réception physique. Elle permet d’analyser la préparation de l’entrepôt et de planifier les retours à venir. Où trouver ces données Création d’un enregistrement dans WMSJournalTable avec le type de journal « Arrival ». Le journal est associé à la ligne de commande de retour. Données à recueillir Horodatage de création de l’enregistrement WMSJournalTable pour le retour. Type d’événement explicit | |||
| Note de crédit créée | Une note de crédit est générée lorsque la décision est « Credit », autorisant ainsi le remboursement du client. Cette étape marque le début du règlement financier. | ||
| Pourquoi est-ce important ? Cette activité marque l’approbation du remboursement. Le délai entre la décision et la création de la note de crédit met en évidence les retards administratifs dans le lancement du remboursement. Où trouver ces données Cette étape peut être déduite de la création d’un nouvel enregistrement SalesTable avec une valeur négative, associé à la commande de retour initiale, ou de l’exécution du traitement par lots « Create credit note ». Données à recueillir Création d’une note de crédit, souvent par la validation de la facture de la commande de retour. Type d’événement explicit | |||
| Ordre de contrôle qualité généré | Un ordre de contrôle qualité est créé pour indiquer que l’article retourné doit faire l’objet d’une inspection structurée. Cette étape est courante lorsque les retours nécessitent des tests détaillés ou des contrôles par rapport aux normes de qualité. | ||
| Pourquoi est-ce important ? Cette activité marque le début d’une inspection officielle. Le suivi du délai à partir de ce point permet de mesurer l’efficacité et la durée du flux de travail de contrôle qualité. Où trouver ces données Horodatage de création d’un enregistrement dans InventQualityOrderTable associé à la commande de retour. Données à recueillir Création d’un enregistrement InventQualityOrderTable. Type d’événement explicit | |||
Guides d’extraction
Étapes
- Prérequis : inscrivez une application dans Azure Active Directory. Avant de vous connecter à l’API Dynamics 365, vous devez inscrire une application dans votre environnement Azure AD. Accordez-lui des autorisations déléguées pour accéder à Dynamics 365 Finance & Operations, par exemple
Financials.ReadWrite.Allou une autorisation personnalisée. - Configurez l’ID de l’application dans Dynamics 365. Dans Dynamics 365, accédez à System administration > Setup > Azure Active Directory applications. Ajoutez l’ID d’application (client) de l’application inscrite dans Azure AD, puis associez-le à un compte utilisateur disposant des rôles de sécurité nécessaires pour lire les entités de données requises.
- Obtenez un jeton d’accès OAuth 2.0. Écrivez un script, par exemple en PowerShell ou en Python, pour vous authentifier auprès du point de terminaison de la plateforme d’identités Microsoft. Utilisez les identifiants de l’application (ID client et secret) pour demander un jeton d’accès à l’URL de la ressource Dynamics 365.
- Trouvez l’URL de votre environnement Dynamics 365. Repérez l’URL de base de votre environnement Dynamics 365. Le point de terminaison de l’API Web ressemble généralement à ceci :
https://[YourD365FinanceAndOpsURL].dynamics.com/data. - Créez et exécutez les requêtes de l’API OData. Pour chacune des 12 activités requises, créez une URL de requête OData GET spécifique. Utilisez
$selectpour récupérer uniquement les colonnes nécessaires et$filterpour définir la période et les conditions de statut. Le jeton d’authentification obtenu à l’étape 3 doit être inclus comme jeton Bearer dans l’en-tête d’autorisation de chaque requête. - Créez un script d’extraction. Écrivez un script qui parcourt la liste des requêtes OData. Il doit gérer l’authentification, exécuter chaque requête GET et enregistrer les données JSON obtenues. Tenez compte des limites de l’API et ajoutez des pauses si nécessaire.
- Gérez la pagination de l’API. Dynamics 365 répartit les résultats volumineux sur plusieurs pages. Votre script doit vérifier si la réponse contient une propriété
@odata.nextLink. Si c’est le cas, il doit envoyer une nouvelle requête à cette URL pour récupérer la page suivante, et continuer jusqu’à ce qu’aucunnextLinkne soit fourni. - Transformez et regroupez les données. Traitez la réponse JSON de chacun des 12 appels d’API. Pour chaque activité, créez un enregistrement normalisé contenant
ReturnCaseId,ActivityName,EventTimeet les autres attributs. Par exemple, pour l’événement « Return Order Created », associezReturnOrderNumberàReturnCaseId, définissezActivityNamesur « Return Order Created » et associezcreatedDateTimeàEventTime. Regroupez les enregistrements transformés de tous les appels dans une seule liste ou table. - Nettoyez et normalisez les horodatages. Veillez à ce que toutes les valeurs
EventTimesuivent le même format, de préférence UTC, par exempleYYYY-MM-DDTHH:MM:SSZ. Traitez les enregistrements dont l’horodatage est manquant ou invalide selon vos besoins. - Exportez le journal d’événements final. Une fois toutes les données collectées et transformées en un jeu de données unifié, exportez-le dans un fichier CSV. Vérifiez que les en-têtes de colonnes correspondent aux exigences de ProcessMind :
ReturnCaseId,ActivityName,EventTime,ResponsibleUser,DispositionCode, etc. Le fichier est alors prêt à être importé.
Configuration
- URL du point de terminaison de l’API : URL de base de votre instance Dynamics 365 Finance & Operations. Elle suit le format
https://[YourEnvironmentName].dynamics.com/data. - Application Azure AD : une application doit être inscrite dans Azure AD avec un ID client et un secret. Elle doit disposer des autorisations d’API nécessaires pour accéder aux entités de données Dynamics 365.
- Filtrage par période : il est essentiel d’appliquer un filtre de dates à chaque appel d’API à l’aide du paramètre OData
$filtersur un champ de date pertinent, tel quecreatedDateTimeoumodifiedDateTime. Pour commencer, il est courant d’extraire les données des 3 à 6 derniers mois afin de limiter le volume. - Filtre par entreprise : pour extraire les données d’une entité juridique précise, ajoutez le paramètre de requête
cross-company=true, puis utilisez$filtersur le champdataAreaId. Par exemple :?cross-company=true&$filter=dataAreaId eq '[YourCompanyCode]'. - Préférence de pagination : ajoutez l’en-tête
Prefer : odata.maxpagesize=[value]à vos requêtes pour définir le nombre d’enregistrements renvoyés par page. Une valeur comprise entre1000et5000est courante. Cela permet d’éviter les délais d’expiration de l’API pour les entités volumineuses. - Limitation du débit de l’API : tenez compte des limites de protection du service API Dynamics 365. Le script d’extraction doit gérer les réponses
429 (Too Many Requests), généralement en appliquant un délai exponentiel ou en faisant une pause avant de réessayer.
a Exemple de requête 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 Étapes
- Activez le point de terminaison TDS : vérifiez que le point de terminaison Tabular Data Stream (TDS) est activé pour votre environnement Dynamics 365 Dataverse. Un administrateur système peut l’activer dans le centre d’administration Power Platform, sous Environment > Settings > Features.
- Trouvez l’URL de l’environnement : repérez l’URL de votre environnement. Elle ressemble généralement à
yourorg.crm.dynamics.com. Le nom du serveur du point de terminaison TDS correspond à cette URL, avec le port 5558, par exempleyourorg.crm.dynamics.com,5558. - Connectez-vous avec un client SQL : utilisez un client SQL compatible avec TDS, tel que SQL Server Management Studio (SSMS) ou Azure Data Studio.
- Authentifiez-vous : connectez-vous au serveur avec votre compte Azure Active Directory, qui doit disposer des autorisations appropriées dans l’environnement Dataverse, généralement celles d’administrateur système ou de personnalisateur système.
- Préparez la requête : copiez la requête SQL complète fournie dans la section
queryde ce document et collez-la dans une nouvelle fenêtre de requête de votre client SQL. - Définissez les paramètres : repérez les espaces réservés dans la requête. Remplacez
'{StartDate}'et'{EndDate}'par la période d’extraction souhaitée, par exemple'2023-01-01'et'2023-12-31'. Modifiez également les valeurs des espaces réservés pour les codes de statut ou de motif afin qu’elles correspondent à votre configuration Dynamics 365. - Exécutez la requête : lancez la requête modifiée sur la base de données Dataverse. La durée d’exécution dépend du volume de données et de la période sélectionnée.
- Vérifiez les résultats : une fois la requête terminée, vérifiez que le jeu de données renvoyé contient les colonnes attendues :
ReturnCaseId,ActivityName,EventTimeet les attributs recommandés. - Exportez le journal d’événements : exportez les résultats de la requête dans un fichier CSV. La plupart des clients SQL disposent d’une fonction intégrée pour enregistrer directement les résultats dans un fichier. Vérifiez que le fichier est encodé en UTF-8.
- Importez les données dans ProcessMind : le fichier CSV exporté est prêt à être importé dans ProcessMind comme nouveau journal d’événements pour l’analyse Process Mining.
Configuration
- Prérequis : vous devez disposer d’un compte utilisateur ayant au moins un accès en lecture aux tables Dataverse concernées (par exemple, SalesTable, SalesLine, CustInvoiceJour). Les autorisations sont généralement gérées au moyen de rôles de sécurité, comme Administrateur système, ou d’un rôle personnalisé disposant des autorisations nécessaires sur les tables.
- Point de terminaison TDS : le point de terminaison TDS de Dataverse doit être activé pour l’environnement. Cette fonctionnalité permet d’exécuter directement des requêtes SQL en lecture seule sur la base de données Dataverse.
- Période : la requête contient les espaces réservés
'{StartDate}'et'{EndDate}'. Pour une première analyse, une période de 3 à 6 mois est recommandée afin d’obtenir un jeu de données représentatif sans entraîner de problèmes de performance. - Filtre par entreprise : telle qu’elle est écrite, la requête s’exécute sur toutes les entités juridiques auxquelles l’utilisateur a accès. Pour analyser une seule entreprise, décommentez et ajoutez une clause
WHEREfiltrant le champDATAAREAIDdans chaque partie de l’instructionUNION ALL, par exempleAND st.DATAAREAID = '[YourCompanyID]'. - Espaces réservés pour la logique personnalisée : la requête contient des espaces réservés tels que
[YourReplaceCode1]pour les codes de motif, ainsi que des notes sur l’association des commandes de remplacement. Configurez-les en fonction de votre processus métier et de votre configuration Dynamics 365. - Performances : les requêtes directes sur le point de terminaison TDS peuvent être lentes pour les grands jeux de données. La connexion est optimisée pour les requêtes analytiques, mais les jointures complexes portant sur des millions de lignes peuvent expirer. Il est recommandé d’appliquer des filtres de dates stricts.
a Exemple de requête 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}'; Prêt à commencer ?
Appuyez-vous sur ce modèle pour simplifier la collecte de vos données et commencer à repérer les pistes d’amélioration du traitement des retours et des remboursements. Lancez-vous dès aujourd’hui pour accélérer le traitement et améliorer la satisfaction client.
Mettez fin aux retards dans le traitement des retours et des remboursements : optimisez votre processus dès aujourd’hui
Réduisez le temps de cycle de 30 % et améliorez la satisfaction client.
Aucune carte bancaire requise. La configuration ne prend que quelques minutes.