User Journey: New party

Table of Contents

This page documents a user journey: A tenant administrator adds a party and links the accounts that work in 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.

1. Goal

"I want a legal entity my team can work as, with the accounts that work in it." The tenant administrator finds the legal entity in the GLEIF register, or adds it by name when it has no LEI, names the party, and chooses the accounts that work in it. The journey is done when the party is active, its essential data is published, and its accounts can sign in to it.

2. Actor and trigger

The tenant administrator: an account of type user that holds the tenant-administrator role, signed in, and acting inside one tenant. The trigger is New party on the Parties page. It also starts from Add another party at the end of this journey. The manual path, "It has no LEI: add it by name", is the same journey with the search skipped. The tenant administrator never chooses the tenant: the session already names it.

This is one of the three journeys that carry server-side state. Provisioning runs on the server and can fail half way. The state lives in ores.workflow, so the person can leave the page and come back, and the shell can drive the same steps. Every other group in this corpus describes a journey that keeps no such state. The order is fixed: this journey needs a running installation, a signed-in tenant administrator and a tenant that is already active.

3. Steps

  1. Find the legal entity. The person searches the GLEIF register by name or by LEI. Each result shows the legal name, the country, the LEI and the parent entity, so a subsidiary is recognisable as one. The person picks one, or chooses It has no LEI: add it by name and types the name instead. Nothing is created yet.
  2. Describe the party. The person sets a short name, taken from the legal name, and ticks the accounts that work in it: this is the account-party association. Accounts that work in the party can sign in to it and act for it, and can switch between parties later. The tenant administrator's own account is ticked by default. There is no data-size question: counterparties are tenant-wide, and the party's bundles come from the tenant's seed profile.
  3. Review. The person reads one summary: legal entity, LEI, short name, the accounts, and the party data. The screen states that nothing is created until the person confirms.
  4. Provisioning. The person confirms. The system starts the provision workflow for the party and lists its steps: create the party, activate it, publish its essential data, link its accounts, complete. Each line reads pending, running, done or failed. This is the step that carries the state. The person can leave the page and come back. A failed step stops the instance, the party stays inactive, and a retry resumes from the failed step; the completed steps are kept.
  5. Next steps. The party is active. The page offers three exits: switch to the new party and work in it now, set up its books, or add another party. The person can also just go back; the Parties page lists the new party as active.

The rail is flat: a person sees five steps. Steps that change server state are final, so there is no Back past them.

4. Screens and wireframes

The same journey page as the tenant journeys: a flat step rail on the left and one step at a time. The party header, the short name and the LEI, appears on every step after the legal entity is chosen.

wireframe_new_party.png

Figure 1: New party: a flat step rail on the left, the GLEIF results, and one step at a time.

5. Prototype

Accepted by the user on 2026-09-22. The prototype is on a throwaway branch and is not merged; the branch is kept as the record.

Branch
prototype/new-party-journey
Route
/refdata/party/new
Source
projects/ores.web/packages/web/src/pages/prototype/newTenantJourney/
Design record
Task: Prototype the new party journey

The party journey was the first built on the shared journey page, and it proved the step library: the tenant journey's steps and the party journey's steps come from the same place. It also settled two things. Counterparties are tenant-wide, so the Qt wizard's dataset-size question is gone. And the accounts that work in the party are chosen here, in the describe step, not in a later wizard.

6. Entities composed

Entity What it contributes Model
party Short name, legal name, status and type of the party being created ores.refdata.party
party_identifier The LEI of the legal entity, under the LEI scheme ores.refdata.party_identifier
party_id_scheme Names the identifier scheme the LEI belongs to ores.refdata.party_id_scheme
party_status The party moves to active at the activate step ores.refdata.party_status
party_type The classification the create step sets ores.refdata.party_type
account The accounts the picker offers, and the one that runs the journey ores.iam.account
account_party The accounts that work in the party — the association this journey writes ores.iam.account_party
counterparty The tenant-wide counterparties the tenant's seed profile already published ores.refdata.counterparty
GLEIF legal entity Legal name, country, LEI and parent, read from the register none — no model and no subject exist

No password or secret appears on this screen at all. The person chooses which accounts work in the party; the accounts themselves are created elsewhere.

7. Operations and messages

Step Operation Subject Status
Find the legal entity Search the GLEIF register by name or LEI none missing
Find the legal entity List the parties already in the tenant refdata.v1.parties.list exists
Describe the party List the accounts that may work in the party iam.v1.accounts.list exists
Describe the party Read the existing account-party associations iam.v1.account_parties.list exists
Review Start the provision-party workflow none missing
Provisioning Create the party refdata.v1.parties.put exists
Provisioning Activate the party refdata.v1.parties.put exists
Provisioning Publish the party's essential data none missing
Provisioning Link the accounts that work in it iam.v1.account_parties.put_many exists
Provisioning Mark the party provisioning complete none missing
Provisioning Retry from the failed step none missing
Next steps Switch to the new party iam.v1.accounts.switch-party exists
Next steps Read the party's books refdata.v1.books.list exists

The two iam.v1.account_parties subjects are declared in ores.iam.account_party; iam.v1.accounts.list and iam.v1.accounts.switch-party are declared in ores.iam.account_messages. The refdata.v1.parties and refdata.v1.books subjects are generated from their entity models. All of them exist in the generated web protocol.

Activation is partial in effect: refdata.v1.parties.put writes the row, including the status, so the activate step has a subject. But nothing runs the party workflow around it, so the screen cannot show progress or resume a failure.

8. What is missing

  1. No GLEIF search. Nothing reads the GLEIF register. The register is a public API outside ORE Studio, so the candidate is a server-side search that proxies it and returns legal name, country, LEI and parent, for example refdata.v1.legal_entities.search. Until it exists the screen can only offer the manual path.
  2. No journey state. The journey lives in ores.workflow, next to the workflow instance: kind, current step, the party and workflow instance ids, and the actors who may resume. No ores.workflow component and no journey subject exist today. The candidate is iam.v1.journeys.get-active plus the events that move the journey on.
  3. No provision-party request. The contract makes provision party its own workflow: activate, onboard, membership, party bundles. No subject starts it. The candidate is refdata.v1.parties.provision, taking the party id and the chosen accounts, returning a workflow instance id at once.
  4. No publish of the essential data. The party_essentials bundle holds ore.report_definitions and crm_topology. Only the ACME handler publishes it today. The candidate is a publish step inside the provision-party workflow, or refdata.v1.parties.publish-essentials for a party on its own.
  5. No completion signal. Nothing states that a party finished provisioning, so the screen cannot tell "still running" from "done". The candidate is the same workflow_instance_changed event the tenant journey needs, or a refdata.v1.parties.get read of the status.
  6. No streamed progress and no retry. The party steps run client-side in the shell today, so there is nothing to stream and nothing to resume. The candidates are the workflow instance progress read and iam.v1.workflow_instances.retry.

9. Related journeys

10. Related knowledge

11. See also

Emacs 29.3 (Org mode 9.6.15)