Menu structure
Table of Contents
- 1. Summary
- 2. Detail
- 2.1. Where this page applies
- 2.2. Words
- 2.3. Folder cards and file cards
- 2.4. The rule
- 2.5. Why the menu was confusing
- 2.6. The rule for an area
- 2.7. The areas
- 2.8. The account menu
- 2.9. Where a screen belongs
- 2.10. Addresses
- 2.11. The deployment read
- 2.12. How today's menu differs
- 2.13. Not built yet
- 2.14. Changing the menu
- 3. See also
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
/classificationsand/refdata/classifications, and/hierarchyand/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
installationcomponent. The wildcard*does not cover an installation code, because a tenant's administrator holds*and would then see the installation. Only the code itself, orinstallation::*, grants one. The rule is stated once for the services (grantsinores.security) and once for the browser and the BFF (permissionCoversin@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.
- Name the screen and the narrowest read it needs.
- 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.
- Add the screen to the area page as a card, drawn only for a person who holds the read.
- 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.
- 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. - 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
- UX — the cluster this page belongs to, and the order to read it in
- UX — the structure note that orders this cluster, and where to read this page in it.
- Entity screen specification — the breadcrumb of a list and a page, the menu's narrowest read, and the account menu
- Record screen standard — the addresses and the breadcrumb of a record list and page
- UX Language — History versus Audit, and the access mark
- UI design principles — the navigation context a screen needs
- Operations journeys — the screens of the Operations area
- Audit sign-ins — the journey of the Sign-ins screen
- User Journeys — what each person is trying to do