A subscription names the provider and the route names the source
Table of Contents
1. Summary
Two rows tie an Acme party to market data, and they answer two different questions. The subscription says which providers the party may take and with which rights; it never names a source. The route says which source serves each of those providers for this party, and there is exactly one. The demonstration writes both for every party of the tenant in one provisioning step, so a party that lands in the tenant later is subscribed the same way. Rights are display, non-display and derived and all three are true, which is what lets a curve be bootstrapped from other series and used in a report as well as drawn on a screen.
2. Detail
2.1. The two rows
| The row | Its key | Answers |
|---|---|---|
subscription |
party, provider | may this party take this provider, and for which rights |
route |
party, provider | which of the provider's sources serves this party |
The separation is the design, not a normalisation accident. A subscription names a provider and never a source, because the licence is with the provider and because the same instrument must map the same way whichever source serves it; A party takes a provider's feeds through a subscription states it. A route names one source per provider for the party, because two sources for one provider would deliver the same series twice; A party routes to exactly one source for each provider states it. The rights are display, non-display and derived, modelled on the subscription.
2.2. What the demonstration writes
| Party | Subscription (provider) | display | non-display | derived | Route (source) |
|---|---|---|---|---|---|
| Acme Corporation Plc | bloomberg |
yes | yes | yes | bloomberg-a |
| ACME Corporation UK plc | demo |
yes | yes | yes | demo-a |
| ACME Corporation UK plc | bloomberg |
yes | yes | yes | bloomberg-a |
| ACME Corporation US Inc | lseg |
yes | yes | yes | lseg-a |
| ACME Corporation US Inc | bloomberg |
yes | yes | yes | bloomberg-a |
| ACME Corporation HK Ltd | bloomberg |
yes | yes | yes | bloomberg-a |
| System Party | bloomberg |
yes | yes | yes | bloomberg-a |
The step is subscribe_market_data, the eighth step of the profile, and its own
arguments name one provider and one source as the default and then the parties
that differ from it. In the shipped profile the default is bloomberg through
bloomberg-a, which is exactly what the group, Hong Kong and the system party
take. London and New York keep their own vendors and take Bloomberg as well,
because only Bloomberg quotes the IR ladders and USD spots of all 20 funding
currencies, and each party bootstraps its own funding curves. A party the step does
not name takes the default, so a fifth entity added to the tenant is subscribed
without the profile changing. The step's arguments are
its own.
2.3. The step runs for every party, not only for the named ones
The step pages the tenant's parties, matches each against the rows it names by id or by full name, and writes the two rows for every party on the page. Three consequences follow.
- A party the step names twice takes both providers, one subscription and one route for each. A name the tenant does not hold is a failure: the step refuses rather than subscribing three of four parties.
- The rows are written idempotently. Re-running the profile looks for a subscription of that party and provider, and a route of that party and provider, and writes only what is missing, so a second run changes nothing.
- A subscription the party administrator later narrows is not widened by a second run of the profile, because the read finds the row. Whether the whole profile should overwrite a party's choices is a question the profile and the journey answer differently; see What the journeys leave undecided.
2.4. The flow a demand follows
Figure 1: The Acme demonstration: the provisioning step writes the two rows, a run registers demand, the service resolves the party's route, and the routed source's ticks are stored for that party.
Source: acme_market_data_demand_and_subscription.puml. Regenerate with
plantuml -tpng doc/knowledge/demo/acme_market_data_demand_and_subscription.puml.
A run does not ask a party for its data. It names an item and an as-of, and the service resolves the rest: the provider that carries the item, the party's route to a source of that provider, the vendor id the source announces, and then the generator that produces it. The tick comes back on the party's own stream, stored under the party, and the delivery is counted against the party, the provider and the item so that the bill follows the use. A simulated source carries a rate card of the same shape as a live one, so the demonstration shows the bill the same use would cost on a live source; A rate card on the source turns usage into a bill the platform shares states the general case.
2.5. Who may change them
| Act | Permission | Role holding it in Acme |
|---|---|---|
| Read the party's subscriptions and routes | marketdata::subscriptions:read and marketdata::routes:read |
Trading, Sales, Support, Viewer and Operations |
| Add or change a subscription or a route | marketdata::subscriptions:write |
Operations |
| Remove one | marketdata::subscriptions:delete |
Operations |
| Read the sources the routes point at | marketdata::market_data_sources:read |
the same five roles |
The journey names the party administrator as the actor who changes a subscription, and no seeded role is called that: the write sits with Operations, which is the function that maintains the sources and the routes in this deployment. Manage market data subscriptions is the journey, and the permission matrix holds the whole table by role.
3. What this note does not cover
The catalogue the providers and sources come from is the catalogue the bundle installs and the feeds generate. Which provider each party chose, and why the offices differ, is the provider and the source.
4. See also
- The Acme demonstration's market data and its approvals — the structure note that orders this cluster.
- A party takes a provider's feeds through a subscription — completes: the row this page writes four of.
- A party routes to exactly one source for each provider — completes: the second row, and the one-source rule.
- Display, non-display and derived rights are modelled on the subscription — completes: the three rights all true in the demonstration.
- The acme_demo seed profile — answers: which step writes these rows, and in what order.
- A rate card on the source turns usage into a bill the platform shares — exemplifies: the bill the demonstration's usage would cost.
- Manage market data subscriptions — answers: the journey a person follows to change a row.
- Knowledge — the index of every knowledge hub.