User Journey: Amend a trade's economics

Table of Contents

This page documents a user journey: A trader changes the agreed terms of a live trade, and the change moves the trade's external version.

A user journey describes what one person is trying to do, before anything is built. It is a design document that outlives any sprint. These trade journeys are use cases, so they name the operations and messages each step needs and leave the screens to the UX standards.

1. Goal

"The deal changed after we booked it, and I want the firm's record to say what was agreed now, with the reason, and I want everyone who relies on the trade to see that it changed." The journey is done when the trade reads with the new terms, a new version and an activity that names the reason, and the external version has moved if the change was economic.

2. Actor and trigger

The actor is a trader, or an operations user acting for one. The trigger is a correction of a booking error, or an agreed change to the terms of a live trade. The journey starts on a trade and ends when the amendment is saved, awaits confirmation, or is refused.

3. Steps

  1. Open the trade. The person opens the trade they want to change.
  2. Say what kind of change it is. The person chooses the activity first: an amendment of the economic terms, a change of reference details, a correction of a misbooking, or a null amend. The kind of change bounds what the person may edit. A person who chooses an economic amendment cannot edit a field that is not economic. The system offers only the activity types the state machine allows from the trade's present state.
  3. Change the terms. The person edits the part of the trade that changed: an instrument term, a leg, a booking field or an identifier. The person changes one part at a time and gives a reason each time.
  4. Review the effect. The system shows the fields that changed and says whether the change is economic. An economic change moves the trade's external version. A change that is not economic does not.
  5. Save. The system writes the activity and the component versions that the activity causes, and shows the new versions.
  6. See what follows. A confirmable change issues a new confirmation to the counterparty, and the amended terms wait for it.
  7. Handle a refusal. The system refuses a stale write, a change the state does not allow, and a field that fails a check. The trade stays as it was.

4. Screens

This journey is a use case. The trade page serves it: an Edit button on each card opens a dialog that asks for the change and the reason, as the Entity screen specification requires. History shows the result. There is no separate amend screen. A prototype must show the activity type, the state check and the economic mark inside that dialog.

The Trades prototypes draw it in trade-page: Edit on the Instrument card. No wireframe is drawn here. The prototype story draws the screens, from the UX standards and from this use case.

5. Entities composed

Entity What it contributes Model
trade_activity The event that causes the change ores.trading.trade_activity

6. Operations and messages

Step Operation Subject Status
Open Read the trade and its parts trading.v1.trades.get, trading.v1.<instrument>s.get exists
Kind of change Offer the activity types trading.v1.activity_types.list exists
Kind of change Say which activity types the state allows none missing
Change Write an instrument or a child trading.v1.<instrument>s.put, put_many of a child exists
Save Write the activity and the versions it causes in one transaction none missing
Review Say whether a change is economic none; the digest is computed on the server missing

Status is one of exists, partial, or missing. A subject that contains <instrument> stands for the one instrument table the trade type routes to. The plural is written with a plain s. A table whose plural is irregular, such as trade_activities, has its own subject: check the protocol header, not the pattern.

7. What is missing

  • Nothing writes an activity with the versions it causes in one transaction. Only book_trade does. An amendment is several writes today.
  • Nothing tells the client which activity types the present state allows. The state machine is in the model and the client cannot ask.
  • Nothing tells the client whether a change is economic before it saves. The server computes the digest and moves the external version afterwards.
  • The economic digest does not read the option's exercise prices or a composite trade's legs. A change to either does not move the external version. Fix both before this journey is built. The captures are linked below.
  • The party and the counterparty are fixed for the life of a trade. A change to either is a cancel and rebook, which the lifecycle journey covers, and not an amendment. See Trade Versioning.
  • The confirmation the counterparty gives has no operation and no journey. The escalation of some reasons to a head of desk belongs to the story Build the four-eyes framework.

8. Related journeys

9. Related knowledge

10. See also

Emacs 29.3 (Org mode 9.6.15)