def test_failure_pa_code_0000(database): """ Failure where the program_activity_code is 0000 but program_activity_name isn't unknown/other """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='0000') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q4', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory( submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 1
def test_failure_fiscal_year_quarter(database): """ Testing invalid program activity, does not match with fiscal_year_quarter """ populate_publish_status(database) op = ObjectClassProgramActivityFactory(row_number=1, submission_id=1, agency_identifier='test2', main_account_code='test2', program_activity_name='test2', program_activity_code='test2') pa = ProgramActivityFactory(fiscal_year_quarter='FY15Q1', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory( submission_id=1, reporting_fiscal_year='2018', reporting_fiscal_period=9, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 1
def test_success_fiscal_year_quarter(database): """ Testing valid name for program_activity that matches with fiscal_year_quarter """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q1', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory( submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 0
def test_failure_success_ignore_recertification(database): """ Testing invalid program activity, ingored since FY2017 Q2 or Q3 """ populate_publish_status(database) populate_publish_status(database) op = ObjectClassProgramActivityFactory(row_number=1, submission_id=1, agency_identifier='test2', main_account_code='test2', program_activity_name='test2', program_activity_code='test2') pa = ProgramActivityFactory(fiscal_year_period='FY14P03', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') # Test with published submission submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=6, publish_status_id=PUBLISH_STATUS_DICT['updated']) assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 0 # Test with unpublished submission submission = SubmissionFactory(submission_id=2, reporting_fiscal_year='2017', reporting_fiscal_period=6, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 0
def test_success_ignore_case(database): """ Testing program activity validation to ignore case """ populate_publish_status(database) op = ObjectClassProgramActivityFactory(row_number=1, submission_id=1, beginning_period_of_availa=2016, agency_identifier='test', main_account_code='test', program_activity_name='TEST', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q4', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory( submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[op, pa], submission=submission) == 0
def test_failure_recertification(database): """ Testing invalid program_activity, not ignored since not recertification for FY2017Q2 or FY2017Q3 """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q3', agency_id='test2', allocation_transfer_id='test2', account_number='test2', program_activity_name='test2', program_activity_code='test2') submission = SubmissionFactory( submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=9, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 1
def test_value_present(database): """budget_authority_unobligat_fyb populated does not require a previous submission""" populate_publish_status(database) sub_new = SubmissionFactory() ap_new = AppropriationFactory(submission_id=sub_new.submission_id) assert number_of_errors(_FILE, database, submission=sub_new, models=[ap_new]) == 0
def test_no_previous_submission(database): """ No previous submission and null budget_authority_unobligat_fyb""" populate_publish_status(database) sub_new = SubmissionFactory() ap_new = AppropriationFactory(submission_id=sub_new.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new, models=[ap_new]) == 1
def test_previous_published(database): """ budget_authority_unobligat_fyb can be null if previous published submission shares cgac and fiscal year """ populate_publish_status(database) sub_prev_published = SubmissionFactory(publish_status_id=PUBLISH_STATUS_DICT['published']) insert_submission(database, sub_prev_published) sub_new_published = SubmissionFactory(cgac_code=sub_prev_published.cgac_code, reporting_fiscal_year=sub_prev_published.reporting_fiscal_year) ap_new_published = AppropriationFactory(submission_id=sub_new_published.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_published, models=[ap_new_published]) == 0
def test_previous_publishable(database): """Previous submission marked as publishable also allows null""" populate_publish_status(database) sub_prev_publishable = SubmissionFactory(publishable=True) insert_submission(database, sub_prev_publishable) sub_new_publishable = SubmissionFactory(cgac_code=sub_prev_publishable.cgac_code, reporting_fiscal_year=sub_prev_publishable.reporting_fiscal_year) ap_new_publishable = AppropriationFactory(submission_id=sub_new_publishable.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_publishable, models=[ap_new_publishable]) == 0
def test_previous_unpublished(database): """ previous submission exists but is unpublished and has not been marked publishable """ populate_publish_status(database) sub_prev_published = SubmissionFactory(publish_status_id=PUBLISH_STATUS_DICT['unpublished'], publishable=False) insert_submission(database, sub_prev_published) sub_new_published = SubmissionFactory(cgac_code=sub_prev_published.cgac_code, reporting_fiscal_year=sub_prev_published.reporting_fiscal_year) ap_new_published = AppropriationFactory(submission_id=sub_new_published.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_published, models=[ap_new_published]) == 1
def test_success_null(database): """ Program activity name/code as null """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, agency_identifier='test', main_account_code='test', program_activity_name=None, program_activity_code=None) pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q4', agency_id='test', allocation_transfer_id='test', account_number='test') assert number_of_errors(_FILE, database, models=[af, pa]) == 0
def test_success_null(database): """ Program activity name/code as null """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, agency_identifier='test', main_account_code='test', program_activity_name=None, program_activity_code=None) pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q4', agency_id='test', allocation_transfer_id='test', account_number='test') assert number_of_errors(_FILE, database, models=[af, pa]) == 0
def test_previous_publishable(database): """Previous submission marked as publishable also allows null""" populate_publish_status(database) sub_prev_publishable = SubmissionFactory(publishable=True) insert_submission(database, sub_prev_publishable) sub_new_publishable = SubmissionFactory( cgac_code=sub_prev_publishable.cgac_code, reporting_fiscal_year=sub_prev_publishable.reporting_fiscal_year) ap_new_publishable = AppropriationFactory( submission_id=sub_new_publishable.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_publishable, models=[ap_new_publishable]) == 0
def test_success_fiscal_year_quarter(database): """ Testing valid name for program_activity that matches with fiscal_year_quarter """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q1', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 0
def test_success_ignore_case(database): """ Testing program activity validation to ignore case """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='TEST', program_activity_code='TEST') pa = ProgramActivityFactory(fiscal_year_period='FY16P12', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 0
def test_previous_published(database): """ budget_authority_unobligat_fyb can be null if previous published submission shares cgac and fiscal year """ populate_publish_status(database) sub_prev_published = SubmissionFactory( publish_status_id=PUBLISH_STATUS_DICT['published']) insert_submission(database, sub_prev_published) sub_new_published = SubmissionFactory( cgac_code=sub_prev_published.cgac_code, reporting_fiscal_year=sub_prev_published.reporting_fiscal_year) ap_new_published = AppropriationFactory( submission_id=sub_new_published.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_published, models=[ap_new_published]) == 0
def test_failure_pa_code_0000(database): """ Failure where the program_activity_code is 0000 but program_activity_name isn't unknown/other """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='0000') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q4', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 1
def test_previous_unpublished(database): """ previous submission exists but is unpublished and has not been marked publishable """ populate_publish_status(database) sub_prev_published = SubmissionFactory( publish_status_id=PUBLISH_STATUS_DICT['unpublished'], publishable=False) insert_submission(database, sub_prev_published) sub_new_published = SubmissionFactory( cgac_code=sub_prev_published.cgac_code, reporting_fiscal_year=sub_prev_published.reporting_fiscal_year) ap_new_published = AppropriationFactory( submission_id=sub_new_published.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new_published, models=[ap_new_published]) == 1
def test_failure_fiscal_year_period(database): """ Testing invalid program_activity, does not match with fiscal_year_period """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test') pa_1 = ProgramActivityFactory(fiscal_year_period='FPY', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') pa_2 = ProgramActivityFactory(fiscal_year_period='FY16P03', agency_id='test2', allocation_transfer_id='test2', account_number='test2', program_activity_name='test2', program_activity_code='test2') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa_1, pa_2], submission=submission) == 1
def test_failure_program_activity_code(database): """ Failure where the program_activity_code does not match """ populate_publish_status(database) af_1 = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test_wrong') af_2 = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='Unknown/Other', program_activity_code='12345') pa = ProgramActivityFactory(fiscal_year_period='FY16P12', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af_1, af_2, pa], submission=submission) == 2
def test_failure_program_activity_name(database): """ Testing invalid program activity name for the corresponding TAS/TAFS as defined in Section 82 of OMB Circular A-11. """ populate_publish_status(database) op_1 = ObjectClassProgramActivityFactory(row_number=1, agency_identifier='test', main_account_code='test', program_activity_name='test_wrong', program_activity_code='test') op_2 = ObjectClassProgramActivityFactory(row_number=1, agency_identifier='test', main_account_code='test', program_activity_name='test_wrong', program_activity_code='0000') pa = ProgramActivityFactory(fiscal_year_period='FY17P03', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[op_1, op_2, pa], submission=submission) == 2
def test_success_ignore_pa_code_0000_pa_name_unknown_other(database): """ Test that rule is ignored when program_activity_code is 0000 AND program_activity_name is unknown/other """ populate_publish_status(database) af_1 = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='Unknown/Other', program_activity_code='0000') # Ignore case af_2 = AwardFinancialFactory(row_number=2, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='UnKnown/OthEr', program_activity_code='0000') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q4', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af_1, af_2, pa], submission=submission) == 0
def test_success(database): """ Testing valid program activity name for the corresponding TAS/TAFS as defined in Section 82 of OMB Circular A-11. """ populate_publish_status(database) af_1 = AwardFinancialFactory(row_number=1, agency_identifier='test', submission_id=1, main_account_code='test', program_activity_name='test', program_activity_code='test') af_2 = AwardFinancialFactory(row_number=2, agency_identifier='test', submission_id=1, main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q1', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af_1, af_2, pa], submission=submission) == 0
def test_success_ignore_pa_code_0000_pa_name_unknown_other(database): """ Test that rule is ignored when program_activity_code is 0000 AND program_activity_name is unknown/other """ populate_publish_status(database) af_1 = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='Unknown/Other', program_activity_code='0000') # Ignore case af_2 = AwardFinancialFactory(row_number=2, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='UnKnown/OthEr', program_activity_code='0000') pa = ProgramActivityFactory(fiscal_year_quarter='FY16Q4', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2016', reporting_fiscal_period=12, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af_1, af_2, pa], submission=submission) == 0
def test_success(database): """ Testing valid program activity name for the corresponding TAS/TAFS as defined in Section 82 of OMB Circular A-11. """ populate_publish_status(database) af_1 = AwardFinancialFactory(row_number=1, agency_identifier='test', submission_id=1, main_account_code='test', program_activity_name='test', program_activity_code='test') af_2 = AwardFinancialFactory(row_number=2, agency_identifier='test', submission_id=1, main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q1', agency_id='test', allocation_transfer_id='test', account_number='test', program_activity_name='test', program_activity_code='test') submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=3, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af_1, af_2, pa], submission=submission) == 0
def test_success_ignore_old_fy2017(database): """ Testing invalid program_activity, ignored since FY2017Q2 or FY2017Q3 """ populate_publish_status(database) af = AwardFinancialFactory(row_number=1, submission_id=1, agency_identifier='test', main_account_code='test', program_activity_name='test', program_activity_code='test') pa = ProgramActivityFactory(fiscal_year_quarter='FY17Q3', agency_id='test2', allocation_transfer_id='test2', account_number='test2', program_activity_name='test2', program_activity_code='test2') # Test with published submission submission = SubmissionFactory(submission_id=1, reporting_fiscal_year='2017', reporting_fiscal_period=9, publish_status_id=PUBLISH_STATUS_DICT['published']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 0 # Test with unpublished submission submission = SubmissionFactory(submission_id=2, reporting_fiscal_year='2017', reporting_fiscal_period=9, publish_status_id=PUBLISH_STATUS_DICT['unpublished']) assert number_of_errors(_FILE, database, models=[af, pa], submission=submission) == 0
def test_no_previous_submission(database): """ No previous submission and null budget_authority_unobligat_fyb""" populate_publish_status(database) sub_new = SubmissionFactory() ap_new = AppropriationFactory(submission_id=sub_new.submission_id, budget_authority_unobligat_fyb=None) assert number_of_errors(_FILE, database, submission=sub_new, models=[ap_new]) == 1
def test_failure(database): """ Test fail File C GrossOutlayAmountByAward_CPE balance for a TAS, DEFC, program activity code + name, object class code, direct/reimbursable flag, and Award ID combination should continue to be reported in subsequent periods during the FY, once it has been submitted to DATA Act, unless the most recently reported outlay balance for this award breakdown was zero. This only applies to File C outlays, not TOA. """ populate_publish_status(database) # Base submission sub_1 = SubmissionFactory( submission_id=1, cgac_code='test', reporting_fiscal_year=2020, reporting_fiscal_period=3, frec_code=None, publish_status_id=PUBLISH_STATUS_DICT['published'], is_fabs=False) paf_fain = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='N', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_defc = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='O', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_defc_9 = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='9', program_activity_code=None, program_activity_name=None, object_class=None, gross_outlay_amount_by_awa_cpe=5) database.session.add_all([sub_1, paf_fain, paf_defc, paf_defc_9]) database.session.commit() # submission missing previous period value, missing value of 9 still registers an error sub_2 = SubmissionFactory(submission_id=2, reporting_fiscal_year=2020, reporting_fiscal_period=4, cgac_code='test', frec_code=None, is_quarter_format=False, is_fabs=False) errors = number_of_errors(_FILE, database, models=[], submission=sub_2) assert errors == 3 # submission with a row that has similar but not exact values (has a uri when the original didn't) sub_3 = SubmissionFactory(submission_id=3, reporting_fiscal_year=2020, reporting_fiscal_period=4, cgac_code='test', frec_code=None, is_quarter_format=False, is_fabs=False) af_other = AwardFinancialFactory(submission_id=sub_3.submission_id, tas='test_tas', fain='abcd', uri='efgh', piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_defc = AwardFinancialFactory(submission_id=sub_3.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='O', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_defc_9 = AwardFinancialFactory(submission_id=sub_3.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='9', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) errors = number_of_errors(_FILE, database, models=[af_other, af_defc, af_defc_9], submission=sub_3) assert errors == 2 # submission with a row that matches but has gross outlay of NULL sub_4 = SubmissionFactory(submission_id=4, reporting_fiscal_year=2020, reporting_fiscal_period=4, cgac_code='test', frec_code=None, is_quarter_format=False, is_fabs=False) af_null = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=None) af_defc_9 = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_defc = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id='testingHere', disaster_emergency_fund_code='o', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) errors = number_of_errors(_FILE, database, models=[af_null, af_defc, af_defc_9], submission=sub_4) assert errors == 2
def test_success(database): """ Test File C GrossOutlayAmountByAward_CPE balance for a TAS, DEFC, program activity code + name, object class code, direct/reimbursable flag, and Award ID combination should continue to be reported in subsequent periods during the FY, once it has been submitted to DATA Act, unless the most recently reported outlay balance for this award breakdown was zero. This only applies to File C outlays, not TOA. """ populate_publish_status(database) # Base submission sub_1 = SubmissionFactory( submission_id=1, cgac_code='test', reporting_fiscal_year=2020, reporting_fiscal_period=3, frec_code=None, publish_status_id=PUBLISH_STATUS_DICT['published'], is_fabs=False) paf_fain = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='aBcD', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='N', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_uri = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='test_tas', fain=None, uri='eFgH', piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_piid = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain=None, uri=None, piid='iJkL', parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_paid = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_TAS', fain=None, uri=None, piid='mNoP', parent_award_id='qRsT', disaster_emergency_fund_code='N', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_zero = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='xYz', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=0) paf_null = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='xyZ', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=None) paf_tas = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='different_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_all_9 = PublishedAwardFinancialFactory( submission_id=sub_1.submission_id, tas='test_tas', fain='aBcD', uri='eFgH', piid='mNoP', parent_award_id='qRsT', disaster_emergency_fund_code='9', program_activity_code='c', program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_pac = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code='c', program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_pan = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name='n', object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_obj = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class='c', by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) paf_dr = PublishedAwardFinancialFactory(submission_id=sub_1.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun='r', gross_outlay_amount_by_awa_cpe=5) database.session.add_all([ sub_1, paf_fain, paf_uri, paf_piid, paf_paid, paf_zero, paf_null, paf_tas, paf_all_9, paf_pac, paf_pan, paf_obj, paf_dr ]) database.session.commit() # quarterly submission with each of the previous values (one of them is 0 now) sub_q = SubmissionFactory(submission_id=2, reporting_fiscal_year=2020, reporting_fiscal_period=6, cgac_code='test', frec_code=None, is_quarter_format=True, is_fabs=False) af_fain = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=0) af_uri = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain=None, uri='efgh', piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_piid = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain=None, uri=None, piid='ijkl', parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=7) af_paid = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain=None, uri=None, piid='mnop', parent_award_id='qrst', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_zero = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='xyz', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=6) af_null = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='xyz', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_tas = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='different_tas', fain='hijk', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_9_match = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='aBcD', uri='eFgH', piid='mNoP', parent_award_id='qRsT', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_pac = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code='c', program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=1) af_pan = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name='n', object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_obj = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class='c', by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_dr = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun='r', gross_outlay_amount_by_awa_cpe=4) # Additional line doesn't mess anything up af_bonus = AwardFinancialFactory(submission_id=sub_q.submission_id, tas='something_different') errors = number_of_errors(_FILE, database, models=[ af_fain, af_uri, af_piid, af_paid, af_zero, af_null, af_tas, af_9_match, af_pac, af_pan, af_obj, af_dr, af_bonus ], submission=sub_q) assert errors == 0 # period submission with each of the previous values sub_p = SubmissionFactory(submission_id=3, reporting_fiscal_year=2020, reporting_fiscal_period=4, cgac_code='test', frec_code=None, is_quarter_format=True, is_fabs=False) af_fain = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=9) af_uri = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain=None, uri='efgh', piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_piid = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain=None, uri=None, piid='ijkl', parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=7) af_paid = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain=None, uri=None, piid='mnop', parent_award_id='qrst', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_zero = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='xyz', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=6) af_null = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='xyz', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_tas = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='different_tas', fain='hijk', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) # matches the DEFC of 9 with a different DEFC af_9_match = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='aBcD', uri='eFgH', piid='mNoP', parent_award_id='qRsT', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_pac = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code='c', program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=1) af_pan = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name='n', object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_obj = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class='c', by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_dr = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun='r', gross_outlay_amount_by_awa_cpe=4) # Additional line doesn't mess anything up af_bonus = AwardFinancialFactory(submission_id=sub_p.submission_id, tas='something_different') errors = number_of_errors(_FILE, database, models=[ af_fain, af_uri, af_piid, af_paid, af_zero, af_null, af_tas, af_9_match, af_pac, af_pan, af_obj, af_dr, af_bonus ], submission=sub_p) assert errors == 0 # submission missing the values that were 0 and NULL the previous quarter does not throw errors sub_4 = SubmissionFactory(submission_id=4, reporting_fiscal_year=2020, reporting_fiscal_period=6, cgac_code='test', frec_code=None, is_quarter_format=True, is_fabs=False) af_fain = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='abcd', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=9) af_uri = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain=None, uri='efgh', piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_piid = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain=None, uri=None, piid='ijkl', parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=7) af_paid = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain=None, uri=None, piid='mnop', parent_award_id='qrst', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_tas = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='different_tas', fain='hijk', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_9_match = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='aBcD', uri='eFgH', piid='mNoP', parent_award_id='qRsT', disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=5) af_pac = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code='c', program_activity_name=None, object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=1) af_pan = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name='n', object_class=None, by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=2) af_obj = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class='c', by_direct_reimbursable_fun=None, gross_outlay_amount_by_awa_cpe=3) af_dr = AwardFinancialFactory(submission_id=sub_4.submission_id, tas='test_tas', fain='hiJK', uri=None, piid=None, parent_award_id=None, disaster_emergency_fund_code='n', program_activity_code=None, program_activity_name=None, object_class=None, by_direct_reimbursable_fun='r', gross_outlay_amount_by_awa_cpe=4) errors = number_of_errors(_FILE, database, models=[ af_fain, af_uri, af_piid, af_paid, af_tas, af_pac, af_pan, af_obj, af_dr, af_9_match ], submission=sub_4) assert errors == 0 # submission that doesn't have a "previous period" sub_5 = SubmissionFactory(submission_id=5, reporting_fiscal_year=2020, reporting_fiscal_period=5, cgac_code='test', frec_code=None, is_quarter_format=True) errors = number_of_errors(_FILE, database, models=[], submission=sub_5) assert errors == 0
def test_value_present(database): """budget_authority_unobligat_fyb populated does not require a previous submission""" populate_publish_status(database) sub_new = SubmissionFactory() ap_new = AppropriationFactory(submission_id=sub_new.submission_id) assert number_of_errors(_FILE, database, submission=sub_new, models=[ap_new]) == 0