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

অধ্যায় ৩১ — Hospital Accounting

Volume 2 · Part 4 — Application-specific Accounting · Chapter 31

পূর্বশর্ত: অধ্যায় ১৩ (Sales ও Revenue), অধ্যায় ১৪ (Accounts Receivable), অধ্যায় ১৭ (Revenue Recognition — unbilled), অধ্যায় ১৯ (Advance), অধ্যায় ২৭ (Inventory), অধ্যায় ২৯ (Payroll — aggregated entry, subledger)


১. Learning Objective

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

একটা রোগীর যাত্রা — ভর্তি → service → bill → payment → claim — কোন ধাপে কোন entry, বলতে Charge capture — প্রতিটি service একটা accounting event, bill নয় — কেন, আর তার ফল মাস শেষে In-patient-এর খোলা account (unbilled charges) — asset, কিন্তু A/R নয় — অধ্যায় ১৭-এর 1170 এখানে Patient deposit — liability, revenue নয় — নেওয়া, সমন্বয়, ফেরত — তিনটি entry Visiting doctor-এর fee — hospital principal না agent — কোন অংশ আয়, কোন অংশ দেনা Pharmacy — বিক্রি + COGS (অধ্যায় ২৭), ফেরত, consumables — একই engine Package (OT, delivery) বনাম itemized — একটা দাম, অনেক service — allocation Payer split — রোগী, insurer, corporate — একটা bill, তিনটি A/R Insurance claim — submitted, approved, disallowed — contractual adjustment কোথায় যায় Discount, charity, bad debt — তিনটি আলাদা জিনিস, তিনটি আলাদা account Counter cash, shift, refund — অধ্যায় ১১-এর cash book একাধিক দরজায় Encounter / charge / bill / claim — schema, posting rule, আর 1132, 2161, 2185-এর reconciliation

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


২. Concept Explanation

নতুন ব্যবসা, পুরনো নিয়ম

এ পর্যন্ত চারটি অধ্যায় একই software company-র। এবার সিটি কেয়ার হাসপাতাল — আলাদা company, আলাদা বই, আলাদা COA। কিন্তু engine একই: journal, ledger, subledger, period, report — Volume 1-এর কিছুই বদলায় না। বদলায় প্রশ্নগুলো:

software company hospital ──────────────── ──────── invoice = আয়ের দিন service-এর দিন = আয়ের দিন; bill অনেক পরে গ্রাহক একজন, দেয় একজন রোগী একজন, দেয় তিনজন (রোগী, insurer, corporate) advance কম deposit প্রায় সবসময়, refund-ও supplier-কে bill, কর্মীকে বেতন visiting doctor — supplier-ও নয়, কর্মীও নয় inventory নেই (ছিল না) pharmacy + consumables, রোগী-ধরে issue একটা দাম payer-ধরে দাম (insurer-এর contract rate)

Part 4-এর ছাঁচ একই — Business Flow → Financial Event → Entry → Subledger → GL → Statement → Schema → API। শুধু business flow-টা একটা রোগীর চারপাশে।

রোগীর যাত্রা — কোন ধাপে entry

Business Flow Financial Event? Entry ───────────── ──────────────── ───── registration না — admission + deposit deposit এল — দেনা (ফেরত দিতে হতে পারে) Dr 1110 / Cr 2161 Patient Deposit প্রতিটি service (bed, test, আয় হলো — এখনই, bill-এর আগে Dr 1132 In-patient Charges / Cr 42xx Revenue doctor, OT, ওষুধ) (doctor-এর অংশ: দেনা) … / Cr 2185 Doctor Fee Payable (ওষুধ: stock গেল) Dr 5140 COGS / Cr 1145 Pharmacy Inventory discharge → final bill দেনার মালিক ঠিক হলো — কে কত দেবে Dr 1130 A/R [রোগী], Dr 1133 A/R [insurer] / Cr 1132 discount (অনুমোদিত) আয় কমল Dr 4280 Discount / Cr 1130 deposit adjust + refund দেনা কাটাকাটি; বাড়তি ফেরত Dr 2161 / Cr 1130; Dr 2161 / Cr 1110 claim → insurer payment A/R শোধ; disallowed → contractual adj. Dr 1120, Dr 4285 / Cr 1133 doctor payout (মাসিক) দেনা শোধ, TDS Dr 2185 / Cr 2150, Cr 1120

অধ্যায় ১৩-এর দুটো প্রশ্ন — আয় হলো? টাকা এল? — এখানে তিনটে: আয় হলো? টাকা এল? কে দেবে? তৃতীয়টা bill-এর দিন ঠিক হয়, আর সেটাই hospital-এর নিজস্ব জটিলতা।

Charge capture — service-ই event, bill নয়

রোগী ০৩-১১ ভর্তি, ০৬-১১ discharge, bill ০৬-১১। Bed-এর আয় কোন দিনের? প্রতিটি দিনের — ০৩, ০৪, ০৫। মাস শেষে (৩০-১১) একজন রোগী ভর্তি থাকলে তার সাত দিনের bed, দুটো OT, বিশটা test — সব নভেম্বরের আয়, bill ডিসেম্বরে হলেও (অধ্যায় ১৭)।

দুটো নকশা:

ক. bill-এ revenue charges শুধু তালিকা; discharge-এ Dr A/R / Cr Revenue মাস শেষে: খোলা encounter-এর সব charge হাতে accrual (Dr 1170 / Cr 42xx), পরের মাসে reversal → বড় hospital-এ ৩০০ খোলা রোগী, প্রতি মাসে ৩০০টা accrual, প্রতিটি bill-এ match খ. charge-এ revenue প্রতিটি charge post হওয়া মাত্র Dr 1132 / Cr 42xx discharge-এ bill শুধু 1132 → A/R (payer-ধরে) সরায়; মাস শেষে কিছুই করার নেই

— কারণ accrual-এর কাজটা system-ই করে, প্রতিটি charge-এ, আন্দাজ ছাড়া। অধ্যায় ২৮-এ GRN যেমন মালের accrual স্বয়ংক্রিয় করেছিল, charge এখানে আয়ের accrual। 1132 In-patient Charges (Unbilled) — অধ্যায় ১৭-এর 1170-এর hospital-সংস্করণ: asset, রোগীর কাছে পাওনা, কিন্তু invoice নেই, due date নেই, কে দেবে ঠিক নেই।

Developer-এর দৃষ্টিতে: charges table-এর প্রতিটি সারি একটা journal entry-র উৎস (source_type = charge)। Bill = SELECT SUM(amount) FROM charges WHERE encounter = ? — bill কিছু তৈরি করে না, শুধু সরায়। Charge ভুল হলে edit নয় — reverse + নতুন charge (অধ্যায় ৪৩)। এটাই এ অধ্যায়ের কেন্দ্র।

Deposit — দেনা, আয় নয়

ভর্তির সময় ৫০,০০০ deposit। এটা আয়? না — রোগী তিন দিন পরে চলে গেলে ৩০,০০০ ফেরত দিতে হবে। অধ্যায় ১৯-এর customer advance: 2161 Patient Deposit, রোগী-ধরে subledger। তিনটি entry:

নেওয়া Dr 1110 Cash / Cr 2161 [রোগী] 50,000 সমন্বয় Dr 2161 [রোগী] / Cr 1130 [রোগী] 30,700 ← bill-এর রোগীর অংশ ফেরত Dr 2161 [রোগী] / Cr 1110 19,300 ← বাকি; অনুমোদন, রোগীর সই

