วิธีตั้งเวลาให้ระบบส่งไฟล์ธนาคารเฉพาะวันทำการ

ระบบที่ส่งไฟล์โอนเงินให้ธนาคารตามรอบเวลาต้องรู้วันทำการของธนาคาร ซึ่งไม่ใช่แค่จันทร์ถึงศุกร์ วันหยุดควรมาจากที่เดียวที่ฝ่ายการเงินดูแล วันหยุดยาวอย่างสงกรานต์ต้องนับครบทุกวัน และเวลาตัดรอบของแต่ละบริการตัดสินว่าเงินเข้าวันไหน

เผยแพร่
เวลาอ่าน
5 นาที
ในโพสต์นี้ 7 หัวข้อ
  1. วันทำการของธนาคารไม่ใช่วันทำงานของบริษัท
  2. เก็บวันหยุดไว้ที่เดียว
  3. วันหยุดยาวต้องนับครบทุกวันในช่วง
  4. เวลาตัดรอบตัดสินว่าเงินเข้าวันไหน
  5. ตารางรอบเวลามีที่เดียว ใช้ทั้งตั้งเวลาและแสดงบนหน้าจอ
  6. กรณีที่อาจเจอในงานจริง
  7. เรื่องที่ควรถามทีมพัฒนา

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

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

วันทำการของธนาคารไม่ใช่วันทำงานของบริษัท

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

ตัวอย่างจากปี 2569

แอปธนาคารที่ใช้ได้ทุกวันทำให้ลืมได้ง่ายว่า การโอนแบบเป็นชุดของบริษัทยังเดินตามวันทำการของธนาคาร

บริษัทเองก็มีวันทำงานของตัวเอง บางบริษัททำงานวันเสาร์ บางบริษัทหยุดวันที่ธนาคารเปิด ระบบส่งไฟล์ธนาคารจึงควรยึดวันทำการของธนาคาร ไม่ใช่ปฏิทินของบริษัท

เก็บวันหยุดไว้ที่เดียว

วันหยุดธนาคารเปลี่ยนทุกปี และบางปีมีวันหยุดพิเศษที่ประกาศกลางปี ถ้าวันหยุดเขียนตายไว้ในโค้ด ต้องให้นักพัฒนาแก้และ deploy ทุกครั้ง ทางที่ดีกว่าคือเก็บไว้ที่เดียวที่ฝ่ายการเงินดูแลอยู่แล้ว ในงานของเรา ฝ่ายการเงินบันทึกวันหยุดไว้ใน ERP อยู่แล้วเพื่อใช้คำนวณวันครบกำหนดจ่าย ระบบดึงวันหยุดจาก ERP มาทุกเที่ยงคืน แล้วทุกรอบเวลาเช็กก่อนทำงานว่าวันนี้หยุดหรือไม่

เช็กตอนจะทำงานแทนการคำนวณตารางล่วงหน้า มีข้อดีคือ ถ้าวันหยุดพิเศษเพิ่งประกาศเมื่อวาน ฝ่ายการเงินเพิ่มลง ERP แล้วรอบของวันนั้นก็หยุดเองโดยไม่ต้องแก้อะไรในระบบ

วันหยุดยาวต้องนับครบทุกวันในช่วง

ERP ที่เราทำงานด้วยบันทึกวันหยุดเป็นช่วง มีวันเริ่มกับวันสิ้นสุด สงกรานต์จึงเป็นแถวเดียวที่ครอบหลายวัน วันขึ้นปีใหม่ก็เช่นกัน

สงกรานต์เป็นแถวเดียวที่ครอบหลายวัน ทุกวันในช่วงต้องนับเป็นวันหยุด

วันหยุดที่บันทึกเป็นช่วง ระบบต้องเช็กว่าวันนี้อยู่ระหว่างวันเริ่มกับวันสิ้นสุด

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

เวลาตัดรอบตัดสินว่าเงินเข้าวันไหน

ธนาคารไม่ได้ทำไฟล์ทันทีที่ได้รับ แต่ละบริการมีเวลาตัดรอบของตัวเอง เช่นโอนภายในธนาคารเดียวกัน โอนต่างธนาคาร และโอนไปต่างประเทศ ไฟล์ที่มาถึงก่อนเวลาตัดรอบได้ทำวันนี้ ไฟล์ที่มาถึงหลังจากนั้นธนาคารเก็บไว้ทำวันทำการถัดไป และบางบริการต้องมีคนอนุมัติในระบบของธนาคารก่อนเวลาปิดของบริการนั้นด้วย

