สมอง SML

คลังความรู้ / หน้าจอทีละจอ

#screens#process

จอประมวลผลระบบ (SystemProcessWorkbenchScreen)

จอเดียวที่ถูกใช้ซ้ำกับเมนู "งานประมวลผล" ของ ERP รวมประมาณ 40 เมนู ตัวจอรับ menuKey แล้วเลือก "โหมด" (SystemProcessMode) 9 แบบ (SystemProcessWorkbenchScreen.tsx:42-51) แต่ละโหมดโชว์ตัวกรองและปุ่มต่างกัน กลไกที่ buildDynamicScreen จัดเมนูเข้าโหมดอยู่ใน screenRegistry.tsx:1067-1379 (ดู ทะเบียนหน้าจอและโครงเมนู (Screen registry & smlMenu)) ส่วนตารางโหมดฝั่งโครงสร้างโค้ดอยู่ที่ จอประมวลผลระบบและ POS (System Process Workbench & POS Setup) บันทึกนี้เน้นสิ่งที่ผู้ใช้เห็นและกดได้

เมนูที่ยังไม่พอร์ต (NOT_PORTED_PROCESS_MENUS) ตอนนี้ว่างเปล่า (:54) จึงไม่มีเมนูใดโชว์ข้อความ "ยังไม่รองรับ"

วิธีเปิด: เมนูแต่ละรหัสเข้าโหมดอะไร

โหมด รหัสเมนู (menu key) ทำอะไร
ic_recalc 2049 menu_ic_recalc คำนวณยอดสต๊อกใหม่ คำนวณยอดคงเหลือ/ต้นทุนสต๊อกใหม่ และเครื่องมือตรวจกระแสเอกสาร
gl_process 9010 menu_gl_process ประมวลผลจากข้อมูลรายวัน สร้างรายการบัญชีใหม่จากเอกสารรายวัน
gl_journal_pass 9008 menu_gl_check_data ตรวจสอบความถูกต้อง, 9009 menu_gl_journal_pass ผ่านรายการ, 9022 menu_gl_journal_pass_cancel ยกเลิกผ่านรายการ (screenRegistry.tsx:1149-1159) ตรวจ/ผ่าน/ยกเลิกผ่านสมุดรายวัน
gl_close_period 9011 สรุปบัญชีสินค้าและต้นทุนขาย, 9012 สรุปยอดบัญชี, 9019 ประมวลผลสิ้นงวด, 9020 ประมวลผลสิ้นปี, 9021 ประมวลผลกำไรขาดทุนและต้นทุนขาย ปิดงวด/ปีบัญชี สร้างรายการปิดบัญชี
fa_depreciation 8003 menu_asset_transfers โอนข้อมูลเข้าระบบบัญชี คำนวณและบันทึกค่าเสื่อมราคา
change_code 1106 เปลี่ยนรหัสสินค้า, 1107 เจ้าหนี้, 1108 ลูกหนี้, 1109 ผังบัญชี เปลี่ยนรหัสหลักทั้งระบบ
audit_log 1119-1125 (เข้าใช้ฐานข้อมูล, เข้าออกระบบ, ข้อมูลรายวัน, ข้อมูลหลัก, ประวัติแก้ไขรายวัน, แสดงหน้าจอการใช้งาน สด/ย้อนหลัง) ดูบันทึกการใช้งาน
system_tool 1026, 1097-1099, 1101, 1102, 1110, 1112, 1116-1118, 4016, 5006, 6007, 6011, 9003, 9040 เครื่องมือตรวจสอบ/นำเข้า/ส่งออก (ตารางล่าง)
  • โหมดที่ 9 คือ not_ported สำหรับเมนูที่ยังไม่พอร์ต ตอนนี้ไม่มีเมนูใดใช้ (:54, :153-156)
  • โหมด system_tool ยังมีตัวแปรโหลดจังหวัด (provinceAuto, เมนู menu_setup_province_auto / menu_province_auto, :152) แต่ชื่อเมนูนี้ไม่อยู่ในต้นไม้เมนูปัจจุบัน หน้ากำหนดจังหวัด/อำเภอ/ตำบลปกติ (1015) ใช้จอ ProvinceTreeScreen ไม่ใช่จอนี้ ดู โหลดข้อมูลจังหวัด/อำเภอ/ตำบลมาตรฐาน (Province Load)
  • เมนู system_tool ที่ไม่ตรงเงื่อนไขใดใน loadSystemToolData จะเห็น "รายชื่อตารางในฐานข้อมูล + จำนวนคอลัมน์" แบบอ่านอย่างเดียว (:2077-2086)

