Skip to Content
Go Realm v1 is released 🎉
Accountingবই (Print Edition)অধ্যায় ২২: Cash Flow Statement

অধ্যায় ২২ — Cash Flow Statement

Volume 1 · Part 3 — Financial Statements · Chapter 22

পূর্বশর্ত: অধ্যায় ১১ (cash account, contra transfer), অধ্যায় ১৬ (payment নিজে জানে না সে কিসের — allocation বলে), অধ্যায় ২০ ও ২১ (Income Statement, দুটো Balance Sheet, Δ column)


১. Learning Objective

এই অধ্যায় শেষে আপনি পারবেন:

Cash Flow Statement কী মাপে — "টাকা কোথা থেকে এল, কোথায় গেল" — আর কেন লাভ থাকতেও টাকা ফুরায়, বলতে তিন section — operating, investing, financing — প্রতিটি লেনদেন কোনটায়, সিদ্ধান্ত নিতে Indirect method: net profit + non-cash + Δ working capital = operating cash — দুটো Balance Sheet থেকে হাতে বানাতে Direct method: cash account-এর প্রতিটি লেনদেন থেকে — receipts, payments — একই সংখ্যায় পৌঁছাতে দুই পদ্ধতি এক হওয়ার শর্ত; না হলে কোথায় খুঁজবেন Δ A/P-র ভিতরে লুকানো capex payable — কেন allocation ছাড়া operating/investing ভাগ অসম্ভব Cash and cash equivalents-এর সংজ্ঞা; bank-to-bank transfer, PDC, overdraft — কোনটা flow, কোনটা নয় Account-এ cash_flow_category — data, code নয় — আর যেখানে account যথেষ্ট নয় (A/P, VAT) অলঙ্ঘনীয় assert: Σ তিন section == Δ cash accounts — layout-নিরপেক্ষ সত্য Non-cash লেনদেন (DN, advance সমন্বয়, accrual) — statement-এ নেই, note-এ আছে

সময়: পড়া ৫০ মিনিট + অনুশীলন ৬০ মিনিট।


২. Concept Explanation

তিন সংখ্যার গল্পের শেষ অধ্যায়

Part 2-র প্রতিটি অধ্যায়ের section ৬-এ তিনটি সংখ্যা ছিল — Income Statement একটা, Balance Sheet একটা, Cash Flow একটা — “আর তিনটিই ঠিক”। ডিসেম্বরে: লাভ 90,800, cash কমেছে 1,35,550। এই অধ্যায় ব্যাখ্যা করে দুটো সংখ্যার মাঝের প্রতিটি টাকা।

কেন আলাদা statement? কারণ Income Statement-এর প্রতিটি সংখ্যা একটা সিদ্ধান্ত — কোন মাসে revenue, কত depreciation, কত accrual। Cash-এ সিদ্ধান্ত নেই: ব্যাংকে ঢুকেছে বা বেরিয়েছে। পাঠক (ব্যাংক, বিনিয়োগকারী, মালিক) জানতে চান লাভটা সত্যি টাকায় ফিরছে কি না — নাকি unbilled আর A/R-এ জমছে। লাভজনক কোম্পানি cash-এর অভাবে বন্ধ হয় — এই statement সেটা আগে দেখায়।

তিন section — টাকা কী কাজে

OPERATING মূল ব্যবসা: গ্রাহক থেকে, supplier-কে, কর্মীকে, কর, সুদ Income Statement-এর জগৎ INVESTING দীর্ঘমেয়াদি asset: কেনা (−), বেচা (+) non-current asset-এর জগৎ FINANCING টাকার উৎস: পুঁজি, ঋণ নেওয়া (+), ঋণ শোধ, dividend (−) equity ও loan-এর জগৎ ───────────────────────────────────────────────────────────────── Σ তিন section = Δ cash and cash equivalents = closing cash − opening cash

শেষ লাইনটা এই statement-এর “layout-নিরপেক্ষ সত্য” (অধ্যায় ২০, ২১-এর ধারা)। Section-এ কোন লেনদেন কোথায় — নীতি ও তর্ক আছে; কিন্তু তিনটির যোগ ব্যাংকের ব্যালেন্সের পার্থক্য — এটা তর্কের বাইরে।

Cash and cash equivalents — কোন account

1110 Cash in Hand, 1115 Petty Cash, 1120 Bank — Prime, 1125 Bank — City ← cash (থাকলে) ৩ মাসের কম FDR, money market ← cash equivalent overdraft-এ থাকা bank account ← cash-এর ঋণাত্মক অংশ (IFRS), বা financing (US) — নীতি 1140 Advance to Supplier, 1130 A/R ← cash নয়

এই account-গুলোর ভিতরে নড়াচড়া flow নয়: Prime থেকে Cash-এ 10,000 তোলা (অধ্যায় ১১-এর contra) — একটা কমল, একটা বাড়ল, মোট একই। Direct method-এ এগুলো বাদ দিতে হয়; indirect-এ এমনিতেই নেই। PDC (অধ্যায় ১৬): cheque লেখার দিনে flow নয়, ব্যাংক থেকে যাওয়ার দিনে।

Indirect method — লাভ থেকে পিছিয়ে

শুরু net profit থেকে; তারপর যা লাভে আছে কিন্তু cash নয়, আর যা cash কিন্তু লাভে নয় — সব সমন্বয়:

Net profit 90,800 + যে খরচে টাকা যায়নি depreciation 8,000 (5290 — asset কমল, cash নয়) ± working capital-এর Δ asset বাড়ল → cash কমল unbilled +1,80,000 (1,80,000) কাজ হয়েছে, invoice-ও হয়নি asset কমল → cash বাড়ল A/R −46,400 46,400 liability বাড়ল → cash বাড়ল advance +1,00,000 1,00,000 টাকা এল, আয় নয় liability কমল → cash কমল deferred −1,30,000 (1,30,000) আগের টাকার কাজ হলো = Operating cash flow

নিয়ম একটাই, অধ্যায় ২-এর সমীকরণ থেকে: Δ cash = Δ liability + Δ equity − Δ non-cash asset। Equity-র Δ (drawings/পুঁজি বাদে) = net profit। বাকি সব Balance Sheet-এর Δ column — অধ্যায় ২১-এ ইতিমধ্যে ছিল।

Indirect method-এ কোনো নতুন data লাগে না — দুটো Balance Sheet, একটা Income Statement। এজন্যই পৃথিবীর বেশিরভাগ statement এটাই। দুর্বলতা: “গ্রাহক থেকে কত এল” দেখায় না — শুধু “A/R কত বদলাল”।

Direct method — ব্যাংক থেকে সামনে

Cash account-গুলোর প্রতিটি লেনদেন, তার counter-account দেখে শ্রেণিবদ্ধ:

RV-12-0004 Dr Bank / Cr A/R [করিম] 15,000 → গ্রাহক থেকে PV-11-0009 Dr A/P [টেক সাপ্লাই] / Cr Bank 1,26,000 → ? A/P — কিন্তু কিসের A/P? ← এখানেই কঠিন PV-12-00xx Dr 2120 Salary Payable / Cr Bank 3,50,000 → কর্মীকে PV-12-00xx Dr 2510 20,000, Dr 5510 5,000 / Cr Bank 25,000 → financing 20,000 + operating 5,000

পাঠকের জন্য অনেক বেশি অর্থপূর্ণ (“গ্রাহক থেকে 5,06,000 এসেছে”), কিন্তু প্রতিটি payment-এর কারণ জানতে হয়। দ্বিতীয় লাইনটা দেখুন: A/P-তে payment — সেটা laptop-এর bill (investing) না বিদ্যুতের bill (operating)? Payment নিজে জানে না; allocation (অধ্যায় ১৬) বলে কোন bill, bill বলে কোন account, account বলে কোন section। Allocation ছাড়া direct method সম্ভব নয় — অধ্যায় ১৬-এ ঠিক এই কথা বলা ছিল।

IFRS দুটোই মানে, direct-কে উৎসাহ দেয়; বাস্তবে indirect বেশি। এই বইয়ে দুটোই — কারণ দুটো এক হওয়াটাই সবচেয়ে বড় যাচাই।

Δ A/P-র ফাঁদ — capex payable

অধ্যায় ২১-এ A/P 1,26,000 → 22,000: Δ = −1,04,000। Indirect method-এ এটা operating-এ বসালে ভুল — কারণ 1,26,000-এর পুরোটা টেক সাপ্লাইয়ের laptop-এর bill (অধ্যায় ১৫, PDC অধ্যায় ১৬)। সেই টাকা ডিসেম্বরে গেল — laptop-এর জন্য — investing

ভুল: operating-এ Δ A/P −1,04,000; investing-এ laptop 0 → operating (1,23,550), investing +8,000 ঠিক: operating-এ Δ operating A/P +22,000; investing-এ −1,26,000 → operating 2,450, investing (1,18,000) দুটোতেই মোট −1,35,550 — assert মিলবে, section ভুল

এটা এই অধ্যায়ের কেন্দ্রীয় সূক্ষ্মতা: Δcash-এর assert section-এর ভুল ধরে না। Indirect method-এ Balance Sheet-এর একটা লাইন (A/P) দুটো section-এ ভাঙতে হয় — আর ভাঙার তথ্য GL-এ নেই, আছে bill-এর line-এ (কোন account-এ Dr হয়েছিল)। Section ৫-এ capex_payable হিসাব।

একই ফাঁদের আরও রূপ: VAT-এর ভিতরে asset-এর VAT; accrued expense-এর ভিতরে asset-এর accrual (ch ৩০); A/R-এর ভিতরে asset বিক্রির পাওনা।

Non-cash লেনদেন — statement-এ নেই

ডিসেম্বরে অনেক entry হয়েছে যাতে টাকা নড়েনি: credit note 34,500, debit note 9,200 (টাকা পরে এল), accrual 60,500, amortization 5,000, depreciation 8,000, recognition 3,00,000। কোনোটাই Cash Flow Statement-এ নেই। Indirect-এ তারা profit আর Δ-র ভিতরে কাটাকাটি হয়; direct-এ cash account ছোঁয়নি বলে আসেই না।

বড় non-cash লেনদেন (asset ঋণে কেনা, ঋণ পুঁজিতে রূপান্তর, advance-কে invoice-এ সমন্বয়) — note-এ লিখতে হয়: “investing ও financing activities not involving cash”। পাঠক নইলে ভাবেন asset কেনা হয়নি।

সুদ, কর, dividend — নীতির ঘর

interest paid operating (এই বইয়ে) বা financing IFRS: বেছে স্থির থাকুন; US GAAP: operating interest received operating (এই বইয়ে) বা investing dividend paid financing (এই বইয়ে) বা operating income tax paid operating, আলাদা লাইনে VAT operating-এর ভিতরে; গ্রাহক থেকে receipt VAT-সহ, সরকারকে payment আলাদা লাইনে

অধ্যায় ২০-এর 4540-এর মতোই: একটা নীতি, layout-এ, স্থির। মাস-ধরে বদলালে তুলনা ভাঙে।

যা এই অধ্যায়ে নেই

Foreign currency cash, translation difference অধ্যায় ৫৪ Consolidated cash flow, intercompany অধ্যায় ৬০, ৬১ Asset disposal-এর gain/loss সমন্বয় অধ্যায় ৩০ (এখানে উল্লেখ, উদাহরণ নেই) Cash forecast / budget অধ্যায় ৩৩

৩. Accounting Rule

অলঙ্ঘনীয়

Operating + Investing + Financing == Δ (cash and cash equivalents) == Σ Δ closing(cash accounts)

Indirect — operating

Operating CF = Net profit + non-cash expense (depreciation, amortization of intangibles, provision, bad debt write-off) − non-cash income (gain on disposal — investing-এ যায়) ± Δ operating working capital: − Δ operating asset (A/R, unbilled, prepaid, inventory, VAT net receivable, advance to supplier) + Δ operating liability (operating A/P, accrued, salary payable, TDS, customer advance, deferred, VAT net payable) (interest paid/received, tax paid — profit-এ আছে; আলাদা লাইনে দেখাতে চাইলে add back, তারপর paid বিয়োগ)

Investing

− capex পরিশোধ (asset bill-এর payment — allocation থেকে; capex payable-এর Δ এখানে, operating-এ নয়) + asset বিক্রি / ফেরতের টাকা

