Votre modèle de données pour le traitement des paiements des comptes fournisseurs
Votre modèle de données pour le traitement des paiements des comptes fournisseurs
- Champs de données essentiels pour Sage Intacct
- Jalons de processus standardisés
- Instructions d'extraction spécifiques
Attributs de traitement des paiements des comptes fournisseurs
| Nom | Descriptionn | ||
|---|---|---|---|
| Horodatage de l'événement EventTime | La date et l'heure spécifiques auxquelles une activité a eu lieu. | ||
| Descriptionn Cet attribut enregistre le moment exact où un événement a eu lieu. Il sert de base à tous les calculs basés sur le temps, y compris le 'Temps de cycle moyen des factures' et la 'Durée moyenne d'approbation'. Des horodatages précis sont essentiels pour identifier les points de blocage dans le tableau de bord 'Performance du workflow d'approbation'. Pourquoi est-ce important ? : Requis pour séquencer les événements et calculer les durées entre les étapes du processus. Source des données : Horodatages de création ou de modification des transactions dans les tables source Exemples 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Nom de l'activité ActivityName | L'action ou l'événement spécifique survenant dans le cycle de vie de la facture. | ||
| Descriptionn Cet attribut capture le nom de l'étape en cours d'exécution, tel que 'facture créée', 'Facture Approuvée' ou 'Paiement Comptabilisé'. Il est indispensable pour reconstituer le flux de processus et visualiser la séquence des événements dans le tableau de bord 'Distribution du temps de cycle complet'. Pourquoi est-ce important ? : Définit les étapes de la cartographie des processus et est obligatoire pour toute analyse de Source des données : Journaux de piste d'audit ou tables d'historique des transactions système Exemples Brouillon de facture crééFacture approuvéePaiement généré | |||
| Numéro de facture InvoiceNumber | L'identifiant unique du document de facture fournisseur. | ||
| Descriptionn Le numéro de facture sert d'identifiant de cas définitif pour ce processus. Il regroupe de manière unique tous les événements relatifs à une seule facture fournisseur, pour une analyse complète de son parcours de la réception au règlement. Dans Sage Intacct, cela correspond généralement au numéro de document ou au numéro d'enregistrement dans l'objet Facture fournisseur (AP Bill). Pourquoi est-ce important ? : C'est l'élément clé pour lier toutes les activités du processus à une seule instance de cas. Source des données : Objet Facture fournisseur Sage Intacct, champ DOCNUMBER ou RECORDNO Exemples INV-2023-001988722-AFEB-23-991 | |||
| Dernière mise à jour des données LastDataUpdate | Heure de la dernière extraction ou actualisation de l'enregistrement. | ||
| Descriptionn Cet attribut indique la dernière synchronisation des données avec la plateforme de Process Mining. Il aide les utilisateurs à comprendre la réactualisation des données présentées dans des dashboards comme 'Optimisation des lots de paiement' et garantit que l'analyse reflète l'état le plus récent du grand livre des comptes fournisseurs. Pourquoi est-ce important ? : Champ technique requis pour les chargements incrémentiels et les vérifications de la la réactualisation des données. Source des données : Heure système au moment de l'extraction des données Exemples 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| Système source SourceSystem | Le nom du système où l'événement est survenu. | ||
| Descriptionn Cet attribut identifie l'origine des données, qui est généralement 'Sage Intacct' pour ce processus. Cependant, si les factures sont ingérées à partir d'outils OCR ou de plateformes d'approvisionnement externes, ce champ aide à différencier les sources de données dans la 'Vue d'ensemble de la conformité et des risques'. Pourquoi est-ce important ? : Assure la traçabilité de la traçabilité des données, en particulier dans les environnements multi-systèmes. Source des données : Codé en dur lors de l'extraction ou dérivé des paramètres de connexion Exemples Sage IntacctBill.comExpensify | |||
| Créé par l'utilisateur CreatedBy | L'identifiant utilisateur de la personne qui a saisi la facture. | ||
| Descriptionn Cet attribut identifie l'initiateur du cas de processus. Il est utilisé dans l'analyse des interventions manuelles et des points de contact pour identifier les besoins de formation des utilisateurs spécifiques qui nécessitent fréquemment des corrections de données ou génèrent des doublons. Pourquoi est-ce important ? : Permet l'analyse des performances des ressources et identifie les opportunités de formation. Source des données : Objet Facture fournisseur Sage Intacct, champ CREATEDBY Exemples jsmithap_automatisation_botmdoe | |||
| Date d'échéance DueDate | La date limite contractuelle de paiement. | ||
| Descriptionn Cet attribut indique la date à laquelle le paiement doit être effectué pour éviter les pénalités. C'est le dénominateur pour le KPI 'Pourcentage de paiements à temps'. L'analyse des paiements exécutés après cette date révèle les lacunes en matière de conformité et les dommages potentiels aux relations avec les fournisseurs. Pourquoi est-ce important ? : Référence pour déterminer la respect des délais et le respect des SLA. Source des données : Objet Facture fournisseur Sage Intacct, champ WHENDUE Exemples 2023-11-012023-11-15 | |||
| Date de la facture InvoiceDate | La date d'émission de la facture par le fournisseur. | ||
| Descriptionn Cet attribut reflète la date du document indiquée sur la facture physique. Il est utilisé conjointement avec la date de paiement pour calculer le 'Temps de cycle complet'. Des écarts significatifs entre la date de facture et la date de saisie peuvent indiquer des retards de service courrier ou de numérisation. Pourquoi est-ce important ? : Le point de départ pour l'analyse du vieillissement et les calculs des conditions de paiement. Source des données : Objet Facture fournisseur Sage Intacct, champ WHENTOCREATE ou DATECREATED Exemples 2023-10-012023-10-05 | |||
| Date de paiement PaymentDate | La date d'exécution du paiement. | ||
| Descriptionn Cet attribut enregistre l'horodatage final du règlement financier. Il est utilisé pour calculer le temps de cycle et est comparé à la date d'échéance pour le KPI 'Pourcentage de paiements à temps'. Pourquoi est-ce important ? : Marque l'achèvement du cycle de processus principal. Source des données : Détail de paiement fournisseur Sage Intacct, champ WHENPAID Exemples 2023-11-052023-11-10 | |||
| Département Department | Le service interne responsable de la dépense. | ||
| Descriptionn Cet attribut catégorise la facture par centre de coûts ou fonction commerciale. Il soutient le tableau de bord d'analyse des variations de processus en mettant en évidence les départements qui rencontrent des retards d'approbation ou des taux de reprise élevés par rapport à la moyenne organisationnelle. Pourquoi est-ce important ? : Permet un approfondissement organisationnel et une analyse des causes profondes. Source des données : Objet Facture fournisseur Sage Intacct, champ DEPTID ou DEPTNAME Exemples Services `IT`MarketingOpérations | |||
| Montant de la facture InvoiceAmount | La valeur monétaire totale de la facture. | ||
| Descriptionn Cet attribut représente l'engagement financier total pour le cas spécifique. Il est utilisé dans le tableau de bord 'Détection des soumissions en double' pour identifier les factures avec des montants et des identifiants fournisseurs identiques. Il permet également de filtrer l'analyse par transactions à forte ou faible valeur. Pourquoi est-ce important ? : Primordial pour l'analyse d'impact financier et l'évaluation des risques. Source des données : Objet Facture fournisseur Sage Intacct, champ TOTALENTERED ou TOTALDUE Exemples 1500.00250.5010000.00 | |||
| Nom du fournisseur VendorName | Le nom du fournisseur ou du prestataire de services émettant la facture. | ||
| Descriptionn Cet attribut identifie l'entité externe à qui le paiement est dû. C'est une dimension primaire pour le tableau de bord 'Prévisibilité des paiements fournisseurs', permettant aux analystes de regrouper les métriques de performance par fournisseur et d'identifier les relations fournisseurs à haut risque ou les points de contact manuels fréquents. Pourquoi est-ce important ? : Primordial pour la segmentation de l'analyse par performance et comportement des fournisseurs. Source des données : Objet Facture fournisseur Sage Intacct, champ VENDORNAME Exemples Acme CorpGlobal Services IncOffice Depot | |||
| Numéro de commande d'achat PurchaseOrderNumber | Le numéro de référence du bon de commande associé. | ||
| Descriptionn Cet attribut lie la facture à un document d'approvisionnement en amont. C'est le principal moteur du tableau de bord 'Efficacité du rapprochement tripartite' et de l'analyse de la 'Conformité des bons de commande et dépenses hors bons de commande'. Les cas avec une valeur nulle ici indiquent des dépenses sans bon de commande. Pourquoi est-ce important ? : Distingue les factures adossées à un bon de commande (BC) des factures sans bon de commande pour l'analyse de conformité. Source des données : Objet Facture fournisseur Sage Intacct, champ PONUMBER ou lien document associé Exemples PO-9912PO-1002null | |||
| Statut de la facture InvoiceStatus | L'état actuel du cycle de vie de la facture dans le système. | ||
| Descriptionn Cet attribut reflète le statut actuel du système (par exemple, Comptabilisé, Payé, Brouillon). Il aide à filtrer le jeu de données pour les cas actifs par rapport aux cas terminés dans le tableau de bord 'Distribution du temps de cycle complet'. Pourquoi est-ce important ? : Identifie rapidement l'état du cas. Source des données : Objet Facture fournisseur Sage Intacct, champ STATE Exemples ComptabiliséPayéBrouillonPartiellement payé | |||
| Conditions de paiement PaymentTerms | Les conditions convenues concernant les délais de paiement et les remises. | ||
| Descriptionn Cet attribut décrit la règle utilisée pour calculer la date d'échéance et la date d'escompte (par exemple, Net 30, 2/10 Net 30). Il est indispensable à le tableau de bord d'analyse des escomptes pour paiement anticipé afin d'identifier les factures éligibles à des économies qui n'ont pas été réalisées. Pourquoi est-ce important ? : Contexte pour l'analyse des stratégies de flux de trésorerie et des opportunités d'escompte manquées. Source des données : Objet Facture fournisseur Sage Intacct, champ TERMNAME Exemples Net 30Dû à la réception2 % sous 10 jours, net à 30 jours | |||
| Est adossé à un bon de commande IsPOBacked | Indicateur signalant si la facture est associée à un bon de commande. | ||
| Descriptionn Cet attribut identifie si la facture a suivi les procédures d'approvisionnement standard. C'est le filtre principal pour le KPI 'Taux de conformité des bons de commande' et aide à distinguer les dépenses ad hoc des dépenses gérées. Pourquoi est-ce important ? : Différenciateur clé pour l'analyse des chemins de processus. Source des données : Calculé : NuméroBonCommande n'est pas nul Exemples truefaux | |||
| Est payé en retard IsPaidLate | Indicateur signalant si la date de paiement a dépassé la date d'échéance. | ||
| Descriptionn Cet attribut booléen est calculé en comparant la date de paiement à la date d'échéance. Il sert de filtre direct pour le KPI 'Pourcentage de paiements à temps' et aide à isoler les cas problématiques dans le tableau de bord 'Prévisibilité des paiements fournisseurs'. Pourquoi est-ce important ? : Simplifie le filtrage des violations de SLA. Source des données : Calculé : DatePaiement > DateÉchéance Exemples truefaux | |||
| Statut de suspension HoldStatus | Indique si la facture est actuellement en attente de paiement. | ||
| Descriptionn Cet attribut signale les cas qui sont suspendus du traitement des paiements. Il soutient le tableau de bord 'Moniteur d'impact des blocages de paiement' en identifiant les cas bloqués. Pourquoi est-ce important ? : Identifie les points de blocage immédiats nécessitant une intervention. Source des données : Objet Facture fournisseur Sage Intacct, champ ONHOLD Exemples truefaux | |||
| Unité commerciale BusinessUnit | L'entité juridique ou le lieu associé à la facture. | ||
| Descriptionn Cet attribut différencie les différentes filiales ou emplacements de bureaux. Il est impératif pour la 'Vue d'ensemble de la conformité et des risques' de comparer le respect des processus entre les différentes entités géographiques ou juridiques dans l'organisation. Pourquoi est-ce important ? : Primordial pour les benchmarks multi-entités. Source des données : Objet Facture fournisseur Sage Intacct, champ LOCATIONID ou ENTITY Exemples USA-HQEMEA-LondresAPAC-Singapour | |||
Activités de traitement des paiements des comptes fournisseurs
| Activité | Descriptionn | ||
|---|---|---|---|
| Brouillon de facture créé | La création initiale de l'enregistrement de facture fournisseur (AP Bill) dans Sage Intacct, généralement à l'état de brouillon. Cela capture le point d'entrée des données de la facture avant qu'elle n'entre dans les workflows d'approbation ou de comptabilisation. | ||
| Pourquoi est-ce important ? : Établit l'horodatage le plus ancien pour le temps de cycle du processus et identifie le début de l'enregistrement de la dette. Source des données : Interrogez le journal d'audit de l'objet APBILL pour l'action 'Créer' ou l'horodatage initial de la création de l'enregistrement. Capture Comptabilisé lors de la première création de l'enregistrement APBILL Type d'événement explicit | |||
| Facture approuvée | Une action d'approbation distincte enregistrée dans le workflow d'approbation désigné. Cela signifie qu'un utilisateur disposant d'une autorité suffisante a autorisé le paiement de la facture. | ||
| Pourquoi est-ce important ? : Primordial pour le KPI « Durée moyenne d'approbation » et l'identification des points de blocage dans la validation de la direction. Source des données : Interrogez le journal 'Historique des approbations' associé à la facture fournisseur pour trouver les actions 'Approuvé'. Capture Comptabilisé lors de l'exécution de l'action d'approbation Type d'événement explicit | |||
| Facture comptabilisée | Le moment où la facture est enregistrée dans le grand livre. Dans les systèmes sans workflows d'approbation, cela peut se produire simultanément avec la soumission. | ||
| Pourquoi est-ce important ? : Indique que la dette financière est officiellement reconnue dans les livres comptables. Source des données : Interrogez le journal d'audit d'APBILL pour le changement d'état à 'Comptabilisé'. Capture Comptabilisé lorsque la transaction est comptabilisée dans le GL Type d'événement explicit | |||
| Facture rapprochée du bon de commande | Identifie quand une facture fournisseur est créée en convertissant ou en liant un bon de commande ou un accusé de réception. Cette activité valide l'efficacité du rapprochement tripartite. | ||
| Pourquoi est-ce important ? : Primordial pour le KPI « Taux de rapprochement au premier passage » et la détermination de la conformité des bons de commande par rapport aux dépenses sans bon de commande. Source des données : Vérifiez l'objet APBILL pour une valeur non nulle dans les champs 'createdfrom' ou 'source_id' indiquant un lien vers une transaction d'achat. Capture Comparer l'ID d'enregistrement à l'ID de transaction source Type d'événement inferred | |||
| Facture soumise | La transition de la facture d'un état 'Brouillon' à un état 'Soumis', déclenchant le workflow d'approbation. Cela marque la fin de la saisie des données et le début du cycle d'approbation. | ||
| Pourquoi est-ce important ? : Primordial pour segmenter la durée de 'Saisie des données' de la durée d''Approbation' dans l'analyse du temps de cycle. Source des données : Déduire de l'Audit Trail APBILL où le champ Statut passe de 'Brouillon' à 'Soumis' ou 'En attente d'approbation'. Capture Comparer le champ de statut avant/après Type d'événement inferred | |||
| Paiement généré | La création de l'enregistrement de paiement (chèque, ACH, virement) lié à la facture. C'est le moment où le transfert de fonds est initié dans le système. | ||
| Pourquoi est-ce important ? : L'horodatage principal pour le 'Temps de cycle moyen des factures' et le 'Pourcentage de paiements à temps'. Source des données : Identifier la création d'un enregistrement APPYMT lié à l'APBILL. Utilisez la date de création de l'objet paiement. Capture Comptabilisé lors de la création de l'enregistrement APPYMT Type d'événement explicit | |||
| Facture libérée de la retenue | La levée du blocage de paiement, permettant à la facture de procéder à la sélection pour paiement. Cela marque la résolution du litige ou du problème. | ||
| Pourquoi est-ce important ? : Marque la fin d'une période de goulot d'étranglement et la reprise du flux de processus standard. Source des données : Déduire de l'Audit Trail APBILL où le champ booléen ou de statut 'En attente' passe à faux. Capture Comparer le champ de statut avant/après Type d'événement inferred | |||
| Facture mise à jour | Enregistre les modifications apportées à l'en-tête ou aux lignes de facture après la création initiale. Une fréquence élevée de cette activité indique une reprise manuelle ou des erreurs d'extraction de données. | ||
| Pourquoi est-ce important ? : Clé pour le calcul du « Taux de traitement sans contact » et l'identification des boucles de correction manuelle de données inefficaces. Source des données : Interrogez l'historique d'audit d'APBILL pour les actions de 'Mise à jour' effectuées par un utilisateur avant la comptabilisation. Capture Comptabilisé lors de la modification de la transaction Type d'événement explicit | |||
| Facture mise en attente | L'application d'un blocage de paiement ou d'un statut 'En attente' à la facture. Cela empêche la sélection de la facture pour le traitement du paiement. | ||
| Pourquoi est-ce important ? : Impacte directement le « Temps de résolution des blocages de paiement » et visualise les retards dans la chaîne de paiement. Source des données : Déduire de l'Audit Trail APBILL où le champ booléen ou de statut 'En attente' passe à vrai. Capture Comparer le champ de statut avant/après Type d'événement inferred | |||
| Facture refusée | Enregistre le moment où un approbateur rejette la facture, la ramenant à un état 'Brouillon' ou 'Partiellement approuvée'. Cela indique une boucle de processus ou un problème de qualité des données. | ||
| Pourquoi est-ce important ? : Met en évidence les points de blocage dans le workflow et contribue aux métriques de reprises. Source des données : Interrogez le journal 'Historique des approbations' associé à la facture fournisseur pour les actions 'Refusé' ou 'Rejeté'. Capture Comptabilisé lors de l'exécution de l'action de refus Type d'événement explicit | |||
| Facture sélectionnée pour paiement | L'inclusion de la facture dans un lot de paiement ou une exécution de sélection. Le statut passe généralement à 'Sélectionné', la bloquant pour d'autres exécutions de paiement. | ||
| Pourquoi est-ce important ? : Analyse l'« Optimisation des lots de paiement » et le décalage entre la décision de payer et l'émission effective du chèque. Source des données : Déduire du changement de statut APBILL à 'Sélectionné' ou équivalent via l'action d'écran 'Payer les factures'. Capture Comparer le champ de statut avant/après Type d'événement inferred | |||
| Paiement annulé | L'annulation d'un paiement précédemment généré. Cela réactive la dette de la facture et nécessite de relancer le processus de paiement. | ||
| Pourquoi est-ce important ? : Identifier les défaillances graves en aval du processus où les paiements sont générés mais annulés. Source des données : Interrogez l'objet APPYMT pour le statut 'Annulé' ou 'Invalidé' et l'horodatage associé. Capture Comptabilisé lorsqu'une transaction d'annulation se produit Type d'événement explicit | |||
| Paiement rapproché | La confirmation que le paiement a été compensé par la banque, marquée lors du processus de rapprochement bancaire dans la gestion de trésorerie. | ||
| Pourquoi est-ce important ? : Indique le 'Temps de cycle complet' du point de vue de la trésorerie, confirmant que les fonds ont effectivement quitté le compte. Source des données : Vérifiez le statut de rapprochement ou le champ 'Date de compensation' sur l'objet APPYMT ou la transaction de gestion de trésorerie liée. Capture Comparer le statut de rapprochement Type d'événement inferred | |||
Guides d'extraction
Étapes
Préparer la vue des factures fournisseurs Connectez-vous à Sage Intacct et accédez à Comptes fournisseurs > Tout l'onglet > Factures. Sélectionnez « Créer une nouvelle vue ». Nommez la vue « Process Mining - Extraction des factures ». Sélectionnez les colonnes suivantes dans l'ordre : Numéro de facture (Numéro de documentment), Nom du fournisseur, Date de création, Date de comptabilisation, Date d'échéance, Montant total, Statut, Devise, Numéro de bon de commande, Département, Créé par, En attente, Descriptionn, Numéro d'enregistrement (ID système). Définissez des filtres pour exclure les factures « Brouillon » si vous ne voulez que les données comptabilisées, ou laissez ouvert pour capturer le cycle de vie complet. Assurez-vous que la plage de dates couvre votre période d'analyse (par exemple, Date de création = 365 derniers jours). Enregistrez la vue.
Exporter les données des factures fournisseurs Ouvrez la vue « Process Mining - Extraction des factures ». Cliquez sur le bouton « Exporter » et sélectionnez le format « CSV ». Enregistrez le fichier sous « AP_Bills.csv ».
Préparer la vue des paiements comptabilisés Naviguez vers Comptes fournisseurs > Tout l'onglet > Paiements comptabilisés. Créez une nouvelle vue nommée « Process Mining - Paiements ». Sélectionnez les colonnes : Numéro de chèque/paiement, Date de paiement, Nom du fournisseur, Montant de la transaction, Méthode de paiement, Statut (Annulé/Compensé), Date de rapprochement, Numéro de facture (Référence), Numéro d'enregistrement. Enregistrez la vue.
Exporter les données de paiement Ouvrez la vue « Process Mining - Paiements ». Cliquez sur « Exporter » et sélectionnez « CSV ». Enregistrez le fichier sous « AP_Payments.csv ».
Facultatif : Audit Trail pour l'historique de Workflow Les vues personnalisées standard dans Intacct ne montrent que l'état actuel et la date de dernière modification. Pour capturer des événements historiques comme « Facture refusée » ou des horodatages d'approbation spécifiques, vous devez exporter l'historique d'audit. Naviguez vers Rapports > Configuration > Audit Trail. Configurez l'audit trail pour qu'il examine l'objet « AP Bill ». Sélectionnez les types d'action : Ajouter, Modifier, Approuver, Refuser. Exportez ce rapport sous « AP_Audit_History.csv ».
Exécuter le script de transformation Utilisez le script Python fourni dans la section Requête pour fusionner ces fichiers. Le script ingère les fichiers « AP_Bills.csv », « AP_Payments.csv » et, facultativement, « AP_Audit_History.csv » pour générer la structure de Journal d'événements requise.
Vérifier et formater Ouvrez le fichier « Event_Log_Output.csv » résultant. Assurez-vous que « (EventTime) » est au format ISO 8601 (AAAA-MM-JJ HH:MM:SS). Vérifiez que « InvoiceNumber » est renseigné pour toutes les lignes. Téléchargez le fichier CSV final sur ProcessMind.
Configuration
- Configuration de la vue: Assurez-vous que le « Nombre d'enregistrements » dans les paramètres de la vue est suffisamment élevé pour capturer toutes les transactions, ou utilisez la fonction d'exportation « Page suivante » si des limites s'appliquent.
- Gestion des dates: Intacct exporte les dates au format local de l'utilisateur (par exemple, MM/JJ/AAAA). Le script de transformation suppose un format US standard; ajustez le script si votre profil utilisateur utilise JJ/MM/AAAA.
- Autorisations de champ: Assurez-vous que l'utilisateur créant la vue dispose des autorisations 'List' et 'View' sur les factures fournisseurs et les paiements comptabilisés.
- Granularité historique: Sans l'exportation de l'Audit Trail, les activités comme « Facture approuvée » se baseront sur le proxy « Date de comptabilisation », et « Facture mise à jour » ne reflétera que l'heure de la dernière modificationication.
- Filtrage: Appliquez un filtre sur « Date de création » >= [Date de début] pour limiter le volume de données. Évitez de filtrer par « Statut » à moins que vous ne vouliez spécifiquement exclure les enregistrements annulés ou historiques.
a Exemple de requête config
import pandas as pd
import numpy as np
from datetime import datetime
# CONFIGURATION
# Update these filenames to match your exported files
FILE_BILLS = 'AP_Bills.csv'
FILE_PAYMENTS = 'AP_Payments.csv'
# Set to None if Audit History is unavailable
FILE_AUDIT = 'AP_Audit_History.csv'
# COLUMNS MAPPING (Adjust based on your View column headers)
COL_BILL_NUM = 'Invoice Number'
COL_VENDOR = 'Vendor Name'
COL_AMOUNT = 'Total Amount'
COL_CREATED = 'Date Created'
COL_POSTED = 'Date Posted'
COL_DUE = 'Due Date'
COL_STATE = 'State'
COL_PO = 'PO Number'
COL_HOLD = 'On Hold'
COL_PAY_DATE = 'Payment Date'
COL_PAY_REF = 'Check/Payment Number'
COL_PAY_BILL_REF = 'Bill Number'
COL_PAY_STATE = 'State'
# OUTPUT STRUCTURE
event_log_columns = [
'InvoiceNumber', 'ActivityName', 'EventTime', 'SourceSystem',
'LastDataUpdate', 'VendorName', 'InvoiceAmount', 'PurchaseOrderNumber',
'InvoiceDate', 'DueDate', 'InvoiceStatus'
]
def run_extraction():
events = []
current_time = datetime.now().isoformat()
# 1. LOAD BILLS
try:
df_bills = pd.read_csv(FILE_BILLS)
# Clean formatting (remove currency symbols if present)
df_bills[COL_AMOUNT] = df_bills[COL_AMOUNT].replace('[\\$,]', '', regex=True).astype(float)
except FileNotFoundError:
print('Bills file not found.')
return
# 2. LOAD PAYMENTS
try:
df_pay = pd.read_csv(FILE_PAYMENTS)
except FileNotFoundError:
print('Payments file not found.')
df_pay = pd.DataFrame()
# PROCESSING BILLS
for index, row in df_bills.iterrows():
invoice_num = str(row[COL_BILL_NUM])
vendor = row[COL_VENDOR]
amount = row[COL_AMOUNT]
po_num = str(row[COL_PO]) if pd.notna(row[COL_PO]) else None
due_date = row[COL_DUE]
status = row[COL_STATE]
# Common attributes for this invoice
base_attr = {
'InvoiceNumber': invoice_num,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'VendorName': vendor,
'InvoiceAmount': amount,
'PurchaseOrderNumber': po_num,
'DueDate': due_date,
'InvoiceStatus': status
}
# Activity: Invoice Draft Created
if pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Draft Created',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Matched to PO
if po_num and pd.notna(row[COL_CREATED]):
events.append({**base_attr,
'ActivityName': 'Invoice Matched to PO',
'EventTime': row[COL_CREATED],
'InvoiceDate': row[COL_CREATED]})
# Activity: Invoice Posted
if pd.notna(row[COL_POSTED]):
events.append({**base_attr,
'ActivityName': 'Invoice Posted',
'EventTime': row[COL_POSTED]})
# In standard views, Posted often implies Submission and Approval if no audit trail
# We generate proxy events if Audit Trail is missing
if not FILE_AUDIT:
events.append({**base_attr,
'ActivityName': 'Invoice Submitted',
'EventTime': row[COL_POSTED]})
events.append({**base_attr,
'ActivityName': 'Invoice Approved',
'EventTime': row[COL_POSTED]})
# Activity: Invoice Placed on Hold
if str(row[COL_HOLD]).lower() in ['true', 'yes', 'on hold']:
# Time is approximate (Last Modified) as View doesn't track hold time
events.append({**base_attr,
'ActivityName': 'Invoice Placed on Hold',
'EventTime': row.get('Date Modified', row[COL_CREATED])})
# PROCESSING PAYMENTS
# Intacct payment export might list multiple bills per check line or require join logic
# Assuming direct link via Bill Number
if not df_pay.empty:
for index, row in df_pay.iterrows():
bill_ref = str(row[COL_PAY_BILL_REF])
# Only process if this payment links to a bill we know
# (In a real scenario, merge on Bill Number)
pay_attr = {
'InvoiceNumber': bill_ref,
'SourceSystem': 'Sage Intacct',
'LastDataUpdate': current_time,
'ActivityName': 'Payment Generated',
'EventTime': row[COL_PAY_DATE]
}
events.append(pay_attr)
if str(row[COL_PAY_STATE]).lower() == 'void':
events.append({**pay_attr, 'ActivityName': 'Payment Voided', 'EventTime': row[COL_PAY_DATE]})
if 'Date Reconciled' in row and pd.notna(row['Date Reconciled']):
events.append({**pay_attr, 'ActivityName': 'Payment Reconciled', 'EventTime': row['Date Reconciled']})
# 3. OUTPUT
df_events = pd.DataFrame(events)
# Ensure dates are ISO format
df_events['EventTime'] = pd.to_datetime(df_events['EventTime']).dt.strftime('%Y-%m-%d %H:%M:%S')
# Final Select
df_final = df_events[event_log_columns]
df_final.to_csv('Event_Log_Output.csv', index=False)
print(f'Successfully exported {len(df_final)} events.')
if __name__ == '__main__':
run_extraction() Étapes
Établir une session de services web: Authentifiez-vous au point d'accès des services web 3.0 de Sage Intacct en utilisant votre Sender ID, mot de passe, Company ID, User ID et mot de passe utilisateur pour obtenir un ID de session.
Identifier les objets requis: Vous devez extraire des données de trois objets principaux pour capturer le cycle de vie complet :
APBILL(En-têtes de facture),APPYMTDETAIL(Détails de paiement liés aux factures) etAUDITTRAIL(Historique de Workflow).Extraire les données d'en-tête de facture: Utilisez la méthode
readByQuerysur l'objetAPBILL. Sélectionnez les champsRECORDNO,DOCNUMBER,WHENCREATED,WHENPOSTED,STATE,VENDORNAME,TOTALENTERED,PONUMBER,DUE_DATE. Filtrez par plage de dates en utilisantWHENCREATED.Extraire les données de paiement: Utilisez
readByQuerysurAPPYMTDETAIL. SélectionnezRECORDNO,WHENCREATED,PAYMENTDATE,TRX_AMOUNT,DOCNUMBER(Réf. paiement) etBILLRECORDNO(Clé étrangère vers APBILL). Assurez-vous de récupérer le statut ou la dateCLEAREDsi disponible pour le rapprochement.Extraire l'historique d'audit: Utilisez
readByQuerysur l'objetAUDITTRAIL. Filtrez oùOBJECTTYPE= 'APBILL'. Ceci est indispensable pour capturer les événements d'approbation, de refus, de retenue et d'annulation qui ne sont pas conservés comme horodatages sur la table d'en-tête. SélectionnezOBJECTKEY,LOGTYPE,MESSAGE,WHENDOCCURREDetUSERID.Stocker les données: Chargez les réponses XML/JSON de ces trois appels API dans une base de données de staging (SQL Server, Snowflake, Postgres, etc.). L'API ne prend pas en charge les jointures ou unions complexes en un seul appel, la transformation doit donc avoir lieu après l'extraction.
Exécuter le script de transformation: Exécutez le script SQL fourni dans la section Requête sur vos tables de staging. Ce script unifie les données d'en-tête statiques avec le journal d'audit transactionnel pour créer le journal d'événements unique.
Valider les types d'activité: Vérifiez la sortie pour les mots-clés spécifiques trouvés dans les messages de l'Audit Trail (comme Approved, Declined) et assurez-vous que votre logique de correspondance de chaînes couvre la formulation spécifique de votre configuration Intacct.
Formater les dates: Assurez-vous que la colonne
(EventTime)est formatée selon les normes ISO 8601 (AAAA-MM-JJ HH:MM:SS) lors de l'exportation finale.Exporter le journal d'événements: Exportez le résultat de la requête SQL sous forme de fichier CSV ou Parquet pour le téléchargement vers ProcessMind.
Configuration
- API Endpoint: https://api.intacct.com/ia/xml/xmlgw.phtml
- Méthode:
readByQuery(Web Services 3.0) - Taille de la page: Définissez
pagesizeà 1000 (maximum recommandé) pour minimiser la surcharge HTTP. Implémentez une boucle utilisant leresultIdpour récupérer les pages suivantes. - Filtrage par date: Utilisez les opérateurs SQL standards (>=, <, AND) dans votre chaîne de requête pour les colonnes
WHENCREATEDafin de limiter la fenêtre d'extraction (ex: 365 derniers jours). - Autorisations: L'utilisateur d'extraction nécessite les autorisations 'List' et 'View' sur les Comptes fournisseurs et l'autorisation 'Audit Trail' (souvent trouvée dans les paramètres de Platform Services ou Company Admin).
- Liaison d'objets:
APBILL.RECORDNOest la clé primaire utilisée pour joindre avecAPPYMTDETAIL.BILLRECORDNOetAUDITTRAIL.OBJECTKEY.
a Exemple de requête sql
/*
PROCESSMIND TRANSFORMATION SCRIPT
Prerequisite: Data from APBILL, APPYMTDETAIL, and AUDITTRAIL
must be extracted via API and staged in tables with those names.
*/
/* 1. Invoice Draft Created */
SELECT
H.DOCNUMBER AS InvoiceNumber,
'Invoice Draft Created' AS ActivityName,
H.WHENCREATED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME AS VendorName,
H.TOTALENTERED AS InvoiceAmount,
H.PONUMBER AS PurchaseOrderNumber,
H.WHENCREATED AS InvoiceDate,
H.DUE_DATE AS DueDate,
NULL AS Department,
H.CREATEDBY AS CreatedBy,
H.STATE AS InvoiceStatus,
NULL AS PaymentDate
FROM APBILL H
UNION ALL
/* 2. Invoice Matched to PO (Derived from existence of PO Number at creation) */
SELECT
H.DOCNUMBER,
'Invoice Matched to PO',
H.WHENCREATED, -- Occurs effectively at creation if PO links
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.PONUMBER IS NOT NULL AND H.PONUMBER <> ''
UNION ALL
/* 3. Invoice Posted (Header Timestamp) */
SELECT
H.DOCNUMBER,
'Invoice Posted',
H.WHENPOSTED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
H.CREATEDBY,
H.STATE,
NULL
FROM APBILL H
WHERE H.WHENPOSTED IS NOT NULL
UNION ALL
/* 4. Payment Generated */
SELECT
H.DOCNUMBER,
'Payment Generated',
P.WHENCREATED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
UNION ALL
/* 5. Payment Reconciled */
SELECT
H.DOCNUMBER,
'Payment Reconciled',
P.WHENCLEARED,
'Sage Intacct',
GETDATE(),
H.VENDORNAME,
P.TRX_AMOUNT,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
P.CREATEDBY,
H.STATE,
P.PAYMENTDATE
FROM APPYMTDETAIL P
JOIN APBILL H ON P.BILLRECORDNO = H.RECORDNO
WHERE P.WHENCLEARED IS NOT NULL
UNION ALL
/* 6. Workflow Activities from Audit Trail */
/* Covers: Updated, Submitted, Approved, Declined, Hold, Released, Voided, Selected */
SELECT
H.DOCNUMBER,
CASE
WHEN A.MESSAGE LIKE '%Submitted%' THEN 'Invoice Submitted'
WHEN A.MESSAGE LIKE '%Approved%' THEN 'Invoice Approved'
WHEN A.MESSAGE LIKE '%Declined%' THEN 'Invoice Declined'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Add' THEN 'Invoice Placed on Hold'
WHEN A.MESSAGE LIKE '%Hold%' AND A.LOGTYPE = 'Remove' THEN 'Invoice Released from Hold'
WHEN A.MESSAGE LIKE '%Voided%' THEN 'Payment Voided'
WHEN A.MESSAGE LIKE '%Selected for payment%' THEN 'Invoice Selected for Payment'
WHEN A.MESSAGE LIKE '%Modified%' THEN 'Invoice Updated'
ELSE 'System Activity'
END AS ActivityName,
A.WHENDOCCURRED AS EventTime,
'Sage Intacct' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.VENDORNAME,
H.TOTALENTERED,
H.PONUMBER,
H.WHENCREATED,
H.DUE_DATE,
NULL,
A.USERID AS CreatedBy,
H.STATE,
NULL
FROM AUDITTRAIL A
JOIN APBILL H ON A.OBJECTKEY = CAST(H.RECORDNO AS VARCHAR(50))
WHERE A.OBJECTTYPE = 'APBILL'
AND (
A.MESSAGE LIKE '%Submitted%'
OR A.MESSAGE LIKE '%Approved%'
OR A.MESSAGE LIKE '%Declined%'
OR A.MESSAGE LIKE '%Hold%'
OR A.MESSAGE LIKE '%Voided%'
OR A.MESSAGE LIKE '%Selected for payment%'
OR A.MESSAGE LIKE '%Modified%'
)
/* Exclude creation updates to avoid duplication with Invoice Draft Created */
AND NOT (A.MESSAGE LIKE '%Modified%' AND ABS(DATEDIFF(second, A.WHENDOCCURRED, H.WHENCREATED)) < 60)