InvestigationalProduct (IP) is the substance, biologic, device, or combination under investigation. Per first-principles.md universal-foundation posture, IP is one TOP entity covering all product types — investigationalProductType enum (DRUG / BIOLOGIC / DEVICE / DIAGNOSTIC / COMBINATION_PRODUCT / OTHER) is the operator-grounded discriminator, NOT a shape discriminator. IP supply chain modeled via two sub-objects: Lot (per-batch manufacturing identity, expiration, release status) and Kit (per-blinded-packaging-unit, IRT-assigned to Participant). Dispensation events live as Visit Activities (activityType=IP_ADMINISTRATION with STRUCTURED taskValue carrying dose/lot/kit references) — no separate Dispensation entity needed; the universal Visit > Activity > Task foundation from v0.5 covers it cleanly. PROV: IP / Lot / Kit are prov:Entity (defined artifacts). Un-flag-misses Sponsor.supplies + Study.suppliesInvestigationalProduct.
The IP's responsibility chain runs from Sponsor (supplies, regulatorily accountable per 21 CFR 312.6) → Lot (manufacturing batch with expiry / release / lot status) → Kit (blinded packaging unit assigned to a Participant via IRT). Per ICH E6(R3) Section 2.7 and 21 CFR 312.62, this chain is required for IP accountability and recall response.
Per FIRST-PRINCIPLES universal-foundation posture, the same TOP entity shape handles drugs, biologics, devices, diagnostics, and combination products. Specialization is content (investigationalProductType + biomedicalConceptCode + dosageForm + routeOfAdministration + mechanismOfAction), never entity shape.
| investigationalProductType | Example | biomedicalConceptCode | dosageForm | route |
|---|---|---|---|---|
| DRUG | Aspirin 100mg tablet | NCIt:C287 (Aspirin) | TABLET | ORAL |
| BIOLOGIC | Drug X (anti-PD-L1 mAb) | NCIt:C172310 | INFUSION | IV |
| BIOLOGIC | BioCar-T (CD19 CAR-T) | NCIt:C147156 | INFUSION | IV |
| DEVICE | Cardiac Monitor v3 | SNOMED:706687002 | DEVICE | — |
| DIAGNOSTIC | Companion IVD assay | (LOINC) | — | — |
| COMBINATION_PRODUCT | Drug-eluting stent | SNOMED:715974005 | DEVICE+DRUG | — |
The foundation doesn't know the type-specific specifics. External systems (electronic Drug Master Files, device databases, IRT systems) hold implementation specifics; TOP holds the universal trial-conduct-realm reference and the supply-chain accountability (Lot, Kit, Sponsor).
| Attribute | Type | Notes |
|---|---|---|
| investigationalProductId | NGSI-LD URI | Globally unique |
| investigationalProductName | string | Operator-friendly name |
| genericName / brandName | string · optional | When applicable |
| investigationalProductType | enum (6) — DRUG / BIOLOGIC / DEVICE / DIAGNOSTIC / COMBINATION_PRODUCT / OTHER | Operator-grounded discriminator (sort/filter only, NOT a shape discriminator) |
| mechanismOfAction | string · optional | e.g., "PD-L1 checkpoint inhibitor" |
| dosageForm | string · optional | TABLET / INJECTION / INFUSION / DEVICE / etc. |
| routeOfAdministration | string · optional | ORAL / IV / IM / SC / TOPICAL / etc. |
| strength | string · optional | e.g., "200 mg/vial" |
| isBlinded | boolean | True requires hasKit (SHACL #37) |
| regulatoryStatus | enum (5) — INVESTIGATIONAL / APPROVED_OFF_LABEL / EXPANDED_ACCESS / MARKETED_COMPARATOR / OTHER | — |
| regulatorySource | string · optional | e.g., "FDA IND #154321" |
| biomedicalConceptCode | string · optional | NCIt / SNOMED / RxNorm / UNII reference |
| investigationalProductStatus | enum (5) — PLANNED / IN_DEVELOPMENT / IN_USE / DISCONTINUED / WITHDRAWN | NGSI-LD temporal property |
| validFrom / validUntil | dateTime · optional | Operational validity bracket |
| Relationship | Target | Card. | Notes |
|---|---|---|---|
| suppliedBySponsor | Sponsor | 1..1 | Per 21 CFR 312.6: the Sponsor is regulatorily accountable for IP labeling, lot tracking, and dispensation oversight |
| forStudy | Study | 0..N | 0..N for platform / basket / expanded-access products used across multiple studies |
| hasLot | Lot | 0..N | Manufacturing batches |
| hasKit | Kit | 0..N | Required when isBlinded=true (SHACL #37) |
| governedByDocument | Document | 0..N | IB, IP handling instructions, label, lot CoA |
| Attribute | Type | Notes |
|---|---|---|
| lotId | NGSI-LD URI | |
| lotNumber | string | Sponsor-assigned (e.g., "DRX-2026-0117") |
| manufacturedDate / releaseDate / expirationDate / retestDate | date | Manufacturing lifecycle dates |
| manufacturer / manufacturingFacility | string · optional | Manufacturer identification |
| quantityProduced | integer · optional | Number of units |
| lotStatus | enum (7) — MANUFACTURING / RELEASED / IN_DISTRIBUTION / DISTRIBUTED / EXPIRED / RECALLED / DESTROYED | NGSI-LD temporal property; SHACL #39 (soft) and #40 (hard) enforce expiry consistency |
| Attribute | Type | Notes |
|---|---|---|
| kitId | NGSI-LD URI | |
| kitNumber | string | Sponsor / IRT-assigned |
| packagedDate | date · optional | |
| treatmentAssignment | string · optional | IRT-issued treatment-assignment code (e.g., "TREATMENT_A"); the unblinding key is held separately by the IRT vendor |
| assignmentDate | date · optional | Date IRT assigned the kit to a Participant |
| kitStatus | enum (7) — PACKAGED / IN_INVENTORY / ASSIGNED / DISPENSED / RETURNED / RECONCILED / DESTROYED | NGSI-LD temporal property; SHACL #38 enforces ASSIGNED/DISPENSED → assignedToParticipant populated |
| belongsToLot → Lot (1..1) | relationship | Each Kit traces to exactly one Lot |
| assignedToParticipant → Participant (0..1) | relationship | Empty until IRT assignment |
Per FIRST-PRINCIPLES universal-foundation posture: don't split into separate Drug / Biologic / Device entities. One TOP entity with investigationalProductType enum carries the operator-grounded discrimination. Same architectural moat as Activity + Task in v0.5 and OversightBody in v0.5.1: standards-up vendors model N entity types per product family; TOP carries one universal pattern.
Lot and Kit lifecycles are bound to the parent IP. Their identity is hierarchical: IP / Lot / Kit. Per the established sub-object pattern (consistent with Sponsor's Lot / Study's Arm / Visit's Activity), they live as sub-objects under IP. A Lot can't exist without an IP; a Kit can't exist without a Lot.
Dispensation events (where IP gets administered to a Participant) live in the universal Visit > Activity > Task foundation from v0.5: an Activity with activityType=IP_ADMINISTRATION, plus a Task with taskValueType=STRUCTURED carrying the dose/route/lot/kit reference. Per universal-foundation posture, no specialized DispensationRecord entity. The Task can reference Lot and Kit by URI for accountability.
IP.isBlinded=true requires the Kit sub-object pattern (SHACL #37). Each Kit carries the IRT-issued treatmentAssignment code; the unblinding key is held separately by the IRT vendor (TOP doesn't carry the unblinding map — that's a deployment-edge security boundary). For open-label studies, isBlinded=false and dispensation Activities reference Lot directly via Task.taskValue without Kit indirection.
IP is the artifact under investigation; Lot is a manufacturing batch; Kit is a packaging unit. All are prov:Entity in PROV terms. The dispensation Activity (in Visit) is prov:Activity that prov:used the Lot/Kit (the kit is consumed in the act of dispensation). PROV chain queries: "which kits did Maria receive at which visits, from which lots, manufactured when?" assemble cleanly from foundation triples.
| # | Severity | Constraint |
|---|---|---|
| 37 | Hard | Blinded IP requires kits. IP with isBlinded=true must have at least one hasKit. Blinded studies require kit-level packaging for masking. |
| 38 | Hard | Assigned/dispensed kit needs participant. Kit with kitStatus in {ASSIGNED, DISPENSED} must have assignedToParticipant populated. |
| 39 | Soft | Past-expiry lot should be flagged. Lot with expirationDate in the past should have lotStatus in {EXPIRED, RECALLED, DESTROYED}. |
| 40 | Hard | EXPIRED status requires past expiry. Lot with lotStatus=EXPIRED must have expirationDate populated and in the past. |
| TOP entity | FHIR R5 | SDTM | USDM | ICH |
|---|---|---|---|---|
| InvestigationalProduct | MedicationKnowledge (drugs/biologics); DeviceDefinition (devices); Substance (raw substances) | (define.xml SUPPDM or vendor extension) | StudyIntervention + AdministrableProduct | ICH E6(R3) §2.7; 21 CFR 312.6 |
| Lot | Medication (with batch lotNumber + expirationDate) | EX (lot tracked per dispensation row) | (implicit in StudyIntervention's batch tracking) | 21 CFR 312.62 (Investigator records — drug disposition) |
| Kit | Medication (with batch + kit identifier extension) | EX (kit number tracked per dispensation row) | (implicit; IRT manages kit-to-treatment mapping) | ICH E9 §2.3 (Randomization and Blinding) |
| Dispensation event | MedicationAdministration | EX (Exposure) | (captured at runtime, not in USDM) | ICH E6(R3) §2.7 |
Key insight: TOP doesn't have a separate Dispensation entity because the universal Visit > Activity > Task foundation handles it. The Activity (activityType=IP_ADMINISTRATION) projects to FHIR MedicationAdministration and SDTM EX rows; the Task carries the structured dose/route/lot/kit data. The PROV chain assembles automatically.
Drug X (anti-PD-L1 mAb, IV infusion) is blinded; kits assigned via IRT to Maria at C1D1.
An open-label Phase 2 study uses Drug Y (oral tablet); no blinding, no IRT kit assignment.
Manufacturing investigation surfaces a contamination issue with Lot DRX-2026-0117. Sponsor recalls.
A regulator asks: "show me the full chain of custody for the Drug X dose Maria received at C1D1."