Skip to content

Commit

Permalink
APPEALS-25418: AOJ Remand Returned Legacy Appeals (#23294)
Browse files Browse the repository at this point in the history
* Calvin/APPEALS-43852-cavc-levers (#21441)

* enabled cavc affinity levers in UI

* updated rspec

* [APPEALS-43849]Update CAVC Affinity Implementation for AMA Dockets to… (#21456)

* [APPEALS-43849]Update CAVC Affinity Implementation for AMA Dockets to Account for Omit/Infinity

* Affinity rules applied to non genpop

* Addressed comments

* Addressed comments

* fixed rubocop issues + added clarity to where clause

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>

* APPEALS-44956: Add AppealAffinity model and database table (#21526)

* add migration for appeal_affinities

* add AppealAffinity model and associations, update migration for new column

* update index to be unique

* add factory, add tests

* add factory traits to appeal and case for appeal affinities

* add combination trait to appeal factory

* add appeal_affinity to skipped associations in ETL reporting

* add a validation, test

* Craig/appeals 44958 (#21564)

* add new job, update affinity model validation and after save hook

* add update from push job

* fix job extending distribution scopes

* add with appeal affinities to distribution scopes

* typo

* add error handling, add test file

* add distributed case factory, refactor naming in job

* fix factories, added tests

* fix migration for null affinity start date column

* fixes, added tests

* more test updates

* add return in job if no query results, tests for no query results

* add test for after_save hook adding dist task instructions

* set start dist job to queue affinity job after running

* fix update job and start dist job spec

* queue affinity update job from push job

* code clarity

* fix judge in seed file

* remove comment, fix hearing factory, disable some seeds for testing

* add more tests

* test refactor

* update appeals for dist query to add affinity start, add seed file, fix hearing factory, add stat to dist factory

* disable new seed on reset

* update seed file with vet names, add another seed category

* fix distirbuted case factory?

* actually fix GHA runs

* lint, test fixes

* change constants in new job

* [Appeals 43850] Update Legacy Docket Queries to Account for the Previous Decision Judge and Type Action  (#21556)

* test changes for seans ticket

* test changes

* added joins to all required methods

* fixed lint

* fixed column ambiguity errors

* cleaned up naming scheme

* Documentation for JOIN_PREVIOUS_APPEALS constant

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>

* APPEALS-44959: Modify affinity date checks to use appeal_affinity (#21611)

* swap distribution queries from distribution_task to appeal_affinities

* update seed files to use appeal affinities instead of distribution task

* clean up seed file method names

* add missing Timecop.return in ama affinity case seed

* fix name of a method in a seed file

* remove references to distribution task in distribution scopes

* fix push priority job tests

* fix naming of args in one of the seed files

* fix user seed, fix date format in distribution task instructions

* fix tests for date format update

* APPEALS-44187: Factory Bot Additions (#21438)

* AC1: values for bfddec and bfmpro

* AC2: case issues updated to '3'

* AC3-4: attorney and judge additions

* ac 5: bfdpdcn addition

* AC6: case type action addition

* ac7: new folder match to original

* ac8: case issues set to original

* AC 3/4: added associations to original

* ac3/4: updated logic to handle no args

* ac3/4: return sattyid

* ac7:updating folder assignment

* ac7: added bfkey to except block

* ac7/8: update to case issue list and validations dismissed

* removed byebug

* ac7: added 'ticknum' to except

* lint fixes

* lint fixes

* lint fixes

* lint fixes

* nested trait into form_9 factory

* new addtions

* added .save to case issues

* resolving correspondent and titrnum associations

* fixed bfdc typo

* factory additions

* added ssn to associated corr.

* removed transient and added .save

* added after create to corr factory

* veteran lookup check prior to create

* committing missed 'end'

* moved over veteran create to case fact.

* move corr. association field to case fact.

* lint issues + corres. save

* Calvin/APPEALS-44957-rake-affinity (#21577)

* grabbed receipt dates from distributed cases

* refactored for functionality + added method to grab appeals that match

* using receipt date, get all related appeals

* added update/creation plus cleaned prior imple.

* gets most recent distributed case receipt_date

* skips if receipt_date is nil for performance

* if appeal affinity is nil, it will now be updated

* created spec file

* fixed non ready appeals

* updated query to match new AC

* removing comment

* testing for each docket

* updated spec file

* added new tests to rspec

* updated start date to receipt date instead of Time.now

* fixed date/time rspec errors

* added rails logger to know when rake task has finished

* added tag for rails log

* removed nonpriority dockets for direct_review and evidence_submission

* fixed lint issue

* fixed flaky spec test

* limits distributed cases query to within the last week

* APPEALS-46016: Add Affinity Start Date to the Explain Page (#21660)

* add affinity start date to explain page

* add feature test to verify dates display

* Sudhir/appeals 43851 (#21613)

* Implement CAVC + AOD Affinity Lever for AMA Dockets

* addressed comments

* addressed comments

* Addressed comments

* added cavc_aod_affinity in case distribution lever model

* addressed comments

* addressed comments

* updated specs

* Updated specs

* specs changes reverted

* ama_aod and ama_non_aod queries updated

* change the assertion in docket spec

* Craig/appeals 46196 (#21689)

* fix query, tested locally

* add basic test to verify csv downloads aren't broken

* APPEALS-43851: Add test to validate CAVC+AOD behavior on hearing docket appeals affinities (#21678)

* add test to validate cavc+aod on hearing docket appeals

* lint, test case_docket_spec fix

* modify case_docket_spec again

* more test fix testing

* attempt to fix test again

* test removing prev appeals from nonpriority queries

* more test tests

* feature toggle change in test

* reorder new portions of query

* remove unused portions of queries in case_docket

* revert unneeded change to query order

* revert unneeded change to query order

* update rake task and spec (#21731)

* APPEALS-46325: Add Seeds for AOD Appeals and Update Dates to Match CAVC (#21730)

* add aod hearing cases to ama affinity cases seed

* fix lever spec

* APPEALS-45148: Hook to clear saved affinity date (#21623)

* initial imp. idea

* AC1: check for affinity_start_date on assignment

* AC2/3: update affinity start date  w/ instr.

* updates to naming, instructions, and hook logic

* updates after review

* rspec coverage and addtional condition

* removed unused identifier

* removed reduntant 'self's

* added update on actual AA record

* updated to save aa record and addtional rspec

* added change to assignment on no record test

* check for assignment

* addd update to 'on_hold' status

* public method to handle legacy affinity appeals

* added .reload to :with_affinity_appeal

* added .reload to :ready_for_distribution

* updates to pass explain_spec

* switched boolean values

* typo

* readujsted order on :create for affinity appeal

* removed after(:create)

* testing rspec by readding after :create

* reloading in assertation

* addressing lint errors

* fix seeds/users_spec

* add case dist lever to new tests (#21776)

* fix tests, add lever to factory, fix dist scopes (#21779)

* fix rubocop warning

* Acd/appeals 43853 43854 (#21971)

* Calvin/appeals 43853 (#21723)

* initial updates

* removing unnecessary variable

* focused in on priority

* removing non priority stuff

* added general comments

* added BFAC and AOD to cavc aod lever query

* adding judge vacols id to query

* aod affinity_start_date filter initial changes

* fixed sorting

* fixed rubocop issues

* updated filter method

* error handling

* added ineligibility to queries for PREV_DECIDING_JUDGE

* fixed SQL query + added comments

* added exclude from affinity check into the case docket queries

* error handling + fixing sql queries

* rejects appeals without affinity_start_dates and nonmatching judges

* fixing rubocop offenses

* fixed inconsistencies between methods

* fixed conditions for rejecting appeals

* refactored cavc aod affinity filter to make it much easier to read

* refactored code to account for AC6

* error handling for empty exclude from affinity

* reverted next if block to old logic to ensure it works

* added PREV_DEC_JUDGE is not null

* case.rb factory changes

* added more options to legacy_cavc_appeal creation

* cleaned up code for simpler reading

* fix for aod legacy cavc creation

* added tied to option to legacy cavc appeal factory

* limits are now handled correctly in query

* replaced return false to next if, as return false was causing unexpected behavior

* fix rspecs + one edge case

* added cavc aod lever creation to rspecs

* removed bfac and aod from nonpriority query

* cavc aod appeals w/excluded judges are now properly being filtered

* refactored excluded judges check

* added to old query to fix rspec errors

* modified case factory bot

* query now handles when prev_deciding_judge is nil

* removed unnecessary condition

* fixed case factory to now have tied_to attatched to orig appeal

* fixed next if block within filter

* handles omit scenarios + correctly rejects with next

* working on rspec (still failing)

* fix for ineligble VLJ when infinite

* fixed rspec suite for cavc aod filters

* fixed omit scenario in cavc aod affinity filter

* consolidation & readability refactor

* rubocop fixes

* fixed spec error

* Implement CAVC Affinity for Legacy Docket (#21706)

* Implement CAVC Affinity for Legacy Docket

* addressed comments

* Added BFAC in the query

* code changes for affinitty date

* Added affinity code

* code refactor and removed non priority code changes

* fixed syntax change

* Addressed comments

* refactor cavc affinity filter

* refactored code

* code refactor

* code refactor

* Updated existing specs

* code refactor

* Added new rspecs

* code refactor and added test  cases

* code refactor

* added test cases

* fixes push_priority_spec

* fixed rubocop issues

* rubocop issue fixed

* refactored code to make it easier to understand

* refactored + fixed rspec and lint errors

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>
Co-authored-by: calvincostaBAH <108481161+calvincostaBAH@users.noreply.github.com>

* basic creation of legacy affinity cases seed data

* bug fixes, added bfcorlid with veterans, fully runs now

* added new appeals for affinity_and_tied_to_judge

* made data have realistic bfcorlids

* changes document sequence to use less digits

* added new file numbers for tied_to cases to make them easier to identify

---------

Co-authored-by: samasudhirreddy <108430298+samasudhirreddy@users.noreply.github.com>

* APPEALS-50692: Update Appeals Ready to Distribute CSV to include CAVC remand original judge (#22070)

* CSV download functional

* add tests, fix CSV query in CaseDocket

* fix lint

* Calvin/appeals 44313 (#22119)

* initial seed data file

* added legacy cavc and cavc aod affinity cases

* update

* fixed tied to for legacy appeals

* added AOD versions of appeals

* small lint fixes

* ensured AOD cases for legacy hearings with exluded or ineligible judge

* added vacols staff record creation for users without it

* APPEALS-47741: Update the UpdateAppealAffinityDatesJob to add appeal_affinity records for Legacy Appeals (#22023)

* AC1: changes and respective tests

* adjustements after refactoring

* identifier mismatch

* name update

* name update

* added appeal affinity filter

* updated comment

* remove byebug

* update rspec to handle hash input

* added no start date test case

* updated process method test

* removed 'todo' comment

* dried up query string

* aligned conditions

* update to hash quotations

* update to hash quotations

* added legacy to priority receipt dates from dist.

* moved append to resulting list

* added legacy receipt date to push job hash

* uncomment call to legacy

* updated dist.id to @dist_id

* uncomment call to process legacy appeals

* handling update to legacy docket type

* current rspec status

* fixed typo

* fix rspec

* legacy spec additions

* legacy spec additions

* added legacy dist. case factory

* removed vacols_judge ref

* updates for spec

* final review

* removed comment

* rubocop fixes

* fix rubocop warnings (#22225)

* Fix rubocop and tests (#22231)

* APPEALS-52222: Add seed data file for AOJ remand return feature development (#22245)

* added initial seed file

* refactor create_correspondent

* Calvin/appeals 52551 (#22293)

* age_of_n_oldest_priority_appeals_available_to_judge time out changes

* fixed timeout issue for distribute_priority_appeals

* fixed lint errors

* Craig/case docket optimization (#22294)

* age_of_n_oldest_priority_appeals_available_to_judge time out changes

* fixed timeout issue for distribute_priority_appeals

* optimize case docket priority distribution methods

* fix das deprecation distribution spec

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>

* Combination/appeals 50951 50966 50980 (#22250)

* [APPEALS-50951]: Class Created for LegacyAojDocket

* draft PR

* aoj_case_docket initial work

* initial aoj case docket creation

* added missing method to aoj_case_docket

* updated legacy docket spec to remove any AOJ data

* fixed lint error

* moving aoj appeal repository file to the correct folder

* set up aoj Appeal Repository file

* remove unnecessary rubocop disable

* LegacyAojDocket

* rspec for aoj appeal repository

* updated push_priority_appeals_to_judges_job_spec.rb

* remove byebug

* fixing some rubocop errors

* fixed aoj_legacy_docket_spec

* fixed most errors in push_priority_to_judges_job_spec

* rubocop ignores/fixes

* Added count code in aoj legacy docket

* fixed last push_priority spec error

* removed unnecessary methods and reworked rspecs

* fix update_appeal_affinity method for both CaseDocket and AojCaseDocket

* remove unneccessary code

* remove duplicate methods

* resolved comments

* removed unwanted code

* remove age_of_n_oldest_genpop_priority_appeals from aoj

* removed bfhines mentions

* remove bfhines from update_appeal_affinity_dates_query

* remove bfhines testing from rspec

---------

Co-authored-by: samasudhirreddy <sudhirreddy.sama@va.gov>
Co-authored-by: Sean Parker <Sean.Parker3@va.gov>
Co-authored-by: Craig Reese <Reese_Craig@bah.com>

* Update admin_ui_spec.rb for CAVC levers being enabled

* Appeals-43900: Update Distribution Levers Seed Values to Enable in UI (#22249)

* init. commit

* updated test with data staged

* updates to test implementation

* removed rspec factory declarations

* removed blank space

* updated seed values for aoj seeds

* updated tests

* seeds typo

* seeds typo

* added passing class methods

* review response + updates to spec

* updated name error

* updated context name

* lint fixes

* APPEALS-50870: Add New Factory Trait to VACOLS/ Case for AOJ w/ Previous Appeal (#22248)

* add legacy_aoj_appeal factory

* add tests to vacols/case model for aoj appeal factory

* add comments to factory

* kick tests

* skip flaky distribution_spec.rb tests

* update appeals ready to distribute CSV query for AOJ docket

* update admin_ui tests for AOJ levers being enabled

* Combination/appeals 43899 43901 43902 (#22429)

* initial aoj_cavc affinity lever work

* added seed data for aoj cavc lever

* initial testing for aoj_cavc

* updated rspecs + seed data

* updated JOIN_PREVIOUS_APPEAL constant

* updated spec files to include aoj cavc lever + fix linting

* lint fix

* rename aoj_cavc_affinity trait

* added lever to related rspecs

* Added Aoj Aod affinity days in distribute appeals

* Aoj_aod affinity lever

* removed bfac stuff

* Added seed data and test cases

* fixed typo errors

* updated JOIN_PREVIOUS_APPEAL

* fix for binding query with variables

* removed altering of bfkey in the aoj_case_docket_spec test

* update lever name and add to related rspecs

* one more update for lever name

* added lever to related rspecs

* edited rspec tests

* skip flaky test

* fixed query santizing with variables + added infinite lever error handling

* added tests for when both aoj levers are infinite

* fixed parenthesis for age_of_n method

* Added 2 additional appeal with cavc

* Updated dates

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>
Co-authored-by: calvincostaBAH <108481161+calvincostaBAH@users.noreply.github.com>

* APPEALS-53993: Update Implementation of Legacy Appeals with Hearing Held (#22473)

* implement new hearing requirement and test

* first pass at seed data for testing

* add new case to test and seed, fix typo and comments

* update for new 8.2.1.1 requirement

* fix rubocop warning

* fix error in seed file

* add new affinity scenario to seed data

* make some seed methods private

* fix rubocop warnings

* rspec addition for aoj (#22405)

* initial aoj_cavc affinity lever work

* added seed data for aoj cavc lever

* initial testing for aoj_cavc

* rspec addition for aoj

* updated rspecs + seed data

* updated JOIN_PREVIOUS_APPEAL constant

* updated spec files to include aoj cavc lever + fix linting

* lint fix

* rename aoj_cavc_affinity trait

* aoj affinity lever imp.

* added lever to related rspecs

* seeds

* Added Aoj Aod affinity days in distribute appeals

* Aoj_aod affinity lever

* removed bfac stuff

* Added seed data and test cases

* fixed typo errors

* updated JOIN_PREVIOUS_APPEAL

* fix for binding query with variables

* removed altering of bfkey in the aoj_case_docket_spec test

* update lever name and add to related rspecs

* one more update for lever name

* added lever to related rspecs

* edited rspec tests

* update to add lever to all related rspecs

* update JOIN_PREVIOUS_APPEALS constant

* skip flaky test

* lint fixes, spec fixes, and implementation updates

* seed updates

* fixed query santizing with variables + added infinite lever error handling

* added tests for when both aoj levers are infinite

* rspec fixes on query

* changing rspec lever test to use nonpriority method call

* updated variable name

* skipped flaky test

* fix method naming

* refactored age_of_n_nonpriority method

* fixed parenthesis for age_of_n method

* Added 2 additional appeal with cavc

* Updated dates

* updates to age_of_n_oldest_nonpriority method

* updates to fixx issue on lever set to infinite

* replaced num with judge.vacols_attorney_id

* rubocop fixes

* spec and update on missing parenthesis

* lint error

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>
Co-authored-by: calvincostaBAH <108481161+calvincostaBAH@users.noreply.github.com>
Co-authored-by: samasudhirreddy <sudhirreddy.sama@va.gov>
Co-authored-by: Craig Reese <Reese_Craig@bah.com>

* Update testing CSV files with affinity start date and original judge columns (#22498)

* affinity start date column

* original judges column for legacy and ama appeals

* remove unnecessary rubocop disable

* swap judge_mem_id with original_judge variables for better clarity

* Calvin/appeals 53712 (#22490)

* initial aoj_cavc affinity lever work

* added seed data for aoj cavc lever

* initial testing for aoj_cavc

* updated rspecs + seed data

* updated JOIN_PREVIOUS_APPEAL constant

* updated spec files to include aoj cavc lever + fix linting

* lint fix

* rename aoj_cavc_affinity trait

* added lever to related rspecs

* Added Aoj Aod affinity days in distribute appeals

* Aoj_aod affinity lever

* removed bfac stuff

* Added seed data and test cases

* fixed typo errors

* updated JOIN_PREVIOUS_APPEAL

* fix for binding query with variables

* removed altering of bfkey in the aoj_case_docket_spec test

* update lever name and add to related rspecs

* one more update for lever name

* added lever to related rspecs

* edited rspec tests

* skip flaky test

* fixed query santizing with variables + added infinite lever error handling

* added tests for when both aoj levers are infinite

* fixed parenthesis for age_of_n method

* Added 2 additional appeal with cavc

* Updated dates

* aoj_cavc seed data for testing

* made changes based on craigs comments

* fixed small name issues

* lint fix

---------

Co-authored-by: samasudhirreddy <sudhirreddy.sama@va.gov>

* Seed Data for Testing AOJ AOD Affinity Lever (#22501)

* Seed Data for Testing AOJ AOD Affinity Lever

* Name changes to Genpop

* fixed lint issue and addressed comments

* typo error fixed

* uncommented code

* Added back 2 additional appeals with Cavc

* Isaiah/appeals 43895 (#22536)

* initial aoj_cavc affinity lever work

* added seed data for aoj cavc lever

* initial testing for aoj_cavc

* rspec addition for aoj

* updated rspecs + seed data

* updated JOIN_PREVIOUS_APPEAL constant

* updated spec files to include aoj cavc lever + fix linting

* lint fix

* rename aoj_cavc_affinity trait

* aoj affinity lever imp.

* added lever to related rspecs

* seeds

* Added Aoj Aod affinity days in distribute appeals

* Aoj_aod affinity lever

* removed bfac stuff

* Added seed data and test cases

* fixed typo errors

* updated JOIN_PREVIOUS_APPEAL

* fix for binding query with variables

* removed altering of bfkey in the aoj_case_docket_spec test

* update lever name and add to related rspecs

* one more update for lever name

* added lever to related rspecs

* edited rspec tests

* update to add lever to all related rspecs

* update JOIN_PREVIOUS_APPEALS constant

* skip flaky test

* lint fixes, spec fixes, and implementation updates

* seed updates

* fixed query santizing with variables + added infinite lever error handling

* added tests for when both aoj levers are infinite

* rspec fixes on query

* changing rspec lever test to use nonpriority method call

* updated variable name

* skipped flaky test

* fix method naming

* refactored age_of_n_nonpriority method

* fixed parenthesis for age_of_n method

* Added 2 additional appeal with cavc

* Updated dates

* updates to age_of_n_oldest_nonpriority method

* updates to fixx issue on lever set to infinite

* replaced num with judge.vacols_attorney_id

* rubocop fixes

* spec and update on missing parenthesis

* lint error

* seed adjustments

* compiled updates to seed

* removed repeating methods and rearranged methods

* lint fix

* adjustments to seeds

* seed updates

* seed updates

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>
Co-authored-by: calvincostaBAH <108481161+calvincostaBAH@users.noreply.github.com>
Co-authored-by: samasudhirreddy <sudhirreddy.sama@va.gov>

* SeanP/APPEALS-55085: Add columns to distribution_stats for new AOJ legacy docket (#22655)

* aoj_legacy_stats and aoj_legacy_priority_stats to distribution_stats table, including tests

* run make migrate to drop unnecessary local table

* add distribtuion stats to serializer in lower environments (#22559)

* Calvin/appeals 53978 (#22612)

* initial code changes + rspec fixes

* lint fixes and reorganized code

* added a skip to aoj_legacy distribution stats (must add back later)

* fixed remaining rspecs by adding to stats

* lint fix

* removing guard clauses

* removed flaky test

* Update dist controller tests for addition of distribution_stats to the serializer

* Initial commit of Affinity_date_count (#22609)

* Initial commit of Affinity_date_count

* added code in aoj legacy docket

* affinity_date_count methods for legacy docket and aoj legacy docket

* addressed comments

* refactored affinity_date_count methods and added filters

* Added rspecs and code refator

* robocop fixed

* Addressed comments and updated test cases

* Lint issue fixed

* Initial commit of Affinity_date_count

* added code in aoj legacy docket

* affinity_date_count methods for legacy docket and aoj legacy docket

* addressed comments

* refactored affinity_date_count methods and added filters

* Added rspecs and code refator

* robocop fixed

* Addressed comments and updated test cases

* Lint issue fixed

* Updated in and out affinity date window for both aoj and non aoj

* Addressed comments

* Fixed lint issue

* refactored affinity date count logic and rspecs

* fixed priority and non priority  affinity count query + rspecs

* lint issue fixed

* fixed nonpriority affinity date count method

* added comments + new method for nonpriority

---------

Co-authored-by: Calvin <Calvin.Costa@va.gov>

* APPEALS-55609: Cache case distribution lever values at beginning of PPJ or other distribution (#22654)

* method additions for cache writeouts

* moved cache methods to distribution.rb

* updates to the imp.

* added conditional on assignment

* changed order of conditional

* rspec addition & revised expiration for cache

* updates to point of method call

* updates to cache imp.

* modified removal and name of cache

* updates following review

* update to rspec

* chained rspec method to call original

* rspec fixes for aoj_case_docket

* chained method count to receive

* cleared cache on case docket spec

* fix case factory defining correspondent twice

* Calvin/appeals 57225 (#22777)

* added test cases for infinite and omit levers with desired outcomes

* add check for hearing date to levers being infinite

* fix lint

* adding method to aoj case docket

* updated rspecs

* added cache clearing

* refactored spec tests

* fixed rspec expectations

* fixed use of double update

---------

Co-authored-by: Craig Reese <109101548+craigrva@users.noreply.github.com>
Co-authored-by: Craig Reese <Reese_Craig@bah.com>

* Migrate databases after Rails upgrade

* APPEALS-57350, APPEALS-57391: Fix distribution statistics affinity_date_count methods (#22955)

* add metabase to m1 docker compose

* rename metabase container and specify a version

* add script for initial metabase setup

* script output formatting

* add metabase directory

* move to a dockerfile, implement VACOLS to setup script

* add metabase to original docker-compose

* add step to initialize metabase in demo startup

* update demo startup.sh to initialize metabase with absolute path

* add make command for local metabase setup

* fix makefile syntax error

* update scripts to work in AWS

* update demo script to use apt-get instead of yum

* update demo script to use dns for vacols-db

* fix vacols DB docker DNS name

* Distribution stats error (#22773)

* Distribution stats error

* Added test cases affinity date count

* Addressed comments and refactor genpop_by_affinity_start_date method using the OR condition

* Addressed comments

* add distribtuion stats to serializer in lower environments

---------

Co-authored-by: Craig Reese <109101548+craigrva@users.noreply.github.com>
Co-authored-by: Craig Reese <Reese_Craig@bah.com>

* APPEALS-57391: Distribution statistics method affinity_date_count does not return accurate counts for the Hearing docket (#22827)

* added method for method chaining onto scope

* chained to scope

* updated affinity_date_count method and added rspec

* added missed 'self'

* changes for pasaing test

* updates to spec and affinity_date_count

* test updates

* rubocop fixes

* rubocop fixes

* removed unused methods

---------

Co-authored-by: Craig Reese <109101548+craigrva@users.noreply.github.com>

* Update test files for combining the branches

---------

Co-authored-by: samasudhirreddy <108430298+samasudhirreddy@users.noreply.github.com>
Co-authored-by: Isaiah Saucedo <irsaucedo5@gmail.com>

* Fixed appeals ready for distribution query when no prev_deciding_judge exists

* rebased hotfix/APPEALS-58200 changes to feature branch (#23067)

* rebased hotfix/APPEALS-58200 changes to feature branch

* added aoj_case_docket changes

* updated docket coordinator spec to include levers

* Update ReturnLegacyAppealsToBoardJob to use AojLegacyDocket (#22975)

* tie return_legacy_appeals_to_board_job to AojLegacyDockets

* remove duplicate test

* testing aoj case docket appeals

* Rails logger

* getting legacy_aoj_appeal tests to work

* select PREV_TYPE_ACTION

* remove Rails logger

* change constant in self.ready_to_distribute_appeals to include hearing judge

* APPEALS-60079: Hearing held before most recent Remand Judge distributing correctly when lever is set to infinite (#23115)

* update infinite lever checks to use deciding instead of hearing judge

* fix bug in seed data with user css_id lengths

* Craig/appeals 60680 (#23177)

* add test scenario and update assertions for SMR changes

* update test assertions for hearing after decision checks

* code change for tying cases with a nil previous deciding judge

* updated seed veteran names for new scenarios

* Add checks for disable_legacy Case Distribution Levers to the AOJ legacy docket

* APPEALS-61180: Improve Performance of the AOJ Distribution Queries (#23268)

* add feature toggles to AMA statistics to allow disabling of certain queries

* set case_docket counts method to only count if the appeal is not a post remand

* refactor affinity filters for performance

* refactor cavc filters in case_docket for performance

* fix rubocop warnings

* refactor for reduce repetition

* refactor repeated code in affinity filters to a common method

* fix rubocop warnings in case docket files

* update code comments for consistency in methods

* add test for distribution stats behavior with disable stats toggles turned on

* add automated test to validate new feature toggle behavior

* update tests for .counts_by_priority_and_readiness

* add comment to case docket spec

* Add new feature toggle to local/demo disable list

* remove distribution stats generation from the initial transaction to reduce time for users to get their cases

* add aoj to aoj repository metrics logs

---------

Co-authored-by: calvincostaBAH <108481161+calvincostaBAH@users.noreply.github.com>
Co-authored-by: samasudhirreddy <108430298+samasudhirreddy@users.noreply.github.com>
Co-authored-by: Calvin <Calvin.Costa@va.gov>
Co-authored-by: seanrpa <155660052+seanrpa@users.noreply.github.com>
Co-authored-by: Isaiah Saucedo <irsaucedo5@gmail.com>
Co-authored-by: samasudhirreddy <sudhirreddy.sama@va.gov>
Co-authored-by: Sean Parker <Sean.Parker3@va.gov>
  • Loading branch information
8 people committed Oct 28, 2024
1 parent cad0a78 commit 9ae89a3
Show file tree
Hide file tree
Showing 51 changed files with 5,126 additions and 240 deletions.
2 changes: 1 addition & 1 deletion app/jobs/return_legacy_appeals_to_board_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def filter_appeals(appeals, moved_appeals)
end

def eligible_and_moved_appeals
appeals = LegacyDocket.new.appeals_tied_to_non_ssc_avljs
appeals = LegacyDocket.new.appeals_tied_to_non_ssc_avljs + AojLegacyDocket.new.appeals_tied_to_non_ssc_avljs
moved_appeals = move_qualifying_appeals(appeals)
[appeals, moved_appeals]
end
Expand Down
2 changes: 2 additions & 0 deletions app/jobs/update_appeal_affinity_dates_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ def process_legacy_appeals_which_need_affinity_updates(receipt_date_hashes_array

legacy_appeals_hash = VACOLS::CaseDocket.update_appeal_affinity_dates_query(receipt_date_hash[:priority],
receipt_date_hash[:receipt_date])
legacy_appeals_hash += VACOLS::AojCaseDocket.update_appeal_affinity_dates_query(receipt_date_hash[:priority],
receipt_date_hash[:receipt_date])
legacy_appeals_to_update_adjusted_for_affinity = legacy_appeals_with_no_appeal_affinities(legacy_appeals_hash)
create_or_update_appeal_affinities(legacy_appeals_to_update_adjusted_for_affinity, receipt_date_hash[:priority])
end
Expand Down
21 changes: 20 additions & 1 deletion app/models/case_distribution_lever.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ class CaseDistributionLever < ApplicationRecord
#{Constants.DISTRIBUTION.ama_hearing_start_distribution_prior_to_goals}
#{Constants.DISTRIBUTION.ama_evidence_submission_start_distribution_prior_to_goals}
#{Constants.DISTRIBUTION.nonsscavlj_number_of_appeals_to_move}
#{Constants.DISTRIBUTION.aoj_affinity_days}
#{Constants.DISTRIBUTION.aoj_aod_affinity_days}
#{Constants.DISTRIBUTION.aoj_cavc_affinity_days}
).freeze

FLOAT_LEVERS = %W(
Expand Down Expand Up @@ -186,10 +189,20 @@ def snapshot
snapshot_hash
end

def clear_distribution_lever_cache
lever_items = CaseDistributionLever.all.map(&:item)

# Loop through each lever item and delete the corresponding cache
lever_items.each do |item|
cache_key = "#{item}_distribution_lever_cache"
Rails.cache.delete(cache_key)
end
end

private

def method_missing_value(name)
lever = find_by_item(name).try(:value)
lever = check_distribution_lever_cache(name)
begin
if INTEGER_LEVERS.include?(name)
Integer(lever)
Expand Down Expand Up @@ -247,5 +260,11 @@ def update_radio_options(lever, options)

lever["options"] = options
end

def check_distribution_lever_cache(name)
Rails.cache.fetch("#{name}_distribution_lever_cache", expires_in: 2.minutes) do
find_by_item(name).try(:value)
end
end
end
end
13 changes: 11 additions & 2 deletions app/models/concerns/by_docket_date_distribution.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ def distribute_nonpriority_appeals_from_all_dockets_by_age_to_limit(limit, style
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
def ama_statistics
docket_counts = {
aoj_legacy_priority_stats: {},
aoj_legacy_stats: {},
direct_review_priority_stats: {},
direct_review_stats: {},
evidence_submission_priority_stats: {},
Expand All @@ -71,6 +73,8 @@ def ama_statistics
}

dockets.each_pair do |sym, docket|
next if FeatureToggle.enabled?("disable_#{sym}_distribution_stats".to_sym)

docket_counts["#{sym}_priority_stats".to_sym] = {
count: docket.count(priority: true, ready: true),
affinity_date: {
Expand All @@ -88,8 +92,10 @@ def ama_statistics
}
end

docket_counts[:legacy_priority_stats][:legacy_hearing_tied_to] = legacy_hearing_priority_count(judge)
docket_counts[:legacy_stats][:legacy_hearing_tied_to] = legacy_hearing_nonpriority_count(judge)
unless FeatureToggle.enabled?(:disable_legacy_distribution_stats)
docket_counts[:legacy_priority_stats][:legacy_hearing_tied_to] = legacy_hearing_priority_count(judge)
docket_counts[:legacy_stats][:legacy_hearing_tied_to] = legacy_hearing_nonpriority_count(judge)
end

sct_appeals_counts = @appeals.count { |appeal| appeal.try(:sct_appeal) }

Expand All @@ -102,6 +108,9 @@ def ama_statistics
feature_toggles = [
:specialty_case_team_distribution
]
dockets.each_key do |sym|
feature_toggles << "disable_#{sym}_distribution_stats".to_sym
end
feature_toggles.each do |sym|
settings[sym] = FeatureToggle.enabled?(sym, user: RequestStore.store[:current_user])
end
Expand Down
42 changes: 34 additions & 8 deletions app/models/concerns/distribution_scopes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,23 @@ def genpop
end

def genpop_by_affinity_start_date
with_appeal_affinities
query = ""
cavc_aod_affinity_days = CaseDistributionLever.cavc_aod_affinity_days
cavc_affinity_days = CaseDistributionLever.cavc_affinity_days

result = with_appeal_affinities
.with_original_appeal_and_judge_task
.where(
"appeal_affinities.affinity_start_date <= ?",
CaseDistributionLever.cavc_affinity_days.days.ago
)

if case_affinity_days_lever_value_is_selected?(cavc_affinity_days)
query += "appeal_affinities.affinity_start_date <= '#{cavc_affinity_days.days.ago}'"
end

if case_affinity_days_lever_value_is_selected?(cavc_aod_affinity_days)
cavc_aod_query = "appeal_affinities.affinity_start_date <= '#{cavc_aod_affinity_days.days.ago}'"
query += query.present? ? " OR #{cavc_aod_query}" : cavc_aod_query
end

query.present? ? result.where(query) : result
end

def ama_non_aod_appeals
Expand Down Expand Up @@ -204,11 +215,26 @@ def non_genpop_for_judge(judge, lever_days = CaseDistributionLever.cavc_affinity
end

def non_genpop_by_affinity_start_date
with_appeal_affinities
query = ""
cavc_aod_affinity_days = CaseDistributionLever.cavc_aod_affinity_days
cavc_affinity_days = CaseDistributionLever.cavc_affinity_days

result = with_appeal_affinities
.with_original_appeal_and_judge_task
.where("appeal_affinities.affinity_start_date > ? or appeal_affinities.affinity_start_date is null",
CaseDistributionLever.cavc_affinity_days.days.ago)
.where.not(original_judge_task: { assigned_to_id: nil })

if case_affinity_days_lever_value_is_selected?(cavc_affinity_days)
query += "appeal_affinities.affinity_start_date > '#{cavc_affinity_days.days.ago}' or "\
"appeal_affinities.affinity_start_date is null"
end

if case_affinity_days_lever_value_is_selected?(cavc_aod_affinity_days)
cavc_aod_query = "appeal_affinities.affinity_start_date > '#{cavc_aod_affinity_days.days.ago}' or "\
"appeal_affinities.affinity_start_date is null"
query += query.present? ? " OR #{cavc_aod_query}" : cavc_aod_query
end

query.present? ? result.where(query) : result
end

def ordered_by_distribution_ready_date
Expand Down
15 changes: 10 additions & 5 deletions app/models/distribution.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,18 @@ def distribute!(limit = nil)

priority_push? ? priority_push_distribution(limit) : requested_distribution

ama_stats = ama_statistics
# update status and time before generating the statistics to reduce amount of time a user waits for cases
update!(status: "completed", completed_at: Time.zone.now)
end

# need to store batch_size in the statistics column for use within the PushPriorityAppealsToJudgesJob
update!(status: "completed", completed_at: Time.zone.now, statistics: completed_statistics(ama_stats))
ama_stats = ama_statistics

record_distribution_stats(ama_stats)
end
# need to store batch_size in the statistics column for use within the PushPriorityAppealsToJudgesJob
update!(statistics: completed_statistics(ama_stats))

record_distribution_stats(ama_stats)

CaseDistributionLever.clear_distribution_lever_cache
rescue StandardError => error
process_error(error)
title = "Distribution Failed"
Expand Down
23 changes: 15 additions & 8 deletions app/models/docket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def docket_type

# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
# :reek:LongParameterList
def appeals(priority: nil, genpop: nil, ready: nil, judge: nil)
def appeals(priority: nil, genpop: nil, ready: nil, judge: nil, not_affinity: nil)
fail "'ready for distribution' value cannot be false" if ready == false

scope = docket_appeals
Expand All @@ -26,7 +26,7 @@ def appeals(priority: nil, genpop: nil, ready: nil, judge: nil)
if ready
scope = scope.ready_for_distribution
scope = adjust_for_genpop(scope, genpop, judge) if judge.present? && !use_by_docket_date?
scope = adjust_for_affinity(scope, judge) if judge.present? && FeatureToggle.enabled?(:acd_exclude_from_affinity)
scope = adjust_for_affinity(scope, not_affinity, judge) if FeatureToggle.enabled?(:acd_exclude_from_affinity)
end

return scoped_for_priority(scope) if priority == true
Expand All @@ -36,9 +36,9 @@ def appeals(priority: nil, genpop: nil, ready: nil, judge: nil)
scope.order("appeals.receipt_date")
end

def ready_priority_nonpriority_appeals(priority: false, ready: true, judge: nil, genpop: nil)
def ready_priority_nonpriority_appeals(priority: false, ready: true, judge: nil, genpop: nil, not_affinity: nil)
priority_status = priority ? PRIORITY : NON_PRIORITY
appeals = appeals(priority: priority, ready: ready, genpop: genpop, judge: judge)
appeals = appeals(priority: priority, ready: ready, genpop: genpop, judge: judge, not_affinity: not_affinity)
lever_item = "disable_ama_#{priority_status}_#{docket_type.downcase}"
docket_type_lever = CaseDistributionLever.find_by_item(lever_item)
docket_type_lever_value = docket_type_lever ? CaseDistributionLever.public_send(lever_item) : nil
Expand Down Expand Up @@ -98,9 +98,10 @@ def age_of_n_oldest_nonpriority_appeals_available_to_judge(judge, num)
def age_of_oldest_priority_appeal
@age_of_oldest_priority_appeal ||=
if use_by_docket_date?
ready_priority_nonpriority_appeals(priority: true, ready: true).limit(1).first&.receipt_date
ready_priority_nonpriority_appeals(priority: true, ready: true, not_affinity: true).limit(1).first&.receipt_date
else
ready_priority_nonpriority_appeals(priority: true, ready: true).limit(1).first&.ready_for_distribution_at
ready_priority_nonpriority_appeals(priority: true, ready: true, not_affinity: true)
.limit(1).first&.ready_for_distribution_at
end
end

Expand Down Expand Up @@ -209,8 +210,14 @@ def adjust_for_genpop(scope, genpop, judge)
(genpop == "not_genpop") ? scope.non_genpop_for_judge(judge) : scope.genpop
end

def adjust_for_affinity(scope, judge)
scope.genpop_with_case_distribution_lever.or(scope.non_genpop_with_case_distribution_lever(judge))
def adjust_for_affinity(scope, not_affinity, judge = nil)
if judge.present?
scope.genpop_with_case_distribution_lever.or(scope.non_genpop_with_case_distribution_lever(judge))
elsif not_affinity
scope
else
scope.genpop_with_case_distribution_lever
end
end

def scoped_for_priority(scope)
Expand Down
3 changes: 2 additions & 1 deletion app/models/docket_coordinator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ def dockets
legacy: LegacyDocket.new,
direct_review: DirectReviewDocket.new,
evidence_submission: EvidenceSubmissionDocket.new,
hearing: HearingRequestDocket.new
hearing: HearingRequestDocket.new,
aoj_legacy: AojLegacyDocket.new
}

@dockets ||= all_dockets
Expand Down
111 changes: 111 additions & 0 deletions app/models/dockets/aoj_legacy_docket.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# frozen_string_literal: true

class AojLegacyDocket < LegacyDocket
def ready_to_distribute_appeals
LegacyAppeal.aoj_appeal_repository.ready_to_distribute_appeals
end

# rubocop:disable Metrics/CyclomaticComplexity
def count(priority: nil, ready: nil)
counts_by_priority_and_readiness.inject(0) do |sum, row|
next sum unless (priority.nil? || (priority ? 1 : 0) == row["priority"]) &&
(ready.nil? || (ready ? 1 : 0) == row["ready"])

sum + row["n"]
end
end
# rubocop:enable Metrics/CyclomaticComplexity

def genpop_priority_count
LegacyAppeal.aoj_appeal_repository.genpop_priority_count
end

def not_genpop_priority_count
LegacyAppeal.aoj_appeal_repository.not_genpop_priority_count
end

def ready_priority_appeal_ids
LegacyAppeal.aoj_appeal_repository.priority_ready_appeal_vacols_ids
end

def oldest_priority_appeal_days_waiting
return 0 if age_of_oldest_priority_appeal.nil?

(Time.zone.now.to_date - age_of_oldest_priority_appeal.to_date).to_i
end

def age_of_oldest_priority_appeal
@age_of_oldest_priority_appeal ||=
if use_by_docket_date?
LegacyAppeal.aoj_appeal_repository.age_of_oldest_priority_appeal_by_docket_date
else
LegacyAppeal.aoj_appeal_repository.age_of_oldest_priority_appeal
end
end

def age_of_n_oldest_priority_appeals_available_to_judge(judge, num)
return [] unless ready_priority_nonpriority_legacy_appeals(priority: true)

LegacyAppeal.aoj_appeal_repository.age_of_n_oldest_priority_appeals_available_to_judge(judge, num)
end

def age_of_n_oldest_nonpriority_appeals_available_to_judge(judge, num)
return [] unless ready_priority_nonpriority_legacy_appeals(priority: false)

LegacyAppeal.aoj_appeal_repository.age_of_n_oldest_nonpriority_appeals_available_to_judge(judge, num)
end

def distribute_priority_appeals(distribution, style: "push", genpop: "any", limit: 1)
return [] unless should_distribute?(distribution, style: style, genpop: genpop)
return [] unless ready_priority_nonpriority_legacy_appeals(priority: true)

LegacyAppeal.aoj_appeal_repository.distribute_priority_appeals(distribution.judge, genpop, limit).map do |record|
next unless existing_distribution_case_may_be_redistributed?(record["bfkey"], distribution)

dist_case = new_distributed_case(distribution, record, docket_type, genpop, true)
save_dist_case(dist_case)
dist_case
end.compact
end

# rubocop:disable Metrics/ParameterLists
def distribute_nonpriority_appeals(distribution,
style: "push",
genpop: "any",
range: nil,
limit: 1,
bust_backlog: false)
return [] unless should_distribute?(distribution, style: style, genpop: genpop)
return [] unless ready_priority_nonpriority_legacy_appeals(priority: false)
return [] if !range.nil? && range <= 0

LegacyAppeal.aoj_appeal_repository.distribute_nonpriority_appeals(
distribution.judge, genpop, range, limit, bust_backlog
).map do |record|
next unless existing_distribution_case_may_be_redistributed?(record["bfkey"], distribution)

dist_case = new_distributed_case(distribution, record, docket_type, genpop, false)
save_dist_case(dist_case)
dist_case
end.compact
end
# rubocop:enable Metrics/ParameterLists

def priority_appeals_affinity_date_count(in_window)
LegacyAppeal.aoj_appeal_repository.priority_appeals_affinity_date_count(in_window).size
end

def non_priority_appeals_affinity_date_count(in_window)
LegacyAppeal.aoj_appeal_repository.non_priority_appeals_affinity_date_count(in_window).size
end

def appeals_tied_to_non_ssc_avljs
LegacyAppeal.aoj_appeal_repository.appeals_tied_to_non_ssc_avljs
end

private

def counts_by_priority_and_readiness
@counts_by_priority_and_readiness ||= LegacyAppeal.aoj_appeal_repository.docket_counts_by_priority_and_readiness
end
end
Loading

0 comments on commit 9ae89a3

Please sign in to comment.