# Đối chiếu hiện trạng Vĩnh An ↔ Tài liệu thiết kế (ghi chú migration)

> Lập: 11/7/2026 · Thuộc [Kế hoạch giai đoạn 1](README.md)
> Nguồn hiện trạng: `~/other/_ingested/` (ingest từ `docs/VA/`) + `~/other/QLGPLX_database.md`.
> Nguồn thiết kế: [WS0 cơ cấu](WS0-co-cau-to-chuc-va-phan-quyen-2026-07-06.md) · [WS1 quy trình](WS1-quy-trinh-ho-so-2026-07-06.md) · [WS1 màn hình tiếp nhận](WS1-man-hinh-tiep-nhan-2026-07-08.md) · [schema](schema-du-lieu-2026-07-06.md) · [sơ đồ 31 module](../so-do-ws-module-feature-2026-07-06.md).
>
> **Mục đích:** liệt kê các điểm thiết kế lệch so với thực tế Vĩnh An để bàn & chốt **từng phần một**. Mỗi mục có trạng thái: 🔴 chưa bàn · 🟡 đang bàn · 🟢 đã chốt.

---

## Bảng tổng hợp (theo dõi tiến độ bàn)

| # | Điểm sai khác | Mức độ | Trạng thái | Kết luận |
|---|---|---|---|---|
| 1 | Hướng tích hợp GPLX: **ERP là nguồn chính**, đồng bộ SANG GPLX làm sau — không migrate ngược | ⚠️ Nặng | 🟢 chốt 11/7 | ERP = system of record; GPLX = hệ Cục ĐB; sync ERP→GPLX là module sau, ngoài GĐ1 |
| 2 | Thiếu giai đoạn **Tốt nghiệp** trong state machine + trạng thái **bảo lưu** | ⚠️ Nặng | 🟢 chốt 11/7 | Thêm 3 trạng thái TN + bảo lưu; "thi hết môn" là checklist; logic ở examops/cert callback; cảnh báo bảo lưu để v1.5 |
| 3 | Báo cáo: thiếu luồng **ASXH** + cấu hình **chuyển thẩm quyền PC08→Sở** | Vừa | 🔴 chưa bàn | |
| 4 | Cơ cấu tổ chức thật **gộp mạnh** (3 phòng); NHAN_SU/SAT_HACH chưa có chủ | Vừa | 🟢 chốt 11/7 | Giữ template + thêm 2 BP tùy chọn (lấy mẫu, cabin); dựng bộ seed Vĩnh An §8 (3 phòng, map 26 NV) |
| 5 | Học phí phức tạp hơn "đợt 1/2" + kế toán muốn **import Excel** | ⚠️ Nặng | 🔴 chưa bàn | |
| 6 | Dữ liệu **phân mảnh 8 hệ thống**; thiếu module cabin / vân tay / ASXH connector | Vừa | 🔴 chưa bàn | |

---

## 1. Hướng tích hợp GPLX — ERP là nguồn chính, KHÔNG migrate ngược ⚠️

**Trạng thái:** 🟢 **chốt 11/7/2026** (user xác nhận)

**Đính chính lớn (đảo chiều so với giả định ban đầu):**
- **GPLX (FPT) KHÔNG phải hệ legacy của Vĩnh An để migrate rồi bỏ.** Nó là **hệ của Cục Đường bộ** (FPT xây), nơi trước đây lưu học viên / giáo viên / xe. Vĩnh An chạy một **bản cục bộ** — 3 DB SQL Server trên `192.168.123.2` (`sa`/`Vinhan2018`): `GPLX_csdt` (ô tô v1), `GPLX_CDB_OTO` (ô tô v2), `GPLX_CDB_XEMAY` (xe máy).
- **ERP (hệ OpenGate đang xây) là nguồn dữ liệu chính / system of record** từ nay về sau.
- Hướng tích hợp là **ERP → GPLX** (đẩy/đồng bộ sang), và **module đồng bộ đó làm SAU — ngoài phạm vi GĐ1**.

