nci-cidc-schemas 0.26.38__py2.py3-none-any.whl → 0.27.1__py2.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.

Potentially problematic release.


This version of nci-cidc-schemas might be problematic. Click here for more details.

Files changed (23) hide show
  1. cidc_schemas/__init__.py +1 -1
  2. cidc_schemas/json_validation.py +43 -0
  3. cidc_schemas/prism/merger.py +17 -8
  4. cidc_schemas/schemas/clinical_trial.json +3 -7
  5. cidc_schemas/schemas/participant.json +1 -3
  6. cidc_schemas/schemas/sample.json +178 -44
  7. cidc_schemas/schemas/shipping_core.json +74 -34
  8. cidc_schemas/schemas/templates/manifests/h_and_e_template.json +109 -13
  9. cidc_schemas/schemas/templates/manifests/microbiome_dna_template.json +111 -11
  10. cidc_schemas/schemas/templates/manifests/normal_blood_dna_template.json +102 -12
  11. cidc_schemas/schemas/templates/manifests/normal_tissue_dna_template.json +109 -13
  12. cidc_schemas/schemas/templates/manifests/pbmc_template.json +102 -93
  13. cidc_schemas/schemas/templates/manifests/plasma_template.json +101 -91
  14. cidc_schemas/schemas/templates/manifests/tissue_slide_template.json +109 -13
  15. cidc_schemas/schemas/templates/manifests/tumor_tissue_dna_template.json +109 -13
  16. cidc_schemas/schemas/templates/manifests/tumor_tissue_rna_template.json +109 -13
  17. cidc_schemas/template.py +1 -1
  18. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/METADATA +27 -16
  19. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/RECORD +23 -23
  20. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/WHEEL +1 -1
  21. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/LICENSE +0 -0
  22. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/entry_points.txt +0 -0
  23. {nci_cidc_schemas-0.26.38.dist-info → nci_cidc_schemas-0.27.1.dist-info}/top_level.txt +0 -0
cidc_schemas/__init__.py CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  __author__ = """NCI"""
4
4
  __email__ = "nci-cidc-tools-admin@mail.nih.gov"
5
- __version__ = "0.26.38"
5
+ __version__ = "0.27.01"
@@ -514,6 +514,49 @@ def convert(fmt: str, value: str) -> str:
514
514
  raise jsonschema.ValidationError(e)
515
515
 
516
516
 
517
+ def strip_metadata_for_validation(full_metadata: dict) -> dict:
518
+ """
519
+ Returns a stripped down version of the full_metadata to only include necessary manifest data prior to validation.
520
+ The 'shipments' section is removed entirely, and the 'participants' section is stripped down to only include
521
+ cimac_participant_id and the cimac_id for each of the 'samples' in each participant.
522
+
523
+ The intention of this function is to be used prior to calling <validator>.iter_error_messages(<metadata>),
524
+ which will run a full validation against the current schema. The stripping done here allows for existing
525
+ manifest data (shipments, participants, samples) in the system to not be re-validated against the latest schema,
526
+ as many breaking schema changes (for older data) have been introduced via CSMS Integration (CIDC-1847). Any
527
+ new manifest data coming in should already be validated against the latest schema, so no need to re-validate here.
528
+ The cimac_participant_ids and cimac_ids are kept, as those are used beyond just simple schema field validation -
529
+ for cross-validating with properties in other areas of the full_metadata object.
530
+
531
+ This ensures that relevant fields are validated, while other existing shipment and participant/sample data
532
+ (which were previously valid and accepted into the system, but may no longer conform to the new schema)
533
+ can be ignored during the iter_error_messages part of the validation.
534
+
535
+ :param dict full_metadata: full metadata object that will be copied to create stripped down version for validation.
536
+ """
537
+ # Copy so we don't modify the original full_metadata
538
+ stripped_metadata = copy.deepcopy(full_metadata)
539
+ # Remove the 'shipments' section entirely
540
+ stripped_metadata.pop("shipments", None)
541
+ if "participants" not in stripped_metadata:
542
+ return stripped_metadata
543
+ participants = stripped_metadata["participants"]
544
+ stripped_participants = []
545
+ # Strip 'participants' and 'samples' data to only include necessary fields
546
+ for participant in participants:
547
+ stripped_samples = []
548
+ for sample in participant["samples"]:
549
+ stripped_samples.append({"cimac_id": sample["cimac_id"]})
550
+ stripped_participants.append(
551
+ {
552
+ "samples": stripped_samples,
553
+ "cimac_participant_id": participant["cimac_participant_id"],
554
+ }
555
+ )
556
+ stripped_metadata["participants"] = stripped_participants
557
+ return stripped_metadata
558
+
559
+
517
560
  REQUIRED_PROPERTY_MSG = " is a required property"
