TOP / Participant / spec / v1
2026-05-09 · backed by source/top-strawman.json (v0.4.0-strawman) · the human in the trial-conduct realm · 7 new Participant invariants + 2 new Recruit invariants · 25 SHACL invariants total
Sections: 1. TL;DR 2. First-principles posture 3. Architectural anchor 4. Multi-realm projection 5. Digital-twin posture 6. Model summary 7. Architectural decisions 8. Lifecycle state machine 9. Cross-walks 10. SHACL invariants 11. Stress-test scenarios 12. Personas 13. Query patterns 14. Open issues

1.TL;DR a participant is a participant, full stop · operator-grounded · projection-edge for standards

Participant is the human subject in the trial-conduct realm. Anchored at StudySite (1..1; multi-Study participation = separate Participant entities). Operator-grounded vocabulary (screeningNumber, randomizationNumber, participantStatus, firstName) — not standards-shaped (no USUBJID column on the entity; SDTM is a projection edge). Lifecycle events as sub-objects: InformedConsent, ScreeningRecord, EnrollmentRecord, WithdrawalRecord — same pattern as SDTM DS records, surfaced as workflow events to the coordinator. participantStatus is an 11-state enum with NGSI-LD temporal-property semantics for queryable trajectory (twin-queryability discipline). USDM v4 has no per-subject runtime entity; cross-walk targets are FHIR R5 ResearchSubject, SDTM DM + DS + IE, CDASH DM. Pre-consent realm is the separate Recruit entity (see recruit-spec.html).

2.First-principles posture why the entity looks the way it looks

Per first-principles.md: a participant is a participant, full stop. Operators say "Mary." The foundation carries Mary in the operator's vocabulary. Standards (FHIR ResearchSubject, SDTM DM, CDASH DM, USDM design-side links) are projection edges below the line — adapters emit them, the operator never sees them.

Six rules from the first principles, applied here:

3.Architectural anchor where Participant sits in the operational hierarchy

Site ── manages ──▶ StudySite ── for ──▶ Study ── has ──▶ Protocol ── defines ──▶ SOA ── schedules ──▶ Visit ── runs ──▶ Activity │ ↓ enrolledAt Participant ── consentedTo ──▶ InformedConsent (sub-object) │ screenedVia ──▶ ScreeningRecord (sub-object) │ enrolledVia ──▶ EnrollmentRecord (sub-object) │ withdrewVia ──▶ WithdrawalRecord (sub-object, 0..N) │ └── convertedFrom ──▶ Recruit (separate top-level; pre-consent realm) └── assignedToArm ──▶ Arm (Study sub-object; randomization-time link) └── hasVisit ──▶ Visit (per-Participant occurrences; flagged-missing) └── hasAdverseEvent ──▶ Event (flagged-missing)

StudySite is the anchor (1..1), not Site. The OOUX Participant→1 Site direct edge is a correction surfaced during the Site spec lift (v0.2.0); applied here. Reasons:

Multi-Study participation = separate Participant entities. A real human enrolled in two Studies has two Participant records (one per Study × StudySite pair). Cross-Study identity resolution is federation, not foundation (Datavant tokens, MPI, deployment-edge trust).

4.Multi-realm projection Mary in five rooms · TOP carries one

Per FIRST-PRINCIPLES, the same human appears in different realms depending on which operator's lens. TOP carries one realm — trial conduct. The others are projection-adapter targets, not TOP entities.

RealmOperator roleMary appears asStandards projection
RecruitmentRecruiter / outreach coordinatorRecruit (TOP top-level; pre-consent funnel)(no canonical standard)
Trial conductStudy coordinator / PI / monitorParticipant (THIS spec)FHIR ResearchSubject, SDTM DM/DS, USDM (no per-subject)
Standard carePrimary care nurse / treating physicianPatient (projection-only, not in TOP)FHIR Patient, USCDI, OMOP PERSON
Claims / payerClaims processor / payer opsClaimant / Member (projection-only)FHIR Claim / Coverage, X12 837
Real-world evidenceEpidemiologist / RWE analystPatient (post-trial; projection-only)OMOP CDM, Sentinel, PCORnet CDM

This is the same projection-edge pattern as standards. Just as TOP doesn't carry FHIR-shaped Patient but emits Patient via the FHIR adapter, TOP doesn't carry Mary-as-Claimant but emits a Claimant view via a claims adapter. The foundation persists; the projections are ephemeral. Identity resolution across realms is federation, not foundation — Datavant tokens, master patient indexes, cross-realm trust agreements at the deployment edge.