Deposit-এর টাকা bank-এ আছে, কিন্তু আপনার নয় — Balance Sheet-এ liability। বড় hospital-এ 2161-এ কোটি টাকা; সেটা “নগদ আছে” নয়, “রোগীদের টাকা রাখা আছে”।

Visiting doctor — principal না agent

Dr. রহমান visiting consultant; রোগী visit fee ২,০০০ দেন; hospital রাখে ২০%, doctor পান ৮০%। Hospital-এর আয় কত — ২,০০০ না ৪০০?

PRINCIPAL (hospital service দিচ্ছে, doctor তার supplier) Cr 4220 Revenue 2,000; Dr 5310 Doctor Fee 1,600 / Cr 2185 → revenue ফোলে, gross margin-এ doctor cost AGENT (doctor service দিচ্ছেন, hospital টাকা তুলে দিচ্ছে) Cr 4220 Revenue 400; Cr 2185 Doctor Fee Payable 1,600 → revenue শুধু নিজের অংশ; 1,600 কখনো আয় ছিল না

IFRS 15-এর প্রশ্ন: service-এর নিয়ন্ত্রণ কার? Visiting doctor নিজের রোগী, নিজের fee, নিজের সময় — hospital ঘর আর counter দিচ্ছে → agent। Employed doctor (বেতনে) → hospital principal, পুরো fee আয়, doctor-এর বেতন অধ্যায় ২৯-এ। Software-এ doctors.engagement = visiting | employed, আর charge-এর posting rule সেটা দেখে ভাগ করে। দুটো model-এ Income Statement-এর revenue ৫ গুণ আলাদা হতে পারে — একই hospital।

2185 doctor-ধরে subledger; মাস শেষে payout run — অধ্যায় ২৯-এর payroll-এর মতো aggregated entry, TDS কেটে (অধ্যায় ৫৬), doctor-এর statement (কোন রোগী, কোন দিন, কত)।

Pharmacy — অধ্যায় ২৭, রোগী-ধরে

ওষুধ inventory। রোগীকে issue = বিক্রি + COGS, একসাথে, একই transaction (অধ্যায় ২৭-এর postSalesInvoice-এর মতো):

Dr 1132 In-patient Charges 3,200 / Cr 4250 Pharmacy Sales 3,200 ← বিক্রয়মূল্য Dr 5140 COGS — Pharmacy 2,400 / Cr 1145 Pharmacy Inventory 2,400 ← cost (FIFO / avg)

Discharge-এ অব্যবহৃত ওষুধ ফেরত → charge reverse + stock return_in (মূল cost-এ)। Consumables (gloves, syringe) — কিছু charge হয় (রোগীর bill-এ), কিছু হয় না (department-এর খরচ: Dr 5xxx / Cr 1148) — item master-এ chargeable flag।

Package — একটা দাম, অনেক service

Appendectomy package ৪৫,০০০: OT, anesthesia, ২ দিন bed, standard ওষুধ। Itemized হলে ৫২,০০০ হতো। রোগী দেন ৪৫,০০০। আয়ের account কোনটা — 4240 OT? bed-এর অংশ 4210-এ যাবে না?

সরল পুরোটা 4240 Package Revenue; ভিতরের item-গুলো charge হয় "package-এর অংশ", দাম 0 (report-এ দেখা যায়, bill-এ নয়) সঠিক package-এর দাম component-ধরে ভাগ (standalone price-এর অনুপাতে — IFRS 15 allocation): OT 30,000 → 4240; bed 2 দিন 10,000 → 4210; ওষুধ 5,000 → 4250 (52,000-এর অনুপাতে 45,000)

দ্বিতীয়টা department-ধরে আয় ঠিক রাখে (OT-র আয় কত, bed-এর কত — অধ্যায় ৩৪-এর cost center report)। Package-এর বাইরের item (extra দিন, extra test) আলাদা charge, পুরো দামে। Package-এর ভিতরের item আবার charge হয়ে যাওয়া (double billing) — সবচেয়ে সাধারণ hospital billing bug।

Payer split — একটা bill, তিন A/R

Final bill ৯২,২০০। Insurer pre-authorization: surgery ৬০,০০০ পর্যন্ত। বাকি রোগীর। Corporate রোগী হলে employer দেয়। একটা bill, একাধিক payer, প্রত্যেকে আলাদা A/R:

1130 A/R — Patients রোগী-ধরে; deposit-এ কাটে, বাকি নগদে; aging ছোট 1133 A/R — Insurers insurer-ধরে, claim-ধরে; aging ৩০–৯০ দিন; disallowance হয় 1134 A/R — Corporate company-ধরে; মাসিক statement

Bill-এর line-গুলো payer-এ ভাগ হয় নিয়মে (pre-auth-এর scope: কোন service, কত পর্যন্ত), বাকি রোগী। Insurer-এর দাম আলাদা হতে পারে (contract rate) → price_lists payer-ধরে।

Claim — disallowed কোথায় যায়

Insurer-কে ৬০,০০০-এর claim। তারা দিল ৫৪,০০০ — surgeon fee তাদের rate-এর বেশি। ৬,০০০ কোথায়?

contract বলে রোগীকে চাওয়া যাবে না → 4285 Contractual Adjustment (contra revenue): আয় আসলে ৫৪,০০০-ই ছিল contract বলে রোগীর দায় → Dr 1130 [রোগী] / Cr 1133 [insurer] 6,000 — রোগীকে re-bill claim-এ কাগজের ভুল, resubmit → 1133-এ থাকে, claim status = resubmitted

তিনটি আলাদা ঘটনা, তিনটি আলাদা entry। “insurer কম দিল, বাদ দাও” বলে 5530 Bad Debt-এ ফেলা — ভুল: bad debt মানে পাওনা ছিল, পাওয়া গেল না; contractual adjustment মানে পাওনাই ছিল না, আমরা বেশি লিখেছিলাম।

Discount, charity, bad debt

discount (অনুমোদিত, bill-এ) 4280 Patient Discount (contra revenue) আয় কম — সিদ্ধান্ত বিক্রির সময় charity / welfare fund 4280-এই, dimension charity; বা fund থাকলে Dr 2195 Welfare Fund দাতব্য — নীতি bad debt (রোগী চলে গেছেন) 5530 Bad Debt Expense (অধ্যায় ৫৯) আয় ছিল, টাকা এল না — খরচ

তিনটি এক account-এ মিশলে “কত ছাড় দিই” আর “কত হারাই” আলাদা করা যায় না — management-এর দুটো আলাদা প্রশ্ন।

Counter cash — অনেক দরজা

OPD counter, IPD counter, pharmacy counter, emergency — ২৪ ঘণ্টা, তিন shift। অধ্যায় ১১-এর cash book প্রতিটি counter-এ (1110 counter dimension), shift শেষে গোনা, reconcile, bank-এ জমা। Refund counter থেকে — অনুমোদনে, রোগীর সই। Hospital-এ নগদ চুরির সবচেয়ে সহজ পথ: charge post না করে টাকা নেওয়া (রসিদ হাতে লেখা) — তাই receipt ছাড়া charge settle হয় না, আর counter-এর receipt নম্বর gapless (অধ্যায় ১৩)।

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