โครงจอและปุ่มกลาง (ทุกโหมด)

  • แถบปุ่มบน (:806-851): ปุ่มรันหลักของโหมด (ป้ายตามโหมด runLabel :771-783, :806-811), ประมวลผล (ดูตัวอย่าง) / บันทึก สำหรับโหมดปิดงวดและค่าเสื่อม (:812-822), ลบ เฉพาะโหมดค่าเสื่อม (:823-828), ดึงข้อมูลใหม่ (ซ่อนในโหมดที่มีปุ่มประมวลผล/บันทึก และโหมดตรวจสอบ :831-836), บันทึก JSON (ส่งผลตารางออกเป็นไฟล์ JSON handleExportJson :741, :837-840), ปุ่ม AI (ด้านล่าง), ปิดหน้าจอ
  • ปุ่ม "✨ AI ผู้ช่วยตรวจสอบบัญชี สต็อก 2 หน่วยนับ & กระทบยอดธนาคารอัตโนมัติ (AI Copilot Suite)" (:841-851) สลับเปิด/ปิดแผง AI ใต้แถบปุ่ม (:875-1281) มีให้กดทุกโหมด ไม่ขึ้นกับเมนู รายละเอียดแผงอยู่ในหัวข้อ "แผง AI Copilot Suite" ด้านล่าง
  • ตัวกรองวันที่ "จากวันที่/ถึงวันที่" (:1410-1419) และช่องคำค้น กด Enter เพื่อค้น (:1449-1455) ปุ่ม "ค้นหา" (:1456-1465) ไม่ขึ้นในโหมดปิดงวด/ค่าเสื่อม และไม่ขึ้นในเมนูตรวจสอบความถูกต้อง
  • ตารางผลมีปุ่ม "เลือกทั้งหมด / ไม่เลือกทั้งหมด" (:1652-1662) ตัวเลขเงินจัดรูปผ่านตัวช่วยตัวเลข 2 ตำแหน่ง (fmtNum :1800) ดู ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)
  • สิทธิ์: ปุ่มทำงาน/บันทึกต้องมีสิทธิ์เพิ่มหรือแก้ไข (canWrite = rights.canAdd || rights.canEdit, :143) ปุ่มลบต้องมี canDelete ดู การตรวจสิทธิ์เมนูของ route process (Process route rights)
  • ทุกการประมวลผลที่เขียนข้อมูลถามยืนยันก่อน: "ต้องการบันทึกรายการ... จริงหรือไม่" (:532), "ต้องการลบเอกสาร <เลขที่> พร้อมรายการบัญชีจริงหรือไม่" (:570), "ต้องการ<ผ่านรายการ/ยกเลิก...>จริงหรือไม่ (N ใบ)" (:670), "ต้องการเปลี่ยน<รหัส> N รายการจริงหรือไม่" (:678), โหลดจังหวัดแบบเขียนทับ (:697), "ยืนยันการปรับปรุงข้อมูล" (:704)

ตัวกรองและช่องกรอกแต่ละโหมด

ผ่านรายการ / ยกเลิกผ่านรายการ / ตรวจสอบความถูกต้อง (gl_journal_pass, 9009/9022/9008)

เมนูทั้งสามใช้โหมดเดียวกัน ตัวแปร passVariant มาจากชื่อเมนู: menu_gl_check_data = ตรวจ (check), menu_gl_journal_pass_cancel = ยกเลิกผ่าน (unpass), นอกนั้น = ผ่าน (pass) (:147-148) ป้ายปุ่มรันเปลี่ยนตาม: "เริ่มตรวจสอบ", "ยกเลิกผ่านรายการ", "ผ่านรายการ" (:777) ปุ่มรันของโหมดตรวจกดได้แม้ไม่มีสิทธิ์เขียน ส่วนผ่าน/ยกเลิกผ่านต้องมี canWrite (:807)