5.Digital-twin posture foundation carries the contract; synthesizers fulfill it

A Participant — at every stage — must be spec-able as a digital twin. Twin synthesis is a major axis of research workflow now: synthetic control arms, in-silico trials, individual outcome prediction, shadow-enrollment dashboards. TOP's posture: digital twin is a projection lens, not an entity. The TOP Participant carries the foundation; a downstream twin synthesizer (computational, not part of TOP) reads from TOP and emits a twin representation.

What TOP guarantees so the foundation is twin-spec-able: every Participant — at every stage — is queryable along the dimensions a twin needs.

Twin dimensionTOP source
Demographic foundationParticipant attributes (sex, dateOfBirth, race, ethnicity, country)
Disease state at entryScreeningRecord + Activity occurrences during screening (when Visit/Activity lift)
Treatment assignmentEnrollmentRecord + assignedToArm + protocolVersionAtEnrollment
Time-varying observationsVisit / Activity / Observation occurrences (when those lift)
Lifecycle state trajectoryparticipantStatus over time (NGSI-LD temporal property; sub-objects carry transition events)
Outcome trajectoryEndpoint values + AE occurrences (when those lift) + final state (COMPLETED / WITHDRAWN / DISCONTINUED)
Cross-realm contextLinked Patient (FHIR), Claimant (claims), historical Patient (OMOP) — at the deployment edge, not in TOP

Twin-for-enrollment is the deferred game-changing use case. Real Recruits + synthetic-Recruits-from-twin populations + historical Participants from completed trials feed a unified twin synthesizer that predicts cohort composition, recruitment timeline, and drop-out risk before the trial opens. Enrollment is the most expensive bottleneck (80%+ trials miss timelines; ~30% trial cost is recruitment). Foundation decisions made in this spec (Decision 9 Recruit-as-separate-entity + Decision 10 twin-queryability) are the load-bearing pre-conditions; twin synthesis itself is computational infrastructure for v0.5+.

Prior art: PMDT (Patient Medical Digital Twin, El Gammal et al., under review at Software and Systems Modeling) is an OWL 2.0 ontology for chronic-care patient digital twins, validated in EU H2020 QUALITOP pilot with real-world immunotherapy patients. Validates the ontology-driven twin direction. PMDT serves chronic care (continuous, longitudinal); TOP serves trial conduct (bounded, protocol-driven). Adjacent realms; same human anchor; different operational tempos. PMDT is OWL 2.0 (DL-classical, SPARQL); TOP is NGSI-LD (broker-mediated, temporal-property). Both legitimate paradigms — TOP can export to OWL/RDF as another projection edge.

6.Model summary attributes, relationships, sub-objects · full set in source/top-strawman.json

Participant attributes (~22) — selected

AttributeTypeNotes
participantIdNGSI-LD URIGlobally unique. Operators type the parts (screeningNumber + randomizationNumber); USUBJID is a SDTM-projection-time derivation.
screeningNumberstringSite-assigned. Maps to SDTM/CDASH SUBJID.
randomizationNumberstring · optionalSponsor-assigned at randomization. Often used for IP kit assignment.
randomizationDatedate · optionalRequired when participantStatus=RANDOMIZED (SHACL hard).
firstName / middleName / lastNamestring · optionalOperator-grounded. Identification-status-agnostic schema (Decision 2): same fields, deployment populates real or de-identified values.
dateOfBirthdate · optionalReal DOB / year-only / shifted depending on deployment. Maps to SDTM BRTHDTC.
sexenum (5)MALE / FEMALE / INTERSEX / UNKNOWN / NOT_REPORTED. Per ICH E5 / FDA. SDTM projection collapses INTERSEX → UNDIFFERENTIATED.
racestring · optionalComma-separated for multiracial. Maps to SDTM RACE; SDTM uses MULTIPLE + SUPPDM RACEMUL.
ethnicityenum (4)HISPANIC_OR_LATINO / NOT_HISPANIC_OR_LATINO / NOT_REPORTED / UNKNOWN. CDISC controlled term.
primaryLanguageISO 639-1 · optionalOperator-grounded for site-coordinator UX.
countryISO 3166-1 alpha-3 · optionalMulti-region trials.
participantStatusenum (11)NGSI-LD temporal property (validFrom/validUntil) for trajectory queryability. See Section 8.
enrollmentDatedate · optionalSingle canonical Sponsor-assigned moment. Maps to SDTM RFSTDTC.
completionDatedate · optionalSoft SHACL: should be populated when participantStatus=COMPLETED.
withdrawalDatedate · optionalMost-recent-withdrawal convenience attribute; full history on WithdrawalRecord sub-objects.
validFrom / validUntildateTime · optionalNGSI-LD-native temporal properties; pattern from Sponsor / StudySite.