Clinical data (EMR), doctor-এর order, nursing HIS — accounting-এর বাইরে; এখানে শুধু charge Department-ধরে cost ও profitability (Lab লাভজনক?) অধ্যায় ৩৪ Equipment (MRI ৫ কোটি) depreciation অধ্যায় ৩০ — একই Bad debt provision-এর হিসাব অধ্যায় ৫৯ Government / NGO grant accounting এ বইয়ে নেই VAT — চিকিৎসা সেবা সাধারণত exempt; pharmacy দেশভেদে অধ্যায় ৫৫; উদাহরণে VAT নেই

৩. Accounting Rule

Entry

ঘটনাDebitCredit
DepositCash / BankPatient Deposit (2161) [রোগী]
Charge — hospital service (bed, test, OT)In-patient Charges (1132) [encounter]Revenue (42xx, department)
Charge — visiting doctor (agent)In-patient ChargesRevenue (hospital share), Doctor Fee Payable (2185) [doctor]
Charge — employed doctor (principal)In-patient ChargesRevenue (পুরো)
Charge — pharmacyIn-patient Charges; COGSPharmacy Sales; Pharmacy Inventory
Charge reversal(উল্টো)(উল্টো)
OPD (নগদে, সাথে সাথে)CashRevenue (, Doctor Fee Payable)
Final billA/R — Patient (1130), A/R — Insurer (1133), A/R — Corporate (1134), Discount (4280)In-patient Charges (1132)
Deposit adjustPatient DepositA/R — Patient
RefundPatient DepositCash
Claim paid, disallowed (contract)Bank, Contractual Adjustment (4285)A/R — Insurer
Disallowed → রোগীর দায়A/R — PatientA/R — Insurer
Doctor payoutDoctor Fee PayableTDS Payable, Bank
Bad debtBad Debt Expense (5530)A/R — Patient

Recognition

আয় = service-এর দিন, charge post-এ; bill শুধু 1132 → A/R মাস শেষে খোলা encounter: কিছু করার নেই — 1132 balance == unbilled revenue package: component-ধরে allocation (standalone price-এর অনুপাতে); ভিতরের item আবার charge নয়

Principal / Agent

visiting → agent: revenue = hospital share; doctor-এর অংশ 2185 (কখনো আয় নয়) employed → principal: revenue পুরো; doctor payroll-এ doctors.engagement ঠিক করে; charge-এ copy

Payer

bill line → payer: pre-auth scope / corporate contract / নইলে রোগী payer-ধরে A/R (1130 / 1133 / 1134), payer-ধরে price list claim disallowed: contract → 4285; রোগীর দায় → 1130; resubmit → থাকে

Control accounts

1132 == Σ charges (active) of open/unbilled encounters 2161 == Σ deposits − adjusted − refunded, রোগী-ধরে 2185 == Σ doctor share (charges) − payouts, doctor-ধরে 1133 == Σ claims (submitted − paid − adjusted), claim-ধরে

অলঙ্ঘনীয়

Charge edit নয় — reverse + নতুন। Deposit আয় নয়। Doctor-এর অংশ আয় নয়। Receipt ছাড়া settle নয়।

৪. Real Business Example

নভেম্বর ২০২৬ — সিটি কেয়ার হাসপাতাল, একজন রোগী

নতুন company, নতুন বই। COA-র যে অংশ এখানে লাগবে:

1110 Cash — Counters ASSET post dimension: counter (OPD / IPD / Pharmacy) 1120 Bank ASSET post 1130 A/R — Patients ASSET post ← control, রোগী-ধরে 1132 In-patient Charges (Unbilled) ASSET post ← control, encounter-ধরে 1133 A/R — Insurers ASSET post ← control, claim-ধরে 1134 A/R — Corporate ASSET post ← control 1145 Inventory — Pharmacy ASSET post ← অধ্যায় ২৭ 1148 Inventory — Consumables ASSET post 2150 TDS Payable LIAB. post 2161 Patient Deposit LIAB. post ← control, রোগী-ধরে 2185 Doctor Fee Payable LIAB. post ← control, doctor-ধরে 4210 Bed & Nursing REVENUE post dept IPD 4220 Consultation & Procedure Fee REVENUE post dept OPD / IPD 4230 Investigation (Lab, Radiology) REVENUE post dept LAB / RAD 4240 OT & Package REVENUE post dept OT 4250 Pharmacy Sales REVENUE post dept PHARM 4280 Patient Discount REVENUE post ← contra 4285 Contractual Adjustment — Insurer REVENUE post ← contra 5140 COGS — Pharmacy EXPENSE post 5530 Bad Debt Expense EXPENSE post

Dr. রহমান (surgeon) visiting — hospital ২০%। Dr. নাসরিন (OPD) employed। Insurer গ্রিন লাইফ — রোগীর policy surgery package + surgeon fee ৬০,০০০ পর্যন্ত, pre-auth নেওয়া।

০৩-১১ সকাল — করিম উদ্দিন ভর্তি (appendicitis), deposit ৫০,০০০ নগদ, IPD counter

encounter E-2611-0042 (IPD, cabin, admit 03-11 09:30) RC-IPD-08811 Dr 1110 Cash [IPD counter] 50,000 Cr 2161 Patient Deposit [করিম] 50,000 2161 subledger: করিম 50,000

Revenue শূন্য — এখনো কিছু হয়নি।

০৩-১১ — দিনের charge-গুলো (প্রতিটি আলাদা entry, source = charge)

C-1 bed (cabin), 1 দিন Dr 1132 [E-0042] 5,000 / Cr 4210 5,000 C-2 Dr. রহমান visit (visiting, 20%) Dr 1132 2,000 / Cr 4220 400, Cr 2185 [রহমান] 1,600 C-3 lab: CBC, CRP, USG Dr 1132 4,500 / Cr 4230 4,500 C-4 OT: appendectomy package Dr 1132 45,000 / Cr 4240 30,000 (OT), Cr 4210 10,000 (bed ২ দিন), Cr 4250 5,000 (std ওষুধ) ← allocation: standalone 52,000-এর অনুপাতে; package-এর bed দিন ০৪, ০৫ আলাদা charge নয় C-5 surgeon fee, Dr. রহমান Dr 1132 15,000 / Cr 4220 3,000, Cr 2185 [রহমান] 12,000 C-6 pharmacy (package-এর বাইরে) Dr 1132 3,200 / Cr 4250 3,200 Dr 5140 2,400 / Cr 1145 2,400 ← FIFO cost

দিন শেষে 1132 [E-0042] = ৭৪,৭০০; আয় (hospital-এর) = ৫,০০০ + ৪০০ + ৪,৫০০ + ৪৫,০০০ + ৩,০০০ + ৩,২০০ = ৬১,১০০; doctor-এর ১৩,৬০০ আয় নয়। Bill এখনো নেই, রোগী এখনো ভর্তি — কিন্তু নভেম্বরের Income Statement-এ ৬১,১০০ ইতিমধ্যে আছে।

০৪-১১, ০৫-১১ — পরের দুই দিন

