# AFC — Z AI Akuntansi For Coretax (Laravel 12 Edition)

Port PHP Laravel 12 + Inertia.js + Vue 3 dari aplikasi AFC (Next.js).
Mengikuti stack PRD: **Laravel 12 · PHP 8.4 · MySQL 8 · Vue 3 · TailwindCSS · Inertia**.

> **Status:** Foundation + modul inti (Phase 1–3 PRD) sudah lengkap & runnable. Modul sisanya (laporan pajak, AR/AP aging, AI features, hak akses, pengaturan) mengikuti pola yang sama dan dapat ditambahkan bertahap — lihat **Roadmap** di bawah.

---

## Yang sudah ada

| Modul | Status |
|---|---|
| Auth (login/logout, audit log) | ✅ |
| Layout neuphormism (sidebar collapse + header + footer sticky) | ✅ |
| Theme neuphormism (6 warna + dark mode) — via localStorage `afc-theme` | ✅ |
| Database migration lengkap (semua tabel PRD §21) | ✅ |
| Seeder lengkap (62 akun COA, company, 4 roles, 2 users, 5 related parties, 3 templates, ~54 jurnal, 3 notif) | ✅ |
| Dashboard (6 KPI + 2 chart + 3 widget) | ✅ |
| Master Data: Daftar Akun (COA) — tree CRUD | ✅ |
| Jurnal Transaksi — list (filter/search/export CSV) + create (balance validation realtime) | ✅ |
| Laporan: Neraca Saldo, Neraca, Laba Rugi Komersial | ✅ |
| Print paper-style (header perusahaan + logo + NPWP + nama laporan + periode) | ✅ |
| Profil Perusahaan (edit) | ✅ |

## Roadmap (modul yang tinggal ditambahkan, pola sama)

- Master Akun Pajak, Pihak Terkait, Template Transaksi (CRUD)
- Laporan: Arus Kas, Perubahan Modal, Buku Besar
- Laporan Pajak: Laba Rugi Fiskal, Nominatif Entertainment/Promosi
- Laporan Piutang/Hutang: Outstanding + Aging
- Hak Akses: Pengguna & Role + Permission Matrix
- Pengaturan: tema/warna/logo/format (backend settings table sudah ada)
- AI Features: Smart Journal (OCR), Financial Insight, Tax Review, Chat — via Guzzle HTTP ke Z.ai API
- Notifikasi real-time, Audit Trail lengkap

---

## Requirements

- PHP >= 8.2 (8.4 sesuai PRD)
- Composer 2
- MySQL 8 (atau SQLite untuk dev cepat)
- Node.js 18+ & npm
- ekstensi PHP: pdo_mysql, mbstring, xml, bcmath, gd (untuk logo)

---

## Cara Menjalankan

```bash
# 1. Install dependency PHP & JS
composer install
npm install

# 2. Salin env & generate key
cp .env.example .env
php artisan key:generate

# 3. Konfigurasi database di .env (default MySQL: afc_coretax)
#    Buat database: CREATE DATABASE afc_coretax;
#    Atau untuk SQLite cepat: set DB_CONNECTION=sqlite lalu buat database/afc.sqlite

# 4. Migrate + seed
php artisan migrate --seed

# 5. Build frontend (atau jalankan dev server terpisah)
npm run dev        # hot reload (jalankan di terminal terpisah)

# 6. Jalankan server
php artisan serve  # http://localhost:8000

# 7. Login dengan akun demo:
#    admin@afc.co.id / admin123   (Super Admin)
#    rina@afc.co.id / admin123    (Finance Manager)
```

---

## Struktur Project

```
afc-laravel/
├── app/
│   ├── Http/Controllers/     Auth, Dashboard, Coa, Journal, Report, Company
│   ├── Http/Middleware/      Auth, RedirectIfAuthenticated, HandleInertia
│   ├── Models/               14 model Eloquent (Company, Coa, Journal, dst.)
│   ├── Providers/            App, Auth, Route
│   └── Support/Accounting.php  Helper saldo akuntansi (computeSaldos, format)
├── database/
│   ├── migrations/           2 file: base tables + AFC tables (semua PRD §21)
│   └── seeders/              Database, Company, RoleUser, Coa (62 akun),
│                             TaxAccount, RelatedParty, Template, Journal (~54), Notification
├── resources/
│   ├── css/app.css           Neuphormism + dark mode + print paper-style
│   ├── js/
│   │   ├── Layouts/AppLayout.vue    Sidebar + header + footer
│   │   ├── Components/ReportHeader.vue  Header laporan (logo+perusahaan+NPWP)
│   │   ├── Pages/             Auth/Login, Dashboard, Coa/Index, Journal/Index+Create,
│   │   │                       Report/{TrialBalance,BalanceSheet,IncomeStatement},
│   │   │                       Company/Profile
│   │   └── lib/               format.js, nav-config.js
│   └── views/app.blade.php   Inertia root + @routes (Ziggy)
├── routes/web.php, api.php, console.php
├── config/                    app, auth, database, session, services (Z.ai)
├── public/index.php
└── composer.json, package.json, vite.config.js, tailwind.config.js
```

---

## Akuntansi: Rumus Saldo

Di `app/Support/Accounting.php::computeSaldos()`:
- Untuk akun posting, posisi Debit: `saldoAkhir = saldoAwal + Σdebet − Σkredit`
- Untuk akun posting, posisi Kredit: `saldoAkhir = saldoAwal + Σkredit − Σdebet`
- `saldoAwal` = `coa.saldo_awal` + mutasi sebelum `dateFrom`
- Default periode: tahun berjalan (1 Jan – hari ini)

---

## Integrasi AI (Z.ai)

Belum diimplementasi di versi Laravel ini. Untuk menambahkan, gunakan Guzzle:
```php
// app/Services/ZaiService.php
$response = Http::withToken(config('services.zai.api_key'))
    ->post(config('services.zai.base_url') . '/chat/completions', [
        'messages' => [['role' => 'user', 'content' => $prompt]],
        'thinking' => ['type' => 'disabled'],
    ]);
```
Endpoint & format sama dengan z-ai-web-dev-sdk.

---

## Catatan

- File `.env` belum ada — salin dari `.env.example` dan generate key.
- Folder `vendor/` (Composer) dan `node_modules/` belum ada — jalankan `composer install` & `npm install`.
- Logo default dari `https://afc.lentera-partner.com/LOGO_AFC.png` — ganti via Profil Perusahaan.
- Untuk SQLite: uncomment baris `DB_CONNECTION=sqlite` di `.env`, comment MySQL, lalu `touch database/afc.sqlite`.

---

## Lisensi

MIT · © 2025 AFC
