Green Logistics Holding

บันทึกการปรับปรุง

สิ่งที่เปลี่ยนในแต่ละรอบ deploy ของระบบ เรียงรุ่นใหม่สุดก่อน

รุ่นที่ใช้อยู่

1.0.0.14

deploy เมื่อ 06 พ.ย. 2569

1.0.0.14ใช้อยู่ตอนนี้

deploy เมื่อ 06 พ.ย. 2569 · 5 รายการ

หน้าใหม่ "ช่วงเวลาว่างของ พจส." และคอลัมน์ช่วงว่างบนกระดานพนักงานขับรถ · ระบบแยกกะขับรถ (จาก Excel) ออกจากกะทำงานจริง (จาก TMS) · TMS ส่งตารางกะมาทับค่าที่นำเข้าจาก Excel ไม่ได้

ใหม่
  • หน้า "ช่วงเวลาว่างของ พจส." แสดงเวลาว่างของแต่ละคนในวันที่เลือก = กะทำงานจริง หักกะขับรถและช่วงที่ขับจริง (เช็คอิน → รับรถ → ส่งมอบ) · มีแถบเวลา สรุปจำนวนคนที่มีเวลาว่าง และตัวกรอง · แสดงอย่างเดียว ไม่มอบหมายงาน และไม่ใช่ตัวชี้วัดผลงานรายคนช่วงเวลาว่างของ พจส.
  • กระดานพนักงานขับรถ: คอลัมน์ "ช่วงว่าง" ในแท็บทั้งวัน (ชั่วโมงรวมและช่วงเวลา) และในหน้าต่างรายละเอียดของแถวมีกะทำงานจริง ช่วงว่าง และแถบเวลา · ถ้ากะทำงานจริงยังเป็นค่าสมมติจะมีป้าย "ค่าสมมติ" · ถ้าไม่มีข้อมูลหรือลางานจะบอกเหตุ ไม่เดาว่าว่างกระดานพนักงานขับรถ
  • ตารางกะเก็บกะทำงานจริงของ TMS แยกคอลัมน์ พร้อมที่มาของข้อมูล (TMS หรือค่าสมมติ = เริ่มกะขับรถ + 12 ชม.) · เมื่อ TMS ส่งตารางกะมา ค่าจริงจะมาแทนค่าสมมติเองช่วงเวลาว่างของ พจส.
เปลี่ยนแปลง
  • กะการขับรถ (จากตารางกะ Excel) แยกจากกะทำงานจริง (จาก TMS ประมาณ 12 ชม.) · เวลาจบของกะการขับรถคำนวณจากโมเดล (8 ชม. หรือ 12 ชม.) ทุกหน้าที่ใช้กะจึงได้ค่าเดียวกัน (กระดาน การแจกงาน ด่านเช็คอิน การตรวจไม่มารายงานตัว ปฏิทินกำลัง)กระดานพนักงานขับรถตารางกะคนขับ
  • ตารางกะที่นำเข้าจาก Excel ไม่ถูก TMS ทับอีก: รถ รถหลัก โมเดล หมายเลขสล็อต วันหยุดประจำสัปดาห์ และเวลากะขับรถคงตาม Excel · ช่องอื่น (เช่น สถานะ) TMS ยังอัปเดตได้ · การส่งตารางกะจาก TMS ไม่ทำให้เกิดแถวซ้ำของคนเดิมในเดือนเดียวกัน และคำตอบจะบอกเมื่อมีค่าที่คงไว้ตารางกะคนขับข้อมูลหลัก
สำหรับผู้ดูแลระบบ
  • ⚠ รอบนี้ **มีการเปลี่ยนฐานข้อมูล 1 รายการ: เพิ่ม 3 คอลัมน์ในตาราง driver_shift_assignments** (work_shift_start · work_shift_end · work_shift_source) — **ต้องรัน npm run db:add-work-shift -- --apply บน UAT ก่อนเปิดโค้ดใหม่** ไม่งั้นกระดานพนักงานขับรถและตารางกะอ่านข้อมูลไม่ได้ · เพิ่มคอลัมน์แบบไม่ล็อกตาราง ไม่แตะข้อมูลเดิม รันซ้ำได้
  • ถ้าต้องการให้หน้าช่วงว่างมีข้อมูลก่อนที่ TMS จะส่งตารางกะ: npm run db:fill-work-shift -- --apply เติมกะทำงานจริง = เริ่มกะขับรถ + 12 ชม. ให้ทุกแถว ACTIVE ที่ยังว่าง (ติดที่มา "ค่าสมมติ") · ไม่รันก็ได้ หน้าจะขึ้น "ยังไม่มีข้อมูลกะทำงานจริง" จนกว่า TMS จะส่ง
  • TMS หยุดส่ง driver-shifts อยู่จนกว่าระบบนี้พร้อม — หลัง deploy ต้องแจ้ง TMS ให้ส่งตามปกติ · ไม่มีสิทธิ์ใหม่ พารามิเตอร์ใหม่ หรือ env ใหม่

1.0.0.13

deploy เมื่อ 05 พ.ย. 2569 · 8 รายการ

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

ใหม่
  • สรุปสิ้นวันแยกเป็น 4 แท็บ: รายงานสิ้นวัน · กรอกยอดและปิดวัน · ส่วนต่างแผนกับจริง · แผนเทียบงานจริง — แต่ละแท็บมีช่วงวัน (และมุมการนับถ้าเกี่ยวข้อง) ของตัวเอง ไม่ปนกัน · หัวแท็บมีป้ายตัวเลขเตือนเรื่องที่ต้องลงมือ (จำนวนวันที่ยังไม่ปิด · ยอดที่ผูกแผนไม่ได้และท่าที่มีส่วนขาด · รายการแผนเทียบงานจริงและแผนอนุมัติใกล้หมด) นับ 7 วันล่าสุด · แท็บอยู่ใน URL เปิดลิงก์ตรงแท็บได้สรุปสิ้นวัน
  • รายงานสิ้นวันเลือกวันและมุมการนับ (วันออกจากต้นทาง / วันทางบัญชี) ได้เองในการ์ด ไม่เกี่ยวกับตัวกรองช่วงวัน · เปิดมาที่ "เมื่อวาน" เพราะ Planner ปิดยอดหลังวันนั้นผ่านไปแล้ว · หัวการ์ดบรรทัดเดียว · ส่วนต่างใช้สี: ขนขาด = แดง ขนเกิน = เขียว (การ์ดตัวเลขและตารางรายท่า) · ส่วนขาดแสดงเป็นบรรทัดเสริมใต้ "ส่วนต่าง" เฉพาะเมื่อไม่ซ้ำกับส่วนต่างสรุปสิ้นวัน
  • รายงานสิ้นวัน: ข้อ "ส่วนขาด" ในรายการต้องทำต่อบอกคำแนะนำรายล็อต × ท่า จากขาดสะสม — ขาดสะสมเทียบแผนที่ผ่านมา · อัตราขนจริงเทียบแผน 7 วันล่าสุด · ที่ต้องขนอีกเทียบแผนที่เหลือ · ที่ว่างท้ายแผน แล้วสรุปว่า "เฝ้าดู" / "เกลี่ยเข้าแผนที่เหลือได้" / "ควรทบทวนแผนทั้งล็อต" พร้อมเหตุผล · เป็นคำแนะนำ ระบบไม่แก้แผนเอง · ยังไม่รวมกำลังรถ/คน-กะ · เกณฑ์ (ตั้งต้น 5% ของแผนที่ผ่านมา · ย้อนหลัง 7 วัน) ปรับได้ที่หน้าพารามิเตอร์การวางแผนสรุปสิ้นวันพารามิเตอร์การวางแผน
  • กระดานพนักงานขับรถ: ค้นด้วยชื่อ พจส. ได้ (ชื่อดึงสดจาก TMS ไม่เก็บค่า · ดึงไม่ได้จะบอกสถานะ) · ทางลัดไปแผนแจกงานล่วงหน้า (และกลับ) · หางพ่วงล่าสุดพร้อมที่มาในหน้าต่างรายละเอียดแถว · สถิติจำนวนรถที่ปล่อยสูงสุดต่อชั่วโมงบนหัวกระดาน · หน้าต่างปลายทางบอกเหตุผลที่เปลี่ยนท่าเป็นภาษาคนอ่านง่ายกระดานพนักงานขับรถแผนแจกงานล่วงหน้า
  • ผู้ดูแลระบบสร้างบทบาทใหม่เองได้ที่แท็บ Permission Matrix ของหน้าผู้ใช้งานและสิทธิ์ — ปุ่ม "เพิ่มบทบาท" ตั้งรหัส/ชื่อ/คำอธิบาย แล้วติ๊กสิทธิ์ในเมทริกซ์ · ให้ได้เฉพาะสิทธิ์ที่ตัวเองมี · แก้/ลบได้เฉพาะบทบาทที่ตัวเองสร้าง (ลบได้เมื่อไม่มีผู้ใช้ถืออยู่) · บทบาทของระบบแก้ได้เฉพาะ Super Admin · ผู้ที่ไม่มีสิทธิ์แก้เห็นเมทริกซ์แบบอ่านอย่างเดียวผู้ใช้งานและสิทธิ์
เปลี่ยนแปลง
  • หน้าสรุปสิ้นวันกระชับขึ้น: ถอดกล่องฟ้า "กำลังนับด้วย …" · บรรทัด "วิธีวัด" · กล่องเขียว "ไม่มียอดที่ผูกกับแผนไม่ได้ค้างอยู่" (แสดงกล่องยอดค้างเฉพาะเมื่อมีจริง) · การ์ดตัวเลขขึ้นก่อนคำเตือน · การ์ดส่วนต่างใช้ชื่อสั้นว่า "ส่วนต่าง" พร้อมบอก "ขนขาด/ขนเกิน" และสี · คำเตือนแผนที่ยังไม่รายงานยอดจริงบอกวันที่ของแถวและเขียนให้อ่านง่ายขึ้นสรุปสิ้นวัน
  • แยก "ผู้ดูแลระบบสูงสุด" (Super Admin) ออกจาก "ผู้ดูแลระบบ" (Admin): Admin ยังจัดการผู้ใช้และงานระบบทั่วไปได้ แต่จัดการ API Key · ดูบันทึกการตรวจสอบ · แก้สิทธิ์ของบทบาท · ตั้งค่า AI · กฎทางธุรกิจและพารามิเตอร์การวางแผน ไม่ได้ — เป็นของ Super Admin · การให้บทบาทแก่ผู้ใช้ทำได้เฉพาะบทบาทที่สิทธิ์ไม่เกินของตัวเอง · บทบาทผู้ดูแลระบบสูงสุดมอบผ่านหน้าผู้ใช้ไม่ได้ (ผู้ดูแลเครื่องมอบ) และลด/ระงับบัญชีที่เป็น Super Admin คนสุดท้ายไม่ได้ผู้ใช้งานและสิทธิ์
แก้ไข
  • ใบชั่งปลายทางที่ระบุ lot ไม่ได้บอกเหตุผลจริงรายใบ (ไม่มีการโหลดถ่านของหางนั้น · ชั่งซ้ำของโหลดเดียว · จับคู่ใบงานไม่ได้ ฯลฯ) แทนที่จะขึ้น "ไม่มีท่า" ทุกใบ · ใบชั่งซ้ำของการโหลดเดียวกัน: ใบแรกนับเป็นของใบงาน ใบหลังแสดงว่าเป็นการชั่งซ้ำและไม่นับซ้ำ (เดิมไม่เลือกให้ทุกใบ)สรุปสิ้นวันกระดานปลายทางท่าตูม
สำหรับผู้ดูแลระบบ
  • ⚠ รอบนี้ **มีการเปลี่ยนฐานข้อมูล 1 รายการ: คอลัมน์ roles.created_by** (ผู้สร้างบทบาท) — **ต้องรัน npm run db:add-role-creator -- --apply บน UAT ก่อนเปิดโค้ดใหม่** เพราะโค้ดใหม่อ่านคอลัมน์นี้ทุกครั้งที่อ่านบทบาท **ฐานที่ไม่มีคอลัมน์ = ล็อกอินไม่ได้** · เพิ่มด้วย ALGORITHM=INSTANT ไม่ล็อกตาราง ไม่แตะข้อมูลเดิม รันซ้ำได้
  • ⚠ **ต้องตั้ง Super Admin อย่างน้อย 1 คน (แนะนำ 2) ด้วย npm run db:add-super-admin -- --promote=<ชื่อผู้ใช้> --apply** ก่อนหรือพร้อมเปิดโค้ดใหม่ — สคริปต์สร้างบทบาท SUPER_ADMIN (ทุกสิทธิ์) · ย้ายผู้ใช้ที่ระบุไปบทบาทนั้น · แล้วถอดสิทธิ์ API Key / Audit Log / แก้สิทธิ์ Role / ตั้งค่า AI / กฎทางธุรกิจ ออกจากบทบาท ADMIN (ถอดอย่างเดียว) — ไม่รันหรือไม่ระบุผู้ใช้ = ไม่มีใครแก้สิทธิ์ Role หรือจัดการ API Key ได้ · ผู้ใช้ที่ยังเป็น Admin จะเข้าเมนู API Key / Audit Log / กฎทางธุรกิจ ไม่ได้ทันที (สิทธิ์อ่านจากฐานทุกคำขอ) — แจ้งผู้ใช้ก่อน · รัน npm run db:sync-permissions -- --apply เพื่อเติมสิทธิ์ใหม่ role:create ให้บทบาท ADMIN
  • พารามิเตอร์ใหม่ 2 ค่า (หมวด RECONCILE): SHORTFALL_CUMULATIVE_WARN_PCT = 5 · SHORTFALL_RATE_DAYS = 7 — เติมด้วย npm run db:sync-params -- SHORTFALL_CUMULATIVE_WARN_PCT SHORTFALL_RATE_DAYS --apply (ไม่รัน = ใช้ค่าตั้งต้นเดียวกัน แต่แก้ที่หน้าพารามิเตอร์ไม่ได้) · ไม่มีตารางใหม่ ตัวแปร env หรือ dependency · API ที่ TMS เรียก (/api/v1) สัญญาไม่เปลี่ยน

