Working Space

Prepared by: Gary T. for Checkpoint #3 discussions of the Technical Working Group.

This write-up is more appropriate for a workspace dedicated to the Technical Working Group - perhaps this one can be repurposed.

An assignment for the technical working group as part of Checkpoint #3 was to prepare suggestions for the Business Network Model including STATE and ASSETS.

An Excel document will be provided that includes the information below. These recommendations are to be peer reviewed by members of the Technical Working Group. These are not final thoughts - just ideas to stimulate initial design discussions in preparation for constructing our Minimum Viable Product/POC.

The focus in this write-up is on the transactions to be handled by the Validator (STATE persistence and transaction handling) in collaboration with the Transaction Processor.

BUSINESS NETWORK MODEL DESCRIPTION - general description to be used for developing the technical business network model.
A sample business network to understand the fundamental concepts - keeping it simple.
Initial design is a Minimum Viable Product (MVP) - bare bones to launch. Wish List features and functionality will be added to the Product Backlog
A MVP will also allow us to leverage code already available and quickly deploy our blockchain.
"We will need more than one Payload Type for the MVP. For example: ParticipantTransactionPayload: can be used to create or delete a participant (includes ID, Name, Location, and other properties) DeliveryTransactionPayload: see Transactions below."
USER STORIES IN MINIMUM VIABLE PRODUCT (MVP)
As a Paritcipant, I want to register as a user of the blockchain so that I can participate in the role of DONOR, VOLUNTEER, RECIPIENT
As a DONOR, I want to add a food item to the blockchain so that it can be delivered to a RECIPIENT
As a VOLUNTEER, I want to pickup an item that is shown as ready for delivery on the blockchain so that I can deliver it to a RECIPIENT
As a RECIPIENT, I want to receive a donated food item shown on the blockchain so that I can benefit from the donation.
As a SYSTEM, I want to update the statuses of transactions on the blockchain so that the state of a transaction is known.
BLOCKCHAIN PARTICIPANTS
DONOR: Donates a food item for delivery to a recipient by a volunteer
RECIPIENT: Beneficiary of a donated food item.
VOLUNTEER: Transports donor food item from DONOR to RECIPIENT
SYSTEM: Update blockchain transactions to maintain state and update other attributes needed for metrics/business intelligence
ORGANIZATIONS/ENTITIES/PEERS:
While the business network suggests 3 natural organizations/peers, make a decision about the most practical solution.
DONOR
TRANSPORTER
RECIPIENT
BLOCKCHAIN ASSET TYPE
FOOD ITEM: Only one asset in this MVP. It is a collective bucket of food items. Keep it simple.
ASSET STATUS - transition states of the asset.
PICKUP-READY: DONOR will notify blockchain users that an asset is ready for pickup and delivery to a RECIPIENT.
IN-TRANSIT: VOLUNTEER will notify blockchain users that an asset ready for pick-up has been retrieved from the DONOR for delivery to a RECIPIENT.
DELIVERED: VOLUNTEER will notify blockchain users that an asset has been delivered to a RECIPIENT.
RECEIVED: RECIPIENT will notify the blockchain users that an asset has been received from the DONOR.
"COMPLETED: SYSTEM will notify the blockdhain users that the food item has been successfully delivered from DONOR to RECIPIENT. System will update the running total of the value of goods delivered on the blockchain since genesis block added."
EXPIRED: SYSTEM will expire a donation if the food item is not IN-TRANSIT by the Deliver By date.
EVENTS:
AddParticipantEvent: Add DONOR, VOLUNTEER,RECIPIENT. Capture all requisite attributes/properties to generate keys, participant locations, etc.
DeleteParticipantEvent: Delete DONOR, VOLUNTEER, RECIPIENT
NotifyReadyForPickupEvent: Notify VOLUNTEERs that a food item is ready for pickup.
InTransitEvent: VOLUNTEER to notify that a food item has been picked-up and is in-transit to RECIPIENT.
DeliverEvent: VOLUNTEER to notify that a food item has been delivered to the RECIPIENT.
ReceiveDeliveryEvent: RECIPIENT to notify that a food item has been received from DONOR.
CompleteEvent: SYSTEM to log a transaction as completed successfully.
UpdateMetricEvent: SYSTEM to update the statistics/metrics being captured, e.g. update the total dollar value of all goods delivered to recipients to date.
ExpireEvent: SYSTEM to expire a donation following the established business rules for expiring a donation.
OPEN DISCUSSION ITEMS:
How do we identify which RECIPIENT should receive the PICKUP-READY food item?
When does a donation expire?
Food items to be picked-up should be in one record to keep it simple. For example, tomoatoes and oranges should be in one record.
A participant may have more than one location. To keep the MVP simple, assume one location per participant?
PRODUCT BACKLOG ITEMS - future system implementation
As a VOLUNTEER, I want to return an item in-transit if it cannot be delivered so that the DONOR can retain ownership of the goods donated.

TRANSACTIONS - DeliveryTransactionPayload

TRANS IDSTATUSDONORVOLUNTEERRECIPIENT"FOOD ITEM (ASSET)"ITEM-IDITEM VALUE"DELIVER-BY MM/DD/YYYY, TIME""CREATED MM/DD/YYYY, TIME"RECORDED_BY"ITEM VALUE TOTAL TO DATE "
Current ID+1PICKUP-READYFARMER-1

TomatoesTRANS ID + SEQ$100.007/1/19 9:00 PM7/1/19 10:00 AMDonor-ID/Key
Current ID+1IN-TRANSITFARMER-1VOLUNTEER-1FOOD BANK-1TomatoesTRANS ID + SEQ$100.007/1/19 9:00 PM7/1/19 6:00 PMVolunteer-ID/Key
Current ID+1DELIVEREDFARMER-1VOLUNTEER-1FOOD BANK-1TomatoesTRANS ID + SEQ$100.007/1/19 9:00 PM7/1/19 6:30 PMVolunteer-ID/Key
Current ID+1RECEIVEDFARMER-1VOLUNTEER-1FOOD BANK-1TomatoesTRANS ID + SEQ$100.007/1/19 9:00 PM7/1/19 6:30 PMReceiver-ID/Key
Current ID+1COMPLETEDFARMER-1VOLUNTEER-1FOOD BANK-1TomatoesTRANS ID + SEQ$100.007/1/19 9:00 PM7/1/19 6:30 PMSystem-ID/KeyCurrent Total + Item Value
Current ID+1PICKUP-READYFARMER-2

OrangesTRANS ID + SEQ$100.007/2/19 6:00 PM7/1/19 3:00 PMDonor-ID/Key
Current ID+1EXPIREDFARMER-2VOLUNTEER-3CHURCH PANTRY-3OrangesTRANS ID + SEQ$50.007/2/19 6:00 PM7/2/19 6:00 PMSystem-ID/Key