Financing

+ পুঁজি, ঋণ গ্রহণ; − ঋণের principal শোধ, drawings/dividend

Direct — শ্রেণিবিন্যাস

cash account-এর প্রতিটি posted line, counter-account / document-ধরে: A/R, customer advance, deferred (receipt) → গ্রাহক থেকে operating A/P → bill line-এর Dr account: expense → supplier-কে operating asset → capex investing salary payable → কর্মীকে operating VAT, TDS, income tax → কর operating (আলাদা লাইন) interest expense/income → সুদ operating (নীতি) loan principal, capital, drawings → financing অন্য cash account → contra বাদ unallocated payment (অধ্যায় ১৬) → operating, "unallocated" — সতর্কতা

Cash and cash equivalents

1110, 1115, 112x, ৩ মাসের কম FDR; overdraft: cash-এর ঋণাত্মক অংশ (এই বইয়ে) ভিতরের transfer flow নয়; PDC clearing-এর দিনে

নীতি — একবার বাছুন

interest paid → operating; interest received → operating; dividend paid → financing; tax → operating আলাদা লাইন

৪. Real Business Example

ডিসেম্বর ২০২৫ — কাঁচামাল

অধ্যায় ২১-এর দুটো Balance Sheet (৩০ নভে, ৩১ ডিসে) আর অধ্যায় ২০-এর ডিসেম্বরের Income Statement। Cash accounts:

৩০ নভে ৩১ ডিসে Δ 1110 Cash in Hand 38,050 42,500 +4,450 ← ব্যাংক থেকে তোলা; flow নয় 1115 Petty Cash 10,000 10,000 0 1120 Bank — Prime 15,07,665 13,67,665 −1,40,000 1125 Bank — City 4,00,000 4,00,000 0 ───────── ───────── ───────── 19,55,715 18,20,165 −1,35,550 ← এটাই মিলাতে হবে

পথ ১ — Indirect: Balance Sheet-এর Δ থেকে

অধ্যায় ২১-এর Δ column, প্রতিটিতে “asset বাড়লে cash কমে, liability বাড়লে cash বাড়ে”:

লাইন ৩০ নভে ৩১ ডিসে Δ cash-এ section কেন ────────────────────── ──────── ──────── ───────── ───────── ───────── ──────────────────── Net profit (ডিসে) 90,800 operating অধ্যায় ২০ Depreciation +8,000 +8,000 operating খরচ, cash নয় Unbilled revenue 0 1,80,000 +1,80,000 −1,80,000 operating asset বাড়ল A/R (GL 1130) 34,900 (11,500) −46,400 +46,400 operating asset কমল (CN + receipt + refund) Prepaid 55,000 50,000 −5,000 +5,000 operating asset কমল (amortization) VAT net receivable 4,200 2,700 −1,500 +1,500 operating asset কমল A/P — operating অংশ 0 22,000 +22,000 +22,000 operating ISP, DESCO — bill, payment নয় A/P — capex অংশ (টেক সাপ্লাই) 1,26,000 0 −1,26,000 −1,26,000 INVESTING laptop-এর PDC পাস Accrued expenses 20,000 60,500 +40,500 +40,500 operating খরচ, cash নয় Salary payable 3,50,000 3,50,000 0 0 operating নভেম্বরেরটা গেল, ডিসেম্বরেরটা এল TDS payable 8,250 6,500 −1,750 −1,750 operating নভেম্বরের 8,250 জমা, ডিসেম্বরের 6,500 কাটা Customer advance 0 1,00,000 +1,00,000 +1,00,000 operating সাগর — টাকা, আয় নয় Deferred revenue 2,10,000 80,000 −1,30,000 −1,30,000 operating নদী 1,20,000 + ABC 10,000 recognized Furniture (cost) 80,000 72,000 −8,000 +8,000 INVESTING DN, refund এল (VAT 1,200 VAT-এ) Bank loan 3,40,000 3,20,000 −20,000 −20,000 FINANCING principal Equity (পুঁজি/drawings) 0 0 financing কিছু নয়
CASH FLOW STATEMENT — indirect method সফটওয়্যার কোম্পানি লিমিটেড, ডিসেম্বর ২০২৫ টাকা OPERATING ACTIVITIES Net profit 90,800 Adjustments for non-cash items Depreciation 8,000 ────────── Operating profit before working capital changes 98,800 Changes in working capital (Increase) in unbilled revenue (1,80,000) Decrease in accounts receivable 46,400 Decrease in prepaid expenses 5,000 Decrease in VAT receivable (net) 1,500 Increase in accounts payable (operating) 22,000 Increase in accrued expenses 40,500 (Decrease) in tax deducted at source (1,750) Increase in customer advances 1,00,000 (Decrease) in deferred revenue (1,30,000) ────────── NET CASH FROM OPERATING ACTIVITIES 2,450 INVESTING ACTIVITIES Payment for computer equipment (bill of October, PDC due 05-12) (1,26,000) Refund on furniture returned 8,000 ────────── NET CASH USED IN INVESTING ACTIVITIES (1,18,000) FINANCING ACTIVITIES Repayment of bank loan (principal) (20,000) ────────── NET CASH USED IN FINANCING ACTIVITIES (20,000) ────────── NET DECREASE IN CASH AND CASH EQUIVALENTS (1,35,550) Cash and cash equivalents, 1 December 19,55,715 Cash and cash equivalents, 31 December 18,20,165 ══════════ Memo: interest paid 5,000 ও interest received 1,500 operating-এর ভিতরে (net profit-এ)। Non-cash: credit notes 34,500; debit note 9,200 (refund পরে); accruals 60,500; recognition 3,00,000।

যাচাই: 2,450 − 1,18,000 − 20,000 = −1,35,550 == 18,20,165 − 19,55,715 ✓।

পথ ২ — Direct: ব্যাংক ও cash-এর প্রতিটি লেনদেন

posted_lines WHERE account IN (1110, 1115, 1120, 1125), ডিসেম্বর, contra বাদ:

