PlanBD

Regulation explorer

Browse seeded DAP tables — plot FAR, all 68 density blocks, incentives, land use, and amendments. The Data & methodology tab documents sources, verification, Bidhimala 2025 rules, and how the calculator computes each output.

DAP Amendment 2 + Bidhimala 2025 (SRO 466/2025 + SRO 469-Law/2025)
SRO-466-2025 · Gazetted 12/14/2025 · 806 plot FAR tiers · 68 density blocks · 49 land-use rules

Overview

PlanBD's regulatory data and FAR calculator are built from the DAP 2022–2035 framework as amended by SRO 466/2025 (gazetted 14 December 2025). This page documents how we collected tables, how we verified them, and exactly how the calculator computes Plot FAR, Area FAR, incentives, and dwelling units.

SRO-466-2025
806 plot FAR tiers
68 density blocks
51 categories
6 incentives
49 land-use rules

Current regulatory version: DAP Amendment 2 + Bidhimala 2025 (SRO 466/2025 + SRO 469-Law/2025) (gazetted 12/14/2025). Calculations always use the version where isCurrent = true. Beyond FAR caps, the engine applies Bidhimala 2025 Table 3 (ground coverage bands) and Table 1 (setbacks by storey count), then builds a 14-section development report with audit trail.

Live data snapshot

Counts below are loaded from PostgreSQL for the current version and match what you see in the explorer tabs above.

Plot FAR tiers

806

Appendix 3.5 / Table-5

Density blocks

68

Appendix 3.6 (target: 68)

Building categories

51

Bidhimala Table 5 + sub-types

Incentive rules

6

SRO 466/2025 schedule

Land-use rules

49

17 zoning types

Amendments

1

SRO log in DB

How we collected the data

1. Official & mirror sources

RAJUK's own PDFs on rajuk.gov.bd often return HTTP 403 to automated download. We therefore used Shellmark Limited's Dec 2025 publication — which reproduces the gazetted Appendix 3.5 and 3.6 tables and provides worked FAR examples — as the primary transcription source. These were cross-checked against news/industry reporting and saved locally under docs/.

  • Plot FAR (Appendix 3.5 / Sarani 3.5): Downloaded Plot-FAR-Chart-for-All-Occupancies.pdf (6 scanned pages). Text extraction failed (image-only PDF). Tables were transcribed manually from rendered PNG pages and Shellmark's web table into prisma/data/plot-far-appendix-35.ts. Includes A1–A6 × 3 location contexts, B1–K3 sub-types, and legacy B–K aliases.
  • Area FAR (Appendix 3.6 / Sarani 3.6): Downloaded Area-FAR-Table-scaled.webp. All 68 merged density blocks (SRO 466/2025 replaces 275 ward-based blocks) are transcribed in prisma/data/density-blocks-appendix-36.ts and seeded into density_blocks, area_far_rules, and areas_in_block. Blocks 29 and 42 merge sub-rows 29A+29B and 42A+42B from the official table.
  • Building categories: From Dhaka Imarat Nirman Bidhimala 2025 Table 5 — A1–A6 residential sub-types plus B–M major groups, plus Table-5 sub-types B1–K3 seeded for calculator compatibility.
  • GIS context: Probed RAJUK Masterplan ArcGIS — public WMTS tiles for land use, overlays (TOD, heritage), transport, RS Mauza. Documented in docs/dataset-inventory.md. Vector query/export requires a token (rajuk_db).
  • Bidhimala 2025 — Table 3 (ground coverage): Min/max mandatory ground coverage (MGC) by plot area band and location context, implemented in src/lib/bidhimala-table3.ts (not flat DB rows). Drives min / mid / max coverage scenarios in the calculator.
  • Bidhimala 2025 — Table 1 (setbacks): Front, rear, side, and building-to-building gaps by total storey count, in src/lib/bidhimala-setbacks.ts. Matched to recommended G+N height from floor scenarios.
  • Incentive schedule: Shellmark's six bonus types (Dec 2025) seeded in prisma/seed.ts. Dynamic amounts (plot unification by katha, wide-road bonus) computed in src/lib/incentive-far.ts, not stored as flat DB values.

2. Seed pipeline

npm run db:seed
  → clearRegulatoryData()
  → regulatory versions (DAP 2022, SRO 271/2023, SRO 466/2025 current)
  → building categories + sub-types
  → PLOT_FAR_RULE_SETS → plot_far_rules (806 rows loaded in explorer)
  → DENSITY_BLOCKS_APPENDIX_36 → density_blocks + area_far_rules + areas_in_block
  → incentive_far_rules (6 rules)
  → ground coverage, setbacks, height, land use, special zones, articles

