Menu structure

Table of Contents

1. Summary

There is one menu and one set of cards. They are the same for every person. An area is drawn for a person who holds the read that one of its screens needs. A card is drawn for a person who holds the read of its screen. Nothing in the menu or in an area is written for a kind of user, because permissions change over time and a role is only a bundle of them. Every screen belongs to one area, and that area is the middle of its breadcrumb: Home, the area, the screen, with a folder of the area between them when the screen is in one. An area is a topic that a person looks in, such as Reference data, and never one kind of record. A party and everything about a party is in Reference data. A person's own pages are in the account menu and not in the menu.

2. Detail

2.1. Where this page applies

This page governs the menu in the header of the shell, the cards on each area page, and the breadcrumb of every screen. A card on Home is a shortcut to a screen and is not a second home for it.

The Entity screen specification and the Record screen standard already say that a breadcrumb is Home, the area, the list, then the subject, and that the menu offers an entry by the narrowest read the screen needs. This page names the areas and says which screen belongs to which.

2.2. Words

Word Meaning
Menu The list of areas in the header. It is one list
Area One entry of the menu, and the page of cards it opens
Card A tile. It is a folder card, a file card or a workflow card
Folder card A card that opens a page of more cards, such as an area. It is named for the area
File card A card that opens one screen. It has the screen's name, word for word, in every language
Workflow card A card that starts a workflow. Its title is a verb and its object. It has its own hue and a tag
CRUD command Add, Edit or Delete: one record, one write, in a dialog. It is a button on a record list or page, never a card
Workflow A guided sequence of steps with several writes, with a step rail. It is not a CRUD command. A user journey is the design document of one, and is not a name for a screen
Read The permission a screen needs. It is the only thing that decides what is drawn
Account menu The person's own pages and signing out. It is not part of the menu

2.3. Folder cards and file cards

A card is like an entry in a file manager.

  • A folder card opens a page of cards. The areas are folders. A folder card has the name of its area and a line about what is in it.
  • An area may hold a folder card of its own when a topic inside it has several screens that belong together: Synthetic, in Market data. Its page follows the rule of an area page, and its name is the topic, never one kind of record. A folder holds screens, not other folders. Synthetic is the only folder inside an area today; another is added here first, with the topic it holds.
  • A file card opens one screen. Its title is the title of the screen, word for word, in English, French and Portuguese. Its line is a short form of the screen's own lead. It has the glyph of the screen.

A screen has one definition of its card (shell/cards.ts). The area page and Home both draw from it, so a screen has the same name, line and glyph wherever it is offered. A screen that has no header of its own, such as a journey, takes its title, its line and its trail from its file card (CardScreen). A test holds the card title and the screen title equal in every language.

Home's Active modules tab shows one folder card for each area the person is offered, in the order of the menu, and then the cards of their own account. It does not repeat the file cards of the areas. A person opens a folder to reach its screens.

2.3.1. Workflows

A workflow is a guided run of steps. Onboard a party, Onboard a counterparty, Shape the book structure and Define instrument conventions are workflows. They are not CRUD commands, and the two are not given each other's names.

A workflow is kept only where the guidance has a value that an ordinary edit does not: Onboard a party provisions a hierarchy of parties from a legal entity, links the accounts that work in them and publishes their data. Correcting a party is not such a task. A party is changed on its own page, with an Edit button on each card, as a currency is.

  • A workflow is listed on the screen of the thing it acts on. The Parties list has a Workflows menu in its header with the three party workflows. A person who looks at the parties finds how to onboard one there.
  • A workflow that has no such screen has a workflow card on its area page.
  • A workflow is never listed in both places.
  • A workflow card is teal and carries the tag Workflow, so it is not mistaken for a screen card. The menu on a screen lists the workflows the person may start, and is not drawn when there are none.
  • The trail of a workflow is Home, the area, the workflow: Home › Reference data › Onboard a party.

2.3.2. The area page

An area page, and the page of a folder card inside an area, is the cards of its folder and nothing else: no headings, no groups and no dashboard. A summary of the folder's topic is a screen with its own file card. The cards are dense, with the glyph beside the name and one line, so the page fits on a screen. The screens come first, then the workflow cards.

2.4. The rule

  • The menu is one list, in one order. It has no version for a mode, a role or a kind of user.
  • An area is drawn when the person holds the read that any one of its screens needs. If the person holds none, the area is not drawn. It is not disabled.
  • An area page shows the same cards to everyone. A card is drawn when the person holds the read of its screen. If they do not, the card is not drawn.
  • No area, card or screen is named for a role. A role is a set of permissions that changes. The screen names the read it needs, and the read decides.
  • A new screen is added to the area it belongs to. It then appears for every person who holds its read, with no change to the menu.
  • The breadcrumb of a screen is Home, then its area, then the screen. A screen in a folder of the area has the folder between the area and the screen. A record page adds the list and the subject, as the entity specification says.
  • A screen has one area. A card on Home or in another area leads to it, and the screen still shows the trail of its own area.

