User Journey: Find a convention by its terms
Table of Contents
This page documents a user journey: A person holding a set of terms searches a kind for the document that states them, or learns that none does.
A user journey describes what one person is trying to do, before anything is built. It is a design document that outlives any sprint, so it names the screens, the entity fields each screen shows, and the operations and messages each step needs.
1. Goal
"I know the terms: AED, annual, ACT/365. Which document in this kind states them, or is there none?"
The journey is done when the person holds the matching document, or holds the fact that none matches and can go on to author one. A person who ends without a document must know that the search read every row, and not only the first page.
The party holds 320 swap documents that state 201 distinct term sets. A person cannot answer this question by reading the list, and four other journeys depend on the answer. See Related journeys.
2. Actor and trigger
The actor is any person who reads or writes conventions: market risk, a trading desk, operations or a tenant administrator. The same activity serves all four. The visible rows differ by permission and by row-level policy, and the screen is the same.
The trigger is a set of terms the person holds and a document they need. It comes from a trade that states the terms, a counterparty agreement, a run whose terms are in doubt, or the wish to author a document without writing a duplicate. The journey starts on one kind and ends on a matched document or on a statement that none exists.
The journey keeps no server state. This journey reads. It writes nothing.
3. Steps
- Choose the kind. The person picks the kind that serves the instrument family. The system shows how many documents the party holds in the kind and how many distinct term sets they state. For a tenant kind it states that the documents belong to every party.
- State the terms. The system draws one row for each term column the kind carries. The person sets the value they hold. A term left as any matches every value. A term that is a pick is chosen from the list that owns it, so a code that no list holds cannot be typed. Empty and any are different: empty matches only a row that states nothing for the term.
- Read the matches. The system lists the documents whose terms equal the stated ones. Each row shows the key and the terms the person left as any, so the person sees how the matches differ. The system says how many rows it read, because a search that read a page is not a search of the kind.
- Read what a match is. The person opens one match. The system shows its terms in words, its version, where it came from, which sets name it and whether the party's runs read it.
- Find that none matches. When no document states the terms, the screen says so in one sentence, with the number of rows read, and offers two ways on: author a document with these terms, or change one term and search again.
- Leave, or go on. The person goes to Author a convention for a kind with the terms carried over, or to another journey with the matched key.
4. Screens and wireframes
One screen of four panels: the kind, the terms, the matches and the empty result. The terms panel is the one the journey is about. The search is a set of equals on the columns the kind carries, and the screen draws the columns of the chosen kind only.
Figure 1: Find a convention by its terms: the kind with its document and term-set counts, the terms the person holds, the matching documents, and the empty result that leads to authoring.
5. Prototype
A clickable prototype draws this journey: prototype, with its design note find-a-convention-by-its-terms. It opens with no build and reads mock data only. The page marks each server gap this journey names.
6. Entities composed
| Entity | What it contributes | Model |
|---|---|---|
| The kind's convention table | The documents searched and the term columns searched on | one of the 26; see See the conventions a party uses |
swap_convention |
The worked example: seven term columns, 320 documents, 201 term sets | ores.refdata.swap_convention |
calendar_name, day_count_fraction_type, business_day_convention_type, payment_frequency, floating_index_type |
The lists a pick term is chosen from | |
configuration |
The conventions configurations, read to say whether a match is used | ores.reporting.configuration |
7. Operations and messages
| Step | Operation | Subject | Status |
|---|---|---|---|
| Choose the kind | Count the kind's documents | refdata.v1.<kind>_conventions.list (a page and a total) |
partial |
| State the terms | Fill the calendar picker | refdata.v1.calendar_names.list |
exists |
| State the terms | Fill the day count picker | refdata.v1.day_count_fraction_types.list |
exists |
| State the terms | Fill the business-day convention picker | refdata.v1.business_day_convention_types.list |
exists |
| State the terms | Fill the payment frequency picker | refdata.v1.payment_frequencies.list |
exists |
| State the terms | Fill the floating index picker | refdata.v1.floating_index_types.list |
exists |
| Read the matches | Filter a kind by its terms | (the filter is id_one_of and nothing else) |
missing |
| Read the matches | Read every page of a kind | refdata.v1.<kind>_conventions.list |
exists |
| Read what a match is | Read one document | refdata.v1.<kind>_conventions.get |
exists |
| Read what a match is | List the document's versions | refdata.v1.<kind>_conventions_versions.list |
exists |
| Read what a match is | Read the sets that name it | (a configuration has no children) | missing |
| The screen itself | Search conventions from the browser | GET /api/conventions/<family> pages by offset and limit, with no filter |
partial |
8. What is missing
- The list cannot be searched by a term. The generated filter takes
id_one_ofand nothing else. A match on terms is a read of every page followed by a comparison in the browser. The screen can do this, and on a kind of 320 documents it is a real cost. The candidate is a filter on the term columns of each kind, for examplerefdata.v1.<kind>_conventions.listwith aterms_equalargument. Until it exists the screen reads every page itself and says how many rows it read. - The search differs for each kind. The 26 tables have different columns, so there is no shared filter. A generated filter is the only shape that does not claim a column a table lacks.
- No term-set count comes from the server. The count of 201 distinct term sets is a number the screen must compute. It is a derived fact, and it is read once for each search.
- A match cannot say whether a run reads it. No default marker exists, and a configuration holds no rows. The screen says so and does not leave the column empty.
- A tenant kind is searched across every party.
currency_pair,ibor_index,overnight_indexandtenorcarry noparty_id. The screen states the scope. - The page route has no filter, no order and no search.
GET /api/conventions/<family>sends an empty filter and no order. The journey adds a terms argument, for exampleGET /api/conventions/<family>?terms…=.
9. Related journeys
- Author a convention for a kind — the next step when no document matches
- Change the convention a party uses for one kind — the next step when a match needs a correction
- Retire a convention — find the twin of a document before it is closed
- Name a convention set — find the document a set names for a kind
- See the conventions a party uses — read the kind as a whole
10. Related knowledge
- Conventions journeys — the group this journey belongs to
- User Journeys — the index
11. See also
- User Journey Extraction Standard — the checklist this journey is written against
- Document type: user_journey — the sections this page fills