3. Road-width bands (Table-5 columns)

Nine metre-based columns from gazette Table-5 — stored as discrete tiers in the DB, then interpolated at calculation time:

BandMin (m)Max (m)≈ feet (min)
11.82.4995.9 ft
22.53.6598.2 ft
33.664.87912.0 ft
44.885.99916.0 ft
568.99919.7 ft
6911.99929.5 ft
71217.99939.4 ft
81823.99959.1 ft
92478.7 ft

How we verified

Automated cross-checks

  • Full db:seed completes with expected counts: 68 blocks, 806 plot FAR tiers, 6 incentives, 51 building categories.
  • Spot checks after reseed: DB-03 Bashundhara Area FAR = 4.1; DB-54 Purbachal = 4.5; A3 central @ 6–9 m band = 3.25 (before interpolation).
  • Shellmark worked examples run through runFarEngine() — Ex-01 and Ex-02 match within ±0.02 FAR (interpolation rounding).

Shellmark Example-01 (Purbachal)

5 katha, 75 ft road, A3, block 54
Plot FAR (interpolated)4.65 → engine 4.66
Area FAR4.50 ✓
Base FAR4.50 ✓
Bonus (plot unification)+0.20 ✓
Total FAR4.65 ✓ (capped at max = Plot FAR)
DU11 ✓ (9.5 + 10% → ceil)

Shellmark Example-02 (Bashundhara + TOD)

4 katha, 25 ft road, A3, block 3, TOD on
Plot FAR (interpolated)3.38 → engine 3.39
Area FAR4.10 ✓
Base FAR3.38 ✓
Bonus (0.2 unification + 0.5 TOD)+0.70 ✓
Total FAR4.08 → engine 4.09
DU9 ✓

Third-party formula confirmation

The Financial Express (Nov 2025) quotes a major developer: the lowest of Plot FAR and Area FAR is Base FAR; the highest is Maximum FAR; bonus is added to Base but cannot exceed Maximum. This matches Shellmark's worked examples and our engine.

FAR calculation formulas

The calculator implements the Dec 2025 DAP arithmetic in this order:

// 1. Plot FAR — from Appendix 3.5 (interpolated)
PlotFAR = interpolate(category, locationContext, roadWidthM, plotAreaM2)

// 2. Area FAR — from density block (Appendix 3.6)
AreaFAR = densityBlock.maxAreaFar

// 3. Base & ceiling
BaseFAR    = min(PlotFAR, AreaFAR)
MaximumFAR = max(PlotFAR, AreaFAR)

// 4. Incentive FAR (automatic + user-selected)
IncentiveFAR = plotUnification(katha) + Σ eligible bonuses

// 5. Total usable FAR
TotalFAR = min(BaseFAR + IncentiveFAR, MaximumFAR)

// 6. Gross floor area
MaxBuildableArea = TotalFAR × PlotAreaM²

Important: Total FAR is not capped at min(PlotFAR, AreaFAR). Bonuses can raise usable FAR up to max(PlotFAR, AreaFAR) — e.g. when Area FAR exceeds Plot FAR, TOD + unification can lift total above the plot-limited base.

Plot FAR lookup (Appendix 3.5)

Inputs: building category code, location context (CENTRAL_DHAKA, OUTSIDE_CENTRAL, OTHER_CITY_AREA), adjacent road width in metres, plot area in m².

// Load all plot_far_rules for (category, context)
// Sort bands by minRoadWidthM
// For road width R between band lows L₁ and L₂:
PlotFAR = FAR₁ + (R - L₁) / (L₂ - L₁) × (FAR₂ - FAR₁)

// Example: A3 central, 25 ft = 7.62 m between 6 m (3.25) and 9 m (3.50)
// → 3.25 + (7.62-6)/(9-6) × 0.25 = 3.385 ≈ 3.38

Implementation: src/lib/plot-far-interpolate.ts → called from runFarEngine(). A warning is added to results when interpolation is used. Values marked null in the source table mean "not permitted" at that road width.

Purbachal, Jhilmil, and central Dhaka residential rows share the CENTRAL_DHAKA context per Table-5 notes.

Incentive / Bonus FAR

