@classytic/ledger-bd 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +192 -0
- package/README.md +30 -0
- package/dist/index.d.mts +13 -7
- package/dist/index.mjs +381 -41
- package/dist/reporting/nbr-schedule/index.d.mts +66 -0
- package/dist/reporting/nbr-schedule/index.mjs +790 -0
- package/dist/verticals/index.d.mts +42 -0
- package/dist/verticals/index.mjs +702 -0
- package/package.json +18 -8
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
//#region src/verticals/school/accounts.ts
|
|
2
|
+
const L$6 = "Balance Sheet-Liability";
|
|
3
|
+
const I$4 = "Income Statement-Income";
|
|
4
|
+
const X$4 = "Income Statement-Expense";
|
|
5
|
+
const SCHOOL_REVENUE = [
|
|
6
|
+
{
|
|
7
|
+
code: "4510",
|
|
8
|
+
name: "Development / Building Fee Income",
|
|
9
|
+
category: I$4,
|
|
10
|
+
description: "Annual development or building fund fee, distinct from tuition. Govt fee-cap policy sets tiered ceilings by area (mofussil/upazila/metro/Dhaka) for MPO-listed institutions — verify current cap before pricing.",
|
|
11
|
+
parentCode: "Revenue",
|
|
12
|
+
isTotal: false,
|
|
13
|
+
cashFlowCategory: "Operating"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
code: "4511",
|
|
17
|
+
name: "Session Fee Income (annual)",
|
|
18
|
+
category: I$4,
|
|
19
|
+
description: "Annual session fee charged on promotion to the next class. Legal status is contested — an HC ban on session/readmission fees for English-medium schools (2017) was later stayed by the Appellate Division (2021), reviving the practice in a regulatory grey zone.",
|
|
20
|
+
parentCode: "Revenue",
|
|
21
|
+
isTotal: false,
|
|
22
|
+
cashFlowCategory: "Operating"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
code: "4512",
|
|
26
|
+
name: "Hostel / Boarding Fee Income",
|
|
27
|
+
category: I$4,
|
|
28
|
+
description: "Residential hostel/dormitory fee, distinct from tuition. Often bundled with a separate meal charge in practice (e.g. per-meal billing) — track meal charges here too unless volume warrants a separate line.",
|
|
29
|
+
parentCode: "Revenue",
|
|
30
|
+
isTotal: false,
|
|
31
|
+
cashFlowCategory: "Operating"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
code: "4513",
|
|
35
|
+
name: "Transport Fee Income (school bus)",
|
|
36
|
+
category: I$4,
|
|
37
|
+
description: "Monthly transport fee for institution-run school bus service (asset side: 1341 School Bus). Market range roughly Tk 5,000-15,000/month for English-medium schools — not independently verified per-institution.",
|
|
38
|
+
parentCode: "Revenue",
|
|
39
|
+
isTotal: false,
|
|
40
|
+
cashFlowCategory: "Operating"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
code: "4514",
|
|
44
|
+
name: "Miscellaneous Fee Income (library, sports, lab, magazine, festival)",
|
|
45
|
+
category: I$4,
|
|
46
|
+
description: "Catch-all for smaller recurring charges (library, sports, science-lab, magazine, festival/milad/puja fees) common in BD private-school fee schedules. Break out into a dedicated line only if a specific charge becomes material.",
|
|
47
|
+
parentCode: "Revenue",
|
|
48
|
+
isTotal: false,
|
|
49
|
+
cashFlowCategory: "Operating"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
code: "4515",
|
|
53
|
+
name: "Tuition Fee Waiver / Scholarship Discount",
|
|
54
|
+
category: I$4,
|
|
55
|
+
description: "Contra-revenue for institution-granted fee waivers/scholarships (need- or merit-based), booked gross-then-waived so enrollment and discount policy stay auditable. Does NOT cover government scholarship trusts (PEAT, BRAC Medhabikash) — those pay the student/guardian directly via bank/mobile transfer and never touch the institution’s books at all.",
|
|
56
|
+
parentCode: "Revenue",
|
|
57
|
+
isTotal: false,
|
|
58
|
+
cashFlowCategory: "Operating"
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
const SCHOOL_LIABILITIES = [
|
|
62
|
+
{
|
|
63
|
+
code: "2510",
|
|
64
|
+
name: "Board Exam Fee Collected (Payable to Education Board)",
|
|
65
|
+
category: L$6,
|
|
66
|
+
description: "Pass-through: the institution collects SSC/HSC/Dakhil form-fill-up fees from students at board-set rates and remits to the Board — this is the Board’s money, not institutional revenue. Rates are gazetted annually by BISE/Bangladesh Madrasah Education Board (e.g. SSC 2026 Science ~Tk 2,435; HSC 2026 Science ~Tk 2,785) — reverify each cycle, do not hardcode.",
|
|
67
|
+
parentCode: "Current Liabilities",
|
|
68
|
+
isTotal: false,
|
|
69
|
+
cashFlowCategory: "Operating"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
code: "2511",
|
|
73
|
+
name: "Teacher Retirement Benefit Board Payable",
|
|
74
|
+
category: L$6,
|
|
75
|
+
description: "Statutory deduction from MPO-listed teacher/staff salary remitted to the Non-Government Teacher Employee Retirement Benefit Board (TERBB, est. under a 2002 law). Contribution rate is disputed across sources (6% vs. a 2019 order raising it to 10% of basic) — verify against a current TERBB circular before hardcoding a rate. Distinct from 2512 (a separate statutory body).",
|
|
76
|
+
parentCode: "Current Liabilities",
|
|
77
|
+
isTotal: false,
|
|
78
|
+
cashFlowCategory: "Operating"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
code: "2512",
|
|
82
|
+
name: "Teacher Welfare Trust Payable",
|
|
83
|
+
category: L$6,
|
|
84
|
+
description: "Statutory deduction remitted to the Non-Government Teachers’ & Employees’ Welfare Trust — a DIFFERENT body from 2511 (Retirement Benefit Board), funded partly by a small per-student annual contribution alongside the salary deduction. Both bodies report chronic multi-year payout backlogs; treat institutional remittance as a pure pass-through, not an institution-managed fund.",
|
|
85
|
+
parentCode: "Current Liabilities",
|
|
86
|
+
isTotal: false,
|
|
87
|
+
cashFlowCategory: "Operating"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
code: "2513",
|
|
91
|
+
name: "Guardian Fund / PTA Contribution",
|
|
92
|
+
category: L$6,
|
|
93
|
+
description: "Optional restricted liability for a separate guardian/PTA welfare collection some institutions run alongside the development fee, for ad hoc student-welfare/event costs. No BD-specific regulatory or audited-statement source confirms a standard treatment for this — modeled here as a judgment call, not a documented convention; omit if the institution doesn’t actually run one.",
|
|
94
|
+
parentCode: "Current Liabilities",
|
|
95
|
+
isTotal: false,
|
|
96
|
+
cashFlowCategory: "Operating"
|
|
97
|
+
}
|
|
98
|
+
];
|
|
99
|
+
const SCHOOL_EXPENSES = [{
|
|
100
|
+
code: "6910",
|
|
101
|
+
name: "Board / NTRCA / BANBEIS Affiliation & Renewal Fee",
|
|
102
|
+
category: X$4,
|
|
103
|
+
description: "Recurring affiliation, EIIN registration, and MPO-listing renewal fees paid to the education board, NTRCA (teacher-recruitment gatekeeper), and BANBEIS (EMIS/verification layer).",
|
|
104
|
+
parentCode: "Operating Expenses",
|
|
105
|
+
isTotal: false,
|
|
106
|
+
cashFlowCategory: "Operating"
|
|
107
|
+
}];
|
|
108
|
+
const SCHOOL_ACCOUNTS = [
|
|
109
|
+
...SCHOOL_REVENUE,
|
|
110
|
+
...SCHOOL_LIABILITIES,
|
|
111
|
+
...SCHOOL_EXPENSES
|
|
112
|
+
];
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/verticals/agro/accounts.ts
|
|
115
|
+
const A$4 = "Balance Sheet-Asset";
|
|
116
|
+
const L$5 = "Balance Sheet-Liability";
|
|
117
|
+
const I$3 = "Income Statement-Income";
|
|
118
|
+
const X$3 = "Income Statement-Expense";
|
|
119
|
+
const AGRO_ASSETS = [
|
|
120
|
+
{
|
|
121
|
+
code: "1520",
|
|
122
|
+
name: "Standing Crop WIP (Cultivation in Progress)",
|
|
123
|
+
category: A$4,
|
|
124
|
+
description: "Pre-harvest accumulated cultivation cost (land prep, seed, labor, irrigation) — cost-model default, not fair-value. Distinct from 1211 (harvestable-within-12-months bio-asset classification) — this is the cost-accumulation WIP account those bio-asset codes clear into at harvest.",
|
|
125
|
+
parentCode: "Current Assets",
|
|
126
|
+
isTotal: false,
|
|
127
|
+
cashFlowCategory: "Operating"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
code: "1521",
|
|
131
|
+
name: "Harvested Crop Inventory — Rice / Paddy",
|
|
132
|
+
category: A$4,
|
|
133
|
+
description: "Paddy/rice finished-produce inventory. Paddy procurement is 65-75% of a rice mill’s total operating cost — the dominant cost driver in this vertical, distinct from generic 1173 seed/input stock.",
|
|
134
|
+
parentCode: "Current Assets",
|
|
135
|
+
isTotal: false,
|
|
136
|
+
cashFlowCategory: "Operating"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
code: "1522",
|
|
140
|
+
name: "Harvested Crop Inventory — Potato (Cold-Storage Bound)",
|
|
141
|
+
category: A$4,
|
|
142
|
+
description: "Potato inventory destined for or held in cold storage. BD has ~405 cold-storage facilities (Bangladesh Cold Storage Association), overwhelmingly potato-focused — track separately from generic crop inventory given the distinct storage-rent and spoilage dynamics (see 1530).",
|
|
143
|
+
parentCode: "Current Assets",
|
|
144
|
+
isTotal: false,
|
|
145
|
+
cashFlowCategory: "Operating"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
code: "1523",
|
|
149
|
+
name: "Jute Inventory — Kutcha Bale (Loose/Informal)",
|
|
150
|
+
category: A$4,
|
|
151
|
+
description: "Jute at the first (informal/loose) baling stage in the farmer→Faria→Bepari→baler value chain. Labor is 84% of total jute processing cost — track the kutcha→pucca grading transition as distinct inventory stages (see 1524 and COGS 5711).",
|
|
152
|
+
parentCode: "Current Assets",
|
|
153
|
+
isTotal: false,
|
|
154
|
+
cashFlowCategory: "Operating"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
code: "1524",
|
|
158
|
+
name: "Jute Inventory — Pucca Bale (Export-Grade Certified)",
|
|
159
|
+
category: A$4,
|
|
160
|
+
description: "Jute after export-grade certified baling — the stage ready for mill/foreign-buyer sale. See 1523 for the preceding informal-bale stage.",
|
|
161
|
+
parentCode: "Current Assets",
|
|
162
|
+
isTotal: false,
|
|
163
|
+
cashFlowCategory: "Operating"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
code: "1525",
|
|
167
|
+
name: "Aquaculture Pond / Enclosure WIP",
|
|
168
|
+
category: A$4,
|
|
169
|
+
description: "Multi-month grow-out cycle cost accumulation for shrimp/prawn (a major BD export sector — golda/bagda) — distinct from 1213 (grown-out shrimp/prawn stock ready for harvest) which this WIP account clears into.",
|
|
170
|
+
parentCode: "Current Assets",
|
|
171
|
+
isTotal: false,
|
|
172
|
+
cashFlowCategory: "Operating"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
code: "1526",
|
|
176
|
+
name: "Inventory Pledged as Collateral (Movable Property)",
|
|
177
|
+
category: A$4,
|
|
178
|
+
description: "Sub-ledger reclassification (not a new valuation) of finished agricultural produce/livestock pledged as loan collateral under the Secured Transactions (Movable Property) Act, 2023, which established a Central Collateral Registry. Framed as generic pledged-inventory financing rather than \"warehouse receipt financing\" — no standalone, currently-operational, named Bangladesh Bank WRF scheme could be verified; the real legal vehicle is this 2023 Act.",
|
|
179
|
+
parentCode: "Current Assets",
|
|
180
|
+
isTotal: false,
|
|
181
|
+
cashFlowCategory: "Operating"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
code: "1527",
|
|
185
|
+
name: "Cold Storage Fee Receivable (Farmer Customer)",
|
|
186
|
+
category: A$4,
|
|
187
|
+
description: "Amount owed by the farmer/trader customer for cold-storage rent, typically settled at produce withdrawal (not deposit) per BD cold-storage sector practice. Rate is government/BCA-influenced and priced per-kg (recent figures ~Tk 6.75-8.0/kg) — reverify current season’s rate before use, do not hardcode.",
|
|
188
|
+
parentCode: "Current Assets",
|
|
189
|
+
isTotal: false,
|
|
190
|
+
cashFlowCategory: "Operating"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
code: "1528",
|
|
194
|
+
name: "Inventory Shrinkage / Spoilage Allowance — Agro (contra-asset)",
|
|
195
|
+
category: A$4,
|
|
196
|
+
description: "Contra-asset for expected cold-storage/perishable spoilage. A sourced baseline for cold-stored potato is ~3.82% loss over a 9-month storage period (vs. materially higher losses for ambient/traditional storage) — use as a sanity-check reference, not a fixed rate for every commodity.",
|
|
197
|
+
parentCode: "Current Assets",
|
|
198
|
+
isTotal: false,
|
|
199
|
+
cashFlowCategory: "Operating"
|
|
200
|
+
}
|
|
201
|
+
];
|
|
202
|
+
const AGRO_LIABILITIES = [
|
|
203
|
+
{
|
|
204
|
+
code: "2520",
|
|
205
|
+
name: "Loan Payable — Secured Against Pledged Agricultural Produce",
|
|
206
|
+
category: L$5,
|
|
207
|
+
description: "Loan collateralized by pledged produce/livestock under the Secured Transactions (Movable Property) Act, 2023 — distinct from generic 2172 short-term bank loan because it carries a Central Collateral Registry filing reference. Pairs with 1526.",
|
|
208
|
+
parentCode: "Current Liabilities",
|
|
209
|
+
isTotal: false,
|
|
210
|
+
cashFlowCategory: "Financing"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
code: "2521",
|
|
214
|
+
name: "Seasonal / Bullet Loan — Cold Storage Facility",
|
|
215
|
+
category: L$5,
|
|
216
|
+
description: "Cold-storage operating loan structured around the actual harvest/storage cycle (potatoes: intake ~March, withdrawal ~July) rather than standard quarterly installments. Real, sourced operational pain point: operators report becoming loan defaulters when a bank’s quarterly repayment schedule doesn’t match the seasonal cash-flow cycle — this account exists to make that mismatch visible, not just to record a generic loan.",
|
|
217
|
+
parentCode: "Current Liabilities",
|
|
218
|
+
isTotal: false,
|
|
219
|
+
cashFlowCategory: "Financing"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
code: "2522",
|
|
223
|
+
name: "Government Agro Subsidy Received in Advance",
|
|
224
|
+
category: L$5,
|
|
225
|
+
description: "Deferred income for the minority of agribusinesses receiving DIRECT cash subsidy (e.g. the Agriculture Input Assistance Card program) — distinct from generic 2197 (NGO donor grant) since this is a commercial-farm government disbursement, and distinct from ordinary price-support subsidies (fertilizer/diesel sold below cost to dealers), which never appear as a distinct institutional receivable/income line at all — they show up only as lower input COGS.",
|
|
226
|
+
parentCode: "Current Liabilities",
|
|
227
|
+
isTotal: false,
|
|
228
|
+
cashFlowCategory: "Operating"
|
|
229
|
+
}
|
|
230
|
+
];
|
|
231
|
+
const AGRO_REVENUE = [
|
|
232
|
+
{
|
|
233
|
+
code: "4520",
|
|
234
|
+
name: "Cold Storage Rent Revenue (per-kg / per-sack)",
|
|
235
|
+
category: I$3,
|
|
236
|
+
description: "Storage-rent revenue, typically priced per kilogram (a recent sack-size-rule change moved billing from flat Tk 350/sack-up-to-70kg to per-kg above 50kg) — reverify the current season’s billing basis, it changes.",
|
|
237
|
+
parentCode: "Revenue",
|
|
238
|
+
isTotal: false,
|
|
239
|
+
cashFlowCategory: "Operating"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
code: "4521",
|
|
243
|
+
name: "Custodial / Contract-Processing Fee Revenue",
|
|
244
|
+
category: I$3,
|
|
245
|
+
description: "Service revenue for baling, grading, drying, or parboiling performed on behalf of farmers/traders under a contract-processing (not own-goods) model — distinct from 4318 rice/paddy mill processing revenue if the two need separate tracking.",
|
|
246
|
+
parentCode: "Revenue",
|
|
247
|
+
isTotal: false,
|
|
248
|
+
cashFlowCategory: "Operating"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
code: "4522",
|
|
252
|
+
name: "Government Agro Subsidy Income (direct cash)",
|
|
253
|
+
category: I$3,
|
|
254
|
+
description: "Recognized income for the direct-cash subsidy path (see 2522) — distinct from generic 4315 government subsidy/grant since eligibility and claim mechanics are agro-specific (BAS 20/IAS 20 income-approach: recognize matching the period the related cost was incurred).",
|
|
255
|
+
parentCode: "Revenue",
|
|
256
|
+
isTotal: false,
|
|
257
|
+
cashFlowCategory: "Operating"
|
|
258
|
+
}
|
|
259
|
+
];
|
|
260
|
+
const AGRO_COGS = [
|
|
261
|
+
{
|
|
262
|
+
code: "5710",
|
|
263
|
+
name: "Paddy / Raw Grain Procurement Cost",
|
|
264
|
+
category: X$3,
|
|
265
|
+
description: "Cost of paddy/grain purchased as milling input — the dominant cost line for a rice mill (65-75% of total operating cost per sector sourcing), distinct from generic 5109 (seed/fertilizer/pesticide, which is a CULTIVATION input, not a finished-crop purchase).",
|
|
266
|
+
parentCode: "Cost of Sales",
|
|
267
|
+
isTotal: false,
|
|
268
|
+
cashFlowCategory: "Operating"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
code: "5711",
|
|
272
|
+
name: "Jute Baling & Grading Cost",
|
|
273
|
+
category: X$3,
|
|
274
|
+
description: "Labor-heavy baling/grading cost moving jute from kutcha (1523) to pucca (1524) stage. Jute processing is 84% labor cost — this line matters more here than in most agro-processing.",
|
|
275
|
+
parentCode: "Cost of Sales",
|
|
276
|
+
isTotal: false,
|
|
277
|
+
cashFlowCategory: "Operating"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
code: "5712",
|
|
281
|
+
name: "Spoilage / Shrinkage Loss — Agro (P&L realized)",
|
|
282
|
+
category: X$3,
|
|
283
|
+
description: "Realized counterpart to the 1528 balance-sheet allowance. Use the sourced ~3.82% cold-storage baseline as a sanity check, not a universal rate — ambient/traditional storage runs materially higher.",
|
|
284
|
+
parentCode: "Cost of Sales",
|
|
285
|
+
isTotal: false,
|
|
286
|
+
cashFlowCategory: "Operating"
|
|
287
|
+
}
|
|
288
|
+
];
|
|
289
|
+
const AGRO_ACCOUNTS = [
|
|
290
|
+
...AGRO_ASSETS,
|
|
291
|
+
...AGRO_LIABILITIES,
|
|
292
|
+
...AGRO_REVENUE,
|
|
293
|
+
...AGRO_COGS
|
|
294
|
+
];
|
|
295
|
+
//#endregion
|
|
296
|
+
//#region src/verticals/real-estate/accounts.ts
|
|
297
|
+
const A$3 = "Balance Sheet-Asset";
|
|
298
|
+
const L$4 = "Balance Sheet-Liability";
|
|
299
|
+
const REAL_ESTATE_ASSETS = [{
|
|
300
|
+
code: "1540",
|
|
301
|
+
name: "Contract Asset / Unbilled Revenue (Construction)",
|
|
302
|
+
category: A$3,
|
|
303
|
+
description: "IFRS 15 / BFRS 15 \"contract asset\": revenue recognized (e.g. via percentage-of-completion) but the right to consideration is still conditional on further performance, not yet an unconditional billed receivable. Reclassifies to AR (1141) once billed/certified. Distinct from 1144 Retention Money Receivable, which is AFTER billing (client-withheld guarantee money), not before it.",
|
|
304
|
+
parentCode: "Current Assets",
|
|
305
|
+
isTotal: false,
|
|
306
|
+
cashFlowCategory: "Operating"
|
|
307
|
+
}, {
|
|
308
|
+
code: "1541",
|
|
309
|
+
name: "Margin / Lien Deposit Against Bank Guarantee",
|
|
310
|
+
category: A$3,
|
|
311
|
+
description: "Restricted cash a contractor’s own bank holds as a cash margin/lien to issue a performance or bid-bond guarantee to the client. Distinct from free cash (1113) — this amount is encumbered until the guarantee expires/is released. BD tender documents cite performance-security figures of both 3% and 5% of contract value in different sources — reverify the applicable percentage per tender, do not hardcode.",
|
|
312
|
+
parentCode: "Current Assets",
|
|
313
|
+
isTotal: false,
|
|
314
|
+
cashFlowCategory: "Investing"
|
|
315
|
+
}];
|
|
316
|
+
const REAL_ESTATE_LIABILITIES = [{
|
|
317
|
+
code: "2540",
|
|
318
|
+
name: "Landowner Unit-Share Payable (Joint Venture)",
|
|
319
|
+
category: L$4,
|
|
320
|
+
description: "Liability for the landowner’s agreed unit-share consideration under a landowner-developer joint venture (the dominant BD model — typical split ratios 40:60 to 60:40 depending on location, governed by a Joint Venture Agreement + irrevocable POA under the Real Estate Development and Management Act 2010 s.10). Distinct from 2195 (cash advances from third-party BUYERS) and from 5411/5412 (the developer’s own recognized cost) — this is what’s owed TO the landowner in units/consideration, not cash collected from a purchaser. Income Tax Act 2023 s.2(93) treats this land-for-flat exchange as a taxable \"transfer\"; s.115 imposes 15% TDS on cash payments to the landowner (in-kind/unit consideration’s tax treatment is less clear — verify before relying on this for tax computation).",
|
|
321
|
+
parentCode: "Current Liabilities",
|
|
322
|
+
isTotal: false,
|
|
323
|
+
cashFlowCategory: "Operating"
|
|
324
|
+
}, {
|
|
325
|
+
code: "2541",
|
|
326
|
+
name: "Mobilization Advance Received (from Client)",
|
|
327
|
+
category: L$4,
|
|
328
|
+
description: "Contractor-side: advance received FROM the client at contract start (commonly 10-20% globally; BD-specific percentage not independently verified), recovered pro-rata against subsequent progress bills. Distinct from 1198/1191 (advances the entity itself PAYS OUT to subcontractors/suppliers) and from 2195 (developer-side buyer advance) — this is the contractor receiving, not paying.",
|
|
329
|
+
parentCode: "Current Liabilities",
|
|
330
|
+
isTotal: false,
|
|
331
|
+
cashFlowCategory: "Financing"
|
|
332
|
+
}];
|
|
333
|
+
const REAL_ESTATE_ACCOUNTS = [...REAL_ESTATE_ASSETS, ...REAL_ESTATE_LIABILITIES];
|
|
334
|
+
//#endregion
|
|
335
|
+
//#region src/verticals/ngo-microfinance/accounts.ts
|
|
336
|
+
const A$2 = "Balance Sheet-Asset";
|
|
337
|
+
const L$3 = "Balance Sheet-Liability";
|
|
338
|
+
const E = "Balance Sheet-Equity";
|
|
339
|
+
const I$2 = "Income Statement-Income";
|
|
340
|
+
const NGO_MFI_ASSETS = [
|
|
341
|
+
{
|
|
342
|
+
code: "1560",
|
|
343
|
+
name: "Loan Portfolio — General Microcredit (gross)",
|
|
344
|
+
category: A$2,
|
|
345
|
+
description: "Core weekly-installment, group-liability microcredit product. MRA (Microcredit Regulatory Authority) caps the service-charge rate on declining-balance basis — historically 27% p.a. (2010), reduced to 24% p.a. (2019); reverify against a current MRA notice before hardcoding.",
|
|
346
|
+
parentCode: "Current Assets",
|
|
347
|
+
isTotal: false,
|
|
348
|
+
cashFlowCategory: "Operating"
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
code: "1561",
|
|
352
|
+
name: "Loan Portfolio — Agricultural / Seasonal Loan (gross)",
|
|
353
|
+
category: A$2,
|
|
354
|
+
description: "Larger-ticket, crop-cycle-aligned loan product, frequently financed through PKSF on-lending given its tenor doesn’t fit the classic weekly-group model funded purely from member savings.",
|
|
355
|
+
parentCode: "Current Assets",
|
|
356
|
+
isTotal: false,
|
|
357
|
+
cashFlowCategory: "Operating"
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
code: "1562",
|
|
361
|
+
name: "Loan Portfolio — Small Enterprise / SME Microloan (gross)",
|
|
362
|
+
category: A$2,
|
|
363
|
+
description: "Larger-ticket, individual-liability (not group-liability) product tier.",
|
|
364
|
+
parentCode: "Current Assets",
|
|
365
|
+
isTotal: false,
|
|
366
|
+
cashFlowCategory: "Operating"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
code: "1563",
|
|
370
|
+
name: "Loan Portfolio — Emergency / Disaster Relief Loan (gross)",
|
|
371
|
+
category: A$2,
|
|
372
|
+
description: "Named real product category (e.g. BRAC’s Livelihoods Restoration Loan) distinct from routine credit lines, often carrying its own PKSF service-charge tier.",
|
|
373
|
+
parentCode: "Current Assets",
|
|
374
|
+
isTotal: false,
|
|
375
|
+
cashFlowCategory: "Operating"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
code: "1564",
|
|
379
|
+
name: "Interest / Service Charge Receivable — Microfinance",
|
|
380
|
+
category: A$2,
|
|
381
|
+
description: "Accrued but uncollected service charge on performing microloans, distinct from generic 1154 given the MFI-specific suspense mechanic (see 1565).",
|
|
382
|
+
parentCode: "Current Assets",
|
|
383
|
+
isTotal: false,
|
|
384
|
+
cashFlowCategory: "Operating"
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
code: "1565",
|
|
388
|
+
name: "Interest-in-Suspense — Microfinance (contra-asset)",
|
|
389
|
+
category: A$2,
|
|
390
|
+
description: "Mirrors the bank-sector interest-suspense mechanic (accrued interest on a classified/watch loan routes here instead of to income until collected). No MRA-specific primary source confirms an identical rule for NGO-MFIs distinct from Bangladesh Bank’s bank-oriented framework — model classification-day thresholds and this suspense mechanic as configurable policy per MFI, not a hardcoded universal rule.",
|
|
391
|
+
parentCode: "Current Assets",
|
|
392
|
+
isTotal: false,
|
|
393
|
+
cashFlowCategory: "Operating"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
code: "1566",
|
|
397
|
+
name: "Cash / Bank — Project-Restricted Account (NGOAB FD-6)",
|
|
398
|
+
category: A$2,
|
|
399
|
+
description: "Foreign-funded NGOs must channel each approved FD-6 project’s donation through its OWN dedicated scheduled-bank account — a legal requirement under the Foreign Donations (Voluntary Activities) Regulation Act, 2016, not just best practice. Distinct from generic bank accounts (1113 etc.) and from the general-purpose fund.",
|
|
400
|
+
parentCode: "Current Assets",
|
|
401
|
+
isTotal: false,
|
|
402
|
+
cashFlowCategory: "Operating"
|
|
403
|
+
}
|
|
404
|
+
];
|
|
405
|
+
const NGO_MFI_LIABILITIES = [
|
|
406
|
+
{
|
|
407
|
+
code: "2560",
|
|
408
|
+
name: "Loan Payable — PKSF (per program/tranche)",
|
|
409
|
+
category: L$3,
|
|
410
|
+
description: "PKSF (the apex wholesale lender, ~200-500 Partner Organizations) lends at differentiated program rates (e.g. one named program: 0.5% PKSF→PO service charge vs. 4% PO→borrower) — track per-program/tranche rather than as one monolithic liability, since rate heterogeneity across programs is real and documented.",
|
|
411
|
+
parentCode: "Current Liabilities",
|
|
412
|
+
isTotal: false,
|
|
413
|
+
cashFlowCategory: "Financing"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
code: "2561",
|
|
417
|
+
name: "Service Charge Payable — PKSF (accrued)",
|
|
418
|
+
category: L$3,
|
|
419
|
+
description: "Mirrors PKSF’s own audited \"Schedule of Service Charge Receivables\" / \"Schedule of Service Charges\" structure (confirmed present in PKSF’s own financial statements) — the PO-side counterpart to what PKSF tracks as receivable from the PO.",
|
|
420
|
+
parentCode: "Current Liabilities",
|
|
421
|
+
isTotal: false,
|
|
422
|
+
cashFlowCategory: "Financing"
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
code: "2562",
|
|
426
|
+
name: "Member Savings — Compulsory Deposits",
|
|
427
|
+
category: L$3,
|
|
428
|
+
description: "MRA structurally caps deposit-taking relative to lending — sourced (but not primary-text-verified) figures cite deposit balance capped at 30% of loan balance, weekly compulsory collection capped at ~Tk 30/member, and continuous collection capped at 8 weeks unless tied to an active loan. These are member-owned deposits (a liability), never organizational equity — treat exact caps as configurable, reverify against the MRA Rules 2010 gazette text before enforcing.",
|
|
429
|
+
parentCode: "Current Liabilities",
|
|
430
|
+
isTotal: false,
|
|
431
|
+
cashFlowCategory: "Operating"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
code: "2563",
|
|
435
|
+
name: "Member Savings — Voluntary Deposits",
|
|
436
|
+
category: L$3,
|
|
437
|
+
description: "Distinct from 2562 (compulsory) — also counted toward the same 30%-of-loan-balance structural cap.",
|
|
438
|
+
parentCode: "Current Liabilities",
|
|
439
|
+
isTotal: false,
|
|
440
|
+
cashFlowCategory: "Operating"
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
code: "2564",
|
|
444
|
+
name: "Guarantee Fee Payable — PKSF Credit Enhancement Scheme",
|
|
445
|
+
category: L$3,
|
|
446
|
+
description: "PKSF’s bank-loan guarantee facility for MFIs charges a one-time 0.5% commission on the guaranteed amount — a contingent-liability/guarantee-fee product, not a direct loan. Only relevant if the MFI actually uses this scheme.",
|
|
447
|
+
parentCode: "Current Liabilities",
|
|
448
|
+
isTotal: false,
|
|
449
|
+
cashFlowCategory: "Operating"
|
|
450
|
+
}
|
|
451
|
+
];
|
|
452
|
+
const NGO_MFI_EQUITY = [{
|
|
453
|
+
code: "3510",
|
|
454
|
+
name: "Restricted Project Fund (NGOAB FD-6)",
|
|
455
|
+
category: E,
|
|
456
|
+
description: "Per-project restricted fund balance tracking an NGOAB-approved foreign-funded project budget, mirroring the mandatory segregated bank account (1566). Distinct from the generic 3402 Restricted Fund (donor-designated) when project-level, not just donor-level, tracking is needed.",
|
|
457
|
+
parentCode: "Shareholder Equity",
|
|
458
|
+
isTotal: false,
|
|
459
|
+
cashFlowCategory: null
|
|
460
|
+
}];
|
|
461
|
+
const NGO_MFI_REVENUE = [{
|
|
462
|
+
code: "4550",
|
|
463
|
+
name: "PKSF Incentive / Rebate Income",
|
|
464
|
+
category: I$2,
|
|
465
|
+
description: "Performance-based rebate some PKSF programs pay to partner organizations — optional, verify per-program before assuming it applies.",
|
|
466
|
+
parentCode: "Revenue",
|
|
467
|
+
isTotal: false,
|
|
468
|
+
cashFlowCategory: "Operating"
|
|
469
|
+
}, {
|
|
470
|
+
code: "4551",
|
|
471
|
+
name: "Loan Processing / Application Fee Income",
|
|
472
|
+
category: I$2,
|
|
473
|
+
description: "Distinct from 4205 (ongoing service-charge income) — a one-time origination fee. One trade-press source cites an MRA cap around Tk 15 and a ban on deducting it from disbursed principal (\"Circular 5\") — single-sourced, treat as unverified until confirmed against a primary MRA circular.",
|
|
474
|
+
parentCode: "Revenue",
|
|
475
|
+
isTotal: false,
|
|
476
|
+
cashFlowCategory: "Operating"
|
|
477
|
+
}];
|
|
478
|
+
const NGO_MFI_ACCOUNTS = [
|
|
479
|
+
...NGO_MFI_ASSETS,
|
|
480
|
+
...NGO_MFI_LIABILITIES,
|
|
481
|
+
...NGO_MFI_EQUITY,
|
|
482
|
+
...NGO_MFI_REVENUE
|
|
483
|
+
];
|
|
484
|
+
//#endregion
|
|
485
|
+
//#region src/verticals/restaurant/accounts.ts
|
|
486
|
+
const A$1 = "Balance Sheet-Asset";
|
|
487
|
+
const L$2 = "Balance Sheet-Liability";
|
|
488
|
+
const I$1 = "Income Statement-Income";
|
|
489
|
+
const X$2 = "Income Statement-Expense";
|
|
490
|
+
const RESTAURANT_ASSETS = [{
|
|
491
|
+
code: "1550",
|
|
492
|
+
name: "Beverage Inventory (Alcoholic, Licensed)",
|
|
493
|
+
category: A$1,
|
|
494
|
+
description: "Alcoholic beverage stock, distinct from 1178 generic food/beverage stock given separate licensing requirements and tax treatment for licensed establishments.",
|
|
495
|
+
parentCode: "Current Assets",
|
|
496
|
+
isTotal: false,
|
|
497
|
+
cashFlowCategory: "Operating"
|
|
498
|
+
}];
|
|
499
|
+
const RESTAURANT_LIABILITIES = [{
|
|
500
|
+
code: "2580",
|
|
501
|
+
name: "Service Charge Payable (Staff Welfare Fund)",
|
|
502
|
+
category: L$2,
|
|
503
|
+
description: "The common 5-10% \"service charge\" line BD restaurants add on top of the bill, distinct from VAT. NO Bangladesh Labour Act 2006 (as amended) provision could be verified mandating distribution to staff — this is industry custom, not confirmed hard law. Use this account when the establishment’s own policy commits the charge to staff (pass-through, not revenue); if retained as company income instead, use 4570.",
|
|
504
|
+
parentCode: "Current Liabilities",
|
|
505
|
+
isTotal: false,
|
|
506
|
+
cashFlowCategory: "Operating"
|
|
507
|
+
}, {
|
|
508
|
+
code: "2581",
|
|
509
|
+
name: "Franchise Royalty Payable (Cross-Border)",
|
|
510
|
+
category: L$2,
|
|
511
|
+
description: "Royalty payable to a foreign franchisor (e.g. an international QSR brand’s BD master franchisee). Cross-border royalty payments attract 20% withholding tax under the Income Tax Act 2023, reducible under an applicable DTAA — distinct from the generic 2123 Royalty Payable so the WHT/DTAA obligation stays visible. No actual BD franchisee’s royalty percentage could be verified publicly (global QSR benchmark ~4-6% + ~4-4.5% ad fund is a reference point only, not a confirmed BD figure).",
|
|
512
|
+
parentCode: "Current Liabilities",
|
|
513
|
+
isTotal: false,
|
|
514
|
+
cashFlowCategory: "Operating"
|
|
515
|
+
}];
|
|
516
|
+
const RESTAURANT_REVENUE = [{
|
|
517
|
+
code: "4570",
|
|
518
|
+
name: "Service Charge Revenue (Retained)",
|
|
519
|
+
category: I$1,
|
|
520
|
+
description: "Use this instead of 2580 when the establishment retains the service charge as its own income rather than committing it to staff — a business-policy choice, not a legal default either way (no statutory mandate was confirmed for either treatment).",
|
|
521
|
+
parentCode: "Revenue",
|
|
522
|
+
isTotal: false,
|
|
523
|
+
cashFlowCategory: "Operating"
|
|
524
|
+
}, {
|
|
525
|
+
code: "4571",
|
|
526
|
+
name: "Delivery Aggregator Commission (Contra-Revenue)",
|
|
527
|
+
category: I$1,
|
|
528
|
+
description: "Contra-revenue for the commission foodpanda/Pathao Food and similar aggregators net off before remittance — confirmed via actual foodpanda invoice samples to be a NET settlement (aggregator self-charges 5% VAT on its own fee within the same invoice), not a separate AP invoice cycle. Reported commission range 10-40%+ across sources — do not hardcode a rate.",
|
|
529
|
+
parentCode: "Revenue",
|
|
530
|
+
isTotal: false,
|
|
531
|
+
cashFlowCategory: "Operating"
|
|
532
|
+
}];
|
|
533
|
+
const RESTAURANT_COGS = [{
|
|
534
|
+
code: "5730",
|
|
535
|
+
name: "Kitchen Consumables & Delivery Packaging",
|
|
536
|
+
category: X$2,
|
|
537
|
+
description: "Takeaway/delivery-specific packaging consumables (increasingly material given Foodpanda/Pathao Food volume) — distinct from 5102 generic packing materials and from 5317 production packaging given a different cost driver (delivery order volume, not production runs).",
|
|
538
|
+
parentCode: "Cost of Sales",
|
|
539
|
+
isTotal: false,
|
|
540
|
+
cashFlowCategory: "Operating"
|
|
541
|
+
}];
|
|
542
|
+
const RESTAURANT_ACCOUNTS = [
|
|
543
|
+
...RESTAURANT_ASSETS,
|
|
544
|
+
...RESTAURANT_LIABILITIES,
|
|
545
|
+
...RESTAURANT_REVENUE,
|
|
546
|
+
...RESTAURANT_COGS
|
|
547
|
+
];
|
|
548
|
+
//#endregion
|
|
549
|
+
//#region src/verticals/rmg-enhancement/accounts.ts
|
|
550
|
+
const A = "Balance Sheet-Asset";
|
|
551
|
+
const L$1 = "Balance Sheet-Liability";
|
|
552
|
+
const I = "Income Statement-Income";
|
|
553
|
+
const X$1 = "Income Statement-Expense";
|
|
554
|
+
const RMG_ENHANCEMENT_ASSETS = [{
|
|
555
|
+
code: "1580",
|
|
556
|
+
name: "Cash Export Incentive Receivable",
|
|
557
|
+
category: A,
|
|
558
|
+
description: "Recognize at export-proceeds realization / claim-filing (per Bangladesh Bank FEPD circular), not at eventual cash disbursement. The claim process is genuinely multi-month: exporter files within 180 days of proceeds realization with ~20 supporting documents (Proceeds Realization Certificate, UD, EXP form, trade-body certificates), a BB-approved external auditor certifies the amount, then BB disburses via the bank — net of a 3% source tax (see 4590). Pairs with 4312 (existing core-chart income line).",
|
|
559
|
+
parentCode: "Current Assets",
|
|
560
|
+
isTotal: false,
|
|
561
|
+
cashFlowCategory: "Operating"
|
|
562
|
+
}, {
|
|
563
|
+
code: "1581",
|
|
564
|
+
name: "Export Incentive Advance (Qurds) — Clearing",
|
|
565
|
+
category: A,
|
|
566
|
+
description: "Once the auditor’s certificate exists but before Bangladesh Bank’s actual disbursement, the exporter’s bank can advance up to 70% of the certified claim (\"Qurds\" advance). Track this separately from 1580 so it can be netted against the eventual BB disbursement without double-counting.",
|
|
567
|
+
parentCode: "Current Assets",
|
|
568
|
+
isTotal: false,
|
|
569
|
+
cashFlowCategory: "Operating"
|
|
570
|
+
}];
|
|
571
|
+
const RMG_ENHANCEMENT_LIABILITIES = [{
|
|
572
|
+
code: "2590",
|
|
573
|
+
name: "FDBP — Bank Advance Against Export Bills",
|
|
574
|
+
category: L$1,
|
|
575
|
+
description: "Bank financing (a demand loan against the export bill of exchange/shipping documents), NOT a government incentive — corrects a prior mischaracterization of FDBP as a \"~0.6% incentive rate.\" The bank credits the exporter before the foreign buyer pays; tenure typically up to 21 days interest-free for sight L/Cs, with normal interest/discount charges beyond that window or on usance bills (see 6960). Nets against the export trade receivable, not against 4312 incentive income.",
|
|
576
|
+
parentCode: "Current Liabilities",
|
|
577
|
+
isTotal: false,
|
|
578
|
+
cashFlowCategory: "Financing"
|
|
579
|
+
}];
|
|
580
|
+
const RMG_ENHANCEMENT_REVENUE = [{
|
|
581
|
+
code: "4590",
|
|
582
|
+
name: "Withholding Tax on Export Cash Incentive (Contra-Income)",
|
|
583
|
+
category: I,
|
|
584
|
+
description: "Bangladesh Bank’s disbursement process nets a 3% source tax before crediting the exporter — a dedicated contra-income line keeps gross incentive income (4312) and the tax deduction from being conflated, and feeds the BD tax-engine’s TDS-style treatment for this specific flow. Verify the 3% rate against a current NBR SRO/circular before relying on it — sourced from a single circular description, not independently cross-checked.",
|
|
585
|
+
parentCode: "Revenue",
|
|
586
|
+
isTotal: false,
|
|
587
|
+
cashFlowCategory: "Operating"
|
|
588
|
+
}];
|
|
589
|
+
const RMG_ENHANCEMENT_EXPENSES = [{
|
|
590
|
+
code: "6960",
|
|
591
|
+
name: "Bank Discount / Interest Expense — Export Bill Negotiation (FDBP)",
|
|
592
|
+
category: X$1,
|
|
593
|
+
description: "Genuine financing cost paired with 2590: interest/discount the negotiating bank charges beyond the interest-free window (sight L/C >21 days) or on usance bills. Distinct from 6503 (interest on LIM/LATR/PAD, which are import-side facilities) — this is export-bill discounting specifically.",
|
|
594
|
+
parentCode: "Operating Expenses",
|
|
595
|
+
isTotal: false,
|
|
596
|
+
cashFlowCategory: "Financing"
|
|
597
|
+
}];
|
|
598
|
+
const RMG_ENHANCEMENT_ACCOUNTS = [
|
|
599
|
+
...RMG_ENHANCEMENT_ASSETS,
|
|
600
|
+
...RMG_ENHANCEMENT_LIABILITIES,
|
|
601
|
+
...RMG_ENHANCEMENT_REVENUE,
|
|
602
|
+
...RMG_ENHANCEMENT_EXPENSES
|
|
603
|
+
];
|
|
604
|
+
//#endregion
|
|
605
|
+
//#region src/verticals/hospital-enhancement/accounts.ts
|
|
606
|
+
const L = "Balance Sheet-Liability";
|
|
607
|
+
const X = "Income Statement-Expense";
|
|
608
|
+
const HOSPITAL_ENHANCEMENT_LIABILITIES = [{
|
|
609
|
+
code: "2600",
|
|
610
|
+
name: "Consultant / Doctor Fee Payable",
|
|
611
|
+
category: L,
|
|
612
|
+
description: "The near-universal legitimate model: the hospital collects the patient’s consultation/treatment fee gross and owes a defined share to the treating/consulting doctor (visiting consultants are typically NOT salaried employees — they commonly charge per-visit, e.g. reported Tk 500-1,200+ per visit). Pairs with 6970 so the P&L shows consultant payout as an expense against gross patient-service revenue, matching how hospitals actually record it. This is distinct from — and NOT a substitute for — the diagnostic-referral-commission practice this vertical deliberately excludes; this account is for a doctor’s OWN consultation fee, collected on their behalf, not a kickback for referring a patient elsewhere.",
|
|
613
|
+
parentCode: "Current Liabilities",
|
|
614
|
+
isTotal: false,
|
|
615
|
+
cashFlowCategory: "Operating"
|
|
616
|
+
}, {
|
|
617
|
+
code: "2601",
|
|
618
|
+
name: "Patient Advance / Admission Deposit Received",
|
|
619
|
+
category: L,
|
|
620
|
+
description: "Pre-admission or pre-surgery deposit, distinct from the generic 2191 Advance from Customers given real, sourced dispute/aging dynamics specific to hospital billing — BD private hospitals commonly require an admission deposit, and unpaid-balance disputes at discharge (occasionally escalating to body/patient detention, which courts have repeatedly ruled against but enforcement is inconsistent) make this worth tracking separately for aging and dispute-resolution reporting.",
|
|
621
|
+
parentCode: "Current Liabilities",
|
|
622
|
+
isTotal: false,
|
|
623
|
+
cashFlowCategory: "Operating"
|
|
624
|
+
}];
|
|
625
|
+
const HOSPITAL_ENHANCEMENT_EXPENSES = [{
|
|
626
|
+
code: "6970",
|
|
627
|
+
name: "Consultant / Doctor Fee Expense",
|
|
628
|
+
category: X,
|
|
629
|
+
description: "Paired with 2600 — the hospital’s own expense recognition for the doctor’s collected-and-remitted consultation fee share, keeping gross patient-service revenue (4137) intact rather than netting the doctor’s cut directly against it.",
|
|
630
|
+
parentCode: "Operating Expenses",
|
|
631
|
+
isTotal: false,
|
|
632
|
+
cashFlowCategory: "Operating"
|
|
633
|
+
}];
|
|
634
|
+
const HOSPITAL_ENHANCEMENT_ACCOUNTS = [...HOSPITAL_ENHANCEMENT_LIABILITIES, ...HOSPITAL_ENHANCEMENT_EXPENSES];
|
|
635
|
+
//#endregion
|
|
636
|
+
//#region src/verticals/index.ts
|
|
637
|
+
/** Reserved numeric-code blocks per category, one per vertical — see README.md. Non-overlapping by design; any new vertical must claim an unused block here before adding accounts. */
|
|
638
|
+
const CODE_BLOCKS = {
|
|
639
|
+
school: {
|
|
640
|
+
liabilities: "2510-2519",
|
|
641
|
+
revenue: "4510-4519",
|
|
642
|
+
expenses: "6910-6919"
|
|
643
|
+
},
|
|
644
|
+
agro: {
|
|
645
|
+
assets: "1520-1539",
|
|
646
|
+
liabilities: "2520-2539",
|
|
647
|
+
revenue: "4520-4539",
|
|
648
|
+
cogs: "5710-5719"
|
|
649
|
+
},
|
|
650
|
+
"real-estate": {
|
|
651
|
+
assets: "1540-1549",
|
|
652
|
+
liabilities: "2540-2549"
|
|
653
|
+
},
|
|
654
|
+
"ngo-microfinance": {
|
|
655
|
+
assets: "1560-1579",
|
|
656
|
+
liabilities: "2560-2579",
|
|
657
|
+
equity: "3510-3519",
|
|
658
|
+
revenue: "4550-4569"
|
|
659
|
+
},
|
|
660
|
+
restaurant: {
|
|
661
|
+
assets: "1550-1559",
|
|
662
|
+
liabilities: "2580-2589",
|
|
663
|
+
revenue: "4570-4579",
|
|
664
|
+
cogs: "5730-5739"
|
|
665
|
+
},
|
|
666
|
+
"rmg-enhancement": {
|
|
667
|
+
assets: "1580-1589",
|
|
668
|
+
liabilities: "2590-2599",
|
|
669
|
+
revenue: "4590-4599",
|
|
670
|
+
expenses: "6960-6969"
|
|
671
|
+
},
|
|
672
|
+
"hospital-enhancement": {
|
|
673
|
+
liabilities: "2600-2609",
|
|
674
|
+
expenses: "6970-6979"
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
const VERTICAL_ACCOUNTS = {
|
|
678
|
+
school: SCHOOL_ACCOUNTS,
|
|
679
|
+
agro: AGRO_ACCOUNTS,
|
|
680
|
+
"real-estate": REAL_ESTATE_ACCOUNTS,
|
|
681
|
+
"ngo-microfinance": NGO_MFI_ACCOUNTS,
|
|
682
|
+
restaurant: RESTAURANT_ACCOUNTS,
|
|
683
|
+
"rmg-enhancement": RMG_ENHANCEMENT_ACCOUNTS,
|
|
684
|
+
"hospital-enhancement": HOSPITAL_ENHANCEMENT_ACCOUNTS
|
|
685
|
+
};
|
|
686
|
+
/**
|
|
687
|
+
* Compose the core chart with one or more verticals by name. Order is
|
|
688
|
+
* preserved (core first, then verticals in the order given); duplicate
|
|
689
|
+
* vertical names are applied once.
|
|
690
|
+
*/
|
|
691
|
+
function applyVerticals(coreAccountTypes, verticals) {
|
|
692
|
+
const seen = /* @__PURE__ */ new Set();
|
|
693
|
+
const additions = [];
|
|
694
|
+
for (const v of verticals) {
|
|
695
|
+
if (seen.has(v)) continue;
|
|
696
|
+
seen.add(v);
|
|
697
|
+
additions.push(...VERTICAL_ACCOUNTS[v]);
|
|
698
|
+
}
|
|
699
|
+
return [...coreAccountTypes, ...additions];
|
|
700
|
+
}
|
|
701
|
+
//#endregion
|
|
702
|
+
export { AGRO_ACCOUNTS, CODE_BLOCKS, HOSPITAL_ENHANCEMENT_ACCOUNTS, NGO_MFI_ACCOUNTS, REAL_ESTATE_ACCOUNTS, RESTAURANT_ACCOUNTS, RMG_ENHANCEMENT_ACCOUNTS, SCHOOL_ACCOUNTS, applyVerticals };
|