สมอง SML

คลังความรู้ / ประวัติ & บทเรียน

#history#overview#timeline#moc

ประวัติและบทเรียนของระบบ SML Ai Account

หน้านี้คือศูนย์กลาง (hub) ของมิติ "ประวัติและบทเรียน": ระบบวิวัฒนาการอย่างไร และบั๊กหรือกับดักชนิดใดที่เจอซ้ำ สกัดจาก git log กับเอกสารส่งต่องาน (handoff) ทุกอย่างอ้าง SHA แบบ 8 ตัวอักษร และ path:line ของโค้ดปัจจุบัน

ภาพรวม

  • ประวัติใน git ทั้งหมดอยู่ในช่วงเดียว 19–29 ต.ค. 2026 (ไม่มี commit วันที่ 28) รวม 234 commit; ในนั้น 175 commit แตะ backend/ หรือ frontend/account/ (ขอบเขตของมิตินี้)
  • commit แรก 8bd921d1 (19 ต.ค.) รวม Go backend + Next.js 16 แบบแยกโมดูล + POS เข้า monorepo เดียว ส่วน TODO.md ถูกเพิ่มใน commit นี้และไม่เคยถูกแก้อีก จึงเป็นภาพนิ่งของยุค "เว็บพอร์ต + mock ข้อมูล" ก่อนมี Go backend จริง (ดู งานค้างที่ยังเปิดอยู่ (Open Items Verified Against Code))
  • จำนวน commit ที่แตะขอบเขตต่อวัน: 19=10, 20=12, 21=25, 22=45, 23=8, 24=33, 25=12, 26=17, 27=3, 29=10 (วันที่ 22 และ 24 หนักสุด)
  • วันที่ใน log เป็น author date ตามลำดับ commit จริง บางช่วงเวลาไม่เรียงต่อเนื่อง (เช่น a47413ec 01:30 อยู่หลัง 6e9ae03e 07:24 ของวันที่ 24)
  • commit ที่อยู่นอกขอบเขต (59 ตัว เช่น Balloon Help, build stamp, AutoCare, form print ฝั่ง portal, เอกสาร KMS) ไม่เล่าที่นี่ ยกเว้นที่เป็นที่มาของบทเรียน เช่น faa6e6d0 (ชุดแก้ความปลอดภัยฝั่ง frontend/src)

ไทม์ไลน์ (ต.ค. 2026)

19 ต.ค. — รวมระบบ และไล่ปิด issue จาก GitHub เป็นก้อน

20 ต.ค. — พอร์ตเมนูและจอหลักให้ตรง C#

  • 04fb2f9f / a352b60f จอสินค้า 2.1.1 บันทึกผ่าน Go (itemmaster); ebe66efd rebuild ic_serial ตอนบันทึกสินค้า
  • a396c7b8, 3aad0b1a, 2c97aa3a, c201ca5a ไล่ปรับเมนู 816 → 1,457 → 742 → 708 รายการให้ตรง SMLCM และกำหนด trans_flag 276/801/802
  • 360ff250 ครบ 26 จอในเมนู 1.1; 769fc3bb คลัง/ที่เก็บ ic_wh_shelf; 6ba1a6d9 แก้ 401 token refresh และ auto stock adjust 2.19.6/2.19.7 → บทเรียนการบันทึก master data ไม่ให้ข้อมูลหาย (Master Save: Preserve Columns)

21 ต.ค. — ชุด SMLCM parity และ "กฎ R-" ฝั่ง backend

22 ต.ค. — วันที่หนักสุด: คลื่น R3 และปิดรอบ parity

23 ต.ค. — จอข้อมูลภูมิศาสตร์/ธนาคาร และ UX

24 ต.ค. — ไล่หาบั๊กทั้งโปรเจกต์ (security + data integrity sweep)

25–27 ต.ค. — รุ่น (edition), ประเภทธุรกิจ, ภาษา

  • b9c13081 กฎ "เว็บใช้ปุ่มบนจอ ไม่ใช้ F1–F12"; a67dc5f0 เมนูเฉพาะแอดมิน; 3e69b2b5 MCP แบบอ่านอย่างเดียว
  • 6442540d / 422b5996 สลับรุ่น Starter/Account/Pro; a4b2fa88 → 4d238d4b 17 ประเภทธุรกิจ; b10adb77 รหัสเมนู 4 หลัก; 9a2ce199 เลิกรุ่น Express + บังคับล็อกอินใหม่เมื่อ session หมด
  • 89d49042, 3ec04525, 09d490a5 พิมพ์ฟอร์มเอกสาร; d6bfe1b5 ขอคืน VAT นักท่องเที่ยว (e-VRT) → บทเรียน ข้อความไทยใน PDF และงานพิมพ์ (Thai text, PDF and print)
  • 47fce10e (27 ต.ค.) สลับภาษาไทย/อังกฤษทั้งระบบ + Balloon Help สองภาษา

