Transaction
The Transaction module covers the Transaction Relator itself, the Milestones that mark its lifecycle, and the Transaction Chain that aggregates dependent Transactions.
A Transaction is not a property of any one party — it is a relational entity in its own right, founded by an event (typically offer acceptance), binding Seller(s) + Buyer(s) + the Legal Estate concerned. Its lifecycle is recorded as a sequence of Milestones (instruction, offer accepted, exchange, completion, registration), each with planned-vs-actual variance.
Transaction Chains are aggregates of dependent Transactions linked by the typical buyer-also-seller overlap that characterises UK residential chains.
Entities
- Milestone — a point or interval in the Transaction lifecycle
- Transaction — a residential-property transaction binding Sellers + Buyers + Legal Estate
- Transaction Chain — an aggregate of dependent Transactions
Module-internal relationships
How the Transaction Relator binds its founded Roles, accrues Milestones, and aggregates into Chains:
(Relator)"]:::rel Milestone["Milestone
(instant or interval)"]:::cls Chain["TransactionChain
(aggregate)"]:::cls %% Cross-module LegalEstate["LegalEstate
(property module)"]:::ext Seller["Seller
(agent module)"]:::ext Buyer["Buyer
(agent module)"]:::ext Person["Person
(agent module)"]:::ext Claim["Claim
(claim module)"]:::ext %% Transaction-internal Transaction -->|"hasMilestone (1..*)"| Milestone Transaction -->|"memberOf (0..1)"| Chain Chain -->|"hasMember (1..*)"| Transaction %% Cross-module Transaction -->|"conveys"| LegalEstate Transaction -->|"founds (1..*)"| Seller Transaction -->|"founds (1..*)"| Buyer %% Chain link Seller -.->|"borneBy"| Person Buyer -.->|"borneBy"| Person Buyer -.->|"buyer-also-seller
overlap in next link"| Seller %% Claim attachment Seller -.->|"asserts authority via"| Claim Buyer -.->|"asserts affordability via"| Claim
Lifecycle: Transaction milestone state-transitions
The canonical milestone sequence through a UK residential transaction, with re-planning loops:
(founds Transaction) OfferAccepted --> Exchanged : contracts exchanged Exchanged --> Exchanged : re-planning
(planned vs actual variance) Exchanged --> Completed : completion-process
(interval milestone) Completed --> Registered : HMLR registration %% Termination paths OfferAccepted --> Aborted : offer withdrawn
pre-exchange Exchanged --> Aborted : exchange unwound
(rare) Aborted --> [*] : record persists
(audit trail) Registered --> [*] : Transaction complete
Lifecycle: Transaction chain link-break decision
What happens to a TransactionChain when a member link aborts:
aborts mid-flow"]):::cls Q1{"Buyer-also-seller
withdraws?"}:::cls Q2{"Buy-side
completes
independently?"}:::cls LinkAlive(["Transaction persists
(buy-side only)"]):::success LinkDead(["Transaction terminates
(aborted-status)"]):::errorState Reform(["Chain re-forms as
two shorter chains"]):::warning Shrink(["Chain shrinks by one"]):::warning Break --> Q1 Q1 -->|"Yes"| Q2 Q1 -->|"No"| LinkDead Q2 -->|"Yes"| LinkAlive Q2 -->|"No"| LinkDead LinkAlive --> Reform LinkDead --> Shrink
Comments