Il Suo Template Dati per la Gestione di Resi e Rimborsi
Il Suo Template Dati per la Gestione di Resi e Rimborsi
- Attributi consigliati da raccogliere
- Attività chiave da tracciare
- Guida all'estrazione dei dati da NetSuite
Attributi di gestione resi e rimborsi
| Nome | Descrizione | ||
|---|---|---|---|
| ID pratica di reso ReturnCaseId | L'identificatore univoco per una singola pratica di reso o rimborso, che collega tutte le attività correlate dall'inizio alla chiusura. | ||
| Descrizione L'ID Pratica di Reso funge da identificatore primario per tracciare il percorso end-to-end di un reso. Ogni ID univoco corrisponde a una singola autorizzazione al reso, consentendo l'analisi completa di tutti gli eventi associati. Nel Process Mining, questo ID è essenziale per ricostruire il flusso del processo per ogni reso, permettendo il calcolo dei tempi di ciclo e l'identificazione delle deviazioni. Perché è importante Attributo fondamentale per il Process Mining, poiché collega i singoli eventi in istanze di processo coerenti. Dove trovare Solitamente è l'ID interno o l'ID transazione del record RA in NetSuite. Esempi RMA-0012345RMA-0012346RMA-0012347 | |||
| Nome attività ActivityName | Il nome dello specifico evento aziendale o passaggio avvenuto nel processo di reso, come 'Articolo ispezionato' o 'Rimborso elaborato'. | ||
| Descrizione Il Nome Attività descrive una fase specifica o una milestone nel ciclo di vita dei resi e dei rimborsi. Questi eventi sono ordinati cronologicamente per costruire il flusso del processo. L'analisi della sequenza e della frequenza delle attività aiuta a identificare i percorsi più comuni, i colli di bottiglia tra le fasi e le eventuali rilavorazioni o attività ripetute. Esempi: 'Creazione autorizzazione al reso', 'Articolo ricevuto' e 'Approvazione nota di credito'. Perché è importante Questo attributo definisce i passaggi del processo. È essenziale per visualizzare la mappa del processo, analizzare le variazioni di flusso e identificare colli di bottiglia o rilavorazioni. Dove trovare Questo attributo è in genere derivato dai cambi di stato dei record di transazione (RA e Credit Memo) o dalle system notes. Esempi Return Authorization CreataArticolo RicevutoArticolo ispezionatoRimborso ElaboratoAutorizzazione al reso chiusa | |||
| Timestamp Evento EventTimestamp | La data e l'ora precise in cui si è verificata l'attività, fungendo da spina dorsale cronologica del processo. | ||
| Descrizione L'Event Timestamp registra il momento esatto in cui si è svolta un'attività. Questo dato è critico per la corretta sequenzialità degli eventi e per ogni analisi temporale. Viene utilizzato per calcolare la durata tra le attività, i tempi di ciclo totali delle pratiche e i tempi di attesa, fondamentali per il monitoraggio delle performance, l'analisi dei colli di bottiglia e il controllo della conformità SLA. I timestamp devono essere precisi per garantire l'affidabilità degli insight. Perché è importante Questo attributo fornisce l'ordine cronologico degli eventi, necessario per ricostruire il flusso e calcolare metriche come i tempi di ciclo. Dove trovare Informazioni tratte dai campi di creazione/modifica o dalle System Notes di NetSuite. Esempi 2023-10-26T10:00:00Z2023-10-26T14:35:10Z2023-10-27T09:12:05Z | |||
| Sistema di Origine SourceSystem | Il sistema da cui sono stati estratti i dati, utilizzato per tracciare la provenienza degli stessi. | ||
| Descrizione Questo attributo identifica l'origine dei dati, solitamente 'NetSuite'. Specificare il sistema sorgente è importante per garantire la tracciabilità dei dati quando provengono da più sistemi. Perché è importante Identifica l'origine dei dati, aspetto fondamentale per la data governance, la risoluzione dei problemi e negli scenari in cui dati provenienti da più sistemi vengono combinati per una visione olistica del processo. Dove trovare Valore statico ('NetSuite') aggiunto durante l'estrazione dei dati. Esempi NetSuiteNetSuite ERP | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp che indica l'ultima volta che i dati per questo processo sono stati aggiornati. | ||
| Descrizione Questo attributo registra l'ultimo aggiornamento dei dati. È un metadato critico che informa gli utenti sulla freschezza dell'analisi. Perché è importante Garantisce trasparenza sull'aggiornamento dei dati, elemento essenziale affinché gli utenti possano fidarsi dell'analisi e comprenderne la pertinenza rispetto allo stato attuale delle operazioni. Dove trovare Questo timestamp viene generato e aggiunto durante il processo di estrazione, trasformazione e caricamento (ETL). Esempi 2024-05-21T02:00:00Z2024-05-22T02:00:00Z | |||
| Agente responsabile ProcessingAgent | L'impiegato o l'utente che ha eseguito una specifica attività nel processo di reso. | ||
| Descrizione L'Agente Responsabile identifica l'individuo che ha eseguito un compito, come l'approvazione di un reso o l'ispezione di un articolo. Questo attributo è cruciale per l'analisi delle performance a livello utente. Aiuta a identificare i dipendenti più performanti, le aree che necessitano di formazione e gli squilibri nel carico di lavoro. Analizzare le attività per agente è fondamentale per la dashboard 'Performance del processo di reso per dipartimento'. Perché è importante Consente l'analisi delle prestazioni individuali e di team, il bilanciamento del carico di lavoro e l'identificazione delle esigenze formative, con un impatto diretto sull'efficienza operativa. Dove trovare Può provenire da campi come 'Created By', 'Approved By' o dalle System Notes delle transazioni NetSuite. Esempi Alice JohnsonBob WilliamsCharlie Brown | |||
| Dipartimento Department | Il dipartimento aziendale o il team responsabile della gestione della pratica di reso in una data fase. | ||
| Descrizione Questo attributo assegna le attività del processo a un dipartimento specifico (es. 'Customer Service', 'Magazzino', 'Finance'). È essenziale per comprendere i passaggi tra i team e identificare i colli di bottiglia dipartimentali. Perché è importante Consente l'analisi delle prestazioni del processo per area funzionale, evidenziando i ritardi nei passaggi tra reparti e i bottleneck interni a ogni dipartimento. Dove trovare Può essere derivato dal record utente associato all'attività o dal campo 'Department' della transazione in NetSuite. Esempi WarehouseSupporto ClientiFinanzaAssicurazione Qualità | |||
| Importo effettivo del rimborso ActualRefundAmount | L'importo monetario finale effettivamente rimborsato al cliente. | ||
| Descrizione Rappresenta il valore effettivamente rimborsato al cliente. Può differire dall'importo richiesto a causa di costi di riassortimento o danni. Perché è importante Rappresenta il reale impatto finanziario del reso ed è essenziale per la riconciliazione finanziaria e l'analisi dell'accuratezza dei rimborsi. Dove trovare Valore tratto dal campo 'Total' della nota di credito generata dalla RA. Esempi 99.99140.000.00 | |||
| Stato reso ReturnAuthorizationStatus | Lo stato attuale dell'autorizzazione al reso, come 'In attesa di approvazione', 'Approvato' o 'Chiuso'. | ||
| Descrizione Questo attributo indica lo stato attuale della pratica. È fondamentale per capire l'avanzamento dei resi e segmentare i casi (es. 'In attesa di ricezione' o 'Rifiutato'). Perché è importante Offre una panoramica di dove si trova ogni reso all'interno del processo, consentendo l'analisi della distribuzione dei casi, della durata degli stati e dei risultati finali. Dove trovare Corrisponde al campo 'Status' o simile nel record dell'Autorizzazione al reso di NetSuite. Esempi In Attesa di ApprovazioneIn attesa di ricevimentoApprovatoRifiutatoChiuso | |||
| Tempo di Ciclo CycleTime | Il tempo totale trascorso dalla creazione della richiesta di reso alla sua chiusura finale. | ||
| Descrizione Il Tempo di Ciclo è un indicatore chiave di prestazione (KPI) calcolato per ogni caso di reso. Misura la durata dal primissimo evento fino all'ultimo, fornendo una visione di alto livello dell'efficienza del processo. Questa metrica è la base per la dashboard 'Tempo di ciclo end-to-end del processo di reso' e per il KPI 'Tempo medio del ciclo di reso'. Viene calcolato sottraendo il timestamp della prima attività da quello dell'ultima attività di ogni caso. Perché è importante Misura primaria delle performance. Tempi di ciclo elevati indicano inefficienze o carichi manuali eccessivi. Dove trovare Metrica calcolata durante l'analisi sottraendo il primo timestamp dall'ultimo per ogni caso. Esempi 10 giorni 4 ore5 giorni 12 ore21 giorni 2 ore | |||
| Tipo di reso ReturnType | La classificazione del reso in base al motivo fornito dal cliente. | ||
| Descrizione Il tipo di reso categorizza le restituzioni in base al motivo, come 'Articolo difettoso', 'Taglia errata', 'Ripensamento' o 'Non conforme alla descrizione'. Questa categorizzazione è vitale per l'analisi delle cause principali. Analizzando le metriche di processo per i diversi tipi di reso, un'azienda può identificare problemi di qualità del prodotto, imprecisioni nelle descrizioni o errori di evasione. Questo attributo è fondamentale per la dashboard 'Performance dei resi per tipo e canale'. Perché è importante Aiuta a identificare le cause profonde dei resi, consentendo miglioramenti mirati sui prodotti, sulle descrizioni marketing o sul processo di fulfillment per ridurre i volumi dei resi. Dove trovare In genere un campo personalizzato o standard nel modulo RA dove viene indicato il motivo del reso. Esempi Prodotto difettosoArticolo errato speditoInsoddisfazione del clienteTaglia/Colore errati | |||
| Aderenza alle policy ReturnPolicyAdherence | Indica se il reso è conforme alle politiche aziendali stabilite. | ||
| Descrizione Flag che indica se un reso rispetta i criteri predefiniti (es. finestra temporale, condizioni). Serve per monitorare la conformità. Perché è importante Aiuta nel monitoraggio e nell'applicazione delle politiche di reso, riducendo il rischio finanziario derivante da resi non conformi e garantendo equità e coerenza. Dove trovare Quasi certamente un campo personalizzato (checkbox o lista) nel record RA, gestito tramite workflow. Esempi ConformeNon conforme - Oltre i terminiEccezione approvata | |||
| Canale del reso ReturnChannel | Il canale attraverso il quale è stato effettuato l'acquisto originale o è stato avviato il reso. | ||
| Descrizione Il Canale del Reso indica l'origine della restituzione (es. 'Online', 'In negozio', 'Marketplace'). Canali diversi possono avere processi, costi e aspettative dei clienti differenti. Analizzare le performance per canale aiuta a ottimizzare ogni processo specifico e ad allocare le risorse in modo efficace. È un attributo fondamentale per la dashboard 'Performance dei resi per tipo e canale'. Perché è importante Consente il confronto delle prestazioni tra diversi canali di vendita, rivelando inefficienze o best practice specifiche per il modo in cui i resi vengono avviati e gestiti. Dove trovare Informazione spesso derivata dall'ordine di vendita originale, archiviata nei campi 'Channel' o 'Location'. Esempi E-commerceNegozio fisicoAmazon MarketplaceOrdine telefonico | |||
| Condizione del reso ReturnCondition | La condizione valutata dell'articolo reso al momento dell'ispezione, ad esempio 'Nuovo', 'Danneggiato' o 'Usato'. | ||
| Descrizione Questo attributo rileva l'esito dell'ispezione fisica dell'articolo reso. La condizione determina le fasi successive, come il rimborso totale o lo smaltimento dell'articolo. Perché è importante Influisce direttamente sul risultato finanziario del reso e sulle successive azioni di inventario. Valutazioni incoerenti possono portare a perdite finanziarie e rilavorazioni del processo. Dove trovare Probabilmente un campo personalizzato nel record Item Receipt o RA, compilato dal personale di magazzino. Esempi RivendibileDanneggiato - Nella confezioneUsato - Buone condizioniParti Mancanti | |||
| Data target SLA rimborso RefundSlaTargetDate | La data entro la quale è prevista l'elaborazione del rimborso secondo gli accordi sul livello di servizio (SLA). | ||
| Descrizione La Data Target SLA del Rimborso è un timestamp calcolato che rappresenta l'impegno preso con il cliente per l'elaborazione del rimborso. Viene calcolato aggiungendo un periodo predefinito (es. 5 giorni lavorativi) a un evento chiave come 'Articolo ricevuto'. Questo attributo è essenziale per la dashboard 'Monitoraggio conformità SLA rimborsi' e per il KPI 'Tasso di raggiungimento SLA rimborsi'. Perché è importante Consente la misurazione quantitativa delle prestazioni rispetto agli impegni presi con i clienti, fondamentale per mantenere la loro soddisfazione e fiducia. Dove trovare In genere non è un campo standard. Deve essere calcolato aggiungendo il periodo SLA a un timestamp chiave. Esempi 2023-11-01T23:59:59Z2023-11-05T23:59:59Z2023-11-10T23:59:59Z | |||
| Discrepanza nell'importo del rimborso RefundAmountDiscrepancy | La differenza calcolata tra l'importo del rimborso richiesto e quello effettivamente erogato. | ||
| Descrizione Metrica calcolata sottraendo l'importo effettivo da quello richiesto. Valori diversi da zero indicano rettifiche. Perché è importante Evidenzia le rettifiche finanziarie apportate durante il processo di reso, consentendo l'analisi delle discrepanze e verificando se siano coerenti e giustificate. Dove trovare Attributo calcolato. La formula è: Esempi 0.0010.00-5.00 | |||
| È Automatizzato IsAutomated | Un flag booleano che indica se un'attività è stata eseguita automaticamente dal sistema. | ||
| Descrizione Questo attributo indica se un'attività è stata eseguita da un utente o da un sistema automatizzato. Tracciare l'automazione aiuta a identificare nuove opportunità di ottimizzazione. Perché è importante Aiuta a distinguere tra attività manuali e automatizzate, elemento chiave per identificare opportunità di automazione e misurare l'impatto degli sforzi di trasformazione digitale. Dove trovare Può essere dedotto dall'utente associato all'evento. Gli eventi di sistema sono spesso legati a un utente di sistema o a un ID script. Esempi truefalse | |||
| È Conforme agli SLA IsSlaCompliant | Un flag calcolato che indica se il rimborso è stato elaborato entro l'obiettivo SLA definito. | ||
| Descrizione Attributo booleano calcolato confrontando il timestamp del rimborso con la data target SLA. Se il rimborso è puntuale il valore è vero. Perché è importante Fornisce un risultato chiaro e binario per le performance SLA su ogni singolo caso, facilitando il tracciamento, la reportistica e l'analisi dei tassi di conformità nel tempo. Dove trovare Questo attributo viene calcolato durante la trasformazione dei dati. La logica è: Esempi truefalse | |||
| ID Cliente CustomerId | L'identificatore univoco del cliente che avvia il reso. | ||
| Descrizione L'ID Cliente collega una transazione di reso a un cliente specifico. Ciò consente un'analisi orientata al cliente, come l'identificazione di chi effettua resi frequenti (che potrebbe indicare insoddisfazione o comportamenti fraudolenti). Permette inoltre di segmentare le performance del processo per tipo di cliente o valore, aiutando a dare priorità ai grandi account. Perché è importante Facilita l'analisi del comportamento di reso a livello di cliente e consente la segmentazione del processo in base ad attributi come il segmento o il lifetime value del cliente. Dove trovare Corrisponde al campo 'Customer' o 'Entity' nell'intestazione del record RA in NetSuite. Esempi CUST-001CUST-002CUST-003 | |||
| Identificativo prodotto ProductIdentifier | L'identificatore univoco del prodotto reso, come lo SKU o il numero dell'articolo. | ||
| Descrizione Questo attributo identifica l'articolo specifico reso. Analizzare i resi a livello di prodotto è cruciale per individuare articoli con alti tassi di reso, indicando possibili difetti o descrizioni errate. Perché è importante Collega i dati del processo di reso a prodotti specifici, consentendo l'analisi delle cause principali delle problematiche relative ai prodotti e aiutando a ridurre i tassi di reso complessivi. Dove trovare Si trova nella sottolista 'Items' del record RA, nel campo 'Item'. Esempi SKU-TEE-BL-LPROD-00543ITEM-987123 | |||
| Importo del rimborso richiesto RequestedRefundAmount | L'importo monetario del rimborso inizialmente richiesto o atteso per il reso. | ||
| Descrizione Memorizza il valore del rimborso atteso all'inizio del processo, fungendo da baseline per il confronto con l'importo finale. Perché è importante Fornisce una base per l'analisi finanziaria, aiutando a tracciare le discrepanze tra i valori di rimborso attesi e quelli effettivi, identificando le ragioni delle correzioni. Dove trovare Valore derivato dai campi 'Amount' o 'Rate' nelle righe della transazione RA. Esempi 99.99150.0025.50 | |||
Attività di gestione resi e rimborsi
| Activity | Descrizione | ||
|---|---|---|---|
| Articolo Ricevuto | Questa attività segna la ricezione fisica dell'articolo reso in magazzino. In NetSuite, viene registrata creando una transazione di ricezione (Item Receipt) collegata alla RA originale. | ||
| Perché è importante Milestone critica che segna il passaggio dall'azione del cliente all'elaborazione interna. Dove trovare Timestamp di creazione della transazione Item Receipt, collegata direttamente alla RA originale. Acquisisci Data di creazione della transazione di ricezione articolo (Item Receipt) collegata alla RA. Tipo di evento explicit | |||
| Autorizzazione al reso approvata | Questa attività rappresenta l'approvazione formale della richiesta di reso. In genere viene rilevata da un cambio di stato nel record della RA, ad esempio da 'In attesa di approvazione' a 'In attesa di ricezione'. | ||
| Perché è importante Tracciare questa approvazione è cruciale per identificare colli di bottiglia nella fase iniziale di revisione. Dove trovare Ricavato dalle note di sistema o dalla cronologia del workflow per il record ReturnAuthorization, specificamente quando il campo 'Status' viene aggiornato a uno stato approvato (ad es. 'Pending Receipt'). Acquisisci Rilevare il cambio di stato nel record ReturnAuthorization verso lo stato 'Approved' (Approvato). Tipo di evento inferred | |||
| Autorizzazione al reso chiusa | Attività finale che segna la chiusura amministrativa della pratica di reso. | ||
| Perché è importante In quanto punto finale definitivo del processo, questa attività è essenziale per calcolare i tempi di ciclo end-to-end e identificare i casi che rimangono aperti molto tempo dopo l'elaborazione del rimborso. Dove trovare Ricavato dalle note di sistema o dalla cronologia del workflow per il record ReturnAuthorization quando il campo 'Status' viene aggiornato al suo stato terminale finale, come 'Closed'. Acquisisci Rilevare il cambio di stato nel record ReturnAuthorization verso lo stato 'Closed' (Chiuso). Tipo di evento inferred | |||
| Nota di Credito Creata | Questa attività indica che la parte finanziaria del reso è iniziata con la creazione di una nota di credito (Credit Memo), che dettaglia l'importo da rimborsare dopo che l'articolo è stato ricevuto e approvato. | ||
| Perché è importante La creazione della nota di credito è una milestone finanziaria chiave. Il tempo che intercorre tra la ricezione dell'articolo e la creazione della nota di credito rivela l'efficienza del processo dall'ispezione all'accredito. Dove trovare Timestamp di creazione della transazione Credit Memo. Il campo 'Created From' lo collega alla RA. Acquisisci Data di creazione della transazione Credit Memo in NetSuite. Tipo di evento explicit | |||
| Return Authorization Creata | Questa attività segna l'inizio del processo quando un cliente richiede di rendere un articolo. Viene registrata esplicitamente in NetSuite tramite la creazione di un record di Autorizzazione al reso (RA). | ||
| Perché è importante In quanto punto di partenza del processo, questa attività è essenziale per misurare il tempo di ciclo totale del reso e analizzare il volume delle richieste in entrata nel tempo. Dove trovare Timestamp di creazione del record di Autorizzazione al reso in NetSuite. Acquisisci Data di creazione della transazione di autorizzazione al reso in NetSuite. Tipo di evento explicit | |||
| Rimborso Elaborato | Liquidazione finanziaria finale. Registrata dalla creazione di una transazione Customer Refund. | ||
| Perché è importante Questa attività è critica per misurare la conformità SLA e la soddisfazione del cliente. La durata da 'Nota di credito approvata' a 'Rimborso elaborato' riflette direttamente la velocità del dipartimento finanziario o della tesoreria. Dove trovare Timestamp di creazione della transazione Customer Refund. Il campo 'Created From' la collega alla nota di credito. Acquisisci Data di creazione della transazione Rimborso cliente in NetSuite. Tipo di evento explicit | |||
| Articolo ispezionato | Attività concettuale che rappresenta l'ispezione fisica. In NetSuite viene solitamente dedotta da un campo personalizzato o da un aggiornamento di stato. | ||
| Perché è importante L'ispezione è spesso un collo di bottiglia importante. Tracciare i suoi tempi di completamento è fondamentale per analizzare le prestazioni degli addetti, la coerenza delle decisioni e l'impatto sulla successiva approvazione del rimborso. Dove trovare Richiede un'analisi del sistema. Può essere dedotto da una modifica a un campo personalizzato 'Stato Ispezione' nel record RA, oppure potrebbe trattarsi di un processo offline non registrato. Acquisisci Ricavato da un cambio di campo di stato personalizzato sull'Autorizzazione al reso o sulla Ricevuta dell'articolo. Tipo di evento inferred | |||
| Autorizzazione al reso rifiutata | Rappresenta il rifiuto della richiesta di reso. Dedotto dal cambio di stato in 'Rifiutato' o 'Chiuso'. | ||
| Perché è importante L'analisi dei resi respinti aiuta a identificare i motivi comuni delle richieste non conformi, permettendo di migliorare la comunicazione con i clienti e chiarire le policy. Rappresenta una deviazione fondamentale dal percorso standard. Dove trovare Ricavato dalle note di sistema o dalla cronologia del workflow per il record ReturnAuthorization quando il campo 'Status' viene aggiornato allo stato finale 'Rejected'. Acquisisci Rilevare il cambio di stato nel record ReturnAuthorization verso lo stato 'Rejected' (Respinto). Tipo di evento inferred | |||
| Cliente Notificato | Rappresenta l'invio di una notifica al cliente riguardo a un aggiornamento di stato fondamentale, come l'approvazione, la ricezione dell'articolo o l'avvenuto rimborso. In genere viene dedotto dal timestamp di un'e-mail generata dal sistema registrata nella tab delle comunicazioni del record. | ||
| Perché è importante La comunicazione tempestiva è fondamentale. Misurare il ritardo tra una milestone e la notifica al cliente aiuta a individuare lacune nell'esperienza utente. Dove trovare Richiede un'analisi del sistema. Viene rilevato dal timestamp di un'e-mail in uscita o da una nota utente nella tab Comunicazioni del record di RA o Credit Memo. Acquisisci Timestamp di un'e-mail o di una voce nel log comunicazioni collegata alla pratica. Tipo di evento inferred | |||
| Nota di Credito Applicata | Questa attività rappresenta un'alternativa al rimborso in contanti, in cui la nota di credito viene applicata a una fattura aperta del cliente. Viene dedotta dal collegamento 'Applied To' nella nota di credito. | ||
| Perché è importante Distinguere tra rimborsi in contanti e applicazioni di credito è importante per l'analisi finanziaria. Questo percorso rappresenta un tipo di risoluzione del processo diverso rispetto a un rimborso diretto. Dove trovare Ricavato dalle note di sistema o dai record correlati di CreditMemo, in particolare quando viene collegato a una transazione di Fattura per compensare il saldo di un cliente. Acquisisci Rilevare l'applicazione di una Nota di credito a una transazione di Fattura. Tipo di evento inferred | |||
| Nota di credito approvata | Rappresenta l'approvazione formale della nota di credito, spesso richiesta per rimborsi di valore elevato o come parte dei controlli finanziari. Viene dedotta da un cambio di stato nel record della nota di credito (Credit Memo), che indica la disponibilità per l'applicazione o il pagamento. | ||
| Perché è importante Se sono necessarie approvazioni finanziarie, questa fase può rappresentare un collo di bottiglia significativo. Analizzarne la durata aiuta a snellire i controlli finanziari senza ritardare i rimborsi ai clienti. Dove trovare Ricavato dalle note di sistema per il record CreditMemo, specificamente quando un campo di stato approvazione viene aggiornato da 'Pending Approval' a 'Approved' o 'Open'. Acquisisci Rilevare il cambio di stato della transazione Nota di credito verso lo stato 'Approved' (Approvato). Tipo di evento inferred | |||
| Ordine di sostituzione creato | Questa attività rappresenta uno scenario di sostituzione in cui viene creato un nuovo ordine di vendita invece di un rimborso. L'evento è rilevato dalla creazione di un Sales Order collegato alla RA originale. | ||
| Perché è importante Tracciare le sostituzioni come percorso distinto aiuta ad analizzare le preferenze dei clienti e l'efficienza rispetto ai rimborsi. Dove trovare Corrisponde al timestamp di creazione di un nuovo Sales Order. Il collegamento alla RA richiede un'analisi del sistema. Acquisisci Data di creazione di un SalesOrder collegato all'autorizzazione al reso (RA). Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
- Andare alla creazione della Ricerca salvata: acceda a NetSuite. Navighi su Report > Nuova ricerca. Nella pagina Nuova ricerca salvata, clicchi su 'Transaction'.
- Definire i criteri primari: nella pagina di impostazione della Ricerca salvata, sotto la scheda 'Criteri' e la sottoscheda 'Standard', imposti i seguenti filtri per isolare i record delle autorizzazioni al reso:
TypeèReturn AuthorizationMain LineèYes- Aggiunga un filtro
Data creazionee lo imposti sull'intervallo desiderato, ad esempio 'ultimi 3 mesi'. Questo è fondamentale per gestire il volume dei dati.
- Configurare le colonne dei risultati per gli attributi: vada alla scheda 'Risultati'. Aggiunga i seguenti campi che diventeranno gli attributi nel Suo event log. Utilizzi 'Etichetta personalizzata' per rinominarli se necessario per maggiore chiarezza.
- ID Caso:
Document NumberoTranID(Etichetta: ReturnCaseId) - Stato reso:
Status(Etichetta: ReturnAuthorizationStatus) - Agente addetto:
Created Byo un campo personalizzato, se applicabile (Etichetta: ProcessingAgent) - Dipartimento:
Department(Etichetta: Department) - Tipo di reso: un campo personalizzato come
[Your Return Reason Field](Etichetta: ReturnType) - Importo rimborso:
Amount(Etichetta: ActualRefundAmount)
- ID Caso:
- Aggiungere colonne formula per i timestamp degli eventi: questo è il passaggio più importante. Per ciascuna delle 12 attività, aggiunga una colonna 'Formula (Data/Ora)'. Ogni formula utilizza un'istruzione CASE per restituire un timestamp solo se si è verificato quello specifico evento. Consulti la sezione 'query' per le formule esatte da utilizzare per ogni attività.
- Aggiungere colonne statiche: aggiunga due colonne 'Formula (Testo)' ai Suoi risultati:
- Per
SourceSystem, utilizzi la formula:'NetSuite'. - Per
LastDataUpdate, utilizzi una formula che rappresenti la data di esecuzione, come{today}. Per un timestamp preciso, questo coinciderà con l'orario di esportazione.
- Per
- Salvare ed esportare la ricerca: assegni alla ricerca un nome descrittivo, come 'Estrazione resi ProcessMind'. Clicchi su 'Salva ed esegui'. Una volta visualizzati i risultati, clicchi sull'icona Esporta e scelga 'CSV'.
- Trasformare i dati in un Event Log: il CSV esportato sarà in formato 'wide' (orizzontale), con una riga per ogni caso di reso e molte colonne per i diversi timestamp degli eventi. Deve trasformarlo in un event log in formato 'long' (verticale). Utilizzi uno strumento come Microsoft Excel Power Query (Unpivot colonne), Python o un altro strumento di scripting per eseguire questa trasformazione.
- Per ogni riga del CSV, crei più righe nuove, una per ogni colonna di timestamp non vuota.
- La nuova tabella trasformata dovrebbe avere colonne come
ReturnCaseId,ActivityNameeEventTimestamp. Il valore diActivityNamederiva dall'intestazione della colonna timestamp originale (es. 'Return Authorization Created') eEventTimestampè il valore di quella colonna.
- Finalizzare per il caricamento: si assicuri che il file CSV finale abbia le intestazioni richieste:
ReturnCaseId,ActivityName,EventTimestamp,SourceSystem,LastDataUpdate, oltre a eventuali attributi consigliati. Il file è ora pronto per il caricamento in ProcessMind.
Configurazione
- Tipo di ricerca: la Ricerca salvata deve essere una ricerca di tipo
Transaction. - Intervallo di date: è fondamentale applicare un filtro per intervallo di date sul campo
Data di creazionedell'autorizzazione al reso. Si consiglia un intervallo di 3-6 mesi per bilanciare la completezza dei dati con le prestazioni. - Filtro primario: la ricerca deve essere filtrata per
Typeuguale aReturn AuthorizationeMain Lineuguale aYesper garantire un record iniziale unico per ogni caso di reso. - Campi personalizzati: l'accuratezza di questa estrazione, specialmente per eventi concettuali come 'Articolo ispezionato' o attributi come 'Tipo di reso', dipende fortemente dall'uso di campi personalizzati sui record di transazione della Sua organizzazione. Le formule fornite includono segnaposto come
{custbody_...}che devono essere adattati alla Sua configurazione NetSuite. - Permessi utente: l'utente che esegue la ricerca necessita dei permessi di visualizzazione per tutti i tipi di transazione coinvolti: Autorizzazione al reso, Ricevuta articolo, Nota di credito, Rimborso cliente e Ordine di vendita.
- Prestazioni: per gli account con un volume di resi molto elevato, questa ricerca completa può risultare lenta. Valuti di eseguirla in orari di bassa attività o di pianificare l'esportazione automatica nel file cabinet.
a Query di Esempio 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)` | Fasi
- Abilitare SuiteAnalytics Connect: si assicuri di avere una licenza SuiteAnalytics Connect per il Suo account NetSuite. Un amministratore deve abilitare la funzione in Setup > Company > Enable Features > Analytics.
- Assegnare i permessi utente: assegni al ruolo dell'utente che effettua la connessione il permesso 'SuiteAnalytics Connect'. Questo utente dovrà anche disporre dei permessi di visualizzazione per tutti i record oggetto della query, come Transazioni, Dipendenti e Clienti.
- Installare il driver ODBC: scarichi e installi il driver ODBC NetSuite appropriato per il Suo sistema operativo dalla pagina di download di SuiteAnalytics Connect in NetSuite.
- Configurare il DSN: imposti un Data Source Name (DSN) sulla macchina in cui eseguirà la query. Inserisca Service Data Source, Server Hostname, Port, Role ID, Account ID e le credenziali.
- Connettere il client SQL: utilizzi un client SQL, come DBeaver o Microsoft SQL Server Management Studio, per connettersi a NetSuite utilizzando il DSN configurato.
- Preparare la query SQL: copi la query SQL fornita nel Suo client. Questa query è progettata per estrarre tutti gli eventi chiave del processo di reso e rimborso.
- Personalizzare la query: modifichi i valori dei segnaposto nella query. Come minimo, deve aggiornare l'intervallo di date nella Common Table Expression (CTE)
ReturnAuthorizationsper filtrare il periodo di tempo desiderato. Potrebbe anche essere necessario adattare i nomi dei campi personalizzati, comeCUSTBODY_RETURN_TYPE, o valori di stato specifici per corrispondere alla Sua configurazione NetSuite. - Eseguire la query: esegua la query SQL personalizzata sulla replica del database NetSuite. Il tempo di esecuzione può variare a seconda dell'intervallo di date e del volume dei dati.
- Revisionare ed esportare i dati: una volta completata la query, controlli i risultati per assicurarsi che siano corretti. Esporti l'intero set di risultati in un file CSV.
- Finalizzare per il caricamento: si assicuri che le intestazioni del file CSV corrispondano agli attributi richiesti:
ReturnCaseId,ActivityName,EventTimestamp,SourceSystem,LastDataUpdate, ecc. Verifichi che la colonnaEventTimestampsia in un formato data/ora coerente. Il file è ora pronto per il caricamento su ProcessMind.
Configurazione
- Prerequisiti: è necessaria una licenza NetSuite con il modulo aggiuntivo SuiteAnalytics Connect. L'utente che stabilisce la connessione deve avere un ruolo con il permesso 'SuiteAnalytics Connect' e l'accesso in lettura ai record di transazione, entità e dipendenti.
- Configurazione dell'origine dati: deve configurare un DSN (Data Source Name) utilizzando il driver ODBC di NetSuite. Ciò richiede l'ID account, l'ID ruolo e le credenziali. L'host del servizio è solitamente
odbcserver.netsuite.comper gli ambienti di produzione. - Filtro dell'intervallo di date: è fondamentale applicare un filtro temporale alla CTE iniziale che seleziona le autorizzazioni al reso. Senza un filtro, la query proverà a estrarre tutti i dati sui resi, rischiando di rallentare eccessivamente o andare in timeout. Per l'analisi iniziale si consiglia un intervallo di 3-6 mesi.
- Tipi di transazione principali: la query punta a diversi tipi di transazione fondamentali: ReturnAuthorization, ItemReceipt, CreditMemo, CustomerRefund e SalesOrd (per le sostituzioni). Si assicuri che il Suo processo utilizzi questi oggetti standard.
- Dipendenze da campi personalizzati: attività come 'Articolo ispezionato' e attributi come 'Tipo di reso' sono spesso registrati in campi personalizzati. La query fornita utilizza segnaposto come
CUSTBODY_INSPECTION_STATUSeCUSTBODY_RETURN_TYPE. Deve identificare gli ID corretti dei campi personalizzati nel Suo sistema e aggiornare la query di conseguenza. - Considerazioni sulle prestazioni: si tratta di una query complessa con join multipli e una struttura
UNION ALLestesa. La esegua durante le ore non di punta per ridurre al minimo l'impatto sulle prestazioni del sistema. Per dataset molto voluminosi, valuti di eseguire la query per intervalli di tempo più brevi e unire i risultati.
a Query di Esempio 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%';