# Tahap 3: Fondasi Accounting Profesional ## Tahun buku dan periode - Tahun buku kalender dapat dibuat melalui menu Admin → Periode Accounting. - Setiap tahun buku memiliki 12 periode bulanan. - Status periode: `open`, `soft_closed`, dan `closed`. - Soft close/close ditolak bila masih ada jurnal `draft`, `submitted`, atau `approved`. - Membuka kembali periode wajib menyertakan alasan dan dicatat pada log periode. - Trigger database menghubungkan journal legacy ke periode dan menolak insert pada periode non-open. ## Workflow jurnal ```text draft -> submitted -> approved -> posted -> reversed | | +-> rejected<+ ``` - Jurnal manual baru selalu dibuat sebagai `draft`. - Submit hanya dapat dilakukan pembuat jurnal atau Admin. - Approve, reject, post, dan reversal hanya tersedia bagi Admin pada implementasi saat ini. - Opsi pemisahan pembuat dan approver dapat diaktifkan dengan `WORKFLOW_REQUIRE_SEPARATE_APPROVER=true`. - Jurnal posted tidak dapat dihapus melalui menu Jurnal. - Koreksi posted dilakukan dengan reversal yang menukar debit dan kredit. - Setiap perubahan status dicatat pada `journal_status_histories`. - Seluruh jurnal historis diberi status awal `posted` dan history migrasi tanpa mengubah nominal. ## Dampak laporan Dashboard, buku besar, laba rugi, neraca, neraca saldo, dan generator PDF hanya menghitung status `posted` dan `reversed`. Draft, submitted, approved, serta rejected tidak memengaruhi laporan. ## Chart of accounts - Kode akun unik pada database. - Tersedia jenis akun header dan akun transaksi. - Akun header tidak dapat menerima posting. - Akun nonaktif tidak dapat menerima posting. - Parent cycle dicegah. - Akun yang mempunyai child, transaksi, atau mapping sistem tidak dapat dihapus. - Akun yang sudah pernah digunakan sebagai akun posting dipertahankan sebagai akun transaksi saat migrasi. ## Migration Version terakhir Tahap 3: ```text 20260831000700 ``` Jalankan: ```powershell php index.php migrate latest php index.php migrate status php index.php accountingcheck ``` ## Catatan kompatibilitas Beberapa modul legacy seperti Items, Asset manual, dan bagian tertentu Invoice masih membuat atau membersihkan jurnal sumber secara langsung. Insert-nya sudah dilindungi period trigger dan default `posted`, tetapi proses pembatalannya belum seluruhnya menggunakan reversal. Migrasi penuh proses tersebut dilakukan bersama penyempurnaan masing-masing subledger agar stok, invoice, aset, dan jurnal tidak terpisah. ## Temuan data lama Lima nomor jurnal historis masih duplikat dan tidak diubah otomatis karena memerlukan keputusan accounting. Unique index `journals.no_ref` baru dapat ditambahkan setelah rekonsiliasi data tersebut.