# DST Collection — Project Context

## Tentang Project
**DST Collection** adalah aplikasi ERP untuk brand pakaian wanita (daster, dress, dll). Aplikasi ini mengelola dua area bisnis utama:

1. **Toko** — penjualan, produk, keuangan, HR
2. **Konveksi** — bahan baku, cutting, pembelian bahan

## Tech Stack
| Layer | Technology |
|-------|------------|
| Backend | Laravel 13, PHP 8.3 |
| Frontend | React 19, Inertia.js 3, TypeScript |
| UI | shadcn/ui, Radix UI, Tailwind CSS 4 |
| Auth | Laravel Fortify, Spatie Permission |
| DB | MySQL (SoftDeletes di semua model utama) |

## Roles & Akses

### role: `developer`, `owner`
- **Akses**: Semua module, semua aksi
- **Catatan**: Selalu muncul di semua sidebar

### role: `admin-toko`
- **Akses**: Full CRUD semua module toko
- **Modules**: Kategori, Produk, Customer, Transaksi, Restock, Kas Toko, Pengeluaran, Kasbon, Gaji, Pegawai, Presensi, Cuti, Settings
- **Catatan**: TIDAK akses Supplier, Bahan Baku, Belanja, Cutting

### role: `direktur`
- **Akses**: Readonly semua data toko + bisa ajukan kasbon
- **Modules**: Semua module toko (readonly), kecuali Supplier, Bahan Baku, Belanja, Cutting
- **Catatan**: Bisa lihat semua data pegawai toko, tapi bukan admin bahan baku

### role: `admin-bahan-baku`
- **Akses**: Full CRUD untuk konveksi
- **Modules**: Bahan Baku, Supplier, Belanja, Cutting, Pegawai (hanya role admin-bahan-baku), Kasbon (lihat semua + ACC/bayar)
- **Catatan**: TIDAK akses module toko lainnya

### role: `cashier`
- **Akses**: Transaksi (full CRUD), Customer (full CRUD), Produk (readonly), Kasbon (CRUD own data)
- **Modules**: Transaksi, Customer, Produk (view), Kasbon, Gaji (view), Presensi, Cuti

### role: `marketing-offline`, `marketing-online`
- **Akses**: Transaksi (readonly yang punya dia), Produk (readonly), Customer (full CRUD)
- **Modules**: Transaksi (view only own), Produk (view), Customer, Kasbon (CRUD own data), Presensi, Cuti

### role: `stok-opname`
- **Akses**: Stok Opname (full CRUD + submit)
- **Modules**: Stok Opname, Produk (view), Presensi, Cuti

### role: `non-operator`
- **Akses**: Basic (dashboard, presensi, cuti, kasbon)
- **Modules**: Presensi, Cuti, Kasbon (CRUD own data)

## Module Overview

| # | Module | Route Group | Controller Path | Service Path |
|---|--------|-------------|-----------------|--------------|
| 1 | Kategori | `admin/master/categories` | `Admin/Master/CategoryController` | `Admin/Master/CategoryService` |
| 2 | Produk | `admin/master/products` | `Admin/Master/Product/ProductController` | `Admin/Master/Product/ProductService` |
| 3 | Bahan Baku | `admin/master/raw-materials` | `Admin/Master/RawMaterial/RawMaterialController` | `Admin/Master/RawMaterial/RawMaterialService` |
| 4 | Supplier | `admin/master/suppliers` | `Admin/Master/SupplierController` | `Admin/Master/SupplierService` |
| 5 | Customer | `admin/master/customers` | `Admin/Master/CustomerController` | `Admin/Master/CustomerService` |
| 6 | Belanja | `admin/manage/purchases` | `Admin/Manage/PurchaseController` | `Admin/Manage/PurchaseService` |
| 7 | Cutting | `admin/manage/cuttings` | `Admin/Manage/CuttingController` | `Admin/Manage/CuttingService` |
| 8 | Transaksi | `admin/manage/transactions` | `Admin/Manage/TransactionController` | `Admin/Manage/TransactionService` |
| 9 | Restock | `admin/manage/restocks` | `Admin/Manage/RestockController` | `Admin/Manage/RestockService` |
| 10 | Stok Opname | `admin/manage/stok-opnames` | (via StockMutationController) | — |
| 11 | Kas Toko | `admin/finance/cash-accounts` | `Admin/Finance/CashAccountController` | `Admin/Finance/Cash/CashAccountService`, `Admin/Finance/Cash/CashTransactionService` |
| 12 | Pengeluaran | `admin/finance/expenses` | `Admin/Finance/ExpenseController` | `Admin/Finance/ExpenseService` |
| 13 | Kasbon | `admin/finance/employee-advances` | `Admin/Finance/EmployeeAdvanceController` | `Admin/Finance/EmployeeAdvanceService` |
| 14 | Gaji | `admin/finance/payroll-periods` | `Admin/Finance/PayrollController` | `Admin/Finance/Payroll/PayrollPeriodService`, `Admin/Finance/Payroll/PayrollAdjustmentService` |
| 15 | Pegawai | `admin/hr/employees` | `Admin/HR/EmployeeController` | `Admin/HR/EmployeeService` |
| 16 | Presensi | `admin/hr/attendances` | `Admin/HR/AttendanceController` | `Admin/HR/AttendanceService` |
| 17 | Cuti | `admin/hr/leave-requests` | `Admin/HR/LeaveRequestController` | `Admin/HR/LeaveRequestService` |
| 18 | Role & Permission | `admin/settings/roles` | `Admin/RoleController` | `Admin/Settings/RoleService` |
| 19 | Pengaturan | `admin/settings` | `Admin/AdminSettingsController` | `Admin/AdminSettingsService` |

## Statistics
| Metric | Count |
|--------|-------|
| Tables | 48 |
| Models | 43 |
| Enums | 21 |
| Services | 30 |
| Controllers | 32 |
| Roles | 9 |
| Permissions | ~120 |