Participant relationships (11)

RelationshipTargetCard.Notes
forStudySiteStudySite1..1The operational anchor. Per OOUX correction (was Site directly).
forStudyStudy1..1Reachable via forStudySite.forStudy traversal but kept direct for SHACL invariant simplicity.
assignedToArmArm0..10 pre-randomization; 1..1 once randomized. Cross-entity SHACL: Arm must belong to Participant.forStudy.
hasInformedConsentInformedConsent0..NRe-consent supported (after amendment / ICF version change / lapse-and-re-establish).
hasScreeningRecordScreeningRecord0..NRe-screening attempts.
hasEnrollmentRecordEnrollmentRecord0..NTypically 1 per Participant.
hasWithdrawalRecordWithdrawalRecord0..NMulti-event support.
convertedFromRecruitRecruit0..1Operational-funnel-side trace; empty for direct walk-ins.
hasVisitVisit0..NFlagged-missing (Visit lifts post-Participant).
hasAdverseEventEvent0..NFlagged-missing (Event lifts later).
hasTagTag0..NFlagged-missing.

Sub-objects (4)

Sub-objectRoleKey attrs
InformedConsentOne consent event (ICH E6(R3) §2.4 GCP-required).consentVersion, consentDate, consentMethod, consenterRelationship, consentStatus (OBTAINED/WITHDRAWN/EXPIRED/RECONSENTED), reconsentRequired
ScreeningRecordOne eligibility-screening attempt (ICH E6(R3) §2.5).screeningStartDate, screeningEndDate, screeningOutcome, screenFailReason, failedInclusionCriteria, failedExclusionCriteria
EnrollmentRecordThe enrollment event (eligibility confirmed, on the trial).enrollmentDate, enrollmentMethod (ON_SITE/REMOTE/HYBRID), enrollmentNumber, protocolVersionAtEnrollment
WithdrawalRecordOne withdrawal/discontinuation event.withdrawalDate, withdrawalCategory (CONSENT_WITHDRAWN/INVESTIGATOR_DECISION/AE/LOST/etc.), withdrawalReason, continueDataCollection, withdrawnFromAllProcedures

7.Why this shape — architectural decisions

Decision 1 — Sub-objects for lifecycle events (vs flat attributes)

Sub-objects: InformedConsent, ScreeningRecord, EnrollmentRecord, WithdrawalRecord. Each carries its own dates, signatures, witnesses, document references, lifecycle status. Aligns with GCP audit-trail discipline (full event history); supports re-consent after protocol amendment, re-screening, multiple withdrawals if re-enrolled. Flat attributes would lose event-history audit fidelity.

Cross-walk validation: this decision lines up with both authoritative standards that DO model per-subject events. FHIR R5 ResearchSubject.progress is a 0..N list of state-change events (TOP sub-objects map 1:1). CDISC SDTM DS domain has every disposition event as its own DS record with DSDECOD controlled term. Sub-objects-as-events is the SDTM DS pattern.

Decision 2 — Demographics PHI posture: identification-status-agnostic schema

Same fields exist (firstName, lastName, dateOfBirth); deployment populates real values for operator-facing systems and Datavant tokens / de-identified values for research-warehouse projections. The schema doesn't encode identification status — the deployment handles tokenization, date-shifting, and redaction at the boundary. Same posture as Site spec for de-identification.

Datavant + John Snow Labs are the canonical privacy-engineering layer. TOP is upstream of de-id; PHI engineering happens at the deployment edge.

Decision 3 — StudySite anchoring (apply OOUX correction)

Participant.forStudySite → StudySite (1..1). NOT Participant → Site directly. The OOUX has Participant pointing at 1 Site; correction tracked in Site spec, applied here. Reasoning per Section 3 (architectural anchor).

Decision 4 — Subject vs Person