C-7, C-10 Dr. রহমান round visit ×2 Dr 1132 2,000 ×2 / Cr 4220 400 ×2, Cr 2185 1,600 ×2 C-8 lab: CBC repeat Dr 1132 1,500 / Cr 4230 1,500 C-9, C-11 pharmacy 1,800 + 600 Dr 1132 2,400 / Cr 4250 2,400; Dr 5140 1,800 / Cr 1145 1,800 (bed ০৪, ০৫ — package-এ; C-4-এর allocation-এ 4210-তে গেছে; আলাদা charge নেই)

০৫-১১ রাত — অব্যবহৃত ওষুধ ফেরত, ৪০০ (cost ৩০০)

C-11-R reversal of part of C-11 Dr 4250 400 / Cr 1132 400 stock return_in (মূল cost) Dr 1145 300 / Cr 5140 300

Charge edit নয় — reversal সারি, মূলটা অক্ষত।

০৬-১১ সকাল ১০টা — discharge; final bill

1132 [E-0042] = 74,700 + 4,000 + 1,500 + 2,400 − 400 = 82,200 ← Σ active charges bill B-2611-0187 payer ───────────────────────────────────────── ───── bed & nursing (cabin ৩ দিন, ২ দিন package-এ) 5,000 রোগী consultation ×3 6,000 রোগী investigation 6,000 রোগী OT package (appendectomy) 45,000 insurer (pre-auth) surgeon fee 15,000 insurer (pre-auth) pharmacy (net of return) 5,200 রোগী ───────────────────────────────────────── gross 82,200 discount (bed 10%, admin approved) (500) রোগী ───────────────────────────────────────── রোগী 21,700 insurer 60,000 JV-11-0412 source = bill B-0187 Dr 1130 A/R — Patients [করিম] 21,700 Dr 1133 A/R — Insurers [গ্রিন লাইফ, claim CL-0093] 60,000 Dr 4280 Patient Discount 500 Cr 1132 In-patient Charges [E-0042] 82,200 1132 [E-0042] = 0 ✓; encounter status = billed

Bill-এ নতুন আয় নেই — শুধু 1132 থেকে A/R-এ, payer-ধরে। ছাড়টা contra revenue, খরচ নয়।

০৬-১১ — deposit সমন্বয়, বাকি ফেরত

JV-11-0413 Dr 2161 [করিম] 21,700 / Cr 1130 [করিম] 21,700 → 1130 [করিম] 0 RF-IPD-00214 Dr 2161 [করিম] 28,300 / Cr 1110 [IPD counter] 28,300 → 2161 [করিম] 0 (অনুমোদন: billing supervisor; রোগীর সই)

রোগী ৫০,০০০ দিয়েছিলেন, bill ২১,৭০০, ফেরত ২৮,৩০০। Cash book-এ refund আলাদা লাইন — receipt-এর ঋণাত্মক নয়।

০৭-১১ — OPD: একজন walk-in, Dr. নাসরিন (employed) ১,৫০০ + lab ২,০০০, নগদ

encounter E-2611-0058 (OPD); RC-OPD-23107 Dr 1110 Cash [OPD counter] 3,500 Cr 4220 Consultation 1,500 ← employed: পুরোটা আয় Cr 4230 Investigation 2,000

1132 নেই, 2185 নেই — OPD-তে service আর payment এক মুহূর্তে।

২০-১১ — claim CL-0093 গ্রিন লাইফকে পাঠানো (৬০,০০০); ১৫-১২ — ৫৪,০০০ এল, surgeon fee ৬,০০০ disallowed (তাদের rate ৯,০০০)

১৫-১২ contract: disallowed surgeon fee রোগীকে চাওয়া যাবে না JV-12-0071 Dr 1120 Bank 54,000 Dr 4285 Contractual Adjustment — Insurer 6,000 Cr 1133 A/R — Insurers [গ্রিন লাইফ, CL-0093] 60,000 claim status = settled; 1133 [CL-0093] = 0

ডিসেম্বরের আয় ৬,০০০ কমল — নভেম্বরের নয় (তখন জানা ছিল না; estimate-এর সংশোধন, অধ্যায় ২৫)। Dr. রহমান কিন্তু ১২,০০০-ই পাবেন — hospital আর insurer-এর চুক্তি তাঁর নয় (নীতি; কিছু hospital-এ doctor-ও ভাগ নেন — চুক্তিতে)।

৩০-১১ — Doctor payout run, Dr. রহমান

2185 [রহমান], নভেম্বর: E-0042: 1,600 × 3 + 12,000 = 16,800; অন্য রোগী: 1,03,200 → Σ 1,20,000 TDS 10% = 12,000 JV-11-0498 source = doctor_payout DP-2611, aggregated (৯ জন doctor) Dr 2185 Doctor Fee Payable 4,80,000 Cr 2150 TDS Payable 48,000 Cr 1120 Bank 4,32,000 doctor statement (রহমান): রোগী-ধরে, charge-ধরে — 2185 subledger থেকে; hash, snapshot (অধ্যায় ২৯-এর payslip-এর মতো)

Encounter E-0042 — এক নজরে

তারিখ ঘটনা 1132 2161 1130 1133 আয় (hospital) 2185 ───── ──── ──── ──── ──── ──── ───────────── ──── 03-11 deposit +50,000 03-11 charges C-1…C-6 +74,700 +61,100 +13,600 04-05 charges C-7…C-11 +7,900 +4,700 +3,200 05-11 return −400 −400 06-11 bill −82,200 +21,700 +60,000 −500 (discount) 06-11 adjust + refund −50,000 −21,700 15-12 claim settled −60,000 −6,000 (adj., ডিসেম্বরে) ────── ────── ────── ────── ────────── ────── 0 0 0 0 নভ 64,900 16,800 → payout ডিসে −6,000

চারটি control account শূন্যে ফিরল, আয় দুই মাসে ৫৮,৯০০ (নভেম্বর ৬৪,৯০০, ডিসেম্বরে −৬,০০০), doctor ১৬,৮০০ পেলেন — যা কখনো hospital-এর আয় ছিল না। রোগী দিলেন ২১,৭০০, insurer ৫৪,০০০, মোট ৭৫,৭০০ = ৫৮,৯০০ + ১৬,৮০০ ✓।

৩০ নভেম্বর — খোলা encounter

৩০-১১ রাতে ভর্তি ৪২ জন; তাঁদের charges Σ 18,40,000 → 1132 balance 18,40,000 নভেম্বরের Income Statement: এই 18,40,000-এর আয় ইতিমধ্যে 42xx-এ accrual entry: নেই। reversal: নেই। ডিসেম্বরে bill হলে: 1132 → A/R, আয় ছোঁয় না

নকশা হলে এখানে ৪২টা accrual, ডিসেম্বরে ৪২টা reversal, প্রতিটি bill-এ match। নকশা -তে — কিছুই না। এটাই charge-time recognition-এর পুরস্কার।


৫. Implementation — Software ও Database

Master

service_items doctors id, code, name id, name, engagement (visiting | employed) department_id FK (cost center — অধ্যায় ৩৪) default_share_pct DECIMAL(5,2) -- hospital-এর অংশ revenue_account_id FK (42xx) tds_rate kind bed | consult | investigation | procedure | package | pharmacy | consumable chargeable BOOLEAN price_lists is_package BOOLEAN id, payer_type (self | insurer | corporate), payer_id NULL, effective_from inventory_item_id FK NULL (pharmacy) price_list_lines: price_list_id, service_item_id, rate doctor_share_pct DECIMAL(5,2) NULL packages / package_components package_id, service_item_id, qty, standalone_price, alloc_pct (computed)