1.0.0.12

deploy เมื่อ 04 พ.ย. 2569 · 9 รายการ

หน้าสรุปสิ้นวันกรอกยอดขนจริงรายวันและปิดวันได้ในที่เดียว: เทียบใบชั่งปลายทางรายลาน · แถวสรุปสิ้นวัน (ขนรวม/โรงไฟฟ้าใช้ไป แผนเทียบจริง) · กรอกยอดโรงไฟฟ้าใช้ไปตอนปิดวัน · เก็บแผนการใช้ถ่านหินไว้ก่อนยอดจริงมาทับ · แสดงล็อตของใบงาน · ระบบวางแผนรายท่าเคารพกำลังคน-กะ

ใหม่
  • สรุปสิ้นวัน: การ์ด "ยอดขนจริงรายวัน" แสดงรายการตามแผนที่ถึงกำหนดแล้วแต่ยังไม่มียอดจริง พร้อมตัวเลขแผน — กรอกยอดจริงที่ช่องของแถวแล้วกดบันทึก (ไม่ได้ขนให้กรอก 0 เอง) · มีปุ่ม "นอกแผน" สำหรับยอดที่ขนนอกเหนือจากแผน (ต้องบอกเหตุผล) · ซ่อนแถวแผน 0 ตัน · ไม่มีปุ่มลัด "ขนตามแผน/ไม่ได้ขน" โดยตั้งใจ เพราะยอดจริงมักไม่เท่าแผนสรุปสิ้นวัน
  • สรุปสิ้นวัน: ตารางเดียวเทียบยอดที่กรอกกับผลรวมใบชั่งปลายทางของโรงไฟฟ้า — **แยกแถวตามล็อต × ลาน** ทุกแถวมีสถานะของตัวเอง (ตรงกัน / ต่างกัน / มีแต่บัญชี / มีแต่ใบชั่ง) พร้อมส่วนต่าง · ใบชั่งที่ระบุลานไม่ได้แสดงเป็นแถว "ไม่ระบุลาน" ไม่ถูกยัดเข้าลานใดลานหนึ่ง · มีรายการใบชั่งที่ระบุล็อตไม่ได้ พร้อมเหตุผลและวิธีแก้รายใบสรุปสิ้นวัน
  • สรุปสิ้นวัน: แถว "สรุปสิ้นวัน" ท้ายทุกวัน แสดง 2 บรรทัด — ขนรวมทุกท่า/ลาน (แผน · ขนจริง สีเขียว) และโรงไฟฟ้าใช้ไป (แผน · ใช้จริง สีแดง) · ปุ่ม "ปิดวัน" อยู่ท้ายแถวนี้ กดแล้วเปิดหน้าต่างบอกสิ่งที่ต้องทำก่อนปิดวัน (แถวแผนที่ยังไม่กรอก · ยอดที่ผูกแผนไม่ได้ · ต้องติ๊กรับทราบพร้อมเหตุผลถ้ายังมีค้าง) — แผงปิดวันเดิมถูกถอดแล้วสรุปสิ้นวัน
  • สรุปสิ้นวัน: กรอกยอดถ่านหินที่โรงไฟฟ้าใช้ไป (ของจริง) ในหน้าต่างปิดวัน — ยังไม่มียอดจริงของวันนั้น = ต้องกรอกก่อนปิดวัน (ไม่ได้ใช้ให้กรอก 0) · มียอดอยู่แล้ว = เติมให้ แก้ได้ · กดยืนยันปิดวันแล้วระบบบันทึกยอดใช้จริงและคำนวณคงคลังต่อยอดใหม่ให้ · วันข้างหน้ากรอกไม่ได้ · บัญชีที่ไม่มีสิทธิ์กรอกมือไม่ถูกบังคับสรุปสิ้นวัน
  • แสดง "ล็อต" ของใบงาน (จากจุดรับสินค้าที่ TMS ส่งมา) — ใต้ท่าในคอลัมน์ "ท่ารับถ่านหิน" ของกระดานพนักงานขับรถ และคอลัมน์ล็อตใหม่ในหน้าใบงานประจำวัน · ใบที่ระบุล็อตไม่ได้แสดงสั้น ๆ พร้อมเหตุผลที่ tooltipกระดานพนักงานขับรถใบงานประจำวัน
เปลี่ยนแปลง
  • แผนการใช้ถ่านหินของโรงไฟฟ้าถูกเก็บไว้ก่อนที่ยอดจริงมาทับ — เห็น "แผน เทียบ จริง" ของแต่ละวันที่แถวสรุปสิ้นวันได้ (เดิมกรอกยอดจริงแล้วแผนของวันนั้นหาย) · ตั้งแผนของ 29 ต.ค. ถึงวันที่ deploy เป็น 2,000 ตัน/วัน · วันก่อนหน้านั้นที่เป็นยอดจริงอยู่แล้วขึ้น "ไม่มีแผนเดิม" (ไม่เดา) · ไม่ใช้ตารางเดินเครื่องแทนแผนสรุปสิ้นวัน
  • ยอดขนจริงที่คำนวณจากใบชั่งปลายทางใช้ "วันที่เริ่มกะของใบงาน" เป็นวันของยอด — เช่น เริ่มกะวันที่ 2 เวลา 23:00 ขนถึงโรงไฟฟ้าวันที่ 3 เวลา 05:00 นับเป็นยอดของวันที่ 2 (เดิมนับตามวันที่กดรับถ่านหิน ทำให้กะดึกตกไปวันถัดไป)สรุปสิ้นวันกระดานปลายทางท่าตูม
  • ระบบวางแผนรายท่า ("ให้ระบบวางแผน" บนแผนรับแยกท่า) เคารพกำลังคน-กะของแต่ละวัน — ยอดรวมต่อวันทุกท่าทุกล็อตไม่เกินกำลังที่มีจริง และพยายามให้ยอดรายวันคงที่ (ผลคือแผนอาจยาวขึ้น) · tooltip ของกราฟความต้องการเที่ยวแสดงปริมาณถ่านหินด้วยแผนรับแยกท่า
แก้ไข
สำหรับผู้ดูแลระบบ
  • ⚠ รอบนี้ **มีการเปลี่ยนโครงสร้างฐานข้อมูล 1 รายการ: คอลัมน์ plant_demands.planned_consume_tons** (เก็บแผนการใช้ถ่านหินไว้ก่อนยอดจริงมาทับ) — **ต้องรัน npm run db:add-plant-demand-plan -- --apply บน UAT ก่อนเปิดโค้ดใหม่** เพราะโค้ดใหม่อ่านคอลัมน์นี้ทุกครั้งที่อ่านคงคลัง/แผนรับ ฐานที่ไม่มีคอลัมน์ = หน้าเหล่านั้นล้ม · เพิ่มคอลัมน์ด้วย ALGORITHM=INSTANT ไม่ล็อกตาราง ไม่แตะข้อมูลเดิม รันซ้ำได้ · โค้ดเดิมไม่อ่านคอลัมน์นี้ จึงรันล่วงหน้าก่อนเปิดหน้าต่าง deploy ได้ (ขั้นตอนเต็ม docs/DEPLOY-UAT-1.0.0.12.md · docs/DEPLOY-PLANT-DEMAND-PLAN.md)
  • สคริปต์ยังเติมแผนการใช้ย้อนหลัง: วันที่ 2026-10-29 ถึงวันที่รัน = 2,000 ตัน/วัน (ปรับได้ด้วย --from --through --plan) และวันอื่นที่ยอดใช้ยังเป็นแผนอยู่ = ยอดนั้น · เติมเฉพาะแถวที่ยังว่าง ไม่ทับแผนที่มีแล้ว · ตรวจแฮชของคอลัมน์เดิมก่อน/หลัง
  • ไม่มีสิทธิ์ ตัวแปร env โมดูล API หรือ dependency ใหม่ · API ที่ TMS เรียก (/api/v1) สัญญาไม่เปลี่ยน · endpoint ภายในใหม่ 2 ตัวสำหรับหน้าสรุปสิ้นวัน (กรอกยอดขนจริงรายวัน · กรอกยอดโรงไฟฟ้าใช้ไป) ใช้สิทธิ์ ingest:manual ที่มีอยู่เดิม · การปิดวันใช้สิทธิ์อนุมัติแผนเดิม

1.0.0.11

deploy เมื่อ 03 พ.ย. 2569 · 10 รายการ

กระดานพนักงานขับรถใช้งานง่ายขึ้น: อัปเดตเองและติ๊กปิดได้ · ค้นด้วยเลขหาง · ตัวกรองและคำอธิบายอ่านง่ายขึ้น · เห็นว่าใครได้ใบงานทั้งที่ยังไม่ผ่านด่านความพร้อม · แก้ตารางกะจาก TMS ที่เคยทับโมเดลกะ · ปรับข้อความ Alert เป็นภาษาคน

ใหม่
  • กระดานพนักงานขับรถ: อัปเดตข้อมูลเองโดยไม่ต้องกดรีเฟรช — แท็บ "ทั้งวัน" ทุก 30 วินาที (เฉพาะวันนี้) แท็บ "ช่วงเช็คอิน / ต้องจัดการ" ทุก 60 วินาที · มีช่องติ๊กเปิด/ปิดใต้แท็บ (ใช้ค่าเดียวกันทั้งสองแท็บ) และบอก "อัปเดตล่าสุดเมื่อกี่วินาทีก่อน" · พักเองตอนเปิดหน้าต่างรายละเอียด · ถ้าอัปเดตรอบหนึ่งไม่สำเร็จ จะคงข้อมูลเดิมและแจ้งไว้กระดานพนักงานขับรถ
  • กระดานพนักงานขับรถ: ค้นหาด้วยเลขหางรถได้ (ควบคู่รหัส พจส. · รหัสรถ · เลขใบงาน) · ช่องค้นหาย้ายไปท้ายแถวตัวกรองและกว้างขึ้นกระดานพนักงานขับรถ
  • กระดานพนักงานขับรถ: คนที่รายงานตัวแล้วไม่ผ่านด่านความพร้อม แต่ TMS ออกใบงานให้ จะมีข้อความสีเหลือง "ออกใบทั้งที่ยังไม่ผ่านด่านความพร้อม" ใต้สถานะ และขึ้นในหมายเหตุของใบงาน — ระบบยังรับใบตามที่ TMS ส่งเหมือนเดิม ไม่ปฏิเสธ แต่ให้ศูนย์ควบคุมเห็นและตรวจได้ (มีผลกับใบที่ออกตั้งแต่วันนี้เป็นต้นไป)กระดานพนักงานขับรถใบงานประจำวัน
เปลี่ยนแปลง
  • กระดานพนักงานขับรถ: คำอธิบายหน้ากระชับขึ้น — ข้อความใต้หัวข้อบอกว่าหน้านี้แสดงอะไร และเอากล่องข้อความอธิบายกับข้อความท้ายหน้าที่ซ้ำกันออก · แท็บ "ช่วงเช็คอิน" บอกความหมายสีเขียว "ถือคิว" และสีแดง "ไม่ผ่านด่าน" ไว้ใต้หัวข้อ "รายบุคคล"กระดานพนักงานขับรถ
  • กระดานพนักงานขับรถ: การ์ดกะบอกรูปแบบกะของคนในกะนั้นครบ เช่น "โมเดล 2 คนขับ - 2 คน · โมเดล 3 คนขับ - 1 คน" (เดิมโชว์รูปแบบของคนแรกคนเดียวทั้งที่กะเดียวกันมีหลายรูปแบบปนกัน) และบอกว่าถึงเวลาตรวจแล้วใครยังไม่เช็คอินจะถูกนับว่า "ยังไม่มา"กระดานพนักงานขับรถ
  • กระดานพนักงานขับรถ: ตัวกรองและคอลัมน์เปลี่ยนชื่อให้ตรงความหมาย — "ท่ารับถ่านหิน (JC, C-PORT, ...)" · "เทียบแผนท่า" · "เทียบแผนรถ" · ตัวเลือก "เทียบแผน" ทั้งสองแสดงครบทุกป้ายแม้วันนั้นไม่มีแถวนั้น ส่วนสถานะที่ยังไม่เกิดในรูปแบบการทำงานปัจจุบัน (ขาดงาน · ถือคิว · รออนุมัติเปลี่ยนเส้นทาง · ได้รับใบงานแล้ว · ใบที่ระบบแจกเอง) ซ่อนไว้และกลับมาเองเมื่อมีแถวนั้นจริงกระดานพนักงานขับรถ
  • ชื่อด่านความพร้อมแสดงเป็นภาษาคนทุกจุดบนกระดานพนักงานขับรถ แทนรหัสระบบกระดานพนักงานขับรถ
  • ศูนย์รวม Alert: ปรับข้อความของ Alert หลายชนิดให้เป็นภาษาคนอ่านง่ายขึ้น (เฉพาะถ้อยคำ ไม่เปลี่ยนเงื่อนไขการยก Alert)ศูนย์รวม Alert
