Votre modèle de données Order-to-Cash - Facturation
Votre modèle de données Order-to-Cash - Facturation
- Attributs recommandés à collecter
- Activités clés à suivre
- Guide d'extraction pour NetSuite
Attributs De la commande au paiement - Facturation et encaissement
| Nom | Descriptionn | ||
|---|---|---|---|
| Horodatage de l'événement EventTimestamp | La date et l'heure précises auxquelles une activité ou un événement spécifique s'est produit. | ||
| Descriptionn Cet attribut enregistre le moment exact où une activité a eu lieu. C'est un composant indispensable pour ordonner les événements chronologiquement et pour toutes les analyses temporelles. En process mining, l'horodatage de l'événement est utilisé pour calculer les temps de cycle entre les activités, les durées des cas et les temps d'attente. Il est indispensable pour identifier les points de blocage, mesurer la performance du processus par rapport aux SLA et comprendre la dynamique temporelle du processus de facturation. Par exemple, il est utilisé pour calculer le temps de cycle de génération des factures et le Days Sales Outstanding (DSO). Pourquoi est-ce important ? : Elle fournit l'ordre chronologique des événements, ce qui est indispensable pour calculer toutes les métriques basées sur la durée, identifier les points de blocage et analyser la performance du processus au fil du temps. Source des données : Les informations d'horodatage se trouvent généralement dans les notes système, les pistes d'audit ou les champs « Date de création » des enregistrements connexes pour chaque transaction de facture dans NetSuite. Exemples 2023-10-26T10:00:00Z2023-10-27T14:30:00Z2023-11-15T09:05:00Z | |||
| Nom de l'activité ActivityName | Le nom de l'événement commercial qui s'est produit à un point spécifique du cycle de vie de la facture. | ||
| Descriptionn Le nom de l'activité décrit une étape ou un événement spécifique du processus de facturation, tel que « Facture créée », « Facture approuvée » ou « Paiement client reçu ». Ces activités constituent les éléments séquentiels fondamentaux de la cartographie des processus. L'analyse de la séquence et de la fréquence de ces activités est indispensablele au process mining. Elle aide à visualiser le flux de processus réel, à identifier les parcours de processus courants et rares (variantes), et à cibler les activités fréquemment répétées, ce qui indique un reprises ou une inefficacité. Pourquoi est-ce important ? : Cet attribut est indispensable pour la construction de la cartographie des processus, pour visualiser et l'analyse des différentes étapes et chemins qu'une facture emprunte. Source des données : Dérivé des journaux système, des changements de statut ou d'enregistrements d'événements spécifiques associés à la transaction Invoice dans NetSuite. Cela nécessite souvent de mapper les changements de statut de transaction ou les créations d'enregistrements connexes à des noms d'activités définis. Exemples Facture crééeFacture approuvéePaiement client reçuFacture Payée Intégralement | |||
| Numéro de facture InvoiceNumber | L'identifiant unique de chaque document de facture, servant d'identifiant de dossier principal pour le processus de facturation. | ||
| Descriptionn Le numéro de facture est la base de l'analyse du processus de facturation, identifiant de manière unique chaque facture de sa création à sa clôture finale. Il regroupe toutes les activités connexes, telles que l'approbation, l'envoi et l'application des paiements, en un cas unique et cohérent. En process mining, l'analyse du parcours de chaque numéro de facture permet une vue d'ensemble complète du cycle de vie de la facturation. Cela permet d'identifier les variantes de processus, les points de blocage et les écarts par rapport à la procédure standard, fournissant des informations clés pour optimiser la trésorerie et l'efficacité opérationnelle. Pourquoi est-ce important ? : Il est indispensable pour suivre le cycle de vie complet de chaque facture, permettant la reconstruction de l'ensemble du processus de facturation et une analyse détaillée des performances. Source des données : Il s'agit généralement du champ « ID de transaction » ou d'un champ d'identifiant unique similaire sur l'enregistrement de transaction de facture dans NetSuite. Exemples INV-001, 2, 3, 45INV-001, 2, 3, 46INV-001, 2, 3, 47 | |||
| Dernière mise à jour des données LastDataUpdate | L'horodatage indiquant la dernière fois que les données ont été actualisées à partir du système source. | ||
| Descriptionn Cet attribut enregistre la dernière mise à jour de l'ensemble de données. Il fournit un contexte sur la fraîcheur et la pertinence de l'analyse process mining. Les analystes et les parties prenantes métier utilisent ces informations pour savoir si les enseignements reflètent l'état opérationnel le plus récent. C'est un élément de métadonnées critique pour tout tableau de bord ou rapport, garantissant que les décisions sont basées sur des données d'un âge connu et ne sont pas mal interprétées comme étant en temps réel si ce n'est pas le cas. Pourquoi est-ce important ? : Cela informe les utilisateurs sur la la réactualisation des données, s'assurant qu'ils comprennent le cadre temporel de l'analyse et la pertinence des résultats. Source des données : Cet horodatage est généré et enregistré par l'outil ou le pipeline d'extraction de données au moment de l'actualisation des données. Exemples 2024-05-21T02:00:00Z | |||
| Système source SourceSystem | Le système d'où les données ont été extraites. | ||
| Descriptionn Cet attribut identifie l'origine des données du processus. Pour cette vue, il s'agirait systématiquement de « NetSuite ». Dans un contexte d'analyse plus large, en particulier dans les organisations dotées de plusieurs ERP ou de systèmes intégrés, cet attribut est impératif pour la traçabilité et la gouvernance des données. Il aide à différencier les processus qui pourraient s'étendre sur différentes plateformes et garantit que l'analyse est correctement attribuée au système d'enregistrement approprié. Pourquoi est-ce important ? : Il fournit un contexte essentiel pour l'origine et la gouvernance des données, en particulier dans les environnements où plusieurs systèmes pourraient être intégrés. Source des données : Il s'agit d'une valeur statique (« NetSuite ») ajoutée pendant le processus d'extraction et de transformation des Exemples NetSuite | |||
| Date d'échéance DueDate | La date à laquelle le paiement de la facture est dû. | ||
| Descriptionn La date d'échéance est calculée en fonction de la date de facture et des conditions de paiement convenues. Elle représente la date limite pour que le client effectue un paiement sans être considéré en retard. Cet attribut est indispensable pour le suivi des comptes clients et la gestion de la trésorerie. C'est la référence utilisée pour calculer le KPI du Taux de paiement ponctuel et pour analyser le comportement de paiement des clients. Le suivi des écarts par rapport à la date d'échéance permet d'identifier les clients qui paient fréquemment en retard et d'évaluer l'efficacité des stratégies de recouvrement. Pourquoi est-ce important ? : Il est indispensable pour mesurer la performance des paiements à temps et analyser le comportement de paiement des clients, soutenant directement le recouvrement et la prévision des flux de trésorerie. Source des données : Cela correspond au champ « Date d'échéance » (duedate) de l'enregistrement de transaction de facture dans NetSuite. Exemples 2023-11-252023-11-262023-12-15 | |||
| Date de la facture InvoiceDate | La date officielle de la facture, telle qu'elle a été émise au client. | ||
| Descriptionn La date de facture, ou date de transaction, est le point de départ de nombreux calculs financiers liés à la facturation. C'est la date à partir de laquelle les conditions de paiement et les dates d'échéance sont généralement calculées. En analyse, cette date sert de point d'ancrage principal pour le calcul des KPI financiers clés tels que le Days Sales Outstanding (DSO) et le vieillissement des factures. Elle permet une analyse par cohorte, facilitant la comparaison des performances de facturation sur différentes périodes, par exemple, d'un mois à l'autre ou d'une année sur l'autre. Pourquoi est-ce important ? : Cette date est la référence pour les métriques financières critiques comme le Days Sales Outstanding (DSO) et le vieillissement des factures, ayant un impact direct sur l'analyse du fonds de roulement. Source des données : Cela correspond au champ « Date » (trandate) de l'enregistrement de transaction de facture dans NetSuite. Exemples 2023-10-262023-10-272023-11-15 | |||
| Est Automatisé IsAutomated | Un indicateur signalant si une activité a été effectuée automatiquement par le système. | ||
| Descriptionn Cet attribut booléen distingue les activités effectuées manuellement par un utilisateur de celles exécutées automatiquement par un workflow, un script ou une intégration système. Cet attribut est indispensable pour mesurer le niveau d'automatisation dans le processus de facturation, soutenant directement le KPI du « Taux de facturation automatisée ». En filtrant les activités automatisées ou manuelles, les analystes peuvent identifier les points de blocage causés par une intervention manuelle et repérer les opportunités d'augmenter l'automatisation, de réduire les erreurs humaines et d'améliorer l'efficacité. Pourquoi est-ce important ? : Il aide à mesurer le niveau d'automatisation du processus, identifiant les opportunités de réduire l'effort manuel et d'augmenter l'efficacité. Source des données : Cela est généralement dérivé en vérifiant l'« Utilisateur » associé à une activité. Les événements déclenchés par des utilisateurs nommés « SYSTEM », « Workflow » ou « Intégration » sont signalés comme automatisés. Exemples truefaux | |||
| Heure de fin de l'événement EventEndTime | La date et l'heure précises auxquelles une activité ou un événement spécifique a été achevé. | ||
| Descriptionn L'heure de fin de l'événement marque la fin d'une activité. Bien que de nombreuses activités soient instantanées (les heures de début et de fin sont identiques), certaines, comme une étape d'approbation, peuvent avoir une durée mesurable. Cet attribut, conjointement avec l'horodatage de l'événement (heure de début), permet le calcul direct du temps de traitement de l'activité. L'analyse du temps de traitement aide à identifier les étapes spécifiques qui prennent le plus de temps et de ressources, en le distinguant du temps d'attente entre les activités. C'est impératif pour identifier les inefficiences dans tâches spécifiques. Pourquoi est-ce important ? : Il permet le calcul précis du temps nécessaire pour accomplir chaque activité, ce qui est indispensable pour analyser l'efficacité des ressources et identifier les tâches chronophages. Source des données : Similaire à StartTime, ceci peut être extrait des journaux d'audit système de NetSuite. Cela peut nécessiter une logique pour associer un événement « début » à un événement « fin » correspondant. Exemples 2023-10-26T10:05:14Z2023-10-27T14:32:00Z2023-11-15T09:05:00Z | |||
| Montant total de la facture InvoiceTotalAmount | La valeur monétaire totale de la facture, y compris les taxes et autres frais. | ||
| Descriptionn Cet attribut représente le montant total que le client est censé payer. C'est une donnée financière clée pour chaque cas de facturation. L'analyse du processus basée sur le montant de la facture permet une analyse basée sur la valeur. Par exemple, elle peut révéler si les factures de grande valeur suivent un processus différent et plus complexe que celles de faible valeur. Elle est également utilisée pour prioriser les efforts de recouvrement et comprendre l'impact financier des retards de paiement ou des erreurs de facturation. Pourquoi est-ce important ? : Il permet une analyse des processus basée sur la valeur, aidant à prioriser les factures de grande valeur et à comprendre l'impact financier des inefficiences des processus. Source des données : Cela correspond au champ « Total » (total) de l'enregistrement de transaction de facture dans NetSuite. Exemples 1500.0089.9912500.50 | |||
| Nom du client CustomerName | Le nom du client à qui la facture a été émise. | ||
| Descriptionn Cet attribut identifie l'entité juridique ou l'individu facturé. Il relie le processus de facturation à la fonction de gestion de la relation client. L'analyse du processus de facturation par client aide à identifier les modèles de comportement de paiement, les litiges ou la complexité des factures pour des clients spécifiques. Cela peut éclairer les stratégies de segmentation client, les décisions de limite de crédit et les approches de recouvrement adaptées. Par exemple, cela peut révéler si un client particulier a systématiquement des factures qui nécessitent un reprises. Pourquoi est-ce important ? : Il permet une analyse orientée client, aidant à identifier les schémas de paiement, les problèmes fréquents ou les écarts de processus spécifiques à certains clients. Source des données : Cela correspond au champ de nom « Client » ou « Entité » de l'enregistrement de transaction de facture dans NetSuite. Exemples Global Tech Inc.Innovate Solutions LLCCornerstone Corp | |||
| Région Region | La région géographique associée au client ou à la transaction. | ||
| Descriptionn L'attribut Région classe les factures en fonction de la géographie, qui pourrait être dérivée de l'adresse du client ou de l'unité commerciale qui a émis la facture. C'est une dimension puissante pour l'analyse comparative. Le tableau de bord « Comparaison des processus de facturation régionaux » s'appuie sur cet attribut pour comparer les KPI comme les temps de cycle, les taux d'erreur et les variantes de processus dans différentes régions. Cela aide à identifier les différences de performance régionales, à découvrir les meilleures pratiques dans les régions les plus performantes et à promouvoir les efforts de standardisation des processus à l'échelle de l'organisation. Pourquoi est-ce important ? : Il permet une analyse comparative entre différentes zones géographiques, ce qui est indispensable pour identifier les écarts de performance régionaux et standardiser les meilleures pratiques. Source des données : Ces données sont souvent stockées dans un segment personnalisé ou un champ de classification sur l'enregistrement du client maître ou de la transaction dans NetSuite. Exemples Amérique du NordEMEAAPAC | |||
| Utilisateur User | Le nom ou l'`ID` de l'`utilisateur` qui a effectué l'activité. | ||
| Descriptionn Cet attribut identifie l'employé ou l'utilisateur système responsable de l'exécution d'une étape de processus spécifique. Il peut s'agir de la personne qui a créé la facture, l'a approuvée ou a appliqué le paiement. L'analyse du processus par utilisateur aide à comprendre la répartition de la charge de travail, la performance individuelle et à identifier les besoins en formation. Elle peut également mettre en évidence des opportunités d'automatisation potentielles en montrant quelles activités manuelles sont effectuées par le plus grand nombre d'utilisateurs. C'est également essentiel pour l'analyse de la conformité et des pistes d'audit. Pourquoi est-ce important ? : Il permet l'analyse de la répartition de la charge de travail, de la performance spécifique des utilisateurs et de l'adhérence aux processus, ce qui est indispensable à la gestion des ressources et la formation ciblée. Source des données : Disponible dans le sous-onglet System Notes ou des champs spécifiques 'Modified By' sur les enregistrements d'Invoice et de transactions associées dans NetSuite. Exemples Alice SmithBob JohnsonSYSTEM | |||
| Conditions de paiement PaymentTerms | Les conditions de paiement convenues entre l'entreprise et le client. | ||
| Descriptionn Les conditions de paiement définissent quand et comment un client est censé payer sa facture, par exemple, 'Net 30' ou 'Dû à la réception'. Cette information est utilisée pour calculer automatiquement la date d'échéance de la facture. Cet attribut est impératif pour le tableau de bord 'Respect des conditions de paiement'. L'analyse des taux de paiement à temps selon différentes conditions de paiement aide à évaluer leur efficacité. Par exemple, cela peut montrer si les clients avec des conditions 'Net 15' paient plus rapidement que ceux avec 'Net 30', éclairant ainsi les futures négociations de contrats et les politiques de crédit. Pourquoi est-ce important ? : Il est indispensable pour analyser l'efficacité des différentes conditions de paiement et leur impact sur la ponctualité des paiements clients. Source des données : Cela correspond au champ « Conditions » de l'enregistrement de transaction de facture dans NetSuite. Exemples Net 30Net 60Dû à la réception | |||
| Département Department | Le département interne associé à la facture. | ||
| Descriptionn Cet attribut représente le département interne, tel que Ventes, Services ou une ligne d'activité spécifique, responsable de la transaction. Il s'agit d'un segment de classification standard dans NetSuite. L'analyse du processus par département permet le benchmarking interne et aide à identifier si certains départements ont des processus de facturation plus efficaces que d'autres. Elle peut révéler des variations dans l'adhérence aux processus ou l'allocation des ressources, fournissant des insights pour des initiatives d'amélioration des processus ciblées dans parties spécifiques de l'organisation. Pourquoi est-ce important ? : Il permet de comparer la performance des processus entre différents départements internes, mettant en évidence les variations et les opportunités de standardisation des processus internes. Source des données : Cela correspond au champ de classification « Département », qui peut être défini au niveau de l'en-tête ou de la ligne d'une transaction de facture dans NetSuite. Exemples Ventes - EntreprisesServices professionnelsHardware | |||
| Devise Currency | Le code de devise pour le montant de la facture. | ||
| Descriptionn Cet attribut spécifie la devise dans laquelle le montant de la facture est libellé, par exemple, USD, EUR ou GBP. C'est un contexte essentiel pour toute valeur monétaire. Pour les organisations multinationales, l'analyse par devise est importante pour comprendre la performance financière sur différents marchés. Elle garantit que les valeurs monétaires sont interprétées correctement et permet une agrégation et une comparaison appropriées après conversion de devise, si nécessaire. Pourquoi est-ce important ? : Il fournit le contexte nécessaire pour toutes les valeurs monétaires, ce qui est impératif pour des rapports financiers et des analyses précis, en particulier dans les opérations multinationales. Source des données : Cela correspond au champ « Devise » de l'enregistrement de transaction de facture dans NetSuite. Exemples USDEURGBP | |||
| Est un reprises IsRework | Un indicateur calculé qui identifie les activités considérées comme des reprises ou des boucles de correction. | ||
| Descriptionn Cet indicateur booléen est défini sur vrai pour les activités qui représentent un reprises sans valeur ajoutée, telles que « Facture corrigée » ou un deuxième événement « Facture approuvée » au sein du même cas. Il est généralement dérivé en fonction du nom de l'activité ou de la répétition d'une activité. Cet attribut est indispensable pour le tableau de bord « Analyse des retravaux et rejets de factures » et le KPI du « Taux d'erreur des factures ». Il permet une quantification facile du reprises, aidant à mettre en évidence les problèmes de qualité des processus. En filtrant les activités de reprises, les équipes peuvent rapidement identifier les causes profondes des erreurs et mesurer l'impact des initiatives d'amélioration des processus. Pourquoi est-ce important ? : Il mesure directement la qualité des processus en signalant les boucles de reprise inefficaces, permettant l'analyse des causes profondes et de l'impact financier des erreurs de facturation. Source des données : Il s'agit d'un attribut dérivé calculé lors de la transformation des données. Une logique est appliquée pour identifier les reprises, comme le marquage de noms d'activité spécifiques (« Facture corrigée ») ou d'activités répétées. Exemples truefaux | |||
| Jours de Vente en Suspens (DSO) DaysSalesOutstanding | Le nombre de jours entre la date de facture et la date de réception du paiement. | ||
| Descriptionn Le Délai Moyen de Recouvrement (DSO) est une métrique financière clé qui mesure le nombre moyen de jours nécessaires pour collecter un paiement après l'émission d'une facture. Cet attribut est calculé pour chaque facture individuelle afin de permettre une analyse détaillée. Bien que souvent agrégé comme un KPI de haut niveau, disposer du DSO au niveau de la facture individuelle permet une analyse puissante. Il peut être utilisé pour identifier quels clients, régions ou types de factures ont le DSO le plus élevé. Le tableau de bord 'Tendance DSO' s'appuie sur cette métrique pour visualiser l'efficacité du recouvrement au fil du temps, fournissant des informations clés sur la gestion du fonds de roulement. Pourquoi est-ce important ? : Il quantifie l'efficacité du recouvrement au niveau de chaque facture, permettant une analyse détaillée des causes profondes d'un DSO élevé et de son impact sur les flux de trésorerie. Source des données : Calculé en soustrayant la 'InvoiceDate' de l'horodatage de l'activité 'Customer Payment Received'. Exemples 294562 | |||
| Numéro de commande de vente SalesOrderNumber | L'identifiant de la commande client à partir de laquelle la facture a été générée. | ||
| Descriptionn Cet attribut fournit un lien direct vers la commande client d'origine, connectant le processus de facturation aux processus de vente et d'exécution précédents. L'inclusion du numéro de commande client permet une vue plus holistique de l'ensemble du cycle Commande-Encaissement. Elle permet une analyse qui peut retracer les problèmes de facturation jusqu'à leur source dans le processus de vente. Par exemple, des corrections de facture fréquentes pourraient être liées à des erreurs de saisie de données sur des types spécifiques de commandes client. Pourquoi est-ce important ? : Il relie le processus de facturation au processus de vente, permettant une analyse plus large et complet du Cycle de la De la commande au paiement pour identifier les causes profondes des problèmes de facturation. Source des données : Trouvé dans le champ 'Created From' ou dans le sous-onglet 'Related Records' d'une transaction Invoice dans NetSuite. Exemples SO-0009876SO-0009877SO-0009878 | |||
| Paiement à Temps IsOnTimePayment | Un indicateur signalant si le paiement client a été reçu à la date d'échéance de la facture ou avant. | ||
| Descriptionn Cet indicateur booléen calculé compare l'horodatage de l'activité « Paiement client reçu » avec la « Date d'échéance » de la facture. Il est défini sur vrai si le paiement a été effectué à temps ou en avance, et sur faux s'il a été en retard. Cet attribut est la base du KPI du « Taux de paiement ponctuel » et du tableau de bord « Adhésion aux conditions de paiement ». Il fournit une mesure binaire claire du comportement de paiement des clients, simplifiant l'analyse et le reporting. Il aide à identifier rapidement les tendances en matière de ponctualité des paiements et à évaluer l'efficacité des stratégies de recouvrement. Pourquoi est-ce important ? : Cela fournit une métrique de succès claire pour les recouvrements, soutenant directement le calcul du KPI du Taux de paiement ponctuel et l'analyse du comportement client. Source des données : Il s'agit d'un attribut calculé. Il nécessite de comparer l'horodatage de l'événement de paiement avec l'attribut « Date d'échéance » au niveau du cas. Exemples truefaux | |||
| Statut de la facture InvoiceStatus | Le statut actuel de la facture dans son cycle de vie. | ||
| Descriptionn Cet attribut reflète l'état actuel de la facture, tel que « Ouverte », « Entièrement payée » ou « Annulée ». Il fournit un aperçu de l'emplacement de la facture dans le processus à un moment donné. Le tableau de bord « Aperçu du statut des factures ouvertes » est directement construit sur cet attribut. Il permet une évaluation en temps réel des comptes clients, aidant les équipes financières à surveiller les soldes impayés, à gérer les recouvrements et à prévoir les flux de trésorerie. L'analyse du statut final aide également à comprendre les résultats du processus. Pourquoi est-ce important ? : Il fournit un aperçu de l'état actuel des créances clients, permettant des dashboards qui surveillent les factures ouvertes et l'avancement global de la facturation. Source des données : Cela correspond au champ « Statut » de l'enregistrement de transaction de facture dans NetSuite. Exemples OuvertPayé en totalitéAnnuléeEn attente d'approbation | |||
Activités De la commande au paiement - Facturation et encaissement
| Activité | Descriptionn | ||
|---|---|---|---|
| Facture approuvée | La facture a été formellement approuvée et est prête à être envoyée au client. Cela est capturé lorsque le statut d'approbation passe de « En attente d'approbation » à « Approuvé », généralement via une action de workflow. | ||
| Pourquoi est-ce important ? : Une étape clé qui empêche l'envoi de la facture au client. Elle est indispensablele pour mesurer les temps de cycle d'approbation et pour calculer l'indicateur clé de performance (KPI) du 'Taux de facturation automatisée'. Source des données : Déduit du champ 'Approval Status' de l'enregistrement Invoice passant à 'Approved'. L'horodatage précis est enregistré dans les system notes pour la transaction. Capture Déduit du changement du champ 'Approval Status' à 'Approved' dans les system notes. Type d'événement inferred | |||
| Facture créée | Marque la création officielle de l'enregistrement de transaction de facture dans NetSuite. Cet événement est le point de départ du processus de facturation pour chaque numéro de facture unique et est capturé à partir de l'horodatage de création de la transaction. | ||
| Pourquoi est-ce important ? : C'est le principal événement de début du processus de facturation. L'analyse du temps écoulé entre cet événement et les autres révèle l'efficacité globale du processus et constitue la base du KPI du « Temps de cycle de génération des factures ». Source des données : Capturé à partir de l'horodatage 'Date Created' sur l'enregistrement de transaction Invoice. Les System Notes de NetSuite pour la facture enregistrent également explicitement l'événement de création et l'utilisateur. Capture Événement enregistré lors de la création de l'enregistrement de transaction Invoice. Type d'événement explicit | |||
| Facture envoyée au client | Indique que la facture a été envoyée au client, généralement par e-mail. Cet événement est capturé en suivant le moment où un utilisateur exécute l'action « E-mail » à partir de l'enregistrement de la facture. | ||
| Pourquoi est-ce important ? : Cela marque le début de la période de recouvrement client et est le point de départ principal pour le calcul du Days Sales Outstanding (DSO). Source des données : Déduit du remplissage du champ 'Date Last Emailed' sur l'enregistrement Invoice. Alternativement, il peut être capturé à partir de la création d'un enregistrement de message e-mail sous le sous-onglet Communication. Capture Déduit du remplissage de 'Date Last Emailed' ou de la création d'un enregistrement de communication. Type d'événement inferred | |||
| Facture Payée Intégralement | Le statut de la facture est passé à « Entièrement payée », indiquant que son solde est désormais nul. C'est la conclusion réussie du cycle de facturation et de recouvrement de la facture. | ||
| Pourquoi est-ce important ? : C'est le principal événement de fin réussi du processus. L'analyse du temps total pour atteindre cet état fournit le temps de cycle complet pour le cycle de conversion des fonds. Source des données : Déduit du champ 'Status' de l'enregistrement Invoice passant à 'Paid In Full'. L'horodatage de ce changement de statut est disponibleble dans les system notes de la transaction. Capture Déduit du changement du champ 'Status' à 'Paid In Full' dans les system notes. Type d'événement inferred | |||
| Paiement client reçu | Un paiement a été reçu du client et enregistré dans le système. Ceci est capturé par la création d'une transaction 'Customer Payment' dans NetSuite, qui peut s'appliquer à une ou plusieurs factures. | ||
| Pourquoi est-ce important ? : Marque la réception de fonds, mais pas nécessairement son application à une facture spécifique. C'est la première étape du processus d'application des fonds et un événement clé pour les calculs de DSO. Source des données : Capturé à partir de la date de création de l'enregistrement de transaction 'Customer Payment'. La connexion à la facture est effectuée sur le sous-onglet 'Apply' du paiement. Capture Création d'un enregistrement de transaction Customer Payment. Type d'événement explicit | |||
| Avoir émis | Une transaction de note de crédit a été créée et appliquée à la facture, réduisant le solde dû. Cela indique généralement un retour de produit, une plainte de service ou une correction de prix. | ||
| Pourquoi est-ce important ? : Met en évidence les reprises, les problèmes de qualité ou les litiges clients. Les occurrences fréquentes peuvent signaler des problèmes sous-jacents et sont essentielles pour le tableau de bord 'Analyse des reprises et rejets de factures'. Source des données : Capturé à partir de la création d'une transaction Credit Memo. Le lien vers la facture originale se trouve dans le champ 'Created From' ou sur le sous-onglet 'Apply' de la note de crédit. Capture Création d'un enregistrement de Credit Memo lié à la facture originale. Type d'événement explicit | |||
| Date d'Échéance de Paiement Atteinte | Un événement calculé qui se produit lorsque la date actuelle correspond à la date d'échéance de la facture. Cet événement ne correspond pas à une action directe d'utilisateur ou de système, mais est dérivé de données existantes pendant l'analyse. | ||
| Pourquoi est-ce important ? : Agit comme un repère critique pour mesurer la ponctualité des paiements. Il est indispensable pour calculer le KPI du 'Taux de paiement ponctuel' et analyser les comportements de paiement des clients. Source des données : Ce n'est pas un événement explicite dans NetSuite. Il est calculé en comparant l'horodatage du journal d'événements au champ « Date d'échéance » de l'enregistrement de transaction de facture. Capture Calculé lorsque l'horodatage de l'événement est égal au champ 'Due Date' de la facture. Type d'événement calculated | |||
| Facture clôturée | La transaction de facture a été clôturée, souvent dans le cadre d'un processus comptable de fin de période. Cette action empêche toute modification ultérieure de la transaction une fois qu'elle a été entièrement payée et rapprochée. | ||
| Pourquoi est-ce important ? : Bien que se produisant souvent après « Entièrement payée », il peut s'agir d'une étape administrative finale. L'analyse des retards entre le paiement et la clôture pourrait impacter la ponctualité des rapports financiers. Source des données : Déduit du champ 'Status' passant à 'Closed' ou un état similaire. L'horodatage de ce changement est capturé à partir des system notes. Capture Déduit du changement du champ 'Status' dans les system notes. Type d'événement inferred | |||
| Facture invalidée | La facture a été annulée, l'annulant effectivement et annulant tout impact sur le grand livre général. Cette action est généralement prise pour les factures créées par erreur avant d'être payées. | ||
| Pourquoi est-ce important ? : Représente une exception de processus et un état terminal. Comprendre pourquoi les factures sont annulées peut révéler des erreurs de saisie de données ou des erreurs de processus nécessitant une correction en amont. Source des données : Il s'agit d'une action utilisateur explicite. Elle peut être capturée à partir des notes système de l'enregistrement de facture, qui consigne le moment où la transaction a été annulée et par qui. Capture Action 'Void' explicite enregistrée dans les System Notes de la facture. Type d'événement explicit | |||
| Facture soumise pour approbation | Représente le changement de statut de la facture à « En attente d'approbation ». Cet événement est capturé lorsqu'un utilisateur soumet la facture dans un workflow d'approbation configuré, ce qui est une personnalisation courante. | ||
| Pourquoi est-ce important ? : Cette activité identifie le début d'un potentiel goulot d'étranglement d'approbation. Le temps passé en attente d'approbation est un élément clé du temps de cycle global de traitement des factures. Source des données : Déduit du champ 'Approval Status' de l'enregistrement Invoice passant à 'Pending Approval'. L'horodatage de ce changement se trouve dans la piste d'audit des system notes pour la facture. Capture Déduit du changement du champ 'Approval Status' enregistré dans les system notes. Type d'événement inferred | |||
| Paiement appliqué à la facture | Le paiement client reçu a été spécifiquement appliqué à cette facture, réduisant son montant dû. Ceci est enregistré lorsque l'application est sauvegardée sur l'enregistrement de paiement client. | ||
| Pourquoi est-ce important ? : C'est le lien crucial entre la réception des encaissements et le règlement des factures. La durée entre « Paiement reçu » et cet événement définit le KPI du « Temps de cycle d'application des encaissements ». Source des données : Capturé à partir des System Notes ou de la piste d'audit de la transaction Customer Payment, spécifiquement lorsque l'application à la ligne de facture est enregistrée. L'horodatage de cette application est indispensablele. Capture Comptabilisé lorsque l'enregistrement de Customer Payment est sauvegardé avec une application à la facture. Type d'événement explicit | |||
| Rappel de Paiement Émis | Une communication a été envoyée au client concernant un paiement en souffrance. Cela est capturé comme une activité enregistrée ou un e-mail envoyé depuis l'enregistrement de la facture ou du client, souvent par une solution de relance. | ||
| Pourquoi est-ce important ? : Primordial pour évaluer l'efficacité des stratégies de recouvrement. L'analyse de l'impact de cette activité sur les paiements ultérieurs aide à optimiser la fréquence et le calendrier des rappels. Source des données : Capturé à partir de la création d'un enregistrement d'e-mail sous l'onglet Communication > Messages de l'enregistrement Invoice ou Customer. Les solutions de relance automatisées peuvent également les enregistrer comme des enregistrements personnalisés ou des tâches. Capture Comptabilisé comme un e-mail ou un enregistrement d'activité associé à la facture. Type d'événement explicit | |||
Guides d'extraction
Étapes
- Connectez-vous à NetSuite : Accédez à votre compte NetSuite en utilisant un rôle doté d'autorisations suffisantes pour créer et exécuter des 'Saved Searches' sur les enregistrements de transaction.
- Accédez aux Saved Searches : Allez dans Rapports > Saved Searches > Toutes les Saved Searches > Nouveau. Sélectionnez 'Transaction' dans la liste des types de recherche. Cela servira de base pour créer plusieurs recherches, une pour chaque type d'événement.
- Créez la recherche 'Invoice Created' : C'est la recherche principale qui capture la création des factures.
- Dans l'onglet 'Criteria', sous 'Standard', définissez le filtre 'Type' sur 'is Invoice'.
- Ajoutez un autre filtre pour 'Main Line' et définissez-le sur 'is true' pour obtenir un enregistrement par facture.
- Dans l'onglet 'Results', ajoutez les colonnes requises. Utilisez des formules pour créer des champs standardisés comme '(ActivityName)'. Par exemple, ajoutez un champ 'Formula (Text)' avec la formule
_UTF8'Invoice Created'.
- Créez des recherches pour les changements de statut (Approval, Paid, Voided, Closed) : De nombreuses activités sont des changements de statut. Le moyen le plus fiable de capturer l'horodatage exact est via les System Notes.
- Créez une nouvelle 'Transaction Saved Search'.
- Dans l'onglet 'Criteria', définissez 'Type' sur 'is Invoice'.
- Sous l'onglet 'Standard', ajoutez le filtre 'System Notes : Field' et sélectionnez le champ de statut pertinent, par exemple, 'Approval Status'.
- Ajoutez un autre filtre 'System Notes : New Value' et définissez-le sur le statut cible, par exemple, 'Approved'.
- Dans l'onglet 'Results', mappez 'System Notes : Date' à
EventHorodatageet 'System Notes : Set by' àUser. - Répétez ce processus pour chaque activité basée sur le statut : 'Invoice Submitted for Approval', 'Invoice Approved', 'Invoice Paid In Full', 'Invoice Voided' et 'Invoice Closed', en ajustant les filtres de champ et de valeur en conséquence.
- Créez la recherche 'Invoice Sent to Customer' : Cet événement est généralement capturé en suivant les messages électroniques envoyés depuis l'enregistrement de facture.
- Créez une nouvelle 'Transaction Saved Search' avec 'Type' défini sur 'is Invoice'.
- Dans l'onglet 'Criteria', sous 'Related Records', ajoutez un filtre pour 'Messages : Date Sent' et définissez-le sur 'is not empty'.
- Dans l'onglet 'Results', mappez 'Messages : Date Sent' à
EventHorodatageet 'Messages : Author' àUser.
- Créez des recherches pour les activités de paiement et de note de crédit : Celles-ci impliquent des types de transaction distincts liés à la facture.
- Pour 'Customer Payment Received', créez une recherche pour 'Type' est 'Customer Payment'. Capturez la date de création comme horodatage de l'événement.
- Pour 'Payment Applied To Invoice', utilisez la même recherche 'Customer Payment' mais joignez-vous aux champs 'Applied To Transaction'. La 'Date de création' de la transaction de paiement sert d'horodatage. Vous obtiendrez une ligne par application de facture.
- Pour 'Credit Memo Created', créez une recherche pour 'Type' est 'Credit Memo' et liez-vous au champ 'Created From' pour obtenir le numéro de facture original.
- Exécutez et exportez chaque Saved Search : Exécutez chaque 'Saved Search' que vous avez créée. Depuis la page des résultats, cliquez sur l'icône d'exportation (CSV, Excel ou PDF) et choisissez CSV. Vous devrez peut-être exporter par lots si l'ensemble de résultats est supérieur à votre limite d'exportation NetSuite.
- Combinez et transformez les données : Consolidez tous les fichiers CSV exportés en un seul fichier à l'aide d'un outil comme Microsoft Excel, un script Python ou un outil de prélèvement.paration des données.
- Dérivez l'événement 'Payment Due Date Reached' : Dans votre fichier de données combiné, pour chaque événement 'Invoice Created', créez une nouvelle ligne. Définissez le
(ActivityName)sur 'Payment Due Date Reached', leEventHorodatagesur la valeur du champDueDatede la facture, et copiez les autres attributs de facture pertinents. - Finalisez le journal d'événements : Standardisez tous les en-têtes de colonne pour qu'ils correspondent au schéma requis (par exemple,
InvoiceNumber,(ActivityName),EventHorodatage). Assurez-vous que les formats d'horodatage sont cohérents. Ajoutez les colonnesSourceSystemetLastDataUpdateavec des valeurs statiques pour ce lot d'extraction. Enregistrez le fichier consolidé final au format CSV pour le téléchargement.
Configuration
- Prérequis : Un rôle utilisateur avec les autorisations de créer, modifier et exécuter des 'Saved Searches' de type 'Transaction' est requis. L'accès pour consulter les enregistrements 'Invoice', 'Customer Payment', 'Credit Memo' et 'System Notes' est également nécessaire.
- Type de recherche : Le type de recherche principal utilisé pour toutes les extractions est 'Transaction'. Ce type permet d'accéder à tous les enregistrements nécessaires et à leurs relations.
- Filtrage par plage de dates : Pour gérer la performance et le volume de données, appliquez un filtre de plage de dates à chaque recherche. Un filtre sur 'Date de création' pour une période des 3 à 6 derniers mois est recommandé pour l'analyse initiale.
- Filtre 'Main Line' : Utilisez le critère 'Main Line' défini sur 'true' pour les événements au niveau de l'en-tête du document, tel que 'Invoice Created'. Définissez-le sur 'false' lorsque vous devez analyser les détails des lignes, ce qui n'est pas requis pour ce processus.
- Notes système : La capture des changements de statut repose fortement sur les System Notes. Assurez-vous que l'audit est activé pour les champs de transaction clés comme 'Status' et 'Approval Status' dans votre configuration NetSuite (Configuration > Société > Activer les fonctionnalités > SuiteCloud > SuiteAudit Trail).
- Considérations de performance : Les recherches complexes avec de nombreuses jointures et des champs de formule sur une large plage de dates peuvent être lentes à exécuter dans l'interface utilisateur de NetSuite. Il est conseillé d'exécuter et d'exporter ces recherches pendant les heures creuses. Si une recherche expire, réduisez la plage de dates et exportez les données par petits lots.
a Exemple de requête 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.
*/ Étapes
- Prérequis : Activer SuiteAnalytics Connect : Assurez-vous que le module SuiteAnalytics Connect est sous licence et activé dans votre instance NetSuite. Cela est généralement effectué par un administrateur NetSuite sous Configuration > Société > Activer les fonctionnalités > Analyse.
- Télécharger et configurer le pilote ODBC : Naviguez vers le tableau de bord NetSuite et localisez le portlet 'Settings'. Cliquez sur le lien 'Set Up SuiteAnalytics Connect' pour télécharger le pilote ODBC approprié à votre système d'exploitation. Suivez les instructions d'installation fournies par NetSuite pour installer et configurer le pilote, en fournissant votre hôte de service, port, ID de compte, ID de rôle, e-mail et mot de passe.
- Établir une connexion à la base de données : Utilisez un outil client SQL qui prend en charge les connexions ODBC, tel que DBeaver, Tableau ou Power BI. Créez une nouvelle connexion ODBC à l'aide du pilote que vous avez configuré à l'étape précédente. Testez la connexion pour vous assurer que vous pouvez vous authentifier et accéder avec succès à la base de données répliquée en lecture de NetSuite.
- Préparer la requête SQL : Copiez la requête SQL complète fournie dans la section 'Query' de ce document. Cette requête est conçue pour extraire toutes les activités et attributs requis pour le processus de facturation du Cycle de la De la commande au paiement.
- Définir les paramètres de la requête : Avant l'exécution, localisez les valeurs de remplacement dans la requête. Vous devez remplacer
'YYYY-MM-DD'par vos dates de début et de fin souhaitées pour la période d'extraction. Remplacez également[Your Subsidiary ID]par l'ID interne de la filiale NetSuite que vous souhaitez analyser. - Exécuter la requête : Exécutez la requête modifiée dans votre client SQL. Le temps d'exécution variera en fonction de la plage de dates et du volume de transactions dans votre compte NetSuite.
- Examiner les résultats : Une fois la requête terminée, une table plate représentant le journal d'événements (journal d'événements) sera renvoyée. Chaque ligne correspond à une activité spécifique dans le cycle de vie de la facture. Examinez les données pour en vérifier l'exhaustivité et la précision.
- Exporter le journal d'événements : Exportez les résultats de la requête de votre client SQL vers un fichier CSV. Assurez-vous que le fichier est encodé en UTF-8 pour éviter les problèmes de caractères.
- Préparer pour le téléchargement : Avant de télécharger vers un outil de Process Mining, confirmez que les en-têtes de colonne correspondent aux noms d'attributs requis, tels que InvoiceNumber, (ActivityName) et EventHorodatage. Vérifiez que les formats de date et d'heure sont cohérents.
Configuration
- Licence SuiteAnalytics Connect : Une licence valide pour le module SuiteAnalytics Connect est obligatoire pour accéder à la base de données répliquée en lecture de NetSuite. Sans cela, l'accès SQL direct n'est pas possible.
- Rôle et utilisateur dédiés : Il est fortement recommandé de créer un rôle NetSuite dédié avec les autorisations appropriées pour SuiteAnalytics Connect. Ce rôle doit avoir un accès en lecture seule aux enregistrements nécessaires, y compris Transactions, Customers et System Notes. Attribuez un utilisateur dédié à ce rôle pour l'extraction afin d'assurer la sécurité et l'auditabilité.
- Filtrage par plage de dates : La requête fournie inclut une clause
WHEREsur la date de création de la facture (Transaction.TRANDATE). Pour les extractions initiales, il est conseillé de commencer avec une plage de dates plus petite, comme les 3 à 6 derniers mois, afin de gérer la performance et le volume de données. Par exemple :AND T.TRANDATE BETWEEN '2023-01-01' AND '2023-06-30'. - Filtrage par filiale : Pour les comptes avec plusieurs filiales, le filtrage par la filiale spécifique est indispensable pour la performance et la pertinence des données. La requête inclut un espace réservé
WHERE T.SUBSIDIARY_ID = [Your Subsidiary ID]qui doit être configuré. - Actualisation des données : La base de données SuiteAnalytics Connect est une réplique en lecture. Les données sont généralement actualisées plusieurs fois par heure, mais ce n'est pas en temps réel. Soyez conscient d'un décalage potentiel de quelques heures entre une transaction effectuée dans NetSuite et son apparition dans la base de données Connect.
a Exemple de requête 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');