18+ ข้อควรรู้: เครื่องมือนี้ช่วยกำหนดขอบเขตงบและเวลาส่วนบุคคล ข้อมูลทั้งหมดเก็บเฉพาะบนอุปกรณ์ของท่าน (Local-only) ไม่มีการส่งข้อมูลสู่ภายนอก
เอกสารทางเทคนิคและหลักการออกแบบ

ระเบียบวิธีและข้อจำกัดของระบบ (Methodology)

เวอร์ชันเอกสาร: 1.0.0 | ปรับปรุงล่าสุด: 19 สิงหาคม 2026

เอกสารฉบับนี้จัดทำขึ้นเพื่ออธิบายหลักการออกแบบ อัลกอริทึมในการคำนวณ โครงสร้างข้อมูล และข้อจำกัดในเชิงวิศวกรรมของ Responsible Play Control Center เพื่อความโปร่งใสสูงสุดต่อผู้ใช้งาน

1. สถาปัตยกรรมความเป็นส่วนตัว (Local-Only Architecture)

ระบบถูกออกแบบภายใต้ปรัชญา “Localhost / Client-Side First” โดยไม่มีการติดตั้งฐานข้อมูลบนเซิร์ฟเวอร์ (Server Database), ไม่มีการเชื่อมต่อ Advertising Tracking Pixels, และไม่มีระบบเก็บ Log พฤติกรรมของผู้ใช้

  • ข้อมูลการตั้งค่างบประมาณและประวัติเซสชันถูกบันทึกใน localStorage ของเบราว์เซอร์ผู้ใช้เท่านั้น
  • ไม่มี Network Request ใด ๆ เกิดขึ้นระหว่างการใช้งานเครื่องมือจับเวลาหรือการประเมินตนเอง
  • ผู้ใช้สามารถสั่งส่งออก (Export) หรือล้างข้อมูล (Purge) ได้ตลอดเวลาจากหน้า จัดการข้อมูล

2. หลักการคำนวณงบประมาณ (Budget Math & Financial Safety)

ในการจัดการตัวเลขทางการเงิน ระบบใช้การแปลงค่าเป็นหน่วยจำนวนเต็มย่อย (Cent/Satang Integer Math) เพื่อป้องกันข้อผิดพลาดจาก Floating-point Arithmetic ของภาษา JavaScript (เช่น ปัญหา 0.1 + 0.2 ≠ 0.3):

limitCents = Math.round(limitAmount * 100);
spentCents = Math.round(spentAmount * 100);
remainingCents = limitCents - spentCents;
remainingAmount = remainingCents / 100;
percentageSpent = Math.round((spentCents / limitCents) * 100);
        

ระดับการแจ้งเตือนงบประมาณ:

  • safe (ปกติ): ยอดใช้จ่ายน้อยกว่า 80% ของงบประมาณที่กำหนด
  • warning (เตือน): ยอดใช้จ่ายตั้งแต่ 80% ถึง 99% ของงบประมาณ
  • reached / exceeded (ถึง/เกินเพดาน): ยอดใช้จ่ายครบ 100% หรือเกินกว่างบประมาณ

3. กลไกการจับเวลาที่แม่นยำ (Timestamp-based Timer)

ตัวจับเวลาไม่ได้พึ่งพาการนับรอบของ setInterval เพียงอย่างเดียว เนื่องจากเบราว์เซอร์จะลดความถี่ในการทำงานของ Background Tab (Tab Throttling) ระบบจึงใช้การคำนวณผลต่างของเวลาจริง (Timestamp Difference) จาก Date.now():

activeElapsedMs = currentTime - session.startedAt - session.totalPausedMs;
elapsedSeconds = Math.floor(activeElapsedMs / 1000);
        

สิ่งนี้ทำให้แม้ผู้ใช้จะสลับไปใช้งานแท็บอื่น ย่อหน้าจอ หรือเปิดเครื่องใหม่หลังจาก Refresh ตัวเลขเวลายังคงสะท้อนเวลาตามจริงได้อย่างแม่นยำ 100%

4. หลักการแบบประเมินตนเอง (Non-Diagnostic Assessment)

แบบประเมินตนเอง 9 ข้อออกแบบโดยอ้างอิงหลักการสะท้อนพฤติกรรม (Reflective Inquiry) โดย:

  • ไม่ใช้คำศัพท์เชิงคลินิกหรือการวินิจฉัยโรค (Non-clinical labeling)
  • แบ่งผลลัพธ์เป็น 3 ระดับคำแนะนำ (Tier 1: ปกติ, Tier 2: ทบทวนขอบเขต, Tier 3: หยุดพักและปรึกษาผู้เชี่ยวชาญ)
  • แสดงข้อความ Disclaimer ชัดเจนว่าไม่ใช่การตรวจทางการแพทย์

5. Data Dictionary & Storage Schema

Key Name Storage Type คำอธิบาย
h259_settings_v1 localStorage เก็บค่าการตั้งค่างบประมาณ, ระยะเวลาเซสชัน, และสถานะล็อก
h259_sessions_v1 localStorage Array ของประวัติเซสชันที่ผู้ใช้บันทึก (ID, เวลาเริ่ม, จบ, ยอดเงิน, บันทึก)
h259_active_session_v1 localStorage สถานะเซสชันที่กำลังจับเวลาอยู่แบบเรียลไทม์
h259_selfcheck_v1 localStorage ผลการประเมินตนเองล่าสุด (เฉพาะเมื่อผู้ใช้เลือกบันทึก)

6. ข้อจำกัดทางเทคนิค (Known Limitations)

  • การล้างแคชเบราว์เซอร์: หากผู้ใช้สั่ง Clear Browsing Data หรือเปิดในโหมด Incognito/Private ข้อมูลที่บันทึกไว้ในอุปกรณ์จะสูญหาย
  • การใช้งานข้ามอุปกรณ์: ข้อมูลจะไม่ Sync ข้ามอุปกรณ์ (เช่น มือถือกับคอมพิวเตอร์) เนื่องจากไม่มีระบบคลาวด์หรือการล็อกอิน
  • การบล็อกในระดับเบราว์เซอร์: ระบบ Cooling-off lock เป็นการล็อกในระดับหน้าเว็บ ไม่สามารถป้องกันการเข้าถึงเว็บไซต์ภายนอกโดยตรงได้

7. นโยบายการแก้ไขข้อมูล (Correction Policy & History)

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

ประวัติการปรับปรุง:
- 19 สิงหาคม 2026: เผยแพร่เวอร์ชัน 1.0.0 ตรวจสอบความถูกต้องของสายด่วน 1323 และสมาคมสะมาริตันส์