ক্যাপস্টোন — একটি সম্পূর্ণ প্রজেক্টের ইকোনমিক ইভালুয়েশন
এই পাঠে যা শিখবেন
- PW, FW, AW ও IRR-কে reusable Python ফাংশন হিসেবে কীভাবে সংগঠিত করা যায়
- স্ট্রেইট-লাইন ও MACRS ডেপ্রিসিয়েশন কীভাবে একসাথে একটি টুলকিটে পাশাপাশি রাখা যায় এবং প্রতিটির নিজস্ব স্ব-যাচাই থাকে
- আফটার-ট্যাক্স ক্যাশ ফ্লো গণনা করে বিফোর-ট্যাক্স ও আফটার-ট্যাক্স সিদ্ধান্তের মধ্যে পার্থক্য দেখা
- একটি সম্পূর্ণ প্রজেক্টে toolkit প্রয়োগ করে একটি সুনির্দিষ্ট, সংখ্যাভিত্তিক গো/নো-গো সুপারিশে পৌঁছানো
১ · প্রজেক্ট সিনারিও
একটি কোম্পানি একটি নতুন সরঞ্জাম কেনার কথা ভাবছে। নিচের অনুমানগুলো এই পুরো পাঠ জুড়ে ব্যবহৃত হবে —
$50,000
৫ বছর
$10,000 (স্ট্রেইট-লাইনে) / $0 (MACRS-এ)
$28,000/বছর
$9,000/বছর
২৫% / ১০%
এই পাঠে ৪টি কোড সেল ধাপে ধাপে একটি টুলকিট তৈরি করবে — প্রতিটি সেল নিজে সম্পূর্ণ (self-contained), যেন Pyodide স্যান্ডবক্সে আলাদাভাবে Run করলেও কাজ করে, কিন্তু ধারণাগতভাবে প্রতিটি সেল আগেরটির উপর ভিত্তি করে তৈরি — ঠিক যেভাবে বাস্তব জীবনে একটি ফাইন্যান্স টুলকিট মডিউল-বাই-মডিউল গড়ে ওঠে।
২ · মডিউল ১ — PW, FW, AW ও বিসেকশন দিয়ে IRR (বিফোর-ট্যাক্স)
প্রথম মডিউলে M4 (PW/FW/AW) ও M5 (IRR)-এর ফাংশনগুলো একত্র করা হলো, এবং প্রজেক্টের বিফোর-ট্যাক্স ক্যাশ ফ্লোতে প্রয়োগ করা হলো — বছর ০-এ $-50,000$, বছর ১-৪-এ $19,000$ (আয় − অপারেটিং খরচ), বছর ৫-এ $19,000 + 10,000 = 29,000$ (নিট আয় + সালভেজ)। IRR M5-এ প্রতিষ্ঠিত বিসেকশন পদ্ধতিতে সমাধান করা হলো — একটি সংকীর্ণ সুদের-হার পরিসর ব্র্যাকেট করে NPV-র চিহ্ন পরিবর্তনের ভিত্তিতে বার বার পরিসর অর্ধেক করা হয়।
# মডিউল ১ -- PW / FW / AW ও বিসেকশন দিয়ে IRR (বিফোর-ট্যাক্স)
def pa_factor(i, n):
return ((1 + i) ** n - 1) / (i * (1 + i) ** n)
def ap_factor(i, n):
return (i * (1 + i) ** n) / ((1 + i) ** n - 1)
def pf_factor(i, n):
return 1 / (1 + i) ** n
def fp_factor(i, n):
return (1 + i) ** n
def npv(cashflows, i):
return sum(cf / (1 + i) ** t for t, cf in enumerate(cashflows))
def find_irr(cashflows, lo=-0.5, hi=1.0, tol=1e-6, max_iter=200):
f_lo, f_hi = npv(cashflows, lo), npv(cashflows, hi)
assert f_lo * f_hi < 0, "ব্র্যাকেটে চিহ্ন পরিবর্তন নেই -- পরিসর বদলান"
mid = lo
for _ in range(max_iter):
mid = (lo + hi) / 2
f_mid = npv(cashflows, mid)
if abs(f_mid) < tol:
return mid, f_mid
if f_lo * f_mid < 0:
hi, f_hi = mid, f_mid
else:
lo, f_lo = mid, f_mid
return mid, npv(cashflows, mid)
MARR = 0.10
B, S, N = 50000, 10000, 5
revenue, opcost = 28000, 9000
net_annual = revenue - opcost # বিফোর-ট্যাক্স নিট বার্ষিক ক্যাশ ফ্লো (ডেপ্রিসিয়েশন বাদে)
btcf = [-B] + [net_annual] * (N - 1) + [net_annual + S]
print("বিফোর-ট্যাক্স ক্যাশ ফ্লো:", btcf)
PW_bt = npv(btcf, MARR)
AW_bt = PW_bt * ap_factor(MARR, N)
FW_bt = PW_bt * fp_factor(MARR, N)
FW_bt_manual = sum(cf * (1 + MARR) ** (N - t) for t, cf in enumerate(btcf)) # ক্রস-চেক
irr_bt, npv_at_irr_bt = find_irr(btcf)
print(f"\nPW (বিফোর-ট্যাক্স, {MARR*100:.0f}%) = ${PW_bt:,.2f}")
print(f"AW (বিফোর-ট্যাক্স, {MARR*100:.0f}%) = ${AW_bt:,.2f}")
print(f"FW (PW থেকে (1+i)^n দিয়ে) = ${FW_bt:,.2f}")
print(f"FW (সরাসরি প্রতিটি CF ভবিষ্যতে নিয়ে যোগ) = ${FW_bt_manual:,.2f}")
assert abs(FW_bt - FW_bt_manual) < 1e-6, "দুই FW পদ্ধতি মিলতে হবে"
print("ক্রস-চেক পাস: দুই FW পদ্ধতিই একই ফলাফল দেয়।")
print(f"\nবিসেকশনে IRR = {irr_bt*100:.4f}% (কনভার্জেন্স চেক: NPV এই হারে = {npv_at_irr_bt:.8f}, প্রায় ০)")
print(f"IRR ({irr_bt*100:.2f}%) বনাম MARR ({MARR*100:.0f}%): {'IRR > MARR' if irr_bt > MARR else 'IRR <= MARR'}")
৩ · মডিউল ২ — ডেপ্রিসিয়েশন: স্ট্রেইট-লাইন ও MACRS
পরের মডিউলে M7-এর দুটো ডেপ্রিসিয়েশন পদ্ধতি ফাংশন হিসেবে বাস্তবায়িত হলো — স্ট্রেইট-লাইন (সালভেজ $10,000 ধরে, প্রতি বছর সমান ডেপ্রিসিয়েশন) এবং MACRS ৫-বছর (আমেরিকান IRS-এর পাবলিশড পার্সেন্টেজ টেবিল ব্যবহার করে, সালভেজ বিয়োগ ছাড়াই সম্পূর্ণ $50,000 শূন্যে নামিয়ে আনা হয়)। উভয় পদ্ধতিই নিজে থেকে রানটাইমে যাচাই করে যে যোগফল সঠিক।
# মডিউল ২ -- ডেপ্রিসিয়েশন: স্ট্রেইট-লাইন ও MACRS (৫-বছর)
def straight_line_depreciation(B, S, N):
D = (B - S) / N
schedule = [D] * N
bv = [B] + [B - (t + 1) * D for t in range(N)]
assert abs(sum(schedule) - (B - S)) < 1e-9, "যোগফল B-S-এর সমান হওয়া উচিত"
assert abs(bv[-1] - S) < 1e-9, "শেষ বুক ভ্যালু সালভেজের সমান হওয়া উচিত"
return schedule, bv
def macrs_depreciation(B, percents):
assert abs(sum(percents) - 1.0) < 1e-6, "MACRS পার্সেন্টেজের যোগফল ১০০% হতে হবে"
schedule = [B * p for p in percents]
assert abs(sum(schedule) - B) < 1e-6, "MACRS-এ মোট ডেপ্রিসিয়েশন পুরো বেসিসের সমান (সালভেজ ছাড়াই)"
return schedule
B, S, N = 50000, 10000, 5
sl_schedule, sl_bv = straight_line_depreciation(B, S, N)
print("স্ট্রেইট-লাইন ডেপ্রিসিয়েশন (বছর -> D, BV):")
for yr in range(1, N + 1):
print(f" বছর {yr}: D = ${sl_schedule[yr-1]:,.2f} BV = ${sl_bv[yr]:,.2f}")
print(f" চেক: sum(D) = ${sum(sl_schedule):,.2f} == B-S = ${B-S:,.2f} -> {abs(sum(sl_schedule)-(B-S)) < 1e-9}")
print(f" চেক: শেষ BV = ${sl_bv[-1]:,.2f} == সালভেজ = ${S:,.2f} -> {abs(sl_bv[-1]-S) < 1e-9}")
macrs_5yr = [0.2000, 0.3200, 0.1920, 0.1152, 0.1152, 0.0576] # IRS পাবলিশড ৫-বছর MACRS পার্সেন্টেজ
macrs_schedule = macrs_depreciation(B, macrs_5yr)
print("\nMACRS ৫-বছর ডেপ্রিসিয়েশন (সালভেজ ছাড়াই, বেসিস B = $50,000):")
for yr in range(1, len(macrs_schedule) + 1):
print(f" বছর {yr}: {macrs_5yr[yr-1]*100:.2f}% -> D = ${macrs_schedule[yr-1]:,.2f}")
print(f" চেক: পার্সেন্টেজের যোগফল = {sum(macrs_5yr)*100:.2f}%")
print(f" চেক: sum(D) = ${sum(macrs_schedule):,.2f} == B = ${B:,.2f} -> {abs(sum(macrs_schedule)-B) < 1e-6}")
assert করা হয়েছে), এবং
শেষ বুক ভ্যালু ঠিক $10,000 = সালভেজ ✓। MACRS-এ প্রথম বছরেই সবচেয়ে বেশি ($10,000, ২০%) ডেপ্রিসিয়েট হয় এবং
মোট ছয় "বছরে" (হাফ-ইয়ার কনভেনশনের কারণে ৫-বছর সম্পত্তির জন্যও ৬টি এন্ট্রি) পুরো $50,000 শূন্যে নেমে আসে —
স্ট্রেইট-লাইনের চেয়ে দ্রুত ডেপ্রিসিয়েশন মানে প্রথম দিকে বেশি ট্যাক্স-শিল্ড, যা টাইম ভ্যালু অফ মানির কারণে
বেশি সুবিধাজনক (M8-এ বিস্তারিত)।
৪ · মডিউল ৩ — আফটার-ট্যাক্স ক্যাশ ফ্লো ও আফটার-ট্যাক্স PW/AW/IRR
তৃতীয় মডিউলে M8-এর আফটার-ট্যাক্স ক্যাশ ফ্লো ফর্মুলা প্রয়োগ করা হলো — এখানে সরলতার জন্য স্ট্রেইট-লাইন ডেপ্রিসিয়েশন ব্যবহার করা হয়েছে (MACRS ব্যবহার করলে ট্যাক্স-শিল্ড আরও আগে পাওয়া যেত, ফলে আফটার-ট্যাক্স PW আরও বেশি হতো — এটি একটি ভালো অনুশীলনী প্রশ্ন, নিচে দেখুন)। যেহেতু স্ট্রেইট-লাইনে শেষ বছরের বুক ভ্যালু ঠিক সালভেজের সমান, disposal-এ কোনো গেইন/লস ট্যাক্স নেই।
# মডিউল ৩ -- আফটার-ট্যাক্স ক্যাশ ফ্লো ও আফটার-ট্যাক্স PW / AW / IRR
def pa_factor(i, n):
return ((1 + i) ** n - 1) / (i * (1 + i) ** n)
def ap_factor(i, n):
return (i * (1 + i) ** n) / ((1 + i) ** n - 1)
def npv(cashflows, i):
return sum(cf / (1 + i) ** t for t, cf in enumerate(cashflows))
def find_irr(cashflows, lo=-0.5, hi=1.0, tol=1e-6, max_iter=200):
f_lo, f_hi = npv(cashflows, lo), npv(cashflows, hi)
assert f_lo * f_hi < 0
mid = lo
for _ in range(max_iter):
mid = (lo + hi) / 2
f_mid = npv(cashflows, mid)
if abs(f_mid) < tol:
return mid, f_mid
if f_lo * f_mid < 0:
hi, f_hi = mid, f_mid
else:
lo, f_lo = mid, f_mid
return mid, npv(cashflows, mid)
def after_tax_cash_flow(btcf, depreciation, tax_rate):
"""ATCF = BTCF - tax_rate*(BTCF - D), সাথে ডেপ্রিসিয়েশন ট্যাক্স-শিল্ড আইডেন্টিটি যাচাই"""
taxable = btcf - depreciation
tax = tax_rate * taxable
atcf = btcf - tax
atcf_identity = btcf * (1 - tax_rate) + tax_rate * depreciation
assert abs(atcf - atcf_identity) < 1e-9, "দুই ফর্ম একই ATCF দিতে হবে"
return atcf, taxable, tax
MARR, tax_rate = 0.10, 0.25
B, S, N = 50000, 10000, 5
revenue, opcost = 28000, 9000
net_annual = revenue - opcost
D = (B - S) / N # স্ট্রেইট-লাইন (মডিউল ২ থেকে পুনর্ব্যবহৃত সূত্র)
print("বছর | BTCF | D | করযোগ্য আয় | ট্যাক্স | ATCF")
print("-" * 60)
atcf_list = [-B]
for yr in range(1, N + 1):
btcf_yr = net_annual + (S if yr == N else 0)
atcf_yr, taxable, tax = after_tax_cash_flow(net_annual, D, tax_rate)
if yr == N:
atcf_yr += S # সালভেজ ট্যাক্স-মুক্ত (BV == S, কোনো গেইন/লস নেই)
print(f" {yr} | ${btcf_yr:>8,.2f} | ${D:>6,.2f} | ${taxable:>10,.2f} | ${tax:>8,.2f} | ${atcf_yr:>9,.2f}")
atcf_list.append(atcf_yr)
PW_at = npv(atcf_list, MARR)
AW_at = PW_at * ap_factor(MARR, N)
irr_at, npv_at_irr_at = find_irr(atcf_list)
print(f"\nPW (আফটার-ট্যাক্স, {MARR*100:.0f}%) = ${PW_at:,.2f}")
print(f"AW (আফটার-ট্যাক্স, {MARR*100:.0f}%) = ${AW_at:,.2f}")
print(f"বিসেকশনে আফটার-ট্যাক্স IRR = {irr_at*100:.4f}% (কনভার্জেন্স চেক: NPV = {npv_at_irr_at:.8f}, প্রায় ০)")
print(f"আফটার-ট্যাক্স IRR ({irr_at*100:.2f}%) বনাম MARR ({MARR*100:.0f}%): {'IRR > MARR' if irr_at > MARR else 'IRR <= MARR'}")
ATCF = BTCF(1-t) + t·D)
কোডেই assert দিয়ে যাচাই হয়েছে — দুই সূত্র ঠিক একই সংখ্যা দেয়। আফটার-ট্যাক্স PW ≈
$17,809.50, AW ≈ $4,698.10, IRR ≈ 22.20% — বিফোর-ট্যাক্স
IRR (28.98%)-এর চেয়ে অনেক কম, যা প্রত্যাশিত (ট্যাক্স রিটার্ন কমায়), কিন্তু তারপরও MARR (১০%)-এর অনেক বেশি।
৫ · মডিউল ৪ — ব্রেকইভেন কোয়ান্টিটি ও চূড়ান্ত গো/নো-গো সুপারিশ
শেষ মডিউলে M11-এর ব্রেকইভেন-কোয়ান্টিটি ফাংশন যোগ করা হলো — সরঞ্জামটির আউটপুট প্রতি ইউনিট $40-এ বিক্রি হয়, ইউনিট-প্রতি ভ্যারিয়েবল খরচ $15, আর বার্ষিক ফিক্সড অপারেটিং খরচ ঠিক আগের মতোই $9,000। এরপর টুলকিটের সব ফলাফল একত্র করে একটি চূড়ান্ত সারসংক্ষেপ ও সুপারিশ প্রিন্ট করা হলো।
# মডিউল ৪ -- ব্রেকইভেন কোয়ান্টিটি ও চূড়ান্ত সারসংক্ষেপ
def breakeven_quantity(FC, SP, VC):
return FC / (SP - VC)
def profit(Q, FC, SP, VC):
return Q * (SP - VC) - FC
FC, SP, VC = 9000, 40, 15
Q_BE = breakeven_quantity(FC, SP, VC)
planned_units = 28000 / SP # $28,000 বার্ষিক আয় অর্জনে প্রয়োজনীয় ইউনিট সংখ্যা
profit_at_planned = profit(planned_units, FC, SP, VC)
print(f"ব্রেকইভেন কোয়ান্টিটি Q_BE = {FC:,.0f} / ({SP} - {VC}) = {Q_BE:,.1f} ইউনিট/বছর")
print(f"পরিকল্পিত উৎপাদন = {planned_units:,.0f} ইউনিট/বছর (breakeven-এর {'উপরে' if planned_units > Q_BE else 'নিচে'})")
print(f"এই পরিমাণে অপারেটিং প্রফিট = ${profit_at_planned:,.2f}")
# --- চূড়ান্ত সারসংক্ষেপ (মডিউল ১ ও ৩-এর ফলাফল পুনরায় গণনা করে একত্র করা হলো) ---
def pa_factor(i, n):
return ((1 + i) ** n - 1) / (i * (1 + i) ** n)
def ap_factor(i, n):
return (i * (1 + i) ** n) / ((1 + i) ** n - 1)
def npv(cashflows, i):
return sum(cf / (1 + i) ** t for t, cf in enumerate(cashflows))
def find_irr(cashflows, lo=-0.5, hi=1.0, tol=1e-6, max_iter=200):
f_lo, f_hi = npv(cashflows, lo), npv(cashflows, hi)
mid = lo
for _ in range(max_iter):
mid = (lo + hi) / 2
f_mid = npv(cashflows, mid)
if abs(f_mid) < tol:
return mid
if f_lo * f_mid < 0:
hi, f_hi = mid, f_mid
else:
lo, f_lo = mid, f_mid
return mid
MARR, tax_rate = 0.10, 0.25
B, S, N = 50000, 10000, 5
revenue, opcost = 28000, 9000
net_annual = revenue - opcost
D = (B - S) / N
btcf = [-B] + [net_annual] * (N - 1) + [net_annual + S]
atcf = [-B] + [net_annual - tax_rate * (net_annual - D)] * (N - 1) + [net_annual - tax_rate * (net_annual - D) + S]
PW_bt, PW_at = npv(btcf, MARR), npv(atcf, MARR)
AW_bt, AW_at = PW_bt * ap_factor(MARR, N), PW_at * ap_factor(MARR, N)
IRR_bt, IRR_at = find_irr(btcf), find_irr(atcf)
print("\n" + "=" * 46)
print(" চূড়ান্ত সারসংক্ষেপ -- $50,000 প্রজেক্ট")
print("=" * 46)
print(f"{'':14}{'বিফোর-ট্যাক্স':>16}{'আফটার-ট্যাক্স':>16}")
print(f"{'PW':14}{f'${PW_bt:,.2f}':>16}{f'${PW_at:,.2f}':>16}")
print(f"{'AW':14}{f'${AW_bt:,.2f}':>16}{f'${AW_at:,.2f}':>16}")
print(f"{'IRR':14}{f'{IRR_bt*100:.2f}%':>16}{f'{IRR_at*100:.2f}%':>16}")
print(f"\nMARR = {MARR*100:.0f}%")
go = PW_at > 0 and IRR_at > MARR
print(f"\nচূড়ান্ত সুপারিশ: {'GO -- প্রজেক্ট গ্রহণ করা উচিত' if go else 'NO-GO -- প্রজেক্ট বাতিল করা উচিত'}")
print(f"কারণ: আফটার-ট্যাক্স PW {'> 0' if PW_at > 0 else '<= 0'} এবং আফটার-ট্যাক্স IRR ({IRR_at*100:.2f}%) "
f"{'MARR-এর বেশি' if IRR_at > MARR else 'MARR-এর কম বা সমান'}।")
এই একটি ছোট্ট ৪-মডিউল টুলকিট আসলে পুরো কোর্সের সারমর্ম — PW/FW/AW ও IRR (M4-M5), ডেপ্রিসিয়েশন (M7), আফটার-ট্যাক্স বিশ্লেষণ (M8), এবং ব্রেকইভেন (M11) — একসাথে একটি বাস্তব সিদ্ধান্তে রূপান্তরিত হলো। প্রতিটি সংখ্যা কোডে সত্যিকারভাবে গণনা করা হয়েছে, কোথাও হার্ডকোড করা হয়নি, এবং প্রতিটি গুরুত্বপূর্ণ ফলাফল অন্তত একটি বিকল্প পদ্ধতিতে ক্রস-চেক করা হয়েছে — এটিই এই কোর্স জুড়ে শেখা সবচেয়ে গুরুত্বপূর্ণ অভ্যাস: সংখ্যাকে বিশ্বাস করার আগে যাচাই করা।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ মডিউল ৩-এ যদি স্ট্রেইট-লাইনের বদলে MACRS ডেপ্রিসিয়েশন ব্যবহার করা হতো, আফটার-ট্যাক্স PW বাড়ত না কমত, এবং কেন?
বাড়ত। MACRS প্রথম বছরগুলোতে অনেক বেশি ডেপ্রিসিয়েশন দেয় (বছর ১-এ ২০% = $10,000, স্ট্রেইট-লাইনের $8,000-এর চেয়ে বেশি), ফলে প্রথম বছরগুলোতে ট্যাক্স-শিল্ড বেশি পাওয়া যায়। টাইম ভ্যালু অফ মানির কারণে আগে পাওয়া ট্যাক্স-সাশ্রয় পরে পাওয়া একই পরিমাণ সাশ্রয়ের চেয়ে বেশি মূল্যবান (কম ডিসকাউন্ট হয়), তাই মোট ডেপ্রিসিয়েশন একই ($50,000 বনাম স্ট্রেইট-লাইনের $40,000 — আসলে MACRS-এ বেশিও) হলেও PW বাড়বে। এটিই কেন বাস্তব কোম্পানিগুলো যখন সম্ভব তখন দ্রুততর ডেপ্রিসিয়েশন পদ্ধতি বেছে নেয়।
প্র ০২
বিসেকশন IRR-এ কেন লো ও হাই বাউন্ডের (-50% থেকে 100%) NPV-র চিহ্ন বিপরীত হওয়া প্রয়োজন (কোডে assert দিয়ে যাচাই করা হয়েছে)?
বিসেকশন পদ্ধতি কাজ করে "ইন্টারমিডিয়েট ভ্যালু থিওরেম"-এর উপর ভিত্তি করে — যদি একটি continuous ফাংশনের
(এখানে NPV(i)) দুই প্রান্তে ভিন্ন চিহ্ন থাকে, তাহলে মাঝে অন্তত একটি মূল (root) অবশ্যই আছে। যদি দুই প্রান্তেই
একই চিহ্ন হয়, তার মানে হয় বাছাই করা পরিসরে কোনো IRR নেই, অথবা একাধিক IRR আছে (M5-এর "মাল্টিপল রেট অফ
রিটার্ন" সমস্যা) — উভয় ক্ষেত্রেই সাধারণ বিসেকশন নির্ভরযোগ্য উত্তর দিতে পারবে না, তাই কোডে প্রথমেই এই
অনুমান assert দিয়ে যাচাই করে নেওয়া হয়েছে।
প্র ০৩ যদি ট্যাক্স রেট ২৫%-এর বদলে ০% হতো, আফটার-ট্যাক্স PW ও বিফোর-ট্যাক্স PW-এর সম্পর্ক কী হতো?
ট্যাক্স রেট ০ হলে ATCF = BTCF*(1-0) + 0*D = BTCF — অর্থাৎ প্রতিটি ATCF হুবহু BTCF-এর সমান
হয়ে যেত, তাই আফটার-ট্যাক্স PW ঠিক বিফোর-ট্যাক্স PW-এর সমান ($28,234.16) হতো। এটি দেখায় ট্যাক্স রেট
বাড়ার সাথে সাথে PW কীভাবে ধীরে ধীরে কমে (এই প্রজেক্টে ২৫%-এ PW $17,809.50-এ নেমে এসেছে) — ট্যাক্স রেট
০ ও কার্যকর ট্যাক্স রেটের মধ্যবর্তী যেকোনো মান দিয়ে পরীক্ষা করলে এই ধারাবাহিক সম্পর্ক স্পষ্ট হয়।
অনুশীলন
-
চিন্তা করুন: এই প্রজেক্টের আফটার-ট্যাক্স IRR (22.20%) এবং বিফোর-ট্যাক্স IRR (28.98%)-এর
পার্থক্য কি ঠিক ট্যাক্স রেট (25%) সমানুপাতিক? গণনা না করে যুক্তি দিন কেন হবে বা হবে না।
না, ঠিক সমানুপাতিক নয় — কারণ IRR একটি অ-রৈখিক (nonlinear) ফাংশন ক্যাশ ফ্লোর, আর ট্যাক্স শুধু অপারেটিং অংশে প্রভাব ফেলে, প্রাথমিক বিনিয়োগ ($-50,000$, বছর ০) অপরিবর্তিত থাকে। যদি ট্যাক্স রেট সব ক্যাশ ফ্লোতে (বিনিয়োগসহ) সমানভাবে প্রযোজ্য হতো, সম্পর্কটি সরল হতো, কিন্তু যেহেতু ডেপ্রিসিয়েশন ট্যাক্স-শিল্ড একটি অতিরিক্ত (non-proportional) সমন্বয় যোগ করে, IRR-এর হ্রাস ট্যাক্স রেটের সাথে রৈখিক সম্পর্কে থাকে না।
-
পরীক্ষা করুন: মডিউল ৪-এর কোড সেলে
MARR = 0.10-কেMARR = 0.25-এ বদলে Run চেপে দেখুন চূড়ান্ত সুপারিশ (GO/NO-GO) এখনও একই থাকে কি না।যেহেতু আফটার-ট্যাক্স IRR ≈ ২২.২০%, এবং MARR = ২৫% এখন IRR-এর চেয়ে বেশি, আফটার-ট্যাক্স PW ঋণাত্মক হয়ে যাবে এবং সুপারিশ NO-GO-তে বদলে যাবে — যদিও বিফোর-ট্যাক্স IRR (২৮.৯৮%) তখনও ২৫%-এর বেশি থাকবে, তাই বিফোর-ট্যাক্স ভিত্তিতে এখনও GO দেখাবে। এই বৈপরীত্যটাই দেখায় কেন শুধু বিফোর-ট্যাক্স সংখ্যা দেখে সিদ্ধান্ত নেওয়া বিপজ্জনক হতে পারে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ · সম্পন্ন অভিনন্দন — Engineering Economics কোর্সের সবগুলো পাঠ (M1-M13) এখন সম্পূর্ণ। টাইম ভ্যালু অফ মানি থেকে শুরু করে এই ক্যাপস্টোন পর্যন্ত পুরো টুলকিট এখন আপনার হাতে।
- Discrete Mathematics কোর্স সহোদর কোর্স সিকোয়েন্স ও সিরিজ অধ্যায় — এই কোর্সের প্রতিটি অ্যানুইটি ও গ্রেডিয়েন্ট ফ্যাক্টরের গাণিতিক ভিত্তি সেখানেই তৈরি হয়েছিল, L01 থেকে যেমন বলা হয়েছিল।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation ও Engineering Economics — সব এক জায়গায়।