From 7fb2231eb16e2188b9de0d87c9d56179e5a9dcc3 Mon Sep 17 00:00:00 2001 From: sstruzik Date: Fri, 17 Jul 2026 17:15:59 +0100 Subject: [PATCH 1/6] docs(OED): Sphinx reference site with spec-generated fields & coded values Standalone Furo/MyST site for the Open Exposure Data standard. Field reference (by input file: Loc/Acc/ReinsInfo/ReinsScope) and coded-value lists (perils, occupancy, construction, country, coverage) are generated at build time from oed.json (_ext/gen_oed_reference.py, which regenerates oed.json from the CSVs if absent); plus the migrated spec chapters and an overview/hierarchy explanation. Cross-component links via intersphinx (orchestrator-driven). Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/.gitignore | 6 + docs/Makefile | 13 + docs/source/_ext/gen_oed_reference.py | 134 ++++ docs/source/conf.py | 52 ++ docs/source/explanation/asset-details.rst | 113 ++++ .../financial-policy-conditions.rst | 596 ++++++++++++++++++ docs/source/explanation/financial-primary.rst | 345 ++++++++++ docs/source/explanation/geography-perils.rst | 155 +++++ docs/source/explanation/images/Hierarchy.png | Bin 0 -> 15575 bytes docs/source/explanation/import-format.rst | 142 +++++ docs/source/explanation/index.md | 66 ++ docs/source/explanation/rationale.rst | 44 ++ docs/source/explanation/reinsurance.rst | 364 +++++++++++ docs/source/index.md | 39 ++ docs/source/reference/fields.md | 24 + docs/source/reference/index.md | 11 + docs/source/reference/values.md | 8 + 17 files changed, 2112 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/Makefile create mode 100644 docs/source/_ext/gen_oed_reference.py create mode 100644 docs/source/conf.py create mode 100644 docs/source/explanation/asset-details.rst create mode 100644 docs/source/explanation/financial-policy-conditions.rst create mode 100644 docs/source/explanation/financial-primary.rst create mode 100644 docs/source/explanation/geography-perils.rst create mode 100644 docs/source/explanation/images/Hierarchy.png create mode 100644 docs/source/explanation/import-format.rst create mode 100644 docs/source/explanation/index.md create mode 100644 docs/source/explanation/rationale.rst create mode 100644 docs/source/explanation/reinsurance.rst create mode 100644 docs/source/index.md create mode 100644 docs/source/reference/fields.md create mode 100644 docs/source/reference/index.md create mode 100644 docs/source/reference/values.md diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..b22a55e9 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,6 @@ +build/ +source/reference/_generated/ +**/__pycache__/ +.jupyter_cache/ +jupyter_execute/ +.DS_Store diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..11797053 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,13 @@ +# Minimal Sphinx makefile for the ORD reference site +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/_ext/gen_oed_reference.py b/docs/source/_ext/gen_oed_reference.py new file mode 100644 index 00000000..a47f602c --- /dev/null +++ b/docs/source/_ext/gen_oed_reference.py @@ -0,0 +1,134 @@ +"""Generate OED reference pages from ``oed.json`` (single source of truth). + +The OED standard is defined by ``oed.json`` at the repo root — the same machine-readable +spec that ods-tools consumes. Rather than hand-maintain reference tables, this extension +reads ``oed.json`` at build time and writes MyST Markdown into ``reference/_generated/`` +which the reference pages include. Edit ``oed.json`` (and its source CSVs), not the +generated Markdown. + +Runs on the Sphinx ``config-inited`` event; also runnable standalone for quick checks. +""" +import json +import os + +HERE = os.path.dirname(os.path.abspath(__file__)) +REPO_ROOT = os.path.abspath(os.path.join(HERE, os.pardir, os.pardir, os.pardir)) +OED_JSON = os.path.join(REPO_ROOT, "oed.json") +OUT_DIR = os.path.join(HERE, os.pardir, "reference", "_generated") + +# input-file groups, in exposure-modelling order +FILE_ORDER = [("Loc", "Location"), ("Acc", "Account"), + ("ReinsInfo", "Reinsurance Info"), ("ReinsScope", "Reinsurance Scope")] + + +def _cell(text): + return str(text).replace("|", "\\|").replace("\n", " ").replace("\r", " ").strip() + + +def _pipe_table(columns, rows): + out = ["| " + " | ".join(columns) + " |", + "| " + " | ".join(["---"] * len(columns)) + " |"] + for row in rows: + out.append("| " + " | ".join(_cell(c) for c in row) + " |") + return "\n".join(out) + + +def _write(name, text): + os.makedirs(OUT_DIR, exist_ok=True) + with open(os.path.join(OUT_DIR, name), "w", encoding="utf-8") as fh: + fh.write(text + "\n") + + +def generate_fields(oed): + """input_fields -> field reference, grouped by input file.""" + fields = oed["input_fields"] + parts = [""] + total = 0 + for key, title in FILE_ORDER: + recs = fields.get(key) + if not recs: + continue + parts.append(f"\n## {title} (`{key}`)\n") + rows = [] + for rec in recs.values(): + rows.append([ + rec.get("Input Field Name", ""), + rec.get("Type & Description", ""), + rec.get("Data Type", ""), + rec.get("Property field status", ""), + rec.get("Default", ""), + ]) + total += 1 + parts.append(_pipe_table( + ["Field", "Description", "Data type", "Status", "Default"], rows)) + _write("oed_fields.md", "\n".join(parts)) + return total + + +def generate_values(oed): + """Coded value lists -> code reference tables.""" + parts = [""] + total = 0 + + # perils: nested under 'info' + perils = oed.get("perils", {}).get("info", {}) + if perils: + parts.append("\n## Perils\n") + rows = [[code, r.get("DB table PerilCode", ""), r.get("Peril Description", ""), + r.get("Grouped PerilCode", "")] for code, r in perils.items()] + parts.append(_pipe_table(["Code", "PerilCode", "Description", "Grouped"], rows)) + total += len(rows) + + def simple(key, title, cols): + nonlocal total + v = oed.get(key) + if not isinstance(v, dict): + return + parts.append(f"\n## {title}\n") + rows = [[code] + [rec.get(c, "") for _, c in cols] for code, rec in v.items()] + parts.append(_pipe_table(["Code"] + [h for h, _ in cols], rows)) + total += len(rows) + + simple("occupancy", "Occupancy codes", + [("Name", "Name"), ("Description", "Description"), ("Broad Category", "Broad Category")]) + simple("construction", "Construction codes", + [("Name", "Name"), ("Description", "Description"), ("Broad Category", "Broad Category")]) + simple("country", "Country codes", [("Name", "Name")]) + simple("CoverageValues", "Coverage types", + [("CoverageID", "CoverageID"), ("Description", "Description"), ("Type", "Type")]) + _write("oed_values.md", "\n".join(parts)) + return total + + +def _ensure_oed_json(): + """oed.json is a generated artifact (utils/gen-json.py builds it from the CSVs) and is not + committed. Generate it if missing so the docs build is self-sufficient in CI.""" + if os.path.exists(OED_JSON): + return + import subprocess + import sys + gen = os.path.join(REPO_ROOT, "utils", "gen-json.py") + subprocess.run([sys.executable, gen, "--output-path", OED_JSON], cwd=REPO_ROOT, check=True) + + +def run(app=None, config=None): + _ensure_oed_json() + with open(OED_JSON, encoding="utf-8") as fh: + oed = json.load(fh) + n_fields = generate_fields(oed) + n_values = generate_values(oed) + msg = f"[gen_oed_reference] wrote {n_fields} fields, {n_values} coded values -> reference/_generated/" + if app is not None: + from sphinx.util import logging + logging.getLogger(__name__).info(msg) + else: + print(msg) + + +def setup(app): + app.connect("config-inited", run) + return {"parallel_read_safe": True, "parallel_write_safe": True} + + +if __name__ == "__main__": + run() diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..a723c1fb --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,52 @@ +"""Sphinx configuration for the Open Exposure Data (OED) standard reference site. + +The field and coded-value reference is generated at build time from ``oed.json`` by the +local ``gen_oed_reference`` extension (single source of truth). Theme and MyST setup mirror +the other OasisLMF documentation sites for a consistent aggregated site. +""" +import datetime +import os +import sys + +sys.path.insert(0, os.path.abspath("_ext")) + +project = "Open Exposure Data (OED)" +author = "Oasis LMF" +copyright = f"{datetime.date.today().year} Oasis LMF" + +extensions = [ + "myst_parser", + "sphinx_design", + "sphinx_copybutton", + "gen_oed_reference", # build-time reference generation from oed.json +] + +source_suffix = {".rst": "restructuredtext", ".md": "markdown"} +master_doc = "index" +language = "en" +# _generated/*.md are include-only fragments, not standalone documents +exclude_patterns = ["reference/_generated/**"] + +myst_enable_extensions = ["colon_fence", "deflist", "substitution", "tasklist"] +myst_heading_anchors = 6 + +html_theme = "furo" +html_title = "Open Exposure Data (OED)" +html_static_path = ["_static"] if os.path.isdir(os.path.join(os.path.dirname(__file__), "_static")) else [] + + +# -- Cross-component links (intersphinx, aggregated site) -------------------- +# The GenerateDocs orchestrator sets OASIS_INTERSPHINX_MAP (JSON) to point cross-references at +# the other components' built inventories; standalone builds add nothing. Use explicit roles, +# e.g. {external+ord:doc}`reference/tables` or :external+oed:ref:`some-label`. +import json as _ix_json, os as _ix_os +if "sphinx.ext.intersphinx" not in extensions: + extensions = list(extensions) + ["sphinx.ext.intersphinx"] +try: + intersphinx_mapping +except NameError: + intersphinx_mapping = {} +intersphinx_mapping.update({ + _k: (_v[0], _v[1]) + for _k, _v in _ix_json.loads(_ix_os.environ.get("OASIS_INTERSPHINX_MAP", "{}")).items() +}) diff --git a/docs/source/explanation/asset-details.rst b/docs/source/explanation/asset-details.rst new file mode 100644 index 00000000..70e9a2bb --- /dev/null +++ b/docs/source/explanation/asset-details.rst @@ -0,0 +1,113 @@ +Asset Related Details +====================== + +The following sections describe the OED specification for the asset value, usage, construction, and other modifiers that can influence the susceptibility of an asset to damage from a peril. +Coverage total insurable value (TIV) + +Total insurable value (TIV) for each property is captured in four location level fields: + +• **BuildingTIV**: The total insurable value of the buildings. + +• **ContentsTIV**: The total insurance value of contents and stock. + +• **BITIV**: The total business interruption, or other time related, total insurable value. + +• **OtherTIV**: The total insurable value for elements other than the main building / contents / time elements. Typically used to represent the TIV for outbuildings / ap + +Total insurable value is not peril dependent. The currency of the TIV is specified in the **LocCurrency** field. +  +| + +Occupancy Type +############## + +Occupancy codes are stored in the **OccupancyCode** field. The occupancy type list is predominantly a one to one mapping from the AIR CEDE occupancy codes, although some extra codes have been added. The broad categories of code and the number ranges are shown in the table below. + + +.. csv-table:: + :widths: 10,10 + :header: "OED Occupancy Code Range", "Broad Category of Occupancy" + + "1000", "Unknown" + "1050 – 1099", "Residential" + "1100 – 1149", "Commercial" + "1150 – 1199", "Industrial" + "1200 – 1249", "Religion / Government / Education" + "1250 – 1299", "Transportation" + "1300 – 1349", "Utilities" + "1350 – 1399", "Miscellaneous" + "2000 – 2799", "Industrial Facility" + "3000 – 3999", "Offshore" + +Although the code ranges above infer an extremely long list of codes there are less than 200 distinct occupancy codes in total. Yachts and automobiles are included under construction type codes rather than occupancy codes. +Some users may have translated from a different (original) occupancy code to the OED occupancy code but would like to store the original occupancy code information. This can be done using the **OrgOccupancyScheme** and **OrgOccupancyCode** fields. +  +| + +Construction Type +################## + +Construction codes are stored in the **ConstructionCode** field. The construction type list is predominantly a one to one mapping from the AIR CEDE construction codes, although some extra codes have been added. The broad categories of code and the number ranges are shown in table below. + + +.. csv-table:: + :widths: 10,10 + :header: "OED Construction Code Range", "Broad Category of Construction" + + "5000", "Unknown" + "5050 – 5099", "Wood" + "5100 – 5149", "Masonry" + "5150 – 5199", "Concrete" + "5200 – 5249", "Steel" + "5250 – 5299", "Composite" + "5300 – 5349", "Special" + "5350 – 5399", "Mobile Homes" + "5400 – 5449", "Bridges" + "5450 – 5499", "Roads, Railroads, Runways" + "5500 – 5549", "Dams" + "5550 – 5599", "Tunnels" + "5600 – 5649", "Storage Tanks" + "5650 – 5699", "Pipelines" + "5700 – 5749", "Chimneys" + "5750 – 5799", "Towers" + "5800 – 5849", "Equipment" + "5850 – 5899", "Automobiles" + "5900 – 5949", "Yachts" + "5950 – 5999", "Miscellaneous" + "6000 – 6099", "Marine Cargo General" + "6100 – 6149", "Marine Cargo Combustible" + "6150 – 6199", "Marine Cargo Non-Combustible" + "7000 - 7999", "Offshore" + +| + +Although the code ranges above infer a very long list of codes there are less than 200 construction codes in total. +Some users may have translated from a different (original) construction code scheme to the OED construction code scheme but would like to store the original construction code information. This can be done using the **OrgConstructionScheme** and **OrgConstructionCode** fields. + +| + +Other Common Modifiers +###################### + +While different catastrophe models will use different modifiers to adjust the vulnerability of an asset, the following are the most commonly used modifiers: + +• **YearBuilt**: the year the building was built. **YearUpgraded**, **RoofYearBuil** are also modifiers that allow the user to add additional information. + +• **NumberOfStoreys**: The total number of storeys in a building. **BuildingHeight** is also available for the user to add in the precise height of the building if this is known. **FloorsOccupied** allows the specific floors in the building that are occupied to be specified. + +• **NumberOfBuildings**: The number of buildings represented by this location. This is commonly used to indicate the presence of aggregated data. If, instead, a user has specific details about different locations, but wants to denote a linkage of some kind between each location then the **LocGroup** field can be used to link individual locations (either for reporting purposes or to define a reinsurance ‘risk’ level). **CorrelationGroup** can be used to denote a correlation in secondary uncertainty between groups of locations. + +• **FloorArea** & **FloorAreaUnit**: The total floor area occupied, summing the area of multiple floors. + +Other modifiers, either peril specific or less commonly used by models, are available and are listed in the specification spreadsheet. They can be identified by filtering on the SecMod column in the ‘OED Input Fields’ sheet in the specification spreadsheet. +  +| + +Flexi-tables +############ + +Despite the wide range of fields available in OED, there is always the possibility that a user needs to enter or store information without a corresponding OED field. This can be achieved through the flexi-table functionality within OED, which essentially provides a key-value pair back end table at the main hierarchical levels. +To enter additional field / values, a user can enter additional columns: **FlexiLocZZZ**, **FlexPolZZZ**, **FlexiAccZZZ**, where ‘ZZZ’ contains the name of the new field. +For example, if a user wants to store information on house colour, they could add an additional column to the location input file with the fieldname *FlexiLocHouseColour*. + + diff --git a/docs/source/explanation/financial-policy-conditions.rst b/docs/source/explanation/financial-policy-conditions.rst new file mode 100644 index 00000000..578b93b8 --- /dev/null +++ b/docs/source/explanation/financial-policy-conditions.rst @@ -0,0 +1,596 @@ + + +Policy Special Conditions +######################### + +Policy special conditions are financial structures that apply to only a subset of locations within a policy. They apply after all location terms, but before any blanket policy terms or layer terms. As well as the deductibles and limits for conditions which begin with 'Cond' and follow the same field name convention as for location and policy terms, there are the following required fields: + +In the OED location and account file: + +* **CondTag** identifies the locations that a condition applies to in the locations file, and links them to the condition terms in the account file. + +In the OED account file: + +* **CondNumber** identifies a unique set of financial terms of the condition +* **CondPeril** identifies the perils that the condition applies to +* **CondPriority** identifies the order in which special conditions apply in case more than one condition applies to the same locations. + +Optionally in the OED account file; + +* **CondName** is a descriptive field for the condition +* **CondClass** can be used to specify a policy restriction condition + +| + +CondTag +####### + +The scope of each special condition is specified using a **CondTag** on each location in the location input file that corresponds with the **CondTag** in the account input file. This field is normally a meaningful string describing the scope of the condition, such as 'California'. + +| + +**Example 1 - a California sub-limit** + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag" + + "Acc1", "Loc1", "US", "CA", "California" + "Acc1", "Loc2", "US", "CA", "California" + "Acc1", "Loc3", "US", "IN", "" + "Acc1", "Loc4", "US", "NV", "" + +The **CondTag** is also included in the accounts file for the policies the condition applies to. + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All" + + "Acc1", "Pol1", "California", "1", "10,000,000" + +In this example, a 'sub-limit' of $10,000,000 applies to the combined loss for locations 1 and 2 in California. This applies after any location terms specified and before any policy terms which apply to all locations under the account. + +Some example ground up losses are as follows; + +| + +Example losses: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "Ground up loss" + + "Acc1", "Loc1", "US", "CA", "5,000,000" + "Acc1", "Loc2", "US", "CA", "7,000,000" + "Acc1", "Loc3", "US", "IN", "0" + "Acc1", "Loc4", "US", "NV", "4,000,000" + +The policy loss for an earthquake affecting California and Nevada in this scenario would be **$14,000,000** due to the California losses being limited to $10,000,000. + +It is common to have multiple conditions on a policy, applying to different groups of locations. When this is the case, the policy record in the account file must be duplicated for each different **CondTag** on the locations, as demonstrated in the next example. + +| + + +CondNumber +########## + +The set of financial terms for each condition is identified by the **CondNumber** field in the account file. + +For each policy in the account file, the financial terms identified by the **CondNumber** will be applied to the locations under the scope defined by each CondTag. + +In Example 2, **CondNumber** 1 is a $10,000,000 sub-limit applies to California losses and **CondNumber** 2 is a $15,000,000 sublimit for losses in the New Madrid region. + +**CondNumber** is normally a policy condition reference number, and may be numeric or alphanumeric. An optional field **CondName** can be used to describe the condition in meaningful terms. + +Note that although these types of conditions are referred to as sub-limits, they can be any combination of the regular types of financial terms such as deductibles, min and max deductibles, and limits. + +| + +**Example 2 - a California sub-limit and a New Madrid sub-limit** + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag" + + "Acc2", "Loc1", "US", "CA", "California" + "Acc2", "Loc2", "US", "CA", "California" + "Acc2", "Loc3", "US", "IN", "New Madrid" + "Acc2", "Loc4", "US", "NV", "" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All", "CondName" + + "Acc2", "Pol1", "California", "1", "10,000,000", "CA sub-limit" + "Acc2", "Pol1", "New Madrid", "2", "15,000,000", "NM sub-limit" + +In this example, a sub-limit of $10,000,000 will apply to the sum of losses from locations 1 and 2 for an earthquake in the California area, and a sub-limit of $15,000,000 will apply to the loss from Indiana location 3 from an earthquake in the New Madrid region, before any policy terms. + +No sub-limits apply to losses for the Nevada location 4, because it is not subject to any condition (CondTag field is blank). + +| + +CondPeril +######### + +Commonly, sub-limit conditions are peril-specific as well as region-specific. The **CondPeril** field specifies which perils the condition applies to. This can be a single peril code, or a string of peril codes separated by semi-colons. + +**CondPeril** must always be included in the account file whenever there are conditions, and it must be filled in with the appropriate peril codes. + +For example, a California earthquake sub-limit may be specified as follows; + +| + +**Example 3 - California earthquake sub-limit** + +| + +OED Location file + +| + +.. csv-table:: + :widths: 15,15,15,15,20,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag", "LocPerilsCovered" + + "Acc3", "Loc1", "US", "CA", "California", "OO1;QQ1" + "Acc3", "Loc2", "US", "CA", "California", "OO1;QQ1" + "Acc3", "Loc3", "US", "IN", "", "OO1;QQ1" + "Acc3", "Loc4", "MX", "02", "", "OO1;QQ1" + +The **LocPerilsCovered** field specify that each location in the account is subject to 'All flood perils' and 'All earthquake perils'. + +| + +OED Account file: + +| + +.. csv-table:: + :widths: 20,20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All", "PolPerilsCovered", "CondPeril" + + "Acc3", "Pol1", "California", "1", "10,000,000", "OO1;QQ1", "QQ1" + +| + +The **PolPerilsCovered** field specifies that the policy is subject to 'All flood perils' and 'All earthquake perils'. + +However the **CondPeril** field specifies that the condition is subject to 'All earthquake perils' only. + +This means that the sub-limit will only apply to losses arising from earthquake perils on the policy. + +| + +Nested hierarchal conditions +############################ + +In the above examples with multiple conditions, each condition applied to a different group of locations. + +There can also be multiple sub-limits that apply to the same location in a nested hierarchy. + +An example of this might be a US Wind sub-limit with nested state-level sub-limits, say for Florida and Texas, on an account covering global locations. + +We must 'tag' all of the locations for each condition that applies to them by adding more records in the locations file. + +| + +**Example 4 - nested hierarchal conditions** + +| + + + + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag" + + "Acc4", "Loc1", "US", "FL", "Florida" + "Acc4", "Loc1", "US", "FL", "US" + "Acc4", "Loc2", "US", "FL", "Florida" + "Acc4", "Loc2", "US", "FL", "US" + "Acc4", "Loc3", "US", "TX", "Texas" + "Acc4", "Loc3", "US", "TX", "US" + "Acc4", "Loc4", "US", "LA", "US" + "Acc4", "Loc5", "MX", "02", "" + + +We have two location records for Locations 1,2 and 3, with a CondTag for the 'Florida' or 'Texas' sub-limits and a second CondTag 'US' for the US wind sub-limit. Location 5 is outside the scope of all conditions. + +In the account file, we have policy record for each condition: Florida, Texas and US sub-limit. + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All", "CondName", "CondPeril","CondPriority" + + "Acc4", "Pol1", "Florida", "1", "10,000,000", "FL sub-limit", "WW1", "1" + "Acc4", "Pol1", "Texas", "2", "5,000,000", "TX sub-limit", "WW1", "1" + "Acc4", "Pol1", "US", "3", "12,500,000", "US sub-limit", "WW1", "2" + +The Florida and Texas sub-limits apply first, and the US sub-limit applies second. This would result in any combined losses from Florida and Texas exceeding the US sub-limit being limited to $12,500,000. Then policy terms would apply to the sum of limited US locations and the rest of world locations. + +| + +Example losses: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "Ground up loss" + + "Acc4", "Loc1", "US", "FL", "5,000,000" + "Acc4", "Loc2", "US", "FL", "6,000,000" + "Acc4", "Loc3", "US", "TX", "7,000,000" + "Acc4", "Loc4", "US", "LA", "1,000,000" + "Acc4", "Loc5", "MX", "02", "0" + +The Florida sub-limit applies to the losses from Locations 1 and 2 and limits them to $10,000,000. The Texas sub-limit limits the Location 3 loss to $5,000,000. + +The US sub-limit applies to the sum of the **limited** state level losses of $10,000,000 and $5,000,000, and the $1,000,000 loss from Location 4 which is only subject to the US sub-limit . The total gross loss before policy terms is **$12,500,000**. + +The Florida and Texas sub-limits can be referred to as 'child' conditions, with the US sub-limit referred to as the 'parent' condition. + +'Nested' means that all locations in the child sub-limit regions also belong to the parent sub-limit region. There may be locations belonging +to the parent sub-limit region but not any child sub-limit region. + +It is possible to represent an unlimited number of hierarchal levels in OED, but in practice the number of hierarchal levels rarely exceeds two. + +| + + + +CondPriority +############ + +When there are hierarchal conditions as in the example above, it is necessary to specify the order in which the conditions apply. **CondPriority** is an integer field in the accounts file which specifies the relative order in which the conditions apply. + +In the previous example, the value in the **CondPriority** field is equivalent to the hierarchal level of each condition. + +However in practice, where there are many children conditions, there is often an overall ranking or priority assigned to each condition regardless of whether there is a hierarchy or not. + +| + +**Example 5 - parent and child conditions** + +| + +OED Location file: + +.. csv-table:: + :widths: 20,20,20 + :header: "AccNumber", "LocNumber", "CondTag" + + "Acc5", "Loc1", "child1" + "Acc5", "Loc1", "parent" + "Acc5", "Loc2", "child2" + "Acc5", "Loc2", "parent" + "Acc5", "Loc3", "child3" + "Acc5", "Loc3", "parent" + "Acc5", "Loc4", "parent" + "Acc5", "Loc5", "" + +The location file must have two records for each location subject to a child condition and the parent condition. Locations 1-3 all appear twice in the locations file with two different CondTags and are part of the nested hierarchal conditions. + +Location 4 is subject to the parent condition only so it appears only once. + +Location 5 appears once and is outside of the hierarchy with no conditions, and its loss is carried into the policy terms with no sub-limits applied. + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All", "CondName", "CondPriority" + + "Acc5", "Pol1", "child1", "1", "10,000,000", "child1", "1" + "Acc5", "Pol1", "child2", "2", "5,000,000", "child2", "2" + "Acc5", "Pol1", "child3", "3", "5,000,000", "child3", "3" + "Acc5", "Pol1", "parent", "5", "20,000,000", "parent", "4" + + +The relative values of CondPriority between the child conditions do not matter when the conditions apply to non-overlapping groups of locations. All that matters is that the relative value of the CondPriority of the parent condition is greater than the value of CondPriority of each of the child conditions. + +Hierarchal conditions are only recognised by the presence of duplicate locations in the locations file, and not by the values in CondPriority or the descriptions of the conditions in CondName. + +It is only when the same location appears twice in the location file with different CondTag values that the relative values of **CondPriority** will be used to determine the order in which the conditions apply. **CondPriority** is disregarded in the case that there are multiple non-overlapping conditions. + +| + +Policy restrictions +################### + +In all of previous examples, the conditions have been 'sub-limit' types, where the set of financial terms apply to the locations which are assigned a particular CondTag. This is the default case and it does not need to be explicitly specified. + +For accounts with multiple locations, the default assumption is that if there is more than one policy on the account, then every policy applies to every location in the account. + +However, policies on an account can sometimes have certain locations excluded. Policy restrictions are specified in OED using the **CondClass** field. + +| + +CondClass +######### + +Policy restrictions are implemented as an alternative classification of special conditions which can be specified by the **CondClass** field in the account file. A value of 1 means 'Policy restriction', otherwise the default value of 0 (sub-limit) is assumed. + +The difference between them is what happens to losses for locations under the account that do not have a CondTag. + +* When the condition is a sub-limit - the locations that have no CondTag will still contribute loss to the policy on the account. +* When the condition is a policy restriction - the locations that have no CondTag **will not** contribute loss to the policy on the account. + +There are usually no financial terms such as limits or deductibles that apply in policy restrictions. A policy restriction is normally only used to exclude locations from contributing to a policy. + +Next is an example which excludes Florida locations from the policy. + +| + +**Example 6 - Single policy restriction** + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag" + + "Acc6", "Loc1", "US", "NC", "366" + "Acc6", "Loc2", "US", "NC", "366" + "Acc6", "Loc3", "US", "FL", "" + "Acc6", "Loc4", "US", "TX", "366" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondName", "CondClass" + + "Acc6", "Pol1", "366", "366450", "EXCL FL LOCS", "1" + +Only Locations 1, 2, and 4 are subject to the policy terms and Florida location 3 is excluded. + +| + +Example losses: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "Ground up loss" + + "Acc6", "Loc1", "US", "NC", "4,000,000" + "Acc6", "Loc2", "US", "NC", "2,000,000" + "Acc6", "Loc3", "US", "FL", "20,000,000" + "Acc6", "Loc4", "US", "TX", "10,000,000" + +The policy restriction means that the Florida loss is excluded, The gross loss is the sum of losses from the non-Florida locations which is **$16,000,000**. + +| + +Conditions on multi-policy accounts +################################### + +When there are multiple policies on an account, conditions can be symmetric (same conditions apply to all policies) or assymmetric (different conditions per policy). + +Continuing the regional sub-limit example 2, we can add a second excess policy to the account with the same conditions. + +| + +**Example 7 - Symmetric policy conditions** + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "CondTag" + + "Acc7", "Loc1", "US", "CA", "California" + "Acc7", "Loc2", "US", "CA", "California" + "Acc7", "Loc3", "US", "IN", "New Madrid" + "Acc7", "Loc4", "US", "NV", "" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondLimit6All", "LayerAttachment", "LayerLimit" + + "Acc7", "Pol1", "California", "1", "10,000,000", "0", "10,000,000" + "Acc7", "Pol1", "New Madrid", "2", "5,000,000", "0", "10,000,000" + "Acc7", "Pol2", "California", "1", "10,000,000", "10,000,000", "15,000,000" + "Acc7", "Pol2", "New Madrid", "2", "5,000,000", "10,000,000", "15,000,000" + +Some layer terms are added to distinguish between Pol1 and Pol2. This is an example where conditions are symmetric across policies. + +| + +Example losses: + +.. csv-table:: + :widths: 15,15,15,15,20 + :header: "AccNumber", "LocNumber", "CountryCode", "AreaCode", "Ground up loss" + + "Acc7", "Loc1", "US", "CA", "5,000,000" + "Acc7", "Loc2", "US", "CA", "7,000,000" + "Acc7", "Loc3", "US", "IN", "0" + "Acc7", "Loc4", "US", "NV", "4,000,000" + + +Pol1: California losses are limited to $10,000,000. Loss before layer terms = $14,000,000. Gross loss after layer limit = **$10,000,000** + +Pol2: California losses are limited to $10,000,000. Loss before layer terms = $14,000,000. Gross loss after layer attachement and limit = **$4,000,000** + +| + +**Example 8 - Asymmetric policy conditions** + +Policies may be defined to apply to different locations within an account. When this is the case, policy restrictions can be used to specify the exclusion of different locations from each policy. This leads to assymmetric policy conditions. + +In this example, a policy restriction is used to exclude location 4 from policy A. In addition, a normal sub-limit applies to a location in policy A. The sub-limit is applied as priority 1, and the restriction as priority 2. + +Policy B covers all 4 locations without the sub-limit. + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15 + :header: "AccNumber", "LocNumber", "CondTag" + + "Acc8", "Loc1", "PolA" + "Acc8", "Loc2", "Sublimit_400k" + "Acc8", "Loc2", "PolA" + "Acc8", "Loc3", "PolA" + "Acc8", "Loc4", "" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,20,20,20,20,20 + :header: "AccNumber", "PolNumber", "CondTag", "CondNumber", "CondPriority", "CondClass", "CondLimit6All" + + "Acc8", "PolA", "Sublimit_400k", "1", "1", "0", "400,000" + "Acc8", "PolA", "PolA", "2", "2", "1", "" + "Acc8", "PolB", "", "", "", "", "" + +| + +Example losses: + +.. csv-table:: + :widths: 15,15,20 + :header: "AccNumber", "LocNumber", "Ground up loss" + + "Acc8", "Loc1", "800,000" + "Acc8", "Loc2", "1,000,000" + "Acc8", "Loc3", "500,000" + "Acc8", "Loc4", "300,000" + + +PolA: Location 2 is limited to $400,000. Location 4 is excluded. Gross loss before policy terms = $800k + $400k + $500k = **$1,700,000** + +PolB: All location losses are included. Gross loss before policy terms = $800k + $1000k + $500k + $300k = **$2,600,000** + +| + +For each specified CondTag in the locations file, there must be least one associated policy condition in the accounts file, and vice versa. In other words, there must not be any CondTags in the one file not appearing in the other file. + +Finally, below are some examples of sub-limits in combination with other policy terms. + +We show two examples, firstly where the sub-limits are not nested and secondly where the sub-limits are nested. + +| + +**Example 9 – Commercial lines – multiple locations per policy with location and policy deductibles but with a sub-limit for tier 1 wind** + +The tables below show an example of a commercial portfolio with 1 account containing 6 locations. The policy covers earthquake and wind with the same overall policy limit for both perils. However, for certain locations two different sub-limits apply for wind (e.g. Florida wind sub-limit and Texas wind sub-limit). + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,20,25,20,15 + :header: "AccNumber", "LocNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building", "CondTag" + + "Acc9", "1", "1,000,000", "0", "10,000", "1" + "Acc9", "2", "1,000,000", "2", "0.01", "1" + "Acc9", "3", "1,000,000", "1", "0.05", "2" + "Acc9", "4", "2,000,000", "0", "15,000", "2" + "Acc9", "5", "2,000,000", "0", "10,000", "" + "Acc9", "6", "2,000,000", "2", "0.10", "" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,30,30, 30,30,30,30,30,25 + :header: "AccNumber", "PolNumber", "PolPerilsCovered", "PolLimit6All", "CondTag", "CondNumber", "CondPriority", "CondPeril", "CondLimit6All" + + "Acc9", "1", "QQ1;WW1", "1,500,000", "1", "1", "1", "WW1", "250,000" + "Acc9", "1", "QQ1;WW1", "1,500,000", "2", "2", "1", "WW1", "500,000" + +| + +**Example 10 – Commercial lines – multiple locations per policy with location and policy deductibles with nested hierarchal sub-limits for wind** + +If two special conditions are nested or overlap (e.g. Texas tier 1 wind sub-limit of 250,000 (**CondNumber** = 1) and Texas overall wind sub-limit of 500,000 (**CondNumber** = 2)), the tables would be specified as shown below. The example below assumes that locations 1 and 2 are in the Texas tier 1 region, locations 3 and 4 are within Texas but not in the Tier 1 wind region, and locations 5 and 6 are outside Texas. + +| + +OED Location file: + +.. csv-table:: + :widths: 12,12,15,20,15,10 + :header: "AccNumber", "LocNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building", "CondTag" + + "Acc10", "1", "1,000,000", "0", "10,000", "1" + "Acc10", "1", "1,000,000", "0", "10,000", "2" + "Acc10", "2", "1,000,000", "2", "0.01", "1" + "Acc10", "2", "1,000,000", "2", "0.01", "2" + "Acc10", "3", "1,000,000", "1", "0.05", "2" + "Acc10", "4", "2,000,000", "0", "15,000", "2" + "Acc10", "5", "2,000,000", "0", "10,000", "" + "Acc10", "6", "2,000,000", "2", "0.10", "" + +| + +OED Account file: + +.. csv-table:: + :widths: 20,20,30,30,20,20,20,25,25 + :header: "AccNumber", "PolNumber", "PolPerilsCovered", "PolLimit6All", "CondTag", "CondNumber", "CondPriority", "CondPeril", "CondLimit6All" + + + "Acc10", "1", "QQ1; WW1", "1,500,000", "1", "1", "1", "WW1", "250,000" + "Acc10", "1", "QQ1; WW1", "1,500,000", "2", "2", "2", "WW1", "500,000" + + + + + + + + + + + + + + + + + + diff --git a/docs/source/explanation/financial-primary.rst b/docs/source/explanation/financial-primary.rst new file mode 100644 index 00000000..e6262239 --- /dev/null +++ b/docs/source/explanation/financial-primary.rst @@ -0,0 +1,345 @@ +Financial Details - Primary Insurance +===================================== + +OED is designed to allow a wide variety of complex financial structures – beyond that currently possible in Oasis or any other catastrophe modelling platform. To encompass such a variety of financial structures (e.g. different limits for different perils, or multiple policy special conditions) within a limited set of input files (two for primary insurance) it is necessary to allow multiple rows within each file for the same location or policy. The need for this will become clearer in the examples that follow. + +The OED hierarchy is described in the *overview* section. Primary financial structures in OED can apply at the following levels: + +• Location ‘Loc’ + +• Special Conditions ‘Cond’ + +• Policy ‘Pol’ + +• Account ‘Acc’ + +The above abbreviations are used consistently throughout OED (for example in the field names). +Limits, deductibles and minimum and maximum deductibles can be defined at each of these levels and can apply to different combinations of coverages at each of these levels as described in the next section. +  +| + +Coverage Values +############### + +Coverage values to describe which combination of coverage types a financial structure apply to are as follows: + +.. csv-table:: + :widths: 8,20 + :header: "Coverage Value", "Description" + + "0", "No deductible / limit" + "1", "Building" + "2", "Other (typically appurtenant structures)" + "3", "Contents" + "4", "Business Interruption (BI)" + "5", "Property Damage (PD: Building + Other + Contents)" + "6", "All (PD + BI)" + +These coverage values (1 to 6) are embedded in the input field names (as shown in the examples). + +| + +Deductible and Limit Types +########################## + +The deductible and limit type fields describe whether the deductibles and limits are flat monetary amounts, or percentages of TIV, or percentages of loss: + +.. csv-table:: + :widths: 5,20 + :header: "Type", "Description" + + "0", "Deductible / limit is flat monetary amount" + "1", "Deductible / limit is a percentage of loss" + "2", "Deductible / limit is a percentage of TIV" + +There are multiple ‘Type’ fields containing the values in the table above, each representing a different combination of hierarchy, financial structure kind and coverage. + +| + +Deductible and Limit Codes +########################## + +The deductible and limit code fields describe how the deductibles and limits operate. The options for deductible codes are as follows: + + +.. csv-table:: + :widths: 5,20 + :header: "Deductible Code", "Description" + + "0", "Regular: applies to an individual loss (or the sum of losses from an individual event depending on the hierarchy level of application)" + "1", "Annual aggregate: applies to the sum of losses over a year" + "2", "Franchise deductible: disappears when the franchise level is reached" + "3", "Non-ranking deductible: a deductible that does not count (or ‘rank’) towards a maximum annual aggregate deductible" + "4", "Residual deductible: A deductible (normally lower than the regular deductible) that applies after a maximum annual aggregate deductible amount is reached" + "5", "CEA Homeowners: A specific type of deductible applying in a California Earthquake Authority (CEA) Homeowners policy" + "6", "CEA Homeowners Choice: A specific type of deductible applying in a California Earthquake Authority (CEA) Homeowners Choice policy" + + +The options for limit codes are as follows: + +| + +.. csv-table:: + :widths: 5,30 + :header: "Limit Code", "Description" + + "0", "Regular: applies to an individual loss (or the sum of losses from an individual event depending on the hierarchy level of application)" + "1", "Annual aggregate: applies to the sum of losses over a year" + +| + +Structure of Financial Field Names +################################## + + +There are multiple financial fields to store the ‘Type’, ‘Code’ and actual values for the different deductible and limits reflecting the different variations of: + +• What hierarchy the financial structure applies at: ‘Loc’, ‘Cond’, ‘Pol’ or ‘Acc’ + +• Whether the financial structure is a limit or deductible or maximum or minimum deductible: ‘Ded’, ‘Limit’, ‘MaxDed’ or ‘MinDed’ + +• The coverage that the financial structure applies to (‘1Building’ to ‘6All’) + +This is illustrated below: + +.. image:: images/Hierarchy.png + +| + +For example: + +**LocDedCode1Building** is the field in the location input file that contains the code for the deductible applicable to losses from building coverages. + +**AccLimitCode6All** is the field in the account input file that contains the code for the limit applicable to losses from all coverages at account level. + +**PolDed6All** is the field in the account input file that contains the value of the deductible applicable to losses from all coverages at policy level. + +**LocMaxDed1Building** is the field in the location input file that contains the value of the maximum deductible applicable to losses from the building coverage. + +**CondLimitType6All** is the field in the account input file that contains the type of limit applicable to losses from all coverages for a special condition. + +The reason for having both the coverage value (1 to 6) as well as spelling out the coverage kind in the input field names is so that the users of OED can easily associate the value numbers with the coverage types. + +| + +Policy Special Conditions +######################### + +Policy special conditions are financial structures that apply to only a subset of locations within a policy. They apply after all location terms, but before any blanket policy terms or layer terms. + +The scope of each special condition is specified using a **CondTag** on each location (in the location input file) that corresponds with the **CondTag** in the account input file. + +A unique set of financial terms and a classification is identified by the **CondNumber** field in the account file. + +The specification of the financial details of the condition is done in the same way as any other financial structure within OED but using the field names starting with ‘Cond’. All of the coverage values deductible and limit types and codes can be used for a special condition to specify how the special condition financial structures work. + +See the Financial Details Policy Conditions section for a detailed description of how special conditions are specified, and some examples. + +| + +Participation Fields +#################### + +The following fields are available to reflect that an insurer may only have a share of a primary policy or location: + +**LayerParticipation** represents the share that an insurer has in a policy. + +**LocParticipation** represents the share that an insurer has in a particular location. Occasionally there are cases when this can vary within a policy (e.g. binders or offshore) and so this field is provided to allow flexibility in these circumstances. +  +| + +Currencies +########## + +Three currency fields are available: + +• **LocCurrency** contains the currency in the location file and specifies the currency for TIV and location level financial terms. + +• **AccCurrency** contains the currency in the account file and specifies the currency for special condition, policy and account level financial terms. + +• **ReinsCurrency** contains the currency in the reinsurance file and specifies the currency for reinsurance financial terms. + +The currency code values are predominantly those contained within the ISO4217 standard although older (for example pre-euro) codes are also allowed. + +| + +Examples of Specifying Primary Financial Structures +#################################################### + +The following examples illustrate the principles discussed in the previous sections. Not all required fields are shown in the examples below – only those needed to illustrate the principles highlighted. + +**Example 1 – Personal lines with coverage deductibles** + +Personal lines data often has one location per policy / account, with financial terms only applying at location-coverage or location level. There are two ways that this could be represented in OED, either using one account / policy per location or using an account / policy to represent multiple locations reflecting some natural grouping of personal lines policies. The latter approach is more space efficient. Both approaches are described below. + +The tables below show 3 locations, all with the same 100,000 buildings TIV and deductibles that apply at the buildings coverage level. Location 1 has a monetary (**DedType = 0**) deductible of 200, location 2 has a 1% of TIV deductible (**DedType = 2**) and location 3 has a 5% of loss deductible (**DedType = 1**). + +| + +The OED Account and Location tables using the first approach are as follows: + +OED Account file: + +.. csv-table:: + :widths: 25,20 + :header: "AccNumber", "PolNumber" + + "PolRef1", "PolRef1" + "PolRef2", "PolRef2" + "PolRef3", "PolRef3" + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,20,20,15 + :header: "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building","LocDedCode1Building","LocDed1Building" + + "1", "PolRef1", "100,000", "0", "0", "200" + "2", "PolRef2", "100,000", "2", "0", "0.01" + "3", "PolRef3", "100,000", "1", "0", "0.05" + +| + +Note that **LocDedCode1Building = 0** which means the deductible is a standard type (not an annual aggregate or franchise etc.) This field is not actually required for standard deductibles – it would default to 0 if not provided. + +Not all required fields are shown in the tables above; specifically, **PortNumber, AccCurrency** and **PolPerilsCovered** are required in the account table, and **PortNumber, LocPerilsCovered, CountryCode, OtherTIV, ContentsTIV, BITIV** and **LocCurrency** are required in the location table. +The second way of representing personal lines data is to group all locations under one ‘policy’ but provide the true policy reference in the **LocNumber** field, as shown below: + +| + +OED Account file: + +.. csv-table:: + :header: "AccNumber", "PolNumber" + + "1", "1" + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,15,22,22,18 + :header: "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building","LocDedCode1Building","LocDed1Building" + + "PolRef1", "1", "100,000", "0", "0", "200" + "PolRef2", "1", "100,000", "2", "0", "0.01" + "PolRef3", "1", "100,000", "1", "0", "0.05" + +| + +This is a more efficient approach as the size of the account table is much smaller which is relevant since personal lines portfolios can easily contain several million locations. + +| + +**Example 2 – Commercial lines – multiple locations per policy with location and policy deductibles and a policy limit** + +The tables below show an example of a commercial portfolio with 3 accounts, each with 2 locations. Each location has a coverage deductible and there is an overall policy deductible and an overall policy limit. + + +OED Account file: + +.. csv-table:: + :widths: 15,15,20,18,22,15 + :header: "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + "1", "1", "0", "50,000", "0", "1,500,000" + "2", "1", "2", "0.05", "0", "1,500,000" + "3", "1", "1", "0.10", "2", "0.80" + +| + +OED Location file: + +.. csv-table:: + :widths: 12,12,15,25,20 + :header: "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1,000,000", "0", "10,000" + "2", "1", "1,000,000", "2", "0.01" + "3", "2", "1,000,000", "1", "0.05" + "4", "2", "2,000,000", "0", "15,000" + "5", "3", "2,000,000", "0", "10,000" + "6", "3", "2,000,000", "2", "0.10" + +In the account table above, there are two options for specifying the policy limit: either using the **PolLimit6All** field (as shown) or using the **LayerLimit** field (not shown). If a limit is specified as anything other than a monetary amount (e.g. as a percentage of sum insured) then the **PolLimit6All** field must be used. + +If there are underlying limits before a policy layer (e.g. perhaps a sublimit for storm surge that applies to all locations) then **PolLimit6All** must be used. If there is only one monetary policy limit, then the user has a choice of whether to use LayerLimit or **PolLimit6All**. Our recommendation in this case is to use **LayerLimit** rather than **PolLimit6All**, as this may prove more efficient downstream when reporting out on main policy limits. + +| + +**Example 3 – Commercial lines – multiple locations per policy with different policy level deductibles and limits for different perils** + +The tables below show an example of a commercial portfolio with 3 accounts, each with 2 locations. Each account has one policy and each policy covers earthquake **(peril code = QQ1)**, wind **(WW1)** and flood **(OO1)**. Each location has a coverage deductible which applies to all perils. Each policy has deductibles and limits that apply across all coverages; however the policy flood deductibles are higher than those for wind and earthquake and the flood limits are lower than those for wind and earthquake. + +| + +OED Account file: + +.. csv-table:: + :widths: 18,18,18,25,20,25,20 + :header: "AccNumber", "PolNumber", "PolPeril", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + "1", "1", "QQ1;WW1", "0", "50,000", "0", "1,500,000" + "1", "1", "OO1", "0", "100,000", "0", "500,000" + "2", "1", "QQ1;WW1", "2", "0.05", "0", "1,500,000" + "2", "1", "OO1", "0", "500,000", "0", "1,000,000" + "3", "1", "QQ1;WW1", "1", "0.10", "2", "0.80" + "3", "1", "OO1", "1", "0.20", "2", "0.60" + +| + +OED Location file: + +.. csv-table:: + :widths: 15,15,18,30,20 + :header: "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1,000,000", "0", "10,000" + "2", "1", "1,000,000", "2", "0.01" + "3", "2", "1,000,000", "1", "0.05" + "4", "2", "2,000,000", "0", "15,000" + "5", "3", "2,000,000", "0", "10,000" + "6", "3", "2,000,000", "2", "0.10" + +The account table above shows one of the flexible features of the OED – the possibility of having multiple rows for the same policy in the account table. This allows different terms to be specified for different perils as indicated by the **PolPeril** field. + +| + +**Example 4 – Policy layers** + +The tables below show an example of a commercial portfolio with 1 account containing 6 locations and two policy layers. Each location has a coverage deductible and each policy has an underlying deductible applying across all coverage types. + +| + +OED Account file: + +.. csv-table:: + :widths: 12,12,20,15,20,15,20 + :header: "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "LayerAttachment", "LayerLimit", "LayerParticipation" + + "1", "1", "0", "50,000", "0", "1,500,000", "0.1" + "1", "2", "0", "50,000", "1,500,000", "3,500,000", "0.5" + +| + +OED Location file: + +.. csv-table:: + :widths: 10,12,12,20,15 + :header: "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1,000,000", "0", "10,000" + "2", "1", "1,000,000", "2", "0.01" + "3", "1", "1,000,000", "1", "0.05" + "4", "1", "2,000,000", "0", "15,000" + "5", "1", "2,000,000", "0", "10,000" + "6", "1", "2,000,000", "2", "0.10" + +The two different layers in the example above have different policy numbers within the same account. The insurer has a 10% share of the first layer and a 50% share of the second layer specified within **LayerParticipation**. The policy level deductible specified in **PolDedType6All** and **PolDed6All** applies to losses before the layer terms apply. + +Although not shown in the example above, it is possible to specify a layer number for each layer using the **LayerNumber** field. + +If a policy has a limit that covers all perils and coverage types, then either **PolLimit6All** or **LayerLimit** can be used to represent this limit. In this case the recommendation is to use **LayerLimit** rather than **PolLimit6All**, as this then results in a consistent field containing the ultimate policy limit that can ease subsequent reporting. diff --git a/docs/source/explanation/geography-perils.rst b/docs/source/explanation/geography-perils.rst new file mode 100644 index 00000000..7fe2a217 --- /dev/null +++ b/docs/source/explanation/geography-perils.rst @@ -0,0 +1,155 @@ +Geography and Perils +==================== + +There are several aspects to geographical information in OED: + +• Country codes + +• Address information fields + +• Geocoding information + +| + +Country Codes +############# + +Country codes are stored in the **CountryCode** field and are based on the ISO3166 alpha-2 codes with the following additions: + +• *XB* = Bonaire + +• *XS* = Saba + +• *XE* = St Eustatius + +• *XW* = Worldwide exposure (not used for modelling) + +• Offshore regions have been added as a direct one to one mapping from AIR’s CEDE offshore codes (the AIR three letter codes have been mapped to two-character codes for storage efficiency e.g. 'A1' for Alaska offshore) + +Full details of the permitted code values are in the OED specification spreadsheet. + +| + +Standardised Geographical Fields +################################ + +The following fields are available for capturing geographical information in OED: + +• **StreetAddress**: The building number and street + +• **PostalCode**: The predominant full resolution postal code used (e.g. 5-digit zip code in the US) + +• **City**: City name + +• **AreaCode**: Code representing typically the largest geographical division in a country (e.g. State code). See the Open Exposure Data Spec spreadsheet for a list of values. + +• **AreaName**: Description of the **AreaCode** (e.g. State name) + +| + +Flexible Geographical Fields +############################ + +The OED format caters for a wide variety of models from different model developers. In order to allow sufficient flexibility to cope with different user and model developer requirements there are flexible geographical fields: **GeogSchemeXX / GeogNameXX**. The 'XX' needs to be replaced by an integer so the name pairs become **GeogScheme1/GeogName1** and OED can support up to ninety-nine pairs. It's worth noting that performance time (especially during the 'lookup' phase of analysis) may be affected the more pairs are used. These pairs allow model developers and users to define their own geographical schemes (defined by an appropriate GeogScheme code) each with a corresponding set of GeogName values. + +For example, a model developer may want to split each country up into four equal areas ‘A’, ‘B’, ‘C’, ‘D’. In this case they would define a new GeogScheme code e.g. ‘QUAD’. They would communicate to users of their model that they must specify GeogName values ‘A’, ‘B’, ‘C’ or ‘D’ for their new ‘QUAD’ GeogScheme. The model user would then populate one of the GeogScheme / GeogName pairs with ‘QUAD’ and ‘A’, ‘B’, ‘C’ or ‘D’ respectively. + +This provides a large amount of flexibility to cope with different user and model developer requirements. +GeogScheme codes are up to five characters (no special characters). The latest codes can be found in the Open Exposure Data Spec spreadsheet on the OED GitHub repository in https://github.com/OasisLMF/OpenDataStandards/tree/master/OpenExposureData/Docs + +Users can also specify their own schemes (e.g. for reporting purposes). The only requirement here is that any user defined scheme codes **must start with ‘X’** in order to avoid a potential code clash with future model developer schemes. + +| + +Geocoding +######### + +**Latitude** and **Longitude** fields are available within OED. However, a latitude and longitude pair in isolation gives no indication as to the resolution of the geocode, the confidence in the geocode or the geocoder used to derive the latitude and longitude. + +**AddressMatch** allows information about the resolution of the geocode to be captured. For example, whether the latitude / longitude pair represents the centroid of a large area (e.g. a State) or the centre of an individual building. + +**GeocodeQuality** allows the capture of a number between 0 and 1 representing a confidence score associated with the geocode (1 denoting perfect confidence, 0 denoting zero confidence). + +**Geocoder** is a free text field that allows capture of the name and version of the geocoding engine used.  + +| + +Peril Codes +########### + +The system for capturing which perils apply to different exposure elements and financial structures is designed to be flexible and extensible. Each peril is assigned a code and shown in the table below: + + +.. csv-table:: + :widths: 130,30 + :header: "Peril", "Input Format Peril Code" + + "Earthquake - Shake only", "QEQ" + "Fire Following", "QFF" + "Tsunami", "QTS" + "Sprinkler Leakage", "QSL" + "Landslide", "QLS" + "Liquefaction", "QLF" + "Tropical Cyclone", "WTC" + "Extra Tropical Cyclone", "WEC" + "Storm Surge", "WSS" + "River / Fluvial Flood", "ORF" + "Flash / Surface / Pluvial Flood", "OSF" + "Straight-line / other convective wind","XSL" + "Tornado", "XTD" + "Hail", "XHL" + "Snow", "ZSN" + "Ice", "ZIC" + "Freeze", "ZFZ" + "NonCat", "BFR" + "Wildfire / Bushfire", "BBF" + "NBCR Terrorism", "MNT" + "Conventional Terrorism", "MTR" + "Lightning", "XLT" + "Winterstorm Wind", "ZST" + "Smoke", "BSK" + "Drought Induced Subsidence", "SSD" + "Crop Hail (From Convective Storm)", "XCH" + "Cyber Security Data and Privacy Breach","CSB" + "Cyber Security Property Damage", "CPD" + "Pandemic Flu", "PNF" + "Volcanic Ash Cloud", "VVA" + "Volcanic lava flow/eruption", "VVE" + "Volcanic landslide/mudslide", "VVL" + + +The input format codes are designed to be easier to populate and recognize by an analyst. The reason for the slightly counterintuitive form of some of the abbreviations is that they are designed so that a predominant peril can quickly be identified by searching for one particular character in the abbreviations: ‘B’ for Fire, ‘O’ for Flood, ‘Q’ for Quake, ‘X’ for Convective storm, ‘Z’ for Winter storm, ‘W’ for Wind, ‘M’ for Terrorism. + +As well as the individual peril codes in the above table, there are also codes for common groupings of perils as shown in the table below. + +.. csv-table:: + :widths: 130,30 + :header: "Peril Group", "Input Code" + + "Earthquake perils", "QQ1" + "Windstorm with storm surge", "WW1" + "Windstorm w/o storm surge", "WW2" + "Flood w/o storm surge", "OO1" + "Winter storm", "ZZ1" + "Convective storm", "XX1" + "Convective storm incl. winter storm (for RMS users)", "XZ1" + "Terrorism", "MM1" + "Wildfire with smoke", "BB1" + "Pandemic", "PP1" + "Crop", "GG1" + "Cyber", "CC1" + "Volcanic", "VV1" + "All perils", "AA1" + + +There are several fields in the OED input tables for storing the peril codes. + +Firstly, there are two fields that indicate whether or not a peril is covered for a particular location or policy: **LocPerilsCovered** and **PolPerilsCovered** respectively. These can be used to exclude a certain peril completely from a location or a particular policy. + +Secondly, there are fields that indicate the perils that a particular level of financial structure covers: **LocPeril, CondPeril, PolPeril, AccPeril** and **ReinsPeril**. These indicate the perils that the financial terms (limits or deductibles) in that particular row of data apply to. + +Note that this means there are two peril code fields at location and policy level (**LocPerilsCovered / LocPeril and PolPerilsCovered / PolPeril**). The **LocPerilsCovered** and **PolPerilsCovered** fields define the overall coverage for a location or policy irrespective of financial fields. This makes it much easier for the analyst to filter locations or policies that cover specific perils. + +For all of these peril fields, the peril codes (either individual or peril-group codes) are entered separated by semi-colons. So for example, if a location covered wind (including all wind sub-perils) and earthquake (including all EQ sub-perils) then the users would enter *‘QQ1;WW1’* in the **LocPerilsCovered** field. If there is a policy level limit that only applies to wind, then the user would enter *‘WW1’* in the **PolPerils** field. + +The way these peril codes have been designed means there is great flexibility in indicating the coverage or exclusion of perils and allowing different limits and deductibles to apply to different perils. Some examples of this are shown in the examples part of the **Financial Details** section. diff --git a/docs/source/explanation/images/Hierarchy.png b/docs/source/explanation/images/Hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..61dd46637649ea7bb8501bd8ea809240c3621cd5 GIT binary patch literal 15575 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. + +## The exposure hierarchy + +OED follows an organisational and financial hierarchy familiar to catastrophe-model users: + +Coverage +: The lowest level — the specific type of cover: **Buildings**, **Other** (e.g. appurtenant + structures or motor), **Contents**, and **Business Interruption** (time element). Primary + financial terms can attach at coverage level, across property damage (PD = Buildings + + Other + Contents), or across all coverages. + +Location +: A site — a group of coverages at one place. Primary financial terms and facultative + reinsurance can attach here. A single location record can represent several buildings + (`NumberOfBuildings`), and related locations can be linked (`LocGroup`). + +Policy +: A financial structure applying to a set of locations. Multiple policies can exist under + the same account and apply to the same locations (e.g. insurance layers). Within a policy, + a **special condition** applies sub-limits/sub-deductibles to a subset of locations. + Reinsurance can attach at policy level. + +Account +: The top organisational level, grouping policies. A **portfolio** (`PortNumber`) groups + accounts. + +## Coded values + +Many OED fields draw on controlled vocabularies (perils, occupancy, construction, country, +coverage). Those allowed values are in the {doc}`coded values reference <../reference/values>`. + +## Detailed chapters + +The full specification narrative, migrated from the OED standard documents: + +```{toctree} +:maxdepth: 1 + +rationale +import-format +asset-details +geography-perils +financial-primary +financial-policy-conditions +reinsurance +``` diff --git a/docs/source/explanation/rationale.rst b/docs/source/explanation/rationale.rst new file mode 100644 index 00000000..fa7de445 --- /dev/null +++ b/docs/source/explanation/rationale.rst @@ -0,0 +1,44 @@ +Rationale +========= + +The need for a new (re)insurance industry exposure data standard arose from the lack of such an existing standard for Oasis based models. Exposure data is the starting point for catastrophe risk analysis, and without such a standard in place it is impossible to give users guidance and documentation on how to prepare their input data and enable appropriate validation within Oasis based modelling platforms. + +The Oasis financial model (FM) enables a wide variety of model developers to use one consistent financial model: it is a key part of the utility of the Oasis framework. However, it is important that financial fields in the exposure data correspond well with the financial model to enable the full scope of the financial model to be used. The OED has been designed from the outset to work well with, and enable the full functionality of, the Oasis FM. + +The OED also provides companies with a starting point for implementing a model-developer-independent exposure data repository, which is strategically beneficial as it prevents firms being locked in to any one particular model developer. + +Although OED is designed to work well with Oasis based models, the scope of OED is wider than Oasis. For example, financial fields exist in OED which are not yet implemented in Oasis and secondary modifiers that exist in OED which are not currently used by any Oasis based model. However, Oasis LMF continue to expand the scope of their FM with the aim to support as much of the OED functionality as possible. + +In the meantime, users should consult their platform / model specific documentation to understand which elements within OED are being used by a certain model at a particular time. + + +OED Abbreviations +----------------- + +The following abbreviations are used in OED field names: + +.. csv-table:: + :widths: 8, 40 + :header: "Abbreviation", "Description" + + "Acc", "Account" + "Agg", "Aggregate" + "BI", "Business interruption, but also used to denote other time-based coverage insurable values such as alternative living expenses" + "Cond", "Condition (as in special condition such as sub-limit or sub-deductible)" + "Cov", "Coverage" + "Ded", "Deductible" + "Def", "Defined (as in user defined)" + "FX", "Exchange rate" + "LOB", "Line of business" + "Loc", "Location" + "Max", "Maximum" + "Min", "Minimum" + "Occ", "Occurrence" + "Org", "Original" + "PD", "Property damage" + "POI", "Period of indemnity" + "Pol", "Policy" + "Port", "Portfolio" + "Reins", "Reinsurance" + "TIV", "Total insurable value" + "Vuln", "Vulnerability" diff --git a/docs/source/explanation/reinsurance.rst b/docs/source/explanation/reinsurance.rst new file mode 100644 index 00000000..ebb4c641 --- /dev/null +++ b/docs/source/explanation/reinsurance.rst @@ -0,0 +1,364 @@ +Reinsurance +============ + +There are many different types of reinsurance available and many different combinations of financial terms that can apply within each type of reinsurance. The scope of each reinsurance contract, and the definition of risk level that applies within a contract (if there are per-risk terms), are also important considerations that are discussed in the following sections. + +| + +Reinsurance Types and Terms +########################### + +OED has been designed to allow capture of a broad range of reinsurance terms without the need to enter any information directly through a user interface. The range of reinsurance types that are currently considered within OED are as follows. + +| + +.. csv-table:: + :header: "Type of Reinsurance", "Value in ReinsType Field", "Notes" + + "Facultative", "FAC", "Excess of loss (or sometimes proportional) contract applicable at location, location group, policy or account level. The risk level must be consistent with the field used to define the scope. **RiskLimit, RiskAttachment** and **PlacedPercent** are typically the fields used." + "Quota Share", "QS", "A proportional contract applicable to a tranche of exposure defined using the reinsurance scope filter fields. **PlacedPercent**, and sometimes **RiskLimit** and **OccLimit** are typically the fields used." + "Surplus Share", "SS", "A proportional contract where the proportion ceded varies by risk. The risk level must be consistent with the field used to define the scope. **CededPercent** must be specified for each risk in the reinsurance scope table. **OccLimit** is sometimes also used." + "Per Risk Treaty", "PR", "An excess of loss contract applying per-risk to a tranche of exposure defined using the reinsurance scope filter fields. 'RiskLimit, RiskAttachment' and sometimes 'PlacedPercent' and 'OccLimit' are the fields typically used." + "Catastrophe Excess of Loss", "CXL", "An excess of loss contract applying per-event to a tranche of exposure defined using the reinsurance scope filter fields. **OccLimit, OccAttachment** and sometimes **PlacedPercent** are the fields typically used." + "Aggregate Excess of Loss", "AXL", "An aggregate excess of loss contract applying per-period to a tranche of exposure defined using the reinsurance scope filter fields. **AggLimit, AggAttachment** and sometimes **PlacedPercent** are the fields typically used." + + +The fields used to define reinsurance financial terms are given in the table below. These are all specified in the reinsurance info table, although for surplus treaties note that **CededPercent** must be specified in the reinsurance scope table. + +| + +.. csv-table:: + :widths: 18, 60 + :header: "Field Name", "Description" + + "RiskLevel", "The definition of risk. See below for more information." + "RiskLimit", "Limit applicable to the losses from an event at the defined **RiskLevel.**" + "RiskAttachment", "Attachment applicable to the losses from an event at the defined **RiskLevel.**" + "OccLimit", "Limit applicable to the sum of losses from an event." + "OccAttachment", "Attachment applicable to the sum of losses from an event." + "OccFranchiseDed", "A per-occurrence deductible that vanishes when it is exceeded." + "OccReverseFranchise", "The total event loss is excluded from the treaty if the reverse franchise threshold is exceeded." + "AggLimit", "Limit applicable to the sum of losses within an **AggPeriod.**" + "AggAttachment", "Attachment applicable to the sum of losses within an **AggPeriod.**" + "AggPeriod", "The period within which to sum losses (in days)." + "InuringPriority", "Indicates the order in which reinsurance applies. 1 denotes the contract that applies first." + "Reinstatement", "The number of reinstatements." + "CededPercent", "The percentage applied to the gross loss entering the reinsurance contracts before other reinsurance terms. Predominantly used for surplus treaties. Unlike all the other terms in this table, **CededPercent** is specified in the reinsurance scope table for surplus treaties and in the reinsurance info table for all other treaty types." + "PlacedPercent", "The percentage applied to the reinsurance loss after other reinsurance terms. Predominantly used for all contracts other than surplus treaties." + "TreatyShare", "The treaty share which is applicable to the individual reinsurer." + + +| + +Risk Level +########## + +The term ‘risk level’ in the table above refers to what is defined as a ‘risk’ in the context of the particular reinsurance treaty. The definition of what constitutes a risk is an involved subject, but the reinsured usually defines this. For example, a risk could be one building in a large spread-out site, a number of buildings defined by such a site, a combination of sites close together, or a policy layer or account. + +In the context of OED a risk-level is specified in the **RiskLevel** field in the reinsurance info table and can be defined as either location (*LOC*), location-group (*LGR*), policy (*POL* - including individual layers) or account level (ACC). Risk level is only relevant for reinsurance contracts with risk-level terms. However, this can include facultative contracts, quota share and surplus treaties and catastrophe excess of loss contracts as well as per-risk treaties. + +| + +Reinsurance Percentages and Calculation Order +############################################# + +There are various percentages defined in OED that are applicable to reinsurance, and several kinds of limits and attachments so it is important to be clear about the order in which they work. The main principles are outlined below. + +The loss applicable to a reinsurance contract is the gross loss (assuming no inuring reinsurance contracts). In other words the loss to which reinsurance terms are applied is the ground-up loss net of all primary insurance limits, deductibles and shares. + +The order of application of reinsurance terms is then as follows: + +1. **CededPercent** is applied to the gross loss. This applies before any other reinsurance terms including per risk terms, per occurrence terms or aggregate terms. This is typically used in surplus treaties (in the reinsurance scope table) where event limits within such treaties are always specified in terms of treaty loss (and not in terms of the gross loss). It could also be used within quota share treaties (within the reinsurance info table) if the risk or event limit terms within a quota share treaty are specified in terms of treaty loss rather than gross loss (although this is unusual). + +2. Risk terms are applied. + +3. Occurrence terms are applied. + +4. Aggregate terms are applied. + +5. **PlacedPercent** is applied. This applies after all other reinsurance terms. This is the percentage field that is normally used for treaty types other than surplus. + +| + +Examples of OED Tables Including Reinsurance +############################################ + +The examples below demonstrate how the reinsurance info and reinsurance scope tables work and interact with the account and location tables. As with the other examples in this document, not all the required fields are shown in the tables. + +**Example 1 - Facultative Reinsurance** + +The tables below demonstrate two facultative reinsurance contracts, one at location level and one at policy level. + +A 0.5m xs 1m location level facultative contract applies to location 2 in account 1, and a 1.2m xs 2.0m policy level facultative reinsurance contract applies to policy 1 in account 3. + +| + +OED Account file: + +.. csv-table:: + :widths: 10,10,10,12,12,15,10 + :header: "PortNumber", "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + "1", "1", "1", "0", "50,000", "0", "1,500,000" + "1", "2", "1", "2", "0.05", "0", "1,500,000" + "1", "3", "1", "1", "0.10", "2", "0.80" + +| + +OED Location file: + +.. csv-table:: + :widths: 8,8,8,8,12,10 + :header: "PortNumber", "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1", "1,000,000", "0", "10,000" + "1", "2", "1", "1,000,000", "2", "0.01" + "1", "1", "2", "1,000,000", "1", "0.05" + "1", "2", "2", "2,000,000", "0", "15,000" + "1", "1", "3", "2,000,000", "0", "10,000" + "1", "2", "3", "2,000,000", "2", "0.10" + +| + +OED Reinsurance Info file: + +.. csv-table:: + :widths: 10,10,12,10,10,10,10 + :header: "ReinsNumber", "ReinsType", "RiskAttachment", "RiskLimit", "PlacedPercent", "InuringPriority", "RiskLevel" + + "1", "FAC", "1,000,000", "500,000", "1.0", "1", "LOC" + "2", "FAC", "2,000,000", "1,200,000", "1.0", "1", "POL" +  +| + +OED Reinsurance Scope file: + +.. csv-table:: + :header: "ReinsNumber", "PortNumber", "AccNumber", "PolNumber", "LocNumber" + + "1", "1", "1", "", "2" + "2", "1", "3", "1", "" + +| + +The reinsurance info table must contain one row per **ReinsNumber**. **ReinsNumber** must be unique in this table. Although not shown, the reinsurance info table must always contain the **ReinsPeril** field, indicating which perils the reinsurance contract covers. + +Facultative contracts are typically 100% placed and so **PlacedPercent** is 1.0. Given that these are contracts on different accounts there is no concept of one contract inuring to the benefit of the other and so the **InuringPriority** is 1. + +The reinsurance scope table must contain at least one entry for every **ReinsNumber** in the reinsurance info table. Although not the case in this example, it can contain more than one entry for a given **ReinsNumber**. + +Only four of the ten possible filter fields are shown in the example above: **PortNumber, AccNumber, PolNumber** and **LocNumber**. + +The combination of the filter fields for **ReinsNumber = 1** means that the facultative contract will apply to the records where the following logical statement is true: + +**PortNumber = 1** AND **AccNumber = 1** AND **LocNumber = 2** + +i.e. to location 2 in account 1 in portfolio 1. + +For **ReinsNumber** 2 the facultative contract will apply to the records where the following logical statement is true: + +**PortNumber = 1** AND **AccNumber = 3** AND **PolNumber = 1** + +i.e. to policy 1 in account 3 in portfolio 1. + +The **RiskLevel** is defined as *LOC* for **ReinsNumber** 1 and *POL* for **ReinsNumber** 2. + +The only filter fields that can be used for facultative (and surplus treaties) are **PortNumber, AccNumber, PolNumber, LocNumber** and **LocGroup** – i.e. portfolio plus the filter fields that correspond with the different risk levels: *ACC, POL, LOC* and *LGR*. + +| + +**Example 2 – Quota Share Reinsurance** + +The example shows the OED specification for a 20% quota share reinsurance contract, applying to locations within Great Britain in portfolio 1, with a risk limit of 100,000 and an event limit of 1,000,000. ‘Risk’ is defined as a location, and risk and event limits are specified in terms of gross amount (i.e. the loss before the application of the 20% quota share). + + +OED Account file: + +.. csv-table:: + :widths: 8,8,8,8,8,8,8 + :header: "PortNumber", "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + + "1", "1", "1", "0", "50,000", "0", "1,500,000" + "1", "2", "1", "2", "0.05", "0", "1,500,000" + "1", "3", "1", "1", "0.10", "2", "0.80" + +| + +OED Location file: + + +.. csv-table:: + :widths: 8,8,8,8,8,8,8 + :header: "PortNumber", "LocNumber", "AccNumber", "CountryCode", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1", "GB", "1,000,000", "0", "10,000" + "1", "2", "1", "GB", "1,000,000", "2", "0.01" + "1", "1", "2", "GB", "1,000,000", "1", "0.05" + "1", "2", "2", "GB", "2,000,000", "0", "15,000" + "1", "1", "3", "DE", "2,000,000", "0", "10,000" + "1", "2", "3", "DE", "2,000,000", "2", "0.10" + + + +OED Reinsurance Info file: + +.. csv-table:: + :header: "ReinsNumber", "ReinsType", "RiskLimit", "OccLimit", "PlacedPercent", "InuringPriority", "RiskLevel" + + "1", "QS", "100,000", "1,000,000", "0.20", "1", "LOC" + +| + +OED Reinsurance Scope file: + +.. csv-table:: + :header: "ReinsNumber", "PortNumber", "AccNumber", "PolNumber", "LocNumber", "CountryCode" + + "1", "1", "","","", "GB" + + +| + +In the reinsurance info table in the example above, **PlacedPercent** is used to specify the 20% quota share. This means that the risk and occurrence limits will apply before the application of the 20%. In other words, the risk and occurrence terms apply to the gross figure. This is normally the way quota share treaties are worded (so that it is clear how the risk and occurrence limits relate to the attachments of other per-risk and per-occurrence contracts that the reinsured may have). + +However, some quota share treaties are worded with limits applying to the amount ceded to the treaty (i.e. after application of the 20%). If that is the case, then the user can specify 0.2 in the **CededPercent** field instead of **PlacedPercent**: **CededPercent** always applies to the incoming loss before any other terms (**PlacedPercent** always applies to the loss after all other terms). Alternatively, the user could gross up the limits to represent 100% values and continue to use **PlacedPercent**. + +The logic in the reinsurance scope table means that only items with **PortNumber = 1** AND **CountryCode = GB** will be covered by the quota share contract. This means that losses from locations in account 3 will not be ceded to this treaty (as the locations in account 3 are in Germany). + +| + + +**Example 3 - Surplus share reinsurance** + +The example shows how a 3-line surplus treaty with a retention of 500,000 is specified in OED. The surplus treaty has an event limit of 3,000,000 (applicable to the loss ceded to the treaty, not the gross amount), and ‘risk’ is defined as the location. + +OED Account file: + +.. csv-table:: + :widths: 10,10,10,12,12,12,10 + :header: "PortNumber", "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + "1", "1", "1", "0", "50,000", "0", "1,500,000" + "1", "2", "1", "2", "0.05", "0", "1,500,000" + "1", "3", "1", "1", "0.10", "2", "0.80" + +| + +OED Location file: + +.. csv-table:: + :widths: 8,8,8,10,12,12 + :header: "PortNumber", "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1", "1,000,000", "0", "10,000" + "1", "2", "1", "1,000,000", "2", "0.01" + "1", "1", "2", "1,000,000", "1", "0.05" + "1", "2", "2", "2,000,000", "0", "15,000" + "1", "1", "3", "2,000,000", "0", "10,000" + "1", "2", "3", "2,000,000", "2", "0.10" +  +| + +OED Reinsurance Info file: + +.. csv-table:: + :widths: 8,8,8,8,8,8,8 + :header: "ReinsNumber", "ReinsType", "RiskLimit", "OccLimit", "PlacedPercent", "InuringPriority", "RiskLevel" + + "1", "SS", "0", "3,000,000", "1.0", "1", "LOC" + +| + +OED Reinsurance Scope file: + +.. csv-table:: + :header: "ReinsNumber", "PortNumber", "AccNumber", "PolNumber", "LocNumber", "CededPercent" + + "1", "1", "1", "", "1", "0.50" + "1", "1", "1", "", "2", "0.50" + "1", "1", "2", "", "1", "0.50" + "1", "1", "2", "", "2", "0.75" + "1", "1", "3", "", "1", "0.75" + "1", "1", "3", "", "2", "0.75" + +| + +For surplus treaties, **CededPercent** must be specified for each risk in the reinsurance scope table. + +Unlike in the previous quota share example, the 3,000,000 event limit specified in the reinsurance info table applies to losses after the application of the surplus percentage. This is because **CededPercent** is always used for surplus treaties, and **CededPercent** applies before any other terms. + +With surplus treaties, the following rule must be followed (they are the same as for facultative treaties): + +• Only the filter fields **PortNumber, AccNumber, PolNumber, LocNumber** & **LocGroup** can be used with surplus treaties. + +| + +**Example 4 - Per-risk and cat XL reinsurance** + +The example below shows the specification of two reinsurance treaties – both of which apply to portfolios 1 and 2, with the per-risk contract inuring to the benefit of the cat XL contract. + + +OED Account file: + +.. csv-table:: + :widths: 8,8,8,8,8,8,8 + :header: "PortNumber", "AccNumber", "PolNumber", "PolDedType6All", "PolDed6All", "PolLimitType6All", "PolLimit6All" + + "1", "1", "1", "0", "50,000", "0", "1,500,000" + "1", "2", "1", "2", "0.05", "0", "1,500,000" + "2", "1", "1", "1", "0.10", "2", "0.80" + + +| + +OED Location file: + +.. csv-table:: + :widths: 5,5,5,5,8,6 + :header: "PortNumber", "LocNumber", "AccNumber", "BuildingTIV", "LocDedType1Building", "LocDed1Building" + + "1", "1", "1", "1,000,000", "0", "10,000" + "1", "2", "1", "1,000,000", "2", "0.01" + "1", "1", "2", "1,000,000", "1", "0.05" + "1", "2", "2", "2,000,000", "0", "15,000" + "2", "1", "1", "2,000,000", "0", "10,000" + "2", "2", "1", "2,000,000", "2", "0.10" + +| + +OED Reinsurance Info file: + +.. csv-table:: + :header: "ReinsNumber", "ReinsType", "RiskAttachment", "RiskLimit", "OccAttachment", "OccLimit", "InuringPriority", "RiskLevel" + + "1", "PR", "500,000", "1,500,000", "0", "0", "1", "LOC" + "2", "CXL", "0", "0", "3,000,000", "3,000,000", "2" + +| + + +OED Reinsurance Scope file: + +.. csv-table:: + :header: "ReinsNumber", "PortNumber", "AccNumber", "PolNumber", "LocNumber" + + "1", "1", "", "", "" + "1", "2", "", "", "" + "2", "1", "", "", "" + "2", "2", "", "", "" + +| + +Note that the account and location tables now contain exposures from two portfolios. + +The **InuringPriority** field specifies the order in which treaties apply. Here the per-risk contract applies before (i.e. inures to the benefit of) the Cat XL. This means that the losses that enter the Cat XL treaty are net of any recoveries from the Per-risk treaty. The **InuringPriority** values do not need to be consecutive – the treaty with the lowest number will always be applied before the treaty with the higher number. + +The reinsurance scope table contains two rows per treaty. This is to indicate that the treaties apply to both portfolio 1 and portfolio 2. The scope of each reinsurance treaty is defined by those records that satisfy the logical statement: **PortNumber** = *1* OR **PortNumber** = *2*. i.e. records either in portfolio 1 or 2. + +Essentially, within each **ReinsNumber**, each row of the reinsurance scope table acts as an OR operator and each filtering column acts as an AND operator. Although only four reinsurance scope fields are shown in the table above, all 10 reinsurance scope filtering fields could be used to define the scope of quota share, per-risk, cat XL or aggregate XL treaties. + +The **RiskLevel** of the per-risk treaty is defined at location level (*LOC*). For the Cat XL treaty in this example there are no risk terms and so the **RiskLevel** is left blank. + + + diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 00000000..c4674125 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,39 @@ +# Open Exposure Data (OED) + +**OED** is the open standard for catastrophe-model **exposure data** — a common format for +describing locations, accounts, policy terms and reinsurance, so that exposure can be moved +between models and tools without bespoke conversion. It is the exposure counterpart to +[ORD](https://github.com/OasisLMF/ODS_OpenResultsData) (results data), together forming the +Open Data Standards (ODS) maintained by the ODS Steering Committee. + +This site is the reference for the standard. The field and coded-value definitions are +generated directly from the authoritative `oed.json` in this repository, so they always match +the released specification. + +::::{grid} 1 1 2 2 +:gutter: 3 + +:::{grid-item-card} 📖 Explanation +:link: explanation/index +:link-type: doc + +What OED is, the file structure (Location / Account / Reinsurance), the exposure hierarchy, +and how financial terms and perils are represented. +::: + +:::{grid-item-card} 📋 Reference +:link: reference/index +:link-type: doc + +The generated field reference for every input file, plus the coded value lists (perils, +occupancy, construction, country, coverage). +::: +:::: + +```{toctree} +:hidden: +:maxdepth: 2 + +explanation/index +reference/index +``` diff --git a/docs/source/reference/fields.md b/docs/source/reference/fields.md new file mode 100644 index 00000000..ce5d810a --- /dev/null +++ b/docs/source/reference/fields.md @@ -0,0 +1,24 @@ +# OED fields + +The input fields for each OED file, grouped by file. **Status** is the field's requirement +level for property business: + +```{list-table} +:header-rows: 0 +:widths: 10 90 + +* - `R` + - Required +* - `O` + - Optional +* - `CR` + - Conditionally required (required in certain circumstances — see the field description) +* - `n/a` + - Not applicable to this file / line of business +``` + +Line-of-business status for Cyber, Liability and Marine Cargo is carried in `oed.json` +(`Cyber/Liability/Marine Cargo field status`); the table below shows the property status. + +```{include} _generated/oed_fields.md +``` diff --git a/docs/source/reference/index.md b/docs/source/reference/index.md new file mode 100644 index 00000000..49c7e17a --- /dev/null +++ b/docs/source/reference/index.md @@ -0,0 +1,11 @@ +# Reference + +The authoritative OED schema. These pages are generated at build time from `oed.json` in +this repository — edit the spec (and its source CSVs), not the generated tables. + +```{toctree} +:maxdepth: 2 + +fields +values +``` diff --git a/docs/source/reference/values.md b/docs/source/reference/values.md new file mode 100644 index 00000000..563de564 --- /dev/null +++ b/docs/source/reference/values.md @@ -0,0 +1,8 @@ +# Coded values + +The controlled vocabularies used by OED coded fields — perils, occupancy, construction, +country and coverage. These are the allowed values for the corresponding fields in the +{doc}`field reference `. + +```{include} _generated/oed_values.md +``` From ac9ea2fa58c0c690b15ea7d9871ea307a1897cfb Mon Sep 17 00:00:00 2001 From: sstruzik Date: Fri, 17 Jul 2026 17:51:15 +0100 Subject: [PATCH 2/6] docs: shared Oasis branding (logo, palette, home link) Add the Oasis logo (light/dark, always visible in the Furo sidebar), the maroon/red Raleway palette matching oasislmf.github.io, and a persistent 'Oasis documentation home' link (rewritten to page-relative by the aggregator) so you can return to the top of the aggregated site from anywhere. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/source/_static/OASIS_LMF_COLOUR.png | Bin 0 -> 88818 bytes docs/source/_static/OASIS_LMF_WHITE.png | Bin 0 -> 79084 bytes docs/source/conf.py | 25 +++++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 docs/source/_static/OASIS_LMF_COLOUR.png create mode 100644 docs/source/_static/OASIS_LMF_WHITE.png diff --git a/docs/source/_static/OASIS_LMF_COLOUR.png b/docs/source/_static/OASIS_LMF_COLOUR.png new file mode 100644 index 0000000000000000000000000000000000000000..eac8dc49ec33c385bb9eabe0f71c037c975ad6a4 GIT binary patch literal 88818 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�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

