OPDA Knowledge base
Modelling Updated 2026-05-14 DAMA · Data Modeling & Design

PDTF overlays

An overlay is a JSON-Schema artefact that adds one form, search or document to the base PDTF transaction schema. Overlays are the unit of composition the schema package ships in — pick the ones your use case needs, merge them on top of the base, and you get a complete validating schema.

See also: Ontology manual — Physical-Database tier

The BASPI5 overlay deployment page in the Ontology manual covers the ontology-layer overlay profile — how the BASPI5 consumer profile is assembled from the 24 source TTLs for triplestore deployment. That is a different artefact from the JSON Schema overlays catalogued here, but they serve the same property transaction data at different layers of the standards stack.

Headline numbers
  • 1 base transaction schema — pdtf-transaction.json (not an overlay)
  • 18 main overlays in v3/overlays/*.json
  • 16 extension overlays in v3/overlays/extensions/*.json (modular NTS2 pieces)
  • 34 overlay files total in PDTF v3

combined.json and skeleton.json at the v3 root aren't overlays — the first is a pre-merged convenience view, the second is a starter template for empty transactions.

The overlay landscape

One base schema; five business contexts that own overlays; a sixth (Property Tech) that runs on the base alone; and 16 extension overlays that sit inside Estate Agency as NTS2 fragments.

The four columns in the diagram below, left to right:

  1. Base schema — the single pdtf-transaction.json that every overlay layers onto.
  2. Bounded contexts — the six business domains in the DDD model (Estate Agency, Conveyancing, Mortgage Lending, Surveying, Property Tech, Property Data Services). Every overlay belongs to exactly one.
  3. Main overlays — one JSON Schema per form, search or document (BASPI, TA6, CON29R, …). 18 in total, distributed across five of the six contexts.
  4. Extension overlays — 16 modular sub-pieces of NTS2, all inside Estate Agency. Adopt them individually to migrate from NTS 2023 → NTS2 2025 one topic at a time.
flowchart LR BASE["`pdtf-transaction.json *base transaction schema*`"]:::infra EA[Estate Agency]:::user CONV[Conveyancing]:::user MORT[Mortgage Lending]:::user SURV[Surveying]:::user PTEC[Property Tech]:::user PDS[Property Data Services]:::user BASE --> EA BASE --> CONV BASE --> MORT BASE --> SURV BASE --> PTEC BASE --> PDS EA --> BASPI4["`Buyers and Sellers Property Information v4 (BASPI4)`"]:::data EA --> BASPI5["`Buyers and Sellers Property Information v5 (BASPI5)`"]:::data EA --> NTS["`NTS Material Information — Sales 2023 (NTS)`"]:::data EA --> NTS2["`NTS Material Information — Sales 2025 (NTS2)`"]:::data EA --> NTSL["`NTS Material Information — Lettings 2023 (NTSL)`"]:::data EA --> NTSL2["`NTS Material Information — Lettings 2025 (NTSL2)`"]:::data EA --> EXT["`+ 16 extension overlays (NTS2 fragments)`"]:::process EXT --> EAS["`Asbestos (AS)`"]:::process EXT --> EDR["`Dry-rot treatment (DR)`"]:::process EXT --> EJK["`Japanese knotweed (JK)`"]:::process EXT --> ESB["`Subsidence / structural faults (SB)`"]:::process EXT --> EHS["`Health & safety issues (HS)`"]:::process EXT --> EOA["`Outside areas (OA)`"]:::process EXT --> ELA["`Loft access & insulation (LA)`"]:::process EXT --> ESF["`Spray-foam insulation (SF)`"]:::process EXT --> EMC["`Main construction type (MC)`"]:::process EXT --> EER["`Estate rentcharges (ER)`"]:::process EXT --> EMA["`Managing agent (MA)`"]:::process EXT --> ETF["`Transfer fees (TF)`"]:::process EXT --> ESL["`Solar-panel ownership (SL)`"]:::process EXT --> EHI["`Heating installation date (HI)`"]:::process EXT --> EFD["`Flood defences (FD)`"]:::process EXT --> EOC["`Other property chain dependency (OC)`"]:::process CONV --> TA6["`Property Information Form (TA6)`"]:::data CONV --> TA7["`Leasehold Information Form (TA7)`"]:::data CONV --> TA10["`Fittings & Contents Form (TA10)`"]:::data CONV --> LPE1["`Leasehold Property Enquiries (LPE1)`"]:::data MORT --> FME1["`Freehold Management Enquiries (FME1)`"]:::data SURV --> PIQ["`Property Information Questionnaire (PIQ)`"]:::data PDS --> RDS["`Residential Development Survey (RDS)`"]:::data PDS --> OC1["`HMLR Official Copies of the Register (OC1)`"]:::data PDS --> LLC1["`Local Land Charges Search (LLC1)`"]:::data PDS --> CON29R["`Local Authority Search (CON29R)`"]:::data PDS --> CON29DW["`Drainage & Water Search (CON29DW)`"]:::data PDS --> SR24["`Sustainability Report 2024 (SR24)`"]:::data
Six bounded contexts layered on the base PDTF transaction schema, with all 18 main overlays. Estate Agency also owns the 16 extension overlays (NTS2 fragments, listed in the catalogue below). Property Tech runs on the base schema alone, with no overlays of its own. Legacy overlays (baspi4, nts, ntsl) ship alongside their successors for backward compatibility.

What an overlay is — and is not

An overlay is a draft-07 JSON Schema that mirrors the shape of the base transaction but only specifies what it adds or constrains. The merge function turns the base + overlays into a complete schema.

DimensionOverlayBounded context (DDD)
LayerSchema layer — JSON Schema filesDomain layer — language and rules of a business function
GranularityOne form, search or document (BASPI, TA6, CON29R …)An entire industry function (Estate Agency, Conveyancing …)
Lives inv3/overlays/*.json in the schemas repoArchitecture documentation (see Bounded contexts)
Who picks itDeveloper assembling a runtime schemaBusiness architect modelling the domain
CardinalityMany overlays per bounded contextOne bounded context owns several overlays

Overlays predate the DDD analysis — the bounded-context model is a retrofit onto a partition that was already there. So the answer to "are overlays the same as bounded contexts?" is: no, but they map cleanly onto them.

The catalogue

Main overlays (18)

Bounded context is the business domain the overlay belongs to (one of six). Status is the lifecycle state of the overlay file: active means current, superseded / legacy means a newer overlay covers the same form but the older one is still shipped in v3 for backward compatibility. The two are orthogonal — every legacy overlay still belongs to its original bounded context.

Property information forms

What the seller declares about the property.

FormFileVersionBounded contextStatus
Buyers and Sellers Property Informationbaspi5.jsonv5.0Estate Agencyactive
Buyers and Sellers Property Informationbaspi4.jsonv4.0Estate Agencysuperseded by baspi5
NTS Material Information (Sales)nts2.json2025Estate Agencyactive
NTS Material Information (Sales)nts.json2023Estate Agencylegacy — superseded by nts2
NTS Material Information (Lettings)ntsl2.json2025Estate Agencyactive
NTS Material Information (Lettings)ntsl.json2023Estate Agencylegacy — superseded by ntsl2
Property Information Questionnairepiq.jsonv3Surveyingactive

Legal forms (Law Society)

What the conveyancer asks for.

FormFileVersionBounded contextStatus
Property Information Formta6.jsonEdition 4Conveyancingactive
Leasehold Information Formta7.jsonEdition 3Conveyancingactive
Fittings and Contents Formta10.jsonEdition 3Conveyancingactive

Search and survey forms

What the third-party data providers return.

FormFileVersionBounded contextStatus
Local Authority Searchcon29R.json2019Property Data Servicesactive
Drainage and Water Searchcon29DW.jsoncurrentProperty Data Servicesactive
Leasehold Property Enquirieslpe1.jsonEdition 4Conveyancingactive
Freehold Management Enquiriesfme1.jsonEdition 2Mortgage Lendingactive
Local Land Charges Searchllc1.jsonv2Property Data Servicesactive
HMLR Official Copies of the Registeroc1.jsonv21Property Data Servicesactive

Specialist

Newer overlays covering domain-specific data.

FormFileVersionBounded contextStatus
Residential Development Surveyrds.jsonv3.3.3Property Data Servicesactive
Sustainability Report 2024sr24.json2024Property Data Servicesactive

Extension overlays (16)

The 18 main overlays above span five bounded contexts. The 16 extension overlays here all belong to one — Estate Agency — because they fragment nts2 (the 2025 Material Information spec that estate agents publish when listing a property) into opt-in pieces.

Each extension adds a single topic to an nts 2023 base, so an estate agent or listing platform can adopt NTS2 changes one topic at a time instead of switching their whole pipeline to the 2025 spec in one go.

Four entries below have in the NTS2 ref column. Those cover topics that sit alongside NTS2 (general property data) rather than mapping to a specific NTS2 section.

flowchart LR NTS["`**nts** NTS 2023 base`"]:::infra E1["+ jk Japanese knotweed"]:::process E2["+ tf Transfer fees"]:::process E3["+ ... any of 16"]:::process NTS2["`**nts2** full NTS2 2025`"]:::success NTS --> E1 --> NTS2 NTS --> E2 --> NTS2 NTS --> E3 --> NTS2
Start on the nts 2023 overlay, then layer in one or more extensions for the NTS2 topics you need. Adopting all 16 is functionally equivalent to the full nts2 overlay.

Specialist issues

KeyDescriptionNTS2 ref
asAsbestosA5.2
drDry-rot treatmentA5.1
jkJapanese knotweedA5.3
sbSubsidence / structural faultsA5.4
hsHealth & safety issuesA5.5

Property features

KeyDescriptionNTS2 ref
oaOutside areas (garden / balcony / communal)
laLoft access & insulationA4.1
sfSpray-foam insulationA4.2
mcMain construction type

Ownership & financial

KeyDescriptionNTS2 ref
erEstate rentcharges (freehold)A3.2
maManaging agent (leasehold)A1.5.4
tfTransfer feesA3.5.1.1

Utilities & services

KeyDescriptionNTS2 ref
slSolar-panel ownershipB3.7.1
hiHeating installation dateB3.4.3.2
fdFlood defences

Transaction

KeyDescriptionNTS2 ref
ocOther property chain dependency

Bounded-context map

Inverse view of the catalogue — each overlay belongs to exactly one bounded context. The 16 extension overlays all sit inside Estate Agency (as NTS2 fragments) and aren't repeated here.

Bounded contextMain overlays
Estate Agency
  • Buyers and Sellers Property Information (baspi4 legacy, baspi5)
  • NTS Material Information — Sales (nts legacy, nts2)
  • NTS Material Information — Lettings (ntsl legacy, ntsl2)
Conveyancing
  • Property Information Form (ta6)
  • Leasehold Information Form (ta7)
  • Fittings and Contents Form (ta10)
  • Leasehold Property Enquiries (lpe1)
Mortgage Lending Freehold Management Enquiries (fme1)
Surveying Property Information Questionnaire (piq)
Property Data Services
  • Residential Development Survey (rds)
  • HMLR Official Copies of the Register (oc1)
  • Local Land Charges Search (llc1)
  • Local Authority Search (con29R)
  • Drainage and Water Search (con29DW)
  • Sustainability Report 2024 (sr24)
Property Tech The base pdtf-transaction.json + verified-claims wrapper (no overlays of its own)

How an overlay is defined

Every overlay is a draft-07 JSON Schema with this skeletal shape:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://trust.propdata.org.uk/schemas/v3/overlays/baspi5.json",
  "required": ["participants", "propertyPack"],
  "properties": {
    "propertyPack": {
      "baspi5Ref": "B",
      "required": ["priceInformation", "ownership", "..."],
      "properties": {
        "priceInformation": {
          "baspi5Ref": "B.1",
          "properties": { /* … */ }
        }
      }
    }
  }
}

