Closed oddball-lindsay closed 1 week ago
We've had this for a long time already, no?
@holdenhinkle yes, we have pre-release technical documentation for both Widget and Find! I realize I forgot to update the ticket title though to mention Appoint a Rep (not Widget 🤦) - updated.
Feel free to add or repurpose any existing documentation! Although I was imagining we'd need another "launch materials" folder for Appoint, are you ok with that?
Yes, I figured we'd need the same:
Although I was imagining we'd need another "launch materials" folder for Appoint, are you ok with that?
https://www.planttext.com/#google_vignette
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
participant "Lighthouse API\n(Benefits Claims API)" as LighthouseAPI
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> LighthouseAPI : Fetch POA using ICN
LighthouseAPI --> Backend : Return POA Data
Backend -> VAGovDB : Query 'veteran_organizations' Table
Backend -> VAGovDB : Query 'veteran_representatives' Table
VAGovDB --> Backend : Return Organization Details
VAGovDB --> Backend : Return Representative Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
@enduml
With SIP loop:
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
participant "Lighthouse API\n(Benefits Claims API)" as LighthouseAPI
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> LighthouseAPI : Fetch POA using ICN
LighthouseAPI --> Backend : Return POA Data
Backend -> VAGovDB : Query 'veteran_organizations' Table
Backend -> VAGovDB : Query 'veteran_representatives' Table
VAGovDB --> Backend : Return Organization Details
VAGovDB --> Backend : Return Representative Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
loop While User is Filling Out the Form
Frontend -> Backend : POST /v0/in_progress_forms/21-22\n(Current Form State)
Backend --> Frontend : Acknowledgment
end
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
@enduml
Add select rep and current poa confirmation:
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
participant "Lighthouse API\n(Benefits Claims API)" as LighthouseAPI
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> LighthouseAPI : Fetch POA using ICN
LighthouseAPI --> Backend : Return POA Data
Backend -> VAGovDB : Query 'veteran_organizations' Table
Backend -> VAGovDB : Query 'veteran_representatives' Table
VAGovDB --> Backend : Return Organization Details
VAGovDB --> Backend : Return Representative Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
loop While User is Filling Out the Form
Frontend -> Backend : POST /v0/in_progress_forms/21-22\n(Current Form State)
Backend --> Frontend : Acknowledgment
end
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
User -> Frontend : Navigate to Accredited Representative Selection Page
Frontend -> Backend : GET /representation_management/v0/original_entities
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Accredited Representatives Data
Backend --> Frontend : Provide Accredited Representatives List
Frontend --> User : Display Accredited Representatives List
User -> Frontend : Selects a Representative
alt User is Logged In
Frontend -> Backend : GET /representation_management/v0/power_of_attorney
Backend -> LighthouseAPI : Fetch Current POA using ICN
LighthouseAPI --> Backend : Return Current POA Data
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Current POA Details
Backend --> Frontend : Provide Current POA Details
Frontend --> User : Display Current POA and Confirmation Prompt
User -> Frontend : Confirms Replacement of Current POA
end
Frontend -> Backend : Proceed with Representative Selection Process
@enduml
Download PDF:
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return POA Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
loop While User is Filling Out the Form
Frontend -> Backend : POST /v0/in_progress_forms/21-22\n(Current Form State)
Backend --> Frontend : Acknowledgment
end
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
User -> Frontend : Navigate to Accredited Representative Selection Page
Frontend -> Backend : GET /representation_management/v0/original_entities
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Accredited Representatives Data
Backend --> Frontend : Provide Accredited Representatives List
Frontend --> User : Display Accredited Representatives List
User -> Frontend : Selects a Representative
alt User is Logged In
Frontend -> Backend : GET /representation_management/v0/power_of_attorney
Backend -> VAGovDB : Query Current POA Details
VAGovDB --> Backend : Return Current POA Data
Backend --> Frontend : Provide Current POA Details
Frontend --> User : Display Current POA and Confirmation Prompt
User -> Frontend : Confirms Replacement of Current POA
end
Frontend -> Backend : Proceed with Representative Selection Process
User -> Frontend : Navigate to 'Review and Submit' Page
Frontend -> Frontend : Determine Representative Type
alt Representative is a VSO
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122\n(Form Data)
Backend -> Backend : Generate VA Form 21-22 PDF
Backend --> Frontend : Return 21-22 PDF
else Representative is a Claims Agent or Attorney
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122a\n(Form Data)
Backend -> Backend : Generate VA Form 21-22a PDF
Backend --> Frontend : Return 21-22a PDF
end
Frontend -> Frontend : Save PDF to Local Storage
Frontend --> User : Provide Option to Download PDF
@enduml
Add next-steps email:
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
participant "Lighthouse API\n(Benefits Claims API)" as LighthouseAPI
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
participant "VANotify Service" as VANotify
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> LighthouseAPI : GET /services/claims/v2/veterans/{veteranID}/power-of-attorney
LighthouseAPI --> Backend : Return POA Details
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return POA Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
loop While User is Filling Out the Form
Frontend -> Backend : POST /v0/in_progress_forms/21-22\n(Current Form State)
Backend --> Frontend : Acknowledgment
end
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
User -> Frontend : Navigate to Accredited Representative Selection Page
Frontend -> Backend : GET /representation_management/v0/original_entities
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Accredited Representatives Data
Backend --> Frontend : Provide Accredited Representatives List
Frontend --> User : Display Accredited Representatives List
User -> Frontend : Selects a Representative
alt User is Logged In
Frontend -> Backend : GET /representation_management/v0/power_of_attorney
Backend -> LighthouseAPI : GET /services/claims/v2/veterans/{veteranID}/power-of-attorney
LighthouseAPI --> Backend : Return Current POA Data
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Current POA Details
Backend --> Frontend : Provide Current POA Details
Frontend --> User : Display Current POA and Confirmation Prompt
User -> Frontend : Confirms Replacement of Current POA
end
Frontend -> Backend : Proceed with Representative Selection Process
User -> Frontend : Navigate to 'Review and Submit' Page
Frontend -> Frontend : Determine Representative Type
alt Representative is a VSO
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122\n(Form Data)
Backend -> Backend : Generate VA Form 21-22 PDF
Backend --> Frontend : Return 21-22 PDF
else Representative is a Claims Agent or Attorney
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122a\n(Form Data)
Backend -> Backend : Generate VA Form 21-22a PDF
Backend --> Frontend : Return 21-22a PDF
end
Frontend -> Frontend : Save PDF to Local Storage
Frontend --> User : Provide Option to Download PDF
User -> Frontend : Click 'Continue' After Downloading PDF
Frontend -> Backend : POST /representation_management/v0/next_steps_email\n(Email Data)
Backend -> Backend : Validate Email Data
alt Data is Valid
Backend -> VANotify : Queue 'Next Steps' Email
VANotify --> Backend : Acknowledge Email Queued
Backend --> Frontend : Respond with Success Message
Frontend -> User : Display Confirmation and Redirect to 'Next Steps' Page
else Data is Invalid
Backend --> Frontend : Respond with Error Message
Frontend -> User : Display Error Notification
end
@enduml
Add Lighthouse's call to BGS:
@startuml
actor User
participant "vets-website\n(React Frontend)" as Frontend
participant "vets-api\n(Ruby on Rails Backend)" as Backend
participant "Lighthouse API\n(Benefits Claims API)" as LighthouseAPI
participant "BGS API\n(Benefits Gateway Service)" as BGSAPI
database "VA.gov Database\n(PostgreSQL)" as VAGovDB
participant "VANotify Service" as VANotify
User -> Frontend : Access Web App
Frontend -> Frontend : Check User Authentication Status
alt User is Logged In
Frontend -> Backend : Request User's POA Data
Backend -> Backend : Verify User Authentication
Backend -> LighthouseAPI : GET /services/claims/v2/veterans/{veteranID}/power-of-attorney
LighthouseAPI -> BGSAPI : Retrieve POA Information
BGSAPI --> LighthouseAPI : Return POA Details
LighthouseAPI --> Backend : Return POA Details
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return POA Details
Backend --> Frontend : Provide POA Details
Frontend --> User : Display POA Information
loop While User is Filling Out the Form
Frontend -> Backend : POST /v0/in_progress_forms/21-22\n(Current Form State)
Backend --> Frontend : Acknowledgment
end
else User is Not Logged In
Frontend --> User : Prompt to Log In
end
User -> Frontend : Navigate to Accredited Representative Selection Page
Frontend -> Backend : GET /representation_management/v0/original_entities
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Accredited Representatives Data
Backend --> Frontend : Provide Accredited Representatives List
Frontend --> User : Display Accredited Representatives List
User -> Frontend : Selects a Representative
alt User is Logged In
Frontend -> Backend : GET /representation_management/v0/power_of_attorney
Backend -> LighthouseAPI : GET /services/claims/v2/veterans/{veteranID}/power-of-attorney
LighthouseAPI -> BGSAPI : Retrieve POA Information
BGSAPI --> LighthouseAPI : Return Current POA Data
LighthouseAPI --> Backend : Return Current POA Data
Backend -> VAGovDB : Query 'veteran_organizations' and 'veteran_representatives' Tables
VAGovDB --> Backend : Return Current POA Details
Backend --> Frontend : Provide Current POA Details
Frontend --> User : Display Current POA and Confirmation Prompt
User -> Frontend : Confirms Replacement of Current POA
end
Frontend -> Backend : Proceed with Representative Selection Process
User -> Frontend : Navigate to 'Review and Submit' Page
Frontend -> Frontend : Determine Representative Type
alt Representative is a VSO
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122\n(Form Data)
Backend -> Backend : Generate VA Form 21-22 PDF
Backend --> Frontend : Return 21-22 PDF
else Representative is a Claims Agent or Attorney
Frontend -> Backend : POST /representation_management/v0/pdf_generator2122a\n(Form Data)
Backend -> Backend : Generate VA Form 21-22a PDF
Backend --> Frontend : Return 21-22a PDF
end
Frontend -> Frontend : Save PDF to Local Storage
Frontend --> User : Provide Option to Download PDF
User -> Frontend : Click 'Continue' After Downloading PDF
Frontend -> Backend : POST /representation_management/v0/next_steps_email\n(Email Data)
Backend -> Backend : Validate Email Data
alt Data is Valid
Backend -> VANotify : Queue 'Next Steps' Email
VANotify --> Backend : Acknowledge Email Queued
Backend --> Frontend : Respond with Success Message
Frontend -> User : Display Confirmation and Redirect to 'Next Steps' Page
else Data is Invalid
Backend --> Frontend : Respond with Error Message
Frontend -> User : Display Error Notification
end
@enduml
Background
For the Privacy, Security, Infrastructure Readiness Review we'll need to provide a link to our Data Flow file.
For reference, here is our Data Flow for Find a Representative if you'd like to use a similar structure.
Tasks
Acceptance Criteria