অধ্যায় ২২ — 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/dividendDirect — শ্রেণিবিন্যাস
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 পুরোটা operating | capex payable operating-এ; investing ফাঁকা | split, bill line-এর category |
| Asset-এর Δ = investing cash | bill-এর মাসে টাকা গেছে ধরা | Δ 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-এর cash | note; বা এক নীতি |
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 লাইন; layoutstatement_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 করা নিষেধ, কেন।