The pieces that make an overlay an overlay:

  • Form reference attributesbaspi5Ref, ntsRef, nts2Ref, ta6Ref, ta7Ref, ta10Ref, lpe1Ref, fme1Ref, con29RRef, con29DWRef, rdsRef, piqRef. Each schema node carries the paper-form section number it traces back to.
  • required arrays — fields the form mandates. Different overlays make different things required.
  • title / description annotations — form-specific wording (often different from the base or another overlay).
  • oneOf discriminators — the canonical pattern is the yesNo discriminator: when yesNo = "Yes", a details field becomes required.

How overlays are used at runtime

Composition happens via the library entrypoint getTransactionSchema(schemaId, overlays[]) in index.js:

const { getTransactionSchema } = require('@pdtf/schemas');

// Estate-agency product:
const eaSchema = getTransactionSchema(
  "https://trust.propdata.org.uk/schemas/v3/pdtf-transaction.json",
  ["baspi5", "nts2"]
);

// Conveyancer product:
const cnvSchema = getTransactionSchema(
  "https://trust.propdata.org.uk/schemas/v3/pdtf-transaction.json",
  ["ta6", "ta7", "ta10", "lpe1"]
);

// Selective NTS → NTS2 migration:
const stagedSchema = getTransactionSchema(
  "https://trust.propdata.org.uk/schemas/v3/pdtf-transaction.json",
  ["nts2023", "jk", "tf"]  // NTS 2023 + Japanese knotweed + transfer fees
);

