-
Notifications
You must be signed in to change notification settings - Fork 19
Hearing Record and Transcribe (HRT)
Pexip is Caseflow's legacy means of hosting conferences for virtual hearings. Once a virtual hearing gets scheduled for Pexip, Caseflow will run the VirtualHearings::CreateConferenceJob
to create a conference link for Pexip, there is a recurring job that gets ran to delete conferences not needed anymore called VirtualHearings::DeleteConferencesJob
. These jobs will be leveraging the Management API from Pexip to use the endpoints for creation and deletion.
Method | Endpoint | Description |
---|---|---|
POST | https://MANAGEMENT_HOST/api/admin/configuration/v1/conference/ | Creating a conference |
PATCH | https://MANAGEMENT_HOST/api/admin/configuration/v1/conference/CONFERENCE_ID | Editing a conference |
DELETE | https://MANAGEMENT_HOST/api/admin/configuration/v1/conference/CONFERENCE_ID | Deleting a conference |
After a hearing gets held a TranscriptionTask gets created for confirmation. The Transcription Team will pick this up and send a work package consisting of audio recordings to a transcriber who will manually type out the transcript. Once it gets completed, the Transcription Team will retrieve the finished transcript and start reviewing it for QA. If it passes then the TranscriptionTask can be marked completed, if not then it will be "on hold" until either the appellant opts for a new hearing or proceeds without a transcript.
Also known as the ‘slim’ client, Instant Connect provides a way for guests to join meetings without needing an account or the Webex Meetings app that provides FedRAMP support. Instant Connect Docs
Also known as the 'thick' client, WebexRTC allows for an abundance of customization upon meeting creation. RTC Docs
As a Team Admin user navigate to the Team Management page and scroll to the Hearings Management Org Admin Page link. This user will be able to change how a current team member schedules a hearing using either Pexip or Webex through the selection of radio buttons that updates the user.meeting_type
. A user is always a Pexip user until a different selection is made on this page.
Whether a hearing is a Pexip or Webex type is based on the meeting_type
of the user that originally schedules the hearing. create_conference_job
in virtual_hearings
uses the conference_client
to determine the correct service to build the virtual hearing link from.
GET A List of Rooms
GET Room Meeting Details
GET A List of Recordings
GET Details for a Recording
This job gets a list of all rooms Caseflow's authenticated user belongs to and sorts by created date. Caseflow receives the room ID and the title of the meetings and passes those to the next job.
Note: As of 10/15/2024 Cisco has assured us that rooms will exist in this space indefinitely and we will be notified before this is altered in any way on their end.
In this job Caseflow uses the room ID to get the Webex meeting details for the room, including the meeting ID, which is then passed to the next job.
This job gets a list of recordings using the specified meeting ID by hitting the admin endpoint. The recording ID and host email for each recording are passed to the next job.
Here Caseflow retrieves the download links for the MP3, MP4, and VTT files associated to the recording. From there a file name is created for each file type and Caseflow sends the name and link on to be downloaded from the source and uploaded to an S3 bucket. Caseflow then grabs the AWS link to make each file available for download from the frontend. At this point a user is able to download a transcription file in VTT, MP3 and MP4 format.
Caseflow is also able to get the transcription file in a more readable format like a regular document through the TranscriptionTransformer
workflow to convert the original VTT into an RTF. In order to do this Caseflow utlizes ruby gems called webvtt
and rtf
. webvtt
is used for parsing a VTT and generating an object containing the metadata and content of the file which is needed for smooth conversion. rtf
is used to create and format an rtf file. Usually to generate an rtf file the file would need to be converted into a raw rtf string and input the information manually for things like borders, spacing, text, font, etc, and its a very slow process to format everything correctly. This gem streamlines the process and allows making edits programmatically, Caseflow sends the rtf to S3 as well.
The original VTT file
The RTF file after conversion
If an error occurs during conversion Caseflow uses the csv
gem to record the error and information about it to generate a csv file before uploading it to the S3 bucket.
The CSV error file will be formatted like this:
Length | Appeal ID | Date | Judge | Issues | File Name |
---|---|---|---|---|---|
Duration of hearing | ID of appeal | Date of hearing | Name of the judge | Errors occurred during conversion | Name of the file |
Every day at 9 AM UTC Caseflow runs the Hearings::FetchWebexRoomsListJob
which kicks off four separate jobs. These call on the Webex Rooms and Recordings APIs to ultimately retrieve all the transcriptions that were generated within the previous 24 hours.
Process Flow Chart
Information regarding a Webex hearing's transcription_files
is made available to Caseflow users on the Hearing Details page under the Transcription Details section. The Transcription Files table (TranscriptionFilesTable.jsx
) includes columns:
- Docket(s):
transcription_file.docket_number
- Uploaded:
transcription_file.date_upload_aws
- File Link:
transcription_file.aws_link
- Status:
transcription_file.file_status
Previously, the Hearing Details page never rendered the Transcription Details section for legacy hearings. That being said, for a legacy Webex hearing, Caseflow now display the Transcription Details section – but the only subsection included is the newly created Transcription Files table. The Transcription Files table will never render for a Pexip hearing.
The Transcription Files table "Docket(s)" column name suggests the potential for the table to represent transcription_files
across multiple dockets. As of HRT Phase 3, this behavior has yet to be implemented. However, in TranscriptionFiles.jsx
, Caseflow allows for the case where hearing.transcriptionFiles
returns a nested object, which would have been sorted by transcription_file.docket_number
on the backend. The table would then group associated rows in the table and style accordingly.
The introduction of Webex as a conference provider brought to light a discrepancy between how Caseflow manages virtual and non-virtual conference links. Whereas Caseflow assigns each virtual hearing its own unique conference link, in the case of a non-virtual hearing, the existing behavior was to associate a conference link with an entire hearing_day
. One hearing_day
may have multiple non-virtual hearings
, each of which would share the same conference_link
. What results is a one-to-many relationship between a conference_link
and its hearings
through a shared hearing_day
association.
The one-to-many relationship mirrors the process by which a regional office may stop and start the same conference to host multiple non-virtual hearings over the course of one day. However, when it came to the newly integrated Webex hearings, both virtual and non-virtual, it became apparent that the one-to-many relationship fell short. In order to associate a hearing with its recording and transcription files, which Caseflow retrieves from the Webex API, it became necessary to include the hearing_id
and hearing type (Hearing
or LegacyHearing
) in the subject of the Webex conference.
app/models/concerns/hearing_concern.rb
def subject_for_conference
"#{docket_number}_#{id}_#{self.class}"
end
Unique hearing
identifiers would not be available at the time of hearing_day
creation, which is when Caseflow generates non-virtual Pexip conference links. As a result, a one-to-one association between non-virtual Webex hearings and their conference links was enforced. In addition, although the process of Pexip link creation was left unchanged, adjustments were made to create the appearance of a one-to-one relationship regardless of conference provider – this is in order to ensure a more uniform user experience.
-
Non-virtual Webex
hearings
retrieve theirconference_link
throughHearingConcern#non_virtual_conference_link
.app/models/concerns/hearing_concern.rb def non_virtual_conference_link ConferenceLink.find_by(hearing: self) end
- The non-virtual Webex
conference_link
is then serialized as:non_virtual_conference_link
on thehearing
object in both theHearingSerializer
andLegacyHearingSerializer
.
- The non-virtual Webex
-
Non-virtual Pexip
hearings
retrieve theirconference_link
through#daily_docket_conference_link
on both theHearing
andLegacyHearing
models.app/models/hearing.rb or app/models/legacy_hearing.rb def daily_docket_conference_link hearing_day.conference_link end
-
HearingDay#conference_link
overrides theconference_link
association and returnsnil
ifscheduled_date_passed?
or if the:pexip_conference_service
feature toggle is disabled. Prior to HRT, an empty array was returned instead ofnil
. - The non-virtual Pexip
conference_link
is then serialized as:daily_docket_conference_link
on thehearing
object in both theHearingSerializer
andLegacyHearingSerializer
.
-
-
By serializing non-virtual conference links on the
hearing
object, the Hearing Details page is now able to display non-virtual conference links for both Webex and Pexip hearings. More information on hearing link location here. -
HearingLinks.jsx
is updated to conditionally render the conference link for a hearing based on its hearing type (virtual or non-virtual) and conference provider (Pexip or Webex).client/app/hearings/components/details/HearingLinks.jsx const getLinks = () => { if (scheduledForIsPast) { return null; } else if (isVirtual) { return virtualHearing; } else if (conferenceProvider === 'pexip') { return dailyDocketConferenceLink; } else if (conferenceProvider === 'webex') { return nonVirtualConferenceLink; } };
Prior to the implementation of HRT, the Hearing Links section of the Hearing Details page only displayed hearing links for virtual hearings. The newly enforced one-to-one relationship between a non-virtual hearing and its conference link enables the Hearing Details page to display hearing links across all hearing types, virtual and non-virtual.
The Hearing Links section displays three different links for each hearing:
- Host Link: The link through which the VLJ joins the virtual or non-virtual hearing.
- Co-Host Link: The link through which the hearing coordinator joins the virtual or non-virtual hearing. For Webex hearings, the co-host link is unique. For Pexip hearings, the co-host link and the host link are identical but displayed as separately to maintain consistency.
- Guest Link: The link through which the appellant and/or their representative join the virtual hearing. For a non-virtual hearing at which the appellant would be physically present, the guest link may be used by the appellant's representative to join remotely.
Depending on the conference provider, Pexip or Webex, there are slight difference in how the links are displayed. For one, Pexip hearings require a pin.
Webex Hearing Links:
Pexip Hearing Links:
Prior to HRT, Caseflow displayed the guest link for non-virtual hearings at the top of the Daily Docket page. After conference links for non-virtual hearings were moved to the Hearing Details page, the guest link section was removed from the Daily Docket – the intention being to reinforce consistent hearing link locations across all hearing types and conference providers. That being said, each hearing's row in the Daily Docket still contains a link through which the VLJ can connect to the conference.
Assignment of meeting type to a team member of the Hearings Management Organization group will be done at the discretion of an admin. Phase 1 and 2 are to be released together. An admin will ensure that the Webex feature toggle and Conference Selection feature toggle are enabled so that the selection of meeting type will be visible. Once every member has 'Webex' selected as their provider to schedule a hearing, the Pexip feature toggle and Conference Selection feature toggle can be disabled.
- Home
- Acronyms and Glossary
- Caseflow products
- Caseflow Intake
- Caseflow Queue
- Appeals Consumer
- Caseflow Reader
- Caseflow eFolder
- Caseflow Hearings
- Caseflow Certification
- Caseflow APIs
- Appeal Status API
- Caseflow Dispatch
-
CSUM Roles
- System Admin
- VHA Team Management
- Active Record Queries Resource
- External Integrations
- Caseflow Demo
- Caseflow ProdTest
- Background
- Stuck Jobs
- VA Notify
-
Caseflow-Team
- Tier 4
- Bat Team
- Technical Documentation
- Backend Code Patterns
- Backend Working Group
- FACOLS, VACOLS DB Schema
- Asyncable Models
- External Data: where and why
- Data Fetching Scripts
- Caseflow Data Model and Dictionary
- User Access Permissions
- Controller Schemas
- Constants
- Frontend Best Practices
- Accessibility
- How-To
- Debugging Tips
- Adding a Feature Flag with FeatureToggle
- Editing AMA issues
- Editing a decision review
- Fixing task trees
- Investigating and diagnosing issues
- Data and Metric Request Workflow
- Exporting and Importing Appeals
- Explain page for Appeals
- Record associations and Foreign Keys
- Upgrading Ruby
- Stuck Appeals
- Testing Action Mailer Messages Locally
- Re-running Seed Files
- Rake Generator for Legacy Appeals
- Manually running Scheduled Jobs
- System Admin UI
- Caseflow Makefile
- Upgrading Postgresql from v11.7 to v14.8 Locally
- VACOLS VM Trigger Fix M1
- Using SlackService to Send a Job Alert
- Technical Talks