ποΈ Company Profile Recap
Dhaka Skyline Properties & Construction Ltd. is the fictional Dhaka-based developer used throughout this companion series, first introduced in Part 1's company profiles. It combines land acquisition, real estate development, and in-house construction under one roof β the same shape as many real Dhaka-market developers, but every project, unit, and figure in this article is illustrative only.
Part 1's six-question training framework (WHO/WHAT/WHY/WHEN/WHERE/HOW) and its Configure/Customize/Custom-Module/Integration decision tree apply here unchanged β this article reuses those patterns rather than re-deriving them, and focuses on how they play out specifically for a property developer running construction alongside sales.
π The Project Lifecycle
Every apartment project this company runs follows the same backbone, from raw land to a handed-over unit generating no further transactions:
Note that sales can start well before construction finishes β bookings and installment collection typically run in parallel with the Procurement/Construction/Progress stages, which is exactly why the sales side needs its own custom module rather than waiting for Handover to touch ERPNext at all (see Custom Module B below).
π§© How Real Estate Operations Use Existing ERPNext Modules
Before adding anything custom, most of the day-to-day transaction volume in this company already fits standard ERPNext modules β this is the "Configure" and "Customize" rungs of Part 1's decision tree, exhausted first:
| Module | Used for, in this company |
|---|---|
| CRM | Lead, Opportunity, Customer β capturing property inquiries before a booking exists |
| Selling | Quotation, Sales Order, Sales Invoice, Payment β used for the sale side of an apartment once it enters the standard document chain |
| Buying | Supplier, Purchase Order, Purchase Receipt, Purchase Invoice β cement, steel, tiles, fittings, and every other construction material supplier |
| Stock | Construction materials, warehouse (site stores), material receipt/transfer/consumption |
| Projects | Project, Task, Timesheet β internal engineering/architecture effort tracking |
| Accounting | Project cost, customer payment, supplier payment, contractor payment, bank, expense, profitability |
| Assets | Construction equipment, vehicles, machinery |
| HR/Payroll | Engineers, architects, site workers, admin staff |
For the base-side mechanics behind the Buying, Stock, and Projects rows, see the Buying module workflow, the Stock module workflow, and the Projects module workflow from the core 9-part course.
ποΈ Custom Module A: Property & Project Management
None of Project, Building, Floor, Unit, or Apartment as a saleable, trackable inventory concept exists as a standard ERPNext DocType β this is squarely the "need new DocTypes, deep integration" end of the customization decision tree, so it becomes a custom module rather than a stack of Custom Fields.
Related DocTypes hang off this chain: Unit Type (e.g. 3 Bedroom, 2 Bedroom, Duplex), Unit Status (Available, Booked, Sold, Handed Over), and Property Feature (balcony, parking, view) β all designed as simple lookup/Select-backed DocTypes that keep the Unit record itself lean.
A worked, entirely fictional example β not a real development, just an illustration of how the hierarchy nests:
| Level | Illustrative value |
|---|---|
| Project | "Bashundhara Residential Tower" (fictional) |
| Building | Tower A |
| Floor | 12 |
| Unit | A-1203 |
| Unit Type | 3 Bedroom |
| Status | Available |
Using Part 1's exact field-level training table shape (Field | Type | Required? | Who enters? | When? | Why? | Example | Related DocType), here is the illustrative Unit DocType:
| Field | Type | Required? | Who enters? | When? | Why? | Example | Related DocType |
|---|---|---|---|---|---|---|---|
unit_no | Data (naming/autoname) | Yes | Project Manager | Unit creation, at project setup | Unique identifier used across sales, construction, and handover documents | A-1203 | β |
building | Link β Building | Yes | Project Manager | Unit creation | Ties the unit into the Project β Building β Floor hierarchy | Tower A | Building |
floor_no | Data / Int | Yes | Project Manager | Unit creation | Floor-level grouping for layout and pricing | 12 | Floor |
unit_type | Link β Unit Type | Yes | Project Manager | Unit creation | Drives layout, base pricing tier, and marketing material | 3 Bedroom | Unit Type |
area_sqft | Float | Yes | Project Manager / Architect | Unit creation, from design | Basis for price-per-square-foot calculations | 1450 | β |
status | Select: Available / Booked / Sold / Handed Over | Yes | System (workflow-driven) with Sales Manager override | Updated at each sales/handover milestone | Central inventory-availability flag sales relies on | Available | Unit Status |
price | Currency (ΰ§³) | Yes | Sales Manager | Set at listing, revisable before booking | Basis for Quotation and Booking amounts | ΰ§³ 1,25,00,000 (example) | β |
π³ Custom Module B: Property Sales & Installment Management
Just as the hospital case study's Lab Request/Sample chain models a clinical process, this project's Booking/Installment chain models the sales-and-collection process specific to real estate β a domain ERPNext's standard Selling module doesn't natively express as a multi-year payment schedule.
A related Cancellation DocType handles the (common, in real estate) case where a booking is reversed and the unit needs to flow back to Available status with any refund logic handled explicitly rather than silently.
As a day-to-day workflow rather than a DocType chain, the same process reads:
π§± Construction Management
Construction execution gets its own cluster of custom DocTypes, separate from the sales-facing module above:
Project
BOQ
- β BOQ Item
Work Package
Contractor
Site Progress
Material Consumption
π Custom Property Module β ERPNext Core
Like every custom module in this series, the property module is only useful because it links back into ERPNext core rather than duplicating it:
Custom Property Module
Project
Building
Floor
Unit
Booking
ERPNext Core
Customer
Item
Project
Sales / Stock / Cost β Accounting
| Custom DocType | Base DocType | Relationship | Why | When |
|---|---|---|---|---|
| Property Unit | Item / Project | Link | Sales/costing | Project setup |
| Buyer | Customer | Link | Sales | Booking |
| Construction Material | Item | Link | Stock | Procurement |
| Contractor | Supplier | Link | Purchasing | Contracting |
π¦ Construction Procurement
| Step | Base ERPNext or Custom? |
|---|---|
| Material Request | Base β standard Buying DocType |
| RFQ / Request for Quotation | Base β standard Buying DocType |
| Supplier Quotation | Base β standard Buying DocType |
| Purchase Order | Base β standard Buying DocType |
| Purchase Receipt | Base β standard Buying/Stock DocType |
| Warehouse | Base β standard Stock DocType (site stores modeled as a Warehouse) |
| Site Transfer | Custom β models moving material from central store to an active site |
| Consumption | Custom β tracked via a custom Material Consumption DocType tied to a Construction Activity |
For the base-side mechanics of Material Request through Purchase Invoice, see the Buying module workflow from the core course β this section only adds the construction-specific tail (site transfer and activity-level consumption) on top of it.
π BOQ & Cost Control
The Bill of Quantities (BOQ) is the backbone of construction cost control: it estimates, up front, exactly how much of each material and labor category a project needs, at what rate, giving a baseline that actuals get compared against continuously rather than only at project close.
| Concept | Meaning |
|---|---|
| BOQ | The itemized list of quantities and rates the project is planned/budgeted against |
| Estimated Quantity | Planned quantity of a material/work item, set at design/budgeting stage |
| Actual Quantity | Quantity actually consumed/executed, from Material Consumption and Site Measurement |
| Estimated Rate | Planned unit cost used to build the original budget |
| Actual Rate | Real unit cost paid, from Purchase Invoice/contractor billing |
| Estimated Cost | Estimated Quantity Γ Estimated Rate |
| Actual Cost | Actual Quantity Γ Actual Rate, aggregated per BOQ line or Work Package |
| Variance | Actual Cost minus Estimated Cost β the number project managers watch most closely |
| Project Budget | The approved ceiling the BOQ rolls up into, at project level |
| Purchase Cost | Material cost, from Purchase Invoice |
| Labor Cost | Site labor cost, from timesheets/payroll or subcontract billing |
| Contractor Cost | Amount billed by subcontractors against their Subcontract agreement |
π° Apartment Sales & Accounting
The custom property documents connect into ERPNext's financial core the same way any custom sales flow should: a Booking references a Customer record (not a bespoke buyer table), the underlying obligation is expressed through a standard Sales Order/Sales Invoice, each installment collected is a standard Payment Entry allocated against that invoice, every posting lands in the same Account structure as any other sale, and the whole thing rolls up under the relevant Project for cost/profitability reporting.
Crucially, at no point does the custom module store its own "amount still owed" field as the source of truth β it derives it. This depends directly on the principle covered in Invoice vs Payment: the document lifecycle: outstanding balance is always derived from invoice minus allocated payments, never stored and hand-maintained, precisely because an installment plan can span years and dozens of partial payments where a stale stored balance would silently drift from reality.
π§Ύ Bangladesh VAT/Tax for Real Estate & Construction
Real estate and construction sit under several distinct tax touchpoints in Bangladesh's VAT/tax regime β property sales, construction services, supplier-side VAT on materials, contractor invoices, and advance payments can each attract different treatment. This section describes the concepts an ERPNext configuration needs to model, not the actual current rates.
| Concept | What it means for this implementation |
|---|---|
| Property sales tax/VAT | Sale of a completed or under-construction apartment can attract VAT and/or other property-related charges β modeled via a Sales Taxes and Charges template on the apartment Sales Invoice |
| Construction service taxation | Construction/contracting services can be taxed differently from goods β modeled via a separate Item Tax Template on construction-service line items |
| Supplier VAT | Material suppliers (cement, steel, etc.) charge VAT on Purchase Invoices β modeled via a Purchase Taxes and Charges template |
| Contractor invoices | Subcontractor billing may carry its own withholding-type treatment distinct from material supplier VAT |
| Tax templates | Sales/Purchase/Item Tax Templates are how ERPNext expresses all of the above as configuration rather than hard-coded logic |
| Customer invoices | The Sales Invoice format and printed VAT breakdown a buyer receives must match statutory requirements |
| Advance payments | Booking/installment advances collected before the full obligation is invoiced may have their own tax-point timing rules |
| Withholding-type concepts | Amounts a payer is required to deduct/report at source when paying certain suppliers or contractors |
Every percentage that could appear in a real configuration (property VAT rate, construction service rate, supplier VAT rate, withholding rate) is an example/configuration placeholder only β no rate is stated as real or current anywhere in this article. This reuses the exact framing established in Part 1's Bangladesh Context section, which this article inherits rather than repeats.
π₯ Real Estate Role/Permission Matrix
Exact read/write/create/submit/cancel permissions per role, and any record-level restriction (e.g. a Site Engineer limited to one Project), are configured the standard ERPNext way β through the Role Permission Manager β rather than hard-coded in this custom module's controllers.
π Property Booking Workflow
| State | Allowed Role | Typical action |
|---|---|---|
| Draft | Sales Executive | Creates the booking against a selected Unit and Customer |
| Sales Review | Sales Manager | Checks pricing, unit availability, and buyer documentation |
| Manager Approval | Sales Manager / Director | Approves the booking terms and any discount |
| Agreement | Sales Manager | Generates/attaches the sale agreement and installment plan |
| Finance Verification | Accountant | Confirms the advance payment is received and correctly recorded |
| Confirmed | System (workflow-driven) | Unit status flips to Booked; installment schedule becomes active |
π Real Estate Dashboards
Management
- Total Projects
- Units Available
- Units Sold
- Booking Value
- Collection
- Outstanding
- Construction Cost
- Budget Variance
- Project Progress
- Profitability
Project Manager
- Tasks
- BOQ
- Material consumption
- Site progress
- Contractor progress
- Cost variance
Sales Manager
- Leads
- Site Visits
- Bookings
- Conversion
- Collection
π End-to-End Real Estate Workflow
Reading this chain left to right by origin: Opportunity, Quotation, and Payment are Base ERPNext documents running unmodified; Property Unit Selection, Booking, Installment, and Construction Progress are Custom Module documents built specifically for this company. Neither side works in isolation β every custom step ultimately links back to a Customer, Item, Project, or Account so the two halves stay one coherent system rather than two disconnected apps.
π Real-World Troubleshooting Scenarios
Scenario 1: "Apartment is showing available after booking"
| Symptom | What to investigate |
|---|---|
| Unit still shows Available after a booking was submitted | Booking status β is it actually Confirmed, or stuck earlier in the workflow? |
| Unit status field β was it actually updated by the booking's business logic? | |
| Workflow β did the state transition that's supposed to flip unit status actually fire? | |
| Transaction sequencing β was the booking saved before or after another process read the unit's status? | |
| Race condition β could two bookings have been submitted for the same unit near-simultaneously? | |
| Permission β does the user updating status actually have write access to the Unit DocType? |
Scenario 2: "Project cost exceeds budget"
| Symptom | What to investigate |
|---|---|
| Project actual cost is running above approved budget | BOQ β was the original BOQ realistic, or under-estimated from the start? |
| Purchase β are Purchase Invoice rates significantly above BOQ estimated rates? | |
| Stock consumption β is material being over-consumed relative to BOQ quantities (waste, theft, miscount)? | |
| Contractor β is a subcontractor billing above their Subcontract agreement? | |
| Expense β are non-material costs (equipment rental, site overhead) being posted against this project correctly? | |
| Project cost / Accounting β is the cost actually correct, or is it a GL posting/cost-center misallocation from an unrelated project? |
π Real Estate Data Security
- Customer contact information (phone, email, address) restricted to roles that need it for sales or collections.
- NID/passport-related information, if collected as part of KYC for a booking, treated as sensitive and access-restricted, not stored in freely visible fields.
- Sale agreements and contracts stored as controlled attachments with access limited to Sales Manager, Accountant, and Director roles.
- Payment information (installment history, bank references) visible only to Accountant, Sales Manager, and Director roles.
- Property ownership documents kept under document-level permission rules, not open list-view access.
- Financial records (project cost, profitability, contractor payments) restricted to Accountant, Director, and System Manager roles.
Note: this article uses only fictional sample data β no real customer, project, or financial information appears anywhere in this series.
β Real Estate UAT Checklist
- Lead capture β a new inquiry correctly creates a Lead/Opportunity and is assigned to a Sales Executive
- Unit availability β the Unit list correctly reflects Available/Booked/Sold/Handed Over status at every stage
- Booking β a booking correctly moves through Draft β Confirmed and updates unit status accordingly
- Installment schedule/payment β a schedule generates correctly from the agreed plan, and payments allocate against it correctly
- Procurement β Material Request through Purchase Invoice runs correctly for a construction material
- Stock/material consumption β site transfer and consumption correctly reduce stock and post against the right Construction Activity
- Project cost tracking β BOQ estimated vs actual cost and variance calculate correctly
- Payment β customer and supplier/contractor payments post to the correct accounts
- Handover β the final handover step correctly closes out the unit's sales and construction records
πΊοΈ What's Next
This article is Part 3 of the 4-part ERPNext Bangladesh Implementation Case Study series. For the company profile, training framework, and customization decision tree this article builds on, see Part 1: Implementation Methodology. For a parallel case study applying the same approach to a different domain, see Part 2: Hospital Management β comparing its clinical Lab Request/Sample chain against this project's construction BOQ/Work Package chain is a useful way to see the same custom-module discipline applied twice. For how this project's two custom modules (Property & Project Management, and Property Sales & Installment Management) and its Construction Management app would actually be built, tested, and deployed, continue to Part 4: Custom Development, DevOps & Production.