@@ -1176,6 +1176,47 @@ def ensure_all_donors_mv_consented_if_initial(self):
11761176 raise ValueError ("All donors must consent to model project participation for initial submissions." )
11771177 return self
11781178
1179+ @model_validator (mode = "after" )
1180+ def ensure_index_has_correct_sequence_subtype (self ):
1181+ # index donors must have sequence subtype depending on genomic study subtype
1182+ # TODO: Should "addition"-type submissions be skipped?
1183+
1184+ match self .submission .genomic_study_subtype :
1185+ case GenomicStudySubtype .tumor_only :
1186+ required_sequencing_subtypes = {
1187+ SequenceSubtype .somatic ,
1188+ }
1189+ case GenomicStudySubtype .tumor_germline :
1190+ required_sequencing_subtypes = {
1191+ SequenceSubtype .somatic ,
1192+ SequenceSubtype .germline ,
1193+ }
1194+ case GenomicStudySubtype .germline_only :
1195+ required_sequencing_subtypes = {
1196+ SequenceSubtype .germline ,
1197+ }
1198+ case _:
1199+ # unreachable code due to prior validation
1200+ raise ValueError ("Unknown genomic study subtype. This should never happen." )
1201+
1202+ for donor in self .donors :
1203+ if donor .relation != Relation .index_ :
1204+ # only validate index donor
1205+ continue
1206+
1207+ # get donor sequence subtypes
1208+ donor_sequence_subtypes = {datum .sequence_subtype for datum in donor .lab_data }
1209+
1210+ missing_subtypes = required_sequencing_subtypes - donor_sequence_subtypes
1211+
1212+ if missing_subtypes :
1213+ raise ValueError (
1214+ f"Index donor is missing sequence subtypes for submission type '{ self .submission .genomic_study_subtype } ': "
1215+ f"{ ', ' .join (missing_subtypes )} ."
1216+ )
1217+
1218+ return self
1219+
11791220 @model_validator (mode = "after" )
11801221 def check_for_tumor_cell_count (self ):
11811222 """
0 commit comments