Skip to content

สิ่งที่รอคนตัดสินใจหรือลงมือ

รายการสั้น ๆ ของทุกอย่างที่ตอนนี้รอ "คน" ไม่ใช่รอโค้ด แบ่งเป็นสองประเภท และการแยกนี้คือประเด็นสำคัญ

  • รอการตัดสินใจ — สร้างต่อไม่ได้จนกว่าผู้มีอำนาจจะตอบคำถาม
  • รอการลงมือ — คำตอบมีแล้ว เหลือแต่ต้องมีคนไปทำในที่ที่โค้ดเอื้อมไม่ถึง เช่น ตั้งค่า DNS แก้รหัสผ่านบนเครื่องเซิร์ฟเวอร์ หรือกดรวมโค้ด

สิ่งที่ไม่อยู่ในรายการนี้ คือเสร็จแล้ว หรือเป็นงานปกติที่ผู้พัฒนาหยิบไปทำต่อได้เลย

ตรวจสอบตรงกับระบบติดตามงานล่าสุดเมื่อ 2026-09-12 (wayfinder 114 หลังครึ่งฝั่งแอปของ 098, ครึ่งฝั่ง จป. ของ 101, ขั้นที่ 3 ของ 108, 109 และครึ่งฝั่ง จป./ผู้ตรวจสอบของ 110, และครึ่งฝั่ง จป. ของ 112 ทยอยเสร็จ)

รอการลงมือ

รหัสผ่านที่เก็บไฟล์ผิดบนเซิร์ฟเวอร์จริง

อาการที่ผู้ใช้เจอ แนบรูปเข้าใบอนุญาตไม่ได้

ค่า MINIO_ACCESS_KEY_ID และ MINIO_SECRET_KEY ในไฟล์ตั้งค่าบนเซิร์ฟเวอร์ใช้ไม่ผ่าน ตอนนี้ระบบตอบกลับว่า "ระบบจัดเก็บไฟล์ใช้งานไม่ได้" อย่างตรงไปตรงมาแล้ว แทนที่จะบอกว่าคำขอผิดรูปแบบ แต่ก็ยังใช้งานไม่ได้อยู่ดี เรื่องนี้ไม่มีทางแก้ด้วยโค้ด เป็นการตั้งค่าบนเครื่องเซิร์ฟเวอร์

ก่อนจะเดาว่าเป็นเรื่องรหัสผ่าน ควรตรวจอีกอย่างหนึ่งก่อน เพราะไฟล์ตั้งค่าของระบบ ใช้ค่าสองตัวนี้ตั้งรหัสของตัวระบบจัดเก็บไฟล์เองด้วย และขั้นตอนสร้างที่เก็บไฟล์จะล้มเหลวเสียงดัง ถ้ารหัสผิด ดังนั้นถ้าที่เก็บไฟล์ถูกสร้างขึ้นมาแล้ว แปลว่ารหัสถูกต้อง และสาเหตุน่าจะอยู่ที่ปลายทางที่ระบบชี้ไปหามากกว่ารหัสผ่าน

เพิ่มชื่อโดเมนที่สองสำหรับ API เพื่อแยกการล็อกอินสองแอป

ตอนนี้การล็อกอินแอป จป. จะทำให้หลุดจากแอปผู้รับเหมาในเบราว์เซอร์เดียวกัน เพราะคุกกี้ใบเดียวที่ผูกกับโดเมนหลักหมายถึงหนึ่งเซสชัน ฝั่งเซิร์ฟเวอร์แก้เสร็จแล้ว ที่เหลือเป็นงานตั้งค่าระบบ

  1. เพิ่มระเบียน DNS และกฎเชื่อมต่อสำหรับ api-safety.e-safework.com ให้ชี้ไปที่เครื่องเดิม
  2. ตั้งค่าที่อยู่ API ของแอป จป. ให้ชี้ไปยังชื่อใหม่ เป็นการตั้งค่าในหน้าโปรเจกต์ ไม่ใช่การแก้โค้ด
  3. บนเซิร์ฟเวอร์ ยกเลิกค่า COOKIE_DOMAIN และตั้ง COOKIE_SAMESITE=Lax