Person (TOP commons horizontal, lifted in v0.2.0) is for staff: investigators, coordinators, monitors, pharmacists, regulatory affairs. Participant is for trial subjects. Different role, different entity. Subject identity is bound to the Study; Person identity is independent of any Study.

Edge case: a study staff member who is also enrolled as a participant in the same study (rare; some Phase 1 dose-escalation studies have staff as healthy volunteers). In TOP, that's two entities — one Person record (staff role) and one Participant record (subject role) — backed by the same real human. The schema doesn't link them; that's deliberate (privacy-preserving).

Decision 5 — Arm assignment as simple relationship (RandomizationRecord defers to v0.5+)

Participant.assignedToArm → Arm (0..1) plus randomizationNumber and randomizationDate as Participant attributes. RandomizationRecord lifts as a sub-object in v0.5+ if studies with complex stratification or multiple-arm-reassignments warrant richer modeling.

Decision 6 — Lifecycle status enum: 11 states

SCREENING / SCREEN_FAILED / CONSENTED / ENROLLED / RANDOMIZED / ON_TREATMENT / IN_FOLLOW_UP / COMPLETED / WITHDRAWN / DISCONTINUED / LOST_TO_FOLLOW_UP. Operationally meaningful — operators distinguish all 11 in their daily workflow. State-machine SHACL invariants encode legal transitions. See Section 8.

Per FIRST-PRINCIPLES, the enum is operator-grounded (ON_TREATMENT, not on-study-intervention); cross-walk to FHIR ResearchSubjectStatus + SDTM DSDECOD lives in Section 9.

Decision 7 — Multi-Study participation: separate Participant entities

OOUX has Participant with 1 Study. TOP follows: each Study participation is its own Participant entity. A real human enrolling in two studies has two Participant entities. Cross-Study identity resolution (the same human across multiple Participant records) is federation, not foundation.

Decision 8 — Adverse event / lab result / sample / IP-dispensation reach

Direct on Participant: subject-bound facts (demographics, identifiers, lifecycle status, lifecycle sub-objects). Reached via traversal: Visit-occurrences (via Visit.atParticipant inverse, when Visit lifts), AEs (via Event.atParticipant), CRFs (via CRF.forParticipant), etc. Direct edges flagged-missing where target entity not yet lifted.

Decision 9 — Recruit (pre-consent) lifts as separate top-level

The recruitment realm has its own operator (recruitment coordinator), its own workflow, its own data shape (lighter than Participant — no consent, often only contact info + light eligibility pre-check), and a different PHI boundary. Per FIRST-PRINCIPLES (each operator role gets first-class entities), Recruit lifts as a separate top-level rather than as a pre-consent state on Participant.

Top-level count moves 8 → 9. Recruit→Participant transition is captured by Participant.convertedFromRecruit; the InformedConsent sub-object's existence on the Participant IS the canonical conversion event. See recruit-spec.html.

Decision 10 — Twin-queryability discipline

Every Participant lifecycle transition produces a queryable record so a downstream twin synthesizer can reconstruct the trajectory. Combination: (a) sub-objects for canonical events (Consent, Screening, Enrollment, Withdrawal — already in design), and (c) NGSI-LD temporal-property semantics with validFrom/validUntil bracketing on participantStatus for mid-trial state changes (RANDOMIZED → ON_TREATMENT → IN_FOLLOW_UP → COMPLETED).

The Sponsor entity already established the temporal-property pattern for relationship handoffs; Participant extends it to the lifecycle attribute itself. Broker layer answers "what was Mary's status on 2026-08-15?" cleanly.

8.Lifecycle state machine 11 states · operator-meaningful · NGSI-LD temporal property

┌──────────────────────────────────┐ ▼ │ SCREENING ─────────▶ SCREEN_FAILED │ (re-screen │ │ per protocol) ▼ │ CONSENTED ──────────▶─────────────────┘ │ ▼ ENROLLED ──────────▶ RANDOMIZED ──────▶ ON_TREATMENT │ ▼ IN_FOLLOW_UP │ ▼ COMPLETED (any post-consent on-study state) │ ├─────────▶ WITHDRAWN (subject-initiated; consent withdrawn) ├─────────▶ DISCONTINUED (investigator-initiated) └─────────▶ LOST_TO_FOLLOW_UP (unable to contact)

Each state transition produces either a sub-object (Consent / Screening / Enrollment / Withdrawal — the canonical events) or a NGSI-LD temporal-property change on participantStatus (mid-trial transitions like ON_TREATMENT → IN_FOLLOW_UP). Trajectory is queryable downstream for digital-twin synthesis (Decision 10).

