User Journey: Take a cut
Table of Contents
- 1. Goal
- 2. Actor and trigger
- 3. Steps
- 3.1. Step 1: reach the cuts, and read where the day stands
- 3.2. Step 2: choose the kind and the timepoint
- 3.3. Step 3: assemble the body, and read the gaps
- 3.4. Step 4: review the body against the previous cut
- 3.5. Step 5: take the cut, which signs it where its kind requires a signature
- 3.6. Step 6: authorise, or read the refusal
- 3.7. The audit of the take**
- 4. Screens and wireframes
- 5. Prototype
- 6. Entities composed
- 7. Operations and messages
- 8. What is missing
- 9. Related journeys
- 10. Related knowledge
- 11. See also
This page documents a user journey: A finance officer chooses the kind and the timepoint, assembles the body of the day's cut, reviews what it holds, takes it and has it authorised, or reads the gaps that stop it.
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.
The decision behind it is The cut is the body a run prices from: a cut records the body it fixed and the two acts that made it, its state is derived from those facts, and the person who takes one cannot authorise it. The Cuts structure note fixes what the body must hold, and Kinds of cut fixes what each occasion contributes.
1. Goal
"The centre has closed and the day's reports are waiting on a body of data nobody has fixed. I want to say which cut this is, see exactly what it holds before I commit it, be told plainly and early when a part cannot be assembled, and have somebody else sign it off where the occasion calls for it, so the numbers the reports show can be reproduced next year. When it is authorised I want the cut to be an object I can point at, and not a date that means something different tomorrow."
The journey is done when the cut holds a body, a second person has authorised it, and the cut's page says so — or when the body cannot be assembled and the page says why, in items a person can chase.
2. Actor and trigger
A finance officer runs this journey for the end of day kind, and a market-risk owner for the independent price verification. Both act inside their own party and inside their own tenant, on the books whose centre they own. A desk runs the same journey for a flash cut at an instant it states.
Three permissions decide what the person sees. Assembling and taking a cut needs
reporting::cuts:take. Reading the cut and its gaps needs
reporting::cuts:read. Deciding the authorisation needs the permission the inbox
kind names in its decide_permission_code, which for a cut is
inbox::approvals:decide_finance — a permission the inbox already holds, held for
a cut by a person other than the taker. The rule that the asker never decides is
the schema's, not this feature's, and
Approval requests states it. A
person who may not take a cut is drawn no button, as the
Record screen standard requires.
The Reporting area is drawn for a person who holds reporting::report_definitions:read, which is the read the area already asks for; the Cuts card inside it is drawn for reporting::cuts:read.
The trigger is the close of a business day, or a correction that moves the day's population after its cut was taken. The person opens the cuts list because the reports of the day cannot run, or because the deal cut must be retaken until the population is clean, as the Cuts note records. The journey ends on the cut's page, in a state the page draws.
This journey takes a cut and has it authorised. The cut is taken for a report to price from, and the report selects it through Give a report its cut; the two journeys meet at the resolution, which reads the cuts this one leaves behind. The kind whose instant a run supplies is not taken here at all: a LIVE cut is minted by the run that consumes it, and a person never presses a button to make one.
This journey does not approve or withdraw a published curve — those are Ask for a publish to be approved and Withdraw or replace a published curve — and it does not run a report. It does not author a convention, a calendar or a curve configuration: it reads the version in force and records it.
3. Steps
3.1. Step 1: reach the cuts, and read where the day stands
Open Cuts. The area is Reporting, and the trail is Home, Reporting, Cuts. The list is the Record screen standard's list: a search over the label and the scope, a filter on the kind and a filter on the state, the shared pager, and Take a cut as the primary button, drawn only for a person who may take one.
Column What it holds Cut The derived label, monospace, and the scope under it Kind The occasion: End of day, Independent verification, Flash, Start of day, or the process that named the instant Timepoint The instant, exact, with its timezone, because it is what the body is fixed at State The derived state: Draft, Incomplete, Taken, In use, Authorised, Refused or Superseded, with the basis under it where the kind requires no authorisation Taker The account that took the cut Authoriser The account that decided it, and the decision beside it Runs How many runs priced from it, right-aligned - Read the day. The default order is the timepoint, newest first, so the day's cut is the first row. A superseded cut sits under the one that replaced it and says so, because the person reading the list is asking which body the next run will price from.
- Read what is missing. A day with no cut for the centre yet says There are no cuts for this scope yet. and offers Take a cut. The sentence is the list's empty state, and it is the one state that must not read as a fault.
3.2. Step 2: choose the kind and the timepoint
- Press Take a cut. The take is a guided sequence of four steps, because it
fixes a body across four parts and the review is the point of it. Its rail is
the journey runtime's, and its
address is
/reporting/cuts/take. - Choose the kind. The first step offers the kinds the party may take, read from the cut type list rather than written into the screen. Each row is a type, the instant it fixes, what it is for, and whether it is signed and how long its cuts are kept. The end of day family offers the centre's close, and its month end and year end kinds are the same body taken on their month's or year's last business day, kept longer. The start of day kind offers the centre's open, and the flash and process kinds an instant the person states. A kind the party has no centre for is not offered, and the step says which centre each kind would use. LIVE is the one kind the step does not offer, and it says why: that kind's instant comes from the run that consumes it, so there is no take to press.
- Fix the timepoint. For the end of day kind the timepoint is the close of the centre the scope revalues against, read from the cut times reference data and drawn so the person reads it rather than types it. For a flash cut or a cut a process names, the instant is stated with its timezone, and the step refuses a time in the future, because a body cannot be fixed at an instant that has not happened. The label is derived beside the fields and never typed: the kind, the scope and the date, exactly as the decision note derives it.
- Read the scope. The step states the books the cut will value and the rates centre whose market data it will read. The scope is a fact and not a choice at the take: it is the set of books that revalue together, and a scope spanning two centres is refused here rather than discovered at the assembly.
3.3. Step 3: assemble the body, and read the gaps
Assemble. The second step runs the assembly and draws one row per part of the body, and one for the taking identity. Each row is a part, what the assembly resolved, and its state.
Part What the row holds The kind and its retention The type the cut is taken under, and the period and destination the cut will carry, copied from the type at the take The deals The population at the timepoint: the deal count, how many are live, expired, fixed or settled, the books they belong to, and the corrections inside the body The market data The fixed snapshot: the published sets each market role resolves to, their publish records and as-of, the fixings in force, and the value count The reference data The versions in force of the conventions, the calendars, the curve configurations and the engine run settings the run reads The engine and the code The engine version and the wrapper version the work will run, and the code revision of the services that assembled the body The taking identity The account, the party, and the instant the body was fixed Read a gap, where a part cannot be assembled. The step does not fail as a whole. Each part that cannot be closed is drawn with the item, the reason and the remedy, and the take offers Save as a draft in place of Take the cut.
Gap The reason The remedy the row names A series with no value at or before the instant The store holds no observation for the series, so the snapshot would carry a hole Publish a set for the series, or state an instant at which the store holds one A deal at no version The population read returned a row with no version current at the instant Correct the deal, or state why it is absent A curve in the candidate state Nobody approved the set, so a valuation cannot price from it Ask for a publish to be approved No engine version recorded Nothing in the store names the version that would compute the result Register the app version, or name the version the run will use A scope spanning two centres The books read two centres' market data, so one market data half cannot value them Take a cut per centre, or narrow the scope - Save the draft, and leave. A body that cannot be assembled is kept as a draft in the Incomplete state, with every gap beside the part it belongs to. The step states what happens next: no run may price from the cut, and the take is resumed from the cut's page once the gaps are closed. The person is not asked to remember the list, because the list is the record.
3.4. Step 4: review the body against the previous cut
- Review what the cut holds. The third step is the review, in the shape the Configuration screen standard uses for a configuration's review: the counts, the differences from the previous cut of the same kind and scope, and the sentence that states what the cut decides and what it does not.
- Read the differences. A cut is read against its predecessor, because the movement between two cuts is what the day's reports state. The step lists the deals that entered the population, the deals that left it, the deals whose state moved, the market data items whose value moved, and the reference data versions that changed. A cut with no predecessor says so and draws no difference.
- Read what it decides. One sentence, in the standard's words: it fixes the body one valuation reads and it records the engine and the code, so a later run of the same cut with the same engine reproduces its result. It does not decide the day's prices, the conventions or how a product is priced: it records what was in force.
3.5. Step 5: take the cut, which signs it where its kind requires a signature
- Press Take the cut. The press writes the body. Where the kind requires an authorisation it raises the approval request in the same act, as the decision note requires: the cut moves to Taken, the request enters the queue of the account that holds the kind's decide permission, and the dialog states that the body is frozen and the request is with the deciders. Where the kind requires none, the press writes the body and nothing else: the cut moves to In use, and the dialog says so, in the sentence No authorisation is required by its kind, and says that a run may price from it now.
- Read the state the press left. The cut's page states the state in one sentence, and the sentence follows the kind. A cut of a kind that requires an authorisation reads that the body is fixed and nobody has signed it, so no run may price from it, with the request and the account it waits on. A cut of a kind that requires none reads that the body is fixed and its kind requires no signature, so a run may price from it, and, where the kind's values are indicative, that every result carries the indicative mark. Authorise is not drawn for the taker on either cut.
3.6. Step 6: authorise, or read the refusal
- Decide, as the decider, from Approvals. The decider opens Approvals, which is the shared queue filtered to the kinds they may decide, and opens the request. The page draws the header the inbox draws for every kind — who asked, when, why, how long it has waited and when it expires — and, below it, the kind's own section: the cut's label, its kind and timepoint, the scope, the counts of the body's parts and the gap list, which is empty for a taken cut. Approve, Refuse and, where the kind allows it, Hold are drawn for a holder of the kind's decide permission who is not the asker. A refusal needs a comment, because the asker reads it.
- Read the authorisation on the cut. When the request reaches approved, the reporting service writes the cut's authorisation and the cut moves to Authorised. The page names the request, the deciding account and the instant, and links the request in Approvals, so the signature is read from the record rather than inferred from the cut. The previous cut of the same kind and scope moves to Superseded.
- Read a hold, and read a refusal. A hold parks the request and leaves the cut Taken, with the card naming the request as held and the question it waits on; the wait belongs to the request, not to the cut. A refusal moves the cut to Refused, keeps the body readable, and states that the inbox allows no second decision on a refused request. The remedy is a new take, offered as Take it again, and the new cut carries the next ordinal in its label.
3.7. The audit of the take**
- Read the cut's history. The record's History tab is the shared timeline: the acts, each with its account and instant, and the body's own facts. A cut that required an authorisation has two entries once it is signed, a cut that required none has one, and the history states which case holds. The body is immutable once taken in both cases.
- Read who is waiting. The cut's page names the request, the kind's decide permission and the account it waits on, so a person chasing an authorisation knows whom to ask. A cut of a kind that requires none draws the basis in the same place, so it is not taken for a cut whose signature somebody forgot.
4. Screens and wireframes
Three surfaces: the cuts list, the take flow with its four steps, and the cut's record page.
The list is the standard's. The take flow is the one place where a rail of steps earns its place, because the work is four acts over one body rather than one edit: the kind and the instant, the assembly with its gaps, the review against the previous cut, and the press that takes and raises. The record page is the standard's record page with four tabs: The body, Authorisation, Runs and History.
The judgement, per step, against the record screen standard.
| Step | Shape on the screen | Judgement |
|---|---|---|
| 1 to 3, the list | The standard's list, its filters and its empty state | A standard record list, RS-LIST-01 to RS-LIST-22 |
| 4 to 7, kind and timepoint | A workflow's first step: a table of kinds, a stated instant, the derived label | A step that keeps state across replies, so a workflow under the Workflows menu, as the standard's RS-LIST-03 allows |
| 8 to 10, the assembly | A panel per part, and a gap list beside it | No rule draws a gap list yet; the prototype defines it and What is missing records it |
| 11 to 13, the review | The configuration standard's review: counts, differences, one sentence | A step of the same workflow |
| 14, the take | A confirmation that states what the press froze, and whether it raised a request | RS-WRITE-17 to RS-WRITE-19 apply by analogy: one dialog, one press, the record opened after |
| 15, the state the press left | The record's header and its Authorisation tab | A state and a basis; no rule draws a kind's basis, and the prototype defines where it stands |
| 16 to 18, the authorisation | The record's Authorisation tab, and the inbox's queue and request page | The inbox owns the queue and the decision screen; the cut draws the outcome and links the request |
| 19 to 20, the history | The shared timeline | RS-HIST-01 |
Figure 1: The take flow and the cut record: the kinds and the instant, the body assembled with a gap, the review against the previous cut, the press that takes and raises, and the record in each state.
5. Prototype
The the cut prototype draws this
journey, and its design note says
what it argues, which states it draws and what is fake. It belongs at
doc/prototypes/cuts/the-cut/.
It is one plain page with six surfaces behind the query string: the cuts list, the cut's record, the take flow, the picker that consumes a cut, the run that names one, and the named cut times reference data. For this journey it draws a day with no cut, a draft, an incomplete body with its gaps, a taken cut awaiting its kind's authorisation, a cut in use whose kind requires none, an authorised cut, a refused cut and a superseded cut. Every value on it is a fixture, and the page says so.
6. Entities composed
| Entity | What it contributes | Model |
|---|---|---|
| the cut | The label, the kind, the timepoint, the scope, the parts, the gaps, and the acts it records beside them. No model exists: the record this journey draws is the one the decision note describes | The cut is the body a run prices from |
curve_publish |
The publish record and the as-of of each set the market data half fixes, and the state a set holds | ores.marketdata.curve_publish |
trade |
The deal population at the instant, by identity and version | ores.trading.trade |
book |
The books the scope holds, and the classification that decides whether they revalue together | ores.refdata.book |
party |
The owner of the cut, of the books and of the published sets | ores.refdata.party |
configuration |
The version in force of the engine run settings and the curve configurations the body records | ores.reporting.configuration |
app_version |
The engine version and the wrapper version the body records | ores.compute.app_version |
approval_request |
The authorisation, where the kind requires one: who asked, the request's state, its wait and its decision | Approval requests |
| the cut's approval detail | The cut the request authorises, and the counts of the body's parts, keyed by request_id as the publish detail is |
ores.marketdata.curve_publish |
The rows this journey writes are the cut and, where the kind requires one, the request with the cut's detail. The take writes them together, so the body a decider reads is the body that was frozen. The build order follows the platform's own: the model, then the store, then the operations, and the screens last.
7. Operations and messages
| Step | Operation | Subject | Status |
|---|---|---|---|
| Steps 1 to 3, the list | List the cuts of a party, with the state, the taker and the authoriser | reporting.v1.cuts.list |
missing |
| Step 7, the scope | Read the books of a scope and the centre they revalue against | reporting.v1.cuts.read_scope |
missing |
| Step 8, the deals | Read the deal population at the instant, by identity and version | (no read answers a population at an as-of; reporting.v1.ops.gather_trades reads the population a run values today) |
missing |
| Step 8, the market data | Resolve every market role to its published set at the instant, and read the set's points | marketdata.v1.ops.list_published_curves and marketdata.v1.ops.get_published_curve_sets |
exists; the resolution to a fixed snapshot is missing |
| Step 8, the fixings | Read the authorised fixings whose date falls on or before the instant | marketdata.v1.ops.get_fixing_window |
exists |
| Step 8, the reference data | Read the versions in force of the configurations the run reads | reporting.v1.configurations.get and the versions reads of each kind |
exists |
| Step 8, the engine | Read the engine version and the wrapper version | compute.v1.app_versions.get |
exists |
| Step 8, the code revision | Read the revision of the services that assembled the body | (nothing records the service build) | missing |
| Steps 8 to 10, the assembly | Assemble the body, answer every part and every gap, and write nothing | reporting.v1.ops.preview_cut |
missing |
| Step 10, the draft | Save an incomplete body and its gaps | reporting.v1.cuts.put |
missing |
| Step 14, the take | Freeze the body and, where the kind requires it, raise the authorisation in the same act | reporting.v1.ops.take_cut |
missing |
| Step 14, the request | Raise an approval request of the inbox kind the cut's type names, with the cut's detail row | inbox.v1.ops.raise_approval, with the kind read from the type's approval_kind_code |
exists; the types' approval kinds and the detail row are missing |
| Steps 16 to 18, the queue | Read the requests the caller may decide | inbox.v1.approval_requests.list |
exists |
| Steps 16 to 18, the decision | Approve, refuse or hold a request, with a comment | inbox.v1.ops.decide_approval |
exists |
| Step 17, the apply | Write the cut's authorisation when the request reaches approved | (the reporting service would reconcile on the request's change event) | missing |
| Step 19, the history | Read the versions of a cut | reporting.v1.cuts_versions.list |
missing |
| The screen itself | Read and write cuts from the browser | (no BFF route serves cuts) | missing |
The take is one call and not three, because the body, the request and the cut's state land together or not at all. A take that wrote the body and then raised the request would leave a cut nobody is asked to sign. The request itself is the inbox's call: the take knows the kind and the body, and the inbox knows the record, the rules and the queue, so neither reimplements the other.
8. What is missing
- No cut entity and no component. No cut component exists, no table holds a cut, and no service answers a read of one. The decision note settles what the record must hold; the model, the store and the operations are the work that follows.
- No read answers a population at an as-of. The trade store is versioned, so a query over its intervals reconstructs a past state, and no operation exposes it. The Trade cut page states the second half of the gap: the interval a row states is rewritten when a correction arrives, so a re-run of the same query returns a different body. The cut therefore copies the population it fixed, and the copy has no home yet.
- No fixed market data snapshot. The
Market data cut page records that
marketdata.v1.curve_snapshot.getre-resolves on every call and carries no as-of, and that the resolution-side snapshot exists as a definition and no entity. A cut records the identity of a snapshot that nothing materialises. - Nothing records the service build. The engine version survives because a workunit names an app version. The revision of the services that gathered the body does not survive anywhere, and a result reproduced from a different build of the gathering code is not reproduced from the same software, which is the condition the Cuts note quotes.
- No gap list exists anywhere. A configuration's import lists what it could not read, and nothing lists what an assembly could not fill. The screen needs one, and the prototype defines the shape the standard would take.
- The kinds of cut are not a vocabulary in the store. The four occasions are
stated in a knowledge page and in no table, so nothing holds the two facts the
take and the gate turn on: whether a kind requires an authorisation, and
whether its values are indicative. A kind held as a code in a populated list,
with those two columns, is the smaller change.
And the approval kinds the types name are not seeded.
reporting.eod_cut_authorisationandreporting.ipv_cut_authorisationexist in no seed, so a type that names one has nothing to raise. Each row is small — a code, a decide permission, one approval, no hold, no expiry, no apply workflow — and the queue and the request page take it without a change of their own. - No route and no screen. No BFF route serves reporting, and no reporting screen exists in the web application, so the cuts list, the take flow and the record are all new.
- The cut's approval detail row and its descriptor exist; the subject link and the
apply do not. The inbox draws a kind through a detail row keyed by the request
and, on the web, through a
KindDescriptorthat names the kind, its words and its own section. The cut carries both: its detail row is keyed by the request, and its descriptor names the close's ask and the verification cut's. Two things are still missing. Nothing answers a cut by the request that raised it, so the request page says where the body is read and links it not, rather than offering a link that leads nowhere. And the apply that writes the cut's authorisation on approval is not built, so the record states that instead of drawing an apply nobody made. - The cut times reference data does not exist. The close of a centre's business day is a fact a person needs and no table holds it for our centres. The prototype draws the reference data the take reads, and the option-expiry cut code page states the row the expiry sense needs from the same list. The take therefore asks a person to type the instant and says on the step that it does, because a field that looked up nothing would read as a fault.
- No read compares two bodies. Step 11 asks the review for the differences from the previous cut of the same kind and scope, and no read answers them: the deal population, the market data and the reference data are each read at one instant and nothing reads two instants and states the movement between them. The take's review step states what the body holds and says the comparison is not read, rather than drawing an empty list of differences.
- No read answers the books of a scope. Step 7 states the books a scope holds and the centre they revalue against, and `reporting.v1.cuts.read_scope` is missing: nothing reads a book's classification, so nothing can refuse a scope that spans two centres before the assembly meets it. The take asks a person to type the scope and the centre and says on the step that the two are not checked against the books.
9. Related journeys
- Give a report its cut — what the cut is taken for: the report's selection, and the gate the resolution meets when no usable cut exists.
- Rerun and audit a cut — the runs that price from this cut, and the reproduction of one of them.
- Ask for a publish to be approved — the remedy for a curve that is still a candidate, which is one of the gaps.
- Decide a publish — the decision the gap waits on, and the same inbox this journey's authorisation uses.
- Publish the approved set — the act that makes a set the market data half can fix.
- Sign off a pricing engine change — the same approval machinery, drawn for a change rather than for a body.
- Bind a report to a published curve — the other half of what a run names, and where the cut is chosen.
- Change what a report runs — the change that makes a cut stale before it is taken.
10. Related knowledge
- The cut is the body a run prices from — the decision this journey draws.
- Cuts — the definition, the purpose and the body.
- Kinds of cut — the kinds, what each fixes, and the two that need no authorisation of their own.
- Market data cut — the half of the body this journey assembles from published sets.
- Trade cut — the half it assembles from the versioned trade store.
- Naming the cut — why the label is qualified and why the word is kept.
- The option-expiry cut code — the reference row a cut time is, and the second sense of the word.
- Book groups and rates centres — why a scope revalues against one centre.
- Approval requests — the record the authorisation is, its rules, its queue and its lifecycle.
- Operational authorisation — where the argument that an authorisation is metadata, and not the record it releases, is made.
- Implement four-eyes authorisation framework — the deferred work that would add several deciding functions, which a cut does not need.
11. See also
- Cuts journeys — the group this journey belongs to.
- User Journey Extraction Standard — the checklist this journey is written against.
- Record screen standard — the list, the record page, the writes and the states.
- Menu structure — the area and the trail.
- UX Language — the state colours and the access mark.
- New tenant — the journey that stands up the centre a cut time belongs to.