ควรทดสอบในเบราว์เซอร์จริงก่อนหนึ่งอย่าง การแก้นี้ตั้งอยู่บนสมมติฐานว่าคุกกี้แบบผูกกับโฮสต์เดียว ยังถูกส่งไปกับคำขอที่มาจากโดเมนย่อยเดียวกันได้ ซึ่งควรจะจริง เพราะทั้งสองอยู่ใต้โดเมนเดียวกัน แต่โค้ดเดิมเคยสมมติตรงกันข้ามไว้ และถ้าสมมติฐานเดิมถูก ทางเลือกอีกทางอาจถูกเบราว์เซอร์บางตัวตัดทิ้งกลางกะ

แปลงไฟล์แผนผังโรงงานเป็น PNG ก่อนอัปโหลด

ระบบรับเฉพาะไฟล์ภาพ คือ PNG, JPEG และ WebP ส่วน PDF และ HEIC ถูกปฏิเสธโดยตั้งใจ เพราะแผนที่แสดงผลด้วยแท็กภาพธรรมดา และเวอร์ชันแผนผังที่แปลงมาไม่ดีจะกลายเป็นของถาวรบนแผนที่ความปลอดภัย ผู้ที่ส่งแผนผังต้องแปลงเป็น PNG เอง หรือถ่ายรูปแผนผังที่พิมพ์ไว้แล้วใช้ฟังก์ชันปรับมุมสี่มุมในหน้าอัปโหลด

ตั้งชื่อแผนผังและปักหมุด — อย่างตั้งใจ และในวันที่เลือกไว้

รอบที่ 4 ปิดใช้งานแผนผังสถานที่เดิมทุกแผ่น และทิ้งตำแหน่งใบอนุญาตแบบเดิมทั้งหมด ระบบจริงจึง ไม่มีแผนผังที่เปิดใช้งานอยู่และไม่มีหมุดเลย แผนที่ความเสี่ยงจะไม่มีอะไรให้แสดง และไม่มีผู้รับเหมาคนใดถูกบังคับให้เลือกหมุด จนกว่าฝ่ายความปลอดภัยจะตั้งชื่อแผนผัง เปิดใช้งาน และปักหมุด การกระทำข้อที่สามนี้ยังเป็นตัวเปิด PERMIT_POSITION_REQUIRED สำหรับการส่งใบอนุญาตของผู้รับเหมาทุกราย จึงควรทำในวันที่แจ้งผู้รับเหมาไว้แล้ว ไม่ใช่ทดลองบนระบบจริง

แจ้งผู้ตรวจสอบว่าผู้รับเหมาอ่านบันทึกของเขาได้แล้ว — สร้างแล้ว แต่ยังควรพูดตรง ๆ ด้วย

สร้างเสร็จ 2026-09-12 (ครึ่งฝั่ง จป. ของ 112, dfe4e96e): ตอนนี้ข้อความแจ้งอยู่บนหน้าเริ่มต้นใช้งาน ของผู้ตรวจสอบ และข้างช่องบันทึกใน InspectorVisitPage แล้ว เก็บหัวข้อนี้ไว้เพื่อเตือนว่าข้อความในแอป ไม่ใช่สิ่งทดแทนการพูดตรง ๆ ก่อนติดตั้งรุ่นถัดไป — ผู้ตรวจสอบที่อ่านข้อความนี้หลังจากเขียนบันทึกตรงไปตรงมาไปแล้ว ก็สูญเสียสิ่งที่เรื่องนี้ตั้งใจป้องกันไปแล้ว

ตรวจบัตร Gas Testing บนระบบจริง

