npm

Need private packages and team management tools?Check out npm Orgs. »

letters-of-credit-network

0.2.5 • Public • Published

Letters of Credit Network

This network tracks letters of credit from application through to closure.

Models within this business network

Participants

Customer, Bank Employee

Assets

LetterOfCredit

Transactions

InitialApplication, Approve, Reject, SuggestChanges, ShipProduct, ReceiveProduct, ReadyForPayment, Close, CreateDemoParticipants

Events

InitialApplicationEvent, ApproveEvent, RejectEvent, SuggestChangesEvent, ShipProductEvent, ReceiveProductEvent, ReadyForPaymentEvent, CloseEvent

Example use of this Business network

Two parties, each a Customer of a bank come to an agreement that Party A will import x number of Product Y from Party B.

Party A uses their banking application to request a letter of credit using details from the agreement. The banking application submits an InitialApplication transaction which creates a new LetterOfCredit asset containing details of the two parties, their banks and their agreement.

A BankEmployee at Party A's bank uses the banks internal application to review the letter of credit. The employee decides they do not like the rules set out in the application and therefore they decide to suggest changes using their application to submit a SuggestChanges transaction.

Party A is alerted on their banking application that changes have been suggested in the letter of credit. Party A reviews the changes to the rules suggested by their bank and approves the changes using their banking application to submit an Approve transaction.

The letter is now approved by both Party A and their bank. A BankEmployee at Party B's bank uses the banks internal application to review the letter of credit. The employee uses their application to submit an Approve transaction to mark that Party B's bank is happy with the issuance of the letter of credit to their customer, Party B.

Party B is alerted to the letter of credit in their banking application. They use the application to review the letter and approve it using their application to submit an Approve transaction. The letter is now unable to be changed any further.

Once Party B has manufactured the goods and sent them for shipping Party B uses their banking application to access the letter of credit and mark the goods relating to it as shipped using a ShipProduct transaction, passing with the transaction a hash of the shipping documents to be used as proof of shipping.

When the goods arrive at their destination Party A reviews what they have received and checks that the received goods match the rules set out in the letter of credit. Party A is happy that they do and uses the banking application to submit a ReceiveProduct transaction.

A BankEmployee at Party A's bank is alerted that Party A has stated that the goods are received. The employee does their own checks on the goods against the letter of credit rules and then uses their banking application to submit a ReadyForPayment transaction. Their own internal system then transfers funds to Party B's bank.

A BankEmployee at Party B's bank is alerted that the letter of credit is ready to be paid and confirms that Party A has transferred the funds. The employee uses their banking application to close the letter of credit using a Close transaction and pay the money into Party B's account.

Testing this network within playground

The steps below will simulate the above scenario within playground.

Navigate to the Test tab and then submit a CreateDemoParticipants transaction:

{
  "$class": "org.example.loc.CreateDemoParticipants"
}

Navigate to the ID registry and generate IDs for:

org.example.loc.Customer#alice
org.example.loc.Customer#bob
org.example.loc.BankEmployee#matias
org.example.loc.BankEmployee#ella

Select to Alice to be your identity.

Navigate to the Test tab and then submit an InitialApplication transaction to request a letter of credit. The application will cover Alice and Bob's prior agreement to the following:

  • Bob will deliver 100 computers
  • Alice will pay $450 for each computer
  • The computers will be received in working order
  • The computers will be received within 30 days
{
  "$class": "org.example.loc.InitialApplication",
  "letterId": "LETTER-REF-123",
  "applicant": "resource:org.example.loc.Customer#alice",
  "beneficiary": "resource:org.example.loc.Customer#bob",
  "rules": [
    {
      "ruleId": "LETTER-REF-123-RULE-1",
      "ruleText": "The computers will be received in working order"
    },
    {
      "ruleId": "LETTER-REF-123-RULE-2",
      "ruleText": "The computers will be received within 30 days"
    }
  ],
  "productDetails": {
    "$class": "org.example.loc.ProductDetails",
    "productType": "Computers",
    "quantity": 100,
    "pricePerUnit": 450
  }
}

This creates a LetterOfCredit asset and sets the issuingBank to be Alice's bank and exportersBank to be Bob's bank.


Use the ID registry to select Matias to be your identity.

Matias works at Alice's bank. Review the letter of credit by selecting the LetterOfCredit asset. Matias decides that the rules are not suitable for the bank and therefore he decides to suggest changes.

Submit a SuggestChanges transaction to change the rules:

{
  "$class": "org.example.loc.SuggestChanges",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "rules": [
      {
      "ruleId": "LETTER-REF-123-RULE-1",
      "ruleText": "The computers will be received in working order"
    },
    {
      "ruleId": "LETTER-REF-123-RULE-2-UPDATED",
      "ruleText": "The computers will be received within 15 days"
    }
  ],
  "suggestingParty": "resource:org.example.loc.BankEmployee#matias"
}

This transaction clears the array LetterOfCredit asset's approval field, updating it contain only the suggesting party and replaces the rules with the updated rules.


Use the ID registry to select Alice to be your identity.

Review the changes made to the letter of credit by selecting the LetterOfCredit asset. Alice agrees with the changes and decides she will approve.

Approve the letter by submitting an Approve transaction:

{
  "$class": "org.example.loc.Approve",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "approvingParty": "resource:org.example.loc.Customer#alice"
}

This transaction adds Alice to the array of parties in the approval field of the LetterOfCredit asset.


Use the ID registry to select Ella to be your identity.

NOTE: Alice doesn't have permission to see Ella and therefore you must switch via admin first.

Ella works at Bob's bank. Review the letter of credit by selecting the LetterOfCredit asset. Ella decides that the letter of credit is acceptable to her bank and that she will approve the request.

Approve the letter by submitting an Approve transaction:

{
  "$class": "org.example.loc.Approve",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "approvingParty": "resource:org.example.loc.BankEmployee#ella"
}

This transaction adds Ella to the array of parties in the approval field of the LetterOfCredit asset.


Use the ID registry to select Bob to be your identity.

Bob reviews the letter of credit to ensure that it matches with his and Alice's agreement. He notices that the rules don't quite match the agreement however he still decides to accept the letter of credit and go through with the deal.

Approve the letter by submitting an Approve transaction:

{
  "$class": "org.example.loc.Approve",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "approvingParty": "resource:org.example.loc.Customer#bob"
}

This transaction adds Bob to the array of parties in the approval field of the LetterOfCredit asset. As now all the parties have submitted their approval the status field is also updated to be APPROVED. At this point no participant may reject or suggest changes to the letter. Further participants (e.g. other bank employees) are also blocked from adding their approval.

Bob manufactures the computers and ships them. He updates the LetterOfCredit asset to add proof that he has shipped the goods.

Submit a ShipProduct transaction:

{
  "$class": "org.example.loc.ShipProduct",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "evidence": "337478411cab754ce47fcaa72ec1d0f6"
}

This transaction updates the status field of the LetterOfCredit asset to be SHIPPED and adds the evidence provided (in this case a hash of the shipping invoice) to the evidence array.


Use the ID registry to select Alice to be your identity.

Alice now receives the goods and has inspected them. The goods arrived within 14 days and were in working order and therefore Alice decides to update the letter of credit to show she has accepted delivery.

Submit a ReceiveProduct transaction:

{
  "$class": "org.example.loc.ReceiveProduct",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123"
}

This transaction updates the LetterOfCredit asset to have a status of RECEIVED.


Use the ID registry to select Matias to be your identity.

Matias inspects the goods received by Alice and agrees that they meet the rules set out in the letter. He therefore decides to approve the transfer of funds to Bob's bank and updates the letter of credit to show that these funds are ready.

Submit a ReadyForPayment transaction:

{
  "$class": "org.example.loc.ReadyForPayment",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123"
}

This transaction updates the status of the letter of credit to be READY_FOR_PAYMENT. The payment is not covered by this network.


Use the ID registry to select Ella to be your identity.

NOTE: Matias doesn't have permission to see Ella and therefore you must switch via admin first.

Ella having received the funds from Alice's bank can close the letter of credit and deposit the funds in Bob's bank account.

Submit a Close transaction:

{
  "$class": "org.example.loc.Close",
  "loc": "resource:org.example.loc.LetterOfCredit#LETTER-REF-123",
  "closeReason": "Payment made"
}

This transaction updates the status of the letter to be CLOSED. The letter is now complete and no further transactions can take place.

This business network has been used to create demo application that simulate the scenario above. You can find more detail on these at https://github.com/hyperledger/composer-sample-applications/tree/master/packages/letters-of-credit

License

Hyperledger Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the LICENSE file. Hyperledger Project documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/.

install

npm i letters-of-credit-network

Downloadsweekly downloads

52

version

0.2.5

license

Apache-2.0

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability