OPDA Knowledge base
Concept tier Module: transaction

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:

--- config: layout: elk --- %%{init: {"theme": "base"}}%% flowchart LR accTitle: Transaction module internal relationships accDescr: Transaction binds Seller and Buyer Role-Mixins founded by the same offer-acceptance event; conveys a LegalEstate; accrues Milestones across its lifecycle; aggregates into a TransactionChain via buyer-also-seller overlap. classDef cls fill:#E1BEE7,stroke:#6A1B9A,stroke-width:2px,color:#4A148C classDef rel fill:#F8BBD9,stroke:#AD1457,stroke-width:2px,color:#880E4F classDef ext fill:#ECEFF1,stroke:#455A64,stroke-width:2px,color:#263238 %% Transaction module Transaction["Transaction
(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:

%%{init: {"theme": "base"}}%% stateDiagram-v2 accTitle: Transaction milestone lifecycle accDescr: Transaction lifecycle as a sequence of milestones — instruction, offer accepted (founding event), exchange, completion, registration — with re-planning loops on delay and an aborted-transaction termination state. [*] --> Instructed : instruction milestone Instructed --> OfferAccepted : offer-acceptance event
(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

What happens to a TransactionChain when a member link aborts:

%%{init: {"theme": "base"}}%% flowchart TD accTitle: Transaction chain link-break decision flow accDescr: Decision tree for a Chain member that aborts mid-flow — buy-side completes independently or whole link terminates; Chain re-forms around the break as two shorter independent chains or shrinks to one. classDef cls fill:#E1BEE7,stroke:#6A1B9A,stroke-width:2px,color:#4A148C classDef success fill:#C8E6C9,stroke:#2E7D32,stroke-width:2px,color:#1B5E20 classDef warning fill:#FFF9C4,stroke:#F9A825,stroke-width:2px,color:#F57F17 classDef errorState fill:#FFCDD2,stroke:#C62828,stroke-width:2px,color:#B71C1C Break(["Chain member
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

Loading comments…