แก้ไข
  • ตารางกะจาก TMS: เมื่อ TMS ส่งตารางกะของคนเดิมซ้ำโดยไม่ได้ส่งโมเดลกะหรือชั่วโมงต่อกะมา ระบบคงค่าเดิมไว้ ไม่ทับเป็นค่าว่างหรือค่าตั้งต้นอีกข้อมูลหลัก
  • ข้อมูลหลักพนักงานขับรถ: ฟอร์มกรอกมือไม่มีช่อง "ชนิดใบขับขี่" แล้ว และการบันทึกซ้ำไม่ล้างชนิดใบขับขี่ที่มีอยู่ข้อมูลหลัก
สำหรับผู้ดูแลระบบ
  • รอบนี้ **ไม่มีการเปลี่ยนโครงสร้างฐานข้อมูล** ไม่มีตาราง/คอลัมน์/พารามิเตอร์/สิทธิ์ใหม่ และไม่มี dependency ใหม่ — ไม่ต้องรันสคริปต์ฐานข้อมูลใด ๆ ก่อนหรือหลังเปิดโค้ด (ขั้นตอนเต็มใน docs/DEPLOY-UAT-1.0.0.11.md)
  • สถานะที่ซ่อนจากตัวกรองกระดานพนักงานขับรถผูกกับพารามิเตอร์ DISPATCH_ISSUE_AT (ตอนนี้ 1 = ออกใบตอน TMS ส่งขั้นรับรถ) — ถ้าตั้งเป็น 0 (แจกใบตอนเช็คอิน) ตัวเลือก "ถือคิว" "รออนุมัติเปลี่ยนเส้นทาง" "ได้รับใบงานแล้ว" จะกลับมาเอง

1.0.0.10

deploy เมื่อ 02 พ.ย. 2569 · 12 รายการ

เตรียมข้อมูลเริ่มใช้งานจริง: ยอดขนจริงรายวันเทียบกับน้ำหนักที่ชั่งที่โรงไฟฟ้า · การ์ดท่า AYA แยกรายลานและเป็นแผนขนออกจากลาน · แก้การนับยอด AYA ซ้ำในคงคลังและแผนคิวรถ · หน้าจัดคิวรถไม่มีปุ่มจัดคิวแล้ว (อนุมัติแผนรับ = สร้างและอนุมัติแผนคิวรถ) · หน้าแผนรับมีการ์ดวันที่เกินเพดานท่า · กระดานพนักงานขับรถมีสถานะ "หลุดแผน"

ใหม่
  • หน้าสรุปสิ้นวัน: การ์ด "ยอดขนจริงเทียบผลรวมใบชั่งปลายทาง" แสดงต่อ วัน × ท่า × lot ว่ายอดในบัญชีการขนจริงกับผลรวมน้ำหนักสุทธิของใบชั่งที่โรงไฟฟ้าตรงกันหรือไม่ พร้อมส่วนต่าง และจำนวนใบชั่งที่ระบุ lot ไม่ได้ (ตั้งต้นเป็นโหมดแสดงส่วนต่าง บัญชียังเป็นยอดที่รายงานเหมือนเดิม — ผู้ดูแลเปลี่ยนเป็นโหมด "ใบชั่งชนะ" ได้ที่พารามิเตอร์ DELIVERY_BASIS_MODE)สรุปสิ้นวัน
  • โหมด "ใบชั่งชนะ" (ปิดอยู่ตอนเริ่มต้น): วันที่มีใบชั่ง ยอดบัญชี = ผลรวมใบชั่ง ยอดที่ TMS หรือผู้กรอกส่งมาเก็บไว้เทียบ · Planner ทับยอดได้โดยต้องระบุเหตุผล · ใบชั่งที่ระบุ lot ไม่ได้จะขวางการปิดวันสรุปสิ้นวัน
  • แผนรับถ่านหินแยกท่า: การ์ด "วันที่ยอดรวมเกินเพดานท่า" จัดตาม ท่า → วัน → lot พร้อมปุ่มกระโดดจากข้อความเตือน และสลับดู "เฉพาะวันที่เกิน / ทุกวันที่มีแผน" · ข้อความเตือนระบุวันที่ และหน้าต่างแก้ไขไฮไลต์วันที่เกินแผนรับแยกท่า
  • กระดานพนักงานขับรถ: สถานะ "หลุดแผน" เมื่อเลยเวลาเริ่มกะแล้วแต่ยังไม่มีใบงาน (ยังไม่ถึงเวลากะ ลา หรือไม่รู้เวลากะ จะไม่ขึ้นสถานะนี้)กระดานพนักงานขับรถ
  • ข้อมูลรายการ: แท็บ "การเช็คอินพนักงานขับรถ" มีคอลัมน์ชื่อ พจส. (ดึงสดจาก TMS แสดงอย่างเดียว ไม่เก็บ)ข้อมูลรายการ
  • กระดานปลายทางท่าตูม: ค้นหาใบงาน เลือกวันที่ และดูรายการใบงานทั้งหมดของวัน — ตอบ "ใบงานนี้ชั่งหรือยัง" ก่อนส่วนพยากรณ์กระดานปลายทางท่าตูม
เปลี่ยนแปลง
  • ยอดขนจริงของท่า AYA แยกรายลานย่อยได้: ส่งชื่อลาน (หรือรหัสลาน) มากับแต่ละแถว สองลานของ lot เดียวในวันเดียวกันจึงเป็นสองแถว ไม่ชนกันอีก · ฟอร์มกรอกมือ "ยอดขนถ่านหินจริงรายวัน" มีช่อง "ลานย่อย (AYA)" · คำอธิบาย API และเอกสารปรับตามแล้วข้อมูลรายการ
  • แผนรับถ่านหินแยกท่า: ท่า AYA ถือเป็น "แผนขนออกจากลานไปโรงไฟฟ้า" (วัน ETA = วันที่ถ่านอยู่ในลานแล้ว ไม่ต้องวางแผนขนเข้าลาน) · การ์ด AYA แตกเป็นรายลาน แสดงแผนและยอดขนจริงรายวัน พร้อมส่วนต่าง · ป้ายและคำอธิบายหน้าปรับตามนี้แผนรับแยกท่า
  • ข้อความเตือนอายุถ่านหินในกองบอกตรงความหมาย: แยก "ขนออกหลังวันครบกำหนด" ออกจาก "ยังไม่มีแผนขนออก (ค้างในกอง)" และแสดงรายกองในการ์ดของลานนั้นแผนรับแยกท่า
  • จัดคิวรถและคนขับ: ถอดปุ่ม "จัดคิว/อัปเดต" และปุ่มอนุมัติ/ยกเลิกอนุมัติ — การกด "อนุมัติแผน" ของ lot ที่หน้าแผนรับถ่านหินแยกท่า จะสร้างและอนุมัติแผนคิวรถ (รวมคนขับ) ให้ในขั้นเดียว · ปุ่ม "เกลี่ยแผน" และ "ล้างแผน" ยังอยู่ · ข้อความที่เคยชี้ไปปุ่มเหล่านั้นแก้แล้วจัดคิวรถและคนขับแผนรับแยกท่า
แก้ไข
  • คงคลังโรงไฟฟ้าและแผนคิวรถไม่นับยอดขนออกจากลาน AYA ซ้ำ: เดิมยอดของแผนรับ AYA ถูกบวกอีกรอบจากแผนคิวรถ ทำให้คงคลังขึ้นเกินจริงและขึ้นเตือนเต็มความจุหลายวัน · วันที่มีทั้งแผนรับและการเบิกเสริมของ AYA แผนคิวรถรวมเป็นแถวเดียวแล้ว (เดิมการเบิกเสริมเขียนทับแผนรับ ทำให้จองรถต่ำกว่าจริง)แผนรับแยกท่าจัดคิวรถและคนขับ
  • จัดคิวรถไม่เบิกถ่านจากกอง AYA ก่อนวันที่กองเข้าลาน และไม่สร้างรายการเบิกที่ไม่มีกองรองรับจัดคิวรถและคนขับแผนรับแยกท่า
สำหรับผู้ดูแลระบบ
  • ⚠ รอบนี้ **มีการเปลี่ยนโครงสร้างฐานข้อมูล**: เพิ่ม 6 คอลัมน์ว่างได้ในตาราง coal_delivery_actuals (actual_basis · scale_tons · scale_tickets · reported_tons · override_reason · override_by) — **ฐานต้องมีคอลัมน์เหล่านี้ก่อนเปิดโค้ด** (โค้ดอ่านคอลัมน์ใหม่ทุกครั้ง ฐานที่ไม่มี = หน้าและ API ที่อ่านบัญชีการขนจริงล้ม) · ฐานที่นำขึ้นมาจากชุดข้อมูลเริ่มต้นมีครบแล้ว ถ้าใช้ฐานเดิม รัน npm run db:add-delivery-basis -- --apply ก่อน
  • พารามิเตอร์ใหม่ DELIVERY_BASIS_MODE (หมวด RECONCILE · ตั้งต้น 0 = แสดงส่วนต่าง) — ไม่มีแถว = ใช้ค่าตั้งต้น 0 · เติมแถวด้วย npm run db:sync-params -- DELIVERY_BASIS_MODE --apply · ตั้งเป็น 1 (ใบชั่งชนะ) หลังตรวจอัตราระบุ lot ของใบชั่งแล้วเท่านั้น: ต้องกรอก lot ที่จุดขึ้นสินค้า (หน้าข้อมูลหลัก) และให้ TMS ส่งรหัสจุดขึ้นสินค้ามากับใบงาน
  • API ที่ TMS เรียก: OP-08 (coal-delivery) รับฟิลด์ใหม่ที่ไม่บังคับ yardName / yardCode สำหรับท่า AYA — สัญญาเดิมทุกข้อใช้ได้ต่อ (ไม่ส่งลาน = พฤติกรรมเดิม) · ตอนนี้ TMS ยังไม่ได้ส่ง API นี้ ยอดขนจริงเข้าผ่านฟอร์มกรอกมือ
  • ฐานข้อมูล partition รายเดือนของตารางเหตุการณ์ 4 ตาราง (audit_logs · battery_statuses · vehicle_positions · driver_checkins) เป็นตัวเลือก ไม่บังคับในรอบนี้ — โค้ดทำงานได้ทั้งฐานที่แบ่งและไม่แบ่ง partition · ขั้นตอนและข้อควรระวังอยู่ใน docs/RUNBOOK-RESET-AND-PARTITION.md
  • ไม่มีสิทธิ์ใหม่ · ไม่มีโมดูล API ใหม่ · ไม่มีตัวแปร env ใหม่ · ไม่มี dependency ใหม่ (package-lock.json ไม่เปลี่ยน)
  • ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start" ของ release (${PORT:-3014}) และตรวจด้วย grep ก่อนติด tag

1.0.0.9

deploy เมื่อ 28 ต.ค. 2569 · 6 รายการ

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

ใหม่
  • กล่อง "วิธีคำนวณ" ใต้กราฟ: อธิบายตัน → เที่ยว → คน-กะ → รถ พร้อมตัวอย่างตัวเลขจริงของวันที่เที่ยวสูงสุดในช่วงที่เลือก เพื่อให้ทุกฝ่ายเห็นภาพเดียวกัน · หน้าต่างยืนยันอนุมัติแผนแสดงวันที่ไม่พอเป็นเที่ยวด้วยแผนรับแยกท่า
  • กระดานพนักงานขับรถ: คอลัมน์ "รถ (แผน → จริง)" เทียบรถตามตารางกะกับรถที่ TMS ส่งตอนรับรถ พร้อมป้ายบอกผล (ตรงแผน / เปลี่ยนรถ / ยังไม่รับรถ ฯลฯ) และตัวกรองตามป้าย · ใบที่ระบบแจกเองหรือตารางกะใส่ชื่อทีมแทนรหัสรถ จะไม่ขึ้นว่า "ตรงแผน"กระดานพนักงานขับรถ
  • กระดานพนักงานขับรถ: ช่องค้นหา (รหัส พจส. · รหัสรถ · เลขใบงาน) · ตัวกรองรูปแบบกะ · ตัวกรองเทียบแผนท่า · ปุ่มล้างตัวกรองกระดานพนักงานขับรถ
เปลี่ยนแปลง
  • กราฟความต้องการรถรายวันแยกท่า (แผนรับต่อท่า) เปลี่ยนเป็น "จำนวนเที่ยวที่ต้องขนถ่านหินต่อวัน" — เพราะเวลาขาดรถ ลูกค้ายืมรถพร้อมคนขับจากกองอื่นเป็นจำนวนเที่ยว · เส้นสีแดง = เที่ยวที่กองรถรับได้ในแต่ละวัน (คน-กะที่เข้างานจริงตามตารางกะ × 1 เที่ยว/คน-กะ) · วันที่ไม่พอบอกเป็น "ขาด N เที่ยว" · ชี้ที่แท่งเพื่อดูเที่ยวของแต่ละท่า กำลังของวันนั้น และเที่ยวที่ขาดแผนรับแยกท่า
  • ป้ายท่า AYA ในกราฟความต้องการเหลือ "AYA" (ตัดคำว่า "ดึงเพิ่ม" ออก) — มีผลกับกราฟที่หน้าจัดคิวรถและคนขับด้วยแผนรับแยกท่าจัดคิวรถและคนขับ
  • จับคู่ใบชั่งปลายทางกับใบงานโดยไม่มีเพดานเวลา (เดิม 5 ชม.) — จับคู่ด้วยหาง + ใบงานล่าสุดที่โหลดหางนั้นก่อนเวลาชั่ง ไม่ว่าโหลดมานานเท่าไร · ถ้าหางถูกโหลดซ้ำในใบอื่นก่อนมีใบชั่ง จะขึ้นสถานะ "หางถูกโหลดซ้ำ" · สถานะ "เกินเวลายังไม่ชั่ง" และ "ชั่งเกินเวลา" ถูกถอดกระดานปลายทางท่าตูมใบงานประจำวัน
