ผู้จัดทำ
บทคัดย่อ
เอกสารนี้รวมสองเรื่องที่แยกกันไม่ได้ไว้ในฉบับเดียว ภาคแรกคือกรอบการเรียนรู้และประเมินผล ว่าผู้เรียนต้องได้อะไรจากวิชานี้ และแต่ละหัวข้อลงมือทำในระบบได้จริงแค่ไหน ภาคที่สองคือระบบที่รองรับ ว่าออกแบบมาอย่างไรจึงทำให้ตัวเลขที่ผู้เรียนเห็นเชื่อถือได้
โจทย์ของระบบต่างจากระบบจำลองทั่วไปสองข้อ ข้อแรกคือ ตัวเลขทุกตัวที่ผู้เรียนเห็นต้องมาจากสมุดบัญชีคู่จริง ไม่ใช่ตัวเลขที่คำนวณแยกแล้วจัดวางให้ดูเหมือนงบการเงิน ข้อที่สองคือ ผลการฝึกอบรมต้องเก็บไว้ตรวจย้อนหลังได้ห้าปี และพิสูจน์ได้ว่าหลักฐานไม่ถูกแก้ภายหลัง แม้โดยผู้ดูแลเครื่องเอง
ระบบสร้างด้วยภาษา Go โดยไม่พึ่งไลบรารีภายนอกเลยแม้แต่ตัวเดียว ยึดหลักการบันทึกเหตุการณ์เป็นแหล่งความจริงเดียว เงินเก็บเป็นจำนวนเต็มหน่วยสตางค์ และเครื่องยนต์เดินซ้ำแล้วได้ผลเหมือนเดิมทุกหลักเมื่อเมล็ดสุ่มเท่ากัน คุณสมบัติข้อหลังเปลี่ยนวิธีเรียนไปเลย เพราะผู้เรียนพึ่งโชคไม่ได้ และผู้สอนเดินเคสเดิมซ้ำด้วยการตัดสินใจที่ต่างกันเพื่อเทียบผลกันตรง ๆ ได้
การพิสูจน์ความถูกต้องใช้วิธีที่เข้มกว่าการเขียนชุดทดสอบตามปกติ คือ ทุกชุดทดสอบต้องพิสูจน์สองทาง แก้ข้อบกพร่องแล้วชุดทดสอบต้องผ่าน และเมื่อใส่ข้อบกพร่องนั้นกลับเข้าไป ชุดทดสอบต้องล้มเหลวทุกครั้ง วิธีนี้จับชุดทดสอบที่ไร้ผลได้จริงหนึ่งชุด ซึ่งจับข้อบกพร่องได้เพียงหนึ่งในสองร้อยรอบ
หัวข้อที่มีป้าย ใช้ได้แล้ว คือสิ่งที่ผู้เรียนลงมือทำในระบบได้ทันที ส่วนหัวข้อที่มีป้าย กำลังพัฒนา เป็นเนื้อหาที่อยู่ในหลักสูตร แต่ระบบยังไม่รองรับการลงมือทำจริง ผู้สอนใช้สอนเชิงทฤษฎีหรือมอบหมายเป็นงานเขียนวิเคราะห์ไปก่อนได้
การแยกป้ายไว้ตั้งแต่ต้นเพื่อไม่ให้ผู้เรียนกรอกตัวเลขลงช่องที่ยังไม่มีผลต่อเกม แล้วเข้าใจผิดว่าการตัดสินใจของตนไม่มีความหมาย
ภาคที่ 1 · กรอบการเรียนรู้และประเมินผล
ความรู้และความเข้าใจ
การทำความเข้าใจระบบและกลไกทางการเงินเป็นรากฐานสำคัญ ผู้เรียนต้องรู้จักประเภทของสินทรัพย์ การทำงานของตลาด สถาบันการเงิน และเครื่องมือทางการเงินต่าง ๆ ทั้งหุ้น หุ้นกู้ กองทุน และตราสารอนุพันธ์ ในระบบจำลอง ความรู้เหล่านี้ไม่ได้อยู่ในรูปคำถามท้ายบท แต่มาในรูปสถานการณ์ที่ต้องตัดสินใจภายในเวลาที่จำกัด
1.1 การอ่านและตีความงบการเงิน ใช้ได้แล้ว
นี่คือหัวใจของระบบและเป็นส่วนที่แข็งแรงที่สุด ตัวเลขทุกตัวที่ผู้เรียนเห็นมาจากสมุดบัญชีคู่จริง ไม่ใช่ตัวเลขที่คำนวณแยกแล้วนำมาจัดวางให้ดูเหมือนงบการเงิน เมื่อทีมขายเชื่อแต่ต้องจ่ายค่าใช้จ่ายเป็นเงินสดทันที ผู้เรียนจะเห็นผลกระทบเกิดขึ้นจริง ทั้งในงบดุลและงบกระแสเงินสด และกระทบยอดระหว่างสามงบได้ครบ
เมื่ออัตรากำไรขั้นต้นลดลงทั้งที่ราคาขายเท่าเดิม ผู้เรียนไล่ย้อนไปหาต้นเหตุได้จริง เพราะทุกตัวเลขมีรายการบัญชีรองรับ และทุกรายการบัญชีมีเหตุการณ์ต้นทางกำกับไว้ การตัดสินใจว่าจะจ่ายปันผลเท่าใดและเก็บเป็นกำไรสะสมเท่าใด ทำได้ผ่านช่องนโยบายปันผลซึ่งมีผลต่อเงินสดและส่วนของเจ้าของทันที
1.2 มูลค่าเงินตามเวลา กำลังพัฒนา
โจทย์คลาสสิกอย่างการประเมินความคุ้มค่าของเครื่องจักรราคาห้าแสนบาทที่ประหยัดต้นทุนได้ปีละ หนึ่งแสนสองหมื่นบาทเป็นเวลาห้าปีภายใต้ดอกเบี้ยแปดเปอร์เซ็นต์ต่อปี หรือการเลือกระหว่างรับเงินเก้าหมื่นห้าพันบาทวันนี้กับหนึ่งแสนบาทในอีกสามเดือน ยังต้องคำนวณนอกระบบ เพราะระบบยังไม่มีเครื่องมือคิดลดกระแสเงินสดให้ ผู้สอนมอบหมายเป็นงานคำนวณแล้วให้ผู้เรียนนำผลมาอธิบายประกอบใบตัดสินใจได้
1.3 ความสัมพันธ์ระหว่างความเสี่ยงและผลตอบแทน ใช้ได้แล้ว
ระบบเดินภาวะเศรษฐกิจเป็นเส้นเวลาที่เปลี่ยนไปตลอดเคส ทั้งดอกเบี้ยนโยบาย เงินเฟ้อ ค่าเงิน และตัวคูณอุปสงค์ ทีมที่เลือกกลยุทธ์เชิงรุกในช่วงเศรษฐกิจฟื้นตัวจะเห็นผลต่างจากทีมที่ระมัดระวัง และเมื่อภาวะเปลี่ยน ผลลัพธ์ก็กลับด้านได้ ซึ่งเป็นบทเรียนที่อ่านจากตำราแล้วไม่เท่ากับได้เจอเอง
เคสแต่ละเคสยังมีเหตุการณ์ตามบทที่ผู้สอนเขียนไว้ล่วงหน้า เช่นเหล็กขึ้นราคาสามสิบห้าเปอร์เซ็นต์ คำสั่งซื้อก้อนใหญ่ที่กินกำลังผลิตทั้งหมด เครื่องจักรเสียกลางฤดูขาย และลูกค้ารายใหญ่เบี้ยวหนี้ ทุกเหตุการณ์มีบทเรียนกำกับไว้ให้ผู้สอนใช้สรุปหลังคาบ
1.4 เครื่องมือทางการเงินและการระดมทุน กำลังพัฒนา
โจทย์เรื่องการเลือกระหว่างออกหุ้นกู้กับกู้เงินธนาคาร การพักเงินสดส่วนเกินสามเดือน โดยเน้นสภาพคล่องสูงและความเสี่ยงต่ำ และการกระจายความเสี่ยงภายใต้เงินทุนจำกัด เป็นเนื้อหาที่หลักสูตรต้องการแต่ระบบยังไม่รองรับการลงมือทำ ข้อยกเว้นคือการป้องกันความเสี่ยงจากอัตราแลกเปลี่ยน ซึ่งทำได้จริงและอธิบายไว้ในมิติที่สาม
ทักษะการวิเคราะห์และการคำนวณ
2.1 ความแม่นยำของตัวเลขที่ใช้วิเคราะห์ ใช้ได้แล้ว
ระบบเก็บเงินทุกจำนวนเป็นจำนวนเต็มหกสิบสี่บิตหน่วยสตางค์ และเก็บอัตราทุกชนิดเป็นจำนวนเต็ม หน่วยหนึ่งในหมื่น ไม่ใช้ทศนิยมลอยตัวเลยแม้แต่จุดเดียว เหตุผลไม่ใช่ความสวยงามแต่เป็นเงื่อนไขบังคับ เพราะงบดุลต้องดุลพอดีทุกหลัก ผู้เรียนจึงวิเคราะห์อัตราส่วนได้โดยไม่ต้องกังวลว่าความคลาดเคลื่อนมาจากตัวระบบเอง
2.2 อัตราส่วนทางการเงินที่ระบบคำนวณให้ ใช้ได้แล้ว
ระบบคำนวณอัตราส่วนให้ยี่สิบสี่ตัว พร้อมคำอธิบายว่าแต่ละตัวคำนวณจากอะไรและควรอ่านอย่างไร ผู้เรียนจึงตรวจสภาพคล่องระยะสั้น ดูอัตราหมุนเวียนสินค้าคงคลัง วัดโครงสร้างหนี้สินต่อทุน และดูความสามารถในการจ่ายดอกเบี้ยได้ครบในที่เดียว
| กลุ่ม | อัตราส่วนที่มีให้ใช้ |
|---|---|
| สภาพคล่อง | อัตราส่วนเงินทุนหมุนเวียน · อัตราส่วนทุนหมุนเวียนเร็ว · อัตราส่วนเงินสด · เงินทุนหมุนเวียนสุทธิ |
| ความสามารถทำกำไร | อัตรากำไรขั้นต้น · อัตรากำไรจากการดำเนินงาน · อัตรากำไรสุทธิ · ผลตอบแทนต่อสินทรัพย์ · ผลตอบแทนต่อส่วนของเจ้าของ · ผลตอบแทนต่อเงินทุนที่ใช้ |
| ประสิทธิภาพ | อัตราหมุนเวียนลูกหนี้ · ระยะเวลาเก็บหนี้ · อัตราหมุนเวียนสินค้า · ระยะเวลาถือครองสินค้า · ระยะเวลาชำระหนี้ · วงจรเงินสด · อัตราหมุนเวียนสินทรัพย์ |
| โครงสร้างเงินทุน | หนี้สินต่อทุน · หนี้สินต่อสินทรัพย์ · ความสามารถจ่ายดอกเบี้ย · ความสามารถชำระหนี้ · หนี้สินต่อกำไรก่อนดอกเบี้ยภาษีค่าเสื่อม |
| กระแสเงินสด | กระแสเงินสดอิสระ · กระแสเงินสดจากการดำเนินงานต่อหนี้สินหมุนเวียน |
วงจรเงินสดที่เน้นไว้เป็นตัวที่ผู้เรียนต้องใช้บ่อยที่สุด เพราะคำนวณจากระยะเวลาถือครองสินค้า บวกระยะเวลาเก็บหนี้ ลบระยะเวลาชำระหนี้ ซึ่งเป็นสามคันโยกที่ทีมปรับได้จริงในใบตัดสินใจ
2.3 การประเมินมูลค่าโครงการลงทุน กำลังพัฒนา
การคิดลดกระแสเงินสด การเปรียบเทียบมูลค่าปัจจุบันสุทธิกับอัตราผลตอบแทนภายใน การจัดลำดับโครงการภายใต้งบประมาณจำกัด และการพิจารณาระยะเวลาคืนทุน ยังไม่มีเครื่องมือในระบบ ผู้เรียนคำนวณนอกระบบแล้วบันทึกเหตุผลไว้ในช่องแนวคิดได้ ซึ่งจะถูกเก็บเป็นหลักฐานและนำมาคิดคะแนนในมิติคุณภาพการตัดสินใจ
ทักษะการตัดสินใจและการวางแผน
มิตินี้ถูกคิดเป็นคะแนนโดยตรงรวมห้าสิบห้าเปอร์เซ็นต์ แบ่งเป็นการบริหารสภาพคล่องยี่สิบเปอร์เซ็นต์ การจัดการความเสี่ยงและเงื่อนไขธนาคารยี่สิบเปอร์เซ็นต์ และคุณภาพการตัดสินใจรวมเหตุผลที่บันทึกไว้สิบห้าเปอร์เซ็นต์
3.1 การบริหารเงินสดและวงจรเงินสด ใช้ได้แล้ว
เมื่อยอดขายโตเร็วจนเงินสดขาดมือ ซึ่งเป็นสถานการณ์ที่เกิดขึ้นจริงกับหลายทีมทุกคาบ ผู้เรียนมีคันโยกให้ปรับหลายทาง ทั้งการยืดหรือหดเครดิตเทอมที่ให้ลูกค้า การให้ส่วนลดจ่ายเร็วเพื่อเร่งเก็บหนี้ การขายลูกหนี้ให้แฟกเตอริง และการปรับระดับสินค้าคงคลังเป้าหมายกับจุดสั่งซื้อเพื่อลดเงินจมในคลัง
ทุกทางเลือกมีต้นทุนของตัวเอง การหดเครดิตเทอมกระทบยอดขาย ส่วนลดจ่ายเร็วกินกำไรขั้นต้น และแฟกเตอริงมีค่าธรรมเนียม ผู้เรียนจึงต้องชั่งน้ำหนักจริง ไม่ใช่เลือกทางที่ง่ายที่สุด
3.2 การบริหารความเสี่ยง ใช้ได้แล้ว
ความเสี่ยงจากอัตราแลกเปลี่ยนป้องกันได้ผ่านการกำหนดสัดส่วนที่ต้องการปิดความเสี่ยง ซึ่งเหมาะกับเคสผู้ส่งออกและผู้นำเข้าโดยตรง ส่วนความเสี่ยงจากลูกหนี้จัดการผ่าน การตั้งค่าเผื่อหนี้สงสัยจะสูญและการเลือกเครดิตเทอมที่เหมาะกับคุณภาพลูกค้า
เงื่อนไขสัญญาเงินกู้ถูกทดสอบทุกวันจำลอง ทีมที่ปล่อยให้อัตราส่วนหนี้สินต่อทุนหรือ ความสามารถจ่ายดอกเบี้ยหลุดเกณฑ์จะเห็นผลทันที ไม่ใช่รู้ตอนสิ้นปี ซึ่งเป็นบทเรียนที่ตรงกับความเป็นจริงของการกู้เงินจากสถาบันการเงิน
3.3 การจัดโครงสร้างเงินทุน กำลังพัฒนา
การขอวงเงินกู้ใหม่ การออกหุ้นสามัญเพิ่มทุน การซื้อหุ้นคืน และการคำนวณความต้องการเงินทุนจากภายนอก เป็นเนื้อหาที่หลักสูตรกำหนดไว้ แต่ระบบยังแปลการตัดสินใจเหล่านี้เข้าเครื่องยนต์ไม่ได้ ผู้สอนควรระบุให้ชัดในคาบว่าช่องเหล่านี้ยังไม่มีผลต่อเกม จนกว่าระบบจะรองรับ เพื่อไม่ให้ผู้เรียนวางแผนบนสมมติฐานที่ไม่เป็นจริง
3.4 นโยบายปันผล ใช้ได้แล้ว
ผู้เรียนกำหนดสัดส่วนการจ่ายปันผลจากกำไรได้ และเห็นผลต่อเงินสดคงเหลือ ส่วนของเจ้าของ และอัตราส่วนหนี้สินต่อทุนทันที ทีมที่จ่ายปันผลสูงในปีที่กำลังขยายกิจการจะเจอปัญหาสภาพคล่องในไตรมาสถัดไป ซึ่งเป็นบทเรียนเรื่องการชั่งน้ำหนักระหว่างผู้ถือหุ้นกับความมั่นคงของกิจการ
การประยุกต์ใช้และทัศนคติทางการเงิน
มิตินี้วัดผลรวมของพฤติกรรมทางการเงิน โดยคิดจากผลประกอบการโดยรวมสามสิบเปอร์เซ็นต์ และทักษะการทำงานร่วมกันกับการเจรจาของทีมอีกสิบห้าเปอร์เซ็นต์
4.1 การตัดสินใจบนฐานข้อมูล ใช้ได้แล้ว
ระบบให้ผลลัพธ์เหมือนเดิมทุกหลักเมื่อข้อมูลนำเข้าเท่ากัน คุณสมบัตินี้เปลี่ยนวิธีเรียนไปเลย เพราะผู้เรียนพึ่งโชคไม่ได้ ถ้าอยากรู้ว่าการลดราคาส่งผลต่อยอดขายจริงหรือไม่ ต้องมีข้อมูลเชิงปริมาณมาสนับสนุน และผลที่ได้ก็ตรวจซ้ำได้
ผู้สอนใช้คุณสมบัตินี้ทำสิ่งที่ระบบจำลองทั่วไปทำไม่ได้ คือเดินเคสเดิมซ้ำด้วยการตัดสินใจที่ต่างกัน แล้วเทียบผลกันตรง ๆ เพื่อแสดงให้เห็นว่าส่วนต่างมาจากการตัดสินใจล้วน ๆ ไม่ใช่ความบังเอิญ
4.2 หลักฐานที่ตรวจย้อนหลังได้ ใช้ได้แล้ว
ทุกกระบวนการคิดของทีมถูกบันทึกไว้สองส่วน ส่วนแรกคือบันทึกแนวคิดที่ทีมเขียนเองว่า ตัดสินใจอะไร เพราะอะไร และคาดว่าจะได้อะไร ส่วนที่สองคือใบตัดสินใจทุกรอบ รวมถึงการส่งไม่ทันซึ่งระบบยกใบรอบก่อนมาใช้แทนและบันทึกไว้เป็นหลักฐาน
เมื่อจบคาบ หลักฐานทั้งหมดถูกปิดผนึกเป็นซองที่ตรวจย้อนหลังได้ ซองแต่ละใบผูกกับซองก่อนหน้าด้วยโซ่ค่าแฮช การแก้ของเก่าย้อนหลังจึงทำให้โซ่ขาด และถ้าผู้แก้ปิดผนึกซองที่ตามมาใหม่ทั้งหมดให้ดูเนียน ค่าแฮชหัวโซ่จะเปลี่ยน ซึ่งผู้ที่จดค่าไว้นอกเครื่องเทียบเจอทันที ผู้เรียนจึงรับผิดชอบต่อทุกการตัดสินใจอย่างแท้จริง
4.3 การอ่านสภาพแวดล้อมภายนอก ใช้ได้แล้ว
ภาวะเศรษฐกิจในระบบเดินเป็นเส้นเวลาที่มีทั้งช่วงขยายตัว ชะลอตัว และถดถอย พร้อมดอกเบี้ยนโยบายและค่าเงินที่ขยับตาม ทีมที่อ่านสัญญาณได้ก่อนจะเตรียมตัวทัน ส่วนทีมที่วางแผนบนสมมติฐานว่าเศรษฐกิจจะดีตลอดไปจะเจอบทเรียนด้วยตัวเอง
เนื้อหาเรื่องความเสี่ยงทางภูมิรัฐศาสตร์ การเลือกสินทรัพย์ปลอดภัย และการตรวจสอบแพลตฟอร์มการลงทุนใหม่ ยังเป็นการสอนเชิงอภิปรายในห้อง ระบบยังไม่มีกลไกให้ลงมือทำ
ภาคที่ 2 · ระบบที่รองรับ
ที่มาและโจทย์ของงาน
5.1 ปัญหาของระบบจำลองที่ใช้สอนอยู่
ระบบจำลองธุรกิจที่ใช้ในการเรียนการสอนโดยทั่วไปคำนวณผลลัพธ์ทางการเงินด้วยสูตรที่เขียนแยกไว้ แล้วนำผลมาแสดงในรูปแบบที่หน้าตาเหมือนงบการเงิน ผู้เรียนจึงเห็น "ตัวเลขที่ถูกจัดวางให้ดูเหมือนงบ" ไม่ใช่งบที่เกิดจากการลงบัญชีจริง ผลตามมาสามอย่าง
- ผู้เรียนกระทบยอดระหว่างงบกำไรขาดทุน งบดุล และงบกระแสเงินสดไม่ได้ เพราะทั้งสามมาจากสูตรคนละชุด
- ผู้สอนไม่สามารถชี้ให้เห็นว่าการตัดสินใจหนึ่งครั้งไหลไปเป็นรายการบัญชีคู่ใดบ้าง ซึ่งเป็นหัวใจของวิชา
- เมื่อตัวเลขผิด ไม่มีทางไล่ย้อนกลับไปหาต้นเหตุ เพราะไม่มีรายการบัญชีให้ไล่
5.2 โจทย์ด้านการเก็บหลักฐาน
เงื่อนไขที่กำหนดขนาดของงานนี้คือการเก็บหลักฐานการฝึกอบรมไว้ตรวจย้อนหลัง หลักสูตรรับผู้เข้าอบรมราวห้าร้อยคนต่อปี จัดกลุ่มละห้าคน จึงเป็น หนึ่งร้อยทีมต่อปี และต้องเก็บไว้ห้าปี รวมห้าร้อยทีม สิ่งที่ต้องเก็บมีสามหัวข้อ
ตารางที่ 5.1 · สิ่งที่ต้องเก็บไว้ตรวจ และแหล่งที่มาในระบบ
| หัวข้อที่ต้องตรวจ | สิ่งที่เก็บ | เกิดขึ้นตอนไหน |
|---|---|---|
| แนวคิด | บันทึกของทีม — ตัดสินใจอะไร เพราะอะไร คาดว่าจะได้อะไร | ทีมเขียนเองระหว่างคาบ |
| วิธีการ | ใบตัดสินใจทุกรอบ ส่งทันหรือไม่ ระบบเตือนอะไรบ้าง | ทุกสิ้นรอบวางแผน |
| ผลความสำเร็จ | ตัวเลขปลายเคสของทุกทีม และประวัติการให้คะแนนทั้งหมด | ตลอดคาบและหลังจบคาบ |
ข้อกำหนดที่ยากที่สุดไม่ใช่ปริมาณ แต่คือต้องพิสูจน์ได้ว่าหลักฐานไม่ถูกแก้ย้อนหลัง รวมถึงกรณีที่ผู้แก้คือผู้ดูแลเครื่องเอง ซึ่งมีสิทธิ์เข้าถึงไฟล์ทุกไฟล์
5.3 ขอบเขตของงาน
งานนี้ครอบคลุมการออกแบบเครื่องยนต์จำลอง สมุดบัญชี ชั้นเว็บ กลไกเก็บหลักฐาน การนำขึ้นเครื่องแม่ข่าย และการพิสูจน์ความถูกต้อง ไม่ครอบคลุมการทดลองใช้กับผู้เรียนจริงและการวัดผลสัมฤทธิ์ทางการศึกษา ซึ่งเป็นงานคนละชิ้นและระบุไว้ในบทที่ 6
หลักการที่ระบบยึดและเหตุผลของแต่ละข้อ
บทนี้เสนอหลักการทางวิศวกรรมที่ระบบยึดจริงและตรวจสอบได้จากโค้ด ไม่ใช่การทบทวนวรรณกรรม งานนี้ยังไม่ได้ทบทวนวรรณกรรมทางการศึกษาหรืองานวิจัยที่เกี่ยวข้อง หากจะใช้เป็นวิทยานิพนธ์ฉบับสมบูรณ์ ต้องเพิ่มบทดังกล่าวพร้อมการอ้างอิงจริง ผู้เขียนเลือกระบุข้อจำกัดนี้ไว้ตรง ๆ แทนการเติมรายการอ้างอิงที่ไม่ได้อ่านจริง
6.1 เงินเป็นจำนวนเต็มหน่วยสตางค์ ห้ามใช้ทศนิยมลอยตัว
เงินทุกจำนวนในระบบเก็บเป็นจำนวนเต็ม 64 บิต หน่วยสตางค์ อัตราทุกชนิดเก็บเป็นจำนวนเต็มหน่วยหนึ่งในหมื่น เหตุผลไม่ใช่ความสวยงามแต่เป็นเงื่อนไขบังคับ — งบดุลต้องดุลพอดีทุกหลัก ทศนิยมลอยตัวทำให้ผลรวมของรายการหลายหมื่นรายการคลาดเคลื่อนโดยไม่มีใครสังเกต และความคลาดเคลื่อนนั้นจะปรากฏเป็น "งบไม่ดุล" ซึ่งเป็นอาการที่หาสาเหตุยากที่สุด
6.2 บันทึกเหตุการณ์คือแหล่งความจริงเดียว
ทุกสิ่งที่เกิดขึ้นในเกมถูกบันทึกเป็นเหตุการณ์ต่อท้ายอย่างเดียว ห้ามแก้ ห้ามลบ ระบบมีชนิดเหตุการณ์ 110 ชนิด สมุดบัญชีไม่ถูกเก็บสำเนา แต่ถูกสร้างขึ้นใหม่จากบันทึกเหตุการณ์ทุกครั้งที่ต้องใช้
การตัดสินใจข้อนี้ให้ผลพลอยได้ที่สำคัญกว่าตัวมันเอง คือได้เครื่องมือตรวจสอบมาฟรี เมื่อสมุดบัญชีสร้างใหม่ได้เสมอ เราจึงเทียบลายนิ้วมือของสมุดที่สร้างใหม่กับสมุดที่เดินมาจริงได้ ไม่ตรงเมื่อไรแปลว่ามีบางอย่างผิด และผิดตั้งแต่ตอนไหนก็ไล่หาได้
6.3 เดินซ้ำแล้วต้องได้ผลเหมือนเดิมทุกหลัก
เมล็ดสุ่มเท่ากันและข้อมูลนำเข้าเท่ากัน ต้องได้สถานะปลายทางที่มีลายนิ้วมือเหมือนกันเป๊ะ ข้อนี้เป็นเงื่อนไขของความยุติธรรมในการให้คะแนน — ถ้าเดินซ้ำแล้วได้ผลต่างกัน คะแนนของผู้เรียนจะขึ้นกับเหตุบังเอิญของเครื่อง ไม่ใช่การตัดสินใจของตัวเอง
ผลของข้อนี้แผ่ไปทั้งระบบ การวนอ่านโครงสร้างข้อมูลแบบแมพต้องเรียงคีย์ก่อนเสมอ สถานะของเครื่องสุ่มต้องถูกเก็บและกู้คืนได้ และเวลาจริงของเครื่องห้ามมีผลต่อผลลัพธ์
6.4 ทิศทางการพึ่งพาแบบทางเดียว
6.5 ไม่ใช้ไลบรารีภายนอกเลย
ไฟล์ go.mod ของโครงการนี้ไม่มีรายการ require แม้แต่รายการเดียว
การเข้ารหัสลับ การเซ็นตั๋วเข้าใช้งาน การอ่านไฟล์เคส และตัวเสิร์ฟเว็บ ล้วนเขียนบนไลบรารีมาตรฐาน
เหตุผลคือระบบต้องอยู่ได้นานกว่ารอบชีวิตของไลบรารีภายนอก
หลักฐานที่ต้องเก็บห้าปีจะไร้ความหมายถ้าเปิดอ่านไม่ได้เพราะไลบรารีที่ใช้เลิกดูแลไปแล้ว
สถาปัตยกรรมและวิธีดำเนินการ
7.1 ภาพรวมเชิงตัวเลข
ตารางที่ 7.1 · ขนาดและองค์ประกอบของระบบ (นับจากโค้ดจริง)
| องค์ประกอบ | จำนวน | หมายเหตุ |
|---|---|---|
| แพ็กเกจ | 37 | แบ่งตามชั้นในรูปที่ 2.1 |
| บรรทัดโค้ดหลัก | 41,932 | 119 ไฟล์ |
| บรรทัดชุดทดสอบ | 22,588 | 56 ไฟล์ · 596 ฟังก์ชัน |
| บัญชีในผังบัญชี | 69 | โครงสร้างแบบต้นไม้ ลงบัญชีที่ใบเท่านั้น |
| กฎการลงบัญชี | 72 | หนึ่งกฎต่อหนึ่งชนิดรายการ |
| ชนิดเหตุการณ์ | 110 | รวมชนิดที่ไม่ลงบัญชี เช่น การส่งใบตัดสินใจ |
| เฟสต่อหนึ่งวันจำลอง | 19 | ลำดับตายตัว ดูตารางที่ 7.2 |
| เงื่อนไขความถูกต้องที่ตรวจทุกวัน | 10 | ดูข้อ 3.4 |
| เคสธุรกิจ | 4 | โรงงาน · ค้าปลีก · บริการ · นำเข้าส่งออก |
หนึ่งในสามของโค้ดทั้งหมดคือชุดทดสอบ
นับเป็นบรรทัด ไม่รวมไฟล์ตั้งค่าและไฟล์หน้าเว็บ
7.2 เครื่องยนต์เดินวันละ 19 เฟส
หนึ่งวันจำลองคือการเดินผ่านเฟสตายตัว 19 เฟสตามลำดับ ลำดับนี้สำคัญเพราะสะท้อนลำดับเหตุการณ์จริงของกิจการ เช่น ต้องรับคำสั่งซื้อก่อนจึงผลิต ต้องผลิตก่อนจึงส่งมอบและรับรู้รายได้ และต้องรู้ผลของทั้งวันก่อนจึงลงบัญชีและตรวจความถูกต้อง
ตารางที่ 7.2 · ลำดับ 19 เฟสของหนึ่งวันจำลอง
| # | เฟส | # | เฟส |
|---|---|---|---|
| 1 | เลื่อนนาฬิกา | 11 | เครื่องมือทางการเงิน |
| 2 | รับภาวะเศรษฐกิจ | 12 | แก้ปัญหาสภาพคล่อง |
| 3 | เหตุการณ์ตามกำหนด | 13 | ลงบัญชี |
| 4 | การกระทำของตัวแทน AI | 14 | ปิดงวด |
| 5 | สร้างอุปสงค์ | 15 | ทดสอบเงื่อนไขสัญญา |
| 6 | รับคำสั่งซื้อ | 16 | ตรวจความถูกต้อง |
| 7 | การผลิต | 17 | สรุปการเปลี่ยนแปลง |
| 8 | ส่งมอบและรับรู้รายได้ | 18 | เตรียมบันทึกเหตุการณ์ |
| 9 | จัดซื้อวัตถุดิบ | 19 | ฝากสถานะโมดูล |
| 10 | วงจรเงินสด |
เฟสที่ 19 ถูกเพิ่มภายหลังจากการตรวจพบว่าสถานะภายในของโมดูล เช่น ใบสั่งซื้อที่รอของ และตารางชำระหนี้ ไม่ได้ถูกฝากไว้ในสถานะกลางของบริษัท ผลคือทั้งการกู้คืนระบบและการตรวจความถูกต้องมองไม่เห็นสถานะเหล่านั้นเลย การปิดช่องนี้ทำให้ทั้งสองงานทำได้พร้อมกัน
7.3 การลงบัญชีเกิดจากเหตุการณ์ ไม่ใช่จากหน้าจอ
7.4 เงื่อนไขความถูกต้องที่ตรวจทุกวันจำลอง
ทุกสิ้นวันจำลอง ระบบตรวจเงื่อนไขต่อไปนี้กับทุกทีม ผิดข้อใดข้อหนึ่งคือหยุดทีมนั้นทันที และหยุดเฉพาะทีมนั้น ทีมอื่นต้องเดินต่อได้ตามปกติ
ตารางที่ 7.3 · เงื่อนไขความถูกต้องที่บังคับทุกวัน
| รหัส | เงื่อนไข |
|---|---|
| INV-1 | ผลรวมเดบิตเท่ากับผลรวมเครดิตในทุกรายการ |
| INV-2 | งบทดลองดุล ผลรวมยอดคงเหลือทุกบัญชีเท่ากับศูนย์ |
| INV-3 | สินทรัพย์เท่ากับหนี้สินบวกส่วนของเจ้าของบวกกำไรระหว่างงวด |
| INV-4 | เงินสดตามบัญชีเท่ากับเงินสดที่เครื่องยนต์ถืออยู่ |
| INV-5 | มูลค่าสินค้าคงคลังตามบัญชีเท่ากับที่นับได้ |
| INV-6 | ผลรวมลูกหนี้รายตัวเท่ากับบัญชีคุมลูกหนี้ |
| INV-7 | ผลรวมเจ้าหนี้รายตัวเท่ากับบัญชีคุมเจ้าหนี้ |
| INV-10 | บัญชีเงินสดห้ามติดลบเด็ดขาด |
เงื่อนไขชุดนี้เทียบเฉพาะมูลค่ารวม ไม่ได้เทียบรายสินค้า จึงมองไม่เห็นข้อบกพร่องการปันส่วนต้นทุนที่รายงานในข้อ 5.3 ซึ่งมูลค่ารวมถูกต้องเสมอไม่ว่าจะปันส่วนอย่างไร
7.5 การให้คะแนน
คะแนนคิดจากห้ามิติด้วยจำนวนเต็มล้วน น้ำหนักรวมหนึ่งหมื่นหน่วยหนึ่งในหมื่น ทุกมิติต้องมีคำอธิบายภาษาไทยประกอบเสมอ ไม่ใช่คืนแค่ตัวเลข เพราะผู้เรียนต้องรู้ว่าคะแนนนั้นมาจากอะไร
น้ำหนักของห้ามิติที่ใช้ให้คะแนน
คิดด้วยจำนวนเต็มล้วน รวมเป็นหนึ่งหมื่นหน่วยหนึ่งในหมื่น
ตารางที่ 7.4 · มิติการให้คะแนนและน้ำหนัก
| มิติ | น้ำหนัก |
|---|---|
| ผลประกอบการ | 30% |
| การบริหารสภาพคล่อง | 20% |
| การจัดการความเสี่ยงและเงื่อนไขธนาคาร | 20% |
| คุณภาพการตัดสินใจและเหตุผลที่บันทึก | 15% |
| การทำงานร่วมกันและการเจรจา | 15% |
กลไกเก็บหลักฐานที่ตรวจย้อนหลังได้
8.1 ปัญหาที่ต้องแก้
ข้อมูลดิบของระบบอ่านออกเฉพาะกับโปรแกรมรุ่นที่เขียนมันเท่านั้น ผังบัญชีและกฎการลงบัญชีอยู่ในโค้ด ไม่ได้อยู่ในข้อมูล อีกห้าปีเปิดไฟล์มาจะเห็นรหัสบัญชีแต่ไม่มีอะไรบอกว่ามันคืออะไร ซองหลักฐานจึงต้องตีความตัวเองได้ คือเปิดด้วยโปรแกรมตารางคำนวณทั่วไป แล้วอ่านรู้เรื่องทันทีโดยไม่ต้องมีโปรแกรมต้นทางและไม่ต้องอ่านโค้ด
8.2 โครงสร้างซองหลักฐาน
ตารางที่ 8.1 · ไฟล์ในซองหลักฐานหนึ่งใบ
| ไฟล์ | เนื้อหา |
|---|---|
| README.txt | อธิบายว่าซองนี้คืออะไร เก็บถึงเมื่อไร |
| FORMAT.txt | อธิบายหน่วยเงิน หน่วยอัตรา ปฏิทินจำลอง และการเข้ารหัสตัวอักษร |
| notes.csv | บันทึกของทีม — หลักฐานฝั่งแนวคิด |
| decisions.csv | ใบตัดสินใจทุกรอบ — หลักฐานฝั่งวิธีการ |
| results.csv | ตัวเลขปลายเคสของทุกทีม — หลักฐานฝั่งผลสำเร็จ |
| scores.csv | ประวัติการให้คะแนนทั้งหมด รวมครั้งที่ผู้สอนแก้ |
| report.html | รายงานสรุปคาบแบบอ่านได้ทันที |
| MANIFEST.sha256 | ค่าแฮชของทุกไฟล์ และแฮชของซองก่อนหน้า |
| SEAL.txt | ตราประทับ — แฮชของซองใบนี้และของใบก่อนหน้า |
ซองหนึ่งใบของห้องสี่ทีมมีขนาดราว 64 กิโลไบต์ ห้าร้อยทีมในห้าปีจึงอยู่ในระดับไม่กี่สิบเมกะไบต์ ซึ่งไม่เป็นข้อจำกัดใด ๆ
8.3 โซ่แฮชและสิ่งที่มันรับประกันจริง
การออกแบบครั้งแรกให้แฮชของซองเท่ากับแฮชของรายการไฟล์ในตัวมันเอง การตรวจสอบภายหลังพบว่าคำสัญญาที่ระบบเขียนไว้เองไม่เป็นจริง เพราะแฮชของซองไม่ขึ้นกับซองก่อนหน้าเลย แก้ซองกลางโซ่แล้วสร้างรายการแฮชใหม่ แฮชของซองที่ตามมาไม่ขยับแม้แต่ตัวอักษรเดียว ผู้ที่จดแฮชหัวโซ่ไว้ตามที่คู่มือสั่งจึงตรวจไม่พบอะไร
บรรทัดที่ผูกแฮชซองก่อนหน้าขึ้นต้นด้วยเครื่องหมาย #
จึงเป็นบรรทัดคำอธิบายในสายตาของคำสั่งตรวจแฮชมาตรฐาน
ผู้ตรวจภายนอกยังใช้คำสั่ง sha256sum -c ตรวจไฟล์ในซองได้เหมือนเดิม
แต่ในสายตาของการคำนวณแฮชซอง บรรทัดนี้เป็นเนื้อหาเต็มตัว — ทดสอบกับเครื่องมือจริงแล้ว
ปิดผนึกซองจากห้องเรียนจริงบนเครื่องแม่ข่าย แล้วแก้บันทึกของผู้เรียนหนึ่งบรรทัด คำสั่งตรวจทั้งคลังรายงานทันทีว่า "เนื้อไฟล์ถูกแก้ไปจากตอนปิดผนึก" และการทดสอบระดับหน่วยที่จำลองผู้แก้ซึ่งรู้วิธีสร้างรายการแฮชใหม่ ก็ยังถูกจับได้ทั้งสองเส้นทาง
วิธีพิสูจน์ความถูกต้องและผลที่ได้
9.1 วิธีพิสูจน์สองทาง
ชุดทดสอบที่ผ่านไม่ได้แปลว่าโค้ดถูก อาจแปลว่าชุดทดสอบไม่ได้ทดสอบอะไรเลยก็ได้ งานนี้จึงบังคับให้ทุกการแก้ข้อบกพร่องผ่านขั้นตอนสี่ขั้น
- แก้ข้อบกพร่อง
- เขียนชุดทดสอบที่ต้องผ่าน
- ใส่ข้อบกพร่องนั้นกลับเข้าไป แล้วยืนยันว่าชุดทดสอบล้มเหลว
- คืนโค้ดที่แก้แล้ว และยืนยันว่าทั้งระบบยังผ่าน
ขั้นที่สามคือขั้นที่มีค่าที่สุด และจับชุดทดสอบไร้ผลได้จริงหนึ่งชุด เป็นชุดที่ทดสอบการเขียนไฟล์ทะเบียนผู้ใช้พร้อมกัน ซึ่งเขียนแบบ "เขียนพร้อมกันแล้วดูว่าไฟล์พังไหม" เมื่อใส่ข้อบกพร่องกลับเข้าไปกลับไม่ล้มเหลว การวัดพบว่าพังจริงเพียง หนึ่งครั้งในสองร้อยรอบ ชุดทดสอบแบบนั้นอันตรายกว่าไม่มีชุดทดสอบ เพราะสร้างความมั่นใจที่ผิด จึงเขียนใหม่ให้ตรึงต้นเหตุโดยตรง คือ "ชื่อไฟล์ชั่วคราวต้องไม่ซ้ำกัน" ซึ่งล้มเหลวทุกครั้งเมื่อข้อบกพร่องกลับมา
9.2 การตรวจสอบเชิงลึกแบบพยายามหักล้าง
นอกจากชุดทดสอบ งานนี้ใช้การตรวจสอบเชิงลึกห้าด้านพร้อมกัน คือด่านตรวจสิทธิ์ ความน่าเชื่อถือของหลักฐาน ความสามารถในการเดินซ้ำ ความคงทนของที่เก็บข้อมูล และความถูกต้องทางบัญชี จากนั้นข้อค้นพบทุกข้อถูกส่งให้ผู้ตรวจอีกชุดพยายามหักล้าง โดยตั้งต้นว่าข้อค้นพบนั้นผิด ข้อที่หักล้างไม่สำเร็จจึงถือว่าเป็นของจริง วิธีนี้กัน "ข้อค้นพบที่ฟังดูน่าเชื่อแต่ไม่จริง" ซึ่งเป็นปัญหาหลักของการตรวจสอบอัตโนมัติ
ตารางที่ 9.1 · สรุปผลการตรวจสอบ
| ที่มา | ยืนยัน | หักล้างได้ |
|---|---|---|
| การตรวจเชิงลึกห้าด้าน | 11 | 2 |
| การทดสอบเส้นทางผู้ใช้จริงบนเครื่องแม่ข่าย | 8 | — |
| รวม | 19 | 2 |
ข้อสังเกตที่สำคัญคือข้อบกพร่องที่ร้ายแรงที่สุดสามข้อมาจากการทดสอบเส้นทางผู้ใช้จริง ไม่ใช่จากการตรวจโค้ด ทั้งสามข้อมองไม่เห็นจากการอ่านโค้ดเพราะเกิดจากการประกอบกันของส่วนที่แต่ละส่วนถูกต้องอยู่แล้ว
9.3 ข้อบกพร่องที่ร้ายแรงที่สุดที่พบ
ตารางที่ 9.2 · ข้อบกพร่องระดับร้ายแรงและผลกระทบที่วัดได้
| ข้อบกพร่อง | ผลกระทบที่วัดได้จริง | สถานะ |
|---|---|---|
| งบกำไรขาดทุนพลิกเครื่องหมายบัญชีปรับมูลค่าซ้ำสองครั้ง | ต้นทุนขายผิดสองเท่าของยอดปันส่วน กำไรในงบกำไรขาดทุนกับงบดุลต่างกัน 11.5% และภาษีเงินได้คิดจากฐานที่ต่ำกว่าจริง | แก้แล้ว |
| สร้างสมุดบัญชีขึ้นใหม่แล้วปิดบัญชีสิ้นปีผิดจังหวะ | กำไรสะสมออกมา 5.1 ล้านแทนที่จะเป็น 1.8 ล้าน ทุกห้องที่สอนข้ามสิ้นปีจำลองถูกตีธงว่าตัวเลขเชื่อไม่ได้ทั้งห้อง | แก้แล้ว |
| ต้นทุนงานระหว่างทำตกกับสินค้าตัวแรกทั้งหมด | ค่าแรงทั้งปี 3.24 ล้านบาท ตกกับสินค้าตัวเดียว 99.4% ต้นทุนต่อชิ้นสูงเกินจริง 22% | แก้แล้ว |
| สถานะสุ่มระดับห้องไม่ถูกเก็บ จึงหายตอนกู้คืน | ตัวเลขในอดีตตรงทุกหลัก แต่วันข้างหน้าเป็นคนละเกม คะแนนเปลี่ยนเพราะเครื่องแม่ข่ายรีสตาร์ต ไม่ใช่เพราะการตัดสินใจ | แก้แล้ว |
| การปิดบริการแบบเรียบร้อยปิดคาบที่กำลังสอนอยู่ถาวร | การนำโค้ดใหม่ขึ้นเครื่องระหว่างมีคาบสอนอยู่ = จบคาบทุกห้องทันทีและกู้กลับไม่ได้ ขณะที่การถูกฆ่ากลางคันกลับกู้ได้ครบ | แก้แล้ว |
| หน้าข้อมูลทีมอ่านรหัสห้องจากตั๋วแทนที่จะอ่านจากที่อยู่เว็บ | ผู้สอนที่ดูแลสองห้องได้ตัวเลขของอีกห้องมาแสดง โดยระบบตอบว่าสำเร็จ ให้คะแนนผิดได้โดยไม่มีทางรู้ | แก้แล้ว |
| เปิดห้องที่สองของวันเดียวกันไม่ได้ | ชื่อผู้ใช้สร้างจากวันที่อย่างเดียว ผู้สอนที่สอนสองรอบในวันเดียวติดตั้งแต่ห้องที่สอง และแก้เองไม่ได้ | แก้แล้ว |
| หลักฐานการส่งใบไม่ทันไม่เคยถูกเขียนลงดิสก์ | รายงานสรุปผลบอกว่าทุกทีมส่งทันเวลาเสมอ ซึ่งไม่จริงและตรวจย้อนไม่ได้ | แก้แล้ว |
ส่วนต่างระหว่างตัวเลขที่ถูกต้องกับตัวเลขที่ระบบเคยให้
วัดจากการเดินเคสโรงงานจริง ทั้งสามข้อไม่มีกลไกใดในระบบจับได้เลยก่อนการตรวจสอบ
9.4 ผลการทดสอบบนเครื่องที่ใช้งานจริง
การทดสอบทั้งหมดในหัวข้อนี้ทำผ่านที่อยู่เว็บสาธารณะจริงพร้อมใบรับรองความปลอดภัยจริง ไม่ใช่ในสภาพแวดล้อมทดสอบ
ตารางที่ 9.3 · ผลการทดสอบบนเครื่องที่ใช้งานจริง
| สิ่งที่ทดสอบ | ผล |
|---|---|
| ผู้เรียนเปิดหน้าข้อมูลทีมตัวเอง 13 หน้า | สำเร็จทุกหน้า |
| ผู้เรียนพยายามเปิดข้อมูลทีมอื่น 15 ครั้ง | ถูกปฏิเสธทุกครั้ง |
| ฆ่าบริการกลางคันที่วันจำลองที่ 450 (ข้ามสิ้นปีแล้ว) | กู้ครบ 4 ทีม ไม่มีข้อผิดพลาด |
| นำโค้ดใหม่ขึ้นเครื่องระหว่างคาบยังดำเนินอยู่ | ห้องกลับมาพร้อมรหัสเดิม |
| กำไรในงบดุลเทียบกับกำไรในงบกำไรขาดทุน | ต่างกัน 0.00 บาท |
| แก้บันทึกผู้เรียนในซองหลักฐานที่ปิดผนึกแล้ว | ตรวจจับได้ทันที |
| เปิดรายงานย้อนหลังหลังปิดคาบและรีสตาร์ตบริการ | เปิดได้ ข้อมูลครบ |
ตัวเลขที่ยืนยันการแก้ข้อบกพร่องเรื่องเครื่องหมายบัญชี วัดจากห้องเรียนจริงบนเครื่องแม่ข่าย
ตารางที่ 9.4 · งบดุลของทีมหนึ่ง ณ สิ้นไตรมาสแรก วัดจากเครื่องแม่ข่ายจริง
| รายการ | จำนวน (บาท) |
|---|---|
| สินทรัพย์รวม | 84,945,010.81 |
| งบดุลสมดุลหรือไม่ | สมดุล |
| กำไรของงวดในงบดุล | 6,817,835.07 |
| กำไรสุทธิในงบกำไรขาดทุน | 6,817,835.07 |
| ผลต่างของสองค่า | 0.00 |
ข้อจำกัดที่ยังเหลือและงานต่อไป
10.1 ข้อจำกัดของงานนี้
ตารางที่ 10.1 · ข้อจำกัดที่ทราบและระบุไว้อย่างตรงไปตรงมา
| ข้อจำกัด | ผลต่อการนำไปใช้ |
|---|---|
| ยังไม่เคยทดลองใช้กับผู้เรียนจริง | ยังไม่มีข้อมูลว่าผู้เรียนใช้งานได้ราบรื่นเพียงใด และยังไม่ได้วัดผลสัมฤทธิ์ทางการศึกษาเลย |
| ยังไม่มีบทวรรณกรรมและการอ้างอิงทางวิชาการ | ต้องเพิ่มก่อนใช้เป็นวิทยานิพนธ์ฉบับสมบูรณ์ ดูหมายเหตุในบทที่ 2 |
| การควบรวมกิจการและงบการเงินรวมยังไม่ได้พัฒนา | ออกแบบไว้แล้วแต่ยังไม่ผ่านการตรวจ จึงยังไม่ลงมือ |
| ที่เก็บข้อมูลเป็นไฟล์บนเครื่องเดียว | เพียงพอสำหรับห้องเรียนขนาดปัจจุบัน แต่ยังไม่รองรับการกระจายหลายเครื่อง |
| โครงการยังไม่ได้อยู่ใต้ระบบควบคุมรุ่นของซอร์สโค้ด | ย้อนดูไม่ได้ว่าอะไรเปลี่ยนเมื่อไร ซึ่งเป็นความเสี่ยงที่ควรปิดก่อนขยายทีม |
10.2 บทเรียนที่ได้จากงานนี้
ชุดทดสอบที่ไม่เคยเห็นว่าตัวเองล้มเหลว ไม่ใช่หลักฐานของความถูกต้อง บทเรียนที่ 1
ในงานนี้มีข้อบกพร่องระดับร้ายแรงหลายข้อที่อยู่ในระบบโดยที่ชุดทดสอบทั้ง 596 ฟังก์ชันเขียวสนิท เพราะไม่มีชุดทดสอบใดแตะสถานการณ์นั้นเลย เช่น ไม่มีชุดทดสอบใดแตะบัญชีปรับมูลค่าในหมวดกำไรขาดทุน ซึ่งเป็นที่ซ่อนของข้อบกพร่องเรื่องเครื่องหมาย
ความผิดพลาดที่อันตรายที่สุด คือความผิดพลาดที่ระบบตอบว่าสำเร็จ บทเรียนที่ 2
ข้อบกพร่องเรื่องหน้าข้อมูลทีมแสดงตัวเลขของอีกห้อง อันตรายกว่าการเปิดหน้าไม่ได้มาก เพราะผู้สอนให้คะแนนจากตัวเลขนั้นได้โดยไม่มีทางรู้
ลำดับความทนทานต้องสอดคล้องกับลำดับความสำคัญ บทเรียนที่ 3
ระบบประกาศว่าบันทึกเหตุการณ์คือแหล่งความจริงเดียว แต่กลับบังคับเขียนลงจานเฉพาะภาพนิ่ง ทำให้สิ่งที่สร้างจากแหล่งความจริงทนทานกว่าตัวแหล่งความจริงเอง ซึ่งกลับหัวกลับหางกับที่ควรเป็น
10.3 งานต่อไป
- ทดลองใช้กับผู้เรียนจริงหนึ่งคาบเต็ม แล้วเก็บข้อมูลการใช้งานและปัญหาที่พบ
- เพิ่มบทวรรณกรรมและการอ้างอิงให้ครบตามรูปแบบวิทยานิพนธ์
- พัฒนาการควบรวมกิจการและงบการเงินรวมตามมาตรฐานที่เกี่ยวข้อง
- นำโครงการเข้าระบบควบคุมรุ่นของซอร์สโค้ด
- ขยายเงื่อนไขความถูกต้องให้ตรวจถึงระดับรายสินค้า ไม่ใช่เฉพาะมูลค่ารวม
ภาคผนวก
ภาคผนวก สำหรับผู้สอน
11.1 เกณฑ์การให้คะแนน
ตารางที่ 11.1 · น้ำหนักคะแนนห้ามิติ รวมหนึ่งร้อยเปอร์เซ็นต์
| มิติ | น้ำหนัก | ระบบวัดจากอะไร |
|---|---|---|
| ผลประกอบการ | 30% | ตัวเลขปลายเคสจากสมุดบัญชีจริง |
| การบริหารสภาพคล่อง | 20% | จำนวนวันที่อยู่ในภาวะคับขันและความรุนแรง |
| ความเสี่ยงและเงื่อนไขธนาคาร | 20% | การผิดเงื่อนไขสัญญาเงินกู้และส่วนของเจ้าของติดลบ |
| คุณภาพการตัดสินใจ | 15% | ความครบถ้วนของใบตัดสินใจและเหตุผลที่บันทึก |
| การทำงานร่วมกัน | 15% | การมีส่วนร่วมครบบทบาทและการส่งงานทันเวลา |
11.2 กลไกของระบบที่ควรอธิบายให้ผู้เรียนฟังก่อนเริ่ม
หนึ่งวันจำลองคือการเดินผ่านขั้นตอนตายตัวสิบเก้าขั้นตามลำดับ ตั้งแต่เลื่อนนาฬิกา รับภาวะเศรษฐกิจ เหตุการณ์ตามบท สร้างอุปสงค์ รับคำสั่งซื้อ ผลิต ส่งมอบ จัดซื้อ วงจรเงินสด ไปจนถึงลงบัญชี ปิดงวด ทดสอบเงื่อนไขสัญญา และตรวจความถูกต้อง
ลำดับนี้สำคัญเพราะสะท้อนลำดับเหตุการณ์จริงของกิจการ ต้องรับคำสั่งซื้อก่อนจึงผลิต ต้องผลิตก่อนจึงส่งมอบและรับรู้รายได้ และต้องรู้ผลของทั้งวันก่อนจึงลงบัญชี การอธิบายเรื่องนี้ก่อนเริ่มช่วยให้ผู้เรียนเข้าใจว่าทำไมการตัดสินใจวันนี้จึงเห็นผลในวันถัดไป
ทุกสิ้นวันจำลอง ระบบตรวจเงื่อนไขความถูกต้องสิบข้อกับทุกทีม ตั้งแต่ผลรวมเดบิตเท่ากับเครดิต งบทดลองดุล สินทรัพย์เท่ากับหนี้สินบวกส่วนของเจ้าของ ไปจนถึงเงินสดตามบัญชีต้องเท่ากับเงินสดที่เครื่องยนต์ถืออยู่จริง ทีมใดที่ตัวเลขไม่ผ่านจะถูกหยุดทันทีและแจ้งผู้สอน โดยทีมอื่นเดินต่อได้ตามปกติ
11.3 สิ่งที่ระบบยังไม่รองรับ
รายการนี้คือหัวข้อในหลักสูตรที่ระบบยังแปลการตัดสินใจเข้าเครื่องยนต์ไม่ได้ ผู้สอนควรแจ้งผู้เรียนให้ชัดตั้งแต่ต้นคาบ
ตารางที่ 11.2 · หัวข้อที่ยังต้องสอนเชิงทฤษฎีไปก่อน
| หัวข้อ | สถานะปัจจุบัน | ทางออกระหว่างนี้ |
|---|---|---|
| การลงทุนซื้อเครื่องจักร | มีช่องให้กรอกในใบตัดสินใจ แต่เครื่องยนต์ยังไม่อ่าน | ให้คำนวณความคุ้มค่านอกระบบแล้วบันทึกเหตุผลไว้ |
| การขอวงเงินกู้ใหม่และออกหุ้นกู้ | มีช่องให้กรอก แต่เครื่องยนต์ยังไม่อ่าน | มอบหมายเป็นงานเขียนวิเคราะห์โครงสร้างเงินทุน |
| การออกหุ้นเพิ่มทุนและซื้อหุ้นคืน | ยังไม่มีในระบบ | อภิปรายในห้องโดยอิงงบจริงของทีม |
| มูลค่าปัจจุบันสุทธิและอัตราผลตอบแทนภายใน | ยังไม่มีเครื่องมือในระบบ | คำนวณด้วยตารางคำนวณแล้วแนบผล |
| ระยะเวลาคืนทุน | ยังไม่มีเครื่องมือในระบบ | คำนวณจากกระแสเงินสดที่ระบบให้ |
| ความต้องการเงินทุนจากภายนอก | ยังไม่มีตัวคำนวณ | ประมาณการจากงบที่ระบบออกให้ |
| การพักเงินสดส่วนเกินในตราสารระยะสั้น | ยังไม่มีในระบบ | อภิปรายทางเลือกและต้นทุนค่าเสียโอกาส |
11.4 ลิงก์ที่ใช้ในคาบ
| ใคร | ลิงก์ | ใช้ทำอะไร |
|---|---|---|
| ทุกคน | sim.pinksolutions.app | เข้าสู่ระบบ |
| ผู้เรียน | sim.pinksolutions.app/รหัสสี่ตัว | เข้าห้องด้วยรหัสที่เขียนบนกระดาน |
| ผู้สอน | sim.pinksolutions.app/teach | จอควบคุมห้องเรียน |
| ผู้สอน | sim.pinksolutions.app/r/รหัสสี่ตัว | รายงานสรุปคาบ |
แหล่งอ้างอิงและสิ่งที่ตรวจสอบได้
รายการนี้เป็นสิ่งที่ตรวจสอบได้จริง ไม่ใช่บรรณานุกรมทางวิชาการ ตัวเลขทุกตัวในเอกสารนี้นับจากโค้ดและจากการทดสอบบนเครื่องที่ใช้งานจริง
- ซอร์สโค้ดของระบบ — 119 ไฟล์ 41,932 บรรทัด ที่
pinksolutions.app/bfsim - ชุดทดสอบ — 56 ไฟล์ 596 ฟังก์ชัน ตรวจสอบซ้ำได้ด้วยคำสั่ง
go test ./... - ระบบที่ใช้งานจริง —
sim.pinksolutions.app - คลังหลักฐาน — ตรวจทั้งคลังได้ด้วย
evidence -verify-chainและตรวจไฟล์ในซองด้วยsha256sum -c - ห้องสมุดมาตรฐานการบัญชีและกฎหมายไทยที่ใช้ประกอบการออกแบบ — TFRS, TAS, TFRIC/TSIC, TSA, ประมวลรัษฎากร และประมวลกฎหมายแพ่งและพาณิชย์
เอกสารนี้เป็นรายงานการออกแบบและพัฒนาระบบ เขียนในรูปแบบวิทยานิพนธ์ แต่ยังไม่ใช่วิทยานิพนธ์ฉบับสมบูรณ์ เพราะขาดบททบทวนวรรณกรรม การอ้างอิงทางวิชาการ และการทดลองกับกลุ่มตัวอย่างจริง หากจะยื่นเป็นวิทยานิพนธ์ ต้องเพิ่มสามส่วนนี้ก่อน