department-of-veterans-affairs / va.gov-team

Public resources for building on and in support of VA.gov. Visit complete Knowledge Hub:
https://depo-platform-documentation.scrollhelp.site/index.html
284 stars 206 forks source link

Data Flow file for Appoint a Representative MVP #92153

Closed oddball-lindsay closed 1 week ago

oddball-lindsay commented 2 months ago

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

holdenhinkle commented 2 weeks ago

We've had this for a long time already, no?

https://github.com/department-of-veterans-affairs/va.gov-team/blob/master/products/accredited-representation-management/product-documentation/representative-status-widget/launch-materials/arm-data-flow.md

Related - https://github.com/department-of-veterans-affairs/va.gov-team/blob/master/products/accredited-representation-management/product-documentation/representative-status-widget/launch-materials/architecture_diagrams.pdf

oddball-lindsay commented 2 weeks ago

@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?

holdenhinkle commented 2 weeks ago

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?

holdenhinkle commented 1 week ago

Getting User's POA Within Appoint

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

Image

holdenhinkle commented 1 week ago

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

Image

holdenhinkle commented 1 week ago

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

Image

holdenhinkle commented 1 week ago

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

Image

holdenhinkle commented 1 week ago

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

Image

holdenhinkle commented 1 week ago

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

Image