Transfer Analysis

flowchart TB

  %% Program: transfer

  start((Start))
  end_node((End))

  n2["repo <- AccountRepo (environment)"]
  n3["audit <- AuditLog (environment)"]
  n4["balance <- repo.getBalance <number, AccountNotFoundError, never> (service-call)"]
  decision_6{"balance < 100"}
  n7["fail <never, InsufficientFundsError, never>"]
  n8["repo.debit <void, InsufficientFundsError, never> (service-call)"]
  n9["repo.credit <void, AccountNotFoundError, never> (service-call)"]
  n10["audit.record <void, never, never> (service-call)"]

  %% Edges
  n2 --> n3
  n3 --> n4
  decision_6 -->|yes| n7
  n4 --> decision_6
  n7 --> n8
  decision_6 --> n8
  n8 --> n9
  n9 --> n10
  start --> n2
  n10 --> end_node

  %% Styles
  classDef startStyle fill:#c8e6c9,stroke:#2e7d32
  classDef endStyle fill:#ffcdd2,stroke:#c62828
  classDef effectStyle fill:#90EE90,stroke:#333,stroke-width:2px
  classDef decisionStyle fill:#DDA0DD,stroke:#333,stroke-width:2px
  class start startStyle
  class end_node endStyle
  class n2 effectStyle
  class n3 effectStyle
  class n4 effectStyle
  class decision_6 decisionStyle
  class n7 effectStyle
  class n8 effectStyle
  class n9 effectStyle
  class n10 effectStyle