2 · จัดกลุ่มตาม Category
มุมมองเดียวกับ master register แต่ตัดคอลัมน์ file:line/Source ออกเพื่อให้เห็นภาพรวมต่อ category ได้เร็ว — ต้องการ citation เต็มให้ดูที่ master register ID เดียวกันหาได้จากที่นั่นเสมอ
จำนวนรวม 275 รายการ แบ่งเป็น 6 category:
| Category | ความหมาย | จำนวน | Critical | High | Medium | Low |
|---|---|---|---|---|---|---|
| SEC | Security | 89 | 44 | 30 | 14 | 1 |
| PERF | Performance | 11 | 0 | 1 | 10 | 0 |
| CORR | Correctness / data integrity | 30 | 1 | 20 | 8 | 1 |
| LEG | Legacy / EOL / dependency | 22 | 1 | 8 | 12 | 1 |
| QUAL | Code quality | 99 | 0 | 8 | 84 | 7 |
| OBS | Observability | 24 | 0 | 2 | 21 | 1 |
| รวม | 275 | 46 | 69 | 149 | 11 |
QUAL เป็น category ที่ใหญ่ที่สุด (99 รายการ, 36% ของทั้งหมด) ส่วนใหญ่เป็น Medium (hygiene/dead code/naming) — สะท้อนว่าปัญหาที่ใหญ่ที่สุดเชิงจำนวนของแพลตฟอร์มไม่ใช่ bug เดี่ยว ๆ แต่เป็นการสะสมของโค้ดค้าง ไฟล์ backup, และความไม่สม่ำเสมอของ pattern ข้าม repo SEC เป็น category ที่มี Critical มากที่สุด (44 จาก 46 Critical รวมทั้งหมดเป็น SEC)
SEC — Security (89)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| SEC-VTRC-API-01 | vtrc-api | Critical | Command injection ผ่าน execSync ใน PDF pipeline |
| SEC-VTRC-API-02 | vtrc-api | Critical | Default JWT_SECRET = 'secret' |
| SEC-VTRC-API-03 | vtrc-api | Critical | /webdeployment รัน shell binary โดยไม่มี auth |
| SEC-VTRC-API-04 | vtrc-api | Critical | /file/:id/download ไม่มี apiKey check |
| SEC-CU-01 | cu-central-api | Critical | JWT_SECRET default เป็น empty string |
| SEC-CU-02 | cu-central-api | Critical | apiKeys hardcoded ในโค้ด 2 keys |
| SEC-CU-03 | cu-central-api | Critical | .env.develop-test commit อยู่ในโค้ด |
| SEC-CU-04 | cu-central-api | Critical | /auth/signinbypass passwordless signin live ใน production |
| SEC-CU-05 | cu-central-api | Critical | ignoreAuth bypass — apiKey อย่างเดียวพอ |
| SEC-CU-06 | cu-central-api | Critical | rejectUnauthorized: false ใน LDAP connection |
| C1 | vtrc-rc-backoffice | Critical | .env committed มี secret จริง |
| C2 | vtrc-rc-backoffice | Critical | MSSQL conn string ฝังใน bundle |
| C3 | vtrc-rc-backoffice | Critical | SSO bypass รับ token ใน URL |
| SEC-BONEW-01 | vtrc-backoffice-new | Critical | Login ส่ง token เป็น URL path segment ข้าม origin |
| SEC-PMS-01 | pms-api | Critical | Endpoint คืนเงินเดือนพนักงานเป็น @Public() |
| SEC-PMS-02 | pms-api | Critical | Credential + JWT secret share กับ 3 service หลุดเข้า git |
| SEC-AIRECRUIT-01 | ai-recruitment-api | Critical | Production credential + OpenAI key หลุดเข้า git |
| SEC-AIRECRUIT-02 | ai-recruitment-api | Critical | ไม่มี authorization ระดับ role/scope |
| SEC-WORKFLOW-01 | workflow-api | Critical | ไม่มี JWT guard ที่ไหนเลย role อนุมานจาก payload |
| SEC-WORKFLOW-02 | workflow-api | Critical | .env.example มีรหัสผ่านจริง |
| SEC-COMMON-01 | vtrc-common | Critical | ทุก controller เป็น @Public() |
| SEC-COMMON-03 | vtrc-common | Critical | .env commit พร้อม MSSQL sa password + shared secret |
| SEC-JOBSCHED-01 | job-scheduler-api | Critical | .env commit พร้อม MSSQL sa password + shared secret |
| SEC-CHAT-01 | chat-center-api | Critical | Raw SQL string interpolation — SQL injection |
| SEC-CHAT-04 | chat-center-api | Critical | .env commit พร้อมรหัสผ่านจริงหลายระบบ |
| SEC-RCWEB-01 | recruitment-web | Critical | .env×3 track ใน git มี AES key จริง |
| SEC-REPORTLOG-01 | report-log | Critical | Log ไฟล์ commit มี PII plaintext |
| SEC-RECRUIT-01 | recruitment-api | Critical | Production credential หลุดเข้า git |
| SEC-RECRUIT-02 | recruitment-api | Critical | SQL injection ผ่าน dynamic EXEC string |
| SEC-BENEFIT-01 | benefit-api | Critical | Production credential หลุดเข้า git |
| SEC-BENEFIT-02 | benefit-api | Critical | Raw SQL interpolation ข้าม 2 database |
| SEC-2WAYVTRC-01 | 2way-vtrc-api | Critical | Master bypass token static string |
| SEC-2WAYVTRC-02 | 2way-vtrc-api | Critical | getProfile ไม่มี middleware คืน PII |
| SEC-2WAYVTRC-03 | 2way-vtrc-api | Critical | MongoDB credential hardcode |
| SEC-2WAYLINE-01 | 2way-line-service | Critical | ทุก endpoint เป็น @Public() |
| SEC-2WAYAPI-01 | 2way-api | Critical | Backdoor login hardcode ออก JWT admin |
| SEC-2WAYAPI-02 | 2way-api | Critical | JWT secret มี default fallback ในซอร์ส |
| SEC-2WAYAPI-03 | 2way-api | Critical | SQL injection หลายโมดูล |
| SEC-2WAYAPI-04 | 2way-api | Critical | Global guard bypass ด้วย @Public() แทบทุก endpoint |
| SEC-MOBILE-01 | vtrc-mobile | Critical | RSA private key hardcode compile เข้า bundle |
| SEC-MOBILE-02 | vtrc-mobile | Critical | Android keystore + password commit plaintext |
| SEC-NEW-01 | new-vtrc-mobile | Critical | RSA private key เดียวกับ vtrc-mobile copy ซ้ำ |
| SEC-MTVTRC-01 | meeting-vtrc-api | Critical | .env×3 commit plaintext |
| SEC-MTVTRC-02 | meeting-vtrc-api | Critical | mockuser endpoint ไม่มี auth คืน PII |
| SEC-VTRC-API-05 | vtrc-api | High | checkMenuAuth อ่าน role ผิดตัว |
| SEC-VTRC-API-06 | vtrc-api | High | CORS typo ทำให้ allowlist ไม่ทำงาน |
| SEC-VTRC-API-07 | vtrc-api | High | SQL injection ใน statLog cron |
| SEC-BO-01 | vtrc-backoffice | High | Token ไม่มีวันหมดอายุ + XSS surface 20 ไฟล์ |
| H1 | vtrc-rc-backoffice | High | dangerouslySetInnerHTML 30 ไฟล์ |
| H2 | vtrc-rc-backoffice | High | AES key expose ใน bundle |
| H3 | vtrc-rc-backoffice | High | Token เก็บใน web storage ทั้งหมด |
| H4 | vtrc-rc-backoffice | High | apiKeyNews hardcode UUID |
| S-1 | vtrc-web | High | Token เก็บใน web storage |
| S-3 | vtrc-web | High | AES key+IV hardcoded remember password |
| S-4 | vtrc-web | High | dangerouslySetInnerHTML ไม่มี sanitizer |
| SEC-COMMON-02 | vtrc-common | High | SQL injection ใน AddressRepository |
| SEC-CHAT-02 | chat-center-api | High | WebSocket chat ไม่มี guard |
| SEC-CHAT-03 | chat-center-api | High | LINE webhook ไม่ verify signature |
| SEC-RCWEB-02 | recruitment-web | High | PII ใน localStorage ไม่มีวันหมดอายุ |
| SEC-RCWEB-03 | recruitment-web | High | OTP bypass ด้วยค่าคงที่ในโค้ด prod |
| SEC-REPORTLOG-02 | report-log | High | .gitignore ปิดกฎ log ไว้โดยตั้งใจ |
| SEC-BENEFIT-03 | benefit-api | High | Endpoint เบิกค่ารักษาพยาบาลเป็น @Public() |
| SEC-2WAYVTRC-04 | 2way-vtrc-api | High | JWT secret hardcoded 2 ตัวไม่ตรงกัน |
| SEC-2WAYVTRC-05 | 2way-vtrc-api | High | MSSQL encrypt: false |
| SEC-2WAYMTBO-01 | 2way-meeting-backoffice | High | JWT ใน localStorage ไม่ใช่ httpOnly |
| SEC-2WAYMTBO-02 | 2way-meeting-backoffice | High | Route guard client-side เท่านั้น |
| SEC-2WAYLINE-02 | 2way-line-service | High | เรียกกันเองผ่าน hardcoded IP |
| SEC-2WAYAPI-05 | 2way-api | High | ignoreExpiration: true เสมอ |
| SEC-2WAYAPI-06 | 2way-api | High | MSSQL encrypt: false |
| SEC-MOBILE-03 | vtrc-mobile | High | apiKey hardcode ซ้ำ 3 จุด |
| SEC-NEW-02 | new-vtrc-mobile | High | Token plain ใน AsyncStorage (regression) |
| SEC-MTVTRC-03 | meeting-vtrc-api | High | Path "secure" ไม่มี auth จริง |
| SEC-MTBO-01 | meeting-backoffice | High | API key hardcode ในซอร์ส frontend |
| SEC-MTBO-02 | meeting-backoffice | High | .env URL จริงของ UAT commit |
| SEC-VTRC-API-08 | vtrc-api | Medium | JWT verify ไม่ระบุ algorithms |
| M1 | vtrc-rc-backoffice | Medium | checkLinkURL ใช้ includes ไม่ parse origin |
| M2 | vtrc-rc-backoffice | Medium | ไม่มี queue สำหรับ token refresh |
| M3 | vtrc-rc-backoffice | Medium | ไม่มี CSP |
| M4 | vtrc-rc-backoffice | Medium | ไม่มี CSRF token |
| M5 | vtrc-rc-backoffice | Medium | ไม่มี SRI สำหรับ CDN |
| S-2 | vtrc-web | Medium | apiKey base64 ในบันเดิล |
| S-5 | vtrc-web | Medium | isShow เป็น UI flag ไม่ใช่ auth gate |
| S-6 | vtrc-web | Medium | Console override ปิด debug |
| S-8 | vtrc-web | Medium | ไม่มี CSP |
| SEC-RCWEB-04 | recruitment-web | Medium | Email/OTP ผ่าน query string GET |
| SEC-2WAYVTRC-06 | 2way-vtrc-api | Medium | CORS wildcard + credentials ขัดแย้งกัน |
| SEC-OCRAPI-01 | vtrc-ocr-api | Medium | CORS เปิดกว้าง config ไม่ถูกใช้ |
| SEC-MTVTRC-04 | meeting-vtrc-api | Medium | Tinify API key hardcode |
| S-7 | vtrc-web | Low | Google Analytics ID เปิดเผย |
PERF — Performance (11)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| PERF-2WAYBATCH-01 | 2way-batch | High | Cron 10 วินาที ทำงานจริงแค่ log เปล่า |
| PERF-VTRC-API-01 | vtrc-api | Medium | execSync block event loop |
| PERF-CU-01 | cu-central-api | Medium | ไม่มี timeout/retry/circuit breaker |
| PERF-BO-01 | vtrc-backoffice | Medium | ไม่มี code splitting |
| P-1 | vtrc-web | Medium | Bundle ~12MB ไม่มี code splitting |
| P-2 | vtrc-web | Medium | fetchPolicy: no-cache default |
| P-3 | vtrc-web | Medium | Query profile ทุกครั้งที่ reload |
| P-4 | vtrc-web | Medium | ไม่มี lazy loading รูปภาพ |
| P-5 | vtrc-web | Medium | Webpack 4 |
| P-6 | vtrc-web | Medium | console.log กระจายเพิ่มขนาดบันเดิล |
| P-7 | vtrc-web | Medium | PDF.js worker แยกเพิ่ม request |
CORR — Correctness / data integrity (30)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| CORR-CU-01 | cu-central-api | Critical | axios import จริงแต่ package.json มีแต่ typo — crash risk |
| CORR-VTRC-API-01 | vtrc-api | High | Transaction pattern ทั่วระบบไม่ทำงานจริง |
| CORR-VTRC-API-02 | vtrc-api | High | signature mismatch drop device argument |
| CORR-VTRC-API-03 | vtrc-api | High | limit cap ไม่ทำงาน เปิดช่อง DoS |
| CORR-CU-02 | cu-central-api | High | OTP inconsistency ระหว่าง 2 resolver |
| CORR-BO-02 | vtrc-backoffice | High | isRemember hardcode = 1 เสมอ |
| CORR-BONEW-01 | vtrc-backoffice-new | High | isRemember hardcode = 1 เสมอ (สืบทอด) |
| CORR-PMS-01 | pms-api | High | Cron ทุก 1 นาทีไม่ป้องกัน overlap |
| CORR-AIRECRUIT-01 | ai-recruitment-api | High | Sync mechanism ระหว่าง 2 ตารางไม่ปรากฏในโค้ด |
| CORR-WORKFLOW-01 | workflow-api | High | ต่อฐานข้อมูล service อื่นตรง (distributed-monolith) |
| CORR-SSO-01 | sso-api | High | signIn ไม่ออก JWT ของตัวเอง |
| CORR-CHAT-01 | chat-center-api | High | Cron in-memory หายเมื่อ restart |
| CORR-CHAT-02 | chat-center-api | High | synchronize: true บน production |
| CORR-RECRUIT-01 | recruitment-api | High | Race condition ลด remainingManpower |
| CORR-BENEFIT-01 | benefit-api | High | ข้อมูลซ้ำ 2 schema ไม่มี sync mechanism |
| CORR-2WAYVTRC-01 | 2way-vtrc-api | High | Multi-table insert ไม่มี transaction |
| CORR-2WAYVTRC-02 | 2way-vtrc-api | High | MongoDB comment ปิดแต่ feature ยังพึ่งพา |
| CORR-MOBILE-01 | vtrc-mobile | High | MEETING_API hardcode ชี้ UAT เสมอ |
| CORR-MTVTRC-01 | meeting-vtrc-api | High | refreshtoken route ไม่ mount + ไม่ persist |
| CORR-MTBO-01 | meeting-backoffice | High | BASE_PATH env ไม่มีผลจริง |
| CORR-MTBONEW-01 | meeting-backoffice-new | High | อ่าน env vars แต่ไม่มี .env ไฟล์ใดเลย |
| CORR-VTRC-API-04 | vtrc-api | Medium | Session fallback ข้าม user |
| CORR-BO-01 | vtrc-backoffice | Medium | unreachable code คืน endpoint ผิด |
| CORR-SSO-02 | sso-api | Medium | catch block ไม่เช็ค null ก่อนอ่าน |
| CORR-RCWEB-01 | recruitment-web | Medium | ENV ประกาศผิด stage ไม่มีผลจริง |
| CORR-MTVTRC-02 | meeting-vtrc-api | Medium | Multi-insert ไม่มี transaction |
| CORR-MTVTRC-03 | meeting-vtrc-api | Medium | แจ้งเตือนตัวแทน comment ปิด |
| CORR-MTVTRC-04 | meeting-vtrc-api | Medium | Cron พลาด backlog ข้ามวัน |
| CORR-MTBO-02 | meeting-backoffice | Medium | SSG ไม่มี revalidate |
| CORR-WORKFLOW-02 | workflow-api | Low | Enum ผสมเข้า raw SQL |
LEG — Legacy / EOL / dependency (22)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| LEG-CU-01 | cu-central-api | Critical | axois typosquat ของ axios |
| LEG-CU-02 | cu-central-api | High | error-ex pin git URL |
| LEG-CU-03 | cu-central-api | High | ldapjs archived |
| LEG-CU-04 | cu-central-api | High | jsonwebtoken@8.5.1 EOL/CVE |
| LEG-CU-05 | cu-central-api | High | Node 12 + esm shim EOL |
| LEG-CU-06 | cu-central-api | High | xlsx prototype pollution history |
| LEG-MOBILE-01 | vtrc-mobile | High | RN 0.63.2 + React 16.13.1 เก่ากว่า 5 ปี |
| LEG-MOBILE-02 | vtrc-mobile | High | ไม่มี runtime endpoint resolver |
| LEG-FRONT-01 | vtrc-application-front | High | .ipa binary commit เข้า git |
| LEG-VTRC-API-01 | vtrc-api | Medium | Playground+introspection เปิดใน prod |
| LEG-BO-01 | vtrc-backoffice | Medium | Dockerfile ไม่ build จาก source |
| LEG-BO-02 | vtrc-backoffice | Medium | react-scripts 3.4.3 เก่ามาก |
| LEG-BO-03 | vtrc-backoffice | Medium | AntD v4.15.4 EOL |
| LEG-BONEW-01 | vtrc-backoffice-new | Medium | react-scripts 3.4.3 |
| LEG-BONEW-02 | vtrc-backoffice-new | Medium | AntD v4.15.4 EOL |
| LEG-OCRAPI-01 | vtrc-ocr-api | Medium | ไม่มี test suite |
| LEG-RCWEB-01 | recruitment-web | Medium | Base64 upload + validate client-only |
| LEG-BENEFIT-01 | benefit-api | Medium | Package ซ้ำ 2 ตัวทำหน้าที่เดียวกัน |
| LEG-2WAYVTRC-01 | 2way-vtrc-api | Medium | ts-node ตรงใน production |
| LEG-2WAYMTBO-01 | 2way-meeting-backoffice | Medium | Next.js 12 + React 17 EOL |
| LEG-2WAYBATCH-01 | 2way-batch | Medium | Node 16-alpine EOL |
| LEG-AIRECRUIT-01 | ai-recruitment-api | Low | Node 18 ไม่ตรงกับ Node 20 ของกลุ่ม |
QUAL — Code quality (99)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| QUAL-CU-01 | cu-central-api | High | RBAC directive comment ออก |
| QUAL-PMS-01 | pms-api | High | เอกสารไม่ตรงกับโค้ดจริง |
| QUAL-AIRECRUIT-01 | ai-recruitment-api | High | Dead code ไม่ถูก mount |
| QUAL-OCRAPI-01 | vtrc-ocr-api | High | OCR endpoint เป็น mock ทั้งหมด |
| QUAL-OCRAPI-02 | vtrc-ocr-api | High | ผลลัพธ์เก็บ in-memory เท่านั้น |
| QUAL-RECRUIT-01 | recruitment-api | High | Connection ไม่ใช้งานยังเปิดค้าง |
| QUAL-BENEFIT-01 | benefit-api | High | Logic ซ้ำหลายร้อยบรรทัด |
| QUAL-NEW-01 | new-vtrc-mobile | High | refreshToken ยิง boilerplate URL |
| QUAL-VTRC-API-01 | vtrc-api | Medium | Op.like บน JSON/TEXT column |
| QUAL-VTRC-API-02 | vtrc-api | Medium | Dynamic model access |
| QUAL-VTRC-API-03 | vtrc-api | Medium | Fire-and-forget cron |
| QUAL-VTRC-API-04 | vtrc-api | Medium | await map ไม่ Promise.all |
| QUAL-VTRC-API-05 | vtrc-api | Medium | Debug artifact ค้าง |
| QUAL-CU-02 | cu-central-api | Medium | clockTolerance misuse |
| QUAL-CU-03 | cu-central-api | Medium | signInDomains hardcode |
| QUAL-BO-01 | vtrc-backoffice | Medium | Route block comment ค้าง |
| QUAL-BO-02 | vtrc-backoffice | Medium | checkLinkURL ซ้ำ 2 ตัว |
| QUAL-BO-03 | vtrc-backoffice | Medium | 41+ ไฟล์ backup |
| QUAL-BONEW-01 | vtrc-backoffice-new | Medium | Dockerfile ไม่ตรงกับ compose |
| QUAL-BONEW-02 | vtrc-backoffice-new | Medium | ชื่อ network สลับกับที่คาด |
| QUAL-BONEW-03 | vtrc-backoffice-new | Medium | ไฟล์ backup เปล่า |
| QUAL-PMS-02 | pms-api | Medium | Dockerfile ไม่ล็อค lockfile |
| QUAL-PMS-03 | pms-api | Medium | 5 module ชื่อคล้ายกันมาก |
| QUAL-PMS-04 | pms-api | Medium | AI service domain ภายนอกไม่ยืนยัน agreement |
| QUAL-AIRECRUIT-02 | ai-recruitment-api | Medium | Hardcode สมมติฐานประชากรใน prompt |
| QUAL-WORKFLOW-01 | workflow-api | Medium | Fallback query จาก schema drift |
| QUAL-WORKFLOW-02 | workflow-api | Medium | ชื่อ repo/package ไม่ตรงกัน |
| QUAL-WORKFLOW-03 | workflow-api | Medium | schema.sql ไม่ตรง entity จริง |
| QUAL-WORKFLOW-04 | workflow-api | Medium | ไฟล์ service ใหญ่เกินจัดการ |
| QUAL-COMMON-01 | vtrc-common | Medium | ชื่อ endpoint ทำให้เข้าใจผิด |
| QUAL-COMMON-02 | vtrc-common | Medium | libs copy-paste ข้าม repo |
| QUAL-SSO-01 | sso-api | Medium | verifySession เป็น stub |
| QUAL-SSO-02 | sso-api | Medium | env อ่านไม่สม่ำเสมอ |
| QUAL-JOBSCHED-01 | job-scheduler-api | Medium | TypeOrmModule import ไม่ใช้ |
| QUAL-JOBSCHED-02 | job-scheduler-api | Medium | .env copy จาก repo อื่นไม่แก้ |
| QUAL-JOBSCHED-03 | job-scheduler-api | Medium | dev log commit เข้า git |
| QUAL-CHAT-01 | chat-center-api | Medium | libs copy-paste ข้าม repo |
| QUAL-CHAT-02 | chat-center-api | Medium | console.log debug + dead code |
| QUAL-OCRAPI-03 | vtrc-ocr-api | Medium | error handler ซ้ำ 2 ชุด |
| QUAL-OCRAPI-04 | vtrc-ocr-api | Medium | response helper ไม่ถูกใช้ |
| QUAL-OCRAPI-05 | vtrc-ocr-api | Medium | ไม่มี .env.example |
| QUAL-RCWEB-01 | recruitment-web | Medium | dead code api/login.js |
| QUAL-RCWEB-02 | recruitment-web | Medium | axios.js dead code + misnamed param |
| QUAL-RCWEB-03 | recruitment-web | Medium | typo env var สอดคล้องกัน 3 จุด |
| QUAL-RCWEB-04 | recruitment-web | Medium | Decrypt logic ซ้ำ 2 ที่ |
| QUAL-REPORTLOG-01 | report-log | Medium | users.json ไม่มี context |
| QUAL-REPORTLOG-02 | report-log | Medium | Script เฉพาะกิจ hardcode ค่า |
| QUAL-RECRUIT-02 | recruitment-api | Medium | dev URL ใน prod env |
| QUAL-RECRUIT-03 | recruitment-api | Medium | Business rule ไม่มี enum |
| QUAL-BENEFIT-02 | benefit-api | Medium | validateData stub คืน true เสมอ |
| QUAL-BENEFIT-03 | benefit-api | Medium | docType magic number |
| QUAL-2WAYVTRC-01 | 2way-vtrc-api | Medium | Mock tutorial mount ที่ path จริง |
| QUAL-2WAYVTRC-02 | 2way-vtrc-api | Medium | ชื่อ package ไม่เคยแก้ |
| QUAL-2WAYMTBO-01 | 2way-meeting-backoffice | Medium | ชื่อ repo ทำให้เข้าใจผิด |
| QUAL-2WAYMTBO-02 | 2way-meeting-backoffice | Medium | Error swallow ด้วย console.log |
| QUAL-2WAYMTBO-03 | 2way-meeting-backoffice | Medium | roomEmpCode hardcode |
| QUAL-2WAYMTBO-04 | 2way-meeting-backoffice | Medium | MUI v4/v5 ปนกัน |
| QUAL-2WAYLINE-01 | 2way-line-service | Medium | TypeORM ไม่ได้ใช้งานจริง |
| QUAL-2WAYLINE-02 | 2way-line-service | Medium | env var ไม่ได้ใช้ |
| QUAL-2WAYLINE-03 | 2way-line-service | Medium | scratch files commit |
| QUAL-2WAYBATCH-01 | 2way-batch | Medium | โมดูลไม่ import เข้า AppModule |
| QUAL-2WAYBATCH-02 | 2way-batch | Medium | ไม่มี .env.example |
| QUAL-2WAYAPI-01 | 2way-api | Medium | โมดูลซ้ำไม่ต่อสาย |
| QUAL-2WAYAPI-02 | 2way-api | Medium | AppModule import ตัวเอง |
| QUAL-2WAYAPI-03 | 2way-api | Medium | console.log ปน logger รวม PII |
| QUAL-2WAYAPI-04 | 2way-api | Medium | Node version ไม่ตรงกัน |
| QUAL-2WAYAPI-05 | 2way-api | Medium | Package manager ไม่สอดคล้อง |
| QUAL-2WAYAPI-06 | 2way-api | Medium | Hardcoded IP แทน config |
| QUAL-MOBILE-01 | vtrc-mobile | Medium | Typo ชื่อไฟล์/route 20+ จุด |
| QUAL-MOBILE-02 | vtrc-mobile | Medium | Test มีแค่ default smoke test |
| QUAL-MOBILE-03 | vtrc-mobile | Medium | Navigation library ไม่มี release ใหม่ |
| QUAL-MOBILE-04 | vtrc-mobile | Medium | ชื่อ package ไม่เคยเปลี่ยน |
| QUAL-MOBILE-05 | vtrc-mobile | Medium | สอง async pattern สับสน |
| QUAL-NEW-02 | new-vtrc-mobile | Medium | Default host UAT ไม่ใช่ prod |
| QUAL-NEW-03 | new-vtrc-mobile | Medium | รหัสผ่านเก็บใน persisted state |
| QUAL-NEW-04 | new-vtrc-mobile | Medium | ชื่อ package scaffold เดิม |
| QUAL-NEW-05 | new-vtrc-mobile | Medium | Screen ไฟล์ครบแต่ comment ปิด |
| QUAL-FRONT-01 | vtrc-application-front | Medium | เวอร์ชัน hardcode ในหน้าเว็บ |
| QUAL-FRONT-02 | vtrc-application-front | Medium | QR code asset ค้าง |
| QUAL-MTVTRC-01 | meeting-vtrc-api | Medium | mongoose dependency ไม่ได้ใช้ |
| QUAL-MTVTRC-02 | meeting-vtrc-api | Medium | ตาราง login ไม่มี route อ้างถึง |
| QUAL-MTVTRC-03 | meeting-vtrc-api | Medium | ชื่อไฟล์ case-sensitive risk |
| QUAL-MTVTRC-04 | meeting-vtrc-api | Medium | cron สะกดผิดเป็น corn ทั่ว repo |
| QUAL-MTVTRC-05 | meeting-vtrc-api | Medium | ไม่มี Dockerfile แต่ compose build |
| QUAL-MTBO-01 | meeting-backoffice | Medium | package name ไม่สัมพันธ์กับแอป |
| QUAL-MTBO-02 | meeting-backoffice | Medium | ignoreBuildErrors: true |
| QUAL-MTBO-03 | meeting-backoffice | Medium | รัน dev server ใน production |
| QUAL-MTBO-04 | meeting-backoffice | Medium | Sidebar ไม่ครบเมนู |
| QUAL-MTBO-05 | meeting-backoffice | Medium | Locale เยอรมันไม่ได้ใช้ |
| QUAL-MTBONEW-01 | meeting-backoffice-new | Medium | build/ commit เข้า git |
| QUAL-MTBONEW-02 | meeting-backoffice-new | Medium | ไม่มี error tracking |
| QUAL-MTBONEW-03 | meeting-backoffice-new | Medium | compose ไม่ตรงวิธี deploy จริง |
| QUAL-BONEW-04 | vtrc-backoffice-new | Low | เมนูปิดไม่มีคำอธิบาย |
| QUAL-PMS-05 | pms-api | Low | TODO ค้าง |
| QUAL-PMS-06 | pms-api | Low | Typo ชื่อ entity ถาวร |
| QUAL-AIRECRUIT-03 | ai-recruitment-api | Low | ไฟล์ภาพ 300+ ไฟล์ commit |
| QUAL-RECRUIT-04 | recruitment-api | Low | Template สำรองปนไฟล์จริง |
| QUAL-BENEFIT-04 | benefit-api | Low | ไฟล์ผู้ใช้จริง commit ใน uploads/ |
| QUAL-BENEFIT-05 | benefit-api | Low | Base entity ซ้ำ 2 ตัว |
OBS — Observability (24)
| ID | Repo | Severity | คำอธิบาย |
|---|---|---|---|
| OBS-VTRC-API-01 | vtrc-api | High | PII logging เต็มรูปแบบ |
| OBS-PMS-01 | pms-api | High | Cron error handling แบบ silent |
| OBS-VTRC-API-02 | vtrc-api | Medium | Redis caching layer ตายทั้งระบบ |
| OBS-VTRC-API-03 | vtrc-api | Medium | ไม่มี structured logging/tracing/health check |
| OBS-CU-01 | cu-central-api | Medium | Dead connection เปิด pool ค้าง |
| OBS-BO-01 | vtrc-backoffice | Medium | console override เป็น no-op |
| OBS-BONEW-01 | vtrc-backoffice-new | Medium | console override เป็น no-op |
| OBS-PMS-02 | pms-api | Medium | console.log มากที่สุดในกลุ่ม |
| OBS-AIRECRUIT-01 | ai-recruitment-api | Medium | ไม่มี test suite เลย |
| OBS-AIRECRUIT-02 | ai-recruitment-api | Medium | console.log แทน logger ที่มีอยู่ |
| OBS-COMMON-01 | vtrc-common | Medium | เอกสาร workspace อธิบายผิด |
| OBS-SSO-01 | sso-api | Medium | ไม่มีไฟล์ deploy manifest ใดเลย |
| OBS-JOBSCHED-01 | job-scheduler-api | Medium | EXPOSE port ไม่ตรงพอร์ตจริง |
| OBS-CHAT-01 | chat-center-api | Medium | ไม่มี deployment manifest |
| OBS-OCRAPI-01 | vtrc-ocr-api | Medium | Health check ไม่ตรวจ dependency จริง |
| OBS-REPORTLOG-01 | report-log | Medium | ไม่มี error handling |
| OBS-RECRUIT-01 | recruitment-api | Medium | console.log ปน logger 71 จุด |
| OBS-BENEFIT-01 | benefit-api | Medium | PII หลุดเข้า production stdout |
| OBS-BENEFIT-02 | benefit-api | Medium | ไม่มี health check endpoint |
| OBS-2WAYMTBO-01 | 2way-meeting-backoffice | Medium | ชื่อ env var ไม่สื่อความหมาย |
| OBS-MOBILE-01 | vtrc-mobile | Medium | ไม่มี crash reporting SDK |
| OBS-MTVTRC-01 | meeting-vtrc-api | Medium | Sentry DSN hardcode |
| OBS-MTBONEW-01 | meeting-backoffice-new | Medium | Commit history บางเกินไป |
| OBS-RECRUIT-02 | recruitment-api | Low | Test coverage กระจุกบางโมดูล |
ไป master register หรือ จัดกลุ่มตาม Severity