# Catatan Migrasi dari V7.7

## Pemetaan komponen

| Google Apps Script / Google Sheets | PHP / MySQL |
|---|---|
| `doGet()` | `public/index.php` dan `public/health.php` |
| `doPost()` webhook | `public/telegram-webhook.php` |
| `google.script.run` | adapter `fetch()` di `public/index.php` |
| Sheet `Transaksi` | tabel `transactions` |
| Sheet `Pengguna` | tabel `users` |
| Sheet `Log Aktivitas` | tabel `transaction_audit` |
| `CacheService` sesi | tabel `auth_sessions` dan `auth_requests` |
| deduplikasi update Telegram | tabel `processed_updates` |
| `LockService` | transaksi InnoDB dan baris `ledger_mutex` |
| Ringkasan Sheet | agregasi langsung oleh `DashboardService` |

## Perubahan yang disengaja

- Format dan pewarnaan halaman Google Sheets dihapus karena data tidak lagi disimpan di spreadsheet.
- Ringkasan tidak disimpan sebagai tabel turunan. API menghitungnya dari transaksi agar tidak terjadi perbedaan data.
- Backup bot memakai CSV. Backup server penuh tetap harus memakai `mysqldump` atau fitur backup hosting.
- Polling Telegram tidak dipakai. Sistem hanya memakai webhook.
- Edit dan hapus tersedia di Mini App serta perintah bot berbasis ID.

## Konsistensi saldo

Semua operasi tulis mengunci `ledger_mutex` dalam transaksi InnoDB. Edit dan hapus menghitung ulang transaksi berdasarkan `created_at` dan `id`. Sistem membatalkan perubahan ketika urutan baru membuat pembayaran lebih besar daripada hutang yang tersedia.