Per Shellmark / SRO 466/2025 schedule. Plot unification is automatic; others are user-toggled in the calculator.

CodeBonusHow applied
PLOT_UNIFICATION0.2 – 0.75Auto by katha: ≤5→0.2, ≤10→0.35, ≤15→0.5, ≤20→0.65, >20→0.75
GREEN_BUILDING+0.50Toggle — green building certification
CIVIC_OPEN_SPACE+0.50Toggle — public/civic open space (new provision)
LOW_COST_HOUSING+0.50 / +0.75Toggle — A6, ≥5 units; ≥10 katha→0.5, ≥20→0.75
TOD_TRANSIT+0.50Toggle — within TOD overlay (~200 m per Shellmark Ex-02)
WIDE_ROAD_BONUS+0.02/ftToggle — (roadFt − 30) × 0.02, max +1.0

Live rules in DB match the explorer Incentives tab (6 rows). Dynamic codes store bonusFar = 0 in DB; actual amount computed at runtime in computeIncentiveFar().

Dwelling unit estimate

katha = plotAreaM² / 66.89   // 720 sq ft per katha

PermittedDU = ceil(desirableDensity × katha)     // Appendix 3.6 density × katha
A3 bonus    = ceil(PermittedDU × 0.10)           // DAP §3.6.4.1(d) discretionary +10%
MaximumDU   = PermittedDU + A3 bonus             // A3 only; others use PermittedDU

FAR-basedDU = floor(maxBuildableAreaM² / avgUnitSqM)   // reference only

desirableDensity is DU per katha from the selected density block. The report shows permitted, maximum (A3 +10%), and FAR-based unit counts. If no block is assigned, density-method estimates are omitted.

Ground coverage — Bidhimala Table 3

Bidhimala 2025 §45(1) Table 3 sets a min–max mandatory ground coverage (MGC) band by plot area (m²) and location context (CENTRAL_DHAKA vs OUTSIDE_CENTRAL / OTHER_CITY_AREA).

row = resolveBidhimalaTable3(plotAreaM², locationContext)

minCoverage%  = row.minCoveragePercent
maxCoverage%  = row.maxCoveragePercent
midCoverage%  = (min + max) / 2
openSpace%    = row.mandatoryOpenSpacePercent

minFootprint  = plotArea × minCoverage%
maxFootprint  = plotArea × maxCoverage%

Implementation: src/lib/bidhimala-table3.ts. The engine uses max coverage for the primary footprint cap; min and mid drive the three floor scenarios. Seeded ground_coverage_rules in the DB are a fallback when Table 3 does not match.

Setbacks — Bidhimala Table 1

After floor scenarios estimate total storeys (G+N), setbacks are resolved from Bidhimala 2025 §41 Table 1 by storey band:

storeys = recommended scenario totalStoreys   // e.g. G+7 → 8 storeys
row     = resolveBidhimalaSetbacks(storeys)

front ≥ row.frontM m     (from plot boundary; §41(1) road-centre rule noted in report)
rear  ≥ row.rearM m
side  ≥ row.sideM m      (each side)
gap   ≥ row.interBuildingM m

Implementation: src/lib/bidhimala-setbacks.ts. Four storey bands (up to G+6, G+7–G+9, G+10–G+13, G+14+). Corner plots may require different side treatment — flagged as a warning in results.

Floor scenarios (G+N)

footprintM² = (coverage% / 100) × plotAreaM²
upperFloors = ceil(maxBuildableAreaM² / footprintM²)
totalStoreys = upperFloors + 1          // ground floor excluded from FAR area
storeyLabel  = "G+" + upperFloors
heightM      ≈ totalStoreys × 3.2 m

Three scenarios are built at min, mid, and max Table-3 coverage. Ground floor is treated as parking / lobby (FAR-excluded); upper floors carry the buildable area. Implementation: src/lib/floor-scenarios.ts build-result-analysis.ts for the report cards and bar charts.

Not yet modelled (Shellmark steps 18–25): GF lift/lobby deduction, per-floor net area split, balcony allowance (30% front / 2.5% floor), planter boxes (2.5% green). These are design-stage refinements beyond the FAR cap.

Development report pipeline

