Số hoá vòng khứ hồi thủ công với PC08: BC1 · BC2 (+công văn, DS hợp lệ, biên bản) đi — KQBC2 · SBD · tình trạng · SAT_HACH về. Giải 4 cái đau của Vĩnh An: kho file có cấu trúc · trạng thái vòng · đối soát tự động (582 hồ sơ đang soát bằng mắt) · lưu vết thanh tra. P1 không sinh XML — FPT vẫn là nguồn; sinh XML là P3 (module report phía WS trung tâm).
PC08 là đầu mối N trung tâm ↔ 1 PC08 → module nằm ở workspace hub riêng, không thuộc WS đào tạo của trung tâm nào. Vĩnh An là center đầu tiên; chạy đủ giá trị khi mới 1 center và PC08 chưa tham gia (CSĐT upload cả 2 chiều).
| sh-exchange (doc này) | report | sh-gateway | |
|---|---|---|---|
| Phía | CSĐT ↔ PC08 (file XML/xlsx đợt SH) | CSĐT → Sở XD (sinh báo cáo theo mẫu) | TT sát hạch → Cục CSGT (API QCVN 40) |
| WS | hub trao đổi | WS trung tâm | WS sát hạch (v3) |
| Nguồn dữ liệu | file upload (P1) / API từ WS trung tâm (P3) | student/course/dat cùng DB | thiết bị chấm thi |
| Feature | BO chính | Action |
|---|---|---|
| center | Trung tâm đào tạo (CSĐT tham gia hub) | viewcreateedit |
| batch | Đợt sát hạch — 1 vòng khứ hồi với PC08 | viewcreateeditclosedelete |
| file | File trao đổi (immutable, 2 chiều) | viewuploaddownloaddelete |
| entry | Hồ sơ thí sinh trong đợt (parse từ XML) | viewexport |
Đối soát là màn hình của batch (đọc entry), không cần feature riêng.
| BO · bảng | Trường chính |
|---|---|
| Trung tâm shx_center | Mã CSĐT (MA_CSDT=40023) · tên · mã cơ quan tỉnh (MA_SO_GTVT=40, legacy) · trạng thái |
| Đợt sát hạch shx_batch | center_id · mã kỳ MA_KY_SH (điền khi KQ về) · ngày thi dự kiến/thực tế · các khóa trong đợt (shx_batch_khoa: mã khóa, hạng, số HS) · trạng thái vòng · số công văn (694/706) |
| File trao đổi shx_file | batch_id · loại (BC1·BC2·CONG_VAN·DS_HOP_LE·BIEN_BAN·KQBC2·SBD·TINH_TRANG·SAT_HACH) · hướng (di/ve) · file gốc immutable (xml/zip/xlsx/docx/pdf) · kết quả parse jsonb (đã strip ảnh base64) · trạng thái parse · người upload + thời điểm |
| Hồ sơ trong đợt shx_entry | batch_id · MA_DK+SO_HO_SO (khóa khớp xuyên suốt) · họ tên/ngày sinh/CCCD · khóa/hạng · trạng thái · KQ duyệt (KQ_BC2=1 hợp lệ · lý do từ chối) · SBD/lần SH · KQ thi (DA/RO + điểm L·M·H·Đ + nhận xét) · số GPLX/QĐ trúng tuyển |
Trạng thái đợt suy ra từ file đã nhận (upload KQBC2 → tự chuyển da_duyet), cho phép sửa tay khi lệch.
Hub phục vụ nhiều CSĐT. Trung tâm khác vào hệ thống → KHÔNG web upload riêng; cho họ đăng nhập chính hub để vừa upload vừa xem trạng thái/đối soát của mình. PC08 tự onboard trong màn Quản lý trung tâm.
| # | Quyết định | Lý do |
|---|---|---|
| O1 | Đăng nhập chung hub (không web riêng) | Trung tâm cần xem trạng thái duyệt/đối soát, không chỉ upload mù; không nuôi 2 hệ auth |
| O2 | Username = mã CSDT — tài khoản đơn vị | Định danh ổn định, khớp ma_csdt trong XML. ⚠ audit ghi "40023 upload" không rõ nhân viên nào — chấp nhận ở quy mô này; sau này mời thêm account cá nhân (shexchange_center_user nhiều‑nhiều sẵn) |
| O3 | Role gán theo DEFAULT của WS lúc join | Engine ensureDefaultAssignment sẵn có; role mặc định (workspace-member) = quyền trung tâm (7 quyền): center.view · batch.view · file.view/upload/download · entry.view/export — chỉ dữ liệu của mình. KHÔNG: tạo/sửa/đóng đợt (PC08 tạo đợt gán cho TT), sửa hồ sơ (đính chính=PC08), quản lý/xóa center, xóa file |
| O4 | Scope theo center (tiên quyết khi ≥2 center — PII) | Binding user↔center; có binding → tự lọc center_id mình; PC08/owner (không binding) → thấy tất cả; auto-bind lần đầu theo username == ma_csdt |
| O5 | Link mời an toàn | Bearer token: TTL 7 ngày, one-time, thu hồi/gửi lại trong màn Quản lý trung tâm; gửi đúng Zalo người đại diện |
Vòng đời mời (hiện trên màn Quản lý trung tâm): chưa mời → đã gửi link (còn hạn/hết hạn) → đã kích hoạt + copy · thu hồi · gửi lại. Phân biệt P3: onboard này = trung tâm đăng nhập hub upload tay; trung tâm mua OpenGate làm WS đào tạo riêng (như Vĩnh An) thì nâng lên tự push XML qua API (P3, §lộ trình).
Khối permissions[] dán vào manifest.json; bảng dưới là gán quyền theo vai trò của WS hub. Permission key đầy đủ: sh-exchange.exchange.<feature>.<action>.
⚠️ Action đặc thù (upload, close) cần có trong validator manifest — như generate của report.
2 vai trò thực tế (chốt 17/7): PC08 (cơ quan quản lý — toàn quyền, thấy MỌI center) và Trung tâm (role mặc định WS — giới hạn, chỉ thấy center của mình qua scope).
| Feature · Action | PC08 (cơ quan quản lý) | Trung tâm (mặc định) |
|---|---|---|
| center.view | R mọi center | R chỉ của mình |
| center.create/edit · mời TT | W | — |
| batch.view | R tất cả | R đợt của mình |
| batch.create | W (tạo đợt gán TT) | — |
| batch.edit/close/delete | W | — |
| file.view/download | R | R của mình |
| file.upload | W cả 2 chiều | W báo cáo của mình |
| file.delete | W | — |
| entry.view/export | R | R của mình |
| entry.edit (đính chính) | W | — |
PC08 = full module (15 quyền). Trung tâm = 7 quyền: center.view · batch.view · file.view/upload/download · entry.view/export. Cách ly chéo bằng binding shexchange_center_user (auto-bind username==ma_csdt); PC08 không binding → thấy tất cả. Đã chốt: PC08 tạo đợt (TT không batch.create); chưa chặn hướng upload.