สำหรับผู้ดูแลระบบ
  • รอบนี้ไม่มีการเปลี่ยนโครงสร้างฐานข้อมูล · ไม่มีสิทธิ์ ตัวแปร env โมดูล API หรือ dependency ใหม่ · API ที่ TMS เรียก (/api/v1) ไม่เปลี่ยน — ไม่ต้องแจ้ง TMS · ไม่ต้องรันสคริปต์ฐานข้อมูลก่อนเปิดโค้ด
  • พารามิเตอร์ใหม่ TRIPS_PER_DRIVER_SHIFT (หมวด TRUCK_QUEUE · ตั้งต้น 1) ใช้เฉพาะเส้นกำลังบนกราฟเที่ยว — ไม่มีแถวในฐาน ระบบใช้ค่าตั้งต้น 1 ได้ทันที · ถ้าต้องการแก้ที่หน้า /planning-params ให้รัน "npm run db:sync-params -- TRIPS_PER_DRIVER_SHIFT --apply" (เติมแถวอย่างเดียว ไม่เขียนทับ) · พารามิเตอร์ PLANT_MATCH_MAX_HOURS ถูกถอดออกจากแค็ตตาล็อก (แถวเดิมในฐานถ้ามีไม่ถูกใช้แล้ว ปล่อยไว้ได้) · ตัวเลขขาด/พอบนแผนรับต่อท่า (1 เที่ยว/คน-กะ) อาจต่างจากหน้าจัดคิวรถ (1.15 เที่ยว/คัน/กะ) จนกว่าจะยืนยันเที่ยวต่อกะจริง
  • ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start" ของ release (${PORT:-3014}) และตรวจด้วย grep ก่อนติด tag

1.0.0.8

deploy เมื่อ 27 ต.ค. 2569 · 10 รายการ

ข้อมูลหลักจัดใหม่: ท่าเรือ · ลานย่อย · จุดขึ้นสินค้า · จุดปฏิบัติงาน เป็นตารางเดียวที่ค้นหา/กรองได้ และแก้ครบในหน้าต่างเดียว · เวลาเปิด–ปิดลานย่อยรายวัน + ปฏิทินวันหยุด · ลบลานย่อย/ตารางกะทั้งเดือนที่นำเข้าผิดได้ · พิกัดพื้นที่ย้ายจากกระดานรถระหว่างทางมาไว้ในข้อมูลหลัก · Audit Log ค้นหาง่ายขึ้นและบอกทิศทาง · ความพร้อมก่อนเข้ากะรวมเป็นแท็บของกระดานพนักงานขับรถ

ใหม่
  • เวลาเปิด–ปิดของลานย่อยแยกรายวันในสัปดาห์: ในหน้าต่างแก้ไขลานมีตาราง 7 วัน — กรอกเฉพาะวันที่ต่างจากเวลาปกติ ติ๊ก "ปิด" = ไม่รับรถทั้งวัน · การแนะนำท่าตอนเช็คอินใช้เวลาของวันนั้น · ตารางแสดง "เวลาวันนี้"ข้อมูลหลัก
  • แท็บ "วันหยุดนักขัตฤกษ์" บนข้อมูลหลัก: เพิ่มวันหยุดทีละวันหรือเป็นช่วงวัน (ไม่เกิน 31 วัน) · วันหยุดลานย่อยใช้เวลาของวันอาทิตย์ · ระบบไม่ใส่วันหยุดให้เอง ต้องกรอกในปฏิทินข้อมูลหลัก
  • ลบลานย่อยที่สร้างผิดได้ (ปุ่ม "ลบลานนี้" ในหน้าต่างแก้ไขลาน) — เฉพาะลานที่ไม่มีกองถ่าน แผนรับ ใบงาน หรือจุดขึ้นสินค้าอ้างอยู่ · ต้องใส่เหตุผลและพิมพ์ชื่อลานยืนยัน · ลานที่ใช้งานแล้วให้เปลี่ยนสถานะเป็น "ปิด"ข้อมูลหลัก
  • ลบตารางกะทั้งเดือนที่นำเข้าผิด (เช่น เดือนปี พ.ศ. 2569-10) — ปุ่ม "ลบตารางกะทั้งเดือน" บนแท็บตารางกะคนขับ · ดูก่อนลบเสมอ · เดือนที่ใช้กับวันนี้หรือมีใบงานผูกอยู่ลบไม่ได้ · ต้องใส่เหตุผลและพิมพ์เดือนยืนยันข้อมูลหลัก
เปลี่ยนแปลง
  • แท็บท่าเรือ ลานย่อย จุดขึ้นสินค้า และจุดปฏิบัติงาน เป็นตารางเดียวที่ค้นหาและกรองได้ — กด "แก้ไข" ที่แถวเพื่อจัดการครบในหน้าต่างเดียว (การ์ดแก้ค่าเหนือตารางถูกถอด) · ท่าเรือ: เวลาทำการ/ช่วงพัก · ระยะห่างการปล่อยรถ · พิกัด · ข้อตกลงโหมดพิเศษ · ค่าที่ TMS ส่ง · ลานย่อย: เวลา · ระยะห่างการปล่อยรถ · จุดสลับหาง · พิกัด · จุดขึ้นสินค้า: ตัวกรองการผูกลาน + แจ้งจำนวนจุด AYA ที่ยังไม่ผูกข้อมูลหลัก
  • แท็บที่ถูกรวม: "ข้อตกลงโหมดพิเศษของท่า" และ "ระยะห่างการปล่อยรถ" อยู่ในหน้าต่างแก้ไขของแท็บท่าเรือ/ลานย่อย · "พื้นที่ที่กำหนด (Geofence)" ย้ายเข้าหน้าต่างแก้ไขของแต่ละแท็บ · "แมปรหัสคนขับ" ซ่อนไว้ก่อน (การจับคู่รหัสตอนเช็คอินยังทำงาน) · "ลานย่อย AYA" เปลี่ยนชื่อเป็น "ลานย่อย" และ "จุดปฏิบัติงานระหว่างทาง" เป็น "จุดปฏิบัติงาน" · ลิงก์เดิมยังพาไปถูกแท็บข้อมูลหลัก
  • พิกัดพื้นที่ (Geofence) ย้ายจากกระดานรถระหว่างทางมาไว้ที่ข้อมูลหลัก — ท่าเรือ · ลานย่อย · จุดปฏิบัติงาน ตั้งในหน้าต่างแก้ไข · สถานีชาร์จตั้งในหน้าต่างแก้ไขของแถว (บันทึกพิกัดอย่างเดียวไม่ส่งข้อมูลสถานีแทน TMS ซ้ำ) · กระดานรถระหว่างทางเหลือแถบสรุปพร้อมลิงก์ข้อมูลหลักกระดานรถระหว่างทาง
  • ลานย่อยเลือกจุดสลับหางจากลานสลับหาง/HUB ในทะเบียน (เดิมพิมพ์เอง) — ผูกแล้วระบบใช้ความจุหางของจุดนั้นตอนแจกงาน · หน้าต่างแก้ไขท่า JC แสดงจุดสลับหางที่ท่าใช้ · แท็บหัวชาร์จกรองตามสถานีและแสดงชื่อสถานีข้อมูลหลัก
  • Audit Log: คอลัมน์และตัวกรอง "ทิศทาง" (ระบบภายนอกเรียกเข้า / PN เรียกออก / ภายใน PN) · ค้นหาผู้ใช้ · มุมมองสำเร็จรูป (การกระทำของผู้ใช้ · Alert · ล้มเหลว) · สรุปปัญหาที่พบบ่อย · ชื่อประเภทเหตุการณ์ภาษาไทยครบ · ตาราง "เดิม → ใหม่" · หน้าต่างรายละเอียดบอกเกิดอะไร ใคร เมื่อไร และสาเหตุเมื่อไม่สำเร็จ · ช่วงวันที่เลือกเวลาได้ ตั้งต้นย้อน 30 วันAudit Log
  • เมนู "ความพร้อมก่อนเข้ากะ" รวมเป็นแท็บ "ช่วงเช็คอิน / ต้องจัดการ" ของกระดานพนักงานขับรถ (ลิงก์เดิมพาไปแท็บนั้น) · ใบงานประจำวันบอกเกินแผน รอเริ่มงาน และเวลาขยับล่าสุด · หน้าต่างรายละเอียดใบงานบอกว่าใบออกมาอย่างไรและรออะไรต่อ · แผนแจกงานล่วงหน้าบอกว่าแผนถึงคนขับหรือยังกระดานพนักงานขับรถใบงานประจำวันแผนแจกงานล่วงหน้า
สำหรับผู้ดูแลระบบ
  • ⚠ รอบนี้มีการเปลี่ยนโครงสร้างฐานข้อมูล — ต้องรัน "npm run db:add-yard-weekly-hours -- --apply" ก่อนเปิดโค้ดใหม่ (เพิ่มคอลัมน์ weekly_hours ในตาราง port_sub_yards และสร้างตาราง public_holidays · ไม่แตะแถวเดิม) · ไม่รัน = ทุกหน้าที่อ่านลานย่อยล้ม รวมถึงการแนะนำท่าตอนเช็คอิน · ไม่มีตัวแปร env สิทธิ์ (permission) พารามิเตอร์ หรือ dependency ใหม่
  • API หลังบ้านใหม่ของหน้าจอ (ใช้สิทธิ์เดิม · บันทึกประวัติทุกครั้ง): ลบตารางกะทั้งเดือน (master:manage) · ลบลานย่อย และปฏิทินวันหยุด (plan:edit) · API ที่ TMS เรียก (/api/v1) ไม่เปลี่ยน — ไม่ต้องแจ้ง TMS · ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start" ของสาขา release (${PORT:-3014}) และตรวจด้วย grep ก่อนติด tag

1.0.0.7

deploy เมื่อ 26 ต.ค. 2569 · 20 รายการ

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

