Skip to content

Contract Statuses

Each contract has a 3-letter status (for example qte for Quoted, rat for Ratified). That status drives what you can do next in SMART and SMART 2.0.

At a glance

  • 8 codes total: qte Quoted, lr Lot Reserved, lc Lot Reservation Cleared, acc Accepted, rat Ratified, siv Sold Inventory, clo Closed, can Cancelled.
  • The big one is rat Ratified — it locks the plan to the lot, generates the schedule, queues POs, and starts BC postings.
  • siv is auto-only — it’s how an inventory contract steps aside when a buyer ratifies on the same lot.
  • can means different things on a buyer’s contract vs. an inventory contract — buyer cancel preserves the build and creates a new auto inventory contract; inventory cancel zeros everything out.
Code Name Lot.Status while here Plan locked? Schedule built? POs out? BC posting?
qte Quoted s For Sale nononono
lr Lot Reserved s + Reserved=1 nononono
lc Lot Reservation Cleared back to s nononono
acc Accepted m Accepted (sale)
p/v/w (inventory)
no — chosen options live on lot but plan not yet locked nonono (today)
rat Ratified f Sold (or i Sold-Contingent if any open contingency); inventory unchanged yesLot.PlansID set, planratified=1 yes — Estimate runs next batch; LotSelectionActivity rows generated yesTransmissionPOGenerate rows queue yesTransmissionContractRatify, TransmissionDeposit rows queue
siv Sold Inventory unchanged (the sale contract owns the lot) was already locked from the original ratify was already built was already out continues
clo Closed c Closed locked, immutable frozen frozen TransmissionContractPostClosing + commission posting
can Cancelled sale → p Production Inventory; inv → z Not Available buyer cancel: kept (auto inv contract takes over). Inv cancel: PlansID=NULL buyer cancel: kept. Inv cancel: deleted buyer cancel: kept. Inv cancel: deleted TransmissionContractCancel (sale only)
┌──────────────────────┐
│ │
qte ──► lr ──► lc ──► qte │ │
│ │ │ │
└─► acc ◄┘ ▼ │
│ [siv] ◄── ratify takeover │
├─► (back to qte = unaccept) ▲ │
│ │ │
▼ │ │
rat ──► clo │ │
│ ▲ │ │
│ └── unclose (CSR script) │ │
│ │ │
└─► can ──► (inventory contract auto-created at rat) ──────┘
└── uncancel (CSR script) ──► back to qte/acc/rat

The cheat sheet above tells you what state things are in. The table below tells you which proc moves you between states and what audit code lands in ContractTransLog. For full step-by-step internals see Contracts.

All transitions with driver proc and audit code
TransitionDriver procLot effectAudit code
qte → acc (sale)spProcessContractAcceptLot → m AcceptedS01
qte → acc (inventory)spProcessContractAcceptLot → p/v/w per AvailabilityTypeF06
acc → qtespProcessContractAccept (reverse)Lot back to s (or stays p if plan locked)S06 / F07
acc → rat (sale, no contingency)spProcessContractRatifyLot → f Sold; PlansID locked; ProcessEstimate=1S02
acc → rat (sale, contingency)spProcessContractRatifyLot → i Sold-Contingent; rest sameS02
acc → rat (inventory, initial)spProcessContractRatifyLot ProdRatifiedDate set; PendingStatus=‘pstart’; ProcessEstimate=1F01
rat → sivspProcessContractRatify (sister)noneF11 “Inventory Sold”
rat → clospProcessContractCloseLot → c Closed; CloseDate setS09
rat → can (sale)spProcessContractCancelLot → p; auto inventory contract created at ratS05
rat → can (inventory)spProcessContractCancelLot → z; PlansID=NULL; estimate deletedF02
clo → ratUnclose a contract.sql (CSR)Lot back to f; CloseDate=NULLmanual

A contract’s status can lag behind reality if a Process row got stuck or a WorkLotProcess row didn’t clean up. The two queries below tell you whether you’re looking at a stuck batch or a real status mismatch.

Find stuck batch processes (Process Monitor query)
SELECT TOP 50 ProcessSysID, ProcessName, Status, ErrorDesc, ProcessStart, ProcessEnd
FROM dbo.Process
WHERE Status <> 'Completed'
ORDER BY ProcessStart DESC;

Visible in SMART → Administration → Process Monitor.

Find lock rows that block further status changes on a lot
SELECT * FROM dbo.WorkLotProcess
WHERE ProjectID=@p AND BuildingID=@b AND UnitID=@u;

Delete those rows (with approval) and retry the operation.