Skip to content

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-backofficepackage.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

IDSeverityคำอธิบายหลักฐาน (file:line, branch: uat)ข้อเสนอการแก้ไข
SEC-BONEW-01Criticallogin 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-01Highlogin flow hardcode isRemember = 1 เสมอ (สืบทอด bug เดียวกันจาก vtrc-backofficeLoginForm import Checkbox แต่ไม่ render) ทำให้ token ทุกตัวถูกเก็บใน localStorage แบบไม่มีวันหมดvtrc-backoffice-new/src/pages/Login/index.js:79เพิ่ม checkbox จริงในฟอร์ม ส่งค่า remember เข้า setToken
QUAL-BONEW-01MediumDockerfile มี multi-stage build จริง (node:14.20npm run buildnginx: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-02Mediumชื่อ network ใน docker-compose.yml (vtrc-backoffice-network) ไม่มีคำ uat แม้ repo/branch นี้คือ UAT canonical ในขณะที่ vtrc-backoffice (repo หลัก ไม่มี "new"/"uat" ในชื่อ) กลับใช้ชื่อ network ว่า uat-vtrc-backoffice-network — สลับกับที่คาดตามชื่อ repovtrc-backoffice-new/docker-compose.yml:19, เทียบกับ vtrc-backoffice/docker-compose.yml:19ยืนยันกับทีม ops ว่า docker-compose.yml นี้เป็น config ที่ deploy จริงหรือไม่ — ถ้าใช่ให้แก้ชื่อ network ให้สื่อความหมายถูกต้อง
QUAL-BONEW-03Mediumไฟล์ src/config/appllo_bk.js มีอยู่ใน git แต่เนื้อหาเป็นไฟล์เปล่า (0 บรรทัด) — ชื่อไฟล์สื่อว่าเป็น backup ของ apollo config แต่ไม่มีเนื้อหาให้ตรวจสอบอะไรได้จริงvtrc-backoffice-new/src/config/appllo_bk.jsลบไฟล์เปล่านี้ทิ้ง หรือถ้าตั้งใจเก็บไว้เป็น placeholder ให้ระบุเหตุผลด้วย comment
QUAL-BONEW-04Low2 เมนู (WorkForce Org/OrgUnitType/OrgUnit และ Attendance abstainTime) ถูก comment ปิดใน routes.js โดยไม่มี commit message หรือ comment อธิบายเหตุผล ต่างจาก vtrc-backoffice ที่ยังเปิดใช้อยู่ทั้งสอง feature — สร้างความไม่แน่ใจว่าเป็นความตั้งใจหรือความผิดพลาดตอน mergevtrc-backoffice-new/src/config/routes.js:272-295,718-743ยืนยันกับทีมธุรกิจว่าเป็นการปิดฟีเจอร์ถาวรหรือชั่วคราว แล้วเพิ่ม comment อธิบายเหตุผลหรือลบโค้ดทิ้งให้เด็ดขาด
OBS-BONEW-01Mediumconsole.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-01Mediumreact-scripts (CRA) คงที่ 3.4.3 เหมือน vtrc-backoffice — เก่ามาก ไม่ได้รับ security patchvtrc-backoffice-new/package.json:40อัปเกรด CRA หรือย้ายไป Vite — ควรทำพร้อมกับ vtrc-backoffice เพราะ dependency tree เหมือนกัน
LEG-BONEW-02MediumAntD คงที่ 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 แปลกอยู่บ้าง
การ build5/10มี Dockerfile ที่ build จาก source จริง (ดีกว่า vtrc-backoffice) แต่ compose ไม่ได้ใช้จริง (QUAL-BONEW-01)
การจัดการ auth3/10มี bug เดิมของ vtrc-backoffice ครบ บวก SSO handoff ที่ฝัง token ใน URL เพิ่มความเสี่ยง
Security3/10SEC-BONEW-01 เป็นความเสี่ยงใหม่ที่ร้ายแรงกว่า vtrc-backoffice
Performance5/10เหมือน vtrc-backoffice (ไม่มี code splitting, bundle ~47 MB)
Maintainability5/10เหมือน vtrc-backoffice แต่มีความไม่ชัดเจนเรื่อง pipeline การ deploy เพิ่ม
Observability3/10เหมือน vtrc-backoffice — console ปิดหมด
Testing1/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 เดียวกัน