2.5. Why the menu was confusing

The menu had seven entries, and they were of three different kinds.

  • Some were a kind of record: Parties.
  • Some were a body of data: Reference data.
  • Some were a question the person asks: Requests, Operations.

A person cannot guess where a screen is when the entries answer different questions. Parties was drawn beside Reference data, but the party journeys are reference data: a party is made of identifiers, contacts, countries, currencies and business centres, all of which are reference data. So a person who looked in Reference data for a party did not find it.

Four other faults made it worse.

  • The same screen had two addresses, such as /classifications and /refdata/classifications, and /hierarchy and /reporting-lines.
  • Home repeated the screens as cards with other names, so one screen had two labels.
  • A person's own pages (/access, /where-i-work, /profile, /security) were mixed with the pages about other people.
  • Some areas were named for a record kind and others for a topic, so the menu had no one rule for what an entry is.

2.6. The rule for an area

An area is a topic that a person goes to, and its name is the journey group that User Journeys uses for it. It is never one kind of record. A kind of record is a card inside the area whose topic it belongs to.

The test for a screen is one question: which topic would a person look in?

Topic The question the person asks
Reference data What are the things the work is made of?
Organisation Who is here, and what may they do?
Trades What does the tenant hold, and what happens to it?
Requests What is waiting for an answer?
Operations How is the installation running, and who has signed in?
Reporting What has a party run, and how did each run go?
Development What is the team doing to the product, and what can a tester run?
Tenants Which tenants does this installation hold?

2.7. The areas

Home   Reference data   Organisation   Market data   Trades   Requests   Operations   Reporting   Development   Tenants
Area Screens Drawn when the person holds the read of
Home The dashboard, Active modules, Upcoming modules Always
Reference data The cards below Always
Organisation Staff, Hierarchy, Roles and Rescue access Any one of those screens
Market data The prices and curves the platform receives or generates: the Catalogue, Subscriptions, Usage and cost, the Simulator (with the Synthetic screen), and the curve evolution Any one of those screens
Trades Trades, and Structures and packages, with the workflows Import a portfolio from ORE, Export a portfolio to ORE and Group trades Any one of those screens
Requests Every request, a person's own, and the queue of those who decide Always, because every person has their own
Operations Running services, Compute grid, Message bus, Telemetry logs, Versions and the database, and Sign-ins Any one of those screens
Reporting Reports, the definitions a party runs, and the cuts they price from Any one of those screens
Development The tests a tester can run, the board and the backlog, and the documents they open Always
Tenants The tenants, their parties and people, and onboarding The read of the deployment

Requests is the one entry that is not a topic. It is an inbox: the work that waits for a person, with the notification bell beside it. It is not in Operations, which says how the system is running, and not in Organisation, because four-eyes approval will cover reference data as well as access. Every person has their own requests, so the entry is drawn for everyone.

Tenants is last because it serves only the installation, and it is drawn only for a person who holds the read of the deployment (see The deployment read).

2.7.1. Market data

Market data is its own area. It holds data that changes by the minute: the feeds that generate prices and the curves built from them. Reference data is a list that changes by the month, and a person who looks for a curve does not look in it. It holds the four areas the service screens page names: Catalogue, Subscriptions, Usage and cost, and Simulator, plus Watch a curve evolve.

Synthetic is one screen for the feeds the platform generates rather than receives. It sits in the Simulator area, with the collections and the authoring tools. Everything on it is synthetic, so no label says so; the Catalogue holds the providers, sources and vendor instruments, live and simulated alike. The screen has two tabs:

Tab What it shows
Dashboard The providers, what each one simulates, what runs, and one banner that counts the feeds that should run and do not. A provider can be started or stopped as a whole.
Feed tree The providers and their folders beside a paged table of feeds, filtered by state, asset class and words. A person picks rows, or every row the filter matches, and starts or stops the pick with one button. A row opens the feed's own page.

A feed's page is the record page of the feed, and its breadcrumb runs through the feed tree: Home, Market data, Synthetic, Feed tree, the folders down to the feed's asset class, then the feed. Each folder on it opens the feed tree with that folder chosen. The FX and IR lists are gone; the feed table lists both kinds.

The Bindings card is gone. A party's choice to consume a provider's data is a subscription with rights, and a route picks the source that serves it. Both sit under Subscriptions, on the record screen of the Record screen standard.

Each card is drawn for a person who holds the read of its screen.

2.7.2. Reference data

