অধ্যায় ৩০ — Fixed Asset Accounting
Volume 2 · Part 4 — Application-specific Accounting · Chapter 30
পূর্বশর্ত: অধ্যায় ১৫ (Purchase — Dr কোথায়, capitalization threshold), অধ্যায় ২৫ (Adjusting Entry — depreciation-এর ন্যূনতম রূপ), অধ্যায় ২১ (Balance Sheet — contra), অধ্যায় ২৮ (GRN — asset-এর receipt), অধ্যায় ২৭ (subledger যার অঙ্ক system হিসাব করে)
১. Learning Objective
এই অধ্যায় শেষে আপনি পারবেন:
একটা asset-এর জীবনচক্র — capitalize → depreciate → addition / transfer / impairment → dispose — প্রতিটি ধাপের entry লিখতে
Cost-এ কী ঢোকে (দাম, installation, আনার খরচ) আর কী ঢোকে না (VAT, training, repair) — ঠিক করতে
Asset under construction (CWIP) — খরচ জমে, ready হলে capitalize — কেন আলাদা account
Depreciation-এর তিন উপাদান — cost, residual, useful life — আর straight-line ও reducing balance হাতে হিসাব করতে
কোন মাস থেকে depreciation শুরু, কোন মাসে শেষ — convention ঠিক করে সারাজীবন মানতে
Repair বনাম improvement — খরচ না addition — সিদ্ধান্তের নিয়ম
Useful life বদলালে (estimate change) prospective হিসাব — আগের মাস ছোঁয়া নয়
Disposal-এ লাভ/ক্ষতি — NBV বনাম proceeds — একটা entry-তে চার account
Partial disposal, write-off, fully depreciated asset — তিনটি বিশেষ ক্ষেত্র
Asset register (subledger) আর GL 15x0 / 15x5 মেলাতে — cost ও accumulated আলাদা
মাসিক depreciation job — idempotent, rounding শেষ মাসে, register থেকে GL
Physical verification, tag, location — accounting-এর বাইরে, অথচ accounting-এর জন্যসময়: পড়া ৫৫ মিনিট + অনুশীলন ৬০ মিনিট।
২. Concept Explanation
বছরের পর বছর বাঁচে
অধ্যায় ১৫-এর তিন প্রশ্নের দ্বিতীয়টা — “বহু বছর ব্যবহার হবে” → asset। অধ্যায় ২৫-এ তার ন্যূনতম রূপ: laptop ২,৪০,০০০, ৩৬ মাস, মাসে ৬,৬৬৭। এই অধ্যায় পুরোটা — কারণ asset inventory-র মতো এক মাসে আসে-যায় না; একটা register-এর সারি পাঁচ-দশ বছর বাঁচে, আর সেই সময়ে তার সাথে অনেক কিছু ঘটে:
Business Flow Financial Event Entry
───────────── ─────────────── ─────
PO → GRN (অধ্যায় ২৮) asset এল, এখনো ready নয় Dr 1590 CWIP / Cr 2115 GRNI
installation, আনা cost জমছে Dr 1590 CWIP / Cr 2110
ready for use CAPITALIZE — register-এ জন্ম Dr 1510 / Cr 1590
প্রতি মাস DEPRECIATE — ক্ষয়, bill ছাড়া Dr 5290 / Cr 1515
upgrade ADDITION — cost বাড়ে, base বাড়ে Dr 1510 / Cr 2110
repair খরচ — asset ছোঁয় না Dr 5xxx / Cr 2110
অন্য branch-এ TRANSFER — GL-এ কিছু না, dimension — (account বদলালে Dr/Cr)
মূল্য পড়ে গেল IMPAIRMENT — NBV নামান Dr 5525 / Cr 1516
বিক্রি / ফেলে দেওয়া DISPOSE — register-এ মৃত্যু, লাভ/ক্ষতি Dr Bank, Dr 1515, Dr/Cr 5520 or 4520 / Cr 1510Inventory-র সাথে মিল: subledger যার অঙ্ক system হিসাব করে (depreciation কেউ type করে না)। পার্থক্য: inventory-র সারি issue হলে শেষ; asset-এর সারি সময়ের সাথে নিজে নিজে বদলায় — প্রতি মাসে, কোনো document ছাড়া।
Cost-এ কী ঢোকে
অধ্যায় ২৭-এর landed cost-এর আয়না — asset-কে ব্যবহারের উপযোগী অবস্থায়, জায়গায় আনতে যা লেগেছে:
ঢোকে ঢোকে না
───── ────────
দাম (trade discount বাদে) VAT — claimable হলে (1160)
আনার খরচ, insurance, শুল্ক কর্মীর training
installation, site preparation চালু হওয়ার পরের repair, maintenance
ready করার জন্য testing ready হওয়ার পরে বসে থাকার খরচ
professional fee (architect, engineer) administrative overheadServer ২,৪০,০০০ + installation ১৫,০০০ = cost ২,৫৫,০০০। Installation-টা 5270 Professional Fee-তে গেলে (সাধারণ ভুল) — এ মাসে খরচ ১৫,০০০ বেশি, পাঁচ বছর ধরে depreciation ২৫০ করে কম।
CWIP — ready হওয়ার আগে
মাল ০১-১০ এল, installation ০৩-১০, চালু ০৫-১০। মাঝের দিনগুলোয় asset “আছে” কিন্তু ব্যবহারযোগ্য নয় — depreciation শুরু হয় না, cost জমছে। তাই একটা আলাদা account: 1590 Asset Under Construction / Installation (CWIP)। Ready হলে একটা entry — Dr 1510 / Cr 1590 — সেদিন register-এ সারি জন্মায়, সেটাই capitalization date।
ছোট asset-এ (laptop, একদিনে চালু) CWIP ধাপ লাগে না — GRN সরাসরি 1510। কিন্তু function-টা একই: capitalize(cost, date)। বড় project-এ (office fit-out তিন মাস, software build) CWIP-ই মূল — অধ্যায় ৩৫।
Depreciation — তিন উপাদান, দুই পদ্ধতি
cost 2,85,000 কী দামে এল (addition সহ)
residual value 15,000 জীবন শেষে কত পাব (scrap, resale) — অনুমান
useful life 60 মাস কত মাস কাজ করবে — অনুমান
depreciable 2,70,000 cost − residual → এটাই ভাগ হবেদুটো অনুমান — residual আর life — হিসাবরক্ষকের সিদ্ধান্ত, asset class-এর নীতি (asset_classes.default_life_months), asset-ধরে override।
STRAIGHT-LINE (SL) প্রতি মাস সমান: 2,70,000 ÷ 60 = 4,500
মাস 1 4,500 NBV 2,80,500
মাস 2 4,500 NBV 2,76,000
…
মাস 60 4,500 NBV 15,000 = residual ✓
REDUCING BALANCE (WDV) প্রতি মাস NBV-র নির্দিষ্ট %: ধরুন বার্ষিক 40% → মাসিক 3.33%
মাস 1 2,85,000 × 3.33% = 9,500 NBV 2,75,500
মাস 2 2,75,500 × 3.33% = 9,183 NBV 2,66,317
… প্রথম বছরে বেশি, পরে কম; কখনো শূন্য হয় না — residual-এ থামান
UNITS OF PRODUCTION ব্যবহার-ধরে (মেশিন-ঘণ্টা, কিলোমিটার): (cost − residual) × এ মাসের unit ÷ মোট unitএই বইয়ে SL — সরল, সবচেয়ে ব্যবহৃত, আর কোন মাসে কত জানা যায় আগে থেকেই। WDV-র কোড section ৫-এ একই interface-এ — method একটা strategy।
Convention — কোন মাস থেকে, কোন মাস পর্যন্ত
Laptop ১০-১০-২০২৫-এ কেনা। অক্টোবরে depreciation হবে? ২১ দিনের? পুরো মাসের? নীতি লাগে, আর নীতি একটা — সব asset-এ:
next-month capitalization-এর পরের মাস থেকে; disposal-এর মাসে নয় ← এই বই (অধ্যায় ২৫-এর laptop: নভেম্বর থেকে)
full-month capitalization-এর মাসেই পুরো; disposal-এর মাসে নয়
half-month যে মাসেই হোক, অর্ধেক
daily দিন গুনে — নিখুঁত, কিন্তু প্রতি মাসের অঙ্ক আলাদা, কেউ মেলাতে পারে নাNext-month নিলে disposal-এর মাসে depreciation নেই — আয়না; দুই প্রান্তে মিলে ঠিক ৬০ মাস। Convention company_settings-এ, আর বদলানো মানে সব schedule আবার — কার্যত কখনো বদলায় না।
Repair বনাম improvement
Server-এ ৩০,০০০-এর disk যোগ হলো — asset না খরচ? Laptop-এ ৮,০০০-এর RAM?
ক্ষমতা / জীবন বাড়ায় AND threshold-এর উপরে → ADDITION: cost বাড়ে, বাকি জীবনে depreciate
আগের অবস্থায় ফেরায় (repair, servicing, replace ভাঙা অংশ) → EXPENSE (5xxx)
বাড়ায় কিন্তু threshold-এর নিচে → EXPENSE (materiality)Disk ৩০,০০০ → addition (ক্ষমতা বাড়ল, ২০,০০০-এর উপরে)। RAM ৮,০০০ → খরচ (threshold-এর নিচে)। Addition-এ base বদলায় সামনের দিকে: নতুন depreciable = (cost + addition − residual − accumulated) ÷ বাকি মাস। আগের মাস ছোঁয়া নয়।
Estimate বদল — prospective
দু’বছর পরে দেখা গেল furniture সাত বছর চলবে, পাঁচ নয়। আগের দু’বছরের depreciation ভুল ছিল? না — তখনকার সেরা অনুমান। নিয়ম (IAS 8, অধ্যায় ২৫-এর estimate_change): বাকি NBV বাকি নতুন জীবনে ভাগ, আগের entry অক্ষত:
নতুন মাসিক = (NBV এখন − residual) ÷ (নতুন life − ইতিমধ্যে চলা মাস)Method বদল (SL → WDV)-ও একই — prospective। Register-এ asset_events(kind = estimate_change, old, new, reason, approved_by)।
Disposal — লাভ না ক্ষতি
Laptop cost ১,২০,০০০, accumulated ৩৬,৬৬৭, বিক্রি ৬০,০০০ + VAT:
NBV = 1,20,000 − 36,667 = 83,333
proceeds = 60,000
ক্ষতি = 83,333 − 60,000 = 23,333 (proceeds > NBV হলে লাভ — 4520)
Dr 1120 Bank 69,000 ← 60,000 + VAT 9,000
Dr 1515 Accum. Dep. — Computer 36,667 ← এই asset-এর accumulated, পুরোটা সরে
Dr 5520 Loss on Asset Disposal 23,333
Cr 1510 Computer Equipment 1,20,000 ← cost পুরোটা সরে
Cr 2140 VAT Payable 9,000Register থেকে cost আর accumulated দুটোই বেরোয় — NBV নয়। GL 1510 আর 1515 দুটোই কমে; পার্থক্য (NBV) আর proceeds-এর ব্যবধান লাভ/ক্ষতি। Proceeds শূন্য (ফেলে দেওয়া, চুরি) → পুরো NBV ক্ষতি — write-off। Insurance দিলে proceeds-এর জায়গায় insurance receivable।
তিনটি বিশেষ ক্ষেত্র
partial disposal register-এ "laptop × 2" একটা সারি, একটা বিক্রি → আগে SPLIT (cost, accum আনুপাতিক), তারপর dispose একটা
fully depreciated NBV == residual, depreciation থেমে গেছে, asset ব্যবহারে → register-এ থাকে, 1510-তে থাকে, 1515-তে থাকে;
dispose হলে তবেই বেরোয়। "শূন্য NBV = মুছে ফেলা" — সবচেয়ে সাধারণ ভুল
impairment NBV > recoverable (বিক্রি করলে যা পাব বা ব্যবহারে যা দেবে — বেশিটা) → Dr 5525 / Cr 1516 Accum. Impairment;
পরের depreciation নতুন NBV-তে; অধ্যায় ২৭-এর NRV-র asset-সংস্করণ; বিস্তারিত অধ্যায় ৫৯Register — subledger, দুটো সংখ্যা
Inventory-র subledger-এ ছিল qty + value; asset register-এ cost + accumulated, দুটোই GL-এ আলাদা account:
স্তর ১ GL 1510 Computer Equipment 4,05,000 Dr
1515 Accum. Dep. — Computer 40,000 Cr
স্তর ২ Register FA-0001-1 laptop cost 1,20,000 accum 40,000 NBV 80,000
FA-0003 server cost 2,85,000 accum 0 NBV 2,85,000
স্তর ৩ Schedule FA-0001-1: 2025-11 3,333.33 JV-11-…; 2025-12 3,333.33 JV-12-0025; … 2026-10 3,333.33 JV-10-…
Events FA-0001: capitalize 10-10-2025; split 15-10-2026; FA-0001-2: dispose 15-10-2026নিয়ম: GL 15x0 == Σ register cost (disposed বাদে); GL 15x5 == Σ register accumulated (disposed বাদে) — class-ধরে। NBV GL-এ কোথাও নেই — দুটোর পার্থক্য।
Physical verification
মাল গোনার মতো asset-ও গোনা হয় — বছরে একবার, tag নম্বর ধরে, location-ধরে। যা নেই → write-off (অনুমোদনে)। যা আছে কিন্তু register-এ নেই → খুঁজুন কোন bill-এ expense হয়ে গেছে (threshold-এর ভুল)। Accounting নয়, কিন্তু register-এর সত্যতার একমাত্র প্রমাণ।
যা এই অধ্যায়ে নেই
Revaluation (fair value-এ বাড়ানো, revaluation reserve) অধ্যায় ৫৯-এর পাশে; এ বইয়ে cost model
Impairment-এর হিসাব (recoverable amount, CGU) অধ্যায় ৫৯
Lease (right-of-use asset, IFRS 16) এ বইয়ে নেই
Tax depreciation (আইনের হার) বনাম book depreciation অধ্যায় ৫৬-এর পাশে; এখানে শুধু book
Intangible (software license, goodwill) — amortization একই engine, class আলাদা; উল্লেখ মাত্র
Capital project-এর cost collection (CWIP-এর ভিতর) অধ্যায় ৩৫৩. Accounting Rule
Entry
| ঘটনা | Debit | Credit |
|---|---|---|
| GRN / bill, ready নয় | CWIP (1590), VAT Receivable | GRNI / A/P |
| Installation, আনার খরচ | CWIP | A/P / Bank |
| Capitalize (ready for use) | Fixed Asset (15x0) | CWIP |
| GRN / bill, সাথে সাথে ready | Fixed Asset, VAT Receivable | GRNI / A/P |
| Depreciation (মাসিক) | Depreciation Expense (5290) | Accum. Depreciation (15x5) |
| Addition (improvement) | Fixed Asset | A/P |
| Repair | Expense (5xxx) | A/P |
| Transfer (একই class) | — (dimension) | — |
| Transfer (class বদল) | Fixed Asset [new], Accum. Dep. [old] | Fixed Asset [old], Accum. Dep. [new] |
| Impairment | Impairment Loss (5525) | Accum. Impairment (1516) |
| Disposal, proceeds > NBV | Bank / A/R, Accum. Dep. | Fixed Asset, Gain (4520), VAT Payable |
| Disposal, proceeds < NBV | Bank / A/R, Accum. Dep., Loss (5520) | Fixed Asset, VAT Payable |
| Write-off (proceeds 0) | Accum. Dep., Loss (5520) | Fixed Asset |
| Insurance claim | Insurance Receivable, Accum. Dep., Loss (বাকি) | Fixed Asset |
Cost
cost = দাম + আনা + installation + testing + professional fee — ready হওয়া পর্যন্ত
নয় = claimable VAT, training, ready-র পরের repair, overhead
threshold-এর নিচে → খরচ (নীতি: company_settings.capitalization_threshold)Depreciation
depreciable = cost − residual
SL = depreciable ÷ life_months, প্রতি মাস সমান; শেষ মাসে rounding-এর পার্থক্য
WDV = NBV × rate, residual-এ থামে
convention = next-month (capitalize-এর পরের মাস থেকে; disposal-এর মাসে নয়) — একটা, সব asset-এ
থামে = NBV == residual; asset register-এ থাকেChange
addition / estimate change / impairment → prospective: (NBV − residual) ÷ বাকি মাস; আগের entry অক্ষতDisposal
সরে: cost পুরোটা (Cr 15x0), accumulated পুরোটা (Dr 15x5)
লাভ/ক্ষতি = proceeds (VAT ছাড়া) − NBV; > 0 → 4520, < 0 → 5520
partial → আগে splitRegister == GL
GL 15x0 == Σ register.cost (status ≠ disposed), class-ধরে
GL 15x5 == Σ register.accumulated (status ≠ disposed), class-ধরে
GL 1590 == Σ CWIP items not yet capitalized
15x0 / 15x5 / 1590-এ হাতে JV নয়অলঙ্ঘনীয়
Depreciation ব্যবহারকারী লেখেন না — schedule থেকে। Fully depreciated ≠ মুছে ফেলা। বদল prospective।৪. Real Business Example
অক্টোবর ২০২৬ — একটা জন্ম, একটা মৃত্যু, একটা ভাগ
একই company। Register ৩০ সেপ্টেম্বর ২০২৬-এ (অধ্যায় ১৫, ১৯, ২৫ থেকে):
FA-0001 Laptop × 2 class Computer cost 2,40,000 capitalized 10-10-2025 life 36 residual 0
accum (নভ ২০২৫ – সেপ্টে ২০২৬, ১১ মাস × 6,666.67) = 73,333.33 NBV 1,66,666.67
FA-0002 Office furniture class Furniture cost 72,000 capitalized 10-10-2025 life 60 residual 0
(মূল 80,000, DN ২০-১২-২০২৫ −8,000; 1,333.33 × 2 + 1,200 × 9) accum 13,466.67 NBV 58,533.33
GL: 1510 2,40,000 Dr 1515 73,333 Cr 1520 72,000 Dr 1525 13,467 Cr 1590 0Register-এ ৪ দশমিক, GL-এ গোল — পার্থক্য পয়সায়, শেষ মাসে মেটে (section ৫)। নতুন account:
1516 Accum. Impairment — Computer ASSET post ← contra
1590 Asset Under Installation (CWIP) ASSET post
5525 Impairment Loss EXPENSE post
(1510–1535, 4520, 5290, 5520 — অধ্যায় ৫ থেকেই)০১-১০ — Server এল, PO-10-0003-এর GRN (অধ্যায় ২৮); ২,৪০,০০০ + VAT; এখনো বসেনি
JV-10-0001 source = goods_receipt
Dr 1590 CWIP [server] 2,40,000
Cr 2115 GRNI 2,40,000
register: এখনো নেই — CWIP item "server, PO-10-0003", 2,40,000
০২-১০ bill: Dr 2115 2,40,000 / Dr 1160 36,000 / Cr 2110 2,76,000 (match ✓)০৩-১০ — Installation, vendor-এর bill ১৫,০০০ (VAT নেই)
PB-10-0004
Dr 1590 CWIP [server] 15,000
Cr 2110 A/P [installer] 15,000
CWIP item: 2,55,0005270-এ নয় — server ready করার খরচ।
০৫-১০ — চালু; capitalize
JV-10-0005 source = asset_capitalization FA-0003
Dr 1510 Computer Equipment 2,55,000
Cr 1590 CWIP 2,55,000
register: FA-0003 Server class Computer cost 2,55,000 capitalized 05-10-2026 life 60 residual 15,000 method SL
location: server room; cost center: DEV; tag SRV-001
depreciation: next-month → নভেম্বর ২০২৬ থেকে; (2,55,000 − 15,000) ÷ 60 = 4,000/মাস১০-১০ — Laptop #1-এ RAM ৮,০০০ (VAT সহ ৯,২০০)
threshold 20,000-এর নিচে → খরচ
PB-10-0007 Dr 5250 Office Supplies 8,000 / Dr 1160 1,200 / Cr 2110 9,200
register: ছোঁয় না১৫-১০ — Laptop #2 বিক্রি, ৬০,০০০ + VAT, ব্যাংকে
FA-0001 একটা সারিতে দুটো laptop। প্রথমে split:
event: split FA-0001 → FA-0001-1, FA-0001-2 (cost 1,20,000 করে; accum 36,666.67 করে; একই তারিখ, life)
GL: কিছু না — মোট একতারপর dispose FA-0001-2, convention: অক্টোবরে depreciation নেই:
NBV = 1,20,000 − 36,666.67 = 83,333.33; proceeds 60,000; ক্ষতি 23,333.33
JV-10-0009 source = asset_disposal FA-0001-2
Dr 1120 Bank — Prime 69,000
Dr 1515 Accum. Dep. — Computer 36,667
Dr 5520 Loss on Asset Disposal 23,333
Cr 1510 Computer Equipment 1,20,000
Cr 2140 VAT Payable 9,000
register: FA-0001-2 status disposed, disposed_on 15-10-2026, proceeds 60,000, gain/loss −23,333.33Cost ১,২০,০০০ আর accumulated ৩৬,৬৬৭ — দুটোই বেরোল। “NBV ৮৩,৩৩৩ Cr 1510” লিখলে (সাধারণ ভুল) 1515-এ ৩৬,৬৬৭ চিরকাল অনাথ।
২০-১০ — Server-এ disk ৩০,০০০ + VAT — addition
ক্ষমতা বাড়ায়, threshold-এর উপরে → addition
PB-10-0011 Dr 1510 Computer Equipment 30,000 / Dr 1160 4,500 / Cr 2110 34,500
register: FA-0003 event addition 30,000 → cost 2,85,000
depreciation (নভেম্বর থেকে): (2,85,000 − 15,000 − 0) ÷ 60 = 4,500/মাস ← এখনো একটাও মাস যায়নি, তাই পুরো life২৫-১০ — Furniture-এর life পুনর্বিবেচনা: ৬০ → ৮৪ মাস (মজবুত, বদলানোর পরিকল্পনা নেই)
event: estimate_change FA-0002 life 60 → 84, reason, approved_by CFO
এ পর্যন্ত চলেছে 11 মাস; NBV 58,533.33; বাকি 84 − 11 = 73 মাস
নতুন মাসিক (নভেম্বর থেকে) = 58,533.33 ÷ 73 = 801.83
অক্টোবরের depreciation: এখনো পুরনো 1,200 (নীতি: মাসের depreciation মাসের শুরুর schedule-এ — অধ্যায় ২৫-এর DN-এর নিয়ম)
আগের ১১ মাস: অক্ষত৩১-১০ — Depreciation run
handler_depreciation (অধ্যায় ২৫-এর period-end ধাপ ৭), key = ('depreciation', asset, 2026-10)
FA-0001-1 laptop 3,333.33 (12তম মাস)
FA-0001-2 laptop — disposed এ মাসে — convention
FA-0002 furniture 1,200.00 (পুরনো schedule; নভেম্বর থেকে 801.83)
FA-0003 server — capitalized এ মাসে — next-month
─────────
4,533.33
JV-10-0031 source = depreciation, posting_date 31-10
Dr 5290 Depreciation 4,533
Cr 1515 Accum. Dep. — Computer 3,333
Cr 1525 Accum. Dep. — Furniture 1,200Register — ৩১ অক্টোবর ২০২৬
Asset Class Cost Accum. NBV Status মাসিক (নভ থেকে)
───── ───── ──── ────── ─── ────── ────────────────
FA-0001-1 Computer 1,20,000 39,999.96 80,000.04 active 3,333.33 (২৪ মাস বাকি)
FA-0001-2 Computer — — — disposed —
FA-0003 Computer 2,85,000 0.00 2,85,000.00 active 4,500.00 (৬০ মাস)
FA-0002 Furniture 72,000 14,666.67 57,333.33 active 801.83 (৭৩ মাস)
─────────────────────────────────────────────────────────────
Computer Σ 4,05,000 39,999.96 3,65,000.04
Furniture Σ 72,000 14,666.67 57,333.33
GL: 1510 2,40,000 − 1,20,000 + 2,55,000 + 30,000 = 4,05,000 ✓
1515 73,333 − 36,667 + 3,333 = 40,000 ✓ (register 39,999.96 — পার্থক্য 0.04, নিচে)
1520 72,000 ✓ 1525 13,467 + 1,200 = 14,667 ✓ 1590 0 ✓FA-0001-1-এর accumulated register-এ ৩৯,৯৯৯.৯৬ (১২ × ৩,৩৩৩.৩৩), GL-এ ৪০,০০০ (মাসে মাসে টাকায় গোল: ১১ × ৩,৩৩৩ + ১ × ৩,৩৩৪ — cumulative rounding, কোন মাসে ৩,৩৩৪ সেটা section ৫-এর নিয়ম)। সারকথা: register আর GL পয়সায় আলাদা হতে পারে, টাকায় নয়; শেষ মাসে দুটো এক।
Asset-এর জীবন এক নজরে — FA-0001-2
10-10-2025 capitalize 1,20,000 (bill PB-10-0003-এর ⅓; DN-এ ফেরত যাওয়া তৃতীয়টা বাদ — অধ্যায় ১৫)
11-2025 … depreciate 3,333.33 × 11 = 36,666.67
09-2026
15-10-2026 split FA-0001 থেকে
15-10-2026 dispose proceeds 60,000; NBV 83,333.33; loss 23,333.33
─────────
মোট খরচ জীবনে: 36,666.67 + 23,333.33 = 60,000 = cost − proceeds ✓শেষ লাইনটা অধ্যায় ২৭-এর “মোট পদ্ধতি-নিরপেক্ষ”-এর asset-সংস্করণ: asset-এর জীবনভর মোট খরচ = cost − proceeds, সবসময়। Depreciation নীতি ঠিক করে কোন মাসে কত — মোট নয়।
৫. Implementation — Software ও Database
asset_classes — নীতি এখানে
asset_classes
id, company_id, code, name -- COMPUTER, FURNITURE, VEHICLE, SOFTWARE (intangible)
cost_account_id FK -- 1510
accum_dep_account_id FK -- 1515
accum_imp_account_id FK -- 1516
dep_expense_account_id FK -- 5290 (class-ধরে আলাদা হতে পারে)
gain_account_id, loss_account_id -- 4520, 5520
default_method sl | wdv | units
default_life_months INT
default_residual_pct DECIMAL(5,2)Account class-এ, asset-এ copy — অধ্যায় ১৩-এর revenue_account_id, ২৭-এর items — একই রীতি।
fixed_assets — register
fixed_assets
id, company_id, asset_no (gapless, FA-0003)
class_id FK
name, description, tag_no, serial_no
quantity DECIMAL(10,2) DEFAULT 1 -- split-এর জন্য
parent_asset_id FK NULL -- split / component
location_id, cost_center_id, custodian_employee_id
acquisition_date DATE -- bill / GRN
capitalized_on DATE -- ready for use; depreciation এর পরের মাস থেকে
cost DECIMAL(18,4) -- Σ events(capitalize, addition)
residual_value DECIMAL(18,4)
life_months INT
method sl | wdv | units
wdv_rate DECIMAL(7,4) NULL
accumulated_dep DECIMAL(18,4) -- cache; = Σ schedule posted
accumulated_imp DECIMAL(18,4)
status cwip | active | fully_depreciated | disposed | written_off
disposed_on, disposal_proceeds, disposal_gain_loss
source_type, source_id -- purchase_invoice line / grn line / cwip item
version INT
UNIQUE (company_id, asset_no); INDEX (company_id, class_id, status); INDEX (company_id, tag_no)cost আর accumulated_dep cache — asset_events আর depreciation_schedules থেকে rebuild-able (যাচাই ১১৫)।
asset_events — সবকিছু event
asset_events
id, asset_id, event_date, posting_date
kind capitalize | addition | transfer | estimate_change | impairment | split | dispose | write_off | reinstate
amount DECIMAL(18,4) -- capitalize/addition: cost; impairment: loss; dispose: proceeds
old_value, new_value -- estimate_change: life/residual/method; transfer: location/cc/class
reason, approved_by
journal_entry_id -- entry যেখানে লাগে
source_type, source_idRegister-এর cost = Σ (capitalize + addition) − split-out। প্রতিটি event-এর নিজের entry (transfer ছাড়া, class না বদলালে)।
depreciation_schedules — স্তর ৩
depreciation_schedules
asset_id, period_id PK
planned_amount DECIMAL(18,4) -- schedule তৈরির সময়
posted_amount DECIMAL(18,2) -- GL-এ যা গেল (গোল)
journal_entry_id FK NULL
status planned | posted | skipped (disposed / fully dep.)
schedule_version INT -- estimate change-এ নতুন version, পুরনো posted অক্ষত
UNIQUE (asset_id, period_id) -- idempotency (অধ্যায় ২৫)Capitalize-এর দিন পুরো schedule তৈরি হয় (৬০ সারি, planned) — তাই “ডিসেম্বর ২০২৯-এ কত depreciation” আজই জানা। Estimate change-এ ভবিষ্যতের planned সারি নতুন করে; posted সারি ছোঁয়া নয়।
Depreciation engine — method একটা strategy
buildSchedule(asset, from_period):
remaining_months = asset.life_months − months_posted(asset)
base = asset.cost − asset.residual_value − asset.accumulated_dep − asset.accumulated_imp
প্রতিটি period p from from_period, remaining_months টা:
amt = switch asset.method:
sl: base ÷ remaining_months -- সমান
wdv: (asset.cost − accum_so_far) × asset.wdv_rate ÷ 12; max(…, residual-এর উপরে)
units: base × units(p) ÷ remaining_units
upsert schedule(asset, p, planned = round4(amt), version = asset.schedule_version)
-- rounding: Σ planned == base ঠিক; শেষ সারি = base − Σ আগেরগুলো
monthlyDepreciation(asset, period): -- অধ্যায় ২৫-এর handler_depreciation ডাকে
if asset.status ∉ (active): return 0
if period ≤ month(asset.capitalized_on): return 0 -- next-month convention
if asset.disposed_on AND period ≥ month(disposed_on): return 0
s = schedule(asset, period); if s.status == posted: return 0 -- idempotent
posted = round2(s.planned)
-- GL rounding: cumulative — posted = round2(Σ planned to date) − Σ posted to date; পয়সা কোনো মাসে জমে না
return posted
runDepreciation(period):
lines = {}
প্রতিটি asset active:
amt = monthlyDepreciation(asset, period)
if amt == 0: continue
lines[(class.dep_expense_account, asset.cost_center)] += amt
lines[(class.accum_dep_account)] −= amt
schedule.posted_amount = amt; status = posted; asset.accumulated_dep += amt
if asset.accumulated_dep ≥ asset.cost − asset.residual_value: asset.status = fully_depreciated -- থাকে, মোছে না
entry = JournalEntry(source = 'depreciation', idempotency_key = ('depreciation', period), posting_date = period.end)
প্রতিটি (acct, cc, amt): entry.signedLine(acct, amt, dims = {cost_center, asset_class})
post(entry); প্রতিটি schedule.journal_entry_id = entry.idCumulative rounding লাইনটাই ৪০,০০০-এর রহস্য: ১২ মাসে planned ৩,৩৩৩.৩৩৩৩ × ১২ = ৩৯,৯৯৯.৯৯৯৬ → round2 cumulative → শেষ মাসে ৩,৩৩৪ নয়, প্রতি মাসে ৩,৩৩৩.৩৩ posted (২ দশমিক) → Σ ৩৯,৯৯৯.৯৬; শেষ (৩৬তম) মাসে base − Σ = বাকিটা। GL-এ পয়সা রাখলে (DECIMAL(18,2)) এটাই যথেষ্ট; টাকায় গোল করলে cumulative সূত্র। Asset-ধরে, class-ধরে নয় — নইলে এক asset-এর পয়সা অন্যটায়।
Capitalize, addition, dispose
capitalize(cwip_item | bill_line, ready_on, class, life, residual, by):
যাচাই: cost ≥ threshold (নইলে খরচ, register নয়); ready_on ≥ acquisition; by has 'asset.capitalize'
asset = fixed_assets.insert(status = active, cost = item.cost, capitalized_on = ready_on, …)
if from CWIP: entry Dr class.cost_account / Cr 1590 item.cost; cwip_item.asset_id = asset.id
-- GRN/bill সরাসরি 15x0-তে গেলে entry নেই — link শুধু (bill line.fixed_asset_id)
asset_events += (capitalize, cost, entry)
buildSchedule(asset, from = next_month(ready_on))
addition(asset, bill_line, by):
যাচাই: asset active; amount ≥ threshold (নইলে খরচ); reason ∈ (capacity, life) — repair হলে reject
asset.cost += amount; asset_events += (addition, amount, bill entry) -- bill-এর line-ই Dr 15x0
buildSchedule(asset, from = next_month(bill_line.posting_date)) -- prospective
changeEstimate(asset, {life? residual? method?}, reason, by):
যাচাই: by has 'asset.estimate'; reason খালি নয়
asset_events += (estimate_change, old, new); asset.schedule_version += 1
buildSchedule(asset, from = next open period) -- posted অক্ষত
split(asset, parts, by): -- partial disposal-এর আগে
প্রতিটি part: child = copy(asset, cost × share, accumulated × share, quantity × share, parent = asset)
schedule posted rows copy × share (audit trail); planned rebuild
asset.status = split; GL entry নেই (Σ অপরিবর্তিত); asset_events += (split)
dispose(asset, disposed_on, proceeds, vat, counterparty | bank, by):
যাচাই: asset active/fully_depreciated; quantity == 1 বা পুরোটা (নইলে আগে split); by has 'asset.dispose'; period open
-- convention: disposal-এর মাসে depreciation নেই; ওই মাসের schedule skipped
nbv = asset.cost − asset.accumulated_dep − asset.accumulated_imp
gl = proceeds − nbv
entry: Dr bank/1130 proceeds + vat
Dr class.accum_dep asset.accumulated_dep; Dr class.accum_imp asset.accumulated_imp
gl < 0 ? Dr class.loss_account −gl : Cr class.gain_account gl
Cr class.cost_account asset.cost; Cr 2140 vat
assert balanced; post
asset.status = disposed; disposed_on, disposal_proceeds, disposal_gain_loss; future schedules skipped
asset_events += (dispose, proceeds, entry)
writeOff(asset, on, reason, by): dispose(asset, on, proceeds = 0, …); kind = write_off; approval দুই স্তরে (অধ্যায় ৪৮)dispose()-এ cost আর accumulated দুটোই আলাদা line — কখনো নিট নয়।
Transfer ও impairment
transfer(asset, {location? cost_center? class?}, by):
asset_events += (transfer, old, new)
if class বদল: entry Dr new.cost_account / Cr old.cost_account cost; Dr old.accum / Cr new.accum accumulated
else: entry নেই — dimension বদল; পরের depreciation নতুন cost center-এ
impair(asset, recoverable, on, by): -- অধ্যায় ৫৯-এর হিসাব; এখানে entry
loss = max(0, nbv − recoverable)
entry: Dr 5525 / Cr class.accum_imp_account loss
asset.accumulated_imp += loss; buildSchedule(asset, from = next month) -- নতুন NBV-তেCWIP items
cwip_items: id, name, po_id, expected_ready, cost (Σ lines), status (open | capitalized | abandoned), asset_id
cwip_lines: cwip_id, source (grn line | bill line | payroll allocation — অধ্যায় ৩৫), amount, journal_entry_id
GL 1590 == Σ cwip_items(open).cost (যাচাই ১১৬)
abandoned → Dr 5520 / Cr 1590 (project বাতিল — খরচ)Physical verification
asset_counts: id, location_id, count_date, status
asset_count_lines: count_id, asset_id, expected_location, found (bool), found_location, condition, note
→ found = false, ৬০ দিনে খুঁজে না পেলে → writeOff (অনুমোদনে)
→ found অথচ register-এ নেই (tag নেই) → "unregistered asset" তালিকা → bill খুঁজুন → capitalize (reclass খরচ থেকে)API / Service
POST /assets/cwip … /lines GRN/bill থেকে (অধ্যায় ২৮-এর fixedAssetRegister.stage())
POST /assets/capitalize {cwip_id | bill_line_id, ready_on, class, life, residual}
POST /assets/{id}/addition | /transfer | /estimate | /impair | /split | /dispose | /write-off
GET /assets/{id}/schedule planned + posted, version-ধরে
GET /assets/{id}/events জীবনী
GET /assets/register?class=&as_of=&status= section ৪-এর table; Σ == GL
POST /assets/depreciation/run {period} অধ্যায় ২৫-এর orchestration থেকেই; idempotent
GET /assets/reconciliation?as_of= যাচাই ১১৪–১১৯
GET /assets/forecast?months=12 আগামী depreciation — budget (অধ্যায় ৩৩)Depreciation-এর অঙ্ক client পাঠায় না; POST /dispose-এ client লাভ/ক্ষতি পাঠায় না — server হিসাব করে।
রাতের যাচাই
১১৪. প্রতিটি class: closing(cost_account) == Σ fixed_assets.cost WHERE status ∉ (disposed, written_off, split);
closing(accum_dep_account) == Σ accumulated_dep (একই set); closing(accum_imp) == Σ accumulated_imp
১১৫. asset.cost == Σ events(capitalize, addition) − split-out; accumulated_dep == Σ schedule.posted_amount (cache == truth)
১১৬. closing(1590) == Σ cwip_items(open).cost; CWIP item > ১৮০ দিন open → সতর্কতা (ready হয়নি, না ভুলে গেছে?)
১১৭. 15x0 / 15x5 / 1590-এ posted line যার source_type ∉ (purchase_invoice, goods_receipt, debit_note, asset_capitalization,
depreciation, asset_disposal, asset_transfer, impairment, opening_balance) → ০টি
১১৮. active asset যার এই period-এর schedule posted নয় (capitalized আগের মাসে) → ০টি; accumulated_dep > cost − residual → ০টি
১১৯. disposed asset যার cost/accumulated GL-এ রয়ে গেছে (event entry NULL) → ০টি; fully_depreciated asset > ১২ মাস, count-এ found = false → সতর্কতা১১৪ inventory-র ৯৬-এর আয়না — দুটো account, দুটো যোগফল। ১১৮-এর প্রথম অংশ period close-এর checklist-এ (অধ্যায় ২৫-এর ধাপ ৭ ব্যর্থ হলে ধরা পড়ে)।
Test হিসেবে
test "cost: installation ঢোকে, VAT নয়":
grn(server 2,40,000, VAT 36,000); bill(installer 15,000)
capitalize(cwip, ready 05-10)
assert asset.cost == 2,55,000 and Δ 1590 == 0 and Δ 1510 == +2,55,000 and Δ 1160 == +36,000
test "next-month convention":
capitalize(asset, ready 05-10)
assert monthlyDepreciation(asset, Oct) == 0 and monthlyDepreciation(asset, Nov) == 4,000
test "SL schedule: Σ == depreciable, শেষ মাসে rounding":
asset(cost 1,20,000, residual 0, life 36)
assert Σ schedule.planned == 1,20,000 and schedule[36].planned == 1,20,000 − Σ schedule[1..35]
36 × run; assert accumulated == 1,20,000.00 exactly and status == fully_depreciated
test "fully depreciated: register-এ থাকে, GL-এ থাকে, depreciation থামে":
(উপরের asset, ৩৭তম মাস)
assert monthlyDepreciation(asset, m37) == 0 and closing(1510) includes 1,20,000 and closing(1515) includes 1,20,000
test "depreciation idempotent":
run(Oct); run(Oct)
assert entries(source = depreciation, Oct).count == 1
test "addition: prospective, threshold":
asset(server); addition(30,000) → assert cost == 2,85,000 and schedule(Nov) == 4,500
assert rejects addition(8,000) -- threshold; খরচে
test "estimate change: posted অক্ষত, বাকি NBV বাকি মাসে":
furniture (11 posted, NBV 58,533.33); changeEstimate(life 84)
assert schedule(Oct).planned == 1,200 (posted/pending in old version) and schedule(Nov).planned == 801.83
assert Σ schedule posted (1..11) unchanged
test "dispose: cost ও accum দুটোই সরে, loss":
dispose(FA-0001-2, 15-10, proceeds 60,000, vat 9,000, bank)
assert Δ 1510 == −1,20,000 and Δ 1515 == +36,667 and Δ 5520 == +23,333 and Δ 1120 == +69,000 and Δ 2140 == −9,000
assert monthlyDepreciation(FA-0001-2, Oct) == 0
test "dispose gain":
dispose(asset nbv 50,000, proceeds 65,000) → assert Δ 4520 == +15,000 and Δ 5520 == 0
test "partial: split আগে":
assert rejects dispose(FA-0001 quantity 2, one unit)
split(FA-0001, [½, ½]); assert Δ 1510 == 0 and Δ 1515 == 0 and children.Σcost == 2,40,000
test "write-off: proceeds 0, দুই স্তরের অনুমোদন":
assert rejects writeOff(asset, by = single approver)
writeOff(asset, approvers 2) → assert Δ 5520 == +nbv
test "transfer class বদল: cost ও accum দুটো account-এ":
transfer(asset, class Computer → Furniture)
assert Δ 1510 == −cost and Δ 1520 == +cost and Δ 1515 == +accum and Δ 1525 == −accum
test "register == GL":
(section ৪-এর অক্টোবর)
assert closing(1510) == Σ register(Computer).cost == 4,05,000 and closing(1515) == Σ accumulated == 40,000
test "15x0-এ হাতে JV নয়":
assert rejects post(JV(Dr 1510 / Cr 5250))৬. Financial Statement Impact
INCOME STATEMENT (অক্টোবর ২০২৬)
5290 Depreciation 4,533 ← bill নেই, cash নেই, শুধু সময়
5520 Loss on Asset Disposal 23,333 ← non-operating
5250 Office Supplies (RAM) 8,000
(server 2,85,000 — কোথাও না; নভেম্বর থেকে 4,500/মাস)
BALANCE SHEET (৩১ অক্টোবর ২০২৬)
Computer Equipment 4,05,000
Less: Accumulated Depreciation (40,000)
3,65,000 ← NBV
Furniture & Fixtures 72,000
Less: Accumulated Depreciation (14,667)
57,333
Asset Under Installation 0
note: class-ধরে movement: opening cost, additions, disposals, closing; opening accum, charge, disposals, closing
CASH FLOW
operating: net profit + depreciation 4,533 + loss on disposal 23,333 (দুটোই non-cash — অধ্যায় ২২)
investing: purchase of fixed assets −(যা টাকা গেছে); proceeds from disposal +69,000তিনটি কথা। Depreciation আর disposal loss দুটোই non-cash — indirect cash flow-এ ফেরত আসে; proceeds ৬৯,০০০ investing-এ — অধ্যায় ২২-এর তিন ঝুড়ির সবচেয়ে পরিষ্কার উদাহরণ। Balance Sheet-এর note (fixed asset movement schedule) — auditor প্রথমে এটাই চান; register থেকে class-ধরে asset_events GROUP BY kind — অধ্যায় ২১-এর “ছবির নিচে তালিকা”। NBV কোথাও GL-এ নেই — দুটো account-এর পার্থক্য; report-এ তিন লাইন।
৭. Common Developer Mistakes
| ভুল | কী ঘটে | সঠিক পথ |
|---|---|---|
| Installation / আনার খরচ 5xxx-এ | asset কম, খরচ বেশি, depreciation কম | cost-এ; CWIP-এ জমা |
| VAT cost-এ | asset ফোলে, 1160 কম | claimable → 1160 |
| Depreciation capitalize-এর আগে | ready নয় অথচ ক্ষয় | CWIP; capitalized_on থেকে convention |
| Convention asset-ধরে আলাদা | কেউ মেলাতে পারে না | company-wide একটা |
| NBV এক account-এ (cost − accum) | “কত দামে, কত ক্ষয়” হারায়; note বানানো যায় না | 15x0 + 15x5 contra |
| Disposal-এ Cr 1510 NBV | 1515-এ অনাথ accumulated চিরকাল | cost পুরো Cr, accum পুরো Dr |
| Fully depreciated → register থেকে মুছে | GL-এ আছে, register-এ নেই; count-এ ধরা পড়ে না | status fully_depreciated, থাকে |
| Estimate change retro (আগের মাস recompute) | বন্ধ period বদল, audit ভাঙে | prospective; posted অক্ষত |
| Repair capitalize / upgrade expense | asset বা লাভ ভুল | ক্ষমতা+threshold → addition; নইলে খরচ |
| Schedule নেই — প্রতি মাসে cost ÷ life | addition/estimate change-এ ভুল; forecast নেই | পুরো schedule capitalize-এ; version |
| Rounding class-ধরে | এক asset-এর পয়সা অন্যটায়; register ≠ GL | asset-ধরে cumulative; শেষ মাসে |
| Depreciation job idempotent নয় | দুবার চললে দ্বিগুণ | (asset, period) UNIQUE |
| Disposal-এর মাসে depreciation-ও | convention ভাঙে, ১ মাস বেশি | schedule skipped |
| Partial disposal share দিয়ে | register-এ ভগ্নাংশ asset, accum ভুল | split, তারপর dispose |
| Write-off একজনের অনুমোদনে | asset “হারিয়ে” বিক্রি | দুই স্তর; count-এর সাথে |
| Transfer-এ entry (একই class) | অকারণ শব্দ | dimension বদল; class বদলালেই entry |
| CWIP-এ খরচ জমে, কেউ capitalize করে না | depreciation শুরু হয় না, লাভ বেশি | যাচাই ১১৬; ১৮০ দিনে সতর্কতা |
accumulated_dep cache-কে সত্য ধরা | schedule আর cache আলাদা | যাচাই ১১৫; rebuild |
| 15x0/15x5-এ হাতে JV | register ≠ GL | control; যাচাই ১১৭ |
ষষ্ঠ আর সপ্তম সবচেয়ে ব্যয়বহুল, আর দুটোই নীরব। ষষ্ঠটা 1515-এ বছরের পর বছর ধুলো জমায় — একদিন “accumulated depreciation ১২ লাখ, অথচ asset ৮ লাখ” — কেউ ব্যাখ্যা করতে পারেন না। সপ্তমটা উল্টো: ১৫টা laptop register-এ নেই, GL-এ আছে, count-এ কেউ খোঁজে না — চুরি হলে জানা যায় না।
৮. Exercises
সেট ক — cost ও capitalize
১। একটা গাড়ি: দাম ২৫,০০,০০০, registration ১,২০,০০০, insurance (প্রথম বছর) ৬০,০০০, driver-এর
training ৫,০০০, VAT (claimable নয় — গাড়িতে) ৩,৭৫,০০০। cost কত? বাকিগুলো কোথায়?
২। ১ নম্বর: residual ৫,০০,০০০, life ৯৬ মাস, SL। মাসিক? প্রথম বছরের শেষে NBV?
৩। ওই গাড়ি WDV 20% বার্ষিক। প্রথম ৩ মাসের depreciation। SL-এর সাথে পার্থক্য কোথায় যাবে?
৪। Office fit-out: ঠিকাদারের ৩টা bill (৪,০০,০০০ / ৩,০০,০০০ / ২,০০,০০০), architect ৫০,০০০,
তিন মাস ধরে; চালু ৪র্থ মাসে। প্রতিটি bill-এর entry, capitalize-এর entry, কোন মাস থেকে depreciation।
৫। Laptop ১,২০,০০০ কেনা ২৮ তারিখে। next-month, full-month, half-month, daily — চারটিতে প্রথম মাসের depreciation।সেট খ — জীবনের ঘটনা
৬। Section ৪-এর FA-0001-1 (NBV 80,000, ২৪ মাস বাকি) নভেম্বরে ৯০,০০০ + VAT-এ বিক্রি। entry। লাভ না ক্ষতি?
জীবনভর মোট খরচ = cost − proceeds যাচাই করুন।
৭। FA-0002 furniture: ২৫-১০-এর estimate change-এর বদলে impairment — recoverable 40,000। entry।
নভেম্বরের depreciation (life 60-ই)?
৮। Server FA-0003: ২ বছর পরে আরেকটা disk ৩০,০০০। তখন NBV, বাকি মাস, নতুন মাসিক।
৯। Laptop চুরি; insurance ৫০,০০০ দেবে (৩ মাস পরে)। NBV 80,000। চুরির দিনের entry,
insurance পাওয়ার দিনের entry।
১০। FA-0001-1 ৩৬ মাস শেষ, NBV 0, এখনো ব্যবহারে। ৩৭তম মাসে কী entry? register-এ status?
৪০তম মাসে ৫,০০০-এ বিক্রি — entry।
১১। Split: "চেয়ার × ৬" একটা asset 27,000, accum 4,500। ২টা ভেঙে ফেলে দেওয়া। split, write-off — entry।সেট গ — কোনটা ভুল
১২। Dr 5270 Professional Fee 15,000 / Cr A/P 15,000 — server installation
১৩। Dr 1510 1,20,000 / Cr 2110 1,20,000, depreciation কেনার মাসেই (next-month নীতি)
১৪। Dr 1120 69,000 / Cr 1510 83,333 / Dr 5520 23,333 / Cr 2140 9,000 — disposal
১৫। DELETE FROM fixed_assets WHERE accumulated_dep >= cost
১৬। Estimate change: UPDATE depreciation_schedules SET planned = 801.83 WHERE asset = FA-0002 (সব সারি)
১৭। Dr 1510 8,000 / Cr A/P — laptop RAM, threshold 20,000
১৮। Dr 1520 / Cr 1510 (cost); accum 1515-এই রইল — class transfer
১৯। runDepreciation: প্রতিটি asset-এ cost ÷ life, schedule table নেইসেট ঘ — নকশা
২০। Intangible (software license ৩ বছরের, ৩,৬০,০০০): একই engine? class কী, account কী
(1540 Software, 1545 Accum. Amortization, 5295 Amortization)? অধ্যায় ১৮-এর prepaid-এর
সাথে পার্থক্য কী — কখন কোনটা?
২১। Component: একটা মেশিন ১০ বছর, তার motor ৩ বছর। একটা asset না দুটো? parent_asset_id
কীভাবে? motor বদলালে entry?
২২। Tax depreciation আইনে WDV 30%, book-এ SL। দুটো schedule একই asset-এ? table-এ কী
যোগ হবে? deferred tax (অধ্যায় ৫৬) কোথা থেকে আসবে?
২৩। Depreciation forecast ১২ মাস — budget-এর জন্য (অধ্যায় ৩৩)। planned schedule থেকে
সরাসরি? CWIP-এর asset (এখনো capitalize হয়নি) কীভাবে ধরবেন?
২৪। ৫,০০০ asset, মাসিক run। একটা entry ৫,০০০ line না class × cost center-এ ২০ line?
asset-ধরে trace কীভাবে থাকবে? (অধ্যায় ২৯-এর payroll-এর সিদ্ধান্তের সাথে তুলনা)উত্তর আছে Workbook-এর Answer Key, অধ্যায় ৩০-এ।
৯. Developer Challenge
একটি FixedAssetService নকশা করুন — capitalize থেকে dispose — Part 4-এর চতুর্থ project (Projects ও Exit Criteria: Asset capitalization + depreciation + disposal accounting)।
যা যা নকশা করবেন:
১. Schema —
asset_classes(account mapping, default life/residual/method),fixed_assets(register, cache columns,version),asset_events(সব ঘটনা),depreciation_schedules(planned + posted,schedule_version,(asset, period)UNIQUE),cwip_items/lines,asset_counts।২. Depreciation engine —
buildSchedule()method strategy (SL, WDV, units), asset-ধরে cumulative rounding, শেষ মাসে সমতা; convention একটা function-এ (next-month default, config);monthlyDepreciation()idempotent;runDepreciation()অধ্যায় ২৫-এর orchestration-এর ধাপ ৭ হিসেবে — GROUP BY (account, cost center, class), asset-ধরে trace schedule-এ।৩. Life events —
capitalize()(CWIP থেকে বা bill থেকে; threshold),addition()(repair reject),changeEstimate()(prospective, version),split(),dispose()(cost + accum আলাদা line, gain/loss server-এ),writeOff()(দুই স্তর),transfer()(class বদলালেই entry),impair()। প্রতিটি event →asset_events+ entry + schedule rebuild।৪. Register == GL — যাচাই ১১৪–১১৯; reconciliation পাতা class-ধরে: cost, accum, CWIP — পার্থক্য থাকলে কোন asset/entry অনাথ।
৫. Fixed asset movement note (Balance Sheet note) — class-ধরে opening, additions, disposals, closing × (cost, accum);
asset_eventsথেকে; অধ্যায় ২০-এরstatement_runs-এর অংশ।৬. Physical verification — count, tag, missing → write-off workflow, unregistered → capitalize-from-expense (reclass entry)।
৭. অধ্যায় ২৮-এর
fixedAssetRegister.stage()→ CWIP; অধ্যায় ৩৩-এর জন্য forecast; অধ্যায় ৩৫-এর জন্য CWIP-এ payroll/PO cost collection-এর জায়গা; intangible class একই engine-এ।৮. Section ৫-এর চৌদ্দটি test; আর: (ক) estimate change আর depreciation run একই সময়ে — কোন version post হয়? (খ) ৫,০০০ asset-এ run < ১০ সেকেন্ড; (গ) ১০ বছর পুরনো asset-এর জীবনী (events + schedule) এক query-তে।
২ আর ৩ একসাথে আসল পরীক্ষা। Inventory-তে একটা backdated receipt পরের সব issue বদলাত; asset-এ একটা estimate change পরের সব মাস বদলায় — কিন্তু আগের একটাও নয়। Schedule version ছাড়া এটা হয় না: হয় আগের মাস recompute হয়ে যায় (বন্ধ period, audit ভাঙে), নয় নতুন হিসাব কোথাও লেখা থাকে না (পরের মাসে কেউ জানে না কেন ৮০১.৮৩)। Planned আলাদা, posted অক্ষত, version-এ ইতিহাস — এটা পারলে অধ্যায় ৪৩-এর Reversal ও Correction-এর “estimate বদল বনাম ভুল সংশোধন” পার্থক্যটা আপনার কাছে স্পষ্ট থাকবে।
১০. Summary Card
জীবনচক্র
CWIP Dr 1590 / Cr 2115, 2110 cost জমে, depreciation নেই
capitalize Dr 15x0 / Cr 1590 register-এ জন্ম; পরের মাস থেকে depreciation
depreciate Dr 5290 / Cr 15x5 schedule থেকে, মাসে মাসে, idempotent
addition Dr 15x0 / Cr 2110 ক্ষমতা+threshold; prospective
dispose Dr Bank, Dr 15x5, Dr/Cr 5520|4520 / Cr 15x0, Cr 2140 cost ও accum দুটোইCost
ঢোকে: দাম + আনা + installation + testing + fee — ready পর্যন্ত নয়: VAT, training, repair, overhead
threshold-এর নিচে → খরচDepreciation
depreciable = cost − residual; SL = ÷ life; WDV = NBV × rate
convention: next-month, disposal-এর মাসে নয় — একটা, সব asset-এ
বদল (addition, estimate, impairment): (NBV − residual) ÷ বাকি মাস, সামনের দিকে
fully depreciated: থামে, থাকেRegister == GL
15x0 == Σ cost; 15x5 == Σ accumulated; 1590 == Σ open CWIP — class-ধরে, disposed বাদে
NBV GL-এ নেই — পার্থক্য; Balance Sheet-এ তিন লাইনDeveloper checklist
□ asset_classes: account mapping, default life/residual/method
□ fixed_assets register: cost, accumulated cache (rebuild-able), status, version
□ asset_events: প্রতিটি ঘটনা, entry link
□ depreciation_schedules: পুরো schedule capitalize-এ; planned/posted; (asset, period) UNIQUE; version
□ method strategy; convention config; rounding asset-ধরে cumulative
□ CWIP: 1590; ১৮০ দিনে সতর্কতা
□ addition: ক্ষমতা AND threshold; নইলে খরচ
□ estimate change: prospective; posted অক্ষত
□ dispose: cost + accum আলাদা line; gain/loss server-এ; disposal-এর মাসে depreciation নেই
□ partial → split; write-off দুই স্তর; fully depreciated থাকে
□ transfer: dimension; class বদলালেই entry
□ movement note class-ধরে; forecast
□ count: missing → write-off; unregistered → capitalize
□ 15x0/15x5/1590 control: হাতে JV block
□ রাতে: ১১৪ register == GL, ১১৫ cache, ১১৬ CWIP, ১১৭ অচেনা source, ১১৮ missed/over depreciation, ১১৯ disposed leftoversপরবর্তী অধ্যায়
অধ্যায় ৩১ — Hospital Accounting: এ পর্যন্ত চারটি অধ্যায় একই software company-র — মাল, ক্রয়, বেতন, asset। এবার একটা সম্পূর্ণ অন্য ব্যবসা, যেখানে একই engine-কে নতুন প্রশ্নের উত্তর দিতে হবে: রোগী ভর্তি হলেন, তিন দিনে বিশটা service (bed, doctor, test, ওষুধ, OT), কিছু advance-এ, কিছু insurance দেবে, কিছু ছাড়, শেষে একটা bill — অথচ প্রতিটি service-এর আয় কোন দিনের? Doctor-এর fee-র একটা অংশ doctor-এর (hospital-এর আয় নয় — pass-through), ওষুধ inventory (অধ্যায় ২৭), যন্ত্র asset (অধ্যায় ৩০), আর একটা নতুন liability: patient deposit। Accounting-এর একটাও নতুন নিয়ম নেই — কিন্তু প্রতিটি পুরনো নিয়ম একসাথে, একটা রোগীর চারপাশে।