29 ต.ค. — รอบ UAT S1 และตั๋ว IssueMate

  • 13f953cc แก้ 13 บั๊กระดับ S1 + 5 รายการ Hold (ลง GL, ต้นทุนถัวเฉลี่ย, สิทธิ์, ความปลอดภัยรายงาน, bcrypt)
  • a3809aba ห้ามเรียก query/list ก่อนล็อกอิน, seed ลูกค้า POS, อนุมานอัตรา VAT เมื่อเป็น 0; 8dad8a4d (SMLAIACC-122); 3ca3b07b (SMLAIACC-123…169)
  • ชุด SMLAIACC-234/235: 536f2f7c, 5f76fd75, 4c503032, e6c8e0af, 91799b37, 75c8a5b6 (คงคอลัมน์นอกจอตอน UPDATE ของ ar_dealer) = commit ล่าสุดในขอบเขต → บทเรียนการบันทึก master data ไม่ให้ข้อมูลหาย (Master Save: Preserve Columns)

รูปแบบบั๊กที่วนซ้ำ (cross-cutting)

  1. เดา/สร้างเองแทนอ่านโค้ด C# — จอ 1.1.2 รอบแรกสร้างจาก markdown ได้ฟิลด์หาย 7 และเดาเอง 3 (บทเรียนบรรทัดแรกของ TODO.md), คอลัมน์ส่วนลดบาร์โค้ดที่แต่งขึ้นถูกถอดใน 7064535f → บทเรียน schema drift และคอลัมน์ที่เดาเอง (Schema Drift & Invented Columns)
  2. ตัวเลขปัดไม่ตรงจุดของ C# (ToEven/HALF_UP/double, 2 ตายตัว) → บทเรียนบั๊กการปัดเศษและทศนิยมเงิน (Rounding & Decimal Bugs)
  3. งาน async ลงผิดเอกสาร/ผิดแท็บ (โหลดซ้อน, คีย์ลัดแท็บที่ซ่อน, listKey ชน) → แท็บ MDI: คีย์ลัดแท็บซ่อน, listKey ชน, กันทิ้งข้อมูล (Hidden-Tab Hotkeys & Dirty Guard)
  4. เขียนครึ่งๆ กลางๆ + ทิ้ง error แล้วตอบ 200 → บทเรียนธุรกรรมอะตอมมิกและ error ที่ถูกกลืน (Atomic Transactions & Swallowed Errors)
  5. ประตูเขียนข้อมูลหลายบาน (/query/exec, /blob/insert, proxy) ต้องใช้นโยบายเดียวกัน → บทเรียนการล็อกการเขียนผ่าน query gateway (Query Gateway Write Lockdown)
  6. วันที่/ปี: toISOString() เป็น UTC, +543 ตายตัว → บทเรียน ปี พ.ศ./ค.ศ. และวันที่ (Dates, Buddhist year and year_type)
  7. ข้อมูลทดสอบค้างใน DB สาธิต ลบผ่าน API ของแอป ไม่ใช่ SQL ดิบ → บทเรียนรอบ UAT และบั๊ก S1 วันที่ 2026-10-29 (UAT Rounds & S1 Bugs)

แผนที่บันทึกบทเรียน