revenue_account_id item-এ; doctor_share_pct doctor-এ (item override); rate price list থেকে — client দাম পাঠায় না

Encounter ও charge

encounters charges id, patient_id id, encounter_id, charge_no (gapless per encounter) type opd | ipd | emergency | daycare service_item_id, description admitted_at, discharged_at service_date DATE -- আয়ের দিন bed_id, department_id posting_date DATE -- সাধারণত = service_date status open | discharged | billed | quantity, rate, amount DECIMAL(18,4) settled | closed price_list_id FK -- কোন দামে attending_doctor_id doctor_id FK NULL payer_rules JSON (pre-auth: scope, cap; doctor_share_amount DECIMAL(18,4) -- 2185-এ corporate contract) hospital_amount DECIMAL(18,4) -- 42xx-এ package_id, is_package_component -- component: amount 0 / allocated revenue_account_id FK -- copy department_id FK stock_movement_id FK NULL -- pharmacy status active | reversed reversed_by_charge_id FK NULL; reverses_charge_id FK NULL journal_entry_id FK created_by, created_at UNIQUE (encounter_id, charge_no) INDEX (encounter_id, status); INDEX (service_date, department_id); INDEX (doctor_id, service_date)

Charge post-এ entry; status = reversed মানে reversal charge আছে (ঋণাত্মক, নিজের entry)। UPDATE charges SET amount কখনো নয়।

postCharge()

postCharge(enc, item, qty, service_date, doctor, by): যাচাই: enc.status == open (discharged → শুধু pharmacy return / correction, অনুমতিতে) service_date BETWEEN enc.admitted_at AND today; period open item.chargeable; package-এর ভিতরের item আবার নয়: if enc has package covering item → is_package_component, amount 0 rate = priceList(enc.payer_for(item), item).rate -- client rate পাঠায় না c = charges.insert(amount = qty × rate, …) if item.kind == pharmacy: m = issue(item.inventory_item, qty, ref = c); c.stock_movement_id = m -- অধ্যায় ২৭ -- doctor split if c.doctor AND doctor.engagement == visiting: c.doctor_share_amount = amount × (1 − share_pct); c.hospital_amount = amount − doctor_share else: c.hospital_amount = amount -- package allocation if item.is_package: lines = package.components.map(comp → (comp.revenue_account, amount × comp.alloc_pct)) else: lines = [(c.revenue_account_id, c.hospital_amount)] entry = JournalEntry(source = ('charge', c.id), posting_date = c.posting_date, idempotency = ('charge', c.id)) entry.line(Dr 1132, c.amount, dims = {encounter = enc.id}) প্রতিটি (acct, amt) in lines: entry.line(Cr acct, amt, dims = {department}) if c.doctor_share_amount > 0: entry.line(Cr 2185, c.doctor_share_amount, dims = {doctor}); doctor_ledger += (doctor, c, amount) if pharmacy: entry.line(Dr 5140, m.total_cost); entry.line(Cr 1145, m.total_cost) assert balanced; post(entry); c.journal_entry_id = entry.id -- OPD (নগদে): Dr 1110 [counter] instead of 1132, receipt বাধ্যতামূলক reverseCharge(c, reason, by): যাচাই: c.status == active; by has 'charge.reverse'; reason r = charges.insert(reverses_charge_id = c.id, amount = −c.amount, …) -- সব field উল্টো entry উল্টো (posting_date = আজ, খোলা period); pharmacy হলে return_in মূল cost-এ c.status = reversed; c.reversed_by_charge_id = r.id

Bill — সরায়, তৈরি করে না

bills bill_payers id, encounter_id, bill_no (gapless), bill_date bill_id, payer_type, payer_id (patient | insurer | corporate) gross, discount, net amount, ar_account_id (1130 | 1133 | 1134), claim_id NULL status draft | final | settled | void journal_entry_id bill_discounts bill_id, amount, reason, approved_by, limit_checked finalizeBill(enc, by): যাচাই: enc.status == discharged; pending pharmacy issue নেই; সব charge posted (journal_entry_id NOT NULL) gross = Σ charges(active).amount; assert gross == closing(1132, encounter = enc.id) -- control যাচাই, প্রতিবার payers = splitByPayer(charges, enc.payer_rules) -- pre-auth scope/cap → insurer; corporate contract → corporate; বাকি patient discount = approvedDiscounts(bill) -- approval_limits (অধ্যায় ৪১) entry: প্রতিটি payer: Dr payer.ar_account amount, dims = {party, claim} Dr 4280 discount Cr 1132 gross, dims = {encounter} assert balanced; post enc.status = billed; insurer payer → claims.insert(status = draft) applyDeposit(enc): প্রতিটি deposit(open) → allocation to patient A/R (অধ্যায় ১৪-এর allocations, document_type = bill) entry Dr 2161 / Cr 1130 min(deposit, patient due); বাকি deposit → refundable refund(enc, amount, by, approver): যাচাই approver ≠ by; রোগীর সই (document); entry Dr 2161 / Cr 1110 [counter]; RF নম্বর gapless

Claim

claims: id, insurer_id, bill_id, encounter_id, claimed, submitted_on, approved, disallowed, paid, status (draft | submitted | resubmitted | settled | rejected) claim_lines: claim_id, charge_id, claimed, approved, disallow_reason settleClaim(claim, paid, disallowances[{charge, amount, treatment}]): entry: Dr bank paid প্রতিটি d: treatment == 'contractual' → Dr 4285 d.amount treatment == 'patient' → Dr 1130 [patient] d.amount (রোগীকে notice) treatment == 'resubmit' → থাকে (entry নেই), claim.status = resubmitted Cr 1133 [claim] paid + Σ contractual + Σ patient claim.status = settled if 1133[claim] == 0

Doctor payout

doctor_ledger: doctor_id, charge_id, service_date, gross_fee, share_amount, payout_run_id NULL payoutRun(period): অধ্যায় ২৯-এর payroll-এর কাঠামো — aggregated entry (Dr 2185 Σ / Cr 2150 TDS / Cr bank), doctor-ধরে statement, snapshot যাচাই: by ≠ approver; doctor-এর bank verified; reversed charge-এর share ঋণাত্মক (clawback)

Counter cash

cash_counters: id, name, gl dimension shifts: counter_id, opened_by, opened_at, opening_float, closed_at, counted, system_receipts, system_refunds, variance, closed_by closeShift(): system = Σ receipts − Σ refunds (this shift); variance = counted − (float + system); variance → 5xxx cash over/short, অনুমোদনে bank deposit পরদিন: Dr 1120 / Cr 1110 [counter] (অধ্যায় ১১)

API / Service

POST /encounters … /admit … /discharge POST /encounters/{id}/deposits {amount, counter} → receipt POST /encounters/{id}/charges {item, qty, service_date, doctor} → rate server-এ; entry POST /charges/{id}/reverse {reason} POST /encounters/{id}/bill → payer split, discount (approved), entry; final POST /bills/{id}/apply-deposit … /refund {amount, approver} POST /claims/{id}/submit … /settle {paid, disallowances[]} POST /doctors/payout-runs … /approve … /pay GET /encounters/{id}/statement charges, payments, deposits — রোগীর "আপনার হিসাব" GET /revenue/by-department?from=&to= 42xx × department — 1132-এর পাশে GET /reconciliation?as_of= যাচাই ১২০–১২৬

