Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Part 4] Create non default distribution seed data #14802

Merged
merged 31 commits into from
Sep 4, 2020

Conversation

hschallhorn
Copy link
Contributor

@hschallhorn hschallhorn commented Jul 29, 2020

bumps #14604

Part 1: #14745
Part 2: #14715
Part 3: #14761

Description

Add an easy way to test this job

Acceptance Criteria

  • Can generate seed data to test distributions
  • Distribution job performs as expected

Testing Plan

  1. Run the new/fixed seeds
make reset
  1. Generate some data!!!
# Fix some bad dev data
VACOLS::Staff.find_by(sdomainid: "BVARERDMAN").update!(svlj: "J")
CacheManager.new.clear(:vacols)
# Going to create a lot of data here, better set up some stuff for versions
RequestStore[:current_user] = User.system_user
# Because db/seeds is not in the autoload path, we must load them explicitly here
Dir[Rails.root.join("db/seeds/*.rb")].sort.each { |f| require f }
# Seed away!!!!
Seeds::PriorityDistributions.new.seed!
# Note the bfkey of the last distributed case printed out from the job
failed_distribution_case_id = DistributedCase.last.case_id
  1. Check out some of the job methods!
job = PushPriorityAppealsToJudgesJob.new
# Let's distribute cases tied to our elligible judges
tied_distributions = job.distribute_non_genpop_priority_appeals
# How many did each of them get?
tied_distributions.map { |dist| [dist.judge_id, dist.statistics["batch_size"]] }.to_h
=> {3=>3, 64=>1, 5=>0, 4=>3, 73=>2}

# Let's calculate our priority target!
# Let's looks at how many priority cases have bee distributed this month for each of our judges
job.eligible_judge_priority_distributions_this_month
=> {3=>18, 64=>13, 5=>9, 4=>7, 73=>17}
# How many priority cases are ready to be distributed?
job.ready_priority_appeals_count
=> 122
# How many of each?
docket_coordinator = DocketCoordinator.new
docket_coordinator.dockets.map do |docket_type, docket|
   [docket_type, docket.ready_priority_appeal_ids.count]
 end.to_h
=> {:legacy=>42, :direct_review=>68, :evidence_submission=>4, :hearing=>8}
# What should we aim for for each judge to be the most "fair"
job.priority_target
=> 37
# How many cases does that translate to to distribute to each judge now?
job.eligible_judge_target_distributions
=> {3=>19, 64=>24, 5=>28, 4=>30, 73=>20}
# Does the priority target leave any leftover cases that need distributing?
job.leftover_cases_count
=> 1
#Let's dish that one case out to whoever has the least number of cases
job.eligible_judge_target_distributions_with_leftovers
=> {3=>20, 73=>20, 64=>24, 5=>28, 4=>30}

# Anndddddd distribute!
genpop_distributions = job.distribute_genpop_priority_appeals
genpop_distributions.map { |dist| [dist.judge_id, dist.statistics["batch_size"]] }.to_h
# How'd we do??
=> {3=>19, 73=>20, 64=>24, 5=>28, 4=>22}
# Looks like we're missing some
job.instance_variable_set(:@tied_distributions, tied_distributions)
job.instance_variable_set(:@genpop_distributions, genpop_distributions)
puts job.slack_report.join("\n")

[WARN]
*Number of cases tied to judges distributed*: 9
*Number of general population cases distributed*: 113
*Age of oldest legacy case*: 0 days
*Age of oldest direct_review case*: 0 days
*Age of oldest evidence_submission case*: 0 days
*Age of oldest hearing case*: 0 days
*Number of appeals _not_ distributed*: 8

*Debugging information*
Priority Target: 37
Previous monthly distributions: {3=>37, 64=>37, 5=>37, 4=>29, 73=>37}
Legacy appeals not distributed: `LegacyAppeal.where(vacols_id: ["3429072462", "2181906143"])`
AMA appeals not distributed: `Appeal.where(uuid: ["3788816f-5de9-4727-b5ea-09c0868e2435", "22800998-59e0-4a8e-9477-bf5772e1526d", "3f9a7fc0-82a1-462d-934f-ab4c6fa92f14", "98c6227d-2ea5-4fe3-b8e3-b76fb9d462f8", "4fba02a7-760a-4f49-8242-291d3bd2b449", "164adfeb-b26d-4274-8331-12decce58051", "8a92e9c5-56e0-4515-aece-b2fb0b6d0433", "c3bb1ec9-77d2-45c7-b62a-424d2a304817"])`
Some cases are ready to distribute but could not be. This could be due to the tied judge being an acting judge or an attorney (`!user.judge_in_vacols?`). These will be handled manually by the board. The tied judge could also have priority distribution turned off and should not be pushed cases (`JudgeTeam.for_judge(user).accepts_priority_pushed_cases?`). There could also be a duplicate distributed case blocking distribution (`DistributedCase.find_by(case_id: case_id`) or our validations for redistributing legacy appeals failed (https://github.com/department-of-veterans-affairs/caseflow/blob/master/app/services/redistributed_case.rb#L26)

appeals = Appeal.where(uuid: ["3788816f-5de9-4727-b5ea-09c0868e2435", "22800998-59e0-4a8e-9477-bf5772e1526d", "3f9a7fc0-82a1-462d-934f-ab4c6fa92f14", "98c6227d-2ea5-4fe3-b8e3-b76fb9d462f8", "4fba02a7-760a-4f49-8242-291d3bd2b449", "164adfeb-b26d-4274-8331-12decce58051", "8a92e9c5-56e0-4515-aece-b2fb0b6d0433", "c3bb1ec9-77d2-45c7-b62a-424d2a304817"])
# Let's check out who these cases are tied to
judge_ids = appeals.map(&:hearings).flatten.map(&:judge_id).uniq
judge_ids.map { | id| JudgeTeam.for_judge(User.find(id))&.accepts_priority_pushed_cases? }
=> [nil, nil, false]
# These are all cases tied to judges that either do not have a judge team or do not have a judge team with priority push on!

# How about our legacy appeals?
VACOLS::CaseDocket.connection.exec_query(VACOLS::CaseDocket::SELECT_PRIORITY_APPEALS).to_hash
=> [{"bfkey"=>"3429072462", "bfdloout"=>2020-08-04 00:00:00 UTC, "vlj"=>"15"},
    {"bfkey"=>"2181906143", "bfdloout"=>2020-08-04 00:00:00 UTC, "vlj"=>"5"}]
JudgeTeam.where(name: VACOLS::Staff.where(sattyid: "15").pluck(:sdomainid))
=> []
# The case is tied to a judge that does not have a judge team
JudgeTeam.where(name: VACOLS::Staff.where(sattyid: "5").pluck(:sdomainid))
=> [#<JudgeTeam:0x00007fa3ebcfb2c8
  id: 24,
  accepts_priority_pushed_cases: false,
  ... >]
# The case is tied to a judge that does not have a judge team that accepts pushed cases

# Ensure the already distributed case was not sent to a judge
LegacyAppeal.find_by(vacols_id: failed_distribution_case_id).location_code
=> "CASEFLOW"
  1. Reseed and run the job standalone
make reset
VACOLS::Staff.find_by(sdomainid: "BVARERDMAN").update!(svlj: "J")
CacheManager.new.clear(:vacols)
RequestStore[:current_user] = User.system_user
Dir[Rails.root.join("db/seeds/*.rb")].sort.each { |f| require f }
Seeds::PriorityDistributions.new.seed!
failed_distribution_case_id = DistributedCase.last.case_id
job = PushPriorityAppealsToJudgesJob.new
ActiveRecord::Base.multi_transaction do
  job.perform_now
rescue => e
  Rails.logger.error(e.message)
  Rails.logger.error(e.backtrace.join("\n"))
end
puts job.slack_report.join("\n")

@hschallhorn hschallhorn self-assigned this Jul 29, 2020
@hschallhorn hschallhorn changed the base branch from master to hschallhorn/14604-job-report July 29, 2020 22:32
@codeclimate
Copy link

codeclimate bot commented Jul 29, 2020

The SHA range provided is invalid

View more on Code Climate.

@va-bot
Copy link
Collaborator

va-bot commented Jul 30, 2020

1 Warning
⚠️ This is a Big PR. Try to break this down if possible. Stacked pull requests encourage more detailed and thorough code reviews

Generated by 🚫 Danger

@hschallhorn hschallhorn changed the base branch from hschallhorn/14604-job-report to master August 11, 2020 14:58
@hschallhorn hschallhorn changed the base branch from master to hschallhorn/14604-job-report August 11, 2020 16:23
@hschallhorn hschallhorn changed the base branch from hschallhorn/14604-job-report to master August 11, 2020 16:23
@hschallhorn hschallhorn changed the base branch from master to hschallhorn/14604-job-report August 18, 2020 16:49
Copy link
Contributor

@lomky lomky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Back to you with some questions and suggestions!

spec/factories/appeal.rb Show resolved Hide resolved
spec/factories/appeal.rb Show resolved Hide resolved
@@ -0,0 +1,384 @@
# frozen_string_literal: true

# create distribution seeds
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Since we're not invoking this by default, what do you think about adding a make command to do this? something like make seed-distribution so we don't lose track of this

db/seeds/priority_distributions.rb Outdated Show resolved Hide resolved
db/seeds/priority_distributions.rb Outdated Show resolved Hide resolved
db/seeds/priority_distributions.rb Outdated Show resolved Hide resolved
db/seeds/priority_distributions.rb Show resolved Hide resolved
db/seeds/priority_distributions.rb Show resolved Hide resolved
spec/factories/vacols/case.rb Show resolved Hide resolved
db/seeds/priority_distributions.rb Outdated Show resolved Hide resolved
trait :ready_for_distribution do
with_post_intake_tasks
after(:create) do |appeal, _evaluator|
distribution_tasks = appeal.tasks.select { |task| task.is_a?(DistributionTask) }
distribution_tasks.each(&:ready_for_distribution!)
(distribution_tasks.flat_map(&:descendants) - distribution_tasks).each(&:completed!)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😲 😍 🎉

Comment on lines +3 to +8
# Create distribution seeds to test priority push case distribution job.
# Mocks previously distributed cases for judges. Sets up cases ready to be distributed.
# Invoke with:
# RequestStore[:current_user] = User.system_user
# Dir[Rails.root.join("db/seeds/*.rb")].sort.each { |f| require f }
# Seeds::PriorityDistributions.new.seed!
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍳 🙆

Copy link
Contributor

@lomky lomky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GTG once the specs pass! 🌱 😻

@hschallhorn hschallhorn merged commit 2b1d257 into hschallhorn/14604-job-report Sep 4, 2020
@hschallhorn hschallhorn deleted the hschallhorn/14604-testing branch September 4, 2020 14:42
hschallhorn added a commit that referenced this pull request Sep 4, 2020
* Add reporting

* Update reporting format to be a string

* Remove redundant VACOLS::CaseDocket::

* Pretty colors

* Add priority target and previous distributions to the report

* Ordering and formatting

* Fix report

* Fix report

* Fix tests

* Code climate

* [Part 4] Create non default distribution seed data (#14802)

* Better handling of dispatch judge and atty

* Fix factories to be able to be called after resetting sequences

* Add distribution seed file

* Add a case that will error

* Integrate bug fix

* Fix job

* Fixes

* Fix report

* Fix tied to judge trait

* User random keys

* Integrate changes from fix

* Fix tests

* Code climate

* Feedback

* Update priority_distributions.rb
hschallhorn added a commit that referenced this pull request Sep 4, 2020
* WIP with tests on priority push job

* words words words

* Add test to track number converge over time

* Distribute all cases tied to judges

* Add test for pulling all judges with ready priority cases

* Fix merge

* Fix merge

* Tests and renaming

* only distribute tied appeals to eligible judges

* Create distributions for all judges, even if they have no cases tied to them

* Fix job

* Code climate

* Update scope name

* Feedbackgit stgit stgit st!

* Better comments

* Fix test

* [PART 3] Add report on priority push job completion (#14761)

* Add reporting

* Update reporting format to be a string

* Remove redundant VACOLS::CaseDocket::

* Pretty colors

* Add priority target and previous distributions to the report

* Ordering and formatting

* Fix report

* Fix report

* Fix tests

* Code climate

* [Part 4] Create non default distribution seed data (#14802)

* Better handling of dispatch judge and atty

* Fix factories to be able to be called after resetting sequences

* Add distribution seed file

* Add a case that will error

* Integrate bug fix

* Fix job

* Fixes

* Fix report

* Fix tied to judge trait

* User random keys

* Integrate changes from fix

* Fix tests

* Code climate

* Feedback

* Update priority_distributions.rb
hschallhorn added a commit that referenced this pull request Sep 15, 2020
* Priority distributions wip

* Fix tests

* make docs!

* Code climate

* Allow unlimited priority legacy appeals to be distributed

* Fix bug on wrong number of hearing cases distributed

* Create priority only distributions

* Suggestions

* Update to priority_push

* Update to priority_push

* Fix schema

* Code Climate

* Updates

* Updates
 to priority push

* fix specs

* Allow unlimited priority legacy appeals to be distributed

* Fix bug on wrong number of hearing cases distributed

* Create priority only distributions

* Code Climate

* Updates

* Updates
 to priority push

* fix specs

* Rename ama distribution

* Add Yoom's changes

* Fix merge

* Code climate fixes

* Return the number of appeals acutally distributed and fix cc

* Code climate

* Feedback!

* Fix tests

* feedback

* Fix tests

* Test fix

* Fix tests

* [PART 2] Job to push priority cases to judges (#14715)

* WIP with tests on priority push job

* words words words

* Add test to track number converge over time

* Distribute all cases tied to judges

* Add test for pulling all judges with ready priority cases

* Fix merge

* Fix merge

* Tests and renaming

* only distribute tied appeals to eligible judges

* Create distributions for all judges, even if they have no cases tied to them

* Fix job

* Code climate

* Update scope name

* Feedbackgit stgit stgit st!

* Better comments

* Fix test

* [PART 3] Add report on priority push job completion (#14761)

* Add reporting

* Update reporting format to be a string

* Remove redundant VACOLS::CaseDocket::

* Pretty colors

* Add priority target and previous distributions to the report

* Ordering and formatting

* Fix report

* Fix report

* Fix tests

* Code climate

* [Part 4] Create non default distribution seed data (#14802)

* Better handling of dispatch judge and atty

* Fix factories to be able to be called after resetting sequences

* Add distribution seed file

* Add a case that will error

* Integrate bug fix

* Fix job

* Fixes

* Fix report

* Fix tied to judge trait

* User random keys

* Integrate changes from fix

* Fix tests

* Code climate

* Feedback

* Update priority_distributions.rb

* Fix merge

* cc

* Tests

* cc

* Fix tests

* Nocov on seeds that do not run by default
sahalliburton added a commit that referenced this pull request Sep 16, 2020
* add diagnostic code for 7632 (#15144)

Resolves the issue described here: https://dsva.slack.com/archives/CHX8FMP28/p1599047514117800

### Description

Add diagnostic code for 7632

Found diagnostic code description by doing the following:

```
> codes = BGSService.new.client.share_standard_data.find_diagnostic_codes
> codes[:return][:types].select { |c| c[:code] == '7632' }
```

* PRs alert when we touch a Service integration (#15133)

* PRs alert when we touch a Service integration

* Better wording!

Co-authored-by: Tomas Apodaca <[email protected]>

Co-authored-by: Tomas Apodaca <[email protected]>
Co-authored-by: va-bot <[email protected]>

* Drops the unused contentions from the Legacy Appeal (#15146)

Connects #14717

### Description
Drops the unused contentions from the Legacy Appeal

### Acceptance Criteria
- [ ] Code compiles correctly
- [ ] Tests pass

### Testing Plan
1. n/a

### Database Changes
*Only for Schema Changes*

* [ ] ~Timestamps (created_at, updated_at) for new tables~
* [ ] ~Column comments updated~
* [x] Verify that `migrate:rollback` works as desired ([`change` supported functions](https://edgeguides.rubyonrails.org/active_record_migrations.html#using-the-change-method))
* [ ] ~Query profiling performed (eyeball Rails log, check bullet and fasterer output)~
* [ ] ~Appropriate indexes added (especially for foreign keys, polymorphic columns, unique constraints, and Rails scopes)~
* [x] DB schema docs updated with `make docs` (after running `make migrate`)
* [x] #appeals-schema notified with summary and link to this PR

* Prioritize AOD and CAVC cases during Bulk Assignment (#15125)

Resolves #14781

### Description
Prioritize associated cases before bulk assigning tasks.

### Acceptance Criteria
- [ ] Code compiles correctly

Cases are prioritized in the following order for Bulk Assign: 
1. CAVC AOD Cases
2. AOD Cases
3. CAVC Cases
4. Regular appeal stream

### Testing Plan
(See #14501, #14510, and #14523 for reference.)
1. Make BVATWARNER an admin so that the bulk "Assign tasks" button appears
   ```ruby
   OrganizationsUser.make_user_admin(User.find_by(css_id: "BVATWARNER"), HearingsManagement.singleton)
   ```
1. Sign in as BVATWARNER and go to `/organizations/hearings-management`
1. Make some cases AOD or CAVC
   * grant AOD Motion per case -- do [this](#14085 (comment)) as AOD_USER (in an incognito window to avoid logging out BVATWARNER)
   * create a CAVC case (is there a better way?):
      ```ruby
      corres=FactoryBot.create(:correspondent, stafkey:"777");
      folder=FactoryBot.create(:folder, ticknum: "000100777");
      vcase= FactoryBot.create(:case, :type_cavc_remand, :assigned, bfkey: "77777", user: User.find_by(css_id: "BVATWARNER"), correspondent: corres, folder: folder);
      appeal=FactoryBot.create(:legacy_appeal, vacols_case: vcase);

      ht=FactoryBot.create(:hearing_task, appeal: appeal, assigned_by: nil);
      ahdt=FactoryBot.create(:assign_hearing_disposition_task, parent: ht, assigned_by: nil);
      FactoryBot.create(:no_show_hearing_task, parent: ahdt, assigned_by: nil);

      UpdateCachedAppealsAttributesJob.perform_now
      ```
   * create AOD CAVC case (by combining the procedures above)
1. As BVATWARNER, refresh the `/organizations/hearings-management` page to see AOD and CAVC cases
1. Perform bulk "Assign tasks" with "No Show Hearing Task" type and ensure priority cases are assigned first (see the "Assigned" tab)

* Properly check feature toggle for backlog bust (#15151)

Feature toggles 🙄 

- [ ]  tests pass

* Removes ignore columns from LegacyAppeal Model (#15147)

Resolves #14714 

### Description
Columns are dropped in #15146 so this PR cleans up the ignore columns

### Acceptance Criteria
- [ ] Code compiles correctly
- [ ] Tests Pass

* Team management page updates (#14926)

* Team management page updates

* Order orgs by name

* Remove url for non vsos

* Remove url heading

* Pull changes up

* Fix merge

* Show dvc full name

* Missing admin path!

* Allow DVCs to view the team management page (#14928)

* Allow but restrict team management page for DVCs

* Fix logic to handle dvcs on the bva team

* Testing

* remove focus

* Feature tests

* tests

* Code climate maybe

* Method naming

* Code climate

* Fix tests

* check dvc team permissions

* Fix todo

* Fix todos

* fix tests

* Fix tests

* Allow DVCs to toggle accepts_priority_pushed_cases from the front end (#14932)

* Allow DVCs to toggle priority push cases for judge teams

* Add test for bva admin

* Wait for toggle to be checked

* Better matcher

* Alignment!

* Code climate?

* Code climate

* Fix todos

* Fix tests

* Fix tests

* update hearing room labels (#15149)

Resolves #15143

### Description
Updates the hearing room labels with room number, replacing the temporary names we'd been using.

* should be method on Raven (#15174)

From production:

```
NoMethodError (undefined method `capture_exception' for #<LegacyHearing...>)
app/models/legacy_hearing.rb:318:in `rescue in vacols_hearing_exists?'
```

### Description

Use `Raven.capture_exception`

* Updates to EditContentionTitle (#15152)

Connects #14994

### Description
This rewrites `EditContentionTitle` as a functional component, and adds Jest tests and Storybook stories. This rewrite also fixes the issue whereby state would not get updated even if the issue prop did, which meant that the initial value displayed in the textarea would sometimes not match the issue with which it was associated (if another issue had been removed).

### Acceptance Criteria
- [ ] Code compiles correctly
- [ ] Value in textarea is set correctly when opened, even if other issues in list have been removed

### Testing Plan
1. Add `binding.pry` to line 1594 of spec/feature/intake/higher_level_review/edit_spec.rb
2. ```bundle exec rspec spec/feature/intake/higher_level_review/edit_spec.rb:1594```
3. Add another issue (either one, and say "Yes" to request extension)
4. Click "Edit Contention Title" on the new issue you added
5. Verify the value in `textarea` is correct
6. Remove one of the two (noneditable) apportionment ratings up above
7. Edit the new issue again
  - on master the `textarea` will have value of the other editable issue ("Right Knee")
  - with this fix, that should show the correct value

* Bump dompurify from 2.0.3 to 2.0.7 in /client (#15177)

Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.0.3 to 2.0.7.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](cure53/DOMPurify@2.0.3...2.0.7)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump node-sass from 4.13.0 to 4.13.1 in /client (#15176)

Bumps [node-sass](https://github.com/sass/node-sass) from 4.13.0 to 4.13.1.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](sass/node-sass@v4.13.0...v4.13.1)

Signed-off-by: dependabot[bot] <[email protected]>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alisa Nguyen <[email protected]>

* Bug | Fix code for cancelling an EP in BGS (#15093)

Connects #14912
### Description
When cancelling a claim, the ruby-bgs method has hardcoded values for the payee_code and benefit_type arguments.  This is causing an error when cancelling a claim if the values for the claim don't match the hardcoded values.

### Acceptance Criteria
- [x] Update ruby-bgs repo to accept arguments for these fields, and set the current data as the default value
  - [x] payee_code: "00"
  - [x] benefit_type: "1"
- [x] Update `BGSService.cancel_end_product to accept these arguments`
- [x] Update the EndProductEstablishment model to send these arguments based on the EPEs data in the `cancel!` method.
- [x] Add a test that we're sending these arguments to BGSService

* Add comment to special_issue_lists table (#15178)

### Description
Add comment to `special_issue_lists` table to explain why we have Special Issues boolean columns in both the `legacy_appeals` and `special_issue_lists` tables.

### Acceptance Criteria
- [x] Code compiles correctly

### Database Changes
*Only for Schema Changes*

* [x] Column comments updated
* [x] Verify that `migrate:rollback` works as desired ([`change` supported functions](https://edgeguides.rubyonrails.org/active_record_migrations.html#using-the-change-method))
* [x] DB schema docs updated with `make docs` (after running `make migrate`)
* [x] #appeals-schema notified with summary and link to this PR

Not needed:
* [ ] Timestamps (created_at, updated_at) for new tables
* [ ] Query profiling performed (eyeball Rails log, check bullet and fasterer output)
* [ ] Appropriate indexes added (especially for foreign keys, polymorphic columns, unique constraints, and Rails scopes)

* Update Appeal type label on claim details page (#15153)

Resolves #15020

### Description
Update appeal type label in COPY.json 

### Acceptance Criteria
- [ ] Code compiles correctly
- [ ] Type label for appeal type says 'Appeal Stream Type' on Claim Details page 

### Testing Plan
1. Choose user with edit hearing details permissions
2. Click Mail Intake tab
3. Click a hearing day 
4. Click the ID link underneath a veteran's name 
5. Verify that the case title details header now includes 'Appeal Stream Type'

### User Facing Changes
 - [ ] Screenshots of UI changes added to PR & Original Issue

 BEFORE|AFTER
 ---|---
<img width="1069" alt="Screen Shot 2020-09-02 at 3 52 00 PM" src="https://user-images.githubusercontent.com/68879427/92046341-2a7c6100-ed37-11ea-861a-8a1c96721806.png"> | <img width="1064" alt="Screen Shot 2020-09-02 at 3 53 51 PM" src="https://user-images.githubusercontent.com/68879427/92046355-2f411500-ed37-11ea-8cd3-5ce934290e6c.png">


### Storybook Story
*For Frontend (Presentationa) Components*
* [ ] Add a [Storybook](https://github.com/department-of-veterans-affairs/caseflow/wiki/Documenting-React-Components-with-Storybook) file alongside the component file (e.g. create `MyComponent.stories.js` alongside `MyComponent.jsx`)
* [ ] Give it a title that reflects the component's location within the overall Caseflow hierarchy 
* [ ] Write a separate story (within the same file) for each discrete variation of the component

* Business Line | Update Copy For Completed Tab (#15116)

* copy text updated

* copy text showing

* added spacing to copy

* circleci fixes

* lint fixes

* lint fix

* spec test and updated copy text

* fixed spec spacing

* more spec spacing changes

* requested changes

* delete dump file

* Missing Ratings | Add current rating profile endpoint to Caseflow (#15172)

Connects #14839 

### Description
This PR integrates the new current rating endpoint from ruby-bgs into Caseflow, and adds a new model for working with data returned by this endpoint.

### Acceptance Criteria
- [x] Add find_current_rating_profile_by_ptcpnt_id to BGSService
- [x] Add a CurrentRating model which can fetch the (single) current rating for a veteran
  - [x] The same "self" classes in the Rating model aren't needed, but the same instance methods are needed
- [x] Add to BGSService fakes

### Testing Plan
- New spec added: `current_rating_spec.rb`
- Testing locally
  - The fake rating store has a list of available participant IDs: `BGSService.rating_store.all_keys`
  - Use `CurrentRating.fetch_by_participant_id` to fetch an instance and play around with it
  - Check the behavior for a non-existent participant ID
- Testing in unmodified UAT (to confirm everything is safe) and prod (to see representative data)
  - Paste the contents of `current_rating.rb` into Rails console
  - Inside a `class ExternalApi::BGSService`/`end` block:
    - Paste the contents of the `def find_current_rating_profile_by_ptcpnt_id` definition
  - Use `CurrentRating.fetch_by_participant_id` with a bunch of `Veteran.participant_id`s and play around. The new test code can provide some inspiration.
  - Check the behavior for a non-existent participant ID

### Code Documentation Updates
- [x] Add or update code comments at the top of the class, module, and/or component.

* add migration inheritance requirement (#15015)

### Description
Adds requirement to the Database Changes checklist in the pull request template; that migrations inherit from the safe [`Caseflow::Migration` class](https://github.com/department-of-veterans-affairs/caseflow/blob/master/lib/caseflow/migration.rb) rather than the default `ActiveRecord::Migration` class.

* Bump http-proxy from 1.17.0 to 1.18.1 in /client (#15181)

Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.17.0 to 1.18.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md">http-proxy's changelog</a>.</em></p>
<blockquote>
<h2><a href="https://github.com/http-party/node-http-proxy/compare/1.18.0...v1.18.1">v1.18.1</a> - 2020-05-17</h2>
<h3>Merged</h3>
<ul>
<li>Skip sending the proxyReq event when the expect header is present <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1447"><code>[#1447](https://github.com/http-party/node-http-proxy/issues/1447)</code></a></li>
<li>Remove node6 support, add node12 to build <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1397"><code>[#1397](https://github.com/http-party/node-http-proxy/issues/1397)</code></a></li>
</ul>
<h2><a href="https://github.com/http-party/node-http-proxy/compare/1.17.0...1.18.0">1.18.0</a> - 2019-09-18</h2>
<h3>Merged</h3>
<ul>
<li>Added in auto-changelog module set to keepachangelog format <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1373"><code>[#1373](https://github.com/http-party/node-http-proxy/issues/1373)</code></a></li>
<li>fix 'Modify Response' readme section to avoid unnecessary array copying <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1300"><code>[#1300](https://github.com/http-party/node-http-proxy/issues/1300)</code></a></li>
<li>Fix incorrect target name for reverse proxy example <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1135"><code>[#1135](https://github.com/http-party/node-http-proxy/issues/1135)</code></a></li>
<li>Fix modify response middleware example <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1139"><code>[#1139](https://github.com/http-party/node-http-proxy/issues/1139)</code></a></li>
<li>[dist] Update dependency async to v3 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1359"><code>[#1359](https://github.com/http-party/node-http-proxy/issues/1359)</code></a></li>
<li>Fix path to local http-proxy in examples. <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1072"><code>[#1072](https://github.com/http-party/node-http-proxy/issues/1072)</code></a></li>
<li>fix reverse-proxy example require path <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1067"><code>[#1067](https://github.com/http-party/node-http-proxy/issues/1067)</code></a></li>
<li>Update README.md <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/970"><code>[#970](https://github.com/http-party/node-http-proxy/issues/970)</code></a></li>
<li>[dist] Update dependency request to ~2.88.0 [SECURITY] <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1357"><code>[#1357](https://github.com/http-party/node-http-proxy/issues/1357)</code></a></li>
<li>[dist] Update dependency eventemitter3 to v4 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1365"><code>[#1365](https://github.com/http-party/node-http-proxy/issues/1365)</code></a></li>
<li>[dist] Update dependency colors to v1 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1360"><code>[#1360](https://github.com/http-party/node-http-proxy/issues/1360)</code></a></li>
<li>[dist] Update all non-major dependencies <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1356"><code>[#1356](https://github.com/http-party/node-http-proxy/issues/1356)</code></a></li>
<li>[dist] Update dependency agentkeepalive to v4 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1358"><code>[#1358](https://github.com/http-party/node-http-proxy/issues/1358)</code></a></li>
<li>[dist] Update dependency nyc to v14 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1367"><code>[#1367](https://github.com/http-party/node-http-proxy/issues/1367)</code></a></li>
<li>[dist] Update dependency concat-stream to v2 <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1363"><code>[#1363](https://github.com/http-party/node-http-proxy/issues/1363)</code></a></li>
<li>x-forwarded-host overwrite for mutli level proxies <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1267"><code>[#1267](https://github.com/http-party/node-http-proxy/issues/1267)</code></a></li>
<li>[refactor doc] Complete rename to http-party org. <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1362"><code>[#1362](https://github.com/http-party/node-http-proxy/issues/1362)</code></a></li>
<li>Highlight correct lines for createProxyServer <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1117"><code>[#1117](https://github.com/http-party/node-http-proxy/issues/1117)</code></a></li>
<li>Fix docs for rewrite options - 201 also handled <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1147"><code>[#1147](https://github.com/http-party/node-http-proxy/issues/1147)</code></a></li>
<li>Update .nyc_output <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1339"><code>[#1339](https://github.com/http-party/node-http-proxy/issues/1339)</code></a></li>
<li>Configure Renovate <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1355"><code>[#1355](https://github.com/http-party/node-http-proxy/issues/1355)</code></a></li>
<li>[examples] Restream body before proxying, support for Content-Type of application/x-www-form-urlencoded <a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/pull/1264"><code>[#1264](https://github.com/http-party/node-http-proxy/issues/1264)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[dist] New test fixtures. <a href="https://github.com/http-party/node-http-proxy/commit/7e4a0e511bc30c059216860153301de2cdd1e97f"><code>7e4a0e5</code></a></li>
<li>[dist] End of an era. <a href="https://github.com/http-party/node-http-proxy/commit/a9b09cce43f072db99fb5170030a05536177ccb7"><code>a9b09cc</code></a></li>
<li>[dist] Version bump. 1.18.0 <a href="https://github.com/http-party/node-http-proxy/commit/9bbe486c5efcc356fb4d189ef38eee275bbde345"><code>9bbe486</code></a></li>
<li>[fix] Latest versions. <a href="https://github.com/http-party/node-http-proxy/commit/59c4403e9dc15ab9b19ee2a3f4aecbfc6c3d94c4"><code>59c4403</code></a></li>
<li>[fix test] Update tests. <a href="https://github.com/http-party/node-http-proxy/commit/dd1d08b6319d1def729554446a5b0176978a8dad"><code>dd1d08b</code></a></li>
<li>[dist] Update dependency ws to v3 [SECURITY] <a href="https://github.com/http-party/node-http-proxy/commit/b00911c93740a00c5cfbacbb91565cb6912ed255"><code>b00911c</code></a></li>
<li>[dist] .gitattributes all the things. <a href="https://github.com/http-party/node-http-proxy/commit/fc93520d741ec80be8ae31ca005f3e9c199e330e"><code>fc93520</code></a></li>
<li>[dist] Regenerate package-lock.json. <a href="https://github.com/http-party/node-http-proxy/commit/16d4f8a95162b2e2e4ee6657c500f1208c044b2d"><code>16d4f8a</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/http-party/node-http-proxy/commit/9b96cd725127a024dabebec6c7ea8c807272223d"><code>9b96cd7</code></a> 1.18.1</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/335aeeba2f0c286dc89c402eeb76af47834c89a3"><code>335aeeb</code></a> Skip sending the proxyReq event when the expect header is present (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1447">#1447</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/dba39668ba4c9ad461316e834b2d64b77e1ca88e"><code>dba3966</code></a> Remove node6 support, add node12 to build (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1397">#1397</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/9bbe486c5efcc356fb4d189ef38eee275bbde345"><code>9bbe486</code></a> [dist] Version bump. 1.18.0</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/6e4bef4d1cd96e7a284717941e0fc274acbd3712"><code>6e4bef4</code></a> Added in auto-changelog module set to keepachangelog format (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1373">#1373</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/d05624167ce75e860770c13afeacec2ce0f67add"><code>d056241</code></a> fix 'Modify Response' readme section to avoid unnecessary array copying (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1300">#1300</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/244303b994525684e1ec8dff2e8055f89b62b1ee"><code>244303b</code></a> Fix incorrect target name for reverse proxy example (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1135">#1135</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/b4028ba78bc4616e6969e0e66b0fe4634849b68b"><code>b4028ba</code></a> Fix modify response middleware example (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1139">#1139</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/77a98159d2da0f20a03e2819c79662f36069f234"><code>77a9815</code></a> [dist] Update dependency async to v3 (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1359">#1359</a>)</li>
<li><a href="https://github.com/http-party/node-http-proxy/commit/c662f9ebcd8d623db374dbc7bef231b2b0af0c3a"><code>c662f9e</code></a> Fix path to local http-proxy in examples. (<a href="https://github-redirect.dependabot.com/http-party/node-http-proxy/issues/1072">#1072</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/http-party/node-http-proxy/compare/1.17.0...1.18.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=http-proxy&package-manager=npm_and_yarn&previous-version=1.17.0&new-version=1.18.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/department-of-veterans-affairs/caseflow/network/alerts).

</details>

* Capitalize Veteran in add claimant modal (#15139)

* Tech spec for recording hearing request type (#15045)

Resolves #14941 

### Description
This tech spec describes the back end changes necessary to "convert" requests for Travel Board hearings in VACOLS into requests for video or virtual hearings in Caseflow.

* Display hearing type on case details (#15145)

Resolves #15021

### Description
- create a new method `readable_hearing_request_type` on `Appeal` and `LegacyAppeal` which returns `Central`, `Video`, `Travel` or `nil` and serialize the method
- display the type on case details page depending on the docket type
- create a basic story for `CaseTitleDetails` component
- write unit tests in `appeal_spec` and feature tests in `case_details_spec`

### Acceptance Criteria
- [x] the hearing type displays for ama and legacy appeals in the hearing docket
- [x] update (or create) a storybook component for the CaseTitleDetails component
- [x] update (or create) a feature test for the correct values in the new section

### User Facing Changes
 - [x] Screenshots of UI changes added to PR & Original Issue

 BEFORE|AFTER
 ---|---
<img width="626" alt="Screen Shot 2020-09-03 at 7 37 25 PM" src="https://user-images.githubusercontent.com/20735998/92183642-02672d80-ee1d-11ea-923c-a9a80c09fbd7.png">| <img width="662" alt="Screen Shot 2020-09-03 at 7 36 37 PM" src="https://user-images.githubusercontent.com/20735998/92183641-02672d80-ee1d-11ea-937f-6f3ff3ced9e5.png">

### Storybook Story
*For Frontend (Presentationa) Components*
* [x] Add a [Storybook](https://github.com/department-of-veterans-affairs/caseflow/wiki/Documenting-React-Components-with-Storybook) file alongside the component file (e.g. create `MyComponent.stories.js` alongside `MyComponent.jsx`)
* [x] Give it a title that reflects the component's location within the overall Caseflow hierarchy 
* [x] Write a separate story (within the same file) for each discrete variation of the component

### Testing Plan
- Login as `BVASYELLOW` or `BVAAABSHIRE`
- Go to `/queue` and pick any cases to look at the case details page

* Show all attorneys in MTV dropdown for judges with no team (#15185)

* Show all attorneys in MTV dropdown

* Only show all attorneys for judges with no team

* Attorney Fees | Add Clearable prop to searchable dropdown (#15165)

* isClearable prop switched to true

* jest tests updated

* updated defined prop

* corrected jest test

* set isClearable prop to only be true on AddClaimantModal

* updated jest test

* Write hearing type to VACOLS when converting legacy hearings (#15184)

Resolves #15065

### Description
Support for writing request type (or HEARSCHED.HEARING_TYPE) to VACOLS when converting legacy hearings to and from virtual.

### Database Changes

* [x] Column comments updated
* [x] Have your migration classes inherit from `Caseflow::Migration`, especially when adding indexes (use `add_safe_index`)
* [x] Verify that `migrate:rollback` works as desired ([`change` supported functions](https://edgeguides.rubyonrails.org/active_record_migrations.html#using-the-change-method))
* [x] Query profiling performed (eyeball Rails log, check bullet and fasterer output)
* [x] Appropriate indexes added (especially for foreign keys, polymorphic columns, unique constraints, and Rails scopes)
* [x] DB schema docs updated with `make docs` (after running `make migrate`)
* [x] #appeals-schema notified with summary and link to this PR

* Fix contested typo in Issue Category Dropdown (#15182)

* Fix contested typo in issue categories

* Fix contested typo in issue categories

* Remove focus true

* Ensure vacols location isn't set incorrectly when user requests disposition change (#15082)

Connects #14911

### Description
- change the flow in `create_change_hearing_disposition_task` of `ScheduleHearingTask` so that it does not trigger a location change for legacy appeals
- write tests

### Acceptance Criteria
- [x]  Refactor this flow so that the appeal's VACOLS location isn't changed from CASEFLOW if we intend to add new open tasks.

### Testing Plan
1. Run test file `spec/tasks/schedule_hearing_task_spec.rb`

* Add Sentry ID from Raven to data integrity job Slack message (#15192)

### Description
Inspired by [this](https://dsva.slack.com/archives/CN3FQR4A1/p1599647433017300) exceptionally uninformative Slack message about some error with LegacyAppealsWithNoVacolsCase.

Modeled after #14536.

* Updated frontend jest tests

* upgrade rails to 5.2.4.4 (#15199)

Resolves this alert:

```
Name: actionview
Version: 5.2.4.3
Advisory: CVE-2020-15169
Criticality: Unknown
URL: https://groups.google.com/g/rubyonrails-security/c/b-C9kSGXYrc
Title: Potential XSS vulnerability in Action View
Solution: upgrade to >= 5.2.4.4, ~> 5.2.4, >= 6.0.3.3
```

* Create "Clerk of the Board" org (#15191)

Connects #15135 

### Description
This creates the Clerk of the Board organization (`ClerkOfTheBoard` model, inheriting from `Organization`)

### Acceptance Criteria
- [x] Code compiles correctly
- [x] `ClerkOfTheBoard.singleton` creates org if it doesn't already exists, otherwise returns existing
- [ ] Members have access to create mail tasks

* Ensure props change when navigating to a new page from the nav bar (#15188)

Resolves #15014

### Description
The navigation bar is a [pure component](https://reactjs.org/docs/react-api.html#reactpurecomponent), which will not update if it's props have not changed. 

> React.PureComponent’s shouldComponentUpdate() only shallowly compares the objects. If these contain complex data structures, it may produce false-negatives for deeper differences. Only extend PureComponent when you expect to have simple props and state, or use forceUpdate() when you know deep data structures have changed. Or, consider using immutable objects to facilitate fast comparisons of nested data.
> Furthermore, React.PureComponent’s shouldComponentUpdate() skips prop updates for the whole component subtree. Make sure all the children components are also “pure”.

This causes it's child QueueLoadingScreen and LoadingDataDisplay to not mount again and grab new data when navigating from a judge's assign queue to their normal queue when navigating via the CaseflowNavigationBar.

This change overrides the shallow comparison of props and explicitly checks to see if we are navigating to a new URL.

### Acceptance Criteria
- [x] Judges can navigate from their assign queue to their normal queue via the navigation bar without getting a white screen of death

### Testing Plan
1. Log in as BVAAABSHIRE
1. Navigate to http://localhost:3000/queue/BVAAABSHIRE/assign
1. Click "Caseflow Queue" at the top of the page
1. Notice page now shows loading icon and queue loads correctly
1. Click "Caseflow Queue" at the top of the page
1. Notice no loading icon

* Add integrations UAT testing to PR template (#15168)

Action from the [pay grade validation post-mortem](https://github.com/department-of-veterans-affairs/appeals-deployment/blob/master/docs/post-mortems/2020-09-01-bgs-pay-grade-outage.md)

### Description
Updated PR template to include UAT testing for integrations and other guidance.

* Add changed hearing request type column to legacy hearings (#15189)

Resolves #14898

### Description

- Add `changed_request_type` field
- Update logic in `sanitized_hearing_request_type` to consider `changed_request_type`
- Update places in code where `sanitized_hearing_request_type` is used or should be used
- Add tests for validation and `sanitized_hearing_request_type`

### Acceptance Criteria

- [x] A video or virtual hearing request type can be recorded for an individual hearing


### Database Changes
*Only for Schema Changes*

* [x] Timestamps (created_at, updated_at) for new tables
* [x] Column comments updated
* [x] Have your migration classes inherit from `Caseflow::Migration`, especially when adding indexes (use `add_safe_index`)
* [x] Verify that `migrate:rollback` works as desired ([`change` supported functions](https://edgeguides.rubyonrails.org/active_record_migrations.html#using-the-change-method))
* [ ] Query profiling performed (eyeball Rails log, check bullet and fasterer output)
* [x] Appropriate indexes added (especially for foreign keys, polymorphic columns, unique constraints, and Rails scopes)
* [x] DB schema docs updated with `make docs` (after running `make migrate`)
* [ ] #appeals-schema notified with summary and link to this PR

* remove unused associated_hearing_is_video method (#15204)

### Description
The `associated_hearing_is_video` validation was removed in e8164bc but the method lived on, until now.

* update reducer to merge existing loading state to fix double request issue (#15198)

https://dsva.slack.com/archives/C3EAF3Q15/p1599684953173300

### Description

Resolves an issue where the loading state was being overwritten in the Redux state on case details

<img width="544" alt="Screen Shot 2020-09-09 at 5 14 43 PM" src="https://user-images.githubusercontent.com/1298274/92774224-41d8d100-f36b-11ea-997a-9fdab7eab036.png">

* Removed marked complete task action (#15211)

Resolves #14869 

### Description
Added new action deletion method to remove "Mark Task Complete".

### Acceptance Criteria
- [ ] BvaDispatchTasks cannot be marked complete by anyone through the caseflow task action dropdown

### Testing Plan
1. Sign in as BVADispatch user White.
2. Navigate to your queue.
3. Select a case.
4. Confirm the action is not there.
5. Sign in as BVADispatch admin Black.
6. Navigate to the team assigned queue.
7. Repeat steps 3. and 4.

* Use BGS representative in all Hearings Jobs (#15083)

Resolves #14753

### Description

Modifies all hearings jobs to use the BGS attorney instead of VACOLS, by modifying the conditional that is used in this method:

https://github.com/department-of-veterans-affairs/caseflow/blob/3f79bdf200875a11ca6de1da71afc5bbf274e63f/app/models/legacy_appeal_representative.rb#L27-L35

* Fix display of non-vet claimants on non-comp DR tasks (#15235)

Connects #11301 

### Description
This PR fixes a rare bug in displaying non-veteran claimants' relationship on decision review task pages. It occurs only when the claimant's BGS record has a `nil` relationship. The task mentioned in the original ticket, 248934, is one such instance in prod.

### Acceptance Criteria
- [x] Relationship type shows up on non-compensation queue task page

### Testing Plan
- `DecisionReviewTask.find(248934).ui_hash[:claimant]` is the expression in question
  - Running it on original code produces `{:name=>"REDACTED", :relationship=>"claimant"}`
  - Patch `WorkQueue::DecisionReviewTaskSerializer.claimant_relationship` with the diff of this PR
  - Running it on patched code produces `{:name=>"REDACTED", :relationship=>"Dependent"}`
- Alternatively, if we can find an instance of this missing data in UAT, deploying this branch to UAT should fix it.

* Non-modal form for converting travel board request type to virtual (#15217)

Resolves #15157 

### Description
- serialize regional office label
- create new component `HearingTypeConversionForm` to display form to convert hearing type to virtual
- write stories for `HearingTypeConversionForm`
- rename method `getAppellantTitleForHearing` to the more general `getAppellantTitle`
- minor changes to  components `AppellantSection` and `VirtualHearingSecion`
- write jest tests for `HearingTypeConversionForm`

### Testing Plan
1. run `make storybook`
2. go to storybook and see `HearingConversionTypeForm` 

### Storybook Story
*For Frontend (Presentationa) Components*
* [X] Add a [Storybook](https://github.com/department-of-veterans-affairs/caseflow/wiki/Documenting-React-Components-with-Storybook) file alongside the component file (e.g. create `MyComponent.stories.js` alongside `MyComponent.jsx`)
* [X] Give it a title that reflects the component's location within the overall Caseflow hierarchy
* [X] Write a separate story (within the same file) for each discrete variation of the component

* Add associations to end product establishment for effectuations (#15170)

### Description
PR to take advantage of rails associations to be able to access board grant effectuations easily on a board grant effectuation end product establishment.

* [PART 1] Create a "priority only" distribution (#14745)

* Priority distributions wip

* Fix tests

* make docs!

* Code climate

* Allow unlimited priority legacy appeals to be distributed

* Fix bug on wrong number of hearing cases distributed

* Create priority only distributions

* Suggestions

* Update to priority_push

* Update to priority_push

* Fix schema

* Code Climate

* Updates

* Updates
 to priority push

* fix specs

* Allow unlimited priority legacy appeals to be distributed

* Fix bug on wrong number of hearing cases distributed

* Create priority only distributions

* Code Climate

* Updates

* Updates
 to priority push

* fix specs

* Rename ama distribution

* Add Yoom's changes

* Fix merge

* Code climate fixes

* Return the number of appeals acutally distributed and fix cc

* Code climate

* Feedback!

* Fix tests

* feedback

* Fix tests

* Test fix

* Fix tests

* [PART 2] Job to push priority cases to judges (#14715)

* WIP with tests on priority push job

* words words words

* Add test to track number converge over time

* Distribute all cases tied to judges

* Add test for pulling all judges with ready priority cases

* Fix merge

* Fix merge

* Tests and renaming

* only distribute tied appeals to eligible judges

* Create distributions for all judges, even if they have no cases tied to them

* Fix job

* Code climate

* Update scope name

* Feedbackgit stgit stgit st!

* Better comments

* Fix test

* [PART 3] Add report on priority push job completion (#14761)

* Add reporting

* Update reporting format to be a string

* Remove redundant VACOLS::CaseDocket::

* Pretty colors

* Add priority target and previous distributions to the report

* Ordering and formatting

* Fix report

* Fix report

* Fix tests

* Code climate

* [Part 4] Create non default distribution seed data (#14802)

* Better handling of dispatch judge and atty

* Fix factories to be able to be called after resetting sequences

* Add distribution seed file

* Add a case that will error

* Integrate bug fix

* Fix job

* Fixes

* Fix report

* Fix tied to judge trait

* User random keys

* Integrate changes from fix

* Fix tests

* Code climate

* Feedback

* Update priority_distributions.rb

* Fix merge

* cc

* Tests

* cc

* Fix tests

* Nocov on seeds that do not run by default

* Remove eligible_due_to_date for aod motions (#15237)

Resolves #14085

### Description
Remove old check that allowed a motion to be associated with an appeal because the motion was created after the appeal's receipt date. We have now [associated every motion with an appeal](#14085 (comment)) and this incorrect check should be removed.

### Acceptance Criteria
Appeals are only considered aod due to motion if there is an 
- [ ] age related motion that applies to any appeal with the same claimant
- [ ] any other reason related motion that applies to that exact appeal

### Testing Plan
1. Sign in as AOD_USER and find any non aod ama case
```ruby
appeal = Appeal.find_by(uuid: "173b6ce2-070c-4eec-a463-301f8f18c70e")
appeal.aod?
=> false
```
2. Find the "Edit" link next to the appeal stream type
1. Grant an AOD motion for any reason other than age
```ruby
appeal.aod?
=> true
```
4. Remove the appeal from the aod motion
```ruby
motion = AdvanceOnDocketMotion.find_by(appeal: appeal)
motion.update_attribute('appeal_id', nil)
AdvanceOnDocketMotion.find_by(appeal: appeal)
=> nil
appeal.aod?
=> false
AdvanceOnDocketMotion.first.created_at > appeal.receipt_date
=> true
```
5. Ensure aod does not show up in the ui by reloading case details

* Clarify task_timer table comments (#15241)

### Description
Update `task_timer` table comments to aid future investigation into `TaskTimers`. 
Also added code comments at the top of the class to reference the wiki.

Based on [Hunter's investigation](https://hackmd.io/@hschallh/HJ62FbTNP); motivated by [PendingIncompleteAndUncancelledTaskTimersChecker warnings](https://dsva.slack.com/archives/CJL810329/p1599828304030800).

Prior comments were general from the perspective of `Asyncable` class. New comments provide more detail specific to `TaskTimers`.

### Acceptance Criteria
- [ ] Code compiles correctly

### Testing Plan
See Database Changes section below.

### Code Documentation Updates
- [x] Add or update code comments at the top of the class, module, and/or component.

### Database Changes
*Only for Schema Changes*

* [ ] ~Timestamps (created_at, updated_at) for new tables~
* [x] Column comments updated
* [x] Have your migration classes inherit from `Caseflow::Migration`, especially when adding indexes (use `add_safe_index`)
* [x] Verify that `migrate:rollback` works as desired ([`change` supported functions](https://edgeguides.rubyonrails.org/active_record_migrations.html#using-the-change-method))
* [ ] ~Query profiling performed (eyeball Rails log, check bullet and fasterer output)~
* [ ] ~Appropriate indexes added (especially for foreign keys, polymorphic columns, unique constraints, and Rails scopes)~
* [x] DB schema docs updated with `make docs` (after running `make migrate`)
* [x] #appeals-schema notified with summary and link to this PR

* Caseflow Intake: Review page spacing consistency (#15229)

* 4 of 5 spacing changes

* fix double quotes to single quotes

* spacing fix

* final 30px spacing

* spacing fix

* feature toggle off

* Edit EP Claim Labels | Add map of end product code characteristics (#15228)

Connects #15114

### Description
Add a constants file with a hash of end product codes and their properties.

### Acceptance Criteria
- [ ] Key: End product code
- [ ] Properties:
  - [ ] "Official" label
  - [ ] Label for the UI (currently lives in END_PRODUCT_CODES.json)
  - [ ] Issue type
  - [ ] Business line (aka benefit type)
  - [ ] EP Family (030/040/930)
  - [ ] Review type
  - [ ] Disposition type (for automatically generated claims): allowed, remanded, Duty to assist error, Difference of Opinion
  - [ ] Correction type
- [ ] Codes that are not currently established by Caseflow can be excluded from the code map

* Shalliburton/14895 connect schedule veteran rspec (#15215)

* Updated and added tests to postpone hearing feature workflow

* Finished writing backend tests for direct-to-virtual workflow

* Fixed lint and jest errors

* Fixed jest snapshot errors

* Replaced router with memory router to fix location key snapshot updates

* Use request_type instead of readabale_request_type to determine RO (#15244)

### Description
#### Background
This PR fixes an issue with central dockets where [these sentrey errors](https://sentry.prod.appeals.va.gov/department-of-veterans-affairs/caseflow/issues/11573/?referrer=webhooks_plugin) started popping up because we were fetching hearing locations on daily docket with `regionalOffice=null`. This `regionalOffice` was getting set to `null` by this [logic](https://github.com/department-of-veterans-affairs/caseflow/blob/e6279de98591de6b6a5fa7657c0769c00715b963/client/app/hearings/components/dailyDocket/DailyDocket.jsx#L96) because we were using `readableRequestType` from hearingDay object which now returns `Central`, `Central, Virtual`, or `Virtual` as central hearings are being converted to virtual since the release of this feature to some hearings users ([slack request](https://dsva.slack.com/archives/C3EAF3Q15/p1599238807134300)).

#### Fix
The fix was to keep `readableRequestType` only for displaying to users and instead use `requestType` (which is currently either `C` or `V`) to  determine the `regionalOffice` for a hearing day. 

#### Reference
[Slack thread for discussion](https://dsva.slack.com/archives/C01155MJGF2/p1600128301012900)

### User Facing Changes
 - [x] Screenshots of UI changes added to PR & Original Issue

#### BEFORE
<img width="861" alt="Screen Shot 2020-09-15 at 1 29 48 PM" src="https://user-images.githubusercontent.com/20735998/93244662-13d30280-f758-11ea-85aa-742de2182485.png"> 

#### AFTER
<img width="833" alt="Screen Shot 2020-09-15 at 1 30 01 PM" src="https://user-images.githubusercontent.com/20735998/93244683-1afa1080-f758-11ea-9f3a-c3ad7a5d8727.png">



### Testing Plan
1. Enable feature toggle on rails console`FeatureToggle.enable!(:schedule_virtual_hearings_for_central, users: [User.find_by(css_id: "BVASYELLOW")])`
2. Login as `BVASYELLOW`
3. Go to http://localhost:3000/hearings/schedule and pick a central hearing day with 2 or more hearings
4. Convert a hearing to `Virtual` 
5. Go back to daily docket and notice that the hearing locations are fetched without errors

* Fixed issues with appellant section after merge

* Fixed issues with appellant section after merge

* Updated default hearings data

Co-authored-by: Rubaiyat Rashid <[email protected]>

Co-authored-by: Ferris Tseng <[email protected]>
Co-authored-by: Kat Tipton <[email protected]>
Co-authored-by: Tomas Apodaca <[email protected]>
Co-authored-by: va-bot <[email protected]>
Co-authored-by: Yoom Lam <[email protected]>
Co-authored-by: Hunter Schallhorn <[email protected]>
Co-authored-by: jcq <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alisa Nguyen <[email protected]>
Co-authored-by: Sandra Jones <[email protected]>
Co-authored-by: Meckila <[email protected]>
Co-authored-by: wdrougas-tista <[email protected]>
Co-authored-by: YANG YANG <[email protected]>
Co-authored-by: Rubaiyat Rashid <[email protected]>
Co-authored-by: Sally Maki <[email protected]>
Co-authored-by: mkerns355 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants