#accounting#fixed-asset#depreciation#gl#go
ค่าเสื่อมราคาสินทรัพย์ถาวร (เอกสารโอนค่าเสื่อม 1801)
ค่าเสื่อมคำนวณตามช่วงวันที่ที่เลือก แล้วบันทึกเป็นเอกสาร as_trans flag 1801 + as_trans_detail (ต่อสินทรัพย์) + gl_journal / gl_journal_detail ใน transaction เดียว เครื่องคำนวณ port จาก C# _assetDepreciation และคิดแบบเส้นตรงอย่างเดียว (comment fa_depreciation.go:4 ระบุว่า C# อ่าน calc_type แต่ไม่ได้ใช้)
ทำงานอย่างไร
ตัวเลือก (fa_depreciation.go:28)
ProcessMode: 0 = จำนวนวันสรรพากร, 1 = จำนวนวันบัญชี 30/360 (ค่าเริ่มต้น), 2 = จำนวนวันจริงProcessBy: 1 = รายวัน, 2 = รายเดือน (ค่าเริ่มต้น), 3 = รายปี- ทศนิยม (
faAmountScale:783) =item_amount_decimalช่วง 0-6 (เก็บ 0 ได้) ค่าอื่น = 2; ทุกขั้นปัด HALF_UP
สูตร (depAsset)
- มูลค่าคิดค่าเสื่อม (
newDepAsset:114) = (มูลค่ายกมา ถ้าไม่ใช่ 0 มิฉะนั้นราคาทุน) - ราคาซาก - อายุจริงเป็นปี (
yearAge:126): ถ้าวันเริ่ม + อายุเต็มปี = วันสิ้นสุด ใช้อายุตามที่ตั้ง มิฉะนั้นคิดเศษปีจากจำนวนวัน - ค่าเสื่อมต่อปี (
yearVal:141) = มูลค่าคิด / อายุ - ต่อเดือน (
monthVal:144)- บัญชี: 30 x round(ต่อปี / 360)
- สรรพากร: วันในเดือน x round(ต่อปี / 365) โดย ก.พ. ปีอธิกสุรทินนับ 28 วัน
- วันจริง: วันในเดือน x round(ต่อปี / วันในปี)
- ต่อวัน (
dayVal:160) แยกตามโหมดเช่นกัน - สินทรัพย์ที่ขายแล้ว (มีแถว 1802) คิดถึงวันก่อนวันขาย 1 วัน (
depAssetOf:471) depCompute(:488): ยอดยกไปติดลบ แสดงราคาซากแทน; ขายในงวด ยอดยกไป = 0
GL (depGLLines :719)
- Dr บัญชีค่าเสื่อม (
depreciation_account_code) / Cr ค่าเสื่อมสะสม (depreciation_sum_account_code) รวมยอดตามบัญชี - Dr ไม่เท่า Cr (สินทรัพย์ไม่มีบัญชีฝั่งใดฝั่งหนึ่ง) = error "ผังบัญชีค่าเสื่อม/ค่าเสื่อมสะสมของสินทรัพย์ไม่ครบ..." ไม่ลง journal ที่ไม่สมดุล (:836)
บันทึก (FADepreciation :794)
- save = false คือ preview; บันทึกทีละผู้ใช้ด้วย lock "fa-depreciation"
resolveDepDoc(:895): ใช้เลขที่ระบุ หรือเอกสาร 1801 เดิมของงวดเดียวกัน; สมุดบัญชีจากรูปแบบเอกสารcheckDepOverlap(:935): ห้ามคิดสินทรัพย์ซ้ำในเอกสาร 1801 อื่นที่ช่วงวันที่ทับกันinsertDepDoc(:964) เขียนเอกสาร และบันทึก process log
ลบ (deleteFADepreciation :858)
- ลบทั้ง as_trans, as_trans_detail, gl_journal_detail, gl_journal (C# ลบแค่หัว)
- ปฏิเสธเมื่อสินทรัพย์ในเอกสารถูกขาย (1802) ในหรือหลังวันที่เอกสาร "...ขายไปแล้วในเอกสาร..."
- ตรวจ
checkPeriodNotClosed(ไม่พบงวดผ่านได้ งวดปิดไม่ผ่าน)
ช่วยคำนวณใน master สินทรัพย์ (asset_depreciation.go)
assetRate(:66): เส้นตรง อัตรา = 100 / อายุ; ลดน้อยถอยลง อัตรา = (1 - (ซาก / มูลค่า)^(1/อายุ)) x 100 คิดด้วยbig.Float256 bit แล้วปัด 14 หลักนัยสำคัญ (เลียน C# Math.Pow)assetStopDate(:155): วันหยุดคิด = วันเริ่ม + อายุ (ปี) - 1 วัน; อายุไม่เกิน 1000 ปี; 29 ก.พ. ถูก clamp (addYearsClamped:172)
จุดเสี่ยง
- ไม่ตรวจงวดบัญชีตอนบันทึก (comment :792-793 ตาม C#) ลงค่าเสื่อมในงวดที่ปิดแล้วได้ ขณะที่การลบตรวจ ดู งวดบัญชีและด่านตรวจงวดปิด (Accounting Period Guard)
- ลดน้อยถอยลงคำนวณได้แค่อัตราใน master แต่เครื่องคิดค่าเสื่อมใช้เส้นตรงเสมอ
- ปัดเศษทุกขั้นกลาง (ต่อปี ต่อวัน แล้วคูณจำนวนวัน) ผลรวมรายเดือนตลอดอายุอาจไม่เท่ามูลค่าคิดพอดี (ยังไม่ได้ตรวจว่ามีการปิดเศษงวดสุดท้ายหรือไม่)
ที่มาในโค้ด
backend/internal/application/process/fa_depreciation.go:28ค่าคงที่ mode / bybackend/internal/application/process/fa_depreciation.go:114newDepAssetbackend/internal/application/process/fa_depreciation.go:144monthValbackend/internal/application/process/fa_depreciation.go:488depComputebackend/internal/application/process/fa_depreciation.go:719depGLLinesbackend/internal/application/process/fa_depreciation.go:794FADepreciationbackend/internal/application/process/fa_depreciation.go:858deleteFADepreciationbackend/internal/application/process/fa_depreciation.go:935checkDepOverlapbackend/internal/application/process/asset_depreciation.go:66assetRate