Cards Journeys
Parties, with the workflows Onboard a party and Onboard a counterparty Parties, and new party in Setup
Currencies, Currency pairs, Desk groups Currencies and FX
Holiday calendars, Resolve a tenor Calendars, Tenors
Classifications Classifications
The workflows Shape the book structure and Define instrument conventions Books and portfolios, Conventions

A party and everything about a party is reference data. None of it has an entry in the menu.

Operations is not an area of one kind of user. It holds every screen that says how the installation or the tenant is running. Each screen in it needs its own read, so a person sees the cards they may open. Versions needs no read, because every person must be able to report a problem to IT and says which build they use. So the Operations area is drawn for every person. A later screen that serves only some people is added to Operations and guarded by its read. It does not get an area of its own.

2.7.3. Trades

Cards Journeys
Trades, with the Book a trade button, and the workflows Import a portfolio from ORE, Export a portfolio to ORE and Group trades Trade journeys
Structures and packages Trade journeys, and Trade Structures and Deal Composition

A trade is an entity, so it has a list and a page of its own and is not a card of Reference data. Trades is its own area because the question a person asks of it differs from the question they ask of reference data: reference data is what the work is made of, and a trade is what the tenant holds. A structure is the tree of a deal, and a package is a structure of kind Package, so one screen serves both. The Trade entry prototype named its subject a structure and sat under Books and portfolios. It now sits with the other prototypes of this area: see the Trades prototypes.

Book a trade is the Add of the trade list: a button in the list header that opens the new-trade page. It is not a workflow, because the page has no step rail. It is one page in tabs, and the Entity screen specification says how.

2.7.4. Reporting

Reporting is the topic of what a party has run, and of the configurations a report binds. It holds Reports: every report definition the session's party owns, with the health of its latest run, and one definition's own page. It also holds the configuration screens, one per kind a person creates and changes, each named as the Configuration screen standard names it. Today those are Pricing engine configurations and Engine run settings.

It also holds Cuts: the bodies a run prices from, with the state each one is in, the runs that priced from it and one cut's own page. A cut exists for one purpose, the valuation a run computes, so a person who asks what a number was computed from looks where the reports are. The kinds of cut sit in Reference data, because they are a lookup that changes by the month and both the take and the resolution read them.

A report is produced by a schedule the party set, so a person who asks what the party ran and whether the run worked looks here and not in Operations, which says how the installation is running.

The area page reads reporting::report_definitions:read, so it is drawn for a person who holds that read and for nobody else. Each screen inside the area asks for its own read, and its writes ask for the write permission of its kind.

Reporting sits after Operations and before Development: what a party ran follows how the installation runs, and it is not work the team does on the product.

The trail of the list is Home, Reporting, Reports. A definition's page adds the definition's name: Home, Reporting, Reports, then the name.

2.8. The account menu

The account menu stands in the header with the notification bell. It holds My profile, My access, Where I work, Security and signing out. These are not areas. A person reaches each in one place, as the entity specification says. Each has a breadcrumb of Home, then the page, because it belongs to no area.

Every screen has a breadcrumb. Home is the one page without one, because it is the first step of every trail.

2.9. Where a screen belongs

Screen Area Why
Parties, and its workflows Onboard a party and Onboard a counterparty Reference data A party is reference data. The journeys group it with the countries, currencies and business centres it connects to
Shape the book structure, Define instrument conventions Reference data They are workflows on shared lists
Currencies, Currency pairs, Desk groups, Holiday calendars, Classifications Reference data They are the shared lists
Resolve a tenor, with the workflow Define how tenors resolve Reference data A trader reads one date out of the shared tenor rules. Authoring those rules is a workflow on the screen, so reading is not the price of arriving
Staff, Hierarchy Organisation They are about the people of the tenant
Roles Organisation A role is held by a person
Rescue access Organisation It acts on one person's account: it unlocks it. Sign-ins only reads sessions, so the two are not the same kind of screen and do not share an area
Sign-ins Operations It reads sessions and failed sign-ins. It is the Audit of how the installation is used
Market data feeds Operations It reads the adapter state of every feed the market data service runs, which is how the installation is running and not what a party takes
Reports Reporting A report definition is owned by the party that runs it, and Reporting is the topic a person looks in for what the party ran and how each run went
Cuts Reporting A cut is the body a report's run prices from, and a person who asks what a number was computed from looks where the reports are
Cut types Reference data A kind of cut is a lookup a person maintains: its rules the take, the resolution and the archive read, and it changes by the month as the currencies and calendars do
Tests, Board, Backlog Development They are the work a team does on the product, not how an installation runs
Versions and the database Operations They state the build and the store
Requests Requests It is the one place for every kind of request
Synthetic, Watch a curve evolve Market data A feed generates the prices that market data holds, and a curve is one of them
Subscriptions Market data A subscription says what a party takes and a route says which feed serves it, so it belongs with the data the party reads
Bindings Market data A binding says which producers a party consumes, so it belongs with the data it carries and not with the feeds that produce it
Trades, Book a trade, Import a portfolio from ORE, Export a portfolio to ORE Trades A trade is held by the tenant and is not a shared list
Structures and packages, Group trades Trades A structure is the tree of a deal made of trades
Tenants Tenants The roster of the installation

