3.5 KiB
Tahap 2: Fondasi Arsitektur dan Transaksi
Arsitektur baru
Controller menangani request dan response, model menangani akses data, sedangkan aturan bisnis berada di service:
HTTP/CLI request
-> Controller
-> Domain Service
-> Domain Model
-> Database
Komponen yang tersedia:
JournalService: validasi header, akun, baris, dan keseimbangan jurnal.PostingService: posting jurnal dari transaksi sumber dan pencegahan posting ganda.NumberingService: nomor dokumen atomic melaluidocument_sequences.AccountMappingService: mapping akun dari database dengan fallback konfigurasi.TransactionService: commit/rollback berbasis callback dan exception.JournalModel,AccountModel,InvoiceModel, danInventoryModel.BusinessExceptiondan helper response JSON konsisten.
Integrasi yang sudah dilakukan
- Jurnal manual menggunakan
JournalServicedanNumberingService. - Draft invoice menggunakan
InvoiceModeldan penomoran terpusat. - Posting item invoice menggunakan
PostingService. - Sinkronisasi stok dari invoice menggunakan
InventoryModel. - Nomor jurnal invoice dan pembayaran menggunakan
NumberingService. - Mapping akun invoice tidak lagi ditulis langsung pada controller.
- Penyusutan aset menggunakan mapping akun dan
PostingService.
Proses jurnal lama pada modul Items, Asset manual, dan pembayaran invoice yang kompleks masih tetap kompatibel. Migrasinya ke service dilakukan bertahap setelah characterization test tersedia agar perilaku transaksi lama tidak berubah tanpa terdeteksi.
Migration
Jalankan hanya melalui CLI:
php index.php migrate latest
php index.php migrate status
Rollback ke version sebelumnya:
php index.php migrate version 20260831000100
Jangan rollback migration pertama jika sequence sudah dipakai production, karena tabel sequence dan mapping akan dihapus oleh migration down.
Pemeriksaan accounting
Pemeriksaan read-only:
php index.php accountingcheck
Pemeriksaan mendeteksi:
- Tabel fondasi yang hilang.
- Mapping menuju akun yang tidak ada.
- Nomor jurnal duplikat.
- Jurnal debit/kredit tidak balance.
Temuan data historis
Pada penerapan awal ditemukan lima nomor referensi jurnal yang sudah duplikat:
ADJ-20260609-87INV-20260610-0006INV-20260611-0001INV-20260722-0002INV-20260723-0006
Data tersebut tidak diubah otomatis. Accounting perlu menentukan transaksi yang sah, kemudian referensi duplikat dikoreksi dengan audit trail. Setelah bersih, tambahkan unique index pada journals.no_ref melalui migration terpisah.
Aturan penggunaan service
- Controller baru tidak boleh insert langsung ke
journalsataujournal_details. - Mapping akun baru dibuat pada
system_account_mappings, bukan ID pada controller. - Nomor dokumen baru harus melalui
NumberingService. - Operasi multi-tabel harus memakai
TransactionServiceatau transaksi eksplisit dengan penanganan exception. - Saat dipanggil di dalam transaksi yang sudah aktif, gunakan parameter
manageTransaction=falsepada service posting. - Untuk sumber yang boleh menghasilkan beberapa jurnal, nonaktifkan duplicate-source guard dan gunakan referensi unik per periode/transaksi.
Langkah operasional berikutnya
- Review delapan mapping akun bersama accounting.
- Rekonsiliasi lima nomor jurnal historis yang duplikat.
- Tambahkan characterization test untuk Items, Asset, dan pembayaran invoice.
- Setelah test tersedia, pindahkan sisa direct journal insert ke
PostingService.