Il Suo Template Dati per l'Elaborazione dei Pagamenti di Contabilità Fornitori
Il Suo Template Dati per l'Elaborazione dei Pagamenti di Contabilità Fornitori
- Campi di dati essenziali per Sage Intacct
- Fasi di processo standardizzate
- Istruzioni di estrazione specifiche
Attributi del Processo di Pagamento dei Fornitori
| Nome | Descrizione | ||
|---|---|---|---|
| Nome attività ActivityName | L'azione o l'evento specifico che si verifica nel ciclo di vita della fattura. | ||
| Descrizione Questo attributo cattura il nome del passaggio eseguito, come 'Fattura Creata', 'Fattura Approvata' o 'Pagamento Registrato'. È essenziale per ricostruire il flusso di processo e visualizzare la sequenza degli eventi nella dashboard Distribuzione del Tempo di Ciclo End-to-End. Perché è importante Definisce i passaggi nella mappa di processo ed è obbligatorio per qualsiasi analisi di Process Mining. Dove trovare Registri di audit o tabelle della cronologia delle transazioni del sistema Esempi Bozza Fattura CreataFattura ApprovataPagamento Generato | |||
| Numero fattura InvoiceNumber | L'identificatore univoco per il documento di fattura fornitore. | ||
| Descrizione Il Numero di Fattura funge da identificatore definitivo del caso per questo processo. Raggruppa in modo univoco tutti gli eventi relativi a una singola fattura fornitore, consentendo un'analisi completa del suo percorso dalla ricezione alla liquidazione. In Sage Intacct, questo corrisponde solitamente al Numero Documento o al Numero di Record all'interno dell'oggetto Fattura AP. Perché è importante È la chiave fondamentale per collegare tutte le attività di processo a una singola istanza di caso. Dove trovare Oggetto fattura AP di Sage Intacct, campo DOCNUMBER o RECORDNO Esempi INV-2023-001988722-AFEB-23-991 | |||
| Timestamp Evento EventTime | La data e l'ora specifiche in cui si è verificata un'attività. | ||
| Descrizione Questo attributo registra il momento esatto in cui si è verificato un evento. È la base per tutti i calcoli basati sul tempo, inclusi Tempo di Ciclo Medio Fattura e Durata Media Approvazione. Timestamp precisi sono cruciali per identificare i colli di bottiglia nella dashboard Performance del Workflow di Approvazione. Perché è importante Necessario per sequenziare gli eventi e calcolare le durate tra le fasi del processo. Dove trovare Timestamp di creazione o modifica delle transazioni nelle tabelle di origine Esempi 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Sistema di Origine SourceSystem | Il nome del sistema da cui ha avuto origine l'evento. | ||
| Descrizione Questo attributo identifica l'origine dei dati, che è tipicamente 'Sage Intacct' per questo processo. Tuttavia, se le fatture vengono acquisite da strumenti OCR o piattaforme di approvvigionamento esterne, questo campo aiuta a differenziare le fonti di dati nella Panoramica Conformità e Rischio. Perché è importante Garantisce la tracciabilità della lineage dei dati, specialmente in ambienti multi-sistema. Dove trovare Hardcoded durante l'estrazione o derivato dalle impostazioni di connessione Esempi Sage IntacctBill.comExpensify | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp di quando il record è stato estratto o aggiornato l'ultima volta. | ||
| Descrizione Questo attributo traccia l'ultima sincronizzazione dei dati con la piattaforma di process mining. Aiuta gli utenti a comprendere la freschezza dei dati presentati in dashboard come Ottimizzazione dei Batch di Pagamento e garantisce che l'analisi rifletta lo stato più attuale del libro mastro AP. Perché è importante Campo tecnico richiesto per carichi incrementali e controlli di attualità dei dati. Dove trovare Ora di sistema al momento dell'estrazione dei dati Esempi 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| Creato da Utente CreatedBy | L'ID utente della persona che ha inserito la fattura. | ||
| Descrizione Questo attributo identifica l'iniziatore del caso di processo. Viene utilizzato nell'analisi Interventi Manuali e Punti di Contatto per identificare le esigenze di formazione per specifici utenti che richiedono frequentemente correzioni di dati o generano duplicati. Perché è importante Consente l'analisi delle performance delle risorse e identifica opportunità di formazione. Dove trovare Oggetto fattura AP di Sage Intacct, campo CREATEDBY Esempi jsmithap_automation_botmdoe | |||
| Data di Scadenza DueDate | La scadenza contrattuale per il pagamento. | ||
| Descrizione Questo attributo indica quando il pagamento deve essere effettuato per evitare penali. È il denominatore per il KPI Percentuale Pagamenti Puntuali. L'analisi dei pagamenti eseguiti dopo questa data rivela lacune di conformità e potenziali danni alle relazioni con i fornitori. Perché è importante Linea di base per determinare le performance puntuali e l'aderenza agli SLA. Dove trovare Oggetto fattura AP di Sage Intacct, campo WHENDUE Esempi 2023-11-012023-11-15 | |||
| Data Fattura InvoiceDate | La data di emissione della fattura da parte del fornitore. | ||
| Descrizione Questo attributo riflette la data del documento indicata sulla fattura fisica. Viene utilizzato in combinazione con la Data di Pagamento per calcolare il Tempo di Ciclo End-to-End. Significativi divari tra Data Fattura e data di inserimento possono indicare ritardi di sala posta o di scansione. Perché è importante Il punto di partenza per l'analisi dell'invecchiamento e il calcolo dei termini di pagamento. Dove trovare Oggetto fattura AP di Sage Intacct, campo WHENTOCREATE o DATECREATED Esempi 2023-10-012023-10-05 | |||
| Data Pagamento PaymentDate | La data in cui il pagamento è stato eseguito. | ||
| Descrizione Questo attributo registra il timestamp finale della liquidazione finanziaria. Viene utilizzato per calcolare il tempo di ciclo ed è confrontato con la Data di Scadenza per il KPI Percentuale Pagamenti Puntuali. Perché è importante Contrassegna il completamento del ciclo di processo principale. Dove trovare Dettaglio Pagamento AP di Sage Intacct, campo WHENPAID Esempi 2023-11-052023-11-10 | |||
| Dipartimento Department | Il dipartimento interno responsabile della spesa. | ||
| Descrizione Questo attributo categorizza la fattura per centro di costo o funzione aziendale. Supporta la dashboard Analisi della Variazione del Processo evidenziando quali dipartimenti incontrano difficoltà con ritardi di approvazione o elevati tassi di rilavorazione rispetto alla media organizzativa. Perché è importante Consente il drill-down organizzativo e l'analisi delle cause principali. Dove trovare Oggetto fattura AP di Sage Intacct, campo DEPTID o DEPTNAME Esempi Servizi ITMarketingOperazioni | |||
| Importo Fattura InvoiceAmount | Il valore monetario totale della fattura. | ||
| Descrizione Questo attributo rappresenta la passività finanziaria totale per il caso specifico. Viene utilizzato nella dashboard Rilevamento Invii Duplicati per identificare fatture con importi e ID fornitore identici. Permette inoltre di filtrare l'analisi per transazioni di alto valore rispetto a quelle di basso valore. Perché è importante Essenziale per l'analisi dell'impatto finanziario e la valutazione del rischio. Dove trovare Oggetto fattura AP di Sage Intacct, campo TOTALENTERED o TOTALDUE Esempi 1500.00250.5010000.00 | |||
| Nome Fornitore VendorName | Il nome del fornitore o del prestatore di servizi che emette la fattura. | ||
| Descrizione Questo attributo identifica l'entità esterna a cui è dovuto il pagamento. È una dimensione primaria per la dashboard Prevedibilità dei Pagamenti Fornitori, consentendo agli analisti di raggruppare le metriche di performance per fornitore e identificare relazioni con fornitori ad alto rischio o frequenti punti di contatto manuali. Perché è importante Critico per segmentare l'analisi in base alle performance e al comportamento dei fornitori. Dove trovare Oggetto fattura AP di Sage Intacct, campo VENDORNAME Esempi Acme CorpGlobal Services IncOffice Depot | |||
| Numero Ordine d'Acquisto PurchaseOrderNumber | Il numero di riferimento dell'ordine d'acquisto correlato. | ||
| Descrizione Questo attributo collega la fattura a un documento di approvvigionamento a monte. È il driver chiave per la dashboard Efficienza della Corrispondenza a Tre Vie e per l'analisi Conformità PO e Spesa Non-PO. I casi con un valore nullo qui indicano una spesa non legata a ordini d'acquisto. Perché è importante Distingue tra fatture supportate da Ordine di Acquisto e fatture senza Ordine di Acquisto per l'analisi di conformità. Dove trovare Oggetto fattura AP di Sage Intacct, campo PONUMBER o link al documento correlato Esempi PO-9912PO-1002null | |||
| Stato Fattura InvoiceStatus | Lo stato del ciclo di vita corrente della fattura nel sistema. | ||
| Descrizione Questo attributo riflette lo stato corrente del sistema (ad esempio, Registrato, Pagato, Bozza). Aiuta a filtrare il dataset per i casi attivi rispetto a quelli completati nella dashboard Distribuzione del Tempo di Ciclo End-to-End. Perché è importante Identifica rapidamente lo stato del caso. Dove trovare Oggetto fattura AP di Sage Intacct, campo STATE Esempi RegistratoPagatoBozzaParzialmente Pagato | |||
| È Pagato in Ritardo IsPaidLate | Flag che indica se la data di pagamento ha superato la data di scadenza. | ||
| Descrizione Questo attributo booleano è calcolato confrontando la Data di Pagamento con la Data di Scadenza. Funge da filtro diretto per il KPI Percentuale Pagamenti Puntuali e aiuta a isolare i casi problematici nella dashboard Prevedibilità dei Pagamenti Fornitori. Perché è importante Semplifica il filtraggio per violazioni degli SLA. Dove trovare Calcolato: DataPagamento > DataScadenza Esempi truefalse | |||
| È Supportato da Ordine di Acquisto IsPOBacked | Flag che indica se la fattura è associata a un Ordine di Acquisto. | ||
| Descrizione Questo attributo identifica se la fattura ha seguito le procedure di approvvigionamento standard. È il filtro primario per il KPI Tasso di Conformità degli Ordini d'Acquisto e aiuta a separare la spesa ad hoc dalla spesa gestita. Perché è importante Fattore chiave di differenziazione per l'analisi del percorso di processo. Dove trovare Calcolato: NumeroOrdineAcquisto non è nullo Esempi truefalse | |||
| Stato di Sospensione HoldStatus | Indica se la fattura è attualmente in sospeso per il pagamento. | ||
| Descrizione Questo attributo contrassegna i casi sospesi dall'elaborazione dei pagamenti. Supporta la dashboard Monitoraggio dell'Impatto del Blocco Pagamenti identificando i casi bloccati in uno stato sospeso. Perché è importante Identifica colli di bottiglia immediati che richiedono intervento. Dove trovare Oggetto fattura AP di Sage Intacct, campo ONHOLD Esempi truefalse | |||
| Tempo di Ciclo (Giorni) CycleTimeDays | Il numero di giorni dalla ricezione della fattura al pagamento. | ||
| Descrizione Questa metrica quantifica la velocità del processo per ogni caso. Si inserisce direttamente nel KPI Tempo di Ciclo Medio Fattura e consente l'analisi istogramma nella dashboard Distribuzione del Tempo di Ciclo End-to-End. Perché è importante Metrica di performance standard per l'efficienza. Dove trovare Calcolato: Giorni tra DataFattura e DataPagamento Esempi 15.530.05.2 | |||
| Termini di Pagamento PaymentTerms | Le condizioni concordate per la tempistica dei pagamenti e gli sconti. | ||
| Descrizione Questo attributo descrive la regola utilizzata per calcolare la data di scadenza e la data di sconto (ad esempio, Net 30, 2/10 Net 30). È fondamentale per la dashboard Analisi degli Sconti per Pagamento Anticipato per identificare quali fatture erano idonee a sconti che sono stati persi. Perché è importante Contesto per analizzare le strategie di flusso di cassa e le opportunità di sconto perse. Dove trovare Oggetto fattura AP di Sage Intacct, campo TERMNAME Esempi Netto 30Pagamento alla Ricezione2/10 Netto 30 | |||
| Unità aziendale BusinessUnit | L'entità legale o la sede associata alla fattura. | ||
| Descrizione Questo attributo differenzia tra diverse filiali o sedi. È cruciale per la Panoramica Conformità e Rischio per confrontare l'aderenza ai processi tra diverse entità geografiche o legali all'interno dell'organizzazione. Perché è importante Essenziale per i benchmark multi-entità. Dove trovare Oggetto fattura AP di Sage Intacct, campo LOCATIONID o ENTITY Esempi USA-HQEMEA-LondonAPAC-Singapore | |||
Attività del Processo di Pagamento dei Fornitori
| Activity | Descrizione | ||
|---|---|---|---|
| Bozza Fattura Creata | La creazione iniziale del record della fattura AP in Sage Intacct, di solito in stato di bozza. Questo cattura il punto di ingresso dei dati della fattura prima che entri nei workflow di approvazione o registrazione. | ||
| Perché è importante Stabilisce il timestamp più antico per il tempo di ciclo del processo e identifica l'inizio della registrazione della passività. Dove trovare Interroga il tracciato di audit dell'oggetto APBILL per l'azione 'Crea' o il timestamp iniziale della creazione del record. Acquisisci Registrato quando il record APBILL viene creato per la prima volta Tipo di evento explicit | |||
| Fattura Abbinata all'Ordine di Acquisto | Identifica quando una fattura fornitore viene creata convertendo o collegando un Ordine di Acquisto o una Ricevuta. Questa attività convalida l'efficienza della corrispondenza a 3 vie. | ||
| Perché è importante Critico per il KPI 'Tasso di Corrispondenza al Primo Passaggio' e per determinare la conformità agli ordini di acquisto rispetto alla spesa senza ordine di acquisto. Dove trovare Controllare l'oggetto APBILL per un valore non nullo nei campi 'createdfrom' o 'source_id' che indichi il collegamento a una transazione di Acquisto. Acquisisci Confrontare ID Record con ID Transazione di Origine Tipo di evento inferred | |||
| Fattura Approvata | Un'azione di approvazione distinta registrata all'interno del workflow di approvazione designato. Ciò significa che un utente con autorità sufficiente ha autorizzato la fattura per il pagamento. | ||
| Perché è importante Critico per il KPI 'Durata Media Approvazione' e per identificare i colli di bottiglia nell'approvazione della direzione. Dove trovare Interroga il log 'Esamina Storico Approvazioni' associato alla fattura AP per trovare azioni 'Approvato'. Acquisisci Registrato quando l'azione di approvazione viene eseguita Tipo di evento explicit | |||
| Fattura presentata | La transizione della fattura da uno stato di Bozza a uno stato Inviato, attivando il workflow di approvazione. Questo segna la fine dell'inserimento dati e l'inizio del ciclo di approvazione. | ||
| Perché è importante Essenziale per segmentare la durata di 'Data Entry' dalla durata di 'Approvazione' nell'analisi del tempo di ciclo. Dove trovare Inferire dalla traccia di audit di APBILL dove il campo Stato cambia da 'Draft' a 'Submitted' o 'Pending Approval'. Acquisisci Confrontare il campo stato prima/dopo Tipo di evento inferred | |||
| Fattura Registrata | Il punto in cui la fattura viene registrata nel libro mastro. Nei sistemi senza workflow di approvazione, questo può avvenire contemporaneamente all'invio. | ||
| Perché è importante Indica che la passività finanziaria è ufficialmente riconosciuta nei libri contabili. Dove trovare Interroga il tracciato di audit di APBILL per il cambio di stato a 'Registrato'. Acquisisci Registrato quando la transazione viene contabilizzata nel Libro Mastro Tipo di evento explicit | |||
| Pagamento Generato | La creazione del record di Pagamento (Assegno, ACH, EFT) collegato alla fattura. Questo è il momento in cui il trasferimento di fondi viene avviato nel sistema. | ||
| Perché è importante Il timestamp principale per 'Tempo di Ciclo Medio Fattura' e 'Percentuale Pagamenti Puntuali'. Dove trovare Identificare la creazione di un record APPYMT collegato all'APBILL. Utilizzare la data di creazione dell'oggetto pagamento. Acquisisci Registrato quando il record APPYMT viene creato Tipo di evento explicit | |||
| Fattura Aggiornata | Registra le modifiche all'intestazione o alle voci della fattura dopo la creazione iniziale. Un'elevata frequenza di questa attività indica rilavorazioni manuali o errori di estrazione dei dati. | ||
| Perché è importante Chiave per calcolare il 'Tasso di Processo Senza Contatto' e identificare cicli inefficienti di correzione manuale dei dati. Dove trovare Interroga la cronologia audit di APBILL per le azioni di 'Aggiornamento' eseguite da un utente prima della registrazione. Acquisisci Registrato quando la transazione viene modificata Tipo di evento explicit | |||
| Fattura Messa in Sospeso | L'applicazione di un blocco di pagamento o dello stato 'In Sospeso' alla fattura. Questo impedisce che la fattura venga selezionata per l'elaborazione del pagamento. | ||
| Perché è importante Influenza direttamente il 'Tempo di Risoluzione Blocco Pagamento' e visualizza i ritardi nella pipeline dei pagamenti. Dove trovare Inferire dalla traccia di audit di APBILL dove il campo booleano o di stato 'On Hold' transita a vero. Acquisisci Confrontare il campo stato prima/dopo Tipo di evento inferred | |||
| Fattura Rifiutata | Registra quando un approvatore rifiuta la fattura, riportandola a uno stato di bozza o parzialmente approvato. Ciò indica un loop di processo o un problema di qualità dei dati. | ||
| Perché è importante Evidenzia i punti di attrito nel workflow e contribuisce alle metriche di rilavorazione. Dove trovare Interroga il log 'Esamina Storico Approvazioni' associato alla fattura AP per azioni 'Declinato' o 'Rifiutato'. Acquisisci Registrato quando l'azione di rifiuto viene eseguita Tipo di evento explicit | |||
| Fattura Rilasciata dalla Sospensione | La rimozione del blocco di pagamento, che consente alla fattura di procedere alla selezione del pagamento. Questo segna la risoluzione della controversia o del problema. | ||
| Perché è importante Contrassegna la fine di un periodo di collo di bottiglia e la ripresa del flusso di processo standard. Dove trovare Inferire dalla traccia di audit di APBILL dove il campo booleano o di stato 'On Hold' transita a falso. Acquisisci Confrontare il campo stato prima/dopo Tipo di evento inferred | |||
| Fattura Selezionata per il Pagamento | L'inclusione della fattura in un batch di pagamento o in un ciclo di selezione. Lo stato tipicamente cambia a 'Selezionato', bloccandola da altri cicli di pagamento. | ||
| Perché è importante Analizza l'Ottimizzazione dei Lotti di Pagamento e il ritardo tra la decisione di pagare e l'effettiva emissione dell'assegno. Dove trovare Inferire dal cambio di stato di APBILL a 'Selected' o equivalente tramite l'azione della schermata 'Pay Bills'. Acquisisci Confrontare il campo stato prima/dopo Tipo di evento inferred | |||
| Pagamento Annullato | L'annullamento di un pagamento precedentemente generato. Questo riapre la passività della fattura e richiede il riavvio del processo di pagamento. | ||
| Perché è importante Identificare gravi fallimenti di processo a valle dove i pagamenti vengono generati ma ritirati. Dove trovare Interroga l'oggetto APPYMT per lo stato 'Annullato' o 'Invalidato' e il timestamp associato. Acquisisci Registrato quando si verifica una transazione di annullamento Tipo di evento explicit | |||
| Pagamento Riconciliato | La conferma che il pagamento è stato liquidato dalla banca, registrato durante il processo di riconciliazione bancaria nella Gestione Cassa. | ||
| Perché è importante Fornisce il 'Tempo di Ciclo End-to-End' da una prospettiva di flusso di cassa, confermando che i fondi hanno effettivamente lasciato il conto. Dove trovare Controllare lo stato di Riconciliazione o il campo 'Cleared Date' sull'oggetto APPYMT o sulla transazione di Gestione della Cassa collegata. Acquisisci Confrontare lo stato di riconciliazione Tipo di evento inferred | |||
Guide all'Estrazione
Fasi
Preparazione della vista Fatture Fornitori (AP Bills) Accedere a Sage Intacct e navigare in Contabilità fornitori > scheda Tutti > Fatture. Selezionare 'Crea nuova vista'. Nominare la vista 'Process Mining - Estrazione Fatture'. Selezionare nell'ordine le seguenti colonne: Numero fattura (Doc Number), Nome fornitore, Data creazione, Data registrazione, Data scadenza, Importo totale, Stato, Valuta, Numero PO, Dipartimento, Creato da, In sospeso, Descrizione, Record No (ID di sistema). Configurare i filtri per escludere le fatture in 'Bozza' se si desiderano solo i dati registrati, oppure lasciare aperto per acquisire l'intero ciclo di vita. Assicurarsi che l'intervallo di date copra il periodo di analisi (es. Data creazione = Ultimi 365 giorni). Salvare la vista.
Esportazione dei dati delle fatture Aprire la vista 'Process Mining - Estrazione Fatture'. Cliccare sul pulsante 'Esporta' e selezionare il formato 'CSV'. Salvare il file come 'AP_Bills.csv'.
Preparazione della vista Pagamenti Registrati Navigare in Contabilità fornitori > scheda Tutti > Pagamenti registrati. Creare una nuova vista nominata 'Process Mining - Pagamenti'. Selezionare le colonne: Numero assegno/pagamento, Data pagamento, Nome fornitore, Importo transazione, Metodo di pagamento, Stato (Annullato/Liquidato), Data riconciliazione, Numero fattura (Riferimento), Record No. Salvare la vista.
Esportazione dei dati di pagamento Aprire la vista 'Process Mining - Pagamenti'. Cliccare su 'Esporta' e selezionare 'CSV'. Salvare il file come 'AP_Payments.csv'.
Opzionale: Audit Trail per la cronologia del workflow Le viste personalizzate standard in Intacct mostrano solo lo stato attuale e la data dell'ultima modifica. Per acquisire eventi storici come 'Fattura rifiutata' o timestamp specifici di approvazione, è necessario esportare l'Audit History. Andare su Report > Configurazione > Audit Trail. Configurare l'audit trail per monitorare l'oggetto 'AP Bill'. Selezionare i tipi di azione: Aggiungi, Modifica, Approva, Rifiuta. Esportare il report come 'AP_Audit_History.csv'.
Esecuzione dello script di trasformazione Utilizzare lo script Python fornito nella sezione Query per unire i file. Lo script elabora 'AP_Bills.csv', 'AP_Payments.csv' e l'opzionale 'AP_Audit_History.csv' per generare la struttura dell'Event Log richiesta.
Verifica e formattazione Aprire il file risultante 'Event_Log_Output.csv'. Assicurarsi che 'EventTime' sia nel formato ISO 8601 (YYYY-MM-DD HH:MM:SS). Verificare che la colonna 'InvoiceNumber' sia compilata per ogni riga. Caricare il CSV finale su ProcessMind.
Configurazione
- View Configuration: Ensure 'Number of records' in the settings of the view is set high enough to capture all transactions, or use the 'Next Page' export feature if limits apply.
- Date Handling: Intacct exports dates in the user's local format (e.g., MM/DD/YYYY). The transformation script assumes a standard US format; adjust the script if your user profile uses DD/MM/YYYY.
- Field Permissions: Ensure the user creating the view has 'List' and 'View' permissions on Accounts Payable Bills and Posted Payments.
- Historical Granularity: Without the Audit Trail export, activities like 'Invoice Approved' will rely on the 'Date Posted' proxy, and 'Invoice Updated' will only reflect the last modification time.
- Filtering: Apply a filter on 'Date Created' >= [Start Date] to limit data volume. Avoid filtering by 'State' unless you specifically want to exclude Voided or Historical records.
a Query di Esempio 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() Fasi
Avvio della sessione Web Services: autenticarsi all'endpoint Sage Intacct Web Services 3.0 utilizzando Sender ID, Password, Company ID, User ID e password utente per ottenere un ID sessione.
Identificazione degli oggetti necessari: è necessario estrarre i dati da tre oggetti primari per ricostruire l'intero ciclo di vita del processo:
APBILL(testate delle fatture),APPYMTDETAIL(dettagli di pagamento collegati alle fatture) eAUDITTRAIL(cronologia del workflow).Estrazione dei dati di testata: utilizzare il metodo
readByQuerysull'oggettoAPBILL. Selezionare i campiRECORDNO,DOCNUMBER,WHENCREATED,WHENPOSTED,STATE,VENDORNAME,TOTALENTERED,PONUMBER,DUE_DATE. Filtrare per intervallo di date tramiteWHENCREATED.Estrazione dei dati di pagamento: utilizzare
readByQuerysuAPPYMTDETAIL. SelezionareRECORDNO,WHENCREATED,PAYMENTDATE,TRX_AMOUNT,DOCNUMBER(rif. pagamento) eBILLRECORDNO(chiave esterna per APBILL). Assicurarsi di estrarre lo stato o la dataCLEARED, se disponibili, per la riconciliazione.Estrazione della cronologia di audit: utilizzare
readByQuerysull'oggettoAUDITTRAIL. Filtrare perOBJECTTYPE= 'APBILL'. Questo passaggio è fondamentale per acquisire eventi di approvazione, rifiuto, sospensione e annullamento, che non vengono salvati come timestamp nella tabella di testata. SelezionareOBJECTKEY,LOGTYPE,MESSAGE,WHENDOCCURREDeUSERID.Staging dei dati: caricare le risposte XML/JSON delle tre chiamate API in un database di staging (SQL Server, Snowflake, Postgres, ecc.). L'API non supporta join o union complessi in una singola chiamata, pertanto la trasformazione deve essere eseguita post-estrazione.
Esecuzione dello script di trasformazione: eseguire lo script SQL fornito nella sezione Query sulle tabelle di staging. Questo script unisce i dati statici di testata con il log di audit transazionale per generare un unico event log.
Validazione dei tipi di attività: verificare l'output cercando parole chiave specifiche nei messaggi dell'Audit Trail (come Approved, Declined) e assicurarsi che la logica di string matching rifletta la terminologia specifica della propria configurazione Intacct.
Formattazione date: assicurarsi che la colonna
EventTimesia formattata secondo lo standard ISO 8601 (YYYY-MM-DD THH:MM:SS) durante l'esportazione finale.Esportazione dell'Event Log: esportare il risultato della query SQL in formato CSV o Parquet per il caricamento su ProcessMind.
Configurazione
- Endpoint API: https://api.intacct.com/ia/xml/xmlgw.phtml
- Metodo:
readByQuery(Web Services 3.0) - Dimensione pagina: impostare
pagesizea 1000 (valore massimo consigliato) per ridurre al minimo il sovraccarico HTTP. Implementare un ciclo utilizzando ilresultIdper recuperare le pagine successive. - Filtro date: utilizzare gli operatori SQL standard (>=, <, AND) nella stringa di query per le colonne
WHENCREATED, in modo da limitare l'intervallo di estrazione (es. ultimi 365 giorni). - Permessi: l'utente incaricato dell'estrazione deve disporre dei permessi 'List' e 'View' per la Contabilità fornitori (Accounts Payable) e del permesso 'Audit Trail' (solitamente disponibile nelle impostazioni di Platform Services o Company Admin).
- Collegamento oggetti:
APBILL.RECORDNOè la chiave primaria utilizzata per il join conAPPYMTDETAIL.BILLRECORDNOeAUDITTRAIL.OBJECTKEY.
a Query di Esempio 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)