# Master Bpjs

- Module key: `MasterBpjs`
- Category: `Payroll/Finance`
- Path: `app/Modules/MasterBpjs`

## Ringkasan

Master Bpjs berada di kategori Payroll/Finance. Modul ini memiliki 13 definisi route, 1 controller, 3 model, dan 1 view. Database module terdeteksi pada tabel: `master_bpjs`, `master_bpjs_rate_histories`, `master_bpjs_ceiling_histories`.

## Flowchart

```mermaid
flowchart TD
    A[User / Operator] --> B[Menu Master Bpjs]
    B --> C[Routes: 13]
    C --> D[Controllers: 1]
    D --> E[Views: 1]
    D --> F[(Tables: 3<br/>master_bpjs<br/>master_bpjs_rate_histories<br/>master_bpjs_ceiling_histories)]
    D --> G[Validation / Business Rules]
    G --> F
    F --> H[Report / Export / Audit]
```


## Routes

- `Route::middleware(['auth', 'ip.block', 'menu.access'])->group(function () {`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::prefix('master-bpjs')->name('master_bpjs.')->group(function () {`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::get('/', [MasterBpjsController::class, 'index'])->name('index');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::get('data', [MasterBpjsController::class, 'data'])->name('data');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::post('/', [MasterBpjsController::class, 'store'])->name('store');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::put('{id}', [MasterBpjsController::class, 'update'])->name('update');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::delete('{id}', [MasterBpjsController::class, 'destroy'])->name('destroy');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::post('{id}/rate-histories', [MasterBpjsController::class, 'storeRateHistory'])->name('rate_histories.store');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::put('rate-histories/{historyId}', [MasterBpjsController::class, 'updateRateHistory'])->name('rate_histories.update');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::delete('rate-histories/{historyId}', [MasterBpjsController::class, 'destroyRateHistory'])->name('rate_histories.destroy');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::post('{id}/ceiling-histories', [MasterBpjsController::class, 'storeCeilingHistory'])->name('ceiling_histories.store');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::put('ceiling-histories/{historyId}', [MasterBpjsController::class, 'updateCeilingHistory'])->name('ceiling_histories.update');`  
  File: `app/Modules/MasterBpjs/routes/web.php`
- `Route::delete('ceiling-histories/{historyId}', [MasterBpjsController::class, 'destroyCeilingHistory'])->name('ceiling_histories.destroy');`  
  File: `app/Modules/MasterBpjs/routes/web.php`

## Controllers

- `app/Modules/MasterBpjs/Http/Controllers/MasterBpjsController.php`

## Models

- `app/Modules/MasterBpjs/Models/BpjsCeilingHistoryModel.php`
- `app/Modules/MasterBpjs/Models/BpjsModel.php`
- `app/Modules/MasterBpjs/Models/BpjsRateHistoryModel.php`

## Views

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

## Database / Migration

### `master_bpjs`
- Actions: `create`, `table`
- Columns: 12
  - `code:string`
  - `name:string`
  - `bpjs_type:enum`
  - `rate_company_percent:decimal`
  - `rate_employee_percent:decimal`
  - `description:text`
  - `is_active:boolean`
  - `component_code:string`
  - `basis_type:enum`
  - `uses_ceiling:boolean`
  - `default_enrollment_mode:enum`
  - `display_order:unsignedInteger`
- Migrations:
  - `app/Modules/MasterBpjs/Database/migrations/2026_02_24_100200_create_master_bpjs_table.php`
  - `app/Modules/MasterBpjs/Database/migrations/2026_04_21_160000_add_rule_columns_to_master_bpjs_table.php`
### `master_bpjs_rate_histories`
- Actions: `create`
- Columns: 8
  - `bpjs_id:foreignId`
  - `effective_start:date`
  - `effective_end:date`
  - `rate_company_percent:decimal`
  - `rate_employee_percent:decimal`
  - `notes:text`
  - `is_active:boolean`
  - `bpjs_id:index`
- Migrations:
  - `app/Modules/MasterBpjs/Database/migrations/2026_03_06_130000_create_master_bpjs_rate_histories_table.php`
### `master_bpjs_ceiling_histories`
- Actions: `create`, `table`
- Columns: 11
  - `bpjs_id:foreignId`
  - `effective_start:date`
  - `effective_end:date`
  - `ceiling_nominal:decimal`
  - `notes:text`
  - `is_active:boolean`
  - `bpjs_id:index`
  - `ceiling_min_nominal:decimal`
  - `ceiling_max_nominal:decimal`
  - `ceiling_max_nominal:dropColumn`
  - `ceiling_min_nominal:dropColumn`
- Migrations:
  - `app/Modules/MasterBpjs/Database/migrations/2026_04_21_161000_create_master_bpjs_ceiling_histories_table.php`
  - `app/Modules/MasterBpjs/Database/migrations/2026_04_24_150000_add_min_max_to_master_bpjs_ceiling_histories_table.php`
