-
Notifications
You must be signed in to change notification settings - Fork 1
Level 1 Review And LOQ
The aim of this page is to outline the structure and flow of:
- Reviewer - reviewing an application
- Reviewer - submitting LOQ (List of Questions)
- Applicant - making changes in response to LOQ
- Applicant - re-submitting application with changes
- Reviewer - re-reviewing changes that were made
In the context of this document, we are assuming that reviewer is already assigned, all sections and they are the only level reviewer defined for a given stage.
Below is the summary of logic aspects of this topic
- Changes
review.statusandapplication.statusto inform front end of actions that can be made - On review submission trim
review_responsesthat have been created but not reviewed by user - On application re-submission, trim
application_responsethat are duplicated and not changed - On review re-submission, trim
review_responsesthat are duplicated and not changed
- Fetches actions and calculates progress of review and application
- GraphQL mutation to create review and application responses
- GraphQL mutation to update
application_responseorreview_response - Validates submission of review and application
- GraphQL mutation to request submission of review and application
The 'state' of application and review (actions, progress, etc..) is calculated and stored in one state structure. It aids visual component and de-couples logic from UI elements. This structure is recalculated whenever a response is changed. Initial structure is constructed in useGetApplicationStructure and is used for applicant related UI, useGetReviewStructureForSection adds review related information, the later adds extra information the former. It's best described in the Application-and-Review-Workflow.png diagram.
The aim of this diagram is to give some context (an anchor point), it's an abstracted schema diagram, not all of the tables involved in Review and LOQ process are shown

This schema structure allows new responses to be created (previous responses to be duplicated) whenever a review or application are opened (restarted) for editing, and this creates a system which maintains historic data integrity.
Front End
When reviewer start/re-starts a review, new review_response entities are created for every latest application_response. If latest application_response already has a review_response linked (from previous review), review_response is duplicated. Done by useRestartReview and useCreateReview hooks.
latest_application_response is just application response with latest time_updated for a given element.
It's possible that latest application response is not visible (it could become invisible due to changes in application), these are ignored.
We only create review_response for elements that are assigned to reviewer via review_question_assignment (see Assignment Process for more details)
Back End
When review is submitted, an action will trim any responses that haven't changed and will update latest review responses time_updated to match review submission time (latest from status and stage history table) trimResponses action.
Review Status
We will be restricting editing of review tables (apart from trigger) via postgres row level policies. Front end requests status change by setting trigger on review table to onReviewCreate, onReviewSubmit, onReviewRestart, and back end changes this via changeStatus action. Front end needs to wait for trigger to reset to null before displaying new state of review
In response to LOQ, an applicant can restart an application. Similar logic to the one described in above section applies.
Is created for each iteration of a review, can be of status:
LIST_OF_QUESTIONSCONFORMNON_CONFORM-
CHANGES_REQUESTED- To be explained in Level 1+ Reviews - Default:
NO_DECISION
See Validation of Submission below for choices that will be available to the user.
is_visible_to_applicant field (not editable by any user, only by back end) controls visibility of review_response from applicant perspective. And recommended_applicant_visibility field (which is editable by reviewer) suggests visibility of review_response to applicant. updateReviewVisibility back end action will set is_visible_to_applicant when review is submitted. See LOQ Workflow Diagram below
Front end determines user actions based on review and application status. And theses statuses are changed by back end via actions, here is an abstracted diagram:

Actions for review are computed by section via useGetReviewStructureForSections -> generateReviewStructure -> generateReviewSectionActions
Actions for applications changeRequestsProgress and isChangeRequest is used to display actions in Application Home pages, those are generated in useGetApplicationStructure -> addApplicantChangeRequestStatusToElement and generateApplicantChangesRequestedProgress.
See Structure below for more details
When application is restarted as a result of LOQ, it can only be submitted if general validation passes AND all questions with change requests have been changed. Logic for this is:
latestApplicationResponse is different to previousApplicationResponse where previousApplicationResponse is linked to non confirm reviewResponse
review can be submitted as LIST_OF_QUESTIONS or NON_CONFORM when at least review_response is marked as decline. Otherwise can only be submitted as CONFORM if ALL assigned visible latest application responses have approve status review responses.
One thing to note, since we always look at latest application response and it's linked review response, we guarantee that all new changes by applicant will be re-reviewed.
Application and Review Structure are generated in hooks useGetApplicationStructure and useGetReviewStructureForSection respectively, these structures are re-computed whenever responses are changed. In the context of Review and LOQ, these fields are added:


This is described in Application and Review Flow documentation Application And Review Flow

Note this diagram may be slightly outdated, but it is still indicative of implemented logic. It also goes beyond Review and LOQ topic

Powered by mSupply