**Hệ quả:**
- **Bỏ bài toán "migrate từ QLHS V2"** trong plan WS3 — không có luồng GPLX → ERP để rút dữ liệu rồi khai tử hệ cũ.
- Câu hỏi "đồng bộ vào DB nào (v1/v2/xe máy)" **gác lại**, chưa cần quan tâm ở GĐ1.
- Tài khoản SQL Server (việc chuẩn bị #2) **không còn là chặn GĐ1**; chỉ cần khi làm module đồng bộ ERP→GPLX sau (để biết schema đích).

**Còn để ngỏ (chưa chốt, chưa cần bây giờ):** lúc go-live có cần **import 1 lần** danh sách học viên đang học từ GPLX để mồi ERP không, hay Vĩnh An nhập mới toàn bộ trên ERP. → bàn khi tới GĐ triển khai thật.

## 2. Thiếu giai đoạn TỐT NGHIỆP trong state machine ⚠️

**Trạng thái:** 🟢 **chốt 11/7/2026** — đã sửa vào [WS1 quy trình `.md`](WS1-quy-trinh-ho-so-2026-07-06.md#3-sơ-đồ-trạng-thái-hồ-sơ-state-machine) + [`.html`](WS1-quy-trinh-ho-so.html).

**Kết luận đã áp dụng:**
- Thêm 3 trạng thái: `du_dk_tot_nghiep` → `da_tot_nghiep` → `du_dk_sat_hach`; + `bao_luu` (vắng/trượt còn hạn, quay lại `du_dk_sat_hach`); + `hoan_tat` (nhận GPLX).
- **"Thi hết môn" KHÔNG là trạng thái** — là một mục trong **checklist điều kiện tốt nghiệp** (thi hết môn · DAT · Cabin · giờ LT); đủ hết → tự chuyển `du_dk_tot_nghiep`.
- **Logic thi & chứng chỉ ở module `examops`/`cert`**, đẩy trạng thái qua callback vào API `transition` duy nhất của `student` (đúng pattern tuition/report).
- **Bảo lưu:** GĐ1 lưu trạng thái + hạn; **tự động cảnh báo ≥2 tháng để v1.5** (cần `notify` + job định kỳ).

State machine thiết kế: `…→ da_bao_so → dang_hoc → (WS sát hạch)`. Thực tế giữa **học** và **sát hạch** có cả khối nghiệp vụ lớn chưa mô hình:

1. Thi hết môn (5 môn LT) → điểm vào sổ lên lớp; phân bổ nhiên liệu.
2. Tổng hợp **DAT + Cabin + đủ giờ LT** → DS đủ ĐK tốt nghiệp (Vân Anh).
3. Cấp **số báo danh** + **QĐ thành lập khóa TN gửi Sở Xây dựng**.
4. **Thi tốt nghiệp** (LT + mô phỏng + hình + đường trường) trên phần mềm nội bộ.
5. In **Chứng chỉ/Giấy xác nhận hoàn thành khóa học** + cấp **số hiệu chứng chỉ** → đẩy FPT.
6. Cập nhật **ASXH** (Sở LĐTBXH).
7. → mới sang **Báo cáo 2 → sát hạch**.

**Đề xuất bổ sung trạng thái:** `dang_hoc → thi_het_mon → du_dk_tot_nghiep → da_tot_nghiep → du_dk_sat_hach (báo cáo 2) → …`
**Thiếu thêm:** trạng thái **bảo lưu** (đủ ĐK nhưng chưa sát hạch, theo dõi hạn, cảnh báo ≥2 tháng).

**Việc cần chốt:** tốt nghiệp có nằm cùng WS1 (module student/course) hay tách module `examops`/`cert`; đặt tên trạng thái chuẩn.

## 3. Báo cáo & cơ quan quản lý

**Trạng thái:** 🔴 chưa bàn

Thiết kế gộp chung "Báo cáo Sở". Thực tế **3 đích báo cáo**:
- **Báo cáo 1** — khai giảng → Sở (Lê Thị Huyền Mỹ).
- **Báo cáo 2** — đề nghị sát hạch → Sở (Nga, Chi); DAT gửi trước 10 ngày, BC2 trước 7 ngày.
- **ASXH** — Sở LĐTBXH (Đậu Thị Hải Yến) — **đích thứ 3 thiết kế chưa nêu**.

**Chuyển thẩm quyền 2025 (⚠):** bản JD gốc nộp/duyệt hồ sơ sát hạch tại **PC08 (Công an)**; bản T10‑2025 chuyển sang **Sở**. Hệ phải **cấu hình được cơ quan tiếp nhận báo cáo 2**, giữ PC08 cho **tra vi phạm + phục hồi GPLX**.

**Việc cần chốt:** module `report` mô hình 3 luồng + authority cấu hình; ASXH là connector riêng hay ngoài phạm vi GĐ1.

## 4. Cơ cấu tổ chức thật gộp mạnh hơn template

**Trạng thái:** 🟢 **chốt 11/7/2026** — đã sửa vào [WS0 `.md` §1 + §8](WS0-co-cau-to-chuc-va-phan-quyen-2026-07-06.md#8-bộ-seed-tổ-chức-vĩnh-an-117) + [`.html`](WS0-co-cau-to-chuc.html).

**Kết luận đã áp dụng:**
- **Giữ nguyên template** §1; chỉ **enrich** thêm 2 bộ phận tùy chọn: *Lấy mẫu nhận diện/Thẻ từ/Hợp đồng* và *Cabin điện tử* (Vĩnh An có, template chưa liệt kê — không có phòng top-level nào mới).
- Thêm **§8 Bộ seed tổ chức Vĩnh An**: cây 3 phòng thật + map **26 nhân viên** → phòng/bộ phận/chức danh/vai trò.
- `NHAN_SU`: giữ trong danh mục, **không gán ai** ở Vĩnh An (trừ Phan Thị Hằng kiêm văn thư/lương GV).
- `SAT_HACH`: giữ vai trò, gán cho người trong KH‑ĐT; **chưa tách WS/module `sh-*`** (Vĩnh An chưa có trung tâm sát hạch riêng).

Vĩnh An chỉ **3 phòng**: Tuyển sinh · **Kế hoạch–Đào tạo** (gộp Giáo vụ + Kỹ thuật + Cabin + Sát hạch + Tổ GV) · Kế toán. Đối chiếu WS0:

- **Không có Phòng Nhân sự riêng** → vai trò `NHAN_SU` chưa có "chủ"; lập biểu/hồ sơ do KH‑ĐT làm. Cân nhắc bỏ/gộp vào `QL_DAO_TAO` ở cấu hình Vĩnh An.
- **Sát hạch = 1 nhân viên** (Phan Thị Trang) trong KH‑ĐT, không phải trung tâm → **tách WS sát hạch + 8 module `sh-*` là quá tầm**; nên hoãn.
- **Kỹ thuật/Cabin nằm trong KH‑ĐT** (Tuyên, Hồng Thủy, Thanh Lâm, Hiếu, Thức).
- → Nhánh "co giãn nhỏ" của WS0 khớp hơn template đầy đủ; xác nhận **kiêm nhiệm nhiều vai trò** như thiết kế đã lường.

**Khớp tốt:** 26 nhân viên có đủ trường (họ tên/NS/CCCD/SĐT/phòng) đúng schema WS0 §4.3; có sẵn TP/KTT/GV map thẳng danh mục chức danh.
**Chênh lệch dữ liệu cần làm rõ (từ ingest 01 §4):** có JD nhưng không có trong DS nhân viên (Đậu Thị Hải Yến, Nguyễn Đức Anh Thức, Phạm Viết Quang); người thu trong biểu phí nhưng không có trong DS (Phan Thị Bính, Hồ Thị Thu Thủy); dòng 16–26 thiếu CCCD/SĐT.

**Việc cần chốt:** giữ hay bỏ `NHAN_SU`/`SAT_HACH` ở cấu hình Vĩnh An; cây phòng ban khởi tạo 3 phòng.

## 5. Học phí phức tạp hơn "đợt 1/đợt 2" + yêu cầu import Excel ⚠️

**Trạng thái:** 🔴 chưa bàn

- Đợt 1 = **"tiền báo cáo"** (B 7tr, C1 9tr); Đợt 2 = **"thu tốt nghiệp"** — không chỉ generic 2 đợt.
- Khái niệm **"Mức thu" vs "Mức trích"** (phần trả về TK/lương GV) — `tuition`/`payroll` phải mô hình phần chia này.
- **"Người thu"** gán theo nhân viên kế toán (Bính, Thúy Nga, Quỳnh, Hồ Thị Thu Thủy).
- Nâng hạng: **14 cặp hạng** + giữ chỗ 1tr. Phục hồi: Học phí + Phí + Lệ phí × 3 phần (LT/TH/đường trường). Thi lại: theo phần, ô tô/xe máy, có "thu chênh lệch do đổi thông tư".
- **Kế toán yêu cầu rõ:** nhập thu ở Excel → **import cuối ngày, KHÔNG nhập trực tiếp**; và **tự thêm tình trạng/số tiền** cho phục hồi/thi lại. Thiết kế đang giả định form nhập trực tiếp → **xung đột UX cần giải** (thêm import Excel + dòng phí ad-hoc).
- **Bất thường dữ liệu:** cặp `D1‑D2` có 2 mức trích khác nhau (3.155.000 vs 9.315.000) — cần kế toán xác nhận khi seed.

**Việc cần chốt:** `tuition` có hỗ trợ import Excel + dòng phí ad-hoc từ MVP không; mô hình mức thu/mức trích đặt ở đâu (`tuition` hay `payroll`).

## 6. Dữ liệu phân mảnh 8 hệ thống — bài toán chính

**Trạng thái:** 🔴 chưa bàn

8 hệ: FPT · DAT · Cabin điện tử · Điểm danh LT (vân tay + thẻ từ) · Thi nội bộ · **ASXH** · Phần mềm Công ty · Cổng Sở/PC08. Đối chiếu module thiết kế:

- **Cabin điện tử:** nguồn dữ liệu bắt buộc cho tốt nghiệp nhưng **chưa có module `cabin`** riêng (đang lẫn `dat`/`lms`?). Nên bổ sung.
- **Điểm danh vân tay (biometric):** thiết kế có `rfcard`/`chip` (thẻ từ) nhưng **vân tay tính đủ giờ LT** chưa rõ module — liên quan trực tiếp eID/NĐ 94.
- **ASXH connector:** chưa có; là connector (thuộc `workflow`/`report`).
- Còn lại `student/course/teacher/vehicle/dat/tuition/report/cert/examops/crm/finance` map ổn.

**Lưu ý ngữ cảnh:** README ingest (§05) đối chiếu với **"dự án SUNS" (suns-tools, dat-backend, gplx-csdt, `[[eid-integration-nd94]]`…)** — đây là **dự án khác**, không phải nền OpenGate của bộ tài liệu này. Nội dung nghiệp vụ dùng được, nhưng phần "điểm chạm SUNS" tham chiếu hệ khác — không nhầm là kiến trúc của mình.

**Việc cần chốt:** thêm module `cabin` + cơ chế biometric attendance; ưu tiên hợp nhất hệ nào trước ở GĐ1.

---

## Ghi chú phương pháp
- File này là **bản làm việc**, cập nhật trạng thái từng mục khi bàn xong.
- Khi một mục 🟢 chốt → phản ánh thay đổi vào tài liệu thiết kế tương ứng (WS0/WS1/schema/module) rồi ghi kết luận vào cột "Kết luận" của bảng tổng hợp.
