UK Payment Flow Codes
Industry (SIC) and UK region (ITL1) code lists used by the UK payment-flow matrix, with published descriptions and parent groupings so the flows can be rolled up without an external classification table.
ons_payment_flow_codes - the dataset name to pass to the Obscura API.
What one row means
One industry or region code used by the UK payment-flow matrix, with its published description and its parent grouping.
One row per (code_system, code).
Derived in-database from ons_payment_flows.
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For ons_payment_flow_codes: published: available_date is the release day of the ONS edition whose lookup sheet this code was FIRST read from, on the Europe/London calendar - the same per-edition rule and the same evidence as `ons_payment_flows`, because the code list ships inside the same workbook as the matrix it describes.
Refresh cadence
Obscura refreshes ons_payment_flow_codes monthly - the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema - 7 columns
The full public column list for ons_payment_flow_codes, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/ons_payment_flow_codes.
| Column | Type | Description |
|---|---|---|
| code_system | text · not null | WHICH classification this code belongs to, and half of the key: `sic2`, `sic5` or `itl1`. Two classifications can and do reuse the same string - `"12"` is a SIC division and could be a region ordinal - so the system is part of the identity rather than something to infer from the shape. |
| code | text · not null | The code exactly as ONS published it, and exactly as it appears in `ons_payment_flows`' `payer_sic` / `payee_sic` / region columns. Stored as TEXT, not an integer: SIC codes carry meaningful leading zeros (`"01110"`) that an integer would eat, and the sentinel `"ALL"` is not a number. |
| description | text · not null | ONS's published label for the code - the SIC division or class description, or the ITL1 region name. |
| parent_code | text | The code's parent grouping, for rolling the matrix up a level: a 5-digit SIC class's division, or a division's section. NULL at the top of a hierarchy and for regions, which are flat. |
| parent_description | text | ONS's published label for `parent_code`; NULL wherever that is. |
| code_vintage | text | The dated edition of the classification this list came from (e.g. the SIC vintage). Carried because ONS reclassifies: a code whose meaning changed between vintages is a different thing wearing the same string, and this is what lets a consumer notice. |
| available_date | date · not null | PUBLIC-AVAILABILITY DATE - the day the ONS edition carrying this lookup first became readable, on the Europe/London calendar. The point-in-time column. |
Access ons_payment_flow_codes
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="ons_payment_flow_codes",
start="2024-01-01",
)
Create a free account Browse all 122 datasets
Frequently asked questions
What is in the ons_payment_flow_codes dataset?
Industry (SIC) and UK region (ITL1) code lists used by the UK payment-flow matrix, with published descriptions and parent groupings so the flows can be rolled up without an external classification table. One industry or region code used by the UK payment-flow matrix, with its published description and its parent grouping.
How do I avoid look-ahead bias with ons_payment_flow_codes?
Filter on ons_payment_flow_codes.available_date, the day the publisher made the row public. For this dataset that date is derived as follows - published: available_date is the release day of the ONS edition whose lookup sheet this code was FIRST read from, on the Europe/London calendar - the same per-edition rule and the same evidence as `ons_payment_flows`, because the code list ships inside the same workbook as the matrix it describes. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get ons_payment_flow_codes?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="ons_payment_flow_codes". The column schema is public at https://api.obscura.trade/v1/catalog/ons_payment_flow_codes.
How often is ons_payment_flow_codes updated?
Obscura refreshes ons_payment_flow_codes on a monthly schedule - that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.