A simplified, multi-tenant property-sales platform derived from the PROMIS domain, built to preserve booking and inventory consistency from unit selection through billing and post-sale operations.
Derived from the broader PROMIS property domain, Soldout focuses on the operational lifecycle of a real-estate sale: project and unit configuration, booking, approval, installment invoicing, cancellation/refund handling, customer transfer, and formal SPR document generation. Each client can require a different SPR layout, so validated per-client templates are rendered through Carbone instead of hard-coding a single document format. It is organised as a module in a modular-monolith backend and reuses shared capabilities such as RBAC, audit logging, approval, numbering, storage, and finance integration.
The booking flow is deliberately server-owned. It calculates pricing, discounts, tax, receivables, and installment schedules, records the unit state and audit activity, and coordinates the related writes in a database transaction.
A booking changes more than one record: unit availability, price, schedules, approval state, document numbering, audit history, and eventually finance. The formal SPR also cannot use one fixed layout because each client can have different document requirements. The module keeps transactional updates inside database transactions, adds a database-level active-booking constraint as a second line of defence against double-selling, and renders the selected client template through Carbone. This makes the system reject inconsistent states instead of attempting to repair them after the sale.