Uw data template voor de verwerking van crediteurenbetalingen
Uw data template voor de verwerking van crediteurenbetalingen
- Essentiële datavelden voor Sage Intacct
- Gestandaardiseerde procesmijlpalen
- Specifieke extractie-instructies
Attributen van crediteurenbetalingsverwerking
| Naam | Omschrijving | ||
|---|---|---|---|
| Activiteitsnaam ActivityName | De specifieke actie of het event dat plaatsvindt in de levenscyclus van de factuur. | ||
| Omschrijving Dit attribute legt de naam vast van de uitgevoerde stap, zoals 'Factuur Aangemaakt', 'Factuur Goedgekeurd' of 'Betaling Geboekt'. Het is essentieel voor het reconstrueren van de processtroom en het visualiseren van de opeenvolging van events in het End-to-End Cycle Time Distribution dashboard. Het belang Definieert de stappen in de process map en is verplicht voor elke process mining analyse. Vindplaats Audit trail logs of systeemtransactiegeschiedenistabellen Voorbeelden Factuurconcept aangemaaktFactuur GoedgekeurdBetaling gegenereerd | |||
| Factuurnummer InvoiceNumber | De unieke identificator voor het leveranciersfactuurdocument. | ||
| Omschrijving Het factuurnummer dient als de definitieve case-identificator voor dit proces. Het groepeert op unieke wijze alle events die betrekking hebben op één leveranciersfactuur, waardoor een uitgebreide analyse mogelijk is van het traject van ontvangst tot afwikkeling. In Sage Intacct komt dit gewoonlijk overeen met het Document Number of Record Number binnen het AP Bill object. Het belang Het is de fundamentele sleutel voor het koppelen van alle procesactiviteiten aan één enkele case-instantie. Vindplaats Sage Intacct AP Bill object, veld DOCNUMBER of RECORDNO Voorbeelden INV-2023-001988722-AFEB-23-991 | |||
| Gebeurtenistijdstempel EventTime | De specifieke datum en tijd waarop een activiteit plaatsvond. | ||
| Omschrijving Dit attribute registreert het exacte moment waarop het event plaatsvond. Het is de basis voor alle tijdsgebaseerde berekeningen, waaronder 'Gemiddelde Factuur Doorlooptijd' en 'Gemiddelde Goedkeuringsduur'. Nauwkeurige timestamps zijn essentieel voor het identificeren van knelpunten in het Approval Workflow Performance dashboard. Het belang Vereist om events te sequensen en de doorlooptijden tussen processtappen te berekenen. Vindplaats Timestamps voor het aanmaken of wijzigen van transacties in de brontabellen. Voorbeelden 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Bronsysteem SourceSystem | De naam van het systeem waar het event is ontstaan. | ||
| Omschrijving Dit attribute identificeert de herkomst van de data, wat voor dit proces doorgaans 'Sage Intacct' is. Als facturen echter worden ingelezen vanuit OCR-tools of externe inkoopplatforms, helpt dit veld databronnen te onderscheiden in het Compliance en Risico-overzicht. Het belang Zorgt voor traceerbaarheid van datalineage, vooral in multi-systeemomgevingen. Vindplaats Hardcoded tijdens extractie of afgeleid uit verbindingsinstellingen Voorbeelden Sage IntacctBill.comExpensify | |||
| Laatste data-update LastDataUpdate | De timestamp van de laatste extractie of verversing van de record. | ||
| Omschrijving Dit attribute houdt bij wanneer de data voor het laatst is gesynchroniseerd met het process mining platform. Het helpt gebruikers de actualiteit van de data in dashboards zoals Payment Batch Optimization te begrijpen en zorgt ervoor dat de analyse de meest actuele status van het crediteurengrootboek weerspiegelt. Het belang Technisch veld vereist voor incrementele ladingen en controles op de recentheid van data. Vindplaats Systeemtijd op het moment van data-extractie Voorbeelden 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| Aangemaakt door gebruiker CreatedBy | De gebruikers-ID van de persoon die de factuur heeft ingevoerd. | ||
| Omschrijving Dit attribute identificeert de initiator van de procescase. Het wordt gebruikt in de Manual Intervention en Touchpoints analysis om trainingsbehoeften te identificeren voor specifieke gebruikers die frequent gegevenscorrectie nodig hebben of duplicaten genereren. Het belang Maakt analyse van resourceprestaties mogelijk en identificeert opleidingskansen. Vindplaats Sage Intacct AP Bill object, veld CREATEDBY Voorbeelden jsmithap_automation_botmdoe | |||
| Afdeling Department | De interne afdeling die verantwoordelijk is voor de uitgave. | ||
| Omschrijving Dit attribute categoriseert de factuur op kostenplaats of bedrijfsfunctie. Het ondersteunt het Process Variation Analysis dashboard door te benadrukken welke afdelingen kampen met goedkeuringsvertragingen of hoge herwerkingspercentages in vergelijking met het organisatiegemiddelde. Het belang Maakt organisatiebrede drill-down en root cause-analyse mogelijk. Vindplaats Sage Intacct AP Bill object, veld DEPTID of DEPTNAME Voorbeelden IT-dienstenMarketingOperationele taken | |||
| Betaaldatum PaymentDate | De datum waarop de betaling is uitgevoerd. | ||
| Omschrijving Dit attribute registreert de uiteindelijke timestamp van de financiële afwikkeling. Het wordt gebruikt om de doorlooptijd te berekenen en wordt vergeleken met de vervaldatum voor de On-Time Payment Percentage KPI. Het belang Markeert de voltooiing van de kernprocescyclus. Vindplaats Sage Intacct AP Payment Detail, veld WHENPAID Voorbeelden 2023-11-052023-11-10 | |||
| Factuurbedrag InvoiceAmount | Het totale factuurbedrag. | ||
| Omschrijving Dit attribute vertegenwoordigt de totale financiële aansprakelijkheid voor de specifieke case. Het wordt gebruikt in het Duplicate Submission Detection dashboard om facturen met identieke bedragen en leveranciers-ID's te identificeren. Het maakt ook filteranalyse mogelijk op hoogwaardige versus laagwaardige transacties. Het belang Essentieel voor financiële impactanalyse en risicoscoring. Vindplaats Sage Intacct AP Bill object, veld TOTALENTERED of TOTALDUE Voorbeelden 1500.00250.5010000.00 | |||
| Factuurdatum InvoiceDate | De datum waarop de factuur door de leverancier is uitgereikt. | ||
| Omschrijving Dit attribute weerspiegelt de documentdatum die op de fysieke factuur staat vermeld. Het wordt gebruikt in combinatie met de Betalingsdatum om de End-to-End Cycle Time te berekenen. Aanzienlijke verschillen tussen de Factuurdatum en de invoerdatum kunnen duiden op vertragingen in de postkamer of bij het scannen. Het belang Het startpunt voor verouderingsanalyse en de berekening van betalingstermijnen. Vindplaats Sage Intacct AP Bill object, veld WHENTOCREATE of DATECREATED Voorbeelden 2023-10-012023-10-05 | |||
| Factuurstatus InvoiceStatus | De huidige levenscyclusstatus van de factuur in het systeem. | ||
| Omschrijving Dit attribute weerspiegelt de huidige systeemstatus (bijv. Geboekt, Betaald, Concept). Het helpt de dataset te filteren op actieve versus voltooide cases in het End-to-End Cycle Time Distribution dashboard. Het belang Identificeert snel de status van de case. Vindplaats Sage Intacct AP Bill object, veld STATE Voorbeelden GeboektBetaaldConceptGedeeltelijk betaald | |||
| Inkoopordernummer PurchaseOrderNumber | Het referentienummer van de gerelateerde inkooporder. | ||
| Omschrijving Dit attribute koppelt de factuur aan een stroomopwaarts inkoopdocument. Het is de belangrijkste drijfveer voor het Three Way Match Efficiency dashboard en de PO Compliance en Non PO Spend analysis. Cases met een nulwaarde hier duiden op non-PO uitgaven. Het belang Maakt onderscheid tussen PO-gedekte en niet-PO-facturen voor compliance-analyse. Vindplaats Sage Intacct AP Bill object, veld PONUMBER of gerelateerde documentlink Voorbeelden PO-9912PO-1002null | |||
| Naam Leverancier VendorName | De naam van de leverancier of dienstverlener die de factuur heeft uitgeschreven. | ||
| Omschrijving Dit attribute identificeert de externe entiteit aan wie betaling verschuldigd is. Het is een primaire dimensie voor het Vendor Payment Predictability dashboard, waardoor analisten prestatie metrics per leverancier kunnen groeperen en hoogrisico leveranciersrelaties of frequente handmatige contactmomenten kunnen identificeren. Het belang Cruciaal voor het segmenteren van analyses op basis van leveranciersprestaties en -gedrag. Vindplaats Sage Intacct AP Bill object, veld VENDORNAME Voorbeelden Acme CorpGlobal Services IncOffice Depot | |||
| Vervaldatum DueDate | De contractuele uiterste betaaldatum. | ||
| Omschrijving Dit attribute geeft aan wanneer de betaling moet worden gedaan om boetes te voorkomen. Het is de noemer voor de On-Time Payment Percentage KPI. Het analyseren van betalingen die na deze datum zijn uitgevoerd, onthult compliance-lacunes en potentiële schade aan leveranciersrelaties. Het belang Basislijn voor het bepalen van tijdige prestaties en SLA-naleving. Vindplaats Sage Intacct AP Bill object, veld WHENDUE Voorbeelden 2023-11-012023-11-15 | |||
| Bedrijfseenheid BusinessUnit | De juridische entiteit of locatie die aan de factuur is gekoppeld. | ||
| Omschrijving Dit attribute onderscheidt verschillende dochterondernemingen of kantoorlocaties. Het is cruciaal voor het Compliance en Risico-overzicht om de procesnaleving te vergelijken tussen verschillende geografische of juridische entiteiten binnen de organisatie. Het belang Essentieel voor multi-entiteitsbenchmarks. Vindplaats Sage Intacct AP Bill object, veld LOCATIONID of ENTITY Voorbeelden VS-HoofdkantoorEMEA-LondenAPAC-Singapore | |||
| Betalingstermijnen PaymentTerms | De overeengekomen voorwaarden voor betalingstermijnen en kortingen. | ||
| Omschrijving Dit attribute beschrijft de regel die wordt gebruikt om de vervaldatum en kortingsdatum te berekenen (bijv. Net 30, 2/10 Net 30). Het is van vitaal belang voor het Early Payment Discount Analysis dashboard om facturen te identificeren die in aanmerking kwamen voor gemiste besparingen. Het belang Context voor het analyseren van kasstroomstrategieën en gemiste kortingskansen. Vindplaats Sage Intacct AP Bill object, veld TERMNAME Voorbeelden Netto 30Verschuldigd bij ontvangst2/10 netto 30 | |||
| Cyclustijd (Dagen) CycleTimeDays | Het aantal dagen vanaf ontvangst van de factuur tot betaling. | ||
| Omschrijving Deze metric kwantificeert de snelheid van het proces voor elke case. Het voedt direct de Average Invoice Cycle Time KPI en maakt histogramanalyse mogelijk in het End-to-End Cycle Time Distribution dashboard. Het belang Standaard prestatiestatistiek voor efficiëntie. Vindplaats Berekend: Dagen tussen factuurdatum en betaaldatum Voorbeelden 15.530.05.2 | |||
| Hold Status HoldStatus | Geeft aan of de factuur momenteel in de wacht staat voor betaling. | ||
| Omschrijving Dit attribute markeert cases die zijn opgeschort van betalingsverwerking. Het ondersteunt het Payment Block Impact Monitor dashboard door cases te identificeren die vastzitten in een geblokkeerde status. Het belang Identificeert directe knelpunten die ingrijpen vereisen. Vindplaats Sage Intacct AP Bill object, veld ONHOLD Voorbeelden truefalse | |||
| Is door inkooporder gedekt IsPOBacked | Vlag die aangeeft of de factuur is gekoppeld aan een inkooporder. | ||
| Omschrijving Dit attribute identificeert of de factuur de standaard inkoopprocedures heeft gevolgd. Het is het primaire filter voor de Purchase Order Compliance Rate KPI en helpt ad-hoc uitgaven te scheiden van beheerde uitgaven. Het belang Belangrijke differentiator voor procespadanalyse. Vindplaats Berekend: Inkoopordernummer is niet null Voorbeelden truefalse | |||
| Is te laat betaald IsPaidLate | Vlag die aangeeft of de betaaldatum de vervaldatum heeft overschreden. | ||
| Omschrijving Dit booleaanse attribute wordt berekend door de Betalingsdatum te vergelijken met de vervaldatum. Het dient als een direct filter voor de On-Time Payment Percentage KPI en helpt probleemgevallen te isoleren in het Vendor Payment Predictability dashboard. Het belang Vereenvoudigt het filteren op SLA-overtredingen. Vindplaats Berekend: Betaaldatum > Vervaldatum Voorbeelden truefalse | |||
Activiteiten van crediteurenbetalingsverwerking
| Activiteit | Omschrijving | ||
|---|---|---|---|
| Betaling gegenereerd | De aanmaak van de Betalingsrecord (Cheque, ACH, EFT) gekoppeld aan de factuur. Dit is het moment waarop de overboeking van de gelden in het systeem wordt geïnitieerd. | ||
| Het belang De primaire timestamp voor 'Gemiddelde Factuur Doorlooptijd' en 'Percentage Tijdige Betalingen'. Vindplaats Identificeer de aanmaak van een APPYMT record gekoppeld aan de APBILL. Gebruik de aanmaakdatum van het betalingsobject. Vastleggen Gelogd wanneer APPYMT record wordt aangemaakt Gebeurtenistype explicit | |||
| Factuur geboekt | Het punt waarop de factuur wordt geboekt in het grootboek. In systemen zonder goedkeuringsworkflows kan dit gelijktijdig met de indiening plaatsvinden. | ||
| Het belang Geeft aan dat de financiële verplichting officieel is erkend in de boekhouding. Vindplaats Query de audit trail van APBILL voor de statuswijziging naar 'Posted'. Vastleggen Gelogd wanneer transactie wordt geboekt in het grootboek Gebeurtenistype explicit | |||
| Factuur gematcht met inkooporder | Identificeert wanneer een leveranciersfactuur wordt aangemaakt door een inkooporder of ontvangstbewijs te converteren of te koppelen. Deze activiteit valideert de efficiëntie van de driewegmatching. | ||
| Het belang Cruciaal voor de KPI 'First-Pass Match Rate' en het bepalen van PO-compliance versus non-PO-uitgaven. Vindplaats Controleer het APBILL object op een niet-null waarde in de velden 'createdfrom' of 'source_id' die een koppeling met een inkooptransactie aangeven. Vastleggen Vergelijk Record ID met Bron Transactie ID Gebeurtenistype inferred | |||
| Factuur Goedgekeurd | Een aparte goedkeuringsactie vastgelegd binnen de aangewezen goedkeuringsworkflow. Dit betekent dat een gebruiker met voldoende autoriteit de factuur voor betaling heeft geautoriseerd. | ||
| Het belang Cruciaal voor de KPI 'Gemiddelde Goedkeuringsduur' en het identificeren van knelpunten bij managementgoedkeuring. Vindplaats Raadpleeg de 'Examine Approval History' log behorende bij de AP-factuur om 'Approved' acties te vinden. Vastleggen Gelogd wanneer goedkeuringsactie wordt uitgevoerd Gebeurtenistype explicit | |||
| Factuur Ingediend | De overgang van de factuur van een conceptstatus naar een ingediende status, wat de goedkeuringsworkflow activeert. Dit markeert het einde van de gegevensinvoer en het begin van de goedkeuringscyclus. | ||
| Het belang Essentieel voor het onderscheiden van de duur van 'Data Entry' en 'Goedkeuring' in de doorlooptijdanalyse. Vindplaats Afleiden uit de APBILL audit trail waar het statusveld verandert van 'Concept' naar 'Ingediend' of 'Wachtend op Goedkeuring'. Vastleggen Vergelijk statusveld voor/na Gebeurtenistype inferred | |||
| Factuurconcept aangemaakt | De initiële aanmaak van de AP Bill-record in Sage Intacct, meestal in een Concept-status. Dit legt het invoerpunt vast van de factuurdata voordat deze in goedkeurings- of boekingsworkflows terechtkomt. | ||
| Het belang Bepaalt de vroegste timestamp voor de procesdoorlooptijd en identificeert het begin van de aansprakelijkheidsregistratie. Vindplaats Query de audit trail van het APBILL-object voor de actie 'Create' of de initiële timestamp van de recordcreatie. Vastleggen Gelogd wanneer APBILL record voor het eerst wordt aangemaakt Gebeurtenistype explicit | |||
| Betaling afgestemd | De bevestiging dat de betaling door de bank is verwerkt, gemarkeerd tijdens het bankafstemmingsproces in Cash Management. | ||
| Het belang Biedt de 'End-to-End Cycle Time' vanuit een cash flow perspectief, wat bevestigt dat geld daadwerkelijk de rekening heeft verlaten. Vindplaats Controleer de reconciliatiestatus of het 'Cleared Date'-veld op het APPYMT object of de gekoppelde Cash Management transactie. Vastleggen Vergelijk reconciliatiestatus Gebeurtenistype inferred | |||
| Betaling ongeldig gemaakt | De annulering van een eerder gegenereerde betaling. Dit heropent de factuurverplichting en vereist dat het betalingsproces opnieuw wordt gestart. | ||
| Het belang Identificeer ernstige downstream procesfouten waarbij betalingen worden gegenereerd maar vervolgens worden ingetrokken. Vindplaats Query het APPYMT-object op status 'Void' of 'Voided' en de bijbehorende timestamp. Vastleggen Gelogd wanneer een ongeldige transactie plaatsvindt Gebeurtenistype explicit | |||
| Factuur afgewezen | Registreert wanneer een goedkeurder de factuur afwijst, waardoor deze terugkeert naar een Concept- of gedeeltelijk goedgekeurde status. Dit duidt op een proceslus of een datakwaliteitsprobleem. | ||
| Het belang Brengt knelpunten in de workflow aan het licht en draagt bij aan herwerkingsstatistieken. Vindplaats Raadpleeg de 'Examine Approval History' log behorende bij de AP-factuur voor 'Declined' of 'Rejected' acties. Vastleggen Gelogd wanneer afwijzingsactie wordt uitgevoerd Gebeurtenistype explicit | |||
| Factuur bijgewerkt | Registreert wijzigingen in de factuurkop of orderregels na de initiële aanmaak. Een hoge frequentie van deze activiteit duidt op handmatig rework of fouten in de data-extractie. | ||
| Het belang Sleutel voor het berekenen van de 'Touchless Processing Rate' en het identificeren van inefficiënte handmatige datacorrectielussen. Vindplaats Raadpleeg de APBILL audit history voor 'Update' acties uitgevoerd door een gebruiker voorafgaand aan het boeken. Vastleggen Gelogd wanneer transactie wordt gewijzigd Gebeurtenistype explicit | |||
| Factuur geselecteerd voor betaling | De opname van de factuur in een betaalbatch of selectierun. De status verandert doorgaans naar 'Geselecteerd', waardoor deze wordt vergrendeld voor andere betaalrondes. | ||
| Het belang Analyseert 'Optimalisatie van betalingsbatches' en de vertraging tussen het besluit om te betalen en de daadwerkelijke uitvoering van de betaling. Vindplaats Afleiden uit APBILL statuswijziging naar 'Geselecteerd' of equivalent via de 'Facturen Betalen' schermactie. Vastleggen Vergelijk statusveld voor/na Gebeurtenistype inferred | |||
| Factuur in de wacht gezet | Het toepassen van een betalingsblokkade of 'On Hold'-status op de factuur. Dit voorkomt dat de factuur wordt geselecteerd voor betalingsverwerking. | ||
| Het belang Heeft directe impact op 'Payment Block Resolution Time' en visualiseert vertragingen in de betalingspipeline. Vindplaats Afleiden uit de APBILL audit trail waar de 'On Hold' boolean of statusveld overgaat naar 'true'. Vastleggen Vergelijk statusveld voor/na Gebeurtenistype inferred | |||
| Factuur vrijgegeven uit wachtstand | Het opheffen van de betalingsblokkade, waardoor de factuur kan doorgaan naar de betalingsselectie. Dit markeert de oplossing van het geschil of probleem. | ||
| Het belang Markeert het einde van een knelpuntperiode en de hervatting van de standaard processtroom. Vindplaats Afleiden uit de APBILL audit trail waar de 'On Hold' boolean of statusveld overgaat naar 'false'. Vastleggen Vergelijk statusveld voor/na Gebeurtenistype inferred | |||
Extractie Guides
Stappen
AP Facturen-weergave voorbereiden Log in bij Sage Intacct en navigeer naar Accounts Payable > All tab > Bills. Selecteer 'Create New View'. Geef de weergave de naam 'Process Mining - Bills Extraction'. Selecteer de volgende kolommen in deze volgorde: Invoice Number (Doc Number), Vendor Name, Date Created, Date Posted, Due Date, Total Amount, State, Currency, PO Number, Department, Created By, On Hold, Description, Record No (System ID). Stel filters in om 'Draft' facturen uit te sluiten als u alleen geboekte data wilt, of laat ze open om de volledige levenscyclus vast te leggen. Zorg ervoor dat het datumbereik uw analyseperiode beslaat (bijv. Date Created = Last 365 Days). Sla de weergave op.
AP Facturen-data exporteren Open de weergave 'Process Mining - Bills Extraction'. Klik op de 'Export'-knop en selecteer 'CSV'-formaat. Sla het bestand op als 'AP_Bills.csv'.
Weergave van geboekte betalingen voorbereiden Navigeer naar Accounts Payable > All tab > Posted Payments. Maak een nieuwe weergave aan genaamd 'Process Mining - Payments'. Selecteer kolommen: Check/Payment Number, Payment Date, Vendor Name, Transaction Amount, Payment Method, State (Void/Cleared), Date Reconciled, Bill Number (Reference), Record No. Sla de weergave op.
Betalingsdata exporteren Open de weergave 'Process Mining - Payments'. Klik op 'Export' en selecteer 'CSV'. Sla het bestand op als 'AP_Payments.csv'.
Optioneel: Audit Trail voor workflowgeschiedenis Standaard aangepaste weergaven in Intacct tonen alleen de huidige status en de laatste wijzigingsdatum. Om historische gebeurtenissen zoals 'Invoice Declined' of specifieke goedkeuringstimestamps vast te leggen, moet u de Audit History exporteren. Navigeer naar Reports > Setup > Audit Trail. Configureer het audit trail om te kijken naar het 'AP Bill'-object. Selecteer actietypen: Add, Modify, Approve, Decline. Exporteer dit rapport als 'AP_Audit_History.csv'.
Transformatiescript uitvoeren Gebruik het Python-script uit de Query-sectie om deze bestanden samen te voegen. Het script importeert 'AP_Bills.csv', 'AP_Payments.csv' en optioneel 'AP_Audit_History.csv' om de vereiste Event Log-structuur te genereren.
Verifiëren en formatteren Open de resulterende 'Event_Log_Output.csv'. Zorg ervoor dat 'EventTime' in ISO 8601-formaat (JJJJ-MM-DD UU:MM:SS) is. Controleer of 'InvoiceNumber' voor alle rijen is ingevuld. Upload de uiteindelijke CSV naar ProcessMind.
Configuratie
- Configuratie van de weergave: Zorg dat het 'Aantal records' in de instellingen hoog genoeg is om alle transacties mee te nemen, of gebruik de exportfunctie 'Volgende pagina' als er beperkingen gelden.
- Datumverwerking: Intacct exporteert datums in het lokale formaat van de gebruiker (bijv. MM/DD/JJJJ). Het transformatiescript gaat uit van de standaard Amerikaanse indeling; pas het script aan als uw gebruikersprofiel DD/MM/JJJJ hanteert.
- Veldrechten: Controleer of de gebruiker die de weergave aanmaakt 'List'- en 'View'-rechten heeft voor Accounts Payable Bills en Posted Payments.
- Historische granulariteit: Zonder de export van de Audit Trail zijn activiteiten zoals 'Invoice Approved' gebaseerd op de 'Date Posted'-proxy, en toont 'Invoice Updated' enkel het tijdstip van de laatste wijziging.
- Filtering: Gebruik een filter op 'Date Created' >= [Startdatum] om het datavolume te beperken. Vermijd filtering op 'State', tenzij u specifiek 'Voided' of historische records wilt uitsluiten.
a Voorbeeldquery 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() Stappen
Webservicesessie tot stand brengen: Authenticeer bij het Sage Intacct Web Services 3.0-endpoint met uw Sender ID, Password, Company ID, User ID en User Password om een session ID te verkrijgen.
Vereiste objecten identificeren: U moet data extraheren uit drie primaire objecten om de volledige levenscyclus vast te leggen:
APBILL(Factuurheaders),APPYMTDETAIL(Betaalgegevens gekoppeld aan facturen) enAUDITTRAIL(Workflowgeschiedenis).Factuurheaderdata extraheren: Gebruik de
readByQuery-methode op hetAPBILL-object. Selecteer de veldenRECORDNO,DOCNUMBER,WHENCREATED,WHENPOSTED,STATE,VENDORNAME,TOTALENTERED,PONUMBER,DUE_DATE. Filter op datumbereik met behulp vanWHENCREATED.Betalingsdata extraheren: Gebruik
readByQueryopAPPYMTDETAIL. SelecteerRECORDNO,WHENCREATED,PAYMENTDATE,TRX_AMOUNT,DOCNUMBER(Betalingsreferentie) enBILLRECORDNO(Foreign Key naar APBILL). Zorg ervoor dat u deCLEARED-status of -datum ophaalt, indien beschikbaar, voor afstemming.Auditgeschiedenis extraheren: Gebruik
readByQueryop hetAUDITTRAIL-object. Filter waarOBJECTTYPE= 'APBILL'. Dit is cruciaal voor het vastleggen van goedkeurings-, afwijzings-, wacht- en annuleringsgebeurtenissen die niet als timestamps in de headertabel worden opgeslagen. SelecteerOBJECTKEY,LOGTYPE,MESSAGE,WHENDOCCURREDenUSERID.Data voorbereiden (staging): Laad de XML/JSON-responses van deze drie API-aanroepen in een staging database (SQL Server, Snowflake, Postgres, etc.). De API ondersteunt geen complexe joins of unions in één aanroep; transformatie moet dus na extractie plaatsvinden.
Transformatiescript uitvoeren: Voer het SQL-script uit, beschikbaar in de Query-sectie, op uw staged tabellen. Dit script verenigt de statische headerdata met het transactionele audit log om het unieke event log te creëren.
Activiteitstypen valideren: Controleer de output op specifieke trefwoorden in de Audit Trail-berichten (zoals Approved, Declined) en zorg ervoor dat uw string-matching logica de specifieke bewoordingen van uw Intacct-configuratie dekt.
Datums formatteren: Zorg ervoor dat de
EventTime-kolom is geformatteerd volgens de ISO 8601 (JJJJ-MM-DD UU:MM:SS)-standaarden tijdens de uiteindelijke export.Event Log exporteren: Exporteer het resultaat van de SQL-query als een CSV- of Parquet-bestand voor upload naar ProcessMind.
Configuratie
- API Endpoint: https://api.intacct.com/ia/xml/xmlgw.phtml
- Method:
readByQuery(Web Services 3.0) - Page Size: Stel
pagesizein op 1000 (maximaal aanbevolen) om de HTTP-overhead te minimaliseren. Implementeer een loop met deresultIdom de volgende pagina's op te halen. - Date Filtering: Gebruik standaard SQL-operators (>=, <, AND) in uw query-string voor
WHENCREATED-kolommen om de extractieperiode te beperken (bijv. laatste 365 dagen). - Permissions: De extractie-gebruiker heeft 'List'- en 'View'-rechten nodig voor Accounts Payable en het recht op 'Audit Trail' (vaak te vinden in de instellingen van Platform Services of Company Admin).
- Object Linking:
APBILL.RECORDNOis de primaire sleutel die wordt gebruikt om te koppelen metAPPYMTDETAIL.BILLRECORDNOenAUDITTRAIL.OBJECTKEY.
a Voorbeeldquery 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)