กฎแสดงผลให้เข้าใจง่าย
ทุกหน้าจอและรายงานต้องอ่านออกเอง: ตัวเลขไม่ปัดบรรทัด ค่า 0 ไม่ขึ้นเลขเปล่า ๆ วันที่ไม่โชว์ ISO ดิบ ไม่มีวงเล็บว่าง () และป้ายไม่มีชื่อตัวแปร กฎกลางของช่องกรอก/ป้ายอยู่ที่ ช่องกรอกมาตรฐานและกฎป้ายข้อความ (NumberBox, DateBox, CodeBox, LookupBox, ห้าม F1-F12) และ ปีปฏิทิน พ.ศ./ค.ศ. และระบบ 2 ภาษา + Balloon Help (year_type, Bilingual) โน้ตนี้เก็บกติกาฝั่ง การแสดงผลค่าที่มาจาก SQL ที่ skill premium-ui-motion-system ข้อ 9 ระบุไว้ (SKILL.md:21-30) และยังไม่มีโน้ตอื่นรวมไว้
กฎ/วิธีทำ
- ตัวเลขอ่านอย่างเดียว (ตาราง/ช่องที่ไม่ได้พิมพ์) แสดงผ่าน
formatMoneyDisplay()(frontend/src/lib/numeric.ts:587) เสมอ — คั่นหลักพัน และค่าที่ปัดแล้วเป็น 0 คืนสตริงว่าง (numeric.ts:599) ตรงกับAGENTS.md:40(0 หรือ 0.00 แสดงว่าง) - ตารางเล็กที่ไม่ได้ใช้ helper กลาง ให้แก้ที่ตัวกลางจุดเดียวของตารางนั้น ไม่แก้ทีละคอลัมน์:
numCellในSimpleGrid(frontend/account/master/StockToolBits.tsx:78— ว่างเฉพาะคอลัมน์ชิดขวาที่ค่าเป็น 0) และpreviewCellTextของตัวออกแบบรายงาน (frontend/account/report/FastReportDesignerScreen.tsx:4065) - ช่อง
<input>ข้อความที่เก็บค่าตัวเลข (เช่นส่วนลดdiscount_word) ต้องว่างเฉพาะตอนอ่านอย่างเดียว ห้ามแปลงตอนพิมพ์ ไม่เช่นนั้นพิมพ์0.5ไม่ได้ —shownWord(w, readOnly)คืนว่างเมื่อreadOnlyและค่าเป็นชุด0/.เท่านั้น (TransBottomPanel.tsx:62, ใช้ที่:109) - ข้อความ
รหัส(ชื่อ)ใน SQL ต่อวงเล็บเฉพาะเมื่อชื่อไม่ว่างและไม่ซ้ำรหัส ด้วยรูปconcat(code,'('||nullif(nullif(trim(name),''),code)||')')(ตัวอย่างคอลัมน์unit_standard_disp,frontend/src/lib/lookup-tables.ts:106-109) จะไม่ได้ชุด()หรือแพ็ค(แพ็ค)ส่วนรูปกลับด้าน ชื่อ ตามด้วย (รหัส) ใช้COALESCE('('||NULLIF(d.cust_code,'')||')','')เพื่อไม่ให้วงเล็บว่างเช่นกัน (report_menu_ic.go:880) - วันที่จาก SQL (
doc_date::text) เป็น ISO ค.ศ. ต้องส่งผ่านformatBcDate()ก่อนแสดงเสมอ — ตัวอย่างformatCellValตรวจชื่อคอลัมน์ที่มีdateแล้วเรียกformatBcDate(SystemProcessWorkbenchScreen.tsx:2154-2162; กติกาปีAGENTS.md:58) - หัวคอลัมน์ที่สร้างจากชื่อคอลัมน์ SQL อัตโนมัติ ถ้าความหมายต่างกันตามจอให้ตั้ง alias ใน SQL แทนการใช้ป้ายเดียวผิดความหมายทุกจอ — ตัวอย่างจอรายงานหัก ณ ที่จ่าย
COALESCE(cust_code,'') AS payee_code(SystemProcessWorkbenchScreen.tsx:1872) ป้ายไทยกำหนดที่:2118("รหัสผู้ถูกหัก") - ช่องค้นหาใน DataList มีไอคอน
Searchซ้ายในช่อง และ placeholderค้นหา รหัส / ชื่อ…(frontend/account/master/BcDataList.tsx:724,data-testid="bc-datalist-search-input")
ตัวตรวจ UX อัตโนมัติ
- สคริปต์
uat/openhands-swarm/runner/ux-audit.mjsเปิดทุกเมนูที่อยู่ในuat-scripts/smoke-*.jsonแล้วรายงานรายหมวด: ตัวเลข/วันที่ปัดบรรทัด (wrapNum), เลข 0 (zero), ป้ายมี(ชื่อ_ตัวแปร)(varLabel), วันที่ ISO ดิบ (isoDate), วงเล็บว่าง()(emptyParen), ข้อความ nowrap ล้นทับคอลัมน์ข้างเคียง (spill) — เทียบกับAGENTS.md:40-42(ตัวเลข),:58(ปี),:59(ป้ายและตาราง) - วิธีรัน:
node uat/openhands-swarm/runner/ux-audit.mjs <out.json> http://localhost:3001 6(อาร์กิวเมนต์ที่ 3 คือจำนวน worker; ตัวแปรONLY=menu_a,menu_bจำกัดเมนู) - สคริปต์ใช้ Playwright จึงต้องรอลุงจืดสั่งก่อนรัน (skill ข้อ 10: ไม่รัน Playwright อัตโนมัติเมื่อจบงาน) รอบล่าสุดที่บันทึกไว้คือ 2026-11-01: 690 เมนู flagged = 0 (
docs/kms/HANDOFF_ANTIGRAVITY.md:59-61; ผลเป็นภาพ ณ วันนั้น ไม่ใช่การรับประกันปัจจุบัน)
ที่มา
.agents/skills/premium-ui-motion-system/SKILL.mdWorkflow ข้อ 9–10AGENTS.md:40-42,:58-59docs/kms/HANDOFF_ANTIGRAVITY.md§4 วิธีรัน / ทดสอบ- โค้ดตามรายการ
sources(ตรวจแล้วมีจริง)
ดูเพิ่ม
สารบัญมาตรฐานและกฎเหล็กของ BC Ai Account (Standards Overview) · ช่องกรอกมาตรฐานและกฎป้ายข้อความ (NumberBox, DateBox, CodeBox, LookupBox, ห้าม F1-F12) · ปีปฏิทิน พ.ศ./ค.ศ. และระบบ 2 ภาษา + Balloon Help (year_type, Bilingual) · ตารางกว้าง 100% ปุ่ม Auto-Fit ↔ / Reset ↺ และตัวเลขห้ามปัดบรรทัด (Grid Auto-Fit, Numeric nowrap) · เฝ้าและตอบใบงาน IssueMate BCAIACC (wait_for_issue.py, reply-batch, คำถาม PDF) · ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)