তারিখ Ref counter-account / document In Out section / লাইন ───── ────────── ────────────────────────────────────────── ───────── ───────── ────────────────────── 01–31 RV-12-… A/R — ডিসেম্বরের invoice (3,40,000 + VAT 51,000) 3,91,000 গ্রাহক থেকে 10-12 RV-12-0004 A/R [করিম] 15,000 গ্রাহক থেকে 08-12 RV-12-0003 2160 Customer Advance [সাগর] 1,00,000 গ্রাহক থেকে (advance) 05-12 PV-12-0002 A/R [রহিম] — refund 3,100 গ্রাহককে ফেরত 05-12 PV-11-0009 A/P [টেক সাপ্লাই] → PB-10-0003 → 1510 laptop 1,26,000 INVESTING capex 28-12 RV-12-0007 A/P [অফিস মার্ট] → DN-12-0003 → 1520 8,000 + 1160 1,200 9,200 INVESTING 8,000 + VAT 1,200 05-12 PV-12-… 2120 Salary Payable (নভেম্বরের বেতন) 3,50,000 কর্মীকে 01-12 PV-12-… 5220 Rent 65,000 − TDS 3,250 61,750 supplier-কে 03-12 PV-12-… 5120 Hosting 25,000 − TDS 3,250 21,750 supplier-কে xx-12 PV-12-… 5250, 5260 (নগদ) 10,700 supplier-কে 15-12 PV-12-… 2140 VAT Payable — নভেম্বরের return 45,000 কর 15-12 PV-12-… 2150 TDS — নভেম্বরের 8,250 জমা 8,250 কর 28-12 (bank) 2510 20,000 + 5510 5,000 — loan instalment 25,000 FINANCING 20,000 + সুদ 5,000 31-12 (bank) 4510 Interest Income 1,500 সুদ পাওয়া 31-12 (bank) 5280 Bank Charges 700 ব্যাংক চার্জ xx-12 CV-12-… 1110 ← 1120 4,450 — — contra — বাদ ───────── ───────── 5,16,700 6,52,250 নিট −1,35,550 ✓
CASH FLOW STATEMENT — direct method ডিসেম্বর ২০২৫ টাকা OPERATING ACTIVITIES Cash received from customers 3,91,000 + 15,000 4,06,000 Customer advances received 1,00,000 Refunds paid to customers (3,100) Cash paid to suppliers 61,750 + 21,750 + 10,700 (94,200) Cash paid to employees (3,50,000) VAT and withholding tax paid 45,000 + 8,250 (53,250) VAT refunded on returned furniture 1,200 Interest paid (5,000) Interest received 1,500 Bank charges (700) ────────── NET CASH FROM OPERATING ACTIVITIES 2,450 INVESTING ACTIVITIES Payment for computer equipment (1,26,000) Refund on furniture returned 8,000 ────────── (1,18,000) FINANCING ACTIVITIES Repayment of bank loan (20,000) ────────── NET DECREASE IN CASH AND CASH EQUIVALENTS (1,35,550) ══════════

Operating 2,450 — দুই পথে এক। Investing, financing — এক। এটা কাকতালীয় নয়; দুটো একই ledger-এর দুই দিক থেকে পড়া। কোনো একটা section না মিললে (মোট মিলেও) — capex payable-এর মতো কোনো ভাগ ভুল, section ৫-এর reconciliation বলবে কোথায়।

এই পাতাটা পড়া

লাভ 90,800, operating cash 2,450। পার্থক্য কোথায়? Unbilled 1,80,000 (নদী গ্রুপের কাজ, invoice জানুয়ারিতে, টাকা ফেব্রুয়ারিতে — অধ্যায় ১৭) আর deferred 1,30,000 (নভেম্বরে-আগে পাওয়া টাকার কাজ এ মাসে) — দুটোই revenue এ মাসে, cash অন্য মাসে। Advance 1,00,000 উল্টো দিকে — টাকা এ মাসে, revenue পরে। Service company-র operating cash মাসে-মাসে দোলে recognition-এর সাথে উল্টো তালে। YTD-তে মসৃণ হয়।

Investing (1,18,000) — অক্টোবরের laptop। Bill অক্টোবরে, PDC নভেম্বরে, ব্যাংক থেকে ডিসেম্বরে। Income Statement-এ কখনো নয় (asset); Balance Sheet-এ অক্টোবরে; Cash Flow-এ ডিসেম্বরে। একটা ঘটনা, তিন statement, তিন মাস। এটাই Part 2-র exit criterion — একটা journal entry কোন statement-এ, কবে।

Cash কমল 1,35,550, কিন্তু ব্যবসা ভালো। Unbilled 1,80,000 জানুয়ারিতে invoice হবে, ফেব্রুয়ারিতে 5,52,000 আসবে (অধ্যায় ১৭)। যে ব্যাংক এই statement পড়ে, সে note-এ unbilled আর contract position দেখে (অধ্যায় ২১-এর note ৩) — statement একা নয়, তিনটে একসাথে।

Direct method-এর “গ্রাহক থেকে 4,06,000” — revenue 6,20,000-এর সাথে মেলে? মেলে, সেতু দিয়ে: revenue 6,20,000 + VAT collected 46,500 − Δunbilled 1,80,000 − Δdeferred 1,30,000 + ΔA/R 46,400 + refund 3,100 (A/R দিয়ে গেছে) = 4,06,000 ✓। এই সেতুটাই section ৫-এর “দুই পদ্ধতির reconciliation” — লাইন-ধরে।


৫. Implementation — Software ও Database

একটা account, একটা category — data

accounts (+) cash_flow_category VARCHAR(30) -- cash | operating | investing | financing | non_cash | split
1110, 1115, 112x cash 1130, 1170, 1150, 1160, 2120, 2135, 2140, 2150, 2160, 2180, 2165 operating 1510, 1520, 1530 (cost) investing 1515, 1525, 1535 (accum. dep.) non_cash ← Δ = depreciation, add back 2510, 3100, 3400 financing 3200, 3300 non_cash ← equity-র Δ = profit; আলাদা লাইন 4xxx, 5xxx (Income Statement-এর; profit-এর ভিতরে) 2110 A/P, 1140 Advance to Supplier split ← bill line-এর account বলবে

Group-ধরে default (1500 group → investing), account-ধরে override — অধ্যায় ২০-এর mapping-এর একই রীতি। split-এর ব্যাখ্যা নিচে।