หมวด โน้ต
บัญชี/เงิน บทเรียนบั๊กการปัดเศษและทศนิยมเงิน (Rounding & Decimal Bugs) · บทเรียนบั๊กลงบัญชี GL และความสมดุล (GL Posting & Balance Bugs) · บทเรียนบั๊กภาษีมูลค่าเพิ่มและภาษีหัก ณ ที่จ่าย (VAT, WHT & e-Tax Mistakes) · บทเรียนบั๊กการชำระเงิน เช็ค และช่องทางรับจ่าย (Payment, Cheque & Tender Bugs) · บทเรียนบั๊กสต็อกและต้นทุนถัวเฉลี่ย (Stock & Moving Average Cost Bugs)
เอกสาร บทเรียนกฎตอนบันทึกเอกสาร (Trans Save Rules & Validation) · บทเรียนเอกสารอ้างอิงและ Doc Flow (Document Reference & Flow) · บทเรียน Serial / Lot / ข้อมูลขนส่ง (Serial, Lot & Shipment Persistence) · บทเรียนยกเลิก ลบ และยกเลิกรายบรรทัด (Cancel, Delete & Partial Cancel)
ธุรกรรม/พร้อมกัน บทเรียนธุรกรรมอะตอมมิกและ error ที่ถูกกลืน (Atomic Transactions & Swallowed Errors) · บทเรียนบั๊กการทำงานพร้อมกันและ advisory lock (Concurrency & Advisory Locks) · บทเรียน ประสิทธิภาพและภาระระบบ (Performance and load)
ความปลอดภัย บทเรียนการล็อกการเขียนผ่าน query gateway (Query Gateway Write Lockdown) · บทเรียนระบบสิทธิ์เมนู (Permission & Menu Rights) · บทเรียนตัวตนผู้เช่า การล็อกอิน และ session (Tenant, Auth & Sessions) · บทเรียนช่องโหว่เว็บ XSS และ open redirect (Web Vulnerabilities)
หน้าจอ/ผลลัพธ์ บั๊กตาราง/เลย์เอาต์ที่เคยถอยหลัง (Grid & Layout UX Regressions) · แท็บ MDI: คีย์ลัดแท็บซ่อน, listKey ชน, กันทิ้งข้อมูล (Hidden-Tab Hotkeys & Dirty Guard) · บทเรียน ช่องตัวเลข/วันที่และกฎ 'ศูนย์แสดงเป็นว่าง' (Numeric input, DateBox and blank-zero) · บทเรียน ปี พ.ศ./ค.ศ. และวันที่ (Dates, Buddhist year and year_type) · บทเรียน ข้อความไทยใน PDF และงานพิมพ์ (Thai text, PDF and print) · บทเรียน เครื่องมือรายงานให้ตรง C# (Report engine parity)
ข้อมูลหลัก/กระบวนการ บทเรียนการบันทึก master data ไม่ให้ข้อมูลหาย (Master Save: Preserve Columns) · บทเรียน schema drift และคอลัมน์ที่เดาเอง (Schema Drift & Invented Columns) · บทเรียนรอบ UAT และบั๊ก S1 วันที่ 2026-10-29 (UAT Rounds & S1 Bugs)
สถานะงาน สถานะ Parity กับ SMLCM ตามเอกสาร (SMLCM Parity Status) · งานค้างที่ยังเปิดอยู่ (Open Items Verified Against Code)

วิธีอ่านประวัติอย่างระวัง

  • git log -- backend frontend/account ไม่รวมไฟล์ใน frontend/src/ และ frontend/shared/; ชุดแก้ความปลอดภัยฝั่งหน้าเว็บอยู่ที่ faa6e6d0 ซึ่งไม่ผ่านตัวกรองนี้
  • ข้อความ commit ช่วง 21–24 ต.ค. มักบอกแค่ชื่อเรื่อง โน้ตบทเรียนจึงระบุว่าเคสไหน "ตรวจ diff แล้ว" และเคสไหน "ตามข้อความ commit"
  • working tree ปัจจุบันมีไฟล์ที่ยังไม่ commit (เช่น AGENTS.md, backend/internal/adapter/inbound/http/mcp/gateway.go) โน้ตที่อ้าง path:line อ้างตามไฟล์บนดิสก์ ณ 2026-10-31

ดูเพิ่ม

สารบัญมาตรฐานและกฎเหล็กของ SML Ai Account (Standards Overview) · สารบัญ ADR ของ backend (Architecture Decision Records) · ความถูกต้องของข้อมูล: เงิน ภาษี Transaction เดียว และ Rebuild (Data Integrity, big.Rat, ExecBatch) · บทเรียนบั๊ก UX/หน้าจอธุรกรรม/Master/แท็บ MDI (Frontend UX Bug Lessons) · บทเรียนบั๊กสิทธิ์และการข้ามฐานข้อมูล (Auth Bypass, Cross-Tenant, Demo Read-Only, Screen Rights) · การปัดเศษ ทศนิยม และตัวเลขเงิน (Rounding & Decimal Policy) · กระบวนการสร้างสมุดรายวัน GL ใหม่ (GL Rebuild Process) · การคำนวณยอดสต็อกคงเหลือใหม่ (Stock Balance Rebuild) · ตัดคำไทยใน PDF ไม่แยกสระ/วรรณยุกต์ และรายงานหลายชั้น (Thai Wrap, Multi-Level Report)

ที่มาในโค้ด

  • git log --reverse --format='%h %ad %s' --date=short -- backend frontend/account (175 commit ณ HEAD 3ac50564 ซึ่งเองอยู่นอกขอบเขต; commit ล่าสุดในขอบเขตคือ 75c8a5b6)
  • TODO.md (เพิ่มใน 8bd921d1, ไม่เคยถูกแก้หลังจากนั้น), docs/HANDOFF_SMLCM_PARITY_2026-10-22.md, docs/HANDOFF_CLAUDE_CODE_100_CLONE.md, docs/HANDOFF_CLAUDE_CODE_AUDIT.md
  • docs/kms/KMS_SECURITY_DATA_INTEGRITY_LESSONS.md (ผลไล่หาบั๊ก 24 ต.ค.)