Ticari Borçlar Ödeme Süreci Veri Şablonunuz
Ticari Borçlar Ödeme Süreci Veri Şablonunuz
- Sage Intacct için temel veri alanları
- Standardized process `milestone`'ları
- Belirli veri çıkarma talimatları
Ticari Alacaklar Tahsilat Süreci Öznitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Aktivite Adı ActivityName | Fatura süreç döngüsünde (lifecycle) gerçekleşen belirli bir eylem veya olay (event). | ||
| Açıklama Bu Neden Önemli?dir? Süreç haritasındaki adımları tanımlar ve herhangi bir Process Mining analizi için zorunludur. 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 | Tedarikçi fatura belgesi için benzersiz tanımlayıcı (unique tanımlayıcı). | ||
| Açıklama Invoice Number, bu process için definitive Neden Önemli?dir? 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 aktivitenin gerçekleştiği belirli tarih ve saat. | ||
| Açıklama Bu Neden Önemli?dir?
Nereden Alınır?? Source table'lardaki transaction creation veya modification zaman damgası (zaman damgası)'leri Örnekler::::::: 2023-10-12T08:30:00Z2023-10-12T14:45:12Z2023-10-15T09:15:00Z | |||
| Kaynak Sistem SourceSystem | Olayın kaynaklandığı sistemin adı. | ||
| Açıklama Bu Neden Önemli?dir? Ö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 `zaman damgası (zaman damgası)dır. | ||
| Açıklama Bu Neden Önemli?dir? 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?dir? Kurumsal ayrıntılı inceleme ve kök neden analizine sunar. Nereden Alınır?? Sage Intacct Tedarikçi Faturası (AP Bill) object'i, DEPTID veya DEPTNAME Örnekler::::::: BT Enerji ve AltyapıiPazarlamaOperasyonlar | |||
| Fatura Durumu InvoiceStatus | Invoice'in system'deki current `lifecycle state`'i. | ||
| Açıklama Bu Neden Önemli?dir?
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?dir? 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?dir? Finansal etki analizi ve risk puanlaması için büyük önem taşır. Nereden Alınır?? Sage Intacct Tedarikçi Faturası (AP Bill) object'i, TOTALENTERED veya TOTALDUE Örnekler::::::: 1500.00250.5010000.00 | |||
| Ödeme Tarihi PaymentDate | Ödemenin yapıldığı tarih. | ||
| Açıklama Bu Neden Önemli?dir? Ç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 | |||
| Oluşturan Kullanıcı CreatedBy | Invoice'i entered eden person'ın user ID'si. | ||
| Açıklama Bu Neden Önemli?dir? Kaynak performans analizine sunar 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 | |||
| Purchase Order Number PurchaseOrderNumber | Related purchase order'ın `reference number`'ı. | ||
| Açıklama Bu Neden Önemli?dir? 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?dir? Tedarikçi performansı ve davranışına göre analizi segmentlere ayırmak için büyük önem taşır. Nereden Alınır?? Sage Intacct Tedarikçi Faturası (AP Bill) object'i, VENDORNAME Örnekler::::::: Acme CorpGlobal Enerji ve Altyapı A.Ş.Office Depot | |||
| Vade Tarihi DueDate | Payment için contractual `deadline`. | ||
| Açıklama Bu Neden Önemli?dir? 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?dir? Müdahale gerektiren acil darboğazları belirler. Nereden Alınır?? Sage Intacct Tedarikçi Faturası (AP Bill) object'i, ONHOLD Örnekler::::::: truefalse | |||
| Geç Ödendi mi IsPaidLate | Ödeme tarihinin vade tarihini aşıp aşmadığını gösteren işaret. | ||
| Açıklama Bu Neden Önemli?dir? SLA violation'ları için filtering'i simplify eder. Nereden Alınır?? Calculated: ÖdemeTarihi > VadeTarihi Örnekler::::::: truefalse | |||
| İş Birimi BusinessUnit | Invoice ile associated legal entity veya location. | ||
| Açıklama Bu Neden Önemli?dir? Ç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 Koşulları PaymentTerms | Payment timing ve discount'lar için agreed-upon condition'lar. | ||
| Açıklama Bu Neden Önemli?dir? 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ınalma Siparişi Destekli mi IsPOBacked | Faturanın bir Satınalma Siparişi ile ilişkili olup olmadığını gösteren işaret. | ||
| Açıklama Bu Neden Önemli?dir? Süreç yolu analizi için temel ayrıştırıcı. Nereden Alınır?? Calculated: PurchaseOrderNumber boş değil Örnekler::::::: truefalse | |||
Ticari Alacaklar Tahsilat 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?dir? Döngü süresi analizinde 'Veri Girişi' süresini 'Onay' süresinden ayırmak için büyük önem taşır. 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?dir? 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?dir? 'Ortalama Onay Süresi' KPI'ı için ve yönetim onayındaki darboğazları belirlemek için büyük önem taşır. 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ınalma Siparişi ile Eşleştirildi | Bir tedarikçi faturasının, bir Satınalma 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?dir? 'İlk Geçiş Eşleşme Oranı' KPI'ı için ve Satınalma Siparişine uyumluluk ile Satınalma Siparişi dışı harcamaları belirlemek için büyük önem taşır. 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?dir? Süreç döngü süresi için en erken zaman damgası (zaman damgası)'i belirler ve yükümlülük kaydının başlangıcını tanımlar. 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?dir? 'Ortalama Fatura Döngü Süresi' ve 'Zamanında Ödeme Yüzdesi' için primary `zaman damgası (zaman damgası)dır. 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 Beklemeye 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?dir? 'Ö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 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?dir? Bir 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?dir? '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?dir?
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 Geçersiz Kılındı | Previously generated bir payment'in cancellation'ı. Bu, invoice liability'yi re-opens eder ve payment process'in restart etmesini requires eder. | ||
| Neden Önemli?dir? Ö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 İç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?dir? Ö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 Mutabakatı Yapıldı | Payment'in bankayı cleared ettiğinin confirmation'ı, Cash Management'daki bank reconciliation process'i during marked edilir. | ||
| Neden Önemli?dir? Nakit akışı açısından 'Uçtan Uca Döngü Süresi'ni sunar 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 Çıkarma 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. 'Yeni Oluştur 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 süreç 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ışanş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, Kullanıcı Kimliği ve Kullanıcı Şifrenizi kullanarak Sage Intacct Web Services 3.0 uç noktasında kimlik doğrulaması yapın.
Gerekli Nesneleri Belirleyin: Tam süreç 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ı (zaman damgası) olarak tutulmayan onay, reddetme, bekletme ve iptal olaylarını yakalamak için büyük önem taşır.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ışanş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
(EventTime)sü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 temel rol oynar.
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)