# Tax Compliance

- Module key: `TaxCompliance`
- Category: `Accounting/Finance`
- Path: `app/Modules/TaxCompliance`

## Ringkasan

Tax Compliance berada di kategori Accounting/Finance. Modul ini memiliki 14 definisi route, 1 controller, 3 model, dan 1 view. Database module terdeteksi pada tabel: `tax_efakturs`, `tax_ebupots`, `tax_logs`.

## Flowchart

```mermaid
flowchart TD
    A[User / Operator] --> B[Menu Tax Compliance]
    B --> C[Routes: 14]
    C --> D[Controllers: 1]
    D --> E[Views: 1]
    D --> F[(Tables: 3<br/>tax_efakturs<br/>tax_ebupots<br/>tax_logs)]
    D --> G[Validation / Business Rules]
    G --> F
    F --> H[Report / Export / Audit]
```


## Routes

- `Route::middleware(['auth', 'ip.block', 'menu.access'])`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/', [TaxComplianceController::class, 'index'])->name('index');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/efaktur/data', [TaxComplianceController::class, 'efakturData'])->name('efaktur.data');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::post('/efaktur', [TaxComplianceController::class, 'efakturStore'])->name('efaktur.store');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::put('/efaktur/{id}', [TaxComplianceController::class, 'efakturUpdate'])->name('efaktur.update');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/ebupot/data', [TaxComplianceController::class, 'ebupotData'])->name('ebupot.data');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::post('/ebupot', [TaxComplianceController::class, 'ebupotStore'])->name('ebupot.store');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::put('/ebupot/{id}', [TaxComplianceController::class, 'ebupotUpdate'])->name('ebupot.update');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/pph21/data', [TaxComplianceController::class, 'pph21Data'])->name('pph21.data');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/logs/data', [TaxComplianceController::class, 'logsData'])->name('logs.data');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::post('/logs', [TaxComplianceController::class, 'logsStore'])->name('logs.store');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/projects/search', [TaxComplianceController::class, 'projectsSearch'])->name('projects.search');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/clients/search', [TaxComplianceController::class, 'clientsSearch'])->name('clients.search');`  
  File: `app/Modules/TaxCompliance/routes/web.php`
- `Route::get('/vendors/search', [TaxComplianceController::class, 'vendorsSearch'])->name('vendors.search');`  
  File: `app/Modules/TaxCompliance/routes/web.php`

## Controllers

- `app/Modules/TaxCompliance/Http/Controllers/TaxComplianceController.php`

## Models

- `app/Modules/TaxCompliance/Models/TaxEbupotModel.php`
- `app/Modules/TaxCompliance/Models/TaxEfakturModel.php`
- `app/Modules/TaxCompliance/Models/TaxLogModel.php`

## Views

- `app/Modules/TaxCompliance/Resources/views/index.blade.php`

## Database / Migration

### `tax_efakturs`
- Actions: `create`
- Columns: 17
  - `source_type:string`
  - `source_id:unsignedBigInteger`
  - `project_id:unsignedBigInteger`
  - `client_id:unsignedBigInteger`
  - `tax_invoice_number:string`
  - `invoice_number:string`
  - `invoice_date:date`
  - `dpp_amount:decimal`
  - `ppn_amount:decimal`
  - `ppnbm_amount:decimal`
  - `status:string`
  - `notes:text`
  - `created_by:unsignedBigInteger`
  - `updated_by:unsignedBigInteger`
  - `status:index`
  - `tax_invoice_number:index`
  - `source_type:index`
- Migrations:
  - `app/Modules/TaxCompliance/Database/migrations/2026_03_26_140000_create_tax_compliance_tables.php`
### `tax_ebupots`
- Actions: `create`
- Columns: 19
  - `source_type:string`
  - `source_id:unsignedBigInteger`
  - `vendor_id:unsignedBigInteger`
  - `project_id:unsignedBigInteger`
  - `bukti_potong_no:string`
  - `tax_type:string`
  - `doc_date:date`
  - `period:string`
  - `dpp_amount:decimal`
  - `tax_rate:decimal`
  - `tax_amount:decimal`
  - `status:string`
  - `notes:text`
  - `created_by:unsignedBigInteger`
  - `updated_by:unsignedBigInteger`
  - `tax_type:index`
  - `status:index`
  - `bukti_potong_no:index`
  - `source_type:index`
- Migrations:
  - `app/Modules/TaxCompliance/Database/migrations/2026_03_26_140000_create_tax_compliance_tables.php`
### `tax_logs`
- Actions: `create`
- Columns: 13
  - `log_type:string`
  - `action:string`
  - `status:string`
  - `reference_type:string`
  - `reference_id:unsignedBigInteger`
  - `period:string`
  - `logged_at:timestamp`
  - `message:text`
  - `payload:json`
  - `created_by:unsignedBigInteger`
  - `log_type:index`
  - `reference_type:index`
  - `logged_at:index`
- Migrations:
  - `app/Modules/TaxCompliance/Database/migrations/2026_03_26_140000_create_tax_compliance_tables.php`
