# Master Karyawan

- Module key: `MasterKaryawan`
- Category: `HRIS`
- Path: `app/Modules/MasterKaryawan`

## Ringkasan

Master Karyawan berada di kategori HRIS. Modul ini memiliki 26 definisi route, 1 controller, 10 model, dan 2 view. Database module terdeteksi pada tabel: `master_karyawans`, `master_karyawan_finger_histories`, `master_karyawan_bank_accounts`, `karyawan_area_histories`, `master_karyawan_signature_requests`, `master_karyawan_bpjs_profiles`, `master_karyawan_bpjs_profile_components`.

## Flowchart

```mermaid
flowchart TD
    A[User / Operator] --> B[Menu Master Karyawan]
    B --> C[Routes: 26]
    C --> D[Controllers: 1]
    D --> E[Views: 2]
    D --> F[(Tables: 7<br/>master_karyawans<br/>master_karyawan_finger_histories<br/>master_karyawan_bank_accounts<br/>karyawan_area_histories<br/>master_karyawan_signature_requests)]
    D --> G[Validation / Business Rules]
    G --> F
    F --> H[Report / Export / Audit]
```


## Routes

- `Route::get('employee-sign/{token}', [MasterKaryawanController::class, 'showSignatureRequest'])->name('master_karyawan.signature.show');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('employee-sign/{token}', [MasterKaryawanController::class, 'submitSignatureRequest'])->name('master_karyawan.signature.submit');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::middleware(['auth', 'ip.block', 'menu.access'])->group(function () {`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::prefix('master-karyawan')->name('master_karyawan.')->group(function () {`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('/', [MasterKaryawanController::class, 'index'])->name('index');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('data', [MasterKaryawanController::class, 'data'])->name('data');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('template', [MasterKaryawanController::class, 'template'])->name('template');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('export', [MasterKaryawanController::class, 'export'])->name('export');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('import', [MasterKaryawanController::class, 'import'])->name('import');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('user-options', [MasterKaryawanController::class, 'userOptions'])->name('user_options');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('generate-users', [MasterKaryawanController::class, 'generateUsers'])->name('generate_users');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('jabatan-options', [MasterKaryawanController::class, 'jabatanOptions'])->name('jabatan_options');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('bulk-deactivate', [MasterKaryawanController::class, 'bulkDeactivate'])->name('bulk_deactivate');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('/', [MasterKaryawanController::class, 'store'])->name('store');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/offering-letter', [MasterKaryawanController::class, 'applyOfferingLetter'])->name('offering_letter');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/signature-link', [MasterKaryawanController::class, 'generateContractSignatureLink'])->name('signature_link');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('{id}/contract-history', [MasterKaryawanController::class, 'contractHistory'])->name('contract_history');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/contract-documents', [MasterKaryawanController::class, 'uploadContractDocument'])->name('contract_documents.upload');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/supporting-documents', [MasterKaryawanController::class, 'uploadSupportingDocument'])->name('supporting_documents.upload');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::delete('{id}/supporting-documents/{documentId}', [MasterKaryawanController::class, 'destroySupportingDocument'])->name('supporting_documents.destroy');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::get('{id}/area-history', [MasterKaryawanController::class, 'areaHistory'])->name('area_history');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/transfer-area', [MasterKaryawanController::class, 'transferArea'])->name('transfer_area');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/resign', [MasterKaryawanController::class, 'resign'])->name('resign');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::post('{id}/reactivate', [MasterKaryawanController::class, 'reactivate'])->name('reactivate');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::put('{id}', [MasterKaryawanController::class, 'update'])->name('update');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`
- `Route::delete('{id}', [MasterKaryawanController::class, 'destroy'])->name('destroy');`  
  File: `app/Modules/MasterKaryawan/routes/web.php`

## Controllers

- `app/Modules/MasterKaryawan/Http/Controllers/MasterKaryawanController.php`

## Models

- `app/Modules/MasterKaryawan/Models/KaryawanAreaHistoryModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanBankAccountModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanBpjsProfileComponentModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanBpjsProfileModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanContractDocumentModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanFingerHistoryModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanOfferingLetterModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanSignatureRequestModel.php`
- `app/Modules/MasterKaryawan/Models/KaryawanSupportingDocumentModel.php`

## Views

- `app/Modules/MasterKaryawan/Resources/views/index.blade.php`
- `app/Modules/MasterKaryawan/Resources/views/signature-request.blade.php`

## Database / Migration

### `master_karyawans`
- Actions: `create`, `table`
- Columns: 49
  - `employee_code:string`
  - `full_name:string`
  - `gender:enum`
  - `birth_date:date`
  - `hire_date:date`
  - `employment_status:enum`
  - `jabatan_id:foreignId`
  - `phone:string`
  - `email:string`
  - `address:string`
  - `description:text`
  - `is_active:boolean`
  - `finger_id:string`
  - `finger_id:unique`
  - `master_karyawans_finger_id_unique:dropUnique`
  - `finger_id:dropColumn`
  - `npwp_no:string`
  - `npwp_no:dropColumn`
  - `tax_family_status:string`
  - `payment_method:string`
  - `area:string`
  - `contract_start_date:date`
  - `contract_end_date:date`
  - `base_salary:decimal`
  - `overtime_rate:decimal`
  - `allowance_fixed:decimal`
  - `allowance_position:decimal`
  - `allowance_skill:decimal`
  - `allowance_medical_housing:decimal`
  - `incentive_amount:decimal`
  - `planned_start_time:time`
  - `planned_end_time:time`
  - `id_card_no:string`
  - `employee_group:string`
  - `age_year:unsignedSmallInteger`
  - `break_label:string`
  - `education_level:string`
  - `graduation_year:unsignedSmallInteger`
  - `school_name:string`
  - `emergency_contact_name:string`
  - ... +9 columns
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_02_24_130000_create_master_karyawans_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_02_26_120000_add_finger_id_to_master_karyawans_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_03_03_100300_add_npwp_to_master_karyawans_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_03_05_170000_add_hr_fields_to_master_karyawans_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_17_180000_add_hr_profile_fields_to_master_karyawans_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_20_091000_add_area_id_and_create_karyawan_area_histories_table.php`
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_20_150000_add_ktp_address_fields_to_master_karyawans_table.php`
### `master_karyawan_finger_histories`
- Actions: `create`
- Columns: 8
  - `karyawan_id:foreignId`
  - `finger_id:string`
  - `effective_start:date`
  - `effective_end:date`
  - `change_reason:string`
  - `is_active:boolean`
  - `finger_id:index`
  - `karyawan_id:index`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_02_26_120200_create_master_karyawan_finger_histories_table.php`
### `master_karyawan_bank_accounts`
- Actions: `create`
- Columns: 9
  - `karyawan_id:foreignId`
  - `bank_name:string`
  - `account_no:string`
  - `account_name:string`
  - `branch_name:string`
  - `currency_code:string`
  - `is_default:boolean`
  - `is_active:boolean`
  - `karyawan_id:index`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_03_03_100000_create_master_karyawan_bank_accounts_table.php`
### `karyawan_area_histories`
- Actions: `create`
- Columns: 8
  - `karyawan_id:foreignId`
  - `area_id:foreignId`
  - `area_label:string`
  - `effective_start_date:date`
  - `effective_end_date:date`
  - `notes:text`
  - `is_current:boolean`
  - `karyawan_id:index`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_20_091000_add_area_id_and_create_karyawan_area_histories_table.php`
### `master_karyawan_signature_requests`
- Actions: `create`
- Columns: 22
  - `karyawan_id:unsignedBigInteger`
  - `request_type:string`
  - `reference_type:string`
  - `reference_id:unsignedBigInteger`
  - `title:string`
  - `token:string`
  - `status:string`
  - `payload:json`
  - `expires_at:timestamp`
  - `opened_at:timestamp`
  - `signed_at:timestamp`
  - `signer_name:string`
  - `signer_email:string`
  - `signer_phone:string`
  - `signature_path:string`
  - `signature_mime_type:string`
  - `signature_file_size:unsignedInteger`
  - `acknowledged:boolean`
  - `signed_ip:string`
  - `signed_user_agent:string`
  - `created_by:unsignedBigInteger`
  - `is_active:boolean`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_20_230000_create_master_karyawan_signature_requests_table.php`
### `master_karyawan_bpjs_profiles`
- Actions: `create`
- Columns: 10
  - `karyawan_id:foreignId`
  - `profile_name:string`
  - `effective_start:date`
  - `effective_end:date`
  - `basis_general_nominal:decimal`
  - `basis_jp_nominal:decimal`
  - `basis_health_nominal:decimal`
  - `notes:text`
  - `is_active:boolean`
  - `karyawan_id:index`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_21_163000_create_master_karyawan_bpjs_profiles_table.php`
### `master_karyawan_bpjs_profile_components`
- Actions: `create`
- Columns: 5
  - `profile_id:foreignId`
  - `bpjs_id:foreignId`
  - `is_enrolled:boolean`
  - `notes:text`
  - `profile_id:unique`
- Migrations:
  - `app/Modules/MasterKaryawan/Database/migrations/2026_04_21_164000_create_master_karyawan_bpjs_profile_components_table.php`