POST /charges-এ amount এলে reject — price list-ই সত্য। Discount client পাঠায় না — bill_discounts approval দিয়ে।

রাতের যাচাই

১২০. closing(1132) == Σ charges(active).amount WHERE encounter.status IN (open, discharged) — encounter-ধরে ১২১. closing(2161) == Σ deposits − allocations − refunds, রোগী-ধরে; refund যার approver == created_by → ০টি ১২২. closing(2185) == Σ doctor_ledger.share WHERE payout_run_id IS NULL, doctor-ধরে ১২৩. closing(1133) == Σ claims (claimed − paid − adjusted − transferred), claim-ধরে; submitted > ৬০ দিন → সতর্কতা ১২৪. 1132 / 2161 / 2185 / 1133-এ posted line যার source_type ∉ (charge, bill, deposit, refund, claim_settlement, doctor_payout, opening_balance) → ০টি; charges যার journal_entry_id NULL → ০টি ১২৫. discharged > ২৪ ঘণ্টা অথচ bill নেই → সতর্কতা; billed অথচ patient due > ০ আর deposit > ০ → ০টি (apply হয়নি) ১২৬. package encounter-এ component item আলাদা charge (amount > 0) → ০টি (double billing); shift closed অথচ variance unapproved → সতর্কতা

১২০ ব্যর্থ হলে প্রথমে ১২৪ — কেউ 1132-এ JV লিখেছে বা charge post হয়নি। ১২৬-এর প্রথম অংশ accounting নয়, কিন্তু রোগীর সবচেয়ে বড় অভিযোগ।

Test হিসেবে

test "charge-এ আয়, bill-এ নয়": admit(E); postCharge(E, bed, 03-11) assert Δ 4210 == +5,000 and Δ 1132 == +5,000 and Δ 1130 == 0 finalizeBill(E); assert Δ 42xx (bill) == 0 and Δ 1132 == −5,000 and Δ 1130 == +5,000 test "deposit আয় নয়; সমন্বয় ও ফেরত": deposit(E, 50,000); assert Δ 2161 == −50,000 and Δ 4xxx == 0 bill patient 21,700; applyDeposit; refund(28,300, approver) assert closing(2161, করিম) == 0 and closing(1130, করিম) == 0 and Δ 1110 == +50,000 − 28,300 test "visiting doctor: agent — share আয় নয়": postCharge(E, consult 2,000, doctor = রহমান (visiting, 20%)) assert Δ 4220 == +400 and Δ 2185 == −1,600 and Δ 1132 == +2,000 test "employed doctor: principal — পুরো আয়": postCharge(E, consult 1,500, doctor = নাসরিন (employed)) assert Δ 4220 == +1,500 and Δ 2185 == 0 test "pharmacy: বিক্রি + COGS একসাথে; ফেরত মূল cost-এ": postCharge(E, drug × 10) → assert Δ 4250 == +3,200 and Δ 5140 == +2,400 and Δ 1145 == −2,400 reverseCharge(partial 400) → assert Δ 4250 == −400 and Δ 1145 == +300 test "package: allocation, component double-bill নয়": postCharge(E, appendectomy package 45,000) assert Δ 4240 == +30,000 and Δ 4210 == +10,000 and Δ 4250 == +5,000 c = postCharge(E, bed, 04-11); assert c.is_package_component and c.amount == 0 test "payer split: pre-auth scope": (E-0042) finalizeBill assert Δ 1130 == +21,700 and Δ 1133 == +60,000 and Δ 4280 == +500 and Δ 1132 == −82,200 test "claim: contractual → 4285; patient → 1130; resubmit → থাকে": settleClaim(CL, paid 54,000, [{surgeon, 6,000, contractual}]) → assert Δ 4285 == +6,000 and closing(1133, CL) == 0 settleClaim(CL2, paid 50,000, [{x, 10,000, patient}]) → assert Δ 1130 == +10,000 settleClaim(CL3, paid 0, [{y, 5,000, resubmit}]) → assert closing(1133, CL3) unchanged test "charge edit নয়": assert rejects UPDATE charges SET amount … (API নেই); reverseCharge → নতুন সারি, মূল status reversed test "rate client থেকে নয়": assert rejects POST /charges {item, qty, amount: 1} assert postCharge(E insurer-payer, item).rate == priceList(insurer).rate test "discharge-এর পরে charge নয়": discharge(E); assert rejects postCharge(E, bed) test "মাস শেষে খোলা encounter: accrual লাগে না": 42 open encounters, Σ charges 18,40,000 assert closing(1132) == 18,40,000 and revenue(Nov) includes 18,40,000 and entries(source = accrual, Nov).count == 0 test "doctor payout: aggregated, TDS, statement": payoutRun(Nov) assert entry.lines.count == 3 and Δ 2185 == +4,80,000 and Δ 2150 == −48,000 assert statement(রহমান).Σ == 1,20,000 and closing(2185, রহমান) == 0 test "shift: variance approval": closeShift(counted = system − 500) → assert rejects without approver; with approver: Δ 5xxx cash short == +500

৬. Financial Statement Impact

INCOME STATEMENT (নভেম্বর ২০২৬ — একটা encounter-এর অংশ; পুরো hospital-এ হাজারটা) 4210 Bed & Nursing 15,000 (5,000 + package-এর 10,000) 4220 Consultation & Procedure 4,200 (400 × 3 + 3,000) ← visiting share; doctor-এর 16,800 নেই 4230 Investigation 6,000 4240 OT & Package 30,000 4250 Pharmacy Sales 10,200 (5,000 + 5,200) 4280 Patient Discount (500) Net revenue 64,900 5140 COGS — Pharmacy 3,900 (2,400 + 1,800 − 300) (ডিসেম্বরে: 4285 Contractual Adjustment (6,000)) BALANCE SHEET (৩০ নভেম্বর ২০২৬, পুরো hospital) 1132 In-patient Charges (Unbilled) 18,40,000 ← current asset; A/R-এর পাশে, আলাদা লাইন (অধ্যায় ২১-এর 1170-এর যুক্তি) 1130 A/R — Patients 3,20,000 ← ছোট, দ্রুত 1133 A/R — Insurers 42,60,000 ← বড়, ধীর; aging আলাদা 1134 A/R — Corporate 8,10,000 2161 Patient Deposit 21,00,000 ← liability; "নগদ" নয় 2185 Doctor Fee Payable 4,80,000 ← ৩০-১১ payout-এর আগে CASH FLOW operating: deposit +, refund −, insurer receipt +; increase in 1132/1133 —; increase in 2161 +

তিনটি কথা। Revenue-র সংজ্ঞা model-এ — agent হিসেবে 4220-তে ৪,২০০; principal হলে ২১,০০০ আর 5310-এ ১৬,৮০০; net profit এক, revenue ৫ গুণ — investor, regulator, benchmark সবাই দ্বিতীয় লাইনটা দেখেন, তাই সিদ্ধান্তটা accounting policy-তে লেখা থাকে। 1132 আর 1133 A/R থেকে আলাদা — একটার invoice নেই, অন্যটার payer আলাদা প্রকৃতির (৯০ দিন, disallowance)। 2161 Balance Sheet-এর সবচেয়ে ভুল বোঝা লাইন — ২১ লাখ liability, অথচ management ভাবে “ব্যাংকে টাকা আছে”।


