Diagnostic exemplar

    simple-transaction-with-milestones

    simple-transaction-with-milestones

    Summary

    Single freehold sale with five canonical milestones (instruction / offer accepted / exchange / completion / registration). Tests Q1 Transaction-as-Relator + Q2 hybrid PROV-O (instants for offer-accepted + exchange; intervals for completion-process + registration-process) + Q3 status as Phase + Q6 expected-vs-actual variance via PROV-O Plan-vs-Activity reification.

    Cross-link: Concept tier — Transaction hard cases.

    Exemplar Turtle

    # Diagnostic exemplar — ODR-0004 §8a, IC-only — input to ODR-0007 (Transactions & Lifecycle).
    # Situation: straightforward freehold sale; one transaction with all five canonical milestones
    # (instruction, offer accepted, exchange of contracts, completion, registration). No chain.
    # Tests Q1 Transaction-as-Relator framing; Q2 hybrid PROV-O milestones (instants for offer-accepted
    # and exchange; intervals for completion-process and registration-process); Q6 expected-vs-actual
    # milestone times via PROV-O Plan-vs-Activity reification (planned-time-on-Plan; actual-time-on-Activity).
    # Status: post-S007 amendment + post-003b namespace ratification. ODR-0007 status: accepted (council: session-007);
    # ODR-0004 status: accepted (council: session-004; wg-decision: session-003b).
    # Amended 2026-05-27 post-S007 close: (i) Q6 refactor to strict `prov:Plan` resource carrying
    # opda:plannedAtTime with `prov:qualifiedAssociation` linkage from Activity; (ii) Q2 refactor of
    # completion + registration milestones to interval form (`prov:startedAtTime` + `prov:endedAtTime`).
    
    @prefix opda:    <https://opda.org.uk/pdtf/> .
    @prefix opda-x:  <https://opda.org.uk/pdtf/harness/data/exemplar/simple-transaction-with-milestones/> .
    @prefix prov:    <http://www.w3.org/ns/prov#> .
    @prefix dct:     <http://purl.org/dc/terms/> .
    @prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix skos:    <http://www.w3.org/2004/02/skos/core#> .
    @prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
    
    opda-x:exemplar
        a opda:DiagnosticExemplar ;
        dct:title "Simple freehold sale — Transaction Relator with five milestones; no chain" ;
        dct:status "ratified" ;
        dct:references <ODR-0007> , <ODR-0006> , <ODR-0005> , <ODR-0004> ;
        skos:scopeNote
            "Tests Q1 Transaction-as-Relator: one opda:Transaction mediating Seller (Person via Role) + Buyer (Person via Role) + the LegalEstate being conveyed (per S005 3-class commitment). Q2 hybrid PROV-O milestones — instants for offer-accepted + exchange; intervals (`prov:startedAtTime` + `prov:endedAtTime`) for completion-process + registration-process per Moreau W3C-grade discipline. Q3 status as Phase — proposed/active/exchanged/completed; per S011 Phase label scheme. Q6 expected-vs-actual via strict PROV-O Plan-vs-Activity reification — each milestone Activity has a `prov:Plan` companion carrying `opda:plannedAtTime`; `prov:qualifiedAssociation` links Activity to Plan; Cagle's `opda:MilestoneVarianceRule` (ODR-0017 8th citing site candidate) materialises variance at `sh:Info` (<14d) or `sh:Warning` (>14d or overdue)." .
    
    # Property (S005 3-class)
    opda-x:property
        a opda:Property ;
        rdfs:label "Physical dwelling at 88 Forest Drive, Norwich" ;
        opda:uprn "100070444000" .
    
    opda-x:estate
        a opda:LegalEstate ;
        rdfs:label "Freehold estate in 88 Forest Drive" ;
        opda:tenureKind "freehold" .
    
    opda-x:title
        a opda:RegisteredTitle ;
        rdfs:label "HMLR title NK445566 (freehold)" ;
        opda:titleNumber "NK445566" .
    
    opda-x:title opda:identifiesSameProperty opda-x:property .
    opda-x:estate opda:identifiesSameProperty opda-x:property .
    
    # Persons + Roles
    opda-x:seller-person a opda:Person ; rdfs:label "Diana Foster (seller)" .
    opda-x:buyer-person  a opda:Person ; rdfs:label "Robert Khan (buyer)" .
    
    opda-x:seller-role
        a opda:Seller ;
        rdfs:label "Seller Role borne by Diana Foster in this transaction" ;
        opda:rolePlayer opda-x:seller-person .
    
    opda-x:buyer-role
        a opda:Buyer ;
        rdfs:label "Buyer Role borne by Robert Khan in this transaction" ;
        opda:rolePlayer opda-x:buyer-person .
    
    # Transaction (UFO Relator per Q1; S007 §Rules Transaction-as-Relator IC over 5 hard cases)
    opda-x:transaction
        a opda:Transaction ;
        rdfs:label "Freehold sale of 88 Forest Drive (Foster → Khan, 2024)" ;
        opda:status "completed" ;     # S011 Phase label scheme
        opda:mediates opda-x:seller-role , opda-x:buyer-role ;
        opda:concerns opda-x:estate .
    
    # Milestones — Q2 hybrid PROV-O (instants for instantaneous events; intervals for processes).
    # Q6 PROV-O Plan-vs-Activity — each Activity has a paired prov:Plan; prov:qualifiedAssociation links them.
    
    # Instruction milestone — instant; no prior plan (start of the transaction by definition).
    opda-x:milestone-instruction
        a prov:Activity , opda:Milestone ;
        rdfs:label "Instruction milestone (Activity)" ;
        opda:milestoneKind "instruction" ;
        prov:atTime "2024-04-10T09:00:00Z"^^xsd:dateTime ;
        opda:partOfTransaction opda-x:transaction .
    
    # Offer accepted milestone — instant. Q6: planned-time on Plan; actual-time on Activity.
    opda-x:milestone-offer-accepted-plan
        a prov:Plan ;
        rdfs:label "Offer accepted milestone (Plan)" ;
        opda:milestoneKind "offerAccepted" ;
        opda:plannedAtTime "2024-04-25T00:00:00Z"^^xsd:dateTime .
    
    opda-x:milestone-offer-accepted
        a prov:Activity , opda:Milestone ;
        rdfs:label "Offer accepted milestone (Activity)" ;
        opda:milestoneKind "offerAccepted" ;
        prov:atTime "2024-05-02T16:30:00Z"^^xsd:dateTime ;
        prov:qualifiedAssociation [
            a prov:Association ;
            prov:hadPlan opda-x:milestone-offer-accepted-plan
        ] ;
        opda:partOfTransaction opda-x:transaction .
    # MilestoneVarianceRule (ODR-0017 8th citing site candidate): planned 2024-04-25 → actual 2024-05-02
    # (delta +7 days) → sh:Info (under 14d threshold). Materialised in opda-annotations.ttl.
    
    # Exchange of contracts — instant. Q6 Plan-vs-Activity.
    opda-x:milestone-exchange-plan
        a prov:Plan ;
        rdfs:label "Exchange of contracts milestone (Plan)" ;
        opda:milestoneKind "exchange" ;
        opda:plannedAtTime "2024-06-15T00:00:00Z"^^xsd:dateTime .
    
    opda-x:milestone-exchange
        a prov:Activity , opda:Milestone ;
        rdfs:label "Exchange of contracts milestone (Activity)" ;
        opda:milestoneKind "exchange" ;
        prov:atTime "2024-06-18T14:00:00Z"^^xsd:dateTime ;
        prov:qualifiedAssociation [
            a prov:Association ;
            prov:hadPlan opda-x:milestone-exchange-plan
        ] ;
        opda:partOfTransaction opda-x:transaction .
    # MilestoneVarianceRule: planned 2024-06-15 → actual 2024-06-18 (delta +3 days) → sh:Info.
    
    # Completion process — Q2 INTERVAL FORM (process spans hours: key release, funds transfer, post-completion
    # notifications). prov:startedAtTime + prov:endedAtTime per Moreau.
    opda-x:milestone-completion-plan
        a prov:Plan ;
        rdfs:label "Completion milestone (Plan)" ;
        opda:milestoneKind "completion" ;
        opda:plannedAtTime "2024-07-12T00:00:00Z"^^xsd:dateTime .
    
    opda-x:milestone-completion
        a prov:Activity , opda:Milestone ;
        rdfs:label "Completion milestone (Activity — interval)" ;
        opda:milestoneKind "completion" ;
        prov:startedAtTime "2024-07-12T09:30:00Z"^^xsd:dateTime ;
        prov:endedAtTime   "2024-07-12T15:45:00Z"^^xsd:dateTime ;
        prov:qualifiedAssociation [
            a prov:Association ;
            prov:hadPlan opda-x:milestone-completion-plan
        ] ;
        opda:partOfTransaction opda-x:transaction .
    # MilestoneVarianceRule: planned 2024-07-12 (date) → actual interval started same date → sh:Info.
    
    # Registration at HMLR — Q2 INTERVAL FORM (submission → priority-search → register entry; days-to-weeks).
    opda-x:milestone-registration-plan
        a prov:Plan ;
        rdfs:label "Registration milestone (Plan)" ;
        opda:milestoneKind "registration" ;
        opda:plannedAtTime "2024-07-26T00:00:00Z"^^xsd:dateTime .
    
    opda-x:milestone-registration
        a prov:Activity , opda:Milestone ;
        rdfs:label "Registration at HMLR milestone (Activity — interval)" ;
        opda:milestoneKind "registration" ;
        prov:startedAtTime "2024-07-15T10:00:00Z"^^xsd:dateTime ;
        prov:endedAtTime   "2024-08-30T10:15:00Z"^^xsd:dateTime ;
        prov:qualifiedAssociation [
            a prov:Association ;
            prov:hadPlan opda-x:milestone-registration-plan
        ] ;
        opda:partOfTransaction opda-x:transaction .
    # MilestoneVarianceRule: planned 2024-07-26 → actual ended 2024-08-30 (delta +35 days) → sh:Warning
    # (over 14d threshold). Materialised in opda-annotations.ttl.

    Expected report Turtle

    # simple-transaction-with-milestones-expected-report.ttl
    @prefix dct: <http://purl.org/dc/terms/> .
    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix sh: <http://www.w3.org/ns/shacl#> .
    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
    
    <https://opda.org.uk/pdtf/data/exemplar-reports/report>
        rdf:type sh:ValidationReport ;
        dct:source <https://opda.org.uk/pdtf/harness/data/exemplar/simple-transaction-with-milestones> ;
        sh:conforms "true"^^xsd:boolean .

    SHACL outcome

    sh:conforms true. All identity-key shapes satisfied:

    • opda:TransactionIdentityKeyShape (Cat 1): no opda:occurredAtTime — admissible
    • opda:MilestoneIdentityKeyShape (Cat 1): each Milestone Plan carries single opda:plannedAtTime xsd:dateTime
    • opda:PropertyIdentityKeyShape + opda:LegalEstateIdentityKeyShape (Cat 1): satisfied

    SHACL-AF rules materialise:

    • opda:MilestoneVarianceRule → for each milestone with both opda:occurredAtTime + opda:plannedAtTime: variance days computed; opda:hasVarianceStatus materialised (“info-flagged” for <14d slips, “warning-flagged” for the registration milestone’s +35-day slip)
    • opda:LeaseTermSuccessionRule → does not fire (no LeaseTerm instances)

    Source ODR + ADR

    Comments

    Loading comments…