Templat data pemrosesan pembayaran utang usaha Anda
Templat data pemrosesan pembayaran utang usaha Anda
- Atribut utama untuk analisis pemasok dan pembayaran
- Tahapan penting dalam siklus pembayaran
- Logika ekstraksi khusus untuk sistem SAP S/4HANA
Atribut pemrosesan pembayaran utang usaha
| Nama | Deskripsi | ||
|---|---|---|---|
| Aktivitas Activity | Perubahan status tugas atau peristiwa tertentu yang tercatat untuk faktur. | ||
| Deskripsi Atribut ini mewakili langkah-langkah proses yang terjadi selama siklus hidup faktur. Atribut ini mencatat peristiwa seperti pembuatan, posting, pemblokiran, persetujuan, dan pelunasan pembayaran faktur. Nama aktivitas berasal dari kode transaksi, entri log perubahan, atau pembaruan status workflow di sistem sumber. Dalam analisis, kolom ini penting untuk memetakan variasi alur proses. Mesin process mining menggunakannya untuk menampilkan urutan langkah, menemukan siklus pengerjaan ulang, dan mengetahui bagian proses yang menyimpang dari alur standar. Kolom ini merupakan komponen utama event log. Mengapa ini penting Menentukan simpul dalam peta proses untuk menampilkan alur kerja dan hambatan. Sumber data Berasal dari Transaction Codes (TCODE) atau Change Document Header (CDHDR) dan Item (CDPOS) Contoh Faktur DicatatBlokir Pembayaran DiterapkanPayment Run dijalankanFaktur dilunasi | |||
| Nomor faktur InvoiceNumber | Pengenal unik untuk faktur vendor yang sedang diproses. | ||
| Deskripsi Nomor Faktur menjadi kunci utama untuk melacak siklus hidup item utang dalam sistem SAP S/4HANA. Nomor ini merujuk secara khusus pada nomor dokumen akuntansi yang dibuat saat faktur diposting ke buku besar. Dalam istilah standar SAP, nomor ini sesuai dengan Document Number (BELNR) dalam Company Code dan Fiscal Year tertentu. Dalam analisis proses, atribut ini berfungsi sebagai Case ID. Nomor ini menghubungkan semua aktivitas yang berbeda, mulai dari penerimaan dan pemarkiran faktur, berbagai blokir dan perubahan persetujuan, hingga pembayaran akhir untuk melunasinya. Dengan mengelompokkan peristiwa berdasarkan pengenal ini, analis dapat menyusun kembali riwayat lengkap setiap kewajiban pembayaran dari awal hingga akhir. Mengapa ini penting Berfungsi sebagai Case ID utama untuk menyusun kembali alur proses pembayaran dari awal hingga akhir. Sumber data Kolom BELNR pada tabel SAP BKPF (Accounting Document Header) atau kolom BELNR pada ACDOCA Contoh 1900000523510000289119000006015100003002 | |||
| Waktu peristiwa EventTime | Waktu persis saat aktivitas terjadi. | ||
| Deskripsi Waktu Peristiwa mencatat tanggal dan waktu persis saat aktivitas disimpan ke database SAP. Informasi waktu ini diperlukan untuk mengurutkan peristiwa dalam setiap kasus. Biasanya, cap waktu dibuat dengan menggabungkan kolom CPU Date dan CPU Time dari log sistem atau header dokumen. Dalam analisis, atribut ini penting untuk menghitung waktu siklus, durasi, dan throughput. Atribut ini membantu mengukur jeda antarlangkah, misalnya waktu dari penerimaan faktur hingga persetujuan akhir. Informasi ini penting untuk menemukan hambatan dan menilai kinerja KPI seperti Rata-rata Waktu Persetujuan Faktur. Mengapa ini penting Menentukan urutan kronologis peristiwa dan menjadi dasar semua perhitungan kinerja berbasis waktu. Sumber data Kolom CPUDT (Entry Date) dan CPUTM (Entry Time) pada tabel SAP BKPF, atau kolom UDATE dan UTIME pada CDHDR Contoh 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Pembaruan data terakhir LastDataUpdate | Cap waktu yang menunjukkan kapan record terakhir diekstrak atau diperbarui. | ||
| Deskripsi Pembaruan Data Terakhir menunjukkan waktu data berhasil dimuat ke platform process mining. Waktu ini bukan waktu terjadinya peristiwa bisnis, melainkan menunjukkan seberapa baru dataset tersebut. Informasi ini penting untuk menjaga kepercayaan terhadap analitik di dashboard. Dalam analisis, atribut ini membantu pengguna mengetahui kebaruan informasi yang mereka lihat. Atribut ini sangat penting saat memantau dashboard yang mendekati waktu nyata, seperti Analisis Blokir Pembayaran, agar keputusan dibuat berdasarkan kondisi terbaru sistem SAP S/4HANA. Mengapa ini penting Memberi tahu pengguna seberapa baru data, hal penting untuk dashboard operasional. Sumber data Dihasilkan oleh proses ETL / ekstraksi Contoh 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Sistem sumber SourceSystem | Pengenal instans SAP S/4HANA tempat data berasal. | ||
| Deskripsi Atribut ini menunjukkan instalasi ERP atau klien tertentu yang menjadi sumber ekstraksi data proses. Jika beberapa instans SAP atau sistem lama berjalan bersamaan, kolom ini membantu menjaga asal-usul data dan membandingkan data antar sistem. Dalam analisis, kolom ini berfungsi sebagai filter tingkat tinggi. Analis dapat memisahkan data untuk membandingkan kinerja di berbagai instalasi sistem regional atau memeriksa konsistensi data selama migrasi sistem. Kolom ini juga memberi konteks yang tepat pada variasi proses akibat konfigurasi sistem. Mengapa ini penting Membedakan sumber data di lingkungan dengan banyak sistem agar segmentasi data tetap akurat. Sumber data System ID (SY-SYSID) dari konteks instalasi SAP Contoh SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Alasan blokir pembayaran PaymentBlockReason | Kode yang menunjukkan alasan faktur diblokir dari pembayaran. | ||
| Deskripsi Atribut ini memuat kode alasan khusus yang diterapkan pada faktur sehingga faktur tidak dapat diproses dalam payment run otomatis. Contohnya, 'A' untuk Diblokir dari Pembayaran, 'R' untuk Verifikasi Faktur, atau blokir manual yang ditetapkan pengguna. Dalam analisis, kolom ini menjadi faktor utama dashboard Analisis Blokir Pembayaran Manual. Dengan mengelompokkan frekuensi berbagai alasan blokir, organisasi dapat mendiagnosis masalah sistemik, seperti selisih harga yang sering terjadi atau penerimaan barang yang belum tercatat, yang menghambat proses pembayaran. Mengapa ini penting Menunjukkan penyebab spesifik terhentinya proses agar analisis akar masalah dapat dilakukan secara terarah. Sumber data Kolom ZLSPR pada tabel SAP BSEG Contoh ABR* | |||
| Apakah pembayaran terlambat IsLatePayment | Penanda boolean yang menunjukkan apakah pembayaran dilakukan setelah tanggal jatuh tempo neto. | ||
| Deskripsi Atribut terhitung ini bernilai true jika Tanggal Kliring lebih besar dari Tanggal Jatuh Tempo Neto. Atribut ini mengelompokkan kinerja proses ke dalam dua kategori. Dalam analisis, penanda ini digunakan untuk menghitung jumlah kasus yang tidak patuh pada KPI Frekuensi Denda Keterlambatan Pembayaran. Anda dapat membuat dashboard dengan menghitung nilai 'True', tanpa perlu melakukan perhitungan tanggal yang rumit di lapisan visualisasi. Mengapa ini penting Atribut ini memudahkan penghitungan KPI ketepatan waktu. Sumber data Dihitung: Tanggal Kliring > Tanggal Jatuh Tempo Neto Contoh truefalse | |||
| Company Code CompanyCode | Unit organisasi yang digunakan untuk menyusun neraca dan laporan laba rugi. | ||
| Deskripsi Company Code adalah entitas akuntansi independen dalam perusahaan. Unit ini menjadi struktur utama dalam akuntansi eksternal dan digunakan untuk mengatur data keuangan. Setiap faktur ditetapkan ke satu Company Code. Dalam analisis, atribut ini memungkinkan KPI dikelompokkan berdasarkan badan hukum atau wilayah. Dashboard menggunakannya untuk membandingkan efisiensi tim utang usaha di berbagai anak perusahaan. Misalnya, atribut ini membantu menemukan cabang dengan tingkat blokir pembayaran manual yang lebih tinggi daripada standar perusahaan. Mengapa ini penting Mengelompokkan proses berdasarkan badan hukum untuk memudahkan perbandingan internal. Sumber data Kolom BUKRS pada tabel SAP BKPF Contoh US01DE1010002000 | |||
| Jenis dokumen DocumentType | Mengelompokkan dokumen akuntansi, misalnya faktur vendor, pembayaran, atau nota kredit. | ||
| Deskripsi Jenis Dokumen adalah kode dua karakter di SAP untuk mengelompokkan transaksi akuntansi. Jenis yang umum antara lain 'KR' untuk Faktur Vendor, 'KZ' untuk Pembayaran Vendor, dan 'RE' untuk Penerimaan Faktur Bruto. Jenis ini menentukan rentang nomor dan status kolom dokumen. Dalam analisis, atribut ini digunakan untuk memfilter cakupan proses. Misalnya, analis dapat mengecualikan nota kredit agar fokus pada efisiensi pembayaran keluar. Atribut ini juga membantu mengidentifikasi komposisi jenis transaksi yang diproses dan mendukung dashboard Kompleksitas Variasi Proses. Mengapa ini penting Mengelompokkan kasus, misalnya faktur atau nota kredit, agar analisis dapat difilter. Sumber data Kolom BLART pada tabel SAP BKPF Contoh KRREKZKG | |||
| Jumlah faktur InvoiceAmount | Jumlah bruto total faktur dalam mata uang dokumen. | ||
| Deskripsi Atribut ini menunjukkan nilai keuangan faktur sebagaimana tercatat dalam dokumen sumber. Nilai tersebut merupakan liabilitas yang harus dibayar kepada vendor. Di SAP S/4HANA, nilai ini biasanya disimpan dalam kolom Amount in Document Currency. Dalam analisis, Jumlah Faktur digunakan untuk menentukan prioritas pekerjaan. Dashboard seperti Distribusi Titik Sentuh Manual menggunakan kolom ini untuk menunjukkan apakah aktivitas manual yang memerlukan banyak upaya dilakukan pada faktur bernilai rendah. Dengan begitu, organisasi dapat memprioritaskan perbaikan pada transaksi bernilai tinggi, yang kegagalan prosesnya membawa risiko keuangan lebih besar. Mengapa ini penting Menunjukkan nilai finansial kasus, yang penting untuk memprioritaskan inefisiensi proses bernilai tinggi. Sumber data Kolom WRBTR pada tabel SAP BKPF atau BSEG Contoh 1500.00250.5010000.00 | |||
| Nama pengguna UserName | ID pengguna yang melakukan aktivitas tertentu. | ||
| Deskripsi Nama Pengguna mencatat ID login orang atau agen sistem yang bertanggung jawab menjalankan langkah proses. Pengguna bisa berupa orang yang memasukkan data secara manual atau ID pekerjaan latar belakang, misalnya 'BATCH_USER', yang menjalankan tugas otomatis. Dalam analisis, atribut ini memungkinkan penghitungan Tingkat Otomatisasi Aktivitas. Dengan membedakan pengguna manusia dan akun sistem, analis dapat mengukur tingkat otomatisasi proses. Atribut ini juga digunakan dalam dashboard Distribusi Titik Sentuh Manual untuk menilai beban kerja tim. Mengapa ini penting Membedakan pekerjaan manual dan otomatis agar tingkat otomatisasi dapat dihitung. Sumber data Kolom USNAM pada tabel SAP BKPF atau kolom USERNAME pada CDHDR Contoh BSMITHWF-BATCHRJONES | |||
| Nomor vendor VendorNumber | Pengenal unik untuk pemasok yang terkait dengan faktur. | ||
| Deskripsi Nomor Vendor merujuk pada akun kreditur tertentu di subbuku besar SAP. Nomor ini menghubungkan faktur dengan data induk yang memuat syarat pembayaran, detail bank, dan informasi kontak. Di S/4HANA, nomor ini sering dikaitkan dengan konsep Business Partner, tetapi nama kolom lama LIFNR masih digunakan di banyak tabel. Dalam analisis, atribut ini menjadi dasar dashboard Kepatuhan Syarat Pembayaran Vendor. Analis dapat mengelompokkan kinerja proses berdasarkan pemasok dan menemukan vendor tertentu yang berulang kali menyebabkan blokir, selisih harga, atau keterlambatan. Informasi ini mendukung keputusan pengadaan strategis dan pengelolaan hubungan pemasok. Mengapa ini penting Memungkinkan kinerja dikelompokkan berdasarkan pemasok, sehingga penyebab utama keterlambatan dapat ditemukan. Sumber data Kolom LIFNR pada tabel SAP BKPF atau kolom LIFNR pada ACDOCA Contoh 100050VEND-US-99200400 | |||
| Syarat pembayaran PaymentTerms | Kode yang menunjukkan ketentuan pembayaran dan diskon yang disepakati. | ||
| Deskripsi Syarat Pembayaran menentukan kapan faktur jatuh tempo dan apakah ada diskon tunai untuk pembayaran lebih awal. Kode ini, misalnya 'Z001', mengacu pada aturan seperti 'Net 30' atau '2% 10, Net 30'. Kode disalin dari data induk vendor ke faktur, tetapi dapat diubah secara manual. Dalam analisis, atribut ini menjadi dasar dashboard Pengoptimal Diskon Pembayaran Awal dan Kepatuhan Syarat Pembayaran Vendor. Sistem menggunakannya untuk menghitung tanggal jatuh tempo dasar dan mengetahui apakah pembayaran dilakukan dalam periode terbaik untuk memperoleh penghematan. Mengapa ini penting Menentukan jadwal pembayaran dan insentif finansial, yang penting untuk analisis diskon. Sumber data Kolom ZTERM pada tabel SAP BSEG Contoh Z001NT300001 | |||
| Tanggal jatuh tempo bersih NetDueDate | Tanggal hasil perhitungan untuk membayar faktur agar terhindar dari denda. | ||
| Deskripsi Tanggal Jatuh Tempo Bersih adalah batas akhir pembayaran. Tanggal ini dihitung dengan menambahkan jumlah hari maksimum syarat pembayaran ke Tanggal Dasar. Tanggal ini terkadang disimpan secara langsung, tetapi sering kali dihitung dalam tampilan analisis. Dalam analisis, tanggal ini menjadi tolok ukur utama untuk Pelacak Pembayaran Terlambat dan Denda. Dengan membandingkan Tanggal Pelunasan aktual dengan Tanggal Jatuh Tempo Bersih, metrik 'Jumlah Hari Keterlambatan Pembayaran' dapat dihitung. Metrik ini membantu mengukur efisiensi tim Utang Usaha dan risiko hubungan dengan vendor. Mengapa ini penting Menjadi batas waktu sasaran proses. Jika terlewat, peringkat kredit dapat terdampak dan biaya tambahan dapat timbul. Sumber data Dihitung: Tanggal Dasar + Jumlah Hari Maksimum Syarat Pembayaran (ZBD1T/ZBD2T/ZBD3T) Contoh 2023-11-302023-12-01 | |||
| Tanggal pelunasan ClearingDate | Tanggal faktur dilunasi melalui pembayaran. | ||
| Deskripsi Tanggal Pelunasan mencatat kapan item terbuka di buku besar utang usaha diselesaikan, biasanya melalui payment run atau posting pembayaran manual. Tanggal ini menandai berakhirnya liabilitas. Dalam analisis, atribut ini digunakan untuk menghitung waktu siklus akhir proses. Atribut ini menjadi cap waktu untuk aktivitas 'Pembayaran dilunasi' dan dibandingkan dengan Tanggal Jatuh Tempo Bersih untuk menentukan kinerja pembayaran tepat waktu. Data ini langsung digunakan dalam dashboard Efisiensi Pelunasan Pembayaran. Mengapa ini penting Menandai selesainya proses pembayaran dan digunakan untuk mengetahui ketepatan waktu pembayaran. Sumber data Kolom AUGDT pada tabel SAP BSEG atau tabel AUGDT Contoh 2023-11-012023-11-15 | |||
| Tanpa sentuhan manual IsTouchless | Penanda boolean yang menunjukkan apakah faktur diproses tanpa campur tangan manual. | ||
| Deskripsi Atribut ini dihitung dengan menganalisis rangkaian peristiwa dalam suatu kasus. Kasus ditandai sebagai tanpa sentuhan manual jika hanya mencakup aktivitas otomatis, misalnya pengguna 'system' atau TCODES latar belakang tertentu, tanpa perubahan manual atau pemblokiran. Dalam analisis, atribut ini menjadi metrik utama untuk KPI Tingkat Faktur Tanpa Sentuhan Manual. Organisasi dapat mengukur keberhasilan inisiatif otomatisasi dan mengetahui jenis kasus, misalnya berdasarkan pemasok atau wilayah, yang berhasil diproses oleh sistem tanpa campur tangan manusia. Mengapa ini penting Atribut ini menjadi ukuran utama otomatisasi dan efisiensi proses. Sumber data Dihitung berdasarkan urutan aktivitas dan jenis pengguna Contoh truefalse | |||
| Dokumen pembelian PurchasingDocument | Nomor Purchase Order yang terkait dengan faktur. | ||
| Deskripsi Atribut ini menghubungkan faktur dengan proses pengadaan sebelumnya. Isinya adalah nomor Purchase Order (PO) yang menjadi acuan pencocokan faktur. Tidak semua faktur, seperti biaya lain-lain, memiliki referensi PO. Dalam analisis, kolom ini penting untuk Analisis Tingkat Pencocokan Tiga Arah. Analis dapat memisahkan faktur yang memiliki PO dari yang tidak, karena alur persetujuannya biasanya sangat berbeda. Kolom ini juga mendukung process mining dari awal hingga akhir dengan menghubungkan data Utang Usaha dan Pengadaan. Mengapa ini penting Menghubungkan Utang Usaha dengan Pengadaan untuk analisis pencocokan tiga arah dan perluasan proses. Sumber data Kolom EBELN pada tabel SAP BSEG Contoh 45000012344500009876 | |||
| Hari diskon tunai 1 CashDiscountDays1 | Jumlah hari sejak tanggal dasar saat diskon tunai pertama masih berlaku. | ||
| Deskripsi Atribut ini menentukan periode untuk memperoleh syarat pembayaran paling menguntungkan, misalnya '10' dalam '2% 10, Net 30'. Nilainya berasal dari syarat yang tersimpan pada item baris faktur. Dalam analisis, atribut ini membantu menentukan 'Tanggal Sasaran' untuk Pengoptimal Diskon Pembayaran Awal. Jika faktur dilunasi dalam periode ini, diskon dapat diperoleh. Kolom ini membantu mengukur biaya peluang akibat siklus pemrosesan yang lambat. Mengapa ini penting Menentukan periode untuk memperoleh penghematan finansial. Sumber data Kolom ZBD1T pada tabel SAP BSEG Contoh 10140 | |||
| Mata uang Currency | Kode mata uang yang digunakan untuk jumlah faktur. | ||
| Deskripsi Atribut Mata Uang menunjukkan denominasi Jumlah Faktur, seperti USD, EUR, atau GBP. Atribut ini membantu menafsirkan nilai keuangan dengan benar dan penting saat menggabungkan data dari berbagai Company Code internasional. Dalam analisis, kolom ini memastikan KPI keuangan dihitung dengan benar. Kolom ini sering digunakan untuk mengonversi nilai ke mata uang pelaporan dalam dashboard global. Tanpa atribut ini, metrik gabungan seperti Total Pengeluaran atau Rata-rata Nilai Faktur tidak akan bermakna di lingkungan dengan banyak mata uang. Mengapa ini penting Memberi konteks pada jumlah keuangan, yang penting untuk pelaporan global yang akurat. Sumber data Kolom WAERS pada tabel SAP BKPF Contoh USDEURGBPJPY | |||
| Nilai Diskon yang Hilang DiscountLostAmount | Nilai uang dari diskon tunai yang tersedia tetapi tidak dimanfaatkan. | ||
| Deskripsi Atribut terhitung ini menunjukkan nilai diskon yang terlewat. Perhitungannya memeriksa apakah pembayaran dilakukan setelah batas waktu diskon. Jika ya, nilai diskon yang tidak didapat dihitung berdasarkan persentase diskon dan jumlah faktur. Dalam analisis, metrik keuangan ini penting untuk Pengoptimal Diskon Pembayaran Awal. Metrik ini menunjukkan biaya akibat proses yang tidak efisien dalam nilai uang, sehingga membantu memperjelas manfaat bisnis dari perbaikan proses. Mengapa ini penting Atribut ini mengukur kerugian finansial langsung akibat keterlambatan proses. Sumber data Dihitung: Jika Tanggal Kliring > Tanggal Diskon, maka Jumlah Faktur * Persentase Diskon Contoh 30.000.00150.00 | |||
| Persentase diskon tunai 1 CashDiscountPercentage1 | Persentase diskon yang tersedia jika pembayaran dilakukan dalam periode diskon pertama. | ||
| Deskripsi Atribut ini menunjukkan tingkat insentif finansial yang ditawarkan vendor untuk pembayaran lebih awal, misalnya '2' dalam '2% 10'. Dalam analisis, atribut ini digunakan untuk menghitung nilai 'Potensi Diskon Tunai'. Dengan mengalikan persentase ini dengan Jumlah Faktur, dashboard dapat menunjukkan total penghematan yang hilang akibat proses yang tidak efisien. Informasi ini mendukung penyusunan alasan bisnis untuk otomatisasi. Mengapa ini penting Mengukur potensi tingkat penghematan, yang penting untuk menghitung ROI. Sumber data Kolom ZBD1P pada tabel SAP BSEG Contoh 2.03.00.0 | |||
| Tahun fiskal FiscalYear | Tahun keuangan yang mencakup faktur. | ||
| Deskripsi Tahun Fiskal adalah periode yang digunakan untuk pelaporan keuangan. Bersama Company Code dan Document Number, atribut ini membentuk kunci utama gabungan untuk dokumen keuangan di SAP. Dalam analisis, atribut ini diperlukan untuk mengidentifikasi kasus secara unik dan mendukung pelaporan dari tahun ke tahun. Atribut ini memastikan Case ID 'Nomor Faktur' tetap unik meskipun data mencakup puluhan tahun. Mengapa ini penting Persyaratan teknis untuk mengidentifikasi kasus secara unik di SAP FI. Sumber data Kolom GJAHR pada tabel SAP BKPF Contoh 20232024 | |||
| Tanggal dasar BaselineDate | Tanggal acuan penerapan syarat pembayaran dan penghitungan tanggal jatuh tempo. | ||
| Deskripsi Tanggal Dasar menjadi titik awal untuk menghitung tanggal jatuh tempo bersih dan periode diskon tunai. Tanggal ini biasanya tanggal faktur atau tanggal posting, bergantung pada konfigurasi dan data induk vendor. Dalam analisis, tanggal ini diperlukan untuk menghitung status 'Terlambat'. Kesalahan pada tanggal dasar dapat menyebabkan pembayaran terlalu cepat, yang berdampak pada arus kas, atau terlambat, yang berisiko menimbulkan denda. Memeriksa keakuratan tanggal ini merupakan bagian dari analisis Kepatuhan Syarat Pembayaran Vendor. Mengapa ini penting Menjadi acuan untuk semua penghitungan tanggal jatuh tempo. Sumber data Kolom ZFBDT pada tabel SAP BSEG Contoh 2023-10-012023-10-15 | |||
Aktivitas pemrosesan pembayaran utang usaha
| Aktivitas | Deskripsi | ||
|---|---|---|---|
| Blokir Pembayaran Dihapus | Menandakan bahwa blokir pembayaran yang sebelumnya diterapkan telah dibuka, sehingga faktur dapat dibayar. Aktivitas ini diketahui saat kolom ZLSPR di BSEG berubah dari suatu nilai menjadi null atau kosong. | ||
| Mengapa ini penting Sering digunakan sebagai penanda pengganti untuk 'Faktur Disetujui' pada sistem yang tidak memiliki log alur kerja eksplisit. Aktivitas ini menandai berakhirnya masa hambatan. Sumber data Tabel CDPOS dan CDHDR, untuk mencari perubahan BSEG-ZLSPR menjadi kosong. Pengumpulan data Dicatat saat catatan CDPOS menunjukkan penghapusan ZLSPR Jenis peristiwa explicit | |||
| Blokir Pembayaran Diterapkan | Menandakan bahwa blokir pembayaran telah diterapkan pada item baris faktur, sehingga faktur tidak disertakan dalam proses pembayaran. Aktivitas ini dicatat dengan memantau perubahan kolom ZLSPR di tabel BSEG melalui dokumen perubahan. | ||
| Mengapa ini penting Blokir menjadi penyebab utama keterlambatan pembayaran dan hambatan proses. Dampaknya terlihat langsung pada dashboard Analisis Blokir Pembayaran Manual. Sumber data Tabel CDPOS dan CDHDR (Dokumen Perubahan), untuk mencari pembaruan pada kolom BSEG-ZLSPR. Pengumpulan data Dicatat saat catatan CDPOS berubah pada ZLSPR Jenis peristiwa explicit | |||
| Dokumen pembayaran dibuat | Pembuatan dokumen akuntansi yang mengkredit bank dan mendebit vendor. Data ini terdapat di BKPF dengan jenis dokumen pembayaran, misalnya ZP atau KZ. | ||
| Mengapa ini penting Realisasi pembayaran secara finansial, digunakan untuk menghitung Days Payable Outstanding (DPO). Sumber data Tabel BKPF, difilter berdasarkan Document Type (BLART) khusus pembayaran. Pengumpulan data Dicatat saat dokumen pembayaran BKPF dibuat Jenis peristiwa explicit | |||
| Faktur Dicatat | Menandai pencatatan resmi kewajiban ke Buku Besar. Aktivitas ini diambil dari waktu pembuatan pada tabel BKPF atau tanggal entri pada tabel ACDOCA. | ||
| Mengapa ini penting Ini menjadi titik awal utama untuk linimasa keuangan dan dasar analisis tanggal jatuh tempo serta umur piutang atau utang. Sumber data Tabel BKPF, menggunakan CPUDT (Tanggal Entri) dan CPUTM (Waktu Entri). Pengumpulan data Dicatat saat catatan BKPF dibuat Jenis peristiwa explicit | |||
| Payment Run dijalankan | Menunjukkan pelaksanaan payment run yang menghasilkan instruksi transfer dana. Proses ini dilacak melalui pembaruan status di tabel REGUH atau REGUP. | ||
| Mengapa ini penting Komitmen operasional untuk membayar, yang penting untuk menganalisis efisiensi proses pengelompokan pembayaran. Sumber data Tabel REGUH, biasanya dikaitkan dengan tanggal dan identifikasi run. Pengumpulan data Dicatat saat status Payment Run diperbarui Jenis peristiwa explicit | |||
| Pembayaran dilunasi | Menandai rekonsiliasi akhir saat item terbuka di akun vendor dilunasi dengan pembayaran. Data diambil dari kolom AUGDT (Clearing Date) pada tabel BSEG. | ||
| Mengapa ini penting Status akhir proses, yang menunjukkan siklus telah selesai dan pembukuan seimbang. Tingginya tingkat pelunasan manual menandakan rekonsiliasi yang kurang efisien. Sumber data Tabel BSEG, kolom AUGDT (Clearing Date). Pengumpulan data Dicatat saat kolom AUGDT terisi Jenis peristiwa explicit | |||
| Diskon Tunai Terlewat | Peristiwa hasil perhitungan yang menandai tanggal berakhirnya kelayakan mendapat diskon tunai. Nilai ini diperoleh dengan membandingkan tanggal jatuh tempo diskon dengan tanggal saat ini atau tanggal pembayaran. | ||
| Mengapa ini penting Penting bagi Pengoptimal Diskon Pembayaran Awal untuk menampilkan peluang penghematan yang terlewat. Sumber data Dihitung: BSEG-ZFBDT + BSEG-ZBD1T (Hari Diskon 1). Pengumpulan data Tentukan dengan membandingkan tanggal dengan Tanggal Jatuh Tempo Diskon Jenis peristiwa calculated | |||
| Faktur dibalik | Menunjukkan bahwa dokumen faktur dibalik atau dibatalkan. Data ini diketahui dengan memeriksa kolom STBLG (Reversal Document) pada tabel BKPF. | ||
| Mengapa ini penting Menunjukkan pengerjaan ulang dan kegagalan proses, serta mengidentifikasi pemborosan dan potensi pekerjaan ganda. Sumber data Tabel BKPF, kolom STBLG tidak kosong. Pengumpulan data Dicatat saat kolom STBLG terisi Jenis peristiwa explicit | |||
| Faktur Disimpan Sementara | Menunjukkan bahwa faktur telah dimasukkan ke SAP, tetapi belum dicatat ke Buku Besar. Status ini sering digunakan untuk entri data awal. Aktivitas ini diambil langsung dari tabel VBKPF atau dengan mengidentifikasi dokumen berstatus disimpan sementara di BKPF sebelum berubah menjadi tercatat. | ||
| Mengapa ini penting Penyimpanan sementara menandai awal tahap entri data dan membantu mengukur jeda waktu antara penerimaan faktur dan timbulnya kewajiban keuangan. Sumber data Tabel VBKPF untuk data header dokumen yang disimpan sementara, atau BKPF dengan status dokumen tertentu (BSTAT = V). Pengumpulan data Dicatat saat entri VBKPF dibuat Jenis peristiwa explicit | |||
| Faktur Jatuh Tempo | Stempel waktu hasil perhitungan yang menunjukkan saat faktur mencapai tanggal jatuh tempo bersih. Nilai ini diperoleh dengan menambahkan jumlah hari dalam ketentuan pembayaran ke tanggal dasar pada tabel BSEG. | ||
| Mengapa ini penting Menjadi acuan untuk Kinerja Pembayaran Tepat Waktu dan Pelacak Denda Keterlambatan Pembayaran. Sumber data Dihitung: BSEG-ZFBDT (Tanggal Dasar) + BSEG-ZBD1T/ZBD2T/ZBD3T (Hari). Pengumpulan data Tentukan dengan membandingkan tanggal saat ini dengan Tanggal Jatuh Tempo Bersih Jenis peristiwa calculated | |||
| Ketentuan Pembayaran Diubah | Mencatat perubahan ketentuan pembayaran pada faktur terbuka, yang mengubah tanggal jatuh tempo atau kelayakan mendapat diskon. Perubahan ini dilacak melalui log perubahan pada kolom ZTERM di tabel BSEG. | ||
| Mengapa ini penting Perubahan yang sering terjadi dapat menandakan kesalahan data induk atau penggantian manual yang berdampak pada perkiraan arus kas dan Kepatuhan terhadap Ketentuan Pembayaran Vendor. Sumber data Tabel CDPOS dan CDHDR, untuk mencari pembaruan pada kolom BSEG-ZTERM. Pengumpulan data Dicatat saat catatan CDPOS berubah pada ZTERM Jenis peristiwa explicit | |||
| Usulan Pembayaran Dibuat | Menandakan bahwa faktur telah disertakan dalam proses usulan pembayaran (F110), langkah pertama program pembayaran otomatis. Aktivitas ini diambil dari tabel REGUH yang menyimpan data penyelesaian. | ||
| Mengapa ini penting Menunjukkan bahwa faktur telah dipilih untuk dibayar dan lolos pemeriksaan validasi dalam program pembayaran. Sumber data Waktu pembuatan tabel REGUH (kunci LAUFD dan LAUFI). Pengumpulan data Dicatat saat record REGUH dibuat Jenis peristiwa explicit | |||
| Varians Harga Terdeteksi | Aktivitas yang disimpulkan dari ketidaksesuaian antara harga faktur dan harga pesanan pembelian. Aktivitas ini diketahui dari penerapan otomatis Kunci Blokir Pembayaran tertentu saat pencatatan, biasanya 'R' untuk Verifikasi Faktur. | ||
| Mengapa ini penting Menemukan akar penyebab pekerjaan ulang manual dan mendukung Analisis Tingkat Pencocokan Tiga Arah. Sumber data Disimpulkan dari nilai BSEG-ZLSPR 'R' (atau konfigurasi khusus sistem untuk blokir harga) saat pencatatan. Pengumpulan data Bandingkan nilai ZLSPR dengan 'R' Jenis peristiwa inferred | |||
| Varians Kuantitas Terdeteksi | Aktivitas yang disimpulkan dari ketidaksesuaian antara kuantitas pada faktur dan kuantitas penerimaan barang. Aktivitas ini diketahui dari penerapan Kunci Blokir Pembayaran tertentu pada item baris, biasanya 'M' untuk Varians Kuantitas. | ||
| Mengapa ini penting Penting untuk menganalisis efisiensi pencocokan dan kualitas data rantai pasok. Sumber data Disimpulkan dari nilai BSEG-ZLSPR 'M' (atau konfigurasi khusus sistem untuk blokir kuantitas). Pengumpulan data Bandingkan nilai ZLSPR dengan 'M' Jenis peristiwa inferred | |||
Panduan ekstraksi
Langkah
Identifikasi CDS View yang diperlukan: Pastikan CDS view standar SAP S/4HANA tersedia. View utama yang diperlukan adalah I_JournalEntry (Header), I_OperationalAcctgDocItem (Item/setara BSEG), I_SupplierInvoice (Logistik), I_PaymentProposalItem (F110), dan I_ChangeDocument (untuk log).
Atur izin pengguna: Pastikan pengguna database atau pengguna layanan teknis memiliki hak SELECT pada view DDL SQL yang terkait dengan entitas CDS. Pengaturan ini biasanya dilakukan melalui SAP HANA Studio atau ABAP Eclipse Development Tools (ADT).
Siapkan lingkungan SQL: Buka antarmuka SQL Anda, misalnya SAP HANA Studio, DBeaver yang terhubung ke HANA, atau konektor process mining yang menerima SQL. Metode ini mengasumsikan akses SQL langsung ke lapisan HANA, tempat CDS view tersedia sebagai view.
Tentukan cakupan: Tentukan Kode Perusahaan (CompanyCode) dan rentang Tahun Fiskal untuk membatasi volume data. Langkah ini penting untuk menjaga kinerja saat membuat kueri pada view Item Dokumen Akuntansi Operasional.
Terapkan logika aktivitas: Salin kueri SQL di bawah ini. Kueri ini menggunakan UNION ALL untuk menggabungkan 14 blok logika berbeda ke dalam satu struktur event log. Setiap blok menangani aktivitas tertentu, misalnya Faktur Dibukukan atau Pembayaran Dikliring.
Tangani dokumen perubahan: Kueri ini mencakup bagian untuk Perubahan Syarat Pembayaran dan perubahan pemblokiran. Bagian tersebut menggunakan view I_ChangeDocument. Jika view ini tidak aktif pada rilis S/4 Anda, buat CDS view khusus yang membungkus tabel dasar CDHDR/CDPOS.
Periksa peristiwa terhitung: Tinjau logika untuk Faktur Jatuh Tempo dan Diskon Tunai yang Hilang. Peristiwa ini dihitung dengan menambahkan jumlah hari ke tanggal dasar yang ditemukan pada view item operasional.
Jalankan ekstraksi: Jalankan kueri. Untuk kumpulan data besar, sebaiknya bagi ekstraksi berdasarkan Tahun Fiskal atau Kode Perusahaan agar tidak terjadi kelebihan penggunaan memori.
Periksa format tanggal: Pastikan kolom EventTime menggunakan format YYYY-MM-DD HH:MM:SS. SAP HANA SQL mengembalikan stempel waktu yang mungkin perlu dikonversi, bergantung pada aplikasi tujuan.
Ekspor data: Simpan hasil kueri sebagai file CSV atau Parquet. Pastikan header sesuai dengan kolom yang ditentukan dalam pernyataan SELECT terakhir.
Ubah format untuk diunggah: Jika alat process mining Anda memerlukan format CSV tertentu, misalnya format tanggal khusus, terapkan perubahan ini melalui skrip pascapemrosesan atau fungsi TO_VARCHAR di SQL.
Lakukan validasi akhir: Muat sampel data ke ProcessMind dan pastikan ID Kasus (Nomor Faktur) mengelompokkan semua aktivitas dengan benar, dari pembukuan hingga kliring.
Konfigurasi
- Filter Kode Perusahaan: Batasi kueri ke unit organisasi tertentu (CompanyCode = '1000') agar konteks dan kinerja tetap terjaga.
- Rentang Tanggal: Terapkan filter pada PostingDate atau CreationDate, misalnya 12 bulan terakhir, untuk mengendalikan volume data.
- Jenis Akun: Filter I_OperationalAcctgDocItem dengan FinancialAccountType = 'K' (Vendor) untuk mengecualikan baris GL dan Pelanggan.
- Aktivasi CDS View: Pastikan view I_JournalEntry, I_OperationalAcctgDocItem, dan I_PaymentProposalItem aktif dan tersedia untuk akses SQL.
- Kinerja Log Perubahan: Kueri pada I_ChangeDocument dapat menggunakan banyak sumber daya. Batasi subkueri berdasarkan ObjectClass 'BELEG' dan nama kolom tertentu seperti ZLSPR dan ZTERM.
Contoh kueri 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 Langkah
- Pastikan akses SQL langsung ke skema SAP HANA yang berisi ACDOCA, BKPF, BSEG, VBKPF, REGUH, REGUP, serta tabel dokumen perubahan yang relevan tersedia. Ganti [Your SAP HANA schema] dan detail koneksi dengan nilai yang disetujui untuk sistem Anda.
- Pastikan cakupan faktur dan periode pelaporan. Isi [Start date] dan [End date] dalam format YYYYMMDD, lalu atur [Company code filter] sebagai predikat SQL yang valid, misalnya BUKRS IN ('1000','2000').
- Periksa versi SAP dan konfigurasi lokal untuk dokumen yang ditangguhkan, kolom status program pembayaran, jenis dokumen pembayaran, serta penyimpanan dokumen perubahan. Kueri ini menggunakan objek sumber terdokumentasi dan pemetaan kolom yang konservatif. Periksa ekstensi lokal dan perbedaan versi sebelum digunakan di lingkungan produksi.
- Jalankan kueri pada SAP HANA menggunakan klien SQL atau layanan ekstraksi yang disetujui. Kueri menghasilkan satu baris peristiwa untuk setiap aktivitas yang diekstrak secara eksplisit. ProcessMind tidak akan menyimpulkan aktivitas yang tidak ada dalam hasil.
- Tinjau data sumber dan sesuaikan predikat konfigurasi yang ditandai untuk status penangguhan, jenis dokumen pembayaran, status usulan dan proses pembayaran, serta kelas objek dokumen perubahan. Jangan memperluas predikat ini sebelum mencocokkan dokumen akuntansi yang duplikat atau tidak terkait.
- Validasi penggabungan data menggunakan InvoiceNumber, CompanyCode, tahun fiskal, nomor dokumen akuntansi, nomor vendor, dan item baris jika relevan. Pastikan nomor dokumen faktur direpresentasikan secara konsisten di BKPF, BSEG, ACDOCA, REGUH, dan REGUP pada sistem target.
- Cocokkan peristiwa hasil perhitungan. Invoice Due dibuat pada tanggal jatuh tempo bersih hasil perhitungan, sedangkan Cash Discount Lost dibuat pada tenggat diskon paling awal yang berlaku jika pembayaran belum dilakukan sebelum tenggat tersebut. Baris hasil perhitungan ini perlu dibedakan dengan jelas dari peristiwa yang berasal dari rekaman sumber.
- Ekspor hasil sebagai CSV UTF-8 tanpa format tambahan atau format tabular lain yang didukung ProcessMind. Pertahankan nama kolom persis seperti berikut: InvoiceNumber, Activity, EventTime, SourceSystem, dan LastDataUpdate. Gunakan satu baris untuk setiap peristiwa dan jangan menggabungkan aktivitas berdasarkan faktur.
- Unggah log peristiwa ke ProcessMind. Petakan InvoiceNumber sebagai ID kasus, Activity sebagai nama aktivitas, dan EventTime sebagai waktu peristiwa. Petakan kolom lainnya sebagai atribut peristiwa atau kasus sesuai konfigurasi impor ProcessMind.
Konfigurasi
- Rentang tanggal: Untuk ekstraksi awal, gunakan periode berjalan selama 3 hingga 6 bulan. Terapkan predikat tanggal pembukuan, tanggal perubahan, dan tanggal program pembayaran secara konsisten. Perpanjang rentang saat memvalidasi syarat pembayaran jangka panjang.
- Skema: Ganti [Your SAP HANA schema] dengan skema yang memiliki objek SAP. Pastikan apakah lingkungan menyediakan objek yang bergantung pada klien melalui skema terpilih atau memerlukan predikat klien secara eksplisit.
- Filter perusahaan: Atur [Company code filter] untuk membatasi BUKRS ke kode perusahaan yang diperlukan. Terapkan cakupan yang sama pada BKPF, BSEG, ACDOCA, REGUH, REGUP, dan sumber dokumen perubahan jika kolom terkait tersedia.
- Filter dokumen: Tinjau predikat jenis dokumen faktur dan jenis dokumen pembayaran. Kueri ini mencakup contoh umum, tetapi jenis dokumen dapat dikonfigurasi dan harus disesuaikan dengan sistem tujuan.
- Faktur yang ditangguhkan: Pastikan representasi status dokumen yang ditangguhkan di VBKPF atau BKPF. Kueri ini menggunakan predikat status yang dapat dikonfigurasi karena kode status dokumen yang ditangguhkan dapat berbeda menurut rilis dan penerapan.
- Perubahan pembayaran: Pastikan kelas objek, nama tabel, nama kolom, dan representasi nilai dokumen perubahan untuk BSEG-ZLSPR dan BSEG-ZTERM. Verifikasi penyimpanan dokumen perubahan dan penamaan kolom di sistem tujuan.
- Program pembayaran: Pastikan kolom REGUH dan REGUP yang digunakan untuk status proposal dan eksekusi, tanggal proses, identifikasi proses, serta tautan dokumen akuntansi. Konfigurasi program pembayaran lokal dapat memengaruhi nilai status yang tersedia.
- Kinerja: Batasi rentang tanggal dan kode perusahaan, pilih hanya kolom yang diperlukan, lalu terapkan filter khusus sumber sebelum join. Untuk kumpulan data besar, wujudkan subset sumber yang sudah difilter atau gunakan HANA calculation view maupun skema ekstraksi yang disetujui.
- Otorisasi: Akses yang diperlukan mencakup izin baca ke objek skema SAP HANA terkait dan view yang menampilkan data akuntansi, program pembayaran, serta dokumen perubahan. Koordinasikan dengan tim keamanan SAP dan tata kelola data.
- Prasyarat fungsional: Fitur Financial Accounting, Accounts Payable, program pembayaran, dan dokumen perubahan yang relevan harus aktif dan memiliki data. Jika tabel sumber tidak digunakan dalam penerapan, atur penggantinya yang disetujui berdasarkan desain sistem.
- Penanganan stempel waktu: BKPF dan BSEG biasanya menyediakan tanggal dan waktu dalam kolom terpisah. Kueri ini menggabungkannya menjadi stempel waktu. Pastikan zona waktu sistem sumber dan lakukan konversi yang diperlukan sebelum mengunggah ke ProcessMind.
- Perlindungan data: Batasi data pemasok dan akuntansi sesuai cakupan yang disetujui. Terapkan kebijakan retensi, penyamaran, dan akses organisasi.
Contoh kueri sql
WITH
params AS (
SELECT
TO_DATE('[Start date]', 'YYYYMMDD') AS start_date,
TO_DATE('[End date]', 'YYYYMMDD') AS end_date,
'[Source system identifier]' AS source_system
FROM DUMMY
),
base_bkpf AS (
SELECT
b.MANDT,
b.BUKRS,
b.BELNR,
b.GJAHR,
b.BLART,
b.BLDAT,
b.BUDAT,
b.CPUDT,
b.CPUTM,
b.USNAM,
b.STBLG,
b.STJAH,
b.XBLNR,
b.WAERS,
b.BKTXT,
p.source_system,
p.start_date,
p.end_date
FROM [Your SAP HANA schema].BKPF b
CROSS JOIN params p
WHERE b.BUDAT BETWEEN TO_VARCHAR(p.start_date, 'YYYYMMDD') AND TO_VARCHAR(p.end_date, 'YYYYMMDD')
AND [Company code filter]
),
invoice_bseg AS (
SELECT
k.MANDT,
k.BUKRS,
k.BELNR,
k.GJAHR,
k.BLART,
k.BLDAT,
k.BUDAT,
k.CPUDT,
k.CPUTM,
k.USNAM,
k.STBLG,
k.STJAH,
k.XBLNR,
k.WAERS,
k.BKTXT,
k.source_system,
s.BUZEI,
s.LIFNR,
s.WRBTR,
s.DMBTR,
s.ZTERM,
s.ZLSPR,
s.ZFBDT,
s.ZBD1T,
s.ZBD2T,
s.ZBD3T,
s.AUGDT,
s.AUGBL,
s.SHKZG,
s.SGTXT,
s.XREF1,
s.XREF2,
s.XREF3
FROM base_bkpf k
INNER JOIN [Your SAP HANA schema].BSEG s
ON s.MANDT = k.MANDT
AND s.BUKRS = k.BUKRS
AND s.BELNR = k.BELNR
AND s.GJAHR = k.GJAHR
WHERE s.LIFNR IS NOT NULL
AND s.LIFNR <> ''
),
acdoca_invoice AS (
SELECT
a.RCLNT AS MANDT,
a.RBUKRS AS BUKRS,
a.BELNR,
a.GJAHR,
a.BUZEI,
a.RACCT,
a.HSL,
a.WSL,
a.RWCUR,
a.BUDAT,
a.BLDAT,
a.AUGDT,
a.AUGBL
FROM [Your SAP HANA schema].ACDOCA a
WHERE a.BUDAT BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
AND [ACDOCA company code filter]
),
invoice_cases AS (
SELECT DISTINCT
i.MANDT,
i.BUKRS,
i.BELNR,
i.GJAHR,
i.BUZEI,
i.LIFNR,
i.WRBTR,
i.ZTERM,
i.ZLSPR,
i.ZFBDT,
i.ZBD1T,
i.ZBD2T,
i.ZBD3T,
i.AUGDT,
i.AUGBL,
i.BLART,
i.BLDAT,
i.BUDAT,
i.CPUDT,
i.CPUTM,
i.USNAM,
i.STBLG,
i.STJAH,
i.XBLNR,
i.WAERS,
i.source_system,
COALESCE(NULLIF(i.XBLNR, ''), i.BELNR) AS InvoiceNumber,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD3T, '')), 0)) AS NetDueDate,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD1T, '')), 0)) AS DiscountDueDate1,
ADD_DAYS(TO_DATE(COALESCE(NULLIF(i.ZFBDT, ''), i.BLDAT), 'YYYYMMDD'), COALESCE(TO_INTEGER(NULLIF(i.ZBD2T, '')), 0)) AS DiscountDueDate2
FROM invoice_bseg i
LEFT JOIN acdoca_invoice a
ON a.MANDT = i.MANDT
AND a.BUKRS = i.BUKRS
AND a.BELNR = i.BELNR
AND a.GJAHR = i.GJAHR
AND a.BUZEI = i.BUZEI
),
change_events AS (
SELECT
c.MANDT,
c.OBJECTID,
c.TABKEY,
c.FNAME,
c.VALUE_OLD,
c.VALUE_NEW,
c.UDATE,
c.UTIME,
c.USERNAME
FROM [Your SAP HANA schema].[Your change document item table name] c
WHERE c.TABNAME = 'BSEG'
AND c.FNAME IN ('ZLSPR', 'ZTERM')
AND c.UDATE BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
AND [Change document object class filter]
),
reguh_events AS (
SELECT
r.MANDT,
r.LAUFD,
r.LAUFI,
r.XVORL,
r.ZBUKR,
r.LIFNR,
r.VBLNR,
r.AUSFD,
r.AUSDT,
r.LAUFD AS RunDate,
r.ZALDT,
r.RZAWE,
r.XEINZ,
r.XPGRO,
r.XAVIS,
r.XVORL AS ProposalIndicator
FROM [Your SAP HANA schema].REGUH r
WHERE r.LAUFD BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
),
regup_events AS (
SELECT
u.MANDT,
u.LAUFD,
u.LAUFI,
u.ZBUKR,
u.LIFNR,
u.VBLNR,
u.BUKRS,
u.BELNR,
u.GJAHR,
u.BUZEI,
u.XVORL,
u.AUGBL,
u.AUGDT
FROM [Your SAP HANA schema].REGUP u
WHERE u.LAUFD BETWEEN TO_VARCHAR((SELECT start_date FROM params), 'YYYYMMDD')
AND TO_VARCHAR((SELECT end_date FROM params), 'YYYYMMDD')
),
events AS (
SELECT
i.InvoiceNumber,
'Invoice Parked' AS Activity,
TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS') AS EventTime,
i.source_system AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
i.LIFNR AS VendorNumber,
i.BUKRS AS CompanyCode,
i.WRBTR AS InvoiceAmount,
i.BLART AS DocumentType,
i.ZTERM AS PaymentTerms,
i.ZLSPR AS PaymentBlockReason,
i.USNAM AS UserName,
i.AUGDT AS ClearingDate,
i.NetDueDate,
CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END AS IsLatePayment,
FALSE AS IsTouchless
FROM invoice_cases i
INNER JOIN [Your SAP HANA schema].VBKPF v
ON v.MANDT = i.MANDT
AND v.BUKRS = i.BUKRS
AND v.BELNR = i.BELNR
AND v.GJAHR = i.GJAHR
WHERE [VBKPF parked status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Posted', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i
UNION ALL
SELECT i.InvoiceNumber, 'Payment Block Applied', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, c.VALUE_NEW, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZLSPR' AND COALESCE(c.VALUE_OLD, '') = '' AND COALESCE(c.VALUE_NEW, '') <> ''
UNION ALL
SELECT i.InvoiceNumber, 'Price Variance Detected', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.ZLSPR = 'R'
UNION ALL
SELECT i.InvoiceNumber, 'Quantity Variance Detected', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.ZLSPR = 'M'
UNION ALL
SELECT i.InvoiceNumber, 'Payment Terms Changed', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, c.VALUE_NEW, i.ZLSPR, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZTERM'
UNION ALL
SELECT i.InvoiceNumber, 'Payment Block Removed', TO_TIMESTAMP(c.UDATE || LPAD(COALESCE(c.UTIME, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, c.VALUE_OLD, c.USERNAME, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN change_events c ON c.OBJECTID = i.BELNR AND c.FNAME = 'ZLSPR' AND COALESCE(c.VALUE_OLD, '') <> '' AND COALESCE(c.VALUE_NEW, '') = ''
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Due', TO_TIMESTAMP(TO_VARCHAR(i.NetDueDate, 'YYYYMMDD') || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.NetDueDate IS NOT NULL
UNION ALL
SELECT i.InvoiceNumber, 'Cash Discount Lost', TO_TIMESTAMP(TO_VARCHAR(CASE WHEN i.DiscountDueDate1 <= i.DiscountDueDate2 THEN i.DiscountDueDate1 ELSE i.DiscountDueDate2 END, 'YYYYMMDD') || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.AUGDT IS NULL OR i.AUGDT > CASE WHEN i.DiscountDueDate1 <= i.DiscountDueDate2 THEN i.DiscountDueDate1 ELSE i.DiscountDueDate2 END
UNION ALL
SELECT i.InvoiceNumber, 'Payment Proposal Created', TO_TIMESTAMP(r.RunDate || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN regup_events u ON u.BUKRS = i.BUKRS AND u.BELNR = i.BELNR AND u.GJAHR = i.GJAHR AND u.BUZEI = i.BUZEI INNER JOIN reguh_events r ON r.MANDT = u.MANDT AND r.LAUFD = u.LAUFD AND r.LAUFI = u.LAUFI AND r.LIFNR = u.LIFNR WHERE [Payment proposal status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Payment Run Executed', TO_TIMESTAMP(r.RunDate || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN regup_events u ON u.BUKRS = i.BUKRS AND u.BELNR = i.BELNR AND u.GJAHR = i.GJAHR AND u.BUZEI = i.BUZEI INNER JOIN reguh_events r ON r.MANDT = u.MANDT AND r.LAUFD = u.LAUFD AND r.LAUFI = u.LAUFI AND r.LIFNR = u.LIFNR WHERE [Payment run executed status predicate]
UNION ALL
SELECT i.InvoiceNumber, 'Payment Document Created', TO_TIMESTAMP(p.CPUDT || LPAD(COALESCE(p.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, p.BLART, i.ZTERM, i.ZLSPR, p.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i INNER JOIN [Your SAP HANA schema].BKPF p ON p.MANDT = i.MANDT AND p.BUKRS = i.BUKRS AND p.BELNR = i.AUGBL AND p.GJAHR = i.GJAHR WHERE p.BLART IN ('ZP', 'KZ')
UNION ALL
SELECT i.InvoiceNumber, 'Payment Cleared', TO_TIMESTAMP(i.AUGDT || '000000', 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.AUGDT IS NOT NULL
UNION ALL
SELECT i.InvoiceNumber, 'Invoice Reversed', TO_TIMESTAMP(i.CPUDT || LPAD(COALESCE(i.CPUTM, '000000'), 6, '0'), 'YYYYMMDDHH24MISS'), i.source_system, CURRENT_TIMESTAMP, i.LIFNR, i.BUKRS, i.WRBTR, i.BLART, i.ZTERM, i.ZLSPR, i.USNAM, i.AUGDT, i.NetDueDate, CASE WHEN i.AUGDT IS NOT NULL AND i.AUGDT > i.NetDueDate THEN TRUE ELSE FALSE END, FALSE
FROM invoice_cases i WHERE i.STBLG IS NOT NULL AND i.STBLG <> ''
)
SELECT
InvoiceNumber,
Activity,
EventTime,
SourceSystem,
LastDataUpdate,
VendorNumber,
CompanyCode,
InvoiceAmount,
DocumentType,
PaymentTerms,
PaymentBlockReason,
UserName,
ClearingDate,
NetDueDate,
IsLatePayment,
IsTouchless
FROM events
WHERE EventTime IS NOT NULL
ORDER BY InvoiceNumber, EventTime, Activity; Siap untuk memulai?
Ubah data keuangan Anda menjadi wawasan yang dapat ditindaklanjuti dan mulai optimalkan siklus pembayaran hari ini. Tim kami siap membantu Anda di setiap tahap perjalanan process mining.
Perbaiki pemrosesan pembayaran utang usaha di SAP S/4HANA
Atasi hambatan dan kurangi waktu siklus hingga 30%.
Tidak perlu kartu kredit. Penyiapan hanya 5 menit.