৭. Common Developer Mistakes

ভুলকী ঘটেসঠিক পথ
Revenue bill-এ (discharge-এ)মাস শেষে খোলা রোগীর আয় নেই; ৩০০ accrual হাতেcharge-এ revenue, 1132
Deposit revenue-তেভর্তির দিন “আয়”, ফেরত দিলে “ক্ষতি”2161 liability, রোগী-ধরে
Visiting doctor-এর পুরো fee revenuerevenue ফোলে, 5310-এ doctor “খরচ” — agent হলে ভুলengagement → split; share 2185
Employed doctor-এর fee splitআয় কম, 2185-এ কর্মীর দেনাprincipal: পুরো আয়
Charge UPDATEaudit নেই, 1132 ≠ Σ, doctor share ভুলreverse + নতুন
Rate client পাঠায়যা খুশি দামprice list, payer-ধরে
Package component আলাদা chargedouble billing — রোগীর অভিযোগ, refundis_package_component, amount 0
Package পুরোটা এক account-এdepartment revenue ভুল (bed-এর আয় OT-তে)allocation
এক A/R সব payer-এরinsurer aging patient-এর সাথে মিশে; disallowance কোথায় জানা নেই1130 / 1133 / 1134
Disallowed → bad debt”হারালাম” বনাম “পাওনা ছিল না” — দুটো আলাদা সিদ্ধান্ত4285 / 1130 / resubmit
Discount খরচেআয় ফোলে4280 contra
Discount বিনা অনুমোদনেcounter থেকে যা খুশি ছাড়approval_limits, log
Pharmacy issue COGS ছাড়াstock কমে না বা gross margin ১০০%issue() একই transaction
Refund receipt-এর ঋণাত্মক হিসেবেcash book-এ লুকায়, অনুমোদন নেইRF নম্বর, approver, সই
Counter shift reconcile নেইনগদ চুরি — সবচেয়ে সাধারণshift close, variance, deposit
Receipt ছাড়া charge settleহাতের রসিদ, টাকা পকেটেgapless receipt, settle শুধু receipt-এ
Discharge-এর পরে chargebill পাঠানোর পরে অঙ্ক বদলায়block; correction reverse-এ
Encounter-ধরে dimension নেই 1132-এ৩০০ রোগীর 1132 এক পিণ্ডdimension; যাচাই ১২০
1132/2161/2185-এ হাতে JVsubledger ≠ GLcontrol; যাচাই ১২৪

প্রথম আর তৃতীয় সবচেয়ে ব্যয়বহুল — দুটোই Income Statement-এর প্রথম লাইনকে ভুল করে, আর দুটোই “কিন্তু bill-এ তো এটাই লেখা” বলে defend করা হয়। পনেরো আর ষোলো টাকা হারায় — hospital-এ নগদের দরজা অনেক, আর প্রতিটি দরজায় একজন মানুষ।


৮. Exercises

সেট ক — entry লিখুন

১। রোগী ভর্তি, deposit ৩০,০০০ bKash-এ (1125 mobile wallet)। entry। subledger। ২। দিন ১: ICU bed ১৫,০০০; visiting intensivist ৫,০০০ (hospital ২৫%); ventilator ৮,০০০/দিন; ওষুধ ১২,০০০ (cost ৯,৫০০)। প্রতিটির entry। দিনের hospital revenue, doctor payable। ৩। ২ নম্বরের রোগী ৩ দিন পরে মারা গেলেন। bill ১,২০,০০০; deposit ৩০,০০০; পরিবার ৫০,০০০ দিতে পারল; বাকি ৪০,০০০ welfare fund থেকে (charity, অনুমোদিত)। bill, adjust, charity — entry। ৪। Corporate রোগী (employer দেবে, contract rate 10% কম): OPD consult ২,০০০ (employed), lab ৩,০০০। entry — rate কোনটা, A/R কোনটা। ৫। Claim ৮০,০০০: insurer দিল ৭০,০০০; ৬,০০০ contractual, ৪,০০০ "রোগীর co-pay" (contract-এ রোগীর দায়)। entry। রোগীকে কী পাঠাবেন? ৬। Delivery package ৩৫,০০০ (OT 20,000, bed 2 দিন 8,000, নবজাতক care 7,000 standalone)। allocation। রোগী ৪ দিন থাকলেন — extra ২ দিন charge? ৭। Dr. রহমানের নভেম্বরের একটা charge (১,৬০০ share) ডিসেম্বরে reverse হলো (ভুল রোগী)। payout নভেম্বরে হয়ে গেছে। ডিসেম্বরের payout-এ কী?

সেট খ — মাস শেষ ও reconciliation

৮। ৩০-১১: 1132 GL 18,40,000; Σ charges(active, open enc.) 18,52,000। পার্থক্য ১২,০০০ — তিনটি সম্ভাব্য কারণ, প্রতিটি কীভাবে খুঁজবেন। ৯। 2161 GL 21,00,000; subledger-এ একজন রোগীর deposit −৫,০০০ (ঋণাত্মক)। কীভাবে হলো? কী করবেন? ১০। Insurer aging: ০–৩০: ১২ লাখ, ৩১–৬০: ১৮ লাখ, ৬১–৯০: ৯ লাখ, ৯০+: ৩.৬ লাখ। ৯০+-এর জন্য কী — bad debt? contractual? resubmit? কোন তথ্য লাগবে? ১১। নকশা ক (bill-এ revenue) হলে ৩০-১১-এর accrual entry কত হতো, ০১-১২-এ reversal, আর ডিসেম্বরের bill-এ কী match করতে হতো? নকশা খ-এর সাথে ধাপ গুনে তুলনা।

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

১২। Dr 1110 50,000 / Cr 4210 50,000 — deposit ১৩। Dr 1132 2,000 / Cr 4220 2,000; মাস শেষে Dr 5310 1,600 / Cr 2185 1,600 — visiting doctor ১৪। Dr 1130 82,200 / Cr 4210 …, Cr 4220 … — discharge bill, charges ছিল না ১৫। Dr 5530 Bad Debt 6,000 / Cr 1133 6,000 — insurer contractual disallowance ১৬। Dr 5xxx Discount Expense 500 / Cr 1130 500 ১৭। UPDATE charges SET amount = 1,800 WHERE id = C-9 — "ভুল qty" ১৮। Dr 1132 3,200 / Cr 4250 3,200 — pharmacy, COGS পরে "মাস শেষে গড়ে" ১৯। Refund: Dr 1110 −28,300 (ঋণাত্মক receipt)

সেট ঘ — নকশা

২০। Interim bill (৭ দিন পরে, রোগী এখনো ভর্তি): 1132 → 1130 আংশিক? না শুধু deposit চাওয়া? দুটোর entry ও ফল (aging, claim)। ২১। Doctor share যদি insurer-এর disallowance-এর সাথে বদলায় (চুক্তি: "hospital যা পায় তার ৮০%") — charge-এ share কত লিখবেন? claim settle-এ 2185 adjust? doctor_ledger-এ কী? ২২। একই doctor OPD-তে visiting (share), IPD-তে employed (বেতনে) — engagement encounter-type-ধরে? schema-তে কী বদলাবে? ২৩। Emergency: রোগী অজ্ঞান, নাম নেই, deposit নেই, charge শুরু। encounter কার নামে? পরে পরিচয় পেলে merge? 1132-এর dimension বদলায় — entry? ২৪। Department profitability (অধ্যায় ৩৪-এর আগাম): Lab-এর revenue 4230 থেকে; Lab-এর cost — reagent (consumables), technician (payroll), machine (depreciation)। তিনটি অধ্যায়ের dimension এক জায়গায় আসছে — কোন column সবগুলোতে থাকতে হবে?

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


