Training Enrollment Workflow
Last Updated: 2026-02-17
Status: Production
Overview
The Training Enrollment workflow allows the Contractor (ผู้รับเหมา) to submit a list of workers for safety training. The Safety Officer (จป.) reviews the list, can deselect ineligible workers (partial approval), and approves or rejects the enrollment. The system validates workers against blacklist, duplicate enrollment, and booking conflicts automatically.
Prerequisite: None — Training Enrollment is independent and does not require an approved project.
Workflow Overview
Training Enrollment does not require an approved project. One active enrollment per contractor. The system validates workers automatically on submit.
Step-by-Step
Step 1: Contractor Fills Training List (กรอกรายชื่อผู้อบรม)
| Item | Details |
|---|
| Responsible | Contractor (ผู้รับเหมา) |
| State | Fill Training List (กรอกรายชื่อผู้อบรม) |
| Editable documents | Training Enrollment Form |
What the Contractor does:
- Open the task from "My Tasks" (งานของฉัน) — or use "Quick Enroll" from Tools > Training Info
- Select a training session from the dropdown
- Click "Manage List" (จัดการรายชื่อ) to open the worker selection dialog
- Select workers to enroll, then confirm
- Click "Submit List" (ส่งรายชื่อผู้อบรม) — sends to Safety Officer for review
Available commands:
| Command | Thai | Icon | Result |
|---|
| Submit List | ส่งรายชื่อผู้อบรม | send | Send to Safety Officer for review |
| Cancel | ยกเลิก | block | Cancel the enrollment |
Validation: Submit is disabled until a training session is selected and at least 1 worker is in the list.
Step 2: Safety Officer Reviews (จป. ตรวจสอบ)
| Item | Details |
|---|
| Responsible | Safety Officer (จป.) |
| State | SO Review (จป. ตรวจสอบ) |
| Documents | Training Enrollment Form (read-only, but SO can modify worker selection) |
| Command buttons | Only visible when viewing the document (not on the document list) |
What the Safety Officer does:
- Open the task from "My Tasks"
- Review the worker list — the system shows validation indicators (see Validation Rules below)
- Optionally deselect workers who should not be enrolled (partial approval)
- Choose an action:
- Approve — enroll the currently selected workers
- Request Change — send back to Contractor with a reason
- Reject — reject the entire enrollment with a reason
Available commands:
| Command | Thai | Icon | Condition | Result |
|---|
| Approve | อนุมัติรายชื่อ | check_circle | At least 1 worker selected | Enrolls selected workers → Completed |
| Request Change | ส่งกลับแก้ไข | replay | — | Sends back to Contractor with reason |
| Reject | ปฏิเสธรายชื่อ | block | — | Rejects the enrollment with reason |
Step 3: Completed (เสร็จสิ้น)
Once the Safety Officer approves:
- Selected workers are enrolled in the training session (attendance records created)
- The Contractor receives an inbox notification
- All documents become read-only
Partial Approval
The Safety Officer can perform partial approval — approving some workers while excluding others:
| Action | Details |
|---|
| Workers with blocking issues | Auto-deselected, checkbox disabled (cannot re-select) |
| Workers with warnings only | Selectable (SO can choose to include or exclude) |
| Manual deselection | SO can deselect any worker before approving |
| Minimum requirement | At least 1 worker must remain selected to approve |
Only the currently selected workers are enrolled when the SO clicks "Approve".
Validation Rules
The system automatically validates each worker in the list:
| Check | Category | Visual Indicator | Selectable? |
|---|
| Blacklisted | Blocking | Red row, checkbox disabled | No |
| Already enrolled in session | Blocking | Red row, checkbox disabled | No |
| Booking conflict (same day) | Blocking | Red row, checkbox disabled | No |
| Missing ID card | Warning | Yellow icon | Yes |
| Missing profile photo | Warning | Yellow icon | Yes |
| Passed training (not expired) | OK | Green row | Yes (refresher) |
Validation Flowchart
Duplicate Enrollment Prevention
Request Change Reasons
When the Safety Officer clicks "Request Change" (ส่งกลับแก้ไข), they must select a reason:
| # | Reason (Thai) | Reason (English) |
|---|
| 1 | เอกสารผู้ปฏิบัติงานไม่ครบถ้วน | Worker documents incomplete |
| 2 | มีผู้ปฏิบัติงานที่อยู่ใน Blacklist | Blacklisted worker included |
| 3 | รอบอบรมเต็มแล้ว กรุณาเลือกรอบอื่น | Session full, please choose another |
| 4 | ผู้ปฏิบัติงานลงทะเบียนซ้ำ | Duplicate enrollment detected |
| 5 | ผู้ปฏิบัติงานมีการอบรมที่ยังไม่หมดอายุ | Worker training not yet expired |
| 6 | บริษัทไม่มีสิทธิ์เข้าอบรมประเภทนี้ | Contractor not authorized |
| 7 | รอบอบรมถูกยกเลิกแล้ว | Session has been cancelled |
| 99 | อื่นๆ (ระบุ) | Other (specify) |
Rejection Reasons
When the Safety Officer clicks "Reject" (ปฏิเสธรายชื่อ), they must select a reason:
| # | Reason (Thai) | Reason (English) |
|---|
| 1 | บริษัทไม่มีสิทธิ์เข้าอบรม | Contractor not authorized for training |
| 2 | ไม่มีโครงการที่เกี่ยวข้อง | No associated project |
| 3 | ละเมิดนโยบายความปลอดภัยซ้ำหลายครั้ง | Repeated policy violations |
| 99 | อื่นๆ (ระบุ) | Other (specify) |
Duplicate Enrollment Block
- Each contractor can only have one pending Training Enrollment task at a time
- Attempting to create a second task while one is active shows an error dialog with a link to the existing task
- Once the pending task is approved, rejected, or cancelled, a new one can be created
All States
| State | Thai Name | Description | Responsible |
|---|
| Fill Training List | กรอกรายชื่อผู้อบรม | Contractor selects workers to enroll | Contractor |
| SO Review | จป. ตรวจสอบ | Safety Officer reviews and approves worker list | Safety Officer |
| Completed | เสร็จสิ้น | Workers enrolled, attendance records created | — |
| Rejected | ปฏิเสธ | Enrollment rejected by Safety Officer | — |
| Cancelled | ยกเลิก | Cancelled by Contractor | — |
Documents
System-Generated Documents
| Document | Description | Editable |
|---|
| Training Enrollment Form (รายชื่อผู้อบรม) | Worker list with session selection | Contractor edits during "Fill Training List" step |
Edit Permissions by State
| State | Training Enrollment Form |
|---|
| Fill Training List | Editable (Contractor) |
| SO Review | Read-only (SO can modify worker selection only) |
| Completed | Read-only |
| Rejected | Read-only |
| Cancelled | Read-only |
Inbox Notifications
| Transition | Recipient | Notification |
|---|
| Contractor submits list | Safety Officer | New training enrollment list to review |
| SO approves | Contractor | Training enrollment approved |
| SO rejects | Contractor | Training enrollment rejected |
| SO requests change | Contractor | Training enrollment sent back for changes |
Workflow Ecosystem
Training Enrollment is an independent workflow — it does not depend on Project Registration:
Project Registration
│ Approved
├──► JSA Preparation
└──► Tool List Preparation
Training Enrollment (independent)
Test Scenarios
Scenario 1: Submit and Full Approval (Happy Path)
| Step | Actor | Action | Expected Result |
|---|
| 1 | Contractor | Create "Training Enrollment" task | Form opens with session dropdown |
| 2 | Contractor | Select training session | Session details shown |
| 3 | Contractor | Click "Manage List" → select workers | Workers added to list |
| 4 | Contractor | Click "Submit List" | Status changes to "SO Review" |
| 5 | Safety Officer | Review worker list | Validation indicators shown |
| 6 | Safety Officer | Click "Approve" | Status "Completed", workers enrolled |
Scenario 2: Partial Approval
| Step | Actor | Action | Expected Result |
|---|
| 1–4 | Contractor | Same as Scenario 1 | List submitted |
| 5 | Safety Officer | Deselect some workers | Checkboxes unchecked |
| 6 | Safety Officer | Click "Approve" | Only selected workers enrolled |
Scenario 3: Request Change
| Step | Actor | Action | Expected Result |
|---|
| 1–4 | Contractor | Same as Scenario 1 | List submitted |
| 5 | Safety Officer | Click "Request Change" + select reason | Status returns to "Fill Training List" |
| 6 | Contractor | Receives notification → modifies list → resubmits | Status back to "SO Review" |
Scenario 4: Reject
| Step | Actor | Action | Expected Result |
|---|
| 1–4 | Contractor | Same as Scenario 1 | List submitted |
| 5 | Safety Officer | Click "Reject" + select reason | Status "Rejected" |
Scenario 5: Duplicate Enrollment Block
| Step | Actor | Action | Expected Result |
|---|
| 1 | Contractor | Create enrollment → submit (pending) | Task active |
| 2 | Contractor | Try to create another enrollment | Error dialog with link to existing task |
Tester Checklist
Basics
Validation
Safety Officer Review
Request Change & Reject
Duplicate Block
Notifications