|
| 1 | +# Patient Import Flow Chart |
| 2 | + |
| 3 | +This is the flow chart for patient imports are performed, including the new review phases. |
| 4 | + |
| 5 | +```mermaid |
| 6 | +--- |
| 7 | +title: Class Imports |
| 8 | +--- |
| 9 | +flowchart TB |
| 10 | +
|
| 11 | + classDef status_change stroke:#004,fill:#eef |
| 12 | + classDef import_status_change stroke:#400,fill:#fee |
| 13 | +
|
| 14 | + subgraph "Patient Changeset States" |
| 15 | + direction TB |
| 16 | +
|
| 17 | + changeset_statuses_pending[pending]:::status_change |
| 18 | + changeset_statuses_calculating_review[calculating_review]:::status_change |
| 19 | + changeset_statuses_ready_for_review[ready_for_review]:::status_change |
| 20 | + changeset_statuses_committing[committing]:::status_change |
| 21 | + changeset_statuses_needs_re_review[needs_re_review]:::status_change |
| 22 | + changeset_statuses_processed[processed]:::status_change |
| 23 | + changeset_statuses_import_invalid[import_invalid]:::status_change |
| 24 | +
|
| 25 | + changeset_statuses_pending --> changeset_statuses_calculating_review |
| 26 | + changeset_statuses_calculating_review --> changeset_statuses_ready_for_review |
| 27 | + changeset_statuses_calculating_review --> changeset_statuses_import_invalid |
| 28 | + changeset_statuses_ready_for_review --> changeset_statuses_committing |
| 29 | + changeset_statuses_committing --> changeset_statuses_processed |
| 30 | + changeset_statuses_committing --> changeset_statuses_needs_re_review |
| 31 | + changeset_statuses_needs_re_review --> changeset_statuses_calculating_review |
| 32 | + changeset_statuses_processed --> changeset_statuses_calculating_review |
| 33 | + end |
| 34 | +
|
| 35 | + user --> create |
| 36 | + user --> approve |
| 37 | +
|
| 38 | + subgraph ClassImportController |
| 39 | + set_status_to_pending:::status_change |
| 40 | + create_changesets["create changesets"] |
| 41 | + set_status_to_pending["set status to pending"] |
| 42 | + enqueue_pds_cascading_search_jobs["enqueue cascading PDS search jobs"] |
| 43 | + set_import_status_to_committing["set import status to committing"]:::import_status_change |
| 44 | + set_changeset_status_to_committing["set changeset status to committing"]:::status_change |
| 45 | + enqueue_commit_patient_changesets_job["enqueue commit patient changesets job"] |
| 46 | + class_import_controller_set_status_to_calculating_review["set status to calculating review"]:::status_change |
| 47 | + class_import_controller_enqueue_review_patient_changeset_job["enqueue review patient changeset job"] |
| 48 | +
|
| 49 | + create --> create_changesets |
| 50 | + create_changesets --> set_status_to_pending |
| 51 | + set_status_to_pending --"for changesets with postcode"--> enqueue_pds_cascading_search_jobs |
| 52 | + set_status_to_pending --"for changesets without postcode"--> class_import_controller_set_status_to_calculating_review |
| 53 | + class_import_controller_set_status_to_calculating_review -...-> changeset_statuses_calculating_review |
| 54 | + class_import_controller_set_status_to_calculating_review --> class_import_controller_enqueue_review_patient_changeset_job |
| 55 | + set_status_to_pending -...-> changeset_statuses_pending |
| 56 | +
|
| 57 | + approve --> set_import_status_to_committing |
| 58 | + set_import_status_to_committing --> set_changeset_status_to_committing:::status_change |
| 59 | + set_changeset_status_to_committing --> enqueue_commit_patient_changesets_job |
| 60 | + set_changeset_status_to_committing -...-> changeset_statuses_committing |
| 61 | + end |
| 62 | + enqueue_pds_cascading_search_jobs -- "individual changeset" --> start_pds_cascading_search |
| 63 | + enqueue_commit_patient_changesets_job -- "changeset batch" --> start_commit_patient_changesets |
| 64 | + class_import_controller_enqueue_review_patient_changeset_job --"individual changeset"--> start_review_patient_changeset |
| 65 | +
|
| 66 | + subgraph PDSCascadingSearchJob |
| 67 | + start_pds_cascading_search((perform)) |
| 68 | + do_pds_search["do PDS search"] |
| 69 | + save_search_result["save search result"] |
| 70 | + start_pds_cascading_search --> do_pds_search |
| 71 | + do_pds_search --> save_search_result |
| 72 | + save_search_result -- "next step" --> do_pds_search |
| 73 | + end |
| 74 | + save_search_result -- "perform for each changeset" --> start_process_patient_changeset |
| 75 | +
|
| 76 | + subgraph ProcessPatientChangesetJob |
| 77 | + start_process_patient_changeset((perform)) |
| 78 | + check_no_changesets_pending{No changesets pending?} |
| 79 | + check_import{Is import ok?} |
| 80 | + set_status_to_calculating_review["set status to calculating review"]:::status_change |
| 81 | + set_nhs_number_if_unique["set nhs number if unique"] |
| 82 | + set_status_to_import_invalid["set status to import invalid"]:::status_change |
| 83 | +
|
| 84 | + start_process_patient_changeset --> set_nhs_number_if_unique |
| 85 | + set_nhs_number_if_unique --> set_status_to_calculating_review |
| 86 | + set_status_to_calculating_review --> check_no_changesets_pending |
| 87 | + set_status_to_calculating_review -..-> changeset_statuses_calculating_review |
| 88 | + check_no_changesets_pending -- yes --> check_import |
| 89 | + check_import -- no --> set_status_to_import_invalid |
| 90 | + set_status_to_import_invalid --> return |
| 91 | + set_status_to_import_invalid -..-> changeset_statuses_import_invalid |
| 92 | + return((return)) |
| 93 | + end |
| 94 | + check_no_changesets_pending -- no --> start_review_patient_changeset |
| 95 | + check_import -- yes --> start_review_patient_changeset |
| 96 | +
|
| 97 | + subgraph ReviewPatientChangesetJob |
| 98 | + start_review_patient_changeset((perform)) |
| 99 | + check_ready_for_review{check changesets are ready_for_review} |
| 100 | + check_none_pending{check no changesets are pending} |
| 101 | + set_status_to_ready_for_review["set status to ready for review"]:::status_change |
| 102 | + enqueue_review_class_import_school_move["enqueue review class import school move"] |
| 103 | +
|
| 104 | + start_review_patient_changeset --> check_ready_for_review |
| 105 | + check_ready_for_review -- yes --> finish_review_patient_changeset_job((finish)) |
| 106 | + check_ready_for_review -- no --> set_status_to_ready_for_review |
| 107 | + set_status_to_ready_for_review --> check_none_pending |
| 108 | + set_status_to_ready_for_review -..-> changeset_statuses_ready_for_review |
| 109 | + check_none_pending -- no --> finish_review_patient_changeset_job |
| 110 | + check_none_pending -- yes --> enqueue_review_class_import_school_move |
| 111 | + end |
| 112 | +
|
| 113 | + subgraph ReviewClassImportSchoolMoveJob |
| 114 | + start_review_class_import_school_move((perform)) |
| 115 | + create_school_moves_for_unknown_patients["create school moves for unknown patients"] |
| 116 | +
|
| 117 | + start_review_class_import_school_move --> create_school_moves_for_unknown_patients |
| 118 | + create_school_moves_for_unknown_patients --> finish((finish)) |
| 119 | + end |
| 120 | + enqueue_review_class_import_school_move -- "individual changeset" --> start_review_class_import_school_move |
| 121 | +
|
| 122 | + subgraph CommitPatientChangesetsJob |
| 123 | + start_commit_patient_changesets((perform)) |
| 124 | + set_status_to_processed["set status to processed"]:::status_change |
| 125 | + if_finished_commiting_changesets{if finished commiting changesets for import} |
| 126 | + set_status_to_calculating_review_2[set status to calculating review]:::status_change |
| 127 | + commit_consistent_changesets["commit consistent changesets"] |
| 128 | + set_status_to_calculating_review_2["set status to calculating_review"] |
| 129 | + enqueue_review_patient_changeset_job["enqueue review patient changeset job"] |
| 130 | + set_import_status_to_calculating_re_review["set import status to calculating_re_review"] |
| 131 | + enqueue_sync_patient_team_job["enqueue sync patient team job"] |
| 132 | + commit_patient_changeset_job_finish((finish)) |
| 133 | + set_status_to_needs_re_review[set status to needs_re_review]:::status_change |
| 134 | + for_each_changeset_needing_re_review@{ shape: notch-pent, label: "for each changeset needing re-review" } |
| 135 | +
|
| 136 | + start_commit_patient_changesets -- "for all consistent changesets in batch" --> commit_consistent_changesets |
| 137 | + start_commit_patient_changesets -- "for all inconsistent changesets in batch" --> set_status_to_needs_re_review |
| 138 | + set_status_to_needs_re_review -..-> changeset_statuses_needs_re_review |
| 139 | + commit_consistent_changesets --> set_status_to_processed |
| 140 | + set_status_to_processed ---> if_finished_commiting_changesets |
| 141 | + set_status_to_needs_re_review --> if_finished_commiting_changesets |
| 142 | + set_status_to_processed -..-> changeset_statuses_processed |
| 143 | + if_finished_commiting_changesets -- no --> enqueue_sync_patient_team_job |
| 144 | + if_finished_commiting_changesets -- yes --> set_import_status_to_calculating_re_review:::import_status_change |
| 145 | + set_import_status_to_calculating_re_review --> for_each_changeset_needing_re_review |
| 146 | + for_each_changeset_needing_re_review --> set_status_to_calculating_review_2 |
| 147 | + enqueue_review_patient_changeset_job --> for_each_changeset_needing_re_review |
| 148 | + set_status_to_calculating_review_2 --> enqueue_review_patient_changeset_job |
| 149 | + set_status_to_calculating_review_2 -..-> changeset_statuses_calculating_review |
| 150 | + enqueue_review_patient_changeset_job --> enqueue_sync_patient_team_job |
| 151 | + enqueue_sync_patient_team_job --> commit_patient_changeset_job_finish |
| 152 | + end |
| 153 | + enqueue_review_patient_changeset_job --"individual changeset"--> start_review_patient_changeset |
| 154 | +
|
| 155 | +``` |
0 commit comments