4 · Scorecard + debt register
(branch: uat ทุก citation ในบทนี้ เว้นแต่ระบุเป็นอย่างอื่น)
Legend
- Critical = active security/data-loss/availability risk
- High = correctness/maintainability hazard, real impact
- Medium = friction/hygiene, not yet dangerous
แก้ไขข้อสันนิษฐานเดิม — AntD version
เหมือนกับ vtrc-backoffice — package.json ระบุ ^4.6.6 แต่ resolve จริงใน package-lock.json เป็น v4.15.4 (ตรงกับ vtrc-backoffice เป๊ะทุกหลัก) ไม่พบ AntD v3 ใน dependency tree — docs/index.md ที่ระบุกลุ่มนี้ว่าใช้ "AntD v3/v4" ต้องแก้ให้เจาะจงว่า repo ไหนใช้เวอร์ชันไหน (ทั้งสอง backoffice repo ในสโคปนี้ใช้ v4.15.4 เหมือนกัน — v3 พบเฉพาะใน vtrc-web ตาม v1 archive ซึ่งอยู่นอกสโคปการตรวจรอบนี้)
Debt register
| ID | Severity | คำอธิบาย | หลักฐาน (file:line, branch: uat) | ข้อเสนอการแก้ไข |
|---|---|---|---|---|
SEC-BONEW-01 | Critical | login flow ส่ง access token + refresh token เป็น path segment ของ URL ข้าม origin (window.location.href = '.../pathLogin/{accessToken}/{refreshToken}') เมื่อ checkEmployeeCU คืน status เป็น false — token จะถูกบันทึกใน browser history และ access log ของ nginx ปลายทาง (vtrc-rc-backoffice) เพิ่มพื้นผิวรั่วไหลของ credential ที่มีอายุใช้งานจริง (ไม่ใช่แค่ device key) | vtrc-backoffice-new/src/pages/Login/index.js:93-103 | เปลี่ยนเป็นกลไก SSO ที่ไม่ฝัง token ใน URL เช่น one-time exchange code สั้น ๆ ที่แลกเป็น token ฝั่ง server แทน |
CORR-BONEW-01 | High | login flow hardcode isRemember = 1 เสมอ (สืบทอด bug เดียวกันจาก vtrc-backoffice — LoginForm import Checkbox แต่ไม่ render) ทำให้ token ทุกตัวถูกเก็บใน localStorage แบบไม่มีวันหมด | vtrc-backoffice-new/src/pages/Login/index.js:79 | เพิ่ม checkbox จริงในฟอร์ม ส่งค่า remember เข้า setToken |
QUAL-BONEW-01 | Medium | Dockerfile มี multi-stage build จริง (node:14.20 → npm run build → nginx:1.24.0) แต่ docker-compose.yml ไม่ได้อ้างถึง Dockerfile นี้เลย — ใช้ image: nginx:latest ตรงพร้อม mount ./build ที่ commit ไว้ล่วงหน้า ทำให้ไม่ชัดเจนว่า pipeline จริงที่ ops ใช้คืออันไหน | vtrc-backoffice-new/Dockerfile:1-11, vtrc-backoffice-new/docker-compose.yml:1-19 | ยืนยันกับทีม ops ว่าใช้ pipeline ไหนจริง แล้วลบไฟล์ที่ไม่ได้ใช้ออกเพื่อลดความสับสน |
QUAL-BONEW-02 | Medium | ชื่อ network ใน docker-compose.yml (vtrc-backoffice-network) ไม่มีคำ uat แม้ repo/branch นี้คือ UAT canonical ในขณะที่ vtrc-backoffice (repo หลัก ไม่มี "new"/"uat" ในชื่อ) กลับใช้ชื่อ network ว่า uat-vtrc-backoffice-network — สลับกับที่คาดตามชื่อ repo | vtrc-backoffice-new/docker-compose.yml:19, เทียบกับ vtrc-backoffice/docker-compose.yml:19 | ยืนยันกับทีม ops ว่า docker-compose.yml นี้เป็น config ที่ deploy จริงหรือไม่ — ถ้าใช่ให้แก้ชื่อ network ให้สื่อความหมายถูกต้อง |
QUAL-BONEW-03 | Medium | ไฟล์ src/config/appllo_bk.js มีอยู่ใน git แต่เนื้อหาเป็นไฟล์เปล่า (0 บรรทัด) — ชื่อไฟล์สื่อว่าเป็น backup ของ apollo config แต่ไม่มีเนื้อหาให้ตรวจสอบอะไรได้จริง | vtrc-backoffice-new/src/config/appllo_bk.js | ลบไฟล์เปล่านี้ทิ้ง หรือถ้าตั้งใจเก็บไว้เป็น placeholder ให้ระบุเหตุผลด้วย comment |
QUAL-BONEW-04 | Low | 2 เมนู (WorkForce Org/OrgUnitType/OrgUnit และ Attendance abstainTime) ถูก comment ปิดใน routes.js โดยไม่มี commit message หรือ comment อธิบายเหตุผล ต่างจาก vtrc-backoffice ที่ยังเปิดใช้อยู่ทั้งสอง feature — สร้างความไม่แน่ใจว่าเป็นความตั้งใจหรือความผิดพลาดตอน merge | vtrc-backoffice-new/src/config/routes.js:272-295,718-743 | ยืนยันกับทีมธุรกิจว่าเป็นการปิดฟีเจอร์ถาวรหรือชั่วคราว แล้วเพิ่ม comment อธิบายเหตุผลหรือลบโค้ดทิ้งให้เด็ดขาด |
OBS-BONEW-01 | Medium | console.log = console.warn = console.error = () => {} override เหมือน vtrc-backoffice ทุกประการ — debug ผ่าน console ใน production ไม่ได้ | vtrc-backoffice-new/src/containers/App/index.js:14 | ลบ override หรือทำ conditional ตาม environment |
LEG-BONEW-01 | Medium | react-scripts (CRA) คงที่ 3.4.3 เหมือน vtrc-backoffice — เก่ามาก ไม่ได้รับ security patch | vtrc-backoffice-new/package.json:40 | อัปเกรด CRA หรือย้ายไป Vite — ควรทำพร้อมกับ vtrc-backoffice เพราะ dependency tree เหมือนกัน |
LEG-BONEW-02 | Medium | AntD คงที่ v4.15.4 — อยู่ใน EOL branch (v4 ไม่รับ security patch ใหม่แล้ว) | vtrc-backoffice-new/package.json:11, lockfile antd@4.15.4 | วางแผนอัปเกรดเป็น AntD v5 พร้อมกับ vtrc-backoffice |
จุดที่ vtrc-backoffice-new ดีกว่า vtrc-backoffice
| ด้าน | รายละเอียด |
|---|---|
| Build reproducibility | มี Dockerfile แบบ multi-stage ที่ build จาก source จริง (แม้ยังไม่ยืนยันว่าใช้งานจริงใน pipeline ปัจจุบัน — ดู QUAL-BONEW-01) ในขณะที่ vtrc-backoffice ไม่มี build stage เลย |
| Token refresh flow | ใช้ refreshTokenBO ผ่าน apolloClient.query ที่ดูเป็นการอัปเดตหลังจุด fork (comment "change endpoint to support UAM") ในขณะที่ vtrc-backoffice ยังใช้ query refreshToken เดิมที่ไม่มีการแก้ไขเพิ่ม |
| Integration กับระบบอื่น | มี checkEmployeeCU + SSO handoff ไป vtrc-rc-backoffice ที่ vtrc-backoffice ไม่มี — บ่งชี้ว่า -new เป็น entry point ที่ทีมตั้งใจพัฒนาต่อให้เป็นจุดกลางของระบบ login |
จุดที่ vtrc-backoffice-new แย่กว่าหรือเท่ากับ vtrc-backoffice
| ด้าน | รายละเอียด |
|---|---|
| Security ของ SSO handoff | เพิ่มพื้นผิวเสี่ยงใหม่ (SEC-BONEW-01) ที่ vtrc-backoffice ไม่มี เพราะ vtrc-backoffice ไม่มี logic ส่ง token ข้าม origin เลย |
| Feature parity | ปิด 2 เมนูที่ vtrc-backoffice ยังเปิดอยู่ โดยไม่มีคำอธิบาย (QUAL-BONEW-04) |
| Bug พื้นฐาน | สืบทอด isRemember hardcode bug และ console.* override มาเหมือนเดิมทุกจุด |
Scorecard สรุป
| ด้าน | คะแนน | หมายเหตุ |
|---|---|---|
| โครงสร้างโค้ด | 5/10 | เหมือน vtrc-backoffice เกือบทั้งหมด มีไฟล์เปล่า/backup แปลกอยู่บ้าง |
| การ build | 5/10 | มี Dockerfile ที่ build จาก source จริง (ดีกว่า vtrc-backoffice) แต่ compose ไม่ได้ใช้จริง (QUAL-BONEW-01) |
| การจัดการ auth | 3/10 | มี bug เดิมของ vtrc-backoffice ครบ บวก SSO handoff ที่ฝัง token ใน URL เพิ่มความเสี่ยง |
| Security | 3/10 | SEC-BONEW-01 เป็นความเสี่ยงใหม่ที่ร้ายแรงกว่า vtrc-backoffice |
| Performance | 5/10 | เหมือน vtrc-backoffice (ไม่มี code splitting, bundle ~47 MB) |
| Maintainability | 5/10 | เหมือน vtrc-backoffice แต่มีความไม่ชัดเจนเรื่อง pipeline การ deploy เพิ่ม |
| Observability | 3/10 | เหมือน vtrc-backoffice — console ปิดหมด |
| Testing | 1/10 | ไม่พบ test จริง (UNVERIFIED สำหรับความครบถ้วนของการตรวจ) |
| รวม (โดยประมาณ) | 3.8/10 | ใกล้เคียง vtrc-backoffice (3.9/10) — จุดแข็งเรื่อง build/integration ถูกหักด้วยความเสี่ยง security ใหม่จาก SSO handoff |
ความสัมพันธ์กับ vtrc-backoffice
ดูสรุปเต็มใน _partial-index-backoffices.md — สรุปสั้น: vtrc-backoffice-new คือ fork/copy โครงสร้างของ vtrc-backoffice ที่ถูกพัฒนาต่อแยกกัน (repo Bitbucket คนละตัว) เพิ่ม token-refresh flow ใหม่และ SSO handoff ไป vtrc-rc-backoffice แต่ไม่ได้ sync กลับไปที่ vtrc-backoffice — ทั้งสอง repo จึงมี code diverge เล็กน้อยแต่ยังใช้ backend (vtrc-api), device apiKey, และ AntD version เดียวกัน