รอบที่ 4 ตัดชนิดบัตร Gas Testing ออก — ตอนนี้ชนิดบัตรแต่ละชนิดตรงกับใบอนุญาตหนึ่งประเภทพอดี ฐานข้อมูลสำหรับพัฒนาไม่มีบัตรชนิดนี้ แต่ ยังไม่เคยตรวจบนระบบจริง เพราะงานที่ทำการเปลี่ยนนี้เข้าถึงระบบจริงไม่ได้ บัตร Gas Testing ยังอยู่เป็นข้อมูลได้ แต่จะไม่ผ่านด่านของใบอนุญาตใดเลยเมื่อเปิดการบังคับชนิดบัตร ให้นับจำนวนก่อนที่จะมีใครเปิด CERT_TYPE_REQUIRED

ติดตั้ง API กับแอป จป. ไปพร้อมกัน

รูปแบบรายการตรวจ PPE แบบใหม่ของ API (รอบที่ 4 ตั๋วงาน 120) จะปฏิเสธรูปแบบเก่าของแอปผู้ตรวจสอบ ด้วยรหัส PPE_CHECKLIST_EMPTY แม้จะเป็นความล้มเหลวที่เห็นชัด ไม่ใช่เงียบ ๆ แต่ก็ยังทำให้ผู้ตรวจสอบทุกคน ส่งรายงานตรวจเยี่ยมไม่ได้ ห้ามติดตั้ง API บนระบบจริงก่อนแอป จป.

สำรองข้อมูลออกนอกเครื่องก่อนติดตั้งเวอร์ชันที่มีการแก้โครงสร้างฐานข้อมูล

สคริปต์สำรองข้อมูลทำงานทุกคืน และในสคริปต์เองก็เขียนไว้ว่าทั้งไฟล์สำรองฐานข้อมูลและไฟล์แนบ อยู่บนดิสก์ลูกเดียวกัน ก่อนติดตั้งเวอร์ชันที่มีการแก้โครงสร้างฐานข้อมูล ให้สำรองใหม่แล้วคัดลอกออกไปเก็บที่อื่นด้วย เพราะการแก้โครงสร้างย้อนกลับอัตโนมัติไม่ได้ ไฟล์สำรองคือทางย้อนกลับทางเดียวจริง ๆ

รอการตัดสินใจ

จะเปิดการบังคับชนิดบัตรเมื่อไร

ข้อนี้มีผลต่อความปลอดภัยโดยตรง ตามค่าเริ่มต้น ชนิด ของบัตรไม่มีผลต่อการตัดสินใด ๆ ระบบตรวจเพียงว่าผู้ปฏิบัติงานมีบัตรที่ยังไม่หมดอายุ บัตรผิดชนิดจึงผ่านด่านของงานร้อนได้ ตอนนี้รายการชนิดบัตรกำหนดและสร้างเสร็จแล้ว คือสามชนิดพอดี หนึ่งชนิดต่อใบอนุญาตหนึ่งประเภท (งานร้อน ที่อับอากาศ ทำงานบนที่สูง — Gas Testing ถูกตัดออกในรอบที่ 4) และแสดงเป็นรายการให้เลือกในฟอร์มใบรับรองทุกฟอร์ม ด่านตรวจสร้างเสร็จแล้ว ทั้งตอนตรวจก่อนส่งใบอนุญาตและตอนสแกนเข้าพื้นที่ โดยปิดไว้จนกว่าจะตั้ง CERT_TYPE_REQUIRED

สิ่งที่ยังต้องรอคนคือ การตรวจข้อมูลบัตรที่บันทึกไว้แล้ว — รวมถึงการนับบัตร Gas Testing บนระบบจริงข้างต้น — แล้วจึงตัดสินใจเปิดใช้ ทันทีที่เปิด ผู้ปฏิบัติงานที่ชนิดบัตรไม่ตรงจะถูกบล็อกจากใบอนุญาตที่วันนี้ยังทำได้

จะบังคับแจ้ง PPE หรือไม่