เมนูผ่านรายการ / ยกเลิกผ่านรายการ (selectable = ไม่ใช่โหมดตรวจ, :785)

  • ช่องกรอง: จากวันที่/ถึงวันที่ (:787) และ "จากเลขที่ใบสำคัญ"/"ถึงเลขที่ใบสำคัญ" (ในเมนูยกเลิกป้ายต่อท้ายว่า "(ที่ผ่านรายการแล้ว)") กรอกช่องเดียว = เลขที่นั้นตรงตัว กรอกสองช่อง = ช่วง (:1420-1429, ฝั่ง backend docRangeWhere workflow.go:428)
  • ตอนเปิดจอและกด "ค้นหา" เรียก workflow journal-list ส่ง {dateFrom, dateTo, docFrom, docTo, undo} (undo = true เฉพาะเมนูยกเลิก) (:425-446) เมนูยกเลิกได้เฉพาะใบที่ is_pass = 1 (workflow.go:452-454) เมนูผ่านได้ทุกใบในช่วงวันที่
  • ตารางมี 6 คอลัมน์: วันที่, เลขที่เอกสาร, สมุดรายวัน, คำอธิบาย, จำนวนเงิน, หมายเหตุ (:439-446) หมายเหตุมาจาก backend ตามลำดับ "ไม่พบผังบัญชี" > "รหัสบัญชีผิดประเภท" > "ยอดไม่ Balance" > "ผ่านรายการแล้ว" ใบที่มีข้อผิดพลาดสามแบบแรกจะติ๊กไม่ได้ (checkbox ปิด :1712) และข้อความทั้งแถวเป็นสีแดง (:1707) ใบที่ "ผ่านรายการแล้ว" ในเมนูผ่านยังติ๊กได้
  • แถบสรุปบนตาราง 3 ช่อง: "ใบสำคัญ", "เลือกได้" (จำนวนใบที่ติ๊กได้), "มีข้อผิดพลาด" (จำนวนใบที่ติ๊กไม่ได้) (:434-438)
  • ติ๊กเป็นรายใบ หรือกด "เลือกทั้งหมด" (เลือกเฉพาะใบที่ติ๊กได้, :1652-1662) แล้วกดปุ่มรัน ถ้าไม่ติ๊กเลยขึ้น "กรุณาเลือกใบสำคัญอย่างน้อย 1 ใบ" ถ้าติ๊กแล้วถามยืนยัน "ต้องการผ่านรายการ/ยกเลิกผ่านรายการจริงหรือไม่ (N ใบ)" (:666-670) จากนั้นเรียก workflow journal-pass ส่ง {menuName, docNos, undo} (:671) โหลดรายการใหม่ แล้วขึ้น "ผ่านรายการเรียบร้อย N ใบ" หรือ "ยกเลิกผ่านรายการเรียบร้อย N ใบ" (:672-673) N คือจำนวนใบที่ is_pass เปลี่ยนจริง ใบที่อยู่ในสถานะนั้นอยู่แล้วไม่นับ (workflow.go:515)
  • backend ตรวจข้อผิดพลาดซ้ำเมื่อสั่งผ่านรายการ ใบที่มีข้อผิดพลาดจะถูกปฏิเสธทั้งชุด (workflow.go:496-509) ส่งได้ 1-5000 ใบต่อครั้ง (workflow.go:488) ดู API บัญชีแยกประเภท (Process GL actions: gl/rebuild, journal, gl-check, gl-close, สินทรัพย์ถาวร, AI)

เมนูตรวจสอบความถูกต้อง (9008)

  • ช่องกรอง: จากวันที่/ถึงวันที่ และ checkbox 3 ตัว (ค่าตั้งต้นในโค้ด :163): "แสดงทั้งหมด (ไม่กรองวันที่)" (ปิด), "เฉพาะเอกสารที่กำหนดสมุดรายวัน" (ปิด), "ไม่ตรวจเอกสารที่ยกเลิก" (เปิด) (:1430-1448) ไม่มีช่องเลขที่ใบสำคัญและไม่มีปุ่ม "ค้นหา"/"ดึงข้อมูลใหม่" (:831, :1456-1458)
  • ปุ่ม "เริ่มตรวจสอบ" เรียก workflow gl-check ส่ง {dateFrom, dateTo, showAll, onlyBookSelect, skipCancelDoc} ผลเป็นตาราง 2 คอลัมน์ "รายการตรวจสอบ" / "รายละเอียด" (:657-665) ถ้าไม่มีแถวใดเป็นข้อผิดพลาดขึ้น "ตรวจสอบเรียบร้อย ไม่พบข้อผิดพลาด" ถ้ามีไม่ขึ้นข้อความสำเร็จ ผู้ใช้ดูข้อผิดพลาดจากตาราง (แถวที่ error เป็นสีแดง :1681) นอกจากตรวจ backend จะซิงก์ gl_journal_detail.journal_type จากหัวใบสำคัญหนึ่งครั้งระหว่างข้อ 1 กับข้อ 2 (workflow.go:621-627) ดู API บัญชีแยกประเภท (Process GL actions: gl/rebuild, journal, gl-check, gl-close, สินทรัพย์ถาวร, AI)