fetch-and-run.ts loads rules from PostgreSQL, runs runFarEngine(), then buildFarResultAnalysis() assembles 14 sections: executive summary, site info, FAR waterfall, development potential, ground coverage, setbacks, unit analysis, development score, floor & coverage scenarios, incentives, compliance checklist, land use, regulatory citations, and audit trail. PDF export mirrors the web layout via src/lib/pdf/report-document.tsx.

  1. Engine output → typed FarResultAnalysis
  2. Shared FAR waterfall steps in src/lib/report/far-waterfall.ts
  3. Compliance items derived from engine warnings + zoning rules
  4. Each formula step logged in audit trail with regulation citation

Calculator workflow (step by step)

  1. Resolve building category → load plot FAR rules for location context.
  2. Interpolate Plot FAR from road width (ft/m input converted to metres).
  3. Resolve density block → Area FAR + desirable density.
  4. Compute Base FAR and Maximum FAR.
  5. Apply automatic plot-unification bonus from katha.
  6. Add user-selected incentives (TOD, green building, etc.).
  7. Cap at Maximum FAR → Total FAR → max buildable GFA.
  8. Resolve Bidhimala Table 3 → min / mid / max coverage band.
  9. Build three G+N floor scenarios; pick recommended storey count.
  10. Resolve Bidhimala Table 1 setbacks from total storeys.
  11. Estimate permitted / maximum dwelling units (A3 +10%).
  12. Apply zoning / land-use prohibitions (AG, FF, etc.) if zone data present.
  13. Assemble 14-section report + audit trail; optional PDF export.

Known limitations & gaps

  • RAJUK gazette PDFs are not machine-readable in our pipeline; Shellmark mirror is the transcription source until official tables are available as text/CSV.
  • No public GeoJSON for density block boundaries — block centroids on the map are approximate (src/lib/map/block-coords.ts).
  • TOD eligibility is a user toggle; we do not yet auto-detect distance to metro stations from GIS.
  • Wide-road bonus (+0.02/ft) may double-count road width already reflected in Plot FAR — Shellmark examples omit it when Plot FAR already encodes road width.
  • Land-use matrix (49 rules seeded) and parking rules cover common cases but not the full 306-row gazette matrix — see docs/dataset-inventory.md.
  • Committee-determined FAR rows (L, M sub-types in gazette) are not in the calculator.
  • Design-stage area deductions (lobby, balconies, planters) are documented but not applied to net sellable area.

External references

Primary mirror for Appendix 3.5 Table-5 and Appendix 3.6 area FAR; worked examples Ex-01 & Ex-02
Gazette Table-5 scan — 6 pages, image-based; transcribed to `prisma/data/plot-far-appendix-35.ts`
68 density blocks — transcribed to `prisma/data/density-blocks-appendix-36.ts`
Official DAP 2022–2035 volumes and amendment notifications
Land use, overlay (TOD/heritage), transport, RS Mauza tile layers
Industry confirmation: Base = min(Plot, Area); Maximum = max(Plot, Area)
Block-merge bonus 0.25–0.75; FAR increases by block
Building categories (Table 5); ground coverage Table 3; setbacks Table 1 — coded in bidhimala-*.ts

Local copies: docs/Plot-FAR-Chart-for-All-Occupancies.pdf, docs/Area-FAR-Table-scaled.png, docs/plot-far-pdf-page-*.png, docs/_shellmark-page.html

Code & documentation map

PathRole
prisma/data/plot-far-appendix-35.tsAppendix 3.5 Table-5 — plot FAR tiers (all occupancies)
prisma/data/density-blocks-appendix-36.tsAppendix 3.6 — all 68 density blocks + area FAR
prisma/seed.tsDatabase seed: versions, categories, plot/area FAR, incentives, land use
src/lib/plot-far-interpolate.tsLinear Plot FAR interpolation between road bands
src/lib/incentive-far.tsBonus FAR tiers, dwelling units (permitted / max A3 +10%)
src/lib/bidhimala-table3.tsBidhimala §45 Table 3 — min/max ground coverage by plot size
src/lib/bidhimala-setbacks.tsBidhimala §41 Table 1 — setbacks by storey count
src/lib/floor-scenarios.tsG+N floor scenarios at min / mid / max coverage
src/lib/far-engine.tsPure calculation engine (no DB)
src/lib/calculate/build-result-analysis.ts14-section report: score, compliance, scenarios, audit trail
src/lib/calculate/fetch-and-run.tsLoads rules from DB → runs engine → analysis
src/lib/pdf/report-document.tsxPDF export aligned with web report
docs/dataset-inventory.mdGIS probing, download constraints, gap analysis
docs/RAJUK-DAP-DATABASE.mdSchema + regulatory logic reference