รอบที่ 4 เพิ่มการแจ้ง PPE ในขั้นที่ 5 ของผู้รับเหมา และให้ ไม่บังคับ ใบอนุญาตที่ไม่ได้แจ้งอะไรเลยยังส่งได้ การตั้ง PPE_REQUIRED จะทำให้ใบอนุญาตที่ไม่ได้แจ้ง PPE ถูกปฏิเสธตอนส่ง ค่าเริ่มต้นปิดอยู่ด้วยเหตุผลเดียวกับด่านชนิดบัตร — กฎที่ปฏิเสธงานได้ต้องถูกเปิดอย่างตั้งใจ เมื่อผู้รับเหมาเริ่มแจ้งกันจริงแล้ว

หน้าจอรายละเอียดควรจัดแท็บอย่างไร — ตัดสินและสร้างแล้ว

รอบที่ 4 ตัดสินแล้ว (2026-09-11) ว่า ใช้แท็บทุกหน้า ยกเว้นเรื่องเร่งด่วนและเรื่องที่เกี่ยวกับการแจ้งเตือน ซึ่งยังคงเป็นแถบตายตัวอยู่เหนือแท็บ ข้อนี้แคบลงจากข้อสรุปเดิมที่ว่า "ส่วนที่เกี่ยวกับความปลอดภัยทุกส่วนต้องอยู่นอกแท็บ" ให้เหลือเฉพาะสิ่งที่น่าตกใจ ณ ขณะนี้ — บันทึกเหตุฉุกเฉิน ใบอนุญาตที่ทับซ้อนอยู่ ค่าก๊าซที่เลยกำหนด — กรณีปกติจึงเป็นหน้าแท็บที่สะอาดตา หน้ารายละเอียดของทั้งสองแอปถูกเปลี่ยนในวันเดียวกัน

ไม่ได้รอใคร

บันทึกไว้เพื่อไม่ให้เข้าใจผิดว่าติดขัด ทุกรายการที่เคยอยู่ในตารางนี้สำหรับรอบที่ 4 ตอนนี้สร้างเสร็จแล้ว ยกเว้นรายการเดียวด้านล่าง — ตรวจสอบกับข้อสรุปของแต่ละตั๋วงานเอง ไม่ได้เดาจากแผนที่งาน

รายการคืออะไรตั๋วงาน
รายการออฟไลน์บันทึกเวลาที่เกิดขึ้นจริงการเช็คอิน/เช็คเอาต์หรือค่าอากาศที่เข้าคิวไว้ ถูกบันทึกเวลาตอนซิงก์ ไม่ใช่เวลาที่เกิดขึ้น126

ปิดไปแล้วนับตั้งแต่ตรวจสอบครั้งก่อน: การขอปิดงานของผู้รับเหมาและคิวคำขอปิดงานของ จป. (098 ครบทั้งสองฝั่งแอป); การตัดเมนูของ จป. และผู้ตรวจสอบ (110 ปิดเหลือห้า/สามรายการ); ผู้รับเหมาอ่านบันทึกการตรวจเยี่ยม (119 ฝั่งหน้าจอ ผ่านแท็บรายงานของ 112); เริ่มการตรวจเยี่ยมจากประวัติ (ครึ่งฝั่ง จป. ของ 101); เครื่องหมายเตือนบนแผนที่ความเสี่ยง (ครึ่งฝั่ง จป. ของขั้นที่ 3 ของ 108); บริการ socket และตัวเลขแจ้งเตือนแบบสด (109 ครบทั้งสามฝั่ง); รายงานใบอนุญาต / หน้าสำหรับพิมพ์ (112 ครบทั้งสองฝั่งแอป)

บันทึกฉบับเต็มอยู่ที่ไหน

ระบบติดตามงานฉบับเต็มอยู่ในโฟลเดอร์ docs/wayfinder/ ของโปรเจกต์ โดยบันทึกทุกการตัดสินใจพร้อมเหตุผลและทางเลือกที่ถูกปฏิเสธไว้ด้วย รอบที่ 4 อยู่ในไฟล์ map-round-4-pins-closure-and-the-inspector-menu.md ส่วนภาพรวมจากฝั่งระบบที่ติดตั้งจริงดูได้ที่ สถานะปัจจุบันและสิ่งที่ติดขัด (ภาษาอังกฤษ)