diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py index c14e8068f0..15c970d35e 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t1.py @@ -12,7 +12,6 @@ validators.hasLength(156), ], postparsing_validators=[ - cat3_validate_t1, validators.if_then_validator( condition_field='DISPOSITION', condition_function=validators.matches(2), result_field='RPT_MONTH_YEAR', result_function=validators.notEmpty(), diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py index 4de39f0c0c..9c69aa1377 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t2.py @@ -13,7 +13,6 @@ validators.hasLength(156), ], postparsing_validators=[ - cat3_validate_t2, validators.if_then_validator( condition_field='DATE_OF_BIRTH', condition_function=validators.matches('99999999'), result_field='FAMILY_AFFILIATION', result_function=validators.isInLimits(2, 5), diff --git a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py index 63c778e12b..6ad0cdece5 100644 --- a/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py +++ b/tdrs-backend/tdpservice/parsers/schema_defs/tanf/t3.py @@ -1,7 +1,6 @@ """Schema for HEADER row of all submission types.""" -from ..cat3_validators import cat3_validate_t3 from ...util import MultiRecordRowSchema, RowSchema, Field from ... import validators from tdpservice.search_indexes.models.tanf import TANF_T3 @@ -12,7 +11,56 @@ preparsing_validators=[ validators.notEmpty(start=19, end=60), ], - postparsing_validators=[cat3_validate_t3,], + postparsing_validators=[ + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='SSN', result_function=validators.notOneOf(("999999999", "000000000")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_HISPANIC', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_AMER_INDIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_ASIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_BLACK', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_HAWAIIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_WHITE', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RELATIONSHIP_HOH', result_function=validators.isInLimits(4, 9), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf(("1", "2", "3")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='EDUCATION_LEVEL', result_function=validators.notMatches("99"), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2), + result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2", "9")), + ), + ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, required=True, validators=[]), @@ -65,7 +113,56 @@ preparsing_validators=[ validators.notEmpty(start=60, end=101), ], - postparsing_validators=[], + postparsing_validators=[ + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='SSN', result_function=validators.notOneOf(("999999999", "000000000")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_HISPANIC', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_AMER_INDIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_ASIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_BLACK', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_HAWAIIAN', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RACE_WHITE', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='RELATIONSHIP_HOH', result_function=validators.isInLimits(4, 9), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.oneOf((1, 2)), + result_field='PARENT_MINOR_CHILD', result_function=validators.oneOf(("1", "2", "3")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='EDUCATION_LEVEL', result_function=validators.notMatches("99"), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(1), + result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2")), + ), + validators.if_then_validator( + condition_field='FAMILY_AFFILIATION', condition_function=validators.matches(2), + result_field='CITIZENSHIP_STATUS', result_function=validators.oneOf(("1", "2", "9")), + ), + ], fields=[ Field(item="0", name='RecordType', type='string', startIndex=0, endIndex=2, required=True, validators=[]), diff --git a/tdrs-backend/tdpservice/parsers/validators.py b/tdrs-backend/tdpservice/parsers/validators.py index ac759a0d4f..be3b06c5f3 100644 --- a/tdrs-backend/tdpservice/parsers/validators.py +++ b/tdrs-backend/tdpservice/parsers/validators.py @@ -28,13 +28,14 @@ def if_then_validator(condition_field, condition_function, :param args: list of two strings representing the keys of the values to be validated """ def if_then_validator_func(value): - value1 = value[condition_field] - value2 = value[result_field] + value1 = value[condition_field] if type(value) is dict else getattr(value, condition_field) + value2 = value[result_field] if type(result_field) is dict else getattr(value, result_field) validator1_result = condition_function(value1) validator2_result = result_function(value2) - return (True, None) if not validator1_result[0] else (validator2_result[0], 'if ' + validator1_result[1] + - ' then ' + validator2_result[1]) + return (True, None) if validator1_result[0] else (validator1_result[0] & validator2_result[0], + 'if ' + validator1_result[1] + + ' then ' + validator2_result[1]) return lambda value: if_then_validator_func(value) @@ -48,15 +49,30 @@ def matches(option): lambda value: f'{value} does not match {option}.' ) +def notMatches(option): + """Validate that value is not equal to option.""" + return make_validator( + lambda value: value != option, + lambda value: f'{value} matches {option}.' + ) + def oneOf(options=[]): - """Validate that value exists in the provided options array.""" + """Validate that value does not exist in the provided options array.""" return make_validator( lambda value: value in options, lambda value: f'{value} is not in {options}.' ) +def notOneOf(options=[]): + """Validate that value exists in the provided options array.""" + return make_validator( + lambda value: value not in options, + lambda value: f'{value} is in {options}.' + ) + + def between(min, max): """Validate value, when casted to int, is greater than min and less than max.""" return make_validator(