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 du traitement des paiements des comptes fournisseurs
| Nom | Description | ||
|---|---|---|---|
| Nom de l'activité ActivityName | L'action ou l'événement spécifique survenant dans le cycle de vie de la facture. | ||
| Description 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 essentiel pour reconstituer le flux de processus et visualiser la séquence des événements dans le dashboard 'Distribution du temps de cycle de bout en bout'. Pourquoi c'est important Définit les étapes de la cartographie des processus et est obligatoire pour toute analyse de Process Mining. Où obtenir Journaux d'Audit Trail 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. | ||
| Description 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, permettant 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 au sein de l'objet Facture fournisseur (AP Bill). Pourquoi c'est important C'est la clé fondamentale pour lier toutes les activités du processus à une seule instance de cas. Où obtenir Objet Facture fournisseur Sage Intacct, champ DOCNUMBER ou RECORDNO Exemples INV-2023-001988722-AFEB-23-991 | |||
| Timestamp de l'événement EventTime | La date et l'heure spécifiques auxquelles une activité a eu lieu. | ||
| Description Cet attribut enregistre le moment exact où un événement a eu lieu. Il constitue la base de 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 goulots d'étranglement dans le dashboard 'Performance du workflow d'approbation'. Pourquoi c'est important Requis pour séquencer les événements et calculer les durées entre les étapes du processus. Où obtenir 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 | |||
| Dernière mise à jour des données LastDataUpdate | L'horodatage de la dernière extraction ou actualisation de l'enregistrement. | ||
| Description Cet attribut indique la dernière synchronisation des données avec la plateforme de Process Mining. Il aide les utilisateurs à comprendre l'actualité 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 c'est important Champ technique requis pour les chargements incrémentiels et les vérifications de la fraîcheur des données. Où obtenir 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. | ||
| Description 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 c'est important Assure la traçabilité de la lignée des données, en particulier dans les environnements multi-systèmes. Où obtenir 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. | ||
| Description 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 c'est important Permet l'analyse des performances des ressources et identifie les opportunités de formation. Où obtenir Objet Facture fournisseur Sage Intacct, champ CREATEDBY Exemples jsmithap_automation_botmdoe | |||
| Date d'échéance DueDate | La date limite contractuelle de paiement. | ||
| Description Cet attribut indique la date à laquelle le paiement doit être effectué pour éviter les pénalités. C'est le dénominateur pour l'ICP '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 c'est important Référence pour déterminer la performance à temps et le respect des SLA. Où obtenir 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. | ||
| Description 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 de bout en bout'. 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 c'est important Le point de départ pour l'analyse du vieillissement et les calculs des conditions de paiement. Où obtenir Objet Facture fournisseur Sage Intacct, champ WHENTOCREATE ou DATECREATED Exemples 2023-10-012023-10-05 | |||
| Date de paiement PaymentDate | La date à laquelle le paiement a été exécuté. | ||
| Description 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 l'ICP 'Pourcentage de paiements à temps'. Pourquoi c'est important Marque l'achèvement du cycle de processus principal. Où obtenir 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. | ||
| Description Cet attribut catégorise la facture par centre de coûts ou fonction commerciale. Il soutient le dashboard 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 c'est important Permet un approfondissement organisationnel et une analyse des causes profondes. Où obtenir 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. | ||
| Description Cet attribut représente l'engagement financier total pour le cas spécifique. Il est utilisé dans le dashboard '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 c'est important Essentiel pour l'analyse d'impact financier et l'évaluation des risques. Où obtenir 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. | ||
| Description Cet attribut identifie l'entité externe à qui le paiement est dû. C'est une dimension primaire pour le dashboard '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 c'est important Essentiel pour la segmentation de l'analyse par performance et comportement des fournisseurs. Où obtenir 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é. | ||
| Description Cet attribut lie la facture à un document d'approvisionnement en amont. C'est le principal moteur du dashboard 'Efficacité du rapprochement à trois voies' 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 c'est important Distingue les factures adossées à un bon de commande (PO) des factures sans bon de commande pour l'analyse de conformité. Où obtenir 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. | ||
| Description 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 dashboard 'Distribution du temps de cycle de bout en bout'. Pourquoi c'est important Identifie rapidement l'état du cas. Où obtenir 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. | ||
| Description 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 vital pour le dashboard d'analyse des escomptes pour paiement anticipé afin d'identifier les factures éligibles à des économies qui n'ont pas été réalisées. Pourquoi c'est important Contexte pour l'analyse des stratégies de flux de trésorerie et des opportunités d'escompte manquées. Où obtenir Objet Facture fournisseur Sage Intacct, champ TERMNAME Exemples Net 30Dû à 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. | ||
| Description Cet attribut identifie si la facture a suivi les procédures d'approvisionnement standard. C'est le filtre principal pour l'ICP 'Taux de conformité des bons de commande' et aide à distinguer les dépenses ad hoc des dépenses gérées. Pourquoi c'est important Différenciateur clé pour l'analyse des chemins de processus. Où obtenir 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. | ||
| Description Cet attribut booléen est calculé en comparant la date de paiement à la date d'échéance. Il sert de filtre direct pour l'ICP 'Pourcentage de paiements à temps' et aide à isoler les cas problématiques dans le dashboard 'Prévisibilité des paiements fournisseurs'. Pourquoi c'est important Simplifie le filtrage des violations de SLA. Où obtenir Calculé : DatePaiement > DateÉchéance Exemples truefaux | |||
| Statut de retenue HoldStatus | Indique si la facture est actuellement en attente de paiement. | ||
| Description Cet attribut signale les cas qui sont suspendus du traitement des paiements. Il soutient le dashboard 'Moniteur d'impact des blocages de paiement' en identifiant les cas bloqués. Pourquoi c'est important Identifie les goulots d'étranglement immédiats nécessitant une intervention. Où obtenir Objet Facture fournisseur Sage Intacct, champ ONHOLD Exemples truefaux | |||
| Temps de cycle (Jours) CycleTimeDays | Le nombre de jours entre la réception de la facture et le paiement. | ||
| Description Cette métrique quantifie la vitesse du processus pour chaque cas. Elle alimente directement l'ICP 'Temps de cycle moyen des factures' et permet une analyse par histogramme dans le dashboard 'Distribution du temps de cycle de bout en bout'. Pourquoi c'est important Mesure de performance standard pour l'efficacité. Où obtenir Calculé : Jours entre DateFacture et DatePaiement Exemples 15.530.05.2 | |||
| Unité commerciale BusinessUnit | L'entité juridique ou le lieu associé à la facture. | ||
| Description Cet attribut différencie les différentes filiales ou emplacements de bureaux. Il est crucial 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 au sein de l'organisation. Pourquoi c'est important Essentiel pour les benchmarks multi-entités. Où obtenir Objet Facture fournisseur Sage Intacct, champ LOCATIONID ou ENTITY Exemples USA-HQEMEA-LondresAPAC-Singapour | |||
Activités de traitement des paiements des comptes fournisseurs
| Activité | Description | ||
|---|---|---|---|
| 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 c'est 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. Où obtenir 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 Enregistré 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 c'est important Essentiel pour le KPI « Durée moyenne d'approbation » et l'identification des goulots d'étranglement dans la validation de la direction. Où obtenir Interrogez le journal 'Historique des approbations' associé à la facture fournisseur pour trouver les actions 'Approuvé'. Capture Enregistré 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 c'est important Indique que la dette financière est officiellement reconnue dans les livres comptables. Où obtenir Interrogez le journal d'audit d'APBILL pour le changement d'état à 'Comptabilisé'. Capture Enregistré 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 à trois voies. | ||
| Pourquoi c'est important Essentiel 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. Où obtenir 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 c'est important Essentiel pour segmenter la durée de 'Saisie des données' de la durée d''Approbation' dans l'analyse du temps de cycle. Où obtenir 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 c'est important L'horodatage principal pour le 'Temps de cycle moyen des factures' et le 'Pourcentage de paiements à temps'. Où obtenir Identifier la création d'un enregistrement APPYMT lié à l'APBILL. Utilisez la date de création de l'objet paiement. Capture Enregistré 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 c'est important Marque la fin d'une période de goulot d'étranglement et la reprise du flux de processus standard. Où obtenir 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 c'est important Clé pour le calcul du « Taux de traitement sans contact » et l'identification des boucles de correction manuelle de données inefficaces. Où obtenir Interrogez l'historique d'audit d'APBILL pour les actions de 'Mise à jour' effectuées par un utilisateur avant la comptabilisation. Capture Enregistré 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 c'est important Impacte directement le « Temps de résolution des blocages de paiement » et visualise les retards dans la chaîne de paiement. Où obtenir 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 c'est important Met en évidence les points de friction dans le workflow et contribue aux métriques de retravail. Où obtenir Interrogez le journal 'Historique des approbations' associé à la facture fournisseur pour les actions 'Refusé' ou 'Rejeté'. Capture Enregistré 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 c'est 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. Où obtenir 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 c'est important Identifier les défaillances graves en aval du processus où les paiements sont générés mais annulés. Où obtenir Interrogez l'objet APPYMT pour le statut 'Annulé' ou 'Invalidé' et l'horodatage associé. Capture Enregistré 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 c'est important Indique le 'Temps de cycle de bout en bout' du point de vue de la trésorerie, confirmant que les fonds ont effectivement quitté le compte. Où obtenir 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 document), 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, Description, 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 Event Log 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 modification.
- 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 essentiel 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
EventTimeest 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)