2.10. Addresses

A screen is under the address of its area, so the address and the breadcrumb say the same thing. A screen has one address.

Screen Address
Parties /refdata/parties
Onboard a party /refdata/parties/new
A party's page /refdata/parties/:id
Onboard a counterparty /refdata/counterparties/onboard
Shape the book structure /refdata/books/structure
Define instrument conventions /refdata/conventions
Classifications /refdata/classifications
Staff /organisation/people
Hierarchy /organisation/hierarchy
Roles /organisation/roles
Rescue access /organisation/rescue
Sign-ins /operations/sign-ins
Market data feeds /operations/market-data-feeds
Reporting, the area page /reporting
Reports /reporting/reports
A report definition's page /reporting/reports/:id
Pricing engine configurations /reporting/pricing-engines
Engine run settings /reporting/engine-settings
Cuts /reporting/cuts
A cut's page /reporting/cuts/:id
Cut types /refdata/cut-types
A kind of cut's page /refdata/cut-types/:code
Development, with its tabs Tests, Board and Backlog /development
A test scenario /development/tests/:id
A document /development/docs/:id
Trades /trades
Book a trade /trades/new
A trade's page /trades/:id
Import a portfolio from ORE /trades/import
Export a portfolio to ORE /trades/export
Structures and packages /trades/structures
A structure's or package's page /trades/structures/:id
Group trades /trades/structures/new
Subscriptions /market-data/subscriptions
Synthetic, the Dashboard tab /market-data/synthetic
Synthetic, the Feed tree tab /market-data/synthetic?tab=tree
An FX price feed's page /market-data/synthetic/fx/:id
An IR curve feed's page /market-data/synthetic/ir/:id

The earlier addresses (/parties, /people, /hierarchy, /staff, /roles, /rescue, /audit, /classifications, /reporting-lines) redirect to the new ones, so a saved link still works.

2.11. The deployment read

Some screens read the installation as a whole, across every tenant: Tenants, and the Running services, Compute grid, Message bus and Telemetry logs cards of Operations. They are drawn, and the server serves them, for a person who holds installation::deployment:read. The session mode is not consulted.

  • The code is in the installation component. The wildcard * does not cover an installation code, because a tenant's administrator holds * and would then see the installation. Only the code itself, or installation::*, grants one. The rule is stated once for the services (grants in ores.security) and once for the browser and the BFF (permissionCovers in @ores/contracts).
  • The super administrator role holds the code by name. Another role is given it the same way, and a person asks for that role through a request.
  • The BFF reads the caller's roles for each call and refuses a caller who does not hold the code. A grant the caller lost stops the next read.

2.12. How today's menu differs

The menu, the cards, the addresses and the breadcrumbs follow this page. Synthetic is one screen with a Dashboard and a Feed tree at the addresses above. A feed's page has the trail Home, Market data, Synthetic, Feed tree, the folders down to the feed, then the feed.

2.13. Not built yet

The Trades area has its first screen: the trade list at /trades, read through the BFF's trading route and the trade summary read model. It is drawn for a person who holds the reads it needs. Structures and packages, the trade page and Book a trade follow, and the area becomes a page of cards when the second screen exists, as every other area is.

Market data has no screen for curve surfaces or for feeds of other kinds yet. They are added to the Market data area when they have screens; a feed of a new kind joins the Feed tree.

The Synthetic screen, with its Dashboard and its Feed tree, is designed in the Synthetic feeds prototype and built by the tasks of Organise feeds by provider and scope.

2.14. Changing the menu

Work in this order. Each step ends in something to check.

  1. Name the screen and the narrowest read it needs.
  2. Choose its one area by asking which topic a person would look in. If none fits, add the topic here first. Never add an area for one kind of record.
  3. Add the screen to the area page as a card, drawn only for a person who holds the read.
  4. Give the screen a breadcrumb of Home, the area and the screen, with the folder between when the screen is in a folder of the area.
  5. Run the walk, shell/walk.test.tsx. It opens every screen of the cards, every area page and each page of a person themselves, and checks the address is under its area and the trail is Home, the area, the screen. A route the walk does not know fails it.
  6. Check it with a person who holds the read and a person who does not. The first sees the card. The second sees neither the card nor, when it was the only one, the area.

3. See also

Emacs 29.3 (Org mode 9.6.15)