1. Audience and purpose
You are assembling one book (one restatement of the bank’s credit-risk stock) at one as-of date. Alpha loads that book once, checks it, and calculates capital on it.
Send tabular files only: Parquet (preferred) or CSV. JSON and JSONL are not accepted bank inputs.
This page specifies reference data (product types, customer types, counterparty types, FX, legal entities, banking groups, solo / group perimeters) and volume data (customers, exposures, facilities, CRM, netting, ratings). Supervisor grids are not book files — see §11.
2. How to send a book
2.1 Folder
…/t=YYYY-MM-DD/<stock_id>/input/<stem>.parquet # or the same stem with .csv
| Piece | Meaning |
|---|---|
t=YYYY-MM-DD | As-of date of the book. Date only, no time-of-day. |
<stock_id> | Your restatement name (pilot-2026q2, …). |
input/ | Every bank table lives here. |
<stem> | Table name (customers, exposures, products, …). |
The folder path is the as-of and stock identity. Do not send manifest.json or bank_trees.json. Alpha writes envelope.json (file hashes and counts) after it reads your tables.
One extension per stem. If both .parquet and .csv exist for the same stem, Parquet wins.
2.2 Minimum files
Send with them whenever they apply: banking_groups, consol_scopes (named solo / group views), fx_rates (any non-base currency), products (if product_id is used), customer_types (CIF class).
Strongly expected for a complete credit book: facilities, ratings, CRM files, and netting files when you have derivatives or SFTs.
3. Formats
Bank upload = Parquet or CSV only. JSON is not an accepted bank input (no .json, no .jsonl). Git fixtures inside Alpha may still use JSONL; that is internal only.
| Rule | Value |
|---|---|
| Encoding | UTF-8 |
| CSV | RFC 4180; header = snake_case column names; comma separator; " quoting |
| Decimal | . (period). No thousands separators. |
| Boolean | true / false. Empty = null. |
| Dates | YYYY-MM-DD only. No time-of-day. |
| Amounts | 64-bit float; at most 4 decimal places. |
| Percentages / ratios | 0–1, not 0–100. CCF, LTV, consol_pct, PD, LGD. |
| Currency | ISO 4217 (EUR, USD). |
| Strings | Latin + Western European accents. |
| Empty cell | Null. Do not send NA or - for missing. |
| Many identifiers | One relationship is one row (§3.2). A list cell is still read for the columns held there: JSON array ["Loan","Revolver"], comma-separated Loan,Revolver, or a JSON array of objects. That cell is interchange. |
M Mandatory · O Optional · C Conditional (see Notes).
3.2 One relationship, one row
Source systems store a parent identifier and each related identifier as separate records. A cell that holds a JSON array, or a comma-separated list of identifiers, is that relationship folded into one field. The upload model is the records: the header keeps the parent, and each related identifier is one row on an association table.
mitigants.provider_id is already one foreign key to customers.id. It stays one column.
banking_group_supervisors is read. Its rows compile into the supervisor list already on the banking group. The other tables in this section are not read yet. Calculate still sees their list cell. Those templates keep the cell until the row file is loaded. Send the list cell until then.
3.2.1 List columns on the current templates
| Template | Column | Cell type today | One element | Target table |
|---|---|---|---|---|
facilities | eligible_product_ids | list of product_id | One drawable product | facility_products |
facilities | eligible_product_weights | list of float | Weight lined up with the product list | weight on that product row |
crm_scopes | exposure_keys | list of deal keys | One exposure | crm_scope_members |
crm_scopes | customer_ids | list of string | One customer, no descendants | crm_scope_members (expand_descendants empty) |
crm_scopes | tree_node_ids | list of string | One customer plus descendants | crm_scope_members (expand_descendants true) |
crm_scopes | facility_ids | list of facility keys | One facility root | crm_scope_members |
exposure_pools | product_ids | list of product_id | One product in the pool | exposure_pool_products |
input_sets | members | list of deal keys | One exposure in the set | input_set_members |
input_sets | member_prefixes | list of strings | One deal-id prefix (a match rule) | input_set_prefixes |
Already one row per relationship: banking_group_supervisors (read), consol_scope_members, customer_links, crm_links, netting_members, exposure_derivative_legs, intragroup_links, customer_aliases. An older banking_groups file may still send a supervisor_set_ids cell. When rows are also present, the rows are kept and the cell is reported.
3.2.2 Suggested tables
Natural key is the pair of identifiers, so the same child is not attached twice. Full columns are in Doc 51 §3.2.
| Table | Replaces | One row |
|---|---|---|
banking_group_supervisors | supervisor_set_ids | group_id + supervisor_set_id. reporting_supervisor_set_id stays on the header. |
facility_products | eligible_product_ids, eligible_product_weights | booking_entity_code + facility_agreement_id + product_id, optional weight. |
crm_scope_members | the four lists on crm_scopes | scope_id plus one target: a deal, a customer (expand_descendants for the group node), or a facility root. crm_links stays mitigant → target. |
exposure_pool_products | product_ids | pool_id + product_id. |
input_set_members | members | set_id + booking_entity_code + deal_id. |
input_set_prefixes | member_prefixes | set_id + deal_id_prefix. A prefix is a match rule, not a foreign key. |
4. File catalog
Reference / perimeter
| Stem | Natural key | Role |
|---|---|---|
products | product_id | Product catalogue. Volume rows store an index into this list. |
customer_types | customer_type_id | Bank CIF / CRM class (MassRetail, MidCorporate, …). |
fx_rates | ccy at this as-of | Stock FX observation Calculate should use. |
bank_entities | bank_entity_code | Legal / booking entities. Parent via parent_bank_entity_code. |
banking_groups | group_id | Consolidating group header. Table, not a JSON tree. |
banking_group_supervisors | group_id + supervisor_set_id | One supervisor the group can be walked under. The reporting pin stays on the header. |
consol_scopes | scope_id | Named view roots (group / sub-group / solo). Table. |
consol_scope_members | scope_id + bank_entity_code | Per-view membership override. Send it only when the bank_entities tree cannot say it. |
Volume
| Stem | Natural key | Role |
|---|---|---|
customers | id | Obligors, guarantors, issuers. Bank-chosen spelling. |
customer_links | child_id | Counterparty hierarchy edges (child → parent). |
exposures | (booking_entity_code, deal_id) | Deals / leaves. |
facilities | (booking_entity_code, facility_agreement_id) | Credit-line tree. |
ratings | rating_id | Grades on a customer or exposure. |
mitigants | mitigant_id | Guarantees, CR derivs, financial collateral. |
crm_scopes | scope_id | Optional pool a CRM covers. |
crm_links | mitigant + target | Mitigant → exposure or scope. |
security_positions | position_id | Collateral lots. |
netting_sets | netting_set_id | Close-out netting / SFT header. |
netting_members | set + deal | Set membership. |
exposure_derivatives | same as exposure | Thin CCR extension. |
exposure_sfts | same as exposure | Repo / reverse-repo / SBL. |
exposure_pools | pool_id | Modeling-team PD/LGD pools. |
intragroup_links | link_id | Matched pairs for elimination. |
input_sets | set_id | Soft membership. Not the legal-entity tree. |
consolidation_measures | subject + measure | Obligor sales / assets for SME tests. |
5. Names that look similar and are not
| Word | What you send | Not |
|---|---|---|
| Customer type | Bank CIF / CRM class in customer_types | Basel / CRE20 class |
| Supervisor class / CRE20 class | Mapped Basel class for one pack run. Pack customer_class_map, not a book field. | A column on customer_types or on the customer |
| Legal entity | bank_entities — who books | A customer (obligor) |
| Customer | Who owes or guarantees | A booking company |
| Banking group | banking_groups header | A login organisation |
| Consol scope | Named perimeter (solo / group) | Trading-book vs banking-book |
| Book / stock | The whole folder at as-of t | A trading book; a desk blotter |
Bank side ≠ obligor side. A legal entity may also appear as a customer via optional customer_id on bank_entities. That is a pointer, not a second tree.
6. Reference data the bank supplies
Alpha will not invent product types, CIF classes, FX, or legal-entity perimeters from deals alone.
6.1 Product types — products
A product is a type of exposure the bank books (CreditCard, ResidentialMortgage, LetterOfCredit, Repo, …). It is a catalogue. Volume exposures store an index into this list, not a per-row CCF string.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
product_id | M | string, unique | Natural key. |
label | O | string | Display name. Defaults to product_id. |
default_exposure_type | O | enum | Default ONBS. |
facility_drawable | O | bool | true ⇒ may appear on facilities.eligible_product_ids. |
ccf_adv | O | ratio 0–1 | Bank own CCF estimate. Read only when the approach is AIRB (IRBA). STD and FIRB never use it. |
lgd_adv | O | ratio 0–1 | Bank own LGD. Priority when the approach is AIRB and the row is not on a retail pool. |
ofb_class | O | string | Off-balance class. Supervisor CcfGrid OFB_CLASS key. |
exposures.product_id → this list. STD and FIRB read the credit conversion factor from the supervisor grid keyed by ofb_class. A product with no class takes the pack fallback row, and the run logs it. STD and FIRB never read ccf_adv. AIRB takes ccf_adv first. AIRB also takes lgd_adv when the row is not on a retail pool. Do not paste a CCF onto every loan row.
6.2 Customer types
Customer type = the bank’s own CIF / CRM commercial class. Catalogue file customer_types. Examples: MassRetail, MassAffluent, MidCorporate, LargeCorporate, CorrespondentBank.
Supervisor class / CRE20 class is not a book field. At Calculate the supervisor pack customer_class_map maps the customer’s CIF code onto a CRE20 class and stores it on the result plane. Do not send a family or a Basel hint on customer_types.
customer_types
| Field | M/O/C | Type | Notes |
|---|---|---|---|
customer_type_id | M | string | Natural key. |
label | O | string | Display name. |
On the customer: customer_type (FK to this catalogue). Calculate looks that code up in the pack map.
6.3 Exchange rates — fx_rates
Send the stock observation at as-of t: the rates you want this book calculated with.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
ccy | M | ISO 4217 | Natural key at this as-of. |
rate_to_base | M | float | Units of base per 1 unit of ccy. Base itself is 1.0. |
base_ccy | O | ISO 4217 | Reporting / group currency (often EUR). |
as_of | O | date | Should match the folder t=. |
version | O | string | Optional restatement label. |
Convert path: (1) stock fx_rates you upload here → (2) Market pack published FX (Doc 23) if the stock has no row. A currency in neither is DQ_FX_MISSING; the supervisor pack carries no FX. Do not mix these. Duplicate ccy at the same as-of → DQ_REF_DUP; consumers block.
If every amount is already in the base currency you may omit this file. Otherwise send a row for each used code and the base.
6.4 Legal entities — bank_entities
A legal entity is a booking / consolidating node on the bank side. It is not a Customer. Parent tree: parent_bank_entity_code on the same table. There is no bank_trees.json for the bank to send.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
bank_entity_code | M | string | Natural key (BE-PARIS). |
group_id | M | string FK | → banking_groups. |
name | M | string | Legal name. |
lei | O | string | |
jurisdiction | M | ISO country | |
institution_kind | M | enum | bank insurance investment_firm holding other. |
entity_role | M | enum | parent sub branch booking_entity. |
parent_bank_entity_code | C | string FK | Empty on the group root. Must exist otherwise. No cycles. |
consol_method | M | enum | full proportional not_consolidated. |
consol_pct | C | ratio 0–1 | Mandatory when consol_method = proportional. |
customer_id | O | string FK | If this LE also appears as a party (customers.id). |
Every exposure must have booking_entity_code pointing here (BookedOn). Missing booking entity is blocking.
6.5 Sets for conso vs solo — banking_groups + consol_scopes
These are perimeters, not a trading-book vs banking-book split. Send them as tables (Parquet or CSV). A CalculationSet pins a ConsolScope, a solo legal entity, or a group root. It does not copy the book.
banking_groups
| Field | M/O/C | Type | Notes |
|---|---|---|---|
group_id | M | string | Natural key. |
name | M | string | |
reporting_supervisor_set_id | O | string | Default supervisor pin. Not a grid file. |
Supervisors the same stock can be walked under are banking_group_supervisors, one row each. An older file may still carry a supervisor_set_ids list cell. Ingest still reads that cell. When the association file also names supervisors for that group, the rows are kept and the cell is reported.
banking_group_supervisors
One supervisor the group can be walked under is one row. reporting_supervisor_set_id stays on the header.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
group_id | M | string FK | → banking_groups.group_id. |
supervisor_set_id | M | string | Supervisor pack id. Not a grid file. |
Natural key (group_id, supervisor_set_id). A second row for the same pair, an empty key, or a group_id that is not on banking_groups is rejected with its reason and reported in Data Quality. The rows compile into the supervisor list already on the group.
consol_scopes
| Field | M/O/C | Type | Notes |
|---|---|---|---|
scope_id | M | string | VIEW-GROUP, VIEW-SOLO-FR. |
group_id | M | string FK | → banking_groups. |
root_bank_entity_code | M | string FK | Walk starts here. |
label | M | string | Group consolidated, Solo France. |
supervisor_set_id | O | string | Optional override for this view. |
Group view — root = holdco; children enter by consol_method (full weight 1, proportional × consol_pct, not_consolidated stay in the tree but out of the view). Solo — root = that booking entity. Do not invent synthetic legal entities to mean “this calculation”.
BankingGroup AURELIA-GROUP
└── BE-HOLDCO parent, holding
├── BE-FR booking entity (books deals)
└── BE-NL booking entity
consol_scopes: VIEW-GROUP (BE-HOLDCO), VIEW-SOLO-FR, VIEW-SOLO-NL
consol_scope_members
Send this only when you need it. consol_method / consol_pct on bank_entities give one tree and one weight per entity, which is enough whenever every view weights an entity the same way. It is not enough when the same entity is full in one view, proportional in a second and out of a third — a joint venture at 50 % for the group and 100 % in a national sub-consolidation, or an entity a second regulatory perimeter draws outside the line.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
scope_id | M | string FK | → consol_scopes. |
bank_entity_code | M | string FK | → bank_entities. Must belong to the scope's group_id. |
consol_method | M | enum | full · proportional · not_consolidated. |
consol_pct | C | decimal 0–1 | Required when consol_method = proportional. |
The tree under the scope's root still generates the membership; each row overrides the one entity it names and leaves the rest of the walk alone. not_consolidated takes that entity out of this view only, so taking an entity out is always written down and a short list never narrows a view by omission. One row per (scope_id, bank_entity_code): a second row, a row naming an entity of another banking group, or a row naming an entity or scope that does not exist is rejected with its reason and reported in Data Quality.
consol_scope_members: # only where a view differs from the tree VIEW-GROUP BE-JV50 proportional 0.50 VIEW-NAT BE-JV50 full
7. Volume tables
7.1 customers
| Field | M/O/C | Type | Notes |
|---|---|---|---|
id | M | string | Natural key. Bank-chosen spelling (an LEI may sit inside id; Calculate does not require LEI). |
legal_name | M | string | |
customer_type | C | string FK | → customer_types. Calculate maps this through the pack. |
country | M | ISO country | Immediate party country. |
sector | O | string |
7.1a customer_links
| Field | M/O/C | Type | Notes |
|---|---|---|---|
child_id | M | string FK | → customers.id. One parent per child. |
parent_id | M | string FK | → customers.id. Immediate parent. |
Hierarchy is not on the customer row. No tree_id: one forest via these links. A CRM group cover targets a parent id and expands descendants.
7.2 exposures
| Field | M/O/C | Type | Notes |
|---|---|---|---|
booking_entity_code | M | string FK | BookedOn. Blocking if missing. |
deal_id | M | string | Unique with booking entity. |
customer_id | M | string FK | Obligor → customers.id. Missing → reject. |
facility_agreement_id | O | string | With booking entity → facilities. |
drawn_amount | M | amount | Instrument currency. |
currency | M | ISO 4217 | |
exposure_type_src | M | enum | |
product_id | C | string FK | → products. |
exposure_pool_id | C | string FK | Retail book → modeling-team pool. |
intragroup_candidate | O | bool | Default false. |
related_bank_entity_code | O | string FK | |
elimination_class | O | string | |
sl_subtype | C | enum | Alias sl_type. Required for SL. |
sl_treatment | O | enum | SL_SLOTTING SL_IRB SL_STD. |
slot_grade | O | string | Alias sl_slot_grade. |
residual_maturity_years | O | float | |
ltv | O | ratio 0–1 | Not percent. |
preferential | O | bool | Alias sl_preferential. |
re_bucket | O | enum | rre cre adc other_re. |
adc_flag | O | bool | |
specific_provision | O | amount | Empty ≠ 0. |
write_off | O | amount | |
value_adjustment | O | amount |
7.3 facilities
| Field | M/O/C | Type | Notes |
|---|---|---|---|
booking_entity_code | M | string FK | |
facility_agreement_id | M | string | |
parent_facility_agreement_id | O | string | No cycles. |
facility_style | M | enum | none committed revolving. |
limit_amount | M | amount | |
currency | M | ISO 4217 | |
eligible_product_ids | C | list | Required when residual undrawn > 0. Target rows: facility_products (§3.2). |
eligible_product_weights | O | list | Parallel to ids. Target: weight on that product row. |
undrawn_product_id | O | string FK | |
undrawn_product_policy | O | enum | |
ead_role | O | enum | leaf aggregate. |
7.4 ratings
| Field | M/O/C | Type | Notes |
|---|---|---|---|
rating_id | M | string | |
subject_type | M | enum | customer exposure security. |
subject_id | M | string | LEI:… or SCHEME:code or BE-PARIS/LN-1 or SEC-OAT-2031. |
source | M | enum | external internal. |
agency | O | string | |
system_id | M | string | |
grade_raw | M | string | |
grade_normalised | O | string | |
pd_implied | O | ratio 0–1 | |
valid_from / valid_to | O | date |
7.5 CRM
mitigants
| Field | M/O/C | Type | Notes |
|---|---|---|---|
mitigant_id | M | string | |
type | M | enum | guarantee cr_deriv financial_collateral sft_collateral onbs_netting. Alias mitigant_type. |
provider_id | C | FK → customers.id | Required for guarantee and cr_deriv. Guarantor must be a Customer. Legacy provider_lei / party pair still accepted on ingest. |
scope_id | O | string FK | |
position_id | O | string FK | Collateral lot. |
amount_or_value | M | amount | |
currency | M | ISO 4217 | |
priority | O | integer | Default 0. |
collateral_class | O | string |
crm_links
| Field | M/O/C | Type | Notes |
|---|---|---|---|
mitigant_id | M | string FK | |
scope_id | C | string FK | Either a scope or a deal. |
booking_entity_code + deal_id | C | string | One exposure. |
security_positions
| Field | M/O/C | Type | Notes |
|---|---|---|---|
position_id | M | string | |
isin | M | string | |
market_value | M | amount | |
currency | M | ISO 4217 | |
mitigant_id | M | string FK | → mitigants. |
7.6 Netting
netting_sets
| Field | M/O/C | Type | Notes |
|---|---|---|---|
netting_set_id | M | string | |
| customer LEI / party | C | FK | Counterparty. |
booking_entity_code | M | string FK | |
agreement_type | O | enum | ISDA GMRA GMSLA CSA OTHER. |
set_type | O | enum | deriv sft mixed. |
formula_id | O | enum | CEM SA_CCR. |
legal_netting_flag / close_out_netting | O | bool | |
set_ccy / CSA / haircut fields | O | see Doc 51 | Do not send hedging-set master data. |
netting_members
| Field | M/O/C | Type | Notes |
|---|---|---|---|
netting_set_id | M | string FK | Source of truth for membership. |
booking_entity_code | M | string | |
deal_id | M | string | Must exist on exposures. |
exposure_derivatives
| Field | M/O/C | Type | Notes |
|---|---|---|---|
booking_entity_code + deal_id | M | same as exposure | |
netting_set_id | O | string FK | Also seeds a member if missing. |
cem_asset_class / asset_class | O | enum | IR FX GOLD EQUITY PRECIOUS_METAL OTHER_COMM CREDIT. |
notional / current_mv | M | amount | |
residual_maturity_years | M | float | |
currency / quote_currency / issuer / reference_name / commodity_group | O | ||
written_off | O | bool | |
direction | O | enum | pay receive buy sell buy_protection sell_protection. Which side of the trade you are on; on an option send buy / sell. SA-CCR signs the effective notional with it, so two offsetting trades in one hedging set cancel; without it they add. |
start_date | O | date | Start of the trade's risk period — SA-CCR S, and the exercise date on an option. A trade already running sends its original start. Empty = no supervisory duration. |
option_type / strike / underlying_price / implied_vol | C | enum · number | Option terms, on this same file. call or put plus all three numbers — a supervisory delta cannot be formed from a subset. Empty on a linear trade. |
Frozen target columns and tables
Some columns, and the securities and customer_aliases tables, are in this
contract ahead of the calculation that reads them. They are accepted, stored and
link-checked today, and they move no number in this release. Mapping a column is the slow part of
onboarding, not storing it — sending them now means your book already carries what the calculation
will need, with no second mapping exercise. The engine-side register is Doc 65.
| What | Where | What is still owed |
|---|---|---|
drawn_amount_basis | exposures / manifest.csv | Whether your balance already includes accrued interest or fees. Until Alpha reads it, it cannot catch an EAD formula that counts them twice — check the basis yourself before asking for an additive formula. |
start_date / trade_date | exposures | Vintage / cohort reporting; original-maturity CCF variants. |
security_id / quantity | security_positions, exposure_sfts | The supervisory haircut keyed on issuer class × residual maturity × credit quality. Today Alpha uses the haircut you send. |
securities | table | The security catalogue those keys point at. Loaded and shown in the Browser; no calculation reads it. |
customer_aliases | table | Merging two spellings of one obligor. Loaded and not applied: two ids stay two customers. |
exposure_derivative_legs
Only for a trade with more than one leg — a cross-currency swap, a multi-leg structure.
A single-leg trade sends nothing here: its exposure_derivatives row already is its leg.
A leg is not a second deal: the trade stays one row in the results, with one obligor, one
netting-set membership and one market value.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
booking_entity_code + deal_id | M | same as exposure | The deal must also carry an exposure_derivatives row. |
leg_no | M | integer | Unique inside the deal. A repeat is reported and the first wins. |
leg_type | O | enum | fixed float. Describes the leg; it does not pick the hedging set. |
direction | O | enum | This leg's side. Empty takes the trade's. |
asset_class | O | enum | The leg's own class when it differs from the trade's — the FX leg of a cross-currency swap. Empty takes the trade's. |
currency / notional | M | ISO 4217 · amount | This leg's own currency and notional. The currency pair is read from the other leg. |
start_date / maturity_date / residual_maturity_years | O | date · float | This leg's own S and E. Empty takes the trade's. |
Each leg becomes one effective notional in its own hedging set; the trade's market value is counted
once. Alpha does not invent a contribution you did not send — a cross-currency swap that should
carry two interest-rate legs and an FX pair sends three legs, and a trade whose legs span two currencies
with no FX leg is reported rather than silently given one.
exposure_sfts
| Field | M/O/C | Type | Notes |
|---|---|---|---|
booking_entity_code + deal_id | M | ||
direction | O | string | repo … |
cash_leg / security_value | M | amount | |
haircut_e haircut_c haircut_fx | O | ratio | |
residual_maturity_years / currency / netting_set_id | O |
7.7 exposure_pools
| Field | M/O/C | Type | Notes |
|---|---|---|---|
pool_id | M | string | |
description | M | string | |
pd / lgd | M | ratio 0–1 | |
retail_product_hint | O | enum | qrre mortgage student_loan tax_loan other. |
product_ids | O | list | Target rows: exposure_pool_products (§3.2). |
7.8 intragroup_links
| Field | M/O/C | Type | Notes |
|---|---|---|---|
link_id | M | string | |
booking_entity_code_a + deal_id_a | M | Leg A. | |
booking_entity_code_b + deal_id_b | O | Leg B. | |
link_role | M | string | loan_deposit … |
match_status | M | string | matched … |
7.9 input_sets
Soft membership only (portfolio, IRB permission). Not the legal-entity tree and not trading-book vs banking-book.
| Field | M/O/C | Type | Notes |
|---|---|---|---|
set_id | M | string | |
set_type | M | enum | portfolio book irb_permission … |
name | M | string | |
method | O | enum | STD FIRB AIRB … |
members / member_prefixes | O | list | Target rows: input_set_members and input_set_prefixes (§3.2). |
7.10 consolidation_measures
| Field | M/O/C | Type | Notes |
|---|---|---|---|
subject_id | M | string | Customer key spelling. |
measure | M | enum | sales total_assets. |
amount | M | amount | |
currency | M | ISO 4217 | |
scope | O | string |
8. Relationships / entity diagram
Typed links after ingest. An edge is not a fourth file you send — it is implied by the columns.
This page draws the diagram. Boxes show the natural key (PK) and the columns that make the edges (FK). Lines carry crow’s-foot marks and (1,1) (1,n) (0,1) (0,n). Drag a box to rearrange. − and + change the drawing sheet (A4 through A0). The rotate glyph switches portrait and landscape. The expand glyph fills the browser with the diagram and scales it to that space; the same glyph, or Escape, returns the size the diagram had on the page. Zoom changes how large the ink looks. Show / hide tables. Save my view keeps this browser’s layout, including the sheet. Download my view writes a .drawio of that layout. The full field list is Structure. It is a picture of your files, not a second copy of the book in memory.
Show / hide tables
Banking groups and legal entities book the deals; customers owe. Products, customer types, and FX rates are catalogues the volume rows point at. consol_scopes name a view root on the legal-entity tree — they are not extra companies.
| Relation | From → To | Cardinality | Your column |
|---|---|---|---|
BookedOn | BankEntity → Exposure | (1,1) — (1,n) | exposures.booking_entity_code (required) |
ObligorOf | Customer → Exposure | (1,1) — (1,n) | customer LEI / party |
ChildOfFacility | Facility → Exposure | (1,1) — (0,n) | facility_agreement_id |
ParentOfFacility | Facility → Facility | (1,1) — (0,n) | parent_facility_agreement_id |
ChildOfBankEntity | BankEntity → parent | (1,1) — (0,n) | parent_bank_entity_code |
| ConsolScope root | ConsolScope → BankEntity | (0,n) — (1,1) | root_bank_entity_code |
| Product index | Product → Exposure | (1,1) — (0,n) | product_id |
MemberOfExposurePool | ExposurePool → Exposure | (1,1) — (0,n) | exposure_pool_id |
ProvidedBy | Customer → Mitigant | (1,1) — (0,n) | provider LEI / party |
MemberOfNetting | Exposure → NettingSet | (0,n) — (0,n) | netting_members |
9. Constraints
| Rule | Effect |
|---|---|
| Unique natural keys in a table at this as-of | Duplicate → reject sibling + DQ_REF_DUP |
booking_entity_code on every exposure | Missing → block |
| Obligor on every exposure | Missing → reject missing_obligor |
| FKs must resolve | DQ_BROKEN_LINK |
| No parent cycles (LE / facility) | Reject / DQ |
consol_pct in 0–1 when proportional | Else DQ |
| Guarantor / CR-deriv provider is a Customer | DQ_REQUIRED / DQ_BROKEN_LINK |
| Facility with residual undrawn has eligible products | DQ_FACILITY_NO_PRODUCT |
| Enumerations in §10 | Unknown → DQ_ENUM |
| One FX row per currency at t | Duplicate → consumers block |
| Percentages 0–1; amounts ≤ 4 dp | Out of range / rounded at ingest |
Alpha never overwrites your input files.
10. Enumerations
| List | Values |
|---|---|
| Counterparty type | BANK CORP SME GOV PSE RETAIL NBFI MULTILATERAL INDIVIDUAL |
| Exposure type | ONBS OFFBS DERIV SFT RRE CRE SL EQUITY SECURITISATION OTHER |
| SL subtype | SL_PF SL_OF SL_CF SL_IPRE SL_HVCRE |
| SL treatment | SL_SLOTTING SL_IRB SL_STD |
| Method | STD FIRB AIRB SL_SLOTTING SL_STD |
| Facility style | none committed revolving |
| Institution kind | bank insurance investment_firm holding other |
| Entity role | parent sub branch booking_entity |
| Consol method | full proportional not_consolidated |
| CRM type | guarantee cr_deriv financial_collateral sft_collateral onbs_netting |
| RE bucket | rre cre adc other_re |
| CEM asset class | IR FX GOLD EQUITY PRECIOUS_METAL OTHER_COMM CREDIT |
| Trade direction | pay receive buy sell buy_protection sell_protection |
| Option type | call put |
| Leg type | fixed float |
| Netting agreement | ISDA GMRA GMSLA CSA OTHER |
| CCR formula | CEM SA_CCR |
11. What Alpha does not take from the bank as book files
| You might think to send | Actually |
|---|---|
| SupervisorSet grids (RW, CCF, haircut, CEM add-on, …) | Explorer → Supervisor. Not input/. |
| Market pack (published FX) | Explorer → Market. Distinct from stock fx_rates. |
| Hedging-set register | SA-CCR computes hedging sets. |
| CalculationSet recipe | Chosen at Calculate. Not a book table. |
manifest.json / envelope.json | Folder path carries as-of and stock_id. Alpha writes the envelope. |
| Nested JSON trees | Parent columns on tables. Consol views are consol_scopes tables. |
| Trading-book vs banking-book flag | Out of engine scope. |
12. Templates (Excel + CSV)
Header-only files — not example rows. Fill them; save as CSV (UTF-8) or convert to Parquet. Do not rename columns. Dashboard Data → Structure shows each table’s natural key, field list, and constraints.
Download Excel template is a workbook with two sheets: input (the upload header) and structure (the same field dictionary as this page — role, natural key, when to send, constraints, M/O/C, Field / Key / Type / Notes). The workbook is a fill-in aid. Do not upload it — bank send is still Parquet or CSV.
These files are already on this server (same copy as git). Open a name to see its fields, keys, and M/O/C on the Structure tab. CSV saves the header to Downloads — copy it into the book’s input/. You do not pull from git first.
Index: templates/.
- products · CSV
- customer_types · CSV
- fx_rates · CSV
- bank_entities · CSV
- banking_groups · CSV
- banking_group_supervisors · CSV
- consol_scopes · CSV
- customers · CSV
- exposures · CSV
- facilities · CSV
- ratings · CSV
- mitigants · CSV
- crm_scopes · CSV
- crm_links · CSV
- security_positions · CSV
- netting_sets · CSV
- netting_members · CSV
- exposure_derivatives · CSV
- exposure_sfts · CSV
- exposure_pools · CSV
- intragroup_links · CSV
- input_sets · CSV
- consolidation_measures · CSV
Appendix A — Relationships
Picture of your files, not a second copy of the book in memory.
Bank side (who books / consolidates) Obligor side (who owes)
banking_groups customers
│ │
bank_entities ──parent──► bank_entities customer_types (CIF class)
│ │
│ BookedOn │ ObligorOf
▼ │
exposures ◄──────── facility ───────────────┘
│
├─ product_id → products
├─ exposure_pool_id → exposure_pools
├─ CRM ProvidedBy → customers (guarantor)
└─ netting_members → netting_sets
consol_scopes name a root on the bank-entity tree (solo / sub / group). They are not extra companies.
| Registry | Natural key |
|---|---|
| BankEntity | bank_entity_code |
| BankingGroup | group_id |
| ConsolScope | scope_id |
| Customer | id (bank-chosen spelling) |
| CustomerType | customer_type_id |
| Product | product_id |
| Facility | (booking_entity_code, facility_agreement_id) |
| Exposure | (booking_entity_code, deal_id) |
| FxRate | ccy at this as-of |