Under the hood, the merge pipeline is:

flowchart LR BASE["`pdtf-transaction.json *base transaction schema*`"]:::infra O1["`Overlay 1 e.g. baspi5`"]:::data O2["`Overlay 2 e.g. nts2`"]:::data O3[Overlay n …]:::data MERGE["`deepmerge( base, O1, O2, … ) + custom arrayMerge for required & oneOf`"]:::process RESULT["`Merged schema *complete and validatable*`"]:::success BASE --> MERGE O1 --> MERGE O2 --> MERGE O3 --> MERGE MERGE --> RESULT
deepmerge with a custom arrayMerge: required arrays are unioned, oneOf arrays are concatenated, and the rest follows ordinary object-merge rules.

Names and aliases

Overlays are registered in overlaysMap[schemaId] in index.js under versioned aliases as well as the plain filename stem. Both work:

Form / searchAlias in overlaysMapFile
Buyers and Sellers Property Information (BASPI v4)baspiV4baspi4.json
Buyers and Sellers Property Information (BASPI v5)baspiV5baspi5.json
Property Information Form (TA6, Edition 4)ta6ed4ta6.json
Leasehold Information Form (TA7, Edition 3)ta7ed3ta7.json
Fittings and Contents Form (TA10, Edition 3)ta10ed3ta10.json
Leasehold Property Enquiries (LPE1, Edition 4)lpe1ed4lpe1.json
Freehold Management Enquiries (FME1, Edition 2)fme1ed2fme1.json
Local Land Charges Search (LLC1)llc1v2llc1.json
NTS Material Information — Sales (2023)nts2023nts.json
NTS Material Information — Lettings (2023)ntsl2023ntsl.json
NTS Material Information — Sales (2025)nts2025nts2.json
NTS Material Information — Lettings (2025)ntsl2025ntsl2.json
Local Authority Search (CON29R, 2019)con29R2019con29R.json
Drainage and Water Search (CON29DW)con29DWcon29DW.json
Residential Development Survey (RDS v3.3.3)rdsV333rds.json
HMLR Official Copies of the Register (OC1 v21)oc1v21oc1.json
Property Information Questionnaire (PIQ v3)piqV3piq.json
Sustainability Report 2024 (SR24)sr24sr24.json

Where this lives

Comments

Loading comments…