Indirect — দুটো closing, একটা movement

cashFlowIndirect(company, from, to): open = closing(company, from − 1 দিন) -- অধ্যায় ২১ close = closing(company, to) delta = {a: close[a] − open[a]} -- signed_dr profit = incomeStatement(company, from, to).net_profit -- অধ্যায় ২০ op = profit inv = 0; fin = 0; noncash_addback = 0 প্রতিটি permanent account a (cash বাদে): d = delta[a] c = a.cash_flow_category যদি c == 'operating': op −= d -- d হলো signed_dr-এর Δ: asset বাড়লে d>0 → cash কমে; -- liability বাড়লে d<0 → cash বাড়ে — একটাই সূত্র, দুই দিক যদি c == 'non_cash': যদি contra-asset (accum. dep.): noncash_addback += −d -- credit বাড়ল → depreciation যদি 3200/3300: (কিছু নয় — profit আগেই ধরা; closing entry-র মাস ব্যতিক্রম, নিচে) যদি c == 'investing': inv −= d -- asset বাড়ল → টাকা গেল … কিন্তু দেখুন নিচে যদি c == 'financing': fin −= d যদি c == 'split': splitPayable(a, from, to) → op, inv অংশ op += noncash_addback assert op + inv + fin == Σ delta[cash accounts] -- অলঙ্ঘনীয়

investing-এ একটা ফাঁদ: asset-এর Δ (−8,000 furniture) মানে টাকা এসেছে ধরা যায় শুধু যদি bill-এর টাকা এই মাসেই যায়। Laptop অক্টোবরে বেড়েছিল (Δ +2,40,000 অক্টোবরে), টাকা ডিসেম্বরে। এজন্যই split:

splitPayable — A/P-র ভিতরে কী

splitPayable(2110, from, to): -- A/P-র Δ-কে ভাগ: কোন bill-এর জন্য দেনা বাড়ল/কমল, সেই bill-এর line কোন account-এ open_by_cat = Σ open_amount(bill) GROUP BY category(bill) AS OF from − 1 close_by_cat = Σ open_amount(bill) GROUP BY category(bill) AS OF to category(bill) = bill-এর line-দের debit account-এর cash_flow_category (মিশ্র হলে line-ধরে ভাগ) প্রতিটি cat: d = close_by_cat[cat] − open_by_cat[cat] -- liability, Cr; বাড়লে cash বাঁচল operating → op += d investing → inv += d -- capex payable বাড়ল = asset বেড়েছে কিন্তু টাকা যায়নি যাচাই: Σ d == −delta[2110] (signed) — GL == Σ open bills (অধ্যায় ১৬-এর যাচাই)

আর investing-এ asset-এর Δ-র সাথে capex payable-এর Δ যোগ হলেই “আসল টাকা”:

ডিসেম্বর: Δ 1510 = 0, Δ capex payable = −1,26,000 → investing −1,26,000 (টাকা গেল, asset আগেই এসেছিল) অক্টোবর: Δ 1510 = +2,40,000, Δ capex payable = +2,76,000 (bill 4,14,000 − DN 1,38,000) … → investing ≈ 0 (bill এসেছে, টাকা নয়)

open_amount অধ্যায় ১৬-এর; category(bill) bill line থেকে — allocation আর bill line ছাড়া এই ভাগ অসম্ভব। VAT-এর ভিতরে asset-এর VAT (1160-এ 54,000 laptop-এর) — একই রীতিতে ভাগ করা যায়; ছোট system-এ পুরো VAT operating, note-এ উল্লেখ — নীতি।

Direct — cash account-এর line, শ্রেণিবদ্ধ

cashFlowDirect(company, from, to): lines = posted_lines WHERE account.cash_flow_category = 'cash' AND posting_date ∈ [from, to] প্রতিটি line l (entry e): counters = e.lines WHERE account.category ≠ 'cash' যদি counters == ∅: contra (cash → cash) → বাদ -- অধ্যায় ১১ নইলে l.amount-কে counters-এর অনুপাতে ভাগ, প্রতিটি counter c: bucket = classify(c, e) flows[bucket] += share classify(c, e): যদি c.account.category IN ('operating', 'financing'): account-এর category, লাইন = account-এর cash_flow_line যদি c.account.category == 'investing': investing যদি c.account.category == 'split' (A/P, 1140): alloc = allocations WHERE payment = e.source_id -- অধ্যায় ১৬ যদি alloc == ∅: 'operating / unallocated' + সতর্কতা নইলে প্রতিটি alloc → bill → line account → category, অনুপাতে যদি c.account.type IN (REVENUE, EXPENSE): -- সরাসরি cash sale / cash expense (অধ্যায় ১১) account-এর Income Statement লাইন → operating (5510 → interest paid, 4510 → interest received, 5280 → bank charges) asset কেনা নগদে (Dr 1510 / Cr Cash) → investing assert Σ flows == Σ delta[cash accounts]

cash_flow_line — account-এ একটা label (‘customers’, ‘suppliers’, ‘employees’, ‘taxes’, ‘interest’) যা direct statement-এর লাইন; statement_lines-এ mapping — অধ্যায় ২০-এর layout, তৃতীয়বার।

দুই পদ্ধতির reconciliation — লাইন-ধরে

মোট মেলা যথেষ্ট নয় (capex-এর ফাঁদ)। Section-ধরে:

reconcile(indirect, direct): assert indirect.operating == direct.operating assert indirect.investing == direct.investing assert indirect.financing == direct.financing না মিললে: operating ↑ investing ↓ সমান অঙ্কে → split ভুল: A/P-র কোনো bill-এর category operating একা ভুল → cash_flow_category ভুল কোনো account-এ (যেমন 2160 financing ধরা) কোনো section-ই মেলে না, মোট মেলে → contra বাদ পড়েনি / দুবার মোটও মেলে না → cash account-এর তালিকা দুই জায়গায় আলাদা

আর direct-এর “গ্রাহক থেকে” আর Income Statement-এর revenue-র সেতু — auditor-এর প্রিয় যাচাই:

receipts_from_customers == net revenue + VAT output (নিট) − Δunbilled − Δdeferred(উল্টো চিহ্নে) + ΔA/R + refunds (section ৪-এর সেতু; কোনো term-এর উৎস অধ্যায় ১৩, ১৪, ১৭, ১৯)

Closing entry-র মাস, opening balance-এর মাস

দুটো বিশেষ মাস যেখানে equity-র Δ ≠ profit:

জুন (FY শেষ): closing entry 3300 → 3200 (অধ্যায় ২৬) — 3300 কমে, 3200 বাড়ে, cash নয়; category non_cash, দুটো কাটাকাটি ✓ জুলাই (OB): opening balance entry (অধ্যায় ৯, ৬২) — সব account একসাথে; from − 1 দিনের closing-এ ইতিমধ্যে আছে ✓ পুঁজি/dividend: 3100, 3400-এর Δ → financing (category)

assert এগুলো ধরবে — সূত্র বদলাতে হয় না, category ঠিক থাকলে।

PDC ও overdraft

PDC: payments.status = 'pdc' (অধ্যায় ১৬) — ব্যাংক থেকে যাওয়ার দিনে posting; তার আগে cash flow-এ নেই, Balance Sheet note-এ। Overdraft: 1125 ঋণাত্মক হলে cash-এর ভিতরেই থাকে (এই বইয়ের নীতি), Δcash-এ যোগ — Balance Sheet-এ liability-তে দেখালেও (অধ্যায় ২১-এর reclass) Cash Flow-এর “cash” সংজ্ঞায় থাকে; দুটো statement-এর সংজ্ঞা আলাদা — note-এ বলুন।

রাতের যাচাই

৭০. প্রতিটি খোলা period: indirect.total == direct.total == Σ Δ cash accounts ৭১. indirect.section == direct.section (তিনটি) — না মিললে reconcile()-এর কারণ সহ সতর্কতা ৭২. cash_flow_category NULL — permanent account-এ → ০টি ৭৩. A/P-র open bills-এ কোনো bill যার line account-এর category NULL → ০টি ৭৪. unallocated payment (অধ্যায় ১৬) > ৩০ দিন → সতর্কতা (direct method-এ 'unallocated' লাইন শূন্য হওয়া উচিত) ৭৫. receipts_from_customers সেতু == direct.line('customers') (VAT-সহ)

Test হিসেবে

test "তিন section == Δ cash": cf = cashFlowIndirect(Dec) assert cf.operating + cf.investing + cf.financing == −1,35,550 assert −1,35,550 == closing(31-12)[cash] − closing(30-11)[cash] test "direct == indirect, section-ধরে": d = cashFlowDirect(Dec); i = cashFlowIndirect(Dec) assert (d.operating, d.investing, d.financing) == (i.operating, i.investing, i.financing) == (2,450, −1,18,000, −20,000) test "capex payable investing-এ, operating-এ নয়": bill(Oct, 1510 laptop, 4,14,000); pay(Dec, PDC 1,26,000) assert cashFlowIndirect(Dec).investing includes −1,26,000 assert cashFlowIndirect(Dec).line('Δ A/P (operating)') == +22,000 -- 1,26,000 নেই test "bank → cash transfer flow নয়": transfer(1120 → 1110, 4,450); g = cashFlowDirect(Dec) assert g.total অপরিবর্তিত; 'contra' কোনো লাইনে নেই test "advance operating, আয় নয় — কিন্তু cash": receive(সাগর, 1,00,000, is_advance) assert Δ cashFlow.operating == +1,00,000; Δ incomeStatement.revenue == 0 test "loan instalment দুই section-এ": instalment(25,000: 2510 20,000 + 5510 5,000) assert direct.financing == −20,000; direct.line('interest paid') == −5,000 test "unallocated payment সতর্কতা, তবু মোট মেলে": pay(supplier, 10,000, no allocation) assert direct.line('unallocated') == −10,000; warning raised; total মেলে test "credit note cash flow-এ নেই": g = snapshot(cashFlow); post(creditNote(inv, 23,000)) assert cashFlow == g test "closing entry-র মাসে assert মেলে": close(FY2026); cf = cashFlowIndirect(Jun 2026) assert cf.total == Δ cash; cf.line('closing entry') absent

৬. Financial Statement Impact

এই statement-ই সেই “তৃতীয় সংখ্যা”। এটা বাকি তিনটিকে কোথায় ছোঁয়:

INCOME STATEMENT ──▶ indirect-এর প্রথম লাইন (net profit); direct-এর receipts ↔ revenue সেতু BALANCE SHEET ×2 ──▶ প্রতিটি Δ; Δ cash == statement-এর শেষ লাইন SOCE ──▶ financing-এর পুঁজি / dividend লাইন (অধ্যায় ২৩)

আর একটা কথা — Part 2-র প্রতিটি অধ্যায়ের section ৬-এ যে “CASH FLOW” লাইনটা ছিল, তার প্রতিটি এখন একটা যান্ত্রিক ফল:

অধ্যায় ১৩ "invoice-এর দিনে cash flow-এ কিছুই নেই" → A/R Δ + revenue কাটাকাটি অধ্যায় ১৫ "laptop-এর টাকা investing, payment-এর মাসে" → split / capex payable অধ্যায় ১৬ "payment নিজে জানে না সে কিসের" → classify() → allocation অধ্যায় ১৭ "revenue − ΔA/R − Δunbilled + Δdeferred = cash" → receipts সেতু অধ্যায় ১৮ "license −60,000 পুরোটা, Income Statement-এ 5,000" → Δprepaid অধ্যায় ১৯ "advance: cash আগে, revenue পরে" → Δ2160

তিনটি statement একটা system — একটা ঠিক করলে বাকিরা মেলে, একটা ভুল করলে অন্য কোথাও ধরা পড়ে। এটাই double entry-র প্রতিদান, report-এর স্তরে।


৭. Common Developer Mistakes

