# GL Biaya Background Sync + Progress

## Perubahan

`POST /glbiaya/getdata` hanya membuat queue job dan langsung mengembalikan `sync_id`.
Download SAP, mapping, dan replace data dikerjakan oleh queue `gl-biaya`.
UI polling `GET /glbiaya/getdatastatus?sync_id=...` setiap 3 detik dan menampilkan progress aktual.

Progress yang ditampilkan:

- `queued` — menunggu queue worker
- `connecting` — menghubungkan SAP
- `downloading_sap` — download response SAP, termasuk MB terunduh bila ukuran response tersedia
- `downloading_chunks` — fallback download per 10 hari
- `parsing_json` — parsing JSON
- `preparing_data` — mapping/persiapan data
- `preparing_database` — persiapan replace periode
- `saving_data` — jumlah row yang sudah diproses / total row
- `finalizing` — commit selesai
- `completed` — 100%
- `failed` — proses gagal

## 1. Migration

Jalankan:

```bash
php artisan migrate
```

Jika migration background sync sebelumnya sudah pernah dijalankan, migration baru:

```text
2026_08_27_090200_add_progress_to_gl_biaya_sync_runs_table.php
```

akan menambahkan:

```text
progress_percent
progress_stage
processed_rows
downloaded_bytes
download_total_bytes
```

ke `gl_biaya_sync_runs`.

## 2. Environment

Pastikan `.env`:

```env
QUEUE_CONNECTION=database
DB_QUEUE_RETRY_AFTER=18000
```

Lalu:

```bash
php artisan optimize:clear
```

## 3. Jalankan worker

Untuk test/manual:

```bash
php artisan queue:work database --queue=gl-biaya --sleep=2 --tries=1 --timeout=0
```

Worker harus tetap hidup. Bila worker mati, progress akan berhenti pada `queued`.

## 4. Setelah deploy perubahan code

Jika worker sudah berjalan:

```bash
php artisan optimize:clear
php artisan queue:restart
```

Jika memakai Supervisor, worker akan dijalankan kembali secara otomatis.

## Flow progress

```text
0%      queued
1-5%    connecting
5-35%   downloading SAP
40%     parsing JSON
45%     data SAP diterima
50%     persiapan database
52-98%  mapping + insert berdasarkan processed_rows / total_rows
99%     finalizing
100%    completed
```

Catatan: persentase 5-35% mengikuti byte download bila server SAP memberikan total ukuran transfer. Jika ukuran transfer tidak diketahui, UI tetap menampilkan jumlah MB yang sudah terunduh dan stage proses.

Progress insert diupdate melalui koneksi database terpisah sehingga polling browser tetap dapat melihat perubahan `processed_rows` selama transaction `gl_biaya_report` masih berjalan.
