53 lines
3.0 KiB
Markdown
53 lines
3.0 KiB
Markdown
# Data Migration Plan: Employee, Shift, and Attendance
|
|
|
|
## Executive Summary
|
|
This document outlines a structured plan to import historical Employee, Shift, and Attendance records from the legacy data dump (`rame_seb.sql`) into the current HRM system. Based on user directives, we will replicate the legacy data as closely as possible to the new relational structure.
|
|
|
|
## Architectural Approach & Data Mapping
|
|
|
|
### 1. Employee Details
|
|
* **Source:** Legacy `users` table.
|
|
* **Target:** Current `users` and `employees` tables.
|
|
* **Approach:**
|
|
* We will read the legacy `users` rows.
|
|
* For each row, create a `User` identity for authentication.
|
|
* **Password Rule:** Explicitly set all imported users' passwords to `123456` (hashed using Laravel's `Hash::make('123456')`) to ensure smooth initial access.
|
|
* Create the related `Employee` profile using the legacy HR details (`phone`, `address`, etc.), maintaining the mapping via `user_id`.
|
|
|
|
### 2. Shifts (The 48-Shift Strategy)
|
|
* **Source:** Legacy `shifts` table (contains ~48 half-hour interval shifts covering the 24-hour cycle, e.g., `OPS 12:00AM-09:00AM`).
|
|
* **Target:** Current `shifts` table.
|
|
* **Approach:**
|
|
* **Direct Replication:** We will import all 48 distinct shift templates exactly as they are defined in the legacy system.
|
|
* **Scheduling:** Since the legacy shifts are universally enabled for all 7 days (`sunday` through `saturday` = `1`), we do not need complex roster logic. We will simply migrate the `start_time`, `end_time`, and `is_night_shift` logic into our new `Shift` templates, making them immediately available for assignment to Employees.
|
|
|
|
### 3. Attendance
|
|
* **Source:** Legacy `attendances` table.
|
|
* **Target:** Current `attendance_records` table.
|
|
* **Approach:**
|
|
* Read the raw `check_in_time`, `check_out_time`, and `working_hours` from the legacy database.
|
|
* Link them to the newly generated `Employee` ID rather than the old legacy User ID.
|
|
* Map legacy attendance statuses (`present`, `leave`, etc.) to the new system's properties.
|
|
* "Just Copy" strategy: Orphaned records (if any) will still be imported if the related user exists, preserving historical attendance integrity.
|
|
|
|
---
|
|
|
|
## Task Breakdown / Execution Plan
|
|
|
|
1. **Database Preparation:**
|
|
- Load `rame_seb.sql` into a temporary secondary database connection in Laravel (e.g., `legacy_db`).
|
|
2. **Shift Importer:**
|
|
- Write a Seeder/Command to insert the 48 shifts into the `shifts` table.
|
|
- Retain legacy `id` mappings to properly link attendance records later.
|
|
3. **Employee Importer:**
|
|
- Write a Command to stream legacy users.
|
|
- Insert into `users` (password: `123456`).
|
|
- Insert into `employees` (associate with their legacy default `shift_id`).
|
|
4. **Attendance Importer:**
|
|
- Write a Command to fetch all legacy `attendances`.
|
|
- Remap IDs to the new structure and insert them sequentially into `attendance_records`.
|
|
|
|
---
|
|
|
|
*This plan is ready for execution. Run `/create` or confirm to proceed with writing the import scripts.*
|