State guards (SHACL-enforced)

9.Cross-walks FHIR R5 / SDTM / CDASH / USDM · projection-edge documentation

Every Participant attribute, relationship, and sub-object resolves to recognizable FHIR / CDISC structures. Cross-walks are projection-adapter rules, not entity-shape constraints.

Demographics → SDTM DM / FHIR / CDASH

TOP attributeSDTM DMFHIR R5CDASH DM
screeningNumberSUBJIDResearchSubject.identifier (use=secondary)SUBJID
randomizationNumber(SUPPDM)ResearchSubject.identifierRANDNO (custom)
firstName/middleName/lastName(PHI excluded)Patient.name (linked via ResearchSubject.subject)(not in CDASH)
dateOfBirthBRTHDTCPatient.birthDateBRTHDAT / BRTHDD/BRTHMO/BRTHYY
sexSEX (M/F/U/UNDIFFERENTIATED)Patient.gender (male/female/other/unknown)SEX
raceRACEPatient.extension[us-core-race]RACE
ethnicityETHNICPatient.extension[us-core-ethnicity]ETHNIC
countryCOUNTRYPatient.address.countryCOUNTRY

Lifecycle → FHIR ResearchSubjectStatus / SDTM DSDECOD

TOP participantStatusFHIR R5 ResearchSubject.statusSDTM DS DSDECOD
SCREENINGscreening(no DS event during screening window)
SCREEN_FAILEDineligibleSCREEN FAILURE
CONSENTEDpending-on-studyINFORMED CONSENT OBTAINED
ENROLLEDon-studyENROLLED
RANDOMIZEDon-studyRANDOMIZED
ON_TREATMENTon-study-intervention(treatment events)
IN_FOLLOW_UPfollow-up(follow-up start)
COMPLETEDoff-studyCOMPLETED
WITHDRAWNwithdrawnWITHDRAWAL OF CONSENT
DISCONTINUEDoff-studyDISCONTINUED
LOST_TO_FOLLOW_UPoff-studyLOST TO FOLLOW-UP

TOP enum is a superset of FHIR ResearchSubjectStatus (FHIR collapses several operational states under on-study and off-study). TOP-to-FHIR mapping is many-to-one and well-defined; the inverse requires sub-object/DS context to disambiguate.

USDM positioning

USDM v4 doesn't model per-subject runtime data (verified: cdisc-org/usdm/main/src/usdm_model/ has no study_subject.py; the closest entity SubjectEnrollment is aggregate-only — a planned-quantity entity for cohort/site/geo-scope, not per-subject). USDM is a study-definition model; per-subject data lives at FHIR / SDTM / CDASH layers.

What TOP Participant connects to USDM via:

Net: TOP carries USDM at the design layer (Study), CDISC SDTM at the analysis layer (DM/DS/IE), FHIR R5 at the operational/exchange layer (ResearchSubject + Consent + Patient), CDASH at the acquisition layer. No standards conflict; TOP is the operator-grounded foundation that all four standards project through.

10.SHACL invariants 7 new Participant invariants · 25 total in the graph

#SeverityConstraint
17HardPost-consent state requires consent. Any participantStatus in {ENROLLED, RANDOMIZED, ON_TREATMENT, IN_FOLLOW_UP, COMPLETED, WITHDRAWN, DISCONTINUED, LOST_TO_FOLLOW_UP} requires at least one InformedConsent with consentStatus=OBTAINED. ICH E6(R3) §2.4 GCP-required.
18HardSCREEN_FAILED requires record. participantStatus=SCREEN_FAILED requires a ScreeningRecord with screeningOutcome=SCREEN_FAILED.
19HardRANDOMIZED requires arm and date. participantStatus=RANDOMIZED requires both assignedToArm and randomizationDate populated.
20HardWITHDRAWN requires consent-withdrawal. participantStatus=WITHDRAWN requires a WithdrawalRecord with withdrawalCategory=CONSENT_WITHDRAWN. WITHDRAWN is reserved for subject-initiated withdrawal; investigator-initiated uses DISCONTINUED.
21SoftCOMPLETED needs date. participantStatus=COMPLETED should have completionDate populated.
22HardArm-Study consistency. Participant.assignedToArm must reference an Arm whose parent Study matches Participant.forStudy.
23HardStudySite-Study consistency. Participant.forStudySite must reference a StudySite whose forStudy matches Participant.forStudy.

