@startuml

title Initiate Transaction

hide footbox

autonumber

box "Mobile Device" #Light
  actor Alice
  participant "PISP App" as App
end box
box "PISP" #Light
  database Firebase
  participant "PISP Server" as Server
end box
box "Mojaloop" #Light
  participant "Switch" as Mojaloop
end box

Alice -> App: Initiate this transaction

rnote right of App #Light
  ""firebase.firestore()""
  ""  .collection("transactions")""
  ""  .doc("456")""
  ""  .set({""
  ""    uid: "bob1234",""
  ""    sourceAccountId: "bob.fspb",""
  ""    consentId: 123,""
  ""    amount: {""
  ""      amount: 20.00""
  ""      currency: "USD"""
  ""    },""
  ""    payee: {""
  ""      name: "Alice Alpaca",""
  ""      partyIdInfo: {""
  ""        partyIdType: "MSISDN",""
  ""        partyIdentifier: "+1-222-222-2222",""
  ""        fspId: "fspa"""
  ""      }""
  ""    },""
  ""    payer: {""
  ""      personalInfo: {""
  ""        complexName: {""
  ""          firstName: "Bob",""
  ""          lastName: "Beaver"""
  ""        }""
  ""      },""
  ""      partyIdInfo: {""
  ""        partyIdType: "OPAQUE",""
  ""        partyIdentifier: "bob1234",""
  ""        fspId: "fspb",""
  ""      }""
  ""    },""
  ""    status: "PENDING"""
  ""  })""
end rnote

App -> Firebase ++: Create a new transaction document
Firebase <-- App: ""200 OK""

rnote right of Firebase #Light
  ""event(""
  ""  "document.create",""
  ""  "transactions/456",""
  ""  <snapshot object>""
  "")""
end rnote

Firebase -> Server ++: Notify creation of transaction document
Firebase <-- Server: ""200 OK""
deactivate Firebase

rnote right of Server #Light 
  ""**POST /thirdpartyRequests/transactions**""
  ""FSPIOP-Source: pisp""
  ""FSPIOP-Destination: fspb""
  ""{""
  ""  "transactionRequestId": "456",""
  ""  "sourceAccountId": "bob.fspb",""
  ""  "consentId": "789",""
  ""  "payee": {""
  ""    "partyIdInfo": {""
  ""      "partyIdType": "MSISDN",""
  ""      "partyIdentifier": "+1-222-222-2222",""
  ""      "fspId": "fspa"""
  ""    }""
  ""  },""
  ""  "payer": {""
  ""    "personalInfo": {""
  ""      "complexName": {""
  ""        "firstName": "Bob",""
  ""        "lastName": "Beaver"""
  ""      }""
  ""    },""
  ""    "partyIdInfo": {""
  ""      "partyIdType": "OPAQUE",""
  ""      "partyIdentifier": "bob1234",""
  ""      "fspId": "fspb"""
  ""    }""
  ""  },""
  ""  "amountType": "SEND",""
  ""  "amount": {,""
  ""    "amount": "20",""
  ""    "currency": "USD"""
  ""  },""
  ""  "transactionType": {""
  ""    "scenario": "TRANSFER",""
  ""    "initiator": "PAYER",""
  ""    "initiatorType": "CONSUMER"""
  ""  },""
  ""  expiration: "2020-07-15T22:17:28.985-01:00"""
  ""}""
end rnote

Server -> Mojaloop ++: ""**POST /thirdpartyRequests/transactions**""
Server <-- Mojaloop: ""202 Accepted""

...

note over Alice, Mojaloop
  Transaction processes happen in Mojaloop (validation and quoting).
end note

...

@enduml