ใหม่
  • ปุ่ม "วางแผน" ที่การ์ดของแต่ละท่า (รวมท่าที่ได้รับจัดสรรแต่ยังไม่มีแผน) — กดแล้วเลือกวิธี: "ให้ระบบวางแผน" (ใช้ตัววางแผนของระบบเฉพาะท่านี้ ท่าอื่นของล็อตไม่ถูกแตะ · ใช้ได้กับล็อตที่ยังไม่เริ่มเดินรถ · ท่า AYA ระบบให้ได้เฉพาะยอดฝากกองก้อนเดียว) หรือ "กำหนดแผนเอง" · ต้องกด "คำนวณ" ดูตารางรายวันก่อนแล้วจึงบันทึก · แผนที่ได้ยังไม่อนุมัติ ต้องกด "อนุมัติแผน" ก่อนจึงไปขั้นจัดคิวรถแผนรับแยกท่า
  • กำหนดแผนเอง: ระบุวันเริ่มขน ตันต่อวัน และให้เศษรวมไว้วันแรกหรือวันสุดท้าย แล้วระบบคำนวณจำนวนวันและยอดรายวันให้ (เช่น 10,500 ตัน วันละ 2,000 = 5 วัน วันสุดท้าย 2,500) · ไม่ปัดหลัก 100 · วันที่มียอดจริงแล้ว ผ่านมาแล้ว หรือปิดยอดแล้วถูกเก็บไว้และหักออกจากยอดที่ต้องวาง · เกินความสามารถของท่า = เตือนแต่ไม่ห้ามแผนรับแยกท่า
  • ยกเลิกวันขน: ในหน้าต่าง "แก้ไข" ของการ์ดท่า กดไอคอนถังขยะที่วันที่ต้องการ แล้วยืนยันครั้งเดียว · ยกเลิกไม่ได้กับวันที่มียอดจริงแล้ว วันที่ผ่านมาแล้ว และวันที่ปิดยอดแล้ว · เตือนเมื่อแผนรวมเหลือต่ำกว่ายอดที่จัดสรร · ยกเลิกวันที่อนุมัติแล้ว ระบบสร้างแผนคิวรถของช่วงนั้นใหม่ให้ตามแผนรับแยกท่า
  • เพิ่มและแก้ข้อมูลล็อตถ่านหินได้จากหน้าแผนรับแยกท่า: ปุ่ม "เพิ่มล็อตใหม่" ที่หัวการ์ดแผนรับ และ "แก้ไขข้อมูลล็อต" ที่หัวของแต่ละล็อต (ฟอร์มเดียวกับหน้าล็อตถ่านหินจากเรือใหญ่ · เฉพาะผู้มีสิทธิ์จัดการล็อต) · บันทึกแล้วเห็นแผนที่ระบบวางให้บนหน้าเดิมทันที · หน้าล็อตถ่านหินจากเรือใหญ่ยังใช้ได้ตามเดิมแผนรับแยกท่าล็อตถ่านหินเรือใหญ่
  • การ์ด "ข้อมูลหลักที่เกี่ยวข้องกับขอบเขตนี้" บนหน้าแผนรับแยกท่า (ดูอย่างเดียว): เวลาทำการและเพดานของท่า · ข้อตกลงเปิดโหมดพิเศษในช่วงวันที่ของล็อต · ลานย่อย AYA · จุดขึ้นสินค้าที่ผูกกับล็อต · ระยะห่างการปล่อยรถ · จุดระหว่างทาง — เฉพาะที่เกี่ยวกับปี/ท่า/ล็อตที่เลือกในตัวกรองขอบเขตข้อมูล พร้อมลิงก์ไปแก้ที่เมนูข้อมูลหลักแผนรับแยกท่า
  • หน้าตารางกะคนขับบอก "วันนี้": แถบด้านบนแสดงวันที่และเวลาไซต์งาน เดือนของตารางกะที่ระบบใช้กับวันนี้ และทีมที่หยุดวันนี้ (ยังไม่มีตารางของเดือนนี้ = แถบเตือน) · ป้าย "วันนี้"/"หยุดวันนี้" ในกราฟและตาราง · เส้น "ตอนนี้" บนกราฟ 24 ชั่วโมง · หน้านี้ไม่รวมใบลา/คนแทน — ลิงก์ไปกระดานพนักงานขับรถสำหรับคนที่มาจริงวันนี้ตารางกะคนขับกระดานพนักงานขับรถ
  • กราฟ "ความต้องการรถรายวันแยกท่า (ประกอบการอนุมัติ)" บนหน้าแผนรับแยกท่า: คำนวณด้วยตัวจัดคิวรถตัวเดียวกับเมนูจัดคิวรถ โดยไม่บันทึก · ตั้งต้นรวมแผนรับที่ยังไม่อนุมัติ (ดูว่าถ้าอนุมัติจะต้องใช้รถเท่าไร) ปิดติ๊กได้ · เส้นแดง = รถที่มี · บอกวันที่รถ/คนขับอาจไม่พอ · ช่วงวันที่ตั้งต้นเป็นเดือนปัจจุบัน ระบุเองหรือใช้ช่วงของล็อตในตัวกรองได้ · รถใช้ร่วมกันทุกล็อต จึงไม่กรองตามล็อตแผนรับแยกท่าจัดคิวรถและคนขับ
  • ยกเลิกแผน: ปุ่ม "ยกเลิกแผน" ที่การ์ดท่า และ "ยกเลิกแผนทั้งล็อต" ที่หัวล็อต — ลบเฉพาะแผนที่ยังไม่เริ่ม (ไม่มียอดจริง · ยังไม่ถึงวัน · ยังไม่ปิดยอด รวมยอดฝากกองที่ยังไม่ฝาก) แถวอื่นเก็บไว้พร้อมเหตุ · ตัวล็อตยังอยู่ วางแผนใหม่ได้ · ล็อตไม่เหลือแผนกลับเป็นรอวางแผน · หน้าต่างยืนยันบอกก่อนว่าจะลบอะไรแผนรับแยกท่า
  • ลบล็อตที่กรอกผิด: ปุ่ม "ลบล็อตนี้" ในหน้าต่างแก้ไขล็อต (ทั้งหน้าล็อตถ่านหินจากเรือใหญ่และหน้าแผนรับแยกท่า) — ลบทะเบียนล็อต เป้าหมายรายท่า และแผนรับออกจากระบบ · ใช้ได้เฉพาะล็อตที่ยังไม่เริ่มขนส่ง (ไม่มียอดขนจริง ใบชั่ง เหตุการณ์หน้าท่า หรือกองถ่าน) · ต้องใส่เหตุผลและพิมพ์เลขล็อตยืนยัน · ข้อมูลที่ลบเก็บไว้ในประวัติการแก้ไขล็อตถ่านหินเรือใหญ่แผนรับแยกท่า
  • ข้อมูลหลัก: คอลัมน์ "เบอร์โทร" ถัดจาก "พนักงานขับรถ" ในแท็บ พนักงานขับรถ · ตารางกะคนขับ · ใบลา — แสดงแบบปิดตัวกลาง (เช่น 081-xxx-678) กดที่เบอร์เพื่อดูเบอร์เต็ม และต้องกดยืนยันก่อนโทร · หน้าต่างรายละเอียดของแถวแสดงชื่อ-นามสกุลและเบอร์โทร · ดึงสดจาก TMS เมื่อเปิดดูเท่านั้น ระบบไม่เก็บเบอร์และชื่อ · ไม่มีเบอร์/ดึงไม่ได้ บอกเหตุแทนช่องว่างข้อมูลหลัก
เปลี่ยนแปลง
  • การตั้งค่าท่าและลานย้ายจากหน้าแผนรับแยกท่าไปเมนูข้อมูลหลัก (แก้ไม่บ่อย จึงไม่ปนกับหน้าวางแผน): ท่าเรือ (เวลาทำการ/ข้อจำกัด) · ข้อตกลงโหมดพิเศษของท่า (แท็บใหม่) · ลานย่อย AYA · จุดขึ้นสินค้า · ระยะห่างการปล่อยรถ (แท็บใหม่) · จุดปฏิบัติงานระหว่างทาง (แท็บใหม่) · เปิดแท็บตรงได้จากลิงก์ · ผู้ที่ไม่มีสิทธิ์ปรับแผนจะไม่เห็นการ์ดแก้ค่าเหล่านี้ข้อมูลหลักแผนรับแยกท่า
  • วางแผนและเลื่อนวันได้ทีละท่าเท่านั้น: เอาปุ่ม "สร้าง/อัปเดตแผน" ทั้งชุดที่หัวหน้า และปุ่ม "สร้างแผนรับ/อัปเดตแผนรับ" "กำหนดแผนเอง" "เลื่อนวันทั้ง lot" ที่หัวล็อตออก — ใช้ปุ่ม "วางแผน" และ "เลื่อนวัน" ที่การ์ดของแต่ละท่าแทน (กันการวางทับแผนที่ planner แก้ไว้หลายล็อตในคลิกเดียว)แผนรับแยกท่า
  • ฟอร์มล็อตถ่านหินไม่มีช่อง "จริง (MT)" ทั้งตอนเพิ่มและแก้ไข — ยอดขนจริงมาจากบัญชีการขนจริงและยืนยันตอนปิดวัน · การแก้ข้อมูลล็อตไม่เปลี่ยนยอดจริงเดิมของท่าล็อตถ่านหินเรือใหญ่แผนรับแยกท่า
  • เพิ่มล็อตใหม่ด้วยเลขล็อตที่มีอยู่แล้วไม่ได้ (เดิมกลายเป็นการแก้ล็อตเดิมโดยไม่รู้ตัว) — ระบบบอกให้กด "แก้ไข" ที่ล็อตนั้นแทน · การส่งข้อมูลล็อตจาก TMS ยังอัปเดตล็อตเดิมได้ตามปกติล็อตถ่านหินเรือใหญ่แผนรับแยกท่า
  • กด "อนุมัติแผน" ที่หน้าแผนรับแยกท่า = อนุมัติแผนรับ และสร้างพร้อมอนุมัติแผนคิวรถของช่วงที่เกี่ยวข้อง (ตั้งแต่วันแรกของล็อตเป็นต้นไป) ในขั้นเดียว ไม่ต้องไปกดจัดคิวและอนุมัติซ้ำที่เมนูจัดคิวรถ · หน้าต่างยืนยันบอกก่อนว่าแผนคิวรถช่วงไหนจะถูกสร้างใหม่ แถวที่แก้เองจะถูกทับกี่แถว และวันที่รถไม่พอ · ยกเลิกอนุมัติ = สร้างแผนคิวรถของช่วงนั้นใหม่โดยไม่รวมล็อตนั้น · การวางแผนใหม่/ยกเลิกวัน/ยกเลิกแผนของล็อตที่อนุมัติแล้ว ปรับแผนคิวรถตามเอง (อนุมัติให้เฉพาะบัญชีที่มีสิทธิ์อนุมัติ)แผนรับแยกท่าจัดคิวรถและคนขับ
  • ข้อมูลหลัก: หน้าต่างรายละเอียดของแท็บ พนักงานขับรถ · ตารางกะ · ใบลา · รถบรรทุก EV · หางรถ · เส้นทางขนส่ง จัดกลุ่มเป็นภาษาไทยตามความหมาย ช่องที่ TMS ไม่ได้ส่งบอกเหตุแทน "-" · แท็บตารางกะเปิดที่เดือนที่ระบบใช้วันนี้ · ตัวกรองใช้ค่าที่มีจริงในข้อมูล · ใบลามีตัวกรองช่วงเวลา (ลาอยู่วันนี้ · กำลังจะลา · ผ่านไปแล้ว) และแยกข้อมูลจำลอง · รถมีคอลัมน์ทีมคนขับตามตารางกะ การล็อกเพราะรถเสีย และ "ใช้วางแผนได้" (ไม่ได้ = บอกเหตุ: ล็อก · ไม่พร้อม · ไม่มีทีม) · หางมีรถที่ผูกและการล็อกเพราะแจ้งชำรุด (ซ่อนคอลัมน์ความจุที่ TMS ไม่เคยส่ง) · เส้นทางบอกคู่ต้นทาง–ปลายทางที่ซ้ำกัน · แถบแนะนำของแต่ละแท็บ · เรียกรหัสตรงกัน (รหัส พจส. · รหัสพนักงาน (TMS))ข้อมูลหลัก
แก้ไข
  • หน้าตารางกะคนขับแสดงพนักงานขับรถที่ออกจากทีมแล้วปนอยู่ — ตอนนี้แสดงเฉพาะคนที่ยังอยู่ในตาราง ตรงกับที่ระบบใช้นับกำลังทุกจุดตารางกะคนขับ
  • ข้อความบนหน้าใบงานประจำวัน กระดานพนักงานขับรถ คำอธิบายเมนู และแถบด่านความปลอดภัย ยังพูดถึง "9 ขั้น" — เปลี่ยนเป็นไทม์ไลน์ 7 ขั้นตามที่ใช้จริงใบงานประจำวันกระดานพนักงานขับรถ
  • หน้าแผนรับแยกท่าล้มทั้งหน้าเมื่อกรองไปที่ล็อตที่ช่วงวันที่มีข้อมูลคงคลังวันเดียว (กราฟคงคลังคาดการณ์) — แสดงได้ปกติแล้วแผนรับแยกท่า
  • ข้อมูลหลัก แท็บเส้นทางขนส่ง: หัวคอลัมน์ระยะทางเขียนว่า "ไมล์" ทั้งที่เป็นกิโลเมตร — ตอนนี้ระยะทาง ระยะคิดน้ำมัน และระยะคิดค่าขนส่งติดหน่วย (กม.) ทั้งตารางและหน้าต่างรายละเอียดข้อมูลหลัก
สำหรับผู้ดูแลระบบ
  • ไม่มีการเปลี่ยนโครงสร้างฐานข้อมูล ตัวแปร env สิทธิ์ (permission) พารามิเตอร์ หรือ dependency ในรอบนี้ — ขั้นตอนคือ ดึงโค้ด → build → restart แล้วตรวจว่าไฟล์ CSS ตอบ 200 · ไม่ต้องรันสคริปต์ฐานข้อมูลใด ๆ · ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start" ของสาขา release (ใช้ ${PORT:-3014}) และตรวจด้วย grep ก่อนติด tag ทุกครั้ง
  • การอนุมัติแผนรับที่หน้าแผนรับแยกท่าเขียนแผนคิวรถ (สร้างใหม่และอนุมัติ) ตั้งแต่วันแรกของล็อตเป็นต้นไป — แถวแผนคิวรถที่แก้มือในช่วงนั้นถูกคำนวณใหม่ (หน้าต่างยืนยันแจ้งก่อน) · วันก่อนหน้าและใบงานที่ออกแล้วไม่ถูกแตะ · ควรแจ้ง planner ก่อนเริ่มทดสอบ
  • เบอร์โทรและชื่อพนักงานขับรถในข้อมูลหลักดึงสดจาก TMS ผ่านการตั้งค่าค้นชื่อพนักงานขับรถเดิม (ไม่มีตัวแปร env ใหม่) — ปิดอยู่ = ไม่มีคอลัมน์เบอร์โทร · ระบบไม่เก็บเบอร์ลงฐาน · การดูเบอร์เต็มบันทึกในประวัติว่าใครดูของใคร (ไม่บันทึกตัวเบอร์)
  • API หลังบ้านของหน้าจอ: วางแผนรับต้องระบุล็อต (ไม่ระบุ = 400) และเลื่อนวันต้องระบุท่า (ไม่ระบุ = 400) · ช่องทางใหม่สำหรับวางแผนรายท่า (ระบบวาง/กำหนดเอง) และยกเลิกวันขน ใช้สิทธิ์ปรับแผนเดิม และบันทึกประวัติการแก้ไขทุกครั้ง · API ที่ TMS เรียก (/api/v1) ไม่เปลี่ยน — ไม่ต้องแจ้ง TMS

1.0.0.6

deploy เมื่อ 22 ต.ค. 2569 · 10 รายการ

กระดานพนักงานขับรถ: คลิกแถวเปิดหน้าต่างรวม (ข้อมูล พจส. · เบอร์โทร · แผน/ที่ระบบแนะนำ/ที่ไปจริง · ใบงาน) · ไทม์ไลน์ 7 ขั้นที่ตรวจ "ถึงลานต้นทาง/ถึงโรงไฟฟ้า" จาก GPS · % ความคืบหน้าละเอียดขึ้นจากตำแหน่งรถ · ล็อกแผนแจกงานล่วงหน้าของวันที่ผ่านมาแล้ว · ชื่อพนักงานขับรถที่หน้าข้อมูลหลัก

ใหม่
  • หน้าต่างรวมของแถวบนกระดานพนักงานขับรถ: คลิกที่ใดก็ได้ของแถวจะเปิดหน้าต่างเดียวเรียงลำดับ ข้อมูลพนักงานขับรถ (ชื่อ รหัส รถ กะ สถานะ การรายงานตัว ผลด่านความพร้อม) → ความคืบหน้า → แผนล่วงหน้า → ที่ระบบแนะนำตอนเช็คอิน → ที่ไปจริง (ลาน จุดรับสินค้า ล็อต ผู้ขาย) → ใบงาน ไม่ต้องคลิกข้ามเมนู · เบอร์โทรอยู่ต่อจากชื่อ กด "ดูเบอร์" แล้วมีปุ่ม "คัดลอก" (ดึงสดจาก TMS เมื่อกดเท่านั้น ไม่เก็บลงระบบ · กดไอคอนโทรของแถวจะดึงทันที)กระดานพนักงานขับรถ
  • ไทม์ไลน์ใบงาน 7 ขั้น: เช็คอิน · รับรถ · เกี่ยวหางเปล่า · ถึงลานต้นทาง · รับถ่านหิน (บอกว่าสลับหางหรือขนขึ้นรถ) · ถึงโรงไฟฟ้า · ปิดใบงาน — ตัด "แวะชาร์จ" "สลับหางเปล่า" และ "แจกใบงาน" ออก · เช็คอินตรวจจากการเรียก API เช็คอิน ส่วน "ถึงลานต้นทาง" และ "ถึงโรงไฟฟ้า" ตรวจจากตำแหน่ง GPS ที่เข้าพื้นที่ท่า/โรงไฟฟ้า · ถ้าตรวจจับ GPS ไม่ได้แต่ถึงขั้นถัดไปแล้ว ระบบถือว่าผ่านขั้นนั้นมาแล้วและแสดง "ไม่สามารถตรวจจับ GPS ได้" แทนเวลา · ทั้งสามขั้นไม่ถ่วง % ความคืบหน้า (ใบที่ไม่มี GPS ไม่ถูกลงโทษ)ใบงานประจำวันกระดานพนักงานขับรถข้อมูลรายการ
  • % ความคืบหน้าละเอียดขึ้นจาก GPS ของรถ: ช่วงรถวิ่งไปท่า (50–74%) และกลับโรงไฟฟ้า (75–99%) ระบบเติม % ตามระยะเส้นตรงที่เหลือถึงปลายทาง แสดงเป็น "~78%" พร้อมป้าย GPS — เป็นค่าประมาณ ขั้นงานจริงที่ TMS ส่งมาชนะเสมอ และไม่เกิน 74% / 99% จนกว่าขั้นถัดไปจะเกิดจริง · ใช้เฉพาะตำแหน่งสดที่ไม่เก่ากว่าเกณฑ์ · ใบที่ไม่มี GPS ยังขยับทีละ 25% เหมือนเดิมกระดานพนักงานขับรถ
  • คอลัมน์ "ปลายทาง" แสดง แผน → จริง: ท่าตามแผนล่วงหน้าเทียบกับท่าที่ใบงานไปจริง พร้อมสถานะเทียบแผน (ตรงตามแผน · ต่างจากแผน · ยังไม่มีใบงาน · ไม่มีแผน · เติมย้อนหลัง) — "ต่างจากแผน" คือการตัดสินใจของ planner ตามสถานการณ์ ไม่ใช่ความผิดของคนขับ · ระบบเริ่มเก็บ "ท่าที่แนะนำตอนเช็คอิน" ไว้ดูย้อนหลัง (เช็คอินก่อนรอบนี้จะแสดงว่าไม่มีข้อมูล ไม่ได้แปลว่าไม่ได้แนะนำ)กระดานพนักงานขับรถ
  • หน้าข้อมูลหลัก: คอลัมน์ "พนักงานขับรถ" (ชื่อ-นามสกุลดึงสดจาก TMS แสดงตอนเปิดหน้าเท่านั้น ไม่เก็บลงระบบ) ในแท็บ พนักงานขับรถ · ตารางกะคนขับ · ใบลา ถัดจากคอลัมน์รหัส · ดึงชื่อไม่ได้จะแสดงรหัสพร้อมเหตุ ไม่ปล่อยว่างข้อมูลหลัก
เปลี่ยนแปลง
  • ตารางกระดานพนักงานขับรถกระชับขึ้น: รวม "เวลาเข้ากะ" กับ "รูปแบบกะ" เป็นคอลัมน์ "กะ" · รวม "ขั้นปัจจุบัน" กับ "ความคืบหน้า" เป็น "ขั้นตอน / ความคืบหน้า" · รวม "เทียบแผนล่วงหน้า" เข้ากับ "ปลายทาง" · เอาคอลัมน์ "เที่ยว" ออก (ใบงานมีรอบเดียว) · ตัวกรองสถานะแสดงครบทุกสถานะที่เป็นไปได้ ไม่ใช่เฉพาะที่มีในวันนั้น · เมื่อ TMS เป็นผู้ออกใบงาน สถานะ "รออนุมัติเปลี่ยนเส้นทาง" และ "ถือคิวไว้" ที่ระบบไม่ได้ทำจริงแล้วจะไม่ขึ้น (แถวเดิมขึ้นเป็น "รอรับรถ")กระดานพนักงานขับรถ
  • แผนแจกงานล่วงหน้าของวันที่ผ่านมาแล้วแก้ย้อนหลังไม่ได้: วางแผนใหม่ เผยแพร่ และแก้ท่ารายคนทำได้เฉพาะวันนี้และวันข้างหน้า (แผนของวันที่ผ่านไปแล้วใช้เทียบกับการตัดสินใจจริงของ planner) · หน้าขึ้นแถบแจ้งและปิดปุ่ม · การตอบคำขอเปลี่ยนเส้นทางที่ค้างอยู่ยังทำได้ทุกวันแผนแจกงานล่วงหน้า
แก้ไข
  • คอลัมน์เทียบแผนล่วงหน้าขึ้น "ไม่มีแผน" ทุกแถวทั้งที่มีแผนอยู่ เพราะแผนผูกกับรหัสสล็อตของตารางกะคนละเดือนกับที่หน้าจอใช้ — ตอนนี้จับแผนกับสล็อตด้วยรหัสคนขับเมื่อรหัสสล็อตไม่ตรง (เฉพาะคนที่มีสล็อตเดียวในวันนั้น)กระดานพนักงานขับรถ
  • ปุ่ม "คัดลอก" ในกล่องข้อมูลติดต่อไม่ทำงานเมื่อเปิดหน้าด้วย http:// (ไม่ใช่ https) — ใช้ได้แล้ว และถ้าเบราว์เซอร์ไม่ยอมให้คัดลอกจะบอกให้เลือกแล้วกด Ctrl+C แทนที่จะเงียบกระดานพนักงานขับรถศูนย์รวม Alert
  • หน้าล็อตเรือ: เพิ่มล็อตใหม่ที่ไม่ได้ส่งยอดจริง (ตัน) ไม่ล้างยอดจริงเดิมของท่าอีก (เดิมแปลงเป็น 0) และฟอร์มเพิ่มล็อตใหม่ไม่มีช่อง "จริง (MT)" เพราะยอดจริงมาจากบัญชีการขนจริงของ TMSล็อตถ่านหินเรือใหญ่
สำหรับผู้ดูแลระบบ
  • ไม่มีการเปลี่ยนโครงสร้างฐานข้อมูล ตัวแปร env สิทธิ์ (permission) พารามิเตอร์ หรือ dependency ในรอบนี้ — ขั้นตอนคือ ดึงโค้ด → build → restart แล้วตรวจว่าไฟล์ CSS ตอบ 200 · ไม่ต้องรันสคริปต์ฐานข้อมูลใด ๆ (คู่มือเต็ม: docs/DEPLOY-UAT-1.0.0.6.md) · ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start" ของสาขา release (ใช้ ${PORT:-3014}) และตรวจด้วย grep ก่อนติด tag ทุกครั้ง
  • ต้องตั้งพิกัดพื้นที่บน UAT เอง (เป็นข้อมูล ไม่ใช่โครงสร้าง): ที่หน้า "รถระหว่างทาง" การ์ดพื้นที่ — ใส่ละติจูด ลองจิจูด และรัศมี (แนะนำ 1,000 ม.) ของ COAL-YARD (โรงไฟฟ้า) และท่า JC · C-PORT · AYA — ไม่ตั้ง = ขั้น "ถึงลานต้นทาง/ถึงโรงไฟฟ้า" ไม่ถูกตรวจจาก GPS (ขึ้น "ไม่สามารถตรวจจับ GPS ได้" เมื่อถึงขั้นถัดไปแล้ว) และไม่มี % ประมาณจาก GPS ส่วนที่เหลือของหน้าจอทำงานตามปกติ · ต้องมีสิทธิ์ plan:edit
  • ขั้น "แวะชาร์จ" "สลับหางเปล่า" และ "แจกใบงาน" ถูกตัดออกจากไทม์ไลน์ แต่ API ขั้นงานของ TMS ยังรับรหัสเหล่านี้ตามเดิม (ไม่ตอบ 400) — ข้อมูลเก่ายังอยู่ในแท็บ "สถานะรายขั้นของใบงาน" และกรองดูได้ · ไม่ต้องแจ้ง TMS ให้เปลี่ยนอะไร
  • ตำแหน่ง GPS ที่ใช้ตรวจขั้นและประมาณ % มาจากการที่ TMS ส่งตำแหน่งรถ (OP-12 หรือพ่วงกับสถานะแบต) — ถ้า TMS ส่งไม่ครบทุกคัน ใบที่ไม่มีตำแหน่งจะแสดงขั้นงานล้วนเหมือนเดิม · ข้อมูลทดสอบ GPS (scripts/simGpsProgress.js) ห้ามรันบน UAT ที่มีข้อมูลจริงโดยไม่ตั้งใจ — ถ้าเคยรัน ลบด้วย --purge --apply

1.0.0.5

deploy เมื่อ 21 ต.ค. 2569 · 8 รายการ

นำเข้าตารางกะจากไฟล์ Excel ที่หน้าข้อมูลหลัก (พร้อมไฟล์ตัวอย่าง) · การเรียกคนสำรองเป็นการแจ้งอย่างเดียว ให้ planner เรียกเอง · ซ่อนปุ่มออกใบงานเมื่อ TMS เป็นผู้ออกใบ · ปรับฟอร์มกรอกมือหน้าข้อมูลหลัก

ใหม่
  • นำเข้าตารางกะจากไฟล์ Excel: ปุ่ม "นำเข้าจากไฟล์ Excel" ที่แท็บ "ตารางกะคนขับ" (เฉพาะผู้มีสิทธิ์จัดการข้อมูลหลัก) — เลือกไฟล์ .xlsx และเดือนของตาราง กด "ตรวจไฟล์" ดูตัวอย่างก่อนเสมอ (ใครถูกเพิ่ม ช่องไหนเปลี่ยน แถวไหนไม่นำเข้าพร้อมเหตุผล) แล้วติ๊กยืนยันจึงเขียนลงระบบ · คนที่มีอยู่แล้วถูกอัปเดตที่แถวเดิม (ไม่เกิดแถวซ้ำ) · ช่องที่เว้นว่างในไฟล์ไม่ทับค่าเดิม · ไม่มีการลบใคร · ค่าที่ระบบอ่านไม่ได้ (เช่น วันหยุดพิมพ์ว่า "อ" ไม่มีจุด) จะไม่ถูกนำเข้าแถวนั้นและไม่เดาให้ · ไม่อ่านและไม่เก็บคอลัมน์ชื่อและเบอร์โทร ไม่เก็บไฟล์ข้อมูลหลัก
  • นำเข้าตารางกะ — คนที่ออกจากทีมแล้ว: รายชื่อ "มีในระบบแต่ไม่มีในไฟล์" ติ๊กให้ออกจากตารางได้ (ต้องใส่เหตุผล · คนที่ออกจะไม่นับเป็นกำลัง ไม่ขึ้นกระดานและไม่ถูกแจกงาน แต่แถวยังอยู่เป็นประวัติ) · ถ้าระบุรหัสผิดแม้คนเดียวจะไม่เขียนอะไรเลย · ระบบตรวจรูปทีมประจำคันให้ทั้งก่อนและหลังนำเข้า (Model 2 กับ Model 3 ปนกัน · จำนวนคนไม่ตรงกับ model · ขึ้นกะเวลาเดียวกัน) เป็นคำเตือนอย่างเดียวข้อมูลหลัก
  • ไฟล์ตัวอย่างสำหรับเตรียมข้อมูลนำเข้า: ลิงก์ "ดาวน์โหลดไฟล์ตัวอย่าง (.xlsx)" ในกล่องนำเข้า — มีตัวอย่างข้อมูลสมมติและชีต "วิธีใช้" อธิบายทุกคอลัมน์ (ต้องมี/ไม่บังคับ ค่าที่รับ ตัวอย่าง) · พิมพ์เวลาเป็นข้อความ เช่น 06:00 ได้ · ตัวอย่างเป็นข้อมูลสมมติ ห้ามนำเข้าตามที่เป็นอยู่ข้อมูลหลัก
เปลี่ยนแปลง
  • แท็บ "ตารางกะคนขับ" เพิ่มคอลัมน์ "เดือนตารางกะ" และ "ที่มาข้อมูล" (TMS · ไฟล์ Excel ที่นำเข้า · ไฟล์เริ่มต้น) พร้อมตัวกรองเดือน — ตารางกะหลายเดือนอยู่ในระบบพร้อมกันได้ จึงเลือกดูทีละเดือนได้ข้อมูลหลักตารางกะคนขับ
  • การเรียกคนสำรองเป็นการแจ้งอย่างเดียว (เฟสนี้): ระบบไม่เสนอรายชื่อคนสำรองมาแทนใน Alert ไม่มาเช็คอิน · ปฏิเสธใบงาน · พักไม่ครบ · แอลกอฮอล์ · เหตุป่วย แผนส่งมอบกะ และพยากรณ์รถย้วย แต่บอกชัดว่า "planner เรียกคนสำรองด้วยขั้นตอนมือของไซต์ แล้วบันทึกการโอนสล็อตเมื่อเรียกได้แล้ว" · Alert ยังมีทางเลือกอื่นเสมอ (โทรตามพนักงานขับรถ ลดเป้าท่า ระงับใบงาน) · การบันทึกโอนสล็อต/โอนใบงานยังใช้ได้ตามเดิม · ซ่อนแท็บ "กลุ่มคนสำรอง" ที่หน้าข้อมูลหลัก (ข้อมูลที่ TMS ส่งมายังรับและเก็บตามเดิม) · เปิดให้เสนอรายชื่อกลับได้ด้วยพารามิเตอร์ STANDBY_SUGGEST_MODE = 1ศูนย์รวม Alertพยากรณ์รถย้วยกระดานพนักงานขับรถข้อมูลหลักพารามิเตอร์การวางแผน
  • หน้าใบงานประจำวัน: เมื่อ TMS เป็นผู้ออกใบงาน (ตอนส่งขั้น "รับรถ") ซ่อนปุ่ม "ออกใบงานประจำวัน" และ "ออกใหม่" และข้อความบนหน้าบอกว่าใบงานออกโดย TMS และต้องมีแผนคิวรถของวันนั้นที่อนุมัติแล้ว — กันการกดออกใบจากระบบทับใบที่ TMS ออกใบงานประจำวัน
  • ฟอร์มกรอกมือหน้าข้อมูลหลัก: ตัวเลือกสถานะของพนักงานขับรถ รถ หางรถ และหัวชาร์จตรงกับที่ TMS ส่งจริง · ช่องสถานีชาร์จเป็นรายการให้เลือกจากทะเบียนสถานี · ฟอร์มจุดขึ้นสินค้าไม่มีช่อง "ผู้แก้ไข" แล้ว (ระบบใช้ผู้ใช้ที่ล็อกอิน) · สลับแท็บแล้วตารางกลับค่าตั้งต้น (ค้นหา ตัวกรอง หน้า) ไม่ติดไปกับแท็บอื่นข้อมูลหลัก
แก้ไข
  • ตารางกะที่ TMS ส่งมาโดยเดือนเป็นปี พ.ศ. (เช่น 2569-10) ถูกปฏิเสธพร้อมข้อความบอกเหตุ — เดิมถูกรับและสร้างเดือนซ้ำในตาราง (เดือนที่ถูกต้องคือปี ค.ศ. เช่น 2026-10)ข้อมูลหลักตารางกะคนขับ
สำหรับผู้ดูแลระบบ
  • ไม่มีการเปลี่ยนโครงสร้างฐานข้อมูล ตัวแปร env สิทธิ์ (permission) หรือ dependency ในรอบนี้ — ขั้นตอนเหมือนรอบก่อน: build → restart แล้วตรวจว่าไฟล์ CSS ตอบ 200 · ⚠ ตอน merge เข้า release/1.0.0 ให้คงบรรทัด "start": "next start -p ${PORT:-3014} -H 0.0.0.0" ของ release ไว้ (สาขาพัฒนาเขียนพอร์ต 3014 ตรง ๆ)
  • เติมพารามิเตอร์ใหม่ (ไม่บังคับ — ไม่มีแถว = ใช้ค่าตั้งต้น 0 แต่แก้ที่หน้าพารามิเตอร์ไม่ได้): npm run db:sync-params -- STANDBY_SUGGEST_MODE --apply
  • ก่อนนำเข้าตารางกะบน UAT: ดูก่อนว่าฐานมีเดือนอะไรบ้าง (SELECT roster_month, source_system, COUNT(*) FROM driver_shift_assignments GROUP BY 1,2) — ถ้ามีแถวเดือนที่เป็นปี พ.ศ. (เช่น 2569-10 จากซิงค์ของ TMS รอบก่อน) ให้ตรวจว่าไม่มีใบงาน แผนแจกงาน หรือการโอนสล็อตอ้างถึง แล้วค่อยลบ (ที่เครื่องพัฒนาไม่มีการอ้างถึง) · ลองด้วยโหมดดูตัวอย่าง npm run db:import-roster -- --file <ไฟล์> --month YYYY-MM ก่อนเสมอ (ใส่ --apply จึงเขียน) — หน้าจอและสคริปต์ใช้ตัวนำเข้าเดียวกัน · ถ้า TMS ซิงค์ตารางเดือนเดียวกันภายหลัง ค่าที่ TMS ส่งจะทับแถวที่นำเข้าตามปกติ · ตัวนำเข้าไม่ลบหรือปิดคนที่ไม่อยู่ในไฟล์ให้เอง (ใช้ --exit หรือติ๊กในหน้าตรวจไฟล์ ระบุรายชื่อเองพร้อมเหตุผล)
  • ปุ่มออกใบงานบนหน้าใบงานประจำวันถูกซ่อนเมื่อพารามิเตอร์ DISPATCH_ISSUE_AT = 1 (TMS เป็นผู้ออกใบ) — ตรวจค่านี้บน UAT · ซ่อนที่หน้าจออย่างเดียว ปุ่มระบายคิวที่ถือไว้ยังอยู่
  • ลิงก์ไฟล์ตัวอย่างอยู่ใต้ /templates/ ของแอป (ไฟล์ใน public) — ต้อง build แล้ว restart จึงโหลดได้ · ไม่ต้องตั้งค่าเพิ่ม

1.0.0.4

deploy เมื่อ 19 ต.ค. 2569 · 23 รายการ

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

ใหม่
  • หน้า "บันทึกการปรับปรุง" บอกว่าแต่ละรุ่นเปลี่ยนอะไร · ป้ายเวอร์ชันท้ายแถบเมนูและจุด "ใหม่" เมื่อมีรุ่นที่ยังไม่ได้เปิดอ่านบันทึกการปรับปรุง
  • จุดขึ้นสินค้าของ TMS (Yard master): TMS สร้างจุดขึ้นสินค้าใหม่ทุกล็อตได้ทุกท่า (AYA · JC · C-Port) · ล็อตและผู้ขายส่งแยกได้แต่ไม่บังคับ · จุดของ AYA ผูกกับลานจริงของระบบ (ชื่อตรงผูกให้เอง ไม่ตรง Planner ผูกที่การ์ด "จุดขึ้นสินค้าของ TMS") แล้วใบงานของจุดนั้นนับเป็นของลานนั้น · แท็บ "จุดขึ้นสินค้า (TMS)" บนหน้าข้อมูลหลักแผนรับแยกท่าข้อมูลหลักAPI
  • การ์ด "แผนคิวรถเทียบงานที่วิ่งจริง" บนหน้าสรุปสิ้นวัน: ใบงานที่ TMS ออกเทียบกับแผนที่อนุมัติรายท่า (วิ่งโดยไม่มีแผน · เกินแผน · ต่ำกว่าแผน) และเตือนเมื่อแผนคิวรถที่อนุมัติใกล้หมด · สรุปกะมีรายการเตือนเรื่องนี้ด้วยสรุปสิ้นวันสรุปกะ
  • การ์ด "ติดตามการชาร์จหลังส่งมอบ" บนหน้ากระดานพลังงาน: รถที่ส่งมอบตอนแบตต่ำ ได้ชาร์จแล้วหรือยัง ก่อนถึงกะถัดไปกระดานพลังงานสรุปกะ
  • การ์ด "ระยะห่างการปล่อยรถ" บนหน้าแผนรับแยกท่า: แก้ได้รายท่า × โหมด และรายลานย่อยของ AYAแผนรับแยกท่า
  • ยกเลิกใบงานที่ค้างได้จากหน้าใบงานประจำวัน (ต้องใส่เหตุผล · ใบที่ปิดแล้วยกเลิกไม่ได้) · เพิ่มลานจริงของ AYA ได้จากการ์ดลานย่อยใบงานประจำวันแผนรับแยกท่า
  • หน้าข้อมูลหลัก: ปุ่ม "แก้ไข" ท้ายแถวของแท็บพนักงานขับรถ · รถบรรทุก · หางรถ · ตารางกะ · ใบลา · กลุ่มคนสำรอง · สถานีชาร์จ · หัวชาร์จ · ท่าเรือ · จุดขึ้นสินค้า — เปิดฟอร์มพร้อมค่าเดิม ช่องรหัสที่เป็นกุญแจล็อกไว้ (เปลี่ยนไม่ได้) และปุ่มบนหัวตารางเป็น "เพิ่มข้อมูล" · ช่องที่เว้นว่างคงค่าเดิม · ฟอร์มที่มีช่อง "ผู้แก้ไข" ต้องกรอกเองทุกครั้งข้อมูลหลัก
  • ลานย่อย AYA: เพิ่ม แก้ไข และปิด/เปิดลานได้จากแท็บ "ลานย่อย AYA" ของหน้าข้อมูลหลัก (เฉพาะผู้มีสิทธิ์แก้แผนรับ) — ชื่อที่ลูกค้าเรียก รหัสลาน เวลาเปิด-ปิด สถานะ หมายเหตุ · เปลี่ยนชื่อลานไม่ได้ (ต้องเพิ่มลานใหม่แล้วปิดลานเดิม) · ปิดลานที่ยังมีถ่านหรือมีแผนรับข้างหน้าจะมีคำเตือน (ระบบไม่แก้แผนให้) · ผลมีต่อการแจกใบงานทันทีข้อมูลหลักแผนรับแยกท่า
  • จุดขึ้นสินค้า: ฟอร์มเพิ่ม/แก้ไขมีช่อง "ผูกกับลานย่อย AYA" — เลือกลานจริงให้จุดของ AYA หรือเลือก "(ยกเลิกการผูก)" · เว้นว่างคือคงการผูกเดิม · ต้องมีสิทธิ์แก้แผนรับจึงจะเปลี่ยนการผูกได้ · จุดที่ผูกลานแล้ว ฟอร์มแก้ไขไม่เติมเวลาเดิมให้ เพราะเวลาที่กรอกจะไปแทนเวลาเปิด-ปิดของลานจริงข้อมูลหลักแผนรับแยกท่า
  • แผนรับต่อท่า: เพิ่มวันขนใหม่ให้ lot ได้ที่หน้าต่าง "แก้ไข" ของแต่ละท่า — เลือกวันที่และใส่ปริมาณ (ท่า AYA เลือกลานย่อยได้ หรือไม่ระบุลาน) กดบันทึกครั้งเดียวได้หลายวัน · เพิ่มได้ตั้งแต่วันนี้หรือวันที่ถ่านหินถึงท่า (แล้วแต่วันไหนช้ากว่า) · วันที่มีแผนอยู่แล้วหรือวันที่ปิดยอดแล้วเพิ่มไม่ได้ · วันที่เพิ่มต้องอนุมัติก่อนนำไปจัดคิวรถ · ถ้าเกินเพดานท่าหรือแผนรวมเกินปริมาณที่จัดสรรไว้จะมีคำเตือน (ไม่บล็อก)แผนรับแยกท่า
  • แผนรับต่อท่า AYA: ปุ่ม "แตกเป็นรายลาน" ในหน้าต่างแก้ไข — แตกยอดของวันที่ไม่ระบุลานเป็นรายลานย่อยหลายลานในครั้งเดียว (รวมกันต้องไม่เกินยอดเดิม ส่วนที่เหลือคงเป็น "ไม่ระบุลาน" · แตกหมดแล้วแถวเดิมจะถูกลบถ้ายังไม่มียอดจริง) · แถวของวันนั้นกลับเป็น "ยังไม่อนุมัติ" ต้องอนุมัติซ้ำก่อนแจกใบงานของท่านี้ในวันนั้นแผนรับแยกท่า
  • แผนรับต่อท่า AYA: ปุ่ม "จัดเป็นแผนรายวัน" ที่การ์ดยอดฝากกอง — แตกยอดฝากกองก้อนเดียวเป็นแผนรายวัน (ระบุลานย่อยได้) สร้างรายการอัตโนมัติจากวันเริ่มและปริมาณต่อวัน แล้วแก้ทีละแถวได้ · รวมกันต้องไม่เกินยอดฝากกอง ส่วนที่เหลือคงเป็นยอดฝากกอง · จัดหมดแล้วแถวยอดฝากกองเดิมจะถูกลบ · แถวที่เกี่ยวข้องกลับเป็น "ยังไม่อนุมัติ"แผนรับแยกท่า
  • สรุปสิ้นวัน: การ์ด "ปิดวัน" มีรายการ "วันที่ยังไม่ปิด" ทั้งหมด (ไม่ขึ้นกับช่วงวันที่ด้านบน) — วันที่ผ่านมาแล้วที่มีบัญชีการขนจริงหรือแผนรับรายวันแต่ยังไม่ปิดยอด เรียงใหม่สุดก่อน บอกจำนวนวันและวันที่เก่าสุด คลิกวันเพื่อเลือกปิดได้ทันที · วันนี้ยังไม่นับ · วันที่ไม่มีข้อมูลเลยไม่อยู่ในรายการสรุปสิ้นวัน
เปลี่ยนแปลง
  • แบตต่ำตอนส่งมอบกะไม่ยก Alert แล้ว (ลูกค้าแจ้งว่าคู่กะที่รับรถเป็นผู้นำรถไปชาร์จ) — ติดตามได้ที่การ์ดบนหน้ากระดานพลังงานแทนกระดานพลังงานศูนย์รวม Alert
  • ตอนพนักงานรายงานตัว ด่านแผนเป็นคำเตือน ไม่หยุดตรวจด่านอื่น (TMS เป็นผู้ออกใบงาน) · รถที่สถานะ "ใช้งานอยู่" ผ่านด่านรถ · TMS แจ้งเฉพาะสถานะรถระหว่างวันได้ และช่องที่ส่งว่างไม่ล้างค่าเดิมกระดานพนักงานขับรถAPI
  • พยากรณ์รถย้วยและการเปลี่ยนรถในการโอนใบงานใช้เกณฑ์ "แบตพอวิ่ง 1 เที่ยว" แทนแบต 95%พยากรณ์รถย้วย
  • หน้าข้อมูลรายการ: แท็บแบตเตอรี่เปิดที่ค่าล่าสุดรายคัน · รอบชาร์จเปิดที่คิวที่ยังไม่จบ · ตำแหน่งหางเปิดที่ตำแหน่งล่าสุดรายหางพร้อมสรุปรายจุด · การเช็คอินแสดงผลด่านและผลการแนะนำ · แผนขนส่งรายวันแสดง "ยังไม่รายงาน" แทน 0 พร้อมส่วนต่าง · กอง AYA แสดงอายุและลำดับเบิกข้อมูลรายการ
  • หน้าข้อมูลรายการ — แท็บที่ปรับปรุง: การใช้ถ่านหินของโรงไฟฟ้า (แถบสรุปยอดคงเหลือ/ใช้ได้อีกกี่วัน และเตือนวันที่ผ่านไปแล้วที่ยังเป็นยอดตามแผน) · การขนส่งจริงรายวัน (แยกเที่ยวที่ต้นทางแจ้งกับเที่ยวที่ประมาณจากตัน ตัวกรองที่มาของข้อมูล) · คำแนะนำที่ส่งให้ TMS (เหตุผล ทางเลือก ติดตามการส่งและการตอบกลับ ป้ายข้อมูลทดสอบ) · ใบงานประจำวัน (ที่มาของใบงาน การกดรับ เวลาออกใบ) · สถานะรายขั้นของใบงาน (ที่มาของเหตุการณ์ ชื่อขั้น) — ช่องที่ว่างบอกเหตุแทนเครื่องหมาย "-"ข้อมูลรายการ
  • หน้าข้อมูลหลัก: ปรับชื่อแท็บให้สั้นและเข้าใจง่าย ("ท่าเรือ" แทน "ค่าท่าจาก TMS (Phase 5)" · "ลานย่อย AYA" · "จุดขึ้นสินค้า") ตัดป้ายตัวเลขและป้ายเฟสต่อท้ายชื่อแท็บ จัดลานย่อย AYA ไว้ก่อนจุดขึ้นสินค้า · แท็บ "แมปรหัสคนขับ" แสดงเฉพาะผู้มีสิทธิ์จัดการข้อมูลหลัก (ผู้ดูแลระบบและ Planner ตามค่าตั้งต้น) — บทบาทอื่นจะไม่เห็นแท็บนี้ข้อมูลหลัก
  • หน้า API: คำอธิบายสถานีชาร์จครบขึ้น · "คิวการชาร์จ" รวมเข้ากับ "สถานะการชาร์จ" (ลิงก์เดิมพาไปหน้าใหม่) · PORT_SUB_YARD เปลี่ยนเป็น Yard master ของจุดขึ้นสินค้าAPI
แก้ไข
ความปลอดภัยและความเป็นส่วนตัว
  • ปรับปรุงความปลอดภัย
สำหรับผู้ดูแลระบบ
  • ตรวจไฟล์ env ของเครื่องก่อน deploy: ค่าความลับของ session และรหัสผ่านฐานข้อมูลต้องตั้งไว้ครบ (โค้ดไม่มีค่าสำรองแล้ว — ไม่ตั้ง = แอปไม่ start) · ดูชื่อค่าใน .env.example
  • ต้องรัน npm run db:add-loading-points -- --apply ก่อนเปิดโค้ดรุ่นนี้ (ตารางจุดขึ้นสินค้า + คอลัมน์ในใบงาน · ไม่แตะแถวเดิม) — ไม่รันก่อน ทุกหน้าที่อ่านใบงานจะ error · ขั้นตอนเต็มใน docs/DEPLOY-UAT-1.0.0.4.md
  • เติมพารามิเตอร์ใหม่: npm run db:sync-params -- HANDOVER_SOC_ALERT HANDOVER_CHARGE_RISE_PCT PLAN_DRIFT_TOLERANCE_PCT PLAN_COVERAGE_WARN_DAYS --apply
  • ค่าตามข้อมูล UAT ต้องแก้ที่หน้าจอของ UAT เอง (ฐานของ UAT มีค่าของตัวเอง): ระยะห่างการปล่อยรถ JC 5 · C-Port 7 · AYA 10 นาที (การ์ดบนหน้าแผนรับแยกท่า) และ CYCLE_HOURS_AYA = 10.26 (หน้าพารามิเตอร์การวางแผน)
  • แท็บ "แมปรหัสคนขับ" บนหน้าข้อมูลหลักต้องมีสิทธิ์ master:manage (ผู้ดูแลระบบและ Planner ตามค่าตั้งต้น) — ตรวจว่าบทบาท Planner บน UAT มีสิทธิ์นี้ ไม่งั้นผู้ใช้จะแจ้งว่าแท็บหาย · ปุ่มเพิ่ม/แก้ลานย่อย AYA และการผูกลานในฟอร์มจุดขึ้นสินค้าใช้สิทธิ์แก้แผนรับ (plan:edit) ไม่มีสิทธิ์ใหม่ที่ต้องรัน db:sync-permissions
  • งานในรอบนี้หลังจากคู่มือฉบับแรก (ปุ่มแก้ไขที่แถว · ลานย่อย AYA · ผูกลานในฟอร์ม · แท็บบนหน้าข้อมูลรายการ) ไม่มีการเปลี่ยนฐานข้อมูล พารามิเตอร์ หรือ env เพิ่ม — ขั้นตอนฐานข้อมูลยังเหมือนเดิมสองข้อด้านบน

1.0.0.3

deploy เมื่อ 15 ต.ค. 2569 · 9 รายการ

GPS มาพร้อมค่าแบตเตอรี่ · จับคู่ใบชั่งปลายทางกับใบงาน · ทะเบียนลานย่อย AYA พร้อมรหัสลานของ TMS

ใหม่
  • TMS ส่งตำแหน่ง GPS มาพร้อมค่าแบตเตอรี่ในคำเรียกเดียวได้ (battery-status) — ส่งค่าแบตอย่างเดียวยังได้ผลเหมือนเดิมกระดานรถระหว่างทาง
  • น้ำหนักถ่านหินปลายทาง: ระบบจับคู่ใบชั่งที่ท่าตูมกับใบงานให้เองจากหมายเลขหางและเวลา — ดูได้ในรายละเอียดใบงาน และการ์ดกระทบยอดบนกระดานปลายทางใบงานประจำวันกระดานปลายทางท่าตูม
  • ทะเบียนลานย่อย AYA: TMS เพิ่ม/แก้/ปิดลานย่อย และตั้งเวลาเปิด-ปิดรายลานได้ทาง API ด้วยรหัสลานของ TMS · มีแท็บ "ลานย่อย AYA" บนหน้าข้อมูลหลัก และช่องรหัสลานในการ์ดลานย่อยบนหน้าแผนรับแยกท่าข้อมูลหลักแผนรับแยกท่าAPI
  • ใบงานที่ไปรับถ่านหินที่ AYA และส่งรหัสลานที่ยังไม่มีในทะเบียน ระบบเพิ่มลานให้อัตโนมัติ · ไม่ส่งรหัสลานยังทำงานแบบเดิม พร้อมคำเตือนในผลตอบกลับใบงานประจำวัน
  • แท็บล็อตเรือใหญ่บนหน้าข้อมูลรายการ — ล็อตที่ยังไม่จบหรือล่าสุดขึ้นก่อน · คงเหลือรายท่า · % ที่ขนแล้วข้อมูลรายการ
เปลี่ยนแปลง
  • แท็บแผนรับเข้าท่าบนหน้าข้อมูลรายการเปิดที่เดือนปัจจุบัน (เดิมแสดงทุกเดือน) และมีแถบยอดรวมแผน / จริง / ส่วนต่าง · เดือนที่ยังไม่รายงานยอดจริงแสดง "-" ไม่ใช่ 0ข้อมูลรายการ
  • ตั้งเวลาปิดของลานย่อยก่อนเวลาเปิด (คร่อมเที่ยงคืน) จะถูกปฏิเสธ ทั้งจากหน้าจอและจาก APIแผนรับแยกท่า
  • หน้า API: คำอธิบายของ BATTERY_STATUS · VEHICLE_POSITION · PLANT_SCALE · JOB_PROGRESS อ่านง่ายขึ้น และเพิ่มหน้า PORT_SUB_YARDAPI
แก้ไข
  • แท็บตำแหน่งหางบนหน้าข้อมูลรายการที่เคยเปิดไม่ขึ้นทั้งหน้า เปิดได้แล้วข้อมูลรายการ
สำหรับผู้ดูแลระบบ
  • ต้องเพิ่มคอลัมน์รหัสลาน (npm run db:add-yard-code) ก่อนเปิดโค้ดรุ่นนี้ · ขั้นตอนเต็มใน docs/DEPLOY-UAT-1.0.0.3.md
  • ลานย่อยที่มีอยู่เดิมต้องผูกรหัสลานของ TMS หนึ่งครั้งตามรายการที่ลูกค้ายืนยัน (การ์ดลานย่อยบนหน้าแผนรับแยกท่า) ก่อน TMS ส่งข้อมูลลานครั้งแรก — ไม่งั้นจะเกิดลานซ้ำ

1.0.0.2

deploy เมื่อ 12 ต.ค. 2569 · 6 รายการ

แก้ตารางกะหลายเดือน หลัง TMS เริ่มส่งข้อมูลจริง · ปรับการ์ดล็อตเรือใหญ่และตารางกะ

เปลี่ยนแปลง
แก้ไข
  • ตารางกะหลายเดือน: เมื่อในระบบมีตารางกะมากกว่าหนึ่งเดือน ทุกหน้าใช้ตารางของเดือนนั้น (เดิมรวมทุกเดือน ทำให้กระดานพนักงานแสดงสล็อตซ้ำ) · ไม่มีตารางของเดือนนั้น = ใช้เดือนล่าสุดก่อนหน้าพร้อมแถบเตือนบนจอกระดานพนักงานขับรถตารางกะคนขับ
  • driver-checkin ตอบ status "success" ตามคู่มือเชื่อมต่อAPI
สำหรับผู้ดูแลระบบ
  • สคริปต์ mysql_backup.sh restore ต่อฐานผ่าน 127.0.0.1

1.0.0.1

deploy เมื่อ 06 ต.ค. 2569 · 11 รายการ

รุ่นแรกที่ขึ้น UAT — ระบบครบ Phase 1–8 พร้อมข้อตกลงจากประชุม TMS 2026-10-05

ใหม่
  • ระบบครบ Phase 1–8: แผนรับแยกท่า · จัดคิวรถ · ใบงานและกระดานพนักงาน · ศูนย์รวม Alert · ปฏิบัติการหน้าท่า ระหว่างทาง และปลายทาง · สรุปสิ้นวันและปิดวันแผนรับแยกท่าจัดคิวรถและคนขับใบงานประจำวันศูนย์รวม Alertสรุปสิ้นวัน
  • ผู้วิเคราะห์เหตุการณ์ (ท่าขัดข้อง / รถเสีย) จัดอันดับทางเลือกตามโหมดการตัดสินใจ — เป็นข้อเสนอเท่านั้น ระบบไม่สั่งงานเองผู้วิเคราะห์เหตุการณ์
  • หน้าสรุปกะ (Alert ต้นกะ + ส่งกะ) และรายงานสิ้นวันบนหน้าสรุปสิ้นวันสรุปกะสรุปสิ้นวัน
  • ชื่อพนักงานขับรถบนกระดานพนักงาน ดึงสดจาก TMS ทุกครั้งที่เปิดดู ระบบไม่เก็บชื่อกระดานพนักงานขับรถ
  • การ์ดใหม่บนหน้าตารางกะคนขับ: กราฟรายคัน · วันหยุดรายสัปดาห์ · การกระจายเวลารายงานตัว · รายการกะรายคันตารางกะคนขับ
  • หน้า API รวมทะเบียน API กับสเปกเป็นหน้าเดียวAPI
  • การ์ดตั้งค่าการเชื่อมต่อ AI บนหน้า AI (ยังปิดการเชื่อมต่อ AI อยู่)AI Engine
เปลี่ยนแปลง
ความปลอดภัยและความเป็นส่วนตัว
  • ระบบไม่เก็บเบอร์โทรและอีเมลของพนักงานขับรถ ตามที่ลูกค้าตัดสิน