Votre Modèle de Données pour la Gestion des Retours et Remboursements
Votre Modèle de Données pour la Gestion des Retours et Remboursements
- Attributs recommandés à collecter
- Activités clés à suivre
- Guide d'extraction NetSuite
Attributs de Gestion des Retours et Remboursements
| Nom | Description | ||
|---|---|---|---|
| ID du Cas de Retour ReturnCaseId | L'identifiant unique pour un cas de retour ou de remboursement client unique, reliant toutes les activités connexes de l'initiation à la clôture. | ||
| Description L'ID du Cas de Retour sert d'identifiant principal pour suivre le parcours de bout en bout d'un retour. Chaque ID unique correspond à une seule autorisation de retour, permettant l'analyse complète de tous les événements associés, tels que la réception de l'article, l'inspection et le traitement du remboursement. En Process Mining, cet ID est essentiel pour reconstruire le flux de processus complet pour chaque retour, permettant le calcul des temps de cycle et l'identification des déviations au niveau du cas. Pourquoi c'est important C'est l'attribut fondamental pour le Process Mining, car il connecte tous les événements individuels en instances de processus de bout en bout cohérentes, rendant possible l'analyse des flux de processus et de la performance. Où obtenir C'est typiquement l'ID Interne ou l'ID de Transaction de l'enregistrement d'Autorisation de Retour dans NetSuite. Exemples RMA-0012345RMA-0012346RMA-0012347 | |||
| Nom de l'activité ActivityName | Le nom de l'événement commercial ou de l'étape spécifique qui s'est produit dans le processus de retours, tel que 'Article Inspecté' ou 'Remboursement Traité'. | ||
| Description Le Nom de l'Activité décrit une étape ou un jalon distinct dans le cycle de vie des retours et remboursements. Ces événements sont ordonnés par leurs timestamps pour construire le flux de processus. L'analyse de la séquence et de la fréquence des activités aide à identifier les chemins de processus les plus courants, les goulots d'étranglement entre les étapes, et toute retouche ou activité répétée. Les exemples incluent 'Autorisation de Retour Créée', 'Article Reçu', et 'Avoir Approuvé'. Pourquoi c'est important Cet attribut définit les étapes du processus. Il est essentiel pour visualiser la carte des processus, analyser les variations de flux et identifier les goulots d'étranglement ou les boucles de retouche. Où obtenir Cet attribut est généralement dérivé des changements de statut des enregistrements de transaction comme les Autorisations de Retour et les Avoirs, ou des actions utilisateur spécifiques enregistrées dans les notes système ou les event logs personnalisés. Exemples Autorisation de retour crééeArticle ReçuArticle inspectéRemboursement traitéAutorisation de Retour Fermée | |||
| Timestamp de l'événement EventTimestamp | La date et l'heure précises auxquelles l'activité s'est produite, servant de colonne vertébrale chronologique du processus. | ||
| Description Le Event Timestamp enregistre le moment exact où une activité a eu lieu. Cette donnée est essentielle pour séquencer correctement les événements et pour toutes les analyses basées sur le temps. Il est utilisé pour calculer les durées entre les activités, les temps de cycle totaux des cas et les temps d'attente, qui sont fondamentaux pour le suivi des performances, l'analyse des goulots d'étranglement et les vérifications de conformité SLA. Les Timestamps doivent être précis pour garantir la fiabilité des aperçus du Process Mining. Pourquoi c'est important Cet attribut fournit l'ordre chronologique des événements, ce qui est nécessaire pour découvrir le flux de processus et calculer toutes les métriques de performance comme les temps de cycle et les temps d'attente. Où obtenir Cette information est typiquement extraite des champs 'Date de Création' ou 'Date de Dernière Modification' sur les enregistrements NetSuite ou des timestamps dans le sous-onglet Notes Système associés aux transactions. Exemples 2023-10-26T10:00:00Z2023-10-26T14:35:10Z2023-10-27T09:12:05Z | |||
| Dernière mise à jour des données LastDataUpdate | Le timestamp indiquant la dernière fois que les données de ce processus ont été rafraîchies ou mises à jour. | ||
| Description Cet attribut enregistre la dernière fois que le dataset a été mis à jour depuis le système source. C'est une pièce de métadonnée critique qui informe les utilisateurs sur l'actualité de l'analyse. Afficher cette information dans les dashboards aide à gérer les attentes et assure que les décisions sont prises sur la base d'une compréhension de l'opportunité des données. Pourquoi c'est important Offre une transparence sur l'actualité des données, ce qui est essentiel pour que les utilisateurs fassent confiance à l'analyse et comprennent sa pertinence par rapport à l'état actuel des opérations. Où obtenir Ce Exemples 2024-05-21T02:00:00Z2024-05-22T02:00:00Z | |||
| Système source SourceSystem | Le système d'où les données ont été extraites, utilisé pour le suivi de la provenance des données. | ||
| Description Cet attribut identifie l'origine des données de processus. Dans ce contexte, ce sera typiquement 'NetSuite'. Spécifier le système source est important dans les environnements où les données pourraient être fusionnées de plusieurs systèmes, assurant une lignée et une traçabilité claires des données. Pourquoi c'est important Identifie l'origine des données, ce qui est crucial pour la gouvernance des données, le dépannage et dans les scénarios où les données de plusieurs systèmes sont combinées pour une vue holistique du processus. Où obtenir C'est une valeur statique ('NetSuite') qui est généralement ajoutée pendant le processus d'extraction et de transformation des données. Exemples NetSuiteNetSuite ERP | |||
| Agent de Traitement ProcessingAgent | L'employé ou l'utilisateur qui a effectué une activité spécifique dans le processus de retour. | ||
| Description L'Agent de Traitement identifie l'individu responsable de l'exécution d'une tâche donnée, telle que l'approbation d'un retour ou l'inspection d'un article. Cet attribut est crucial pour l'analyse des performances au niveau de l'utilisateur. Il aide à identifier les employés performants, les domaines où une formation supplémentaire peut être nécessaire et les déséquilibres de répartition de la charge de travail au sein d'une équipe. L'analyse des activités par agent est essentielle pour le dashboard 'Performance du Processus de Retour par Département'. Pourquoi c'est important Permet l'analyse des performances individuelles et d'équipe, l'équilibrage de la charge de travail et l'identification des besoins en formation, impactant directement l'efficacité opérationnelle. Où obtenir Ceci peut être extrait de champs comme 'Créé par', 'Approuvé par', ou des champs utilisateur dans le sous-onglet Notes Système des transactions NetSuite. Exemples Alice JohnsonBob WilliamsCharlie Brown | |||
| Département Department | Le service ou l'équipe métier responsable de la gestion du cas de retour à une étape donnée. | ||
| Description Cet attribut attribue les activités de processus à un département spécifique, tel que 'Service Client', 'Entrepôt' ou 'Finance'. Il est essentiel pour comprendre les transferts entre les équipes et identifier les goulots d'étranglement départementaux. En analysant le temps que les cas passent au sein ou en attente d'un département spécifique, les organisations peuvent identifier les sources de retard et optimiser l'allocation des ressources. C'est une dimension principale pour le dashboard 'Performance du Processus de Retour par Département'. Pourquoi c'est important Permet l'analyse de la performance des processus par domaine fonctionnel, en soulignant les retards de transfert interdépartementaux et les goulets d'étranglement départementaux. Où obtenir Ceci peut être dérivé de l'enregistrement utilisateur ou employé associé à une activité, ou d'un champ 'Département' sur la transaction elle-même. C'est souvent configuré dans les enregistrements d'employés dans NetSuite. Exemples EntrepôtSupport ClientFinanceAssurance Qualité | |||
| Montant de remboursement réel ActualRefundAmount | Le montant monétaire final qui a été effectivement remboursé au client. | ||
| Description Cet attribut représente la valeur réelle créditée ou remboursée au client, telle qu'enregistrée sur l'Avoir ou la transaction de remboursement. Ce montant peut différer du montant demandé en raison d'ajustements tels que des frais de réapprovisionnement, des frais d'expédition ou des remboursements partiels pour des marchandises endommagées. Cet attribut est critique pour le reporting financier et pour le calcul de l'indicateur 'Taux d'Écart de Montant de Remboursement'. Pourquoi c'est important Représente le véritable impact financier du retour et est essentiel pour la réconciliation financière et l'analyse de l'exactitude des remboursements. Où obtenir Cette valeur est extraite du champ 'Total' sur la transaction d'Avoir qui est générée à partir de l'Autorisation de Retour. Exemples 99.99140.000.00 | |||
| Statut du Retour ReturnAuthorizationStatus | Le statut actuel de l'autorisation de retour, tel que 'En Attente d'Approbation', 'Approuvée' ou 'Fermée'. | ||
| Description Cet attribut indique l'état actuel du cas de retour au sein de son cycle de vie. Il est fondamental pour comprendre la progression des retours et pour segmenter les cas. Par exemple, l'analyse du temps passé au statut 'En Attente de Réception' peut mettre en évidence des retards d'expédition, tandis qu'une longue durée en 'En Attente d'Approbation' pourrait indiquer un goulot d'étranglement interne. Il est également utilisé pour déterminer le résultat final d'un retour, tel que 'Fermé' ou 'Rejeté'. Pourquoi c'est important Fournit un aperçu de l'emplacement de chaque retour dans le processus, permettant l'analyse de la distribution des cas, des durées de statut et des résultats du processus. Où obtenir Ceci correspond au champ 'Statut' ou à un champ similaire sur l'enregistrement d'Autorisation de Retour NetSuite. Exemples En attente d'approbationEn attente de réceptionApprouvéRejetéClôturé | |||
| Temps de cycle CycleTime | Le temps total écoulé entre la création de la demande de retour et sa clôture finale. | ||
| Description Le temps de cycle ( Pourquoi c'est important C'est une mesure principale de la performance des processus. Des temps de cycle élevés indiquent souvent des inefficacités, des goulots d'étranglement ou un travail manuel excessif, ce qui entraîne des coûts opérationnels plus élevés et une mauvaise expérience client. Où obtenir Ce n'est pas un champ dans le système source. C'est une métrique calculée pendant l'analyse de Process Mining en soustrayant le timestamp minimum du timestamp maximum pour chaque cas. Exemples 10 jours 4 heures5 jours 12 heures21 jours 2 heures | |||
| Type de Retour ReturnType | La classification du retour basée sur la raison fournie par le client. | ||
| Description Le Type de Retour classe les retours en fonction de la raison sous-jacente, telle que 'Article Défectueux', 'Mauvaise Taille', 'Changement d'Avis' ou 'Non Conforme à la Description'. Cette catégorisation est vitale pour l'analyse des causes profondes. En analysant les métriques de processus à travers différents types de retour, une entreprise peut identifier des problèmes de qualité des produits, des inexactitudes de description ou des erreurs d'exécution. Cet attribut est essentiel pour le dashboard 'Performance des Retours par Type et Canal'. Pourquoi c'est important Aide à identifier les causes profondes des retours, permettant des améliorations ciblées des produits, des descriptions marketing ou du processus d'exécution afin de réduire les volumes de retour. Où obtenir C'est typiquement un champ personnalisé ou un champ de liste/enregistrement standard sur le formulaire d'Autorisation de Retour où la raison du retour est capturée. Exemples Produit défectueuxArticle incorrect expédiéInsatisfaction clientMauvaise Taille/Couleur | |||
| Canal de Retour ReturnChannel | Le canal par lequel l'achat initial a été effectué ou le retour a été initié. | ||
| Description Le Canal de Retour indique l'origine du retour, par exemple, 'En ligne', 'En magasin' ou 'Marketplace'. Différents canaux peuvent avoir des processus de retour, des coûts et des attentes client distincts. L'analyse des performances par canal aide les entreprises à optimiser chaque processus spécifique, à allouer efficacement les ressources et à comprendre les problèmes spécifiques au canal. C'est un attribut central pour le dashboard 'Performance des Retours par Type et Canal'. Pourquoi c'est important Permet la comparaison des performances entre différents canaux commerciaux, révélant les inefficacités ou les meilleures pratiques spécifiques à la manière dont les retours sont initiés et traités. Où obtenir Cette information est souvent extraite de l'enregistrement de la Commande Client originale associée au retour. Elle pourrait être stockée dans un champ 'Canal' ou 'Localisation'. Exemples Boutique en LigneMagasin de DétailAmazon MarketplaceCommande Téléphonique | |||
| Condition de Retour ReturnCondition | La condition évaluée de l'article retourné lors de l'inspection, telle que 'Neuf', 'Endommagé' ou 'Utilisé'. | ||
| Description Cet attribut capture le résultat de l'inspection physique de l'article retourné. La condition détermine les étapes ultérieures, comme l'émission d'un remboursement complet, la remise en stock de l'article ou son besoin d'être mis au rebut. L'analyse de la cohérence et des temps de traitement de cette évaluation est l'objet du dashboard 'Qualité de l'Évaluation des Conditions de Retour' et est cruciale pour la réconciliation financière et la gestion des stocks. Pourquoi c'est important Impacte directement le résultat financier du retour et les actions d'inventaire subséquentes. Des évaluations incohérentes peuvent entraîner des pertes financières et des retouches de processus. Où obtenir C'est probablement un champ personnalisé sur l'enregistrement de Réception d'Article ou l'enregistrement d'Autorisation de Retour qui est rempli par le personnel de l'entrepôt pendant l'inspection. Exemples RevendableEndommagé - Dans la boîteUtilisé - Bon ÉtatPièces Manquantes | |||
| Date Cible SLA de Remboursement RefundSlaTargetDate | La date cible à laquelle le remboursement doit être traité selon les accords de niveau de service. | ||
| Description La Date Cible SLA de Remboursement est un timestamp calculé représentant l'engagement envers le client pour le traitement de son remboursement. Elle est généralement calculée en ajoutant une période prédéfinie, comme 5 jours ouvrables, à un événement clé tel que 'Article Reçu' ou 'Remboursement Approuvé'. Cet attribut est essentiel pour le dashboard 'Suivi de la Conformité SLA de Remboursement' et l'indicateur 'Taux d'Atteinte des SLA de Remboursement', permettant à l'entreprise de mesurer les performances par rapport à ses promesses. Pourquoi c'est important Permet la mesure quantitative de la performance par rapport aux engagements clients, ce qui est crucial pour maintenir la satisfaction et la confiance des clients. Où obtenir Cette date n'est généralement pas un champ standard. Elle doit être dérivée en ajoutant une période SLA prédéfinie (par exemple, 5 jours) à un timestamp clé, tel que la date 'Article Reçu'. Exemples 2023-11-01T23:59:59Z2023-11-05T23:59:59Z2023-11-10T23:59:59Z | |||
| Écart de Montant de Remboursement RefundAmountDiscrepancy | La différence calculée entre le montant de remboursement demandé et le montant réellement remboursé. | ||
| Description Cette métrique est calculée en soustrayant le 'Montant Réel Remboursé' du 'Montant de Remboursement Demandé'. Une valeur non nulle indique qu'un ajustement a été effectué pendant le processus, comme pour des frais de réapprovisionnement ou des marchandises endommagées. Cet attribut est utilisé pour alimenter l'analyse de l'indicateur 'Taux d'Écart de Montant de Remboursement', aidant à signaler les cas avec des ajustements financiers significatifs pour un examen plus approfondi. Pourquoi c'est important Met en évidence les ajustements financiers effectués pendant le processus de retour, permettant l'analyse des raisons des écarts et de leur cohérence et justification. Où obtenir Ceci est un attribut calculé. La formule est : Exemples 0.0010.00-5.00 | |||
| Est Automatisé IsAutomated | Un indicateur booléen indiquant si une activité a été exécutée automatiquement par le système. | ||
| Description Cet attribut indique si une activité a été exécutée par un utilisateur ou par un système automatisé, un script ou un workflow. Par exemple, un événement initial 'Autorisation de Retour Créée' pourrait être automatisé via un portail client, tandis que 'Article Inspecté' est une activité manuelle. Le suivi de l'automatisation aide à identifier les opportunités d'automatiser les étapes manuelles et à mesurer les gains d'efficacité des automatisations existantes. Pourquoi c'est important Aide à distinguer les tâches manuelles des tâches automatisées, ce qui est essentiel pour identifier les opportunités d'automatisation et mesurer l'impact des efforts de transformation numérique. Où obtenir Ceci peut être déduit de l'utilisateur associé à un événement. Les événements générés par le système dans NetSuite sont souvent associés à un utilisateur système spécifique ou à un ID de script. Exemples truefaux | |||
| Est conforme aux SLA IsSlaCompliant | Un indicateur calculé qui indique si le remboursement a été traité dans le respect de l'objectif de SLA défini. | ||
| Description Cet attribut booléen est dérivé en comparant le timestamp de 'Remboursement Traité' avec la 'Date Cible SLA de Remboursement'. Si le remboursement a été traité à la date cible ou avant, la valeur est vraie, sinon elle est fausse. Ce flag simplifie la création de rapports de conformité et de dashboards, tels que le dashboard 'Suivi de la Conformité SLA de Remboursement', et est utilisé pour calculer l'indicateur 'Taux d'Atteinte des SLA de Remboursement'. Pourquoi c'est important Fournit un résultat clair et binaire pour la performance SLA au cas par cas, facilitant le suivi, le reporting et l'analyse des taux de conformité au fil du temps. Où obtenir Cet attribut est calculé lors de la transformation des données ou au sein de l'outil de Process Mining. La logique est : Exemples truefaux | |||
| ID client CustomerId | L'identifiant unique du client initiant le retour. | ||
| Description L'ID Client lie une transaction de retour à un client spécifique. Cela permet une analyse centrée sur le client, comme l'identification des clients avec des retours fréquents, ce qui pourrait indiquer une insatisfaction ou un comportement frauduleux. Cela permet également de segmenter la performance du processus par type ou valeur de client, aidant à prioriser le service pour les comptes clés. Pourquoi c'est important Facilite l'analyse au niveau client du comportement de retour et permet la segmentation des processus basée sur des attributs client comme le segment ou la valeur vie client. Où obtenir C'est le champ 'Client' ou 'Entité' sur l'en-tête de l'enregistrement d'Autorisation de Retour dans NetSuite. Exemples CUST-001CUST-002CUST-003 | |||
| Identifiant de produit ProductIdentifier | L'identifiant unique du produit retourné, tel que le SKU ou le numéro d'article. | ||
| Description Cet attribut identifie l'article spécifique impliqué dans le retour. L'analyse des retours au niveau du produit est cruciale pour identifier les articles avec des taux de retour élevés, ce qui peut indiquer des défauts de qualité, de mauvaises descriptions ou d'autres problèmes. Ces données permettent une analyse approfondie des performances du produit et peuvent éclairer les décisions liées au développement de produits, à l'approvisionnement et au marketing. Pourquoi c'est important Les liens renvoient les données de processus à des produits spécifiques, permettant une analyse des causes profondes des problèmes liés aux produits et aidant à réduire les taux de retour globaux. Où obtenir Ceci se trouve dans le sous-onglet 'Articles' de l'enregistrement d'Autorisation de Retour. Cela correspond au champ 'Article'. Exemples SKU-TEE-BL-LPROD-00543ITEM-987123 | |||
| Montant de Remboursement Demandé RequestedRefundAmount | Le montant monétaire du remboursement initialement demandé ou attendu pour le retour. | ||
| Description Cet attribut stocke la valeur de remboursement attendue au début du processus. Il est généralement basé sur le prix d'achat original des articles retournés. Ce montant sert de référence pour la comparaison avec le montant final remboursé. L'indicateur 'Taux d'Écart de Montant de Remboursement' compare directement cette valeur avec le Montant Réel Remboursé pour identifier les variances causées par les frais de réapprovisionnement, les remboursements partiels ou d'autres ajustements. Pourquoi c'est important Fournit une base pour l'analyse financière, aidant à suivre les écarts entre les valeurs de remboursement attendues et réelles et à identifier les raisons des ajustements. Où obtenir Cette valeur est dérivée des champs 'Montant' ou 'Taux' sur les lignes de la transaction d'Autorisation de Retour. Exemples 99.99150.0025.50 | |||
| Respect de la Politique ReturnPolicyAdherence | Indique si le retour est conforme aux politiques de retour établies de l'entreprise. | ||
| Description Cet attribut booléen ou catégoriel signale si un retour satisfait à tous les critères prédéfinis, tels que la fenêtre de retour, la condition de l'article et la preuve d'achat. Il est utilisé pour surveiller la conformité et gérer les exceptions. Le dashboard 'Exceptions de Respect de la Politique de Retour' s'appuie sur cet attribut pour mettre en évidence les cas qui nécessitent un traitement ou un examen spécial, aidant à minimiser les risques et à assurer une application cohérente des règles. Pourquoi c'est important Aide à surveiller et à appliquer les politiques de retour, réduisant le risque financier lié aux retours non conformes et assurant l'équité et la cohérence. Où obtenir Il s'agirait presque certainement d'un champ personnalisé, éventuellement une case à cocher ou une liste, sur l'enregistrement d'Autorisation de Retour, géré via un workflow. Exemples ConformeNon-Conforme - Hors DélaiException approuvée | |||
Activités de Gestion des Retours et Remboursements
| Activité | Description | ||
|---|---|---|---|
| Article Reçu | Cette activité marque la réception physique de l'article retourné à l'entrepôt ou au centre de traitement. Dans NetSuite, cela est explicitement enregistré par la création d'une transaction de Réception d'Article liée à l'Autorisation de Retour originale. | ||
| Pourquoi c'est important C'est un jalon critique qui fait passer le processus de l'action client au traitement interne. Le temps entre 'Retour Approuvé' et 'Article Reçu' mesure la rapidité de retour du client, tandis que le temps après cet événement mesure l'efficacité interne. Où obtenir Cet événement est le timestamp de création de la transaction de Réception d'Article. Cet enregistrement est directement lié à l'Autorisation de Retour d'origine. Capture Date de création de l'enregistrement de la transaction NetSuite Réception d'Article liée à l'AR. Type d'événement explicit | |||
| Autorisation de Retour Approuvée | Cette activité représente l'approbation formelle de la demande de retour du client par un employé, permettant au processus d'avancer. Elle est généralement capturée en déduisant un changement dans le champ de statut de l'enregistrement d'Autorisation de Retour, tel que de 'En Attente d'Approbation' à 'En Attente de Réception'. | ||
| Pourquoi c'est important Le suivi de cette étape d'approbation est crucial pour identifier les goulots d'étranglement dans la phase d'examen initial. Les retards ici ont un impact direct sur le temps nécessaire pour informer le client et recevoir l'article retourné. Où obtenir Déduit des notes système ou de l'historique du workflow pour l'enregistrement ReturnAuthorization, spécifiquement lorsque le champ 'Status' est mis à jour vers un état approuvé (par ex., 'Pending Receipt'). Capture Détecter le changement de statut de l'enregistrement ReturnAuthorization vers un état 'Approuvé'. Type d'événement inferred | |||
| Autorisation de retour créée | Cette activité marque l'initiation du processus de retour lorsqu'un client demande à retourner un article. Elle est explicitement capturée dans NetSuite par la création d'un nouvel enregistrement d'Autorisation de Retour (AR), qui sert d'identifiant principal du cas pour le retour. | ||
| Pourquoi c'est important En tant que point de départ du processus, cette activité est essentielle pour mesurer le temps de cycle total des retours et analyser le volume des demandes de retour entrantes au fil du temps. Où obtenir Cet événement est le timestamp de création de l'enregistrement d'Autorisation de Retour dans NetSuite. L'utilisateur, la date et le statut initial (par exemple, 'En Attente d'Approbation') sont généralement capturés sur cet enregistrement. Capture Date de création de l'enregistrement de la transaction NetSuite Autorisation de Retour. Type d'événement explicit | |||
| Autorisation de Retour Fermée | C'est l'activité finale, marquant la clôture administrative du cas de retour après que tout le traitement soit terminé. Cela est déduit du changement de statut final sur l'enregistrement d'Autorisation de Retour à un état 'Fermé'. | ||
| Pourquoi c'est important En tant que point final définitif du processus, cette activité est essentielle pour calculer les temps de cycle de bout en bout et identifier les cas qui restent ouverts longtemps après que le remboursement a été traité. Où obtenir Déduit des notes système ou de l'historique du workflow pour l'enregistrement ReturnAuthorization lorsque le champ 'Status' est mis à jour vers son état terminal final, tel que 'Closed'. Capture Détecter le changement de statut de l'enregistrement ReturnAuthorization vers un état 'Fermé'. Type d'événement inferred | |||
| Avoir émis | Cette activité signifie que la partie financière du retour a été initiée par la création d'un Avoir. Ce document détaille le montant à rembourser au client et est créé à partir de l'Autorisation de Retour après réception et approbation de l'article. | ||
| Pourquoi c'est important La création de l'Avoir est un jalon financier clé. Le temps entre la réception de l'article et la création de l'avoir révèle l'efficacité du processus d'inspection à l'avoir. Où obtenir Cet événement est le timestamp de création de la transaction d'Avoir. Le champ 'Créé à partir de' sur l'Avoir le relie à l'Autorisation de Retour. Capture Date de création de l'enregistrement de la transaction NetSuite Avoir. Type d'événement explicit | |||
| Remboursement traité | C'est le règlement financier final où les fonds sont restitués au client. Il est explicitement capturé par la création d'une transaction de Remboursement Client, qui est générée à partir de l'Avoir. | ||
| Pourquoi c'est important Cette activité est essentielle pour mesurer la conformité SLA et la satisfaction client. La durée entre 'Avoir Approuvé' et 'Remboursement Traité' reflète directement la rapidité du département de trésorerie ou des finances. Où obtenir Cet événement est le timestamp de création de la transaction de Remboursement Client. Le champ 'Créé à partir de' sur cette transaction le relie à l'Avoir. Capture Date de création de l'enregistrement de la transaction NetSuite Remboursement Client. Type d'événement explicit | |||
| Article inspecté | Cette activité conceptuelle représente l'achèvement de l'inspection physique de l'article retourné pour évaluer sa condition. Comme NetSuite ne possède pas d'objet 'Inspection' standard, cela est généralement déduit d'un champ personnalisé ou d'une mise à jour de statut sur l'Autorisation de Retour ou la Réception d'Article. | ||
| Pourquoi c'est important L'inspection est souvent un goulet d'étranglement majeur. Suivre son temps d'achèvement est vital pour analyser la performance des agents, la cohérence des décisions et son impact sur l'approbation subséquente du remboursement. Où obtenir Nécessite une analyse système. Cela peut être déduit d'un changement dans un champ personnalisé 'Statut d'Inspection' sur l'enregistrement d'Autorisation de Retour, ou il pourrait s'agir d'un processus hors ligne non enregistré. Capture Déduit d'un changement de champ de statut personnalisé sur la Return Authorization ou l'Item Receipt. Type d'événement inferred | |||
| Autorisation de Retour Rejetée | Ceci représente la décision de refuser une demande de retour client, souvent en raison de violations de politique. Cet événement est capturé en déduisant un changement de statut sur l'enregistrement d'Autorisation de Retour à un état 'Rejeté' ou 'Fermé' sans traitement ultérieur. | ||
| Pourquoi c'est important L'analyse des rejets permet d'identifier les raisons courantes des demandes de retour non conformes, ce qui peut éclairer la communication client et la clarification des politiques. C'est une déviation clé du chemin idéal. Où obtenir Déduit des notes système ou de l'historique du workflow pour l'enregistrement ReturnAuthorization lorsque le champ 'Status' est mis à jour vers un état terminal 'Rejected'. Capture Détecter le changement de statut de l'enregistrement ReturnAuthorization vers un état 'Rejeté'. Type d'événement inferred | |||
| Client Notifié | Représente l'envoi d'une notification au client concernant une mise à jour de statut clé, telle que l'approbation, la réception de l'article ou le remboursement traité. Cela est généralement déduit du timestamp d'un e-mail généré par le système, enregistré sous l'onglet de communication de l'enregistrement. | ||
| Pourquoi c'est important Une communication rapide est essentielle à la satisfaction client. Mesurer le décalage entre un jalon et la notification client aide à identifier les lacunes dans l'expérience client. Où obtenir Nécessite une analyse système. Capturé à partir du timestamp d'un e-mail sortant ou d'une note d'utilisateur sur le sous-onglet Communication de l'Autorisation de Retour ou de l'Avoir. Capture Timestamp d'un e-mail ou d'une entrée de log de communication liée au cas. Type d'événement inferred | |||
| Note de crédit appliquée | Cette activité représente une alternative à un remboursement en espèces, où l'avoir est appliqué à une facture client ouverte. Elle est déduite du lien 'Appliqué à' sur l'Avoir, indiquant que le crédit a été utilisé. | ||
| Pourquoi c'est important Distinguer les remboursements en espèces des applications de crédit est important pour l'analyse financière. Ce chemin représente un type de résolution de processus différent par rapport à un remboursement direct. Où obtenir Déduit des notes système ou des enregistrements associés du CreditMemo, spécifiquement lorsqu'il est lié à une transaction de Facture pour compenser le solde d'un client. Capture Détecter l'application d'un CreditMemo à une transaction de Facture. Type d'événement inferred | |||
| Note de crédit approuvée | Représente l'approbation formelle de l'avoir, souvent requise pour les remboursements de grande valeur ou dans le cadre des contrôles financiers. Cela est déduit d'un changement de statut sur l'enregistrement de l'Avoir, indiquant qu'il est prêt pour l'application ou le paiement. | ||
| Pourquoi c'est important Si des approbations financières sont requises, cette étape peut constituer un goulet d'étranglement important. L'analyse de sa durée aide à rationaliser les contrôles financiers sans retarder les remboursements clients. Où obtenir Déduit des notes système pour l'enregistrement CreditMemo, spécifiquement lorsqu'un champ de statut d'approbation est mis à jour de 'Pending Approval' à 'Approved' ou 'Open'. Capture Détecter le changement de statut de la transaction CreditMemo vers un état 'Approuvé'. Type d'événement inferred | |||
| Ordre d'échange créé | Cette activité représente un scénario d'échange où une nouvelle commande client est créée pour le client au lieu d'un remboursement. Cet événement est généralement capturé par la création d'une Commande Client qui est liée à l'Autorisation de Retour originale. | ||
| Pourquoi c'est important Le suivi des échanges comme chemin distinct aide à analyser les préférences des clients et l'efficacité du processus d'échange par rapport au processus de remboursement. C'est une variante courante et importante. Où obtenir Cet événement est le timestamp de création d'une nouvelle transaction de Commande Client. Le lien vers l'Autorisation de Retour peut être dans un champ standard ou personnalisé, nécessitant une analyse système. Capture Date de création de l'enregistrement d'une Commande Client liée à l'Autorisation de Retour. Type d'événement explicit | |||
Guides d'extraction
Étapes
- Accéder à la création de recherches enregistrées : Connectez-vous à NetSuite. Allez dans Rapports > Nouvelle recherche. Sur la page Nouvelle recherche enregistrée, cliquez sur 'Transaction'.
- Définir les critères principaux : Dans la page de configuration de la recherche, sous l'onglet 'Critères' et le sous-onglet 'Standard', définissez les filtres suivants pour isoler les demandes d'autorisation de retour :
TypeestAutorisation de retourLigne principaleestOui- Ajoutez un filtre
Date de créationet définissez la période souhaitée (par exemple, 'au cours des 3 derniers mois'). C'est essentiel pour limiter le volume de données.
- Configurer les colonnes de résultats pour les attributs : Allez dans l'onglet 'Résultats'. Ajoutez les champs suivants qui deviendront les attributs de votre journal d'événements. Utilisez 'Libellé personnalisé' pour les renommer si besoin.
- ID du cas :
Numéro du documentouTranID(Libellé : ReturnCaseId) - Statut du retour :
Statut(Libellé : ReturnAuthorizationStatus) - Agent responsable :
Créé parou un champ personnalisé (Libellé : ProcessingAgent) - Département :
Département(Libellé : Department) - Type de retour : Un champ personnalisé tel que
[Votre champ motif de retour](Libellé : ReturnType) - Montant du remboursement :
Montant(Libellé : ActualRefundAmount)
- ID du cas :
- Ajouter des colonnes de formules pour les horodatages : C'est l'étape la plus importante. Pour chacune des 12 activités, ajoutez une colonne 'Formule (Date/Heure)'. Chaque formule utilise une instruction CASE pour renvoyer un horodateur (timestamp) uniquement si l'événement a eu lieu. Consultez la section 'Requête' pour les formules exactes.
- Ajouter des colonnes statiques : Ajoutez deux colonnes 'Formule (Texte)' à vos résultats :
- Pour
SourceSystem, utilisez la formule :'NetSuite'. - Pour
LastDataUpdate, utilisez une formule indiquant la date d'exécution, comme{today}. Pour un horodateur précis, il s'agira de l'heure d'exportation.
- Pour
- Enregistrer et exporter la recherche : Donnez un nom explicite à votre recherche, par exemple 'Extraction Retours ProcessMind'. Cliquez sur 'Enregistrer et exécuter'. Une fois les résultats affichés, cliquez sur l'icône d'exportation et choisissez 'CSV'.
- Transformer les données en journal d'événements : Le fichier CSV exporté sera au format 'large' (une ligne par dossier de retour avec plusieurs colonnes d'horodatage). Vous devez le transformer en un format 'long' pour créer un Event Log. Utilisez un outil comme Power Query dans Excel (Dépivoter les colonnes), Python ou un autre script pour effectuer cette conversion.
- Pour chaque ligne du CSV, créez plusieurs nouvelles lignes (une pour chaque colonne d'horodatage non vide).
- Le tableau final doit comporter des colonnes comme
ReturnCaseId,ActivityNameetEventTimestamp. Le champActivityNamecorrespond à l'en-tête de la colonne d'horodatage d'origine, etEventTimestampà sa valeur.
- Finaliser pour l'importation : Vérifiez que le fichier CSV final contient les en-têtes requis :
ReturnCaseId,ActivityName,EventTimestamp,SourceSystem,LastDataUpdate, ainsi que vos attributs. Le fichier est prêt à être importé dans ProcessMind.
Configuration
- Type de recherche : La recherche sauvegardée (
Saved Search) doit être de typeTransaction. - Plage de dates : Il est crucial d'appliquer un filtre de plage de dates sur le champ
Date Createdde laReturn Authorization. Une plage de 3 à 6 mois est recommandée pour concilier l'exhaustivité des données et les performances. - Filtre principal : La recherche doit être filtrée pour
TypeestReturn AuthorizationetMain LineestYesafin de garantir un enregistrement initial par cas de retour. - Champs personnalisés : La précision de cette extraction, en particulier pour les événements conceptuels comme 'Item Inspected' ou les attributs comme 'Return Type', dépend fortement de l'utilisation des champs personnalisés sur les enregistrements de transaction de votre organisation. Les formules fournies incluent des placeholders comme
{custbody_...}qui doivent être ajustés pour correspondre à votre configuration NetSuite. - Autorisations utilisateur : L'utilisateur exécutant la recherche a besoin d'autorisations de consultation pour tous les types de transaction impliqués :
Return Authorization,Item Receipt,Credit Memo,Customer RefundetSales Order. - Performance : Pour les comptes avec un très grand volume de retours, cette recherche exhaustive peut être lente. Envisagez de l'exécuter pendant les heures creuses ou de la planifier pour l'exporter automatiquement vers le classeur de fichiers.
a Exemple de requête config
This configuration represents the settings in the NetSuite Saved Search UI. The 'Results' tab should be configured with the following columns and formulas.
**Criteria Tab:**
* `Type` = `Return Authorization`
* `Main Line` = `true`
* `Date Created` = `[Specify Desired Date Range]`
**Results Tab (Columns):**
| Custom Label | Field / Formula Type | Formula / Field ID |
|---|---|---|
| `ReturnCaseId` | Formula (Text) | `{tranid}` |
| `SourceSystem` | Formula (Text) | `'NetSuite'` |
| `LastDataUpdate` | Formula (Date/Time) | `{today}` |
| `ReturnAuthorizationStatus` | Field | `Status` |
| `ProcessingAgent` | Field | `Created By` |
| `Department` | Field | `Department` |
| `ReturnType` | Field | `{custbody_return_reason}` |
| `ActualRefundAmount` | Field | `Amount` |
| `CycleTime` | Formula (Numeric) | `CASE WHEN {status} = 'Closed' THEN {lastmodifieddate} - {datecreated} ELSE NULL END` |
| `Activity_ReturnAuthorizationCreated` | Field | `Date Created` |
| `Activity_ReturnAuthorizationApproved` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Pending Receipt' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` |
| `Activity_ReturnAuthorizationRejected` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Rejected' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` |
| `Activity_ItemReceived` | Formula (Date/Time) | `{applyingtransaction.trandate}` |
| `Activity_ItemInspected` | Formula (Date/Time) | `CASE WHEN {custbody_inspection_status} = 'Complete' THEN {custbody_inspection_date} ELSE NULL END` |
| `Activity_CreditMemoCreated` | Formula (Date/Time) | `{createdfrom.trandate}` |
| `Activity_CreditMemoApproved` | Formula (Date/Time) | `MIN(CASE WHEN {createdfrom.systemnotes.newvalue} = 'Open' AND {createdfrom.systemnotes.field} = 'Status' THEN {createdfrom.systemnotes.date} ELSE NULL END)` |
| `Activity_RefundProcessed` | Formula (Date/Time) | `{createdfrom.appliedtotransaction.trandate}` |
| `Activity_CreditMemoApplied` | Formula (Date/Time) | `CASE WHEN {createdfrom.status} = 'Fully Applied' AND {createdfrom.appliedtotransaction.type} = 'Invoice' THEN {createdfrom.appliedtotransaction.date} ELSE NULL END` |
| `Activity_ExchangeOrderCreated` | Formula (Date/Time) | `{custbody_exchange_order.trandate}` |
| `Activity_CustomerNotified` | Formula (Date/Time) | `MAX({messages.messagedate})` |
| `Activity_ReturnAuthorizationClosed` | Formula (Date/Time) | `MIN(CASE WHEN {systemnotes.newvalue} = 'Closed' AND {systemnotes.field} = 'Status' THEN {systemnotes.date} ELSE NULL END)` | Étapes
- Activer SuiteAnalytics Connect : Assurez-vous de disposer d'une licence SuiteAnalytics Connect pour votre compte NetSuite. Un administrateur doit activer cette fonctionnalité sous Configuration > Société > Activer les fonctionnalités > Analytique.
- Attribuer les autorisations utilisateur : Accordez au rôle d'utilisateur de connexion l'autorisation 'SuiteAnalytics Connect'. Cet utilisateur aura également besoin d'autorisations de consultation pour tous les enregistrements interrogés, tels que les Transactions, les Employés et les Clients.
- Installer le pilote ODBC : Téléchargez et installez le pilote ODBC NetSuite approprié à votre système d'exploitation depuis la page de téléchargement de SuiteAnalytics Connect dans NetSuite.
- Configurer le DSN : Configurez un DSN (Data Source Name) sur la machine où vous exécuterez la requête. Saisissez votre source de données de service, nom d'hôte du serveur, port, ID de rôle, ID de compte et vos identifiants.
- Connecter votre client SQL : Utilisez un client SQL, tel que DBeaver ou Microsoft SQL Server Management Studio, pour vous connecter à NetSuite à l'aide du DSN que vous avez configuré.
- Préparer la requête SQL : Copiez la requête SQL fournie dans votre client. Cette requête est conçue pour extraire tous les événements clés du processus de retours et remboursements.
- Personnaliser la requête : Modifiez les valeurs des placeholders dans la requête. Au minimum, vous devez mettre à jour la plage de dates dans la Common Table Expression (CTE)
ReturnAuthorizationspour filtrer la période souhaitée. Vous devrez peut-être également ajuster les noms de champs personnalisés, commeCUSTBODY_RETURN_TYPE, ou les valeurs de statut spécifiques pour correspondre à votre configuration NetSuite. - Exécuter la requête : Exécutez la requête SQL personnalisée contre la réplique de la base de données NetSuite. Le temps d'exécution peut varier en fonction de la plage de dates et du volume de données.
- Examiner et exporter les données : Une fois la requête terminée, examinez les résultats pour vous assurer qu'ils sont corrects. Exportez l'ensemble du jeu de résultats vers un fichier CSV.
- Finaliser pour le téléchargement : Assurez-vous que les en-têtes du fichier CSV correspondent aux attributs requis :
ReturnCaseId,ActivityName,EventTimestamp,SourceSystem,LastDataUpdate, etc. Vérifiez que la colonneEventTimestampest dans un format date/heure cohérent. Le fichier est maintenant prêt pour le téléchargement vers ProcessMind.
Configuration
- Prérequis : Une licence NetSuite avec le module complémentaire SuiteAnalytics Connect est requise. L'utilisateur établissant la connexion doit avoir un rôle avec l'autorisation 'SuiteAnalytics Connect' et un accès en lecture aux enregistrements de transaction, d'entité et d'employé.
- Configuration de la source de données : Vous devez configurer un DSN (Data Source Name) à l'aide du pilote ODBC NetSuite. Cela nécessite votre ID de compte, ID de rôle et vos identifiants. L'hôte de service est généralement
odbcserver.netsuite.compour les environnements de production. - Filtrage par plage de dates : Il est critique d'appliquer un filtre de plage de dates à la CTE initiale qui sélectionne les Return Authorizations. Sans filtre, la requête tentera d'extraire toutes les données de retour et sera probablement très lente ou expirera. Une plage de 3 à 6 mois est recommandée pour l'analyse initiale.
- Types de transaction clés : La requête cible plusieurs types de transaction principaux : ReturnAuthorization, ItemReceipt, CreditMemo, CustomerRefund et SalesOrd (pour les échanges). Assurez-vous que votre processus utilise ces objets standards.
- Dépendances des champs personnalisés : Les activités telles que 'Item Inspected' et les attributs comme 'Return Type' sont souvent capturés dans des champs personnalisés. La requête fournie utilise des placeholders comme
CUSTBODY_INSPECTION_STATUSetCUSTBODY_RETURN_TYPE. Vous devez identifier les IDs de champs personnalisés corrects dans votre système et mettre à jour la requête en conséquence. - Considérations de performance : Il s'agit d'une requête complexe avec plusieurs jointures et une grande structure
UNION ALL. Exécutez-la pendant les heures creuses pour minimiser l'impact sur les performances du système. Pour les très grands ensembles de données, envisagez d'exécuter la requête par incréments de temps plus petits et d'ajouter les résultats.
a Exemple de requête sql
WITH ReturnAuthorizations AS (
SELECT
T.TRANSACTION_ID AS ReturnCaseId,
T.TRANDATE
FROM
TRANSACTION T
WHERE
T.TYPE = 'ReturnAuthorization'
AND T.TRANDATE BETWEEN TO_DATE('[YYYY-MM-DD]', 'YYYY-MM-DD') AND TO_DATE('[YYYY-MM-DD]', 'YYYY-MM-DD')
)
SELECT
RA.ReturnCaseId AS "ReturnCaseId",
'Return Authorization Created' AS "ActivityName",
T.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION T
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON T.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Approved' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE = 'Pending Receipt'
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Rejected' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE IN ('Rejected', 'Closed')
UNION ALL
SELECT
RA.ReturnCaseId,
'Item Received' AS "ActivityName",
IR.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION IR
INNER JOIN TRANSACTION T_RA ON IR.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON IR.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE IR.TYPE = 'ItemReceipt'
UNION ALL
SELECT
RA.ReturnCaseId,
'Item Inspected' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SN.FIELD = 'TRANSACTION.CUSTBODY_INSPECTION_STATUS' AND SN.NEW_VALUE = 'Completed'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION CM
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON CM.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Approved' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION CM ON SN.TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo' AND SN.FIELD = 'TRANSACTION.APPROVAL_STATUS' AND SN.NEW_VALUE = 'Approved'
UNION ALL
SELECT
RA.ReturnCaseId,
'Refund Processed' AS "ActivityName",
REF.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
ABS(REF.TOTAL) AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION REF
INNER JOIN TRANSACTION CM ON REF.APPLIED_TO_TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON REF.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE REF.TYPE = 'CustomerRefund'
UNION ALL
SELECT
RA.ReturnCaseId,
'Credit Memo Applied' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION CM ON SN.TRANSACTION_ID = CM.TRANSACTION_ID
INNER JOIN TRANSACTION T_RA ON CM.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE CM.TYPE = 'CreditMemo' AND SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE = 'Fully Applied'
UNION ALL
SELECT
RA.ReturnCaseId,
'Exchange Order Created' AS "ActivityName",
SO.CREATED_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T_RA.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T_RA.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM TRANSACTION SO
INNER JOIN TRANSACTION T_RA ON SO.CREATED_FROM_ID = T_RA.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T_RA.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SO.CREATED_BY_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE SO.TYPE = 'SalesOrd'
UNION ALL
SELECT
RA.ReturnCaseId,
'Customer Notified' AS "ActivityName",
MSG.MESSAGE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
T.STATUS AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM MESSAGES MSG
INNER JOIN TRANSACTION T ON MSG.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON MSG.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE MSG.INCOMING = 'F'
UNION ALL
SELECT
RA.ReturnCaseId,
'Return Authorization Closed' AS "ActivityName",
SN.NOTE_DATE AS "EventTimestamp",
'NetSuite' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
SN.NEW_VALUE AS "ReturnAuthorizationStatus",
E.full_name AS "ProcessingAgent",
D.full_name AS "Department",
T.CUSTBODY_RETURN_TYPE AS "ReturnType",
NULL AS "ActualRefundAmount",
NULL AS "CycleTime"
FROM SYSTEM_NOTES SN
INNER JOIN TRANSACTION T ON SN.TRANSACTION_ID = T.TRANSACTION_ID
INNER JOIN ReturnAuthorizations RA ON T.TRANSACTION_ID = RA.ReturnCaseId
LEFT JOIN EMPLOYEE E ON SN.AUTHOR_ID = E.EMPLOYEE_ID
LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE T.TYPE = 'ReturnAuthorization' AND SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE LIKE '%Closed%';