หัวตารางว่าง: ถ้าโหมดนี้ยังไม่มีผลโหลด (ไม่มีแถวและไม่มีคอลัมน์) ตารางโชว์หัวคอลัมน์สำรอง 6 ช่อง (วันที่, เลขที่เอกสาร, สมุดรายวัน, คำอธิบาย, ยอดเงิน, สถานะ) เพื่อไม่ให้ตารางว่างเปล่า (:752-768) คอลัมน์จริงที่โหลดแล้วใช้ชุดด้านบน (คอลัมน์ "หมายเหตุ" ไม่ใช่ "สถานะ")

ประมวลผลลงบัญชี (gl_process, 9010)

ปุ่ม "ประมวลผลลงบัญชี" ส่งช่วงวันที่ {dateFrom, dateTo} ไป POST /api/process/gl/rebuild (:652) แล้วขึ้นข้อความจำนวนเอกสารที่ประมวลผลและใบสำคัญที่สร้าง ใน registry มี 6 ชื่อเมนูที่เข้าโหมดนี้ (menu_gl_process, menu_asset_transfer_gl, menu_gl_create_data_from_branch, menu_gl_copy_journal_book, menu_gl_transfer, menu_gl_recurring, screenRegistry.tsx:1133-1140) ใช้ตัวจัดการเดียวกันหมด แต่ในต้นไม้เมนูปัจจุบันมีเฉพาะ 9010 อธิบายเงื่อนไขการสร้างรายการบัญชีที่ กระบวนการสร้างสมุดรายวัน GL ใหม่ (GL Rebuild Process)

ปิดงวด/ปี (gl_close_period)

ขั้นตอนสองจังหวะ คือ ประมวลผล (ดูตัวอย่างก่อน ไม่เขียนข้อมูล) แล้วจึงกด บันทึก (เขียนรายการปิดบัญชี) ปุ่ม บันทึก กดได้เมื่อมีผลประมวลผลแล้ว (closeResult) และมีสิทธิ์เขียน (:818-822) ถามยืนยัน "ต้องการบันทึกรายการ... จริงหรือไม่" แล้วเรียก workflow gl-close (runGLClose :530-563) โหมดนี้ไม่มีปุ่ม ลบ (ปุ่มลบมีเฉพาะค่าเสื่อม)

ค่าเสื่อมราคา (fa_depreciation, 8003)

ช่องกรอก :1373-1409 ใช้ขั้นตอนประมวลผล -> บันทึก เหมือนปิดงวด (runFADep :577-614) และมีปุ่ม ลบ ที่ลบเอกสารค่าเสื่อมพร้อมรายการบัญชี (ต้องมีสิทธิ์ลบและกรอกเลขที่เอกสาร :823-828, runFADepDelete :567-575) เงื่อนไขการคำนวณ ดู ค่าเสื่อมราคาสินทรัพย์ถาวร (Fixed Asset Depreciation)

คำนวณยอดสต๊อกใหม่ (ic_recalc, 2049)

