Skip to content

Example of Process Map

flowchart TD

%% =========================
%% USER REGISTRATION / PROFILE
%% =========================
subgraph U["User"]
  direction LR

  U1[Registration form]
  U2[Save draft]
  U3[Submit registration]
  U4["POST /user {submit:false}"]
  U5["POST or PUT /user/{user_id} {submit:true}"]
  U6[(DB User)]
  U7[(S3 documents store)]
  U8[ComplyAdvantage background check]
  U9{Preliminary approval?}
  U10[Remediation based on reason]
  U11[Final approval]
  U12[Registration completed]
  U13[Registration rejected]
  U14[Cognito group remitter]
  U15[User profile edit form]
  U16["PUT /me {...}"]
  U17[(DB Change Request)]
  U18[User edit approved]
  U19[User edit rejected]
  U20[Notify user]

  U1 --> U2 --> U4
  U1 --> U3 --> U5 --> U6
  U5 --> U7
  U6 --> U8 --> U9
  U9 -- Yes --> U11 --> U12 --> U14
  U9 -- No --> U10 --> U13 --> U20

  U15 --> U16 --> U17
  U17 --> U18 --> U20
  U17 --> U19 --> U20
end

%% =========================
%% BENEFICIARY
%% =========================
subgraph B["Beneficiary"]
  direction LR

  B1[Beneficiary creation form]
  B2[Save draft]
  B3[Submit beneficiary]
  B4["POST /me/beneficiary"]
  B5[(DB Beneficiary)]
  B6[ID and background check]
  B7{Approved?}
  B8[Beneficiary created]
  B9[Creation rejected]
  B10[Notify user]
  B11[7-year interval expiry routine]
  B12[Beneficiary edit form]
  B13["PUT /me/beneficiary/{beneficiary_id}"]
  B14[Beneficiary edited]
  B15[Edit rejected]
  B16["Unique phone/email collision → return existing beneficiary"]

  B1 --> B2
  B1 --> B3 --> B4 --> B5
  B5 --> B6 --> B7
  B7 -- Yes --> B8 --> B10
  B7 -- No --> B9 --> B10
  B5 --> B11

  B4 --> B16
  B12 --> B13 --> B5
  B13 --> B14 --> B10
  B13 --> B15 --> B10
end

%% =========================
%% TRANSACTION / REMITTANCE
%% =========================
subgraph T["Transaction / Remittance"]
  direction LR

  T1[Remittance estimate form]
  T2["GET /me/beneficiaries"]
  T3[Select beneficiary]
  T4[Pre-populate exchange based on corridor]
  T5["GET /exchange/latest?from_currency=XXX&to_currency=YYY"]
  T6[(DB Exchange)]
  T7[(DB Beneficiary)]
  T8[(DB User)]
  T9[Submit transaction]
  T10["POST /transaction"]
  T11[(DB Remittance)]
  T12{"User approved + beneficiary approved + user verified?"}
  T13[status = quoted]
  T14[Transactions view]
  T15["GET /me/transactions"]
  T16[Admin review quoted transactions]
  T17{Propose modification?}
  T18[Remittance edit form]
  T19[status = adjusted]
  T20[Notify user]
  T21{User accepts adjusted rate?}
  T22["POST /transaction/{transaction_id}/approve"]
  T23[status = approved]
  T24[status = cancelled]
  T25[Admin approve transaction]
  T26[Verify with external party]
  T27{Verified?}
  T28[status = sent]
  T29[Fulfill to foreign bank]
  T30[Check received / deposit]
  T31["Process refund of pending transactions"]

  T1 --> T2 --> T3 --> T4 --> T5 --> T6
  T3 --> T7
  T3 --> T8
  T1 --> T9 --> T10 --> T11 --> T12
  T12 -- Yes --> T13
  T12 -- No --> T24

  T14 --> T15 --> T11
  T13 --> T16 --> T17
  T17 -- Yes --> T18 --> T19 --> T20 --> T21
  T21 -- Yes --> T25
  T21 -- No --> T24
  T17 -- No --> T25

  T25 --> T22 --> T23 --> T26 --> T27
  T27 -- Yes --> T28 --> T29 --> T30
  T27 -- No --> T24

  T24 --> T31
end

%% =========================
%% EXCHANGE RATE
%% =========================
subgraph X["Exchange Rate"]
  direction LR

  X1[New exchange form]
  X2["POST /exchange"]
  X3[(DB Exchange)]
  X4[(DB Corridor)]
  X5[(DB Currency)]
  X6[Exchange rate offer]

  X1 --> X2 --> X3
  X3 --> X4
  X3 --> X5
  X3 --> X6
end

%% =========================
%% VENDOR / PERIODIC PROCESSES
%% =========================
subgraph V["Vendor / Scheduled Processes"]
  direction LR

  V1["AusTrack verify once daily where status = sent"]
  V2{Verified by vendor?}
  V3["Set is_verified = true, store ref"]
  V4[Cancel with vendor reason]
  V5[Fulfill once daily offset from verify]
  V6[Global IME deposit]
  V7[ZAI decision]

  V1 --> V2
  V2 -- Yes --> V3 --> V5 --> V6
  V2 -- No --> V4
  V5 --> V7
end

%% cross-links
U12 --> T1
B8 --> T1
X6 --> T4
T28 --> V1