Borç Hesapları Ödeme İşleme Veri Template'iniz
Borç Hesapları Ödeme İşleme Veri Template'iniz
- Tedarikçi ve ödeme analizi için temel `öznitelikler`
- Ödeme döngüsü için temel süreç dönüm noktaları
- SAP S/4HANA sistemleri için uzmanlaşmış veri çekme mantığı
Tedarikçi Ödeme Süreçleri Nitelikleri
| Ad | Açıklama | ||
|---|---|---|---|
| Aktivite Activity | Fatura için kaydedilen belirli görev veya event durum değişikliği. | ||
| Açıklama Bu öznitelik, faturanın yaşam döngüsü boyunca meydana gelen farklı süreç adımlarını temsil eder. Fatura oluşturma, kaydetme, engelleme, onaylama ve ödeme kapatma gibi event'leri yakalar. Aktivite adları, kaynak sistemde bulunan işlem kodlarından, değişiklik log girişlerinden veya workflow durum güncellemelerinden türetilir. Analiz için, bu alan süreç akış varyantını haritalamak için kritiktir. Process mining motorunun adımların sırasını görselleştirmesine, yeniden işleme döngülerini belirlemesine ve sürecin standart mutlu yoldan nerede saptığını belirlemesine olanak tanır. Event log'unun temel bileşenidir. Neden önemli Süreç haritasındaki Nereden alınır İşlem Kodlarından (TCODE) veya Değişiklik Belgesi Başlığından (CDHDR) ve Kaleminden (CDPOS) türetilmiştir Örnekler Fatura MuhasebeleştirildiÖdeme Engeli UygulandıÖdeme Çalıştırması GerçekleştirildiFatura Mutabakatı Yapıldı | |||
| Fatura Numarası InvoiceNumber | İşlenen tedarikçi faturası için benzersiz tanımlayıcı. | ||
| Açıklama Fatura Numarası, SAP S/4HANA sistemi içinde ödenecek bir kalemin yaşam döngüsünü takip etmek için birincil anahtardır. Özellikle faturanın genel deftere kaydedilmesiyle oluşturulan muhasebe belge numarasını ifade eder. Standart SAP terminolojisinde bu, belirli bir Şirket Kodu ve Mali Yıl içinde bulunan Belge Numarasına (BELNR) karşılık gelir. Süreç analizinde, bu öznitelik Case ID olarak hizmet eder. Faturanın ilk alımından ve park edilmesinden, çeşitli onay engelleri ve değişikliklerine, nihai kapatma ödemesine kadar tüm farklı aktiviteleri birbirine bağlar. Event'leri bu tanımlayıcıya göre gruplamak, analistlerin her ödeme yükümlülüğünün uçtan uca tüm geçmişini yeniden yapılandırmasına olanak tanır. Neden önemli Ödeme süreç akışının uçtan uca yeniden yapılandırılmasını sağlayan kesin Vaka ID'si olarak hizmet eder. Nereden alınır SAP Tablosu BKPF (Muhasebe Belgesi Başlığı) BELNR alanı veya ACDOCA BELNR alanı Örnekler 1900000523510000289119000006015100003002 | |||
| Olay Zamanı EventTime | Aktivitenin gerçekleştiği kesin timestamp. | ||
| Açıklama Event Time, bir aktivitenin SAP database'ine kaydedildiği belirli tarih ve saati kaydeder. Bir case içindeki event'leri sıralamak için gerekli zamansal boyutu sağlar. Bu timestamp genellikle sistem log'larındaki veya belge başlıklarındaki CPU Tarihi ve CPU Saati alanlarının birleştirilmesiyle oluşturulur. Analizde, bu öznitelik döngü sürelerini, süreyi ve verimi hesaplamak için elzemdir. Fatura alımından nihai onaya kadar geçen süre gibi adımlar arasındaki zaman boşluklarının ölçülmesini sağlar, bu da bottleneck'leri belirlemek ve Ortalama Fatura Onay Süresi gibi KPI performansını değerlendirmek için çok önemlidir. Neden önemli Olayların kronolojik sırasını sağlar ve zaman tabanlı tüm performans hesaplamalarının temelini oluşturur. Nereden alınır SAP Tablosu BKPF CPUDT (Giriş Tarihi) ve CPUTM (Giriş Saati) alanı veya CDHDR UDATE ve UTIME alanları Örnekler 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Kaynak Sistem SourceSystem | Data'ların kaynaklandığı SAP S/4HANA örneğinin tanımlayıcısı. | ||
| Açıklama Bu öznitelik, süreç data'sının çekildiği belirli ERP kurulumunu veya istemcisini tanımlar. Birden fazla SAP örneği veya paralel çalışan legacy sistemlerin olduğu ortamlarda, bu alan data lineage'inin korunmasını sağlar ve sistemler arası karşılaştırmalara olanak tanır. Analiz için, bu alan üst düzey bir filtre görevi görür. Farklı bölgesel sistem kurulumları arasında performansı benchmarking yaparken veya sistem geçiş projeleri sırasında data tutarlılığını doğrulamak için analistlerin data'yı ayırmasına yardımcı olur. Sistem yapılandırmasına atfedilen herhangi bir süreç varyasyonunun doğru bir şekilde bağlamlandırılmasını sağlar. Neden önemli Çoklu sistem ortamlarında Nereden alınır SAP kurulum bağlamından Sistem Kimliği (SY-SYSID) Örnekler SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Son Veri Güncellemesi LastDataUpdate | Kaydın en son ne zaman çekildiğini veya yenilendiğini gösteren timestamp. | ||
| Açıklama Son Analizde, bu Neden önemli Kullanıcıları Nereden alınır ETL / çıkarma süreci tarafından oluşturuldu Örnekler 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Belge Türü DocumentType | Muhasebe belgesini sınıflandırır (örn. Tedarikçi Faturası, Ödeme, Alacak Dekontu). | ||
| Açıklama Belge Türü, SAP'de muhasebe işlemini sınıflandıran iki karakterli bir koddur. Yaygın türler arasında Tedarikçi Faturaları için 'KR', Tedarikçi Ödemeleri için 'KZ' ve Brüt Fatura Alımı için 'RE' bulunur. Belgenin numara aralığını ve alan durumunu belirler. Analizde, bu öznitelik süreç kapsamını filtrelemek için kullanılır. Örneğin, bir analist yalnızca giden ödemelerin verimliliğine odaklanmak için Kredi Notlarını hariç tutmak isteyebilir. Ayrıca işlenen işlem türlerinin karışımını belirlemeye yardımcı olur ve Süreç Varyantı Karmaşıklığı dashboard'unu destekler. Neden önemli Vakayı kategorize eder (fatura veya alacak dekontu), filtrelenmiş analizlere olanak tanır. Nereden alınır SAP Tablosu BKPF BLART alanı Örnekler KRREKZKG | |||
| Fatura Tutarı InvoiceAmount | Belge para birimindeki faturanın toplam brüt tutarı. | ||
| Açıklama Bu öznitelik, kaynak belgede kaydedildiği gibi faturanın finansal değerini yansıtır. Tedarikçiye ödenmesi gereken yükümlülüğü temsil eder. SAP S/4HANA'da bu genellikle Belge Para Birimi Tutarı alanında depolanır. Analizde, Fatura Tutarı işi önceliklendirmek için kullanılır. Manuel Temas Noktası Dağılımı gibi dashboard'lar, yüksek çaba gerektiren manuel aktivitelerin düşük değerli faturalar üzerinde boşa harcanıp harcanmadığını vurgulamak için bu alanı kullanır. Kuruluşun optimizasyon çabalarını, süreç başarısızlıklarının daha büyük finansal risk taşıdığı yüksek değerli işlemlere odaklamasına olanak tanır. Neden önemli Vakanın finansal ağırlığını sağlar, yüksek değerli süreç verimsizliklerini önceliklendirmek için esastır. Nereden alınır SAP Tablosu BKPF veya BSEG WRBTR alanı Örnekler 1500.00250.5010000.00 | |||
| Gecikmiş Ödeme mi? IsLatePayment | Ödemenin net vade tarihinden sonra yapılıp yapılmadığını gösteren bir boolean bayrak. | ||
| Açıklama Bu hesaplanmış öznitelik, Kapanış Tarihi Net Vade Tarihinden kesinlikle büyükse 'doğru' olarak değerlendirilir. Süreç performansı için ikili bir sınıflandırıcı görevi görür. Analizde, bu flag Geç Ödeme Ceza Sıklığı KPI'si için uyumsuz case sayısını saymak için kullanılır. Görselleştirme katmanında karmaşık tarih matematiği gerektirmek yerine 'Doğru' değerlerin basit bir sayımına izin vererek dashboard oluşturmayı basitleştirir. Neden önemli Zamanında performans KPI'larının hesaplanmasını basitleştirir. Nereden alınır Hesaplanan: Mahsup Tarihi > Net Vade Tarihi Örnekler truefalse | |||
| Hesaba Geçiş Tarihi ClearingDate | Faturanın ödeme ile kapatıldığı tarih. | ||
| Açıklama Kapanış Tarihi, tedarikçi hesap defterindeki açık kalemin ne zaman kapatıldığını, genellikle bir ödeme çalıştırması veya manuel ödeme kaydı ile kaydeder. Bu, yükümlülüğün sona erdiğini etkili bir şekilde işaretler. Analizde, bu öznitelik sürecin nihai döngü süresini hesaplamak için kullanılır. 'Ödeme Kapatıldı' aktivitesi için kullanılan timestamp'tir ve zamanında ödeme performansını belirlemek için Net Vade Tarihi ile karşılaştırılır. Doğrudan Ödeme Kapanış Verimliliği dashboard'una beslenir. Neden önemli Ödeme sürecinin tamamlandığını işaretler ve ödeme zamanlamasını belirlemek için kullanılır. Nereden alınır SAP Tablosu BSEG veya AUGDT AUGDT alanı Örnekler 2023-11-012023-11-15 | |||
| Kullanıcı Adı UserName | Belirli aktiviteyi gerçekleştiren kullanıcının kimliği. | ||
| Açıklama Kullanıcı Adı, bir süreç adımını yürütmekten sorumlu kişinin veya sistem aracısının login ID'sini yakalar. Bu, data giren manuel bir kullanıcı veya otomatik görevleri gerçekleştiren bir arka plan job ID'si (örn. 'BATCH_USER') olabilir. Analizde, bu öznitelik Aktivite Otomasyon Oranı'nın hesaplanmasına olanak tanır. İnsan kullanıcılar ve sistem hesapları arasında ayrım yaparak, analistler süreçteki otomasyon seviyesini ölçebilir. Ayrıca ekipler arası iş yükünü değerlendirmek için Manuel Temas Noktası Dağılımı dashboard'unda da kullanılır. Neden önemli Manuel ve otomatik işler arasında ayrım yaparak otomasyon oranı hesaplamalarını mümkün kılar. Nereden alınır SAP Tablosu BKPF USNAM alanı veya CDHDR USERNAME alanı Örnekler BSMITHWF-BATCHRJONES | |||
| Net Vade Tarihi NetDueDate | Faturanın cezaları önlemek için ödenmesi gereken hesaplanmış tarih. | ||
| Açıklama Net Vade Tarihi, ödeme için son tarihtir. Temel Tarihe maksimum ödeme vadesi günleri eklenerek hesaplanır. Bazen açıkça depolanmış olsa da, analiz görünümlerinde genellikle hesaplanmış bir alandır. Analizde, bu, Geç Ödeme ve Ceza Takipçisi için birincil kıyas noktasıdır. Gerçek Kapanış Tarihini Net Vade Tarihi ile karşılaştırmak, 'Geç Ödenen Günler' metriğini oluşturur, bu da AP ekibinin verimliliğini ve tedarikçi sürtünme riskini ölçmeye yardımcı olur. Neden önemli Süreç için hedef son teslim tarihidir; bunu kaçırmak kredi derecelendirmesini etkiler ve maliyetlere yol açar. Nereden alınır Hesaplanan: Temel Tarih + Maksimum Ödeme Süresi Günleri (ZBD1T/ZBD2T/ZBD3T) Örnekler 2023-11-302023-12-01 | |||
| Ödeme Engeli Nedeni PaymentBlockReason | Bir faturanın neden ödeme için engellendiğini gösteren kod. | ||
| Açıklama Bu öznitelik, otomatik ödeme çalıştırmasının faturayı almasını engelleyen, faturaya uygulanan belirli neden kodunu içerir. Örnekler arasında Ödeme İçin Engellendi için 'A', Fatura Doğrulama için 'R' veya kullanıcılar tarafından belirlenen manuel engeller bulunur. Analizde, bu alan Manuel Ödeme Engeli Analizi dashboard'u için birincil itici güçtür. Farklı engelleme nedenlerinin sıklığını toplayarak, kuruluş, ödeme sürecini durduran sık fiyat varyansları veya eksik mal alımları gibi sistemik sorunları teşhis edebilir. Neden önemli Süreç duraklamalarının belirli nedenini belirleyerek hedefe yönelik temel neden analizine olanak tanır. Nereden alınır SAP Tablosu BSEG ZLSPR alanı Örnekler ABR* | |||
| Ödeme Vadeleri PaymentTerms | Ödeme ve indirimler için üzerinde anlaşmaya varılan koşulları temsil eden anahtar. | ||
| Açıklama Ödeme Koşulları, bir faturanın ne zaman vadesi geleceğini ve erken ödeme için herhangi bir nakit indirimi uygulanıp uygulanmayacağını tanımlar. Bu kod (örn. 'Z001'), 'Net 30' veya '2% 10, Net 30' gibi kurallarla eşleşir. Tedarikçi Master Data'sından Faturaya kopyalanır ancak manuel olarak değiştirilebilir. Analizde, bu öznitelik Erken Ödeme İndirimi Optimize Edici ve Tedarikçi Ödeme Koşulları Uyumluluğu dashboard'larının merkezindedir. Sistem'in başlangıç vade tarihini hesaplamasına ve ödemenin tasarruf elde etmek için en uygun zaman diliminde yapılıp yapılmadığını belirlemesine olanak tanır. Neden önemli İskonto analizi için anahtar olan beklenen zaman çizelgesini ve finansal teşvikleri belirler. Nereden alınır SAP Tablosu BSEG ZTERM alanı Örnekler Z001NT300001 | |||
| Şirket Kodu CompanyCode | Bilanço ve Kar/Zarar tablosunun oluşturulduğu organizasyon birimi. | ||
| Açıklama Şirket Kodu, işletme içindeki bağımsız muhasebe varlığını temsil eder. Dış muhasebede merkezi organizasyonel birimdir ve finansal data'yı yapılandırmak için kullanılır. Her fatura tam olarak bir Şirket Koduna atanır. Analizde, bu öznitelik KPI'ların yasal varlık veya bölgeye göre segmentlere ayrılmasına olanak tanır. Farklı iştirakler arasında tedarikçi hesapları ekiplerinin verimliliğini karşılaştırmak için dashboard'larda kullanılır. Örneğin, belirli bir şubenin kurumsal standarda kıyasla daha yüksek manuel ödeme engeli oranına sahip olup olmadığını belirlemeye yardımcı olur. Neden önemli Süreci tüzel kişiliğe göre segmentlere ayırarak, dahili Nereden alınır SAP Tablosu BKPF BUKRS alanı Örnekler US01DE1010002000 | |||
| Tedarikçi Numarası VendorNumber | Fatura ile ilişkili tedarikçi için benzersiz tanımlayıcı. | ||
| Açıklama Tedarikçi Numarası, SAP alt defterindeki belirli alacaklı hesabına karşılık gelir. Faturayı ödeme koşulları, banka detayları ve iletişim bilgilerini içeren master data ile ilişkilendirir. S/4HANA'da, bu genellikle Business Partner konseptiyle bağlantılıdır ancak birçok tabloda eski alan adı LIFNR'yi korur. Analizde, bu öznitelik Tedarikçi Ödeme Koşulları Uyumluluğu dashboard'u için temeldir. Analistlerin süreç performansını tedarikçiye göre toplamasına, sürekli olarak engellere, fiyat varyanslarına veya gecikmelere neden olan belirli tedarikçileri belirlemesine olanak tanır. Stratejik kaynak bulma kararlarını ve tedarikçi ilişkileri yönetimini destekler. Neden önemli Gecikmelerin temel nedenlerini belirlemek için kritik olan tedarikçi bazında performans toplamasını sağlar. Nereden alınır SAP Tablosu BKPF LIFNR alanı veya ACDOCA LIFNR alanı Örnekler 100050VEND-US-99200400 | |||
| Temassız mı IsTouchless | Faturanın manuel müdahale olmadan işlenip işlenmediğini gösteren bir boolean bayrak. | ||
| Açıklama Bu öznitelik, bir case için event stream'i analiz ederek hesaplanır. Case yalnızca otomatik aktiviteler (örn. 'system' kullanıcısı, belirli arka plan TCODE'ları) içeriyorsa ve manuel değişiklik veya engelleme yoksa, temassız olarak işaretlenir. Analizde, bu, Temassız Fatura Oranı KPI'si için temel metriktir. Kuruluşun otomasyon girişimlerinin başarısını takip etmesine ve hangi case türlerinin (örn. Tedarikçiye veya Bölgeye göre) insan teması olmadan sistemden başarıyla aktığını belirlemesine olanak tanır. Neden önemli Süreç otomasyonu ve verimliliğinin birincil ölçüsüdür. Nereden alınır Faaliyetlerin sırası ve kullanıcı türlerine göre hesaplanır Örnekler truefalse | |||
| Kaybedilen İndirim Tutarı DiscountLostAmount | Mevcut olan ancak alınmayan nakit indirimlerinin parasal değeri. | ||
| Açıklama Bu hesaplanmış öznitelik, 'masada kalan para'yı temsil eder. Ödemenin indirim son tarihinden sonra yapılıp yapılmadığı kontrol edilerek ve eğer öyleyse, fatura tutarına uygulanan kaçırılan indirim yüzdesinin değeri hesaplanarak türetilir. Analizde, bu Erken Ödeme İndirimi Optimize Edici için kritik bir finansal metriktir. Verimsizliğin maliyetini somut para birimiyle ölçerek, süreç iyileştirmeleri için ikna edici bir iş gerekçesi sunar. Neden önemli Süreç gecikmelerinden kaynaklanan doğrudan finansal kaybı nicelleştirir. Nereden alınır Hesaplanan: Eğer Mahsup Tarihi > İskonto Tarihi ise, Fatura Tutarı * İskonto % Örnekler 30.000.00150.00 | |||
| Mali Yıl FiscalYear | Faturanın ait olduğu mali yıl. | ||
| Açıklama Mali Yıl, finansal raporlama için kullanılan bir zaman dilimidir. Şirket Kodu ve Belge Numarası ile birlikte, SAP'de bir finansal belge için bileşik birincil anahtarı oluşturur. Analizde, bu, case'leri benzersiz bir şekilde tanımlamak için teknik bir gerekliliktir, ancak aynı zamanda yıllık raporlamayı da destekler. 'Fatura Numarası' Case ID'sinin onlarca yıllık data geçmişi boyunca benzersiz kalmasını sağlar. Neden önemli SAP FI'da benzersiz case tanımlaması için teknik gereklilik. Nereden alınır SAP Tablosu BKPF GJAHR alanı Örnekler 20232024 | |||
| Nakit İskonto Günleri 1 CashDiscountDays1 | İlk nakit indirimin mevcut olduğu temel tarihten itibaren gün sayısı. | ||
| Açıklama Bu öznitelik, en uygun ödeme koşulları için zaman aralığını tanımlar (örn. '2% 10, Net 30'daki '10'). Fatura kaleminde depolanan koşullardan gelir. Analizde, bu, Erken Ödeme İndirimi Optimize Edici için 'Hedef Tarih'i belirlemeye yardımcı olur. Fatura bu pencere içinde kapatılırsa, indirim gerçekleşir. Bu alan, yavaş işlem döngülerinin fırsat maliyetini ölçmeye yardımcı olur. Neden önemli Finansal tasarruf için fırsat penceresini tanımlar. Nereden alınır SAP Tablosu BSEG ZBD1T alanı Örnekler 10140 | |||
| Nakit İskonto Yüzdesi 1 CashDiscountPercentage1 | İlk indirim süresi içinde ödenirse mevcut indirim yüzdesi. | ||
| Açıklama Bu öznitelik, tedarikçi tarafından erken ödeme için sunulan finansal teşvik oranını temsil eder (örn. '2% 10'daki '2'). Analizde, bu 'Potansiyel Nakit İndirimi' değerini hesaplamak için kullanılır. Bu yüzdeyi Fatura Tutarı ile çarparak, dashboard'lar süreç verimsizlikleri nedeniyle masada kalan toplam parayı görselleştirebilir ve otomasyon için iş gerekçesini destekleyebilir. Neden önemli Potansiyel tasarruf oranını nicelleştirir, ROI hesaplamaları için esastır. Nereden alınır SAP Tablosu BSEG ZBD1P alanı Örnekler 2.03.00.0 | |||
| Para Birimi Currency | Fatura tutarıyla ilişkili para birimi kodu. | ||
| Açıklama Para Birimi özniteliği, Fatura Tutarının USD, EUR veya GBP gibi birimini belirtir. Finansal değerlerin doğru yorumlanmasına olanak tanır ve uluslararası şirket kodları arasında data toplarken elzemdir. Analizde, bu alan finansal KPI'ların doğru bir şekilde hesaplanmasını sağlar. Genellikle küresel dashboard'lar için değerleri bir raporlama para birimine normalleştirmek için kullanılır. Bu öznitelik olmadan, Toplam Harcama veya Ortalama Fatura Değeri gibi toplu metrikler çoklu para birimi ortamında anlamsız olurdu. Neden önemli Finansal tutarlar için bağlam sağlar, doğru küresel raporlama için esastır. Nereden alınır SAP Tablosu BKPF WAERS alanı Örnekler USDEURGBPJPY | |||
| Satınalma Belgesi PurchasingDocument | Fatura ile ilişkili Satınalma Siparişi numarası. | ||
| Açıklama Bu öznitelik, faturayı tedarik sürecine bağlar. Faturanın eşleştirildiği Satınalma Siparişi (PO) numarasını içerir. Tüm faturaların (örn. çeşitli giderler) bir PO referansı olmayacaktır. Analizde, bu alan Üç Yönlü Eşleştirme Oranı Analizi için hayati öneme sahiptir. Analistlerin PO destekli faturaları, genellikle çok farklı onay workflow'larına sahip olan PO dışı faturalardan ayırmasına olanak tanır. Ayrıca Tedarikçi Ödeme data'sını Satınalma data'sıyla bağlayarak uçtan uca process mining'i kolaylaştırır. Neden önemli AP'yi Satın Alma'ya bağlayarak, 3 yönlü eşleşme analizini ve süreç uzantısını mümkün kılar. Nereden alınır SAP Tablosu BSEG EBELN alanı Örnekler 45000012344500009876 | |||
| Temel Tarih BaselineDate | Ödeme koşullarının uygulandığı ve vade tarihlerinin hesaplandığı tarih. | ||
| Açıklama Temel Tarih, net vade tarihini ve nakit indirim sürelerini hesaplamak için başlangıç noktasıdır. Genellikle yapılandırmaya ve tedarikçi master data'sına bağlı olarak fatura tarihi veya kayıt tarihidir. Analizde bu tarih, 'Gecikmiş mi' durumunu hesaplamak için teknik bir ön koşuldur. Temel tarihteki hatalar genellikle erken ödemelere (cash flow etkisi) veya geç ödemelere (ceza etkisi) yol açar. Bu tarihin doğruluğunu doğrulamak, Tedarikçi Ödeme Koşulları Uyumluluğu analizinin bir parçasıdır. Neden önemli Tüm vade tarihi hesaplamaları için dayanak noktasıdır. Nereden alınır SAP Tablosu BSEG ZFBDT alanı Örnekler 2023-10-012023-10-15 | |||
Tedarikçi Ödeme Süreçleri Etkinlikleri
| Aktivite | Açıklama | ||
|---|---|---|---|
| Fatura Muhasebeleştirildi | Genel Defterdeki yükümlülüğün resmi kaydını temsil eder. Bu aktivite, BKPF tablosundaki oluşturma timestamp'inden veya ACDOCA tablosundaki giriş tarihinden türetilir. | ||
| Neden önemli Bu, finansal zaman çizelgesi için birincil başlangıç noktasıdır, vade tarihleri ve yaşlandırma analizi için temel oluşturur. Nereden alınır BKPF tablosu, CPUDT (Giriş Tarihi) ve CPUTM (Giriş Saati) kullanılarak. Yakala BKPF kaydı oluşturulduğunda günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Belgesi Oluşturuldu | Bankayı alacaklandıran ve tedarikçiyi borçlandıran muhasebe belgesinin oluşturulması. Bu, BKPF'de bir ödeme belgesi türü (örn. ZP, KZ) ile bulunur. | ||
| Neden önemli Ödemenin finansal gerçekleşmesi, Ödenecek Gün Sayısı (DPO) hesaplamak için kullanılır. Nereden alınır BKPF tablosu, ödemelere özgü Belge Tipi (BLART) ile filtrelenmiş. Yakala BKPF ödeme belgesi oluşturulduğunda günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Çalıştırması Gerçekleştirildi | Para transferi talimatlarının oluşturulduğu ödeme çalıştırmasının yürütülmesini temsil eder. Bu, REGUH veya REGUP tablolarındaki durum güncellemesi aracılığıyla izlenir. | ||
| Neden önemli Ödeme gruplama sürecinin verimliliğini analiz etmek için kritik olan, ödeme için operasyonel taahhüt. Nereden alınır REGUH tablosu, genellikle çalıştırma tarihi ve kimliği ile ilişkilidir. Yakala Ödeme Çalışması durumu güncellendiğinde günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Engeli Kaldırıldı | Daha önce uygulanan bir ödeme bloğunun kaldırıldığını, faturanın ödeme için serbest bırakıldığını gösterir. Bu, BSEG'deki ZLSPR alanı bir değerden `null` veya boş hale geldiğinde belirlenir. | ||
| Neden önemli Genellikle açık Nereden alınır CDPOS ve CDHDR tabloları, BSEG-ZLSPR'nin boş hale gelmesini arar. Yakala CDPOS kayıtları ZLSPR kaldırıldığında günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Engeli Uygulandı | Fatura kalemine bir ödeme engeli konulduğunu ve bu engelin ödeme çalıştırması tarafından alınmasını engellediğini gösterir. Bu, BSEG tablosundaki ZLSPR alanındaki değişikliklerin değişiklik belgeleri aracılığıyla izlenmesiyle yakalanır. | ||
| Neden önemli Bloklar, gecikmiş ödemelerin ve süreç sürtüşmesinin temel nedenidir ve Manuel Ödeme Bloğu Analizi Nereden alınır CDPOS ve CDHDR tabloları (Değişiklik Belgeleri), BSEG-ZLSPR alanındaki güncellemeleri arar. Yakala CDPOS kayıtları ZLSPR'de değiştiğinde günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Gerçekleşti | Tedarikçi hesabındaki açık kalemin ödemeye karşı mahsup edildiği nihai mutabakatı işaretler. BSEG tablosundaki AUGDT (Mahsup Tarihi) alanından yakalanmıştır. | ||
| Neden önemli Sürecin son durumu, yaşam döngüsünün tamamlandığını ve defterlerin dengelendiğini gösterir. Yüksek manuel kapanış oranları, mutabakat verimsizliklerini gösterir. Nereden alınır BSEG tablosu, AUGDT (Mahsup Tarihi) alanı. Yakala AUGDT alanı doldurulduğunda günlüğe kaydedildi Event tipi explicit | |||
| Fatura Park Edildi | Bir faturanın SAP'ye girildiğini ancak henüz Genel Muhasebe'ye kaydedilmediğini gösterir; genellikle ön `data` girişi için kullanılır. Bu, VBKPF tablosundan açıkça yakalanır veya BKPF'deki belgelerin kaydedilmiş duruma geçmeden önce `parked` durum koduyla tanımlanmasıyla belirlenir. | ||
| Neden önemli Park etme, veri giriş aşamasının başlangıcını gösterir ve fatura alımı ile finansal yükümlülük arasındaki gecikme süresini ölçmeye yardımcı olur. Nereden alınır Park edilmiş belgelerin header data'sı için VBKPF tablosu veya belirli belge durumu (BSTAT = V) ile BKPF. Yakala VBKPF girişi oluşturulduğunda günlüğe kaydedildi Event tipi explicit | |||
| Fatura Ters Kaydedildi | Fatura belgesinin tersine çevrildiğini veya iptal edildiğini gösterir. BKPF tablosundaki STBLG (İptal Belgesi) alanı kontrol edilerek yakalanır. | ||
| Neden önemli Yeniden işleme ve süreç başarısızlığını temsil eder, israfı ve potansiyel mükerrer çabayı belirler. Nereden alınır BKPF tablosu, STBLG alanı boş değil. Yakala STBLG alanı doldurulduğunda günlüğe kaydedildi Event tipi explicit | |||
| Fatura Vadesi | Faturanın net vade tarihine ulaştığı anı temsil eden hesaplanmış bir zaman damgası. Bu, BSEG tablosunda bulunan temel tarihe ödeme koşulları günlerinin eklenmesiyle türetilmiştir. | ||
| Neden önemli Zamanında Ödeme Performansı ve Gecikme Cezası Takipçisi için bir referans noktası görevi görür. Nereden alınır Hesaplanan: BSEG-ZFBDT (Temel Tarih) + BSEG-ZBD1T/ZBD2T/ZBD3T (Günler). Yakala Mevcut tarihi Net Vade Tarihi ile karşılaştırarak türetin Event tipi calculated | |||
| Fiyat Farkı Tespit Edildi | Fatura fiyatı ile satın alma siparişi fiyatı arasında bir uyuşmazlığı gösteren çıkarımsal aktivite. Bu, kayıt sırasında otomatik olarak uygulanan belirli bir Ödeme Engelleme Anahtarının (genellikle Fatura Doğrulaması için 'R') gözlemlenmesiyle türetilir. | ||
| Neden önemli Manuel yeniden işleme için temel nedenleri belirler ve Üç Yönlü Eşleşme Oranı Analizini destekler. Nereden alınır Kayıt anındaki BSEG-ZLSPR değeri 'R'den (veya fiyat blokları için sisteme özgü konfigürasyondan) çıkarılmıştır. Yakala ZLSPR değerini 'R' ile karşılaştırın Event tipi inferred | |||
| Kaçırılan Nakit İskontosu | Nakit indirim hakkının sona erdiği tarihi işaretleyen hesaplanmış bir olay. İskonto vade tarihi, mevcut tarih veya ödeme tarihi ile karşılaştırılarak türetilmiştir. | ||
| Neden önemli Erken Ödeme İskonto Optimizasyonu için kaçırılan finansal fırsatları görselleştirmek açısından kritik öneme sahip. Nereden alınır Hesaplanan: BSEG-ZFBDT + BSEG-ZBD1T (İskonto Günleri 1). Yakala Tarihi İskonto Vade Tarihi ile karşılaştırarak türetin Event tipi calculated | |||
| Miktar Farkı Tespit Edildi | Faturalanan miktar ile mal kabul miktarı arasında bir uyuşmazlığı gösteren çıkarımsal aktivite. Bu, kalem satırına uygulanan belirli bir Ödeme Engelleme Anahtarının (genellikle Miktar Farkı için 'M') gözlemlenmesiyle türetilir. | ||
| Neden önemli Eşleşme verimliliği ve tedarik zinciri Nereden alınır BSEG-ZLSPR değeri 'M'den (veya miktar blokları için sisteme özgü konfigürasyondan) çıkarılmıştır. Yakala ZLSPR değerini 'M' ile karşılaştırın Event tipi inferred | |||
| Ödeme Koşulları Değiştirildi | Açık bir faturadaki ödeme koşullarına yapılan bir güncellemeyi kaydeder, bu da vade tarihini veya indirim uygunluğunu değiştirir. Bu, BSEG tablosundaki ZTERM alanındaki değişiklik log'ları aracılığıyla izlenir. | ||
| Neden önemli Sık yapılan değişiklikler, nakit akışı tahminini ve Tedarikçi Ödeme Şartları Nereden alınır CDPOS ve CDHDR tabloları, BSEG-ZTERM alanındaki güncellemeleri arar. Yakala CDPOS kayıtları ZTERM'de değiştiğinde günlüğe kaydedildi Event tipi explicit | |||
| Ödeme Teklifi Oluşturuldu | Faturanın, otomatik ödeme programının ilk adımı olan bir ödeme teklif çalıştırmasına (F110) dahil edildiğini gösterir. Mutabakat data'sını depolayan REGUH tablosundan yakalanır. | ||
| Neden önemli Faturanın ödeme için seçildiğini ve ödeme programı içindeki doğrulama kontrollerinden geçtiğini gösterir. Nereden alınır REGUH tablosu oluşturma timestamp'i (LAUFD ve LAUFI anahtarları). Yakala REGUH kaydı oluşturulduğunda günlüğe kaydedildi Event tipi explicit | |||
Veri Çekim Kılavuzları
Adımlar
Gerekli CDS Görünümlerini Belirleyin: Standart SAP S/4HANA CDS görünümlerinin kullanılabilirliğini onaylayın. Gereken birincil görünümler I_JournalEntry (Başlık), I_OperationalAcctgDocItem (Kalemler/BSEG eşdeğeri), I_SupplierInvoice (Lojistik), I_PaymentProposalItem (F110) ve I_ChangeDocument (loglar için)'dır.
Kullanıcı İzinlerini Yapılandırın: Veritabanı kullanıcısının veya teknik servis kullanıcısının, CDS varlıklarıyla ilişkili DDL SQL görünümlerinde SELECT ayrıcalıklarına sahip olduğundan emin olun. Bu genellikle SAP HANA Studio veya ABAP Eclipse Development Tools (ADT) aracılığıyla yönetilir.
SQL Ortamını Hazırlayın: SQL arayüzünüzü açın (örn. SAP HANA Studio, HANA'ya bağlı DBeaver veya SQL kabul eden bir Process Mining konektörü). Bu yöntem, CDS görünümlerinin görünümler olarak sunulduğu HANA katmanına doğrudan SQL erişimi olduğunu varsayar.
Kapsamı Tanımlayın: Veri hacmini sınırlamak için Şirket Kodu (CompanyCode) ve Mali Yıl aralığını belirleyin. Bu, Operasyonel Muhasebe Belgesi Kalemi görünümünü sorgularken performans açısından kritik öneme sahiptir.
Aktivite Mantığını Uygulayın: Aşağıda verilen SQL sorgusunu kopyalayın. Bu sorgu, 14 farklı mantık bloğunu tek bir olay günlüğü yapısına birleştirmek için UNION ALL kullanır. Her blok belirli bir aktiviteyi (örn. Fatura Kaydedildi, Ödeme Mahsup Edildi) hedefler.
Değişiklik Belgelerini Yönetin: Sorgu, Ödeme Koşulları Değişiklikleri ve Blok manipülasyonu için bölümler içerir. Bunlar I_ChangeDocument görünümüne dayanır. Bu görünüm sizin belirli S/4 sürümünüzde aktif değilse, temel tablolara (CDHDR/CDPOS) özel bir CDS görünümü sarmanız gerekebilir.
Hesaplanmış Olayları Ele Alın: Fatura Vadesi ve Kaçırılan Nakit İskontosu için mantığı gözden geçirin. Bunlar, operasyonel kalem görünümünde bulunan temel tarihe gün eklenerek oluşturulan hesaplanmış olaylardır.
Çıkarma İşlemini Yürütün: Sorguyu çalıştırın. Büyük veri kümeleri için, bellek taşmalarını önlemek amacıyla çıkarmayı Mali Yıl veya Şirket Kodu bazında bölümlere ayırmanız şiddetle tavsiye edilir.
Tarih Formatlarını Doğrulayın: EventTime sütununun YYYY-MM-DD HH:MM:SS olarak biçimlendirildiğinden emin olun. SAP HANA SQL, hedef uygulamanıza bağlı olarak dönüştürülmesi gerekebilecek zaman damgaları döndürür.
Verileri Dışa Aktarın: Sonuç kümesini CSV veya Parquet dosyası olarak kaydedin. Başlıkların son SELECT ifadesinde tanımlanan sütunlarla eşleştiğinden emin olun.
Yükleme için Dönüştürün:
Process miningaracınız belirli bir CSV formatı (örn. belirli tarih maskelemesi) gerektiriyorsa, bu dönüşümleri bir işlem sonrası komut dosyasında veya SQL içinde TO_VARCHAR fonksiyonlarını kullanarak uygulayın.Son Doğrulama: ProcessMind'e bir örnek yükleyin ve Vaka ID'sinin (Fatura Numarası), kayıttan mahsuba kadar tüm aktiviteleri doğru şekilde grupladığını doğrulayın.
Konfigürasyon
- Şirket Kodu Filtresi: Bağlamı ve performansı korumak için sorguyu belirli organizasyonel birimlerle (CompanyCode = '1000') sınırlandırın.
- Tarih Aralığı: Veri hacmini yönetmek için Kayıt Tarihi veya Oluşturma Tarihi üzerine bir filtre uygulayın (örn. son 12 ay).
- Hesap Türü: GL ve Müşteri satırlarını hariç tutmak için I_OperationalAcctgDocItem'ı FinancialAccountType = 'K' (Tedarikçi) için filtreleyin.
- CDS Görünümü Aktivasyonu: I_JournalEntry, I_OperationalAcctgDocItem ve I_PaymentProposalItem görünümlerinin SQL erişimi için aktif ve yayınlanmış olduğundan emin olun.
- Değişiklik Kaydı Performansı: I_ChangeDocument'ı sorgulamak kaynak yoğun olabilir. Bu alt sorguları ObjectClass 'BELEG' ve ZLSPR ve ZTERM gibi belirli alan adlarıyla sınırlayın.
a Örnek Sorgu sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL Adımlar
Gerekli CDS Görünümlerini Belirleyin: Standart SAP S/4HANA CDS görünümlerinin kullanılabilirliğini onaylayın. Gereken birincil görünümler I_JournalEntry (Başlık), I_OperationalAcctgDocItem (Kalemler/BSEG eşdeğeri), I_SupplierInvoice (Lojistik), I_PaymentProposalItem (F110) ve I_ChangeDocument (loglar için)'dır.
Kullanıcı İzinlerini Yapılandırın: Veritabanı kullanıcısının veya teknik servis kullanıcısının, CDS varlıklarıyla ilişkili DDL SQL görünümlerinde SELECT ayrıcalıklarına sahip olduğundan emin olun. Bu genellikle SAP HANA Studio veya ABAP Eclipse Development Tools (ADT) aracılığıyla yönetilir.
SQL Ortamını Hazırlayın: SQL arayüzünüzü açın (örn. SAP HANA Studio, HANA'ya bağlı DBeaver veya SQL kabul eden bir Process Mining konektörü). Bu yöntem, CDS görünümlerinin görünümler olarak sunulduğu HANA katmanına doğrudan SQL erişimi olduğunu varsayar.
Kapsamı Tanımlayın: Veri hacmini sınırlamak için Şirket Kodu (CompanyCode) ve Mali Yıl aralığını belirleyin. Bu, Operasyonel Muhasebe Belgesi Kalemi görünümünü sorgularken performans açısından kritik öneme sahiptir.
Aktivite Mantığını Uygulayın: Aşağıda verilen SQL sorgusunu kopyalayın. Bu sorgu, 14 farklı mantık bloğunu tek bir olay günlüğü yapısına birleştirmek için UNION ALL kullanır. Her blok belirli bir aktiviteyi (örn. Fatura Kaydedildi, Ödeme Mahsup Edildi) hedefler.
Değişiklik Belgelerini Yönetin: Sorgu, Ödeme Koşulları Değişiklikleri ve Blok manipülasyonu için bölümler içerir. Bunlar I_ChangeDocument görünümüne dayanır. Bu görünüm sizin belirli S/4 sürümünüzde aktif değilse, temel tablolara (CDHDR/CDPOS) özel bir CDS görünümü sarmanız gerekebilir.
Hesaplanmış Olayları Ele Alın: Fatura Vadesi ve Kaçırılan Nakit İskontosu için mantığı gözden geçirin. Bunlar, operasyonel kalem görünümünde bulunan temel tarihe gün eklenerek oluşturulan hesaplanmış olaylardır.
Çıkarma İşlemini Yürütün: Sorguyu çalıştırın. Büyük veri kümeleri için, bellek taşmalarını önlemek amacıyla çıkarmayı Mali Yıl veya Şirket Kodu bazında bölümlere ayırmanız şiddetle tavsiye edilir.
Tarih Formatlarını Doğrulayın: EventTime sütununun YYYY-MM-DD HH:MM:SS olarak biçimlendirildiğinden emin olun. SAP HANA SQL, hedef uygulamanıza bağlı olarak dönüştürülmesi gerekebilecek zaman damgaları döndürür.
Verileri Dışa Aktarın: Sonuç kümesini CSV veya Parquet dosyası olarak kaydedin. Başlıkların son SELECT ifadesinde tanımlanan sütunlarla eşleştiğinden emin olun.
Yükleme için Dönüştürün:
Process miningaracınız belirli bir CSV formatı (örn. belirli tarih maskelemesi) gerektiriyorsa, bu dönüşümleri bir işlem sonrası komut dosyasında veya SQL içinde TO_VARCHAR fonksiyonlarını kullanarak uygulayın.Son Doğrulama: ProcessMind'e bir örnek yükleyin ve Vaka ID'sinin (Fatura Numarası), kayıttan mahsuba kadar tüm aktiviteleri doğru şekilde grupladığını doğrulayın.
Konfigürasyon
- Şirket Kodu Filtresi: Bağlamı ve performansı korumak için sorguyu belirli organizasyonel birimlerle (CompanyCode = '1000') sınırlandırın.
- Tarih Aralığı: Veri hacmini yönetmek için Kayıt Tarihi veya Oluşturma Tarihi üzerine bir filtre uygulayın (örn. son 12 ay).
- Hesap Türü: GL ve Müşteri satırlarını hariç tutmak için I_OperationalAcctgDocItem'ı FinancialAccountType = 'K' (Tedarikçi) için filtreleyin.
- CDS Görünümü Aktivasyonu: I_JournalEntry, I_OperationalAcctgDocItem ve I_PaymentProposalItem görünümlerinin SQL erişimi için aktif ve yayınlanmış olduğundan emin olun.
- Değişiklik Kaydı Performansı: I_ChangeDocument'ı sorgulamak kaynak yoğun olabilir. Bu alt sorguları ObjectClass 'BELEG' ve ZLSPR ve ZTERM gibi belirli alan adlarıyla sınırlayın.
a Örnek Sorgu sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL