Skip to content

Docs ↔ Code Discrepancy Audit

/docs-verify status (2026-07-11):

  • Baseline FAIL → remediation Waves → re-audit CONDITIONAL PASS (Vol 2 ports)
  • PASS after residual P1 cleanup: Vol 8 sourceDb, Vol 14 LEG packages, audit 04 diagram (2026-07-11)
  • Latest PASS DELTA (Vol 2 ports): audits/docs-verify-2026-07-11-delta-vol2-pass.md
    Checklist ด้านล่างเป็นประวัติงาน — รายการที่พบในรอบถาม “มีอะไรผิดอีก” ถูก remediate แล้ว (ดู A.8)

วันที่ตรวจ: 2026-07-11
ขอบเขต: ทุก volume ใน docs/ (Volume 0–16 + docs/index.md) เทียบกับโค้ดจริงใน vtrc-api/, cu-central-api/, centralize-api/, vtrc-web/, vtrc-rc-backoffice/
วัตถุประสงค์: รายการข้อผิดพลาดที่ต้องแก้ในคู่มือ — ใช้เป็น checklist งานแก้ไขเอกสาร (ไม่ใช่แผนแก้โค้ด)

วิธีใช้: แก้ตาม Priority P0 → P1 → P2 แล้วติ๊ก [ ][x]
หลังแก้แต่ละ theme ให้บันทึกใน volume-17-appendices/08-changelog-errata.md


Executive Summary / สรุปผู้บริหาร

คู่มือส่วนใหญ่ (โดยเฉพาะ Volume 2–3 หลังแก้ 2026-07-10) ถูกต้องเรื่อง END_POINT_CENTRALIZEcu-central-api แต่ยังมี ความขัดแย้งข้าม volume จำนวนมาก:

ThemeความรุนแรงVolumes ที่กระทบ
A. NestJS centralize-api ถูกเขียนเป็น live HR/auth bridge🔴 P00, 1, 4, 8, 9, 12, 15
B. พอร์ต cu-central (8080 vs 8082 vs 9000)🔴 P00, 3, 5, 10, 16
C. KBANK = ธนาคารกรุงเทพ (ผิด — คือกสิกรไทย)🔴 P00, 1
D. Redis / OTP บน vtrc-api (vestigial vs active)🔴 P00, 1, 12, 13
E. statusKcash map / K-Cash cron🔴 P00, 1, 11
F. Volume 7 Apollo/Docker/auth เอกสารไม่ตรงโค้ด🔴 P07
G. นับไฟล์/endpoint/model ผิด🟡 P13, 4, 5, 6, 7
H. Debt ID / env appendix / glossary ขัดกันเอง🟡 P114, 16
I. file:line citation drift🟢 P2หลายเล่ม

English: Highest risk is readers following Vol 0/1/9 flows that still route HR/auth through NestJS + Redis, while production code uses cu-central-api GraphQL/LDAP and stores OTP in MariaDB.

ไทย: ความเสี่ยงสูงสุดคือผู้อ่านทำตาม flow ในเล่ม 0/1/9 ที่ยังส่ง HR/auth ไป NestJS+Redis ทั้งที่ production ใช้ cu-central-api และเก็บ OTP ใน MariaDB


Canonical Truths (อ้างอิงจากโค้ด — ใช้แก้เอกสารทุกจุด)

ใช้ตารางนี้เป็น source of truth เมื่อแก้คู่มือ:

ข้อเท็จจริงค่าที่ถูกต้องหลักฐาน
Live HR bridge จาก vtrc-apiEND_POINT_CENTRALIZEcu-central-api GraphQLvtrc-api/api/.env.example:36-37, centralize/controllers/graphql.js
NestJS centralize-apiService คนละตัว; REST /api/*; caller จาก vtrc-api ไม่ยืนยัน (E-08)ไม่มี HTTP client ไป NestJS ใน vtrc-api
cu-central default APP_PORT8080cu-central-api/main-api/src/config.js:20
พอร์ตใน .env.example ของ vtrc-api8082 (ค่าตัวอย่างที่ vtrc-api ชี้ไป — ไม่ใช่ default ของ cu-central)vtrc-api/api/.env.example:36
Dockerfile EXPOSE 9000 ของ cu-centraldocs-only / ไม่ใช่ listen defaultcu-central-api/main-api/Dockerfile
Compose cu-central prod mapมักเป็น 8000:8000cu-central-api/docker-compose.yml
KBANKธนาคารกสิกรไทย (Kasikorn) ไม่ใช่กรุงเทพvtrc-api/api/src/config.js:389
statusKcash SUCCESSid '9' → status SUCCESS (label PAID)config.js:508-511
K-Cash importmanual (importUpdateStatus) — ไม่มี cron ดึงผลธนาคารcrons.js:14-27
Cron APP_NO===1เฉพาะ fund rate job; updateDelegatesExpire + statLog รันทุก replicacrons.js:14-27
OTP storecu-central MariaDB otp, default TTL 3 นาที — ไม่ใช่ Redis ของ vtrcSMS_OTP_EXPIRE_MINUTES; sendOtp
vtrc-api Redisเชื่อมต่อได้ แต่ cache call sites ส่วนใหญ่ commented / vestigiallib/redis.js + callers
Dual MariaDB ใน vtrc-apidb + db2 เท่านั้น — ไม่มี dbHr ใน connector.jsvtrc-api/api/src/connector.js
NBC MSSQL namedbHRMI_Center_NBC ไม่ใช่ dbHRMI_NBCemployee.service.ts / entities
NestJS hrPaySlipPOST /api/hrPaySlip ไม่ใช่ GEThrpayslip.controller.ts:18
NestJS employee GETs14 routes; รวมทั้งระบบ ≈ 17employee.controller.ts
Device key fieldAPI_DEVICE_KEY[].**key** ไม่ใช่ apiKeyconfig.js + index.js
Session Redis keysess:{userUid}_{sessionId} ไม่ใช่ sess:<sid>session.js
syncModels active79 (ไม่ใช่ 88)lib/model.js
Frontend GraphQL URIจาก window.location.href ผ่าน checkLinkURL() — ไม่ใช่ NODE_ENVทั้งสอง frontend apollo.js

พอร์ต — เขียนให้ถูกแบบนี้ในเอกสาร

cu-central-api:
  - default ในโค้ด: APP_PORT = 8080
  - vtrc-api .env.example ชี้: http://localhost:8082/api/graphql  (ค่าที่ทีมตั้งตอน dev — ต้อง align กับ env จริง)
  - docker-compose (prod-style): มัก map 8000
  - อย่าเขียนว่า “cu-central = port 8082” โดยไม่มีเงื่อนไข
  - อย่าเขียน port 9000 เป็น listen port

P0 — ต้องแก้ก่อน (ข้อเท็จจริงผิด / ทำให้ผู้อ่านทำผิด)

Theme A — NestJS ถูกเขียนเป็น live bridge

#ไฟล์สิ่งที่เอกสารบอกสิ่งที่โค้ดจริงAction
A1volume-00/.../02-system-map.mdSlip/HR → NestJS centralize-api→ cu-central GraphQL[ ] แก้ diagram + prose ให้ตรง Vol 2.1
A2volume-00/.../03-employee-day.mdcache miss → NestJS→ cu-central[ ] แก้ขั้นตอน 09:00 ให้ตรง summary table
A3volume-00/.../05-key-features.mdtime attendance → NestJS + Redis→ cu-central GraphQL[ ] แก้ diagram Feature 10
A4volume-01/.../04-payroll-slip.mdNestJS + Redis cachecu-central; Redis ไม่บน path[ ] แก้ flow
A5volume-01/.../10-time-attendance.mddiagram NestJS (ขัดกับข้อความบรรทัด ~94)cu-central[ ] ทำให้ diagram ตรงกับ prose
A6volume-01/.../02-organization.mdproxy ผ่าน NestJScu-central[ ] แก้ชื่อ service
A7volume-04/.../index.mdtopology vtrc-api → centralize-apiไม่มี edge นี้[ ] ลบ/ใส่ “unconfirmed caller (E-08)”
A8volume-04/.../09-scorecard-comparison.mdauth forward → NestJS→ cu-central[ ] แก้
A9volume-08/.../01-persistence-topology.mdNestJS เป็น reader หลักของ PaySlip/Timecu-central เป็น live path[ ] แยก “live path” vs “NestJS template”
A10volume-08/.../09-identity-across-databases.mdfetch ผ่าน NestJScu-central[ ] แก้ steps 2–4
A11volume-09/.../02-authentication-flow.mdlogin → NestJS GraphQL /signin + MSSQL passwordcu-central LDAP /auth/signin[ ] rewrite flow ทั้งบท
A12volume-09/.../05-credential-secrets.mdgate = NestJS passwordcu-central LDAP[ ] แก้
A13volume-09/.../10-supply-chain-runtime.mdforward password → NestJScu-central[ ] แก้
A14volume-12/.../01-hosting-topology.mdNestJS:3000 บน prod VM เดียวกับ trafficไม่ยืนยัน; ไม่ใช่ END_POINT_CENTRALIZE[ ] ใส่ E-08 disclaimer
A15volume-12/.../05-nginx-ssl.mdnginx proxy NestJSupstream เป็น cu-central replicas[ ] แก้
A16volume-15/.../08-infrastructure-evolution.mdcurrent: vtrc-api → centralize-api→ cu-central[ ] แก้ current-state diagram

กฎแก้: คำว่า centralize/ ใน vtrc-api = folder ประวัติศาสตร์ ที่เรียก cu-central — ห้าม equate กับ NestJS centralize-api/ โดยไม่มีคำว่า “unconfirmed / separate service”


Theme B — พอร์ต

#ไฟล์Claim ผิดแก้เป็นAction
B1volume-00/.../02-system-map.mdcu-central Port 9000ระบุ APP_PORT default 8080; EXPOSE 9000 เป็น Dockerfile เท่านั้น[ ]
B2volume-03 index / 04-centralize-bridge.md / 10-scorecard.md“port 8082 = cu-central”แยก default 8080 vs .env.example 8082[ ]
B3volume-05/.../09-scorecard-ownership.mdcu-central = 8082เหมือน B2[ ]
B4volume-10/.../01-api-topology.md (+ index)default APP_PORT 80828080[ ]
B5volume-16/.../06-environment-variables.mdcu-central PORT=8082APP_PORT=8080[ ]

Theme C — KBANK = กรุงเทพ (ผิด)

#ไฟล์Action
C1volume-00/.../04-admin-day.md[ ] เปลี่ยน “ธนาคารกรุงเทพ” → ธนาคารกสิกรไทย (KBANK)
C2volume-00/.../06-quick-glossary.md[ ] แก้คำนิยาม KBANK / K-Cash
C3volume-00/.../05-key-features.md[ ] แก้ข้อความ cron + ธนาคาร
C4volume-01/.../11-payments-kbank.md[ ] แก้ชื่อธนาคารทั้งบท

Theme D — Redis / OTP

#ไฟล์Claim ผิดความจริงAction
D1volume-00/.../02-system-map.mdpayslip Redis payslip:{emp}:{date}path ไม่เขียน Redis[ ] ลบหรือใส่ “vestigial / commented”
D2volume-12/.../07-database-redis.mdvtrc Redis = OTP TTL 5m + cron locksOTP อยู่ cu-central DB; cron ไม่ใช้ Redis[ ] rewrite ส่วน vtrc-redis
D3volume-13/.../06-redis-operations.mdKEYS otp:* บน vtrc-redisOTP ในตาราง otp[ ] แก้ runbook
D4volume-13/.../08-debug-playbooks.mddebug OTP ผ่าน Redisดู DB / cu-central[ ] แก้
D5volume-13/.../07-user-session-management.md“รับ OTP (เก็บใน Redis)”DB[ ] แก้

Theme E — K-Cash / statusKcash / cron

#ไฟล์Claim ผิดความจริงAction
E1volume-00/.../04-admin-day.mdเช็คว่า cron ดึงผล K-Cashไม่มี cron — import manual[ ]
E2volume-00/.../05-key-features.mdcron “ดึงผล K-Cash”ไม่มีใน crons.js[ ]
E3volume-00/.../04-admin-day.mdPOST /api/downloadExcelGET /download/excel/:table[ ]
E4volume-01/.../07-welfare-hospital.mdcode 9 → PAIDcode 9 → status SUCCESS[ ]
E5volume-11/.../03-welfare-hospital.mdstatusKcash id 0=SUCCESS; labels บัญชีปิด ฯลฯดู config.js:488-518 เท่านั้น[ ] rewrite ตารางทั้งก้อนจากโค้ด
E6volume-11/.../03-welfare-hospital.mdFAILED → PAIDCASH; 10 statusesFAILED → CASH; statuses ≥12[ ]
E7volume-12/.../11-cron-scorecard.md + runbooksทุก job gate APP_NO===1เฉพาะ fund rate[ ]

Theme F — Volume 7 (backoffice) เอกสารเพี้ยนหนัก

#ไฟล์Claim ผิดความจริงAction
F1volume-07/.../03-apollo-checklinkurl.mdcreateHttpLink, getApikey(), isLoggedIn() เป็น JWT string, axios refreshcreateUploadLink, apiKeyNews(), isLoggedIn() เป็น boolean, refresh ผ่าน Queries.refreshTokenBO[ ] rewrite ทั้งบทจากโค้ดจริง
F2volume-07/.../02-bootstrap-build.mdDocker serve -s; node:16-alpinemulti-stage → nginx:1.24.0[ ]
F3volume-07/.../02 + 04มี PrivateRouteไม่มี — pattern {isLoggedIn() && <Route…/>}[ ]
F4volume-07/.../04-routing-auth-gate.mdmenu ผ่าน axios + getApikeyaxiosWorkforce.get(...)[ ]
F5volume-07/.../02-bootstrap-build.mdjsconfig.json + REACT_APP_API_URL ใช้งานไม่มี jsconfig; REACT_APP_API_URL ไม่ถูกอ้างใน src[ ]
F6เอกสาร axios “13 ตัว” / ชื่อไฟล์ผิด15 ไฟล์ axios*.js; ชื่อจริงต่างจากที่ลิสต์[ ] อัปเดตรายชื่อจาก filesystem

หมายเหตุ: ตาราง checkLinkURL origin→endpoint ใน Vol 6/7 ถูกต้อง — อย่าลบทิ้งตอน rewrite ส่วน Apollo narrative


P1 — ควรแก้ (นับผิด / citation ผิด / ขัดกันเองใน docs)

Theme G — Counts & paths

#ไฟล์ClaimจริงAction
G1Vol 3 index / 01 / 05syncModels 8879 active[ ]
G2Vol 3 05-persistence.mdmodels/core/user/user.js on dbไม่มี — มีแค่ models/centralize/user on db2[ ]
G3Vol 3resolvers 43 = typeDefs 43typeDefs ~43–44; resolvers 41 (+index)[ ]
G4Vol 3controllers 30 folders31[ ]
G5Vol 3repositories 3231[ ]
G6Vol 3 02-graphql-pipeline.mdGate #4 → SESSION_INVALID / SESSION_EXPIREDCANNOT_ACCESS / TOKEN_INVALID[ ]
G7Vol 5 หลายไฟล์12 / 16 endpointsEmployee 14 GET; รวม 17[ ]
G8Vol 0 02GET /api/hrPaySlipPOST[ ]
G9Vol 0/8DB dbHRMI_NBCdbHRMI_Center_NBC[ ]
G10Vol 6queries 95~137–138 gql[ ]
G11Vol 6components/user/ 5636[ ]
G12Vol 7pages 6664[ ]
G13Vol 0axios instances 1615[ ]
G14Vol 1 13-subsystems.mdaxios configs 29ไม่ตรง (15 axios + อื่น)[ ]
G15Vol 0 05-key-features.mdpaths vtrc-api/typeDefs/...ต้องมี api/src/[ ]
G16Vol 0 glossarydbHr ใน connector.js:8-48dbHr อยู่ cu-central[ ]
G17Vol 8 identityEmpID = business codePK UUID-ish; business = EmpCode[ ]
G18Vol 8sourceDb = 'vtrc'|'nbc'ค่าจริงเป็น HRMI SourceDB strings[ ]
G19Vol 8AuthSession vs LoginSession สลับบทบาทLoginSession = login gate; AuthSession = mobile RSA bypass[ ]
G20Vol 10 02-auth-headers.mdkey.apiKey; sess:<sid>value.key; sess:{uid}_{sid}[ ]
G21Vol 10 09-forward-proxy.mdapiKey default + TokenExpiredError instanceofconditional header; errorCode == "TokenExpiredError"[ ]
G22Vol 10 07-error-model.mdbackoffice checkError maps TOKEN_*แมปข้อความอังกฤษ→ไทยเท่านั้น[ ]
G23Vol 4 01-repository-map.mdlib/ = 24 subdirs31[ ]
G24Vol 12 composeทั้ง stack network_mode: hostเฉพาะ nginx[ ]
G25Vol 12 Redis curate-limit + session:*prefixes อื่น; key = sess:{uid}_{sid}[ ]
G26Vol 13 deploypull GCR tag แล้ว compose up โดยตรงcompose image ชื่อ local ไม่ตรง tag[ ]
G27Vol 2 OTP“OTP TTL 15 นาที (default 3)”default 3 เท่านั้น[ ]
G28Vol 14 LEG-10/29html-pdf / firebase ใน cu-centralมีใน vtrc-api เป็นหลัก[ ]

Theme H — Docs ขัด docs (Volume 14 ↔ 16)

#ปัญหาAction
H1volume-16/.../04-debt-id-index.md สลับ SEC/LEG IDs กับ Vol 14[ ] ทำให้ A.4 ตรง Vol 14 ทีละ ID (อย่าแก้ Vol 14 ให้ตาม A.4 ถ้า Vol 14 เป็นต้นทางของ Wave tasks)
H2นับ Critical/High ไม่ตรงระหว่าง Vol 14 index, scorecard, A.4[ ] reconcile ตัวเลขเดียว
H306-environment-variables.md ชื่อตัวแปรผิด (DB_USER vs DB_USERNAME, PORT vs APP_PORT, Nest DB_NAME vs doc DB_DATABASE)[ ] regenerate จาก .env.example + configuration.ts จริง
H4A.2 acronyms: VTRC = “Volunteer…” vs A.1 glossary[ ] เลือกคำนิยามเดียว
H5A.1 glossary ขาด END_POINT_CENTRALIZE, ports, db/db2[ ] เพิ่ม entries จาก Canonical Truths
H6A.3 file-index: vtrc-web/webpack.config.js[ ] → vtrc-web/config/webpack.config.js
H7A.3 / env: config.js:488-518 ระบุเป็น KBANK[ ] เป็น statusKcash ไม่ใช่ KBANK_*
H8Vol 15 target Node 20 LTS (EOL เม.ย. 2026 ตามวันที่คู่มือ)[ ] อัปเดต target LTS ที่ยัง support
H9Vol 14 scorecard Critical set ไม่รวม SEC-2/5 ตาม 01-critical[ ] ทำให้ตรง

P2 — citation / LOC drift (แก้เมื่อแตะไฟล์นั้น)

ตาม Errata E-06 — line numbers เลื่อนได้ตามเวลา แก้เมื่อแก้ไขบทนั้นอยู่แล้ว:

พื้นที่ตัวอย่าง drift
routes.js execSyncdoc: 73,120… → จริง: 75,122,229,279,357
Vol 6 LOC (Leave Form, Login, Slip…)คลาด ±1–40 บรรทัด
Vol 2 docker-compose.yml:35 nginx hostจริงบรรทัด 34
Vol 2 graphql.js:90 เป็นหลักฐาน apiKeysetup อยู่ :17-22
Vol 10 auth route line rangessignInByPass ไม่ได้อยู่ที่บรรทัดที่อ้าง
Vol 5 NestJS route order ในตารางลำดับ method ไม่ตรง controller

กฎ: อย่า cite ช่วงบรรทัดยาวโดยไม่เปิดไฟล์ยืนยันในวันเดียวกับที่เขียน


สิ่งที่ตรวจแล้วว่าถูกต้อง (อย่า “แก้” กลับ)

เพื่อกัน regression ตอนแก้:

  • checkLinkURL() mapping (prod / uat / localhost) ใน Vol 6 และตารางใน Vol 7
  • AntD v3 (web) / v4 (backoffice); React 16; Apollo Client v2 / react-apollo 3.x
  • Dual MariaDB db / db2 ใน vtrc-api
  • @auth(accessRole, accessMenu) บน vtrc-api
  • NestJS global JwtAuthGuard + @Public() บนทุก route ปัจจุบัน
  • TypeORM + MSSQL dual connections ใน NestJS
  • GraphQL path default /api/graphql; UAT path ผ่าน env / origin branching
  • Changelog 2026-07-10 เรื่อง END_POINT_CENTRALIZE → cu-central (ทิศทางถูกต้อง — แต่พอร์ต 8082 ยังต้อง qualify)

Checklist งานแก้ไข (ลำดับแนะนำ)

  1. [ ] อัปเดต Canonical Truths section ใน Vol 0 + Vol 2 ให้เป็นหน้าเดียวที่ทุก volume อ้างอิง (โดยเฉพาะพอร์ต + NestJS role)
  2. [ ] Sweep Theme A ทั้ง repo docs — ค้นหา centralize-api (NestJS) ในบริบท live path แล้วแก้
  3. [ ] Sweep Theme C — ค้นหา กรุงเทพ + KBANK ใน docs
  4. [ ] Rewrite volume-11/.../03-welfare-hospital.md statusKcash จาก config.js:488-518
  5. [ ] Rewrite volume-07/.../03-apollo-checklinkurl.md จาก vtrc-rc-backoffice/src/config/apollo.js
  6. [ ] Rewrite Redis/OTP ใน Vol 12.7 + Vol 13.6/7/8
  7. [ ] Reconcile A.4 debt IDs ↔ Vol 14; regenerate A.6 env appendix จาก .env.example
  8. [ ] เพิ่ม Errata ใหม่ ใน 08-changelog-errata.md (ดูด้านล่าง)
  9. [ ] อัปเดต Changelog วันที่แก้จริง

Errata ที่ควรเพิ่มใน A.8 (ยังไม่มีใน E-01…E-08)

คัดลอกไปใส่ volume-17-appendices/08-changelog-errata.md Part 2:

E-09 — NestJS ยังถูกอ้างเป็น live bridge ในหลาย volume

ที่มา: Audit 2026-07-11
รายลัพธ์: Vol 0, 1, 4, 8, 9, 12, 15 ยังมี diagram/prose ที่ให้ vtrc-api เรียก NestJS สำหรับ slip/auth/HR ทั้งที่ live path คือ cu-central-api
ผลกระทบ: วิศวกรใหม่ debug ผิด service
แนวทางแก้: Theme A ในไฟล์นี้

E-10 — พอร์ต cu-central สับสน (8080 / 8082 / 9000)

ที่มา: Audit 2026-07-11
รายลัพธ์: คู่มือมักระบุ 8082 เป็น default ของ cu-central; โค้ด default คือ 8080; Dockerfile EXPOSE 9000
ผลกระทบ: local setup / health check ผิดพอร์ต
แนวทางแก้: Theme B + Canonical Truths

E-11 — KBANK ถูกเขียนว่าธนาคารกรุงเทพ

ที่มา: Vol 0, 1
รายลัพธ์: ผิด — เป็นกสิกรไทย
แนวทางแก้: Theme C

E-12 — OTP / Redis ของ vtrc-api ถูกอธิบายเกินจริง

ที่มา: Vol 12, 13
รายลัพธ์: OTP อยู่ MariaDB ของ cu-central; vtrc Redis ส่วนใหญ่ vestigial
แนวทางแก้: Theme D

E-13 — statusKcash ใน Vol 11 ไม่ตรง config.js

ที่มา: Vol 11.3
รายลัพธ์: ตาราง id/label ในเอกสารไม่ตรงโค้ด (SUCCESS = '9')
แนวทางแก้: Theme E

E-14 — Volume 7 Apollo/Docker docs ไม่ตรงโค้ด

ที่มา: Vol 7.2–7.4
รายลัพธ์: อธิบาย API/functions/Dockerfile ที่ไม่มีใน repo
แนวทางแก้: Theme F

E-15 — A.4 Debt ID index ไม่ตรง Vol 14

ที่มา: Vol 16 A.4
รายลัพธ์: SEC/LEG ID สลับ — อ้างอิง Wave 15 อาจชี้ผิดรายการ
แนวทางแก้: Theme H1


วิธี verify หลังแก้

สำหรับแต่ละ claim ที่แก้:

bash
# ตัวอย่าง — อย่าเชื่อเอกสารโดยไม่เปิดไฟล์
# 1) เปิดไฟล์ที่อ้าง
# 2) ยืนยันด้วย grep/ค้นหาชื่อฟังก์ชัน ไม่ใช่แค่เลขบรรทัด
# 3) ถ้า claim เป็น count — นับจาก filesystem/โค้ดใหม่

เกณฑ์ผ่าน:

  • ไม่มี diagram ที่ลากลูกศร vtrc-api → NestJS centralize-api โดยไม่มีป้าย “unconfirmed”
  • ไม่มีประโยค “KBANK = กรุงเทพ”
  • ไม่มี runbook ที่บอกให้ KEYS otp:* บน vtrc-redis เพื่อหา OTP สมัครสมาชิก
  • ตาราง statusKcash ตรง config.js:488-518 ทีละแถว
  • A.4 debt IDs ตรง Vol 14 ทีละ ID

สถิติการตรวจ

รายการค่าประมาณ
ไฟล์ docs ที่อยู่ในขอบเขต~200 .md
Themes หลักที่พบ9 (A–I)
รายการ P0 ที่ต้องแก้~40+
รายการ P1~30+
Volumes ที่ถูกต้องเป็นส่วนใหญ่หลังแก้ 2026-07-102, 3 (ยกเว้นพอร์ต/count), 6 (ยกเว้น counts), 10 (ยกเว้น citations), 5 (ยกเว้น endpoint counts)
Volumes ที่ต้อง rewrite ส่วนใหญ่0 (บางบท), 7 (Apollo/Docker), 9 (auth flow), 11.3 (statusKcash), 16 (A.4/A.6)

หมายเหตุขอบเขต

  • ไม่ได้ รันระบบจริง / e2e เพื่อยืนยัน behavior ทุกข้อ — ยืนยันจาก static code + config ใน workspace
  • ไม่ได้ เทียบ docs/audit/ ทีละบรรทัดกับ volumes ใหม่ทั้งหมด (audit เป็นเอกสารเก่า — ดู index.md)
  • Modernization (Vol 15) ที่เป็นแผนอนาคตไม่ถือว่า “ผิด” ยกเว้น current-state claims
  • การวิเคราะห์นี้เป็น analysis only — ยังไม่ได้แก้เนื้อหา volume อื่น (ยกเว้นการสร้างไฟล์นี้)

Generated by /analysis docs↔code audit · 2026-07-11 `)