แผงใหญ่ :1467-1604 มีส่วนย่อยดังนี้

  1. Stock Recal (:1469) ปุ่ม "คำนวณยอดสต๊อกใหม่" พร้อมช่องคำสั่ง และ checkbox "ตรวจสอบและปรับปรุง อัตราส่วนหน่วยนับ" (:1495) เรียก POST /api/process/stock/rebuild (:624) ปุ่มในแผง (:1508) กับปุ่มรันบนแถบปุ่ม (:648) ทำงานเหมือนกัน ดู การคำนวณยอดสต็อกคงเหลือใหม่ (Stock Balance Rebuild)
  2. Check Transection (update_trans_detail, :1529-1536) ตรวจ/ปรับรายละเอียดเอกสาร
  3. Document Flow Process (recheck_trans_flow, :1544-1552) ตรวจกระแสเอกสารต่อเนื่อง
  4. Recheck Flow (recheck_doc_flow, :1571-1594) มีช่องใส่เลขที่เอกสารหรือคำสั่ง SELECT ของเอกสารที่ต้องการตรวจ
  5. check_so_doc_success ตรวจสถานะเอกสารขายสำเร็จ (ปุ่มอยู่ในกลุ่มที่ 3 :1562) ทุกปุ่มในแผงนี้ (ข้อ 1-5) ไปที่ POST /api/process/stock/rebuild เส้นเดียวกันผ่าน runIcRecalcAction (:616-644) โดยส่ง action ต่างกัน (stock_recalc, update_trans_detail, recheck_trans_flow, check_so_doc_success, recheck_doc_flow) พร้อม itemCodes, processCommand, updateUnitRatio, flowCommand สำเร็จแล้วขึ้น "<ป้าย>สำเร็จ (N รายการ / ปรับปรุง M แถว)" ไม่ได้เรียก /api/process/workflow/*

เปลี่ยนรหัส (change_code, 1106-1109)

  • แผง :1606-1633 ให้กรอกคู่ "รหัสเดิม -> รหัสใหม่" เพิ่ม/ลบแถวได้เอง (หน้าจอไม่จำกัดจำนวนแถว, รหัสใหม่แปลงเป็นตัวพิมพ์ใหญ่ตอนพิมพ์ :1611-1631) หรือคลิกแถวในตารางเพื่อดึงรหัสเดิมมาใส่ (:1688) ตารางรหัสหลักที่ให้คลิกโหลดสูงสุด 200 แถวตามคำค้น (:447-452) ส่วน backend รับ 1-500 คู่ต่อครั้ง (workflow.go:205-207)
  • ปุ่มรัน "เริ่มเปลี่ยนรหัส" ถ้าไม่มีคู่ที่กรอกเลยขึ้น "กรุณาระบุรหัสเดิมและรหัสใหม่" ถ้ามีถามยืนยัน "ต้องการเปลี่ยน<ประเภท> N รายการจริงหรือไม่" แล้วเรียก workflow change-code ส่ง {kind, menuName, pairs} ของประเภทนั้น (สินค้า/เจ้าหนี้/ลูกหนี้/ผังบัญชี CHANGE_CODE_KIND :56-65) เสร็จแล้วล้างช่องกรอกและขึ้นสรุปรายคู่ "รหัสเดิม → รหัสใหม่ (N แถวใน M ตาราง)" (:675-689) ผลกระทบข้ามตาราง ดู เปลี่ยนรหัสหลัก สินค้า/ลูกหนี้/เจ้าหนี้/ผังบัญชี (Change Code)

ดูบันทึกการใช้งาน (audit_log, 1119-1125)

เลือกชนิดบันทึกจาก auditKind ตามเมนู แสดงตารางอ่านอย่างเดียว ฟังก์ชันที่บันทึกแสดงเป็น "เพิ่ม/แก้ไข/ลบ" (formatCellVal, :2148) โหลดผ่าน workflow audit-list ส่ง {kind, dateFrom, dateTo, search} (:453-465) ชื่อชนิดบันทึกต่อเมนูอยู่ที่ AUDIT_KIND (:67-76)

เครื่องมือระบบ (system_tool)

ตอนเปิดจอ ตัวโหลด loadSystemToolData (:1808-2086) รัน SELECT ตามชื่อเมนูเพื่อแสดงตาราง (อ่านอย่างเดียว) ส่วนปุ่ม เริ่มประมวลผล มีผลจริงเฉพาะเมนูเหล่านี้ (:690-736)

เมนู ปุ่มทำอะไร
1101 ตรวจสอบและปรับปรุงข้อมูล แสดงหัวข้อตรวจสอบความสมบูรณ์ฐานข้อมูล (workflow check-ic-trans, apply:false, :481-499) แถวเริ่มต้นไม่ติ๊ก ผู้ใช้ติ๊กหัวข้อที่ซ่อมได้ (repairable) แล้วกดปุ่ม จะถาม "ยืนยันการปรับปรุงข้อมูล" และส่ง apply:true พร้อมลำดับที่ติ๊ก ถ้าไม่ติ๊กเลยขึ้น "กรุณาเลือกรายการที่ต้องการปรับปรุง" (:700-709)
6011 คำนวณแต้มสะสม ส่งช่วงวันที่ไป workflow point-recal แล้วขึ้น "คำนวณแต้มใหม่เรียบร้อย (บิล N ใบ / แก้ไข N ใบ)" (:710-713)
5006 / 6007 นำเข้าที่อยู่จัดส่งเจ้าหนี้ / ลูกหนี้ workflow import-transport-label ส่ง kind เป็น ap หรือ ar (:714-717)
9040 ส่งออกข้อมูลภาษีหัก ณ ที่จ่าย ดาวน์โหลดไฟล์ข้อความ RD_WHT_<วันที่>.txt บรรทัดละรายการ คั่นด้วยขีดตั้ง (ลำดับ, เลขประจำตัวผู้เสียภาษี, ชื่อ, วันที่, ฐานภาษี, ภาษีหัก) (:717-735)
เมนู system_tool อื่นทั้งหมด (1026, 1097-1099, 1102, 1110, 1112, 1116-1118, 4016, 9003) ปุ่มแค่โหลดตารางใหม่แล้วขึ้น "ประมวลผล <ชื่อเมนู> เรียบร้อยแล้ว" (:735-736) ไม่มีการเขียนข้อมูลหรือสำรอง/กู้คืนจริง

ตารางที่แต่ละเมนูแสดงตอนเปิด:

เมนู ผลที่เห็น ตารางที่อ่าน
1026 เพิ่มคลังและพื้นที่เก็บอัตโนมัติ รายการคลังคู่ที่เก็บ (ค้นตามคำค้น, 200 แถว) คลังสินค้า (ic_warehouse), พื้นที่เก็บสินค้า (ic_shelf)
9003 ตรวจสอบโครงสร้างผังบัญชี จำนวนบัญชีที่ตรวจ ผังบัญชี (gl_chart_of_account)
9040 ส่งออกข้อมูลภาษีหัก ณ ที่จ่าย รายการหัก ณ ที่จ่าย หัวเอกสารหัก ณ ที่จ่าย (gl_wht_list)
1102 ลดขนาดข้อมูล แถวใช้งาน/แถวรอคืนพื้นที่/ขนาดตาราง pg_stat_user_tables
1098/1099 สำรอง/กู้คืนข้อมูล ขนาดตารางที่จะสำรอง pg_stat_user_tables
1112 นำเข้าข้อมูลหลัก จำนวนรายการข้อมูลหลัก 6 หมวด ทะเบียนสินค้า (ic_inventory), ทะเบียนลูกหนี้/ลูกค้า (ar_customer), ทะเบียนเจ้าหนี้/ผู้ขาย (ap_supplier), ผังบัญชี (gl_chart_of_account), ทะเบียนสินทรัพย์ (as_asset), erp_user — ผู้ใช้/พนักงานในฐานบริษัท
1116/1117 นำเข้าข้อมูลจากรูป, ย้ายรูปภาพสินค้า รายการรูปภาพ ตาราง images
1097 ผังการทำงานระบบ จำนวนเอกสาร/มูลค่าต่อโมดูล 6 โมดูล (ซื้อ ขาย คลัง เจ้าหนี้-ลูกหนี้ เงินสดธนาคาร บัญชี) หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans), หัวเอกสารใบวางบิล/ใบเสร็จ-จ่ายชำระหนี้ (ap_ar_trans), หัวสรุปการรับ/จ่ายเงิน (cb_trans), หัวสมุดรายวันทั่วไป (gl_journal)
5006/6007 นำเข้าที่อยู่จัดส่งเจ้าหนี้/ลูกหนี้ รายการที่อยู่จัดส่ง ที่อยู่จัดส่ง/ป้ายขนส่งของเจ้าหนี้-ลูกหนี้ (ap_ar_transport_label)
4016 ส่งข้อมูล e-Tax ใบกำกับภาษีขายที่ส่งได้ หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans)
6011 คำนวณแต้มสะสม เอกสารที่ใช้คำนวณแต้ม หัวเอกสารสินค้า/ซื้อ/ขาย (ic_trans)
1110 หน้าจอเริ่มต้น สรุปจำนวนข้อมูลเริ่มต้น 6 หมวด หลายตาราง
1118 แสดง Resource Language ข้อความภาษาในระบบ sml_resource

มีเมนูในโค้ดอีก 2 ชื่อที่ไม่มีในต้นไม้เมนูปัจจุบัน แต่ตัวโหลดรองรับ: ตรวจบาร์โค้ดซ้ำ (menu_ic_barcode_dup) และบาร์โค้ดไม่ครบ 13 หลัก (menu_ic_barcode_check_13) อ่าน บาร์โค้ดและราคาขายหน้าร้าน (ic_inventory_barcode) (:1833-1855)

แผง AI Copilot Suite (ปุ่ม "✨ AI ผู้ช่วยตรวจสอบบัญชี...")

  • ปุ่มสลับเปิด/ปิดแผงอยู่ในแถบปุ่มบนของทุกโหมด (:841-851, สถานะ aiCopilotOpen :209) แผงโผล่ใต้แถบปุ่ม ก่อนกล่องกรอง (:875-1281) ไม่ผูกกับเมนูหรือโหมดใด ผลของแผงนี้แยกจากตารางหลักของจอ การ์ด 1-2 ส่งช่วงวันที่ "จากวันที่/ถึงวันที่" ของจอไปด้วย
  • หัวแผง "SML AI Copilot Suite" มีแท็บ 5 อัน (aiCopilotTab :210, :888-892): "✨ แสดงครบทั้ง 4 ระบบ" (ค่าตั้งต้น วางการ์ดทั้ง 4 เรียงลงมา), "1. AI กระทบยอดรายการเดินบัญชีธนาคาร", "2. AI ตรวจสอบความผิดปกติก่อนปิดงวด", "3. AI แนะนำจุดสั่งซื้อสินค้า 2 หน่วยนับ", "4. AI แนะนำผังบัญชีและแยกภาษีอัตโนมัติ" และปุ่ม "✕ ซ่อนแผง AI Copilot" (:909-911) การ์ดแต่ละใบโชว์เมื่อแท็บเป็น "ทั้งหมด" หรือแท็บของตัวเอง (:915, :1010, :1081, :1180)
  • ทุกปุ่มรันปิดระหว่างทำงาน (aiCopilotBusy) สำเร็จขึ้นข้อความสถานะ ผิดพลาดขึ้นแถบแดงของจอ (:868-873) ตัวเรียกอยู่ที่ :301-367
การ์ด ปุ่ม / ช่องกรอก ส่งไป workflow ผู้ใช้เห็นอะไร
1 กระทบยอดธนาคาร (:914-1007) "🔍 รันกระทบยอด Bank Statement อัตโนมัติ" ไม่มีช่องกรอก ai-bank-reconcile {dateFrom, dateTo} (:301-316) ข้อความ "AI กระทบยอดธนาคารสำเร็จ (N รายการ)" (:310) กล่องสรุป 5 ช่อง: Exact Match, หัก ณ ที่จ่าย (WHT), ค่าธรรมเนียมธนาคาร, ยังไม่จับคู่, ยอดรวม Statement vs ระบบ (ต่าง ...) (:939-962) และตาราง 10 คอลัมน์: #, วันที่, อ้างอิง Statement, รายการ Statement, ยอด Statement, เอกสารในระบบ, ยอดในระบบ, ผลต่าง, สถานะการจับคู่ (ป้าย + ความมั่นใจ %), คำอธิบาย AI (:968-977)
2 ตรวจก่อนปิดงวด (:1009-1078) "🛡️ สแกนความผิดปกติทั้งระบบ" ไม่มีช่องกรอก ai-audit-copilot {dateFrom, dateTo} (:318-333) ข้อความ "AI สแกนความผิดปกติสำเร็จ (คะแนนสุขภาพบัญชี N/100)" (:327) ป้าย "คะแนนสุขภาพบัญชี", Critical, Warning, Pass (:1035-1046) และการ์ดผลตรวจ 3 คอลัมน์ ขอบแดง/เหลือง/เขียวตามระดับ แสดง category · code, ระดับ, หัวข้อ, รายละเอียด, "💡 คำแนะนำ" (:1049-1075)
3 จุดสั่งซื้อ 2 หน่วยนับ (:1080-1177) checkbox "เฉพาะสินค้าหน่วยนับขนาน" (ไม่ติ๊กเป็นค่าตั้งต้น :258) + ปุ่ม "📦 คำนวณแผนสั่งซื้อสินค้า 2 หน่วยนับ" ai-smart-reorder {onlyParallel} (:335-349) ข้อความ "AI คำนวณแผนสั่งซื้อสินค้า 2 หน่วยนับสำเร็จ (N รายการ)" (:343) ป้าย "วิเคราะห์ทั้งหมด", "สินค้าหน่วยนับขนาน", "ควรสั่งซื้อเพิ่ม" (:1118-1124) และตาราง 12 คอลัมน์: รหัสสินค้า, ชื่อสินค้า, หน่วยหลัก, คงเหลือ, ค้างรับ PO, ค้างส่ง SO, สุทธิพร้อมขาย, แนะนำสั่งซื้อ, หน่วยขนาน, คงเหลือ (2), แนะนำสั่งซื้อ (2), สถานะ (:1132-1143)
4 แนะนำผังบัญชี (:1179-1279) ช่อง "คำอธิบายรายการค้า:" (ค่าตั้งต้น "จ่ายค่าไฟฟ้าและค่าอินเทอร์เน็ตสำนักงานประจำเดือน" :283), ช่อง "จำนวนเงินรวม (บาท):" (ค่าตั้งต้น 10700.00 :284), checkbox "รวม VAT 7%" (ติ๊กเป็นค่าตั้งต้น :285), ปุ่ม "⚡ แนะนำคู่บัญชี Dr/Cr" ai-auto-gl {description, amount, includeVat} (:351-367) ถ้าเว้นช่องว่างส่งค่า "จ่ายค่าใช้จ่ายสำนักงาน" / "1070.00" ข้อความ "AI แนะนำคู่บัญชีสำเร็จ (เดบิต X = เครดิต Y)" (:361) เหตุผลการจัดหมวดบัญชีพร้อมความมั่นใจ % (:1241) "รวมเดบิต X = รวมเครดิต Y" (:1244) และตาราง 5 คอลัมน์: รหัสบัญชี, ชื่อผังบัญชี, บทบาท, เดบิต (Dr), เครดิต (Cr) (:1252-1256)
  • แผงนี้แสดงผลอย่างเดียว ไม่มีปุ่มบันทึก/ผ่านรายการ ผลจาก AI ไม่ถูกเขียนลงฐานข้อมูลและไม่เข้าตารางหลักของจอ (handler ทั้ง 4 แค่เก็บผลลง state, :301-367)
  • ทั้ง 4 workflow ฝั่ง backend เป็นตรรกะตามกฎ ไม่เรียก LLM ภายนอก และต้องสิทธิ์ Admin ตามค่าตั้งต้น (permission.go:132) ผู้ใช้ที่สิทธิ์ไม่พอจะเห็นข้อความผิดพลาดจากเซิร์ฟเวอร์ในแถบแดง รายละเอียดกติกาแต่ละตัวอยู่ที่ ผู้ช่วย AI แบบกฎคำนวณ 6 ตัว (AI Copilot ai-*)
  • ข้อจำกัดที่ผู้ใช้อาจเข้าใจผิด: (1) การ์ด 1 ไม่มีช่องให้ใส่หรือนำเข้า Statement จริง ปุ่มส่งแค่ช่วงวันที่ซึ่ง backend ไม่ใช้ เมื่อไม่มีรายการ Statement backend สร้างรายการทดสอบจากเอกสารในระบบเองแล้วจับคู่ (ai_copilot.go:556-560) ผลจึงไม่ใช่การกระทบยอดกับสมุดธนาคารจริง (2) การ์ด 2 ส่งช่วงวันที่ไปแต่ backend ไม่ใช้เช่นกัน ตรวจทั้งระบบทุกครั้ง

ข้อควรระวัง

  • งานเขียนข้อมูล (สต๊อก, GL, ปิดงวด, เปลี่ยนรหัส) ถามยืนยันครั้งเดียวแล้วรัน ไม่มีปุ่มยกเลิกกลางทาง
  • 1097/1098/1099/1102 (ผังระบบ, สำรอง, กู้คืน, ลดขนาด) เป็นเพียงจอดูข้อมูล ไม่ได้สำรอง กู้คืน หรือลดขนาดฐานจริงในตัวจอ ชื่อเมนูอาจทำให้เข้าใจผิด
  • โหมด gl_process ทั้ง 6 ชื่อเมนูใน registry ใช้ตัวจัดการเดียวกัน ความต่างอยู่ที่ป้ายและตัวกรอง
  • เมนูที่ไม่มีเงื่อนไขใน loadSystemToolData จะเห็นรายชื่อตารางในฐานข้อมูลแทน
  • สิทธิ์ "ลบ" แยกจากสิทธิ์ "แก้ไข" ผู้ใช้ที่ประมวลผลได้อาจกดลบเอกสารค่าเสื่อมไม่ได้ (:824)

ที่มาในโค้ด