Power of Attorney (POA) - department-of-veterans-affairs/caseflow GitHub Wiki

Power of Attorney (POA) technical details

Power of Attorney (POA) is the legal authority claimants can grant to another person or organization in their Appeals process. The VA has copious documentation on the topic. POA is most often assigned to a Veteran Service Organization (VSO) or private attorney.

This document describes the technical underpinnings of determining POA for a given claimant.

Definitions

File number (FN)

The VBMS veteran identifier. It may be either a SSN or a claim folder number.

Associate the records for all claimants and beneficiaries to a claims folder number. There are two types of claims folder numbers used by the Veterans Benefits Administration (VBA) based on the Veteran’s Social Security number (SSN), or an eight-digit claims folder number assigned through the Beneficiary Identification and Records Locator Subsystem (BIRLS).

Social Security Number (SSN)

The 9-digit number assigned by SSA.

Claim folder number

The 8-digit number assigned by VA (BIRLS).

Participant ID (PID)

The internal identifier used by BGS to uniquely track entities. Every Veteran, Claimant, Person, Organization, etc, has a unique participant ID.

Determining POA

Given a file number 12345678 and a Caseflow or eFolder Express (EE) user with CSS ID THE_USER there are multiple pathways to determining POA. Some questions to consider:

  • Is the claimant the Veteran?
  • Is the Veteran deceased?
  • Is the resource THE_USER wants to view allowable under POA rules?

In order to illustrate the full logical flow from the BGS perspective, we'll show examples via BGS API calls. Note that both Caseflow and EE have convenient wrapper methods for most of these.

Is the claimant the Veteran?

Caseflow

Check the veteran_is_not_claimant column on the Decision Review.

If the column value is true then refer to the claimants table to identify the PID for the claimant.

If the column value is false then refer to the veterans table to identify the PID for the claimant.

EE

The resource in question in EE is the efolder itself, so there is no specific claim to check against.

Instead, fetch all the claimant PIDs for all the claims associated with the file number:

> bgs = BGSService.new
> claims = bgs.client.benefit_claims.find_claim_by_file_number(12345678)
> claimant_pids = Array(claims).flatten.map { |claim| claim[:ptcpnt_clmant_id] }.uniq

And compare the Veteran's PID against claimant_pids to see if there are any that are not the Veteran.

> vet_record = bgs.client.veteran.find_by_file_number(12345678)
> vet_pid = vet_record[:ptcpnt_id]
> [claimant_pids - [vet_pid]].flatten.any?

If the result is true then the answer is "maybe".

If the result is false then the answer is "no".

Is the Veteran deceased?

BGS reports this as "date of death".

> vet_record = bgs.client.veteran.find_by_file_number(12345678)
> vet_record[:date_of_death].present?

Is the resource allowable under POA rules?

The VBMS Core POA User Role Access matrix can be a helpful tool for determining the relevant POA rules. Note that the answer to the first two questions will help you determine the specific rules that apply.

Verifying POA for a given User

Assuming you have answered all three questions, you can correlate whether THE_USER has a POA relationship with file number 12345678 according to the following logical flow.

You can see all these examples at work in the EE UserAuthorizer tests.

Fetch the User's PID

Both Caseflow and EE have a convenience wrapper around the BGS API for this:

> user = User.find_by_css_id 'THE_USER'
> user.participant_id

Fetch the POA organization records for the User

> poa_orgs = bgs.client.org.find_poas_by_ptcpnt_id(user.participant_id)
> poa_org_pids = poa_orgs.map { |org| org[:ptcpnt_id] }

Pattern 1: Ask BGS if there is a POA record for the file number

Is there a POA record for the file number that matches the User's POA organizations?

> fn_poa = bgs.client.claimants.find_poa_by_file_number(12345678)
> poa_org_pid = fn_poa&[:person_org_ptcpnt_id]
> poa_org_pids.include? poa_org_pid

Pattern 2: Ask BGS if there is a POA record for the claimant's PID

Find any intersection between the User's Org POA PIDs and the claimant's POA Org PIDs.

> claims = bgs.client.benefit_claims.find_claim_by_file_number(12345678)
> claimant_pids = Array(claims).flatten.map { |claim| claim[:ptcpnt_clmant_id] }.uniq
> claimant_poa_org_pids = claimant_pids.map do |claimant_pid|
    org_poa = bgs.client.claimants.find_poa_by_participant_id(claimant_pid)
    org_poa[:person_org_ptcpnt_id]
  end
> poa_org_pids.intersection(claimant_poa_org_pids).any?