เวลาตัดรอบจึงมีผลกับสองวันในไฟล์

  • วันที่เงินเข้า (value date) ถ้ารายการกำหนดให้เงินเข้าวันนี้ แต่ไฟล์ไปถึงหลังเวลาตัดรอบ รายการนั้นจะโอนตามวันที่ตั้งไว้ไม่ได้ ระบบควรกันไว้และเตือนให้ฝ่ายการเงินเลือกวันใหม่ แทนที่จะส่งไปให้ธนาคารปฏิเสธ
  • วันแจ้งล่วงหน้า (pre-advice date) บางบริการให้ใส่วันที่ธนาคารแจ้งผู้รับเงินล่วงหน้า ปกติคือหนึ่งวันทำการก่อนวันที่เงินเข้า แต่ธนาคารที่เราทำงานด้วยไม่รับวันแจ้งล่วงหน้าที่อยู่ก่อนวันที่ธนาคารทำไฟล์

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

ตารางรอบเวลามีที่เดียว ใช้ทั้งตั้งเวลาและแสดงบนหน้าจอ

ฝ่ายการเงินต้องรู้ว่ารอบถัดไปคือกี่โมง และรอบนั้นส่งบริการอะไรบ้าง ระบบจึงมักมีหน้าจอบอกรอบถัดไป ถ้าหน้าจอกับตัวตั้งเวลาอ่านเวลาจากคนละที่ วันหนึ่งที่มีคนแก้ที่เดียว หน้าจอจะบอกรอบที่ไม่มีจริง

ในงานของเรา ตารางรอบเวลาเป็นรายการเดียวในโค้ด แต่ละรอบบอกเวลา งานที่ทำ และหมายเหตุว่าทำไมรอบนั้นถึงส่งบริการที่ส่ง ตัวตั้งเวลาอ่านรายการนี้แล้วตั้งทุกรอบให้ทำเฉพาะวันธรรมดาและข้ามวันหยุด หน้าจอก็อ่านรายการเดียวกัน เวลาฝ่ายการเงินขอเปลี่ยนรอบ ก็แก้ที่เดียว

กรณีที่อาจเจอในงานจริง

  • รัฐบาลประกาศวันหยุดพิเศษกะทันหัน ต้องดูว่าธนาคารแห่งประเทศไทยประกาศให้สถาบันการเงินหยุดด้วยหรือไม่ ถ้าหยุด ฝ่ายการเงินเพิ่มลง ERP ก่อนเที่ยงคืนของวันก่อนหน้า ระบบก็หยุดเอง
  • ปีใหม่มาถึงแล้วแต่ยังไม่มีวันหยุดของปีหน้า ระบบจะส่งไฟล์ในวันหยุดต้นปีโดยไม่รู้ตัว ควรมีคำเตือนถ้าปีหน้ายังไม่มีวันหยุดในระบบภายในเดือนธันวาคม
  • รายการรอวันที่เงินเข้าดูเหมือนค้าง รายการที่ตั้งให้เงินเข้าสัปดาห์หน้ายังไม่ไปเพราะยังไม่ถึงรอบ หน้าจอควรแยกสถานะนี้ออกจากรายการที่ผิดจริง ไม่อย่างนั้นฝ่ายการเงินจะตกใจทุกวันศุกร์
  • เซิร์ฟเวอร์ตั้งเขตเวลาผิด ทุกเวลาในตารางควรเป็นเวลาไทย ถ้าเซิร์ฟเวอร์อยู่ที่ UTC รอบ 9 โมงเช้าจะไปทำตอนบ่ายสี่โมง

เรื่องที่ควรถามทีมพัฒนา

  1. ระบบเอาวันหยุดมาจากไหน และใครเป็นคนเพิ่มวันหยุดพิเศษ
  2. วันหยุดที่เป็นช่วงหลายวันนับครบทุกวันไหม มี test ของวันกลางช่วงหรือเปล่า
  3. เวลาตัดรอบของแต่ละบริการอยู่ที่ไหน และรายการที่ไปไม่ทันตัดรอบจะเป็นยังไง
  4. วันแจ้งล่วงหน้าคำนวณตอนไหน
  5. ตารางรอบเวลาที่หน้าจอแสดงกับที่ระบบทำจริงมาจากที่เดียวกันไหม

ตอนถัดไปของซีรีส์ เอกสารภาษี ไฟล์ธนาคาร และ e-GP

อ่านต่อ

ถูกอ้างถึงใน

ล่าสุด

ดูทั้งหมด →