feat(jobs): exclude field terakhir dari proses CSV pada company dan data capture

Perubahan yang dilakukan:

- ProcessCompanyDataJob:
  - Memodifikasi method processRow dengan menambahkan logika array_pop($row) untuk menghapus elemen terakhir dari array CSV.
  - Menambahkan validasi count($row) > 0 untuk memastikan array tidak kosong sebelum diproses.
  - Mempertahankan validasi jumlah kolom sesuai FIELD_MAP untuk menjaga konsistensi data.
  - Menambahkan log informasi saat field terakhir berhasil dihapus dari setiap baris.
  - Mencatat jumlah kolom baru setelah penghapusan untuk keperluan debugging dan monitoring.
  - Mengurangi overhead processing dengan mengabaikan kolom tambahan yang tidak diperlukan.
  - Memastikan integritas data tetap terjaga saat mapping ke model Branch.
  - Tidak mengubah struktur FIELD_MAP yang sudah ada untuk menjaga kompatibilitas.
  - Mempertahankan fungsi validasi dan error handling yang sudah berjalan.

- ProcessDataCaptureDataJob:
  - Memodifikasi method processRow dengan logika array_pop($row) untuk menghapus kolom terakhir dari array CSV.
  - Menambahkan pengecekan count($row) > 0 untuk validasi array.
  - Mempertahankan validasi jumlah kolom sesuai CSV_HEADERS untuk memastikan kesesuaian data.
  - Menambahkan log saat kolom terakhir berhasil dihapus untuk setiap baris yang diproses.
  - Mencatat jumlah kolom baru setelah penghapusan sebagai bagian dari monitoring.
  - Memastikan hanya kolom yang didefinisikan dalam CSV_HEADERS yang diproses untuk efisiensi.
  - Mengurangi beban proses dengan mengabaikan field yang tidak relevan pada CSV input.
  - Mempertahankan integritas data dan mapping ke model DataCapture.
  - Tidak mengubah sistem batch processing yang ada, tetap menggunakan CHUNK_SIZE = 1000.
  - Mempertahankan performa dengan bulk insert dan upsert untuk data besar.
  - Memastikan efisiensi memory dengan chunk processing.
  - Menjaga struktur CSV_HEADERS dan proses validasi agar tetap kompatibel dengan sistem yang sudah berjalan.

Tujuan perubahan:

- Memungkinkan sistem untuk mengabaikan kolom tambahan di akhir file CSV baik untuk data company maupun data capture tanpa mengganggu proses import.
- Menghindari error atau kegagalan parsing saat terdapat tambahan kolom dari sistem eksternal.
- Meningkatkan fleksibilitas sistem dalam menghadapi input CSV yang tidak selalu konsisten secara jumlah kolom.
- Menjaga performa dan efisiensi proses dengan tetap mempertahankan proses batch dan chunking.
- Memastikan seluruh perubahan tetap backward compatible dengan proses yang sudah ada.
This commit is contained in:
Daeng Deni Mardaeni
2025-07-15 17:25:00 +07:00
parent 1564ce2efa
commit 23a0679f74
2 changed files with 12 additions and 0 deletions

View File

@@ -185,6 +185,12 @@
private function processRow(array $row, int $rowCount, string $filePath)
: void
{
// Exclude the last field from CSV
if (count($row) > 0) {
array_pop($row);
Log::info("Excluded last field from row $rowCount. New column count: " . count($row));
}
if (count(self::CSV_HEADERS) !== count($row)) {
Log::warning("Row $rowCount in $filePath has incorrect column count. Expected: " .
count(self::CSV_HEADERS) . ", Got: " . count($row));