Plus 2 new Recruit invariants (24 hard converted-needs-participant; 25 soft stalled-many-attempts) — see recruit-spec.html.

11.Stress-test scenarios six cases · plain English to graph shape

Re-consent after protocol amendment
Lifecycle

Mary consented under ICF v3.1. Protocol amended (new biomarker assay added with separate informed-consent implications). Site re-consents Mary under ICF v3.2.

Original InformedConsent_c1 (consentVersion="ICF v3.1") gets consentStatus=RECONSENTED. New InformedConsent_c2 created (consentVersion="ICF v3.2", reconsentRequired=true, reconsentReason="Protocol Amendment v3.2 added biomarker assay"). Both linked from Participant.hasInformedConsent. Full event history preserved per GCP.
Re-screening after screen failure
Lifecycle

Initial screening fails on lab criterion (out-of-range value). Per protocol re-screening rules, Participant returns 4 weeks later for new screen.

First ScreeningRecord (screeningOutcome=SCREEN_FAILED, screenFailReason populated, reScreeningEligibility=true). Second ScreeningRecord (screeningOutcome=ENROLLED). Participant.participantStatus transitions SCREENING → SCREEN_FAILED → SCREENING → ENROLLED via NGSI-LD temporal property; broker carries the trajectory. Both records visible to coordinator via traversal.
Withdrawn from treatment but follow-up continues
Withdrawal

Mary withdraws consent for further IP administration but agrees to continue follow-up visits for safety data collection.

WithdrawalRecord with withdrawalCategory=CONSENT_WITHDRAWN, continueDataCollection=true, withdrawnFromAllProcedures=false. Participant.participantStatus transitions to WITHDRAWN; SHACL Inv. #20 satisfied. FHIR projection: ResearchSubject.status=withdrawn but ResearchSubject.period.end may be empty (continued follow-up). Operational realism preserved.
Discontinuation by investigator (safety)
Withdrawal

Investigator discontinues a Participant after a Grade 3 AE that meets the protocol's discontinuation criteria.

