nci-cidc-api-modules 1.2.23__py3-none-any.whl → 1.2.24__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. cidc_api/models/db/stage2/__init__.py +78 -0
  2. cidc_api/models/db/stage2/additional_treatment_orm.py +22 -0
  3. cidc_api/models/db/stage2/administrative_person_orm.py +25 -0
  4. cidc_api/models/db/stage2/administrative_role_assignment_orm.py +28 -0
  5. cidc_api/models/db/stage2/adverse_event_orm.py +47 -0
  6. cidc_api/models/db/stage2/arm_orm.py +23 -0
  7. cidc_api/models/db/stage2/baseline_clinical_assessment_orm.py +23 -0
  8. cidc_api/models/db/stage2/cohort_orm.py +23 -0
  9. cidc_api/models/db/stage2/comorbidity_orm.py +24 -0
  10. cidc_api/models/db/stage2/consent_group_orm.py +31 -0
  11. cidc_api/models/db/stage2/contact_orm.py +32 -0
  12. cidc_api/models/db/stage2/demographic_orm.py +44 -0
  13. cidc_api/models/db/stage2/disease_orm.py +53 -0
  14. cidc_api/models/db/stage2/exposure_orm.py +21 -0
  15. cidc_api/models/db/stage2/file_orm.py +38 -0
  16. cidc_api/models/db/stage2/gvhd_diagnosis_acute_orm.py +33 -0
  17. cidc_api/models/db/stage2/gvhd_diagnosis_chronic_orm.py +37 -0
  18. cidc_api/models/db/stage2/gvhd_organ_acute_orm.py +20 -0
  19. cidc_api/models/db/stage2/gvhd_organ_chronic_orm.py +20 -0
  20. cidc_api/models/db/stage2/institution_orm.py +33 -0
  21. cidc_api/models/db/stage2/medical_history_orm.py +29 -0
  22. cidc_api/models/db/stage2/other_clinical_endpoint_orm.py +28 -0
  23. cidc_api/models/db/stage2/other_malignancy_orm.py +30 -0
  24. cidc_api/models/db/stage2/participant_orm.py +79 -0
  25. cidc_api/models/db/stage2/prior_treatment_orm.py +28 -0
  26. cidc_api/models/db/stage2/publication_orm.py +31 -0
  27. cidc_api/models/db/stage2/radiotherapy_dose_orm.py +39 -0
  28. cidc_api/models/db/stage2/response_by_system_orm.py +28 -0
  29. cidc_api/models/db/stage2/response_orm.py +27 -0
  30. cidc_api/models/db/stage2/shipment_orm.py +47 -0
  31. cidc_api/models/db/stage2/shipment_specimen_orm.py +24 -0
  32. cidc_api/models/db/stage2/specimen_orm.py +100 -0
  33. cidc_api/models/db/stage2/stem_cell_transplant_orm.py +25 -0
  34. cidc_api/models/db/stage2/surgery_orm.py +27 -0
  35. cidc_api/models/db/stage2/therapy_agent_dose_orm.py +31 -0
  36. cidc_api/models/db/stage2/treatment_orm.py +39 -0
  37. cidc_api/models/db/stage2/trial_orm.py +60 -0
  38. cidc_api/models/pydantic/stage2/__init__.py +78 -0
  39. cidc_api/models/pydantic/stage2/additional_treatment.py +23 -0
  40. cidc_api/models/pydantic/stage2/administrative_person.py +30 -0
  41. cidc_api/models/pydantic/stage2/administrative_role_assignment.py +16 -0
  42. cidc_api/models/pydantic/stage2/adverse_event.py +100 -0
  43. cidc_api/models/pydantic/stage2/arm.py +16 -0
  44. cidc_api/models/pydantic/stage2/base.py +30 -0
  45. cidc_api/models/pydantic/stage2/baseline_clinical_assessment.py +23 -0
  46. cidc_api/models/pydantic/stage2/cohort.py +16 -0
  47. cidc_api/models/pydantic/stage2/comorbidity.py +36 -0
  48. cidc_api/models/pydantic/stage2/consent_group.py +30 -0
  49. cidc_api/models/pydantic/stage2/contact.py +35 -0
  50. cidc_api/models/pydantic/stage2/demographic.py +114 -0
  51. cidc_api/models/pydantic/stage2/disease.py +144 -0
  52. cidc_api/models/pydantic/stage2/exposure.py +32 -0
  53. cidc_api/models/pydantic/stage2/file.py +44 -0
  54. cidc_api/models/pydantic/stage2/gvhd_diagnosis_acute.py +33 -0
  55. cidc_api/models/pydantic/stage2/gvhd_diagnosis_chronic.py +32 -0
  56. cidc_api/models/pydantic/stage2/gvhd_organ_acute.py +22 -0
  57. cidc_api/models/pydantic/stage2/gvhd_organ_chronic.py +23 -0
  58. cidc_api/models/pydantic/stage2/institution.py +10 -0
  59. cidc_api/models/pydantic/stage2/medical_history.py +36 -0
  60. cidc_api/models/pydantic/stage2/other_clinical_endpoint.py +32 -0
  61. cidc_api/models/pydantic/stage2/other_malignancy.py +45 -0
  62. cidc_api/models/pydantic/stage2/participant.py +47 -0
  63. cidc_api/models/pydantic/stage2/prior_treatment.py +52 -0
  64. cidc_api/models/pydantic/stage2/publication.py +37 -0
  65. cidc_api/models/pydantic/stage2/radiotherapy_dose.py +79 -0
  66. cidc_api/models/pydantic/stage2/response.py +71 -0
  67. cidc_api/models/pydantic/stage2/response_by_system.py +109 -0
  68. cidc_api/models/pydantic/stage2/shipment.py +48 -0
  69. cidc_api/models/pydantic/stage2/shipment_specimen.py +15 -0
  70. cidc_api/models/pydantic/stage2/specimen.py +211 -0
  71. cidc_api/models/pydantic/stage2/stem_cell_transplant.py +35 -0
  72. cidc_api/models/pydantic/stage2/surgery.py +49 -0
  73. cidc_api/models/pydantic/stage2/therapy_agent_dose.py +67 -0
  74. cidc_api/models/pydantic/stage2/treatment.py +50 -0
  75. cidc_api/models/pydantic/stage2/trial.py +85 -0
  76. {nci_cidc_api_modules-1.2.23.dist-info → nci_cidc_api_modules-1.2.24.dist-info}/METADATA +1 -1
  77. nci_cidc_api_modules-1.2.24.dist-info/RECORD +104 -0
  78. nci_cidc_api_modules-1.2.23.dist-info/RECORD +0 -29
  79. {nci_cidc_api_modules-1.2.23.dist-info → nci_cidc_api_modules-1.2.24.dist-info}/WHEEL +0 -0
  80. {nci_cidc_api_modules-1.2.23.dist-info → nci_cidc_api_modules-1.2.24.dist-info}/licenses/LICENSE +0 -0
  81. {nci_cidc_api_modules-1.2.23.dist-info → nci_cidc_api_modules-1.2.24.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,79 @@
1
+ from typing import Self
2
+
3
+ from pydantic import NonNegativeInt, NonNegativeFloat, model_validator
4
+
5
+ from .base import Base
6
+ from cidc_api.models.types import (
7
+ YNU,
8
+ RadiotherapyProcedure,
9
+ UberonAnatomicalTerm,
10
+ RadiotherapyDoseUnits,
11
+ RadiationExtent,
12
+ )
13
+
14
+
15
+ class RadiotherapyDose(Base):
16
+ __data_category__ = "radiotherapy_dose"
17
+ __cardinality__ = "many"
18
+
19
+ # The unique internal identifier for the radiotherapy dose record
20
+ therapy_agent_dose_id: int | None = None
21
+
22
+ # The unique internal identifier for the associated treatment record
23
+ treatment_id: int | None = None
24
+
25
+ # Number of days from enrollment date to the start of the radiotherapy dose.
26
+ days_to_start: NonNegativeInt
27
+
28
+ # Number of days from enrollment date to the end of the radiotherapy dose.
29
+ days_to_end: NonNegativeInt
30
+
31
+ # The term that describes the kind of radiotherapy procedure administered.
32
+ procedure: RadiotherapyProcedure
33
+
34
+ # The Uberon anatomical term for the site of surgery.
35
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=14461856%20and%20ver_nr=1
36
+ anatomical_location: UberonAnatomicalTerm | None = None
37
+
38
+ # Indicates whether the record represents the total dose for a radiotherapy treatment course (which may be either
39
+ # a multi-fractionated or a single-fraction dose).
40
+ is_total_dose: bool
41
+
42
+ # The number of fractions a participant received to deliver the radiation dose.
43
+ number_of_fractions: NonNegativeInt | None = None
44
+
45
+ # The dose amount received by the participant.
46
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=13433490%20and%20ver_nr=1
47
+ received_dose: NonNegativeFloat
48
+
49
+ # Unit of measure for the dose of the radiotherapy to be received by the participant.
50
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=13383458%20and%20ver_nr=1
51
+ received_dose_units: RadiotherapyDoseUnits
52
+
53
+ # The planned dose amount for the participant.
54
+ planned_dose: NonNegativeFloat | None = None
55
+
56
+ # Unit of measure for the planned total dose of the radiotherapy to be received by the participant.
57
+ planned_dose_units: RadiotherapyDoseUnits | None = None
58
+
59
+ # Indicates if the radiotherapy dose was changed, missed, or delayed.
60
+ dose_changes_delays: YNU
61
+
62
+ # Description of the radiotherapy dose changes, misses, or delays.
63
+ changes_delays_description: str | None = None
64
+
65
+ # The extent of radiation exposure administered to the patient's body during radiation therapy.
66
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=7063755%20and%20ver_nr=1
67
+ radiation_extent: RadiationExtent
68
+
69
+ @model_validator(mode="after")
70
+ def validate_changes_delays_description_cr(self) -> Self:
71
+ if self.dose_changes_delays == "Yes" and not self.changes_delays_description:
72
+ raise ValueError('If dose_changes_delays is "Yes", please provide changes_delays_description.')
73
+ return self
74
+
75
+ @model_validator(mode="after")
76
+ def validate_planned_dose_units_cr(self) -> Self:
77
+ if self.planned_dose and not self.planned_dose_units:
78
+ raise ValueError("If planned_dose is provided, please provide planned_dose_units.")
79
+ return self
@@ -0,0 +1,71 @@
1
+ from typing import Self
2
+
3
+ from pydantic import NonNegativeInt, model_validator
4
+
5
+ from .base import Base
6
+ from cidc_api.models.types import SurvivalStatus, YNUNA, CauseOfDeath
7
+
8
+
9
+ class Response(Base):
10
+ __data_category__ = "response"
11
+ __cardinality__ = "one"
12
+
13
+ # The unique internal identifier for the response record
14
+ response_id: int | None = None
15
+
16
+ # The unique internal identifier for the associated participant
17
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=12220014%20and%20ver_nr=1
18
+ participant_id: int | None = None
19
+
20
+ # The response to a question that describes a participant's survival status.
21
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=2847330%20and%20ver_nr=1
22
+ survival_status: SurvivalStatus
23
+
24
+ # Number of days from enrollment date to death date.
25
+ overall_survival: NonNegativeInt | None = None
26
+
27
+ # Indicator for whether there was an abscopal effect on disease after local therapy.
28
+ abscopal_response: YNUNA | None = None
29
+
30
+ # Indicates if pathological complete response (pCR) occurred.
31
+ pathological_complete_response: YNUNA | None = None
32
+
33
+ # Number of days between enrollment date and date of death, if applicable.
34
+ days_to_death: NonNegativeInt | None = None
35
+
36
+ # The circumstance or condition of greatest rank or importance that results in the death of the participant
37
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=4783274%20and%20ver_nr=1
38
+ cause_of_death: CauseOfDeath | None = None
39
+
40
+ # Indicates whether participant was evaluable for toxicity (adverse events, DLT, etc.) overall.
41
+ evaluable_for_toxicity: bool
42
+
43
+ # Indicates whether participant was evaluable for efficacy (for example, response, PFS, OS, etc.) overall.
44
+ evaluable_for_efficacy: bool
45
+
46
+ # Days from enrollment date to the last time patient had follow-up.
47
+ days_to_last_follow_up: NonNegativeInt | None = None
48
+
49
+ @model_validator(mode="after")
50
+ def validate_overall_survival_cr(self) -> Self:
51
+ if self.survival_status != "Unknown" and not self.overall_survival:
52
+ raise ValueError('If survival_status is not "Unknown" then overall_survival is required.')
53
+ return self
54
+
55
+ @model_validator(mode="after")
56
+ def validate_cause_of_death_cr(self) -> Self:
57
+ if self.survival_status == "Dead" and not self.cause_of_death:
58
+ raise ValueError('If survival_status is "Dead" then cause_of_death is required.')
59
+ return self
60
+
61
+ @model_validator(mode="after")
62
+ def validate_cause_of_death_cr2(self) -> Self:
63
+ if self.survival_status == "Alive" and self.cause_of_death:
64
+ raise ValueError('If survival_status is "Alive", please leave cause_of_death blank.')
65
+ return self
66
+
67
+ @model_validator(mode="after")
68
+ def validate_days_to_death_cr(self) -> Self:
69
+ if self.survival_status in ["Alive", "Unknown"] and self.days_to_death:
70
+ raise ValueError("If survival_status does not indicate death, please leave days_to_death blank.")
71
+ return self
@@ -0,0 +1,109 @@
1
+ from typing import Self
2
+
3
+ from pydantic import PositiveInt, model_validator
4
+
5
+ from .base import Base
6
+ from cidc_api.models.types import ResponseSystem, ResponseSystemVersion, BestOverallResponse, YNUNA
7
+
8
+
9
+ negative_response_values = [
10
+ "Progressive Disease",
11
+ "Stable Disease",
12
+ "immune Unconfirmed Progressive Disease",
13
+ "immune Confirmed Progressive Disease",
14
+ "immune Stable Disease",
15
+ "Not available",
16
+ "Not assessed",
17
+ ]
18
+
19
+
20
+ class ResponseBySystem(Base):
21
+ __data_category__ = "response_by_system"
22
+ __cardinality__ = "many"
23
+
24
+ # The unique internal identifier for this ResponseBySystem record
25
+ response_by_system_id: int | None = None
26
+
27
+ # The unique internal identifier for the associated participant
28
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=12220014%20and%20ver_nr=1
29
+ participant_id: int | None = None
30
+
31
+ # A standardized method used to evaluate and categorize the participant’s clinical response to treatment based on predefined criteria.
32
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=13381490%20and%20ver_nr=1
33
+ response_system: ResponseSystem
34
+
35
+ # The release version of the clinical assessment system used to evaluate a participant’s response to treatment.
36
+ response_system_version: ResponseSystemVersion
37
+
38
+ # Confirmed best overall response to study treatment by the corresponding response system.
39
+ best_overall_response: BestOverallResponse
40
+
41
+ # Days from first response to progression.
42
+ response_duration: PositiveInt | None = None
43
+
44
+ # Indicates whether a patient achieved a durable clinical benefit.
45
+ durable_clinical_benefit: bool | None = None
46
+
47
+ # Number of days between enrollment date and the date of first response to trial treatment.
48
+ days_to_first_response: PositiveInt | None = None
49
+
50
+ # Number of days between enrollment date and the date of the best response to trial treatment.
51
+ days_to_best_response: PositiveInt | None = None
52
+
53
+ # Indicates whether a participant's disease progressed.
54
+ progression: YNUNA
55
+
56
+ # Number of days between enrollment date and date of disease progression.
57
+ days_to_disease_progression: PositiveInt | None = None
58
+
59
+ # Indicator to identify whether a patient had a Progression-Free Survival (PFS) event.
60
+ progression_free_survival_event: YNUNA
61
+
62
+ # The number of days from the date the patient was enrolled in the study to the date the patient was last verified to be free of progression.
63
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=5143957%20and%20ver_nr=1
64
+ progression_free_survival: PositiveInt | None = None
65
+
66
+ @model_validator(mode="after")
67
+ def validate_response_duration_cr(self) -> Self:
68
+ if self.best_overall_response in negative_response_values and self.response_duration:
69
+ raise ValueError(
70
+ "If best_overall_response does not indicate a positive response, \
71
+ please leave response_duration blank."
72
+ )
73
+ return self
74
+
75
+ @model_validator(mode="after")
76
+ def validate_days_to_first_response_cr(self) -> Self:
77
+ if self.best_overall_response in negative_response_values and self.days_to_first_response:
78
+ raise ValueError(
79
+ "If best_overall_response does not indicate a positive response, \
80
+ please leave days_to_first_response blank."
81
+ )
82
+ return self
83
+
84
+ @model_validator(mode="after")
85
+ def validate_days_to_best_response_cr(self) -> Self:
86
+ if self.best_overall_response in negative_response_values and self.days_to_best_response:
87
+ raise ValueError(
88
+ "If best_overall_response does not indicate a positive response, \
89
+ please leave days_to_best_response blank."
90
+ )
91
+ return self
92
+
93
+ @model_validator(mode="after")
94
+ def validate_days_to_disease_progression_cr(self) -> Self:
95
+ if self.progression in ["No", "Unknown", "Not Applicable"] and self.days_to_disease_progression:
96
+ raise ValueError(
97
+ "If progression does not indicate confirmed progression of the disease, \
98
+ please leave days_to_disease_progress blank."
99
+ )
100
+ return self
101
+
102
+ @model_validator(mode="after")
103
+ def validate_progression_free_survival_cr(self) -> Self:
104
+ if self.progression_free_survival_event in ["Unknown", "Not Applicable"] and self.progression_free_survival:
105
+ raise ValueError(
106
+ "If progression_free_survival_event is not known, \
107
+ please leave progression_free_survival blank."
108
+ )
109
+ return self
@@ -0,0 +1,48 @@
1
+ from datetime import datetime
2
+
3
+ from .base import Base
4
+ from cidc_api.models.types import AssayPriority, AssayType, Courier, ShipmentCondition, ShipmentQuality
5
+
6
+
7
+ class Shipment(Base):
8
+ # The unique internal identifier for the shipment record.
9
+ shipment_id: int | None = None
10
+
11
+ # The unique internal identifier for the associated institution.
12
+ institution_id: int | None = None
13
+
14
+ # The unique internal identifier for the associated trial.
15
+ trial_id: int | None = None
16
+
17
+ # The version number of the trial dataset
18
+ version: str | None = None
19
+
20
+ # The identifier of the manifest used to ship this sample. e.g. "E4412_PBMC"
21
+ manifest_id: str
22
+
23
+ # Priority of the assay as it appears on the intake form. e.g. "10"
24
+ assay_priority: AssayPriority | None = None
25
+
26
+ # The type of assay used. e.g. "Olink"
27
+ assay_type: AssayType | None = None
28
+
29
+ # Courier utilized for shipment. e.g. "FedEx"
30
+ courier: Courier | None = None
31
+
32
+ # Air bill number assigned to shipment. e.g. "4567788343"
33
+ tracking_number: str | None = None
34
+
35
+ # The environmental conditions of the shipment. e.g. "Frozen Dry Ice"
36
+ condition: ShipmentCondition | None = None
37
+
38
+ # Details of shipping condition when condition is "Other"
39
+ condition_other: str | None = None
40
+
41
+ # Date the shipment was posted
42
+ date_shipped: datetime | None = None
43
+
44
+ # Date the shipment was received
45
+ date_received: datetime | None = None
46
+
47
+ # Indication of the quality/condition of the specimens after receipt. e.g. "Damaged"
48
+ quality: ShipmentQuality | None = None
@@ -0,0 +1,15 @@
1
+ from .base import Base
2
+
3
+
4
+ class ShipmentSpecimen(Base):
5
+ # The unique internal identifier of the associated specimen
6
+ specimen_id: int | None = None
7
+
8
+ # The unique internal identifier of the associated shipment
9
+ shipment_id: int | None = None
10
+
11
+ # Identifier if sample shipment container includes multiple boxes for each assay. e.g. "1", "X"
12
+ box_number: str
13
+
14
+ # Sample location within the shipping container. e.g. "A1"
15
+ sample_location: str
@@ -0,0 +1,211 @@
1
+ from datetime import datetime
2
+
3
+ from .base import Base
4
+ from cidc_api.models.types import (
5
+ UberonAnatomicalTerm,
6
+ ICDO3MorphologicalCode,
7
+ SpecimenType,
8
+ SpecimenDescription,
9
+ TumorType,
10
+ CollectionProcedure,
11
+ FixationStabilizationType,
12
+ PrimaryContainerType,
13
+ VolumeUnits,
14
+ ProcessedType,
15
+ ConcentrationUnits,
16
+ DerivativeType,
17
+ PBMCRestingPeriodUsed,
18
+ MaterialUnits,
19
+ MaterialStorageCondition,
20
+ QCCondition,
21
+ ReplacementRequested,
22
+ ResidualUse,
23
+ DiagnosisVerification,
24
+ AssayType,
25
+ )
26
+
27
+
28
+ class Specimen(Base):
29
+ __data_category__ = "specimen"
30
+ __cardinality__ = "many"
31
+
32
+ # The unique internal identifier for the specimen record
33
+ specimen_id: int | None = None
34
+
35
+ # The unique internal identifier for the associated participant
36
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=12220014%20and%20ver_nr=1
37
+ participant_id: int | None = None
38
+
39
+ # The unique specimen identifier assigned by the CIMAC-CIDC Network.
40
+ # Formatted as CTTTPPPSS.AA for trial code TTT, participant PPP, sample SS, and aliquot AA.
41
+ cimac_id: str
42
+
43
+ # The external identifier for the pathology report
44
+ surgical_pathology_report_id: str | None = None
45
+
46
+ # The external identifier for the clinical report
47
+ clinical_report_id: str | None = None
48
+
49
+ # The unique identifier for the specimen from which this specimen was derived
50
+ parent_specimen_id: str | None = None
51
+
52
+ # The unique identifier for the specimen after undergoing processing
53
+ processed_specimen_id: str | None = None
54
+
55
+ # The location within the body from which a specimen was originally obtained as captured in the Uberon anatomical term.
56
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=12083894%20and%20ver_nr=1
57
+ organ_site_of_collection: UberonAnatomicalTerm | None = None
58
+
59
+ # ICD-O-3 code for histology and behavior. e.g. 9665/3"
60
+ # CDE: TBD
61
+ histology_behavior: ICDO3MorphologicalCode | None = None
62
+
63
+ # Histology description. e.g. Hodgkin lymphoma, nod. scler., grade 1",
64
+ histology_behavior_description: str | None = None
65
+
66
+ # Categorical description of timepoint at which the sample was taken.
67
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=5899851%20and%20ver_nr=1
68
+ # Note: CIDC doesn't conform to this CDE's PVs
69
+ collection_event_name: str | None = None
70
+
71
+ # The type of the specimen
72
+ specimen_type: SpecimenType | None = None
73
+
74
+ # The type of the specimen, if not captured by specimen_type
75
+ specimen_type_other: str | None = None
76
+
77
+ # A general description of the specimen
78
+ specimen_description: SpecimenDescription | None = None
79
+
80
+ # The type of the tumor present in the specimen
81
+ tumor_type: TumorType | None = None
82
+
83
+ # Description of the procedure used to collect the specimen from the participant
84
+ collection_procedure: CollectionProcedure | None = None
85
+
86
+ # Description of the procedure used to collect the specimen from the participant, if not captured by collection_procedure
87
+ collection_procedure_other: str | None = None
88
+
89
+ # The biopsy core number from which the sample was taken.
90
+ core_number: str | None = None
91
+
92
+ # Type of specimen fixation or stabilization that was employed by the site directly after collection.
93
+ fixation_stabilization_type: FixationStabilizationType | None = None
94
+
95
+ # The type of container in which the specimen was shipped
96
+ primary_container_type: PrimaryContainerType | None = None
97
+
98
+ # The type of container in which the specimen was shipped, if not captured by primary_container_type
99
+ primary_container_type_other: str | None = None
100
+
101
+ # Volume of the specimen
102
+ volume: float | None = None
103
+
104
+ # The unit of measure of the volume of the specimen
105
+ volume_units: VolumeUnits | None = None
106
+
107
+ # The type of processing that was performed on the collected specimen by the biobank
108
+ processed_type: ProcessedType | None = None
109
+
110
+ # The volume of the specimen after being processed by the biobank
111
+ processed_volume: float | None = None
112
+
113
+ # The unit of measure of the volume of the specimen after being processed by the biobank
114
+ processed_volume_units: VolumeUnits | None = None
115
+
116
+ # The concentration of the sample after being processed by the biobank
117
+ processed_concentration: float | None = None
118
+
119
+ # The unit of measure of the concentration of the sample after being processed by the biobank
120
+ processed_concentration_units: ConcentrationUnits | None = None
121
+
122
+ # The quantity of the sample after being processed by the biobank
123
+ processed_quantity: float | None = None
124
+
125
+ # The type of the sample derivative
126
+ derivative_type: DerivativeType | None = None
127
+
128
+ # The volume of the sample derivative
129
+ derivative_volume: float | None = None
130
+
131
+ # The unit of measure of the volume of the sample derivative
132
+ derivative_volume_units: VolumeUnits | None = None
133
+
134
+ # The concentration of the sample derivative
135
+ derivative_concentration: float | None = None
136
+
137
+ # The unit of measure of the concentration of the sample derivative
138
+ derivative_concentration_units: ConcentrationUnits | None = None
139
+
140
+ # Score the percentage of tumor (including tumor bed) tissue area of the slide (e.g. vs non-malignant or normal tissue) (0-100)
141
+ tumor_tissue_total_area_percentage: float | None = None
142
+
143
+ # Score the percentage of viable tumor cells comprising the tumor bed area
144
+ viable_tumor_area_percentage: float | None = None
145
+
146
+ # Score the evaluation of stromal elements (this indicates the % area of tumor bed occupied by non-tumor cells,
147
+ # including inflammatory cells [lymphocytes, histiocytes, etc], endothelial cells, fibroblasts, etc)
148
+ viable_stroma_area_percentage: float | None = None
149
+
150
+ # Score the percentage area of necrosis
151
+ necrosis_area_percentage: float | None = None
152
+
153
+ # Score the percentage area of Fibrosis
154
+ fibrosis_area_percentage: float | None = None
155
+
156
+ # Provides a DNA Integrity Number as an indication of extraction quality (values of 1-10)
157
+ din: float | None = None
158
+
159
+ # Provides an absorbance percentage ratio indicating purity of DNA (values of 0 to 2)
160
+ a260_a280: float | None = None
161
+
162
+ # Provides an absorbance percentage ratio indicating presence of contaminants (values of 0 to 3)
163
+ a260_a230: float | None = None
164
+
165
+ # Receiving site determines the percent recovered cells that are viable after thawing.
166
+ pbmc_viability: float | None = None
167
+
168
+ # Receiving site determines number for PBMCs per vial recovered upon receipt.
169
+ pbmc_recovery: float | None = None
170
+
171
+ # Receiving site indicates if a resting period was used after PBMC recovery.
172
+ pbmc_resting_period_used: PBMCRestingPeriodUsed | None = None
173
+
174
+ # Receiving site indicates how much material was used for assay purposes.
175
+ material_used: float | None = None
176
+
177
+ # Unit of measure for the amount of material used
178
+ material_used_units: MaterialUnits | None = None
179
+
180
+ # Receiving site indicates how much material remains after assay use.
181
+ material_remaining: float | None = None
182
+
183
+ # Unit of measure for the amount of material remaining.
184
+ material_remaining_units: MaterialUnits | None = None
185
+
186
+ # Storage condition of the material once it was received.
187
+ material_storage_condition: MaterialStorageCondition | None = None
188
+
189
+ # Final status of sample after QC and pathology review.
190
+ qc_condition: QCCondition | None = None
191
+
192
+ # Indication if sample replacement is/was requested.
193
+ replacement_requested: ReplacementRequested | None = None
194
+
195
+ # Indication if sample was sent to another location or returned back to biorepository.
196
+ residual_use: ResidualUse | None = None
197
+
198
+ # Additional comments on sample testing
199
+ comments: str | None = None
200
+
201
+ # Indicates whether the local pathology review was consistent with the diagnostic pathology report.
202
+ diagnosis_verification: DiagnosisVerification | None = None
203
+
204
+ # The assay that this sample is expected to be used as input for.
205
+ intended_assay: AssayType | None = None
206
+
207
+ # The datetime that CIDC ingested the sample/manifest
208
+ date_ingested: datetime | None = None
209
+
210
+ # Days from enrollment date to date specimen was collected.
211
+ days_to_specimen_collection: int | None = None
@@ -0,0 +1,35 @@
1
+ from pydantic import NonNegativeInt
2
+ from .base import Base
3
+ from cidc_api.models.types import (
4
+ StemCellDonorType,
5
+ AllogeneicDonorType,
6
+ StemCellSource,
7
+ ConditioningRegimenType,
8
+ )
9
+
10
+
11
+ class StemCellTransplant(Base):
12
+ __data_category__ = "stem_cell_transplant"
13
+ __cardinality__ = "many"
14
+
15
+ # The unique internal identifier for the stem cell transplant record
16
+ stem_cell_transplant_id: int | None = None
17
+
18
+ # The unique internal identifier for the associated Treatment record
19
+ treatment_id: int | None = None
20
+
21
+ # Indicates the stem cell donor type.
22
+ stem_cell_donor_type: StemCellDonorType
23
+
24
+ # If "stem_cell_donor_type" is "Allogeneic", specifies the relationship and
25
+ # compatibility of the donor relative to the receipient
26
+ allogeneic_donor_type: AllogeneicDonorType | None = None
27
+
28
+ # Source of the stem cells used for transplant.
29
+ stem_cells_source: StemCellSource
30
+
31
+ # Days from the enrollment date to the date of the stem cell transplant.
32
+ days_to_transplant: NonNegativeInt
33
+
34
+ # Specifies what type of conditioning regimen was used for the stem cell transplant if applicable.
35
+ conditioning_regimen_type: ConditioningRegimenType | None = None
@@ -0,0 +1,49 @@
1
+ from typing import Self
2
+
3
+ from pydantic import NonNegativeInt, model_validator
4
+
5
+ from .base import Base
6
+ from cidc_api.models.types import SurgicalProcedure, UberonAnatomicalTerm, YNU
7
+
8
+
9
+ class Surgery(Base):
10
+ __data_category__ = "surgery"
11
+ __cardinality__ = "many"
12
+
13
+ # The unique internal identifier for the surgery record
14
+ surgery_id: int | None = None
15
+
16
+ # The unique internal identifier for the associated treatment record
17
+ treatment_id: int | None = None
18
+
19
+ # The term that describes the kind of surgical procedure administered.
20
+ procedure: SurgicalProcedure
21
+
22
+ # The name of surgical procedure if the value provided for procedure is "Other, specify".
23
+ procedure_other: str | None = None
24
+
25
+ # Number of days from enrollment date to surgical procedure date.
26
+ days_to_procedure: NonNegativeInt
27
+
28
+ # The Uberon identifier for the location within the body targeted by a procedure that
29
+ # is intended to alter or stop a pathologic process.
30
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=14980609%20and%20ver_nr=1
31
+ anatomical_location: UberonAnatomicalTerm
32
+
33
+ # An indication as to whether the surgical procedure in question was performed with therapeutic intent.
34
+ therapeutic: YNU
35
+
36
+ # A narrative description of any significant findings observed during the surgical procedure in question.
37
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=14918773%20and%20ver_nr=1
38
+ findings: str | None = None
39
+
40
+ # A textual description of evidence for remaining tumor following primary treatment that is only
41
+ # apparent using highly sensitive techniques.
42
+ # CDE: https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=13362284%20and%20ver_nr=1
43
+ extent_of_residual_disease: str | None = None
44
+
45
+ @model_validator(mode="after")
46
+ def validate_procedure_other_cr(self) -> Self:
47
+ if self.procedure == "Other, specify" and not self.procedure_other:
48
+ raise ValueError('If procedure is "Other, specify", please provide procedure_other.')
49
+ return self