Lots & the Lot Lifecycle
A Lot is the central object in SMART. Almost every transaction in the database — a deposit, a PO, a service request — is anchored to a Lot via ProjectID + BuildingID + UnitID.
At a glance
- 29,386 lots in the test database across 775 projects.
- Identified by the composite key
(ProjectID, BuildingID, UnitID). There is no single int “LotID”. - The single-letter
Lot.Statusis the most-read column in the system — it’s updated by Contract operations (accept / ratify / close / cancel), never edited by hand. - A Lot’s lifecycle is roughly Land Acquisition → For Sale (
s) → Sold (f/i) → Production (p) → Closed (c), with side branches for Models (v), R&D (w), and inventory (p). - The
Lottable has ~98 columns; you usually only touch a dozen.
The lot lifecycle
Section titled “The lot lifecycle”Lot exists in
LandAcq* tables.Becomes a
Lot row, status z (Not Available).Status flips to
s. Marketing is live.Status
f (Sold) or i (Sold, Contingent). A Contract row exists.Status
m. Buyer signed; just waiting on ratification.Status
p. Build is authorized; schedule live.Status
c. Money exchanged. Warranty clock starts.A few statuses don’t fit neatly in that line: v (Model Home), w (R&D Home), a (Job Cost Job), b (Non‑Job). See Lot Statuses for the full list with codes.
What a Lot row holds
Section titled “What a Lot row holds”The Lot table has roughly 98 columns. Most days you only touch the identity, status, plan, and a few date fields. Money columns and construction-loan columns matter only at specific stages of the lifecycle.
All 98 Lot columns, grouped by purpose
| Group | Columns |
|---|---|
| Identity | ProjectID, BuildingID, UnitID, Address, City, State, Zipcode, County |
| Status | Status (1‑char), StatusAtStart, PendingStatus, Reserved, ReservedExpDate, LockedAfterClose, LockedAfterCloseDate |
| Plan | PlansID, SchPlansID, SchOptionsID, PlanRatified, LimitPlanType, CADPlanID, PlansCADVersionSysID |
| Dates | StartDate, OrigStartDate, SchComplete, SoldDate, CloseDate, PurchaseDate, PermitAppliedDate, PermitReceivedDate, DevelopedPadReady, ProcessThruDate |
| Money | LotCost, LotPremium, LotValue, AppraisedValue, BalanceClosing, BalanceWIP, BalanceFinance, BalanceOnOrder, InvoiceTotal, VariancesRecorded, VariancesUnrecorded, TotalBudgetCurrent, TotalBudgetOriginal |
| Construction Loan | ConstructionLoanCommitment, ConstructionLoanBalance, ConstructionLenderID, ConstructionLoanCloseDate, ConstructionLoanPrefixID, ConstructionHLPRequestedDate, ConstructionHLPApprovedDate |
| Legal | LegalLot, LegalBlock, LegalSection, LegalPhase, LegalBook, LegalPage, LegalDistrict, LegalLandLot, LegalMunicipality |
| Workflow flags | EstimateRan, ProcessEstimate, RecalcPO, ReversePlan, ErrorsExist, AllowNoDollarPOs |
How a status actually changes
Section titled “How a status actually changes”The single‑letter Status column is updated by SMART when significant events happen — almost always as a side effect of a contract operation, not a direct edit. The full set of triggers and the matching contract proc is below; you’ll find the same cascade documented from the contract side at Contracts.
Status transition triggers (with the proc that drives each one)
| Trigger | Code change | What else fires |
|---|---|---|
| Lot setup is completed | z → s | Lot becomes visible in marketing screens |
Contract status moves to Accepted (acc) | s → f (or i if contingent) | Lot is reserved on the schedule |
Contract status moves to Ratified (rat) | f → p | Schedule is regenerated; estimate runs; POs generate |
| Closing happens | p → c | LockedAfterClose=1; Bills can post; warranty starts |
| Sale cancels | f → s/z | Schedule cleared; deposits reversed |
| Conversion to a Model | any → v | Standard sales rules disabled |
Where to find a Lot
Section titled “Where to find a Lot”| App | Where |
|---|---|
| SMART | Production → Lot Inquiry · Sales → Contract → Lot tab |
| SMART 2.0 | production/, web-reports/ |
| Builder Portal | Schedule.aspx, WorkOrders.aspx, WorkApproval.aspx |
| Trade Portal | quick-view.aspx, order.aspx |
| Home Owner Portal | Schedule.aspx (one lot per buyer) |
Common queries
Section titled “Common queries”Active inventory by community
SELECT c.CommunityName, COUNT(*) AS LotsByStatus, l.StatusFROM dbo.Lot lJOIN dbo.Project p ON p.ProjectID = l.ProjectIDJOIN dbo.Community c ON c.CommunityID = p.CommunityIDWHERE l.Status IN ('s','f','i','m','p')GROUP BY c.CommunityName, l.StatusORDER BY c.CommunityName, l.Status;