Final no-write mapping for the future draft-shift save table and columns. This confirms where the first real draft save should write later, but this phase still writes nothing.
| Table | hd_draft_shifts |
| Exists | Yes |
| Rows | 5 |
| Score | 205 |
| Confidence | High |
| Note | Selected as the best current draft-save target candidate. 26A-3 does not write to it. |
| Mapping only | Passed | 26A-3 maps table/columns only. |
| No insert/update/delete | Passed | Controller performs no database write statements. |
| No publish action | Passed | Employee-facing schedule is not changed. |
| No employee notifications | Passed | No text/email behavior is introduced. |
| Gate remains disabled by default | Passed | HD_EMPLOYEE_SCHEDULE_DRAFT_SAVE_ENABLED remains the safety gate. |
| No hard conflict blocking | Passed | Soft conflicts remain review-only. |
| No production override | Passed | This is a separate builder mapping support route. |
| Logical Field | Label | Required? | Mapped Column | Status | Future Source | Example | Would Write Now? | Next Phase Note |
|---|---|---|---|---|---|---|---|---|
| employee_id | Employee | Yes | employee_id | Mapped | Validated request employee_id | 1 | No | Ready for a future gated write phase after confirmation. |
| shift_date | Shift Date | Yes | work_date | Mapped | Validated request shift_date | 2026-06-05 | No | Ready for a future gated write phase after confirmation. |
| start_time | Start Time | Yes | starts_at | Mapped | Validated request start_time | 09:00 | No | Ready for a future gated write phase after confirmation. |
| end_time | End Time | Yes | ends_at | Mapped | Validated request end_time | 17:00 | No | Ready for a future gated write phase after confirmation. |
| period_id | Schedule Period | No | schedule_period_id | Mapped | Optional validated request period_id | 1 | No | Ready for a future gated write phase after confirmation. |
| status | Draft Status | No | status | Mapped | System should set draft | draft | No | Ready for a future gated write phase after confirmation. |
| role_position | Role / Position | No | role | Mapped | Optional validated request role_position | Lane Attendant | No | Ready for a future gated write phase after confirmation. |
| notes | Notes | No | Not detected | Optional Missing | Optional validated request notes | Optional manager note | No | Optional field can be skipped in the first real save. |
| created_by | Created By | No | created_by | Mapped | Authenticated manager when available | current user id | No | Ready for a future gated write phase after confirmation. |
| updated_by | Updated By | No | updated_by | Mapped | Authenticated manager when available | current user id | No | Ready for a future gated write phase after confirmation. |
| Table | Status | Rows | Score | Columns | Purpose | Note |
|---|---|---|---|---|---|---|
| hd_draft_shifts | Present | 5 | 205 | id, schedule_period_id, employee_id, work_date, starts_at, ends_at, role, location, area, status, has_soft_conflict, soft_conflict_summary, manager_notes, created_by, updated_by, created_at, updated_at, deleted_at | Preferred future draft shift target. | Candidate inspected read-only. |
| hd_employee_schedule_shifts | Present | 2 | 80 | id, company_id, employee_id, role_id, schedule_date, starts_at, ends_at, scheduled_hours, shift_title, work_area, station_note, status, notes, created_by, updated_by, settings, created_at, updated_at | Possible employee schedule shift table. | Candidate inspected read-only. |
| hd_schedule_periods | Present | 2 | 40 | id, title, starts_on, ends_on, status, source, notes, created_by, updated_by, created_at, updated_at, deleted_at | Possible schedule period table, not a shift target. | Period table may support week selection but should not store individual draft shifts. |
| hd_schedule_shifts | Missing | 0 | 0 | Not detected | Possible generic schedule shift table. | Table missing. |
| hd_employee_schedules | Missing | 0 | 0 | Not detected | Possible schedule header/shift table. | Table missing. |
| hd_employee_schedule_periods | Missing | 0 | 0 | Not detected | Possible employee schedule period table, not a shift target. | Table missing. |
| hd_published_shifts | Present | 1 | 0 | id, published_schedule_period_id, source_schedule_period_id, source_draft_shift_id, employee_id, work_date, starts_at, ends_at, role, location, area, published_shift_status, source_had_soft_conflict, source_soft_conflict_summary, manager_notes, source_shift_payload, created_at, updated_at, deleted_at | Published shift table; should not be used by draft save. | Published table is not a draft-save target. |
| URI | Status | Action | Open |
|---|---|---|---|
| hd/employee-schedules/builder/draft-shift-column-mapping | Found | GET App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleDraftShiftColumnMappingController@index | Open |
| hd/employee-schedules/builder/draft-shift-validation | Found | GET App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleDraftShiftValidationController@index | Open |
| hd/employee-schedules/builder/draft-shifts/validate-no-write | Found | POST App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleDraftShiftValidationController@validateNoWrite | Open |
| hd/employee-schedules/builder/draft-shift-save-gate | Found | GET App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleDraftShiftSaveGateController@index | Open |
| hd/employee-schedules/builder/draft-shifts/disabled-save-stub | Found | POST App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleDraftShiftSaveGateController@disabledStore | Open |
| hd/employee-schedules/production | Found | GET App\Http\Controllers\Hd\EmployeeSchedules\EmployeeScheduleProductionRouteRescueController@index | Open |