৯. Developer Challenge

একটি PatientBillingService নকশা করুন — admission থেকে claim settlement — Part 4-এর পঞ্চম project (Projects ও Exit Criteria: Patient billing accounting engine)।

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

১. Master — service_items (revenue account, department, kind, chargeable, package), doctors (engagement, share), price_lists payer-ধরে, packages/components (allocation standalone price-এর অনুপাতে)।

২. postCharge() — rate price list থেকে, doctor split engagement-ধরে, package allocation ও component suppression, pharmacy issue একই transaction (অধ্যায় ২৭-এর issue()), entry source = charge, encounter dimension 1132-এ। reverseCharge() — নতুন সারি, মূল অক্ষত, pharmacy return মূল cost-এ। OPD path: 1110 [counter] সরাসরি, receipt বাধ্যতামূলক।

৩. finalizeBill() — Σ charges == 1132[encounter] যাচাই, payer split (pre-auth scope/cap, corporate contract), discount approval, entry শুধু 1132 → A/R। applyDeposit() অধ্যায় ১৪-এর allocations reuse; refund() approver ≠ creator, gapless RF।

৪. Claims — submit, settle with disallowances (contractual / patient / resubmit — তিনটি path), 1133 claim-ধরে, aging আলাদা।

৫. Doctor payout — অধ্যায় ২৯-এর payout কাঠামো reuse: aggregated entry, TDS, doctor statement snapshot, clawback reversed charge-এ।

৬. Counter cash — অধ্যায় ১১-এর cash book counter dimension-এ, shift open/close, variance approval, daily bank deposit।

৭. Reports — encounter statement (রোগীর “আপনার হিসাব”), revenue by department (42xx × dept), open encounters (1132 detail), insurer aging, doctor statement। প্রতিটি subledger থেকে, GL-এর সাথে যাচাই ১২০–১২৬।

৮. Section ৫-এর চৌদ্দটি test; আর: (ক) দুই nurse একই ওষুধ একই রোগীকে একই সময়ে charge — duplicate কীভাবে আটকাবেন (idempotency key কী)? (খ) ৫০০ শয্যার hospital-এ দিনে ২০,০০০ charge → ২০,০০০ entry — GL ফোলে? বিকল্প: charge-ধরে entry বনাম দিনে department-ধরে aggregated entry + charge subledger (অধ্যায় ২৯-এর payroll-এর সিদ্ধান্ত) — trade-off, আর 1132[encounter] dimension তখন কীভাবে? (গ) অধ্যায় ৩৪-এর জন্য department dimension সব revenue ও cost line-এ।

২ আর ৮(খ) একসাথে আসল পরীক্ষা। Charge-time recognition মানে প্রতিটি service একটা accounting event — মাস শেষের accrual চিরতরে চলে যায়, কিন্তু GL-এ দিনে হাজার entry। Aggregate করলে GL হালকা, কিন্তু “এই 1132-এর ১৮ লাখ কোন রোগীর” প্রশ্নের উত্তর subledger-এ যেতে হয়। দুটো নকশাই ঠিক — শর্ত একটাই: subledger == GL প্রতি রাতে, আর কোনো সংখ্যা দুই জায়গায় দুইভাবে হিসাব নয়। এটা পারলে অধ্যায় ৩৬-এর Subledger Architecture-এ আপনি নিজের উদাহরণ নিয়ে ঢুকবেন।


১০. Summary Card

রোগীর যাত্রা

deposit Dr 1110 / Cr 2161 [রোগী] দেনা, আয় নয় charge Dr 1132 [enc] / Cr 42xx (, Cr 2185 [doctor]) আয় service-এর দিন; bill নয় pharmacy + Dr 5140 / Cr 1145 একই transaction bill Dr 1130 / 1133 / 1134 (payer), Dr 4280 / Cr 1132 সরায়, তৈরি করে না adjust Dr 2161 / Cr 1130; refund Dr 2161 / Cr 1110 (approver, সই) claim Dr 1120, Dr 4285 (contractual) | Dr 1130 (patient) / Cr 1133 payout Dr 2185 / Cr 2150, Cr 1120 aggregated, statement

তিনটি সিদ্ধান্ত

recognition charge-এ (নকশা খ): মাস শেষে accrual নেই; 1132 == unbilled doctor visiting = agent (share আয়); employed = principal (পুরো আয়) payer একটা bill, payer-ধরে A/R; price list payer-ধরে; disallowed: 4285 / 1130 / resubmit

তিনটি আলাদা জিনিস

discount 4280 (contra) charity 4280 dim / welfare fund bad debt 5530 (খরচ)

Control accounts

1132 == Σ active charges (open enc.) 2161 == Σ open deposits 2185 == Σ unpaid doctor share 1133 == Σ open claims হাতে JV নয়; encounter / রোগী / doctor / claim dimension

Developer checklist

□ service_items: revenue account, dept, kind, package; doctors: engagement, share; price_lists payer-ধরে □ charges: gapless per encounter, service_date, status active/reversed, entry link; UPDATE নেই □ postCharge: rate server-এ; split; package suppression; pharmacy issue একসাথে □ OPD: 1110 [counter] সরাসরি, receipt gapless □ finalizeBill: Σ charges == 1132[enc]; payer split; discount approval; 1132 → A/R শুধু □ deposit: 2161 রোগী-ধরে; apply → allocations; refund approver ≠ creator, RF gapless □ claims: claim-ধরে 1133; settle তিন path; aging আলাদা □ doctor payout: aggregated; TDS; statement snapshot; clawback □ counter shifts: open/close, variance approval, bank deposit □ discharge-এর পরে charge block □ department dimension সব 42xx/5xxx line-এ (অধ্যায় ৩৪) □ control accounts: হাতে JV block □ রাতে: ১২০ 1132, ১২১ 2161, ১২২ 2185, ১২৩ 1133, ১২৪ অচেনা source, ১২৫ unbilled discharge, ১২৬ double-bill / shift

পরবর্তী অধ্যায়

অধ্যায় ৩২ — School Accounting: Hospital-এর উল্টো ছবি — service আগে থেকে জানা (বছরের tuition), টাকা আগে আসে (session-এর শুরুতে বা মাসিক), আর গ্রাহক একজন নয়, একটা পরিবার (ভাই-বোন, একই অভিভাবক)। Tuition বারো মাসের আয় — জানুয়ারিতে পুরোটা নিলে deferred (অধ্যায় ১৭); admission fee একবারের — আয় কখন; scholarship আর waiver — discount না খরচ; late fee; hostel, transport, canteen — আলাদা service, আলাদা account; আর fee collection-এর aging যেখানে “overdue” মানে একটা শিশু, একটা ফোন। Hospital-এ প্রশ্ন ছিল “কে দেবে”; school-এ “কোন মাসের”।