@@ -205,7 +205,9 @@ def validate_baseline_score(self: "BrnichScoreRangesBase") -> "BrnichScoreRanges
205205
206206 if baseline_score is not None :
207207 if not any (range_model .classification == "normal" for range_model in ranges ):
208- raise ValidationError ("A baseline score has been provided, but no normal classification range exists." )
208+ # For now, we do not raise an error if a baseline score is provided but no normal range exists.
209+ # raise ValidationError("A baseline score has been provided, but no normal classification range exists.")
210+ return self
209211
210212 normal_ranges = [range_model .range for range_model in ranges if range_model .classification == "normal" ]
211213
@@ -336,6 +338,90 @@ class ScottScoreRanges(BrnichScoreRanges, SavedScottScoreRanges):
336338 research_use_only : bool = False
337339
338340
341+ ##############################################################################################################
342+ # IGVF Coding Variant Focus Group (CVFG) range models
343+ ##############################################################################################################
344+
345+ # Controls: All Variants
346+
347+
348+ class IGVFCodingVariantFocusGroupControlScoreRangesBase (BrnichScoreRangesBase ):
349+ title : str = "IGVF Coding Variant Focus Group -- Controls: All Variants"
350+ research_use_only : bool = False
351+
352+
353+ class IGVFCodingVariantFocusGroupControlScoreRangesModify (
354+ BrnichScoreRangesModify , IGVFCodingVariantFocusGroupControlScoreRangesBase
355+ ):
356+ title : str = "IGVF Coding Variant Focus Group -- Controls: All Variants"
357+ research_use_only : bool = False
358+
359+
360+ class IGVFCodingVariantFocusGroupControlScoreRangesCreate (
361+ BrnichScoreRangesCreate , IGVFCodingVariantFocusGroupControlScoreRangesModify
362+ ):
363+ title : str = "IGVF Coding Variant Focus Group -- Controls: All Variants"
364+ research_use_only : bool = False
365+
366+
367+ class SavedIGVFCodingVariantFocusGroupControlScoreRanges (
368+ SavedBrnichScoreRanges , IGVFCodingVariantFocusGroupControlScoreRangesBase
369+ ):
370+ record_type : str = None # type: ignore
371+
372+ title : str = "IGVF Coding Variant Focus Group -- Controls: All Variants"
373+ research_use_only : bool = False
374+
375+ _record_type_factory = record_type_validator ()(set_record_type )
376+
377+
378+ class IGVFCodingVariantFocusGroupControlScoreRanges (
379+ BrnichScoreRanges , SavedIGVFCodingVariantFocusGroupControlScoreRanges
380+ ):
381+ title : str = "IGVF Coding Variant Focus Group -- Controls: All Variants"
382+ research_use_only : bool = False
383+
384+
385+ # Controls: Missense Variants
386+
387+
388+ class IGVFCodingVariantFocusGroupMissenseScoreRangesBase (BrnichScoreRangesBase ):
389+ title : str = "IGVF Coding Variant Focus Group -- Controls: Missense Variants Only"
390+ research_use_only : bool = False
391+
392+
393+ class IGVFCodingVariantFocusGroupMissenseScoreRangesModify (
394+ BrnichScoreRangesModify , IGVFCodingVariantFocusGroupMissenseScoreRangesBase
395+ ):
396+ title : str = "IGVF Coding Variant Focus Group -- Controls: Missense Variants Only"
397+ research_use_only : bool = False
398+
399+
400+ class IGVFCodingVariantFocusGroupMissenseScoreRangesCreate (
401+ BrnichScoreRangesCreate , IGVFCodingVariantFocusGroupMissenseScoreRangesModify
402+ ):
403+ title : str = "IGVF Coding Variant Focus Group -- Controls: Missense Variants Only"
404+ research_use_only : bool = False
405+
406+
407+ class SavedIGVFCodingVariantFocusGroupMissenseScoreRanges (
408+ SavedBrnichScoreRanges , IGVFCodingVariantFocusGroupMissenseScoreRangesBase
409+ ):
410+ record_type : str = None # type: ignore
411+
412+ title : str = "IGVF Coding Variant Focus Group -- Controls: Missense Variants Only"
413+ research_use_only : bool = False
414+
415+ _record_type_factory = record_type_validator ()(set_record_type )
416+
417+
418+ class IGVFCodingVariantFocusGroupMissenseScoreRanges (
419+ BrnichScoreRanges , SavedIGVFCodingVariantFocusGroupMissenseScoreRanges
420+ ):
421+ title : str = "IGVF Coding Variant Focus Group -- Controls: Missense Variants Only"
422+ research_use_only : bool = False
423+
424+
339425##############################################################################################################
340426# Zeiberg specific calibration models
341427##############################################################################################################
@@ -450,12 +536,20 @@ class ScoreSetRangesBase(BaseModel):
450536 investigator_provided : Optional [InvestigatorScoreRangesBase ] = None
451537 scott_calibration : Optional [ScottScoreRangesBase ] = None
452538 zeiberg_calibration : Optional [ZeibergCalibrationScoreRangesBase ] = None
539+ cvfg_all_variants : Optional [IGVFCodingVariantFocusGroupControlScoreRangesBase ] = None
540+ cvfg_missense_variants : Optional [IGVFCodingVariantFocusGroupMissenseScoreRangesBase ] = None
453541
454542 _fields_to_exclude_for_validatation = {"record_type" }
455543
456544 @model_validator (mode = "after" )
457545 def score_range_labels_must_be_unique (self : "ScoreSetRangesBase" ) -> "ScoreSetRangesBase" :
458- for container in (self .investigator_provided , self .zeiberg_calibration , self .scott_calibration ):
546+ for container in (
547+ self .investigator_provided ,
548+ self .zeiberg_calibration ,
549+ self .scott_calibration ,
550+ self .cvfg_all_variants ,
551+ self .cvfg_missense_variants ,
552+ ):
459553 if container is None :
460554 continue
461555
@@ -478,12 +572,16 @@ class ScoreSetRangesModify(ScoreSetRangesBase):
478572 investigator_provided : Optional [InvestigatorScoreRangesModify ] = None
479573 scott_calibration : Optional [ScottScoreRangesModify ] = None
480574 zeiberg_calibration : Optional [ZeibergCalibrationScoreRangesModify ] = None
575+ cvfg_all_variants : Optional [IGVFCodingVariantFocusGroupControlScoreRangesModify ] = None
576+ cvfg_missense_variants : Optional [IGVFCodingVariantFocusGroupMissenseScoreRangesModify ] = None
481577
482578
483579class ScoreSetRangesCreate (ScoreSetRangesModify ):
484580 investigator_provided : Optional [InvestigatorScoreRangesCreate ] = None
485581 scott_calibration : Optional [ScottScoreRangesCreate ] = None
486582 zeiberg_calibration : Optional [ZeibergCalibrationScoreRangesCreate ] = None
583+ cvfg_all_variants : Optional [IGVFCodingVariantFocusGroupControlScoreRangesCreate ] = None
584+ cvfg_missense_variants : Optional [IGVFCodingVariantFocusGroupMissenseScoreRangesCreate ] = None
487585
488586
489587class SavedScoreSetRanges (ScoreSetRangesBase ):
@@ -492,6 +590,8 @@ class SavedScoreSetRanges(ScoreSetRangesBase):
492590 investigator_provided : Optional [SavedInvestigatorScoreRanges ] = None
493591 scott_calibration : Optional [SavedScottScoreRanges ] = None
494592 zeiberg_calibration : Optional [SavedZeibergCalibrationScoreRanges ] = None
593+ cvfg_all_variants : Optional [SavedIGVFCodingVariantFocusGroupControlScoreRanges ] = None
594+ cvfg_missense_variants : Optional [SavedIGVFCodingVariantFocusGroupMissenseScoreRanges ] = None
495595
496596 _record_type_factory = record_type_validator ()(set_record_type )
497597
@@ -500,3 +600,5 @@ class ScoreSetRanges(SavedScoreSetRanges):
500600 investigator_provided : Optional [InvestigatorScoreRanges ] = None
501601 scott_calibration : Optional [ScottScoreRanges ] = None
502602 zeiberg_calibration : Optional [ZeibergCalibrationScoreRanges ] = None
603+ cvfg_all_variants : Optional [IGVFCodingVariantFocusGroupControlScoreRanges ] = None
604+ cvfg_missense_variants : Optional [IGVFCodingVariantFocusGroupMissenseScoreRanges ] = None
0 commit comments