แผนงาน เฟส และความคืบหน้า¶
ภาพ ณ 20 สิงหาคม 2569 (🚀 S1 v0.29.0-mvp2 ทั้ง 9 เฟสขึ้น UAT · S2 v0.16.0 MVP2 ครบ 9/9 · รวม 18/19 เฟส S1+S2 อยู่บน UAT · 🆕 S8 ตั้งแผน MVP2 — 9 เฟส จาก SRS+FD+MOM 17 ส.ค. §9.2) · เหลือ 41 วันถึงเป้า KPI 30 ก.ย. 2569
หน้านี้รวม แผนงาน (plan) และเฟส (phase) ของทั้ง 9 ระบบไว้ที่เดียว พร้อมเปอร์เซ็นต์ ความคืบหน้า — สำหรับใช้วางแผนสาธิต จัดลำดับงาน และคุยกับกรมฯ
ที่มาของตัวเลขทุกตัวในหน้านี้ = อ่านจากของจริง ไม่ใช่จากรายงานสถานะ:
ไฟล์แผนใน docs/superpowers/plans/ ของแต่ละ repo · git log เทียบกับ tag ล่าสุด ·
ไฟล์ docker-compose.yaml ใน rlpd-pipeline/deploy/*/uat/
— ไม่ได้คัดลอกคอลัมน์ ✅/❌ จาก README ของแผน เพราะคอลัมน์พวกนั้นเป็นภาพวันที่เขียนแผน
วิธีอ่านหน้านี้¶
บันไดสถานะ — "เสร็จ" มี 4 ขั้น ไม่ใช่ 2¶
ขั้นเหล่านี้สำคัญกว่าเปอร์เซ็นต์ เพราะงานที่ merge แล้วแต่ยังไม่ deploy กรมฯ เปิดดูไม่ได้
| ขั้น | สัญลักษณ์ | ความหมาย | กรมฯ เห็นไหม |
|---|---|---|---|
| 4 | 🟢 | ขึ้น UAT แล้ว — มี tag และ CD deploy ผ่าน | ✅ เห็น |
| 3 | 🔵 | merge เข้า develop แล้ว — ยังไม่ tag/deploy |
❌ ไม่เห็น |
| 2 | 🟡 | โค้ดเสร็จบน feature branch — ยังไม่ merge | ❌ ไม่เห็น |
| 1 | ⚪ | ยังไม่เริ่ม | ❌ |
| — | ⛔ | บล็อก — รอคำตอบกรมฯ หรือรอระบบอื่น ไม่ใช่ทำไม่ทัน | ❌ |
กติกา Tag = Deploy
ทุก repo ตั้ง CI ให้ push: tags: ['*'] → build → deploy UAT ทันที ดังนั้นการที่งานอยู่
ขั้น 🔵 ไม่ใช่ความบกพร่อง แต่เป็นการรอให้เจ้าของงานสั่ง release — และเป็นเหตุผลที่หน้านี้
แยกคอลัมน์ "เขียนเสร็จ" กับ "ขึ้น UAT" ออกจากกันเสมอ
กติกาการคิด %¶
- ทุก % ต้องบอกตัวหาร — เขียนเป็น
x/yเสมอ ไม่มี % ลอย ๆ - MVP1 ตัวหาร = จำนวนเมนูเป้าหมายตาม เช็กลิสต์ MVP1 (M3) รวม 31 เมนู (เดิม 32 — เมนูอนุมัติเนื้อหาของ S8 ตัดออก 20 ส.ค.)
- MVP2 ตัวหาร = จำนวนเฟสในแผน MVP2 ของระบบนั้น (มีแค่ S1 กับ S2 ที่มีแผน MVP2 เป็นทางการ)
- ราย REQ ตัวหาร = จำนวน REQ ใน SRS ของระบบนั้น
- ระบบที่ยังไม่มีหลักฐานพอ → เขียน "ยังไม่ประเมิน" ไม่ใส่ตัวเลข
ตัวเลขที่หน้านี้ปฏิเสธจะเดา¶
- MVP1 ของ S5 / S6 / S7 (รวม 14 เมนู) — สามระบบนี้เป็น ระบบเดิมที่ต้องปรับปรุง งานที่ commit จริงในระยะ 2 คือ SSO + RBAC กลาง + CI/CD เท่านั้น ยังไม่มี commit ที่แตะเมนูเป้าหมายทั้ง 14 รายการ · หน้านี้จึงนับเป็น 0 และต้องให้กรมฯ ตัดสินว่า จอเดิมจากระยะ 1 ที่ยังใช้งานได้อยู่ นับเป็นการส่งมอบ MVP1 หรือไม่ — คำตอบนี้ทำให้ ยอดรวมทั้งโครงการขยับจาก 52% ไปได้ถึง ~97%
- ผลการเดินจอจริง (walkthrough) — หลายระบบ "ขึ้น UAT แล้ว" แต่ยังไม่มีบันทึกว่ามีคน เดินจอครบทุกหน้า หน้านี้แยกเป็นคอลัมน์ต่างหาก ไม่รวมเข้ากับ %
- ความคืบหน้าเป็น % ของงวดสัญญา M1–M4 — งวดงานวัดจากเอกสารส่งมอบ ไม่ใช่จำนวนเมนู การแปลงเป็น % จะได้ตัวเลขที่ไม่มีใครป้องกันได้
1. ภาพรวมทั้งโครงการ¶
1.1 งวดสัญญา¶
| งวด | วัน | ส่งมอบ | สถานะ |
|---|---|---|---|
| M1 | 45 | SRS, สถาปัตยกรรม, UI/UX | ✅ ส่งแล้ว |
| M2 | 90 | Source Code, Unit Test, Code Review | ✅ ส่งแล้ว |
| M3 | 240 | UAT + Go-live + คู่มือ + อบรม | 🔵 กำลังดำเนินการ — MVP1 ส่ง 6 ส.ค. 69 ผ่านไปแล้ว, MVP2 คือของที่กำลังทำอยู่ |
| M4 | 270 | VA Scan, Pentest, ปิดโครงการ | ⚪ ยังไม่เริ่ม (S1 กันไว้ที่ Phase 8 · S2 Phase 7 เตรียมพร้อมแล้ว: P01 ผ่าน + เอกสาร PDPA + cutover checklist — เหลือตัว VA Scan/Pentest เอง) |
เป้า KPI กรมฯ: ระบบหลักเปิดใช้จริงก่อน 30 กันยายน 2569 — เหลือ 42 วัน
1.2 ตารางรวม 9 ระบบ¶
| ระบบ | เวอร์ชันบน UAT | MVP1 (เมนู) | มีแผน MVP2 | MVP2 (เฟส) | ขั้นสูงสุดที่ไปถึง |
|---|---|---|---|---|---|
| S1 ให้คำปรึกษากฎหมาย (LCS) | v0.29.0-mvp2 |
3/3 · 100% | ✅ 10 เฟส | 9/10 บน UAT 🟢 | 🟢 MVP2 ปล่อยครบแล้ว เหลือ Phase 7 (ติดกรมฯ) + เดินจอ |
| S2 ยุติธรรมเชิงรุก (PJOS) | v0.16.0 |
3/3 · 100% | ✅ 9 เฟส | 9/9 อยู่บน UAT 🎉 | 🟢 MVP2 ปล่อยครบทุกเฟสแล้ว · เหลือเดินจอ + ลายเซ็น PDPA + VA Scan (M4) |
| S3 รายงานผล + หลักสูตร | v0.3.0 |
3/3 · 100% ⚠️ | ❌ ยังไม่มี | — (ใช้ระบบ G0/M1–M7/Phase C) | 🟢 ขึ้น UAT · ยังไม่มีบันทึกเดินจอ |
| S4 ไกล่เกลี่ยข้อพิพาท | v0.9.24 (8 ก.ย.) |
3/3 · 100% (+2 นอกเป้า) | ❌ ยังไม่มีเอกสารเฟส (แต่เดินงานต่อเนื่องถึง Phase E) | — | 🟢 ครบวงจรบน UAT: อบรม-สอบ-ใบรับรอง · ค่าตอบแทน+KTB · Workflow 7 ลำดับขั้น · พอร์ทัลสมาชิก/ศูนย์ · e2e 400+ checks |
| S5 ค่าตอบแทนทนาย 134/1 | v0.1.15 |
0/5 ⚠️ ดูข้อ 1 ข้างบน | ❌ ยังไม่มี | — | 🟢 SSO/RBAC ขึ้น UAT · เมนูยังไม่เริ่ม |
| S6 OCIPA | v0.1.0 |
0/3 ⚠️ | ❌ ยังไม่มี | — | 🟢 SSO ขึ้น UAT + login e2e ผ่าน · เมนูยังไม่เริ่ม |
| S7 คุ้มครองพยาน (WPS) | v0.1.11 |
0/6 ⚠️ | ❌ ยังไม่มี | — | 🟢 SSO/RBAC ขึ้น UAT · เมนูยังไม่เริ่ม |
| S8 เว็บไซต์กรมฯ | v0.5.1 |
2/2 ✅ (เมนูอนุมัติตัดออก 20 ส.ค.) | ✅ 9 เฟส (20 ส.ค.) | 7/9 บน UAT 🟢 + Phase 2 เริ่มแล้ว 🟡 (22 ส.ค. — template หลักแนวตั้ง 1/4 ขึ้น UAT; เหลือ ⛔B1/B2 + Phase 7→S9) | 🟢 v0.5.1 ขึ้น UAT · Release #1+#2 Done ก่อนกำหนด |
| S9 เว็บพอร์ทัล | v0.18.0 |
3/3 · 100% | ❌ ยังไม่มี | — | 🟢 ขึ้น UAT + e2e ผ่าน |
⚠️ = ตัวเลขมีเงื่อนไข อ่านหัวข้อรายระบบก่อนนำไปใช้
1.3 ความคืบหน้า MVP1 — 16/31 เมนู = 52%¶
| นับแบบ | ตัวเลข | หมายเหตุ |
|---|---|---|
| นับตามที่มีหลักฐาน commit ในระยะ 2 | 16/31 = 52% | S5/S6/S7 = 0 |
| ถ้ากรมฯ รับจอเดิมของ S5/S6/S7 ว่านับได้ | สูงสุด 30/31 = 97% | เหลือแค่ S8 อีก 1 เมนู (Content List) |
ข้อสรุปที่ควรถือ: ระบบที่ สร้างใหม่ (S1, S2, S3, S9 และ S4 ที่ปรับปรุงหนัก) ปิด MVP1 ครบทุกระบบ ส่วนที่เหลือคือระบบเดิมที่ยังไม่ได้เริ่มงานปรับปรุงจริง
1.4 ความคืบหน้า MVP2 — S1+S2: 18/19 อยู่บน UAT · S8 เพิ่งได้แผน (0/9)¶
ระบบที่มีแผน MVP2 เป็นทางการ: S1, S2 และ S8 (ตั้งแผน 20 ส.ค. 2569 — ดู §9.2)
| ระบบ | 🟢 UAT | 🔵 merged | 🟡 รอ merge | ⚪ ยังไม่เริ่ม | รวมเฟส |
|---|---|---|---|---|---|
| S1 | 9 | 0 | 0 | 1 | 10 |
| S2 | 9 | 0 | 0 | 0 | 9 |
| S8 | 0 | 2 | 1 | 6 | 9 |
| รวม | 18 | 2 | 1 | 7 | 28 |
ปลดล็อกแล้วครึ่งหนึ่ง — S2 ปล่อย MVP2 ชุดแรกขึ้น UAT เย็น 19 ส.ค. 2569
v0.11.0 พา Phase A/0/1/2 ของ S2 ขึ้น UAT พร้อมกัน 4 เฟส (apply V013→V014→V015 +
seed + seed matrix ครบตามลำดับ · npm run test:db 61 เทสเขียวกับฐานจริง)
20 ส.ค. (รอบดึก) — S2 ปล่อย v0.16.0: Phase 7 NFR + PDPA — MVP2 ครบ 9/9 เฟส 🎉
NFR-P01 ผ่านด้วยการยิงจริง (k6 100 ผู้ใช้พร้อมกัน 2 นาที: p95 57/296ms เกณฑ์ 3s · error 0%) · ปิดช่อง read-audit: การดาวน์โหลดไฟล์ทุกเส้นทางลง log แล้ว (ไฟล์คือ PII ดิบไม่ผ่าน masking — log ทั้ง full/masked ต่างจาก JSON) · เอกสาร PDPA พร้อมให้กรมฯ เซ็น 2 ฉบับ + รายงานเข้ารหัส + cutover checklist 10 ขั้น · ไม่มี migration — tag ได้ทันที
20 ส.ค. (รอบค่ำ) — S2 ปล่อย v0.15.0: Phase 6 แจ้งสิทธิ 24 ชม. + รายงานผล 15 วัน
ป้าย SLA "ทัน/ไม่ทัน" มาจากรายงานจริงแล้ว ไม่ใช่แค่นาฬิกา (V017 report_stage) ·
คิวแจ้งสิทธิเรียงตามเวลาที่เหลือ บันทึกรายงานแล้วเคสหลุดคิวเอง · จอ rights-inbox/
outreach-results เลิก mock ทั้งคู่ · รายงาน SLA ของ Phase 4 นับจากผลงานจริงตามไปด้วย
20 ส.ค. — S2 ปล่อย v0.14.0: Phase 5 นำเข้าเคสจากไฟล์ XLSX
"รอ template กรมฯ" ไม่ใช่บล็อกจริง — template เป็นฝั่งระบบ export เอง (sheet 2 = รหัส master จริง ณ เวลาดาวน์โหลด) · ตรวจทุกแถวก่อนบันทึกเสมอ ตาม MOM §4 · partial commit ระดับเคส · แถวใน DB เข้ารหัสทั้งก้อน (พิสูจน์กับฐานจริง) · commit ซ้ำได้ 409 ไม่ใช่เคสซ้ำ · ไม่มี migration/seed/matrix — ค่าตั้งต้น 3 ข้อ (500 แถว/partial/คอลัมน์=ฟอร์ม) รอกรมฯ ยืนยันก่อน go-live · แถมปิดรูแท็บ mock ที่หลุด gate ขึ้น UAT มาตั้งแต่ v0.9.0
20 ส.ค. — S2 ปล่อย v0.13.0: Phase 4 แดชบอร์ด + รายงาน 5 ตัว + Export
ผู้บริหารเปิดแดชบอร์ดเห็นตัวเลขจริง · รายงานครบ 5 ตามสัญญา SRS (REQ-010) · export
.xlsx/.csv + export รายเคสแบบ mask ตามสิทธิ์ + pii log (REQ-011) · ตัวกรองสืบค้น
ครบ FD ตาราง 9 (REQ-009) · NFR-P02 วัดจริง 144 ms (เกณฑ์ 10 วิ) · ไม่มี migration
รอบดึกวันเดียวกัน — S2 ปล่อยต่อทันที v0.12.0: Phase 3 ส่งต่อ + Case Reference
เคสส่งต่อไป S1/S4/สชง./หน่วยงานอื่นได้จริง (manual forward ตาม MOM #22) เก็บเลขอ้างอิง
ปลายทาง แนบหนังสือนำส่ง — V016 apply + matrix RLPD012 → 210 rows + test:db 68 เทสเขียว
รอบดึกวันเดียวกัน — S1 merge Phase 4/5/6 ครบ ของเตรียมก่อน tag ครบแล้ว
.155 กลับมาตอบจากเครื่องพัฒนา → DB spec ที่ค้าง 3 ชุดผ่านครบ (reports 18/18 ·
revoke 10/10 · self-service 14/14) → merge เข้า develop ทั้ง 3 เฟส (b1240f3)
· V015–V019 apply บน .155 ครบแล้ว (ตรวจจากฐานจริงทีละตัว) · LCS_PAY_* ลง
compose แล้ว (rlpd-pipeline@9be379b) — SCRUM-155/156 ปิดก่อนกำหนด
🚀 20 ส.ค. ตี 0 ครึ่ง — S1 ปล่อย v0.29.0-mvp2: MVP2 ทั้ง 9 เฟสขึ้น UAT รอบเดียว
เจ้าของงานสั่งปล่อย → tag จาก c8e9cea → CI + CD เขียว → verify บน UAT จริง:
หน้าเว็บ 200 + bundle ใหม่ · CSP Report-Only + nosniff + Referrer-Policy ออกครบ
(NFR S07) · API ตอบ error envelope ถูก format · SCRUM-144–151 + 153 + 154 ปิด Done ครบ
deploy ไม่เท่ากับยอมรับ
MVP2 ที่ขึ้น UAT แล้วทั้ง S1 (9 เฟส) และ S2 ยังไม่มีใครเดินจอสักเฟส — งานถัดไปคือ เดินจอเก็บหลักฐานรายเฟส (จอที่ปรึกษาใช้ test.004/115/116) + เก็บ CSP violation ก่อนสลับ enforce + ยิง k6 (P01–P05) · เหลือ 41 วันถึง go-live
2. S1 — ระบบให้คำปรึกษาทางกฎหมาย (LCS)¶
repo: lcs · UAT: v0.28.2-mvp1 · branch: develop · แผน: docs/superpowers/plans/2026-08-18-s1-mvp2/
นิยาม MVP2 ของ S1 = "ปิด REQ ที่เหลือใน SRS ให้ใช้งานได้จริงทัน go-live" (ทีมตั้งเอง เพราะกรมฯ ยังไม่ส่งเช็กลิสต์ MVP2) · ลำดับความสำคัญเมื่อขัดกัน: MOM 14 ส.ค. > SRS/FD > mockup
2.1 MVP1 — 3/3 เมนู ✅ อยู่บน UAT¶
บันทึกคำขอ · มอบหมายที่ปรึกษา · บันทึกผล + QA — ครบและ deploy แล้ว
2.2 แผน MVP2 — 10 เฟส¶
| เฟส | เรื่อง | REQ | migration | สถานะ | ขั้น |
|---|---|---|---|---|---|
| A | แก้ตาม MOM 14 ส.ค. (21 ข้อ) | — | V015 | ทำแล้ว 18/21 ข้อ · ค้าง 3 ข้อเพราะรอกรมฯ ตัดสิน (ข้อ 1 ชื่อเมนู, ข้อ 16 เกณฑ์ QA, ข้อ 18 ปุ่ม Delegation → อยู่ Phase 7) | 🟢 |
| 0 | ผูกบัญชี Keycloak ↔ ทะเบียนที่ปรึกษา | 002/009/010 enabler | V016 | ทำครบ · unit 7 + DB 13 เคสยิง .155 จริง · เส้นทางหลักคือผูกด้วยมือ ไม่ใช่ self-heal (ฐานจริงมี citizen_id_bidx แค่ 12/52 แถว) |
🟢 |
| 1 | นำเข้าทะเบียนที่ปรึกษาจากไฟล์ | REQ-003 | ไม่มี | ทำครบ · unit 38 + DB 10 เคส · admin ไม่มีสิทธิ์ import — เดินจอต้องใช้ officer-legal | 🟢 |
| 2 | ตารางเวร / ยกเลิกเวร / สถิติ | REQ-009 | V017 | ทำแล้ว · DB 19 เคส · ⛔ POST /duty-rosters/import ไม่ได้ทำ รอกรมฯ ยืนยันคอลัมน์ Template |
🟢 |
| 3 | ค่าตอบแทน 8 ชม./วัน = 1,000 บ. | REQ-010 | V018 | ทำแล้ว · งวด draft→confirmed แช่ตัวเลข · ⛔ ที่มาของ "ชั่วโมง" ยังรอกรมฯ สลับได้ด้วย LCS_PAY_BASIS |
🟢 |
| 4 | Dashboard + รายงาน 8 ตัว + Export | REQ-011 | ไม่มี | ทำครบ · DB spec 18/18 ผ่านบน .155 (รอบแรกแดง 1 เคส = เทสผิดไม่ใช่โค้ดผิด แก้แล้ว + เพิ่มเคส deny-by-default) |
🟢 |
| 5 | เพิกถอนสิทธิที่ปรึกษา | REQ-004 | ไม่มี | ทำครบ · DB 10 เคส · "ไม่มีชื่อในรอบนำเข้าใหม่" = รายชื่อให้กดทีละคน ไม่ใช่เพิกถอนอัตโนมัติ · cron ปิดหลัง LCS_AUTO_REVOKE |
🟢 |
| 6 | ที่ปรึกษาดูสถานะตัวเอง (self-service) | REQ-002 | V019 | ทำครบ · DB 14 เคส · จอ my-profile + แก้ข้อมูลติดต่อ (allowlist) · resource ใหม่ my-profile seed ใน matrix แล้ว |
🟢 |
| 7 | Escalation → OCIPA | REQ-008 | — | ยังไม่เริ่ม · ⛔ ติดสัญญา API ของ S6 | ⚪ |
| 8 | ปิดช่องว่าง NFR ก่อน M4 | NFR | — | งานโค้ดครบ (20 ส.ค. ตี 0): CSP RO verify header จริง · OpenAPI 95/95 (swagger plugin) · coverage 84.65% ≥ เกณฑ์ 70 (717 เทสเขียว) · responsive 7 จอ + viewport จริง · เหลือของนอกโค้ด: lockout รอกรมฯ / เทสเบราว์เซอร์มือ / k6 หลัง release / RTO-RPO ทีม infra | 🟢 |
MVP2 ของ S1: อยู่บน UAT 9/10 = 90% 🟢 — v0.29.0-mvp2 (20 ส.ค. ตี 0) จาก c8e9cea ·
V015–V019 apply ครบ · ตัวถัดไป V020 · เดินจอทุกเฟสยังค้าง (comment รายใบใน Jira)
2.3 ราย REQ (SRS มี 13 ข้อ)¶
| REQ | เรื่อง | บน UAT | เขียนเสร็จแล้ว |
|---|---|---|---|
| 001 ทะเบียน + อนุมัติที่ปรึกษา | ✅ | ✅ | |
| 002 ที่ปรึกษาดูสถานะตัวเอง | Phase 6 | ✅ | ✅ |
| 003 นำเข้าไฟล์ | Phase 1 | ✅ | ✅ |
| 004 เพิกถอนสิทธิ | Phase 5 | ✅ | ✅ |
| 005 จัดการสิทธิ + log | ✅ | ✅ | |
| 006 รับคำขอ + มอบหมาย | ✅ | ✅ | |
| 007 บันทึกผล + QA | ✅ | ✅ | |
| 008 Escalation → OCIPA | Phase 7 | ❌ | ❌ |
| 009 ตารางเวร | Phase 2 | ✅ | ✅ (เว้นนำเข้าไฟล์) |
| 010 ค่าตอบแทน | Phase 3 | ✅ | ✅ |
| 011 Dashboard + รายงาน | Phase 4 | ✅ | ✅ |
| 012 ประชาชนติดตามผล | ✅ | ✅ | |
| 013 Log / Audit Trail | ✅ | ✅ |
บน UAT 12/13 = 92% — เหลือ REQ-008 Escalation ตัวเดียว (ติดกรมฯ)
2.4 ของที่ค้างและต้องตัดสินใจ¶
| # | เรื่อง | ใครตัดสิน | บล็อกอะไร |
|---|---|---|---|
| 1 | ~~สั่ง release~~ ✅ v0.29.0-mvp2 ปล่อยแล้ว 20 ส.ค. → เหลือ เดินจอ MVP2 ทุกเฟสบน UAT (จอที่ปรึกษาใช้บัญชี test.004/115/116) + เก็บ CSP violation ก่อนสลับ enforce + ยิง k6 (P01–P05) |
เจ้าของงาน + ทีม | หลักฐานส่งมอบงวด M3/M4 |
| 2 | คอลัมน์ Template ตารางเวร | กรมฯ | นำเข้าไฟล์ตารางเวร (Phase 2) |
| 3 | "ชั่วโมง" ของค่าตอบแทนมาจากไหน | กรมฯ | ความถูกต้องของยอดเงิน (Phase 3) |
| 4 | สัญญา API ของ OCIPA | กรมฯ + ทีม S6 | Phase 7 ทั้งเฟส |
~~รัน DB spec Phase 4~~ ✅ 18/18 (19 ส.ค.) · ~~LCS_PAY_* ลง compose~~ ✅ rlpd-pipeline@9be379b
3. S2 — ระบบปฏิบัติการยุติธรรมเชิงรุก (PJOS)¶
repo: pjos · UAT: v0.16.0 (https://uat-pjos.rlpd.go.th) · branch: develop · แผน: docs/superpowers/plans/2026-08-19-s2-mvp2/
แก่นของ MVP2 = ครึ่งหลังของ TOR 7.12.2 ที่ MVP1 ยังไม่แตะเลย — ก่อน 19 ส.ค. 2569 เคสเดินได้แค่ รับเรื่อง → มอบหมาย → บันทึกผล · คำว่า "แผน" ไม่มีอยู่ในฐานข้อมูลเลย
v0.11.0 (19 ส.ค. 2569 เย็น) ปิดวงจรนี้ทั้งเส้น: จัดทำแผน 4 ด้าน → เสนอ → หัวหน้างานเห็นชอบ
→ ผอ. อนุมัติ พร้อมกระดิ่งแจ้งเตือนในระบบ · v0.12.0 (คืนเดียวกัน) ต่อปลายเส้นด้วย
ส่งต่อความช่วยเหลือ + เก็บ Case Reference ปลายทาง (REQ-008)
3.1 MVP1 — 3/3 เมนู ✅ อยู่บน UAT (เจ้าของงานนับเป็น 8/8 รายการย่อย)¶
3.2 แผน MVP2 — 9 เฟส¶
| เฟส | เรื่อง | REQ | migration | สถานะ | ขั้น |
|---|---|---|---|---|---|
| A | MOM 14 ส.ค. บนจอที่ใช้อยู่จริง (A1–A6) | 003/004/012 | V012 | ครบทั้ง 6 ข้อ · consent 3 สถานะ, เอกสารแยกรายบุคคล, ทะเบียน สน. แก้เองได้, เปลี่ยนผู้รับผิดชอบต้องผ่านผู้บริหาร, เทสพิสูจน์ province scope | 🟢 |
| 0 | Master Data มาตรฐาน 4 ด้าน + รายการย่อย | 005/012 | V013 | apply + seed แล้ว (4 ด้าน + placeholder 12 รายการ) · ⛔ รายการย่อยจริงยังรอกรมฯ | 🟢 |
| 1 | การจัดการรายกรณี (แผน 4 ด้าน + version) | REQ-005 | V014 | ก้อนใหญ่สุดของ MVP2 · backend + จอ + เมนู assistance-plan เปิดใช้บน UAT แล้ว |
🟢 |
| 2 | พิจารณาแผน + Approval Workflow | REQ-006 | V015 | สายอนุมัติ 2 ชั้น (หัวหน้างาน → ผอ.) + กระดิ่งแจ้งเตือนกลาง · เมนู plan-review เปิดแล้ว |
🟢 |
| 3 | ส่งต่อ + Case Reference | REQ-008 | V016 | manual forward + เลขอ้างอิงปลายทาง + เอกสารนำส่ง · เมนู referral เปิดแล้ว · ⚠️ คำถามกรมฯ (จุดส่งต่อ/ส่งซ้ำ/reference) ใช้ ค่าตั้งต้นที่เปลี่ยนได้ทาง env ไปก่อน ต้องยืนยันก่อน go-live |
🟢 |
| 4 | สืบค้น + Dashboard + Export | 009/010/011 | — | รายงาน 5 ตัว + แดชบอร์ด + export xlsx/csv + export รายเคส (mask ตามสิทธิ์ + pii log) · ไม่มี .pdf/.xls ฝั่ง server — waiver ตาม S1 (ปุ่มพิมพ์แทน) · NFR-P02 วัดจริง 144 ms | 🟢 |
| 5 | นำเข้า/ส่งออก Template XLSX | REQ-003 | — | template จากระบบ (หัวไทย+แถวเทคนิค+sheet รหัส master) → ตรวจทุกแถวก่อนบันทึก → commit เฉพาะเคสที่ผ่าน · แถวเข้ารหัส AES-GCM · idempotent · ⚠️ ค่าตั้งต้น 3 ข้อ (เพดาน 500 แถว/partial commit/คอลัมน์=ฟอร์ม 1:1) ยืนยันก่อน go-live | 🟢 |
| 6 | แจ้งสิทธิ 24 ชม. + รายงานผล 15 วัน | 001/002 | V017 | report_stage แยกรายงาน 2 ช่วง · ป้ายทัน/ไม่ทันจากรายงานจริง (เวลารายงาน = performed_at ถ้าไม่กรอกใช้เวลาบันทึก — เอียงทางสายกว่าจริง) · คิว ?slaStage= เรียง due ใกล้หมดก่อน · เมนู rights-inbox/outreach-results เปิดแล้ว (เลิก mock) · label เมนู → "คิวแจ้งสิทธิ 24 ชม." |
🟢 |
| 7 | NFR + PDPA + เช็กลิสต์ cutover prod | NFR | — | P01 ผ่านจริง (k6 100 VUs: p95 auth/me 57ms · cases 296ms — เกณฑ์ 3s · error 0%) · read-audit ครอบการดาวน์โหลดไฟล์ทุกเส้นทาง (ไฟล์ = PII ดิบ → log ทั้ง full/masked; ไฟล์คำขอ SC ลง audit_log) · เอกสาร PDPA 3 ฉบับ (docs/pdpa/ — 2 ฉบับรอกรมฯ เซ็น) + docs/cutover-production-checklist.md 10 ขั้น · coverage 88.5% (gate 70) |
🟢 |
MVP2 ของ S2: อยู่บน UAT 9/9 = 100% 🎉 (v0.16.0, 20 ส.ค.) · migration ล่าสุด V017 → ถัดไป V018 (Phase 4/5/7 ไม่มี migration)
ยังไม่มีใครเดินจอสักเฟส — ขึ้น UAT ไม่เท่ากับผู้ใช้ยอมรับ (ดู §3.6)
3.3 ราย REQ (SRS มี 12 ข้อ)¶
| REQ | เรื่อง | บน UAT | เขียนเสร็จแล้ว |
|---|---|---|---|
| 001 รับคำร้องจาก Service Center | ✅ คิวจริง + จอคิวแจ้งสิทธิ v0.15.0 |
✅ Phase 6 | |
| 002 รายงานผล 2 ช่วง SLA | ✅ v0.15.0 รายงาน 2 ช่วง + ป้ายทันจากรายงานจริง |
✅ Phase 6 | |
| 003 นำเข้า/บันทึกคำขอ | ✅ ครบทั้งฟอร์ม + นำเข้า XLSX v0.14.0 |
✅ Phase 5 | |
| 004 มอบหมาย Multi-assignee | ✅ | ✅ (+ผู้บริหารพิจารณา Phase A) | |
| 005 การจัดการรายกรณี 4 ด้าน | ✅ v0.11.0 |
✅ Phase 1 | |
| 006 พิจารณาแผน + Approval | ✅ v0.11.0 |
✅ Phase 2 | |
| 007 บันทึกผลตามแผน | ✅ | ✅ | |
| 008 ส่งต่อ + Case Reference | ✅ v0.12.0 |
✅ Phase 3 | |
| 009 สืบค้น Case Management | ✅ v0.13.0 ตัวกรองครบ FD ตาราง 9 |
✅ Phase 4 | |
| 010 Dashboard + รายงาน ≥5 | ✅ v0.13.0 |
✅ Phase 4 | |
| 011 ดาวน์โหลด/Export | ✅ v0.13.0 (xlsx/csv — pdf/xls เป็น waiver) |
✅ Phase 4 | |
| 012 Master Data + Audit + PDPA | 🟡 ทะเบียน 4 ด้านขึ้นแล้ว (รายการย่อยยัง placeholder) | ✅ Phase 0 |
บน UAT 11/12 = 92% · เขียนเสร็จแล้ว 12/12 (012 ยังรอรายการย่อยจริงจากกรมฯ)
3.4 ของที่ต้องถามกรมฯ ก่อน (บล็อกงานจริง)¶
- รายการย่อยตั้งต้นใต้ 4 ด้าน → บล็อก Phase 0/1 · บน UAT ตอนนี้เป็น placeholder 12 รายการ ที่ทีมทำขึ้นเพื่อให้จอเดินได้ — ยังไม่ใช่ของกรมฯ และ production ต้องได้ของจริงก่อนเปิดใช้
- จุดส่งต่อ สชง. + ส่งซ้ำได้ไหม + เลข reference เดียวหรือแยก → Phase 3 ขึ้น UAT แล้วด้วยค่าตั้งต้น: ด่านขั้น = มีผล ≥1 หรือแผนอนุมัติ (
PJOS_REFERRAL_MIN_STAGEปิดได้โดยไม่ build ใหม่) · ส่งซ้ำได้แต่จอเตือนก่อน · reference แยกต่อระบบ — กรมฯ ต้องยืนยันก่อน go-live · มาตรฐานเลขเคสกลางที่เจ้าของงานกำหนดแล้ว (19 ส.ค.) อยู่ที่หน้า มาตรฐานเลขเคส —remote_refเป็น free text รองรับได้เลย - สัญญา API ของ OCIPA (endpoint สน. + ประเภทความช่วยเหลือ) → บล็อก Phase A ทางเลือก A
- Executive อนุมัติการเปลี่ยนผู้รับมอบหมายทุกกรณีหรือเฉพาะหลังเริ่มงาน
- Template XLSX ของคำขอ → Phase 5 ขึ้น UAT แล้วด้วยค่าตั้งต้น: template ฝั่งระบบ export เอง · เพดาน 500 แถว (
PJOS_IMPORT_MAX_ROWSเปลี่ยนได้โดยไม่ build) · ผิดบางแถว รับเฉพาะเคสที่ทุกแถวถูก (แถวผิดดาวน์โหลดกลับไปแก้ได้) · คอลัมน์ = ฟอร์ม /case-intake 1:1 — กรมฯ ต้องยืนยันก่อน go-live โดยเฉพาะคอลัมน์ที่เปลี่ยนทีหลังแก้ยาก - นโยบาย Masking PII — ควรให้กรมฯ เซ็นรับรองก่อน go-live
- "เรื่อง" ต่างจาก "รายเคส" อย่างไรในรายงาน — Phase 4 ขึ้น UAT ด้วยนิยาม เรื่อง = 1 เคส · ราย = 1 ผู้เสียหาย พิมพ์นิยามกำกับทุกจอ/หัวไฟล์ส่งออก — กรมฯ ต้องยืนยันก่อน go-live (ตีความต่างก็เปลี่ยน query ได้โดยโครงไม่พัง)
- แผนที่ผู้เสียหาย "ไม่ต้องการทั้ง 4 ด้าน" จะจบวงจรอย่างไร (โผล่ตอนทำ Phase 2) — คิวพิจารณากรองแผนแบบนี้ออก ⇒ เวอร์ชันค้างที่
submittedตลอดไป · สามทางที่เสนอ (auto-approve / คิวรับทราบของหัวหน้างาน / สถานะใหม่) ให้ความหมายเชิงหลักฐานต่างกันคนละแบบ จึงไม่เดาเอง
3.5 ลำดับบังคับก่อน tag ของ S2 — ✅ ทำครบแล้ว (19 ส.ค. 2569 เย็น)¶
ทำครบ 6 ขั้นตามลำดับ แล้วจึง tag v0.11.0
เมนู assistance-plan (Phase 1) และ plan-review (Phase 2) ถูกเปิดใน phase gate
ให้ผู้ใช้เห็นแล้วในโค้ด ⇒ tag ก่อนทำครบ 5 ขั้นแรก = ผู้ใช้กดเมนูแล้วเจอ error ทันที
ทั้งสองเมนู และการลบ tag ทิ้งไม่ได้ทำให้ระบบกลับไปเป็นเหมือนเดิม
- ✅ apply
V013— ทะเบียนมาตรฐาน 4 ด้าน (ได้ 4 แถว) - ✅ apply
V014— แผนรายกรณี + เวอร์ชันแผน - ✅ apply
V015— ความเห็นของผู้พิจารณา (append-only) + กระดิ่งแจ้งเตือนกลาง - ✅ รัน
npm run db:seed— ไม่มีอะไรรันให้อัตโนมัติ ไม่อยู่ใน Dockerfile และไม่อยู่ใน CI ลืมขั้นนี้แล้วจอจะเปิดมาว่างเปล่าโดยไม่มี error ให้เห็น (ได้plan_area_item12 แถว) - ✅ seed เมทริกซ์สิทธิ์กลางของ PJOS — RLPD012 205 → 208 rows
- ✅ tag
v0.11.0→ CI build → CD deploy สำเร็จ
ผลตรวจหลัง deploy: PJOS 17 → 25 ตาราง · npm run test:db 13 suite / 61 เทสเขียว
กับฐานจริง (รวมข้อที่ fake DB ตอบแทนไม่ได้: หัวหน้างานต่างจังหวัดไม่เห็นแผนในคิว) ·
endpoint ใหม่ตอบ 401 ไม่ใช่ 404 = มี route จริงและมีด่านกั้น
v0.12.0 (Phase 3) ปล่อยตามในคืนเดียวกัน — ลำดับสั้นกว่าเพราะไม่มี seed ข้อมูล
- ✅ apply
V016(+ ซ้อม rollback no-op จริง · apply ซ้ำพิสูจน์ idempotent) - ✅ seed เมทริกซ์เพิ่ม
referral:editให้ officer 2 role — RLPD012 208 → 210 rows (dry-run diff ตรง +2 เป๊ะ ระบบอื่นไม่ถูกแตะ) - ✅ tag
v0.12.0→ CI → CD → smoke · ตามด้วยv0.12.1hotfix ภายในชั่วโมง — เดินจอครั้งแรกเจอจอขาวทั้งจอ (renderprovinceที่เป็น object ตรง ๆ = React #31) ผลตรวจ:npm run test:db14 suite / 68 เทสเขียวกับฐานจริง (รวม CHECK/CASCADE ของ V016)
v0.13.0 (Phase 4) — ปล่อยแบบไม่มีขั้นเตรียมเลย (20 ส.ค.)
โมดูลรายงานอ่านอย่างเดียว: ไม่มี migration · ไม่มี seed · ไม่แก้ matrix
(dashboard:view มีทุก role อยู่แล้ว · reports/reports-export เป็นของ supervisor/
executive/admin ตาม mockup) ⇒ push + tag จบ · ผลตรวจ: npm test 51 suite /
884 เทสเขียว · db spec raw SQL กับ .155 จริง +5 · NFR-P02 ทั้งชุด 144 ms
v0.15.0 (Phase 6) — กลับมามีขั้นเตรียมก่อน tag: V017 + seed label (20 ส.ค.)
ลำดับที่ทำจริง: apply V017 (report_stage บน case_result — ซ้อม re-run +
rollback no-op บน .155) → seed matrix (label rights-inbox → "คิวแจ้งสิทธิ
24 ชม." — permissions 210 แถวเท่าเดิม) → tag · กับดักที่เจอ: CHECK/INDEX ที่อ้าง
คอลัมน์ที่เพิ่ง ADD ต้องห่อ EXEC('...') (กับดักเดียวกับ V012) · seed ต้องรันด้วย
ts-node --transpile-only · ผลตรวจ: npm test 53 suite / 944 เทสเขียว ·
db spec ใหม่ 4 ตัวกับ .155 (met/breached/overdue จากรายงานจริงบน SQL จริง)
v0.14.0 (Phase 5) — ปล่อยแบบไม่มีขั้นเตรียมเช่นกัน (20 ส.ค.)
ตาราง import_batch/import_batch_row มีตั้งแต่ V003 (ถูกใช้จริงครั้งแรก) ·
case-intake:import seed ใน matrix มาแต่แรก ⇒ ไม่มี migration · ไม่มี seed ·
ไม่แก้ matrix · ผลตรวจ: npm test 53 suite / 923 เทสเขียว · db spec 4 ตัวกับ
.155 จริง (อ่านคอลัมน์ raw ตรง ๆ ยืนยันเข้ารหัส + commit ซ้ำไม่เกิดเคสซ้ำ)
บทเรียนที่ต้องทำซ้ำตอน cutover production
ลำดับ 6 ขั้นนี้ ต้องทำซ้ำทั้งชุดบน production — และเพิ่มอีก 2 ข้อที่ UAT ผ่านมาได้
เพราะมีอยู่แล้ว: รายการย่อยจริงจากกรมฯ (ไม่ใช่ placeholder) และ client role
executive บน client pjos ต้องมีคนถืออยู่จริงใน Keycloak — ไม่งั้นสายอนุมัติชั้น ผอ.
จะไม่มีใครได้รับแจ้งเตือน โดยระบบไม่ฟ้องอะไรเลย
3.6 สิ่งที่ยังไม่ได้ทำ ทั้งที่ขึ้น UAT แล้ว¶
ยังไม่มีใครเดินจอ MVP2 ของ S2 เลยสักเฟส — สิ่งที่พิสูจน์แล้วคือ "ระบบทำงานถูกตามที่เขียนไว้" (เทสกับฐานจริง + smoke test หลัง deploy) ไม่ใช่ "ผู้ใช้ทำงานได้จริงและยอมรับ"
สิ่งที่ต้องเน้นตอนเดินจอ เพราะเป็นจุดที่ ต่างจาก mockup ที่กรมฯ เคยเห็น:
- หัวหน้างานไม่มีปุ่ม "ยุติเรื่อง" — mockup มีให้ แต่ SRS REQ-PJO-006 สงวนไว้ที่ ผอ.
- คนเดียวกันอนุมัติสองชั้นไม่ได้ และ ผู้จัดทำแผนพิจารณาแผนตัวเองไม่ได้ — ถ้ากรมฯ ทำงานจริงด้วยคนคนเดียวถือสองบทบาท ต้องรู้ตั้งแต่ตอนเดินจอ ไม่ใช่ตอนใช้จริง
- แจ้งเตือนกรองตามจังหวัดไม่ได้ — หัวหน้างานต่างจังหวัดจะได้รับกระดิ่งด้วย (ข้อความ ไม่มีเลขที่เคส/ชื่อผู้เสียหาย และกดเข้าไปคิวจะว่าง) ถ้ากรมฯ รับไม่ได้ต้องเปิดงานเพิ่ม
- checklist การพิจารณา 4 ข้อ ใน mockup ถูกตัดออก — ไม่มีที่มาใน SRS/FD และไม่มีที่เก็บในฐาน
- (Phase 7) ตอนเดินจอต้องพกเอกสาร PDPA ไปขอลายเซ็น 2 ฉบับ —
docs/pdpa/role-field-matrix.md(ใครเห็นอะไร — ค่าที่ใช้อยู่มาจากตารางเจ้าของงาน 13 ส.ค. ไม่ใช่ SRS จึงต้องมีลายเซ็น) และdocs/pdpa/audit-and-retention.md(ตัวเลข retention ยังเป็นข้อเสนอ — job ลบ log จะตั้งหลังกรมฯ อนุมัติเท่านั้น) · Phase 7 ไม่มีจอใหม่ให้เดิน - จอส่งต่อไม่มีปุ่ม "ย้ำเตือน" — mockup มีให้ แต่ MVP2 เป็น manual forward ล้วน (MOM #22) ไม่มีปลายทางที่รับการเตือนจริง ปุ่มที่กดแล้วไม่เกิดอะไรคือคำสัญญาที่ผิด
- ส่งต่อได้ต่อเมื่อเคสมีผลการดำเนินงาน ≥ 1 หรือแผนที่ ผอ. อนุมัติแล้ว — เคสที่ยังไม่ถึงขั้น ระบบตอบ 409 พร้อมเหตุผล · เป็นค่าตั้งต้นที่กรมฯ ยังไม่ยืนยัน (ปิดด่านได้ทาง env)
- ยกเลิกการส่งต่อ = บันทึกสถานะ "ยกเลิก/ไม่สำเร็จ" + เหตุผล — ไม่มีปุ่มลบ ประวัติอยู่ครบ
- จอรายงานไม่มีปุ่ม .pdf / .xls — server ทำ
.xlsx+.csvและปุ่ม "พิมพ์ / บันทึก PDF" ใช้เบราว์เซอร์แทน (waiver เดียวกับที่ S1 ใช้อยู่แล้ว) ต้องแจ้งกรมฯ ตอนเดินจอ - ตัวเลขรายงานใช้นิยาม "เรื่อง = เคส · ราย = ผู้เสียหาย" — พิมพ์กำกับทุกจอ/ไฟล์ (§3.4 ข้อ 7 — รอกรมฯ ยืนยัน)
- กราฟแนวโน้มมีเส้น "รับเรื่อง" เส้นเดียว — ฐานไม่เก็บเวลาปิดเคส เส้น "ปิดเรื่อง" ที่คำนวณเองจะโกหกได้ จึงไม่วาด
- นำเข้าไฟล์รับเฉพาะ
.xlsx— mockup เขียน .xls/.csv แต่ template ที่ระบบ export คุม format เลขบัตร (กัน1.23E+12) ได้เฉพาะ .xlsx ต้องแจ้งกรมฯ ตอนเดินจอ - เลขบัตรในไฟล์นำเข้าถูกตรวจ checksum — พิมพ์ผิดจะไม่ผ่านตั้งแต่ขั้นตรวจ (ฟอร์มมือ ยังรับ 13 หลักตามเดิม) · เลขบัตรซ้ำในไฟล์เดียวกัน = ไม่ผ่าน
- แท็บ Mapping/Dedup หายไปจากจอรับเรื่อง — เป็น mock ที่หลุด gate ขึ้น UAT มาตั้งแต่ v0.9.0 ถูกปิดแล้วใน v0.14.0 (ไม่ใช่ฟีเจอร์ที่ถูกถอด — ยังไม่เคยมีจริง)
- จอแจ้งสิทธิไม่มีแท็บ "Intake 4 ช่องทาง + Dedup" / Source Matrix / อนุมัติรายงาน
2 รอบ / Rights Checklist แล้ว (
v0.15.0) — ทั้งหมดเป็นของยุค mockup: dedup คือ O-6 ที่ยังรอยืนยัน · intake จริงอยู่ที่คิว Service Center ใน /case-intake · การอนุมัติ 2 รอบ กับรายการสิทธิไม่มี requirement/backend จริง — เมนูเปลี่ยนชื่อเป็น "คิวแจ้งสิทธิ 24 ชม." ให้ตรงกับสิ่งที่จอทำ ต้องแจ้งกรมฯ ตอนเดินจอ - ป้ายทัน/ไม่ทันของ SLA เปลี่ยนนิยาม (
v0.15.0) — "ทัน" = มีรายงานช่วงนั้นก่อนกำหนดจริง ไม่ใช่แค่นาฬิกายังไม่หมด · รายงานที่ไม่กรอกเวลาลงพื้นที่จะใช้เวลาบันทึกแทน (เอียงทาง "สายกว่าจริง" — ไม่มีทางได้ป้ายทันฟรี)
4. S3 — ระบบรายงานผลและลงทะเบียนหลักสูตร¶
repo: ar-crs · UAT: v0.3.0 · branch: main
S3 ไม่ได้ใช้คำว่า MVP1/MVP2 แต่ใช้ระบบ milestone ของตัวเอง (G0 → M1–M7 → Phase C)
ซึ่งทุกก้อนมีเอกสาร verification + handover-to-PO ใน docs/delivery/ — ถือเป็นแผน/เฟสของ S3
4.1 เฟสของ S3 — 14 ก้อน ทำครบทั้งหมด¶
| ก้อน | เรื่อง | หลักฐาน |
|---|---|---|
| G0 | Bootstrap | g0-bootstrap-verification.md |
| M1 | Master Data | m1-master-data-verification.md |
| M2 | ลงทะเบียน | m2-registration-verification.md |
| M3 | รายงาน | m3-reporting-verification.md + handover |
| M4 | งบประมาณ / วุฒิบัตร / ศิษย์เก่า | m4-*-verification.md + handover |
| M5 | Web UI | m5-web-ui-verification.md + handover |
| M6 | ปิดช่องว่าง API | m6-api-gaps-verification.md + handover |
| M7a | Persistence (เลิกรันบน memory) | m7a-persistence-verification.md |
| M7b | Identity | m7b-identity-verification.md |
| M7c | Dashboard + Export + พ.ศ. | m7c-*-verification.md |
| M7d | Shared Database | m7d-shared-database-verification.md |
| M7e | ซ่อมข้อบกพร่อง SQL | m7e-sql-defects-verification.md |
| C1 | Keycloak Identity | phase-c1-keycloak-identity-verification.md |
| C2 | RBAC กลาง (39 permission ตรง mirror) | phase-c2-central-authorization-verification.md |
4.2 MVP1 — 3/3 เมนู มีจอครบและอยู่บน UAT ⚠️¶
จอทั้งสาม (equipment ครุภัณฑ์ · trainers วิทยากร · catalogue/courses หลักสูตรสำหรับประชาชน)
มีอยู่จริงใน frontend/src/screens/ และ deploy แล้ว — แต่ ยังไม่มีบันทึกการเดินจอรับรอง
จึงเป็น "3/3 มีของ" ไม่ใช่ "3/3 ตรวจรับแล้ว"
4.3 ของที่ค้าง¶
- ไม่มีแผน MVP2 — ยังไม่ได้ไล่ REQ-PRC ที่เหลือเทียบโค้ดแบบที่ S1/S2 ทำ
- OQ-01 ยังเปิด — กฎธุรกิจทั้งหมดเดินบน working baseline 5 ส.ค. 69 ที่ยังไม่ลงนาม ⇒ "ทุกกฎที่เขียนลงโค้ดคือข้อเสนอที่ทดสอบได้ ไม่ใช่ข้อกำหนดที่ตกลงกันแล้ว"
- คำถาม 7 ข้อ + คำตัดสิน D-01…D-09 ในเอกสาร handover M3 ยังรอกรมฯ ยืนยัน
4.4 ราย REQ (SRS มี 14 ข้อ — จาก docs/ai/TRACEABILITY_MATRIX.md)¶
| REQ-PRC | เรื่อง | มี API + เทส | หมายเหตุ |
|---|---|---|---|
| 001 | แดชบอร์ดเรียลไทม์ + แผนที่ประเทศไทย | 🟡 | แผนที่ยังไม่ย้ายมา |
| 002 | จัดการสมาชิก | ✅ | — |
| 003 | หลักสูตร/กิจกรรม/วิทยากร | ✅ | เหลือ toggle รายฟิลด์ (WO ยังเปิด) |
| 004 | งบประมาณ + Per-Head | ✅ | — |
| 005 | ครุภัณฑ์ | ✅ | — |
| 006 | รายงานเผยแพร่ความรู้ | 🟡 | ต้อง reconcile |
| 007 | แดชบอร์ดรายงาน + Export | 🟡 | คำถามหน่วยวัดยังรอเจ้าของงาน |
| 008 | ลงทะเบียนหลักสูตร | ✅ | DDL 015 (ฟอร์ม+ไฟล์แนบตาม FD) ยังไม่ apply |
| 009 | หน้าหลักสูตรสาธารณะ | ✅ | — |
| 010 | แจ้งเตือนอีเมล + retry log | ✅ | — |
| 011 | ค้นหา + ส่งออก (เจ้าหน้าที่) | 🟡 | M6 อ้างว่าปิดแล้ว ยังไม่ยืนยันในเมทริกซ์ |
| 012 | อบรม hybrid | ✅ | — |
| 013 | ทำเนียบรุ่น | ✅ | — |
| 014 | ประกาศนียบัตร + ลายน้ำสำเนา | ✅ | — |
ครบ 10/14 = 71% · บางส่วน 4 — แต่ตัวเลขที่เอกสารกลางบันทึกไว้อย่างเป็นทางการคือ 8/14 (ค้างก่อน M4 · ห้ามแก้โดยไม่มีหลักฐานรันใหม่) และ ยืนยัน end-to-end 0/14 · NFR มีหลักฐาน 0/22 — ช่องว่าง NFR นี้คือสิ่งที่จะโดนถามตอนตรวจงวด M4
5. S4 — ระบบไกล่เกลี่ยข้อพิพาท (eMediation)¶
repo: emediation · UAT: v0.9.24 (8 ก.ย. 2569 — เพิ่ม layout เอกสารจริง บัตร/หนังสือรับรอง V104 ·
แบบประเมินวิทยากรปรับแต่งได้ V103 · process-cost v2 สายอนุมัติ 7 ลำดับขั้น V101 · menu-IA v2 ยุบหมวดส่วนขยาย +
ถอดหน้าแจ้งเตือนหมดอายุ) · branch: develop
(บน develop ยังไม่ tag: ตำแหน่งหลักศูนย์เป็น master data V102 + ลิงก์/QR เข้าสอบ — มี seed-row remap
เป็นขั้นตอนตอน deploy ของงานนั้น)
5.1 MVP1 — 3/3 เมนู ✅ + 1 เมนูนอกเป้าหมาย¶
ยื่นคำร้อง · แต่งตั้งผู้ไกล่เกลี่ย · กำหนดนัดหมาย — ขึ้น UAT ครบ · เพิ่ม: สะพาน S9 → S4 รับเรื่องจากศูนย์บริการ (RLPD015) e2e ผ่านครบวงจรทั้งสองฝั่ง
5.2 แผนงานที่มีอยู่ (ไม่ได้จัดเป็นเฟสแบบ S1/S2)¶
srs-alignment · s4_phase0_execution_spec · REQ-MED-005 gap fill (design + plan) ·
assignment-mvp1-readiness · webportal-mediation-intake/v1v2-parity · public-request-geo-cascade ·
public-center-announcements + center-announcement-attachments · esign-signing-links ·
thaid-verification-links · altcha-anti-bot · fe-rearchitecture
5.3 ของที่ค้าง¶
- ไม่มีแผน MVP2 — ยังไม่มีเอกสารที่ไล่ REQ-MED ทั้งชุดเทียบโค้ดจริง
- ปัญหาสองเวอร์ชัน (v1 2563 PHP/CI + v2 2565 Node/Vue) ยังไม่ปิด — ความเสี่ยงอันดับ 1 ของโครงการ
ตาม
CLAUDE.md· v2 legacy มี 55K เคส เทียบ prod 12K
5.4 ราย REQ-MED หลักตาม TOR (8 ข้อ) — ประเมินจากของที่ deploy จริง¶
| REQ-MED | เรื่อง | สถานะ | ของที่มีบน UAT |
|---|---|---|---|
| 001 | หลักสูตรอบรมผู้ไกล่เกลี่ย | ✅ | ครบวงจร: สมัคร+คัดเลือก 2 รอบ (V073) → เช็คชื่อ → สอบออนไลน์ (หน้าเดี่ยว + pass-lock, v0.9.23) → ใบรับรอง → ประเมินวิทยากร (V074) + วิซาร์ดสร้างหลักสูตร/คลังข้อสอบ |
| 002 | ทะเบียนผู้ไกล่เกลี่ย | ✅ | ผู้ขอขึ้นทะเบียน (สายอนุมัติ) + ออกบัตร + ต่ออายุ 90 วัน + แก้ไขข้อมูล + สิ้นสภาพ + ลิงก์ยืนยันตัวตน ThaID + พอร์ทัลสมาชิก (โปรไฟล์/เอกสาร/แฟ้มผลงาน+ไฟล์แนบ) |
| 003 | ศูนย์ไกล่เกลี่ยภาคประชาชน | ✅ | ลงทะเบียนศูนย์ 1:1 กับระบบจริง (V090) + อัปโหลดเอกสาร 5 ช่องจริง (V093) + ประกาศศูนย์+ไฟล์แนบ + นายทะเบียนพิจารณาบน review sheet + พอร์ทัลศูนย์ (ประธาน/คณะทำงาน) |
| 004 | อนุมัติ/ประเมินศูนย์ | ✅ | ตรวจ/ประเมินศูนย์ + รายงานการดำเนินงานศูนย์ 8 ตระกูล (Phase D) + รับรองศูนย์ผ่าน 7 ลำดับขั้น (V096/V097) + คิวยุติศูนย์อัตโนมัติ (Phase E) |
| 005 | ดำเนินการไกล่เกลี่ย | ✅ | 3 เมนู MVP1 + สะพานรับเรื่องจากพอร์ทัล S9 + นัดหมาย/เซสชัน + eSign (ThaID / วาดลายเซ็น) + work-queue ผู้ไกล่เกลี่ย |
| 006 | รับรองผล + เบิกจ่ายค่าตอบแทน | ✅ | วงจรเงินเต็ม (Phase C, V075): เครื่องสถานะ 10 สถานะ + ใบสำคัญ 4 แบบ + bookbank/KTB Corp + ไฟล์จ่าย/CSV + นายทะเบียนรับรองผล + เบิกค่าจัดกระบวนการศูนย์ (v1) |
| 007 | Workflow engine + จัดการสิทธิ์ | ✅ | Workflow Engine จริง: กล่องงานอนุมัติ/ไทม์ไลน์/มอบอำนาจ/audit + สายอนุมัติ 7 ลำดับขั้น + สิทธิ์กลาง RLPD017 + province scope |
| 008 | เชื่อม ThaID + ระบบภายนอก | ✅ | ThaID + ลิงก์ยืนยันตัวตน/ลงนาม + สะพาน S9 → S4 + survey widget S9 |
ครบ 8/8 — อัปเดต 8 ก.ย. 2569 จากของจริงบน UAT v0.9.24 (ตารางเดิมค้างที่ 3/8 เพราะเขียนไว้
ตั้งแต่ยุคแบบจำลอง พ.ค. 2569) · ยังเปิดอยู่: migration ข้อมูลจริง V1/V2 → V3 (ความเสี่ยงอันดับ 1)
และงานบน develop ที่ยังไม่ tag (ตำแหน่งหลักศูนย์ V102 + ลิงก์/QR เข้าสอบ)
6. S5 — ระบบค่าตอบแทนทนายความ 134/1¶
repo: lawyer-compensation-system · UAT: v0.1.15 · branch: feature/s5-sso-integration
6.1 สิ่งที่ทำจริงในระยะ 2¶
| งาน | สถานะ |
|---|---|
| ย้าย login จาก LDAP+DB → Keycloak OIDC ฝั่ง server | 🟢 ขึ้น UAT |
| RBAC กลาง (token roles + JIT + province scope) | 🟢 ขึ้น UAT (v0.1.1, uat-ia) |
| Dockerfile production + CI/CD → GHCR | 🟢 |
| นำเข้าซอร์สโค้ดเดิม 134/1 (CodeIgniter) | 🟢 |
6.2 MVP1 — 0/5 เมนู ⚠️¶
เมนูเป้าหมาย 5 รายการ (M01–M05: ยื่นคำขอ 134/1, ยื่น ม.75, สมัครสมาชิกทนาย,
พิจารณายืนยัน/เพิกถอนสิทธิ, จัดการผู้ใช้ RBAC) — ยังไม่มี commit ที่แตะเมนูเหล่านี้
งานที่ commit ทั้งหมดคือ auth + deploy
M05 ก็นับเป็น 0 ด้วย — อย่าสับสนกับ RBAC ที่ขึ้น UAT แล้ว
สิ่งที่ deploy แล้วคือ ท่อ สิทธิ์กลาง (token roles + JIT + province scope) ซึ่งทำให้
ระบบ บังคับใช้ สิทธิ์ได้ · แต่ M05 ตาม REQ-LAW-006 คือ จอ จัดการผู้ใช้ + ตำแหน่ง +
ระงับผู้ใช้งาน ซึ่งยังไม่มี — ทั้ง 5 เมนูจึงเป็น 0 เท่ากันหมด
ต้องให้กรมฯ ตัดสิน: จอเดิมของระบบ 134/1 ที่ยังใช้งานได้ นับเป็นการส่งมอบ MVP1 หรือไม่
6.3 ความเสี่ยงที่ยังไม่ปิด¶
บั๊กจ่ายเงินซ้ำ (ระบุใน CLAUDE.md ว่ามีผลกระทบทางการเงิน) — ยังไม่มีแผนหรือ commit ที่แก้
7. S6 — ระบบ OCIPA¶
repo: ocipa · UAT: v0.1.0 · branch: develop-mvp1
7.1 สิ่งที่ทำจริงในระยะ 2¶
| งาน | สถานะ |
|---|---|
| SSO Keycloak (.NET Framework / OWIN) + login e2e ผ่าน 18 ส.ค. 69 | 🟢 ขึ้น UAT |
RBAC กลาง Phase 5 (JIT + seed PSDBDEVDB.OCIPA) |
🟢 |
CI/CD Windows container → IIS ผ่าน rlpd-pipeline |
🟢 |
| ALTCHA บนฟอร์มสาธารณะ | 📄 มีแผน 2026-08-16-altcha-public-form-gate.md |
7.2 MVP1 — 0/3 เมนู ⚠️¶
รายงาน สชง.7 ฉบับปรับปรุง · หน้ายื่นคำขอออนไลน์ UX ใหม่ · หน้าบริหาร SMS Provider — ยังไม่เริ่ม และเป็น 3 เมนูเดียวในเช็กลิสต์ที่ไม่มีรหัส REQ ผูกอยู่เลย
7.3 ความเสี่ยงที่ยังไม่ปิด¶
- ซอร์สโค้ดเดิม compile ไม่ผ่านตั้งแต่ต้น ไม่มีประวัติ Git และมี workflow ซับซ้อน 6 ตัว
- S1 Phase 7 (Escalation) รอสัญญา API จากระบบนี้ — S6 บล็อกงานของระบบอื่นอยู่
7.4 ราย REQ (SRS มี 14 ข้อ — จาก SRS_CHANGELOG.md ของ repo)¶
| REQ-OCI | เรื่อง | ข้อย่อยใน SRS | ทำแล้ว | สถานะ |
|---|---|---|---|---|
| 008 | ผู้ให้บริการ SMS | 5 | 5 | ✅ (เหลือหมุน key ที่หลุดประวัติ git) |
| 013 | ปรับ UX หน้ายื่นคำขอ | 4 | 2 | 🟡 |
| 002 | ติดตามสถานะคำขอ | 8 | 2 | 🟡 เนื้องานหลัก 5 ข้อยังไม่เริ่ม |
| 005 | แจ้งสิทธิออนไลน์ (สชง.1/03) | 5 | 0 | 🟡 ฟอร์มร่าง ยังไม่ต่อฐานข้อมูล |
| 003 | ยื่นคำขอออนไลน์ | 19 | 0 | ⚪ |
| 001 · 004 · 006–007 · 009–012 · 014 | ที่เหลือ | — | 0 | ⚪ |
ครบ 1/14 = 7% · สิ่งที่บล็อกจากภายนอก: ThaID credential จาก DGA (บล็อก REQ 002/003/005/013) · จะเก็บแบบ สชง.1/03 ที่ไหน + แบบฟอร์มฉบับจริง (SRS เขียนเองว่า "รอยืนยัน") · อนุมัติแล้วสร้างสำนวนอัตโนมัติหรือไม่ (SRS กับข้อตกลง TOR ขัดกัน — ต้องให้ผู้ว่าจ้างชี้ขาด)
8. S7 — ระบบคุ้มครองพยาน (WPS)¶
repo: witness-protection-info-system · UAT: v0.1.11 · branch: feature/s7-sso-integration
8.1 สิ่งที่ทำจริงในระยะ 2¶
| งาน | สถานะ |
|---|---|
| นำเข้า codebase WPS ระยะ 1 ขึ้น UAT | 🟢 |
| SSO Keycloak (confidential client) | 🟢 ขึ้น UAT + login verify |
| RBAC กลาง Phase 3 (token roles + JIT + province helper .NET) | 🟢 |
| CI/CD → GHCR + deploy | 🟢 |
| งาน MA ระยะ 1 (4 ข้อ: ชื่อพยานใน dropdown, งบรวมทั้งคดี, กรองสำนวนของตัวเอง, ปลดล็อกแก้ชุดคุ้มครอง) | 🟢 |
8.2 MVP1 — 0/6 เมนู ⚠️¶
S7 มีเมนูเป้าหมายมากที่สุดในโครงการ (6 เมนู: Demo Hub, ยื่น สคพ.1, กล่องรับสำนวน, รายละเอียด+แท็บพยาน, Workflow 6 ระดับ, สั่งข้ามวาระเร่งด่วน) — ยังไม่มี commit งานปรับปรุงระยะ 2
ต้องให้กรมฯ ตัดสิน: จอเดิมจากระยะ 1 ที่อยู่บน UAT แล้ว นับเป็นการส่งมอบ MVP1 หรือไม่ — ถ้านับ S7 ขยับจาก 0 เป็น 6 เมนูทันที ซึ่งเป็นก้อนใหญ่ที่สุดที่ค้างอยู่
9. S8 — เว็บไซต์กรมคุ้มครองสิทธิและเสรีภาพ¶
repo: rlpd-offcial-website · UAT: v0.5.1 (22 ส.ค.) · branch: develop ·
แผน: docs/superpowers/plans/2026-08-20-s8-mvp2/ · Jira: Epic SCRUM-12 (label s8)
นิยาม MVP2 ของ S8 = "ปิด REQ-WEB ที่เหลือใน SRS v2.0.0 + ข้อสั่งการจาก MOM 17 ส.ค. ให้ใช้งานได้จริง ทัน go-live 30 ก.ย." (ทีมตั้งเอง แบบเดียวกับ S1/S2) · ลำดับความสำคัญเมื่อขัดกัน: MOM 17 ส.ค. > SRS/FD > mockup
9.1 MVP1 — 1/2 เมนู (เมนูอนุมัติเนื้อหา ตัดออกจาก scope 20 ส.ค. · เมนูที่เหลือยกเข้า Phase 0)¶
| เมนู | สถานะ |
|---|---|
| สร้าง/แก้ไขบทความ (WYSIWYG + HTML mode) | ✅ ทำแล้ว |
| รายการข่าวสารและบทความ | 🟡 กำลังดำเนินการ (Phase 0) |
| ~~ตรวจสอบและอนุมัติเนื้อหา~~ | ⛔ ตัดออกจาก scope — คำสั่งเจ้าของงาน 20 ส.ค. 69 |
9.2 แผน MVP2 — 9 เฟส (ตั้งแผน 20 ส.ค. 2569)¶
| เฟส | เรื่อง | REQ | สถานะ | ขั้น |
|---|---|---|---|---|
| A | MOM 17 ส.ค. บนจอที่ใช้จริง — ค้นหาด้วย URL/Content ID · admin ค้นทุกหน่วยงาน + filter/คอลัมน์หน่วยงาน (depart_id, NULL=ส่วนกลาง) · save แล้วอยู่หน้าเดิม (Menu Content) · คู่มือเวอร์ชันล่าสุด |
WEB-005/006 | merge เข้า develop แล้ว (bdf6db2a, 21 ส.ค.) — ค้นหากลางรับ URL/Content ID พาไปหน้าแก้ไข + save-stay ทั้ง Page/PageDep · เทส 135/135 (filter หน่วยงานส่งไปกับ Phase 0) · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. · ⚠️ ค้างไฟล์คู่มือเวอร์ชันใหม่จากทีม |
🟢 |
| 0 | ปิด MVP1 — Content List (FD ตาราง 4) · ~~Approval Workflow~~ ตัดออก 20 ส.ค. | WEB-003 | merge เข้า develop แล้ว (7a17ed4d) — filter ประเภท/สถานะ/วันที่ + ปุ่มเผยแพร่/ถอน + admin ค้นทุกหน่วยงาน · เทส 128/128 · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 1 | Vertical Template — merge feature/vertical_template + แก้ seed Main=1 (หน่วยงานย่อยเลือกไม่ได้) + thumbnail หน้า picker |
WEB-002 | merge เข้า develop แล้ว (536d4ddc, 21 ส.ค. — ก่อนกำหนด 1 ก.ย.) — seed Main=0+Sequence dynamic · แปลง views 8 ไฟล์ main-web→sub-web (MAIN_WEB_*→SUB_WEB_* + bind Depart จาก cookie — โค้ดเดิมเขียนเป็น template เว็บหลักทั้งชุด) · thumbnail 3 โทนครบ · responsive ระดับโค้ดผ่าน (viewport test จริงบน UAT หลัง tag) · build 0 error · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 2 | Template ใหม่ 4 แบบ + Agency Selection สาธารณะ + ข่าว Top 4 — ก้อนใหญ่สุดของ S8 · ใช้กลไก Theme→PublicFolder เดิม | WEB-002 | 🟡 เริ่มแล้ว — VerticalMainTemplate (เว็บหลักแนวตั้ง แบบ 1/4) merge develop (f59c1dd7, 22 ส.ค.) + ขึ้น UAT v0.5.0 · กติกาสถาปัตยกรรม (คำสั่งเจ้าของงาน 22 ส.ค.): ทุก template ดึง API/content ชุดเดียวกัน — เพิ่ม content ครั้งเดียวแสดงทั้งแนวนอน+แนวตั้ง (Vue components ชุด TemplateSinglePage เดิม; content ที่ผูก ThemeChoiceId อ้าง row ของ Template5 = ValueTemplateSinglePage; asset ใช้ร่วม Template5 — โฟลเดอร์ใหม่มีแค่ vertical-main.css/js) · seed insert_vertical_main_template.sql (Main=1, GUID A9D4C7E2…) รัน UAT แล้ว รันซ้ำ prod ตอน cutover · แก้บั๊ก admin picker thumbnail เดา path จากตำแหน่ง card → อ่าน data-folder (ทั้ง TemplateMain+TemplateDepartment) · build 0 error + รีวิวอิสระผ่าน 7 ด้าน · เหลือ: แบบหลัก 2 + ย่อย 2 (CSS skin บนโครงเดียวกัน) · Agency Selection (ต้องเพิ่ม public department endpoint — ยังไม่มี) · ข่าว Top 4 ⛔B2 (API api/News?Limit=4 รองรับแล้ว) · ⛔B1 ยืนยัน layout 26 ส.ค. |
🟡 |
| 3 | WCAG 2.2 AA Critical (lang="th" · skip link/<main> · Accessibility Statement + ถอด badge 2.0 AAA · labels · a11y test ใน CI) + Global Tone 3 ระดับ (ปกติ/Gray100/Gray60-70 ครอบเว็บหลัก+ย่อย + popup override) |
WEB-001 + MOM §5–7 | merge เข้า develop แล้ว (06c81a62, 21 ส.ค. — ก่อนกำหนด 10 ก.ย.) — lang ผูกปุ่มภาษาครบ 12 template (เดิม en บนเว็บไทย) · skip link + <main> ทุก layout + a11y.css (:focus-visible ทับ outline:none เดิม) · ถอด badge "WCAG 2.0 AAA" ทั้ง 13 footer → หน้าใหม่ /accessibility สองภาษา · <h1> เข้า T3/T4/Sub5 · aria-label ช่องค้นหา ~20 จุด · alt cleanup 105 ไฟล์ (ลบ alt ผิดที่ 206 + แก้ placeholder 294 + เพิ่มที่หาย 2) · CI ใหม่ tests.yml (PR/push — แยกจาก ci.yml ที่ tag=deploy) รัน dotnet test + LayoutAccessibilityTests บังคับเกณฑ์กับไฟล์จริง + .pa11yci.json/docs/a11y-testing.md (pa11y ต้องรันฝั่ง VPN) · Global Tone: ตั้งจากหน้าตั้งค่าเว็บไซต์หลักจุดเดียว มีผลเว็บหลัก+ทุกหน่วยงาน (html{filter:grayscale} ที่ root — ไม่พัง position:fixed ตาม spec) ครอบ Splash/404/Survey · เทส 238/238 · รีวิวอิสระ 1 รอบแก้ครบ (จุดใหญ่: alt ว่างบน thumbnail ลิงก์รูปเดี่ยว → unnamed link) · DB sql/phase3/003_site_tone.sql (ตาราง WEB.SiteTone — additive ปลอดภัยต่อ nginx rollback) รันบน UAT แล้ว ต้องรันซ้ำ prod ตอน cutover · ⛔ popup/component override รอ B3 (2 ก.ย.) · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 4 | Media & File — server-side auto-resize ตาม Section (ImageSharp แทน System.Drawing ที่พังบน Linux) · เลิกรูป Base64 → file URL/reference · upload แล้วได้ URL ไปแทรกใน content · validate เอกสารฝั่ง server · Banner รองรับ Embed/YouTube | WEB-003 + MOM §3–4 | merge เข้า develop แล้ว (1834c9e7, 21 ส.ค. — ก่อนกำหนด 8 ก.ย.) — ครบ 6 ข้อ + จุด critical ที่เจอเพิ่ม: path อัปโหลดต่อ backslash → บน Linux ไฟล์ตกนอก mount ไม่ถูก serve (แก้ Path.Combine + PathFile forward-slash) · ImageSharp 2.1.13 resize/thumbnail (≤1920/≤480, แบนเนอร์ตาม ThemeChoice) · Summernote onImageUpload กลางครบ 13 จุด · ปุ่มคัดลอก URL · validation allow-list+magic bytes ทุกจุด (รวม base64) · ชื่อไฟล์ Guid (เดิม hhmmss 12-ชม.ชนข้ามครึ่งวัน) · webp ครบวงจร · Banner Embed/YouTube/วิดีโอ (Banner_Detail.IsEmbed/Embed_Code + sanitize, เรนเดอร์ VerticalTemplate+Common) · เทส 162/162 · รีวิวอิสระ 1 รอบ แก้ครบ (จุดใหญ่: sanitizer ตัด aspect-ratio → iframe 150px) · DB sql/phase4/002 รันบน UAT แล้ว (additive — ปลอดภัยต่อ nginx rollback ไป app เดิม) ต้องรันซ้ำที่ prod ตอน cutover · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 5 | ปิดเศษ — หน้า UI Embed Audit Log (WEB-004 → 6/6) + ช่องโหว่ Delete/Status/multi-role · กลุ่ม "การตั้งค่าระบบ" ใน Internal Search (WEB-006) · relevance sort ลง SQL + จำกัด fuzzy memory · หลักฐาน p95 Login (WEB-005) | WEB-004/005/006 | merge เข้า develop แล้ว (42bf8195, 21 ส.ค. — ก่อนกำหนด 22 ก.ย.) — หน้า Audit Trail (เว็บหลักเห็นทุกแถวรวมที่ถูกลบ / หน่วยงานเห็นของตน) · ปิดช่องโหว่: Delete/Status เดิมไม่เช็คสิทธิ์เลย → กติการวมศูนย์ใน Get_EmbedCode (Header = Super Admin เท่านั้น เช็คทั้งตำแหน่งใหม่+ตำแหน่งเดิมของแถว · ฝั่งหน่วยงาน requireDepartId จัดการได้เฉพาะแถวของตน — กันสวม GUID ข้ามหน่วยงาน/re-scope) · isUserAdminRole เช็คทุก role แทน FirstOrDefault() · Internal Search กลุ่มที่ 3 "การตั้งค่าระบบ" จำแนกจากสายเมนูแม่ "ตั้งค่า…" (data-driven ไม่ hardcode) · fuzzy file search เลิกโหลด AttachFile_Alt ทั้งตาราง (join เฉพาะหมวดที่มีสิทธิ์ + cap 2,000 ไฟล์ล่าสุด config ได้) · relevance sort เป็น expression CASE WHEN LIKE ลง SQL — paging ฝั่ง DB ทั้งหมด ยืนยันรันบน SQL Server UAT จริง · หลักฐาน p95 Login: ยิง SSO ครบวงจร 30 รอบ + LogQL → login ฝั่งแอป p95=26ms (เกณฑ์ 2s), /home p95=241ms (เกณฑ์ 3s) → docs/perf-evidence-web005-login.md · เทส 269/269 · รีวิวอิสระ 1 MAJOR (guard หน่วยงานหลุดเมื่อยังไม่เลือกหน่วยงาน) + 2 minor แก้ครบ 692813e9 · ไม่มี DDL ใหม่ · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 6 | NFR/PDPA — dotnet test ใน CI · realm export lockout (NFR-S06) · cookie banner/Privacy/retention purge/Users.Password plaintext · k6 P01–P05 |
NFR | merge เข้า develop แล้ว (655fd01e, 22 ส.ค. — ก่อนกำหนด 22 ก.ย.) — CI dotnet test มีแล้วจาก Phase 3 ✅ · NFR-S06: Keycloak realm rlpd ปรับ 4 ครั้ง/5 นาที → 5 ครั้ง/15 นาที ตาม SRS + ทดสอบล็อกจริง (ผิด 5 → ล็อก, รหัสถูกก็เข้าไม่ได้) → docs/keycloak-lockout-nfr-s06.md + export · PDPA: banner เลือกได้จริง (กากบาท ≠ ยอมรับ; ค่า consent ใหม่ accepted2 ไม่นับ "accepted" legacy จากกากบาท banner เก่า) + ไม่ยอมรับ/ยังไม่เลือก → anonymize IP (IPv4 /24, IPv6 /48) ใน Log_PublicActivity · หน้า /privacy จริง TH/EN · retention purge ตั้ง cron UAT 02:00 แล้ว (รอบแรกลบ 3.1 ล้านแถว; prod = SQL Agent ตอน cutover) · sql/pdpa/002_null_local_passwords.sql พร้อม ⚠️ รันหลังปิดหน้าต่าง nginx rollback เท่านั้น · NFR-P01–P05 ผ่านครบที่ k6 1,000 VUs บน UAT: Home p95 286ms/3s · Search 264ms/1s · API 704ms/2s · Login 26ms/2s (Phase 5) · error 0% จาก 123,924 req — baseline image v0.3.5 ไม่ผ่าน (Home 9.36s) แก้ด้วย cache เมนู (Get_Menu.GetMenuData → CmsCache) + LoggingMiddleware เลิก reflection-scan/sync-insert ทุก request (คิว + batch writer) → docs/perf-evidence-nfr-p01-p05.md · Permissions-Policy + COOP ครบ 3 แอป · เทส 285/285 · รีวิวอิสระ 1 MAJOR (พิสูจน์แล้วไม่จริงบน UAT — forwarded headers ทำงาน) + 5 minor แก้ครบ d4405ed4 · ไม่มี DDL ใหม่ · 🟢 ขึ้น UAT v0.4.0 22 ส.ค. |
🟢 |
| 7 | Web API governance (WEB-007) → โอนไป S9 ตามมติ architecture + ปิดช่อง CMS.API anonymous ฝั่ง S8 ระหว่างรอ | WEB-007 | ⛔ ไม่ตั้งวัน — S9 ยังไม่มีแผนรองรับ | ⚪ |
หมุดเวลา: ~~🚀 Release #1 31 ส.ค. · 🚀 Release #2 11 ก.ย.~~ 🟢 deploy จริง v0.4.0 22 ส.ค. รวดเดียว (Phase A+0+1+3+4+5+6) — JIRA SCRUM-190/191/192/194/195/196/197 + 206/207 = Done · seed Vertical Template รัน UAT แล้ว 22 ส.ค. (สคริปต์เดิมชี้ dbo.ThemeChoice ผิด — แก้เป็น WEB.Theme_Choice แล้ว 2b1df157) + smoke v0.4.0 ผ่านครบ · ค้าง: คู่มือ CMS ตามรอบหน้า ·
🟢 v0.5.0 ขึ้น UAT 22 ส.ค. (คืนเดียวกัน) — Phase 2 ก้อนแรก: VerticalMainTemplate เว็บหลักแนวตั้ง (SCRUM-193 = In Progress) ·
🟢 v0.5.1 ขึ้น UAT 22 ส.ค. — ตัดกลุ่มเมนูแอดมิน "ตั้งค่าระบบ" ออกจาก S8 (คำสั่งเจ้าของงาน: Role/ผู้ใช้จัดการที่ Keycloak+Web Portal S9): ซ่อนเมนู sql/rbac/001-002 (Tm_Menu.IsActive=0 ย้อนกลับได้) · ถอด permission 38 แถวออกจาก PORTAL.AuthzPermissions RLPD013 → ไม่แสดงในหน้า RBAC ของ S9 (backup ใน dbo.zz_authz_system_settings_bak, sql/rbac/003) · ปิด User/RoleConfig controller (override→PageNotFound, โค้ดเดิมคงไว้) — SQL รัน UAT แล้ว รันซ้ำ prod ตอน cutover ·
🚀 Release #3 + code freeze พุธ 23 ก.ย. (Phase 2 ส่วนที่เหลือ) · 🏁 Go-live พุธ 30 ก.ย.
บล็อกเกอร์ (ขอกรมฯ): B1 ยืนยัน vertical layout เว็บกรม + ขอบเขต Navbar (26 ส.ค.) · B2 เลือกแบบข่าว Top 4 — ทีมส่งตัวอย่าง 26 ส.ค. กรมฯ เลือก 2 ก.ย. · B3 ขอบเขต popup tone override + landing page/SEO (2 ก.ย.) · B4 สถานะ Google Analytics (16 ก.ย.)
ops คู่ขนาน: ~~O1 รายการ third-party library + license~~ 🟢 เสร็จ 22 ส.ค. (ก่อนกำหนด 28 ส.ค. — docs/third-party-libraries-o1.md บน develop 5e5436c8: ไม่มี subscription จำเป็น; "express 18-19" = DevExpress/DevExtreme 19.2 + Syncfusion 18.2 ซึ่งไม่ได้ใช้/ถอดได้; 🔴 Shield UI 1.7.41 Trial หมดอายุ พ.ย. 2020 ยังใช้จริงใน ADMIN treeview → เสนอแทนที่ก่อน go-live; 🟠 ขอหลักฐาน license Slider Revolution + Cube Portfolio (Template5) จากผู้พัฒนาเดิม + ย้าย Highcharts→Chart.js; ตายซากเสนอลบใน S9 ~50 dirs; รายละเอียด SCRUM-203) · ~~O2 ประเมิน deployment timeline~~ 🟢 เสร็จ 22 ส.ค. (ก่อนกำหนด 25 ส.ค. — docs/deployment-timeline-o2.md บน develop ec386b3b: ยืนหมุด 31 ส.ค./11 ก.ย./23 ก.ย./30 ก.ย.; Release #2 โค้ดเสร็จก่อนกำหนดแล้ว; critical path เดียว = Phase 2 รอ B1/B2; go-live ไม่ต้องแตะ DNS/WAF (www หลัง Imperva ชี้ .57 เดิม); ⚠️ พบ uat-www/uat-ww2-admin/uat-ww2-api ยังไม่มี DNS record สาธารณะ — ต้องยืนยันช่องทางเข้าดู UAT ของกรมฯ ก่อน Release #1 · ⚠️ SSL cert ww2 บน .57 หมดอายุ 2021 ต้องออกใหม่ก่อน cutover; เงื่อนไข prod 6 ข้อ + ร่างคำตอบกรมฯ ใน SCRUM-204) · ~~O3 sync Content_Article prod→UAT~~ 🟢 เสร็จ 21 ส.ค. (additive diff sync — Content_Article 50,190=50,190 + ตาราง drift อื่นครบ, media +324 ไฟล์ miss=0; ดูรายละเอียด+ข้อค้นพบ Role/Role_Menu เป็น Portal view ใน SCRUM-205)
9.3 ราย REQ (จาก docs/srs-gap-analysis.md, ตรวจ 25 ก.ค. 69)¶
| REQ | เรื่อง | สถานะ | เฟสที่ปิด |
|---|---|---|---|
| WEB-001 | WCAG 2.2 AA | 🟡→✅ ชุด Critical ครบ — ~~lang="en" บนเว็บไทย, ไม่มี skip link/<main>, ไม่มี a11y test ใน CI~~ Phase 3 merge แล้ว 21 ส.ค. (06c81a62) · เหลือยืนยันด้วย pa11y บน UAT หลัง tag Release #2 + ส่วน popup override รอ B3 |
Phase 3 |
| WEB-002 | Template & UI | 🔴 ค้างมากที่สุด — Template ใหม่ 4 รูปแบบยังไม่มีในโค้ดเลย · ~~Vertical Template ยังไม่ merge~~ merge แล้ว 21 ส.ค. (536d4ddc) |
Phase 1+2 |
| WEB-003 | CMS | ✅ ครบ — Editor + Upload + Banner crop + ~~auto-resize ฝั่ง server~~ Phase 4 merge แล้ว 21 ส.ค. (1834c9e7) |
Phase 4 |
| WEB-004 | Embed Code | ✅ 6/6 ครบ — Phase 5 เพิ่มหน้า UI Audit Log + ปิดช่องโหว่สิทธิ์ Delete/Status/ตำแหน่งเดิม/multi-role (42bf8195, 21 ส.ค.) |
Phase 5 |
| WEB-005 | Backend Performance | ✅ ครบ — Phase 5 เก็บหลักฐาน p95 Login บน UAT (SSO ครบวงจร 30 รอบ + LogQL): login ฝั่งแอป p95=26ms / Dashboard 241ms ผ่านเกณฑ์ 2s/3s (docs/perf-evidence-web005-login.md) + relevance sort/paging ลง SQL รับเพดาน 100,000 บทความ |
Phase 5 |
| WEB-006 | Internal Search | ✅ ครบ — Phase 5 เพิ่มกลุ่มผลลัพธ์ที่ 3 "การตั้งค่าระบบ" (จำแนกจากสายเมนูแม่) + จำกัด fuzzy ไม่โหลด AttachFile_Alt ทั้งตาราง |
Phase 5 |
| WEB-007 | Web API | 🔴 มี endpoint แต่ governance หายทั้งหมด (Auth / Rate Limit / Versioning) — ย้ายไป S9 | Phase 7 ⛔ |
ครบ 4/7 · บางส่วน 1/7 · ค้างหนัก 2/7
9.4 ของที่ค้างและต้องตัดสินใจ¶
- REQ-WEB-002 เป็นความเสี่ยงเดียวที่ใหญ่ที่สุดของ S8 — WCAG 2.2 AA เป็นข้อผูกพันสัญญา และงาน template ที่ยังไม่เริ่มจะกระทบทั้ง accessibility และการตรวจงวด M4 → ตอนนี้เป็น Phase 1+2 ของแผน มีเส้นตาย 18 ก.ย. แต่แขวนอยู่บนคำตอบกรมฯ B1/B2 (26 ส.ค. / 2 ก.ย.)
- ~~ข้อมูล prod ยัง sync ไม่ครบลง UAT~~ → O3 เสร็จ 21 ส.ค. — UAT ตรง prod ทุกตาราง content (verify key-diff), media miss=0; ปลดบล็อก Release #1 · ⚠️ บน UAT
WEB.Role/WEB.Role_Menuเป็น VIEW ทับPORTAL.Authz*(RLPD013) — ห้าม sync จาก legacy, แก้สิทธิ์ที่ Portal - Permission/User-Role ของ S8 → ใช้จาก Web Portal (S9) ตามมติ MOM §12 — S8 ไม่สร้างระบบสิทธิ์ซ้ำ
10. S9 — ระบบเว็บพอร์ทัล (Web Portal)¶
repo: webportal · UAT: v0.18.0 · branch: develop
S9 เป็นระบบที่มี release ถี่ที่สุดในโครงการ (18 minor version) และทำหน้าที่เป็น ศูนย์กลางของ SSO / RBAC / ศูนย์บริการ ให้อีก 8 ระบบ
10.1 MVP1 — 3/3 เมนู ✅ อยู่บน UAT¶
| เมนู | หลักฐาน |
|---|---|
| หน้าหลักพอร์ทัลแบบ Card ตามสิทธิ์ | Portal.jsx + ทะเบียน PORTAL.RLPDSystems + ไอคอนจาก MinIO |
| อนุมัติคำขอสิทธิ์และจัดการการเข้าระบบ | PermissionRequest.jsx / PermissionRequestList.jsx / PermissionRequestTracking.jsx |
| นโยบายความปลอดภัย | RequestChangePassword / ResetPassword / SetAdPassword + forced UPDATE_PASSWORD ที่ Keycloak |
10.2 งานที่ทำเกินเป้า MVP1 (ยืนยัน e2e บน UAT แล้ว)¶
- AD provisioning — อนุมัติ → สร้างบัญชี AD + ส่งอีเมล username/temp password + บังคับเปลี่ยนรหัสครั้งแรก
- ลบผู้ใช้ AD/รายระบบ · เปลี่ยนรหัสผ่านกลาง + ลืมรหัสผ่าน (SMTP 587/STARTTLS)
- สะพานถึง 3 ระบบ: S9→S4 ไกล่เกลี่ย (RLPD015) · S9→S2 ขอรับการช่วยเหลือ (RLPD012) · S9→S1 คำขอรับคำปรึกษา
- MSC intake (จังหวะ 1 ผ่าน e2e) · ฟอร์มคำร้องยื่นหลายระบบ (การ์ดรายระบบ + ALTCHA ต่อฉบับ)
- ทะเบียนระบบ + ไอคอนการ์ด จัดการจากหน้าตั้งค่า
- หน้ารายงาน UAT (
/uat-reportสาธารณะ +/uat-report-listสำหรับทีม) — แทน Google Forms
10.3 ของที่ค้าง¶
- ไม่มีแผน MVP2 — งานเดินแบบตอบคำขอเป็นเรื่อง ๆ ยังไม่ได้ไล่ REQ-WPT ทั้งชุดเทียบโค้ด
- REQ-WEB-007 (Web API governance) ย้ายจาก S8 มาที่ S9 แล้ว แต่ยังไม่มีแผนรองรับ
11. ช่องว่างที่ต้องตัดสินใจ — เรียงตามผลกระทบ¶
| # | เรื่อง | ใครตัดสิน | ผลถ้าไม่ตัดสิน |
|---|---|---|---|
| 1 | ~~สั่ง release S1~~ ✅ ปล่อยแล้ว v0.29.0-mvp2 → เดินจอ MVP2 ของ S1 + S2 บน UAT (ยังไม่มีใครเดินสักเฟส) |
เจ้าของงาน + ทีม | ความมั่นใจก่อนสาธิตกรมฯ เหลือ 41 วัน |
| 2 | จอเดิมของ S5/S6/S7 นับเป็น MVP1 ไหม | กรมฯ | ยอด MVP1 ทั้งโครงการแกว่งระหว่าง 50% กับ 94% |
| 3 | REQ-WEB-002 Template ใหม่ 4 รูปแบบ (S8) — มีแผนแล้ว (Phase 2, เส้นตาย 18 ก.ย.) แต่แขวนบนคำตอบกรมฯ B1 vertical layout (26 ส.ค.) + B2 แบบข่าว Top 4 (2 ก.ย.) | กรมฯ + ทีม S8 | WCAG 2.2 AA เป็นข้อผูกพันสัญญา · กระทบงวด M4 |
| 4 | แผน MVP2 ของ S3–S7, S9 ยังไม่มี (S8 ได้แผนแล้ว 20 ส.ค. — §9.2) | ทีมพัฒนา | 6 ใน 9 ระบบไม่มีเส้นทางที่นับความคืบหน้าได้ถึง go-live |
| 5 | สัญญา API ของ OCIPA (S6) | กรมฯ + ทีม S6 | บล็อก S1 Phase 7 และ S2 Phase A |
| 6 | รายการย่อยตั้งต้นใต้ 4 ด้าน (S2) | กรมฯ | เปิดใช้จริงวันแรกกรอกแผนไม่ได้เลย |
| 7 | ที่มาของ "ชั่วโมง" ค่าตอบแทน (S1) | กรมฯ | ยอดเงินที่จ่ายจริงอาจผิดนิยาม |
| 8 | บั๊กจ่ายเงินซ้ำ (S5) | ทีม S5 | ความเสี่ยงทางการเงินที่ยังไม่มีแผนแก้ |
| 9 | แผนรวมสองเวอร์ชันของ S4 | กรมฯ + ทีม S4 | ความเสี่ยงอันดับ 1 ตาม CLAUDE.md ยังเปิดอยู่ |
12. หมายเหตุการดูแลหน้านี้¶
- หน้านี้เป็นภาพ ณ วันที่ระบุด้านบน — ทุกครั้งที่มีการ tag/deploy ให้กลับมาปรับคอลัมน์ "เวอร์ชันบนUAT" และเลื่อนขั้นของเฟสที่เกี่ยวข้องจาก 🔵 เป็น 🟢
- อย่าคัดลอกสถานะจาก README ของแผน — ให้อ่าน
git log <tag ล่าสุด>..developของ repo นั้น เป็นแหล่งความจริง เพราะไฟล์แผนจะค้างอยู่ที่วันที่เขียน - เช็กลิสต์เมนู MVP1 รายระบบอยู่ที่ เมนูเป้าหมาย MVP1 (M3)