Borçlar Hesabı Ödeme Süreci Data Template'iniz
Borçlar Hesabı Ödeme Süreci Data Template'iniz
- Sage Intacct için temel `data` alanları
- Standardized process `milestone`'ları
- Specific extraction instruction'ları
Borç Hesapları Ödeme Süreci Nitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Faaliyet Adı ActivityName | Invoice `lifecycle`'ında occurring specific action veya `event`. | ||
| Açıklama Bu Neden önemli
Nereden alınır Denetim izi kayıtları veya sistem işlem geçmişi tabloları Örnekler Fatura Taslağı OluşturulduFatura OnaylandıÖdeme Oluşturuldu | |||
| Fatura Numarası InvoiceNumber | Vendor invoice document için unique identifier. | ||
| Açıklama Invoice Number, bu process için definitive Neden önemli Tüm süreç faaliyetlerini tek bir Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, DOCNUMBER veya RECORDNO Örnekler INV-2023-001988722-AFEB-23-991 | |||
| Olay Zaman Damgası EventTime | Bir `activity`'nin occurred olduğu specific `date` ve `time`. | ||
| Açıklama Bu Neden önemli
Nereden alınır Source table'lardaki transaction creation veya modification Örnekler 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Kaynak Sistem SourceSystem | `Event`'in originated ettiği system'in name'i. | ||
| Açıklama Bu Neden önemli Özellikle çoklu sistem ortamlarında Nereden alınır Çıkarma sırasında Örnekler Sage IntacctBill.comExpensify | |||
| Son Veri Güncellemesi LastDataUpdate | Record'un last extracted veya refreshed olduğu `timestamp`. | ||
| Açıklama Bu Neden önemli Incremental Nereden alınır
Örnekler 2023-11-01T12:00:00Z2023-11-02T01:00:00Z | |||
| Bölüm Department | Expense için responsible internal department. | ||
| Açıklama Bu Neden önemli Kurumsal ayrıntılı inceleme ve kök neden analizine olanak tanır. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, DEPTID veya DEPTNAME Örnekler BT HizmetleriPazarlamaOperasyonlar | |||
| Fatura Durumu InvoiceStatus | Invoice'in system'deki current `lifecycle state`'i. | ||
| Açıklama Bu Neden önemli
Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, STATE Örnekler KaydedildiÖdendiTaslakKısmen Ödendi | |||
| Fatura Tarihi InvoiceDate | Faturanın tedarikçi tarafından düzenlendiği tarih. | ||
| Açıklama Bu Neden önemli Aging analysis ve payment Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, WHENTOCREATE veya DATECREATED Örnekler 2023-10-012023-10-05 | |||
| Fatura Tutarı InvoiceAmount | Faturanın toplam tutarıdır. | ||
| Açıklama Bu Neden önemli Finansal etki analizi ve risk puanlaması için temeldir. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, TOTALENTERED veya TOTALDUE Örnekler 1500.00250.5010000.00 | |||
| Kullanıcı Tarafından Oluşturuldu CreatedBy | Invoice'i entered eden person'ın user ID'si. | ||
| Açıklama Bu Neden önemli Kaynak performans analizine olanak tanır ve eğitim fırsatlarını belirler. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, CREATEDBY Örnekler jsmithap_automation_botmdoe | |||
| Ödeme Tarihi PaymentDate | Payment'in executed edildiği `date`. | ||
| Açıklama Bu Neden önemli Çekirdek süreç döngüsünün tamamlandığını işaretler. Nereden alınır Sage Intacct Tedarikçi Ödeme Detayı (AP Payment Detail), WHENPAID Örnekler 2023-11-052023-11-10 | |||
| Purchase Order Number PurchaseOrderNumber | Related purchase order'ın `reference number`'ı. | ||
| Açıklama Bu Neden önemli Uyumluluk analizi için satın alma siparişi destekli ve satın alma siparişi olmayan faturalar arasında ayrım yapar. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, PONUMBER Örnekler PO-9912PO-1002null | |||
| Tedarikçi Adı VendorName | Invoice'i issuing eden supplier veya service provider'ın name'i. | ||
| Açıklama Bu Neden önemli Tedarikçi performansı ve davranışına göre analizi segmentlere ayırmak için kritik öneme sahiptir. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, VENDORNAME Örnekler Acme CorpGlobal Hizmetler A.Ş.Office Depot | |||
| Vade Tarihi DueDate | Payment için contractual `deadline`. | ||
| Açıklama Bu Neden önemli Zamanında performans ve SLA uyumluluğunu belirlemek için temel. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, WHENDUE Örnekler 2023-11-012023-11-15 | |||
| Bekletme Durumu HoldStatus | Faturanın şu anda ödeme bekletmesinde olup olmadığını gösterir. | ||
| Açıklama Bu Neden önemli Müdahale gerektiren acil Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, ONHOLD Örnekler truefalse | |||
| Döngü Süresi (Gün) CycleTimeDays | Invoice receipt'ten payment'e kadar olan `day` number'ı. | ||
| Açıklama Bu Neden önemli Efficiency için standard performance Nereden alınır Hesaplanan: FaturaTarihi ve ÖdemeTarihi Arasındaki Günler Örnekler 15.530.05.2 | |||
| Geç Ödendi mi IsPaidLate | Ödeme tarihinin vade tarihini aşıp aşmadığını gösteren işaret. | ||
| Açıklama Bu Neden önemli SLA violation'ları için filtering'i simplify eder. Nereden alınır Hesaplanan: ÖdemeTarihi > VadeTarihi Örnekler truefalse | |||
| İş Birimi BusinessUnit | Invoice ile associated legal entity veya location. | ||
| Açıklama Bu Neden önemli Çoklu kuruluş Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, LOCATIONID veya ENTITY Örnekler ABD Genel MerkeziEMEA-LondraAPAC-Singapur | |||
| Ödeme Vadeleri PaymentTerms | Payment timing ve discount'lar için agreed-upon condition'lar. | ||
| Açıklama Bu Neden önemli Nakit akışı stratejilerini ve kaçırılan indirim fırsatlarını analiz etmek için bağlam. Nereden alınır Sage Intacct Tedarikçi Faturası (AP Bill) object'i, TERMNAME Örnekler Net 30 GünMakbuz Üzerine Vade2/10 Net 30 | |||
| Satın Alma Siparişi Destekli mi IsPOBacked | Faturanın bir Satın Alma Siparişi ile ilişkili olup olmadığını gösteren işaret. | ||
| Açıklama Bu Neden önemli Süreç yolu analizi için temel ayrıştırıcı. Nereden alınır Hesaplanan: PurchaseOrderNumber boş değil Örnekler truefalse | |||
Borç Hesapları Ödeme Süreci Faaliyetleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura Gönderildi | Invoice'in Taslak (`Draft`) state'inden Gönderildi (`Submitted`) state'ine transition'ı, approval `workflow`'unu trigger eder. This, `data entry`'nin end'ini ve approval `cycle`'ının start'ını mark eder. | ||
| Neden önemli Döngü süresi analizinde 'Veri Girişi' süresini 'Onay' süresinden ayırmak için temeldir. Nereden alınır APBILL Yakala Durum alanını öncesi/sonrası ile karşılaştırın Event tipi inferred | |||
| Fatura Muhasebeleştirildi | Invoice'in General Ledger'a committed olduğu point. Approval `workflow`'ları olmayan system'lerde bu, submission ile simultaneously `happen` edebilir. | ||
| Neden önemli Finansal yükümlülüğün muhasebe defterlerinde resmi olarak tanındığını gösterir. Nereden alınır Tedarikçi Faturası (APBILL) denetim kaydında 'Kaydedildi' ( Yakala İşlem GL'ye kaydedildiğinde kaydedilir Event tipi explicit | |||
| Fatura Onaylandı | Belirlenen onay `workflow`'u içinde kaydedilmiş ayrı bir onay eylemi. Bu, yeterli yetkiye sahip bir kullanıcının faturayı ödeme için onayladığı anlamına gelir. | ||
| Neden önemli 'Ortalama Onay Süresi' KPI'ı için ve yönetim onayındaki Nereden alınır Tedarikçi Faturası (AP Bill) ile ilişkili 'Onay Geçmişini İncele' ( Yakala Onay eylemi yürütüldüğünde kaydedilir Event tipi explicit | |||
| Fatura Satın Alma Siparişi ile Eşleştirildi | Bir tedarikçi faturasının, bir Satın Alma Siparişi veya Alıcıyı dönüştürerek veya bağlayarak ne zaman oluşturulduğunu belirler. Bu faaliyet, 3 yönlü eşleşme verimliliğini doğrular. | ||
| Neden önemli 'İlk Geçiş Eşleşme Oranı' KPI'ı için ve Satın Alma Siparişine uyumluluk ile Satın Alma Siparişi dışı harcamaları belirlemek için kritik öneme sahiptir. Nereden alınır Bir Satın Alma işlemine bağlantıyı gösteren 'createdfrom' veya 'source_id' alanlarında boş olmayan bir değer için APBILL objesini kontrol edin. Yakala Kayıt Kimliğini Kaynak İşlem Kimliği ile Karşılaştırın Event tipi inferred | |||
| Fatura Taslağı Oluşturuldu | Sage Intacct'te Tedarikçi Faturası (AP Bill) record'unun usually bir Taslak (`Draft`) state'inde initial creation'ı. Bu, invoice `data`'sının approval veya posting `workflow`'larına enter etmeden önceki entry point'ini `capture` eder. | ||
| Neden önemli Süreç döngü süresi için en erken Nereden alınır Tedarikçi Faturası (APBILL) object denetim kaydında 'Oluşturma' ( Yakala APBILL kaydı ilk oluşturulduğunda kaydedilir Event tipi explicit | |||
| Ödeme Oluşturuldu | Payment (Check, ACH, EFT) record'unun invoice'e linked creation'ı. This, funds transfer'in system'de initiated olduğu moment'dir. | ||
| Neden önemli 'Ortalama Fatura Döngü Süresi' ve 'Zamanında Ödeme Yüzdesi' için primary Nereden alınır APBILL'e bağlı bir APPYMT kaydının oluşturulmasını belirleyin. Ödeme objesinin oluşturma tarihini kullanın. Yakala APPYMT kaydı oluşturulduğunda kaydedilir Event tipi explicit | |||
| Fatura Bekletmeden Çıkarıldı | Payment `block`'unun removal'ı, invoice'in payment selection'a proceed etmesini allowing eder. This, dispute veya issue'nun resolution'ını mark eder. | ||
| Neden önemli Bir Nereden alınır 'On Hold' Yakala Durum alanını öncesi/sonrası ile karşılaştırın Event tipi inferred | |||
| Fatura Bekletmeye Alındı | Bir payment `block`'unun veya 'Beklemede' (`On Hold`) `status`'ünün invoice'e application'ı. Bu, invoice'in payment processing için selected olmasını prevent eder. | ||
| Neden önemli 'Ödeme Engeli Çözüm Süresi'ni doğrudan etkiler ve ödeme hattındaki gecikmeleri görselleştirir. Nereden alınır 'On Hold' Yakala Durum alanını öncesi/sonrası ile karşılaştırın Event tipi inferred | |||
| Fatura Güncellendi | Fatura başlığı veya kalemlerinde ilk oluşturmadan sonra yapılan değişiklikleri kaydeder. Bu `activity`'nin sık görülmesi, manuel yeniden işleme veya `data` çıkarma hatalarını gösterir. | ||
| Neden önemli 'Temassız İşleme Oranı'nı hesaplamak ve verimsiz manuel Nereden alınır Tedarikçi Faturası (APBILL) denetim geçmişinde, kayda almadan önce bir user tarafından gerçekleştirilen 'Güncelleme' ( Yakala İşlem değiştirildiğinde kaydedilir Event tipi explicit | |||
| Fatura Reddedildi | Bir approver'ın faturayı reddederek taslak veya kısmen onaylanmış duruma geri çevirmesini kaydeder. Bu durum, bir process `loop`'una veya `data` kalitesi sorununa işaret eder. | ||
| Neden önemli
Nereden alınır Tedarikçi Faturası (AP Bill) ile ilişkili 'Onay Geçmişini İncele' ( Yakala Reddetme eylemi yürütüldüğünde kaydedilir Event tipi explicit | |||
| Ödeme İçin Fatura Seçildi | Invoice'in bir payment `batch`'ine veya selection `run`'ına inclusion'ı. Status typically 'Selected' olarak changes eder, other payment `run`'larından locking eder. | ||
| Neden önemli Ödeme Toplusu Optimizasyonu'nu ve ödeme kararı ile çekin fiilen kesilmesi arasındaki gecikmeyi analiz eder. Nereden alınır 'Pay Bills' ekran eylemi aracılığıyla APBILL durum değişikliğinden 'Seçildi' veya eşdeğerine çıkarım yapın. Yakala Durum alanını öncesi/sonrası ile karşılaştırın Event tipi inferred | |||
| Ödeme İptal Edildi | Previously generated bir payment'in cancellation'ı. Bu, invoice liability'yi re-opens eder ve payment process'in restart etmesini requires eder. | ||
| Neden önemli Ödemelerin oluşturulduğu ancak geri çekildiği ciddi aşağı yönlü süreç hatalarını belirleyin. Nereden alınır APYMT object için 'İptal' ( Yakala İptal işlemi gerçekleştiğinde kaydedilir Event tipi explicit | |||
| Ödeme Mutabakatı Yapıldı | Payment'in bankayı cleared ettiğinin confirmation'ı, Cash Management'daki bank reconciliation process'i during marked edilir. | ||
| Neden önemli Nakit akışı açısından 'Uçtan Uca Döngü Süresi'ni sağlar ve fonların hesaptan gerçekten çıktığını doğrular. Nereden alınır APPYMT objesindeki veya bağlantılı Nakit Yönetimi işlemindeki Mutabakat durumunu veya 'Cleared Date' alanını kontrol edin. Yakala Mutabakat durumunu karşılaştırın Event tipi inferred | |||
Veri Çekim Kılavuzları
Adımlar
AP Faturaları Görünümünü Hazırlayın Sage Intacct'te oturum açın ve Borç Hesapları (Accounts Payable) > Tüm sekmeler (All tab) > Faturalar (Bills) yolunu izleyin. 'Create New View' (Yeni Görünüm Oluştur) seçeneğini tıklayın. Görünümü 'Process Mining - Bills Extraction' olarak adlandırın. Şu sütunları sırasıyla seçin: Fatura Numarası (Doc Number), Satıcı Adı, Oluşturulma Tarihi, İşlem Tarihi, Vade Tarihi, Toplam Tutar, Durum (State), Para Birimi, PO Numarası, Departman, Oluşturan, Beklemede (On Hold), Açıklama, Kayıt No (Sistem Kimliği). Yalnızca işlenmiş verileri istiyorsanız 'Taslak' (Draft) faturaları hariç tutacak filtreler ayarlayın veya tam yaşam döngüsünü yakalamak için açık bırakın. Tarih aralığının analiz döneminizi kapsadığından emin olun (örneğin, Oluşturulma Tarihi = Son 365 Gün). Görünümü kaydedin.
AP Fatura Verilerini Dışa Aktarın 'Process Mining - Bills Extraction' görünümünü açın. 'Export' (Dışa Aktar) düğmesine tıklayın ve 'CSV' formatını seçin. Dosyayı 'AP_Bills.csv' olarak kaydedin.
İşlenen Ödemeler Görünümünü Hazırlayın Borç Hesapları (Accounts Payable) > Tüm sekmeler > İşlenen Ödemeler (Posted Payments) yolunu izleyin. 'Process Mining - Payments' adında yeni bir görünüm oluşturun. Sütunları seçin: Çek/Ödeme Numarası, Ödeme Tarihi, Satıcı Adı, İşlem Tutarı, Ödeme Yöntemi, Durum (İptal/Mutabık), Mutabakat Tarihi, Fatura Numarası (Referans), Kayıt No. Görünümü kaydedin.
Ödeme Verilerini Dışa Aktarın 'Process Mining - Payments' görünümünü açın. 'Export'a tıklayın ve 'CSV'yi seçin. Dosyayı 'AP_Payments.csv' olarak kaydedin.
Opsiyonel: İş Akışı Geçmişi için Denetim İzi (Audit Trail) Intacct'teki standart özel görünümler yalnızca güncel durumu ve son değişiklik tarihini gösterir. 'Fatura Reddedildi' gibi geçmiş olayları veya özel onay zaman damgalarını yakalamak için Denetim Geçmişini dışa aktarmalısınız. Raporlar (Reports) > Kurulum (Setup) > Denetim İzi (Audit Trail) yolunu izleyin. Denetim izini 'AP Bill' nesnesine bakacak şekilde yapılandırın. Eylem (Action) türlerini seçin: Ekle (Add), Değiştir (Modify), Onayla (Approve), Reddet (Decline). Bu raporu 'AP_Audit_History.csv' olarak dışa aktarın.
Dönüştürme Betiğini Çalıştırın Bu dosyaları birleştirmek için Sorgu bölümünde sağlanan Python betiğini kullanın. Betik; gerekli Event Log yapısını oluşturmak için 'AP_Bills.csv', 'AP_Payments.csv' ve isteğe bağlı 'AP_Audit_History.csv' dosyalarını işler.
Doğrulayın ve Formatlayın Oluşan 'Event_Log_Output.csv' dosyasını açın. 'EventTime' sütununun ISO 8601 formatında (YYYY-AA-GG HH:DD:SS) olduğundan emin olun. Tüm satırlar için 'InvoiceNumber' alanının dolu olduğunu doğrulayın. Son CSV dosyasını ProcessMind'a yükleyin.
Konfigürasyon
- Görünüm Yapılandırması: Görünüm ayarlarındaki 'Kayıt sayısı'nın tüm işlemleri kapsayacak kadar yüksek olduğundan emin olun veya limitler geçerliyse 'Sonraki Sayfa' (Next Page) dışa aktarma özelliğini kullanın.
- Tarih İşleme: Intacct, tarihleri kullanıcının yerel formatında (ör. AA/GG/YYYY) dışa aktarır. Dönüştürme betiği standart bir ABD formatı varsayar; kullanıcı profiliniz GG/AA/YYYY kullanıyorsa betiği buna göre ayarlayın.
- Alan İzinleri: Görünümü oluşturan kullanıcının Borç Hesapları Faturaları (Accounts Payable Bills) ve İşlenen Ödemeler (Posted Payments) üzerinde 'List' ve 'View' izinlerine sahip olduğundan emin olun.
- Geçmiş Veri Detayı: Audit Trail dışa aktarımı olmadan, 'Fatura Onaylandı' gibi etkinlikler 'Date Posted' (İşlem Tarihi) verisine dayanacaktır ve 'Fatura Güncellendi' etkinliği yalnızca son düzenleme zamanını yansıtacaktır.
- Filtreleme: Veri hacmini sınırlamak için 'Date Created' >= [Başlangıç Tarihi] filtresi uygulayın. İptal edilmiş (Voided) veya geçmiş kayıtları özellikle hariç tutmak istemediğiniz sürece 'Eyalet/Durum' (State) üzerinden filtreleme yapmaktan kaçının.
a Örnek Sorgu 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() Adımlar
Web Servis Oturumu Kurun: Bir oturum kimliği (session ID) almak için Sender ID, Şifre, Company ID, User ID ve Kullanıcı Şifrenizi kullanarak Sage Intacct Web Services 3.0 uç noktasında kimlik doğrulaması yapın.
Gerekli Nesneleri Belirleyin: Tam yaşam döngüsünü yakalamak için üç ana nesneden veri çekmelisiniz:
APBILL(Fatura Başlıkları),APPYMTDETAIL(Faturalara bağlı Ödeme Detayları) veAUDITTRAIL(Workflow geçmişi).Fatura Başlık Verilerini Çekin:
APBILLnesnesi üzerindereadByQueryyöntemini kullanın. Şu alanları seçin:RECORDNO,DOCNUMBER,WHENCREATED,WHENPOSTED,STATE,VENDORNAME,TOTALENTERED,PONUMBER,DUE_DATE.WHENCREATEDkullanarak tarih aralığına göre filtreleyin.Ödeme Verilerini Çekin:
APPYMTDETAILüzerindereadByQuerykullanın.RECORDNO,WHENCREATED,PAYMENTDATE,TRX_AMOUNT,DOCNUMBER(Ödeme Ref) veBILLRECORDNO(APBILL için Yabancı Anahtar) alanlarını seçin. Varsa mutabakat içinCLEAREDdurumunu veya tarihini çektiğinizden emin olun.Denetim Geçmişini (Audit History) Çekin:
AUDITTRAILnesnesi üzerindereadByQuerykullanın.OBJECTTYPE= 'APBILL' olanları filtreleyin. Bu işlem, başlık tablosunda zaman damgası olarak tutulmayan onay, reddetme, bekletme ve iptal olaylarını yakalamak için kritiktir.OBJECTKEY,LOGTYPE,MESSAGE,WHENDOCCURREDveUSERIDalanlarını seçin.Verileri Hazırlayın (Staging): Bu üç API çağrısından gelen XML/JSON yanıtlarını bir hazırlık veritabanına (SQL Server, Snowflake, Postgres vb.) yükleyin. API, tek bir çağrıda karmaşık birleştirme (join) veya birleşim (union) işlemlerini desteklemez, bu nedenle dönüştürme işlemi çıkarma sonrası (post-extraction) gerçekleşmelidir.
Dönüştürme Betiğini Çalıştırın: Hazırlık tablolarınıza karşı Sorgu bölümünde sağlanan SQL betiğini çalıştırın. Bu betik, tek bir event log oluşturmak için statik başlık verilerini işlemsel denetim günlüğüyle birleştirir.
Etkinlik Türlerini Doğrulayın: Audit Trail mesajlarında bulunan belirli anahtar kelimeler (Onaylandı, Reddedildi gibi) için çıktıyı kontrol edin ve karakter dizisi eşleştirme (string matching) mantığınızın Intacct yapılandırmanızdaki özel ifadeleri kapsadığından emin olun.
Tarihleri Formatlayın: Final dışa aktarma sırasında
EventTimesütununun ISO 8601 (YYYY-AA-GG THH:DD:SS) standartlarında formatlandığından emin olun.Event Log'u Dışa Aktarın: SQL sorgusunun sonucunu ProcessMind'a yüklemek üzere CSV veya Parquet dosyası olarak dışa aktarın.
Konfigürasyon
- API Endpoint: https://api.intacct.com/ia/xml/xmlgw.phtml
- Yöntem (Method):
readByQuery(Web Services 3.0) - Sayfa Boyutu: HTTP yükünü en aza indirmek için
pagesizedeğerini 1000 (önerilen maksimum) olarak ayarlayın. Sonraki sayfaları getirmek içinresultIdkullanarak bir döngü oluşturun. - Tarih Filtreleme: Veri çekme aralığını sınırlamak için
WHENCREATEDsütunlarına yönelik sorgu dizinizde standart SQL operatörlerini (>=, <, AND) kullanın (örneğin, Son 365 Gün). - İzinler: Veri çekme işlemini yapan kullanıcının Borç Hesapları (Accounts Payable) üzerinde 'List' ve 'View' izinlerine ve (genellikle Platform Services veya Company Admin ayarlarında bulunan) 'Audit Trail' iznine sahip olması gerekir.
- Nesne İlişkilendirme:
APBILL.RECORDNO,APPYMTDETAIL.BILLRECORDNOveAUDITTRAIL.OBJECTKEYile birleştirme yapmak için kullanılan birincil anahtardır.
a Örnek Sorgu 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)