Skip to Content
Go Realm v1 is released 🎉
Accountingবই (Print Edition)অধ্যায় ৩০: Fixed Asset Accounting

অধ্যায় ৩০ — 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 1510

Inventory-র সাথে মিল: 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 overhead

Server ২,৪০,০০০ + 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,000

Register থেকে 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

ঘটনাDebitCredit
GRN / bill, ready নয়CWIP (1590), VAT ReceivableGRNI / A/P
Installation, আনার খরচCWIPA/P / Bank
Capitalize (ready for use)Fixed Asset (15x0)CWIP
GRN / bill, সাথে সাথে readyFixed Asset, VAT ReceivableGRNI / A/P
Depreciation (মাসিক)Depreciation Expense (5290)Accum. Depreciation (15x5)
Addition (improvement)Fixed AssetA/P
RepairExpense (5xxx)A/P
Transfer (একই class)— (dimension)
Transfer (class বদল)Fixed Asset [new], Accum. Dep. [old]Fixed Asset [old], Accum. Dep. [new]
ImpairmentImpairment Loss (5525)Accum. Impairment (1516)
Disposal, proceeds > NBVBank / A/R, Accum. Dep.Fixed Asset, Gain (4520), VAT Payable
Disposal, proceeds < NBVBank / A/R, Accum. Dep., Loss (5520)Fixed Asset, VAT Payable
Write-off (proceeds 0)Accum. Dep., Loss (5520)Fixed Asset
Insurance claimInsurance 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 → আগে split

Register == 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 0

Register-এ ৪ দশমিক, 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,000

5270-এ নয় — 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.33

Cost ১,২০,০০০ আর 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,200

Register — ৩১ অক্টোবর ২০২৬

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_id

Register-এর 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.id

Cumulative 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 NBV1515-এ অনাথ 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 expenseasset বা লাভ ভুলক্ষমতা+threshold → addition; নইলে খরচ
Schedule নেই — প্রতি মাসে cost ÷ lifeaddition/estimate change-এ ভুল; forecast নেইপুরো schedule capitalize-এ; version
Rounding class-ধরেএক asset-এর পয়সা অন্যটায়; register ≠ GLasset-ধরে 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-এ হাতে JVregister ≠ GLcontrol; যাচাই ১১৭

ষষ্ঠ আর সপ্তম সবচেয়ে ব্যয়বহুল, আর দুটোই নীরব। ষষ্ঠটা 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-এর একটাও নতুন নিয়ম নেই — কিন্তু প্রতিটি পুরনো নিয়ম একসাথে, একটা রোগীর চারপাশে।