Findings
Generated by scripts/check_findings.py from the pinned inputs. Do not edit by hand.
Statements are in authored/findings.ttl; this report adds what each test observed.
Ready to raise (4)
The published artefacts contradict themselves, or leave undefined something they rely on. The pinned files alone show it, and the ask is to make the artefacts consistent.
| Finding | Evidence tier | Holds | Why this standing |
|---|---|---|---|
| Abstract-class attributes carry a subclass's C-code | Model-stated | yes | Two published artefacts, dataStructure.yml and USDM_CT.xlsx, give different C-codes for the same attributes. |
| Extension classes carry no definitions | Model-stated | yes | Two classes in the published model have no definitions in any published artefact. |
| Population-level summary: term and definition disagree | Authored | yes | One USDM_CT.xlsx row carries two meanings: the preferred term is the ICH E9(R1) attribute, the definition a narrative synopsis. |
| Procedure type is an uncoded classification | Definition-stated | yes | USDM_CT.xlsx treats the same definition pattern as coded in one place and as a free string in another. |
For discussion (17)
Depends on a modelling choice CDISC may have made on purpose, or on content of the published example files.
| Finding | Evidence tier | Holds | Why this standing |
|---|---|---|---|
| Biomedical concept property datatypes are uncontrolled names | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Biomedical concept references are relative API paths | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Code systems are named by free strings | Example-observed | yes | Identifying code systems by strings is a modelling choice; the examples show its effect. |
| Schedule conditions are strings, not Condition instances | Model-stated | yes | Holding schedule conditions as strings may be a deliberate choice; the ask would be a modelling change. |
| Objectives, endpoints and criteria have no link to document sections | Model-stated | yes | The model may leave the link between design elements and document sections out of scope on purpose. |
| Section references are used only for amendment changes | Model-stated | yes | Limiting section references to amendment changes may be deliberate. |
| Eligibility identifier identifies only together with the category | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| No link between Endpoint and what it requires | Model-stated | yes | The model may leave endpoint dependencies out of scope on purpose. |
| Intercurrent event strategy: fixed set, specified as text | Authored | yes | The gap to ICH E9(R1) is plain, but asking for a value list is a modelling request. |
| NarrativeContent holds its text by reference | Model-stated | yes | Holding the text in a separate referenced item may be deliberate, for reuse across sections. |
| Narrative refers to model instances by markup in text | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Syntax-template parameters resolve through markup | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Amendment number: definition says numerals, an example uses a letter | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Syntax-template parameters are rarely used | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Template parameters are matched by name inside text | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Timing values follow ISO 8601 by convention only | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
| Timing labels are typed, not generated from the value | Example-observed | yes | Rests on the published example files, which are not mature study definitions. |
Abstract-class attributes carry a subclass's C-code
abstract-class-attribute-ccodes · Model-stated · Ready to raise
For attributes declared on abstract classes, dataStructure.yml carries the C-code, preferred term and definition of one concrete subclass, not the abstract class's own entry in USDM_CT.xlsx. usdm-rdf renders the YAML, so its skos:exactMatch on these properties points to the subclass concept. Example: SyntaxTemplate.text carries C207478 Characteristic Text; USDM_CT.xlsx lists C207578 Syntax Template Text for SyntaxTemplate.text.
Observed: 27 of 388 C-coded attributes in dataStructure.yml differ from USDM_CT.xlsx. All differences are on abstract classes (Identifier 1, PopulationDefinition 9, ScheduledInstance 3, StudyDesign 9, SyntaxTemplate 5); 27 C-coded attributes are declared on abstract classes in total. usdm-rdf skos:exactMatch follows the YAML code for all 27.
Extension classes carry no definitions
extension-attributes-undefined · Model-stated · Ready to raise
ExtensionAttribute and ExtensionClass have no rows in USDM_CT.xlsx and no definitions in usdm-rdf. No published example uses them.
Observed: USDM_CT.xlsx rows for these classes: 0. usdm-rdf properties: 17, with skos:definition: 0. Instances in the published examples: 0.
Population-level summary: term and definition disagree
population-summary-term-vs-definition · Authored · Ready to raise
Estimand.populationSummary has the preferred term "Population-Level Summary", the ICH E9(R1) estimand attribute. Its definition, "A synopsis of the clinical endpoint of interest within the analysis target study population", describes a narrative synopsis. The attribute is left unclassified in the overlay until the two are reconciled.
Observed: C188853 Population-Level Summary: A synopsis of the clinical endpoint of interest within the analysis target study population. Has Value List N.
Procedure type is an uncoded classification
procedure-type-uncoded · Definition-stated · Ready to raise
Procedure.procedureType and Endpoint.level share the definition pattern "A characterization or classification of ...". Endpoint.level has a value list; Procedure.procedureType has none and is a string.
Observed: Procedure.procedureType (C188848): Has Value List N. Endpoint.level (C188826): Has Value List Y (C188726).
Biomedical concept property datatypes are uncontrolled names
bc-property-datatype-names · Example-observed · For discussion
BiomedicalConceptProperty.datatype has no value list. The published examples use a small set of datatype names, including both 'text' and 'string', with nothing in the model to say whether they differ.
Observed: 638 BiomedicalConceptProperty instances, 420 with empty datatype. Names used: text 93, float 69, integer 26, datetime 20, string 8, decimal 2. USDM_CT.xlsx Has Value List: N.
Biomedical concept references are relative API paths
bc-reference-library-paths · Example-observed · For discussion
In the published examples, every BiomedicalConcept.reference is a relative CDISC Library API path, most into SDTM dataset specializations and some into biomedical concept packages. Resolving one needs a base URL and access to the Library.
Observed: 116 BiomedicalConcept instances, 46 distinct references: 43 of the form /mdr/specializations/sdtm/packages/
Code systems are named by free strings
code-system-free-strings · Example-observed · For discussion
Code.codeSystem and Code.codeSystemVersion are free strings. In the published examples the code system is given in mixed forms, a URL for CDISC terminology and names for the others, and versions in several formats. A coded value is identified by strings, not by an IRI.
Observed: 2631 Code instances. codeSystem / codeSystemVersion pairs: 'http://www.cdisc.org' / '2024-09-27' 2534; 'ISO 3166 1 alpha3' / '2020-08' 42; 'SPONSOR' / '12' 25; 'SNOMED' / 'January 31, 2018' 20; 'ISO' / '1' 7; 'ICD-10-CM' / '1' 1; 'FDA' / '' 1; 'HL7' / '' 1.
Schedule conditions are strings, not Condition instances
condition-not-referenced · Model-stated · For discussion
ConditionAssignment.condition and ScheduleTimeline.entryCondition have range xsd:string. The model has a Condition class, but neither attribute references it.
Observed: ASK returned true, expected true.
Objectives, endpoints and criteria have no link to document sections
design-elements-not-linked-to-document · Model-stated · For discussion
No property connects Objective, Endpoint, EligibilityCriterion or EligibilityCriterionItem to the document structure (StudyDefinitionDocument, StudyDefinitionDocumentVersion, NarrativeContent, NarrativeContentItem, DocumentContentReference), in either direction.
Observed: ASK returned false, expected false.
Section references are used only for amendment changes
document-content-reference-amendments-only · Model-stated · For discussion
DocumentContentReference, the class that points at a document section by number and title, is the range of one property only: StudyChange.changedSections.
Observed: ASK returned false, expected false.
Eligibility identifier identifies only together with the category
eligibility-identifier-needs-category · Example-observed · For discussion
In some published examples, EligibilityCriterion.identifier restarts per category (inclusion and exclusion each start at 1) and is not repeated within a category. The identifier alone does not identify a criterion; the identifier with the category does.
Observed: Alexion_NCT04573309_Wilsons.json InterventionalStudyDesign_1: 31 criteria, 12 identifiers repeated, 0 repeated within a category; CDISC_Pilot_Study.json InterventionalStudyDesign_1: 31 criteria, 0 identifiers repeated, 0 repeated within a category; EliLilly_NCT03421379_Diabetes.json InterventionalStudyDesign_1: 36 criteria, 0 identifiers repeated, 0 repeated within a category; devices.json InterventionalStudyDesign_1: 4 criteria, 0 identifiers repeated, 0 repeated within a category; observational.json ObservationalStudyDesign_1: 5 criteria, 2 identifiers repeated, 0 repeated within a category.
No link between Endpoint and what it requires
endpoint-activity-gap · Model-stated · For discussion
No property connects Endpoint, or its superclass SyntaxTemplate, to Activity, Procedure, ScheduledActivityInstance or the biomedical concept classes, in either direction. The model does not carry which activities or biomedical concepts an endpoint depends on.
Observed: ASK returned false, expected false.
Intercurrent event strategy: fixed set, specified as text
intercurrent-event-strategy-textual · Authored · For discussion
IntercurrentEvent.strategy is defined as a textual description and has no value list. ICH E9(R1), section A.3.2, names five strategies: treatment policy, hypothetical, composite variable, while on treatment, principal stratum. The overlay classifies the attribute as classification as text; read by its definition alone it would be prose.
Observed: C188857 Intercurrent Event Strategy: A textual description of the planned strategy to manage and/or mitigate intercurrent events. Has Value List N.
NarrativeContent holds its text by reference
narrative-content-text-by-reference · Model-stated · For discussion
NarrativeContent is defined as "The container that holds an instance of unstructured text and which may include objects such as tables, figures, and images." The class has no text attribute. Its text is a NarrativeContentItem, which NarrativeContent references (contentItemId, relationship type Ref, 0..1) and which StudyVersion composes (narrativeContentItems). The section and its text are separate instances, linked by reference.
Observed: ASK returned true, expected true.
Narrative refers to model instances by markup in text
narrative-references-by-markup · Example-observed · For discussion
In the published examples, NarrativeContentItem.text refers to model instances by usdm:ref elements inside the XHTML string, each naming a class (klass), an instance (id) and one attribute. The reference runs from the section to one attribute value. dataStructure.yml does not mention the convention.
Observed: Alexion_NCT04573309_Wilsons.json: 467 usdm:ref in 105 narrative items, 17 classes; CDISC_Pilot_Study.json: 350 usdm:ref in 85 narrative items, 14 classes; EliLilly_NCT03421379_Diabetes.json: 234 usdm:ref in 112 narrative items, 16 classes; devices.json: 41 usdm:ref in 133 narrative items, 14 classes; observational.json: 26 usdm:ref in 6 narrative items, 11 classes. dataStructure.yml mentions usdm:ref: no.
Syntax-template parameters resolve through markup
parameter-reference-by-markup · Example-observed · For discussion
In the published examples, ParameterMap.reference holds usdm:ref markup, the same convention as narrative text. A syntax-template parameter resolves to a model value through markup in a string, not through a model reference.
Observed: usdm:ref markup in 14 of 15 ParameterMap.reference values. Other values: observational.json tag value_key = 1234.0.
Amendment number: definition says numerals, an example uses a letter
study-amendment-number-not-numerals · Example-observed · For discussion
StudyAmendment.number is defined as "A string of numerals that uniquely identifies a protocol amendment." A published example uses a letter.
Observed: 11 StudyAmendment.number values; not all digits: EliLilly_NCT03421379_Diabetes.json 'A'.
Syntax-template parameters are rarely used
syntax-template-parameters-rarely-used · Example-observed · For discussion
In the published examples, most syntax-template instances (Objective, Endpoint, EligibilityCriterionItem, IntercurrentEvent, Condition, Characteristic) have no dictionary, so their text carries no parameters the model can see.
Observed: Syntax-template instances with a dictionary: 13 of 245. Per example: Alexion_NCT04573309_Wilsons.json: 1 of 87; CDISC_Pilot_Study.json: 4 of 51; EliLilly_NCT03421379_Diabetes.json: 0 of 73; devices.json: 3 of 17; observational.json: 5 of 17.
Template parameters are matched by name inside text
template-tags-by-markup · Example-observed · For discussion
Syntax-template text marks parameters with usdm:tag elements that name a ParameterMap.tag. The stored tag is a bare name; the angle brackets that the NCI definition of ParameterMap.tag describes appear only in the template text. Resolution is by name inside a string, so a tag can lack a matching ParameterMap, and the published examples include such a case.
Observed: 16 usdm:tag elements in 13 texts; stored tags containing angle brackets: 0. Unresolved: observational.json EligibilityCriterionItem_2 'max_agexxx'.
Timing values follow ISO 8601 by convention only
timing-iso8601-convention · Example-observed · For discussion
In the published examples, every non-empty Timing.value, windowLower and windowUpper is an ISO 8601 duration. Neither dataStructure.yml nor USDM_CT.xlsx names a syntax for them; the range is xsd:string.
Observed: ISO 8601 durations among non-empty values: value 153 of 153; windowLower 30 of 30; windowUpper 30 of 30. '8601' in dataStructure.yml: no; in USDM_CT.xlsx definitions: no.
Timing labels are typed, not generated from the value
timing-labels-restate-values · Example-observed · For discussion
Timing.valueLabel restates Timing.value in free text. In the published examples the same value carries differently spelled labels, so the label is not generated from the value.
Observed: 76 distinct Timing.value values; 8 carry more than one valueLabel: P14D: '14 Days', '14 days'; P1D: '1 Day', '1 Days'; P2D: '2 Days', '2 days'; P2W: '2 Weeks', '2 weeks'; PT0M: '0 min', '0 mins', '0 minutes'; PT15M: '15 min', '15 mins'; PT30M: '30 min', '30 mins', '30 minutes'; PT5M: '5 min', '5 mins'.