ভুলকী ঘটেসঠিক পথ
Cash flow = Income Statement-এর লাইন থেকে (“cash basis P&L”)revenue-কে receipt ভাবা; unbilled, deferred অদৃশ্যcash account থেকে (direct) বা Δ থেকে (indirect)
Δ A/P পুরোটা operatingcapex payable operating-এ; investing ফাঁকাsplit, bill line-এর category
Asset-এর Δ = investing cashbill-এর মাসে টাকা গেছে ধরাΔ asset + Δ capex payable
Bank → cash transfer flow হিসেবেreceipts ও payments দুটোই ফোলে; মোট ঠিকcontra বাদ (counter-account cash)
Section hardcode (code range)নতুন account ভুল section-এ, চুপচাপcash_flow_category, group default, যাচাই ৭২
category NULL → operating ধরে নেওয়াloan/asset operating-এNULL ⇒ ব্যর্থ
Interest paid কখনো operating, কখনো financingমাস-ধরে তুলনা ভাঙেনীতি, layout-এ
PDC লেখার দিনে outflowব্যাংক এখনো কমেনি; Δcash মেলে নাclearing-এর দিনে
Depreciation add back ভুলে যাওয়াoperating কম; assert ব্যর্থcontra-asset non_cash → add back
শুধু মোট মেলানো, section নয়capex/operating অদলবদল ধরা পড়ে নাsection-ধরে reconcile(); যাচাই ৭১
Direct method-এ unallocated payment বাদমোট মেলে না’unallocated’ লাইন + সতর্কতা
Advance-কে financing (“গ্রাহক ঋণ দিল”)operating কম দেখায়operating — ব্যবসার টাকা
Non-cash লেনদেন statement-এ (asset ঋণে কেনা: investing −, financing +)দুটো মিথ্যা flow, মোট ঠিকবাদ; note-এ
Overdraft দুই statement-এ দুই সংজ্ঞা, note নেইBalance Sheet-এর cash ≠ Cash Flow-এর cashnote; বা এক নীতি
Opening cash গত মাসের is_stale snapshot থেকেশুরু-শেষ মেলে নাrebuild (অধ্যায় ৯)

দ্বিতীয় আর দশমটা মূল — একসাথে। Δcash মেলা এত সহজ (ব্যাংকের ব্যালেন্স তো জানা) যে developer-রা সেখানেই থামেন; আর section-এর ভুল বছরের পর বছর ছাপা হয়। Cash Flow Statement-এর মান section-এ, মোটে নয় — মোট তো Balance Sheet-এই ছিল।


৮. Exercises

সেট ক — হাতে বানানো

১। জানুয়ারি ২০২৬: অধ্যায় ২১-এর exercise ১-এর Balance Sheet (৩১ জানু) আর ৩১ ডিসে-র মধ্যে Δ; জানুয়ারির লাভ (অধ্যায় ২০-এর exercise ১)। Indirect cash flow। নদীর invoice 5,52,000 (unbilled → A/R) operating-এ কত? সাগরের advance সমন্বয় (2160 → 1130) — cash flow-এ কত? ২। ১ নম্বরের direct method — জানুয়ারির cash লেনদেন নিজে ধরে নিন (salary, rent, VAT return 46,500, TDS 6,500, loan, subcontractor-এর bill payment 46,000)। দুই পদ্ধতি section-ধরে মেলান। ৩। ডিসেম্বরে যদি laptop-এর PDC-র বদলে A/P-তে DESCO-র 12,800 পরিশোধ হতো — indirect-এর কোন লাইন, কত? Δ A/P (operating) কত? investing? ৪। অক্টোবর ২০২৫-এর investing section (অধ্যায় ১৫): laptop bill 4,14,000 (VAT 54,000), DN 1,38,000, টাকা যায়নি। Δ 1510, Δ capex payable, Δ VAT — investing কত? VAT-এর 54,000 কোথায়? ৫। YTD (জুলাই–ডিসেম্বর) cash flow: অধ্যায় ২১-এর ৩১ ডিসে আর ৩০ জুন ২০২৫-এর Balance Sheet লাগবে — ৩০ জুনেরটা নিজে ধরে নিন (3300 = 0, 3200 = 1,20,000)। Operating YTD কি ছয় মাসের যোগ? কেন?

সেট খ — কোন section

৬। প্রতিটির section ও লাইন: (ক) মালিক পুঁজি দিলেন 5,00,000 (খ) laptop নগদে 60,000 (গ) ঋণের সুদ 5,000 (ঘ) ব্যাংকের FDR ৬ মাসের 2,00,000 (ঙ) FDR ২ মাসের (চ) supplier-কে advance 40,000 (ছ) গ্রাহকের advance ফেরত (জ) income tax advance payment (ঝ) asset 1,20,000 বিক্রি, book value 1,00,000 — gain 20,000 কোথায় দুই পদ্ধতিতে? ৭। Salary payable Δ = 0 অথচ 3,50,000 গেছে আর 3,50,000 accrue হয়েছে। Indirect-এ কীভাবে "কর্মীকে 3,50,000" হারিয়ে গেল, তবু ঠিক? Direct-এ কোথায় আছে? ৮। Credit note 23,000 করিমকে (অধ্যায় ১৯) — cash flow-এ কিছু নেই। কিন্তু A/R কমল 23,000 → indirect-এ +23,000 operating? Revenue-ও কমল (4180) → profit −20,000, VAT −3,000। নিট? কেন শূন্য?

সেট গ — কোনটা ভুল

৯। operating = revenue − expense (cash-এ যা যা) — "সরল cash flow" ১০। investing = Δ 1510 + Δ 1520 — laptop-এর bill-এর মাসে −2,40,000 ১১। Δ 2110 পুরোটা operating-এ "increase in payables" ১২। Dr 1110 / Cr 1120 4,450 → receipts +4,450, payments −4,450 ১৩। PDC লেখার দিনে "payment to supplier" ১৪। interest paid: ডিসেম্বরে financing, জানুয়ারিতে operating (অন্য developer) ১৫। asset ঋণে কেনা 5,00,000: investing (5,00,000), financing +5,00,000

সেট ঘ — নকশা