WithdrawalRecord with withdrawalCategory=ADVERSE_EVENT (not CONSENT_WITHDRAWN — that's a different operator action). Participant.participantStatus=DISCONTINUED, NOT WITHDRAWN. The semantic split between subject-initiated and investigator-initiated is preserved at the foundation. FHIR projects to ResearchSubject.status=off-study with reason; SDTM DS records DSDECOD=DISCONTINUED with DSTERM=AE-related reason text.
Recruit conversion to Participant
Funnel

Mary responded to a digital ad in late February. Recruitment coordinator pre-screened, scheduled consent. On consent day at the site, coordinator converts.

Recruit_r001 (recruitStatus=QUALIFIED_PENDING_CONSENT). Coordinator action creates Participant_p001 with convertedFromRecruit=Recruit_r001. Participant_p001.hasInformedConsent populated (the consent-obtaining action IS the conversion event). Recruit_r001.recruitStatus → CONVERTED_TO_PARTICIPANT, convertedToParticipant=Participant_p001 (Recruit invariant #24 satisfied). Operational-funnel-side trace preserved for recruitment analytics.
Twin-queryability — what was Mary's status on a specific date?
Trajectory

Twin synthesizer (downstream tool) needs to know Mary's lifecycle state as of 2026-08-15.

NGSI-LD broker query against Participant_p001 with temporal filter timeAt=2026-08-15T00:00:00Z. participantStatus temporal property carries validFrom/validUntil brackets per state value. Broker returns the active value at that timestamp (e.g., ON_TREATMENT). Sub-object queries (hasInformedConsent etc.) similarly time-filtered. Twin synthesizer reconstructs the trajectory; foundation carries the contract; computational synthesis is downstream.

12.Personas six roles · what each cares about

Site Coordinator (the central operator for Participant)
"Get Mary through her visits, make sure consent is current, surface any deviations to the PI."

Primary entity user. Creates Participant, conducts screening, manages re-consent, schedules visits. Sees Participant in operator-vocabulary terms; SDTM/FHIR projections happen at export-time. Cares about: contact info, current status, next-visit-date, consent-currency, AE-flagging.

Principal Investigator
"Confirm eligibility, sign off on enrollment, manage discontinuations."

Authority over EnrollmentRecord (eligibilityConfirmedBy 1..1) and DISCONTINUED transitions. Reviews ScreeningRecord outcomes. Cares about: cohort-level eligibility patterns, AE-related discontinuations, protocol-deviation-flagged participants.

Recruitment Coordinator
"Move people through the funnel; convert qualified Recruits to consented Participants."

Primary user of Recruit. Hands off to Site Coordinator at consent appointment (Recruit→Participant conversion). Cares about: funnel conversion rate, source-channel ROI, contact-attempt cadence.

Sponsor Project Manager
"Track enrollment progress against target; surface site-level enrollment risk."

Reads aggregate Participant counts per StudySite and per status. Cares about: targetEnrollment vs actualEnrollment, time-to-first-enrollment, drop-out rate by site.

Sponsor CRA / Monitor
"Verify source documents match Participant records; flag discrepancies."

Audits Participant records against site source documents during monitoring visits. Cares about: consent-form-vs-record consistency, randomization-date traceability, withdrawal-documentation completeness.

Medical Monitor / Medical Affairs
"Adjudicate AEs; review discontinuation patterns; surface safety signals."

Reviews DISCONTINUED Participants and their WithdrawalRecord categories. Cares about: AE-related discontinuation rate, dose-modification patterns, cohort-vs-cohort safety profile.

13.Query patterns three concrete NGSI-LD HTTP shapes

Site Coordinator: today's active participants
"Who do I have at MSKCC today, and where are they in the trial?"
GET /ngsi-ld/v1/entities?type=Participant&q=forStudySite=="urn:ngsi-ld:StudySite:mskcc-onco423";participantStatus=="ON_TREATMENT","IN_FOLLOW_UP","RANDOMIZED"
Returns active Participants at this StudySite. Coordinator sees screeningNumber, firstName/lastName, current status, next-visit-date. Per-participant detail follows up with separate GET on each entity.
Sponsor PM: enrollment trajectory across all sites
"How many randomized at each site, vs target, vs forecast?"
GET /ngsi-ld/v1/entities?type=Participant&q=forStudy=="urn:ngsi-ld:Study:ONCO-423";participantStatus=="RANDOMIZED","ON_TREATMENT","IN_FOLLOW_UP","COMPLETED"&count=true
Aggregate count of Participants past the randomization milestone, scoped to this Study. Cross-tabulated by forStudySite client-side (or via GROUP BY in a SPARQL backing query). Compared to StudySite.enrollmentTarget for site-level shortfall surfacing.
Twin synthesizer: trajectory query for a specific Participant at a specific time
"What was Mary's lifecycle state and treatment context on 2026-08-15?"
GET /ngsi-ld/v1/temporal/entities/urn:ngsi-ld:Participant:onco-423-mskcc-p001?timeAt=2026-08-15T00:00:00Z&attrs=participantStatus,assignedToArm,randomizationDate
NGSI-LD temporal endpoint returns the values active at that timestamp. participantStatus temporal property's validFrom/validUntil brackets resolve to the right value. Synthesizer combines this with sub-object queries (InformedConsent valid at the time, ScreeningRecord outcomes, etc.) to reconstruct the trajectory for twin synthesis. Foundation provides the contract; computational synthesis is downstream.

14.Open issues

  1. Visit lift: when Visit lifts (next priority), Participant gains hasVisit as a real edge (not flagged-missing) and per-Visit Activity records become traversable. Visit-level Observations expand the twin-queryability surface beyond what v0.4.0 carries.
  2. Adverse Event lift: hasAdverseEvent → Event remains flagged-missing; lifts when Event entity is designed. AE grading uses CTCAE controlled terminology (a CDISC dependency for the dependency-pipeline manifest).
  3. RandomizationRecord: deferred to v0.5+. If multi-arm-reassignment scenarios or stratified-randomization audit becomes operationally needed, lift as a sub-object with rich attributes (stratification factor values, randomization seed, IRT system reference).
  4. Twin spec as standalone document: when Visit / Activity / Observation lift expand the queryability surface, capture the twin-synthesizer contract as twin-spec.md (or HTML) — what queries the synthesizer expects, what TOP guarantees about temporal coverage, what's out of scope.
  5. Cross-realm federation: identity resolution across Recruit / Participant / Patient / Claimant realms is deferred to v0.6+ federation work. PMDT's QUALITOP architecture and pilot lessons are direct prior art.