518
561
 
519
562
 
@@ -7,7 +7,11 @@ import jsonschema
7
7
  from jsonmerge import Merger, strategies
8
8
  from deepdiff import DeepSearch
9
9
 
10
- from ..json_validation import load_and_validate_schema, _Validator
10
+ from ..json_validation import (
11
+ load_and_validate_schema,
12
+ strip_metadata_for_validation,
13
+ _Validator,
14
+ )
11
15
  from ..util import get_path, get_source
12
16
  from .extra_metadata import EXTRA_METADATA_PARSERS
13
17
  from .constants import PROTOCOL_ID_FIELD_NAME
@@ -228,15 +232,16 @@ class ThrowOnOverwrite(strategies.Strategy):
228
232
  Similar to the jsonmerge's built in 'discard' strategy,
229
233
  but throws an error if the value already exists. This is
230
234
  used to prevent updates in `merge_clinical_trial_metadata`.
235
+ There is an exception for allowing updates to properties
236
+ defined in ALLOW_MERGE_PROPERTIES.
231
237
  """
232
238
 
233
239
  def merge(self, walk, base, head, schema, meta, **kwargs):
234
- if base.is_undef():
235
- return head
236
- if base.val != head.val:
240
+ if not base.is_undef() and base.val != head.val:
237
241
  prop_name = base.ref.rsplit("/", 1)[-1]
238
- raise MergeCollisionException(prop_name, base.val, head.val)
239
- return base
242
+ if prop_name not in ALLOW_MERGE_PROPERTIES:
243
+ raise MergeCollisionException(prop_name, base.val, head.val)
244
+ return head
240
245
 
241
246
  def get_schema(self, walk, schema, **kwargs):
242
247
  return schema
@@ -280,6 +285,7 @@ PRISM_MERGE_STRATEGIES = {
280
285
  # Alias the builtin jsonmerge overwrite strategy
281
286
  "overwriteAny": strategies.Overwrite(),
282
287
  }
288
+ ALLOW_MERGE_PROPERTIES = ["cohort_name", "collection_event_name"]
283
289
 
284
290
 
285
291
  def merge_clinical_trial_metadata(patch: dict, target: dict) -> Tuple[dict, List[str]]:
@@ -316,5 +322,8 @@ def merge_clinical_trial_metadata(patch: dict, target: dict) -> Tuple[dict, List
316
322
  # merge the two documents
317
323
  merger = Merger(validator.schema, strategies=PRISM_MERGE_STRATEGIES)
318
324
  merged = merger.merge(target, patch)
319
-
320
- return merged, list(validator.iter_error_messages(merged))
325
+ # Prior to running validator.iter_error_messages on the merged metadata, strip out unnecessary manifest data for the
326
+ # validation so that existing manifest data that no longer conform to the post-CSMS-integration schema can be kept.
327
+ # See more details in the strip_metadata_for_validation function docs.
328
+ merged_to_validate = strip_metadata_for_validation(merged)
329
+ return merged, list(validator.iter_error_messages(merged_to_validate))
@@ -83,17 +83,15 @@
83
83
  "description": "A list of assays the CIDC expects to receive for this trial."
84
84
  },
85
85
  "allowed_collection_event_names": {
86
- "description": "Allowed values for sample.json#properties/collection_event_name for this trial.",
86
+ "description": "Allowed values for sample.json#properties/collection_event_name for this trial. Deprecated with CSMS Integration.",
87
87
  "type": "array",
88
- "$comment": "This works together with sample.json#properties/collection_event_name/in_doc_ref_pattern.",
89
88
  "items": {
90
89
  "type": "string"
91
90
  }
92
91
  },
93
92
  "allowed_cohort_names": {
94
- "description": "Allowed values for sample.json#properties/cohort_name for this trial.",
93
+ "description": "Allowed values for sample.json#properties/cohort_name for this trial. Deprecated with CSMS Integration.",
95
94
  "type": "array",
96
- "$comment": "This works together with sample.json#properties/cohort_name/in_doc_ref_pattern.",
97
95
  "items": {
98
96
  "type": "string"
99
97
  }
@@ -130,8 +128,6 @@
130
128
  },
131
129
  "required": [
132
130
  "protocol_identifier",
133
- "participants",
134
- "allowed_cohort_names",
135
- "allowed_collection_event_names"
131
+ "participants"
136
132
  ]
137
133
  }
@@ -25,9 +25,7 @@
25
25
  "cohort_name": {
26
26
  "type": "string",
27
27
  "description": "Categorical description of cohorts, arms, and treatment groups.",
28
- "example": "Arm_Z",
29
- "in_doc_ref_pattern": "/allowed_cohort_names/*",
30
- "$comment": "Values in this field are validated dynamically by `in_doc_ref_pattern`."
28
+ "example": "Arm_Z"
31
29
  },
32
30
  "essential_patient_entry_number": {
33
31
  "description": "Deprecated",
@@ -67,9 +67,7 @@
67
67
  "collection_event_name": {
68
68
  "title": "Collection Event Name",
69
69
  "description": "Categorical description of timepoint at which the sample was taken.",
70
- "type": "string",
71
- "in_doc_ref_pattern": "/allowed_collection_event_names/*",
72
- "$comment": "Values in this field are validated dynamically by `in_doc_ref_pattern`."
70
+ "type": "string"
73
71
  },
74
72
  "sample_location": {
75
73
  "description": "Sample location within the shipping container. Example: A1.",
@@ -79,25 +77,92 @@
79
77
  "description": "Type of sample sent.",
80
78
  "type": "string",
81
79
  "enum": [
82
- "Tumor Tissue",
83
- "Normal Tissue",
80
+ "BAL Cells",
81
+ "BAL Cell Supernatant",
82
+ "BAL Fluid",
83
+ "BMMC",
84
+ "BMMC Supernatant",
85
+ "Bone Marrow Aspirate",
86
+ "Bone Marrow Core",
87
+ "Bone Marrow Film",
88
+ "Buccal Cells",
89
+ "Buffy Coat",
90
+ "CAR-T Cells",
91
+ "cfDNA",
92
+ "CSF",
93
+ "CSF Cells",
94
+ "CSF Cell Supernatant",
95
+ "CTC Cells",
96
+ "CTC Cell Supernatant",
97
+ "ctDNA",
98
+ "Cytospin Film",
99
+ "DNA",
100
+ "FFPE Block",
101
+ "FFPE Block Punch",
102
+ "FFPE Section",
103
+ "FFPE Tissue Core",
104
+ "FFPE Tissue Curl",
105
+ "FFPE Tissue Scroll",
106
+ "Fine Needle Aspirate",
107
+ "Fixed Tissue Slide",
108
+ "Formalin Fixed Tissue",
109
+ "Fresh Tissue",
110
+ "Fresh Tissue Core",
111
+ "Frozen Tissue",
112
+ "Frozen Tissue Block",
113
+ "Frozen Tissue Curl",
114
+ "Frozen Tissue Core",
115
+ "Frozen Tissue Section",
116
+ "Germline DNA",
117
+ "Germline Nucleic Acid",
118
+ "Germline RNA",
119
+ "H&E Fixed Tissue Slide",
120
+ "Leukapheresis Cells",
121
+ "Lymph Node Tissue",
122
+ "Nucleic Acid",
123
+ "OCT Frozen Tissue",
124
+ "OCT Frozen Tissue Block",
125
+ "OCT Frozen Tissue Core",
126
+ "OCT Frozen Tissue Curl",
127
+ "OCT Frozen Tissue Section",
128
+ "PBMC",
129
+ "PBMC Supernatant",
130
+ "PBSC",
131
+ "PBSC Supernatant",
132
+ "Peptides",
133
+ "Pericardial Fluid",
134
+ "Peritoneal Cells",
135
+ "Peritoneal Cell Supernatant",
136
+ "Peritoneal Fluid",
137
+ "Peritoneal Lavage Fluid",
138
+ "Plasma",
139
+ "Pleural Cells",
140
+ "Pleural Cell Supernatant",
141
+ "Pleural Fluid",
142
+ "Protein Lysate",
143
+ "RNA",
144
+ "Saliva",
145
+ "Serum",
84
146
  "Skin Tissue",
85
- "Blood",
86
- "Bone Marrow",
87
- "Cerebrospinal Fluid",
88
- "Lymph Node",
89
147
  "Stool",
90
- "Cell Product",
91
- "White Blood Cell Apheresis",
148
+ "Synovial Fluid",
149
+ "Tissue Core",
92
150
  "Urine",
93
- "Not Reported",
151
+ "WBC",
152
+ "Whole Blood",
153
+ "Whole Blood Film",
94
154
  "Other"
95
155
  ]
96
156
  },
157
+ "description_of_sample": {
158
+ "description": "The description of the sample.",
159
+ "type": "string",
160
+ "enum": ["Tumor", "Normal"]
161
+ },
97
162
  "type_of_tumor_sample": {
98
163
  "description": "The type of tumor sample obtained (primary or metastatic).",
99
164
  "type": "string",
100
- "enum": ["Metastatic Tumor", "Primary Tumor", "Not Reported", "Other"]
165
+ "enum": ["Metastatic Tumor", "Primary Tumor", "Not Reported"]
101
166
  },
102
167
  "sample_collection_procedure": {
103
168
  "description": "Indicates the specimen source of the sample shipped. Example: Na Heparin blood draw aliquots (2 of three), FFPE block #52",
@@ -117,19 +182,27 @@
117
182
  "Other"
118
183
  ]
119
184
  },
185
+ "sample_collection_procedure_other": {
186
+ "description": "Details of sample collection procedure when 'Other' is set.",
187
+ "type": "string"
188
+ },
120
189
  "core_number": {
121
190
  "description": "The biopsy core number from which the sample was used.",
122
- "type": "number"
191
+ "type": "string"
123
192
  },
124
193
  "fixation_stabilization_type": {
125
194
  "description": "Type of specimen fixation or stabilization that was employed by the site directly after collection.",
126
195
  "type": "string",
127
196
  "enum": [
128
- "Archival FFPE",
129
- "Fresh Specimen",
130
- "Frozen Specimen",
131
- "Formalin-Fixed Paraffin-Embedded",
132
- "Optimum cutting temperature medium",
197
+ "Ficoll",
198
+ "Formulin Fixation",
199
+ "Formulin-Fixed Paraffin-Embedded (FFPE)",
200
+ "Frozen",
201
+ "70% Ethanol",
202
+ "H&E",
203
+ "Liquid Nitrogen (Frozen)",
204
+ "OCT (Frozen)",
205
+ "Proteomic Stabilization",
133
206
  "Thaw-Lyse",
134
207
  "Not Reported",
135
208
  "Other"
@@ -139,15 +212,43 @@
139
212
  "description": "The format in which the sample was sent.",
140
213
  "type": "string",
141
214
  "enum": [
142
- "Sodium heparin",
143
- "Blood specimen container with EDTA",
144
- "Potassium EDTA",
145
- "Streck Blood Collection Tube",
146
- "Stool collection container with DNA stabilizer",
147
- "Not Reported",
215
+ "ACD-A Tube",
216
+ "ACD-B Tube",
217
+ "Bag",
218
+ "Box",
219
+ "CellSave Tube",
220
+ "Conical Tube",
221
+ "Container",
222
+ "CPT Citrate Tube",
223
+ "CPT Heparin Tube",
224
+ "Cryovial",
225
+ "EDTA Tube",
226
+ "Fecal Collection Container with NA Stabilizer",
227
+ "FFPE Tissue Cassette",
228
+ "Formalin Jar",
229
+ "Lithium Heparin Tube",
230
+ "OMNIgene",
231
+ "OMNImet",
232
+ "PAXgene DNA Tube",
233
+ "PAXgene RNA Tube",
234
+ "Plain Red Top Tube",
235
+ "PPT Tube",
236
+ "Saliva Tube",
237
+ "Screw Top Jar",
238
+ "Slide",
239
+ "Slide Cassette",
240
+ "Smart Tube",
241
+ "Sodium Citrate Tube",
242
+ "Sodium Heparin Tube",
243
+ "SST Tube",
244
+ "Streck Tube",
148
245
  "Other"
149
246
  ]
150
247
  },
248
+ "type_of_primary_container_other": {
249
+ "description": "The input for type of primary container if value is other.",
250
+ "type": "string"
251
+ },
151
252
  "sample_volume": {
152
253
  "description": "Volume of the parent sample (e.g. Heparin tube volume)",
153
254
  "type": "number"
@@ -161,20 +262,50 @@
161
262
  "description": "The type of processing that was performed on the collected specimen by the Biobank for storage.",
162
263
  "type": "string",
163
264
  "enum": [
164
- "Whole Blood",
265
+ "BAL Cells",
266
+ "BAL Cell Supernatant",
267
+ "BMMC",
268
+ "BMMC Supernatant",
269
+ "Bone Marrow Film",
270
+ "Buccal Cells",
271
+ "Buffy Coat",
272
+ "cfDNA",
273
+ "CSF Cell Supernatant",
274
+ "CSF Cells",
275
+ "CTC Cell Supernatant",
276
+ "CTC Cells",
277
+ "ctDNA",
278
+ "DNA",
279
+ "FFPE Block",
280
+ "FFPE Block Punch",
281
+ "FFPE Section",
282
+ "FFPE Tissue Core",
283
+ "FFPE Tissue Curl",
284
+ "FFPE Tissue Scroll",
285
+ "Formalin Fixed Tissue",
286
+ "Germline DNA",
287
+ "Germline RNA",
288
+ "Leukapheresis Cells",
289
+ "Other",
290
+ "PBMC",
291
+ "PBMC Supernatant",
292
+ "PBSC",
293
+ "PBSC Supernatant",
294
+ "Peritoneal Cell Supernatant",
295
+ "Peritoneal Cells",
165
296
  "Plasma",
297
+ "Pleural Cell Supernatant",
298
+ "Pleural Cells",
299
+ "RNA",
166
300
  "Serum",
167
- "PBMC",
168
- "Buffy Coat",
169
- "Bone Marrow Mononuclear Cell",
170
- "Supernatant",
171
- "Cell Pellet",
172
- "H&E-Stained Fixed Tissue Slide Specimen",
173
- "Fixed Slide",
174
- "Tissue Scroll",
175
- "FFPE Punch",
176
- "Not Reported",
177
- "Other"
301
+ "Whole Blood Film",
302
+ "Protein Lysate",
303
+ "Peptides",
304
+ "Germline Nucleic Acid",
305
+ "Nucleic Acid",
306
+ "H&E Fixed Tissue Slide",
307
+ "Fixed Tissue Slide",
308
+ "WBC"
178
309
  ]
179
310
  },
180
311
  "processed_sample_volume": {
@@ -210,13 +341,16 @@
210
341
  "description": "The type of derivative or analyte extracted from the specimen to be shipped for testing.",
211
342
  "type": "string",
212
343
  "enum": [
344
+ "cfDNA",
345
+ "ctDNA",
346
+ "Germline DNA",
347
+ "Germline RNA",
348
+ "Other",
349
+ "Protein Lysate",
350
+ "Peptides",
213
351
  "Tumor DNA",
214
352
  "Tumor RNA",
215
- "Germline DNA",
216
- "Circulating Tumor-Derived DNA",
217
- "Stool DNA",
218
- "Not Reported",
219
- "Other"
353
+ "Stool DNA"
220
354
  ]
221
355
  },
222
356
  "sample_derivative_volume": {
@@ -340,12 +474,12 @@
340
474
  "material_storage_condition": {
341
475
  "description": "Storage condition of the material once it was received.",
342
476
  "type": "string",
343
- "enum": ["RT", "4oC", "(-20)oC", "(-80)oC", "LN", "Not Reported", "Other"]
477
+ "enum": ["Ambient", "RT", "4 Celsius Degree", "-20 Degrees Celsius Or Minus 20 Degrees Celsius", "-80 Degrees Celsius Or Minus 80 Degrees Celsius", "-150 Degrees Celsius Or Minus 150 Degrees Celsius", "LN", "Dry Ice", "Not Reported", "Other"]
344
478
  },
345
479
  "quality_of_sample": {
346
480
  "description": "Final status of sample after QC and pathology review.",
347
481
  "type": "string",
348
- "enum": ["Pass", "Pass at Risk", "Fail", "Not Reported", "Other"]
482
+ "enum": ["Pass", "Pass at Risk", "Fail"]
349
483
  },
350
484
  "sample_replacement": {
351
485
  "description": "Indication if sample replacement is/was requested.",
@@ -60,16 +60,12 @@
60
60
  "courier": {
61
61
  "description": "Courier utilized for shipment.",
62
62
  "type": "string",
63
- "enum": ["FEDEX", "USPS", "UPS", "Inter-Site Delivery"]
63
+ "enum": ["FedEx", "USPS", "UPS", "Inter-Site Delivery", "DHL"]
64
64
  },
65
65
  "tracking_number": {
66
66
  "description": "Air bill number assigned to shipment. Example: 4567788343.",
67
67
  "type": "string"
68
68
  },
69
- "account_number": {
70
- "description": "Courier account number to pay for shipping if available. Example: 45465732.",
71
- "type": "string"
72
- },
73
69
  "shipping_condition": {
74
70
  "description": "Type of shipment made.",
75
71
  "type": "string",
@@ -82,6 +78,10 @@
82
78
  "Other"
83
79
  ]
84
80
  },
81
+ "shipping_condition_other": {
82
+ "description": "Details of shipping condition when shipping_condition value 'Other' is set.",
83
+ "type": "string"
84
+ },
85
85
  "date_shipped": {
86
86
  "description": "Date of shipment.",
87
87
  "type": "string",
@@ -96,43 +96,83 @@
96
96
  "description": "Indication that specimens were received in good condition.",
97
97
  "type": "string",
98
98
  "enum": [
99
- "Specimen shipment received in good condition",
100
- "Specimen shipment received in poor condition",
101
- "Not Reported",
102
- "Other"
99
+ "Normal",
100
+ "Damaged",
101
+ "Leakage",
102
+ "Opened"
103
103
  ]
104
104
  },
105
- "ship_from": {
106
- "description": "Contact information for shipment.",
105
+ "ship_from_sender_person_name": {
106
+ "description": "Sender person name.",
107
+ "type": "string"
108
+ },
109
+ "ship_from_sender_email": {
110
+ "description": "Sender email.",
111
+ "type": "string"
112
+ },
113
+ "ship_from_sender_phone": {
114
+ "description": "Ship from sender phone.",
115
+ "type": "string"
116
+ },
117
+ "ship_from_name": {
118
+ "description": "Ship from name.",
119
+ "type": "string"
120
+ },
121
+ "ship_from_street1": {
122
+ "description": "Ship from street1.",
123
+ "type": "string"
124
+ },
125
+ "ship_from_street2": {
126
+ "description": "Ship from street2.",
127
+ "type": "string"
128
+ },
129
+ "ship_from_city": {
130
+ "description": "Ship from city.",
131
+ "type": "string"
132
+ },
133
+ "ship_from_state": {
134
+ "description": "Ship from state.",
135
+ "type": "string"
136
+ },
137
+ "ship_from_zip": {
138
+ "description": "ship from zip.",
139
+ "type": "string"
140
+ },
141
+ "ship_from_country": {
142
+ "description": "Ship from country.",
143
+ "type": "string"
144
+ },
145
+ "ship_to_name": {
146
+ "description": "Ship to name.",
107
147
  "type": "string"
108
148
  },
109
- "ship_to": {
110
- "description": "Physical shipping address of the destination.",
149
+ "ship_to_street1": {
150
+ "description": "Ship to street1.",
151
+ "type": "string"
152
+ },
153
+ "ship_to_street2": {
154
+ "description": "ship to street2.",
155
+ "type": "string"
156
+ },
157
+ "ship_to_city": {
158
+ "description": "Ship to city.",
159
+ "type": "string"
160
+ },
161
+ "ship_to_state": {
162
+ "description": "Ship to state.",
163
+ "type": "string"
164
+ },
165
+ "ship_to_zip": {
166
+ "description": "Ship to zip.",
167
+ "type": "string"
168
+ },
169
+ "ship_to_country": {
170
+ "description": "Ship to country.",
111
171
  "type": "string"
112
172
  },
113
173
  "receiving_party": {
114
174
  "description": "Site where sample was shipped to be assayed.",
115
- "type": "string",
116
- "enum": [
117
- "MDA_Wistuba",
118
- "MDA_Bernatchez",
119
- "MDA_Al-Atrash",
120
- "MSSM_Gnjatic",
121
- "MSSM_Rahman",
122
- "MSSM_Kim-Schulze",
123
- "MSSM_Bongers",
124
- "MSSM_MTC",
125
- "DFCI_Wu",
126
- "DFCI_Hodi",
127
- "DFCI_Severgnini",
128
- "DFCI_Livak",
129
- "Broad_Cibulskis",
130
- "Stanf_Maecker",
131
- "Stanf_Bendall",
132
- "NCH",
133
- "Adaptive",
134
- "FNLCR_MoCha"
135
- ]
175
+ "type": "string"
136
176
  }
137
177
  }
138
178
  }