ระบบนี้เหมือนโปรแกรม C# เดิม (SMLCM) แค่ไหน ตรวจ parity อย่างไร และเมื่อต่างกันให้ยึดอะไร
ตอบสั้น: โครงสร้าง (เมนู ตาราง ฟิลด์ master ภาษา) ถูกสกัดจากซอร์ส C# และเทียบครบแล้ว แต่ "พฤติกรรมเหมือน C#" ยังไม่มีตัวชี้วัดอัตโนมัติ ต้องพิสูจน์ด้วยเทสต์/UAT ทีละเรื่อง กติกาคือ C# เป็นความจริงสูงสุดของ "ธุรกิจ" และใช้เป็นฐานความรู้ (KMS) อ่านอย่างเดียว ไม่แก้ย้อนกลับ ส่วนที่เว้นไว้หรือจงใจต่างถูกทำเครื่องหมายเป็นคอมเมนต์ ponytail: ในโค้ด Go
รายละเอียด
รายงาน parity บอกอะไร (docs/smlcm_parity_report.json, สร้างโดย scripts/extract-smlcm-blueprint.mjs):
| ตัวเลข | ค่าในรายงาน | ความหมาย |
|---|---|---|
totalLeafMenus |
708 | เมนูใบทั้งหมด (:3) นับ smlMenu.json แบบง่ายตอนนี้ได้ราว 710 วิธีนับต่างกัน จึงอย่าใช้เป็นตัวชี้วัด |
| ตาราง / lookup / ภาษา | 520 / 180 / 5,145 | สกัดจากไฟล์ metadata ต้นฉบับ |
| เมนูแยกตามตัวจัดการหน้าเว็บ | 66 + 80 + 19 + 390 + 153 | เฉพาะตัวจัดการ (จอเฉพาะ, StandardMasterScreen, MasterDetailScreen, รายงาน/workbench, UniversalTransScreen) |
masterScreenFieldDiscrepanciesCount |
0 | ฟิลด์จอ master ตรงกับ C# เฉพาะจอ StandardMasterScreen (extract-smlcm-blueprint.mjs:599) |
สิ่งที่รายงานไม่ได้พิสูจน์:
- สถานะ "100% Ported & Verified" ของ 8 โดเมน backend เป็นสตริงที่เขียนตายตัวในอาร์เรย์
backendDomainMapping(extract-smlcm-blueprint.mjs:155เป็นต้นไป) ไม่ใช่ผลเทียบ และชื่อไฟล์ Go ในช่องgoSourcesปัจจุบันมีอยู่จริงเพียง 13 จาก 33 รายการในbackend/internal/application/process/(เช่นrebuild.go,stock_check.go,price.goไม่พบในโค้ดแล้ว) แปลว่าแผนที่โดเมนล้าหลังการจัดไฟล์ใหม่ - จอธุรกรรม รายงาน และ process ไม่ได้ถูกเทียบพฤติกรรมในสคริปต์ ต้องดูเทสต์และ UAT (สถานะ Parity กับ SMLCM ตามเอกสาร (SMLCM Parity Status), บทเรียน เครื่องมือรายงานให้ตรง C# (Report engine parity))
ลำดับถอดแบบจอจาก C# (source-first) ตาม AGENTS.md:42: หา menuKey ใน smlMenu.json → ไล่ case "<menuKey>" ใน _selectMenu.cs ของโมดูลที่เกี่ยวข้อง → แกะ .cs และ Designer.cs (ดู RemoveAt/Dispose/Visible = false เพราะแท็บอาจถูกซ่อน) → ทำ schema ฝั่งเว็บให้ครบทุกฟิลด์ (ถอดแบบหน้าจอจาก C# เดิม (C# Screen Porting, Source-First, KMS Only), รหัสเมนู (เช่น 2.1.7 หรือ 4013) คือหน้าจอไหน และระบบเปิดหน้าจอจากรหัสยังไง)
เมื่อโค้ด Go ต่างจาก C# ให้ยึดอะไร:
- ดูคอมเมนต์ในโค้ดก่อน ไฟล์ Go ที่พอร์ตจะอ้างตำแหน่ง C# (เช่น
_icTransItemGridControl._findPriceByItem cs:10385-10433ในprice_center.go:19) ค้นแล้วมี 79 ไฟล์ที่อ้าง.csใช้ตามไปเทียบได้เลย - ค้นคำว่า
not ported/kept deviation/deliberateที่ท้ายไฟล์ ข้อที่ตั้งใจต่าง เช่น OTP ขอเพิ่มวงเงิน (trans_credit.go:18-20), ยอดมัดจำล่วงหน้าในขั้นขอวงเงินเป็น 0 (trans_credit.go:112), รายงานยอดค้างลูกหนี้/เจ้าหนี้กรองใบขายสินทรัพย์ที่ยกเลิกออกทั้งที่ C# ไม่กรอง (report_menu_ap_ar.go:552), doc flow ยังไม่พอร์ตแถว 213/235 และผู้เขียนบันทึกว่าวิธีนับ flag 99 ของ C# ดูเป็นบั๊ก จึงรอให้มีหน้าเว็บที่อ่านสถานะก่อน (doc_flow.go:90) - ถ้าคอลัมน์มีใน C# แต่ฐานเก่ายังไม่มี ห้ามตัดฟิลด์ออกจากจอ ให้เพิ่มคอลัมน์ด้วย
ADD COLUMN IF NOT EXISTS(AGENTS.md:51) - ส่วนที่เปลี่ยน contract จริง (เพิ่มฟิลด์ใน struct) ถือเป็นการเปลี่ยนแบบ R1 ต้องบอกเหตุผล ไม่ใส่ลงช่อง client เฉย ๆ (บทเรียนเอกสารอ้างอิงและ Doc Flow (Document Reference & Flow))
ข้อควรระวัง
- อย่าอ้างว่า "ตรง C# 100%" จากรายงาน JSON เพียงอย่างเดียว ให้อ้างเทสต์หรือผล UAT ของเรื่องนั้น และดูรายการที่ยังไม่เสร็จที่ งานที่ยังไม่เสร็จหรือยังไม่ได้พอร์ตในระบบมีอะไรบ้าง (รายการค้างที่ตรวจกับโค้ดจริง)
- ตัวนับ "เมธอด Go 1,327 / C# 669" ใช้เกณฑ์ต่างกัน ห้ามเทียบกันเป็นเปอร์เซ็นต์ความครบ (บันทึกต้นทางเตือนไว้เองและพบว่าเอกสาร handoff อ้างเลขอีกชุด)
- ซอร์ส C# อยู่นอก repo นี้และใช้เป็น KMS อ่านอย่างเดียว ห้ามแก้ไฟล์ C# ถ้าต้องแก้ ให้เขียนเป็นคำสั่งงานให้ผู้ดูแลทำ
- รายงาน parity สร้างเมื่อ 22 ต.ค. 2026 หลังจากนั้นมีการแก้อีกหลายรอบ (UAT รอบ 3 และ S1) ถ้าต้องการตัวเลขปัจจุบันให้รันสคริปต์ใหม่ (ไม่ได้รันในรอบตรวจนี้)
- ข้อมูลรหัสธุรกรรม (flag) ที่ต้องแมปกับ C# ดู รหัสชนิดเอกสาร trans_flag และทิศทางสต็อก (Trans Flag Map) และตำแหน่งที่จัดการ flag ใน trans_flag ตัวหนึ่งถูกจัดการที่ไหนในโค้ดบ้าง (ถ้าจะเพิ่มหรือแก้ชนิดเอกสารต้องดูไฟล์ไหน)
ดูเพิ่ม
- สถานะ Parity กับ SMLCM ตามเอกสาร (SMLCM Parity Status)
- ถอดแบบหน้าจอจาก C# เดิม (C# Screen Porting, Source-First, KMS Only)
- งานที่ยังไม่เสร็จหรือยังไม่ได้พอร์ตในระบบมีอะไรบ้าง (รายการค้างที่ตรวจกับโค้ดจริง)
- บั๊กที่เคยเกิดซ้ำในโปรเจกต์นี้มีอะไรบ้าง และบทเรียน/กฎที่ต้องระวังก่อนแก้โค้ดคืออะไร
- trans_flag ตัวหนึ่งถูกจัดการที่ไหนในโค้ดบ้าง (ถ้าจะเพิ่มหรือแก้ชนิดเอกสารต้องดูไฟล์ไหน)
- รหัสเมนู (เช่น 2.1.7 หรือ 4013) คือหน้าจอไหน และระบบเปิดหน้าจอจากรหัสยังไง
ที่มาในโค้ด
docs/smlcm_parity_report.json:3totalLeafMenusและสถานะโดเมนที่ตายตัว (บรรทัด 31, 43, 59 ...)scripts/extract-smlcm-blueprint.mjs:155backendDomainMapping/:599เงื่อนไขตรวจฟิลด์เฉพาะStandardMasterScreenAGENTS.md:42โฟลว์สืบค้นเมนู /:51Forward-Only และเพิ่มคอลัมน์ที่ขาดbackend/internal/application/process/price_center.go:19ตัวอย่างคอมเมนต์อ้าง C# พร้อมส่วนที่ไม่พอร์ตbackend/internal/application/process/doc_flow.go:90แถว 213/235 ที่ยังไม่พอร์ต พร้อมข้อสังเกตบั๊กของ C#backend/internal/application/process/trans_credit.go:18ส่วนเบี่ยงเบนที่ตั้งใจ (OTP, dblink) และ:112backend/internal/application/process/report_menu_ap_ar.go:552ส่วนที่ตั้งใจต่างจาก C# ในรายงาน