Il suo Template di Data per Order to Cash - Fatturazione e Contabilità Clienti
Il suo Template di Data per Order to Cash - Fatturazione e Contabilità Clienti
- Attributi consigliati da raccogliere
- Attività chiave da tracciare
- Guida all'estrazione per NetSuite
Order to Cash - Attributi di Fatturazione e Invoicing
| Nome | Descrizione | ||
|---|---|---|---|
| Nome attività ActivityName | Il nome dell'`event` aziendale che si è verificato in un punto specifico del ciclo di vita della fattura. | ||
| Descrizione Il nome dell'attività descrive un L'analisi della sequenza e della frequenza di queste attività è fondamentale per il Perché è importante Questo Dove trovare Derivato da Esempi Fattura CreataFattura ApprovataPagamento cliente ricevutoFattura Pagata Completamente | |||
| Numero fattura InvoiceNumber | L'identificativo univoco per ogni documento di fattura, che funge da identificatore primario del `case` per il processo di fatturazione. | ||
| Descrizione Il numero della fattura è la pietra angolare dell'analisi del processo di fatturazione, identificando in modo univoco ogni fattura dalla sua creazione alla sua chiusura finale. Raggruppa tutte le attività correlate, come approvazione, invio e applicazione del pagamento, in un singolo Nel Perché è importante È essenziale per tracciare il Dove trovare Questo è tipicamente il campo 'Transaction ID' o un campo identificatore univoco simile nel record della transazione della fattura in NetSuite. Esempi INV-0012345INV-0012346INV-0012347 | |||
| Timestamp Evento EventTimestamp | La data e l'ora precise in cui si è verificata una specifica attività o un evento. | ||
| Descrizione Questo Nel Perché è importante Fornisce l' Dove trovare Le informazioni sul Esempi 2023-10-26T10:00:00Z2023-10-27T14:30:00Z2023-11-15T09:05:00Z | |||
| Sistema di Origine SourceSystem | Il sistema da cui i dati sono stati estratti. | ||
| Descrizione Questo In un contesto di Perché è importante Fornisce Dove trovare Questo è un valore statico ('NetSuite') aggiunto durante il processo di estrazione e trasformazione dei dati. Esempi NetSuite | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp che indica l'ultima volta in cui i dati sono stati aggiornati dal sistema sorgente. | ||
| Descrizione Questo Analisti e Perché è importante Questo informa gli utenti sulla freschezza dei Dove trovare Questo Esempi 2024-05-21T02:00:00Z | |||
| Data di Scadenza DueDate | La data entro cui è dovuto il pagamento della fattura. | ||
| Descrizione La Questo Perché è importante È critico per misurare l' Dove trovare Questo corrisponde al campo 'Due Date' ( Esempi 2023-11-252023-11-262023-12-15 | |||
| Data Fattura InvoiceDate | La `data` ufficiale della fattura, come emessa al cliente. | ||
| Descrizione La Nell'analisi, questa Perché è importante Questa Dove trovare Questo corrisponde al campo 'Date' ( Esempi 2023-10-262023-10-272023-11-15 | |||
| È Automatizzato IsAutomated | Un flag che indica se un'attività è stata eseguita automaticamente dal sistema. | ||
| Descrizione Questo Questo Perché è importante Aiuta a misurare il Dove trovare Questo viene tipicamente derivato controllando l''Utente' associato a un'attività. Gli Esempi truefalse | |||
| Importo Totale Fattura InvoiceTotalAmount | Il valore monetario totale della fattura, incluse imposte e altri oneri. | ||
| Descrizione Questo L'analisi del processo basata sull'importo della fattura consente un'analisi basata sul valore. Ad esempio, può rivelare se le fatture di alto valore seguono un processo diverso e più complesso rispetto a quelle di basso valore. Viene anche utilizzato per prioritizzare gli sforzi di riscossione e comprendere l'impatto finanziario dei ritardi di pagamento o degli errori di fatturazione. Perché è importante Consente un' Dove trovare Questo corrisponde al campo 'Total' ( Esempi 1500.0089.9912500.50 | |||
| Nome cliente CustomerName | Il nome del cliente a cui è stata emessa la fattura. | ||
| Descrizione Questo L'analisi del processo di fatturazione per cliente aiuta a identificare modelli nel comportamento di pagamento, controversie o complessità delle fatture per clienti specifici. Questo può informare le strategie di segmentazione dei clienti, le decisioni sui limiti di credito e gli approcci di riscossione personalizzati. Ad esempio, può rivelare se un particolare cliente ha costantemente fatture che richiedono rilavorazioni. Perché è importante Consente un' Dove trovare Questo corrisponde al campo del nome 'Customer' (Cliente) o 'Entity' (Entità) nel record della transazione della fattura in NetSuite. Esempi Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| Ora Fine Evento EventEndTime | La `data` e l'ora precise in cui una specifica attività o `event` è stato completato. | ||
| Descrizione L' Questo Perché è importante Consente il Dove trovare Similmente a StartTime, questo può essere ricavato dai Esempi 2023-10-26T10:05:14Z2023-10-27T14:32:00Z2023-11-15T09:05:00Z | |||
| Regione Region | La regione geografica associata al cliente o alla transazione. | ||
| Descrizione L' Questa è una potente dimensione per l'analisi comparativa. La Perché è importante Consente un' Dove trovare Questo Esempi Nord AmericaEMEAAPAC | |||
| Utente User | Il nome o l'`ID` dell'utente che ha eseguito l'`attività`. | ||
| Descrizione Questo L'analisi del processo per utente aiuta a comprendere la distribuzione del carico di lavoro, le prestazioni individuali e a identificare le esigenze di formazione. Può anche evidenziare potenziali opportunità di automazione mostrando quali attività manuali sono eseguite dalla maggior parte degli utenti. È anche fondamentale per l'analisi di Perché è importante Consente l'analisi della Dove trovare Disponibile nella Esempi Alice SmithBob JohnsonSYSTEM | |||
| Days Sales Outstanding DaysSalesOutstanding | Il numero di giorni tra la data della fattura e la `data` di ricezione del pagamento. | ||
| Descrizione I Days Sales Outstanding (DSO) sono una Sebbene spesso aggregato come un Perché è importante Quantifica l' Dove trovare Calcolato sottraendo la 'InvoiceDate' dal Esempi 294562 | |||
| Dipartimento Department | Il dipartimento interno associato alla fattura. | ||
| Descrizione Questo L'analisi del processo per dipartimento consente il Perché è importante Consente di confrontare la Dove trovare Questo corrisponde al campo di classificazione 'Department' (Dipartimento), che può essere impostato a livello di Esempi Vendite - EnterpriseServizi professionaliHardware | |||
| È Pagamento Tempestivo IsOnTimePayment | Un flag che indica se il pagamento del cliente è stato ricevuto entro o prima della data di scadenza della fattura. | ||
| Descrizione Questo Questo Perché è importante Questo fornisce una chiara Dove trovare Questo è un Esempi truefalse | |||
| È una Rilavorazione IsRework | Un `flag` calcolato che identifica le attività considerate `rework` o `correction loops`. | ||
| Descrizione Questo Questo Perché è importante Misura direttamente la Dove trovare Questo è un Esempi truefalse | |||
| Numero ordine di vendita SalesOrderNumber | L'identificativo dell'ordine di vendita da cui è stata generata la fattura. | ||
| Descrizione Questo Includere il numero dell'ordine di vendita consente una visione più olistica dell'intero ciclo Order-to-Cash. Permette un'analisi che può risalire ai problemi di fatturazione fino alla loro origine nel processo di vendita. Ad esempio, frequenti correzioni di fatture potrebbero essere collegate a errori di inserimento Perché è importante Collega il Dove trovare Trovato nel Esempi SO-0009876SO-0009877SO-0009878 | |||
| Stato Fattura InvoiceStatus | Lo stato attuale della fattura nel suo ciclo di vita. | ||
| Descrizione Questo La Perché è importante Fornisce uno Dove trovare Questo corrisponde al campo 'Status' nel record della transazione della fattura in NetSuite. Esempi ApertoCompletamente PagatoAnnullatoIn Attesa di Approvazione | |||
| Tempo di Elaborazione Attività ActivityProcessingTime | Il tempo effettivo trascorso lavorando su una specifica attività. | ||
| Descrizione Questa Questa è una Perché è importante Quantifica l' Dove trovare Calcolato sottraendo l' Esempi 300601200 | |||
| Termini di Pagamento PaymentTerms | Le condizioni di pagamento concordate tra l'azienda e il cliente. | ||
| Descrizione I Questo Perché è importante È essenziale per analizzare l' Dove trovare Questo corrisponde al campo 'Terms' (Termini) nel record della transazione della fattura in NetSuite. Esempi Netto 30Netto 60Pagamento alla ricezione | |||
| Valuta Currency | Il codice valuta per l'importo della fattura. | ||
| Descrizione Questo Per le organizzazioni multinazionali, l'analisi per valuta è importante per comprendere le prestazioni finanziarie in diversi mercati. Garantisce che i valori monetari siano interpretati correttamente e consente un'adeguata aggregazione e confronto dopo la conversione della valuta, se necessario. Perché è importante Fornisce il Dove trovare Questo corrisponde al campo 'Currency' (Valuta) nel record della transazione della fattura in NetSuite. Esempi USDEURGBP | |||
Order to Cash - Attività di Fatturazione e Invoicing
| Activity | Descrizione | ||
|---|---|---|---|
| Fattura Approvata | La fattura è stata formalmente approvata ed è pronta per essere inviata al cliente. Questo viene acquisito quando lo `status` di approvazione viene aggiornato da 'In Attesa di Approvazione' ad 'Approvata', tipicamente tramite un'azione di `workflow`. | ||
| Perché è importante Un Dove trovare Inferito dal Acquisisci Inferito dal Tipo di evento inferred | |||
| Fattura Creata | Segna la `official creation` del `invoice transaction record` in NetSuite. Questo `event` è il `starting point` per il `billing process` per ogni `unique invoice number` ed è catturato dal `creation timestamp` della `transaction`. | ||
| Perché è importante Questo è l' Dove trovare Catturato dal Acquisisci
Tipo di evento explicit | |||
| Fattura inviata al cliente | Indica che la fattura è stata inviata al cliente, tipicamente via email. Questo `event` viene acquisito tracciando quando un utente esegue l'azione 'Email' dal record della fattura. | ||
| Perché è importante Questo segna l'inizio del periodo di riscossione del cliente ed è il punto di partenza primario per il calcolo dei Days Sales Outstanding (DSO). Dove trovare Inferito dal Acquisisci Inferito dal popolamento di 'Date Last Emailed' o dalla Tipo di evento inferred | |||
| Fattura Pagata Completamente | Lo `status` della fattura è cambiato in 'Pagata per Intero', indicando che il suo saldo è ora zero. Questa è la conclusione positiva del ciclo di fatturazione e riscossione per la fattura. | ||
| Perché è importante Questo è l' Dove trovare Inferito dal Acquisisci Inferito dal Tipo di evento inferred | |||
| Pagamento cliente ricevuto | Un pagamento è stato ricevuto dal cliente e registrato nel sistema. Questo viene catturato dalla creazione di una `transaction` 'Customer Payment' in NetSuite, che può applicarsi a una o multiple fatture. | ||
| Perché è importante Segna la Dove trovare Catturato dalla Acquisisci Creazione di un Tipo di evento explicit | |||
| Data di Scadenza Pagamento Raggiunta | Un `event` calcolato che si verifica quando la `current date` corrisponde alla `due date` della fattura. Questo `event` non corrisponde a una `direct user` o `system action` ma è derivato da `dati` esistenti durante l'analisi. | ||
| Perché è importante Agisce come un Dove trovare Questo non è un Acquisisci Calcolato quando l' Tipo di evento calculated | |||
| Fattura Chiusa | La transazione della fattura è stata chiusa, spesso come parte di un processo contabile di fine periodo. Questa azione impedisce ulteriori modifiche alla transazione dopo che è stata completamente pagata e riconciliata. | ||
| Perché è importante Sebbene spesso si verifichi dopo 'Pagata per Intero', questo can be un Dove trovare Inferito dal Acquisisci Inferito dal Tipo di evento inferred | |||
| Fattura Invalidata | La fattura è stata annullata, cancellandola di fatto e annullando qualsiasi impatto sul `general ledger`. Questa azione viene solitamente intrapresa per le fatture create per errore prima che vengano pagate. | ||
| Perché è importante Rappresenta un'eccezione di processo e uno stato terminale. Comprendere perché le fatture vengono annullate può rivelare errori di inserimento dati o di processo che richiedono una correzione a monte. Dove trovare Questa è un'azione utente esplicita. Può essere acquisita dalle note di sistema per il record della fattura, che registra quando la transazione è stata annullata e da chi. Acquisisci Azione esplicita 'Void' registrata nelle Tipo di evento explicit | |||
| Fattura Sottoposta ad Approvazione | Rappresenta il cambio di stato della fattura in 'In Attesa di Approvazione'. Questo `event` viene acquisito quando un utente invia la fattura a un `workflow` di approvazione configurato, che è una personalizzazione comune. | ||
| Perché è importante Questa attività identifica l'inizio di un potenziale Dove trovare Inferito dal Acquisisci Inferito dal Tipo di evento inferred | |||
| Nota di Credito Creata | Una `credit memo transaction` è stata creata e applicata alla fattura, riducendo il `outstanding balance`. Questo indica tipicamente un `product return`, `service complaint` o `pricing correction`. | ||
| Perché è importante Evidenzia Dove trovare Catturato dalla creazione di una Acquisisci Creazione di un record di Tipo di evento explicit | |||
| Pagamento applicato alla fattura | Il pagamento del cliente ricevuto è stato specificamente applicato a questa fattura, riducendone l'importo dovuto. Questo viene registrato quando l'applicazione viene salvata nel record del Pagamento Cliente. | ||
| Perché è importante Questo è il collegamento cruciale tra la ricezione della cassa e la liquidazione della fattura. La durata da 'Pagamento Ricevuto' a questo Dove trovare Catturato dalle Acquisisci Registrato quando il Tipo di evento explicit | |||
| Sollecito di Pagamento Emesso | Una comunicazione è stata inviata al cliente riguardo un `outstanding payment`. Questo viene catturato come `logged activity` o `email` inviata dal record della fattura o del cliente, spesso da una `dunning solution`. | ||
| Perché è importante Essenziale per valutare l' Dove trovare Catturato dalla creazione di un record Acquisisci Registrato come Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
- Acceda a NetSuite: entri nel Suo account utilizzando un ruolo con permessi sufficienti per creare e gestire le Saved Search sui record delle transazioni.
- Individui le Saved Search: segua il percorso Reports > Saved Searches > All Saved Searches > New. Scelga 'Transaction' dall'elenco dei tipi di ricerca. Questo sarà il punto di partenza per configurare le varie ricerche, una per ogni tipologia di evento.
- Crei la ricerca 'Fattura creata': questa è la ricerca principale per rilevare la creazione delle fatture.
- Nella scheda 'Criteria', alla voce 'Standard', imposti il filtro 'Type' su 'is Invoice'.
- Aggiunga il filtro 'Main Line' e lo imposti su 'is true' per ottenere un unico record per ogni fattura.
- Nella scheda 'Results', inserisca le colonne richieste. Utilizzi le formule per creare campi standardizzati come
ActivityName. Ad esempio, aggiunga un campo 'Formula (Text)' con la formula_UTF8'Fattura creata'.
- Crei le ricerche per i cambi di stato (Approvazione, Pagamento, Annullamento, Chiusura): molti eventi coincidono con cambi di stato. Il metodo più affidabile per estrarre il timestamp esatto è tramite le System Notes.
- Crei una nuova Transaction Saved Search.
- Nella scheda 'Criteria', imposti 'Type' su 'is Invoice'.
- Nella sottoscheda 'Standard', aggiunga il filtro 'System Notes : Field' e selezioni il campo di stato pertinente, ad esempio 'Approval Status'.
- Inserisca un altro filtro 'System Notes : New Value' impostandolo sullo stato desiderato (es. 'Approved').
- Nella scheda 'Results', associ 'System Notes : Date' a
EventTimestampe 'System Notes : Set by' aUser. - Ripeta l'operazione per ogni attività basata sullo stato: 'Fattura inviata per approvazione', 'Fattura approvata', 'Fattura saldata', 'Fattura annullata' e 'Fattura chiusa', aggiornando i filtri di campo e valore di conseguenza.
- Crei la ricerca 'Fattura inviata al cliente': questo evento viene solitamente rilevato tracciando le email inviate dal record della fattura.
- Crei una nuova Transaction Saved Search con 'Type' impostato su 'is Invoice'.
- Nella scheda 'Criteria', sotto 'Related Records', aggiunga un filtro per 'Messages : Date Sent' e lo imposti su 'is not empty'.
- Nella scheda 'Results', associ 'Messages : Date Sent' a
EventTimestampe 'Messages : Author' aUser.
- Crei le ricerche per pagamenti e note di credito: queste attività coinvolgono tipi di transazione separati ma collegati alla fattura.
- Per 'Pagamento cliente ricevuto', crei una ricerca con 'Type' su 'Customer Payment'. Acquisisca la data di creazione come timestamp dell'evento.
- Per 'Pagamento applicato alla fattura', utilizzi la stessa ricerca 'Customer Payment' ma effettui il join con i campi 'Applied To Transaction'. La 'Date Created' del pagamento fungerà da timestamp. Otterrà una riga per ogni applicazione della fattura.
- Per 'Nota di credito creata', crei una ricerca con 'Type' su 'Credit Memo' e si colleghi al campo 'Created From' per recuperare il numero della fattura originale.
- Esegua ed esporti ogni Saved Search: lanci tutte le ricerche salvate che ha creato. Dalla pagina dei risultati, clicchi sull'icona di esportazione (CSV, Excel o PDF) e scelga CSV. Se i risultati sono numerosi, potrebbe essere necessario procedere con un'esportazione a lotti.
- Unisca e trasformi i dati: consolidi tutti i file CSV esportati in un unico documento utilizzando Excel, uno script Python o uno strumento di data preparation.
- Ricavi l'evento 'Scadenza termine di pagamento raggiunta': nel file di dati consolidato, aggiunga una riga per ogni evento 'Fattura creata'. Imposti
ActivityNamecome 'Scadenza termine di pagamento raggiunta',EventTimestampcon il valore del campoDueDatedella fattura e mantenga gli altri attributi della fattura pertinenti. - Finalizzi l'Event Log: uniformi tutte le intestazioni delle colonne secondo lo schema richiesto (es.
InvoiceNumber,ActivityName,EventTimestamp). Verifichi che il formato della data sia coerente. Aggiunga le colonneSourceSystemeLastDataUpdatecon i valori statici relativi a questo lotto di estrazione. Salvi il file finale consolidato in formato CSV per il caricamento.
Configurazione
- Prerequisiti: È richiesto un ruolo utente con autorizzazioni per creare, modificare ed eseguire ricerche salvate di tipo 'Transaction'. È inoltre necessario l'accesso per visualizzare i record di Fatture, Pagamenti Clienti, Note di Credito e System Notes.
- Tipo di ricerca: Il tipo di ricerca principale utilizzato per tutte le estrazioni è 'Transaction'. Questo tipo consente l'accesso a tutti i record necessari e alle loro relazioni.
- Filtro per intervallo di date: Per gestire le prestazioni e il volume dei dati, applicare un filtro per intervallo di date a ogni ricerca. Per l'analisi iniziale è consigliato un filtro su 'Date Created' per un periodo dagli ultimi 3 ai 6 mesi.
- Filtro 'Main Line': Utilizzare il criterio 'Main Line' impostato su 'true' per gli
eventia livello di intestazione del documento, come 'Invoice Created'. Impostarlo su 'false' quando è necessario analizzare i dettagli delle voci, cosa non richiesta per questo processo. - System Notes: La cattura dei cambiamenti di stato si basa fortemente sulle System Notes. Assicurarsi che l'audit sia abilitato per i campi di transazione chiave come 'Status' e 'Approval Status' nella configurazione di NetSuite (Setup > Company > Enable Features > SuiteCloud > SuiteAudit Trail).
- Considerazioni sulle prestazioni: Le ricerche complesse con molte
joine campi formula su un ampio intervallo di date possono essere lente da eseguire nell'interfaccia utente di NetSuite. È consigliabile eseguire ed esportare queste ricerche durante le ore non di punta. Se una ricerca va intimeout, ridurre l'intervallo di date ed esportare idatiinbatchpiù piccoli.
a Query di Esempio config
/*
This section describes the configuration for multiple NetSuite Saved Searches needed to generate the complete event log. Each block represents a separate Saved Search that must be created in the UI, exported, and then combined externally.
*/
-- Search 1: Invoice Created
Activity Name: 'Invoice Created'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Main Line is true
Results Columns (Mapped to Event Log Attributes):
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Created'
- EventTimestamp: Date Created
- User: Created By
- InvoiceDate: Date
- DueDate: Due Date
- InvoiceTotalAmount: Amount (Gross)
- CustomerName: Name
-- Search 2: Invoice Submitted for Approval
Activity Name: 'Invoice Submitted for Approval'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Pending Approval' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Submitted for Approval'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 3: Invoice Approved
Activity Name: 'Invoice Approved'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Approval Status
- System Notes : New Value is [Your 'Approved' status]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Approved'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 4: Invoice Sent to Customer
Activity Name: 'Invoice Sent to Customer'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Messages : Date Sent is not empty
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Sent to Customer'
- EventTimestamp: Messages : Date Sent (use Maximum summary type if multiple)
- User: Messages : Author (use Maximum summary type)
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 5: Payment Reminder Issued
Activity Name: 'Payment Reminder Issued'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- User Notes : Note contains [Your dunning/reminder keyword]
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Payment Reminder Issued'
- EventTimestamp: User Notes : Date
- User: User Notes : Author
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 6: Credit Memo Created
Activity Name: 'Credit Memo Created'
Saved Search Type: Transaction
Criteria:
- Type is Credit Memo
- Main Line is true
Results Columns:
- InvoiceNumber: Created From : Document Number
- ActivityName: Formula (Text) = 'Credit Memo Created'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 7: Customer Payment Received
Activity Name: 'Customer Payment Received'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is true
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Customer Payment Received'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 8: Payment Applied To Invoice
Activity Name: 'Payment Applied To Invoice'
Saved Search Type: Transaction
Criteria:
- Type is Customer Payment
- Main Line is false
Results Columns:
- InvoiceNumber: Applied to Transaction : Document Number
- ActivityName: Formula (Text) = 'Payment Applied To Invoice'
- EventTimestamp: Date Created
- User: Created By
- CustomerName: Name
-- Search 9: Invoice Paid In Full
Activity Name: 'Invoice Paid In Full'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value is Paid In Full
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Paid In Full'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Search 10: Invoice Voided
Activity Name: 'Invoice Voided'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- Status is Invoice : Voided
- System Notes : Field is Status
- System Notes : New Value is Voided
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Voided'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
-- Search 11: Invoice Closed
Activity Name: 'Invoice Closed'
Saved Search Type: Transaction
Criteria:
- Type is Invoice
- System Notes : Field is Status
- System Notes : New Value contains Closed
Results Columns:
- InvoiceNumber: Document Number
- ActivityName: Formula (Text) = 'Invoice Closed'
- EventTimestamp: System Notes : Date
- User: System Notes : Set by
- CustomerName: Name
- InvoiceTotalAmount: Amount (Gross)
-- Event to be Derived Post-Extraction: Payment Due Date Reached
/*
This event is not extracted directly. After combining all other CSVs, create a new row for each unique invoice.
Set ActivityName to 'Payment Due Date Reached'.
Set EventTimestamp to the DueDate value from the 'Invoice Created' event for that invoice.
Copy other attributes like InvoiceNumber, CustomerName, etc.
*/ Fasi
- Prerequisito: Abilitare SuiteAnalytics Connect: Assicurarsi che il
moduleSuiteAnalytics Connect sia conlicensee abilitato nella sua istanza NetSuite. Questo viene tipicamente fatto da unadministratorNetSuite sottoSetup>Company>Enable Features>Analytics. - Scaricare e Configurare
ODBC Driver: Navigare nelladashboard homedi NetSuite e localizzare ilportlet'Settings'. Cliccare sullink'Set Up SuiteAnalytics Connect' per scaricare l'ODBC driverappropriato per il suooperating system. Seguire le istruzioni diinstallationfornite da NetSuite per installare e configurare ildriver, fornendo il suoservice host,port,Account ID,Role ID,emailepassword. - Stabilire la
Database Connection: Usare unSQL client toolche supportiODBC connection, comeDBeaver,TableauoPower BI. Creare una nuovaODBC connectionusando ildriverche ha configurato nel passaggio precedente. Testare laconnectionper assicurarsi di potersi autenticare con successo e accedere aldatabaseread-replicadi NetSuite. - Preparare la
SQL Query: Copiare laSQL querycompleta fornita nella sezione 'Query' di questodocument. Questaqueryè progettata per estrarre tutte lerequired activitiese gliattributiper il processo dibillingOrder to Cash. - Impostare i
Query Parameters: Prima di eseguire, localizzare iplaceholder valuesall'interno dellaquery. Deve sostituire'YYYY-MM-DD'con le suedesired start and end datesper ilperioddi estrazione. Inoltre, sostituire[Your Subsidiary ID]con l'internal IDdella filiale NetSuite che desidera analizzare. - Eseguire la
Query: Eseguire lamodified querynel suoSQL client. Ilexecution timevarierà a seconda dell'date rangee delvolume of transactionsnel suoaccountNetSuite. - Rivedere i
Results: Una volta completata laquery, verrà restituita unaflat tableche rappresenta l'event log. Ognirowcorrisponde a unaspecific activitynelinvoice lifecycle. Rivedere idatiper completezza e accuratezza. - Esportare l'
Event Log: Esportare iquery resultsdal suoSQL clientin un fileCSV. Assicurarsi che il file sia codificato inUTF-8per prevenire problemi di caratteri. - Prepararsi per l'
Upload: Prima diuploada uno strumento di Process Mining, confermare che glicolumn headerscorrispondano ai nomi degliattributirichiesti, comeInvoiceNumber,ActivityNameeEventTimestamp. Verificare che i formati di data e ora siano coerenti.
Configurazione
- SuiteAnalytics Connect License: Una
licensevalida per ilmoduleSuiteAnalytics Connect è obbligatoria per accedere aldatabaseread-replicadi NetSuite. Senza di essa, l'accessoSQLdiretto non è possibile. - Ruolo e Utente Dedicati: Si raccomanda vivamente di creare un
RoleNetSuite dedicato con le autorizzazioni appropriate per SuiteAnalytics Connect. QuestoRoledovrebbe avere accesso in sola lettura ai record necessari, inclusiTransactions,CustomerseSystem Notes. Assegnare un utente dedicato a questoRoleper l'estrazione al fine di garantire sicurezza e verificabilità. - Filtro per Intervallo di Date: La
queryfornita include una clausolaWHEREsulla data di creazione della fattura (Transaction.TRANDATE). Per le estrazioni iniziali, è consigliabile iniziare con un intervallo di date più piccolo, come gli ultimi 3-6 mesi, per gestire le prestazioni e il volume deidati. Ad esempio:AND T.TRANDATE BETWEEN '2023-01-01' AND '2023-06-30'. - Filtro per Filiale: Per gli
accountcon multiple filiali, il filtro per la filiale specifica è critico sia per le prestazioni che per la pertinenza deidati. Laqueryinclude unplaceholderWHERE T.SUBSIDIARY_ID = [Your Subsidiary ID]che dovrebbe essere configurato. - Freschezza dei Dati: Il
databaseSuiteAnalytics Connect è unread-replica. Idativengono tipicamente aggiornati più volte all'ora, ma non sono in tempo reale. Essere consapevoli di un potenzialelagfino a poche ore tra unatransactionche si verifica in NetSuite e la sua comparsa neldatabaseConnect.
a Query di Esempio sql
WITH Invoices AS (
SELECT
T.TRANSACTION_ID,
T.TRANID AS InvoiceNumber,
T.TRANDATE AS InvoiceDate,
T.DUEDATE AS DueDate,
T.FOREIGN_TOTAL AS InvoiceTotalAmount,
C.COMPANYNAME AS CustomerName,
BUILTIN.DF(C.LOCATION) AS Region,
T.CREATED_DATE AS InvoiceCreationDate,
CREATOR.FIRST_NAME || ' ' || CREATOR.LAST_NAME AS CreatorUser
FROM
TRANSACTIONS T
JOIN
CUSTOMERS C ON T.ENTITY_ID = C.CUSTOMER_ID
LEFT JOIN
EMPLOYEES CREATOR ON T.CREATED_BY_ID = CREATOR.EMPLOYEE_ID
WHERE
T.TRANSACTION_TYPE = 'Invoice'
AND T.TRANDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD')
-- AND T.SUBSIDIARY_ID = [Your Subsidiary ID] -- Add your subsidiary filter if needed
)
-- 1. Invoice Created
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Created' AS "ActivityName",
I.InvoiceCreationDate AS "EventTimestamp",
I.InvoiceCreationDate AS "EventEndTime",
I.CreatorUser AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN I.CreatorUser LIKE '%System%' THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
UNION ALL
-- 2. Invoice Submitted for Approval & 3. Invoice Approved
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE WHEN SN.NEW_VALUE = 'Pending Approval' THEN 'Invoice Submitted for Approval' ELSE 'Invoice Approved' END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
SN.FIELD = 'TRANSACTION.APPROVALSTATUS' AND SN.NEW_VALUE IN ('Pending Approval', 'Approved')
UNION ALL
-- 4. Invoice Sent to Customer
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Invoice Sent to Customer' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' -- Indicates an outgoing message
UNION ALL
-- 5. Payment Due Date Reached
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Due Date Reached' AS "ActivityName",
I.DueDate AS "EventTimestamp",
I.DueDate AS "EventEndTime",
'System' AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
1 AS "IsAutomated"
FROM
Invoices I
WHERE
I.DueDate IS NOT NULL AND I.DueDate < SYSDATE
UNION ALL
-- 6. Payment Reminder Issued (based on Messages table, requires a specific subject line convention)
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Payment Reminder Issued' AS "ActivityName",
M.MESSAGE_DATE AS "EventTimestamp",
M.MESSAGE_DATE AS "EventEndTime",
MSG_AUTHOR.FIRST_NAME || ' ' || MSG_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN M.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
MESSAGES M ON I.TRANSACTION_ID = M.TRANSACTION_ID
LEFT JOIN
EMPLOYEES MSG_AUTHOR ON M.AUTHOR_ID = MSG_AUTHOR.EMPLOYEE_ID
WHERE
M.INCOMING = 'F' AND UPPER(M.SUBJECT) LIKE '%PAYMENT REMINDER%'
UNION ALL
-- 7. Credit Memo Created & Applied
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Credit Memo Created' AS "ActivityName",
CM.CREATED_DATE AS "EventTimestamp",
CM.CREATED_DATE AS "EventEndTime",
CM_CREATOR.FIRST_NAME || ' ' || CM_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS CM ON T_LINES.TRANSACTION_ID = CM.TRANSACTION_ID
LEFT JOIN
EMPLOYEES CM_CREATOR ON CM.CREATED_BY_ID = CM_CREATOR.EMPLOYEE_ID
WHERE
CM.TRANSACTION_TYPE = 'Credit Memo'
UNION ALL
-- 8. Customer Payment Received & 9. Payment Applied to Invoice
SELECT
I.InvoiceNumber AS "InvoiceNumber",
'Customer Payment Received' AS "ActivityName", -- Can also create a separate 'Payment Applied' event if needed
PAYMENT.CREATED_DATE AS "EventTimestamp",
PAYMENT.CREATED_DATE AS "EventEndTime",
PMT_CREATOR.FIRST_NAME || ' ' || PMT_CREATOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
0 AS "IsAutomated"
FROM
Invoices I
JOIN
TRANSACTION_LINES T_LINES ON I.TRANSACTION_ID = T_LINES.APPLIED_TO_TRANSACTION_ID
JOIN
TRANSACTIONS PAYMENT ON T_LINES.TRANSACTION_ID = PAYMENT.TRANSACTION_ID
LEFT JOIN
EMPLOYEES PMT_CREATOR ON PAYMENT.CREATED_BY_ID = PMT_CREATOR.EMPLOYEE_ID
WHERE
PAYMENT.TRANSACTION_TYPE = 'Customer Payment'
UNION ALL
-- 10. Invoice Paid In Full, 11. Invoice Voided, 12. Invoice Closed
SELECT
I.InvoiceNumber AS "InvoiceNumber",
CASE
WHEN SN.NEW_VALUE_ID = 'Invoice:B' THEN 'Invoice Paid In Full' -- 'B' is status 'Paid In Full'
WHEN SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Voided'
WHEN SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T' THEN 'Invoice Closed'
END AS "ActivityName",
SN.DATE_CREATED AS "EventTimestamp",
SN.DATE_CREATED AS "EventEndTime",
SN_AUTHOR.FIRST_NAME || ' ' || SN_AUTHOR.LAST_NAME AS "User",
'NetSuite' AS "SourceSystem",
SYSDATE AS "LastDataUpdate",
I.InvoiceDate AS "InvoiceDate",
I.DueDate AS "DueDate",
I.InvoiceTotalAmount AS "InvoiceTotalAmount",
I.CustomerName AS "CustomerName",
I.Region AS "Region",
CASE WHEN SN.AUTHOR_ID < 0 THEN 1 ELSE 0 END AS "IsAutomated"
FROM
Invoices I
JOIN
SYSTEM_NOTES SN ON I.TRANSACTION_ID = SN.TRANSACTION_ID
LEFT JOIN
EMPLOYEES SN_AUTHOR ON SN.AUTHOR_ID = SN_AUTHOR.EMPLOYEE_ID
WHERE
(SN.FIELD = 'TRANSACTION.STATUS' AND SN.NEW_VALUE_ID = 'Invoice:B')
OR (SN.FIELD = 'TRANSACTION.VOIDED' AND SN.NEW_VALUE = 'T')
OR (SN.FIELD = 'TRANSACTION.CLOSED' AND SN.NEW_VALUE = 'T');