vtrc-ocr-api — Scorecard
Legend:
- Critical = active security/data-loss/availability risk
- High = correctness/maintainability hazard, real impact
- Medium = friction/hygiene, ยังไม่เป็นอันตราย
repo นี้ (branch: main) ยังไม่ประมวลผลข้อมูลจริง (mock ทั้งหมด) จึงไม่มีรายการ Critical จากการรั่วข้อมูล OCR — ความเสี่ยงหลักคือ hygiene, hardening ที่ยังไม่ทำ, และความเข้าใจผิดว่ามี OCR จริง
Scorecard table
| ID | Severity | คำอธิบาย | หลักฐาน (file:line) | การแก้ไข |
|---|---|---|---|---|
| QUAL-OCRAPI-01 | High | POST /api/ocr/process ไม่มี OCR engine จริง — คืน 'Sample OCR result text' / confidence: 0.95 เสมอ | services/ocr.service.js:26-34 | implement OCR จริง หรือคืน 501 Not Implemented ชัดเจน |
| QUAL-OCRAPI-02 | High | สถานะเก็บใน in-memory Map เท่านั้น — restart แล้ว record หาย / poll ได้ 404 | models/ocr.model.js:5; config/database.js stub ไม่ถูกเรียก | เชื่อม DB จริงก่อนเปิดใช้ production |
| SEC-OCRAPI-01 | Medium | cors() เปิดกว้าง; config.cors มีใน config แต่ไม่ได้ถูกส่งเข้า cors() | app.js:16 vs config/config.js:15-18 | app.use(cors(config.cors)) |
| SEC-OCRAPI-02 | Medium | ไม่มี auth บน OCR endpoints — ใครก็สร้าง/อ่าน history ใน memory ของ process ได้ (ผลกระทบจำกัดเพราะเป็น mock แต่จะอันตรายเมื่อมี OCR จริง) | app.js:14-19; ไม่มี guard ใน controllers | เพิ่ม API key/JWT ก่อนเปิด public |
| QUAL-OCRAPI-03 | Medium | error.middleware.js ไม่ถูก wire; app.js มี error handler คนละ shape | middleware/error.middleware.js:2-29, app.js:58-64 | ใช้ชุดเดียว |
| QUAL-OCRAPI-04 | Medium | utils/response.js ไม่ถูกเรียกจาก controller | utils/response.js; ocr.controller.js:8-11 | รวม format หรือลบ helper |
| QUAL-OCRAPI-05 | Medium | ไม่มี .env.example ทั้งที่ config อ่าน PORT, CORS_ORIGIN, MAX_IMAGE_SIZE, OCR_TIMEOUT | glob ไม่พบ; config.js:4-26 | เพิ่ม .env.example |
| QUAL-OCRAPI-06 | Medium | ocr.maxImageSize / ocr.timeout / supportedFormats ใน config ไม่ถูก enforce ใน validation หรือ service | config.js:21-25 vs validation.middleware.js / ocr.service.js | ต่อค่า config เข้า validation จริง หรือลบค่าหลอก |
| OBS-OCRAPI-01 | Medium | health check ดูแค่ process metrics — จะ healthy เสมอแม้ยังไม่มี OCR จริง | health.service.js:1-24 | เมื่อมี dependency ให้ probe จริง |
| LEG-OCRAPI-01 | Medium | ไม่มี test — npm test exit 1 | package.json:9 | เพิ่ม unit test validation + service mock behavior |
สิ่งที่ปลอดภัยโดยบริบทปัจจุบัน
| หัวข้อ | เหตุผล |
|---|---|
| ไม่มี PII persistence | Map ว่างหลัง restart; ไม่เขียน disk |
| ไม่มี secret ใน repo ที่ตรวจเจอ | ไม่มี .env tracked (ต่างจาก recruitment-web) |
| Surface เล็ก | 21 ไฟล์, endpoint น้อย |
สรุปเชิงภาพรวม
vtrc-ocr-api เป็น scaffold ที่ปลอดภัยในตัวเองถ้าไม่ถูกเข้าใจผิดว่าพร้อม production — ชื่อ repo และ Swagger บอกว่าเป็น OCR แต่ logic จริงคือ timer + string คงที่ ทีมควรเลือก: (1) implement OCR + persistence + auth หรือ (2) archive เป็น reference — ห้ามให้ frontend เรียกใช้จริงในสถานะปัจจุบัน
Cross-ref
- Tree / boot → 01-repository-map
- Mock flow → 02-core-pipeline
- Every endpoint → 03-endpoint-catalog