ข้ามไปที่เนื้อหา

แผนงาน เฟส และความคืบหน้า

ภาพ ณ 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 ของระบบนั้น
  • ระบบที่ยังไม่มีหลักฐานพอ → เขียน "ยังไม่ประเมิน" ไม่ใส่ตัวเลข

ตัวเลขที่หน้านี้ปฏิเสธจะเดา

  1. MVP1 ของ S5 / S6 / S7 (รวม 14 เมนู) — สามระบบนี้เป็น ระบบเดิมที่ต้องปรับปรุง งานที่ commit จริงในระยะ 2 คือ SSO + RBAC กลาง + CI/CD เท่านั้น ยังไม่มี commit ที่แตะเมนูเป้าหมายทั้ง 14 รายการ · หน้านี้จึงนับเป็น 0 และต้องให้กรมฯ ตัดสินว่า จอเดิมจากระยะ 1 ที่ยังใช้งานได้อยู่ นับเป็นการส่งมอบ MVP1 หรือไม่ — คำตอบนี้ทำให้ ยอดรวมทั้งโครงการขยับจาก 52% ไปได้ถึง ~97%
  2. ผลการเดินจอจริง (walkthrough) — หลายระบบ "ขึ้น UAT แล้ว" แต่ยังไม่มีบันทึกว่ามีคน เดินจอครบทุกหน้า หน้านี้แยกเป็นคอลัมน์ต่างหาก ไม่รวมเข้ากับ %
  3. ความคืบหน้าเป็น % ของงวดสัญญา 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 ของที่ต้องถามกรมฯ ก่อน (บล็อกงานจริง)

  1. รายการย่อยตั้งต้นใต้ 4 ด้าน → บล็อก Phase 0/1 · บน UAT ตอนนี้เป็น placeholder 12 รายการ ที่ทีมทำขึ้นเพื่อให้จอเดินได้ — ยังไม่ใช่ของกรมฯ และ production ต้องได้ของจริงก่อนเปิดใช้
  2. จุดส่งต่อ สชง. + ส่งซ้ำได้ไหม + เลข reference เดียวหรือแยก → Phase 3 ขึ้น UAT แล้วด้วยค่าตั้งต้น: ด่านขั้น = มีผล ≥1 หรือแผนอนุมัติ (PJOS_REFERRAL_MIN_STAGE ปิดได้โดยไม่ build ใหม่) · ส่งซ้ำได้แต่จอเตือนก่อน · reference แยกต่อระบบ — กรมฯ ต้องยืนยันก่อน go-live · มาตรฐานเลขเคสกลางที่เจ้าของงานกำหนดแล้ว (19 ส.ค.) อยู่ที่หน้า มาตรฐานเลขเคสremote_ref เป็น free text รองรับได้เลย
  3. สัญญา API ของ OCIPA (endpoint สน. + ประเภทความช่วยเหลือ) → บล็อก Phase A ทางเลือก A
  4. Executive อนุมัติการเปลี่ยนผู้รับมอบหมายทุกกรณีหรือเฉพาะหลังเริ่มงาน
  5. Template XLSX ของคำขอ → Phase 5 ขึ้น UAT แล้วด้วยค่าตั้งต้น: template ฝั่งระบบ export เอง · เพดาน 500 แถว (PJOS_IMPORT_MAX_ROWS เปลี่ยนได้โดยไม่ build) · ผิดบางแถว รับเฉพาะเคสที่ทุกแถวถูก (แถวผิดดาวน์โหลดกลับไปแก้ได้) · คอลัมน์ = ฟอร์ม /case-intake 1:1 — กรมฯ ต้องยืนยันก่อน go-live โดยเฉพาะคอลัมน์ที่เปลี่ยนทีหลังแก้ยาก
  6. นโยบาย Masking PII — ควรให้กรมฯ เซ็นรับรองก่อน go-live
  7. "เรื่อง" ต่างจาก "รายเคส" อย่างไรในรายงาน — Phase 4 ขึ้น UAT ด้วยนิยาม เรื่อง = 1 เคส · ราย = 1 ผู้เสียหาย พิมพ์นิยามกำกับทุกจอ/หัวไฟล์ส่งออก — กรมฯ ต้องยืนยันก่อน go-live (ตีความต่างก็เปลี่ยน query ได้โดยโครงไม่พัง)
  8. แผนที่ผู้เสียหาย "ไม่ต้องการทั้ง 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 ทิ้งไม่ได้ทำให้ระบบกลับไปเป็นเหมือนเดิม

  1. ✅ apply V013 — ทะเบียนมาตรฐาน 4 ด้าน (ได้ 4 แถว)
  2. ✅ apply V014 — แผนรายกรณี + เวอร์ชันแผน
  3. ✅ apply V015 — ความเห็นของผู้พิจารณา (append-only) + กระดิ่งแจ้งเตือนกลาง
  4. ✅ รัน npm run db:seedไม่มีอะไรรันให้อัตโนมัติ ไม่อยู่ใน Dockerfile และไม่อยู่ใน CI ลืมขั้นนี้แล้วจอจะเปิดมาว่างเปล่าโดยไม่มี error ให้เห็น (ได้ plan_area_item 12 แถว)
  5. ✅ seed เมทริกซ์สิทธิ์กลางของ PJOS — RLPD012 205 → 208 rows
  6. 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 ข้อมูล

  1. ✅ apply V016 (+ ซ้อม rollback no-op จริง · apply ซ้ำพิสูจน์ idempotent)
  2. ✅ seed เมทริกซ์เพิ่ม referral:edit ให้ officer 2 role — RLPD012 208 → 210 rows (dry-run diff ตรง +2 เป๊ะ ระบบอื่นไม่ถูกแตะ)
  3. ✅ tag v0.12.0 → CI → CD → smoke · ตามด้วย v0.12.1 hotfix ภายในชั่วโมง — เดินจอครั้งแรกเจอจอขาวทั้งจอ (render province ที่เป็น object ตรง ๆ = React #31) ผลตรวจ: npm run test:db 14 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 รายการ (M01M05: ยื่นคำขอ 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)