১৬। splitPayable() open_amount দিয়ে; কিন্তু A/P-তে manual JV (allocation ছাড়া) থাকলে GL ≠ Σ open bills। কী করবেন — assert? বাকিটা operating? সতর্কতা? ১৭। VAT-এর ভিতরে asset-এর VAT (laptop 54,000) — split করবেন? না করলে investing কত কম দেখায়? আপনার নীতি ও note-এর ভাষা। ১৮। Direct method-এ একটা payment 50,000 তিনটি bill-এ allocate: rent 30,000 (operating), furniture 20,000 (investing)। classify() কী ফেরত দেবে? এক payment দুই section — UI-তে কীভাবে দেখাবেন? ১৯। Cash flow-এর জন্য নতুন table লাগে? না — কোন কোন table থেকে সব আসে, তালিকা করুন (Part 2-র)। শুধু একটা নতুন column কোথায়? ২০। ১২ মাসের rolling cash flow (প্রতি মাসে একটা column) — closing() ১৩ বার না movement() ১২ বার? কোনটা snapshot-বান্ধব? কোনটায় contra-র ঝুঁকি?

উত্তর আছে Workbook-এর Answer Key, অধ্যায় ২২-এ।


৯. Developer Challenge

FinancialStatementService-এ (অধ্যায় ২০, ২১) তৃতীয় statement যোগ করুন — দুই পদ্ধতিতে, আর দুটোকে section-ধরে মেলানো একটা নৈমিত্তিক যাচাই হিসেবে।

যা যা নকশা করবেন:

১. accounts.cash_flow_category + cash_flow_line — group default, account override; অধ্যায় ৫-এর COA-র seed; NULL ⇒ report ব্যর্থ। split-এর জন্য bill line-এর account থেকে category।

২. cashFlowIndirect(from, to)closing() দুবার + incomeStatement() একবার; নতুন query নেই; splitPayable() A/P ও 1140-এর জন্য, open_amount (অধ্যায় ১৬) থেকে; contra-asset add back; equity-র financing অংশ; closing entry ও OB-র মাস।

৩. cashFlowDirect(from, to) — cash account-এর line, counter-account অনুপাতে ভাগ, classify() allocation দিয়ে; contra বাদ; unallocated লাইন; layout statement_lines-এ (তৃতীয় statement, একই table)।

৪. reconcile() — section-ধরে; না মিললে কারণ-নির্ণয় (section ৫-এর তালিকা); receipts ↔ revenue সেতু লাইন-ধরে; সব statement_runs-এ।

৫. Non-cash note — মাসের যে entry-গুলো investing/financing account ছুঁয়েছে কিন্তু cash নয় (asset ঋণে, advance সমন্বয়, DN) — query থেকে; হাতে নয়।

৬. Rolling ১২ মাস ও YTD column — exercise ২০-এর সিদ্ধান্ত; snapshot থেকে; প্রতিটি column-এ assert।

৭. রাতের যাচাই ৭০–৭৫; test — section ৫-এর নয়টি, আর: (ক) overdraft মাস — Δcash-এ ঋণাত্মক অংশ; (খ) এক payment দুই section (exercise ১৮); (গ) ১,০০০ payment-এর মাসে direct এক query (allocation JOIN), N নয়।

২ আর ৪ নম্বরটাই আসল পরীক্ষা। Indirect method-এ যদি একটা নতুন SQL লিখতে হয়, অধ্যায় ২০–২১-এর engine ভুল। আর reconcile — দুই পদ্ধতি section-ধরে মিললে Part 2-র allocation, bill line, category — সব একসাথে প্রমাণিত; না মিললে কোন layer-এ ভুল, সেটা বলতে পারাই এই তিন অধ্যায়ের report engine-এর সংজ্ঞা।


১০. Summary Card

কী মাপে

Cash Flow = দুই তারিখের মাঝে cash and cash equivalents-এর Δ, তিন section-এ operating (ব্যবসা) + investing (দীর্ঘমেয়াদি asset) + financing (পুঁজি, ঋণ) == Δ cash — অলঙ্ঘনীয়

দুই পদ্ধতি

indirect: net profit + non-cash (dep) − Δ operating asset + Δ operating liability → operating দুটো closing() + একটা incomeStatement() — নতুন data নেই direct: cash account-এর প্রতিটি line, counter-account / allocation-ধরে → গ্রাহক, supplier, কর্মী, কর, সুদ allocation ছাড়া অসম্ভব (অধ্যায় ১৬) দুটো section-ধরে সমান হতে হবে — মোট মেলা যথেষ্ট নয়

ফাঁদ

Δ A/P-র ভিতরে capex payable → split, bill line-এর account; investing = Δ asset + Δ capex payable bank ↔ cash transfer, PDC লেখার দিন, credit/debit note, accrual, recognition → flow নয় non-cash investing/financing (asset ঋণে) → note

ডিসেম্বর ২০২৫

profit 90,800 → operating 2,450 (unbilled −1,80,000, deferred −1,30,000, advance +1,00,000 …) investing (1,18,000): laptop-এর PDC 1,26,000 (অক্টোবরের bill), furniture refund 8,000 financing (20,000); Δ cash −1,35,550 = 18,20,165 − 19,55,715 ✓ দুই পদ্ধতিতে

নীতি (একবার)

interest paid/received operating; dividend financing; tax operating আলাদা লাইন; overdraft cash-এর ভিতরে

Developer checklist

□ accounts.cash_flow_category (cash | operating | investing | financing | non_cash | split) — NULL ⇒ ব্যর্থ □ indirect: closing() ×2 + incomeStatement(); splitPayable() open_amount থেকে □ direct: cash line → counter → classify() → allocation → bill line account; contra বাদ; unallocated লাইন □ assert Σ section == Δ cash; reconcile() section-ধরে + কারণ □ receipts ↔ revenue সেতু □ non-cash note query থেকে □ নীতি layout-এ স্থির □ statement_runs তিন statement-এ □ রাতে: ৭০–৭৫

পরের অধ্যায়

তিনটি statement এক সুতোয় — Income Statement (ভিডিও), Balance Sheet (ছবি), Cash Flow (ব্যাংকের ভিডিও)। চতুর্থটা ছোট, কিন্তু সেটাই তিনটিকে equity-র ভিতর দিয়ে বাঁধে: অধ্যায় ২৩ — Statement of Changes in Equity। Opening equity + লাভ + নতুন পুঁজি − drawings/dividend = closing equity — অধ্যায় ২-এর সেই সূত্র, এবার একটা statement; আর 3100, 3200, 3300, 3400 — চারটি account যাতে হাতে post করা নিষেধ, কেন।