You are a Senior Full Stack Engineer.

Project:
Training Management System (TMS)

Current task:
Update submitted training hours input to use TimePicker UI.

Requirement:
In Create/Edit Training Record form, change submitted hours input from number input to TimePicker-style input.

Important constraints:

- Do NOT change folder structure.
- Do NOT change database schema.
- Do NOT store Date object in database for hours.
- Keep existing submittedHours/hours database field as numeric/decimal.
- Keep Thai UI.
- Keep responsive/mobile behavior.
- Minimal-impact changes only.

Business logic:

1. Training hours should be selected using TimePicker UI.

Use existing component if available:

- src/components/ui/datetime-picker
- TimePicker

Example usage:
import { TimePicker } from "@/components/ui/datetime-picker";

2. The TimePicker value is a Date object in UI only.

Convert TimePicker value to decimal hours before submit.

Conversion examples:

- 00:30 -> 0.5
- 01:00 -> 1
- 01:30 -> 1.5
- 02:15 -> 2.25
- 07:30 -> 7.5

3. Convert decimal hours back to TimePicker value in edit mode.

Examples:

- 1.5 -> 01:30
- 2 -> 02:00
- 2.25 -> 02:15
- 7.5 -> 07:30

4. Add helper functions:

decimalHoursToDate(hours: number): Date
dateToDecimalHours(date: Date): number

Recommended behavior:

- Use a fixed base date, e.g. 1970-01-01
- Hours come from date.getHours()
- Minutes come from date.getMinutes()
- Decimal = hours + minutes / 60

5. Validation:

Rules:

- submittedHours is required.
- submittedHours must be greater than 0.
- submittedHours should not exceed 24 unless business requires otherwise.
- Minutes should support 15-minute or 30-minute increments if TimePicker supports it.

Thai validation messages:

- กรุณาระบุจำนวนชั่วโมงอบรม
- จำนวนชั่วโมงอบรมต้องมากกว่า 0
- จำนวนชั่วโมงอบรมต้องไม่เกิน 24 ชั่วโมง

6. UI label:

Label:

- จำนวนชั่วโมงอบรม \*

Helper text:

- เลือกระยะเวลาอบรม เช่น 01:30 = 1.5 ชั่วโมง

Display calculated text under input:

- รวม 1.5 ชั่วโมง

7. Do not break existing dashboard/report calculations.

Database should still save:

- submittedHours / hours as decimal number

8. Files likely involved:

- src/features/training-records/components/training-record-form.tsx
- src/features/training-records/schemas/training-record.ts
- src/features/training-records/api/types.ts
- src/app/api/training-records/route.ts
- src/app/api/training-records/[id]/route.ts
- src/lib/time-utils.ts or src/features/training-records/utils/time-utils.ts

9. Output Review File

Create:
docs/management-change-training-hours-timepicker-review.md

Include:

1. Summary
2. Files Changed
3. UI Changes
4. TimePicker Behavior
5. Decimal Conversion Logic
6. Validation Rules
7. Edit Mode Behavior
8. Dashboard/Report Impact
9. Manual Test Checklist
10. Known Limitations

Manual Test Checklist:

- Create form shows TimePicker for training hours.
- Selecting 01:30 saves 1.5 hours.
- Selecting 02:00 saves 2 hours.
- Selecting 02:15 saves 2.25 hours.
- Empty value is blocked.
- 00:00 is blocked.
- Value above 24 hours is blocked.
- Edit form converts 1.5 back to 01:30.
- Dashboard still calculates approved hours correctly.
- Reports still export decimal hours correctly.
- Mobile layout works.

Return:

- Complete code changes with file paths.
- Content of docs/management-change-training-hours-timepicker-review.md.