20g55vFPKQVN^fkoT*YaJk`0Ug>d-Mh&g- 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/OASIS_LMF_WHITE.png b/docs/source/_static/OASIS_LMF_WHITE.png new file mode 100644 index 0000000000000000000000000000000000000000..8aec5a7ab417c948a78ac0e76180cbc3183a9e6d GIT binary patch literal 79084 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%0DZ$YBK0^_&RQF?!7d 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 qx' + '⌂ Oasis documentation home') + if "https://fonts.googleapis.com/css?family=Raleway" not in (globals().get("html_css_files") or []): + html_css_files = list(globals().get("html_css_files") or []) + ["https://fonts.googleapis.com/css?family=Raleway"] From fc7e32fe4db750b8dccc456db9b79146f0b86b3b Mon Sep 17 00:00:00 2001 From: sstruzik Date: Wed, 5 Aug 2026 16:22:03 +0100 Subject: [PATCH 3/6] docs: drop the announcement bar, add GitHub link to the footer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sidebar logo now returns to the aggregated landing, so the redundant 'Oasis documentation home' announcement bar is removed. Add the GitHub link in Furo's conventional spot — the footer icons (bottom of every page). Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/source/conf.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index a0b9a476..c959678f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,8 +50,7 @@ _k: (_v[0], _v[1]) for _k, _v in _ix_json.loads(_ix_os.environ.get("OASIS_INTERSPHINX_MAP", "{}")).items() }) -# -- Oasis shared branding (logo, palette, home link) ----------------------- -import os as _os_brand +# -- Oasis shared branding (logo, palette, GitHub footer) ------------------- if globals().get("html_theme") == "furo": if "_static" not in (globals().get("html_static_path") or []): html_static_path = list(globals().get("html_static_path") or []) + ["_static"] @@ -68,10 +67,10 @@ _dcv = html_theme_options.setdefault("dark_css_variables", {}) _dcv.setdefault("color-brand-primary", "#e2919b") _dcv.setdefault("color-brand-content", "#ef8b93") - _home = _os_brand.environ.get("OASIS_DOCS_HOME", "https://oasislmf.github.io/index.html") - html_theme_options.setdefault( - "announcement", - '' - '⌂ Oasis documentation home') + # GitHub link — Furo's conventional spot is the footer icons (bottom of every page) + html_theme_options.setdefault("footer_icons", [{ + "name": "GitHub", "url": "https://github.com/OasisLMF", "class": "", + "html": '', + }]) if "https://fonts.googleapis.com/css?family=Raleway" not in (globals().get("html_css_files") or []): html_css_files = list(globals().get("html_css_files") or []) + ["https://fonts.googleapis.com/css?family=Raleway"] From f5581913d2a2365dfe5331e173137cb4aa77a079 Mon Sep 17 00:00:00 2001 From: sstruzik Date: Tue, 18 Aug 2026 12:26:50 +0100 Subject: [PATCH 4/6] docs: do not crash when OASIS_INTERSPHINX_MAP is set but empty `environ.get(NAME, "{}")` only substitutes the default when the variable is UNSET, so exporting it empty reached json.loads("") and aborted the build with a traceback instead of falling back to no cross-component inventories. Now `environ.get(NAME) or "{}"`. Latent rather than live: the GenerateDocs orchestrator always writes valid JSON via json.dumps, so it triggers only when the variable is exported empty by hand or by a CI step. Found while reworking the same block in ODS_Tools (#289, 10e38ba) and applied across the remaining components for consistency. Verified by executing conf.py with the variable unset, set-but-empty and mapped: all three succeed, and any pre-existing intersphinx_mapping entries are preserved. Co-Authored-By: Claude Opus 5 (1M context) --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index c959678f..0910ac10 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -48,7 +48,7 @@ intersphinx_mapping = {} intersphinx_mapping.update({ _k: (_v[0], _v[1]) - for _k, _v in _ix_json.loads(_ix_os.environ.get("OASIS_INTERSPHINX_MAP", "{}")).items() + for _k, _v in _ix_json.loads(_ix_os.environ.get("OASIS_INTERSPHINX_MAP") or "{}").items() }) # -- Oasis shared branding (logo, palette, GitHub footer) ------------------- if globals().get("html_theme") == "furo": From 10e3b14f3dee87501b7327a8a84a88f83b1c8c92 Mon Sep 17 00:00:00 2001 From: sstruzik Date: Tue, 18 Aug 2026 12:31:16 +0100 Subject: [PATCH 5/6] style: split the one-line import in the docs conf.py (E401) autopep8 --diff --exit-code, which OasisLMF runs recursively over the repo, flagged `import json as _ix_json, os as _ix_os` as E401. Pre-existing, and dormant only because the code-quality workflow is not among the checks triggered on the docs PRs. Same change ODS_Tools already took in eb349ea, so all six components now have an identical, lint-clean cross-component block. Verified: 0 autopep8 findings for this file (was 3), the CI flake8 selection is clean, and conf.py still executes with OASIS_INTERSPHINX_MAP unset, set-but-empty and mapped. Co-Authored-By: Claude Opus 5 (1M context) --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 0910ac10..71525338 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -39,7 +39,8 @@ # The GenerateDocs orchestrator sets OASIS_INTERSPHINX_MAP (JSON) to point cross-references at # the other components' built inventories; standalone builds add nothing. Use explicit roles, # e.g. {external+ord:doc}`reference/tables` or :external+oed:ref:`some-label`. -import json as _ix_json, os as _ix_os +import json as _ix_json +import os as _ix_os if "sphinx.ext.intersphinx" not in extensions: extensions = list(extensions) + ["sphinx.ext.intersphinx"] try: From 32042757cdf00c2d39f3d0ebd2a618c9cc0dc7bf Mon Sep 17 00:00:00 2001 From: sstruzik Date: Wed, 19 Aug 2026 09:26:51 +0100 Subject: [PATCH 6/6] docs: repoint the OED spec links at this repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The link check (GenerateDocs#54) found two links to OpenDataStandards/tree/master/OpenExposureData/Docs, which 404s — that path went when the Open Data Standards repo was split. The equivalent lives here: ODS_OpenExposureData/tree/main/Docs (verified 200). Note two further links in import-format.rst still point at OpenDataStandards/tree/master/OpenExposureData. Those resolve today, so the check does not flag them, but they reference the superseded repository rather than this one — worth a follow-up sweep, kept out of here to stay a fix for what is actually broken. Co-Authored-By: Claude Opus 5 (1M context) --- docs/source/explanation/geography-perils.rst | 2 +- docs/source/explanation/import-format.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/explanation/geography-perils.rst b/docs/source/explanation/geography-perils.rst index 7fe2a217..5d157293 100644 --- a/docs/source/explanation/geography-perils.rst +++ b/docs/source/explanation/geography-perils.rst @@ -55,7 +55,7 @@ The OED format caters for a wide variety of models from different model develope For example, a model developer may want to split each country up into four equal areas ‘A’, ‘B’, ‘C’, ‘D’. In this case they would define a new GeogScheme code e.g. ‘QUAD’. They would communicate to users of their model that they must specify GeogName values ‘A’, ‘B’, ‘C’ or ‘D’ for their new ‘QUAD’ GeogScheme. The model user would then populate one of the GeogScheme / GeogName pairs with ‘QUAD’ and ‘A’, ‘B’, ‘C’ or ‘D’ respectively. This provides a large amount of flexibility to cope with different user and model developer requirements. -GeogScheme codes are up to five characters (no special characters). The latest codes can be found in the Open Exposure Data Spec spreadsheet on the OED GitHub repository in https://github.com/OasisLMF/OpenDataStandards/tree/master/OpenExposureData/Docs +GeogScheme codes are up to five characters (no special characters). The latest codes can be found in the Open Exposure Data Spec spreadsheet on the OED GitHub repository in https://github.com/OasisLMF/ODS_OpenExposureData/tree/main/Docs Users can also specify their own schemes (e.g. for reporting purposes). The only requirement here is that any user defined scheme codes **must start with ‘X’** in order to avoid a potential code clash with future model developer schemes. diff --git a/docs/source/explanation/import-format.rst b/docs/source/explanation/import-format.rst index 684495ec..f45827c5 100644 --- a/docs/source/explanation/import-format.rst +++ b/docs/source/explanation/import-format.rst @@ -10,7 +10,7 @@ The import format for OED is defined by four .csv files: The fields in each file and their corresponding data type are described in the ‘OED Input Fields’ tab in the OED Data Spec spreadsheet found here: -https://github.com/OasisLMF/OpenDataStandards/tree/master/OpenExposureData/Docs +https://github.com/OasisLMF/ODS_OpenExposureData/tree/main/Docs Location ('loc') Import File