Files
alla-tms/docs/ai/report.md
2026-07-16 09:53:14 +07:00

7.2 KiB

AI Report

Summary

Improved the employee import flow so repeated rows with the same employeeCode are treated as one employee while still creating a training history record for each course row. The import summary and template were updated to reflect employee creation/update, linked users, imported training records, and K/S/A target handling.

Files Changed

  • src/app/api/import-employees/route.ts
  • src/app/api/import-employees/template/route.ts
  • src/constants/thai-labels.ts
  • src/features/import-employees/api/types.ts
  • src/features/import-employees/components/employee-import-page.tsx
  • docs/ai/report.md

Root Cause / Reason For Change

  • The original import flow only handled employee master data and K/S/A targets.
  • Duplicate employeeCode rows in a single file were rejected instead of being merged into one employee with many training rows.
  • The result summary contract was also inconsistent between backend and frontend.

Changes Made

  • Split import headers into employee headers, training headers, and target headers.
  • Expanded the downloadable template to include course name, category, training hours, training type, and training date.
  • Changed import parsing to group rows by employeeCode.
  • Kept employee creation/updating at one record per employeeCode.
  • Added validation for per-row training history data:
    • course name
    • category K/S/A
    • training hours
    • optional training type with normalization
    • optional training date with fallback to import year
  • Created one approved training_records row for each valid training row.
  • Preserved K/S/A employee target import and fallback behavior.
  • Fixed import summary fields so frontend and backend now use the same names.
  • Updated the import result UI to show:
    • created employees
    • updated employees
    • linked users
    • imported training records
    • imported targets

Testing Checklist

  • employeeCode repeated in one file creates one employee
  • repeated employee rows still create multiple training records
  • existing employee in database is updated instead of duplicated
  • import summary returns consistent field names
  • downloadable template includes training history columns
  • npx tsc --noEmit passes
  • npm run lint passes with existing repo warnings only
  • manually upload a file with one employee and many course rows
  • manually upload a file for an existing employee and confirm no duplicate employee is created
  • confirm overview/report/training history totals reflect imported approved records

Risks

  • Imported training records are marked as approved immediately so they affect dashboards and reports right away.
  • If the same file is imported again, training history rows may be duplicated because this change intentionally deduplicates employees, not course rows.
  • The audit log summary text still falls back to the generic import message shape because only the import contract was changed in this task.

Rollback Plan

  1. Revert src/app/api/import-employees/route.ts.
  2. Revert src/app/api/import-employees/template/route.ts.
  3. Revert src/constants/thai-labels.ts.
  4. Revert src/features/import-employees/api/types.ts.
  5. Revert src/features/import-employees/components/employee-import-page.tsx.
  6. Restore or remove docs/ai/report.md as needed.

Thai UI Fix Report

Summary

Fixed corrupted Thai text on /dashboard/import-employees after the previous import work. The issue was caused by Thai literals being saved in a broken encoding state in the import page, shared Thai label constants, and related import API/template files.

Files Changed

  • src/constants/thai-labels.ts
  • src/features/import-employees/components/employee-import-page.tsx
  • src/app/api/import-employees/template/route.ts
  • src/app/api/import-employees/route.ts
  • src/components/themes/font.config.ts
  • src/styles/themes/training-system.css
  • docs/ai/report.md

Root Cause

  • Some Thai strings were rewritten from garbled terminal output during the previous task.
  • The /dashboard/import-employees page and related API messages therefore showed mojibake instead of readable Thai.
  • The main training-system theme also did not explicitly prioritize a Thai-capable web font.

Changes Made

  • Restored all corrupted Thai labels in src/constants/thai-labels.ts.
  • Rewrote the import employee UI copy in src/features/import-employees/components/employee-import-page.tsx with readable Thai text.
  • Restored Thai sample data and error text in src/app/api/import-employees/template/route.ts.
  • Restored Thai validation and response messages in src/app/api/import-employees/route.ts without changing the import logic.
  • Added Noto Sans Thai in src/components/themes/font.config.ts.
  • Updated src/styles/themes/training-system.css to prioritize the Thai font in the main dashboard theme.

Testing Checklist

  • rg no longer finds mojibake text in import-employees related files
  • open /dashboard/import-employees and verify all Thai text reads normally
  • try upload with invalid file and confirm Thai error messages display correctly
  • download template and verify Thai headers/sample values are readable in Excel

Notes

  • This task intentionally did not change employee import business logic.
  • The fix is focused on Thai text rendering and Thai-readable feedback only.

Extract Total Hours Report

Summary

Removed ชั่วโมงรวม, ชั่วโมง K, ชั่วโมง S, and ชั่วโมง A from the employee import template and import flow. The import now accepts only employee data plus training history rows, while hour summaries remain derived from real Training Record data.

Files Changed

  • src/constants/thai-labels.ts
  • src/app/api/import-employees/template/route.ts
  • src/app/api/import-employees/route.ts
  • src/features/import-employees/components/employee-import-page.tsx
  • src/features/import-employees/api/types.ts
  • docs/ai/report.md

Columns Removed From Import Template

  • ชั่วโมงรวม
  • ชั่วโมง K
  • ชั่วโมง S
  • ชั่วโมง A

Logic Changes

  • Removed target-hour columns from thaiImportTemplateHeaders.
  • Updated the downloadable Excel template so it no longer includes K/S/A summary columns.
  • Removed Excel parsing and validation for total/K/S/A hours from the import route.
  • Removed import-time writes for employee target-hour values from the import route.
  • Kept employee creation/update and Training Record creation as before.
  • Updated the import page copy so it explains that hour summaries are calculated automatically from Training Record.
  • Removed import summary cards related to imported K/S/A targets and training-policy fallback.

Testing

  • npx tsc --noEmit
  • Verify template headers no longer contain total/K/S/A columns
  • Verify import still accepts repeated employee rows with multiple course rows
  • Verify successful import still creates employee + training records

Result

  • Import template no longer exposes total/K/S/A hour columns.
  • Import no longer treats Excel hour-summary fields as source of truth.
  • Hour summaries remain based on real training records only.